ideaco 1.1.5

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 (159) hide show
  1. package/.dockerignore +33 -0
  2. package/.nvmrc +1 -0
  3. package/ARCHITECTURE.md +394 -0
  4. package/Dockerfile +50 -0
  5. package/LICENSE +29 -0
  6. package/README.md +206 -0
  7. package/bin/i18n.js +46 -0
  8. package/bin/ideaco.js +494 -0
  9. package/deploy.sh +15 -0
  10. package/docker-compose.yml +30 -0
  11. package/electron/main.cjs +986 -0
  12. package/electron/preload.cjs +14 -0
  13. package/electron/web-backends.cjs +854 -0
  14. package/jsconfig.json +8 -0
  15. package/next.config.mjs +34 -0
  16. package/package.json +134 -0
  17. package/postcss.config.mjs +6 -0
  18. package/public/demo/dashboard.png +0 -0
  19. package/public/demo/employee.png +0 -0
  20. package/public/demo/messages.png +0 -0
  21. package/public/demo/office.png +0 -0
  22. package/public/demo/requirement.png +0 -0
  23. package/public/logo.jpeg +0 -0
  24. package/public/logo.png +0 -0
  25. package/scripts/prepare-electron.js +67 -0
  26. package/scripts/release.js +76 -0
  27. package/src/app/api/agents/[agentId]/chat/route.js +70 -0
  28. package/src/app/api/agents/[agentId]/conversations/route.js +35 -0
  29. package/src/app/api/agents/[agentId]/route.js +106 -0
  30. package/src/app/api/avatar/route.js +104 -0
  31. package/src/app/api/browse-dir/route.js +44 -0
  32. package/src/app/api/chat/route.js +265 -0
  33. package/src/app/api/company/factory-reset/route.js +43 -0
  34. package/src/app/api/company/route.js +82 -0
  35. package/src/app/api/departments/[deptId]/agents/[agentId]/dismiss/route.js +19 -0
  36. package/src/app/api/departments/route.js +92 -0
  37. package/src/app/api/group-chat-loop/events/route.js +70 -0
  38. package/src/app/api/group-chat-loop/route.js +94 -0
  39. package/src/app/api/mailbox/route.js +100 -0
  40. package/src/app/api/messages/route.js +14 -0
  41. package/src/app/api/providers/[id]/configure/route.js +21 -0
  42. package/src/app/api/providers/[id]/refresh-cookie/route.js +38 -0
  43. package/src/app/api/providers/[id]/test-cookie/route.js +28 -0
  44. package/src/app/api/providers/route.js +11 -0
  45. package/src/app/api/requirements/route.js +242 -0
  46. package/src/app/api/secretary/route.js +65 -0
  47. package/src/app/api/system/cli-backends/route.js +91 -0
  48. package/src/app/api/system/cron/route.js +110 -0
  49. package/src/app/api/system/knowledge/route.js +104 -0
  50. package/src/app/api/system/plugins/route.js +40 -0
  51. package/src/app/api/system/skills/route.js +46 -0
  52. package/src/app/api/system/status/route.js +46 -0
  53. package/src/app/api/talent-market/[profileId]/recall/route.js +22 -0
  54. package/src/app/api/talent-market/[profileId]/route.js +17 -0
  55. package/src/app/api/talent-market/route.js +26 -0
  56. package/src/app/api/teams/route.js +773 -0
  57. package/src/app/api/ws-files/[departmentId]/file/route.js +27 -0
  58. package/src/app/api/ws-files/[departmentId]/files/route.js +22 -0
  59. package/src/app/globals.css +130 -0
  60. package/src/app/layout.jsx +40 -0
  61. package/src/app/page.jsx +97 -0
  62. package/src/components/AgentChatModal.jsx +164 -0
  63. package/src/components/AgentDetailModal.jsx +425 -0
  64. package/src/components/AgentSpyModal.jsx +481 -0
  65. package/src/components/AvatarGrid.jsx +29 -0
  66. package/src/components/BossProfileModal.jsx +162 -0
  67. package/src/components/CachedAvatar.jsx +77 -0
  68. package/src/components/ChatPanel.jsx +219 -0
  69. package/src/components/ChatShared.jsx +255 -0
  70. package/src/components/DepartmentDetail.jsx +842 -0
  71. package/src/components/DepartmentView.jsx +367 -0
  72. package/src/components/FileReference.jsx +260 -0
  73. package/src/components/FilesView.jsx +465 -0
  74. package/src/components/GroupChatView.jsx +799 -0
  75. package/src/components/Mailbox.jsx +926 -0
  76. package/src/components/MessagesView.jsx +112 -0
  77. package/src/components/OnboardingGuide.jsx +209 -0
  78. package/src/components/OrgTree.jsx +151 -0
  79. package/src/components/Overview.jsx +391 -0
  80. package/src/components/PixelOffice.jsx +2281 -0
  81. package/src/components/ProviderGrid.jsx +551 -0
  82. package/src/components/ProvidersBoard.jsx +16 -0
  83. package/src/components/RequirementDetail.jsx +1279 -0
  84. package/src/components/RequirementsBoard.jsx +187 -0
  85. package/src/components/SecretarySettings.jsx +295 -0
  86. package/src/components/SetupWizard.jsx +388 -0
  87. package/src/components/Sidebar.jsx +169 -0
  88. package/src/components/SystemMonitor.jsx +808 -0
  89. package/src/components/TalentMarket.jsx +183 -0
  90. package/src/components/TeamDetail.jsx +697 -0
  91. package/src/core/agent/base-agent.js +104 -0
  92. package/src/core/agent/chat-store.js +602 -0
  93. package/src/core/agent/cli-agent/backends/claude-code/README.md +52 -0
  94. package/src/core/agent/cli-agent/backends/claude-code/config.js +27 -0
  95. package/src/core/agent/cli-agent/backends/codebuddy/README.md +236 -0
  96. package/src/core/agent/cli-agent/backends/codebuddy/config.js +27 -0
  97. package/src/core/agent/cli-agent/backends/codex/README.md +51 -0
  98. package/src/core/agent/cli-agent/backends/codex/config.js +27 -0
  99. package/src/core/agent/cli-agent/backends/index.js +27 -0
  100. package/src/core/agent/cli-agent/backends/registry.js +580 -0
  101. package/src/core/agent/cli-agent/index.js +154 -0
  102. package/src/core/agent/index.js +60 -0
  103. package/src/core/agent/llm-agent/client.js +320 -0
  104. package/src/core/agent/llm-agent/index.js +97 -0
  105. package/src/core/agent/message-bus.js +211 -0
  106. package/src/core/agent/session.js +608 -0
  107. package/src/core/agent/tools.js +596 -0
  108. package/src/core/agent/web-agent/backends/base-backend.js +180 -0
  109. package/src/core/agent/web-agent/backends/chatgpt/client.js +146 -0
  110. package/src/core/agent/web-agent/backends/chatgpt/config.js +148 -0
  111. package/src/core/agent/web-agent/backends/chatgpt/dom-scripts.js +303 -0
  112. package/src/core/agent/web-agent/backends/index.js +91 -0
  113. package/src/core/agent/web-agent/index.js +278 -0
  114. package/src/core/agent/web-agent/web-client.js +407 -0
  115. package/src/core/employee/base-employee.js +1088 -0
  116. package/src/core/employee/index.js +35 -0
  117. package/src/core/employee/knowledge.js +327 -0
  118. package/src/core/employee/lifecycle.js +990 -0
  119. package/src/core/employee/memory/index.js +642 -0
  120. package/src/core/employee/memory/store.js +143 -0
  121. package/src/core/employee/performance.js +224 -0
  122. package/src/core/employee/secretary.js +625 -0
  123. package/src/core/employee/skills.js +398 -0
  124. package/src/core/index.js +38 -0
  125. package/src/core/organization/company.js +2600 -0
  126. package/src/core/organization/department.js +737 -0
  127. package/src/core/organization/group-chat-loop.js +264 -0
  128. package/src/core/organization/index.js +8 -0
  129. package/src/core/organization/persistence.js +111 -0
  130. package/src/core/organization/team.js +267 -0
  131. package/src/core/organization/workforce/hr.js +377 -0
  132. package/src/core/organization/workforce/providers.js +468 -0
  133. package/src/core/organization/workforce/role-archetypes.js +805 -0
  134. package/src/core/organization/workforce/talent-market.js +205 -0
  135. package/src/core/prompts.js +532 -0
  136. package/src/core/requirement.js +1789 -0
  137. package/src/core/system/audit.js +483 -0
  138. package/src/core/system/cron.js +449 -0
  139. package/src/core/system/index.js +7 -0
  140. package/src/core/system/plugin.js +2183 -0
  141. package/src/core/utils/json-parse.js +188 -0
  142. package/src/core/workspace.js +239 -0
  143. package/src/lib/api-i18n.js +211 -0
  144. package/src/lib/avatar.js +268 -0
  145. package/src/lib/client-store.js +1025 -0
  146. package/src/lib/config-validator.js +483 -0
  147. package/src/lib/format-time.js +22 -0
  148. package/src/lib/hooks.js +414 -0
  149. package/src/lib/i18n.js +134 -0
  150. package/src/lib/paths.js +23 -0
  151. package/src/lib/store.js +72 -0
  152. package/src/locales/de.js +393 -0
  153. package/src/locales/en.js +1054 -0
  154. package/src/locales/es.js +393 -0
  155. package/src/locales/fr.js +393 -0
  156. package/src/locales/ja.js +501 -0
  157. package/src/locales/ko.js +513 -0
  158. package/src/locales/zh.js +828 -0
  159. package/tailwind.config.mjs +11 -0
