iobroker.javascript 9.2.0 → 9.2.2

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 (47) hide show
  1. package/README.md +23 -13
  2. package/admin/assets/AiChatPanel-Bbux7LP7.js +315 -0
  3. package/admin/assets/AiInlineProvider-DkgjVSFQ.js +7 -0
  4. package/admin/assets/ScriptEditor-DKljeYQN.js +2 -0
  5. package/admin/assets/ScriptEditorVanillaMonaco-CaFyKuJ2.js +3 -0
  6. package/admin/assets/applyCodeEdit-BdRnbz2g.js +1 -0
  7. package/admin/assets/index-CexrwGGC.js +986 -0
  8. package/admin/assets/{index-DW5CwIma.js → index-DSvAO584.js} +132 -121
  9. package/admin/assets/{index-BI3JsAz_.js → index-DgE6XhUM.js} +1 -1
  10. package/admin/assets/{index-DAkyON1r.js → index-_BUuZlI0.js} +1 -1
  11. package/admin/assets/inlineChatWidget-Cu6rb4Ar.js +2 -0
  12. package/admin/assets/inlineDiffController-DBLpPOe2.js +16 -0
  13. package/admin/assets/{localSharedImportMap-CqvxvyGG.js → localSharedImportMap-BCwqnmn4.js} +1 -1
  14. package/admin/assets/stateHoverProvider-CGChzV5W.js +3 -0
  15. package/admin/assets/{virtual_mf-REMOTE_ENTRY_ID_iobroker_javascript__remoteEntry_js-BJ03G6Pu.js → virtual_mf-REMOTE_ENTRY_ID_iobroker_javascript__remoteEntry_js-DNrEsMrg.js} +2 -2
  16. package/admin/custom/assets/{index-BVwMgafs.js → index-DNKzDki_.js} +152 -152
  17. package/admin/custom/assets/{index-DsIn9jH_.js → index-NItS-TWp.js} +1 -1
  18. package/admin/{assets/index-hwplVCgv.js → custom/assets/index-sozs10Ij.js} +45 -71
  19. package/admin/custom/assets/{localSharedImportMap-C4qXtGUd.js → localSharedImportMap-BxT0VwTO.js} +1 -1
  20. package/admin/custom/assets/{virtual_mf-REMOTE_ENTRY_ID_ConfigCustomJavascriptSet__customComponents_js-DFSXB0v2.js → virtual_mf-REMOTE_ENTRY_ID_ConfigCustomJavascriptSet__customComponents_js-Br3IlnqO.js} +2 -2
  21. package/admin/custom/customComponents.js +1 -1
  22. package/admin/google-blockly/own/blocks_system.js +34 -0
  23. package/admin/google-blockly/own/blocks_words.js +4 -0
  24. package/admin/jsonConfig.json +9 -9
  25. package/admin/mf-manifest.json +1 -1
  26. package/admin/remoteEntry.js +1 -1
  27. package/admin/tab.html +2 -2
  28. package/build/lib/aiProviderResolver.js +80 -0
  29. package/build/lib/aiProviderResolver.js.map +1 -0
  30. package/build/lib/anthropicAdapter.js +175 -0
  31. package/build/lib/anthropicAdapter.js.map +1 -0
  32. package/build/lib/sandbox.js +7 -2
  33. package/build/lib/sandbox.js.map +1 -1
  34. package/build/main.js +141 -107
  35. package/build/main.js.map +1 -1
  36. package/build/types.d.ts +1 -0
  37. package/docs/de/README.md +64 -4
  38. package/docs/de/blockly.md +669 -8
  39. package/docs/en/README.md +62 -4
  40. package/docs/en/blockly.md +33 -0
  41. package/io-package.json +81 -1
  42. package/package.json +1 -1
  43. package/admin/assets/AiChatPanel-sgt697A2.js +0 -296
  44. package/admin/assets/AiInlineProvider-Dd7eKxk4.js +0 -7
  45. package/admin/assets/ScriptEditor-CH4qJzqq.js +0 -2
  46. package/admin/assets/ScriptEditorVanillaMonaco-cB_90T0P.js +0 -1
  47. package/admin/custom/assets/index-CVIpIckw.js +0 -960
