yeelight-home 0.1.6 → 0.1.7

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/CONFIG.md CHANGED
@@ -38,6 +38,8 @@ Supported region values:
38
38
  Examples:
39
39
 
40
40
  ```sh
41
+ yeelight-home version --json
42
+ yeelight-home doctor
41
43
  yeelight-home doctor --json
42
44
  yeelight-home doctor --json --region sg
43
45
  YEELIGHT_CLOUD_REGION=eu yeelight-home home list --json
@@ -50,6 +52,7 @@ Profiles let one machine keep separate local metadata for different accounts, ho
50
52
  ```sh
51
53
  yeelight-home profile list --json
52
54
  yeelight-home profile show --profile default --json
55
+ yeelight-home profile show --profile family --region sg --house-id <house-id> --json
53
56
  yeelight-home profile use --profile family --region cn
54
57
  yeelight-home profile use --profile family --region cn --house-id <house-id>
55
58
  yeelight-home profile delete --profile family
@@ -78,21 +81,23 @@ yeelight-home auth login --qr --profile default --qr-png /tmp/yeelight-login.png
78
81
 
79
82
  ```sh
80
83
  yeelight-home auth token set --profile default --token <access-token> --region cn
84
+ printf '%s' "$YEELIGHT_DEV_TOKEN" | yeelight-home auth token set --profile dev --region dev --stdin --json
81
85
  yeelight-home auth token set --profile default --token <access-token> --region cn --house-id <house-id>
82
86
  yeelight-home auth token delete --profile default
83
87
  ```
84
88
 
85
- Use token import only outside AI chat. Tokens are redacted from normal output and are not written to profile metadata.
89
+ Use token import only outside AI chat. Prefer `--stdin` for real terminals so the token does not appear in shell history.
90
+ Tokens are redacted from normal output and are not written to profile metadata.
86
91
  Token-only setup is valid. Omit `--house-id` when you only need account-level commands or will choose a default home later.
87
92
 
88
93
  ### Status
89
94
 
90
95
  ```sh
91
- yeelight-home auth status --json
96
+ yeelight-home auth status
92
97
  yeelight-home auth status --json --profile family
93
98
  ```
94
99
 
95
- The status output includes token presence and source, not token values.
100
+ The status output includes token presence and source, not token values. Use `--json` when an automation or support script needs structured output.
96
101
 
97
102
  ## Home Selection
98
103
 
@@ -110,6 +115,7 @@ The selected home is a default context, not an authentication requirement. Accou
110
115
 
111
116
  ```sh
112
117
  yeelight-home config get --json
118
+ yeelight-home config list --profile family --json
113
119
  yeelight-home config set --profile family --region cn --house-id <house-id> --json
114
120
  yeelight-home config unset --profile family --house-id --json
115
121
  ```
@@ -149,7 +155,7 @@ Default paths are platform-specific:
149
155
  | Linux | `~/.yeelight-home` or XDG-compatible directories depending on environment |
150
156
  | Windows | `%LOCALAPPDATA%\YeelightHome` |
151
157
 
152
- Run `yeelight-home doctor --json` to see the exact paths on the current machine.
158
+ Run `yeelight-home doctor` for a readable summary or `yeelight-home doctor --json` for the exact machine-readable paths on the current machine. Add `--online` only when you want to compare local install channels with public GitHub, npm, and Homebrew latest versions.
153
159
 
154
160
  ## Skill Integration
155
161
 
@@ -162,8 +168,11 @@ yeelight-home invoke --stdin
162
168
  Skill wrappers find the CLI in this order:
163
169
 
164
170
  1. `YEELIGHT_HOME_BIN`
165
- 2. Development-only source checkout binary
166
- 3. `yeelight-home` on `PATH`
171
+ 2. `yeelight-home` on `PATH`
172
+
173
+ Published Skill packages do not carry or auto-discover Runtime source-tree
174
+ binaries. Use `YEELIGHT_HOME_BIN` for a deliberate local override, or install
175
+ the public CLI so it is available on `PATH`.
167
176
 
168
177
  After installation:
169
178
 
@@ -190,6 +199,12 @@ yeelight-home auth status --json
190
199
  yeelight-home auth login --qr
