From e6c2f279a9d99417d99a301ac4ee579bdcb1a758 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 25 Jun 2025 15:09:06 +0200
Subject: [PATCH 01/45] build(deps-dev): bump textlint-rule-terminology from
5.0.13 to 5.2.13 (#39685)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
Co-authored-by: Simon Lamon <32477463+silamon@users.noreply.github.com>
Co-authored-by: c0ffeeca7
---
.textlintrc.json | 16 +-
package-lock.json | 359 ++++++++++++++++++++++++----
package.json | 3 +-
source/_integrations/html5.markdown | 1 -
4 files changed, 335 insertions(+), 44 deletions(-)
diff --git a/.textlintrc.json b/.textlintrc.json
index 61ad2b3101c..6c19271a304 100644
--- a/.textlintrc.json
+++ b/.textlintrc.json
@@ -1,6 +1,20 @@
{
"filters": {
- "comments": true
+ "comments": true,
+ "allowlist": {
+ "allow": [
+ "2fa:",
+ "alexa:",
+ "homeassistant:",
+ "homekit:",
+ "led:",
+ "sms:",
+ "sql:",
+ "ssl:",
+ "twitter:",
+ "url:"
+ ]
+ }
},
"rules": {
"common-misspellings": {
diff --git a/package-lock.json b/package-lock.json
index afe61b34772..735bd9ea9b3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -21,9 +21,10 @@
"remark-lint-unordered-list-marker-style": "^4.0.1",
"remark-stringify": "^11.0.0",
"textlint": "^15.0.1",
+ "textlint-filter-rule-allowlist": "^4.0.0",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
- "textlint-rule-terminology": "^5.0.13"
+ "textlint-rule-terminology": "^5.2.13"
}
},
"node_modules/@azu/format-text": {
@@ -271,7 +272,8 @@
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-13.4.1.tgz",
"integrity": "sha512-qrZyhCh8Ekk6nwArx3BROybm9BnX6vF7VcZbijetV/OM3yfS4rTYhoMWISmhVEP2H2re0CtWEyMl/XF+WdvVLQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@textlint/ast-tester": {
"version": "15.0.1",
@@ -349,6 +351,12 @@
"text-table": "^0.2.0"
}
},
+ "node_modules/@textlint/get-config-base-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@textlint/get-config-base-dir/-/get-config-base-dir-2.0.0.tgz",
+ "integrity": "sha512-J3cG1pl2llYD4ZaZMe0qVgVaHT8RvT+/SW1FHQ8HRceNalMM9O0Y8iIgtl4GGOx4vMghoIPKFVLASw8P8bJ3ZA==",
+ "dev": true
+ },
"node_modules/@textlint/kernel": {
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-15.0.1.tgz",
@@ -673,6 +681,29 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@textlint/regexp-string-matcher": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@textlint/regexp-string-matcher/-/regexp-string-matcher-1.1.1.tgz",
+ "integrity": "sha512-rrNUCKGKYBrZALotSF8D5A8xD05VHX6kxv0BP805Ig2M73Ha6LK+de31+ZocGm4CO+sikVFYyMCPPJhp7bCXcw==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^2.0.0",
+ "execall": "^2.0.0",
+ "lodash.sortby": "^4.7.0",
+ "lodash.uniq": "^4.5.0",
+ "lodash.uniqwith": "^4.5.0",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "node_modules/@textlint/regexp-string-matcher/node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/@textlint/resolver": {
"version": "15.0.0",
"resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.0.0.tgz",
@@ -942,6 +973,15 @@
"sprintf-js": "~1.0.2"
}
},
+ "node_modules/assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
@@ -1241,6 +1281,18 @@
"node": ">=8"
}
},
+ "node_modules/clone-regexp": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
+ "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
+ "dev": true,
+ "dependencies": {
+ "is-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/collapse-white-space": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
@@ -1413,6 +1465,19 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -1608,6 +1673,18 @@
"node": ">=18.0.0"
}
},
+ "node_modules/execall": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
+ "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
+ "dev": true,
+ "dependencies": {
+ "clone-regexp": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/express": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz",
@@ -1673,6 +1750,19 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
},
+ "node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -2110,6 +2200,18 @@
"node": ">= 0.10"
}
},
+ "node_modules/is-accessor-descriptor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
+ "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/is-alphabetical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
@@ -2160,6 +2262,18 @@
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
},
+ "node_modules/is-data-descriptor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
+ "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/is-decimal": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
@@ -2171,12 +2285,37 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/is-descriptor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/is-empty": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz",
"integrity": "sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==",
"dev": true
},
+ "node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -2239,6 +2378,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-promise": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
@@ -2246,12 +2397,30 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/is-regexp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
+ "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true
},
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/jackspeak": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz",
@@ -2382,6 +2551,12 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
+ "node_modules/lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
+ "dev": true
+ },
"node_modules/lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
@@ -2389,6 +2564,18 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "dev": true
+ },
+ "node_modules/lodash.uniqwith": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz",
+ "integrity": "sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==",
+ "dev": true
+ },
"node_modules/longest-streak": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
@@ -4658,6 +4845,19 @@
"node": ">=8.10.0"
}
},
+ "node_modules/regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/remark": {
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz",
@@ -6197,6 +6397,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
"node_modules/router": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
@@ -6234,6 +6443,15 @@
}
]
},
+ "node_modules/safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
+ "dev": true,
+ "dependencies": {
+ "ret": "~0.1.10"
+ }
+ },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -6578,12 +6796,13 @@
}
},
"node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.2.tgz",
+ "integrity": "sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=14.16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -6699,6 +6918,45 @@
"node": ">=20.0.0"
}
},
+ "node_modules/textlint-filter-rule-allowlist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/textlint-filter-rule-allowlist/-/textlint-filter-rule-allowlist-4.0.0.tgz",
+ "integrity": "sha512-rOlWr12sff9ZS8mOtRACPB3l1yK0oW21Owz8XsTAgFWmRhOnBbCKw8tKMDm6EtQHO92SOfyJmT4nowxiJ85Qiw==",
+ "dev": true,
+ "dependencies": {
+ "@textlint/ast-node-types": "^12.0.0",
+ "@textlint/get-config-base-dir": "^2.0.0",
+ "@textlint/regexp-string-matcher": "^1.1.0",
+ "js-yaml": "^4.1.0"
+ },
+ "peerDependencies": {
+ "textlint": ">= 9.0.0"
+ }
+ },
+ "node_modules/textlint-filter-rule-allowlist/node_modules/@textlint/ast-node-types": {
+ "version": "12.6.1",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.6.1.tgz",
+ "integrity": "sha512-uzlJ+ZsCAyJm+lBi7j0UeBbj+Oy6w/VWoGJ3iHRHE5eZ8Z4iK66mq+PG/spupmbllLtz77OJbY89BYqgFyjXmA==",
+ "dev": true
+ },
+ "node_modules/textlint-filter-rule-allowlist/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/textlint-filter-rule-allowlist/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
"node_modules/textlint-filter-rule-comments": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/textlint-filter-rule-comments/-/textlint-filter-rule-comments-1.2.2.tgz",
@@ -6752,55 +7010,32 @@
}
},
"node_modules/textlint-rule-terminology": {
- "version": "5.0.13",
- "resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-5.0.13.tgz",
- "integrity": "sha512-1LONlbrn0fRhz/eCWPrnrxc5nz07NDjLLa4yiPm/hMtn/4Gi11R0lHbVgl+Ux6l8NC/a/NS5f6zQkJqqWy5bMw==",
+ "version": "5.2.13",
+ "resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-5.2.13.tgz",
+ "integrity": "sha512-NHCjVue34iP8P+zko39hut0iJ/sc8QfsSSqSOvWHuRZWIt6jUoQrpkfGdRNTkzN++l2uv9qBIhtRPkYv25LY8w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "lodash": "^4.17.15",
- "strip-json-comments": "^3.0.1",
- "textlint-rule-helper": "^2.1.1"
+ "lodash": "^4.17.21",
+ "strip-json-comments": "^5.0.1",
+ "textlint-rule-helper": "^2.3.1"
},
"engines": {
"node": ">=20"
}
},
"node_modules/textlint-rule-terminology/node_modules/textlint-rule-helper": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/textlint-rule-helper/-/textlint-rule-helper-2.3.0.tgz",
- "integrity": "sha512-Ug78Saahb/qVImttL0NSFyT5/JJ5wXvOPepR2pYAjNi54BsQAAz/hAyyEgKuYeR0+yjFb0KPhby4f880X5vqHA==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/textlint-rule-helper/-/textlint-rule-helper-2.3.1.tgz",
+ "integrity": "sha512-b1bijvyiUmKinfFE5hkQMSXs3Ky8jyZ3Y6SOoTRJKV9HLL2LWUVFAUezO7z4FpAkVvYruDYWCwA5qWV8GmvyUw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@textlint/ast-node-types": "^13.0.2",
+ "@textlint/ast-node-types": "^13.4.1",
"structured-source": "^4.0.0",
"unist-util-visit": "^2.0.3"
}
},
- "node_modules/textlint-rule-terminology/node_modules/unist-util-is": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
- "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/textlint-rule-terminology/node_modules/unist-util-visit": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
- "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^4.0.0",
- "unist-util-visit-parents": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/textlint/node_modules/@textlint/ast-node-types": {
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.0.1.tgz",
@@ -6867,6 +7102,21 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -7444,6 +7694,22 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/unist-util-visit": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
+ "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^4.0.0",
+ "unist-util-visit-parents": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/unist-util-visit-parents": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
@@ -7468,6 +7734,17 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/unist-util-visit/node_modules/unist-util-is": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
diff --git a/package.json b/package.json
index b98e68f8dcb..eb4a82c2728 100644
--- a/package.json
+++ b/package.json
@@ -16,9 +16,10 @@
"remark-lint-unordered-list-marker-style": "^4.0.1",
"remark-stringify": "^11.0.0",
"textlint": "^15.0.1",
+ "textlint-filter-rule-allowlist": "^4.0.0",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
- "textlint-rule-terminology": "^5.0.13"
+ "textlint-rule-terminology": "^5.2.13"
},
"resolutions": {
"minimist": ">=1.2.5"
diff --git a/source/_integrations/html5.markdown b/source/_integrations/html5.markdown
index c5317a29df3..1dd12fb130c 100644
--- a/source/_integrations/html5.markdown
+++ b/source/_integrations/html5.markdown
@@ -30,7 +30,6 @@ The `html5` platform can only function if all of the following requirements are
- You are using Chrome and/or Firefox on any desktop platform, ChromeOS or Android. Or you added your Home Assistant instance to your home screen on iOS 16.4 or higher.
- Your Home Assistant instance is accessible from outside your network over HTTPS or can perform an alternative [Domain Name Verification Method](https://support.google.com/webmasters/answer/9008080#domain_name_verification) on the domain used by Home Assistant.
- If using a proxy, HTTP basic authentication must be disabled to register or deregister push notifications. It can be re-enabled afterwards.
-- If you don't run Hass.io: `pywebpush` must be installed. `libffi-dev`, `libpython-dev` and `libssl-dev` must be installed prior to `pywebpush` (i.e., `pywebpush` probably won't automatically install).
- You have configured SSL/TLS for your Home Assistant. It doesn't need to be configured in Home Assistant though, e.g., you can be running NGINX in front of Home Assistant and this will still work. The certificate must be trustworthy (i.e., not self-signed).
- You are willing to accept the notification permission in your browser.
From 26e703a6ca336e23220e6328c5ef4b257bbe13e0 Mon Sep 17 00:00:00 2001
From: Retha Runolfsson <137745329+zerzhang@users.noreply.github.com>
Date: Wed, 25 Jun 2025 21:41:46 +0800
Subject: [PATCH 02/45] Improve docs readability and adjust incorrect
information for switchbot integration (#39701)
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
---
source/_integrations/switchbot.markdown | 45 +++++++++++++++++++++----
1 file changed, 39 insertions(+), 6 deletions(-)
diff --git a/source/_integrations/switchbot.markdown b/source/_integrations/switchbot.markdown
index 25ad07a6d2c..50f84f7fc1c 100644
--- a/source/_integrations/switchbot.markdown
+++ b/source/_integrations/switchbot.markdown
@@ -410,6 +410,12 @@ Features:
- calibration state
- get battery level
+Options:
+
+1. To enable nightlatch operation mode, go to {% my integrations title="**Settings** > **Devices & services**" %}.
+2. Under **Integration entries**, find the lock and select **Configure**.
+3. In the **Options** dialog, configure the nightlatch operation mode.
+
#### Lock Pro
This is an encrypted device.
@@ -422,6 +428,14 @@ Features:
- calibration state
- get battery level
+Options:
+
+1. To enable nightlatch operation mode, go to {% my integrations title="**Settings** > **Devices & services**" %}.
+2. Under **Integration entries**, find the lock and select **Configure**.
+3. In the **Options** dialog, configure the nightlatch operation mode.
+
+
+
#### Lock Ultra
This is an encrypted device.
@@ -434,6 +448,12 @@ Features:
- calibration state
- get battery level
+Options:
+
+1. To enable nightlatch operation mode, go to {% my integrations title="**Settings** > **Devices & services**" %}.
+2. Under **Integration entries**, find the lock and select **Configure**.
+3. In the **Options** dialog, configure the nightlatch operation mode.
+
#### Lock Lite
This is an encrypted device.
@@ -441,8 +461,6 @@ This is an encrypted device.
Features:
- Lock or unlock
-- open or closed state
-- auto-lock paused state
- calibration state
- get battery level
@@ -476,17 +494,17 @@ Features:
### Fans
-Fan entities are added for Circulator Fan, Air Purifier, and Air Purifier Table
+Fan entities are added for Battery Circulator Fan/Circulator Fan, Air Purifier, and Air Purifier Table
-#### Circulator Fan
+#### Battery Circulator Fan/Circulator Fan
Features:
-
- turn on
- turn off
- set speed
- set mode
- oscillate left and right
+- get battery level (Battery Circulator Fan only)
#### Air Purifier
@@ -513,7 +531,7 @@ Features:
Vacuum entities are added for K10+, K10+ Pro, K10+ Pro Combo, K20, S10.
Features:
-
+- get states, including `cleaning`, `docked`, `idle`, `paused`, `returning`, and `error`; refer to Known limitations for more details
- start
- return to base
- get battery
@@ -533,10 +551,25 @@ Move the device closer, or replace the Bluetooth adapter with a faster one. See
Device names configured in the SwitchBot app are not transferred into Home Assistant.
+### Battery level
+
+Due to firmware limitations, early models such as **Lock** and **Lock Lite** report the battery level in coarse ranges rather than an exact value:
+
+- < 10 % → 10
+- 10 % – 20 % → 20
+- 20 % – 60 % → 60
+- ≥ 60 % → 100
+
+Refer to the latest version of the [OpenAPI doc](https://github.com/OpenWonderLabs/SwitchBotAPI) for precise definitions.
+
### Lock state
The integration currently only uses the primary lock state; in dual lock mode, not all things might work properly.
+### Vacuum state
+
+For robot vacuum K10+ and K10+ Pro, due to firmware implementation, it only returns these states, `cleaning` and `docked`
+
## Troubleshooting
The SwitchBot integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional.
From db770db609e666c0af3492f63098b4728e0fd7ec Mon Sep 17 00:00:00 2001
From: DeerMaximum <43999966+DeerMaximum@users.noreply.github.com>
Date: Wed, 25 Jun 2025 18:53:32 +0200
Subject: [PATCH 03/45] Add removal instructions to NINA (#39712)
---
source/_integrations/nina.markdown | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/source/_integrations/nina.markdown b/source/_integrations/nina.markdown
index c16fca961d9..062a6095f1d 100644
--- a/source/_integrations/nina.markdown
+++ b/source/_integrations/nina.markdown
@@ -72,3 +72,9 @@ Areas: `gemeinde oberreichenbach, gemeinde neuweiler, stadt nagold`
| `sent` | *(time)* Transmission time and date (UTC) of the issued warning. |
| `start` | *(time)* Starting time and date (UTC) of the issued warning. Can be empty. |
| `expires` | *(time)* Expiration time and date (UTC) of the issued warning. Can be empty. |
+
+## Removing the integration
+
+This integration follows standard integration removal. No extra steps are required.
+
+{% include integrations/remove_device_service.md %}
From 13495c8c29e52a35cadd0d43f5d9cedf04983bfb Mon Sep 17 00:00:00 2001
From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
Date: Wed, 25 Jun 2025 19:01:53 +0200
Subject: [PATCH 04/45] Installation methods: fix order (#39714)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
---
source/installation/index.html | 172 +++++++++++++++++----------------
1 file changed, 88 insertions(+), 84 deletions(-)
diff --git a/source/installation/index.html b/source/installation/index.html
index f3aada16274..e57baa69b8e 100644
--- a/source/installation/index.html
+++ b/source/installation/index.html
@@ -13,7 +13,80 @@ toc: true
kinds of skill levels.
+ About installation methods
+
+ Home Assistant offers two different installation methods. Home Assistant Operating System is the recommended installation method.
+
+
+ - Home Assistant Operating System: An embedded,
+ minimalistic operating system designed to run the Home Assistant ecosystem
+ on single board computers (like the Home Assistant Green or a Raspberry Pi) or Virtual Machines. It
+ is the most convenient option in terms of installation and maintenance and it supports
+ {% term "add-ons" %}. Home Assistant Operating System is
+ the recommended installation method for most users.
+ -
+ Home Assistant Container: Container-based installation of Home Assistant. You need to bring your own system (such as Linux) with container orchestration (like Docker), and manually handle updates. Home Assistant Container installations don’t have access to {% term "add-ons" %}.
+
+
+
+
+
+
+
+ |
+ HA OS1 |
+ Container1 |
+
+
+
+
+ Automations |
+ {% icon "openmoji:check-mark" %} |
+ {% icon "openmoji:check-mark" %} |
+
+
+ Dashboards |
+ {% icon "openmoji:check-mark" %} |
+ {% icon "openmoji:check-mark" %} |
+
+
+ Integrations |
+ {% icon "openmoji:check-mark" %} |
+ {% icon "openmoji:check-mark" %} |
+
+
+ Add-ons |
+ {% icon "openmoji:check-mark" %} |
+ {% icon "openmoji:cross-mark" %} |
+
+
+ Blueprints |
+ {% icon "openmoji:check-mark" %} |
+ {% icon "openmoji:check-mark" %} |
+
+
+
+ One-click updates
+ |
+ {% icon "openmoji:check-mark" %} |
+ {% icon "openmoji:cross-mark" %} |
+
+
+ Backups |
+ {% icon "openmoji:check-mark" %} |
+ {% icon "openmoji:check-mark" %} |
+
+
+
+ 1: Names are abbreviated. The full names of the installation methods are:
+
+ - Home Assistant Operating System
+ - Home Assistant Container
+
+
Easiest
@@ -254,90 +327,6 @@ toc: true
Expert
-
About installation methods
-
- Home Assistant offers two different installation methods:
-
-
- - Home Assistant Operating System: An embedded,
- minimalistic operating system designed to run the Home Assistant ecosystem
- on single board computers (like the Home Assistant Green or a Raspberry Pi) or Virtual Machines. It
- is the most convenient option in terms of installation and maintenance and it supports
- {% term "add-ons" %}. Home Assistant Operating System is
- the recommended installation method for most users.
- -
- Home Assistant Container:Container-based installation of Home Assistant. You need to bring your own system (such as Linux) with container orchestration (like Docker), and manually handle updates. Home Assistant Container installations don’t have access to {% term "add-ons" %}.
-
-
-
-
-
- |
- HA OS1 |
- Container1 |
-
- Automations |
- {% icon "openmoji:check-mark" %} |
- {% icon "openmoji:check-mark" %} |
-
-
- Dashboards |
- {% icon "openmoji:check-mark" %} |
- {% icon "openmoji:check-mark" %} |
-
-
- Integrations |
- {% icon "openmoji:check-mark" %} |
- {% icon "openmoji:check-mark" %} |
-
-
- Add-ons |
- {% icon "openmoji:check-mark" %} |
- {% icon "openmoji:cross-mark" %} |
-
-
- Blueprints |
- {% icon "openmoji:check-mark" %} |
- {% icon "openmoji:check-mark" %} |
-
-
-
- One-click updates
- |
- {% icon "openmoji:check-mark" %} |
- {% icon "openmoji:cross-mark" %} |
-
-
- Backups |
- {% icon "openmoji:check-mark" %} |
- {% icon "openmoji:check-mark" %} |
-
-
-
-
-
1: Names are abbreviated. The full names of the installation methods are:
-
- - Home Assistant Operating System
- - Home Assistant Container
-
-
-
-
Deprecated installation methods
-
- Home Assistant used to offer two additional installation methods for advanced users: {% term "Home Assistant Core" %} and {% term "Home Assistant Supervised" %}. These two methods are now deprecated and no longer recommended for new users.
-
-
- -
- Home Assistant Supervised: Manual installation of the Supervisor.
-
- -
- Home Assistant Core: Manual installation using Python virtual
- environment.
-
-
-
@@ -521,3 +510,18 @@ toc: true
+
+
Deprecated installation methods
+
+ Home Assistant used to offer two additional installation methods for advanced users: {% term "Home Assistant Core" %} and {% term "Home Assistant Supervised" %}. These two methods are now deprecated and no longer recommended for new users.
+
+
+ -
+ Home Assistant Supervised: Manual installation of the Supervisor.
+
+ -
+ Home Assistant Core: Manual installation using Python virtual
+ environment.
+
+
+
\ No newline at end of file
From d04e24525d49bfa7e2199af8f73da4d7b913f529 Mon Sep 17 00:00:00 2001
From: Gord <31004434+googanhiem@users.noreply.github.com>
Date: Wed, 25 Jun 2025 20:54:41 +0100
Subject: [PATCH 05/45] Upload voice chapter 10 blog (#39711)
---
.../2025-06-25-voice-chapter-10.markdown | 167 ++++++++++++++++++
.../blog/2025-06-voice-chapter-10/art.png | Bin 0 -> 172195 bytes
.../2025-06-voice-chapter-10/circuits.png | Bin 0 -> 123744 bytes
.../blog/2025-06-voice-chapter-10/devices.jpg | Bin 0 -> 57070 bytes
.../blog/2025-06-voice-chapter-10/intents.png | Bin 0 -> 215218 bytes
5 files changed, 167 insertions(+)
create mode 100644 source/_posts/2025-06-25-voice-chapter-10.markdown
create mode 100644 source/images/blog/2025-06-voice-chapter-10/art.png
create mode 100644 source/images/blog/2025-06-voice-chapter-10/circuits.png
create mode 100644 source/images/blog/2025-06-voice-chapter-10/devices.jpg
create mode 100644 source/images/blog/2025-06-voice-chapter-10/intents.png
diff --git a/source/_posts/2025-06-25-voice-chapter-10.markdown b/source/_posts/2025-06-25-voice-chapter-10.markdown
new file mode 100644
index 00000000000..648675dd6d4
--- /dev/null
+++ b/source/_posts/2025-06-25-voice-chapter-10.markdown
@@ -0,0 +1,167 @@
+---
+layout: post
+title: "Next iteration of our Voice Assistant is here - Voice chapter 10"
+description: "This new tool brings fast, local speech processing to low-end hardware, along with some useful new voice and AI features"
+date: 2025-06-25 00:00:01
+date_formatted: "June 25, 2025"
+author: Mike Hansen
+comments: true
+categories: Assist
+og_image: /images/blog/2025-06-voice-chapter-10/art.png
+---
+
+

+
+Welcome to Voice chapter 10 🎉, [a series](/blog/categories/assist/) where we share all the key developments in Open Voice. This chapter includes improvements across every element of Open Voice. Improvements that allow it to support more languages, be used on more hardware, make it easier to contribute to, all while making it faster and more reliable.
+
+## Help steer Open Voice
+
+Before we get going, we just want to say that Voice Chapter 10 isn't just a broadcast; **it's an invitation** ✉️. Our **public Voice project board** lives on GitHub, and it shows what we're fixing, currently building, and what we'll work on next. Every card is open for comments, so please feel free to have a look and participate in the discussion.
+
+👉 **Project board**: [https://github.com/orgs/OHF-Voice/projects/2](https://github.com/orgs/OHF-Voice/projects/2)
+
+## ESPHome gains a voice
+
+When we began designing and building the firmware for our open voice assistant hardware, the [Home Assistant Voice Preview Edition](/voice-pe/), we had several specific features in mind:
+
+1. Run wake words on the device.
+2. Use a fully open-sourced media player platform that can decode music from high-quality sources.
+3. Wake words can be enabled and disabled on the fly; for example, "stop" is only activated when a long-running announcement is playing or when a timer is ringing.
+4. Mix voice assistant announcements on top of reduced volume (a.k.a. "ducked") music.
+
+These features needed to run within ESPHome, the software that powers the device. In the beginning, ESPHome could only do 1 and 2, but not even at the same time!
+
+To include all these features, we initially built them as external components, allowing us to iterate fast (and of course break many things along the way). We always intended to bring these components into ESPHome, and the process of bringing them in is called *upstreaming*. This would allow anyone to easily build a voice assistant that includes all the features of Voice Preview Edition, and that's what we've been working on since its launch last December.
+
+
No device left behind!
+
+ESPHome version 2025.5.0 has all these components included! We didn't just spend this time copying the code over, but we also worked hard to improve it by making it more generalizable, easier to configure, and much faster.
+
+As an example of these speed improvements, the highest CPU load on the Voice Preview Edition happens when music is being mixed with a long announcement. In this situation, it is decoding two different FLAC audio streams while also running three microWakeWord models (a Voice Activity Detector, "Okay Nabu", and "Stop"). With the original December firmware, this used 72% of the CPU 😅. With the new optimizations, which are all now available in ESPHome, the current Voice Preview Edition firmware only uses 35%❗ These improvements even allow the extremely resource-constrained ATOM Echo to support many of these features, including media playback and continuing conversations.
+
+## Make your own Voice Preview Edition
+
+
I'll just pretend I understand all this
+
+Speaking of voice hardware becoming more like Voice Preview Edition, why not use that class-leading hardware as the basis for your own creations? We've now got the KiCad project files, which include the electrical schematic and circuit board layout, along with other helpful documents [available for download on GitHub](https://github.com/NabuCasa/home-assistant-voice-pe). Combined with our open source firmware files, this will allow anyone to build on the work we've done and make the open voice assistant of their dreams. Bigger speaker, built-in presence sensor, a display featuring a smiling Nabu mascot --- the options are nearly endless. Building Voice Preview Edition was always meant to bootstrap an entire ecosystem of voice hardware, and we're already seeing some amazing creations with this open technology.
+
+## Now you're speaking my language
+
+### Speech-to-Phrase gets more fluent
+
+[In case you missed it](/blog/2025/02/13/voice-chapter-9-speech-to-phrase/#voice-for-the-masses), we built our own locally run speech-to-text (STT) tool that can run fast even on hardware-constrained devices. [Speech-to-Phrase](https://github.com/OHF-Voice/speech-to-phrase) works slightly differently from other STT tools, as it only accepts specific predetermined phrases, hence the name. We have been making large strides in making this the best option for local and private voice control in the home.
+
+The sentence format for Speech-to-Phrase is getting an upgrade! Besides making it simpler for community members to contribute, it now allows for more thorough testing to ensure compatibility with existing Home Assistant commands.
+
+We have also begun experimenting with more precise sentence generation, restricting sentences like "set the
to red" only to lights that support setting color. Another improvement is making Speech-to-Phrase more careful about combining names and articles in certain languages. For instance, in French, a device or entity that starts with a vowel or an "h" will have an "l" apostrophe at its beginning, such as l'humidificateur or l'entrée. Allowing Speech-to-Phrase to understand this avoids it guessing pronunciations for nonsensical combinations.
+
+Speech-to-Phrase currently supports **six languages**, namely English, French, German, Dutch, Spanish, and Italian. We are now engaging with language leaders to add support for Russian, Czech, Catalan, Greek, Romanian, Portuguese, Polish, Hindi, Basque, Finnish, Mongolian, Slovenian, Swahili, Thai, and Turkish --- this takes our language support to **21 languages** 🥳!
+
+These new models were originally trained by community members from the [Coqui STT](https://github.com/coqui-ai/STT-models) project (which is now defunct, but luckily their work was open source --- *another example of FOSS saving the day*), and we are very grateful for the chance to use them! Performance and accuracy vary heavily by language, and we may need to train our own models based on feedback from our community.
+
+### Piper is growing in volume
+
+[Piper](https://github.com/OHF-Voice/piper1-gpl) is another tool we built for local and private voice in the home, and it quickly turns text into natural-sounding speech. Piper is becoming one of the most comprehensive open source text-to-speech options available and has really been building momentum. Recently, we have added support for new languages and provided additional voices for existing ones, including,
+
+- **Dutch** - Pim and Ronnie - *new voices*
+- **Portuguese (Brazilian)** - Cadu and Jeff - *new voices*
+- **Persian/Farsi** - Reza_ibrahim and Ganji - *new language*
+- **Welsh** - Bu_tts - *new voices*
+- **Swedish** - Lisa - *new voices*
+- **Malayalam** - Arjun and Meera - *new language*
+- **Nepali** - Chitwan - *new voices*
+- **Latvian** - aivar- *new voices*
+- **Slovenian** - artur - *new voices*
+- **Slovak** - lili - *new voices*
+- **English** - Sam (non-binary) and Reza_ibrahim - *new voices*
+
+This brings Piper's supported languages and dialects from 34 to now 39 🙌! This allows a nice majority of the world's population (give or take 3 billion people) the ability to generate speech in their native tongue 😎!
+
+### Scoring language support
+
+
This is the score sheet for just intents... it can get complicated
+
+Home Assistant users, when starting their voice journey, typically ask one question first: "Is my language supported?" Due to how flexible voice assistants in Home Assistant are, this seemingly simple question is quite complicated to answer! At a high level, a voice assistant needs to convert your spoken audio into text (speech-to-text), figure out what you want it to do (intent recognition), and then respond back to you (text-to-speech). Each part of this pipeline can be mixed and matched, and intent recognition can even be augmented with a fallback to a large language model (LLM), which is great at untangling misunderstood words or complex queries.
+
+Considering the whole pipeline, the question "Is my language supported?" becomes "How well does each part support my language?" For Home Assistant Cloud, which uses Microsoft Azure for voice services, we can be confident that all supported languages work well.
+
+Local options like [Whisper](https://github.com/openai/whisper) (speech-to-text) and, to a lesser extent, Piper (text-to-speech), may technically support a language but perform poorly in practice or within the limits of a user's hardware. Whisper, for example, has models with different sizes that require more powerful hardware to run as they get larger. A language like French may work well enough with the largest Whisper model (which requires a GPU), but is unusable on a Raspberry Pi or even an N100-class PC.
+
+Our own Speech-to-Phrase system supports French well and runs well on a Raspberry Pi 4 or [Home Assistant Green](/green/). The trade-off is that only a limited set of pre-defined voice commands are supported, so you can't use an LLM as a fallback (because unexpected commands can't be converted into text for the LLM to process).
+
+Finally, of course, not everyone wants to (or can) be reliant on the cloud, and they need a fully local voice assistant. This means that language support depends as much on the user's preferences as their hardware and the available voice services. For these reasons, we have split out language support into three categories based on specific combinations of services:
+
+- ***Cloud*** - Home Assistant Cloud
+- ***Focused Local*** - Speech-to-Phrase and Piper
+- ***Fully Local*** - Whisper and Piper
+
+Each category is given a score from 0 to 3, with 0 meaning it is unsupported and 3 meaning it is fully supported. Users who choose Home Assistant Cloud can look at the Cloud score to determine the level of language support. For users wanting a local voice assistant, they will need to decide between Focused Local (limited commands for low-powered hardware) and Fully Local (open-ended commands for high-powered hardware). Importantly, these scores take into account the availability of voice commands translated by our language leaders. A language's score in every category will be lowered if it has minimal coverage of useful voice commands.
+
+With these language scores, we hope users will be able to make informed decisions when starting on their voice journeys in Home Assistant. They're currently featured in our voice setup wizard in Home Assistant, and on our [language support page](/voice_control/#supported-languages-and-sentences).
+
+## What's in a name
+
+Voice commands in Home Assistant trigger *intents*, which are flexible actions that use names instead of IDs. Intents handle things like turning devices on or off, or adjusting the color of lights. Until now, sentence translations focused on whether a language supported an intent (like turning devices on/off) but didn't clearly show whether the command supported device names, areas names, or both. This can change from language to language, which made gaps hard to spot. We're switching to a new format that highlights these combinations, making it easier for contributors to see what names are supported, which should make for simpler translations.
+
+## Continued conversation updates
+
+Since the last voice chapter, the voice team has worked on making Assist more conversational for LLM-based agents. We started with LLM-based agents because it was simpler to iterate on. If the LLM returns with a question, we will detect that and keep the conversation going, without the need for you to say "Ok Nabu" again.
+
+On top of that, you can now initiate a conversation with a new action called `start_conversation` directly from an automation, or a dashboard. This provides the full spectrum of conversation to LLM-based agents.
+
+Here is a quick demonstration of two features working hand-in-hand:
+
+
+
+## Media Search and Play intent
+
+What's great about Home Assistant and open source is that sometimes the best ideas come from other projects in the community. Early on, many people were interested in driving Music Assistant with voice, but central pieces were missing on Home Assistant, such as the ability to search a media library.
+
+We worked hard on bringing this functionality to the core experience of Home Assistant and created a new intent, the **Search and Play** intent. You can now speak to your voice assistant and ask it to play music in any room in your home.
+
+
+
+The intent can be used by an LLM-based conversation agent, but we also have sentences that work without any LLM magic. You can find the [English sentences here](https://github.com/OHF-Voice/intents/tree/main/sentences/en/HassMediaSearchAndPlay). As it's a new feature, support may vary based on your language, and please be patient while our amazing language leaders make these translations.
+
+## Future work - Assist will have something to say
+
+Talking to your home should feel as natural as chatting with a friend across the kitchen counter. Large-language models (LLMs) already prove how smooth that back-and-forth can be, now we want every Home Assistant installation to enjoy the same experience. We're therefore zeroing in on three key use-cases for the default conversation agent, which include critical confirmations, follow-ups, and custom conversations. Just note these are still at the early stages of development and it may be some time before you see some of these features.
+
+### Critical confirmations
+
+Some actions are too important to execute without a quick double-check. Unlocking the front door, closing shutters, or running a "leaving home" script. We want you to be able to mark those entities as **protected**. Whenever you speak a command that touches one of those entities, Assist will ask for verbal confirmation before acting:
+
+
+ Ok Nabu, unlock the front door
+ Are you sure?
+ Yes
+ Unlocked
+
+
+Because every household is different, we are thinking about managing these confirmations **per entity** and making them fully user-configurable.
+
+### Follow-up on missing parameters
+
+Sometimes Assist grasps what you want, but needs more detail to carry it out. Instead of failing, we want Assist to ask for the missing piece proactively. Here is an example to illustrate.
+
+
+ Ok Nabu, set a timer
+ For how long?
+ 15 minutes
+ Timer started
+
+
+For now, we are still assessing the relevant sentences for that use case. We're implementing follow-ups with timers, though finding more is not currently our top priority. We are, however, open to suggestions.
+
+### Custom conversations
+
+As with any other part of Home Assistant, we want the conversation aspect of Assist to be personalized. Simple voice transactions can already be created with our automation engine using the `conversation` trigger and the `set_conversation_response` action.
+
+We want to bring the same level of customization to conversations, allowing you to create fully local, predefined conversations to be triggered whenever you need them, such as when you enter a room, start your bedtime routine, etc.
+
+We are focusing first on making custom conversations possible, so that you can show us what you are building with this new powerful tool. We will then tackle the critical confirmations use case, and finally, the follow-ups when parameters are missing.
+
+## Let's keep moving Open Voice forward
+
+Only a couple of years ago, voice control was the domain of data-hungry corporations, and basically none of this open technology existed. Now, as a community, we've built all the parts needed to have a highly functional voice assistant, which is completely open and free for anyone to use (or even build on top of).\
+Every chapter, we make steady progress, which is only possible with your support. Whether from those who fund its development by supporting the Open Home Foundation (by subscribing to [Home Assistant Cloud](/cloud/), and buying [official Home Assistant hardware](/voice-pe/)) or those who contribute their time to improving it. As always, we want to support every language possible, and if you don't see your native tongue on our supported list, please consider [contributing to this project](/voice_control/contribute-voice).
diff --git a/source/images/blog/2025-06-voice-chapter-10/art.png b/source/images/blog/2025-06-voice-chapter-10/art.png
new file mode 100644
index 0000000000000000000000000000000000000000..468c14af0f1fe0b4a3c64cc11c7bc2d2b6749152
GIT binary patch
literal 172195
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 3d4RqsE1RgDSJC4J9f{bsd78TIOmzF*THoW6E2
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 |