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.
- package/README.md +23 -13
- package/admin/assets/AiChatPanel-Bbux7LP7.js +315 -0
- package/admin/assets/AiInlineProvider-DkgjVSFQ.js +7 -0
- package/admin/assets/ScriptEditor-DKljeYQN.js +2 -0
- package/admin/assets/ScriptEditorVanillaMonaco-CaFyKuJ2.js +3 -0
- package/admin/assets/applyCodeEdit-BdRnbz2g.js +1 -0
- package/admin/assets/index-CexrwGGC.js +986 -0
- package/admin/assets/{index-DW5CwIma.js → index-DSvAO584.js} +132 -121
- package/admin/assets/{index-BI3JsAz_.js → index-DgE6XhUM.js} +1 -1
- package/admin/assets/{index-DAkyON1r.js → index-_BUuZlI0.js} +1 -1
- package/admin/assets/inlineChatWidget-Cu6rb4Ar.js +2 -0
- package/admin/assets/inlineDiffController-DBLpPOe2.js +16 -0
- package/admin/assets/{localSharedImportMap-CqvxvyGG.js → localSharedImportMap-BCwqnmn4.js} +1 -1
- package/admin/assets/stateHoverProvider-CGChzV5W.js +3 -0
- 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
- package/admin/custom/assets/{index-BVwMgafs.js → index-DNKzDki_.js} +152 -152
- package/admin/custom/assets/{index-DsIn9jH_.js → index-NItS-TWp.js} +1 -1
- package/admin/{assets/index-hwplVCgv.js → custom/assets/index-sozs10Ij.js} +45 -71
- package/admin/custom/assets/{localSharedImportMap-C4qXtGUd.js → localSharedImportMap-BxT0VwTO.js} +1 -1
- 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
- package/admin/custom/customComponents.js +1 -1
- package/admin/google-blockly/own/blocks_system.js +34 -0
- package/admin/google-blockly/own/blocks_words.js +4 -0
- package/admin/jsonConfig.json +9 -9
- package/admin/mf-manifest.json +1 -1
- package/admin/remoteEntry.js +1 -1
- package/admin/tab.html +2 -2
- package/build/lib/aiProviderResolver.js +80 -0
- package/build/lib/aiProviderResolver.js.map +1 -0
- package/build/lib/anthropicAdapter.js +175 -0
- package/build/lib/anthropicAdapter.js.map +1 -0
- package/build/lib/sandbox.js +7 -2
- package/build/lib/sandbox.js.map +1 -1
- package/build/main.js +141 -107
- package/build/main.js.map +1 -1
- package/build/types.d.ts +1 -0
- package/docs/de/README.md +64 -4
- package/docs/de/blockly.md +669 -8
- package/docs/en/README.md +62 -4
- package/docs/en/blockly.md +33 -0
- package/io-package.json +81 -1
- package/package.json +1 -1
- package/admin/assets/AiChatPanel-sgt697A2.js +0 -296
- package/admin/assets/AiInlineProvider-Dd7eKxk4.js +0 -7
- package/admin/assets/ScriptEditor-CH4qJzqq.js +0 -2
- package/admin/assets/ScriptEditorVanillaMonaco-cB_90T0P.js +0 -1
- package/admin/custom/assets/index-CVIpIckw.js +0 -960
package/build/types.d.ts
CHANGED
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.
|
|
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
|
|
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
|
|