From aae1ce0a169b64f743c3552054124f7dcce60c66 Mon Sep 17 00:00:00 2001 From: Simon Clark Date: Sat, 13 Jun 2026 14:09:23 +0100 Subject: [PATCH] chore: rename bundle id to com.simons-plugins.indigo-matter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Align CFBundleIdentifier with the workspace convention (com.simons-plugins.*, as netro / indigo-shelly-trv / indigo-mcp-lite) — was the off-pattern com.simon.indigo-matter. Renamed across all references so the plugin stays internally coherent: Info.plist, Actions.xml + PluginConfig.xml callback ids, server_process.py LaunchAgent filename, tests, and docs. The bundle id IS the IWS API path Domio calls (…/message//{handler}); domio-code is updated in lockstep (separate PR) so the Matter API contract stays in sync. NOTE (deploy): a new bundle id is a new plugin to Indigo — jarvis needs a fresh double-click install (not a cp) and its commissioned Matter devices re-commissioning under the new id; the old com.simon.* LaunchAgent is orphaned. Version bump 2026.2.26 -> 2026.2.27. Co-Authored-By: Claude Opus 4.8 (1M context) --- CLAUDE.md | 4 +-- docs/API.md | 26 +++++++++---------- docs/HANDOVER.md | 14 +++++----- docs/IMPLEMENTATION.md | 2 +- docs/INSTALL.md | 18 ++++++------- docs/PRD-indigo-matter-plugin.md | 4 +-- docs/TESTING.md | 2 +- .../Contents/Info.plist | 4 +-- .../Contents/Server Plugin/Actions.xml | 2 +- .../Contents/Server Plugin/PluginConfig.xml | 2 +- .../Contents/Server Plugin/server_process.py | 2 +- tests/test_plugin_module.py | 2 +- tests/test_server_process.py | 2 +- 13 files changed, 42 insertions(+), 42 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 9e6523e..b923012 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,7 +8,7 @@ - **Type**: Indigo plugin - **Shortcut**: `matter` - **GitHub**: https://github.com/simons-plugins/indigo-matter -- **Language**: Python 3.11+ (`CFBundleIdentifier` `com.simon.indigo-matter`) +- **Language**: Python 3.11+ (`CFBundleIdentifier` `com.simons-plugins.indigo-matter`) ## Role in the workspace @@ -50,7 +50,7 @@ loop→Indigo writes go straight through `device_sync.apply_states` (thread-safe | `matter_handlers/` | One `ClusterHandler` per cluster + registry (OnOff in v1) | **HTTP transport:** the Domio API is served by the **Indigo Web Server** as -`` handlers at `…/message/com.simon.indigo-matter/{handler}`, +`` handlers at `…/message/com.simons-plugins.indigo-matter/{handler}`, reached over the Reflector with the same Bearer API key Domio already uses — **not** a standalone server (aiohttp is absent from Indigo's framework Python). See `docs/API.md` v1.1. diff --git a/docs/API.md b/docs/API.md index 898e22f..93e7075 100644 --- a/docs/API.md +++ b/docs/API.md @@ -10,7 +10,7 @@ This is not the matter-server protocol — that's a separate seam owned by the p > **Transport (v1.1, changed from v1.0):** the plugin does **not** run its own HTTP > server. It is served by the **Indigo Web Server (IWS)** as a set of hidden-action -> handlers, reached at `…/message/com.simon.indigo-matter/{handler}/…`. This is the +> handlers, reached at `…/message/com.simons-plugins.indigo-matter/{handler}/…`. This is the > idiomatic Indigo mechanism (the same one Domio already uses for the device-history and > HTML-pages APIs — see `domio-code` `DeviceHistoryService` / `HtmlPageService`), and it > rides the Reflector for remote access with the **same Bearer API key Domio already uses**. @@ -27,7 +27,7 @@ This is not the matter-server protocol — that's a separate seam owned by the p > > **Note for the Domio implementer:** build these calls exactly like the existing > `IndigoRESTService.pluginRequest()` / `DeviceHistoryService.performRequest()` — -> resolve the reflector, build `{base}/message/com.simon.indigo-matter/{handler}`, +> resolve the reflector, build `{base}/message/com.simons-plugins.indigo-matter/{handler}`, > add `Authorization: Bearer {credential}`. Pass **all parameters, including the nodeId for > POST handlers, as URL query items**; a trailing `/{pathArg}` works only for GET (e.g. > `GET …/commission/{jobId}`). @@ -41,9 +41,9 @@ This is not the matter-server protocol — that's a separate seam owned by the p - `nodeId` — string, the Matter node identifier as managed by the Indigo fabric. Stored as a string to avoid 64-bit JSON number issues. - `jobId` — string UUID v4, generated by the plugin. - `indigoDeviceId` — integer, the standard Indigo device ID. -- **Base path:** every endpoint is rooted at `…/message/com.simon.indigo-matter/{handler}`. - - Local: `https://{indigo-host}:8176/message/com.simon.indigo-matter/{handler}` — IWS serves **HTTPS** on 8176 (self-signed cert); local requests authenticate with Indigo's Digest auth. - - Remote (Reflector): `https://{reflector}.indigodomo.net/message/com.simon.indigo-matter/{handler}` — Bearer API key. **This is the path Domio uses.** +- **Base path:** every endpoint is rooted at `…/message/com.simons-plugins.indigo-matter/{handler}`. + - Local: `https://{indigo-host}:8176/message/com.simons-plugins.indigo-matter/{handler}` — IWS serves **HTTPS** on 8176 (self-signed cert); local requests authenticate with Indigo's Digest auth. + - Remote (Reflector): `https://{reflector}.indigodomo.net/message/com.simons-plugins.indigo-matter/{handler}` — Bearer API key. **This is the path Domio uses.** - Trailing path components after `{handler}` are positional arguments **on GET only** — the plugin reads them from `action.props["file_path"]`, which IWS populates for GET but **not POST**. E.g. `GET …/commission/{jobId}` puts `jobId` as the path arg. A POST endpoint must instead carry its id as a query item (see §3.4). ## 2. Authentication @@ -57,7 +57,7 @@ auth check. A missing/invalid credential is rejected by Indigo with its standard ## 3. Endpoints -### 3.1 `GET …/message/com.simon.indigo-matter/status` +### 3.1 `GET …/message/com.simons-plugins.indigo-matter/status` Health check. Domio calls this at the start of every commissioning flow as a precheck. @@ -100,7 +100,7 @@ Health check. Domio calls this at the start of every commissioning flow as a pre } ``` -### 3.2 `POST …/message/com.simon.indigo-matter/commission` +### 3.2 `POST …/message/com.simons-plugins.indigo-matter/commission` Submit a setup code for commissioning into the Indigo fabric. Called by Domio immediately after it has opened a commissioning window on the device from its own fabric (multi-admin handoff, see ADR §C3). @@ -152,7 +152,7 @@ Submit a setup code for commissioning into the Indigo fabric. Called by Domio im } ``` -### 3.3 `GET …/message/com.simon.indigo-matter/commission/{jobId}` +### 3.3 `GET …/message/com.simons-plugins.indigo-matter/commission/{jobId}` Poll commissioning job status. `jobId` is the trailing path component. Domio polls every 1s, with a 120s soft timeout. @@ -256,7 +256,7 @@ check Indigo", which matches Domio's existing 120s soft-timeout message. The plugin's job-level commission deadline is 300s and may legitimately outlive Domio's 120s poll window. -### 3.4 `POST …/message/com.simon.indigo-matter/decommission?nodeId={nodeId}` +### 3.4 `POST …/message/com.simons-plugins.indigo-matter/decommission?nodeId={nodeId}` Decommission a device. `nodeId` is a **query parameter**. Removes the plugin's fabric from the device (sends `RemoveFabric` via matter-server) and deletes the associated Indigo @@ -290,7 +290,7 @@ commissioned in any other fabric (e.g. Apple Home). **Response 404:** unknown nodeId. -### 3.5 `GET …/message/com.simon.indigo-matter/diagnostics/{nodeId}` +### 3.5 `GET …/message/com.simons-plugins.indigo-matter/diagnostics/{nodeId}` Diagnostic snapshot for a single device. `nodeId` is the trailing path component (a `?nodeId=…` query param is also accepted). Used by a future Domio device-detail view. @@ -373,7 +373,7 @@ For forward planning, these handlers are reserved: ``` Domio Plugin (via IWS / Reflector) -GET …/message/com.simon.indigo-matter/status +GET …/message/com.simons-plugins.indigo-matter/status 200 { ready: true, ... } [Domio invokes MatterAddDeviceRequest, iOS handles @@ -382,11 +382,11 @@ GET …/message/com.simon.indigo-matter/status [Domio sends OpenCommissioningWindow command to device. Setup code generated: "12345678901". Window valid 180s.] -POST …/message/com.simon.indigo-matter/commission +POST …/message/com.simons-plugins.indigo-matter/commission ?setupCode=12345678901&suggestedName=Office%20Fan&suggestedRoom=Office 202 { jobId: "8c9d..." } -GET …/message/com.simon.indigo-matter/commission/8c9d... +GET …/message/com.simons-plugins.indigo-matter/commission/8c9d... 200 { status: "commissioning", progress: 0.3 } GET …/commission/8c9d... (1s later) 200 { status: "reading_descriptors", progress: 0.6 } diff --git a/docs/HANDOVER.md b/docs/HANDOVER.md index 751fb2e..8d22dd0 100644 --- a/docs/HANDOVER.md +++ b/docs/HANDOVER.md @@ -118,7 +118,7 @@ devices ignore — needs hardware testing to find a working mechanism. - After firmware update + node rejoin, **the existing Indigo device gained `curEnergyLevel`/`accumEnergyTotal` automatically — no restart, no recreate**. That is PR #48 (capability-props re-assertion at reconcile) validated on real hardware, exactly its design scenario. - Fabric survived Wi-Fi reset + Tapo onboarding + firmware update; plug is now 4-admin (Apple Home, Indigo, Tapo cloud, Home Assistant) with no cross-interference. Apple Home took ~a minute to recover post-update — normal settling, not a fault. -**Diagnostics endpoint note:** `GET …/message/com.simon.indigo-matter/diagnostics?nodeId=0x22` (Bearer = reflector key) returns reachable/vendor/product/softwareVersion + per-endpoint numeric cluster ids — first line of investigation for "why didn't my device get state X". +**Diagnostics endpoint note:** `GET …/message/com.simons-plugins.indigo-matter/diagnostics?nodeId=0x22` (Bearer = reflector key) returns reachable/vendor/product/softwareVersion + per-endpoint numeric cluster ids — first line of investigation for "why didn't my device get state X". --- @@ -147,7 +147,7 @@ All merged to `main`, all deployed to jarvis. Plugin **2026.0.1 → 2026.1.1** o - **#25 nvm support:** `nodeBinDir` pref + auto-detect (nvm default alias / newest, then Homebrew). The old code only probed Homebrew npx. - **#27 loopback security:** `matterServerListenAddress` pref, default `127.0.0.1`. matter-server's WS control API is **unauthenticated** and binds **all interfaces** without `--listen-address` — the managed agent now restricts to loopback. - **#28 node-direct launch:** the `matter-server` npm package has **no bin** (`"bin": null`), so `npx matter-server` fails ("could not determine executable to run"). The managed agent now runs `node …/node_modules/matter-server/dist/esm/MatterServer.js` directly (reads `main` from the package). -- **jarvis cutover:** `manageLaunchAgent` ON, `nodeBinDir=/Users/simon/.nvm/versions/node/v22.22.3/bin`, listen `127.0.0.1`, port 5580. Plugin writes + bootstraps `~/Library/LaunchAgents/com.simon.indigo-matter.plist`; run.sh retired. Loopback bind confirmed in matter-server.log; 5 nodes intact; control + restart validated. +- **jarvis cutover:** `manageLaunchAgent` ON, `nodeBinDir=/Users/simon/.nvm/versions/node/v22.22.3/bin`, listen `127.0.0.1`, port 5580. Plugin writes + bootstraps `~/Library/LaunchAgents/com.simons-plugins.indigo-matter.plist`; run.sh retired. Loopback bind confirmed in matter-server.log; 5 nodes intact; control + restart validated. **Docs (PR #29 → 2026.0.7):** `docs/INSTALL.md` (full matter-server install/setup guide), tidied README (was v1.1/M0–M4), **MIT `LICENSE`** (© 2026 Simon Clark). @@ -212,9 +212,9 @@ Plus two improvements found by live testing: **state priming** (apply get_node s ## 3. Live environment (jarvis = 192.168.0.41, mounted at `/Volumes/Macintosh HD-1`) -- **matter-server**: npm pkg `matter-server@0.6.2` at `~/indigo-matter`. **Now launched by the plugin-managed LaunchAgent** (`~/Library/LaunchAgents/com.simon.indigo-matter.plist`, written by `ServerProcess` since 2026-06-10): `node ~/indigo-matter/node_modules/matter-server/dist/esm/MatterServer.js --port 5580 --listen-address 127.0.0.1 --storage-path ~/Library/Application Support/com.simon.indigo-matter/matter-server --primary-interface en0`, PATH=`~/.nvm/versions/node/v22.22.3/bin:…`. WS at `ws://127.0.0.1:5580/ws` (loopback-only; BLE off). The old `~/indigo-matter/run.sh` is retired (a backup of its plist is at `~/com.simon.indigo-matter.runsh.plist.bak-*` for rollback). Logs: `~/Library/Logs/indigo-matter/matter-server.{log,err.log}`. -- **Fabric** (sacred — single point of total loss): `~/Library/Application Support/com.simon.indigo-matter/matter-server/`. Plugin backups (zip) live in the sibling `…/backups/`. A static safety copy from the migration: `~/indigo-matter-fabric-backup-20260610-124145Z`. -- **Plugin**: installed + running in **Indigo 2025.2**, bundle id `com.simon.indigo-matter`, **version 2026.1.1**. **`manageLaunchAgent` pref is ON** (`nodeBinDir=~/.nvm/versions/node/v22.22.3/bin`, `matterServerListenAddress=127.0.0.1`, port 5580). Plugin restart regenerates the plist (bootstrap no-ops if matter-server already loaded; running server undisturbed). +- **matter-server**: npm pkg `matter-server@0.6.2` at `~/indigo-matter`. **Now launched by the plugin-managed LaunchAgent** (`~/Library/LaunchAgents/com.simons-plugins.indigo-matter.plist`, written by `ServerProcess` since 2026-06-10): `node ~/indigo-matter/node_modules/matter-server/dist/esm/MatterServer.js --port 5580 --listen-address 127.0.0.1 --storage-path ~/Library/Application Support/com.simons-plugins.indigo-matter/matter-server --primary-interface en0`, PATH=`~/.nvm/versions/node/v22.22.3/bin:…`. WS at `ws://127.0.0.1:5580/ws` (loopback-only; BLE off). The old `~/indigo-matter/run.sh` is retired (a backup of its plist is at `~/com.simons-plugins.indigo-matter.runsh.plist.bak-*` for rollback). Logs: `~/Library/Logs/indigo-matter/matter-server.{log,err.log}`. +- **Fabric** (sacred — single point of total loss): `~/Library/Application Support/com.simons-plugins.indigo-matter/matter-server/`. Plugin backups (zip) live in the sibling `…/backups/`. A static safety copy from the migration: `~/indigo-matter-fabric-backup-20260610-124145Z`. +- **Plugin**: installed + running in **Indigo 2025.2**, bundle id `com.simons-plugins.indigo-matter`, **version 2026.1.1**. **`manageLaunchAgent` pref is ON** (`nodeBinDir=~/.nvm/versions/node/v22.22.3/bin`, `matterServerListenAddress=127.0.0.1`, port 5580). Plugin restart regenerates the plist (bootstrap no-ops if matter-server already loaded; running server undisturbed). - **5 commissioned nodes** (Indigo device ids): - matterRelay `714038249` (OnOff Light) · matterDimmer `507300015` · matterColorDimmer `200619536` (node `0xF`; recreated 2026-06-09 with the colour-support-props fix, replaces old `747107241`) · matterTemperatureSensor `1824758566` · matterThermostat `1118330069` - **MCP control**: `mcp__indigo__*` (restart_plugin, query_event_log, get_devices_by_type, get_device_by_id, get_devices_by_state, device_turn_on/off, device_set_brightness, device_set_rgb_color, device_set_white_levels, thermostat_set_heat_setpoint, thermostat_set_hvac_mode). `get_device_by_id` only shows relay/dimmer fields — use `get_devices_by_state {"sensorValue": "<0"}` etc. to read custom states. @@ -227,7 +227,7 @@ DST="/Volumes/Macintosh HD-1/Library/Application Support/Perceptive Automation/I rsync -rc --exclude='__pycache__' --exclude='*.pyc' "$SRC/Server Plugin/" "$DST/Server Plugin/" rsync -c "$SRC/Info.plist" "$DST/Info.plist" # verify: md5 -q "$SRC/Server Plugin/plugin.py" vs "$DST/Server Plugin/plugin.py" -# then: mcp__indigo__restart_plugin(plugin_id="com.simon.indigo-matter") +# then: mcp__indigo__restart_plugin(plugin_id="com.simons-plugins.indigo-matter") ``` **First-time install only** is double-click; updates are rsync + restart. The plugin reconciles on every (re)start and via `node_added`. **Verify health** after restart via `mcp__indigo__query_event_log` → expect `connected to matter-server, listening` + `reconciled 5 Matter node(s)`. **Cannot exec on jarvis** (SSH to the prod host is blocked) — read/write its disk via the mount; trigger plugin **menu actions** (backup/restore) only via the Indigo UI (no MCP hook). @@ -259,7 +259,7 @@ Dumps `server_info` + `get_nodes`/`get_node` + toggles. Run: `source ~/.nvm/nvm. Domio no longer commissions; it relays a **share code** (Apple Home is admin 1; the plugin joins as admin 2 over IP). - **Plugin change made:** `matter_client.commission_with_code` now passes `network_only=true` → IP-only discovery + PASE/CASE, no BLE (verified vs source: `commissionNode` uses `ble: bleEnabled && !onNetworkOnly`). Matter commissioning *adds* a fabric → Apple Home untouched. -- **Contract v1.1 verified against live code:** bundle `com.simon.indigo-matter`; handlers `status` / `commission` (POST create + GET `commission/{jobId}` poll) / `decommission` / `diagnostics`; params `setupCode/suggestedName/suggestedRoom/discriminator/domioNodeId` (URL query); status enum `pending,commissioning,reading_descriptors,creating_devices,success,failed`; result `{nodeId(hex string),indigoDeviceIds,primaryDeviceId,vendorName,productName,…}`. Auth enforced by Indigo/Reflector before the handler. I do NOT currently read `X-Matter-API-Version` (harmless). +- **Contract v1.1 verified against live code:** bundle `com.simons-plugins.indigo-matter`; handlers `status` / `commission` (POST create + GET `commission/{jobId}` poll) / `decommission` / `diagnostics`; params `setupCode/suggestedName/suggestedRoom/discriminator/domioNodeId` (URL query); status enum `pending,commissioning,reading_descriptors,creating_devices,success,failed`; result `{nodeId(hex string),indigoDeviceIds,primaryDeviceId,vendorName,productName,…}`. Auth enforced by Indigo/Reflector before the handler. I do NOT currently read `X-Matter-API-Version` (harmless). - **Domio contract file:** `domio-code/docs/API.md` (mirror of `indigo-matter/docs/API.md`, v1.1). Their client: `domio-code/.../Services/MatterAPIClient.swift`. ## 6. Architecture quick map (`Contents/Server Plugin/`) diff --git a/docs/IMPLEMENTATION.md b/docs/IMPLEMENTATION.md index 273ec4f..bf99406 100644 --- a/docs/IMPLEMENTATION.md +++ b/docs/IMPLEMENTATION.md @@ -146,7 +146,7 @@ def http_commission(self, action, dev=None, caller_waiting_for_result=None): # ... bridge into the loop: self.runtime.submit(coro).result(timeout) ... ``` -**URL shape:** `…/message/com.simon.indigo-matter/{handler}[/{pathArg}]`, +**URL shape:** `…/message/com.simons-plugins.indigo-matter/{handler}[/{pathArg}]`, reachable locally on `:8176` and remotely via the Reflector (`https://{reflector}.indigodomo.net/message/…`) with the same `Authorization: Bearer {key}` Domio already uses. diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 51597e2..7faa3a3 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -122,13 +122,13 @@ Let the plugin install and supervise matter-server for you. `ifconfig | grep "status: active"`). 5. Save. -The plugin writes `~/Library/LaunchAgents/com.simon.indigo-matter.plist` +The plugin writes `~/Library/LaunchAgents/com.simons-plugins.indigo-matter.plist` (`RunAtLoad` + `KeepAlive`, running as the Indigo user) and bootstraps it via `launchctl`. > If a LaunchAgent with the same label is already loaded (e.g. from a previous run or a > hand-installed plist), the new one won't take over until you boot the old one out: > ```bash -> launchctl bootout gui/$(id -u)/com.simon.indigo-matter +> launchctl bootout gui/$(id -u)/com.simons-plugins.indigo-matter > ``` > then restart the Matter plugin (or re-save the config) to re-bootstrap. @@ -145,7 +145,7 @@ A minimal `run.sh`: ```bash #!/bin/sh node ~/indigo-matter/node_modules/matter-server/dist/esm/MatterServer.js \ - --storage-path "$HOME/Library/Application Support/com.simon.indigo-matter/matter-server" \ + --storage-path "$HOME/Library/Application Support/com.simons-plugins.indigo-matter/matter-server" \ --primary-interface en0 \ --listen-address 127.0.0.1 ``` @@ -160,7 +160,7 @@ node ~/indigo-matter/node_modules/matter-server/dist/esm/MatterServer.js \ | **matter-server port** | `5580` | WebSocket port. | | **matter-server WebSocket path** | `/ws` | WebSocket path. | | **Node bin directory (optional)** | *(blank)* | Directory containing `node`. Blank = auto-detect (Homebrew, then nvm, then PATH). nvm users may pin, e.g. `~/.nvm/versions/node/v22.22.3/bin`. Managed mode only. | -| **matter-server storage path** | `~/Library/Application Support/com.simon.indigo-matter/matter-server` | The fabric. See Backups. | +| **matter-server storage path** | `~/Library/Application Support/com.simons-plugins.indigo-matter/matter-server` | The fabric. See Backups. | | **Manage matter-server LaunchAgent automatically** | off | On = plugin supervises matter-server (Mode A); off = you run it (Mode B). | | **Primary network interface** | `en0` | macOS interface matter-server binds to. Managed mode only. | | **matter-server listen address** | `127.0.0.1` | IP the managed server binds its (unauthenticated) control API to. Keep loopback. Managed mode only. See Security. | @@ -204,7 +204,7 @@ as a native Indigo device. The Matter fabric lives at: ``` -~/Library/Application Support/com.simon.indigo-matter/matter-server/ +~/Library/Application Support/com.simons-plugins.indigo-matter/matter-server/ ``` This directory holds the fabric root CA private key and every device's operational data. @@ -217,7 +217,7 @@ yourself. With the plugin (or matter-server) stopped, copy the directory: ```bash cp -R \ - "$HOME/Library/Application Support/com.simon.indigo-matter/matter-server" \ + "$HOME/Library/Application Support/com.simons-plugins.indigo-matter/matter-server" \ "$HOME/Backups/indigo-matter-fabric-$(date -u +%Y%m%d)" ``` @@ -245,7 +245,7 @@ matter-server runs on a different host and you have a trusted firewall in front | `Connect call failed ('127.0.0.1', 5580)` | matter-server isn't running, crashed, or is on a different port. | Check `matter-server.err.log`; confirm the port matches the config; in managed mode re-save the config; in manual mode (re)start matter-server. | | nvm node not found by the managed agent | Auto-detect didn't find the nvm node. | Set **Node bin directory** explicitly, e.g. `~/.nvm/versions/node/v22.22.3/bin`. | | `BLE is not enabled on this platform` warning | Expected — BLE isn't used (Wi-Fi only). | Benign; ignore. | -| New managed LaunchAgent doesn't take effect | A prior agent with the same label is still loaded. | `launchctl bootout gui/$(id -u)/com.simon.indigo-matter`, then restart the plugin. | +| New managed LaunchAgent doesn't take effect | A prior agent with the same label is still loaded. | `launchctl bootout gui/$(id -u)/com.simons-plugins.indigo-matter`, then restart the plugin. | | Hand-edited plist keeps reverting | The plugin regenerates the plist from config on restart. | Change settings via **Configure…**, not the plist. | --- @@ -267,10 +267,10 @@ per Step 4. ## Uninstall Removing the plugin from Indigo also removes the managed LaunchAgent (it boots out and -deletes `~/Library/LaunchAgents/com.simon.indigo-matter.plist`). +deletes `~/Library/LaunchAgents/com.simons-plugins.indigo-matter.plist`). The plugin **never** deletes the storage directory. Your fabric at -`~/Library/Application Support/com.simon.indigo-matter/matter-server/` stays put — so a +`~/Library/Application Support/com.simons-plugins.indigo-matter/matter-server/` stays put — so a reinstall keeps all your devices. Delete it manually only if you intend a full factory reset (and re-commission everything). diff --git a/docs/PRD-indigo-matter-plugin.md b/docs/PRD-indigo-matter-plugin.md index e8519c0..5cbc30b 100644 --- a/docs/PRD-indigo-matter-plugin.md +++ b/docs/PRD-indigo-matter-plugin.md @@ -90,7 +90,7 @@ The plugin and `matterjs-server` are two processes that must stay in sync. Three ### 4.3 Storage -- **`matterjs-server`** owns its own storage directory (containing fabric private keys, certificates, node operational data). Path: `~/Library/Application Support/com.simon.indigo-matter/matter-server/`. +- **`matterjs-server`** owns its own storage directory (containing fabric private keys, certificates, node operational data). Path: `~/Library/Application Support/com.simons-plugins.indigo-matter/matter-server/`. - **Plugin** owns Indigo device pluginProps mapping `(nodeId, endpointId, clusterId) → indigoDeviceId`. Stored in Indigo's normal plugin storage; backed up with Indigo's database. - Storage must survive plugin upgrades. Treat the matter-server data dir as sacred — losing it loses the fabric and all device pairings. @@ -104,7 +104,7 @@ mechanism and rides the Reflector for remote access). Authentication is Indigo's Reflector/API-key auth, enforced before the handler runs. See `API.md` v1.1 (authoritative for the wire shape) and `IMPLEMENTATION.md` §4. -**Endpoints** (logical; actual paths are `…/message/com.simon.indigo-matter/{handler}` — see `API.md`): +**Endpoints** (logical; actual paths are `…/message/com.simons-plugins.indigo-matter/{handler}` — see `API.md`): ``` GET /matter/status diff --git a/docs/TESTING.md b/docs/TESTING.md index 2f3ac03..376ceb5 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -143,6 +143,6 @@ testers running real devices are part of the methodology, not an afterthought. If you test a new device, file what you find (good or bad) at [github.com/simons-plugins/indigo-matter/issues](https://github.com/simons-plugins/indigo-matter/issues), ideally with the endpoint's cluster list from -`GET …/message/com.simon.indigo-matter/diagnostics?nodeId=0x…` — unknown +`GET …/message/com.simons-plugins.indigo-matter/diagnostics?nodeId=0x…` — unknown devices also appear in Indigo as a *"Matter Device (unsupported clusters)"* placeholder whose settings list exactly the cluster ids to report. diff --git a/indigo-matter.indigoPlugin/Contents/Info.plist b/indigo-matter.indigoPlugin/Contents/Info.plist index e9f0504..f7822b3 100644 --- a/indigo-matter.indigoPlugin/Contents/Info.plist +++ b/indigo-matter.indigoPlugin/Contents/Info.plist @@ -5,7 +5,7 @@ CFBundleDisplayName Matter CFBundleIdentifier - com.simon.indigo-matter + com.simons-plugins.indigo-matter CFBundleShortVersionString 2026.2.12 CFBundleURLTypes @@ -20,7 +20,7 @@ IwsApiVersion 1.0.0 PluginVersion - 2026.2.26 + 2026.2.27 ServerApiVersion 3.6 diff --git a/indigo-matter.indigoPlugin/Contents/Server Plugin/Actions.xml b/indigo-matter.indigoPlugin/Contents/Server Plugin/Actions.xml index f8448d6..fd44883 100644 --- a/indigo-matter.indigoPlugin/Contents/Server Plugin/Actions.xml +++ b/indigo-matter.indigoPlugin/Contents/Server Plugin/Actions.xml @@ -7,7 +7,7 @@ The uiPath="hidden" actions below are the Domio HTTP API (API.md v1.1), served by the Indigo Web Server (IWS) at - …/message/com.simon.indigo-matter/{handler}[/{pathArg}] + …/message/com.simons-plugins.indigo-matter/{handler}[/{pathArg}] reachable locally on :8176 and remotely via the Reflector with the same Bearer API key Domio already uses. Auth is enforced by Indigo before the handler runs. --> diff --git a/indigo-matter.indigoPlugin/Contents/Server Plugin/PluginConfig.xml b/indigo-matter.indigoPlugin/Contents/Server Plugin/PluginConfig.xml index 546953b..2e24cb7 100644 --- a/indigo-matter.indigoPlugin/Contents/Server Plugin/PluginConfig.xml +++ b/indigo-matter.indigoPlugin/Contents/Server Plugin/PluginConfig.xml @@ -24,7 +24,7 @@ Only used when the LaunchAgent is managed automatically. + defaultValue="~/Library/Application Support/com.simons-plugins.indigo-matter/matter-server">