@vascend/talos 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/agent.d.ts +16 -3
- package/dist/core/agent.js +114 -34
- package/dist/core/background.d.ts +10 -3
- package/dist/core/background.js +55 -9
- package/dist/core/bootstrap.js +1 -0
- package/dist/core/compaction.js +1 -1
- package/dist/core/config-storage.d.ts +5 -0
- package/dist/core/config-storage.js +83 -0
- package/dist/core/config.d.ts +11 -2
- package/dist/core/config.js +24 -8
- package/dist/core/context-ledger.js +2 -1
- package/dist/core/context-policy.d.ts +1 -1
- package/dist/core/context-policy.js +10 -7
- package/dist/core/credentials.js +29 -30
- package/dist/core/effort.d.ts +1 -1
- package/dist/core/effort.js +5 -1
- package/dist/core/execution-guidance.d.ts +1 -1
- package/dist/core/execution-guidance.js +2 -0
- package/dist/core/file-coordination.d.ts +3 -0
- package/dist/core/file-coordination.js +28 -0
- package/dist/core/file-lease-store.d.ts +3 -0
- package/dist/core/file-lease-store.js +28 -12
- package/dist/core/fusion.d.ts +24 -0
- package/dist/core/fusion.js +80 -0
- package/dist/core/model-limits.d.ts +1 -0
- package/dist/core/model-limits.js +5 -1
- package/dist/core/permission-queue.js +15 -15
- package/dist/core/request-plan.js +4 -3
- package/dist/core/session-naming.js +4 -0
- package/dist/core/session.d.ts +4 -2
- package/dist/core/session.js +13 -4
- package/dist/core/settings.d.ts +2 -0
- package/dist/core/settings.js +5 -16
- package/dist/core/step-policy.d.ts +18 -0
- package/dist/core/step-policy.js +6 -0
- package/dist/core/tool-artifacts.d.ts +2 -0
- package/dist/core/tool-artifacts.js +21 -3
- package/dist/core/tool-result-index.js +29 -33
- package/dist/core/tool-result-store.js +6 -5
- package/dist/core/types.d.ts +10 -3
- package/dist/core/user-inbox.d.ts +9 -0
- package/dist/core/user-inbox.js +22 -3
- package/dist/core/user-input.js +1 -1
- package/dist/fusion/autopilot-fast.d.ts +59 -0
- package/dist/fusion/autopilot-fast.js +213 -0
- package/dist/fusion/autopilot.d.ts +75 -0
- package/dist/fusion/autopilot.js +308 -0
- package/dist/fusion/focus.d.ts +30 -0
- package/dist/fusion/focus.js +122 -0
- package/dist/fusion/gate.d.ts +30 -0
- package/dist/fusion/gate.js +95 -0
- package/dist/fusion/jev.d.ts +71 -0
- package/dist/fusion/jev.js +164 -0
- package/dist/fusion/receipts.d.ts +25 -0
- package/dist/fusion/receipts.js +34 -0
- package/dist/fusion/route.d.ts +25 -0
- package/dist/fusion/route.js +84 -0
- package/dist/fusion/run.d.ts +4 -0
- package/dist/fusion/run.js +186 -0
- package/dist/horizon/engine.d.ts +20 -1
- package/dist/horizon/engine.js +57 -0
- package/dist/horizon/index.d.ts +2 -2
- package/dist/horizon/index.js +1 -1
- package/dist/horizon/types.d.ts +29 -0
- package/dist/index.js +12 -0
- package/dist/providers/anthropic-oauth.d.ts +8 -3
- package/dist/providers/anthropic-oauth.js +13 -10
- package/dist/providers/anthropic.d.ts +9 -2
- package/dist/providers/anthropic.js +64 -21
- package/dist/providers/cli-models.d.ts +30 -0
- package/dist/providers/cli-models.js +194 -0
- package/dist/providers/model-effort.js +1 -1
- package/dist/providers/openai-oauth.d.ts +8 -3
- package/dist/providers/openai-oauth.js +9 -3
- package/dist/providers/openrouter-manual-fallback.d.ts +3 -1
- package/dist/providers/openrouter-manual-fallback.js +20 -20
- package/dist/providers/registry.js +3 -2
- package/dist/providers/retry.d.ts +3 -0
- package/dist/providers/retry.js +44 -1
- package/dist/remote/cifratura.d.ts +12 -0
- package/dist/remote/cifratura.js +66 -0
- package/dist/remote/index.d.ts +15 -0
- package/dist/remote/index.js +65 -0
- package/dist/remote/relay-client.d.ts +58 -0
- package/dist/remote/relay-client.js +315 -0
- package/dist/remote/sessione-remota.d.ts +60 -0
- package/dist/remote/sessione-remota.js +266 -0
- package/dist/sdk.d.ts +7 -2
- package/dist/sdk.js +3 -1
- package/dist/tools/builtin.js +41 -20
- package/dist/tools/capabilities.d.ts +3 -1
- package/dist/tools/capabilities.js +5 -2
- package/dist/tools/computer-use.js +2 -1
- package/dist/tools/pagination.js +1 -1
- package/dist/tools/program.js +34 -21
- package/dist/tools/team-tools.js +11 -6
- package/dist/tui/account-entry.js +14 -9
- package/dist/tui/agent-label.d.ts +2 -0
- package/dist/tui/agent-label.js +5 -0
- package/dist/tui/agent-sessions-screen.d.ts +12 -2
- package/dist/tui/agent-sessions-screen.js +62 -16
- package/dist/tui/agent-sessions.d.ts +14 -0
- package/dist/tui/agent-sessions.js +67 -6
- package/dist/tui/bottom-input.d.ts +46 -2
- package/dist/tui/bottom-input.js +358 -59
- package/dist/tui/branding.js +8 -4
- package/dist/tui/capability-lists.d.ts +10 -0
- package/dist/tui/capability-lists.js +41 -0
- package/dist/tui/command-output-registry.js +4 -0
- package/dist/tui/command-transcript.d.ts +1 -1
- package/dist/tui/command-transcript.js +17 -21
- package/dist/tui/commands.js +4 -1
- package/dist/tui/compaction-status.d.ts +7 -0
- package/dist/tui/compaction-status.js +39 -0
- package/dist/tui/config-recovery.d.ts +12 -0
- package/dist/tui/config-recovery.js +54 -0
- package/dist/tui/context-meter.d.ts +3 -0
- package/dist/tui/context-meter.js +35 -8
- package/dist/tui/diff.d.ts +9 -0
- package/dist/tui/diff.js +43 -19
- package/dist/tui/fusion-menu.d.ts +5 -0
- package/dist/tui/fusion-menu.js +89 -0
- package/dist/tui/i18n-catalog.js +312 -1
- package/dist/tui/live-command.d.ts +1 -0
- package/dist/tui/live-command.js +9 -0
- package/dist/tui/live-output.d.ts +1 -0
- package/dist/tui/live-output.js +11 -0
- package/dist/tui/model-details.js +13 -12
- package/dist/tui/model-picker.js +17 -7
- package/dist/tui/model-selection.js +19 -10
- package/dist/tui/native-scrollback.js +5 -0
- package/dist/tui/prompt-queue.d.ts +3 -0
- package/dist/tui/prompt-queue.js +19 -1
- package/dist/tui/provider-label.d.ts +2 -0
- package/dist/tui/provider-label.js +9 -0
- package/dist/tui/provider-menu.js +25 -24
- package/dist/tui/queue-screen.js +2 -1
- package/dist/tui/remote-command.d.ts +7 -0
- package/dist/tui/remote-command.js +79 -0
- package/dist/tui/repl.d.ts +8 -2
- package/dist/tui/repl.js +355 -311
- package/dist/tui/review-store.d.ts +1 -0
- package/dist/tui/review-store.js +28 -7
- package/dist/tui/review-team.js +4 -3
- package/dist/tui/runtime-error.d.ts +2 -0
- package/dist/tui/runtime-error.js +26 -0
- package/dist/tui/selector-mouse.d.ts +1 -0
- package/dist/tui/selector-mouse.js +1 -1
- package/dist/tui/selector.d.ts +7 -0
- package/dist/tui/selector.js +19 -2
- package/dist/tui/session-controls.d.ts +26 -0
- package/dist/tui/session-controls.js +65 -0
- package/dist/tui/session-naming-notice.js +5 -3
- package/dist/tui/session-replay.d.ts +1 -0
- package/dist/tui/session-replay.js +101 -32
- package/dist/tui/session-transcript-layout.d.ts +9 -0
- package/dist/tui/session-transcript-layout.js +41 -0
- package/dist/tui/startup.js +63 -33
- package/dist/tui/status-line.d.ts +1 -1
- package/dist/tui/status-line.js +20 -12
- package/dist/tui/talos-art-data.d.ts +1 -0
- package/dist/tui/talos-art-data.js +2 -0
- package/dist/tui/talos-art.d.ts +1 -0
- package/dist/tui/talos-art.js +9 -0
- package/dist/tui/task-labels.d.ts +1 -0
- package/dist/tui/task-labels.js +8 -0
- package/dist/tui/terminal-text.d.ts +2 -1
- package/dist/tui/terminal-text.js +28 -2
- package/dist/tui/theme.js +2 -2
- package/dist/tui/tool-presentation.d.ts +3 -0
- package/dist/tui/tool-presentation.js +98 -0
- package/dist/tui/tool-style.js +4 -0
- package/dist/tui/transcript-store.d.ts +25 -0
- package/dist/tui/transcript-store.js +151 -0
- package/dist/tui/usage-footer.d.ts +1 -1
- package/dist/tui/usage-footer.js +3 -1
- package/dist/tui/vascend-id.d.ts +49 -0
- package/dist/tui/vascend-id.js +321 -0
- package/dist/tui/web-login-screen.js +4 -3
- package/dist/tui/web-login.d.ts +7 -15
- package/dist/tui/web-login.js +38 -78
- package/dist/tui/worker-transcripts.d.ts +31 -0
- package/dist/tui/worker-transcripts.js +91 -0
- package/dist/vascend/candidate-collector.d.ts +6 -5
- package/dist/vascend/candidate-collector.js +44 -43
- package/dist/vascend/context-lint.js +32 -2
- package/dist/vascend/context-market-selection.js +12 -5
- package/dist/vascend/context-pack-render.js +10 -4
- package/dist/vascend/context-packet-mirrors.d.ts +8 -0
- package/dist/vascend/context-packet-mirrors.js +24 -0
- package/dist/vascend/context-plan-events.d.ts +4 -0
- package/dist/vascend/context-plan-events.js +44 -0
- package/dist/vascend/context-snapshot.js +4 -2
- package/dist/vascend/context-store-reader.d.ts +20 -0
- package/dist/vascend/context-store-reader.js +46 -0
- package/dist/vascend/file-lock.d.ts +1 -0
- package/dist/vascend/file-lock.js +26 -0
- package/dist/vascend/granular-kingdom.d.ts +1 -0
- package/dist/vascend/granular-kingdom.js +22 -15
- package/dist/vascend/kingdom-bus.d.ts +1 -0
- package/dist/vascend/kingdom-bus.js +3 -0
- package/dist/vascend/kingdom-channel.d.ts +2 -0
- package/dist/vascend/kingdom-channel.js +3 -0
- package/dist/vascend/kingdom-live.d.ts +32 -4
- package/dist/vascend/kingdom-live.js +149 -13
- package/dist/vascend/kingdom-run.d.ts +5 -1
- package/dist/vascend/kingdom-run.js +6 -2
- package/dist/vascend/kingdom.d.ts +3 -0
- package/dist/vascend/kingdom.js +20 -13
- package/dist/vascend/memory-packet.d.ts +2 -1
- package/dist/vascend/memory-packet.js +31 -44
- package/dist/vascend/plan-store.d.ts +3 -1
- package/dist/vascend/plan-store.js +6 -4
- package/dist/vascend/room-memory.d.ts +10 -1
- package/dist/vascend/room-memory.js +42 -2
- package/dist/vascend/runtime.d.ts +3 -11
- package/dist/vascend/runtime.js +11 -123
- package/dist/vascend/session-search.js +2 -0
- package/dist/vascend/team-session.js +3 -2
- package/dist/vascend/vision.d.ts +3 -1
- package/dist/vascend/vision.js +6 -4
- package/dist/vascend/worker-session.d.ts +20 -0
- package/dist/vascend/worker-session.js +83 -0
- package/package.json +1 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { DEFAULT_FUSION, fusionAvailability } from "../core/fusion.js";
|
|
2
|
+
import { saveGlobalSettings } from "../core/settings.js";
|
|
3
|
+
import { isDevChannel } from "../fusion/jev.js";
|
|
4
|
+
import { selectOption } from "./selector.js";
|
|
5
|
+
import { notifyStatus } from "./command-feedback.js";
|
|
6
|
+
import { tr } from "./i18n.js";
|
|
7
|
+
import { statoSessione, tokenVascend } from "./vascend-login.js";
|
|
8
|
+
/** Sul canale client il piano si legge dalla sessione Vascend; il backend resta l'autorita'. */
|
|
9
|
+
async function currentTier(harness) {
|
|
10
|
+
if (isDevChannel(harness.env))
|
|
11
|
+
return undefined;
|
|
12
|
+
const token = tokenVascend(harness.env);
|
|
13
|
+
if (!token)
|
|
14
|
+
return undefined;
|
|
15
|
+
const session = await statoSessione(harness.env, token).catch(() => null);
|
|
16
|
+
return session?.stato === "valida" ? session.tier ?? "" : undefined;
|
|
17
|
+
}
|
|
18
|
+
function unavailableText(reason) {
|
|
19
|
+
switch (reason) {
|
|
20
|
+
case "missing_openrouter": return tr("Fusion (dev) richiede una chiave OpenRouter: collegala con /login.", "Fusion (dev) needs an OpenRouter key: connect it with /login.");
|
|
21
|
+
case "missing_login": return tr("Fusion richiede un account Vascend con piano a pagamento: accedi con /login.", "Fusion needs a Vascend account on a paid plan: sign in with /login.");
|
|
22
|
+
case "free_plan": return tr("Fusion è incluso nei piani Vascend a pagamento. Passa a un piano su https://vascend.it/talos.", "Fusion is included in paid Vascend plans. Upgrade at https://vascend.it/talos to enable it.");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function persist(harness, ctl, fusion) {
|
|
26
|
+
saveGlobalSettings(harness.env, { fusion });
|
|
27
|
+
harness.config = { ...harness.config, fusion };
|
|
28
|
+
ctl.refresh?.();
|
|
29
|
+
}
|
|
30
|
+
async function pickRoutes(harness, ctl, theme, terminalColumns, fusion, select) {
|
|
31
|
+
const models = harness.providers.list().flatMap(provider => provider.models.map(model => `${provider.id}/${model}`));
|
|
32
|
+
let routes = [...fusion.routes];
|
|
33
|
+
for (;;) {
|
|
34
|
+
const chosen = await select({
|
|
35
|
+
title: tr("Fusion: modelli candidati", "Fusion: candidate models"),
|
|
36
|
+
hint: tr("Jev sceglie fra questi e il modello attivo per ogni compito nuovo. Invio aggiunge/toglie, Esc conferma.", "Jev picks among these and the active model for each new task. Enter adds/removes, Esc confirms."),
|
|
37
|
+
options: models.map(model => ({ key: model, label: `${routes.includes(model) ? "[x]" : "[ ]"} ${model}`,
|
|
38
|
+
detail: model === harness.config.model ? tr("attivo", "active") : "", value: model })),
|
|
39
|
+
ctl, theme, terminalColumns, filterable: true,
|
|
40
|
+
});
|
|
41
|
+
if (!chosen)
|
|
42
|
+
return { ...fusion, routes };
|
|
43
|
+
routes = routes.includes(chosen.value) ? routes.filter(model => model !== chosen.value) : [...routes, chosen.value].slice(0, 15);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export async function pickFusion(harness, ctl, theme, terminalColumns, select = selectOption) {
|
|
47
|
+
const availability = fusionAvailability(harness.env, await currentTier(harness));
|
|
48
|
+
if (!availability.ok) {
|
|
49
|
+
if (harness.config.fusion)
|
|
50
|
+
persist(harness, ctl, null);
|
|
51
|
+
notifyStatus(ctl, unavailableText(availability.reason), true);
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
let fusion = harness.config.fusion ?? null;
|
|
55
|
+
for (;;) {
|
|
56
|
+
const on = fusion !== null;
|
|
57
|
+
const draft = fusion ?? DEFAULT_FUSION;
|
|
58
|
+
const options = [
|
|
59
|
+
{ key: "toggle", value: "toggle", label: on ? tr("Disattiva Fusion", "Turn Fusion off") : tr("Attiva Fusion", "Turn Fusion on"),
|
|
60
|
+
detail: tr("Jev decide, l'agente Talos esegue", "Jev decides, the Talos agent executes") },
|
|
61
|
+
...(on ? [
|
|
62
|
+
{ key: "routes", value: "routes", label: tr("Modelli candidati", "Candidate models"),
|
|
63
|
+
detail: draft.routes.length ? draft.routes.join(", ") : tr("solo il modello attivo", "active model only") },
|
|
64
|
+
{ key: "gate", value: "gate", label: `Gate: ${draft.gate}`,
|
|
65
|
+
detail: draft.gate === "auto"
|
|
66
|
+
? tr("Jev può saltare la conferma per azioni chiaramente sicure", "Jev may skip confirmation for clearly safe actions")
|
|
67
|
+
: tr("Jev può solo bloccare o lasciar chiedere", "Jev can only block or defer to confirmation") },
|
|
68
|
+
{ key: "focus", value: "focus", label: `${tr("Focus per passo", "Step focus")}: ${draft.focus ? "on" : "off"}`,
|
|
69
|
+
detail: "inspect / implement / verify / answer" },
|
|
70
|
+
] : []),
|
|
71
|
+
];
|
|
72
|
+
const selected = await select({
|
|
73
|
+
title: `Fusion · Jev + Talos${availability.channel === "dev" ? " (dev · OpenRouter)" : ""}`,
|
|
74
|
+
hint: tr("Esc chiude.", "Esc closes."), options, currentKey: "toggle", ctl, theme, terminalColumns,
|
|
75
|
+
});
|
|
76
|
+
if (!selected)
|
|
77
|
+
return fusion !== null;
|
|
78
|
+
if (selected.value === "toggle")
|
|
79
|
+
fusion = on ? null : draft;
|
|
80
|
+
else if (selected.value === "routes")
|
|
81
|
+
fusion = await pickRoutes(harness, ctl, theme, terminalColumns, draft, select);
|
|
82
|
+
else if (selected.value === "gate")
|
|
83
|
+
fusion = { ...draft, gate: draft.gate === "guard" ? "auto" : "guard" };
|
|
84
|
+
else
|
|
85
|
+
fusion = { ...draft, focus: !draft.focus };
|
|
86
|
+
persist(harness, ctl, fusion);
|
|
87
|
+
notifyStatus(ctl, fusion ? `Fusion on · gate ${fusion.gate} · focus ${fusion.focus ? "on" : "off"}` : "Fusion off");
|
|
88
|
+
}
|
|
89
|
+
}
|
package/dist/tui/i18n-catalog.js
CHANGED
|
@@ -1,8 +1,68 @@
|
|
|
1
1
|
// English keys correspond to tr()'s stable fallback. User text, tool output,
|
|
2
2
|
// command names and model identifiers never pass through this catalogue.
|
|
3
3
|
export const TRANSLATION_ROWS = [
|
|
4
|
+
["List available skills and how to invoke them", "Lista las skills disponibles y cómo invocarlas", "Verfügbare Skills und ihre Aufrufe anzeigen"],
|
|
5
|
+
["List MCP servers and session tools", "Lista los servidores MCP y las herramientas de la sesión", "MCP-Server und Sitzungswerkzeuge anzeigen"],
|
|
6
|
+
["No skills loaded in this session.", "No hay skills cargadas en esta sesión.", "In dieser Sitzung sind keine Skills geladen."],
|
|
7
|
+
["Skill commands are disabled.", "Los comandos de skills están desactivados.", "Skill-Befehle sind deaktiviert."],
|
|
8
|
+
["Manual invocation only", "Solo invocación manual", "Nur manueller Aufruf"],
|
|
9
|
+
["Available skills ({count})", "Skills disponibles ({count})", "Verfügbare Skills ({count})"],
|
|
10
|
+
["Tools registered in this session; connection status is not checked.", "Herramientas registradas en esta sesión; no se comprueba el estado de conexión.", "In dieser Sitzung registrierte Werkzeuge; der Verbindungsstatus wird nicht geprüft."],
|
|
11
|
+
["No MCP servers with registered tools in this session.", "No hay servidores MCP con herramientas registradas en esta sesión.", "In dieser Sitzung gibt es keine MCP-Server mit registrierten Werkzeugen."],
|
|
12
|
+
["{name} ({count} tools)", "{name} ({count} herramientas)", "{name} ({count} Werkzeuge)"],
|
|
13
|
+
["MCP servers ({count})", "Servidores MCP ({count})", "MCP-Server ({count})"],
|
|
14
|
+
["↑/↓ scroll", "↑/↓ desplazar", "↑/↓ scrollen"],
|
|
15
|
+
["Esc/Enter/q closes", "Esc/Intro/q cierra", "Esc/Enter/q schließt"],
|
|
16
|
+
["Deletion failed", "Error al eliminar", "Löschen fehlgeschlagen"],
|
|
17
|
+
["[Del: confirm stop and delete]", "[Supr: confirmar detención y eliminación]", "[Entf: Stoppen und Löschen bestätigen]"],
|
|
18
|
+
["[Del: delete session]", "[Supr: eliminar sesión]", "[Entf: Sitzung löschen]"],
|
|
19
|
+
["↑↓ select · Enter open", "↑↓ seleccionar · Intro abrir", "↑↓ auswählen · Enter öffnen"],
|
|
20
|
+
["Cannot delete the main session", "No se puede eliminar la sesión principal", "Die Hauptsitzung kann nicht gelöscht werden"],
|
|
21
|
+
["Background process", "Proceso en segundo plano", "Hintergrundprozess"],
|
|
22
|
+
["{count} bg running", "{count} bg activos", "{count} bg aktiv"],
|
|
23
|
+
["exit {code}", "salida {code}", "Exit {code}"],
|
|
24
|
+
["Model output limit reached: continuing automatically…", "Límite de salida del modelo alcanzado: continúo automáticamente…", "Ausgabelimit des Modells erreicht: automatische Fortsetzung…"],
|
|
25
|
+
["Output still at the limit after automatic continuations: split the task or increase TALOS_MAX_AUTOCONTINUE.", "La salida sigue en el límite tras las continuaciones automáticas: divide la tarea o aumenta TALOS_MAX_AUTOCONTINUE.", "Die Ausgabe erreicht nach automatischen Fortsetzungen weiterhin das Limit: teile die Aufgabe auf oder erhöhe TALOS_MAX_AUTOCONTINUE."],
|
|
26
|
+
["Compaction interrupted; context preserved.", "Compactación interrumpida; contexto conservado.", "Komprimierung unterbrochen; Kontext erhalten."],
|
|
27
|
+
["No compaction needed; context preserved.", "No se necesita compactación; contexto conservado.", "Keine Komprimierung erforderlich; Kontext erhalten."],
|
|
28
|
+
["Compaction failed: {detail}", "Error de compactación: {detail}", "Komprimierung fehlgeschlagen: {detail}"],
|
|
29
|
+
["Context compacted: ~{before} -> ~{after} tokens", "Contexto compactado: ~{before} -> ~{after} tokens", "Kontext komprimiert: ~{before} -> ~{after} Token"],
|
|
30
|
+
["Interrupted", "Interrumpido", "Unterbrochen"],
|
|
31
|
+
["The context exceeds the model window even after compaction. The session can still be recovered.", "El contexto supera la ventana del modelo incluso después de compactarlo. La sesión sigue siendo recuperable.", "Der Kontext überschreitet auch nach der Komprimierung das Kontextfenster des Modells. Die Sitzung kann weiterhin wiederhergestellt werden."],
|
|
32
|
+
["The provider interrupted the turn without providing details.", "El proveedor interrumpió el turno sin proporcionar detalles.", "Der Anbieter hat den Durchlauf ohne weitere Angaben unterbrochen."],
|
|
33
|
+
["The provider ended with tool_use without a valid tool call. The task was not completed; retry in this session.", "El proveedor terminó con tool_use sin una llamada válida a una herramienta. La tarea no se completó; reintenta en esta sesión.", "Der Anbieter endete mit tool_use ohne gültigen Werkzeugaufruf. Die Aufgabe wurde nicht abgeschlossen; versuche es in dieser Sitzung erneut."],
|
|
34
|
+
["The provider ended the turn without a final response. The task was not marked complete; retry in this session.", "El proveedor terminó el turno sin una respuesta final. La tarea no se marcó como completada; reintenta en esta sesión.", "Der Anbieter hat den Durchlauf ohne abschließende Antwort beendet. Die Aufgabe wurde nicht als abgeschlossen markiert; versuche es in dieser Sitzung erneut."],
|
|
35
|
+
["The requested delegation was not authorized; the task is not marked complete.", "La delegación solicitada no fue autorizada; la tarea no se marca como completada.", "Die angeforderte Delegation wurde nicht genehmigt; die Aufgabe wird nicht als abgeschlossen markiert."],
|
|
36
|
+
["Paused at the limit of {count} turns for this run (increase TALOS_MAX_TURNS to raise it); plan validation resumes the remaining tasks.", "Pausa al alcanzar el límite de {count} turnos de esta ejecución (aumenta TALOS_MAX_TURNS para elevarlo); la validación del plan retoma las tareas restantes.", "Pause nach Erreichen des Limits von {count} Durchläufen (mit TALOS_MAX_TURNS erhöhen); die Planprüfung setzt die verbleibenden Aufgaben fort."],
|
|
37
|
+
["Incomplete response: output limit reached. Continuations used: {count}. The task was not marked complete; resume in the same session.", "Respuesta incompleta: se alcanzó el límite de salida. Continuaciones realizadas: {count}. La tarea no se marcó como completada; retoma la misma sesión.", "Unvollständige Antwort: Ausgabelimit erreicht. Verwendete Fortsetzungen: {count}. Die Aufgabe wurde nicht als abgeschlossen markiert; setze sie in derselben Sitzung fort."],
|
|
38
|
+
["Incomplete task: {tasks} remain. The turn stopped without claiming completion; resume in the same session.", "Tarea incompleta: quedan {tasks}. El turno se detuvo sin declarar que se completó; retoma la misma sesión.", "Unvollständige Aufgabe: {tasks} stehen noch aus. Der Durchlauf wurde ohne Abschlussmeldung angehalten; setze ihn in derselben Sitzung fort."],
|
|
39
|
+
["Response interrupted", "Respuesta interrumpida", "Antwort unterbrochen"],
|
|
40
|
+
["Workers running", "Colaboradores en ejecución", "Mitarbeiter aktiv"],
|
|
41
|
+
["Ready", "Listo", "Bereit"],
|
|
42
|
+
["Waiting for the next message", "Esperando el siguiente mensaje", "Warten auf die nächste Nachricht"],
|
|
43
|
+
["Background {id} completed · /bg {id} for output", "Background {id} completado · /bg {id} para ver la salida", "Background {id} abgeschlossen · /bg {id} für die Ausgabe"],
|
|
44
|
+
["reading background output", "leyendo salida en segundo plano", "Hintergrundausgabe wird gelesen"],
|
|
45
|
+
["Close the open command first.", "Cierra primero el comando abierto.", "Schließe zuerst den geöffneten Befehl."],
|
|
46
|
+
["Command unavailable while working. Retry after the turn.", "Comando no disponible durante el trabajo. Reintenta al terminar el turno.", "Befehl während der Arbeit nicht verfügbar. Nach dem Durchlauf erneut versuchen."],
|
|
47
|
+
["{command}: available after the turn. Not sent to the model; wait or press Esc to interrupt.", "{command}: disponible al terminar el turno. No enviado al modelo; espera o pulsa Esc para interrumpir.", "{command}: nach dem Durchlauf verfügbar. Nicht an das Modell gesendet; warten oder mit Esc unterbrechen."],
|
|
48
|
+
["task {task} started", "tarea {task} iniciada", "Aufgabe {task} gestartet"],
|
|
49
|
+
["task {task} failed", "tarea {task} fallida", "Aufgabe {task} fehlgeschlagen"],
|
|
50
|
+
["task {task} completed", "tarea {task} completada", "Aufgabe {task} abgeschlossen"],
|
|
4
51
|
["Rename the chat: regenerate from the latest prompt or enter a title", "Renombra el chat: regenera desde el último mensaje o introduce un título", "Chat umbenennen: aus der letzten Nachricht generieren oder einen Titel eingeben"],
|
|
5
52
|
["Running command", "Ejecutando comando", "Befehl wird ausgeführt"],
|
|
53
|
+
["Ran command", "Comando ejecutado", "Befehl ausgeführt"],
|
|
54
|
+
["Command failed", "Comando fallido", "Befehl fehlgeschlagen"],
|
|
55
|
+
["Command started", "Comando iniciado", "Befehl gestartet"],
|
|
56
|
+
["Command stopped", "Comando detenido", "Befehl angehalten"],
|
|
57
|
+
["Cached input", "Entrada en caché", "Gecachte Eingabe"],
|
|
58
|
+
["API list price · not subscription charges", "Tarifa API · no cargos de suscripción", "API-Listenpreis · keine Abonnementkosten"],
|
|
59
|
+
["Compacting context", "Compactando el contexto", "Kontext wird komprimiert"],
|
|
60
|
+
["Making room to continue…", "Liberando espacio para continuar…", "Platz zum Fortfahren wird geschaffen…"],
|
|
61
|
+
["Esc to interrupt", "Esc para interrumpir", "Esc zum Unterbrechen"],
|
|
62
|
+
["appended", "añadido", "angehängt"],
|
|
63
|
+
["modified", "modificado", "geändert"],
|
|
64
|
+
["created", "creado", "erstellt"],
|
|
65
|
+
["Compact the JSON session history while preserving the goal, open tasks and recent work", "Compacta el historial JSON de la sesión conservando el objetivo, las tareas abiertas y el trabajo reciente", "Komprimiert den JSON-Sitzungsverlauf und behält Ziel, offene Aufgaben und aktuelle Arbeit bei"],
|
|
6
66
|
["Rename chat", "Renombrar chat", "Chat umbenennen"],
|
|
7
67
|
["Regenerate from the latest prompt", "Regenerar desde el último mensaje", "Aus der letzten Nachricht neu generieren"],
|
|
8
68
|
["Use the selected model to choose the title.", "Usa el modelo seleccionado para elegir el título.", "Das ausgewählte Modell bestimmt den Titel."],
|
|
@@ -41,7 +101,7 @@ export const TRANSLATION_ROWS = [
|
|
|
41
101
|
["Waiting for activity…", "Esperando actividad…", "Warte auf Aktivität…"],
|
|
42
102
|
["Connect your account and get started.", "Conecta tu cuenta y empieza.", "Konto verbinden und loslegen."],
|
|
43
103
|
["1. Sign in in your browser", "1. Inicia sesión en el navegador", "1. Im Browser anmelden"],
|
|
44
|
-
["vascend.it will open to continue.", "Se abrirá vascend.it para continuar.", "vascend.it wird zum Fortfahren geöffnet."],
|
|
104
|
+
["id.vascend.it will open to continue.", "Se abrirá id.vascend.it para continuar.", "id.vascend.it wird zum Fortfahren geöffnet."],
|
|
45
105
|
["2. Match the code and approve", "2. Compara el código y confirma", "2. Code vergleichen und bestätigen"],
|
|
46
106
|
["Talos will continue automatically.", "Talos continuará automáticamente.", "Talos fährt automatisch fort."],
|
|
47
107
|
["If the browser does not open, use this link:", "Si el navegador no se abre, usa este enlace:", "Falls der Browser nicht startet, diesen Link öffnen:"],
|
|
@@ -192,6 +252,7 @@ export const TRANSLATION_ROWS = [
|
|
|
192
252
|
["paused", "en pausa", "angehalten"], ["after response or operation", "tras la respuesta u operación", "nach Antwort oder Vorgang"],
|
|
193
253
|
["Message", "Mensaje", "Nachricht"], ["messages", "mensajes", "Nachrichten"], ["to team", "al equipo", "an Team"],
|
|
194
254
|
["after response/tool", "tras respuesta/operación", "nach Antwort/Vorgang"],
|
|
255
|
+
["↑ edit last", "↑ editar último", "↑ letzte bearbeiten"],
|
|
195
256
|
["Enter resume", "Intro reanuda", "Enter fortsetzen"], ["Alt+S send now", "Alt+S envía ahora", "Alt+S sofort senden"],
|
|
196
257
|
["Queued messages", "Mensajes en cola", "Nachrichten in der Warteschlange"], [" · paused", " · en pausa", " · angehalten"],
|
|
197
258
|
["Delivery is paused while this screen is open.", "El envío queda en pausa mientras esta pantalla está abierta.", "Der Versand pausiert, solange diese Ansicht geöffnet ist."],
|
|
@@ -208,6 +269,11 @@ export const TRANSLATION_ROWS = [
|
|
|
208
269
|
["locally estimated tokens · /context for details", "tokens estimados localmente · /context para detalles", "lokal geschätzte Tokens · /context für Details"],
|
|
209
270
|
["From queue · delivered", "De la cola · entregado", "Aus der Warteschlange · zugestellt"],
|
|
210
271
|
["Ask Talos to do anything", "Pide a Talos que haga algo", "Sag Talos, was es tun soll"],
|
|
272
|
+
["Describe a task or type / for commands", "Describe una tarea o escribe / para ver comandos", "Beschreibe eine Aufgabe oder tippe / für Befehle"],
|
|
273
|
+
["Developed by Vascend Technologies", "Desarrollado por Vascend Technologies", "Entwickelt von Vascend Technologies"],
|
|
274
|
+
["Permissions", "Permisos", "Berechtigungen"],
|
|
275
|
+
["Recent chats", "Chats recientes", "Letzte Chats"],
|
|
276
|
+
["Help", "Ayuda", "Hilfe"],
|
|
211
277
|
["final plan review", "revisión final del plan", "abschließende Planprüfung"], ["starting", "iniciando", "wird gestartet"],
|
|
212
278
|
["checking", "comprobando", "wird geprüft"], ["checking goal completion", "comprobando el cumplimiento del objetivo", "Zielerreichung wird geprüft"],
|
|
213
279
|
["reviewing", "revisando", "wird überprüft"], ["working", "trabajando", "in Bearbeitung"], ["responding", "respondiendo", "Antwort wird erstellt"],
|
|
@@ -250,5 +316,250 @@ export const TRANSLATION_ROWS = [
|
|
|
250
316
|
["Context restored: continue from here", "Contexto restaurado: continúa desde aquí", "Kontext wiederhergestellt: hier fortfahren"],
|
|
251
317
|
["Tool", "Herramienta", "Werkzeug"], ["Result", "Resultado", "Ergebnis"], ["System", "Sistema", "System"],
|
|
252
318
|
["image", "imagen", "Bild"], ["(no output)", "(sin salida)", "(keine Ausgabe)"],
|
|
319
|
+
["OAuth subscription", "Suscripción OAuth", "OAuth-Abonnement"],
|
|
320
|
+
["local", "local", "lokal"],
|
|
321
|
+
["active", "activo", "aktiv"],
|
|
322
|
+
["configured (env)", "configurado (env)", "konfiguriert (env)"],
|
|
323
|
+
["configured", "configurado", "konfiguriert"],
|
|
324
|
+
["not configured", "sin configurar", "nicht konfiguriert"],
|
|
325
|
+
["Get a key at https://openrouter.ai/keys (sk-or-...) or sign in with OAuth", "Obtén una clave en https://openrouter.ai/keys (sk-or-...) o accede con OAuth", "Schlüssel unter https://openrouter.ai/keys (sk-or-...) abrufen oder mit OAuth anmelden"],
|
|
326
|
+
["Get a key at https://console.anthropic.com/settings/keys (sk-ant-...)", "Obtén una clave en https://console.anthropic.com/settings/keys (sk-ant-...)", "Schlüssel unter https://console.anthropic.com/settings/keys (sk-ant-...) abrufen"],
|
|
327
|
+
["Get a key at https://platform.openai.com/api-keys (sk-...)", "Obtén una clave en https://platform.openai.com/api-keys (sk-...)", "Schlüssel unter https://platform.openai.com/api-keys (sk-...) abrufen"],
|
|
328
|
+
["Local provider: set the endpoint only (default http://localhost:11434/v1)", "Proveedor local: configura solo el endpoint (predeterminado http://localhost:11434/v1)", "Lokaler Anbieter: nur den Endpunkt festlegen (Standard http://localhost:11434/v1)"],
|
|
329
|
+
["Local provider: start the LM Studio server (default http://127.0.0.1:1234/v1)", "Proveedor local: inicia el servidor de LM Studio (predeterminado http://127.0.0.1:1234/v1)", "Lokaler Anbieter: LM-Studio-Server starten (Standard http://127.0.0.1:1234/v1)"],
|
|
330
|
+
["Connect the /v1 endpoint of Unsloth, vLLM, llama.cpp or any OpenAI-compatible server", "Conecta el endpoint /v1 de Unsloth, vLLM, llama.cpp o cualquier servidor compatible con OpenAI", "Den /v1-Endpunkt von Unsloth, vLLM, llama.cpp oder einem OpenAI-kompatiblen Server verbinden"],
|
|
331
|
+
["Get an xAI key for Grok at https://console.x.ai (XAI_API_KEY)", "Obtén una clave xAI para Grok en https://console.x.ai (XAI_API_KEY)", "xAI-Schlüssel für Grok unter https://console.x.ai abrufen (XAI_API_KEY)"],
|
|
332
|
+
["Set the API key ({p0} variable)", "Configura la clave API (variable {p0})", "API-Schlüssel festlegen (Variable {p0})"],
|
|
333
|
+
["Local provider: no key required", "Proveedor local: no requiere clave", "Lokaler Anbieter: kein Schlüssel erforderlich"],
|
|
334
|
+
["Empty API key", "Clave API vacía", "Leerer API-Schlüssel"],
|
|
335
|
+
["Unable to save (global configuration disabled?)", "No se puede guardar (¿configuración global desactivada?)", "Speichern nicht möglich (globale Konfiguration deaktiviert?)"],
|
|
336
|
+
["Unable to save the endpoint", "No se puede guardar el endpoint", "Endpunkt kann nicht gespeichert werden"],
|
|
337
|
+
["Unable to remove the credential", "No se puede eliminar la credencial", "Zugangsdaten können nicht entfernt werden"],
|
|
338
|
+
["update API key", "actualizar clave API", "API-Schlüssel aktualisieren"],
|
|
339
|
+
["set API key", "configurar clave API", "API-Schlüssel festlegen"],
|
|
340
|
+
["sign in with OAuth (browser)", "acceder con OAuth (navegador)", "mit OAuth anmelden (Browser)"],
|
|
341
|
+
["authorize on openrouter.ai without pasting a key", "autoriza en openrouter.ai sin pegar una clave", "auf openrouter.ai autorisieren, ohne einen Schlüssel einzufügen"],
|
|
342
|
+
["set endpoint (baseUrl)", "configurar endpoint (baseUrl)", "Endpunkt festlegen (baseUrl)"],
|
|
343
|
+
["current: {p0}", "actual: {p0}", "aktuell: {p0}"],
|
|
344
|
+
["custom API endpoint", "endpoint API personalizado", "benutzerdefinierter API-Endpunkt"],
|
|
345
|
+
["choose a model from this provider", "elegir un modelo de este proveedor", "Modell dieses Anbieters wählen"],
|
|
346
|
+
["opens the model picker", "abre el selector de modelos", "öffnet die Modellauswahl"],
|
|
347
|
+
["remove saved credential", "eliminar credencial guardada", "gespeicherte Zugangsdaten entfernen"],
|
|
348
|
+
["removes the key/endpoint from configuration", "elimina la clave o el endpoint de la configuración", "entfernt Schlüssel/Endpunkt aus der Konfiguration"],
|
|
349
|
+
["← back to the list", "← volver a la lista", "← zurück zur Liste"],
|
|
350
|
+
["Provider default", "Valor predeterminado del proveedor", "Anbieterstandard"],
|
|
351
|
+
["Reasoning disabled", "Razonamiento desactivado", "Reasoning deaktiviert"],
|
|
352
|
+
["Minimal reasoning", "Razonamiento mínimo", "Minimales Reasoning"],
|
|
353
|
+
["Light reasoning", "Razonamiento ligero", "Leichtes Reasoning"],
|
|
354
|
+
["Medium reasoning", "Razonamiento intermedio", "Mittleres Reasoning"],
|
|
355
|
+
["Deep reasoning", "Razonamiento profundo", "Ausführliches Reasoning"],
|
|
356
|
+
["Very deep reasoning", "Razonamiento muy profundo", "Sehr ausführliches Reasoning"],
|
|
357
|
+
["Highest level available for this model", "Nivel máximo disponible para este modelo", "Höchste verfügbare Stufe für dieses Modell"],
|
|
358
|
+
["A higher level may take more time and tokens. Esc cancels model selection.", "Un nivel mayor puede requerir más tiempo y tokens. Esc cancela la selección del modelo.", "Eine höhere Stufe kann mehr Zeit und Tokens benötigen. Esc bricht die Modellauswahl ab."],
|
|
359
|
+
["This model does not support reasoning.", "Este modelo no admite razonamiento.", "Dieses Modell unterstützt kein Reasoning."],
|
|
360
|
+
["No verified effort control for this model and provider: use the default.", "No hay control de esfuerzo verificado para este modelo y proveedor: usa el predeterminado.", "Keine verifizierte Effort-Steuerung für dieses Modell und diesen Anbieter: Standard verwenden."],
|
|
361
|
+
["Provider not configured for {p0}", "Proveedor no configurado para {p0}", "Anbieter für {p0} nicht konfiguriert"],
|
|
362
|
+
["Enter manage · type to search · Esc close", "Intro gestionar · escribe para buscar · Esc cerrar", "Enter verwalten · zum Suchen tippen · Esc schließen"],
|
|
363
|
+
["command: {p0}", "comando: {p0}", "Befehl: {p0}"],
|
|
364
|
+
["{p0}: sign-in detected and models updated.", "{p0}: acceso detectado y modelos actualizados.", "{p0}: Anmeldung erkannt und Modelle aktualisiert."],
|
|
365
|
+
["{p0}: the command finished, but no valid session was found.", "{p0}: el comando terminó, pero no se encontró una sesión válida.", "{p0}: Der Befehl wurde beendet, aber keine gültige Sitzung gefunden."],
|
|
366
|
+
["Run in a terminal: {p0}", "Ejecuta en un terminal: {p0}", "In einem Terminal ausführen: {p0}"],
|
|
367
|
+
["Starting {p0}", "Iniciando {p0}", "{p0} wird gestartet"],
|
|
368
|
+
["Complete sign-in; you will return to Talos automatically.", "Completa el acceso; volverás a Talos automáticamente.", "Anmeldung abschließen; danach kehrst du automatisch zu Talos zurück."],
|
|
369
|
+
["Sign-in incomplete (exit {p0}). Check that `{p1}` is installed.", "Acceso incompleto (salida {p0}). Comprueba que `{p1}` esté instalado.", "Anmeldung unvollständig (Exit {p0}). Prüfe, ob `{p1}` installiert ist."],
|
|
370
|
+
["· {p0} models", "· {p0} modelos", "· {p0} Modelle"],
|
|
371
|
+
["providers — {p0} of {p1} configured", "proveedores — {p0} de {p1} configurados", "Anbieter — {p0} von {p1} konfiguriert"],
|
|
372
|
+
["↑/↓ select · Enter open · type to search · Esc close", "↑/↓ elegir · Intro abrir · escribe para buscar · Esc cerrar", "↑/↓ wählen · Enter öffnen · zum Suchen tippen · Esc schließen"],
|
|
373
|
+
["{p0}: key saved and provider activated.", "{p0}: clave guardada y proveedor activado.", "{p0}: Schlüssel gespeichert und Anbieter aktiviert."],
|
|
374
|
+
["Remove the credential for {p0}?", "¿Eliminar la credencial de {p0}?", "Zugangsdaten für {p0} entfernen?"],
|
|
375
|
+
["The saved key will be deleted from configuration", "La clave guardada se eliminará de la configuración", "Der gespeicherte Schlüssel wird aus der Konfiguration gelöscht"],
|
|
376
|
+
["No, keep it", "No, conservar", "Nein, behalten"],
|
|
377
|
+
["Yes, remove it", "Sí, eliminar", "Ja, entfernen"],
|
|
378
|
+
["{p0}: credential removed.", "{p0}: credencial eliminada.", "{p0}: Zugangsdaten entfernt."],
|
|
379
|
+
["removal failed", "error al eliminar", "Entfernen fehlgeschlagen"],
|
|
380
|
+
["API key for {p0} (Enter confirm · Esc cancel)", "Clave API para {p0} (Intro confirmar · Esc cancelar)", "API-Schlüssel für {p0} (Enter bestätigen · Esc abbrechen)"],
|
|
381
|
+
["Warning: the key does not look like an OpenRouter key (sk-or-...). Trying anyway.", "Aviso: la clave no parece una clave OpenRouter (sk-or-...). Se intentará igualmente.", "Hinweis: Der Schlüssel sieht nicht wie ein OpenRouter-Schlüssel aus (sk-or-...). Wird trotzdem versucht."],
|
|
382
|
+
["Checking the key on OpenRouter…", "Verificando la clave en OpenRouter…", "Schlüssel wird bei OpenRouter geprüft…"],
|
|
383
|
+
["Invalid key: {p0}. Not saved.", "Clave no válida: {p0}. No se ha guardado.", "Ungültiger Schlüssel: {p0}. Nicht gespeichert."],
|
|
384
|
+
["verification failed", "verificación fallida", "Prüfung fehlgeschlagen"],
|
|
385
|
+
["unlimited credit", "crédito ilimitado", "unbegrenztes Guthaben"],
|
|
386
|
+
["remaining credit {p0}", "crédito restante {p0}", "verbleibendes Guthaben {p0}"],
|
|
387
|
+
["valid key{p0} · {p1}", "clave válida{p0} · {p1}", "gültiger Schlüssel{p0} · {p1}"],
|
|
388
|
+
["save failed", "error al guardar", "Speichern fehlgeschlagen"],
|
|
389
|
+
["Current endpoint: {p0} · empty = restore default", "Endpoint actual: {p0} · vacío = restaurar predeterminado", "Aktueller Endpunkt: {p0} · leer = Standard wiederherstellen"],
|
|
390
|
+
["(provider default)", "(predeterminado del proveedor)", "(Anbieterstandard)"],
|
|
391
|
+
["baseUrl for {p0} (Enter confirm · Esc cancel)", "baseUrl para {p0} (Intro confirmar · Esc cancelar)", "baseUrl für {p0} (Enter bestätigen · Esc abbrechen)"],
|
|
392
|
+
["{p0}: endpoint {p1}.", "{p0}: endpoint {p1}.", "{p0}: Endpunkt {p1}."],
|
|
393
|
+
["updated", "actualizado", "aktualisiert"],
|
|
394
|
+
["restored to default", "restaurado al predeterminado", "auf Standard zurückgesetzt"],
|
|
395
|
+
["OAuth is not available for this provider.", "OAuth no está disponible para este proveedor.", "OAuth ist für diesen Anbieter nicht verfügbar."],
|
|
396
|
+
["Starting the local server…", "Iniciando el servidor local…", "Lokaler Server wird gestartet…"],
|
|
397
|
+
["If the browser does not open, copy this link:", "Si el navegador no se abre, copia este enlace:", "Falls sich der Browser nicht öffnet, kopiere diesen Link:"],
|
|
398
|
+
["This screen will close automatically.", "Esta pantalla se cerrará automáticamente.", "Diese Ansicht wird automatisch geschlossen."],
|
|
399
|
+
["OpenRouter · browser sign-in", "OpenRouter · acceso con navegador", "OpenRouter · Browser-Anmeldung"],
|
|
400
|
+
["Opening the browser for authorization…", "Abriendo el navegador para autorizar…", "Browser zur Autorisierung wird geöffnet…"],
|
|
401
|
+
["Browser opened · waiting for authorization…", "Navegador abierto · esperando autorización…", "Browser geöffnet · Autorisierung ausstehend…"],
|
|
402
|
+
["Open the link manually · waiting for authorization…", "Abre el enlace manualmente · esperando autorización…", "Link manuell öffnen · Autorisierung ausstehend…"],
|
|
403
|
+
["Waiting for authorization in the browser…", "Esperando autorización en el navegador…", "Autorisierung im Browser ausstehend…"],
|
|
404
|
+
["Authorization received · activating the API key…", "Autorización recibida · activando la clave API…", "Autorisierung erhalten · API-Schlüssel wird aktiviert…"],
|
|
405
|
+
["OpenRouter connected and activated", "OpenRouter conectado y activado", "OpenRouter verbunden und aktiviert"],
|
|
406
|
+
["automatic callback failed", "error en el callback automático", "automatischer Callback fehlgeschlagen"],
|
|
407
|
+
["OpenRouter · manual authorization", "OpenRouter · autorización manual", "OpenRouter · manuelle Autorisierung"],
|
|
408
|
+
["OAuth cancelled", "OAuth cancelado", "OAuth abgebrochen"],
|
|
409
|
+
["OAuth failed: {p0}", "OAuth fallido: {p0}", "OAuth fehlgeschlagen: {p0}"],
|
|
410
|
+
["exchange failed", "intercambio fallido", "Austausch fehlgeschlagen"],
|
|
411
|
+
["OAuth error: {p0}", "Error OAuth: {p0}", "OAuth-Fehler: {p0}"],
|
|
412
|
+
["Renew", "Renovar", "Erneuern"],
|
|
413
|
+
["Connect", "Conectar", "Verbinden"],
|
|
414
|
+
["No provider configured. Use /login to connect a subscription or an API key.", "No hay proveedores configurados. Usa /login para conectar una suscripción o una clave API.", "Kein Anbieter konfiguriert. Mit /login ein Abonnement oder einen API-Schlüssel verbinden."],
|
|
415
|
+
["No sign-in method configured for {p0}.", "No hay ningún método de acceso configurado para {p0}.", "Keine Anmeldemethode für {p0} konfiguriert."],
|
|
416
|
+
["sign-in method", "método de acceso", "Anmeldemethode"],
|
|
417
|
+
["↑/↓ move Enter confirm Esc/q cancel", "↑/↓ mover Intro confirmar Esc/q cancelar", "↑/↓ bewegen Enter bestätigen Esc/q abbrechen"],
|
|
418
|
+
["Loading the OpenRouter catalog…", "Cargando el catálogo de OpenRouter…", "OpenRouter-Katalog wird geladen…"],
|
|
419
|
+
["Configure CLAUDE_CODE OAuth with `claude` or ANTHROPIC_API_KEY.", "Configura CLAUDE_CODE OAuth con `claude` o ANTHROPIC_API_KEY.", "CLAUDE_CODE OAuth mit `claude` oder ANTHROPIC_API_KEY konfigurieren."],
|
|
420
|
+
["Configure ChatGPT OAuth with `codex` or OPENAI_API_KEY.", "Configura ChatGPT OAuth con `codex` o OPENAI_API_KEY.", "ChatGPT OAuth mit `codex` oder OPENAI_API_KEY konfigurieren."],
|
|
421
|
+
["Configure {p0}.", "Configura {p0}.", "{p0} konfigurieren."],
|
|
422
|
+
["Check the provider configuration.", "Comprueba la configuración del proveedor.", "Anbieterkonfiguration prüfen."],
|
|
423
|
+
["subscription", "suscripción", "Abonnement"],
|
|
424
|
+
["default", "predeterminado", "Standard"],
|
|
425
|
+
["yes", "sí", "ja"],
|
|
426
|
+
["no", "no", "nein"],
|
|
427
|
+
["token budget {min}–{max}", "presupuesto de tokens {min}–{max}", "Tokenbudget {min}–{max}"],
|
|
428
|
+
["Context {context} · output {output}", "Contexto {context} · salida {output}", "Kontext {context} · Ausgabe {output}"],
|
|
429
|
+
["Effort in Talos: {levels}", "Esfuerzo en Talos: {levels}", "Effort in Talos: {levels}"],
|
|
430
|
+
["Tools {tools} · structured JSON {json} · temperature {temperature}", "Herramientas {tools} · JSON estructurado {json} · temperatura {temperature}", "Tools {tools} · strukturiertes JSON {json} · Temperatur {temperature}"],
|
|
431
|
+
["Attachments {attachments} · open weights {weights}", "Adjuntos {attachments} · pesos abiertos {weights}", "Anhänge {attachments} · offene Gewichte {weights}"],
|
|
432
|
+
["unavailable", "no disponible", "nicht verfügbar"],
|
|
433
|
+
["Knowledge cutoff: {date}", "Conocimientos hasta: {date}", "Wissensstand: {date}"],
|
|
434
|
+
["Released: {date}", "Publicado: {date}", "Veröffentlicht: {date}"],
|
|
435
|
+
["Data updated: {date}", "Datos actualizados: {date}", "Daten aktualisiert: {date}"],
|
|
436
|
+
["Source: models.dev · base API prices; tiers, modes and subscriptions may differ", "Fuente: models.dev · precios API básicos; los niveles, modos y suscripciones pueden variar", "Quelle: models.dev · API-Basispreise; Stufen, Modi und Abonnements können abweichen"],
|
|
437
|
+
["Visual instructions", "Instrucciones visuales", "Visuelle Anweisungen"],
|
|
438
|
+
["Artifact", "Artefacto", "Artefakt"],
|
|
439
|
+
["OpenRouter sign-in — manual mode", "Acceso a OpenRouter — modo manual", "OpenRouter-Anmeldung — manueller Modus"],
|
|
440
|
+
["(automatic callback unavailable: {reason})", "(callback automático no disponible: {reason})", "(automatischer Callback nicht verfügbar: {reason})"],
|
|
441
|
+
["(automatic callback unavailable: complete sign-in manually)", "(callback automático no disponible: completa el acceso manualmente)", "(automatischer Callback nicht verfügbar: Anmeldung manuell abschließen)"],
|
|
442
|
+
["1. Open this link in the browser (copy it if it is not clickable):", "1. Abre este enlace en el navegador (cópialo si no se puede pulsar):", "1. Öffne diesen Link im Browser (kopiere ihn, falls er nicht anklickbar ist):"],
|
|
443
|
+
["2. Authorize access on OpenRouter.", "2. Autoriza el acceso en OpenRouter.", "2. Autorisiere den Zugriff auf OpenRouter."],
|
|
444
|
+
["3. You will be redirected to a localhost address that may not open: this is normal.", "3. Se te redirigirá a una dirección localhost que puede no abrirse: es normal.", "3. Du wirst zu einer localhost-Adresse weitergeleitet, die sich eventuell nicht öffnet: Das ist normal."],
|
|
445
|
+
["4. Copy the `code` parameter from the address bar (or paste the entire URL).", "4. Copia el parámetro `code` de la barra de direcciones (o pega la URL completa).", "4. Kopiere den Parameter `code` aus der Adressleiste (oder füge die gesamte URL ein)."],
|
|
446
|
+
["5. Paste it below and press Enter.", "5. Pégalo abajo y pulsa Intro.", "5. Füge ihn unten ein und drücke Enter."],
|
|
447
|
+
[" (attempts remaining: {count})", " (intentos restantes: {count})", " (verbleibende Versuche: {count})"],
|
|
448
|
+
["Paste the code{hint}", "Pega el código{hint}", "Code einfügen{hint}"],
|
|
449
|
+
["unrecognized code", "código no reconocido", "Code nicht erkannt"],
|
|
450
|
+
["Invalid input: paste the code (or the entire callback URL). Try again.", "Entrada no válida: pega el código (o la URL completa del callback). Inténtalo de nuevo.", "Ungültige Eingabe: Füge den Code (oder die gesamte Callback-URL) ein. Versuche es erneut."],
|
|
451
|
+
["Authentication complete: API key obtained and saved.", "Autenticación completada: clave API obtenida y guardada.", "Authentifizierung abgeschlossen: API-Schlüssel erhalten und gespeichert."],
|
|
452
|
+
["Exchange failed: {error}. Check that you copied the correct code and try again.", "Intercambio fallido: {error}. Comprueba que has copiado el código correcto e inténtalo de nuevo.", "Austausch fehlgeschlagen: {error}. Prüfe, ob du den richtigen Code kopiert hast, und versuche es erneut."],
|
|
453
|
+
["No attempts left: manual sign-in failed.", "No quedan intentos: el acceso manual ha fallado.", "Keine Versuche übrig: Manuelle Anmeldung fehlgeschlagen."],
|
|
454
|
+
["Theme set: {p0}", "Tema establecido: {p0}", "Design festgelegt: {p0}"],
|
|
455
|
+
["Unknown theme: {p0}", "Tema desconocido: {p0}", "Unbekanntes Design: {p0}"],
|
|
456
|
+
["available: {p0}", "disponibles: {p0}", "verfügbar: {p0}"],
|
|
457
|
+
["light", "claro", "hell"],
|
|
458
|
+
["dark", "oscuro", "dunkel"],
|
|
459
|
+
["Themes", "Temas", "Designs"],
|
|
460
|
+
["Model", "Modelo", "Modell"],
|
|
461
|
+
["Providers and sign-ins", "Proveedores y accesos", "Anbieter und Anmeldungen"],
|
|
462
|
+
["Work profile", "Perfil de trabajo", "Arbeitsprofil"],
|
|
463
|
+
["Theme", "Tema", "Design"],
|
|
464
|
+
["Sessions", "Sesiones", "Sitzungen"],
|
|
465
|
+
["Extensions", "Extensiones", "Erweiterungen"],
|
|
466
|
+
["{p0} loaded", "{p0} cargadas", "{p0} geladen"],
|
|
467
|
+
["Usage and context", "Uso y contexto", "Verbrauch und Kontext"],
|
|
468
|
+
["provider tokens, cache and active context", "tokens del proveedor, caché y contexto activo", "Anbietertokens, Cache und aktiver Kontext"],
|
|
469
|
+
["Settings", "Ajustes", "Einstellungen"],
|
|
470
|
+
["/config details shows configuration files", "/config details muestra los archivos de configuración", "/config details zeigt die Konfigurationsdateien"],
|
|
471
|
+
["no files loaded", "no hay archivos cargados", "keine Dateien geladen"],
|
|
472
|
+
["model: {p0}", "modelo: {p0}", "Modell: {p0}"],
|
|
473
|
+
["auto (model maximum)", "auto (máximo del modelo)", "auto (Modellmaximum)"],
|
|
474
|
+
["(commands off)", "(comandos desactivados)", "(Befehle deaktiviert)"],
|
|
475
|
+
["trusted project: {p0}", "proyecto de confianza: {p0}", "vertrauenswürdiges Projekt: {p0}"],
|
|
476
|
+
["no (local resources not loaded)", "no (recursos locales no cargados)", "nein (lokale Ressourcen nicht geladen)"],
|
|
477
|
+
["theme", "tema", "Design"],
|
|
478
|
+
["active: {p0}{p1}", "activo: {p0}{p1}", "aktiv: {p0}{p1}"],
|
|
479
|
+
["configuration", "configuración", "Konfiguration"],
|
|
480
|
+
["· /config close to hide", "· /config close para ocultar", "· /config close zum Ausblenden"],
|
|
481
|
+
["No configuration view to close: use /config", "No hay vista de configuración que cerrar: usa /config", "Keine Konfigurationsansicht zum Schließen: /config verwenden"],
|
|
482
|
+
["Configuration closed (output removed from chat)", "Configuración cerrada (salida eliminada del chat)", "Konfiguration geschlossen (Ausgabe aus dem Chat entfernt)"],
|
|
483
|
+
["Allow: {p0}", "Permitir: {p0}", "Erlauben: {p0}"],
|
|
484
|
+
["{p0}\nShift+Tab: change permissions during confirmation", "{p0}\nMayús+Tab: cambia los permisos durante la confirmación", "{p0}\nUmschalt+Tab: Berechtigungen während der Bestätigung ändern"],
|
|
485
|
+
["Allowed by the current mode", "Permitido por el modo actual", "Im aktuellen Modus erlaubt"],
|
|
486
|
+
["Yes, run it", "Sí, ejecutar", "Ja, ausführen"],
|
|
487
|
+
["allow this action", "permitir esta acción", "diese Aktion erlauben"],
|
|
488
|
+
["No, cancel", "No, cancelar", "Nein, abbrechen"],
|
|
489
|
+
["block the action", "bloquear la acción", "Aktion blockieren"],
|
|
490
|
+
["Reply here (Enter confirm · Esc cancel)", "Responde aquí (Intro confirmar · Esc cancelar)", "Hier antworten (Enter bestätigen · Esc abbrechen)"],
|
|
491
|
+
["Session usage", "Uso de la sesión", "Sitzungsverbrauch"],
|
|
492
|
+
["Partial history: calls made before recording cannot be reconstructed.", "Historial parcial: no se pueden reconstruir las llamadas anteriores al registro.", "Unvollständiger Verlauf: Aufrufe vor Beginn der Aufzeichnung können nicht rekonstruiert werden."],
|
|
493
|
+
["{p0} calls without token counts reported by the provider.", "{p0} llamadas sin recuento de tokens del proveedor.", "{p0} Aufrufe ohne vom Anbieter gemeldete Tokenanzahl."],
|
|
494
|
+
["Some usage records were not saved to disk.", "Algunos registros de uso no se guardaron en disco.", "Einige Verbrauchsdaten wurden nicht gespeichert."],
|
|
495
|
+
["No token counts received from the provider for this session.", "No se han recibido recuentos de tokens del proveedor para esta sesión.", "Für diese Sitzung wurden keine Tokenzahlen vom Anbieter empfangen."],
|
|
496
|
+
["model calls: {p0}", "llamadas al modelo: {p0}", "Modellaufrufe: {p0}"],
|
|
497
|
+
["total input: {p0}", "entrada total: {p0}", "gesamte Eingabe: {p0}"],
|
|
498
|
+
["new: {p0}", "nuevo: {p0}", "neu: {p0}"],
|
|
499
|
+
["cache read: {p0}", "caché leída: {p0}", "Cache gelesen: {p0}"],
|
|
500
|
+
["cache written: {p0}", "caché escrita: {p0}", "Cache geschrieben: {p0}"],
|
|
501
|
+
["provider total: {p0}", "total proveedor: {p0}", "Anbietersumme: {p0}"],
|
|
502
|
+
["last call", "última llamada", "letzter Aufruf"],
|
|
503
|
+
["input {p0} = new {p1} + cache read {p2} + cache written {p3}", "entrada {p0} = nueva {p1} + caché leída {p2} + caché escrita {p3}", "Eingabe {p0} = neu {p1} + Cache gelesen {p2} + Cache geschrieben {p3}"],
|
|
504
|
+
["Per model (including collaborators linked to the chat)", "Por modelo (incluidos los colaboradores vinculados al chat)", "Pro Modell (einschließlich der mit dem Chat verknüpften Mitarbeiter)"],
|
|
505
|
+
["{p0}: {p1} tokens · {p2} calls", "{p0}: {p1} tokens · {p2} llamadas", "{p0}: {p1} Tokens · {p2} Aufrufe"],
|
|
506
|
+
["estimated active context", "contexto activo estimado", "geschätzter aktiver Kontext"],
|
|
507
|
+
["· not API usage", "· no es consumo API", "· kein API-Verbrauch"],
|
|
508
|
+
["Cumulative tokens sum the session's calls, including repeated input and cache: they are not the context of a single request. Talos selects relevant information and manages history through retrieval and compaction according to configuration. This does not erase usage recorded by the provider. ≥ indicates a partial total: known usage is at least the amount shown. The displayed context is a local estimate, not an exact measurement of the payload sent.", "Los tokens acumulados suman las llamadas de la sesión, incluidas la entrada repetida y la caché: no son el contexto de una sola solicitud. Talos selecciona información relevante y gestiona el historial mediante recuperación y compactación según la configuración. Esto no elimina el consumo registrado por el proveedor. ≥ indica un total parcial: el consumo conocido es al menos el mostrado. El contexto indicado es una estimación local, no una medida exacta de los datos enviados.", "Die kumulierten Tokens summieren die Aufrufe der Sitzung einschließlich wiederholter Eingaben und Cache: Sie entsprechen nicht dem Kontext einer einzelnen Anfrage. Talos wählt relevante Informationen aus und verwaltet den Verlauf durch Abruf und Komprimierung gemäß der Konfiguration. Dadurch wird der vom Anbieter erfasste Verbrauch nicht gelöscht. ≥ kennzeichnet eine Teilsumme: Der bekannte Verbrauch beträgt mindestens den angezeigten Wert. Der angezeigte Kontext ist eine lokale Schätzung, keine exakte Messung der gesendeten Daten."],
|
|
509
|
+
["main", "principal", "Hauptagent"],
|
|
510
|
+
["Message received", "Mensaje recibido", "Nachricht empfangen"],
|
|
511
|
+
["Compacting", "Compactando", "Komprimierung läuft"],
|
|
512
|
+
["Command backgrounded", "Comando enviado al segundo plano", "Befehl in den Hintergrund verschoben"],
|
|
513
|
+
["No foreground command", "No hay ningún comando en primer plano", "Kein Befehl im Vordergrund"],
|
|
514
|
+
["Stop requested", "Detención solicitada", "Stopp angefordert"],
|
|
515
|
+
["Stop unavailable", "Detención no disponible", "Stopp nicht verfügbar"],
|
|
516
|
+
["Message awaiting delivery", "Mensaje pendiente de entrega", "Nachricht wartet auf Zustellung"],
|
|
517
|
+
["Send unavailable", "Envío no disponible", "Senden nicht verfügbar"],
|
|
518
|
+
[" Context: awaiting the first request", " Contexto: esperando la primera solicitud", " Kontext: erste Anfrage ausstehend"],
|
|
519
|
+
["Cumulative usage", "Consumo acumulado", "Gesamtverbrauch"],
|
|
520
|
+
["Worker inactive", "Colaborador inactivo", "Mitarbeiter inaktiv"],
|
|
521
|
+
["Command unavailable for this session", "Comando no disponible para esta sesión", "Befehl für diese Sitzung nicht verfügbar"],
|
|
522
|
+
["Jev decides (model, focus, permissions), the agent executes · paid plans", "Jev decide (modelo, enfoque, permisos), el agente ejecuta · planes de pago", "Jev entscheidet (Modell, Fokus, Berechtigungen), der Agent führt aus · kostenpflichtige Pläne"],
|
|
523
|
+
["Fusion (dev) needs an OpenRouter key: connect it with /login.", "Fusion (dev) necesita una clave de OpenRouter: conéctala con /login.", "Fusion (dev) benötigt einen OpenRouter-Schlüssel: mit /login verbinden."],
|
|
524
|
+
["Fusion needs a Vascend account on a paid plan: sign in with /login.", "Fusion necesita una cuenta Vascend con plan de pago: inicia sesión con /login.", "Fusion benötigt ein Vascend-Konto mit kostenpflichtigem Plan: mit /login anmelden."],
|
|
525
|
+
["Fusion is included in paid Vascend plans. Upgrade at https://vascend.it/talos to enable it.", "Fusion está incluido en los planes de pago de Vascend. Mejora tu plan en https://vascend.it/talos para activarlo.", "Fusion ist in den kostenpflichtigen Vascend-Plänen enthalten. Upgrade unter https://vascend.it/talos zum Aktivieren."],
|
|
526
|
+
["Fusion: candidate models", "Fusion: modelos candidatos", "Fusion: Kandidatenmodelle"],
|
|
527
|
+
["Jev picks among these and the active model for each new task. Enter adds/removes, Esc confirms.", "Jev elige entre estos y el modelo activo para cada tarea nueva. Intro añade/quita, Esc confirma.", "Jev wählt für jede neue Aufgabe zwischen diesen und dem aktiven Modell. Enter fügt hinzu/entfernt, Esc bestätigt."],
|
|
528
|
+
["Turn Fusion off", "Desactivar Fusion", "Fusion ausschalten"],
|
|
529
|
+
["Turn Fusion on", "Activar Fusion", "Fusion einschalten"],
|
|
530
|
+
["Jev decides, the Talos agent executes", "Jev decide, el agente Talos ejecuta", "Jev entscheidet, der Talos-Agent führt aus"],
|
|
531
|
+
["Candidate models", "Modelos candidatos", "Kandidatenmodelle"],
|
|
532
|
+
["active model only", "solo el modelo activo", "nur das aktive Modell"],
|
|
533
|
+
["Jev may skip confirmation for clearly safe actions", "Jev puede omitir la confirmación para acciones claramente seguras", "Jev darf die Bestätigung bei eindeutig sicheren Aktionen überspringen"],
|
|
534
|
+
["Jev can only block or defer to confirmation", "Jev solo puede bloquear o dejar que se pida confirmación", "Jev kann nur blockieren oder an die Bestätigung übergeben"],
|
|
535
|
+
["Step focus", "Enfoque por paso", "Schrittfokus"],
|
|
536
|
+
["Esc closes.", "Esc cierra.", "Esc schließt."],
|
|
537
|
+
["Control this session from your phone: /remote, /remote status, /remote off", "Controla esta sesión desde el móvil: /remote, /remote status, /remote off", "Diese Sitzung vom Handy steuern: /remote, /remote status, /remote off"],
|
|
538
|
+
["Remote control is included in the Pro, Pro Max, Team and Enterprise plans.", "El control remoto está incluido en los planes Pro, Pro Max, Team y Enterprise.", "Die Fernsteuerung ist in den Tarifen Pro, Pro Max, Team und Enterprise enthalten."],
|
|
539
|
+
["Remote control needs a new sign-in: run /logout and open Talos again.", "El control remoto necesita un nuevo inicio de sesión: ejecuta /logout y vuelve a abrir Talos.", "Die Fernsteuerung braucht eine neue Anmeldung: /logout ausführen und Talos erneut öffnen."],
|
|
540
|
+
["Too many remote sessions open: close some and try again.", "Demasiadas sesiones remotas abiertas: cierra algunas y vuelve a intentarlo.", "Zu viele Fernsitzungen offen: schließe einige und versuche es erneut."],
|
|
541
|
+
["The service is busy: try again shortly.", "El servicio está ocupado: inténtalo de nuevo en breve.", "Der Dienst ist ausgelastet: versuche es gleich noch einmal."],
|
|
542
|
+
["Remote control service unreachable: check the network and try again.", "Servicio de control remoto no disponible: comprueba la red y vuelve a intentarlo.", "Fernsteuerungsdienst nicht erreichbar: prüfe das Netzwerk und versuche es erneut."],
|
|
543
|
+
["connecting", "conectando", "verbinde"],
|
|
544
|
+
["network lost, retrying", "red perdida, reintentando", "Netzwerk verloren, neuer Versuch"],
|
|
545
|
+
["closed", "cerrado", "geschlossen"],
|
|
546
|
+
["Remote control closed on every device.", "Control remoto cerrado en todos los dispositivos.", "Fernsteuerung auf allen Geräten beendet."],
|
|
547
|
+
["Remote control is not active.", "El control remoto no está activo.", "Die Fernsteuerung ist nicht aktiv."],
|
|
548
|
+
["Remote control: {stato}, connected devices: {n}", "Control remoto: {stato}, dispositivos conectados: {n}", "Fernsteuerung: {stato}, verbundene Geräte: {n}"],
|
|
549
|
+
["Remote control is not active. /remote to turn it on.", "El control remoto no está activo. /remote para activarlo.", "Die Fernsteuerung ist nicht aktiv. /remote zum Einschalten."],
|
|
550
|
+
["Usage: /remote, /remote status, /remote off", "Uso: /remote, /remote status, /remote off", "Verwendung: /remote, /remote status, /remote off"],
|
|
551
|
+
["Remote control uses your Vascend account: sign in by opening Talos again.", "El control remoto usa tu cuenta Vascend: inicia sesión volviendo a abrir Talos.", "Die Fernsteuerung nutzt dein Vascend-Konto: melde dich an, indem du Talos erneut öffnest."],
|
|
552
|
+
["Remote control closed: {motivo}", "Control remoto cerrado: {motivo}", "Fernsteuerung beendet: {motivo}"],
|
|
553
|
+
["Remote control: network lost, retrying", "Control remoto: red perdida, reintentando", "Fernsteuerung: Netzwerk verloren, neuer Versuch"],
|
|
554
|
+
["Remote control: connected devices: {n}", "Control remoto: dispositivos conectados: {n}", "Fernsteuerung: verbundene Geräte: {n}"],
|
|
555
|
+
["Remote control on", "Control remoto activo", "Fernsteuerung aktiv"],
|
|
556
|
+
["Open the link on your phone, with the same Vascend account:", "Abre el enlace en el móvil, con la misma cuenta Vascend:", "Öffne den Link auf dem Handy, mit demselben Vascend-Konto:"],
|
|
557
|
+
["Copied to the clipboard. The link holds the session key: do not share it.", "Copiado al portapapeles. El enlace contiene la clave de la sesión: no lo compartas.", "In die Zwischenablage kopiert. Der Link enthält den Sitzungsschlüssel: nicht teilen."],
|
|
558
|
+
["The link holds the session key: do not share it.", "El enlace contiene la clave de la sesión: no lo compartas.", "Der Link enthält den Sitzungsschlüssel: nicht teilen."],
|
|
559
|
+
["/remote status for the state, /remote off to close.", "/remote status para el estado, /remote off para cerrar.", "/remote status für den Status, /remote off zum Beenden."],
|
|
560
|
+
["Interrupted · send a new message to continue.", "Interrumpido · envía un mensaje nuevo para continuar.", "Unterbrochen · sende eine neue Nachricht, um fortzufahren."],
|
|
561
|
+
["You've hit your session limit · resets {time}", "Has alcanzado el límite de la sesión · se restablece {time}", "Sitzungslimit erreicht · wird zurückgesetzt {time}"],
|
|
562
|
+
["Continuing automatically at {time} · esc to cancel", "Continúo automáticamente a las {time} · esc para cancelar", "Automatische Fortsetzung um {time} · Esc zum Abbrechen"],
|
|
563
|
+
["You've hit your session limit · resets {time}\nContinuing automatically at {clock} · esc to cancel", "Has alcanzado el límite de la sesión · se restablece {time}\nContinúo automáticamente a las {clock} · esc para cancelar", "Sitzungslimit erreicht · wird zurückgesetzt {time}\nAutomatische Fortsetzung um {clock} · Esc zum Abbrechen"],
|
|
253
564
|
];
|
|
254
565
|
export const TRANSLATIONS = new Map(TRANSLATION_ROWS.map(([english, es, de]) => [english, { es, de }]));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function liveCommandAllowed(line: string): boolean;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Fail closed: only audited commands may run beside an active agent turn.
|
|
2
|
+
// Keep this check in the dispatcher too, so selections from /help cannot bypass it.
|
|
3
|
+
export function liveCommandAllowed(line) {
|
|
4
|
+
const [command, ...args] = line.trim().split(/\s+/);
|
|
5
|
+
if (["/", "/help", "/commands", "/cmd", "/skills", "/mcp", "/usage", "/tokens", "/copy", "/bg", "/arch", "/architettura", "/remote", "/remoto"].includes(command ?? ""))
|
|
6
|
+
return true;
|
|
7
|
+
return ["/context", "/ctx"].includes(command ?? "")
|
|
8
|
+
&& (args.length === 0 || args.length === 1 && ["status", "explain", "open", "close", "toggle"].includes(args[0]));
|
|
9
|
+
}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export declare function livePreview(value: string, cells: number): string;
|
|
2
|
+
export declare function backgroundResultSummary(output: string, columns: number): string;
|
|
2
3
|
export declare function liveResultSummary(output: string, summary: string | null, columns: number): string;
|
package/dist/tui/live-output.js
CHANGED
|
@@ -5,6 +5,17 @@ import { tr } from "./i18n.js";
|
|
|
5
5
|
export function livePreview(value, cells) {
|
|
6
6
|
return fitLine(oneLine(value), Math.max(0, cells));
|
|
7
7
|
}
|
|
8
|
+
export function backgroundResultSummary(output, columns) {
|
|
9
|
+
const head = /^bg\d+ \[(running|done|failed|killed)(?: · uscita (-?\d+))?\](.*)/.exec(plainText(output));
|
|
10
|
+
if (!head)
|
|
11
|
+
return liveResultSummary(output, null, columns);
|
|
12
|
+
const labels = {
|
|
13
|
+
running: tr("In esecuzione", "Running"), done: tr("Concluso", "Finished"),
|
|
14
|
+
failed: tr("Errore", "Error"), killed: tr("Interrotto", "Stopped"),
|
|
15
|
+
};
|
|
16
|
+
const exit = head[2] !== undefined ? " · " + tr("uscita {code}", "exit {code}", { code: head[2] }) : "";
|
|
17
|
+
return liveResultSummary(output, `${labels[head[1]]}${exit}${head[3]}`, columns);
|
|
18
|
+
}
|
|
8
19
|
export function liveResultSummary(output, summary, columns) {
|
|
9
20
|
const rows = plainText(output).trim().split("\n");
|
|
10
21
|
const first = summary ?? rows.find(row => row.trim()) ?? tr("nessun output", "no output");
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { modelEfforts } from "../providers/model-effort.js";
|
|
2
|
+
import { getLanguage, tr } from "./i18n.js";
|
|
2
3
|
export function modelDetail(model) {
|
|
3
|
-
const yes = (v) => v === undefined ? "?" : v ? "sì" : "no";
|
|
4
|
-
const count = (n) => n === undefined ? "?" : n.toLocaleString(
|
|
4
|
+
const yes = (v) => v === undefined ? "?" : v ? tr("sì", "yes") : tr("no", "no");
|
|
5
|
+
const count = (n) => n === undefined ? "?" : n.toLocaleString(getLanguage());
|
|
5
6
|
const efforts = modelEfforts(`${model.provider}/${model.id}`, model).filter(Boolean);
|
|
6
7
|
const controls = model.reasoningOptions?.map(o => o.type === "effort" ? `effort ${o.values.join(" / ")}`
|
|
7
|
-
: o.type === "toggle" ? "on/off" :
|
|
8
|
+
: o.type === "toggle" ? "on/off" : tr("budget token {min}–{max}", "token budget {min}–{max}", { min: o.min ?? "?", max: o.max ?? "?" })).join("; ");
|
|
8
9
|
return [model.name, model.description,
|
|
9
|
-
|
|
10
|
+
tr("Contesto {context} · output {output}", "Context {context} · output {output}", { context: count(model.context), output: count(model.outputLimit) }) + (model.inputLimit ? ` · input ${count(model.inputLimit)}` : ""),
|
|
10
11
|
`Reasoning ${yes(model.reasoning)}${controls ? ` (${controls})` : ""}`,
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
tr("Effort in Talos: {levels}", "Effort in Talos: {levels}", { levels: efforts.length ? efforts.join(" / ") : tr("predefinito", "default") }),
|
|
13
|
+
tr("Tool {tools} · JSON strutturato {json} · temperatura {temperature}", "Tools {tools} · structured JSON {json} · temperature {temperature}", { tools: yes(model.toolCall), json: yes(model.structuredOutput), temperature: yes(model.temperature) }),
|
|
13
14
|
`Input: ${model.inputModalities.join(", ") || "?"} · output: ${model.outputModalities.join(", ") || "?"}`,
|
|
14
|
-
|
|
15
|
-
`USD/1M token: ${Object.entries(model.cost).map(([key, value]) => `${key} $${value}`).join(" · ") || "non disponibili"}`,
|
|
16
|
-
model.knowledge ?
|
|
17
|
-
model.releaseDate ?
|
|
18
|
-
model.updatedAt ?
|
|
19
|
-
"Fonte: models.dev · prezzi API di base; fasce, modalità e abbonamenti possono differire",
|
|
15
|
+
tr("Allegati {attachments} · pesi aperti {weights}", "Attachments {attachments} · open weights {weights}", { attachments: yes(model.attachment), weights: yes(model.openWeights) }),
|
|
16
|
+
`USD/1M token: ${Object.entries(model.cost).map(([key, value]) => `${key} $${value}`).join(" · ") || tr("non disponibili", "unavailable")}`,
|
|
17
|
+
model.knowledge ? tr("Conoscenze: {date}", "Knowledge cutoff: {date}", { date: model.knowledge }) : "",
|
|
18
|
+
model.releaseDate ? tr("Rilasciato: {date}", "Released: {date}", { date: model.releaseDate }) : "",
|
|
19
|
+
model.updatedAt ? tr("Dati aggiornati: {date}", "Data updated: {date}", { date: model.updatedAt }) : "", model.status,
|
|
20
|
+
tr("Fonte: models.dev · prezzi API di base; fasce, modalità e abbonamenti possono differire", "Source: models.dev · base API prices; tiers, modes and subscriptions may differ"),
|
|
20
21
|
].filter(Boolean).join("\n");
|
|
21
22
|
}
|