191
200
  ```
192
201
 
202
+ If QR login is unavailable and you already have an approved token, import it locally outside chat:
203
+
204
+ ```sh
205
+ printf '%s' "$YEELIGHT_TOKEN" | yeelight-home auth token set --stdin --region cn
206
+ ```
207
+
193
208
  ### Wrong region
194
209
 
195
210
  Use a one-time override:
@@ -219,6 +234,7 @@ yeelight-home home select --house-id <house-id>
219
234
  Run:
220
235
 
221
236
  ```sh
237
+ yeelight-home doctor
222
238
  yeelight-home doctor --json
223
239
  ```
224
240
 
package/INSTALL.md CHANGED
@@ -6,18 +6,48 @@ This document is for users installing the standalone `yeelight-home` CLI.
6
6
 
7
7
  ```sh
8
8
  yeelight-home version
9
+ yeelight-home version --json
10
+ yeelight-home doctor
9
11
  yeelight-home doctor --json
12
+ yeelight-home doctor --json --online
10
13
  ```
11
14
 
15
+ `version --json` reports build metadata. `doctor` prints a human-readable diagnostic summary. `doctor --json` reports the same data as a machine-readable object: running CLI version, executable path, `PATH` lookup result, npm wrapper path when applicable, and local package-manager diagnostics. Homebrew diagnostics distinguish formula and cask installs.
16
+ `doctor --online` additionally checks public GitHub Release, npm registry, and Yeelight Homebrew tap latest versions. Use it when npm, Homebrew, Scoop, or a host application seems to be launching an older binary than the latest release. If one online channel reports `ok=false`, continue using the other channel results and the local warnings; public registries can rate-limit or temporarily fail independently.
17
+ Text output includes an `Install source summary` section that calls out whether `PATH` resolves an npm wrapper and which npm/Homebrew versions are installed.
18
+ If it includes `path_lookup_differs_from_running_executable`, the shell or host application is resolving a different `yeelight-home` binary than the one being inspected.
19
+ If it includes `npm_wrapper_differs_from_path_lookup`, the active npm wrapper is not the same wrapper that the current shell resolves from `PATH`; restart the host shell, check `command -v yeelight-home`, or remove the stale channel.
20
+ If it includes `npm_global_package_version_differs_from_runtime_version`, the globally installed npm wrapper version differs from the Runtime binary it launches or from the binary currently being inspected. Upgrade or reinstall through one channel and restart the host shell.
21
+ If it includes `npm_global_package_behind_latest`, the npm registry has a newer published package than the globally installed wrapper. Run `npm install -g yeelight-home@latest` and restart the shell or Skill host.
22
+ If it includes `homebrew_package_version_differs_from_runtime_version`, refresh Homebrew metadata and upgrade the formula or remove the older channel from `PATH`.
23
+ If it includes `homebrew_formula_version_differs_from_runtime_version`, refresh Homebrew metadata and upgrade the formula with `brew update && brew upgrade yeelight-home`.
24
+ If it includes `homebrew_cask_version_differs_from_runtime_version`, refresh Homebrew metadata and upgrade the cask with `brew update && brew upgrade --cask yeelight-home`.
25
+ If it includes `homebrew_formula_behind_latest`, refresh Homebrew metadata with `brew update`, then run `brew upgrade yeelight-home` or reinstall from `Yeelight/tap`.
26
+ If it includes `homebrew_cask_behind_latest`, refresh Homebrew metadata with `brew update`, then run `brew upgrade --cask yeelight-home` or reinstall from `Yeelight/tap`.
27
+ Use `install.remediations` in JSON output, or the `Suggested fixes` section in text output, for the safest next command for the current machine.
28
+
12
29
  After installing, authenticate locally:
13
30
 
14
31
  ```sh
15
- yeelight-home auth status --json
32
+ yeelight-home auth status
16
33
  yeelight-home auth login --qr