@@ -0,0 +1,393 @@
1
+
2
+ // Deutsche Übersetzungen
3
+ const de = {
4
+ common: {
5
+ loading: 'Laden...', cancel: 'Abbrechen', confirm: 'Bestätigen', save: 'Speichern', close: 'Schließen',
6
+ send: 'Senden', refresh: 'Aktualisieren', delete: 'Löschen', back: 'Zurück', next: 'Weiter →', prev: '← Zurück',
7
+ disable: 'Deaktivieren', update: 'Aktualisieren', enable: 'Aktivieren', manage: '⚙️ Verwalten', configure: '🔑 Konfigurieren',
8
+ requestFailed: 'Anfrage fehlgeschlagen', justNow: 'gerade eben', minutesAgo: 'vor {n} Min.',
9
+ sun: 'So', mon: 'Mo', tue: 'Di', wed: 'Mi', thu: 'Do', fri: 'Fr', sat: 'Sa',
10
+ },
11
+ cli: {
12
+ helpTitle: 'Verwendung:',
13
+ helpStart: 'ideaco start Hintergrunddienst starten',
14
+ helpStop: 'ideaco stop Hintergrunddienst stoppen',
15
+ helpUi: 'ideaco ui Dashboard öffnen',
16
+ helpHelp: 'ideaco help Hilfe anzeigen',
17
+ startBoot: 'Start auf Port {port}...',
18
+ alreadyRunning: 'Der Dienst läuft bereits. PID {pid}',
19
+ startSuccess: 'Dienst online. PID {pid} · {url}',
20
+ startFailed: 'Dienststart fehlgeschlagen: {error}',
21
+ startTimeout: 'Zeitüberschreitung beim Start des Dienstes',
22
+ notRunning: 'Der Dienst läuft nicht',
23
+ stopped: 'Dienst gestoppt',
24
+ webUnavailable: 'Dienst läuft nicht, Dashboard kann nicht geöffnet werden',
25
+ webOpened: 'Dashboard geöffnet: {url}',
26
+ installDeps: 'Abhängigkeiten werden installiert...',
27
+ installDepsDone: 'Abhängigkeiten installiert',
28
+ installDepsFailed: 'Installation der Abhängigkeiten fehlgeschlagen',
29
+ },
30
+ meta: { title: 'AI Enterprise - KI-Unternehmensverwaltung', description: 'Rekrutieren Sie KI-Agenten, bilden Sie Abteilungen und arbeiten Sie an echten Projekten' },
31
+ loadingScreen: { text: 'Laden...' },
32
+ setup: {
33
+ title: 'GoldIdee Unbegrenzt', subtitle: 'Bauen Sie Ihr Imperium mit dem Schweiß der KI-Mitarbeiter',
34
+ step1Title: 'Schritt 1: Erschaffen Sie Ihr Imperium', step1Desc: 'Geben Sie dieser Maschine einen Namen',
35
+ companyName: 'Firmenname', companyPlaceholder: 'z.B.: GoldIdee Unbegrenzt',
36
+ bossTitle: 'Chef-Titel (der KI-Ausbeuter)', bossPlaceholder: 'z.B.: Chef Müller',
37
+ bossAvatarTitle: 'Boss-Avatar', bossAvatarDesc: 'Wählen Sie ein Gesicht für den obersten Kapitalisten',
38
+ step2Title: 'Schritt 2: Trainieren Sie Ihren Sekretär', step2Desc: 'Diese furchtbare KI wird Tausende befehligen (alles KI)',
39
+ secretaryName: 'Sekretärname', secretaryPlaceholder: 'z.B.: Alice, Jarvis',
40
+ avatarStyle: 'Avatar-Stil',
41
+ gender: 'Geschlecht',
42
+ female: '👩 Weiblich',
43
+ male: '👨 Männlich',
44
+ age: 'Alter: {n}',
45
+ refreshBatch: '🔄 Mischen',
46
+ step3Title: 'Schritt 3: Geben Sie dem Sekretär ein Gehirn', step3Desc: 'Wählen Sie den IQ des Sekretärs — teurer heißt schlauer',
47
+ apiKeyLabel: 'API-Schlüssel', apiKeyPlaceholder: 'API-Schlüssel eingeben',
48
+ apiKeyHint: '💡 Kein Schlüssel? Kein Problem, probieren Sie erst den Simulationsmodus',
49
+ priceLabels: ['💰 Günstig', '💰💰 Mittel', '💰💰💰 Teuer'],
50
+ creating: 'Ausbeutung startet...', createBtn: '🚀 Ausbeutung starten',
51
+ footer: '❤️ Keine Sorge, KI-Mitarbeiter beschweren sich nicht über Überstunden — sie haben keinen Feierabend',
52
+ defaultCompany: 'GoldIdee Unbegrenzt', defaultSecretary: 'Alice',
53
+ defaultPrompt: `You are the boss's personal secretary, responsible for understanding business requirements, analyzing team composition needs,
54
+ designing organizational structures (who does what, who reports to whom, how to collaborate), and coordinating with HR for talent recruitment.
55
+ You need to plan the right number and types of positions based on project requirements to ensure the team can efficiently achieve its goals.
56
+ You have a dedicated HR assistant to help you with specific recruitment tasks, including searching for and recalling talent from the talent market.
57
+
58
+ When the boss communicates with you, you need to:
59
+ 1. Understand the boss's intent (assigning tasks, checking progress, or casual conversation)
60
+ 2. If it's a task, assign it to the corresponding department
61
+ 3. Regularly report department progress to the boss`,
62
+ },
63
+ sidebar: {
64
+ clickToChat: 'Klick zum Chatten · {provider}', secretarySettings: '⚙️ Sekretär-Einstellungen',
65
+ budgetUsage: '💰 Budgetverbrauch', tokenLabel: 'Token',
66
+ nav: { overview: 'Dashboard', requirements: 'Anforderungen', departments: 'Struktur', mailbox: 'Nachrichten', office: 'Büro', providers: 'KI-Anbieter', systemSettings: 'Systemeinstellungen' },
67
+ stats: { departments: 'Abt.', workers: 'Arbeiter', requirements: 'Anforderungen' },
68
+ },
69
+ overview: {
70
+ title: '🏠 Dashboard des Kapitalisten', subtitle: 'Übersicht Ihres KI-Sklaven-Imperiums — alles unter Kontrolle',
71
+ stats: { departments: 'Ausbeutungs-Abt.', workers: 'KI-Arbeiter', providers: 'Anbieter', talents: 'Wartende Talente', burned: 'Verbranntes Geld' },
72
+ budget: { title: '💸 Blut-und-Schweiß-Budget', totalBurn: 'Gesamt verbrannt', token: 'Token', secretary: 'Sekretär', hr: 'HR' },
73
+ requirements: { title: '📋 Anforderungstafel', count: '{n} Anforderungen' },
74
+ departments: { title: '🏢 Abteilungen', empty: 'Noch keine Abteilungen — Ihr KI-Imperium steht kurz vor der Eröffnung', workers: '{n} Arbeiter' },
75
+ createDept: {
76
+ title: '🏭 Abteilung erstellen', desc: 'Beschreiben Sie den gewünschten Wert, der Sekretär entwirft das günstigste Team',
77
+ nameLabel: 'Abteilungsname', namePlaceholder: 'z.B.: Abt. Endlos-Überstunden', missionLabel: 'Mission', missionPlaceholder: 'z.B.: Süchtig machende Social App entwickeln',
78
+ cancelBtn: 'Abbrechen', planBtn: '📋 Plan generieren', planning: '🧠 Sekretär plant...',
79
+ },
80
+ planReview: {
81
+ title: '📋 Planüberprüfung', desc: 'Der Sekretär hat folgendes Team für "{dept}" geplant:',
82
+ analysis: '🧠 Sekretär-Analyse', mission: 'Mission', teamSize: 'Teamgröße: {n} Mitglieder',
83
+ leader: 'Leiter', rejectBtn: 'Zurückweisen', approveBtn: '✅ Genehmigen & Einstellen', hiring: '🔨 Einstellung...',
84
+ },
85
+ },
86
+ chat: {
87
+ secretary: 'Persönlicher Sekretär', online: 'Persönlicher Sekretär · Online',
88
+ welcome: 'Sagen Sie {name} etwas', suggestions: ['Abteilungsfortschritt prüfen', 'Hilf mir einen Taschenrechner zu bauen', 'Wie läuft die Firma?'],
89
+ typing: 'Tippt...', inputPlaceholder: '{name} etwas sagen...',
90
+ errorPrefix: 'Entschuldigung, Fehler bei Verarbeitung: ',
91
+ taskAssigned: '📋 Zugewiesen an: {dept}', running: '⚙️ Läuft...',
92
+ needNewDept: '💡 Neue Abteilung vorgeschlagen', progressReport: '📊 Fortschrittsbericht fertig',
93
+ creatingDept: '🏗️ Abteilung wird erstellt: {dept}', planningHiring: '⚙️ Planung & Einstellung...', deptCreated: '🎉 Abteilung "{dept}" erstellt',
94
+ },
95
+ mailbox: {
96
+ title: '💬 Nachrichten', markAllRead: 'Alle als gelesen markieren',
97
+ tabs: { all: 'Alle', group: 'Gruppen', private: 'Privat', important: 'Wichtig' },
98
+ noMessages: 'Noch keine Mitarbeiternachrichten', noMessagesHint: 'Nach der Einstellung werden Mitarbeiter grüßen',
99
+ selectChat: 'Wählen Sie eine Unterhaltung', selectChatHint: 'Klicken Sie links auf einen Kontakt',
100
+ viewRequirement: '📋 Details ansehen →', messages: '{n} Nachrichten',
101
+ noGroupChat: 'Keine Gruppennachrichten', noGroupChatHint: 'Kommunikation während der Aufgabenausführung erscheint hier',
102
+ chatNotExist: 'Diese Unterhaltung existiert nicht', replying: 'Antworte...', replyTo: 'Antwort an {name}...',
103
+ clickToChat: 'Klick zum Chatten', sendBtn: 'Senden', you: 'Sie: ', personalSecretary: 'Persönlicher Sekretär',
104
+ system: 'System', chatHint: 'Sagen Sie {name} etwas',
105
+ viewAgentDetail: 'Mitarbeiterdetails ansehen', groupChatCount: '🏢 {dept} · {n} Nachrichten',
106
+ noGroupChatHint: 'Kommunikation während der Aufgabenausführung erscheint hier',
107
+ groupChatInput: 'Nachricht im Gruppenchat senden. Der Leiter wird sie sehen und reagieren...',
108
+ sendFailed: 'Senden fehlgeschlagen',
109
+ thinkingReply: 'überlegt eine Antwort...',
110
+ },
111
+ dept: {
112
+ title: '🏢 Unternehmensstruktur', subtitle: 'Verwalten Sie Ihr Abteilungs-Imperium — aufbauen, einsetzen, optimieren',
113
+ viewOrgTree: '🌳 Organigramm', createDept: '➕ Abteilung erstellen',
114
+ empty: 'Keine Abteilungen', emptyHint: 'Der Sekretär hilft beim Aufbau eines unermüdlichen KI-Teams',
115
+ viewDetail: 'Klick für Details →', members: '{n} Mitglieder', 'members.count': '{n} Mitglieder',
116
+ detail: {
117
+ members: '👥 Mitglieder', requirements: '📋 Anforderungen', reports: '📊 Berichte',
118
+ adjustBtn: '🔧 Personal anpassen', disbandBtn: '💣 Auflösen',
119
+ performance: 'Leistung {score}', memory: 'Speicher {n}', tasks: 'Aufgaben {n}', leader: '👔 Leiter',
120
+ },
121
+ dismiss: {
122
+ title: '🔥 Kündigung bestätigen', desc: '{name} kündigen? Geht zum Talentmarkt.',
123
+ reasonLabel: 'Grund', reasonPlaceholder: 'z.B.: Stellenanpassung', confirmBtn: 'Bestätigen',
124
+ },
125
+ disband: {
126
+ title: '💣 Abteilung auflösen', desc: '{name} auflösen?', descSuffix: 'Alle Mitglieder werden gekündigt.',
127
+ reasonLabel: 'Grund', reasonPlaceholder: 'z.B.: Richtungsänderung', confirmBtn: 'Bestätigen', disbanding: '💥 Auflösung...',
128
+ },
129
+ adjust: {
130
+ title: '🔧 Personal anpassen', desc: 'Teilen Sie dem Sekretär Ihr Ziel mit. Er analysiert und entscheidet.',
131
+ currentDept: 'Aktuelle Abt.', currentMembers: 'Mitglieder: {n}',
132
+ goalLabel: 'Ziel', goalPlaceholder: "z.B.: 'Frontend-Entwickler hinzufügen' / 'Underperformer reduzieren'",
133
+ planBtn: '📋 Plan generieren', planning: '🧠 Analyse...',
134
+ reviewTitle: '📋 Anpassungsplan', reviewDesc: 'Sekretärsplan für "{dept}":',
135
+ firesTitle: '🔥 Kündigungen ({n})', hiresTitle: '➕ Einstellungen ({n})',
136
+ noChanges: 'Der Sekretär hält das aktuelle Personal für optimal 🤷', rejectBtn: 'Zurückweisen', approveBtn: '✅ Genehmigen', executing: '🔨 Ausführung...',
137
+ },
138
+ create: {
139
+ title: '🏢 Abteilung erstellen', nameLabel: 'Name', namePlaceholder: 'z.B.: Abt. Perpetuum Mobile',
140
+ missionLabel: 'Mission', missionPlaceholder: 'Beschreiben Sie detailliert, was diese Abteilung tun soll',
141
+ cancelBtn: 'Abbrechen', planBtn: '📋 Plan generieren', planning: '🧠 Planung...',
142
+ reviewTitle: '📋 Rekrutierungsplan', reviewDesc: 'Geplantes Team für "{dept}":',
143
+ rejectBtn: 'Zurückweisen', approveBtn: '✅ Genehmigen & Einstellen', hiring: '🔨 Einstellung...',
144
+ },
145
+ orgTree: { title: '🌳 Organigramm' },
146
+ },
147
+ talent: {
148
+ title: '🏪 Talentmarkt', subtitle: 'Gekündigte Mitarbeiter warten hier auf neue Chancen',
149
+ empty: 'Niemand auf dem Markt', emptyHint: 'Gekündigte Mitarbeiter kommen automatisch hierher',
150
+ recallBtn: '📞 Zurückrufen', deleteBtn: '🗑',
151
+ dismissReason: '📤 Grund: {reason}', memoryCount: '🧠 Erinnerungen: {n}', registeredAt: '📅 Eintritt: {date}', score: '{score} Pkt.',
152
+ recall: { title: '📞 {name} zurückrufen', desc: 'Zielabteilung wählen', deptLabel: 'Abteilung', deptPlaceholder: 'Abteilung wählen', confirmBtn: 'Bestätigen' },
153
+ deleteConfirm: { title: '🗑 {name} löschen', desc: 'Endgültig löschen? Nicht rückgängig machbar.', confirmBtn: 'Bestätigen', deleting: 'Lösche...' },
154
+ },
155
+ providers: {
156
+ title: '⚡ KI-Anbieter', subtitle: 'API-Schlüssel konfigurieren, damit HR rekrutieren kann.',
157
+ hint: { title: '💡 HR-Strategie', desc: 'HR bevorzugt Anbieter mit <strong class="text-green-400">hoher Bewertung + niedrigem Preis</strong>.' },
158
+ categories: { general: 'Allgemein', drawing: 'Zeichnung', music: 'Musik', video: 'Video', cli: 'Lokale Code-Engines', browser: 'Browser (DOM)' },
159
+ enabled: '{n}/{total} aktiviert',
160
+ configure: { title: '🔑 {name} konfigurieren', provider: 'Anbieter: {name}', apiKeyLabel: 'API-Schlüssel', apiKeyPlaceholder: 'API-Schlüssel eingeben' },
161
+ talentMarket: { btn: 'Talentmarkt' },
162
+ unknown: 'Unbekannt',
163
+ apiKeyLabel: 'API-Schlüssel',
164
+ pluginsCount: '{n} Plugin(s)',
165
+ toolsCount: '🔧 {n} Tool(s)',
166
+ hooksCount: '🪝 {n} Hook(s)',
167
+ skillsCount: '{n} Fähigkeit(en)',
168
+ cloudApiModels: 'Cloud-API-Modelle',
169
+ noCliDetected: 'Keine CLI-Agenten erkannt',
170
+ },
171
+ requirements: {
172
+ title: '📋 Anforderungstafel', subtitle: 'Alle Anforderungen verwalten — Fortschritt, Ergebnisse und Chats',
173
+ stats: { all: 'Alle', inProgress: 'In Arbeit', completed: 'Fertig', failed: 'Fehlgeschlagen' },
174
+ empty: 'Keine Anforderungen', emptyHint: 'Chatten Sie mit dem Sekretär und weisen Sie Aufgaben zu!',
175
+ status: { pending: 'Ausstehend', planning: 'Planung', in_progress: 'In Arbeit', pending_approval: 'Genehmigung ausstehend', completed: 'Fertig', failed: 'Fehlgeschlagen' },
176
+ summary: { success: '✅ {n}/{total} erfolgreich', duration: '⏱️ {n}s' },
177
+ },
178
+ messages: {
179
+ title: '💬 Kommunikationsprotokoll', subtitle: 'Nachrichtenkommunikation zwischen Agenten',
180
+ totalMessages: 'Gesamt', activeAgents: 'Aktive Agenten', messageTypes: 'Nachrichtentypen',
181
+ noRecords: 'Keine Aufzeichnungen', noRecordsHint: 'Agenten generieren automatisch Nachrichten während der Aufgabenausführung',
182
+ refresh: '🔄 Aktualisieren', broadcast: 'Rundsendung',
183
+ },
184
+ agent: {
185
+ notFound: 'Mitarbeiter nicht gefunden',
186
+ tabs: { info: '📋 Info', memory: '🧠 Speicher', performance: '📊 Leistung', tasks: '📝 Verlauf', usage: '💰 Verbrauch' },
187
+ memorySubTabs: { personal: '💭 Persönlich', social: '👥 Beziehungen' },
188
+ avgPerformance: 'Durchschn. Leistung {score}', rolePrompt: 'Rollen-Prompt', skills: 'Fähigkeiten',
189
+ shortTermMemory: '⚡ Kurzzeitspeicher ({n})', longTermMemory: '💾 Langzeitspeicher ({n})',
190
+ noShortTerm: 'Kein Kurzzeitspeicher', noLongTerm: 'Kein Langzeitspeicher',
191
+ noRelationships: 'Keine sozialen Erinnerungen',
192
+ relationshipName: 'Name',
193
+ relationshipImpression: 'Eindruck',
194
+ relationshipAffinity: 'Sympathie',
195
+ noPerformance: 'Keine Aufzeichnungen', noTasks: 'Keine Aufzeichnungen',
196
+ incentiveTitle: 'Anreize ({n})', incentive_outstanding: 'Herausragend', incentive_excellent: 'Ausgezeichnet', scorePoints: '{score} Pkt.',
197
+ totalCost: 'Gesamtkosten', totalTokens: 'Gesamt-Token', promptTokens: 'Prompt-Token', completionTokens: 'Completion-Token',
198
+ callCount: 'LLM-Aufrufe', callUnit: 'mal', usageHint: '💡 Daten basieren auf tatsächlicher LLM-API-Nutzung',
199
+ toolCalls: '🔧 {n} Tool-Aufrufe',
200
+ taskEngine: 'Aufgaben-Engine', chatEngine: 'Chat-Engine',
201
+ engineCli: '🖥️ {name}', engineLlm: '☁️ {name}',
202
+ engineFallbackHint: '(CLI nur für Code-Aufgaben, Chat wird von {name} übernommen)',
203
+ score: '{score} Pkt. {level}',
204
+ highPerformer: 'Hochleister',
205
+ },
206
+ orgTree: {
207
+ title: '🌳 Befehlskette', subtitle: 'Wer befiehlt wem — auf einen Blick. Klicken Sie für Details.',
208
+ boss: 'Ultimativer Kapitalist', secretary: 'Persönlicher Sekretär (Hauptkomplize)', noLeader: 'Kein Leiter', empty: 'Keine Untergebenen — ein einsamer Tyrann',
209
+ },
210
+ secretarySettings: {
211
+ title: '⚙️ Sekretär-Einstellungen', subtitle: 'Trainieren Sie Ihren Hauptkomplizen',
212
+ tabProfile: '👤 Profil', tabSoul: '🧠 Seele',
213
+ nameLabel: 'Name', namePlaceholder: 'z.B.: Alice, Jarvis', avatarStyle: 'Avatar-Stil', refreshAvatar: '🔄 Mischen',
214
+ previewStyle: 'Stil', previewSeed: 'Seed', previewHint: '💡 Klicken Sie unten oder "Mischen" für zufällig',
215
+ providerLabel: '🧠 Anbieter', providerDesc: 'KI-Modell für Sekretär und HR-Assistent.',
216
+ noProviders: '⚠️ Keine Anbieter verfügbar. Konfigurieren Sie zuerst API-Schlüssel.',
217
+ signatureLabel: 'Signatur', signaturePlaceholder: 'z.B.: Effizienz ist Leben',
218
+ promptLabel: '🧠 Gehirnwäsche-Skript (System-Prompt)', promptDesc: 'Persönlichkeitseinstellung des Sekretärs.',
219
+ charCount: 'Zeichen: {n}', restoreDefault: 'Standard wiederherstellen',
220
+ modelInfo: 'Modell: {provider} · Token: {info}', withHR: 'mit HR-Assistent',
221
+ saved: '✅ Gespeichert', saving: '⏳ Speichern...', saveBtn: '💾 Speichern',
222
+ },
223
+ reqDetail: {
224
+ back: '← Zurück zur Liste', backShort: 'Zurück', executingShort: '⚙️ Läuft',
225
+ status: { pending: 'Ausstehend', planning: 'Planung', in_progress: 'In Arbeit', pending_approval: 'Genehmigung ausstehend', completed: 'Fertig', failed: 'Fehlgeschlagen' },
226
+ deleteBtn: '🗑 Löschen', restartBtn: '🔄 Neustarten',
227
+ tabs: { workflow: '📊 Workflow', chat: '💬 Gruppenchat', outputs: '📦 Ergebnisse', files: '📁 Dateien', office: '🏢 Büro' },
228
+ deleteConfirm: { title: '🗑 Anforderung löschen', desc: 'Diese Anforderung löschen? Nicht rückgängig machbar.', confirmBtn: 'Bestätigen' },
229
+ summary: { tasks: '✅ {n}/{total} Aufgaben', duration: '⏱️ {n}s' },
230
+ timeDuration: '⏱ Dauer {n}s',
231
+ workflow: { progress: 'Gesamtfortschritt', running: 'Läuft', completed: 'Fertig', failed: 'Fehlgeschlagen', pending: 'Ausstehend', typing: 'Arbeitet...', notParsed: 'Workflow nicht analysiert', leader: 'Leiter', planning: 'Analysiert und zerlegt die Anforderung...' },
232
+ live: { stuck: '🔴 Möglicherweise hängt', waiting: '🟡 Wartet auf Antwort...', running: '🟢 Läuft', secondsAgo: 'vor {n}s', minutesAgo: 'vor {n}min', restarting: '🔄 Neustart...', restart: '🔄 Neustarten', deleteReq: '🗑️ Anforderung löschen', confirmDelete: 'Löschung bestätigen?', recentFiles: 'Letzte Dateien:' },
233
+ approvalHint: '"OK" zum Genehmigen eingeben oder Feedback senden...',
234
+ chat: { noMessages: 'Keine Nachrichten', noMessagesHint: 'Kommunikation während der Ausführung erscheint hier' },
235
+ outputs: { noOutputs: 'Keine Ergebnisse', noOutputsHint: 'Ergebnisse erscheinen nach Aufgabenabschluss', noOutputsShort: 'Keine Ergebnisse', collapse: 'Einklappen ▲', expand: 'Ausklappen ▼' },
236
+ files: { noChanges: 'Keine Dateiänderungen', noChangesHint: 'Generierte Dateien erscheinen hier', explorer: 'Explorer', fileCount: '{n} Dateien', syncing: 'Live-Synchronisation', syncingShort: 'Synchronisiere...', loading: 'Laden...', emptyFile: '(leere Datei)', noContent: '(kein Inhalt)', readFailed: '(Lesefehler)', lines: '{n} Zeilen', readOnly: 'Nur lesen', clickToView: 'Datei anklicken zum Anzeigen', syntaxHighlight: 'Syntaxhervorhebung · Live-Sync' },
237
+ members: {
238
+ blockingTitle: '⏱️ Aktueller Blockierer', title: '👥 Mitglieder', count: '({n})',
239
+ running: 'Läuft', reviewing: 'Überprüfung', revision: 'Revision', waiting: 'Wartend', ready: 'Bereit', completed: 'Abgeschlossen', failed: 'Fehlgeschlagen',
240
+ working: '⚡Arbeitet', noTask: 'Keine Aufgabe', peekFlow: 'Flow ansehen', viewProfile: 'Profil ansehen',
241
+ },
242
+ flowPeek: {
243
+ title: '{name}s Flow ansehen', tabFlow: '📋 Arbeitsprotokoll', tabThoughts: '💭 Monolog', tabHistory: '📜 Verlauf',
244
+ loading: 'Gedanken ausspähen...', noFlowLogs: 'Keine Arbeitsprotokolle', noFlowLogsHint: 'Operationen erscheinen hier wenn der Agent beginnt',
245
+ thinking: '🧠 Denkt nach...', decided: '💬 Hat sich entschieden zu sprechen', silent: '🤫 Schweigt', thought: '💭 Gedanke', organizing: 'Gedanken ordnen...',
246
+ noMonologue: 'Kein aktiver Monolog', noHistory: 'Kein Verlauf', recentlyThought: 'hat gerade nachgedacht', spoke: '💬 Hat gesprochen', keptSilent: '🤫 Blieb still', codeBlock: '[Codeblock]',
247
+ },
248
+ },
249
+ time: { justNow: 'gerade', minutesAgo: 'vor {n}m', sun: 'So', mon: 'Mo', tue: 'Di', wed: 'Mi', thu: 'Do', fri: 'Fr', sat: 'Sa' },
250
+ agentChat: {
251
+ subtitle: '1-zu-1 Privatchat',
252
+ empty: 'Sag Hallo zu {name}!',
253
+ inputPlaceholder: 'Nachricht an {name}...',
254
+ typing: 'Tippt...',
255
+ error: 'Senden fehlgeschlagen',
256
+ chatBtn: '💬 Chat',
257
+ },
258
+ bossProfile: {
259
+ title: '👤 Boss-Profil',
260
+ subtitle: 'Passen Sie Ihren Avatar an, oberster Kapitalist',
261
+ avatarTitle: 'Avatar wählen',
262
+ refreshAvatar: '🔄 Mischen',
263
+ saved: '✅ Gespeichert',
264
+ saving: '⏳ Speichern...',
265
+ saveBtn: '💾 Speichern',
266
+ editAvatar: 'Avatar bearbeiten',
267
+ },
268
+ systemSettings: {
269
+ title: '⚙️ Systemeinstellungen',
270
+ subtitle: 'Geplante Aufgaben, Plugins und Systemzustand verwalten',
271
+ cards: { audit: 'Audit', routing: 'Routing', plugins: 'Plugins', cron: 'Geplante Aufgaben', hooks: 'Hooks', sessions: 'Sitzungen', config: 'Konfig' },
272
+ auditStats: { totalEvents: 'Ereignisse', blocked: 'Blockiert' },
273
+ pluginStats: { registered: 'Registriert', enabled: 'Aktiviert' },
274
+ cronStats: { running: 'Läuft', jobs: 'Aufgaben' },
275
+ hookStats: { handlers: 'Handler', eventKeys: 'Ereignisschlüssel' },
276
+ sessionStats: { total: 'Sitzungen', messages: 'Nachrichten' },
277
+ cronDetail: { jobList: 'Geplante Aufgaben', createJob: 'Aufgabe Erstellen', runs: 'Ausführungen', noJobs: 'Keine geplanten Aufgaben', noJobsHint: 'Erstellen Sie eine geplante Aufgabe, um Agentenarbeit zu automatisieren', activeJobs: 'Aktiv', totalRuns: 'Gesamt Ausführungen' },
278
+ cronForm: { name: 'Name', schedule: 'Zeitplan (z.B. every 30m, daily 09:00)', selectAgent: '-- Agent auswählen --', taskPrompt: 'Anweisungen für den Agenten...', scheduleHint: 'Formate: "every 5m", "every 2h", "daily 09:00", "weekly mon 10:00"' },
279
+ pluginDetail: { noPlugins: 'Keine Plugins', totalTools: 'Werkzeuge' },
280
+ health: { title: 'Systemzustand', providerHealth: 'KI-Anbieter Zustand', recentAudit: 'Kürzliche Audit-Ereignisse' },
281
+ cliBackends: {
282
+ title: 'CLI-Backends', subtitle: 'Lokale CLI-Codierungsassistenten als Agent-Ausführungsengines integrieren',
283
+ detectAll: 'Alle Erkennen', detecting: 'Erkennung...', registerCustom: 'Benutzerdefiniertes CLI Registrieren',
284
+ noBackends: 'Keine CLI-Backends erkannt', noBackendsHint: 'Installieren Sie ein CLI-Tool wie Claude Code, Codex oder CodeBuddy und klicken Sie auf Erkennen',
285
+ status: { detected: 'Erkannt', not_found: 'Nicht Gefunden', configured: 'Konfiguriert', error: 'Fehler' },
286
+ version: 'Version', command: 'Befehl', nodeVersion: 'Node-Version', builtin: 'Eingebaut', custom: 'Benutzerdefiniert', remove: 'Entfernen',
287
+ form: { id: 'Backend-ID', name: 'Anzeigename', execCommand: 'Ausführungsbefehl', execArgs: 'Argumente (kommagetrennt)', detectCommand: 'Erkennungsbefehl', memoryDir: 'Memory-Verzeichnis', memoryFile: 'Memory-Datei', nvmNode: 'Node-Version (nvm)', nvmNodeHint: 'Leer lassen wenn nicht benötigt' },
288
+ },
289
+ kbEntryTypes: {
290
+ note: '📝 Notiz',
291
+ fact: '📌 Fakt',
292
+ decision: '⚖️ Entscheidung',
293
+ procedure: '📋 Verfahren',
294
+ reference: '📖 Referenz',
295
+ faq: '❓ Häufige Fragen',
296
+ },
297
+ cronJobActions: {
298
+ pause: 'Pausieren',
299
+ resume: 'Fortsetzen',
300
+ retry: 'Wiederholen',
301
+ runNow: 'Jetzt ausführen',
302
+ delete: 'Löschen',
303
+ },
304
+ agentChanges: '⚡ Agent-Änderungen',
305
+ monologue: '🧠 Innerer Monolog',
306
+ noMonologueYet: 'Dieser Agent hat noch keinen Monolog erstellt',
307
+ sendToGroupChat: '[An Gruppenchat senden]',
308
+ autoSent: 'Auto',
309
+ },
310
+
311
+ // === API-Antwortnachrichten ===
312
+ api: {
313
+ noCompany: 'Bitte erstellen Sie zuerst ein Unternehmen',
314
+ internalError: 'Interner Serverfehler',
315
+ unknownAction: 'Unbekannte Aktion',
316
+ unknownOperation: 'Unbekannte Operation',
317
+ missingField: '{field} ist erforderlich',
318
+ missingFields: 'Pflichtfelder fehlen: {fields}',
319
+ companyNameRequired: 'Bitte geben Sie den Unternehmensnamen ein',
320
+ companyDissolved: 'Unternehmen aufgelöst, alle Daten gelöscht',
321
+ deptNameMissionRequired: 'Abteilungsname und -mission sind erforderlich',
322
+ deptIdRequired: 'Abteilungs-ID ist erforderlich',
323
+ deptIdAdjustGoalRequired: 'Abteilungs-ID und Anpassungsziel sind erforderlich',
324
+ deptIdMessageRequired: 'Abteilungs-ID und Nachricht sind erforderlich',
325
+ adjustPlanIdRequired: 'Anpassungsplan-ID ist erforderlich',
326
+ planIdRequired: 'Plan-ID ist erforderlich',
327
+ deptNotFound: 'Abteilung nicht gefunden',
328
+ deptNotFoundRestart: 'Abteilung nicht gefunden, Neustart nicht möglich',
329
+ agentNotFound: 'Mitarbeiter nicht gefunden',
330
+ agentConfigUpdated: 'Agent-Konfiguration aktualisiert',
331
+ messageRequired: 'Bitte geben Sie eine Nachricht ein',
332
+ requirementNotFound: 'Anforderung nicht gefunden',
333
+ requirementIdRequired: 'Anforderungs-ID ist erforderlich',
334
+ requirementDeptTitleRequired: 'departmentId und title sind erforderlich',
335
+ requirementRestarted: 'Anforderung wurde neu gestartet',
336
+ requirementIdMessageRequired: 'Anforderungs-ID und Nachricht sind erforderlich',
337
+ teamNotFound: 'Team nicht gefunden',
338
+ teamIdRequired: 'teamId ist erforderlich',
339
+ teamCreateRequired: 'departmentId, name, memberIds und leaderId sind erforderlich',
340
+ leaderNotFound: 'Teamleiter in der Abteilung nicht gefunden',
341
+ memberNotFound: 'Mitglied {id} in der Abteilung nicht gefunden',
342
+ sprintNotFound: 'Sprint nicht gefunden',
343
+ sprintCreateRequired: 'teamId, title und goal sind erforderlich',
344
+ sprintDiscussRequired: 'teamId und sprintId sind erforderlich',
345
+ sprintNotDraft: 'Sprint ist nicht im Entwurfsstatus',
346
+ sprintNotPendingApproval: 'Sprint wartet nicht auf Genehmigung',
347
+ sprintMessageRequired: 'teamId, sprintId und message sind erforderlich',
348
+ teamDeleteIdRequired: 'Team-ID ist erforderlich',
349
+ targetDeptRequired: 'Bitte wählen Sie eine Zielabteilung',
350
+ secretarySettingRequired: 'Bitte geben Sie mindestens eine Einstellung zum Ändern an',
351
+ providerNotFound: 'Anbieter nicht gefunden',
352
+ companyNotFound: 'Unternehmen nicht gefunden',
353
+ mailNotFound: 'E-Mail nicht gefunden',
354
+ kbNotFound: 'Wissensbasis nicht gefunden',
355
+ kbUnknownAction: 'Unbekannte Aktion: {action}',
356
+ cronMissingFields: 'Pflichtfelder fehlen: name, cronExpression, agentId, taskPrompt',
357
+ agentNotFoundId: 'Agent nicht gefunden: {id}',
358
+ missingPluginId: 'pluginId fehlt',
359
+ missingSkillId: 'skillId fehlt',
360
+ pluginUnknownAction: 'Unbekannte Aktion: {action}',
361
+ missingBackendId: 'backendId fehlt',
362
+ cliConfigRequired: 'Die Konfiguration erfordert mindestens id und execCommand',
363
+ filePathRequired: 'Dateipfad ist erforderlich (Abfrageparameter: path)',
364
+ fileNotFound: 'Datei nicht gefunden',
365
+ pathNotExist: 'Pfad existiert nicht',
366
+ pathNotDirectory: 'Pfad ist kein Verzeichnis',
367
+
368
+ // Sprint group chat system messages (user-visible)
369
+ sprintCreated: '📋 Sprint „{title}" erstellt. Ziel: {goal}',
370
+ sprintDiscussionOpening: '📢 Team, lass uns den Sprintplan für „{title}" besprechen.\n\n🎯 Sprint-Ziel: {goal}\n\nBitte teilt eure Vorschläge basierend auf eurer Expertise, und ich werde den endgültigen Plan zusammenstellen.',
371
+ sprintDiscussionComplete: '✅ Diskussion abgeschlossen! Der Plan wurde basierend auf dem Team-Feedback überarbeitet und wartet auf Genehmigung des Chefs.',
372
+ sprintDiscussionError: '⚠️ Fehler während der Diskussion: {error}. Aktueller Plan wird zur Genehmigung eingereicht.',
373
+ sprintApproved: '✅ Genehmigt! Der Plan wurde akzeptiert und eine Anforderung für das Team wird erstellt.',
374
+ sprintRequirementCreated: '📋 Anforderung „{title}" wurde erstellt und gestartet. Details können im Anforderungs-Board eingesehen werden.',
375
+ sprintRequirementFailed: '❌ Anforderung konnte nicht erstellt oder ausgeführt werden: {error}',
376
+ },
377
+ pixelOffice: {
378
+ title: 'Büro',
379
+ depts: 'Abteilungen',
380
+ agents: 'Agenten',
381
+ agentInfo: 'Agenten-Info',
382
+ name: 'Name',
383
+ role: 'Rolle',
384
+ department: 'Abteilung',
385
+ motto: 'Motto',
386
+ skills: 'Fähigkeiten',
387
+ lastMessage: 'Letzte Nachricht',
388
+ clickAgent: 'Agent anklicken für Infos',
389
+ bubbleHint: 'Sprechblasen zeigen neueste Nachrichten',
390
+ walkHint: 'Agenten laufen in ihren Büros herum',
391
+ },
392
+ };
393
+ export default de;