package/build/types.d.ts CHANGED
@@ -35,6 +35,7 @@ export interface JavaScriptAdapterConfig {
35
35
  sortGlobalScriptsAlphabetically: boolean;
36
36
  gptKey: string;
37
37
  gptBaseUrl: string;
38
+ gptBaseUrlKey: string;
38
39
  claudeKey: string;
39
40
  geminiKey: string;
40
41
  deepseekKey: string;
package/docs/de/README.md CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
  - [Blockly](blockly.md)
8
8
  - [Benutzung](usage.md)
9
+ - [JavaScript-Referenz](../en/javascript.md) (nur auf Englisch verfügbar)
10
+ - [Upgrade-Anleitung](../en/upgrade-guide.md) (nur auf Englisch verfügbar)
9
11
 
10
12
  ## KI-Codegenerator - Unterstützung eigener API-Endpunkte
11
13
 
@@ -72,18 +74,76 @@ In den Adapter-Einstellungen unter "KI-Einstellungen" befinden sich API-Key-Feld
72
74
  | **Eigene API Base-URL** | Base-URL für eigene Anbieter (z.B. `http://localhost:11434/v1` für Ollama) |
73
75
  | **Eigener API-Schlüssel** | Optionaler API-Key für eigene Anbieter (Ollama benötigt keinen) |
74
76
 
75
- Es müssen nur die Keys der gewünschten Anbieter eingetragen werden. Jeder Anbieter hat einen eigenen **Test**-Button.
77
+ Alle API-Key-Felder werden als Passwortfelder dargestellt (maskiert). Es müssen nur die Keys der gewünschten Anbieter eingetragen werden. Jeder Anbieter hat einen eigenen **Test**-Button.
78
+
79
+ ### Sicherheit der API-Schlüssel
80
+
81
+ Die API-Keys werden durch zwei von der ioBroker-Plattform bereitgestellte Schutzebenen abgesichert:
82
+
83
+ 1. **`encryptedNative`** — Die Keys werden vor dem Schreiben in die Object-Datenbank automatisch mit dem System-Secret verschlüsselt. Datenbank-Dumps oder Object-Backups enthalten die Keys nicht mehr im Klartext.
84
+ 2. **`protectedNative`** — Die Keys werden niemals an Admin-Oberflächen oder fremde Adapter übertragen. Nur die `javascript`-Instanz selbst kann sie über `this.config` lesen (die ioBroker-Runtime liefert sie dort transparent entschlüsselt).
85
+
86
+ Daraus folgt: Das KI-Chat-Panel, die Inline-Completion und alle anderen Frontend-Komponenten **greifen nicht mehr direkt auf die Keys zu**. Stattdessen wird jede KI-Anfrage per `sendTo` an den Adapter geschickt, und das Backend setzt den passenden Key ein:
87
+
88
+ ```
89
+ Frontend Backend (this.config, entschlüsselt)
90
+ ──────── ─────────────────────────────────────
91
+ sendTo('chatCompletion', { → wählt Provider → nimmt gptKey/claudeKey/…
92
+ provider: 'openai', → schickt HTTP-Request an Anbieter
93
+ model: 'gpt-4o', → liefert Antwort zurück
94
+ messages: [...]
95
+ })
96
+ ```
97
+
98
+ Für die Anzeige steht ein eigener `sendTo`-Befehl zur Verfügung:
99
+
100
+ | Befehl | Payload | Antwort |
101
+ |--------|---------|---------|
102
+ | `getAvailableAiProviders` | `{}` | `{ providers: [{ provider: 'openai' }, { provider: 'custom', baseUrl: '…' }, …] }` |
103
+
104
+ Die Antwort teilt dem Frontend nur mit, **welche** Provider konfiguriert sind — der eigentliche Schlüssel ist darin nie enthalten. So lassen sich im Editor die richtigen Provider-Icons anzeigen und das Modell-Dropdown korrekt befüllen, ohne Secrets in den Browser zu laden.
105
+
106
+ **Hinweis zum Upgrade:** Nach dem Upgrade von einer älteren Version bleiben vorhandene (unverschlüsselte) Keys so lange gültig, bis die Adapter-Einstellungen das erste Mal gespeichert werden. Beim Speichern verschlüsselt die Runtime die Werte. Sollte ein Schlüssel nach dem Upgrade leer erscheinen, genügt es, ihn einmal neu einzutragen und zu speichern.
76
107
 
77
108
  ### API-Verbindung testen
78
109
 
79
- Jeder Anbieter hat einen eigenen **Test**-Button neben seinem API-Key-Feld. Der Test:
110
+ Jeder Anbieter hat einen eigenen **Test**-Button neben seinem API-Key-Feld. Es werden zwei Fälle unterschieden:
111
+
112
+ 1. **Test mit Formular-Wert** — Unmittelbar nach dem Eintragen oder Ändern eines Keys im Einstellungsdialog nutzt der `Test`-Button den aktuellen Formularwert (der liegt vor dem Speichern noch lokal im Browser). So kann ein neuer Key vor dem Persistieren geprüft werden.
113
+ 2. **Test mit gespeichertem Schlüssel** — Wird der Test aus Kontexten ohne Formular-Wert aufgerufen (z.B. beim Modell-Abruf im Skript-Editor), löst das Backend den Key über `this.config` anhand des gewählten Providers auf.
114
+
115
+ Der Test:
80
116
  - Verbindet sich mit dem API-Endpunkt des Anbieters
81
117
  - Validiert den API-Schlüssel
82
- - Gibt die Anzahl der verfügbaren Modelle zurück
118
+ - Gibt die Anzahl der verfügbaren Chat-Modelle zurück
119
+
120
+ Die Icons der Test-Buttons sind als Inline-SVG-Data-URIs mit `fill="currentColor"` eingebettet. Dadurch folgt ihre Farbe automatisch dem aktiven Theme (Light/Dark-Mode).
83
121
 
84
122
  ### Dynamisches Laden der Modelle
85
123
 
86
- Beim Öffnen des KI-Codegenerator-Dialogs im Skript-Editor werden die verfügbaren Modelle automatisch vom konfigurierten API-Endpunkt abgerufen. Das Modell-Dropdown wird dynamisch befüllt — es gibt keine fest hinterlegte Modellliste.
124
+ Beim Öffnen des KI-Codegenerator-Dialogs im Skript-Editor werden die verfügbaren Modelle automatisch von jedem konfigurierten Provider abgerufen. Das Modell-Dropdown wird dynamisch befüllt — es gibt keine fest hinterlegte Modellliste.
125
+
126
+ #### Filter für nicht-Chat-Modelle
127
+
128
+ Die Modelllisten, die OpenAI, Anthropic, Gemini, DeepSeek und Custom-Endpunkte (Ollama/LM Studio/OpenRouter) zurückliefern, enthalten viele Modelle, die nicht für Chat-Completion geeignet sind. Der Adapter filtert diese automatisch heraus, sodass im Dropdown nur Modelle erscheinen, die für die ioBroker-Skript-Generierung taugen.
129
+
130
+ Folgende Kategorien werden ausgeschlossen:
131
+
132
+ | Kategorie | Beispiel-Schlüsselwörter |
133
+ |-----------|--------------------------|
134
+ | Embeddings | `embedding`, `text-embedding`, `embeddinggemma`, `bge-`, `nomic-embed`, `mxbai-embed`, `arctic-embed`, `all-minilm`, `voyage-`, `gecko`, `paraphrase-multilingual` |
135
+ | Bild-Generierung / -Bearbeitung | `dall-e`, `gpt-image`, `image-edit`, `-image-preview`, `-image-latest`, `flash-image`, `nano-banana`, `stable-diffusion`, `sdxl`, `midjourney`, `flux-`, `imagen` |
136
+ | Video-Generierung | `sora`, `veo-`, `cogvideo`, `runway-`, `lumiere` |
137
+ | Musik-Generierung | `lyria` |
138
+ | Audio / Sprache / Transkription / Realtime | `whisper`, `tts-`, `-tts`, `speech-`, `audio-preview`, `-transcribe`, `native-audio`, `flash-live`, `gpt-audio`, `realtime`, `bark-`, `xtts`, `voicebox` |
139
+ | Moderation / Safety-Klassifikatoren | `moderation`, `omni-moderation`, `llama-guard`, `shieldgemma`, `prompt-guard`, `-guardian`, `safeguard` |
140
+ | Reranker | `rerank`, `reranker` |
141
+ | Legacy-Completion (OpenAI GPT-3-Ära) | `babbage-`, `davinci-`, `curie-`, `text-davinci`, `instructgpt`, `code-davinci`, `code-cushman`, `-turbo-instruct` |
142
+ | Web-Suche / Browsing-Endpoints | `-search-preview`, `-search-api` |
143
+ | Legacy-Suche / Similarity | `code-search`, `text-search`, `similarity-` |
144
+ | Spezial / Single-Task | `computer-use-preview`, `deep-research`, `robotics`, `aqa`, `reader-lm` (HTML→Markdown), `-nsql` (Text-zu-SQL), `minicheck` (Fact-Check), `claude-1`, `claude-instant` |
145
+
146
+ Der Filter verwendet eine Substring-Prüfung ohne Beachtung der Groß-/Kleinschreibung. Wenn ein Provider künftig eine weitere Nicht-Chat-Familie einführt, lässt sich die Liste in `src-editor/src/AiChat/AiChatService.ts` (`NON_CHAT_KEYWORDS`) erweitern.
87
147
 
88
148
  ### Fehlerbehandlung
89
149