17
34
  ```
18
35
 
19
36
  The default region is `cn`. Use `--region sg`, `--region us`, or `--region eu` when needed.
20
37
 
38
+ If QR login is not possible but you have an approved token, import it locally without putting it in shell history:
39
+
40
+ ```sh
41
+ printf '%s' "$YEELIGHT_TOKEN" | yeelight-home auth token set --stdin --region cn
42
+ ```
43
+
44
+ For dev validation:
45
+
46
+ ```sh
47
+ printf '%s' "$YEELIGHT_DEV_TOKEN" | yeelight-home auth token set --stdin --profile dev --region dev --json
48
+ yeelight-home home list --profile dev --region dev --json
49
+ ```
50
+
21
51
  ## GitHub Releases
22
52
 
23
53
  GitHub Releases are the canonical fallback channel for all platforms.
@@ -109,6 +139,7 @@ If Winget cannot find the package yet, use GitHub Releases, Scoop, Homebrew on W
109
139
  ## npm Wrapper
110
140
 
111
141
  The npm package is a thin launcher. It downloads the matching GitHub Release binary on install or first run and verifies the checksum.
142
+ When it launches the downloaded binary, it sets `YEELIGHT_HOME_NPM_WRAPPER_PATH` so `yeelight-home doctor --json` can report `install.npmWrapper` and `install.npmWrapperResolved`. This helps diagnose stale npm wrappers, Homebrew shadows, and host applications using a different `PATH`.
112
143
 
113
144
  ```sh
114
145
  npm install -g yeelight-home
@@ -227,6 +258,34 @@ $env:YEELIGHT_HOME_BIN=(Get-Command yeelight-home).Source
227
258
 
228
259
  Restart the host application after changing user PATH.
229
260
 
261
+ ## Multiple Install Sources
262
+
263
+ Use one primary install channel per machine when possible. Multiple global installers can leave an older `yeelight-home` earlier on `PATH`.
264
+
265
+ Check the active binary:
266
+
267
+ ```sh
268
+ command -v yeelight-home
269
+ yeelight-home version
270
+ yeelight-home doctor --json
271
+ ```
272
+
273
+ Typical ownership:
274
+
275
+ - npm global installs create a launcher under the Node prefix, for example `/opt/homebrew/bin/yeelight-home`.
276
+ - Homebrew installs under the Homebrew prefix, but it may not be active if an npm launcher with the same name is earlier on `PATH`.
277
+ - GitHub install scripts copy the binary to `YEELIGHT_HOME_INSTALL_DIR`, `$HOME/.local/bin`, or another selected directory.
278
+
279
+ Upgrade the channel that owns the active binary:
280
+
281
+ ```sh
282
+ npm install -g yeelight-home@latest
283
+ brew update && brew upgrade yeelight-home
284
+ scoop update yeelight-home
285
+ ```
286
+
287
+ When switching channels, uninstall or unlink the old channel first so `PATH` resolves one expected binary.
288
+
230
289
  ## Uninstall
231
290
 
232
291
  Remove the binary through the same installer or package manager that installed it.
package/README.md CHANGED
@@ -54,6 +54,7 @@ Debian, Ubuntu, Fedora, Arch, AUR, Snap, Docker, GHCR, Docker Hub, and Winget ch
54
54
 
55
55
  ```sh
56
56
  yeelight-home version
57
+ yeelight-home doctor
57
58
  yeelight-home doctor --json
58
59
  yeelight-home auth status --json
59
60
  yeelight-home auth login --qr
@@ -64,13 +65,14 @@ yeelight-home home select --house-id <house-id>
64
65
 
65
66
  The default region is `cn`. Pass `--region sg`, `--region us`, or `--region eu` when your Yeelight account belongs to another cloud region.
66
67
 
67
- For non-interactive local setup, import a token outside chat:
68
+ For non-interactive local setup, import a token outside chat. Prefer `--stdin` in real shells so the token is not saved in shell history:
68
69
 
69
70
  ```sh
70
- yeelight-home auth token set --token <access-token> --region cn
71
+ printf '%s' "$YEELIGHT_TOKEN" | yeelight-home auth token set --stdin --region cn
72
+ printf '%s' "$YEELIGHT_DEV_TOKEN" | yeelight-home auth token set --stdin --profile dev --region dev --json
71
73
  ```
72
74
 
73
- Token-only setup is valid. `houseId` is optional profile metadata for the default home. Account-level commands such as `auth status`, `doctor`, `api smoke`, `home list`, `home.summary`, `home.search`, and `account.info` do not require it. House-scoped operations such as device, room, scene, group, gateway, favorite, and automation actions require a `houseId` from the request, `YEELIGHT_HOME_HOUSE_ID`, or the selected profile.
75
+ Token-only setup is valid. `houseId` is optional profile metadata for the default home. In other words, houseId is optional until you run a house-scoped command. Account-level commands such as `auth status`, `doctor`, `api smoke`, `home list`, `home.summary`, `home.search`, and `account.info` do not require it. House-scoped operations such as device, room, scene, group, gateway, favorite, and automation actions require a `houseId` from the request, `YEELIGHT_HOME_HOUSE_ID`, or the selected profile.
74
76
 
75
77
  Do not paste tokens into AI chat. The CLI stores tokens locally and never prints token values in normal status or doctor output.
76
78
 
@@ -108,19 +110,35 @@ See [CONFIG.md](CONFIG.md) for full command and precedence details.
108
110
  ### `doctor`
109
111
 
110
112
  ```sh
