@open-mercato/ai-assistant 0.6.7-develop.6862.1.c11a64ce0a → 0.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/AGENTS.md +29 -12
- package/dist/modules/ai_assistant/__integration__/helpers/aiAssistantFixtures.js +0 -30
- package/dist/modules/ai_assistant/__integration__/helpers/aiAssistantFixtures.js.map +2 -2
- package/dist/modules/ai_assistant/api/ai/chat/route.js +0 -7
- package/dist/modules/ai_assistant/api/ai/chat/route.js.map +2 -2
- package/dist/modules/ai_assistant/api/settings/allowlist/route.js +10 -10
- package/dist/modules/ai_assistant/api/settings/allowlist/route.js.map +2 -2
- package/dist/modules/ai_assistant/api/settings/route.js +13 -34
- package/dist/modules/ai_assistant/api/settings/route.js.map +2 -2
- package/dist/modules/ai_assistant/backend/config/ai-assistant/agents/AiAgentSettingsPageClient.js +0 -106
- package/dist/modules/ai_assistant/backend/config/ai-assistant/agents/AiAgentSettingsPageClient.js.map +2 -2
- package/dist/modules/ai_assistant/data/entities.js +0 -42
- package/dist/modules/ai_assistant/data/entities.js.map +2 -2
- package/dist/modules/ai_assistant/data/repositories/AiAgentRuntimeOverrideRepository.js +1 -3
- package/dist/modules/ai_assistant/data/repositories/AiAgentRuntimeOverrideRepository.js.map +2 -2
- package/dist/modules/ai_assistant/di.js +2 -6
- package/dist/modules/ai_assistant/di.js.map +2 -2
- package/dist/modules/ai_assistant/events.js +0 -6
- package/dist/modules/ai_assistant/events.js.map +2 -2
- package/dist/modules/ai_assistant/i18n/de.json +0 -42
- package/dist/modules/ai_assistant/i18n/en.json +0 -42
- package/dist/modules/ai_assistant/i18n/es.json +0 -42
- package/dist/modules/ai_assistant/i18n/pl.json +0 -42
- package/dist/modules/ai_assistant/lib/agent-runtime.js +5 -158
- package/dist/modules/ai_assistant/lib/agent-runtime.js.map +2 -2
- package/dist/modules/ai_assistant/lib/ai-agent-definition.js.map +2 -2
- package/dist/modules/ai_assistant/lib/auth.js +7 -6
- package/dist/modules/ai_assistant/lib/auth.js.map +2 -2
- package/dist/modules/ai_assistant/lib/entity-graph.js +3 -3
- package/dist/modules/ai_assistant/lib/entity-graph.js.map +2 -2
- package/dist/modules/ai_assistant/lib/llm-adapters/anthropic.js +0 -3
- package/dist/modules/ai_assistant/lib/llm-adapters/anthropic.js.map +2 -2
- package/dist/modules/ai_assistant/lib/llm-adapters/openai.js +1 -8
- package/dist/modules/ai_assistant/lib/llm-adapters/openai.js.map +2 -2
- package/dist/modules/ai_assistant/lib/model-factory.js +1 -6
- package/dist/modules/ai_assistant/lib/model-factory.js.map +2 -2
- package/dist/modules/ai_assistant/lib/openai-compatible-presets.js +0 -2
- package/dist/modules/ai_assistant/lib/openai-compatible-presets.js.map +2 -2
- package/dist/modules/ai_assistant/lib/tool-search.js +12 -4
- package/dist/modules/ai_assistant/lib/tool-search.js.map +2 -2
- package/generated/entities/ai_agent_runtime_override/index.ts +0 -1
- package/generated/entities.ids.generated.ts +1 -2
- package/generated/entity-fields-registry.ts +1 -13
- package/package.json +12 -13
- package/src/modules/ai_assistant/__integration__/helpers/aiAssistantFixtures.ts +0 -48
- package/src/modules/ai_assistant/api/ai/chat/route.ts +0 -10
- package/src/modules/ai_assistant/api/settings/__tests__/route.test.ts +8 -58
- package/src/modules/ai_assistant/api/settings/allowlist/route.ts +12 -10
- package/src/modules/ai_assistant/api/settings/route.ts +10 -33
- package/src/modules/ai_assistant/backend/config/ai-assistant/agents/AiAgentSettingsPageClient.tsx +0 -146
- package/src/modules/ai_assistant/data/entities.ts +0 -56
- package/src/modules/ai_assistant/data/repositories/AiAgentRuntimeOverrideRepository.ts +0 -4
- package/src/modules/ai_assistant/di.ts +1 -5
- package/src/modules/ai_assistant/events.ts +0 -21
- package/src/modules/ai_assistant/i18n/de.json +0 -42
- package/src/modules/ai_assistant/i18n/en.json +0 -42
- package/src/modules/ai_assistant/i18n/es.json +0 -42
- package/src/modules/ai_assistant/i18n/pl.json +0 -42
- package/src/modules/ai_assistant/lib/__tests__/auth.test.ts +5 -2
- package/src/modules/ai_assistant/lib/__tests__/llm-adapters-anthropic.test.ts +0 -13
- package/src/modules/ai_assistant/lib/__tests__/llm-adapters-openai.test.ts +0 -41
- package/src/modules/ai_assistant/lib/__tests__/model-factory.test.ts +0 -60
- package/src/modules/ai_assistant/lib/agent-runtime.ts +0 -259
- package/src/modules/ai_assistant/lib/ai-agent-definition.ts +0 -10
- package/src/modules/ai_assistant/lib/auth.ts +15 -6
- package/src/modules/ai_assistant/lib/entity-graph.ts +3 -3
- package/src/modules/ai_assistant/lib/llm-adapters/anthropic.ts +0 -10
- package/src/modules/ai_assistant/lib/llm-adapters/openai.ts +1 -32
- package/src/modules/ai_assistant/lib/model-factory.ts +0 -33
- package/src/modules/ai_assistant/lib/openai-compatible-presets.ts +0 -2
- package/src/modules/ai_assistant/lib/tool-search.ts +17 -4
- package/src/modules/ai_assistant/migrations/.snapshot-open-mercato.json +16 -388
- package/dist/modules/ai_assistant/__integration__/TC-AI-MODERATION-008-settings-and-audit.spec.js +0 -80
- package/dist/modules/ai_assistant/__integration__/TC-AI-MODERATION-008-settings-and-audit.spec.js.map +0 -7
- package/dist/modules/ai_assistant/__integration__/TC-AI-MODERATION-009-ui.spec.js +0 -124
- package/dist/modules/ai_assistant/__integration__/TC-AI-MODERATION-009-ui.spec.js.map +0 -7
- package/dist/modules/ai_assistant/api/moderation-flags/route.js +0 -121
- package/dist/modules/ai_assistant/api/moderation-flags/route.js.map +0 -7
- package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/AiModerationFlagsPageClient.js +0 -139
- package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/AiModerationFlagsPageClient.js.map +0 -7
- package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.js +0 -10
- package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.js.map +0 -7
- package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.meta.js +0 -26
- package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.meta.js.map +0 -7
- package/dist/modules/ai_assistant/data/repositories/AiModerationFlagRepository.js +0 -44
- package/dist/modules/ai_assistant/data/repositories/AiModerationFlagRepository.js.map +0 -7
- package/dist/modules/ai_assistant/i18n/ko.json +0 -527
- package/dist/modules/ai_assistant/lib/moderation-flag-recorder.js +0 -43
- package/dist/modules/ai_assistant/lib/moderation-flag-recorder.js.map +0 -7
- package/dist/modules/ai_assistant/lib/moderation-policy.js +0 -24
- package/dist/modules/ai_assistant/lib/moderation-policy.js.map +0 -7
- package/dist/modules/ai_assistant/lib/moderation.js +0 -109
- package/dist/modules/ai_assistant/lib/moderation.js.map +0 -7
- package/dist/modules/ai_assistant/migrations/Migration20260610134045_ai_assistant.js +0 -19
- package/dist/modules/ai_assistant/migrations/Migration20260610134045_ai_assistant.js.map +0 -7
- package/generated/entities/ai_moderation_flag/index.ts +0 -9
- package/src/modules/ai_assistant/__integration__/TC-AI-MODERATION-008-settings-and-audit.spec.ts +0 -126
- package/src/modules/ai_assistant/__integration__/TC-AI-MODERATION-009-ui.spec.ts +0 -161
- package/src/modules/ai_assistant/api/moderation-flags/__tests__/route.test.ts +0 -122
- package/src/modules/ai_assistant/api/moderation-flags/route.ts +0 -137
- package/src/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/AiModerationFlagsPageClient.tsx +0 -186
- package/src/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.meta.ts +0 -24
- package/src/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.tsx +0 -12
- package/src/modules/ai_assistant/data/repositories/AiModerationFlagRepository.ts +0 -79
- package/src/modules/ai_assistant/i18n/ko.json +0 -527
- package/src/modules/ai_assistant/lib/__tests__/input-moderation-gate.test.ts +0 -121
- package/src/modules/ai_assistant/lib/__tests__/moderation-flag-recorder.test.ts +0 -76
- package/src/modules/ai_assistant/lib/__tests__/moderation-policy.test.ts +0 -86
- package/src/modules/ai_assistant/lib/__tests__/moderation.test.ts +0 -114
- package/src/modules/ai_assistant/lib/moderation-flag-recorder.ts +0 -75
- package/src/modules/ai_assistant/lib/moderation-policy.ts +0 -77
- package/src/modules/ai_assistant/lib/moderation.ts +0 -179
- package/src/modules/ai_assistant/migrations/Migration20260610134045_ai_assistant.ts +0 -21
|
@@ -36,44 +36,21 @@
|
|
|
36
36
|
"ai_assistant.agents.meta.readOnlyYes": "Ja",
|
|
37
37
|
"ai_assistant.agents.meta.unlimited": "Unbegrenzt",
|
|
38
38
|
"ai_assistant.agents.model_override.allowlistCustom": "benutzerdefiniert",
|
|
39
|
-
"ai_assistant.agents.model_override.allowlistEmpty": "Keine konfigurierten Anbieter für Chat-Überschreibungen verfügbar.",
|
|
40
|
-
"ai_assistant.agents.model_override.allowlistHelp": "Lege fest, welche Anbieter- und Modell-Überschreibungen Nutzer in der Chat-Fußzeile für diesen Agenten wählen können.",
|
|
41
39
|
"ai_assistant.agents.model_override.allowlistInherited": "geerbt",
|
|
42
40
|
"ai_assistant.agents.model_override.allowlistReset": "Erben",
|
|
43
41
|
"ai_assistant.agents.model_override.allowlistSave": "Auswahl speichern",
|
|
44
|
-
"ai_assistant.agents.model_override.allowlistSaved": "Auswahlmöglichkeiten für Chat-Überschreibungen gespeichert.",
|
|
45
|
-
"ai_assistant.agents.model_override.allowlistTitle": "Auswahlmöglichkeiten für Chat-Überschreibungen",
|
|
46
42
|
"ai_assistant.agents.model_override.anyProvider": "erste konfigurierte",
|
|
47
43
|
"ai_assistant.agents.model_override.clear": "Überschreibung löschen",
|
|
48
|
-
"ai_assistant.agents.model_override.cleared": "Modell-Überschreibung entfernt; der Agent nutzt wieder die normale Auflösungskette.",
|
|
49
44
|
"ai_assistant.agents.model_override.codeDefault": "Im Code deklarierter Standard",
|
|
50
45
|
"ai_assistant.agents.model_override.defaultBadge": "Standard",
|
|
51
|
-
"ai_assistant.agents.model_override.envAlsoNarrows": "schränkt diese Liste zusätzlich über die Umgebungsvariablen ein.",
|
|
52
|
-
"ai_assistant.agents.model_override.loadErrorTitle": "Anbieterkatalog konnte nicht geladen werden",
|
|
53
|
-
"ai_assistant.agents.model_override.loading": "Anbieterkatalog wird geladen...",
|
|
54
46
|
"ai_assistant.agents.model_override.model": "Modell",
|
|
55
47
|
"ai_assistant.agents.model_override.noOverride": "Keine agentenspezifische Überschreibung",
|
|
56
48
|
"ai_assistant.agents.model_override.provider": "Anbieter",
|
|
57
49
|
"ai_assistant.agents.model_override.providerDefault": "Anbieter-Standard",
|
|
58
50
|
"ai_assistant.agents.model_override.save": "Überschreibung speichern",
|
|
59
51
|
"ai_assistant.agents.model_override.saved": "Modell-Überschreibung gespeichert.",
|
|
60
|
-
"ai_assistant.agents.model_override.selectModel": "Modell auswählen",
|
|
61
|
-
"ai_assistant.agents.model_override.selectProvider": "Anbieter auswählen",
|
|
62
|
-
"ai_assistant.agents.model_override.subtitle": "Überschreibe Standardanbieter und -modell für diesen Mandanten und Agenten.",
|
|
63
52
|
"ai_assistant.agents.model_override.tenantOverride": "Mandanten-Überschreibung",
|
|
64
53
|
"ai_assistant.agents.model_override.title": "Anbieter und Modell",
|
|
65
|
-
"ai_assistant.agents.moderation.controlLabel": "Moderation",
|
|
66
|
-
"ai_assistant.agents.moderation.effectiveEnforced": "Erzwungen",
|
|
67
|
-
"ai_assistant.agents.moderation.effectiveOff": "Aus",
|
|
68
|
-
"ai_assistant.agents.moderation.effectiveOn": "Ein",
|
|
69
|
-
"ai_assistant.agents.moderation.enforcedBadge": "Erzwungen",
|
|
70
|
-
"ai_assistant.agents.moderation.enforcedHint": "Dieser Agent akzeptiert nicht vertrauenswürdige Eingaben, daher ist die Moderation immer aktiv und kann hier nicht deaktiviert werden.",
|
|
71
|
-
"ai_assistant.agents.moderation.inheritLabel": "Erben",
|
|
72
|
-
"ai_assistant.agents.moderation.offLabel": "Aus",
|
|
73
|
-
"ai_assistant.agents.moderation.onLabel": "Ein",
|
|
74
|
-
"ai_assistant.agents.moderation.saved": "Eingabe-Moderationseinstellung gespeichert.",
|
|
75
|
-
"ai_assistant.agents.moderation.subtitle": "Benutzereingaben vor dem Modelllauf auf unsichere Inhalte prüfen. Gilt nur, wenn der aufgelöste Anbieter Moderation unterstützt.",
|
|
76
|
-
"ai_assistant.agents.moderation.title": "Eingabe-Moderation",
|
|
77
54
|
"ai_assistant.agents.mutation_policy.clear": "Überschreibung löschen",
|
|
78
55
|
"ai_assistant.agents.mutation_policy.clearedMessage": "Überschreibung der Mutationsrichtlinie gelöscht; Agent verwendet die im Code deklarierte Richtlinie.",
|
|
79
56
|
"ai_assistant.agents.mutation_policy.codeDeclared": "Im Code deklariert",
|
|
@@ -298,9 +275,7 @@
|
|
|
298
275
|
"ai_assistant.chat.toolRunning": "running…",
|
|
299
276
|
"ai_assistant.chat.transcriptLabel": "Chat-Transkript",
|
|
300
277
|
"ai_assistant.chat.uiPartPending": "Ausstehendes UI-Element:",
|
|
301
|
-
"ai_assistant.chat.uploadingHint": "Anhänge werden hochgeladen… Senden ist deaktiviert, bis der Vorgang abgeschlossen ist.",
|
|
302
278
|
"ai_assistant.chat.userRoleLabel": "Sie",
|
|
303
|
-
"ai_assistant.chat.welcomeDescription": "Frag mich alles zu deinen Daten. Das kann ich zum Beispiel tun:",
|
|
304
279
|
"ai_assistant.chat.welcomeTitle": "How can I help?",
|
|
305
280
|
"ai_assistant.chat.zoomImage": "Vorschau von {name} öffnen",
|
|
306
281
|
"ai_assistant.dock.bottom": "Unten andocken",
|
|
@@ -309,17 +284,13 @@
|
|
|
309
284
|
"ai_assistant.dock.left": "Links andocken",
|
|
310
285
|
"ai_assistant.dock.minimize": "Minimieren",
|
|
311
286
|
"ai_assistant.dock.right": "Rechts andocken",
|
|
312
|
-
"ai_assistant.errors.moderationBlocked": "Ihre Nachricht wurde vom Inhaltssicherheitsfilter blockiert. Bitte formulieren Sie sie um und versuchen Sie es erneut.",
|
|
313
|
-
"ai_assistant.errors.moderationUnavailable": "Die Inhaltssicherheitsprüfung ist vorübergehend nicht verfügbar. Bitte versuchen Sie es in einem Moment erneut.",
|
|
314
287
|
"ai_assistant.launcher.composerPlaceholder": "Fragen Sie mich etwas…",
|
|
315
|
-
"ai_assistant.launcher.dialogDescription": "Wähle einen Assistenten. Mit ↑/↓ navigieren, Enter startet, Esc schließt.",
|
|
316
288
|
"ai_assistant.launcher.dialogTitle": "AI assistants",
|
|
317
289
|
"ai_assistant.launcher.dock.subtitle": "AI assistant",
|
|
318
290
|
"ai_assistant.launcher.empty": "No assistants match your search.",
|
|
319
291
|
"ai_assistant.launcher.hint.close": "Close",
|
|
320
292
|
"ai_assistant.launcher.hint.launch": "Launch",
|
|
321
293
|
"ai_assistant.launcher.hint.navigate": "Navigate",
|
|
322
|
-
"ai_assistant.launcher.none": "Für dein Konto sind keine Assistenten verfügbar.",
|
|
323
294
|
"ai_assistant.launcher.searchPlaceholder": "Search assistants...",
|
|
324
295
|
"ai_assistant.launcher.setup.body": "KI-Assistenten sind installiert, aber es ist kein Anbieterschlüssel konfiguriert. Lege OM_AI_PROVIDER und einen passenden API-Schlüssel in deiner .env-Datei fest und starte die App neu.",
|
|
325
296
|
"ai_assistant.launcher.setup.docs": "Dokumentation zum KI-Assistenten",
|
|
@@ -328,7 +299,6 @@
|
|
|
328
299
|
"ai_assistant.launcher.sheet.dock": "Dock to side",
|
|
329
300
|
"ai_assistant.launcher.triggerAriaLabel": "Open AI assistant",
|
|
330
301
|
"ai_assistant.launcher.triggerLabel": "AI",
|
|
331
|
-
"ai_assistant.launcher.welcome.fallback": "Wie kann ich helfen?",
|
|
332
302
|
"ai_assistant.launcher.welcome.suggestion1": "What can you help me with?",
|
|
333
303
|
"ai_assistant.launcher.welcome.suggestion2": "Show what data you can access",
|
|
334
304
|
"ai_assistant.launcher.welcome.suggestion3": "Suggest things to try",
|
|
@@ -356,18 +326,6 @@
|
|
|
356
326
|
"ai_assistant.modelPicker.triggerAriaLabel": "KI-Modell auswählen",
|
|
357
327
|
"ai_assistant.modelPicker.useDefault": "Standard des Agenten verwenden",
|
|
358
328
|
"ai_assistant.modelPicker.useDefaultWithModel": "Standard des Agenten verwenden: {{model}}",
|
|
359
|
-
"ai_assistant.moderationFlags.columns.agent": "Agent",
|
|
360
|
-
"ai_assistant.moderationFlags.columns.categories": "Kategorien",
|
|
361
|
-
"ai_assistant.moderationFlags.columns.createdAt": "Markiert am",
|
|
362
|
-
"ai_assistant.moderationFlags.columns.user": "Benutzer",
|
|
363
|
-
"ai_assistant.moderationFlags.empty": "Keine markierten Nachrichten.",
|
|
364
|
-
"ai_assistant.moderationFlags.filters.agentPlaceholder": "modul.agent",
|
|
365
|
-
"ai_assistant.moderationFlags.filters.apply": "Anwenden",
|
|
366
|
-
"ai_assistant.moderationFlags.filters.from": "Von",
|
|
367
|
-
"ai_assistant.moderationFlags.filters.to": "Bis",
|
|
368
|
-
"ai_assistant.moderationFlags.navTitle": "Moderations-Flags",
|
|
369
|
-
"ai_assistant.moderationFlags.subtitle": "Vom Inhaltssicherheitsfilter blockierte Eingaben. Nur Kategorie-Flags und Scores — es wird kein Prompt-Inhalt gespeichert.",
|
|
370
|
-
"ai_assistant.moderationFlags.title": "Moderations-Flags",
|
|
371
329
|
"ai_assistant.notifications.conversation_shared.body": "Eine KI-Konversation wurde mit Ihnen geteilt.",
|
|
372
330
|
"ai_assistant.notifications.conversation_shared.title": "Konversation mit Ihnen geteilt",
|
|
373
331
|
"ai_assistant.notifications.conversation_shared.view_button": "Konversation öffnen",
|
|
@@ -36,44 +36,21 @@
|
|
|
36
36
|
"ai_assistant.agents.meta.readOnlyYes": "Yes",
|
|
37
37
|
"ai_assistant.agents.meta.unlimited": "Unlimited",
|
|
38
38
|
"ai_assistant.agents.model_override.allowlistCustom": "custom",
|
|
39
|
-
"ai_assistant.agents.model_override.allowlistEmpty": "No configured providers are available for chat overrides.",
|
|
40
|
-
"ai_assistant.agents.model_override.allowlistHelp": "Limit which provider/model overrides users can pick in the chat footer for this agent.",
|
|
41
39
|
"ai_assistant.agents.model_override.allowlistInherited": "inherited",
|
|
42
40
|
"ai_assistant.agents.model_override.allowlistReset": "Inherit",
|
|
43
41
|
"ai_assistant.agents.model_override.allowlistSave": "Save choices",
|
|
44
|
-
"ai_assistant.agents.model_override.allowlistSaved": "Chat override choices saved.",
|
|
45
|
-
"ai_assistant.agents.model_override.allowlistTitle": "Chat override choices",
|
|
46
42
|
"ai_assistant.agents.model_override.anyProvider": "first configured",
|
|
47
43
|
"ai_assistant.agents.model_override.clear": "Clear override",
|
|
48
|
-
"ai_assistant.agents.model_override.cleared": "Model override cleared; the agent is using the normal resolution chain.",
|
|
49
44
|
"ai_assistant.agents.model_override.codeDefault": "Code-declared default",
|
|
50
45
|
"ai_assistant.agents.model_override.defaultBadge": "default",
|
|
51
|
-
"ai_assistant.agents.model_override.envAlsoNarrows": "also narrows this list from env.",
|
|
52
|
-
"ai_assistant.agents.model_override.loadErrorTitle": "Failed to load provider catalog",
|
|
53
|
-
"ai_assistant.agents.model_override.loading": "Loading provider catalog...",
|
|
54
46
|
"ai_assistant.agents.model_override.model": "Model",
|
|
55
47
|
"ai_assistant.agents.model_override.noOverride": "No per-agent override",
|
|
56
48
|
"ai_assistant.agents.model_override.provider": "Provider",
|
|
57
49
|
"ai_assistant.agents.model_override.providerDefault": "provider default",
|
|
58
50
|
"ai_assistant.agents.model_override.save": "Save override",
|
|
59
51
|
"ai_assistant.agents.model_override.saved": "Model override saved.",
|
|
60
|
-
"ai_assistant.agents.model_override.selectModel": "Select model",
|
|
61
|
-
"ai_assistant.agents.model_override.selectProvider": "Select provider",
|
|
62
|
-
"ai_assistant.agents.model_override.subtitle": "Override the default provider and model for this tenant and agent.",
|
|
63
52
|
"ai_assistant.agents.model_override.tenantOverride": "Tenant override",
|
|
64
53
|
"ai_assistant.agents.model_override.title": "Provider and model",
|
|
65
|
-
"ai_assistant.agents.moderation.controlLabel": "Moderation",
|
|
66
|
-
"ai_assistant.agents.moderation.effectiveEnforced": "Enforced",
|
|
67
|
-
"ai_assistant.agents.moderation.effectiveOff": "Off",
|
|
68
|
-
"ai_assistant.agents.moderation.effectiveOn": "On",
|
|
69
|
-
"ai_assistant.agents.moderation.enforcedBadge": "Enforced",
|
|
70
|
-
"ai_assistant.agents.moderation.enforcedHint": "This agent accepts untrusted input, so moderation is always on and cannot be disabled here.",
|
|
71
|
-
"ai_assistant.agents.moderation.inheritLabel": "Inherit",
|
|
72
|
-
"ai_assistant.agents.moderation.offLabel": "Off",
|
|
73
|
-
"ai_assistant.agents.moderation.onLabel": "On",
|
|
74
|
-
"ai_assistant.agents.moderation.saved": "Input moderation setting saved.",
|
|
75
|
-
"ai_assistant.agents.moderation.subtitle": "Screen user input for unsafe content before the model runs. Applies only when the resolved provider supports moderation.",
|
|
76
|
-
"ai_assistant.agents.moderation.title": "Input moderation",
|
|
77
54
|
"ai_assistant.agents.mutation_policy.clear": "Clear override",
|
|
78
55
|
"ai_assistant.agents.mutation_policy.clearedMessage": "Mutation policy override cleared; agent is using its code-declared policy.",
|
|
79
56
|
"ai_assistant.agents.mutation_policy.codeDeclared": "Code-declared",
|
|
@@ -298,9 +275,7 @@
|
|
|
298
275
|
"ai_assistant.chat.toolRunning": "running…",
|
|
299
276
|
"ai_assistant.chat.transcriptLabel": "Chat transcript",
|
|
300
277
|
"ai_assistant.chat.uiPartPending": "Pending UI part:",
|
|
301
|
-
"ai_assistant.chat.uploadingHint": "Uploading attachments… Send is disabled until they finish.",
|
|
302
278
|
"ai_assistant.chat.userRoleLabel": "You",
|
|
303
|
-
"ai_assistant.chat.welcomeDescription": "Ask me anything about your data. Here are some things I can do:",
|
|
304
279
|
"ai_assistant.chat.welcomeTitle": "How can I help?",
|
|
305
280
|
"ai_assistant.chat.zoomImage": "Open {name} preview",
|
|
306
281
|
"ai_assistant.dock.bottom": "Dock Bottom",
|
|
@@ -309,17 +284,13 @@
|
|
|
309
284
|
"ai_assistant.dock.left": "Dock Left",
|
|
310
285
|
"ai_assistant.dock.minimize": "Minimize",
|
|
311
286
|
"ai_assistant.dock.right": "Dock Right",
|
|
312
|
-
"ai_assistant.errors.moderationBlocked": "Your message was blocked by the content safety filter. Please rephrase and try again.",
|
|
313
|
-
"ai_assistant.errors.moderationUnavailable": "The content safety check is temporarily unavailable. Please try again in a moment.",
|
|
314
287
|
"ai_assistant.launcher.composerPlaceholder": "Ask anything…",
|
|
315
|
-
"ai_assistant.launcher.dialogDescription": "Pick an assistant. Use ↑/↓ to navigate, Enter to launch, Esc to close.",
|
|
316
288
|
"ai_assistant.launcher.dialogTitle": "AI assistants",
|
|
317
289
|
"ai_assistant.launcher.dock.subtitle": "AI assistant",
|
|
318
290
|
"ai_assistant.launcher.empty": "No assistants match your search.",
|
|
319
291
|
"ai_assistant.launcher.hint.close": "Close",
|
|
320
292
|
"ai_assistant.launcher.hint.launch": "Launch",
|
|
321
293
|
"ai_assistant.launcher.hint.navigate": "Navigate",
|
|
322
|
-
"ai_assistant.launcher.none": "No assistants are available for your account.",
|
|
323
294
|
"ai_assistant.launcher.searchPlaceholder": "Search assistants...",
|
|
324
295
|
"ai_assistant.launcher.setup.body": "AI assistants are installed, but no provider key is configured. Set OM_AI_PROVIDER and one matching API key in your .env file, then restart the app.",
|
|
325
296
|
"ai_assistant.launcher.setup.docs": "AI assistant docs",
|
|
@@ -328,7 +299,6 @@
|
|
|
328
299
|
"ai_assistant.launcher.sheet.dock": "Dock to side",
|
|
329
300
|
"ai_assistant.launcher.triggerAriaLabel": "Open AI assistant",
|
|
330
301
|
"ai_assistant.launcher.triggerLabel": "AI",
|
|
331
|
-
"ai_assistant.launcher.welcome.fallback": "How can I help?",
|
|
332
302
|
"ai_assistant.launcher.welcome.suggestion1": "What can you help me with?",
|
|
333
303
|
"ai_assistant.launcher.welcome.suggestion2": "Show what data you can access",
|
|
334
304
|
"ai_assistant.launcher.welcome.suggestion3": "Suggest things to try",
|
|
@@ -356,18 +326,6 @@
|
|
|
356
326
|
"ai_assistant.modelPicker.triggerAriaLabel": "Select AI model",
|
|
357
327
|
"ai_assistant.modelPicker.useDefault": "Use agent default",
|
|
358
328
|
"ai_assistant.modelPicker.useDefaultWithModel": "Use agent default: {{model}}",
|
|
359
|
-
"ai_assistant.moderationFlags.columns.agent": "Agent",
|
|
360
|
-
"ai_assistant.moderationFlags.columns.categories": "Categories",
|
|
361
|
-
"ai_assistant.moderationFlags.columns.createdAt": "Flagged at",
|
|
362
|
-
"ai_assistant.moderationFlags.columns.user": "User",
|
|
363
|
-
"ai_assistant.moderationFlags.empty": "No flagged messages.",
|
|
364
|
-
"ai_assistant.moderationFlags.filters.agentPlaceholder": "module.agent",
|
|
365
|
-
"ai_assistant.moderationFlags.filters.apply": "Apply",
|
|
366
|
-
"ai_assistant.moderationFlags.filters.from": "From",
|
|
367
|
-
"ai_assistant.moderationFlags.filters.to": "To",
|
|
368
|
-
"ai_assistant.moderationFlags.navTitle": "Moderation flags",
|
|
369
|
-
"ai_assistant.moderationFlags.subtitle": "Inputs blocked by the content safety filter. Category flags and scores only — no prompt content is stored.",
|
|
370
|
-
"ai_assistant.moderationFlags.title": "Moderation flags",
|
|
371
329
|
"ai_assistant.notifications.conversation_shared.body": "An AI conversation has been shared with you.",
|
|
372
330
|
"ai_assistant.notifications.conversation_shared.title": "Conversation shared with you",
|
|
373
331
|
"ai_assistant.notifications.conversation_shared.view_button": "View Conversation",
|
|
@@ -36,44 +36,21 @@
|
|
|
36
36
|
"ai_assistant.agents.meta.readOnlyYes": "Sí",
|
|
37
37
|
"ai_assistant.agents.meta.unlimited": "Sin límite",
|
|
38
38
|
"ai_assistant.agents.model_override.allowlistCustom": "personalizado",
|
|
39
|
-
"ai_assistant.agents.model_override.allowlistEmpty": "No hay proveedores configurados disponibles para anulaciones del chat.",
|
|
40
|
-
"ai_assistant.agents.model_override.allowlistHelp": "Limita qué anulaciones de proveedor y modelo pueden elegir los usuarios en el pie del chat para este agente.",
|
|
41
39
|
"ai_assistant.agents.model_override.allowlistInherited": "heredado",
|
|
42
40
|
"ai_assistant.agents.model_override.allowlistReset": "Heredar",
|
|
43
41
|
"ai_assistant.agents.model_override.allowlistSave": "Guardar opciones",
|
|
44
|
-
"ai_assistant.agents.model_override.allowlistSaved": "Opciones de anulación del chat guardadas.",
|
|
45
|
-
"ai_assistant.agents.model_override.allowlistTitle": "Opciones de anulación del chat",
|
|
46
42
|
"ai_assistant.agents.model_override.anyProvider": "primer configurado",
|
|
47
43
|
"ai_assistant.agents.model_override.clear": "Eliminar sobrescritura",
|
|
48
|
-
"ai_assistant.agents.model_override.cleared": "Se ha borrado la anulación del modelo; el agente usa la cadena de resolución normal.",
|
|
49
44
|
"ai_assistant.agents.model_override.codeDefault": "Predeterminado declarado en código",
|
|
50
45
|
"ai_assistant.agents.model_override.defaultBadge": "predeterminado",
|
|
51
|
-
"ai_assistant.agents.model_override.envAlsoNarrows": "también restringe esta lista desde el entorno.",
|
|
52
|
-
"ai_assistant.agents.model_override.loadErrorTitle": "No se pudo cargar el catálogo de proveedores",
|
|
53
|
-
"ai_assistant.agents.model_override.loading": "Cargando el catálogo de proveedores...",
|
|
54
46
|
"ai_assistant.agents.model_override.model": "Modelo",
|
|
55
47
|
"ai_assistant.agents.model_override.noOverride": "Sin sobrescritura por agente",
|
|
56
48
|
"ai_assistant.agents.model_override.provider": "Proveedor",
|
|
57
49
|
"ai_assistant.agents.model_override.providerDefault": "predeterminado del proveedor",
|
|
58
50
|
"ai_assistant.agents.model_override.save": "Guardar sobrescritura",
|
|
59
51
|
"ai_assistant.agents.model_override.saved": "Sobrescritura de modelo guardada.",
|
|
60
|
-
"ai_assistant.agents.model_override.selectModel": "Selecciona un modelo",
|
|
61
|
-
"ai_assistant.agents.model_override.selectProvider": "Selecciona un proveedor",
|
|
62
|
-
"ai_assistant.agents.model_override.subtitle": "Anula el proveedor y el modelo predeterminados para este inquilino y agente.",
|
|
63
52
|
"ai_assistant.agents.model_override.tenantOverride": "Sobrescritura del tenant",
|
|
64
53
|
"ai_assistant.agents.model_override.title": "Proveedor y modelo",
|
|
65
|
-
"ai_assistant.agents.moderation.controlLabel": "Moderación",
|
|
66
|
-
"ai_assistant.agents.moderation.effectiveEnforced": "Forzada",
|
|
67
|
-
"ai_assistant.agents.moderation.effectiveOff": "Desactivada",
|
|
68
|
-
"ai_assistant.agents.moderation.effectiveOn": "Activada",
|
|
69
|
-
"ai_assistant.agents.moderation.enforcedBadge": "Forzada",
|
|
70
|
-
"ai_assistant.agents.moderation.enforcedHint": "Este agente acepta entradas no confiables, por lo que la moderación siempre está activada y no se puede desactivar aquí.",
|
|
71
|
-
"ai_assistant.agents.moderation.inheritLabel": "Heredar",
|
|
72
|
-
"ai_assistant.agents.moderation.offLabel": "Desactivada",
|
|
73
|
-
"ai_assistant.agents.moderation.onLabel": "Activada",
|
|
74
|
-
"ai_assistant.agents.moderation.saved": "Ajuste de moderación de entrada guardado.",
|
|
75
|
-
"ai_assistant.agents.moderation.subtitle": "Filtra la entrada del usuario en busca de contenido no seguro antes de ejecutar el modelo. Solo aplica cuando el proveedor resuelto admite moderación.",
|
|
76
|
-
"ai_assistant.agents.moderation.title": "Moderación de entrada",
|
|
77
54
|
"ai_assistant.agents.mutation_policy.clear": "Eliminar sobrescritura",
|
|
78
55
|
"ai_assistant.agents.mutation_policy.clearedMessage": "Sobrescritura de política de mutación eliminada; el agente usa la política declarada en el código.",
|
|
79
56
|
"ai_assistant.agents.mutation_policy.codeDeclared": "Declarada en el código",
|
|
@@ -298,9 +275,7 @@
|
|
|
298
275
|
"ai_assistant.chat.toolRunning": "running…",
|
|
299
276
|
"ai_assistant.chat.transcriptLabel": "Transcripción del chat",
|
|
300
277
|
"ai_assistant.chat.uiPartPending": "Parte de UI pendiente:",
|
|
301
|
-
"ai_assistant.chat.uploadingHint": "Subiendo archivos adjuntos… El envío está desactivado hasta que terminen.",
|
|
302
278
|
"ai_assistant.chat.userRoleLabel": "Usted",
|
|
303
|
-
"ai_assistant.chat.welcomeDescription": "Pregúntame lo que quieras sobre tus datos. Esto es algo de lo que puedo hacer:",
|
|
304
279
|
"ai_assistant.chat.welcomeTitle": "How can I help?",
|
|
305
280
|
"ai_assistant.chat.zoomImage": "Abrir vista previa de {name}",
|
|
306
281
|
"ai_assistant.dock.bottom": "Anclar abajo",
|
|
@@ -309,17 +284,13 @@
|
|
|
309
284
|
"ai_assistant.dock.left": "Anclar a la izquierda",
|
|
310
285
|
"ai_assistant.dock.minimize": "Minimizar",
|
|
311
286
|
"ai_assistant.dock.right": "Anclar a la derecha",
|
|
312
|
-
"ai_assistant.errors.moderationBlocked": "Tu mensaje fue bloqueado por el filtro de seguridad de contenido. Reformúlalo e inténtalo de nuevo.",
|
|
313
|
-
"ai_assistant.errors.moderationUnavailable": "La verificación de seguridad de contenido no está disponible temporalmente. Inténtalo de nuevo en un momento.",
|
|
314
287
|
"ai_assistant.launcher.composerPlaceholder": "Pregunte lo que necesite…",
|
|
315
|
-
"ai_assistant.launcher.dialogDescription": "Elige un asistente. Usa ↑/↓ para navegar, Enter para iniciar, Esc para cerrar.",
|
|
316
288
|
"ai_assistant.launcher.dialogTitle": "AI assistants",
|
|
317
289
|
"ai_assistant.launcher.dock.subtitle": "AI assistant",
|
|
318
290
|
"ai_assistant.launcher.empty": "No assistants match your search.",
|
|
319
291
|
"ai_assistant.launcher.hint.close": "Close",
|
|
320
292
|
"ai_assistant.launcher.hint.launch": "Launch",
|
|
321
293
|
"ai_assistant.launcher.hint.navigate": "Navigate",
|
|
322
|
-
"ai_assistant.launcher.none": "No hay asistentes disponibles para tu cuenta.",
|
|
323
294
|
"ai_assistant.launcher.searchPlaceholder": "Search assistants...",
|
|
324
295
|
"ai_assistant.launcher.setup.body": "Los asistentes de IA están instalados, pero no hay una clave de proveedor configurada. Define OM_AI_PROVIDER y una clave de API compatible en tu archivo .env y reinicia la app.",
|
|
325
296
|
"ai_assistant.launcher.setup.docs": "Documentación del asistente de IA",
|
|
@@ -328,7 +299,6 @@
|
|
|
328
299
|
"ai_assistant.launcher.sheet.dock": "Dock to side",
|
|
329
300
|
"ai_assistant.launcher.triggerAriaLabel": "Open AI assistant",
|
|
330
301
|
"ai_assistant.launcher.triggerLabel": "AI",
|
|
331
|
-
"ai_assistant.launcher.welcome.fallback": "¿En qué puedo ayudarte?",
|
|
332
302
|
"ai_assistant.launcher.welcome.suggestion1": "What can you help me with?",
|
|
333
303
|
"ai_assistant.launcher.welcome.suggestion2": "Show what data you can access",
|
|
334
304
|
"ai_assistant.launcher.welcome.suggestion3": "Suggest things to try",
|
|
@@ -356,18 +326,6 @@
|
|
|
356
326
|
"ai_assistant.modelPicker.triggerAriaLabel": "Selector de modelo de IA",
|
|
357
327
|
"ai_assistant.modelPicker.useDefault": "Usar predeterminado",
|
|
358
328
|
"ai_assistant.modelPicker.useDefaultWithModel": "Usar predeterminado del agente: {{model}}",
|
|
359
|
-
"ai_assistant.moderationFlags.columns.agent": "Agente",
|
|
360
|
-
"ai_assistant.moderationFlags.columns.categories": "Categorías",
|
|
361
|
-
"ai_assistant.moderationFlags.columns.createdAt": "Marcado el",
|
|
362
|
-
"ai_assistant.moderationFlags.columns.user": "Usuario",
|
|
363
|
-
"ai_assistant.moderationFlags.empty": "No hay mensajes marcados.",
|
|
364
|
-
"ai_assistant.moderationFlags.filters.agentPlaceholder": "modulo.agente",
|
|
365
|
-
"ai_assistant.moderationFlags.filters.apply": "Aplicar",
|
|
366
|
-
"ai_assistant.moderationFlags.filters.from": "Desde",
|
|
367
|
-
"ai_assistant.moderationFlags.filters.to": "Hasta",
|
|
368
|
-
"ai_assistant.moderationFlags.navTitle": "Marcas de moderación",
|
|
369
|
-
"ai_assistant.moderationFlags.subtitle": "Entradas bloqueadas por el filtro de seguridad de contenido. Solo indicadores de categoría y puntuaciones — no se almacena el contenido del prompt.",
|
|
370
|
-
"ai_assistant.moderationFlags.title": "Marcas de moderación",
|
|
371
329
|
"ai_assistant.notifications.conversation_shared.body": "Se ha compartido una conversación de IA con usted.",
|
|
372
330
|
"ai_assistant.notifications.conversation_shared.title": "Conversación compartida con usted",
|
|
373
331
|
"ai_assistant.notifications.conversation_shared.view_button": "Ver conversación",
|
|
@@ -36,44 +36,21 @@
|
|
|
36
36
|
"ai_assistant.agents.meta.readOnlyYes": "Tak",
|
|
37
37
|
"ai_assistant.agents.meta.unlimited": "Bez limitu",
|
|
38
38
|
"ai_assistant.agents.model_override.allowlistCustom": "niestandardowe",
|
|
39
|
-
"ai_assistant.agents.model_override.allowlistEmpty": "Brak skonfigurowanych dostawców dostępnych do nadpisań w czacie.",
|
|
40
|
-
"ai_assistant.agents.model_override.allowlistHelp": "Ogranicz, które nadpisania dostawcy i modelu użytkownicy mogą wybrać w stopce czatu dla tego agenta.",
|
|
41
39
|
"ai_assistant.agents.model_override.allowlistInherited": "dziedziczone",
|
|
42
40
|
"ai_assistant.agents.model_override.allowlistReset": "Dziedzicz",
|
|
43
41
|
"ai_assistant.agents.model_override.allowlistSave": "Zapisz wybór",
|
|
44
|
-
"ai_assistant.agents.model_override.allowlistSaved": "Zapisano dozwolone opcje nadpisań w czacie.",
|
|
45
|
-
"ai_assistant.agents.model_override.allowlistTitle": "Dozwolone opcje nadpisań w czacie",
|
|
46
42
|
"ai_assistant.agents.model_override.anyProvider": "pierwszy skonfigurowany",
|
|
47
43
|
"ai_assistant.agents.model_override.clear": "Wyczyść nadpisanie",
|
|
48
|
-
"ai_assistant.agents.model_override.cleared": "Nadpisanie modelu zostało wyczyszczone; agent korzysta ze standardowego łańcucha rozwiązywania.",
|
|
49
44
|
"ai_assistant.agents.model_override.codeDefault": "Domyślne z kodu",
|
|
50
45
|
"ai_assistant.agents.model_override.defaultBadge": "domyślne",
|
|
51
|
-
"ai_assistant.agents.model_override.envAlsoNarrows": "dodatkowo zawęża tę listę na podstawie zmiennych środowiskowych.",
|
|
52
|
-
"ai_assistant.agents.model_override.loadErrorTitle": "Nie udało się wczytać katalogu dostawców",
|
|
53
|
-
"ai_assistant.agents.model_override.loading": "Wczytywanie katalogu dostawców…",
|
|
54
46
|
"ai_assistant.agents.model_override.model": "Model",
|
|
55
47
|
"ai_assistant.agents.model_override.noOverride": "Brak nadpisania dla agenta",
|
|
56
48
|
"ai_assistant.agents.model_override.provider": "Dostawca",
|
|
57
49
|
"ai_assistant.agents.model_override.providerDefault": "domyślne dostawcy",
|
|
58
50
|
"ai_assistant.agents.model_override.save": "Zapisz nadpisanie",
|
|
59
51
|
"ai_assistant.agents.model_override.saved": "Nadpisanie modelu zapisane.",
|
|
60
|
-
"ai_assistant.agents.model_override.selectModel": "Wybierz model",
|
|
61
|
-
"ai_assistant.agents.model_override.selectProvider": "Wybierz dostawcę",
|
|
62
|
-
"ai_assistant.agents.model_override.subtitle": "Nadpisz domyślnego dostawcę i model dla tego najemcy i agenta.",
|
|
63
52
|
"ai_assistant.agents.model_override.tenantOverride": "Nadpisanie tenant",
|
|
64
53
|
"ai_assistant.agents.model_override.title": "Dostawca i model",
|
|
65
|
-
"ai_assistant.agents.moderation.controlLabel": "Moderacja",
|
|
66
|
-
"ai_assistant.agents.moderation.effectiveEnforced": "Wymuszona",
|
|
67
|
-
"ai_assistant.agents.moderation.effectiveOff": "Wyłączona",
|
|
68
|
-
"ai_assistant.agents.moderation.effectiveOn": "Włączona",
|
|
69
|
-
"ai_assistant.agents.moderation.enforcedBadge": "Wymuszona",
|
|
70
|
-
"ai_assistant.agents.moderation.enforcedHint": "Ten agent przyjmuje niezaufane dane wejściowe, więc moderacja jest zawsze włączona i nie można jej tutaj wyłączyć.",
|
|
71
|
-
"ai_assistant.agents.moderation.inheritLabel": "Dziedzicz",
|
|
72
|
-
"ai_assistant.agents.moderation.offLabel": "Wyłączona",
|
|
73
|
-
"ai_assistant.agents.moderation.onLabel": "Włączona",
|
|
74
|
-
"ai_assistant.agents.moderation.saved": "Zapisano ustawienie moderacji danych wejściowych.",
|
|
75
|
-
"ai_assistant.agents.moderation.subtitle": "Filtruj dane wejściowe użytkownika pod kątem niebezpiecznych treści przed uruchomieniem modelu. Działa tylko, gdy wybrany dostawca obsługuje moderację.",
|
|
76
|
-
"ai_assistant.agents.moderation.title": "Moderacja danych wejściowych",
|
|
77
54
|
"ai_assistant.agents.mutation_policy.clear": "Wyczyść nadpisanie",
|
|
78
55
|
"ai_assistant.agents.mutation_policy.clearedMessage": "Nadpisanie polityki mutacji usunięte; agent korzysta z polityki zadeklarowanej w kodzie.",
|
|
79
56
|
"ai_assistant.agents.mutation_policy.codeDeclared": "Zadeklarowane w kodzie",
|
|
@@ -298,9 +275,7 @@
|
|
|
298
275
|
"ai_assistant.chat.toolRunning": "w toku…",
|
|
299
276
|
"ai_assistant.chat.transcriptLabel": "Transkrypcja czatu",
|
|
300
277
|
"ai_assistant.chat.uiPartPending": "Oczekująca część UI:",
|
|
301
|
-
"ai_assistant.chat.uploadingHint": "Trwa przesyłanie załączników… Wysyłanie jest zablokowane do zakończenia.",
|
|
302
278
|
"ai_assistant.chat.userRoleLabel": "Ty",
|
|
303
|
-
"ai_assistant.chat.welcomeDescription": "Zapytaj mnie o cokolwiek z Twoich danych. Oto kilka rzeczy, które potrafię:",
|
|
304
279
|
"ai_assistant.chat.welcomeTitle": "W czym mogę pomóc?",
|
|
305
280
|
"ai_assistant.chat.zoomImage": "Otwórz podgląd {name}",
|
|
306
281
|
"ai_assistant.dock.bottom": "Dokuj na dole",
|
|
@@ -309,17 +284,13 @@
|
|
|
309
284
|
"ai_assistant.dock.left": "Dokuj po lewej",
|
|
310
285
|
"ai_assistant.dock.minimize": "Minimalizuj",
|
|
311
286
|
"ai_assistant.dock.right": "Dokuj po prawej",
|
|
312
|
-
"ai_assistant.errors.moderationBlocked": "Twoja wiadomość została zablokowana przez filtr bezpieczeństwa treści. Przeformułuj ją i spróbuj ponownie.",
|
|
313
|
-
"ai_assistant.errors.moderationUnavailable": "Sprawdzanie bezpieczeństwa treści jest chwilowo niedostępne. Spróbuj ponownie za chwilę.",
|
|
314
287
|
"ai_assistant.launcher.composerPlaceholder": "Zapytaj o cokolwiek…",
|
|
315
|
-
"ai_assistant.launcher.dialogDescription": "Wybierz asystenta. Nawiguj klawiszami ↑/↓, Enter uruchamia, Esc zamyka.",
|
|
316
288
|
"ai_assistant.launcher.dialogTitle": "Asystenci AI",
|
|
317
289
|
"ai_assistant.launcher.dock.subtitle": "Asystent AI",
|
|
318
290
|
"ai_assistant.launcher.empty": "Żaden asystent nie pasuje do wyszukiwania.",
|
|
319
291
|
"ai_assistant.launcher.hint.close": "Zamknij",
|
|
320
292
|
"ai_assistant.launcher.hint.launch": "Uruchom",
|
|
321
293
|
"ai_assistant.launcher.hint.navigate": "Nawigacja",
|
|
322
|
-
"ai_assistant.launcher.none": "Dla Twojego konta nie są dostępni żadni asystenci.",
|
|
323
294
|
"ai_assistant.launcher.searchPlaceholder": "Szukaj asystentów...",
|
|
324
295
|
"ai_assistant.launcher.setup.body": "Asystenci AI są zainstalowani, ale nie skonfigurowano klucza dostawcy. Ustaw OM_AI_PROVIDER oraz pasujący klucz API w pliku .env, a następnie uruchom aplikację ponownie.",
|
|
325
296
|
"ai_assistant.launcher.setup.docs": "Dokumentacja asystenta AI",
|
|
@@ -328,7 +299,6 @@
|
|
|
328
299
|
"ai_assistant.launcher.sheet.dock": "Przypnij z boku",
|
|
329
300
|
"ai_assistant.launcher.triggerAriaLabel": "Otwórz asystenta AI",
|
|
330
301
|
"ai_assistant.launcher.triggerLabel": "AI",
|
|
331
|
-
"ai_assistant.launcher.welcome.fallback": "W czym mogę pomóc?",
|
|
332
302
|
"ai_assistant.launcher.welcome.suggestion1": "W czym możesz mi pomóc?",
|
|
333
303
|
"ai_assistant.launcher.welcome.suggestion2": "Pokaż, do jakich danych masz dostęp",
|
|
334
304
|
"ai_assistant.launcher.welcome.suggestion3": "Zaproponuj, co mogę wypróbować",
|
|
@@ -356,18 +326,6 @@
|
|
|
356
326
|
"ai_assistant.modelPicker.triggerAriaLabel": "Wybierz model AI",
|
|
357
327
|
"ai_assistant.modelPicker.useDefault": "Użyj domyślnego agenta",
|
|
358
328
|
"ai_assistant.modelPicker.useDefaultWithModel": "Użyj domyślnego agenta: {{model}}",
|
|
359
|
-
"ai_assistant.moderationFlags.columns.agent": "Agent",
|
|
360
|
-
"ai_assistant.moderationFlags.columns.categories": "Kategorie",
|
|
361
|
-
"ai_assistant.moderationFlags.columns.createdAt": "Oznaczono",
|
|
362
|
-
"ai_assistant.moderationFlags.columns.user": "Użytkownik",
|
|
363
|
-
"ai_assistant.moderationFlags.empty": "Brak oznaczonych wiadomości.",
|
|
364
|
-
"ai_assistant.moderationFlags.filters.agentPlaceholder": "moduł.agent",
|
|
365
|
-
"ai_assistant.moderationFlags.filters.apply": "Zastosuj",
|
|
366
|
-
"ai_assistant.moderationFlags.filters.from": "Od",
|
|
367
|
-
"ai_assistant.moderationFlags.filters.to": "Do",
|
|
368
|
-
"ai_assistant.moderationFlags.navTitle": "Flagi moderacji",
|
|
369
|
-
"ai_assistant.moderationFlags.subtitle": "Dane wejściowe zablokowane przez filtr bezpieczeństwa treści. Tylko flagi kategorii i wyniki — treść promptu nie jest przechowywana.",
|
|
370
|
-
"ai_assistant.moderationFlags.title": "Flagi moderacji",
|
|
371
329
|
"ai_assistant.notifications.conversation_shared.body": "Udostępniono Ci konwersację z asystentem AI.",
|
|
372
330
|
"ai_assistant.notifications.conversation_shared.title": "Udostępniono Ci konwersację",
|
|
373
331
|
"ai_assistant.notifications.conversation_shared.view_button": "Otwórz konwersację",
|
|
@@ -11,18 +11,6 @@ import {
|
|
|
11
11
|
Experimental_Agent as ToolLoopAgent
|
|
12
12
|
} from "ai";
|
|
13
13
|
import { createModelFactory, resolveAllowRuntimeOverride } from "./model-factory.js";
|
|
14
|
-
import { computeEndUserIdentifier } from "@open-mercato/shared/lib/ai/safety-identifier";
|
|
15
|
-
import { llmProviderRegistry } from "@open-mercato/shared/lib/ai/llm-provider-registry";
|
|
16
|
-
import {
|
|
17
|
-
AiModerationBlockedError,
|
|
18
|
-
AiModerationUnavailableError
|
|
19
|
-
} from "./moderation.js";
|
|
20
|
-
import {
|
|
21
|
-
isModerationActive,
|
|
22
|
-
resolveModerationPolicy,
|
|
23
|
-
shouldFailClosed
|
|
24
|
-
} from "./moderation-policy.js";
|
|
25
|
-
import { recordModerationFlag } from "./moderation-flag-recorder.js";
|
|
26
14
|
import {
|
|
27
15
|
resolveAiAgentTools,
|
|
28
16
|
AgentPolicyError,
|
|
@@ -409,7 +397,7 @@ function assertLoopObjectModeCompatible(loopConfig) {
|
|
|
409
397
|
);
|
|
410
398
|
}
|
|
411
399
|
}
|
|
412
|
-
function resolveAgentModel(agent, modelOverride, providerOverride, container, baseUrlOverride, tenantOverride, requestOverride, tenantAllowlist
|
|
400
|
+
function resolveAgentModel(agent, modelOverride, providerOverride, container, baseUrlOverride, tenantOverride, requestOverride, tenantAllowlist) {
|
|
413
401
|
const effectiveContainer = container ?? createContainer();
|
|
414
402
|
const resolution = createModelFactory(effectiveContainer).resolveModel({
|
|
415
403
|
moduleId: agent.moduleId,
|
|
@@ -422,88 +410,14 @@ function resolveAgentModel(agent, modelOverride, providerOverride, container, ba
|
|
|
422
410
|
allowRuntimeOverride: resolveAllowRuntimeOverride(agent),
|
|
423
411
|
tenantOverride: tenantOverride ?? void 0,
|
|
424
412
|
requestOverride: requestOverride ?? void 0,
|
|
425
|
-
tenantAllowlist: tenantAllowlist ?? null
|
|
426
|
-
endUserIdentifier
|
|
413
|
+
tenantAllowlist: tenantAllowlist ?? null
|
|
427
414
|
});
|
|
428
415
|
return {
|
|
429
416
|
model: resolution.model,
|
|
430
417
|
modelId: resolution.modelId,
|
|
431
|
-
providerId: resolution.providerId
|
|
432
|
-
providerOptions: resolution.providerOptions,
|
|
433
|
-
supportsInputModeration: resolution.supportsInputModeration === true,
|
|
434
|
-
baseURL: resolution.baseURL
|
|
418
|
+
providerId: resolution.providerId
|
|
435
419
|
};
|
|
436
420
|
}
|
|
437
|
-
function extractLatestUserText(messages) {
|
|
438
|
-
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
439
|
-
const raw = messages[index];
|
|
440
|
-
if (raw.role !== "user") continue;
|
|
441
|
-
if (Array.isArray(raw.parts)) {
|
|
442
|
-
return raw.parts.filter((part) => part?.type === "text" && typeof part.text === "string").map((part) => part.text).join("\n");
|
|
443
|
-
}
|
|
444
|
-
return typeof raw.content === "string" ? raw.content : "";
|
|
445
|
-
}
|
|
446
|
-
return "";
|
|
447
|
-
}
|
|
448
|
-
async function runInputModerationGate(params) {
|
|
449
|
-
const policy = resolveModerationPolicy({
|
|
450
|
-
untrustedInput: params.untrustedInput,
|
|
451
|
-
perAgentOverride: params.perAgentOverride,
|
|
452
|
-
tenantWideOverride: params.tenantWideOverride,
|
|
453
|
-
env: params.env
|
|
454
|
-
});
|
|
455
|
-
if (!isModerationActive(policy)) return;
|
|
456
|
-
if (!params.supportsInputModeration) return;
|
|
457
|
-
const text = params.userText.trim();
|
|
458
|
-
if (!text) return;
|
|
459
|
-
const failClosed = shouldFailClosed(policy);
|
|
460
|
-
const failOpenOrThrow = (reason, error) => {
|
|
461
|
-
if (failClosed) {
|
|
462
|
-
if (error instanceof AiModerationUnavailableError) throw error;
|
|
463
|
-
throw new AiModerationUnavailableError(reason, error);
|
|
464
|
-
}
|
|
465
|
-
logger.warn("Input moderation unavailable; failing open for opt-in surface", { reason });
|
|
466
|
-
};
|
|
467
|
-
if (!params.service) {
|
|
468
|
-
return failOpenOrThrow("moderation service is not available in the container");
|
|
469
|
-
}
|
|
470
|
-
const apiKey = params.resolveApiKey();
|
|
471
|
-
if (!apiKey) {
|
|
472
|
-
return failOpenOrThrow("no API key available for the moderation provider");
|
|
473
|
-
}
|
|
474
|
-
let result;
|
|
475
|
-
try {
|
|
476
|
-
result = await params.service.checkInput({
|
|
477
|
-
text,
|
|
478
|
-
apiKey,
|
|
479
|
-
baseURL: params.baseURL,
|
|
480
|
-
model: params.moderationModel
|
|
481
|
-
});
|
|
482
|
-
} catch (error) {
|
|
483
|
-
if (error instanceof AiModerationUnavailableError) {
|
|
484
|
-
return failOpenOrThrow(error.message, error);
|
|
485
|
-
}
|
|
486
|
-
throw error;
|
|
487
|
-
}
|
|
488
|
-
if (result.flagged) {
|
|
489
|
-
if (params.onFlagged) {
|
|
490
|
-
try {
|
|
491
|
-
await params.onFlagged(result.categories);
|
|
492
|
-
} catch (error) {
|
|
493
|
-
logger.error("Moderation flag side effect failed (rejection still applies)", { err: error });
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
throw new AiModerationBlockedError(result.categories);
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
function resolveEndUserIdentifier(authContext) {
|
|
500
|
-
try {
|
|
501
|
-
return computeEndUserIdentifier(authContext.tenantId, authContext.userId);
|
|
502
|
-
} catch (error) {
|
|
503
|
-
logger.warn("Failed to derive end-user safety identifier", { err: error });
|
|
504
|
-
return void 0;
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
421
|
async function resolveTenantAllowlistSnapshot(container, tenantId, organizationId) {
|
|
508
422
|
if (!tenantId || !container) return null;
|
|
509
423
|
let em = null;
|
|
@@ -636,31 +550,6 @@ async function resolveRuntimeModelOverride(agentId, container, tenantId, organiz
|
|
|
636
550
|
return null;
|
|
637
551
|
}
|
|
638
552
|
}
|
|
639
|
-
async function resolveModerationOverrideValues(container, tenantId, organizationId, agentId) {
|
|
640
|
-
const empty = { perAgentOverride: null, tenantWideOverride: null };
|
|
641
|
-
if (!tenantId || !container) return empty;
|
|
642
|
-
let em = null;
|
|
643
|
-
try {
|
|
644
|
-
em = container.resolve("em");
|
|
645
|
-
} catch {
|
|
646
|
-
em = null;
|
|
647
|
-
}
|
|
648
|
-
if (!em) return empty;
|
|
649
|
-
try {
|
|
650
|
-
const repo = new AiAgentRuntimeOverrideRepository(em);
|
|
651
|
-
const [agentRow, tenantRow] = await Promise.all([
|
|
652
|
-
repo.getExact({ tenantId, organizationId: organizationId ?? null, agentId }),
|
|
653
|
-
repo.getDefault({ tenantId, organizationId: organizationId ?? null, agentId: null })
|
|
654
|
-
]);
|
|
655
|
-
return {
|
|
656
|
-
perAgentOverride: agentRow?.inputModeration ?? null,
|
|
657
|
-
tenantWideOverride: tenantRow?.inputModeration ?? null
|
|
658
|
-
};
|
|
659
|
-
} catch (error) {
|
|
660
|
-
logger.warn("Moderation override lookup failed; falling back to env default", { agentId, err: error });
|
|
661
|
-
return empty;
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
553
|
function ensureUiMessageShape(messages) {
|
|
665
554
|
return messages.map((message, index) => {
|
|
666
555
|
const raw = message;
|
|
@@ -861,47 +750,10 @@ async function runAiAgentText(input) {
|
|
|
861
750
|
input.baseUrlOverride,
|
|
862
751
|
tenantRuntimeOverride,
|
|
863
752
|
input.requestOverride,
|
|
864
|
-
tenantAllowlistSnapshot
|
|
865
|
-
resolveEndUserIdentifier(input.authContext)
|
|
753
|
+
tenantAllowlistSnapshot
|
|
866
754
|
);
|
|
867
755
|
const { model } = resolvedModel;
|
|
868
|
-
const modelProviderOptions = resolvedModel.providerOptions;
|
|
869
756
|
const normalizedMessages = ensureUiMessageShape(input.messages);
|
|
870
|
-
let moderationService = null;
|
|
871
|
-
try {
|
|
872
|
-
moderationService = input.container?.resolve("moderationService") ?? null;
|
|
873
|
-
} catch {
|
|
874
|
-
moderationService = null;
|
|
875
|
-
}
|
|
876
|
-
const moderationOverrides = resolvedModel.supportsInputModeration && agent.untrustedInput !== true ? await resolveModerationOverrideValues(
|
|
877
|
-
input.container,
|
|
878
|
-
input.authContext.tenantId,
|
|
879
|
-
input.authContext.organizationId,
|
|
880
|
-
agent.id
|
|
881
|
-
) : { perAgentOverride: null, tenantWideOverride: null };
|
|
882
|
-
await runInputModerationGate({
|
|
883
|
-
untrustedInput: agent.untrustedInput,
|
|
884
|
-
supportsInputModeration: resolvedModel.supportsInputModeration,
|
|
885
|
-
perAgentOverride: moderationOverrides.perAgentOverride,
|
|
886
|
-
tenantWideOverride: moderationOverrides.tenantWideOverride,
|
|
887
|
-
userText: extractLatestUserText(normalizedMessages),
|
|
888
|
-
service: moderationService,
|
|
889
|
-
resolveApiKey: () => llmProviderRegistry.get(resolvedModel.providerId)?.resolveApiKey() ?? null,
|
|
890
|
-
baseURL: resolvedModel.baseURL,
|
|
891
|
-
moderationModel: process.env.OM_AI_MODERATION_MODEL,
|
|
892
|
-
onFlagged: (categories) => recordModerationFlag(
|
|
893
|
-
{
|
|
894
|
-
tenantId: input.authContext.tenantId,
|
|
895
|
-
organizationId: input.authContext.organizationId,
|
|
896
|
-
agentId: agent.id,
|
|
897
|
-
userId: input.authContext.userId,
|
|
898
|
-
providerId: resolvedModel.providerId,
|
|
899
|
-
modelId: resolvedModel.modelId,
|
|
900
|
-
categories
|
|
901
|
-
},
|
|
902
|
-
input.container
|
|
903
|
-
)
|
|
904
|
-
});
|
|
905
757
|
const hydratedMessages = attachAttachmentsToMessages(normalizedMessages, resolvedAttachments);
|
|
906
758
|
const modelMessages = await convertToModelMessages(hydratedMessages);
|
|
907
759
|
const effectiveLoop = resolveEffectiveLoopConfig(agent, input.loop, WRAPPER_DEFAULT_LOOP_CHAT);
|
|
@@ -962,8 +814,7 @@ async function runAiAgentText(input) {
|
|
|
962
814
|
onStepFinish: wiredOnStepFinish,
|
|
963
815
|
...effectiveLoop.repairToolCall !== void 0 ? { experimental_repairToolCall: effectiveLoop.repairToolCall } : {},
|
|
964
816
|
...sdkActiveTools !== void 0 ? { activeTools: sdkActiveTools } : {},
|
|
965
|
-
...sdkToolChoice !== void 0 ? { toolChoice: sdkToolChoice } : {}
|
|
966
|
-
...modelProviderOptions !== void 0 ? { providerOptions: modelProviderOptions } : {}
|
|
817
|
+
...sdkToolChoice !== void 0 ? { toolChoice: sdkToolChoice } : {}
|
|
967
818
|
};
|
|
968
819
|
builtToolLoopAgent = new ToolLoopAgent(agentSettings);
|
|
969
820
|
}
|
|
@@ -984,7 +835,6 @@ async function runAiAgentText(input) {
|
|
|
984
835
|
toolChoice: sdkToolChoice,
|
|
985
836
|
abortSignal: abortController.signal,
|
|
986
837
|
finalizeLoopTrace: () => loopTraceCollector.finalize(budgetEnforcer.abortReason),
|
|
987
|
-
...modelProviderOptions !== void 0 ? { providerOptions: modelProviderOptions } : {},
|
|
988
838
|
...builtToolLoopAgent !== void 0 ? { toolLoopAgent: builtToolLoopAgent } : {}
|
|
989
839
|
};
|
|
990
840
|
const taskPlanId = `turn_${turnId}`;
|
|
@@ -1044,7 +894,6 @@ async function runAiAgentText(input) {
|
|
|
1044
894
|
experimental_repairToolCall: effectiveLoop.repairToolCall,
|
|
1045
895
|
...sdkActiveTools !== void 0 ? { activeTools: sdkActiveTools } : {},
|
|
1046
896
|
...sdkToolChoice !== void 0 ? { toolChoice: sdkToolChoice } : {},
|
|
1047
|
-
...modelProviderOptions !== void 0 ? { providerOptions: modelProviderOptions } : {},
|
|
1048
897
|
abortSignal: abortController.signal
|
|
1049
898
|
});
|
|
1050
899
|
if (wallClockTimer !== void 0) {
|
|
@@ -1252,13 +1101,11 @@ export {
|
|
|
1252
1101
|
buildLoopTraceCollector,
|
|
1253
1102
|
buildWrapperPrepareStep,
|
|
1254
1103
|
composeSystemPrompt,
|
|
1255
|
-
extractLatestUserText,
|
|
1256
1104
|
mergeStepOverrides,
|
|
1257
1105
|
resolveEffectiveLoopConfig,
|
|
1258
1106
|
resolveLoopBudgetPreset,
|
|
1259
1107
|
runAiAgentObject,
|
|
1260
1108
|
runAiAgentText,
|
|
1261
|
-
runInputModerationGate,
|
|
1262
1109
|
translateStopConditions
|
|
1263
1110
|
};
|
|
1264
1111
|
//# sourceMappingURL=agent-runtime.js.map
|