Repository navigation
Releases
Release 2.8.1
Release 2.8.0
Release 2.7.0
Release 2.6.0
Release 2.5.0
Release 2.4.0
Release 2.3.0
Release 2.2.0
Release 2.1.1
Release 2.1.0
Let guests set the room's lights with allthings aux, through the aux hub's MCP endpoint and the code on their card, and release the CLI as 2.1.0 (#366)
- Let guests set the room's lights with allthings aux, through the aux hub's MCP endpoint and the code on their card, and release the CLI as 2.1.0
[Agent: Claude Code | Model: Opus 5.5 | Thinking: Extra High | Acting on behalf of: Erik | Skill: none]
allthings aux talks to the aux hub (https://aux.allthings.dev/mcp, or
ALLTHINGS_AUX_URL) over the same stateless MCP JSON-RPC the CLI already
speaks, with the guest's code as a bearer token: status, scenes, scene,
color [--zone], request, pass, and tracks, queue and skip once tools/list
shows music is on. login saves the code in ALLTHINGS_HOME (~/.allthings)
as aux-code, mode 0600; ALLTHINGS_AUX_CODE wins over it. The code is
masked in everything the CLI prints.
Each of the hub's error codes gets its own message, rate_limited and an
HTTP 429 with the seconds to wait. Unknown scenes and colors exit 2; other
refusals exit 1.
- Check the aux hub's address before sending a guest's code: https, or http only to a hub on this machine
[Agent: Claude Code | Model: Opus 5.5 | Thinking: Extra High | Acting on behalf of: Erik | Skill: none]
CodeRabbit asked that the bearer code never go to a plain-HTTP remote host. createAuxClient now checks the endpoint first and refuses anything but https or http to a loopback host with a usage error naming ALLTHINGS_AUX_URL, and a blank ALLTHINGS_AUX_URL falls back to the default. Tests cover refused endpoints making no request, accepted loopback and https endpoints, and the blank variable.
- Accept only real loopback hosts for a plain-http aux hub, so a name like 127.evil.com is refused
[Agent: Claude Code | Model: Opus 5.5 | Thinking: Extra High | Acting on behalf of: Erik | Skill: none]
CodeRabbit found that the loopback check accepted any hostname starting with "127.". isLoopbackHost now accepts localhost, ::1 and 127.0.0.0/8 dotted quads only, and the refused-endpoint test adds 127.evil.com and 127.0.0.1.evil.com.
- Mask a guest's code inside --json's values, so the output stays valid JSON whatever the code is
[Agent: Claude Code | Model: Opus 5.5 | Thinking: Extra High | Acting on behalf of: Erik | Skill: none]
Review 5822163750 (outside the diff): masking replaced the code in the serialized JSON, so a code such as "true" turned the saved flag into a string and broke the JSON. --json now masks the data's string values before serializing; text output is masked as before. A test logs in with codes that match a JSON word, a key and the file name, and parses the output.
- Save the aux code under ~/.allthings when ALLTHINGS_HOME is blank, not in the working directory
[Agent: Claude Code | Model: Opus 5.5 | Thinking: Extra High | Acting on behalf of: Erik | Skill: none]
Review 5822288101: a blank or whitespace-only ALLTHINGS_HOME made auxCodePath resolve aux-code relative to the current directory. It now counts as unset, like ALLTHINGS_AUX_URL, and falls back to ~/.allthings; a test covers unset, blank, whitespace and a set path.
- Refuse --zone on every command but aux color, instead of ignoring it
[Agent: Claude Code | Model: Opus 5.5 | Thinking: Extra High | Acting on behalf of: Erik | Skill: none]
Review 5822478429: --zone was silently ignored outside aux color. runAux now refuses it first, before login saves anything, and run refuses it for the non-aux commands, each with exit code 2 and the existing usage message. Tests cover aux status, scene and request, login (which saves nothing), events and about.