111
- yeelight-home doctor --json [--profile <name>] [--region <region>] [--house-id <id>]
113
+ yeelight-home doctor [--json] [--online] [--profile <name>] [--region <region>] [--house-id <id>]
112
114
  ```
113
115
 
114
- Reports installation, config directories, selected profile, selected region, selected home, token presence, and warnings. Token values are never printed.
116
+ Reports installation, config directories, selected profile, selected region, selected home, token presence, and warnings. Without `--json`, it prints a human-readable diagnostic summary. With `--json`, it prints the machine-readable diagnostic object. Token values are never printed.
115
117
  The selected home may be empty; that is healthy for token-only account-level use.
118
+ The `install` object includes the running CLI version, executable path, `PATH` lookup result, OS, architecture, and npm wrapper path when launched through the npm package. If `path_lookup_differs_from_running_executable` appears, a shell, package manager, or Skill host is resolving a different `yeelight-home` binary than the one currently being inspected.
119
+ It also includes `packageManagers.npm` and `packageManagers.homebrew` when those tools are available. Homebrew diagnostics include separate `formula` and `cask` entries so PATH drift can be traced to the exact channel. Use those fields to find stale npm wrappers, Homebrew formula installs, or Homebrew cask installs that differ from the Runtime binary on `PATH`.
120
+ When launched by the npm wrapper, `doctor --json` reports `install.npmWrapper` and `install.npmWrapperResolved`. `npm_wrapper_differs_from_path_lookup` means the running wrapper is not the same file that the current shell would resolve from `PATH`; restart the host shell or remove the stale channel.
121
+ Text output includes `Install source summary` to make the active PATH channel and installed npm/Homebrew versions visible without parsing JSON.
122
+ Pass `--online` when you want `doctor` to query the public GitHub Release, npm registry, and Yeelight Homebrew tap latest versions. This is intentionally opt-in so default diagnostics stay fast and offline-friendly. A single online channel with `ok=false` means that channel could not be checked; other successful channel results and local warnings remain useful.
123
+ The `install.remediations` array and the text-mode `Suggested fixes` section provide safe next commands for the detected local install shape.
124
+
125
+ ### `version`
126
+
127
+ ```sh
128
+ yeelight-home version
129
+ yeelight-home version --json
130
+ ```
131
+
132
+ `version --json` reports build metadata: version, commit, build date, OS, and architecture.
116
133
 
117
134
  ### `auth status`
118
135
 
119
136
  ```sh
120
- yeelight-home auth status --json [--profile <name>]
137
+ yeelight-home auth status [--json] [--profile <name>] [--region <region>] [--house-id <id>]
121
138
  ```
122
139
 
123
140
  Reports whether the selected profile has a usable local credential.
141
+ Without `--json`, it prints a human-readable summary. With `--json`, it prints the machine-readable status object.
124
142
 
125
143
  ### `auth login`
126
144
 
@@ -134,17 +152,18 @@ Starts the local QR login flow. If `--region` is omitted, `cn` is used.
134
152
  ### `auth token set`
135
153
 
136
154
  ```sh
137
- yeelight-home auth token set --token <access-token> [--profile <name>] [--region <region>] [--house-id <id>] [--json]
155
+ yeelight-home auth token set (--token <access-token>|--stdin) [--profile <name>] [--region <region>] [--house-id <id>] [--json]
138
156
  ```
139
157
 
140
158
  Imports a token into the local credential store. It never writes the token into the profile metadata file.
159
+ Prefer `--stdin` in real shells to avoid saving secrets in command history.
141
160
  `--house-id` is optional. Omit it when you only need account-level commands or plan to select a home later.
142
161
 
143
162
  ### `profile`
144
163
 
145
164
  ```sh
