Updated apps
This commit is contained in:
@@ -24,7 +24,7 @@ DOMAIN = "ha_mcp_tools"
|
||||
# manifest bump that forgets this constant (or vice-versa) fails in CI. The
|
||||
# capability negotiation — not this version — gates each WS command (see
|
||||
# ``websocket_api.CAPABILITIES``).
|
||||
COMPONENT_VERSION = "1.1.0"
|
||||
COMPONENT_VERSION = "1.2.2"
|
||||
|
||||
# Config-entry discriminator (``entry.data[CONF_ENTRY_TYPE]``). A missing value
|
||||
# means "tools" so the pre-existing services entry keeps working across the
|
||||
@@ -32,6 +32,12 @@ COMPONENT_VERSION = "1.1.0"
|
||||
CONF_ENTRY_TYPE = "entry_type"
|
||||
ENTRY_TYPE_TOOLS = "tools"
|
||||
ENTRY_TYPE_SERVER = "server"
|
||||
|
||||
# Titles shown for each entry in the integration tile's entry list. Public so
|
||||
# __init__'s setup migration can retitle pre-#1853 tools entries still
|
||||
# carrying the legacy default (a user-customized title is left alone).
|
||||
TOOLS_ENTRY_TITLE = "HA-MCP File & YAML Tools"
|
||||
TOOLS_ENTRY_LEGACY_TITLE = "HA MCP Tools"
|
||||
MIN_EMBEDDED_HOME_ASSISTANT_VERSION = "2026.6.0"
|
||||
|
||||
# Allowed directories for file operations (relative to config dir)
|
||||
@@ -290,6 +296,16 @@ DEFAULT_AUTO_UPDATE = True
|
||||
OPT_SERVER_PORT = "server_port"
|
||||
OPT_BIND_HOST = "bind_host"
|
||||
OPT_WEBHOOK_AUTH = "webhook_auth"
|
||||
# Legacy OAuth mode (self-hosted authorization server, static client_id/secret
|
||||
# for Google Gemini Spark) credential management — mirrors the
|
||||
# OPT_WEBHOOK_ID_OVERRIDE / OPT_REGENERATE_SECRETS shape below. Empty override
|
||||
# fields mean "keep the current value"; OPT_OAUTH_REGENERATE is one-shot.
|
||||
# _override suffix distinguishes these OPTIONS keys from the DATA_OAUTH_*
|
||||
# entry.data keys (which store the resolved values under the un-suffixed
|
||||
# names) — mirrors OPT_WEBHOOK_ID_OVERRIDE vs DATA_WEBHOOK_ID.
|
||||
OPT_OAUTH_CLIENT_ID = "oauth_client_id_override"
|
||||
OPT_OAUTH_CLIENT_SECRET = "oauth_client_secret_override"
|
||||
OPT_OAUTH_REGENERATE = "oauth_regenerate"
|
||||
OPT_PIP_SPEC = "pip_spec"
|
||||
OPT_SERVER_URL = "server_url"
|
||||
# Connect-URL surface + secret management (owner request, parity with the
|
||||
@@ -331,6 +347,22 @@ OPT_ENABLE_SIDEBAR_PANEL = "enable_sidebar_panel"
|
||||
# entry.data keys (persisted ids + secrets; entry.data is fine for secrets).
|
||||
DATA_WEBHOOK_ID = "webhook_id"
|
||||
DATA_SECRET_PATH = "secret_path"
|
||||
# Legacy OAuth mode credentials, minted by embedded_entry._ensure_secrets and
|
||||
# consumed by oauth_legacy.LegacyOAuthProvider. DATA_OAUTH_SIGNING_KEY is a hex
|
||||
# string (entry.data must be JSON-serializable, so raw bytes aren't stored
|
||||
# directly) — the provider converts it with bytes.fromhex(). The signed token
|
||||
# payload carries the client_id (not the secret), so rotating the client_id
|
||||
# revokes every outstanding token at the restart that rebinds the views (see
|
||||
# LegacyOAuthProvider._validate_token).
|
||||
# Because validation never involves the client_secret, a secret-only override
|
||||
# change instead rotates the signing key, evicting outstanding tokens at the
|
||||
# restart that activates the new credentials (see
|
||||
# embedded_entry._ensure_legacy_oauth_secrets). Until that restart the bound
|
||||
# views keep serving the OLD identity, so the startup log withholds rotated
|
||||
# credentials (embedded_setup._surface_connect_urls).
|
||||
DATA_OAUTH_CLIENT_ID = "oauth_client_id"
|
||||
DATA_OAUTH_CLIENT_SECRET = "oauth_client_secret"
|
||||
DATA_OAUTH_SIGNING_KEY = "oauth_signing_key"
|
||||
DATA_SERVER_USER_ID = "server_user_id"
|
||||
DATA_REFRESH_TOKEN_ID = "refresh_token_id"
|
||||
DATA_ACCESS_TOKEN = "access_token"
|
||||
@@ -375,6 +407,12 @@ DATA_LLM_API_UNSUB = "llm_api_unsub"
|
||||
# Webhook auth modes (mirrors the webhook-proxy add-on's default posture).
|
||||
WEBHOOK_AUTH_NONE = "none" # secret webhook URL is the shared secret (default)
|
||||
WEBHOOK_AUTH_HA = "ha_auth" # HA-native bearer (HA core is the OAuth AS)
|
||||
# Self-hosted OAuth 2.1 authorization server with a static client_id/secret,
|
||||
# ported from the webhook-proxy add-on's "legacy" mode. Needed because HA
|
||||
# core's /auth/authorize does not yet fetch Client ID Metadata Documents for
|
||||
# cross-origin redirect_uris (home-assistant/core#176282), which is what
|
||||
# Google Gemini Spark's custom connected apps require.
|
||||
WEBHOOK_AUTH_LEGACY = "legacy"
|
||||
|
||||
# Default bind host + port. 9584 (not the add-on's 9583) so this in-process
|
||||
# server and an add-on install can coexist on the same box.
|
||||
@@ -407,14 +445,34 @@ SERVER_USER_NAME = "HA-MCP Server"
|
||||
# namespace (mirrors the webhook-proxy add-on's /api/mcp_proxy/oauth base).
|
||||
OAUTH_BASE = "/api/ha_mcp_tools/oauth"
|
||||
|
||||
# HACS "add repository" deep link for the custom component. Shared learn_more_url
|
||||
# for every repair issue that ends with "install/reinstall the component via
|
||||
# HACS" (the component-outdated issue and the legacy-HACS-source issue below).
|
||||
# HACS repository full_names (``owner/repo``, the key HACS's repository registry
|
||||
# uses) this component may be tracked under: the dedicated integration mirror is
|
||||
# the current install path; the main ha-mcp server repo is the legacy pre-mirror
|
||||
# path (see install_source_check). Shared by the legacy-source check and the
|
||||
# HACS refresh nudge (hacs_nudge) so a repository rename lands in one place.
|
||||
HACS_MIRROR_REPO_FULL_NAME = "homeassistant-ai/ha-mcp-integration"
|
||||
HACS_LEGACY_REPO_FULL_NAME = "homeassistant-ai/ha-mcp"
|
||||
|
||||
# HACS "add repository" deep link for the custom component. learn_more_url for
|
||||
# the legacy-HACS-source repair (install_source_check) only, whose fix really is
|
||||
# re-adding the repository. The update-held and component-outdated issues point
|
||||
# at UPDATE_HOLD_DOCS_URL instead — for an already-installed component this deep
|
||||
# link just opens a blank "add repository" dialog.
|
||||
HACS_COMPONENT_URL = (
|
||||
"https://my.home-assistant.io/redirect/hacs_repository/"
|
||||
"?owner=homeassistant-ai&repository=ha-mcp-integration&category=integration"
|
||||
)
|
||||
|
||||
# Docs section explaining the automatic-update hold, linked as learn_more_url
|
||||
# from the update-held and component-outdated repair issues (both resolve by
|
||||
# updating an already-installed component, not by re-adding a repository). The
|
||||
# anchor is the GitHub slug of the "Held server updates" heading in
|
||||
# docs/in-process-server.md; hassfest forbids literal URLs inside strings.json.
|
||||
UPDATE_HOLD_DOCS_URL = (
|
||||
"https://github.com/homeassistant-ai/ha-mcp/blob/master/docs/"
|
||||
"in-process-server.md#held-server-updates"
|
||||
)
|
||||
|
||||
# Usage guide for the conversation-agent LLM API option (#1745). Injected into
|
||||
# the options form as a description placeholder — hassfest forbids literal
|
||||
# URLs inside strings.json.
|
||||
@@ -449,3 +507,10 @@ ISSUE_UPDATE_HELD = "server_update_held"
|
||||
# mechanism, so this only self-resolves if the user re-adds the dedicated
|
||||
# mirror (homeassistant-ai/ha-mcp-integration).
|
||||
ISSUE_LEGACY_HACS_SOURCE = "legacy_hacs_source"
|
||||
# Repair issue surfaced when the legacy OAuth mode's root /authorize + /token
|
||||
# views are out of sync with the CONFIGURED webhook_auth mode — either just
|
||||
# enabled (views not yet bound with the current credentials) or just disabled
|
||||
# (views still bound and serving the old identity). aiohttp can neither bind
|
||||
# nor unbind an HTTP view without a full Home Assistant restart, so both
|
||||
# transitions need one; see oauth_legacy.bind_legacy_views.
|
||||
ISSUE_LEGACY_OAUTH_RESTART = "legacy_oauth_restart"
|
||||
|
||||
Reference in New Issue
Block a user