iobroker.autodoc 0.9.45 → 0.9.46
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 +15 -4
- package/io-package.json +39 -39
- package/lib/aiEnhancer.js +1 -2
- package/main.js +17 -5
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -4,13 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
Automatically generates structured documentation (HTML, Markdown, JSON) for your ioBroker installation — on demand, on a schedule, or when the system changes.
|
|
6
6
|
|
|
7
|
-
**Version:** 0.9.
|
|
7
|
+
**Version:** 0.9.46
|
|
8
8
|
|
|
9
9
|
**Installation**
|
|
10
10
|
|
|
11
|
-
1. Open **[ioBroker Admin](https://www.iobroker.net/#en/documentation)** and install **`iobroker.autodoc`**
|
|
12
|
-
2.
|
|
13
|
-
3. Official adapter index: **[ioBroker.repositories](https://github.com/ioBroker/ioBroker.repositories)** (**latest**). Maintainer workflow / PR: **[TODO — § 1.1 Release](TODO.md#release-veroeffentlichung)**.
|
|
11
|
+
1. Open **[ioBroker Admin](https://www.iobroker.net/#en/documentation)** and install **`iobroker.autodoc`** from the adapter list.
|
|
12
|
+
2. Official adapter index: **[ioBroker.repositories](https://github.com/ioBroker/ioBroker.repositories)** (**latest**). Maintainer workflow / PR: **[TODO — § 1.1 Release](TODO.md#release-veroeffentlichung)**.
|
|
14
13
|
|
|
15
14
|
| | |
|
|
16
15
|
| --- | --- |
|
|
@@ -221,6 +220,16 @@ For **roadmap and planning**: [`TODO.md`](TODO.md) (open work at the top, full c
|
|
|
221
220
|
## Changelog
|
|
222
221
|
|
|
223
222
|
**Admin `common.news`** in `io-package.json` lists only versions **published on npm** (Adapter Checker **E2004**). The detailed sections below are the **user-facing** changelog (Git-era releases plus npm); older entries are in [`CHANGELOG_OLD.md`](CHANGELOG_OLD.md).
|
|
223
|
+
|
|
224
|
+
### 0.9.46 (2026-06-28)
|
|
225
|
+
|
|
226
|
+
- (mcm1957) `info.summary` state now outputs English text by default
|
|
227
|
+
- (mcm1957) Periodic documentation generation switched from `setInterval` to `setTimeout`-at-end — prevents overlapping runs
|
|
228
|
+
- (mcm1957) `autoGenerateInterval` code-level minimum clamp of 0.1 h with warning log
|
|
229
|
+
- (mcm1957) README: GitHub install instruction removed (E6013)
|
|
230
|
+
- (fix) `common.news` 0.9.37 / 0.9.38 / 0.9.44 translated into es, it, nl, pl, pt, ru, uk, zh-cn (E1144)
|
|
231
|
+
- (fix) `admin` minimum version bumped to `>=7.8.23`
|
|
232
|
+
|
|
224
233
|
### 0.9.45 (2026-06-18)
|
|
225
234
|
|
|
226
235
|
- **ioBroker conformance — object structure:** Added channel parent objects (`action`, `documentation`, `info`, `versioning`) to `instanceObjects` in `io-package.json` — required by ioBroker object checker (E3009) for **ioBroker.repositories** review.
|
|
@@ -250,6 +259,8 @@ For **roadmap and planning**: [`TODO.md`](TODO.md) (open work at the top, full c
|
|
|
250
259
|
|
|
251
260
|
- **Advanced — storage (historical npm note):** release **0.9.38** introduced default **`metadata`** for **new** instances so full exports prefer **`/files/`** (`common.news`). **All** installs now behave like that **without** a toggle — **`documentationStatesMode`** was dropped in **0.9.39** (always placeholders + **`/files/`**).
|
|
252
261
|
|
|
262
|
+
[Older changelogs can be found there](CHANGELOG_OLD.md)
|
|
263
|
+
|
|
253
264
|
## License
|
|
254
265
|
|
|
255
266
|
MIT License
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "autodoc",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.46",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.9.46": {
|
|
7
|
+
"en": "**ioBroker conformance:** `info.summary` state English by default; `setTimeout`-at-end for periodic generation (no overlapping runs); `autoGenerateInterval` code-level min 0.1 h; README install instruction cleaned up (E6013). **i18n:** `common.news` 0.9.37/0.9.38/0.9.44 translated for all locales (E1144). **Dependencies:** admin `>=7.8.23`.",
|
|
8
|
+
"de": "**ioBroker-Konformität:** `info.summary`-State standardmäßig auf Englisch; `setTimeout`-am-Ende für periodische Generierung (keine überlappenden Läufe); `autoGenerateInterval` Code-Minimum 0,1 h; README-Installationsanweisung bereinigt (E6013). **i18n:** `common.news` 0.9.37/0.9.38/0.9.44 für alle Sprachen übersetzt (E1144). **Abhängigkeiten:** admin `>=7.8.23`.",
|
|
9
|
+
"fr": "**Conformité ioBroker :** état `info.summary` en anglais par défaut ; `setTimeout`-en-fin pour la génération périodique (sans chevauchement) ; minimum de code 0,1 h pour `autoGenerateInterval` ; nettoyage des instructions d'installation README (E6013). **i18n :** `common.news` 0.9.37/0.9.38/0.9.44 traduit pour toutes les langues (E1144). **Dépendances :** admin `>=7.8.23`.",
|
|
10
|
+
"ru": "**Соответствие ioBroker:** состояние `info.summary` на английском по умолчанию; `setTimeout`-в-конце для периодической генерации (без перекрытий); минимум кода 0,1 ч для `autoGenerateInterval`; очищены инструкции по установке в README (E6013). **i18n:** `common.news` 0.9.37/0.9.38/0.9.44 переведены для всех локалей (E1144). **Зависимости:** admin `>=7.8.23`.",
|
|
11
|
+
"pt": "**Conformidade ioBroker:** estado `info.summary` em inglês por padrão; `setTimeout`-no-final para geração periódica (sem sobreposições); mínimo de código 0,1 h para `autoGenerateInterval`; instruções de instalação do README limpas (E6013). **i18n:** `common.news` 0.9.37/0.9.38/0.9.44 traduzido para todas as localidades (E1144). **Dependências:** admin `>=7.8.23`.",
|
|
12
|
+
"nl": "**ioBroker-conformiteit:** `info.summary`-state standaard in het Engels; `setTimeout`-aan-het-einde voor periodieke generatie (geen overlappende runs); codeminimum 0,1 u voor `autoGenerateInterval`; README-installatie-instructies opgeschoond (E6013). **i18n:** `common.news` 0.9.37/0.9.38/0.9.44 vertaald voor alle talen (E1144). **Afhankelijkheden:** admin `>=7.8.23`.",
|
|
13
|
+
"it": "**Conformità ioBroker:** stato `info.summary` in inglese per impostazione predefinita; `setTimeout`-alla-fine per la generazione periodica (nessuna sovrapposizione); minimo di codice 0,1 h per `autoGenerateInterval`; istruzioni di installazione README pulite (E6013). **i18n:** `common.news` 0.9.37/0.9.38/0.9.44 tradotto per tutte le lingue (E1144). **Dipendenze:** admin `>=7.8.23`.",
|
|
14
|
+
"es": "**Conformidad ioBroker:** estado `info.summary` en inglés por defecto; `setTimeout`-al-final para generación periódica (sin ejecuciones superpuestas); mínimo de código 0,1 h para `autoGenerateInterval`; instrucciones de instalación README limpias (E6013). **i18n:** `common.news` 0.9.37/0.9.38/0.9.44 traducido para todas las lenguas (E1144). **Dependencias:** admin `>=7.8.23`.",
|
|
15
|
+
"pl": "**Zgodność ioBroker:** stan `info.summary` domyślnie po angielsku; `setTimeout`-na-końcu dla generowania okresowego (bez nakładających się przebiegów); minimalne kodowe 0,1 h dla `autoGenerateInterval`; wyczyszczone instrukcje instalacji README (E6013). **i18n:** `common.news` 0.9.37/0.9.38/0.9.44 przetłumaczono dla wszystkich języków (E1144). **Zależności:** admin `>=7.8.23`.",
|
|
16
|
+
"uk": "**Відповідність ioBroker:** стан `info.summary` англійською за замовчуванням; `setTimeout`-в-кінці для періодичної генерації (без перекриттів); мінімум коду 0,1 год для `autoGenerateInterval`; очищено інструкції з встановлення README (E6013). **i18n:** `common.news` 0.9.37/0.9.38/0.9.44 перекладено для всіх мов (E1144). **Залежності:** admin `>=7.8.23`.",
|
|
17
|
+
"zh-cn": "**ioBroker 合规:** `info.summary` 状态默认输出英文;周期性生成使用 `setTimeout`-在末尾 模式(无重叠运行);`autoGenerateInterval` 代码级最小值 0.1 小时;README 安装说明已清理(E6013)。**i18n:** `common.news` 0.9.37/0.9.38/0.9.44 已翻译为所有语言(E1144)。**依赖:** admin `>=7.8.23`。"
|
|
18
|
+
},
|
|
6
19
|
"0.9.45": {
|
|
7
20
|
"en": "**ioBroker conformance — object structure:** Added channel parent objects (`action`, `documentation`, `info`, `versioning`) to `instanceObjects` in `io-package.json` — required by ioBroker object checker (E3009) for **ioBroker.repositories** review.\n**ioBroker conformance — timers:** `adapter.delay()` (ioBroker base class) for AI retry delays; `window.setTimeout` / `globalThis.setTimeout` in browser-side and utility code — no bare `setTimeout` in adapter runtime (E5005/W5004 fixes).\n**i18n:** All 10 supported languages translated via `@iobroker/adapter-dev` (Google Translate); `de` and `fr` remain manually maintained. Missing keys synced across all locales.\n**Dependencies:** `@iobroker/adapter-core` → 3.4.1, `cytoscape` → 3.34.0.",
|
|
8
21
|
"de": "**ioBroker-Konformität – Objektstruktur:** Kanal-Parent-Objekte (`action`, `documentation`, `info`, `versioning`) wurden zu `instanceObjects` in `io-package.json` hinzugefügt – erforderlich vom ioBroker-Objektprüfer (E3009) für die Überprüfung von **ioBroker.repositories**.\n**ioBroker-Konformität — Timer:** `adapter.delay()` (ioBroker-Basisklasse) für KI-Wiederholungsverzögerungen; `window.setTimeout` / `globalThis.setTimeout` im Browser-seitigen Code und im Hilfscode — kein einfaches `setTimeout` in der Adapter-Laufzeitumgebung (E5005/W5004-Korrekturen).\n**i18n:** Alle 10 unterstützten Sprachen wurden über `@iobroker/adapter-dev` (Google Translate) übersetzt; `de` und `fr` werden weiterhin manuell gepflegt. Fehlende Schlüssel werden in allen Gebietsschemas synchronisiert.\n**Abhängigkeiten:** `@iobroker/adapter-core` → 3.4.1, `cytoscape` → 3.34.0.",
|
|
@@ -20,14 +33,14 @@
|
|
|
20
33
|
"en": "**Chapter JSON & logs:** English `warn` lines on each documentation run for invalid order/hide JSON, unknown ids, and duplicates (link to German user-guide JSON cookbook); identical lines deduped per adapter log; legacy-only values labeled `…Json via native …`. **Admin:** richer `?` help on chapter JSON fields (EN/DE/FR + fallbacks). **Quick Start:** room highlight ordering (categories `leak`, `co2`, `valve`, `weather`, `sensor`; function-area tie-break by name). **HTML:** `RENDERER_VERSION` bumped so instances refresh generated docs once after adapter update.",
|
|
21
34
|
"de": "**Kapitel-JSON & Log:** Pro Lauf englische **`warn`**-Zeilen bei ungültigem Order/Hide-JSON, unbekannten oder doppelten Ids (Verweis Wiki-JSON-Kochbuch); identische Meldungen werden pro Adapter-Log nur einmal ausgegeben; nur Legacy-Felder werden als **`…Json via native …`** gekennzeichnet. **Admin:** erweiterte **`?`**-Hilfen bei den Kapitel-JSON-Feldern (u. a. EN/DE/FR). **Quick Start:** erweiterte Reihenfolge der Raum-Highlights; Gleichstand bei Funktionsbereichen nach Namen. **HTML:** **`RENDERER_VERSION`** erhöht — einmalige Neuerzeugung der Exporte nach Adapter-Update.",
|
|
22
35
|
"fr": "**JSON chapitres / journal :** à chaque exécution, messages `warn` en anglais pour JSON d’ordre/masquage invalide, ids inconnus ou en double (lien vers le guide JSON DE) ; lignes identiques dédoublonnées par journal d’adaptateur ; valeur issue d’une clé héritée : libellé **`…Json via native …`**. **Admin :** textes d’aide **`?`** enrichis (EN/DE/FR + secours). **Quick Start :** ordre des temps forts pièce (catégories `leak`, `co2`, `valve`, `weather`, `sensor` ; ex aequo fonctions par nom). **HTML :** **`RENDERER_VERSION`** augmenté — régénération unique des exports après mise à jour.",
|
|
23
|
-
"ru": "**
|
|
24
|
-
"pt": "**
|
|
25
|
-
"nl": "**
|
|
26
|
-
"it": "**
|
|
27
|
-
"es": "**
|
|
28
|
-
"pl": "**
|
|
29
|
-
"uk": "**
|
|
30
|
-
"zh-cn": "
|
|
36
|
+
"ru": "**JSON глав и журналы:** строки `warn` на английском при каждом запуске для неверного JSON порядка/скрытия, неизвестных ID и дублей (ссылка на немецкий справочник JSON); дублирующиеся строки дедублируются по журналу адаптера; устаревшие значения помечены как `…Json via native …`. **Admin:** расширенная справка `?` для полей JSON глав (EN/DE/FR + резервные). **Быстрый старт:** порядок выделения комнат (категории `leak`, `co2`, `valve`, `weather`, `sensor`; ничья функциональных зон по имени). **HTML:** `RENDERER_VERSION` увеличена — экземпляры обновят документы один раз после обновления адаптера.",
|
|
37
|
+
"pt": "**JSON de capítulos e registos:** linhas `warn` em inglês a cada execução para JSON de ordem/ocultar inválido, IDs desconhecidos e duplicados (link para o manual JSON do guia do utilizador alemão); linhas idênticas deduplicadas por log do adaptador; valores apenas legados etiquetados como `…Json via native …`. **Admin:** ajuda `?` mais completa nos campos JSON de capítulos (EN/DE/FR + alternativas). **Início rápido:** ordem de destaque de divisões (categorias `leak`, `co2`, `valve`, `weather`, `sensor`; empate em áreas funcionais por nome). **HTML:** `RENDERER_VERSION` incrementada para que as instâncias actualizem os documentos uma vez após a actualização do adaptador.",
|
|
38
|
+
"nl": "**Hoofdstuk-JSON en logboeken:** Engelstalige `warn`-regels bij elke documentatierun voor ongeldige volgorde/verberg-JSON, onbekende ID's en duplicaten (link naar Duits gebruikershandleiding JSON-kookboek); identieke regels gededupliceerd per adapterlog; alleen-verouderde waarden gelabeld als `…Json via native …`. **Admin:** uitgebreidere `?`-help voor hoofdstuk-JSON-velden (EN/DE/FR + noodopties). **Snel starten:** volgorde kamermarkering (categorieën `leak`, `co2`, `valve`, `weather`, `sensor`; gelijkspel functiegebied op naam). **HTML:** `RENDERER_VERSION` verhoogd zodat instanties gegenereerde documenten eenmaal vernieuwen na adapterupdate.",
|
|
39
|
+
"it": "**JSON capitoli e log:** righe `warn` in inglese a ogni esecuzione per JSON di ordine/nascondi non valido, ID sconosciuti e duplicati (link al ricettario JSON della guida utente in tedesco); righe identiche deduplicate per log dell'adattatore; valori solo legacy etichettati come `…Json via native …`. **Admin:** guida `?` più ricca nei campi JSON dei capitoli (EN/DE/FR + fallback). **Avvio rapido:** ordinamento delle evidenziazioni della stanza (categorie `leak`, `co2`, `valve`, `weather`, `sensor`; parità funzione per nome). **HTML:** `RENDERER_VERSION` incrementata affinché le istanze aggiornino i documenti una volta dopo l'aggiornamento dell'adattatore.",
|
|
40
|
+
"es": "**JSON de capítulos y registros:** líneas `warn` en inglés en cada ejecución para JSON de orden/ocultación inválido, IDs desconocidos y duplicados (enlace al recetario JSON del manual alemán); líneas idénticas deduplicadas por log del adaptador; valores solo heredados etiquetados como `…Json via native …`. **Admin:** ayuda `?` más completa en campos JSON de capítulos (EN/DE/FR + alternativas). **Inicio rápido:** orden de destacados de sala (categorías `leak`, `co2`, `valve`, `weather`, `sensor`; desempate de áreas funcionales por nombre). **HTML:** `RENDERER_VERSION` incrementada para que las instancias actualicen los documentos generados una vez tras la actualización del adaptador.",
|
|
41
|
+
"pl": "**JSON rozdziałów i logi:** angielskie linie `warn` przy każdym uruchomieniu dla nieprawidłowego JSON kolejności/ukrycia, nieznanych ID i duplikatów (link do niemieckiego poradnika JSON); identyczne linie deduplikowane na log adaptera; wartości tylko starszego typu oznaczone jako `…Json via native …`. **Admin:** rozbudowana pomoc `?` dla pól JSON rozdziałów (EN/DE/FR + zapasowe). **Szybki start:** kolejność wyróżnień pokoju (kategorie `leak`, `co2`, `valve`, `weather`, `sensor`; remis obszarów funkcji wg nazwy). **HTML:** `RENDERER_VERSION` zwiększona, aby instancje odświeżyły dokumenty raz po aktualizacji adaptera.",
|
|
42
|
+
"uk": "**JSON розділів і журнали:** рядки `warn` англійською при кожному запуску для неправильного JSON порядку/приховування, невідомих ID і дублікатів (посилання на німецький довідник JSON); однакові рядки дедублюються за журналом адаптера; застарілі значення позначено як `…Json via native …`. **Admin:** розширена довідка `?` для полів JSON розділів (EN/DE/FR + запасні). **Швидкий старт:** порядок виділення кімнат (категорії `leak`, `co2`, `valve`, `weather`, `sensor`; нічия функціональних зон за назвою). **HTML:** `RENDERER_VERSION` збільшена — екземпляри оновлять документи один раз після оновлення адаптера.",
|
|
43
|
+
"zh-cn": "**章节 JSON 及日志:** 每次文档生成时,对无效的排序/隐藏 JSON、未知 ID 和重复项输出英语 `warn` 行(附德语用户手册 JSON 食谱链接);同一适配器日志中的重复行已去重;仅旧版的值标记为 `…Json via native …`。**Admin:** 章节 JSON 字段的 `?` 帮助更丰富(EN/DE/FR + 回退)。**快速开始:** 房间高亮排序(类别 `leak`、`co2`、`valve`、`weather`、`sensor`;功能区并列按名称排序)。**HTML:** `RENDERER_VERSION` 提升,确保实例在适配器更新后刷新一次生成的文档。"
|
|
31
44
|
},
|
|
32
45
|
"0.9.43": {
|
|
33
46
|
"en": "**Admin metadata:** **`common.news`** lists only versions published on **npm** (removed **0.9.39–0.9.41** — never shipped as tarballs; Adapter Checker **E2004**). Git-era notes remain in **README** changelog. No runtime change.",
|
|
@@ -58,41 +71,28 @@
|
|
|
58
71
|
"0.9.38": {
|
|
59
72
|
"en": "**Default `documentationStatesMode`:** new instances use **`metadata`** (full exports under **`/files/`** only; `documentation.*` states are short placeholders) to ease load on the object database (e.g. Redis). **Existing** instances keep their current setting until you change **Advanced → Dokumentation in States**. Scripts that need full text must read **`/files/`** or use download actions — see Admin help.",
|
|
60
73
|
"de": "**Standard `documentationStatesMode`:** neue Instanzen starten mit **`metadata`** (vollständige Exporte nur unter **`/files/`**; States nur kurze Platzhalter) — schont die Objektdatenbank (z. B. Redis). **Bestehende** Instanzen behalten die Einstellung, bis Sie unter **Erweitert → Dokumentation in States** umstellen. Skripte mit Volltext: **`/files/`** oder Download-Aktionen — siehe Admin-Hilfe.",
|
|
61
|
-
"ru": "
|
|
62
|
-
"pt": "
|
|
63
|
-
"nl": "**
|
|
74
|
+
"ru": "**`documentationStatesMode` по умолчанию:** новые экземпляры используют **`metadata`** (полные экспорты только в **`/files/`**; состояния `documentation.*` — короткие заполнители), чтобы снизить нагрузку на базу данных объектов (например, Redis). **Существующие** экземпляры сохраняют текущую настройку до изменения в **Дополнительно → Dokumentation in States**. Скрипты, которым нужен полный текст, должны читать **`/files/`** или использовать действия загрузки — см. справку Admin.",
|
|
75
|
+
"pt": "**`documentationStatesMode` padrão:** novas instâncias utilizam **`metadata`** (exportações completas apenas em **`/files/`**; os estados `documentation.*` são marcadores de posição curtos) para reduzir a carga na base de dados de objetos (p. ex. Redis). As instâncias **existentes** mantêm a configuração actual até alterar em **Avançado → Dokumentation in States**. Os scripts que precisam de texto completo devem ler **`/files/`** ou usar ações de transferência — consulte a ajuda do Admin.",
|
|
76
|
+
"nl": "**Standaard `documentationStatesMode`:** nieuwe instanties gebruiken **`metadata`** (volledige exports uitsluitend onder **`/files/`**; `documentation.*`-states zijn korte tijdelijke waarden) om de belasting op de objectendatabase (bijv. Redis) te verlichten. **Bestaande** instanties behouden hun huidige instelling totdat u **Geavanceerd → Dokumentation in States** wijzigt. Scripts die de volledige tekst nodig hebben, moeten **`/files/`** lezen of downloadacties gebruiken — zie de Admin-help.",
|
|
64
77
|
"fr": "**Valeur par défaut `documentationStatesMode` :** les **nouvelles** instances utilisent **`metadata`** (exports complets uniquement sous **`/files/`** ; états `documentation.*` en courtes valeurs de substitution) pour soulager la base d’objets (ex. **Redis**). Les instances **existantes** conservent le réglage jusqu’à modification dans **Avancé**. Scripts : texte complet via **`/files/`** ou actions de téléchargement — voir l’aide Admin.",
|
|
65
|
-
"it": "
|
|
66
|
-
"es": "
|
|
67
|
-
"pl": "**
|
|
68
|
-
"uk": "
|
|
69
|
-
"zh-cn": "
|
|
78
|
+
"it": "**`documentationStatesMode` predefinito:** le nuove istanze usano **`metadata`** (esportazioni complete solo in **`/files/`**; gli stati `documentation.*` sono brevi segnaposto) per alleggerire il carico sul database degli oggetti (es. Redis). Le istanze **esistenti** mantengono l'impostazione corrente finché non si modifica **Avanzato → Dokumentation in States**. Gli script che necessitano di testo completo devono leggere **`/files/`** o usare le azioni di download — consulta la guida Admin.",
|
|
79
|
+
"es": "**`documentationStatesMode` predeterminado:** las nuevas instancias usan **`metadata`** (exportaciones completas solo en **`/files/`**; los estados `documentation.*` son marcadores de posición cortos) para reducir la carga en la base de datos de objetos (p. ej. Redis). Las instancias **existentes** mantienen su configuración actual hasta que cambie **Avanzado → Dokumentation in States**. Los scripts que necesitan texto completo deben leer **`/files/`** o usar acciones de descarga — consulte la ayuda del Admin.",
|
|
80
|
+
"pl": "**Domyślny `documentationStatesMode`:** nowe instancje używają **`metadata`** (pełne eksporty tylko w **`/files/`**; stany `documentation.*` to krótkie wartości zastępcze) w celu odciążenia bazy danych obiektów (np. Redis). **Istniejące** instancje zachowują bieżące ustawienie do momentu zmiany w **Zaawansowane → Dokumentation in States**. Skrypty wymagające pełnego tekstu muszą odczytywać **`/files/`** lub używać akcji pobierania — patrz pomoc Admina.",
|
|
81
|
+
"uk": "**`documentationStatesMode` за замовчуванням:** нові екземпляри використовують **`metadata`** (повні експорти лише в **`/files/`**; стани `documentation.*` — короткі заповнювачі), щоб зменшити навантаження на базу даних об'єктів (наприклад, Redis). **Наявні** екземпляри зберігають поточне налаштування до зміни в **Розширені → Dokumentation in States**. Скрипти, яким потрібен повний текст, мають читати **`/files/`** або використовувати дії завантаження — дивіться довідку Admin.",
|
|
82
|
+
"zh-cn": "**默认 `documentationStatesMode`:** 新实例使用 **`metadata`**(完整导出仅在 **`/files/`** 下;`documentation.*` 状态为简短占位符),以减轻对象数据库(如 Redis)的负担。**现有**实例保留当前设置,直到在**高级 → Dokumentation in States** 中更改。需要全文的脚本必须读取 **`/files/`** 或使用下载操作 — 请参阅 Admin 帮助。"
|
|
70
83
|
},
|
|
71
84
|
"0.9.37": {
|
|
72
85
|
"en": "**Tooling:** `runPdfExport` initializes the PDF digest map with a typed empty collection so **`npm run check`** (TypeScript) passes; no change to PDF export behavior.\n**Docs:** Adapter-neutral **[`docs/iobroker-adapter-references.md`](docs/iobroker-adapter-references.md)** linked from **`TODO.md`**, **`CONTRIBUTING.md`**, and the Cursor project rule; **`PLAN.md`** phase **5.x.1** aligned with **`TODO.md`** (MVP complete).",
|
|
73
86
|
"de": "**Tooling:** `runPdfExport` initialisiert die PDF-Hash-Zuordnung typkorrekt, sodass **`npm run check`** (TypeScript) wieder durchläuft; kein geändertes Verhalten beim PDF-Export.\n**Docs:** Adapter-neutrale Referenz **[`docs/iobroker-adapter-references.md`](docs/iobroker-adapter-references.md)** in **`TODO.md`**, **`CONTRIBUTING.md`** und der Cursor-Projektregel verknüpft; **`PLAN.md`** Phase **5.x.1** an **`TODO.md`** angeglichen (MVP abgeschlossen).",
|
|
74
|
-
"ru": "
|
|
75
|
-
"pt": "**
|
|
76
|
-
"nl": "**Tooling:** `runPdfExport`
|
|
87
|
+
"ru": "**Инструменты:** `runPdfExport` инициализирует карту дайджестов PDF типизированной пустой коллекцией, чтобы **`npm run check`** (TypeScript) проходил успешно; поведение экспорта PDF не изменилось.\n**Docs:** Нейтральный для адаптеров справочник **[`docs/iobroker-adapter-references.md`](docs/iobroker-adapter-references.md)** добавлен в **`TODO.md`**, **`CONTRIBUTING.md`** и правило проекта Cursor; фаза **5.x.1** **`PLAN.md`** приведена в соответствие с **`TODO.md`** (MVP завершён).",
|
|
88
|
+
"pt": "**Ferramentas:** `runPdfExport` inicializa o mapa de resumos PDF com uma coleção vazia tipada para que **`npm run check`** (TypeScript) passe com sucesso; sem alteração no comportamento de exportação PDF.\n**Docs:** Referência neutra de adaptador **[`docs/iobroker-adapter-references.md`](docs/iobroker-adapter-references.md)** ligada a partir de **`TODO.md`**, **`CONTRIBUTING.md`** e da regra do projeto Cursor; fase **5.x.1** de **`PLAN.md`** alinhada com **`TODO.md`** (MVP concluído).",
|
|
89
|
+
"nl": "**Tooling:** `runPdfExport` initialiseert de PDF-digest-map met een getypeerde lege collectie zodat **`npm run check`** (TypeScript) slaagt; geen wijziging in het PDF-exportgedrag.\n**Docs:** Adapter-neutrale referentie **[`docs/iobroker-adapter-references.md`](docs/iobroker-adapter-references.md)** gekoppeld vanuit **`TODO.md`**, **`CONTRIBUTING.md`** en de Cursor-projectregel; **`PLAN.md`** fase **5.x.1** uitgelijnd met **`TODO.md`** (MVP voltooid).",
|
|
77
90
|
"fr": "**Tooling :** `runPdfExport` initialise correctement la carte des hachages PDF pour que **`npm run check`** (TypeScript) passe à nouveau ; pas de changement au comportement d’export PDF.\n**Docs :** Référence neutre **[`docs/iobroker-adapter-references.md`](docs/iobroker-adapter-references.md)** reliée depuis **`TODO.md`**, **`CONTRIBUTING.md`** et la règle de projet Cursor ; phase **5.x.1** de **`PLAN.md`** alignée avec **`TODO.md`** (MVP terminé).",
|
|
78
|
-
"it": "**
|
|
79
|
-
"es": "**
|
|
80
|
-
"pl": "**
|
|
81
|
-
"uk": "
|
|
82
|
-
"zh-cn": "
|
|
83
|
-
},
|
|
84
|
-
"0.9.36": {
|
|
85
|
-
"en": "**npm metadata:** tarball **0.9.36** matches **`main`** — `common.news` lists only npm-published versions (checker **E2004** alignment). No functional adapter changes.",
|
|
86
|
-
"de": "**npm-Metadaten:** Tarball **0.9.36** entspricht **`main`** — `common.news` nur mit auf npm veröffentlichten Versionen (Abgleich Adapter Checker **E2004**). Keine funktionalen Adapter-Änderungen.",
|
|
87
|
-
"ru": "**npm:** метаданные **0.9.36** = **`main`**, `common.news` только версии npm (E2004). Без изменений поведения.",
|
|
88
|
-
"pt": "**npm:** metadados **0.9.36** alinhados a **`main`**, `common.news` só versões npm (E2004). Sem mudanças funcionais.",
|
|
89
|
-
"nl": "**npm:** tarball **0.9.36** gelijk aan **`main`**, `common.news` alleen npm-versies (E2004). Geen gedragswijzigingen.",
|
|
90
|
-
"fr": "**npm :** métadonnées **0.9.36** alignées avec **`main`**, `common.news` seulement les versions npm (E2004). Pas de changement fonctionnel.",
|
|
91
|
-
"it": "**npm:** metadati **0.9.36** allineati a **`main`**, `common.news` solo versioni npm (E2004). Nessun cambio funzionale.",
|
|
92
|
-
"es": "**npm:** metadatos **0.9.36** alineados con **`main`**, `common.news` solo versiones npm (E2004). Sin cambios funcionales.",
|
|
93
|
-
"pl": "**npm:** metadane **0.9.36** jak **`main`**, `common.news` tylko wersje na npm (E2004). Bez zmian funkcjonalnych.",
|
|
94
|
-
"uk": "**npm:** метадані **0.9.36** synced з **`main`**, `common.news` лише npm-версії (E2004). Без змін поведінки.",
|
|
95
|
-
"zh-cn": "**npm:** **0.9.36** 与 **`main`** 元数据一致,`common.news` 仅列出 npm 上存在的版本(E2004)。无功能改动。"
|
|
91
|
+
"it": "**Strumenti:** `runPdfExport` inizializza la mappa digest PDF con una raccolta vuota tipizzata affinché **`npm run check`** (TypeScript) abbia successo; nessuna modifica al comportamento di esportazione PDF.\n**Docs:** Riferimento neutro all'adattatore **[`docs/iobroker-adapter-references.md`](docs/iobroker-adapter-references.md)** collegato da **`TODO.md`**, **`CONTRIBUTING.md`** e dalla regola del progetto Cursor; fase **5.x.1** di **`PLAN.md`** allineata con **`TODO.md`** (MVP completato).",
|
|
92
|
+
"es": "**Herramientas:** `runPdfExport` inicializa el mapa de resúmenes PDF con una colección vacía tipada para que **`npm run check`** (TypeScript) pase correctamente; sin cambios en el comportamiento de exportación PDF.\n**Docs:** Referencia neutra de adaptador **[`docs/iobroker-adapter-references.md`](docs/iobroker-adapter-references.md)** enlazada desde **`TODO.md`**, **`CONTRIBUTING.md`** y la regla del proyecto Cursor; fase **5.x.1** de **`PLAN.md`** alineada con **`TODO.md`** (MVP completo).",
|
|
93
|
+
"pl": "**Narzędzia:** `runPdfExport` inicjalizuje mapę skrótów PDF typowaną pustą kolekcją, aby **`npm run check`** (TypeScript) przebiegło pomyślnie; brak zmian w zachowaniu eksportu PDF.\n**Docs:** Neutralna dla adapterów referencja **[`docs/iobroker-adapter-references.md`](docs/iobroker-adapter-references.md)** podlinkowana z **`TODO.md`**, **`CONTRIBUTING.md`** i reguły projektu Cursor; faza **5.x.1** **`PLAN.md`** wyrównana z **`TODO.md`** (MVP ukończone).",
|
|
94
|
+
"uk": "**Інструменти:** `runPdfExport` ініціалізує карту дайджестів PDF типізованою порожньою колекцією, щоб **`npm run check`** (TypeScript) проходив успішно; поведінка експорту PDF не змінилась.\n**Docs:** Нейтральний для адаптерів довідник **[`docs/iobroker-adapter-references.md`](docs/iobroker-adapter-references.md)** додано у **`TODO.md`**, **`CONTRIBUTING.md`** і правило проекту Cursor; фаза **5.x.1** **`PLAN.md`** узгоджена з **`TODO.md`** (MVP завершено).",
|
|
95
|
+
"zh-cn": "**工具:** `runPdfExport` 使用类型化的空集合初始化 PDF 摘要映射,使 **`npm run check`**(TypeScript)通过;PDF 导出行为不变。\n**文档:** 适配器中立参考 **[`docs/iobroker-adapter-references.md`](docs/iobroker-adapter-references.md)** 已从 **`TODO.md`**、**`CONTRIBUTING.md`** 和 Cursor 项目规则链接;**`PLAN.md`** 阶段 **5.x.1** 与 **`TODO.md`** 对齐(MVP 完成)。"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
],
|
|
175
175
|
"globalDependencies": [
|
|
176
176
|
{
|
|
177
|
-
"admin": ">=7.
|
|
177
|
+
"admin": ">=7.8.23"
|
|
178
178
|
}
|
|
179
179
|
]
|
|
180
180
|
},
|
package/lib/aiEnhancer.js
CHANGED
|
@@ -876,7 +876,6 @@ function isTransientLlmFailure(err) {
|
|
|
876
876
|
* @returns {Promise<object>} Parsed JSON
|
|
877
877
|
*/
|
|
878
878
|
async function postJsonTransientRetries(opts, body, timeoutMs, delayFn, log) {
|
|
879
|
-
const sleep = delayFn;
|
|
880
879
|
const maxAttempts = 4;
|
|
881
880
|
const baseDelayMs = 8000;
|
|
882
881
|
let lastErr;
|
|
@@ -896,7 +895,7 @@ async function postJsonTransientRetries(opts, body, timeoutMs, delayFn, log) {
|
|
|
896
895
|
`LLM HTTP attempt ${attempt}/${maxAttempts} failed (${snippet}) — retrying in ${Math.round(delayMs / 1000)}s…`,
|
|
897
896
|
);
|
|
898
897
|
}
|
|
899
|
-
await
|
|
898
|
+
await delayFn(delayMs);
|
|
900
899
|
}
|
|
901
900
|
}
|
|
902
901
|
throw lastErr;
|
package/main.js
CHANGED
|
@@ -164,8 +164,16 @@ class Autodoc extends utils.Adapter {
|
|
|
164
164
|
);
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
// Setup periodic auto-generation if interval is configured
|
|
167
|
+
// Setup periodic auto-generation if interval is configured.
|
|
168
|
+
// Minimum 0.1 h (6 min) to avoid runaway AI cost from very short intervals.
|
|
168
169
|
if (this.config.autoGenerateInterval && this.config.autoGenerateInterval > 0) {
|
|
170
|
+
const MIN_INTERVAL_HOURS = 0.1;
|
|
171
|
+
if (this.config.autoGenerateInterval < MIN_INTERVAL_HOURS) {
|
|
172
|
+
this.log.warn(
|
|
173
|
+
`autoGenerateInterval ${this.config.autoGenerateInterval} h is below minimum ${MIN_INTERVAL_HOURS} h — using ${MIN_INTERVAL_HOURS} h`,
|
|
174
|
+
);
|
|
175
|
+
this.config.autoGenerateInterval = MIN_INTERVAL_HOURS;
|
|
176
|
+
}
|
|
169
177
|
const intervalMs = this.config.autoGenerateInterval * 60 * 60 * 1000;
|
|
170
178
|
this.log.info(
|
|
171
179
|
`Setting up automatic documentation generation every ${this.config.autoGenerateInterval} hours`,
|
|
@@ -175,7 +183,9 @@ class Autodoc extends utils.Adapter {
|
|
|
175
183
|
await this.setStateAsync('info.nextGeneration', { val: next.toISOString(), ack: true });
|
|
176
184
|
};
|
|
177
185
|
await updateNextGeneration();
|
|
178
|
-
|
|
186
|
+
// setTimeout-at-end pattern: the next run is only scheduled after the current one
|
|
187
|
+
// completes, preventing overlapping generation runs.
|
|
188
|
+
const scheduleNext = async () => {
|
|
179
189
|
this.log.debug('Auto-generating documentation on schedule');
|
|
180
190
|
try {
|
|
181
191
|
await this.generateDocumentation('scheduled');
|
|
@@ -183,7 +193,9 @@ class Autodoc extends utils.Adapter {
|
|
|
183
193
|
this.log.error(`Scheduled documentation generation failed: ${error.message}`);
|
|
184
194
|
}
|
|
185
195
|
await updateNextGeneration();
|
|
186
|
-
|
|
196
|
+
this.autoGenerateInterval = this.setTimeout(scheduleNext, intervalMs);
|
|
197
|
+
};
|
|
198
|
+
this.autoGenerateInterval = this.setTimeout(scheduleNext, intervalMs);
|
|
187
199
|
}
|
|
188
200
|
|
|
189
201
|
await this.setStateAsync('info.connection', { val: true, ack: true });
|
|
@@ -235,7 +247,7 @@ class Autodoc extends utils.Adapter {
|
|
|
235
247
|
onUnload(callback) {
|
|
236
248
|
// Clear periodic auto-generation timer
|
|
237
249
|
if (this.autoGenerateInterval) {
|
|
238
|
-
this.
|
|
250
|
+
this.clearTimeout(this.autoGenerateInterval);
|
|
239
251
|
this.autoGenerateInterval = null;
|
|
240
252
|
}
|
|
241
253
|
|
|
@@ -623,7 +635,7 @@ class Autodoc extends utils.Adapter {
|
|
|
623
635
|
buildSummary(docModel) {
|
|
624
636
|
const stateSummary = docModel.appendices.stateSummary;
|
|
625
637
|
|
|
626
|
-
return `
|
|
638
|
+
return `Documentation for "${docModel.system.projectName}" generated: ${docModel.system.statistics.instanceCount} instances (${docModel.system.statistics.enabledInstanceCount} enabled, ${docModel.system.statistics.disabledInstanceCount} disabled), ${stateSummary.total} state objects (${stateSummary.writable} writable, ${stateSummary.readonly} read-only).`;
|
|
627
639
|
}
|
|
628
640
|
|
|
629
641
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.autodoc",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.46",
|
|
4
4
|
"description": "On-demand documentation for ioBroker",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "crunchip77",
|
|
@@ -53,10 +53,10 @@
|
|
|
53
53
|
"@iobroker/testing": "^5.2.2",
|
|
54
54
|
"@tsconfig/node22": "^22.0.5",
|
|
55
55
|
"@types/iobroker": "npm:@iobroker/types@^7.1.2",
|
|
56
|
-
"@types/node": "^22.19.
|
|
56
|
+
"@types/node": "^22.19.21",
|
|
57
57
|
"cytoscape": "^3.34.0",
|
|
58
58
|
"d3-selection": "^3.0.0",
|
|
59
|
-
"devtools-protocol": "^0.0.
|
|
59
|
+
"devtools-protocol": "^0.0.1646372",
|
|
60
60
|
"typescript": "~6.0.3"
|
|
61
61
|
},
|
|
62
62
|
"main": "main.js",
|