146
165
  yeelight-home profile list [--json]
147
- yeelight-home profile show [--profile <name>] [--json]
166
+ yeelight-home profile show [--json] [--profile <name>] [--region <region>] [--house-id <id>]
148
167
  yeelight-home profile use --profile <name> [--region <region>] [--house-id <id>] [--json]
149
168
  yeelight-home profile delete --profile <name> [--json]
150
169
  ```
@@ -156,12 +175,21 @@ The selected home can be empty in a profile.
156
175
 
157
176
  ```sh
158
177
  yeelight-home config get [--profile <name>] [--region <region>] [--house-id <id>] [--json]
178
+ yeelight-home config list [--profile <name>] [--json]
159
179
  yeelight-home config set [--profile <name>] [--region <region>] [--house-id <id>] [--qr-device <mac>] [--json]
160
180
  yeelight-home config unset [--profile <name>] [--region] [--house-id] [--qr-device] [--json]
161
181
  ```
162
182
 
163
183
  `config` changes non-secret profile metadata only.
164
184
 
185
+ ### `completion`
186
+
187
+ ```sh
188
+ yeelight-home completion <bash|zsh|fish|powershell>
189
+ ```
190
+
191
+ Prints a shell completion script to stdout. Install it using the standard mechanism for your shell.
192
+
165
193
  ### `home`
166
194
 
167
195
  ```sh
@@ -183,18 +211,22 @@ Reads a SkillRequest JSON object from stdin and writes a SkillResponse JSON obje
183
211
  ### `api smoke`
184
212
 
185
213
  ```sh
186
- yeelight-home api smoke --json [--profile <name>] [--region <region>] [--house-id <id>]
214
+ yeelight-home api smoke [--json] [--profile <name>] [--region <region>] [--house-id <id>]
187
215
  ```
188
216
 
189
217
  Runs a local cloud smoke check using the selected credential. This is intended for installation and support diagnostics.
218
+ Without `--json`, it prints a human-readable summary. With `--json`, it prints account and home-list check details for support automation.
190
219
 
191
220
  ## Skill Integration
192
221
 
193
222
  Skill wrapper lookup order:
194
223
 
195
224
  1. `YEELIGHT_HOME_BIN`
196
- 2. Development-only source checkout binary
197
- 3. `yeelight-home` on `PATH`
225
+ 2. `yeelight-home` on `PATH`
226
+
227
+ Published Skill packages do not carry or auto-discover Runtime source-tree
228
+ binaries. Use `YEELIGHT_HOME_BIN` for a deliberate local override, or install
229
+ the public CLI so it is available on `PATH`.
198
230
 
199
231
  When the Runtime is missing, install it from a published public channel, then run:
200
232
 
@@ -204,6 +236,12 @@ yeelight-home auth login --qr
204
236
  yeelight-home home list --json
205
237
  ```
206
238
 
239
+ If QR login is unavailable and the user already has an approved token, import it locally outside chat:
240
+
241
+ ```sh
242
+ printf '%s' "$YEELIGHT_TOKEN" | yeelight-home auth token set --stdin --region cn
243
+ ```
244
+
207
245
  Skills must not call raw URLs, raw headers, curl, compatibility services, or token-bearing commands.
208
246
 
209
247
  ## Release And Packaging
@@ -13,7 +13,11 @@ if (!result.ok) {
13
13
 
14
14
  const child = spawnSync(result.binaryPath, process.argv.slice(2), {
15
15
  stdio: "inherit",
16
- windowsHide: false
16
+ windowsHide: false,
17
+ env: {
18
+ ...process.env,
19
+ YEELIGHT_HOME_NPM_WRAPPER_PATH: __filename
20
+ }
17
21
  });
18
22
 
19
23
  if (child.error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yeelight-home",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "Local Yeelight Home Runtime CLI installer and launcher.",
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://github.com/Yeelight/yeelight-home#readme",
@@ -25,7 +25,7 @@
25
25
  ],
26
26
  "scripts": {
27
27
  "postinstall": "node npm/install.js",
28
- "smoke": "node bin/yeelight-home.js version"
28
+ "smoke": "node bin/yeelight-home.js version --json"
29
29
  },
30
30
  "engines": {
31
31
  "node": ">=18"