@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.
Files changed (114) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/AGENTS.md +29 -12
  3. package/dist/modules/ai_assistant/__integration__/helpers/aiAssistantFixtures.js +0 -30
  4. package/dist/modules/ai_assistant/__integration__/helpers/aiAssistantFixtures.js.map +2 -2
  5. package/dist/modules/ai_assistant/api/ai/chat/route.js +0 -7
  6. package/dist/modules/ai_assistant/api/ai/chat/route.js.map +2 -2
  7. package/dist/modules/ai_assistant/api/settings/allowlist/route.js +10 -10
  8. package/dist/modules/ai_assistant/api/settings/allowlist/route.js.map +2 -2
  9. package/dist/modules/ai_assistant/api/settings/route.js +13 -34
  10. package/dist/modules/ai_assistant/api/settings/route.js.map +2 -2
  11. package/dist/modules/ai_assistant/backend/config/ai-assistant/agents/AiAgentSettingsPageClient.js +0 -106
  12. package/dist/modules/ai_assistant/backend/config/ai-assistant/agents/AiAgentSettingsPageClient.js.map +2 -2
  13. package/dist/modules/ai_assistant/data/entities.js +0 -42
  14. package/dist/modules/ai_assistant/data/entities.js.map +2 -2
  15. package/dist/modules/ai_assistant/data/repositories/AiAgentRuntimeOverrideRepository.js +1 -3
  16. package/dist/modules/ai_assistant/data/repositories/AiAgentRuntimeOverrideRepository.js.map +2 -2
  17. package/dist/modules/ai_assistant/di.js +2 -6
  18. package/dist/modules/ai_assistant/di.js.map +2 -2
  19. package/dist/modules/ai_assistant/events.js +0 -6
  20. package/dist/modules/ai_assistant/events.js.map +2 -2
  21. package/dist/modules/ai_assistant/i18n/de.json +0 -42
  22. package/dist/modules/ai_assistant/i18n/en.json +0 -42
  23. package/dist/modules/ai_assistant/i18n/es.json +0 -42
  24. package/dist/modules/ai_assistant/i18n/pl.json +0 -42
  25. package/dist/modules/ai_assistant/lib/agent-runtime.js +5 -158
  26. package/dist/modules/ai_assistant/lib/agent-runtime.js.map +2 -2
  27. package/dist/modules/ai_assistant/lib/ai-agent-definition.js.map +2 -2
  28. package/dist/modules/ai_assistant/lib/auth.js +7 -6
  29. package/dist/modules/ai_assistant/lib/auth.js.map +2 -2
  30. package/dist/modules/ai_assistant/lib/entity-graph.js +3 -3
  31. package/dist/modules/ai_assistant/lib/entity-graph.js.map +2 -2
  32. package/dist/modules/ai_assistant/lib/llm-adapters/anthropic.js +0 -3
  33. package/dist/modules/ai_assistant/lib/llm-adapters/anthropic.js.map +2 -2
  34. package/dist/modules/ai_assistant/lib/llm-adapters/openai.js +1 -8
  35. package/dist/modules/ai_assistant/lib/llm-adapters/openai.js.map +2 -2
  36. package/dist/modules/ai_assistant/lib/model-factory.js +1 -6
  37. package/dist/modules/ai_assistant/lib/model-factory.js.map +2 -2
  38. package/dist/modules/ai_assistant/lib/openai-compatible-presets.js +0 -2
  39. package/dist/modules/ai_assistant/lib/openai-compatible-presets.js.map +2 -2
  40. package/dist/modules/ai_assistant/lib/tool-search.js +12 -4
  41. package/dist/modules/ai_assistant/lib/tool-search.js.map +2 -2
  42. package/generated/entities/ai_agent_runtime_override/index.ts +0 -1
  43. package/generated/entities.ids.generated.ts +1 -2
  44. package/generated/entity-fields-registry.ts +1 -13
  45. package/package.json +12 -13
  46. package/src/modules/ai_assistant/__integration__/helpers/aiAssistantFixtures.ts +0 -48
  47. package/src/modules/ai_assistant/api/ai/chat/route.ts +0 -10
  48. package/src/modules/ai_assistant/api/settings/__tests__/route.test.ts +8 -58
  49. package/src/modules/ai_assistant/api/settings/allowlist/route.ts +12 -10
  50. package/src/modules/ai_assistant/api/settings/route.ts +10 -33
  51. package/src/modules/ai_assistant/backend/config/ai-assistant/agents/AiAgentSettingsPageClient.tsx +0 -146
  52. package/src/modules/ai_assistant/data/entities.ts +0 -56
  53. package/src/modules/ai_assistant/data/repositories/AiAgentRuntimeOverrideRepository.ts +0 -4
  54. package/src/modules/ai_assistant/di.ts +1 -5
  55. package/src/modules/ai_assistant/events.ts +0 -21
  56. package/src/modules/ai_assistant/i18n/de.json +0 -42
  57. package/src/modules/ai_assistant/i18n/en.json +0 -42
  58. package/src/modules/ai_assistant/i18n/es.json +0 -42
  59. package/src/modules/ai_assistant/i18n/pl.json +0 -42
  60. package/src/modules/ai_assistant/lib/__tests__/auth.test.ts +5 -2
  61. package/src/modules/ai_assistant/lib/__tests__/llm-adapters-anthropic.test.ts +0 -13
  62. package/src/modules/ai_assistant/lib/__tests__/llm-adapters-openai.test.ts +0 -41
  63. package/src/modules/ai_assistant/lib/__tests__/model-factory.test.ts +0 -60
  64. package/src/modules/ai_assistant/lib/agent-runtime.ts +0 -259
  65. package/src/modules/ai_assistant/lib/ai-agent-definition.ts +0 -10
  66. package/src/modules/ai_assistant/lib/auth.ts +15 -6
  67. package/src/modules/ai_assistant/lib/entity-graph.ts +3 -3
  68. package/src/modules/ai_assistant/lib/llm-adapters/anthropic.ts +0 -10
  69. package/src/modules/ai_assistant/lib/llm-adapters/openai.ts +1 -32
  70. package/src/modules/ai_assistant/lib/model-factory.ts +0 -33
  71. package/src/modules/ai_assistant/lib/openai-compatible-presets.ts +0 -2
  72. package/src/modules/ai_assistant/lib/tool-search.ts +17 -4
  73. package/src/modules/ai_assistant/migrations/.snapshot-open-mercato.json +16 -388
  74. package/dist/modules/ai_assistant/__integration__/TC-AI-MODERATION-008-settings-and-audit.spec.js +0 -80
  75. package/dist/modules/ai_assistant/__integration__/TC-AI-MODERATION-008-settings-and-audit.spec.js.map +0 -7
  76. package/dist/modules/ai_assistant/__integration__/TC-AI-MODERATION-009-ui.spec.js +0 -124
  77. package/dist/modules/ai_assistant/__integration__/TC-AI-MODERATION-009-ui.spec.js.map +0 -7
  78. package/dist/modules/ai_assistant/api/moderation-flags/route.js +0 -121
  79. package/dist/modules/ai_assistant/api/moderation-flags/route.js.map +0 -7
  80. package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/AiModerationFlagsPageClient.js +0 -139
  81. package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/AiModerationFlagsPageClient.js.map +0 -7
  82. package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.js +0 -10
  83. package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.js.map +0 -7
  84. package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.meta.js +0 -26
  85. package/dist/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.meta.js.map +0 -7
  86. package/dist/modules/ai_assistant/data/repositories/AiModerationFlagRepository.js +0 -44
  87. package/dist/modules/ai_assistant/data/repositories/AiModerationFlagRepository.js.map +0 -7
  88. package/dist/modules/ai_assistant/i18n/ko.json +0 -527
  89. package/dist/modules/ai_assistant/lib/moderation-flag-recorder.js +0 -43
  90. package/dist/modules/ai_assistant/lib/moderation-flag-recorder.js.map +0 -7
  91. package/dist/modules/ai_assistant/lib/moderation-policy.js +0 -24
  92. package/dist/modules/ai_assistant/lib/moderation-policy.js.map +0 -7
  93. package/dist/modules/ai_assistant/lib/moderation.js +0 -109
  94. package/dist/modules/ai_assistant/lib/moderation.js.map +0 -7
  95. package/dist/modules/ai_assistant/migrations/Migration20260610134045_ai_assistant.js +0 -19
  96. package/dist/modules/ai_assistant/migrations/Migration20260610134045_ai_assistant.js.map +0 -7
  97. package/generated/entities/ai_moderation_flag/index.ts +0 -9
  98. package/src/modules/ai_assistant/__integration__/TC-AI-MODERATION-008-settings-and-audit.spec.ts +0 -126
  99. package/src/modules/ai_assistant/__integration__/TC-AI-MODERATION-009-ui.spec.ts +0 -161
  100. package/src/modules/ai_assistant/api/moderation-flags/__tests__/route.test.ts +0 -122
  101. package/src/modules/ai_assistant/api/moderation-flags/route.ts +0 -137
  102. package/src/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/AiModerationFlagsPageClient.tsx +0 -186
  103. package/src/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.meta.ts +0 -24
  104. package/src/modules/ai_assistant/backend/config/ai-assistant/moderation-flags/page.tsx +0 -12
  105. package/src/modules/ai_assistant/data/repositories/AiModerationFlagRepository.ts +0 -79
  106. package/src/modules/ai_assistant/i18n/ko.json +0 -527
  107. package/src/modules/ai_assistant/lib/__tests__/input-moderation-gate.test.ts +0 -121
  108. package/src/modules/ai_assistant/lib/__tests__/moderation-flag-recorder.test.ts +0 -76
  109. package/src/modules/ai_assistant/lib/__tests__/moderation-policy.test.ts +0 -86
  110. package/src/modules/ai_assistant/lib/__tests__/moderation.test.ts +0 -114
  111. package/src/modules/ai_assistant/lib/moderation-flag-recorder.ts +0 -75
  112. package/src/modules/ai_assistant/lib/moderation-policy.ts +0 -77
  113. package/src/modules/ai_assistant/lib/moderation.ts +0 -179
  114. 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, endUserIdentifier) {
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