@switchbot/openapi-cli 3.2.1 → 3.2.2

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.
Files changed (332) hide show
  1. package/README.md +3 -1
  2. package/dist/index.js +57349 -170
  3. package/package.json +9 -5
  4. package/dist/api/client.d.ts +0 -31
  5. package/dist/api/client.js +0 -236
  6. package/dist/api/client.js.map +0 -1
  7. package/dist/auth.d.ts +0 -1
  8. package/dist/auth.js +0 -21
  9. package/dist/auth.js.map +0 -1
  10. package/dist/commands/agent-bootstrap.d.ts +0 -10
  11. package/dist/commands/agent-bootstrap.js +0 -200
  12. package/dist/commands/agent-bootstrap.js.map +0 -1
  13. package/dist/commands/auth.d.ts +0 -18
  14. package/dist/commands/auth.js +0 -355
  15. package/dist/commands/auth.js.map +0 -1
  16. package/dist/commands/batch.d.ts +0 -2
  17. package/dist/commands/batch.js +0 -414
  18. package/dist/commands/batch.js.map +0 -1
  19. package/dist/commands/cache.d.ts +0 -2
  20. package/dist/commands/cache.js +0 -127
  21. package/dist/commands/cache.js.map +0 -1
  22. package/dist/commands/capabilities.d.ts +0 -31
  23. package/dist/commands/capabilities.js +0 -383
  24. package/dist/commands/capabilities.js.map +0 -1
  25. package/dist/commands/catalog.d.ts +0 -2
  26. package/dist/commands/catalog.js +0 -360
  27. package/dist/commands/catalog.js.map +0 -1
  28. package/dist/commands/completion.d.ts +0 -2
  29. package/dist/commands/completion.js +0 -386
  30. package/dist/commands/completion.js.map +0 -1
  31. package/dist/commands/config.d.ts +0 -21
  32. package/dist/commands/config.js +0 -377
  33. package/dist/commands/config.js.map +0 -1
  34. package/dist/commands/daemon.d.ts +0 -2
  35. package/dist/commands/daemon.js +0 -411
  36. package/dist/commands/daemon.js.map +0 -1
  37. package/dist/commands/device-meta.d.ts +0 -2
  38. package/dist/commands/device-meta.js +0 -160
  39. package/dist/commands/device-meta.js.map +0 -1
  40. package/dist/commands/devices.d.ts +0 -2
  41. package/dist/commands/devices.js +0 -949
  42. package/dist/commands/devices.js.map +0 -1
  43. package/dist/commands/doctor.d.ts +0 -3
  44. package/dist/commands/doctor.js +0 -1016
  45. package/dist/commands/doctor.js.map +0 -1
  46. package/dist/commands/events.d.ts +0 -31
  47. package/dist/commands/events.js +0 -564
  48. package/dist/commands/events.js.map +0 -1
  49. package/dist/commands/expand.d.ts +0 -2
  50. package/dist/commands/expand.js +0 -131
  51. package/dist/commands/expand.js.map +0 -1
  52. package/dist/commands/explain.d.ts +0 -2
  53. package/dist/commands/explain.js +0 -140
  54. package/dist/commands/explain.js.map +0 -1
  55. package/dist/commands/health.d.ts +0 -8
  56. package/dist/commands/health.js +0 -114
  57. package/dist/commands/health.js.map +0 -1
  58. package/dist/commands/history.d.ts +0 -2
  59. package/dist/commands/history.js +0 -321
  60. package/dist/commands/history.js.map +0 -1
  61. package/dist/commands/identity.d.ts +0 -45
  62. package/dist/commands/identity.js +0 -60
  63. package/dist/commands/identity.js.map +0 -1
  64. package/dist/commands/install.d.ts +0 -20
  65. package/dist/commands/install.js +0 -247
  66. package/dist/commands/install.js.map +0 -1
  67. package/dist/commands/mcp.d.ts +0 -14
  68. package/dist/commands/mcp.js +0 -2018
  69. package/dist/commands/mcp.js.map +0 -1
  70. package/dist/commands/plan.d.ts +0 -51
  71. package/dist/commands/plan.js +0 -654
  72. package/dist/commands/plan.js.map +0 -1
  73. package/dist/commands/policy.d.ts +0 -24
  74. package/dist/commands/policy.js +0 -587
  75. package/dist/commands/policy.js.map +0 -1
  76. package/dist/commands/quota.d.ts +0 -2
  77. package/dist/commands/quota.js +0 -79
  78. package/dist/commands/quota.js.map +0 -1
  79. package/dist/commands/rules.d.ts +0 -2
  80. package/dist/commands/rules.js +0 -876
  81. package/dist/commands/rules.js.map +0 -1
  82. package/dist/commands/scenes.d.ts +0 -2
  83. package/dist/commands/scenes.js +0 -265
  84. package/dist/commands/scenes.js.map +0 -1
  85. package/dist/commands/schema.d.ts +0 -2
  86. package/dist/commands/schema.js +0 -185
  87. package/dist/commands/schema.js.map +0 -1
  88. package/dist/commands/status-sync.d.ts +0 -2
  89. package/dist/commands/status-sync.js +0 -132
  90. package/dist/commands/status-sync.js.map +0 -1
  91. package/dist/commands/uninstall.d.ts +0 -20
  92. package/dist/commands/uninstall.js +0 -238
  93. package/dist/commands/uninstall.js.map +0 -1
  94. package/dist/commands/upgrade-check.d.ts +0 -2
  95. package/dist/commands/upgrade-check.js +0 -107
  96. package/dist/commands/upgrade-check.js.map +0 -1
  97. package/dist/commands/watch.d.ts +0 -2
  98. package/dist/commands/watch.js +0 -195
  99. package/dist/commands/watch.js.map +0 -1
  100. package/dist/commands/webhook.d.ts +0 -2
  101. package/dist/commands/webhook.js +0 -183
  102. package/dist/commands/webhook.js.map +0 -1
  103. package/dist/config.d.ts +0 -57
  104. package/dist/config.js +0 -259
  105. package/dist/config.js.map +0 -1
  106. package/dist/credentials/backends/file.d.ts +0 -18
  107. package/dist/credentials/backends/file.js +0 -102
  108. package/dist/credentials/backends/file.js.map +0 -1
  109. package/dist/credentials/backends/linux.d.ts +0 -16
  110. package/dist/credentials/backends/linux.js +0 -130
  111. package/dist/credentials/backends/linux.js.map +0 -1
  112. package/dist/credentials/backends/macos.d.ts +0 -18
  113. package/dist/credentials/backends/macos.js +0 -130
  114. package/dist/credentials/backends/macos.js.map +0 -1
  115. package/dist/credentials/backends/windows.d.ts +0 -23
  116. package/dist/credentials/backends/windows.js +0 -216
  117. package/dist/credentials/backends/windows.js.map +0 -1
  118. package/dist/credentials/keychain.d.ts +0 -83
  119. package/dist/credentials/keychain.js +0 -89
  120. package/dist/credentials/keychain.js.map +0 -1
  121. package/dist/credentials/prime.d.ts +0 -32
  122. package/dist/credentials/prime.js +0 -53
  123. package/dist/credentials/prime.js.map +0 -1
  124. package/dist/devices/cache.d.ts +0 -79
  125. package/dist/devices/cache.js +0 -294
  126. package/dist/devices/cache.js.map +0 -1
  127. package/dist/devices/catalog.d.ts +0 -138
  128. package/dist/devices/catalog.js +0 -768
  129. package/dist/devices/catalog.js.map +0 -1
  130. package/dist/devices/device-meta.d.ts +0 -15
  131. package/dist/devices/device-meta.js +0 -57
  132. package/dist/devices/device-meta.js.map +0 -1
  133. package/dist/devices/history-agg.d.ts +0 -37
  134. package/dist/devices/history-agg.js +0 -139
  135. package/dist/devices/history-agg.js.map +0 -1
  136. package/dist/devices/history-query.d.ts +0 -45
  137. package/dist/devices/history-query.js +0 -182
  138. package/dist/devices/history-query.js.map +0 -1
  139. package/dist/devices/param-validator.d.ts +0 -40
  140. package/dist/devices/param-validator.js +0 -434
  141. package/dist/devices/param-validator.js.map +0 -1
  142. package/dist/devices/resources.d.ts +0 -74
  143. package/dist/devices/resources.js +0 -271
  144. package/dist/devices/resources.js.map +0 -1
  145. package/dist/index.d.ts +0 -1
  146. package/dist/index.js.map +0 -1
  147. package/dist/install/default-steps.d.ts +0 -66
  148. package/dist/install/default-steps.js +0 -258
  149. package/dist/install/default-steps.js.map +0 -1
  150. package/dist/install/preflight.d.ts +0 -60
  151. package/dist/install/preflight.js +0 -213
  152. package/dist/install/preflight.js.map +0 -1
  153. package/dist/install/steps.d.ts +0 -61
  154. package/dist/install/steps.js +0 -68
  155. package/dist/install/steps.js.map +0 -1
  156. package/dist/lib/command-keywords.d.ts +0 -5
  157. package/dist/lib/command-keywords.js +0 -18
  158. package/dist/lib/command-keywords.js.map +0 -1
  159. package/dist/lib/daemon-state.d.ts +0 -24
  160. package/dist/lib/daemon-state.js +0 -47
  161. package/dist/lib/daemon-state.js.map +0 -1
  162. package/dist/lib/destructive-mode.d.ts +0 -2
  163. package/dist/lib/destructive-mode.js +0 -13
  164. package/dist/lib/destructive-mode.js.map +0 -1
  165. package/dist/lib/devices.d.ts +0 -151
  166. package/dist/lib/devices.js +0 -383
  167. package/dist/lib/devices.js.map +0 -1
  168. package/dist/lib/idempotency.d.ts +0 -46
  169. package/dist/lib/idempotency.js +0 -107
  170. package/dist/lib/idempotency.js.map +0 -1
  171. package/dist/lib/plan-store.d.ts +0 -19
  172. package/dist/lib/plan-store.js +0 -69
  173. package/dist/lib/plan-store.js.map +0 -1
  174. package/dist/lib/request-context.d.ts +0 -7
  175. package/dist/lib/request-context.js +0 -13
  176. package/dist/lib/request-context.js.map +0 -1
  177. package/dist/lib/scenes.d.ts +0 -7
  178. package/dist/lib/scenes.js +0 -11
  179. package/dist/lib/scenes.js.map +0 -1
  180. package/dist/logger.d.ts +0 -4
  181. package/dist/logger.js +0 -17
  182. package/dist/logger.js.map +0 -1
  183. package/dist/mcp/device-history.d.ts +0 -36
  184. package/dist/mcp/device-history.js +0 -146
  185. package/dist/mcp/device-history.js.map +0 -1
  186. package/dist/mcp/events-subscription.d.ts +0 -45
  187. package/dist/mcp/events-subscription.js +0 -214
  188. package/dist/mcp/events-subscription.js.map +0 -1
  189. package/dist/mqtt/client.d.ts +0 -25
  190. package/dist/mqtt/client.js +0 -181
  191. package/dist/mqtt/client.js.map +0 -1
  192. package/dist/mqtt/credential.d.ts +0 -16
  193. package/dist/mqtt/credential.js +0 -31
  194. package/dist/mqtt/credential.js.map +0 -1
  195. package/dist/policy/add-rule.d.ts +0 -21
  196. package/dist/policy/add-rule.js +0 -125
  197. package/dist/policy/add-rule.js.map +0 -1
  198. package/dist/policy/diff.d.ts +0 -21
  199. package/dist/policy/diff.js +0 -92
  200. package/dist/policy/diff.js.map +0 -1
  201. package/dist/policy/format.d.ts +0 -6
  202. package/dist/policy/format.js +0 -58
  203. package/dist/policy/format.js.map +0 -1
  204. package/dist/policy/load.d.ts +0 -32
  205. package/dist/policy/load.js +0 -62
  206. package/dist/policy/load.js.map +0 -1
  207. package/dist/policy/migrate.d.ts +0 -21
  208. package/dist/policy/migrate.js +0 -68
  209. package/dist/policy/migrate.js.map +0 -1
  210. package/dist/policy/schema.d.ts +0 -5
  211. package/dist/policy/schema.js +0 -19
  212. package/dist/policy/schema.js.map +0 -1
  213. package/dist/policy/validate.d.ts +0 -19
  214. package/dist/policy/validate.js +0 -263
  215. package/dist/policy/validate.js.map +0 -1
  216. package/dist/rules/action.d.ts +0 -65
  217. package/dist/rules/action.js +0 -217
  218. package/dist/rules/action.js.map +0 -1
  219. package/dist/rules/audit-query.d.ts +0 -51
  220. package/dist/rules/audit-query.js +0 -90
  221. package/dist/rules/audit-query.js.map +0 -1
  222. package/dist/rules/conflict-analyzer.d.ts +0 -57
  223. package/dist/rules/conflict-analyzer.js +0 -215
  224. package/dist/rules/conflict-analyzer.js.map +0 -1
  225. package/dist/rules/cron-scheduler.d.ts +0 -62
  226. package/dist/rules/cron-scheduler.js +0 -187
  227. package/dist/rules/cron-scheduler.js.map +0 -1
  228. package/dist/rules/destructive.d.ts +0 -20
  229. package/dist/rules/destructive.js +0 -53
  230. package/dist/rules/destructive.js.map +0 -1
  231. package/dist/rules/engine.d.ts +0 -193
  232. package/dist/rules/engine.js +0 -758
  233. package/dist/rules/engine.js.map +0 -1
  234. package/dist/rules/matcher.d.ts +0 -56
  235. package/dist/rules/matcher.js +0 -231
  236. package/dist/rules/matcher.js.map +0 -1
  237. package/dist/rules/pid-file.d.ts +0 -43
  238. package/dist/rules/pid-file.js +0 -96
  239. package/dist/rules/pid-file.js.map +0 -1
  240. package/dist/rules/quiet-hours.d.ts +0 -26
  241. package/dist/rules/quiet-hours.js +0 -46
  242. package/dist/rules/quiet-hours.js.map +0 -1
  243. package/dist/rules/suggest.d.ts +0 -20
  244. package/dist/rules/suggest.js +0 -96
  245. package/dist/rules/suggest.js.map +0 -1
  246. package/dist/rules/throttle.d.ts +0 -61
  247. package/dist/rules/throttle.js +0 -117
  248. package/dist/rules/throttle.js.map +0 -1
  249. package/dist/rules/types.d.ts +0 -117
  250. package/dist/rules/types.js +0 -35
  251. package/dist/rules/types.js.map +0 -1
  252. package/dist/rules/webhook-listener.d.ts +0 -63
  253. package/dist/rules/webhook-listener.js +0 -224
  254. package/dist/rules/webhook-listener.js.map +0 -1
  255. package/dist/rules/webhook-token.d.ts +0 -50
  256. package/dist/rules/webhook-token.js +0 -91
  257. package/dist/rules/webhook-token.js.map +0 -1
  258. package/dist/schema/field-aliases.d.ts +0 -34
  259. package/dist/schema/field-aliases.js +0 -132
  260. package/dist/schema/field-aliases.js.map +0 -1
  261. package/dist/sinks/dispatcher.d.ts +0 -7
  262. package/dist/sinks/dispatcher.js +0 -13
  263. package/dist/sinks/dispatcher.js.map +0 -1
  264. package/dist/sinks/file.d.ts +0 -6
  265. package/dist/sinks/file.js +0 -20
  266. package/dist/sinks/file.js.map +0 -1
  267. package/dist/sinks/format.d.ts +0 -20
  268. package/dist/sinks/format.js +0 -57
  269. package/dist/sinks/format.js.map +0 -1
  270. package/dist/sinks/homeassistant.d.ts +0 -18
  271. package/dist/sinks/homeassistant.js +0 -45
  272. package/dist/sinks/homeassistant.js.map +0 -1
  273. package/dist/sinks/openclaw.d.ts +0 -13
  274. package/dist/sinks/openclaw.js +0 -34
  275. package/dist/sinks/openclaw.js.map +0 -1
  276. package/dist/sinks/stdout.d.ts +0 -4
  277. package/dist/sinks/stdout.js +0 -6
  278. package/dist/sinks/stdout.js.map +0 -1
  279. package/dist/sinks/telegram.d.ts +0 -11
  280. package/dist/sinks/telegram.js +0 -29
  281. package/dist/sinks/telegram.js.map +0 -1
  282. package/dist/sinks/types.d.ts +0 -13
  283. package/dist/sinks/types.js +0 -2
  284. package/dist/sinks/types.js.map +0 -1
  285. package/dist/sinks/webhook.d.ts +0 -6
  286. package/dist/sinks/webhook.js +0 -23
  287. package/dist/sinks/webhook.js.map +0 -1
  288. package/dist/status-sync/manager.d.ts +0 -48
  289. package/dist/status-sync/manager.js +0 -269
  290. package/dist/status-sync/manager.js.map +0 -1
  291. package/dist/utils/arg-parsers.d.ts +0 -16
  292. package/dist/utils/arg-parsers.js +0 -67
  293. package/dist/utils/arg-parsers.js.map +0 -1
  294. package/dist/utils/audit.d.ts +0 -69
  295. package/dist/utils/audit.js +0 -122
  296. package/dist/utils/audit.js.map +0 -1
  297. package/dist/utils/filter.d.ts +0 -81
  298. package/dist/utils/filter.js +0 -190
  299. package/dist/utils/filter.js.map +0 -1
  300. package/dist/utils/flags.d.ts +0 -72
  301. package/dist/utils/flags.js +0 -187
  302. package/dist/utils/flags.js.map +0 -1
  303. package/dist/utils/format.d.ts +0 -9
  304. package/dist/utils/format.js +0 -118
  305. package/dist/utils/format.js.map +0 -1
  306. package/dist/utils/health.d.ts +0 -48
  307. package/dist/utils/health.js +0 -102
  308. package/dist/utils/health.js.map +0 -1
  309. package/dist/utils/help-json.d.ts +0 -39
  310. package/dist/utils/help-json.js +0 -55
  311. package/dist/utils/help-json.js.map +0 -1
  312. package/dist/utils/name-resolver.d.ts +0 -26
  313. package/dist/utils/name-resolver.js +0 -138
  314. package/dist/utils/name-resolver.js.map +0 -1
  315. package/dist/utils/output.d.ts +0 -73
  316. package/dist/utils/output.js +0 -405
  317. package/dist/utils/output.js.map +0 -1
  318. package/dist/utils/quota.d.ts +0 -61
  319. package/dist/utils/quota.js +0 -228
  320. package/dist/utils/quota.js.map +0 -1
  321. package/dist/utils/redact.d.ts +0 -23
  322. package/dist/utils/redact.js +0 -69
  323. package/dist/utils/redact.js.map +0 -1
  324. package/dist/utils/retry.d.ts +0 -72
  325. package/dist/utils/retry.js +0 -141
  326. package/dist/utils/retry.js.map +0 -1
  327. package/dist/utils/string.d.ts +0 -2
  328. package/dist/utils/string.js +0 -23
  329. package/dist/utils/string.js.map +0 -1
  330. package/dist/version.d.ts +0 -2
  331. package/dist/version.js +0 -5
  332. package/dist/version.js.map +0 -1
@@ -1,132 +0,0 @@
1
- import { stringArg } from '../utils/arg-parsers.js';
2
- import { handleError, isJsonMode, printJson } from '../utils/output.js';
3
- import { getStatusSyncStatus, runStatusSyncForeground, startStatusSync, stopStatusSync, } from '../status-sync/manager.js';
4
- function printHumanStatus(status) {
5
- if (!status.running) {
6
- console.log('status-sync is not running');
7
- console.log(`state: ${status.stateDir}`);
8
- console.log(`stdout: ${status.stdoutLog}`);
9
- console.log(`stderr: ${status.stderrLog}`);
10
- return;
11
- }
12
- console.log(`status-sync is running (PID ${status.pid})`);
13
- console.log(`started: ${status.startedAt}`);
14
- console.log(`state: ${status.stateDir}`);
15
- console.log(`stdout: ${status.stdoutLog}`);
16
- console.log(`stderr: ${status.stderrLog}`);
17
- }
18
- export function registerStatusSyncCommand(program) {
19
- const statusSync = program
20
- .command('status-sync')
21
- .description('Manage a background MQTT -> OpenClaw status-sync bridge powered by events mqtt-tail');
22
- statusSync
23
- .command('run')
24
- .description('Run the status-sync bridge in the foreground for a supervisor or terminal session')
25
- .option('--openclaw-url <url>', 'OpenClaw gateway URL (default: http://localhost:18789)', stringArg('--openclaw-url'))
26
- .option('--openclaw-token <token>', 'Bearer token for OpenClaw (or env OPENCLAW_TOKEN)', stringArg('--openclaw-token'))
27
- .option('--openclaw-model <id>', 'OpenClaw agent model ID to route events to (or env OPENCLAW_MODEL)', stringArg('--openclaw-model'))
28
- .option('--topic <pattern>', 'MQTT topic filter (default: SwitchBot shadow topic from credential)', stringArg('--topic'))
29
- .addHelpText('after', `
30
- Runs the same MQTT -> OpenClaw bridge logic as \'status-sync start\',
31
- but keeps the process attached to the current terminal. This is the best fit
32
- for agent supervisors, service managers, or container entrypoints that want
33
- foreground process semantics.
34
-
35
- Examples:
36
- $ switchbot status-sync run --openclaw-model home-agent
37
- $ OPENCLAW_TOKEN=abc OPENCLAW_MODEL=home-agent switchbot status-sync run
38
- `)
39
- .action(async (options) => {
40
- try {
41
- const exitCode = await runStatusSyncForeground(options);
42
- if (exitCode !== 0) {
43
- process.exit(exitCode);
44
- }
45
- }
46
- catch (error) {
47
- handleError(error);
48
- }
49
- });
50
- statusSync
51
- .command('start')
52
- .description('Start the background status-sync bridge')
53
- .option('--openclaw-url <url>', 'OpenClaw gateway URL (default: http://localhost:18789)', stringArg('--openclaw-url'))
54
- .option('--openclaw-token <token>', 'Bearer token for OpenClaw (or env OPENCLAW_TOKEN)', stringArg('--openclaw-token'))
55
- .option('--openclaw-model <id>', 'OpenClaw agent model ID to route events to (or env OPENCLAW_MODEL)', stringArg('--openclaw-model'))
56
- .option('--topic <pattern>', 'MQTT topic filter (default: SwitchBot shadow topic from credential)', stringArg('--topic'))
57
- .option('--state-dir <path>', 'Override the status-sync state directory (or env SWITCHBOT_STATUS_SYNC_HOME)', stringArg('--state-dir'))
58
- .option('--force', 'Stop any existing status-sync bridge before starting a new one')
59
- .addHelpText('after', `
60
- Starts a detached child process that runs:
61
- switchbot status-sync run ...
62
-
63
- State files:
64
- state.json process metadata (pid, startedAt, command)
65
- stdout.log redirected stdout from the child process
66
- stderr.log redirected stderr from the child process
67
-
68
- Examples:
69
- $ switchbot status-sync start --openclaw-model home-agent
70
- $ OPENCLAW_TOKEN=abc OPENCLAW_MODEL=home-agent switchbot status-sync start
71
- $ switchbot status-sync start --state-dir ~/.switchbot/custom-status-sync --force
72
- `)
73
- .action((options) => {
74
- try {
75
- const status = startStatusSync(options);
76
- if (isJsonMode()) {
77
- printJson(status);
78
- return;
79
- }
80
- console.log(`Started status-sync (PID ${status.pid}).`);
81
- console.log(`state: ${status.stateDir}`);
82
- console.log(`stdout: ${status.stdoutLog}`);
83
- console.log(`stderr: ${status.stderrLog}`);
84
- }
85
- catch (error) {
86
- handleError(error);
87
- }
88
- });
89
- statusSync
90
- .command('stop')
91
- .description('Stop the background status-sync bridge')
92
- .option('--state-dir <path>', 'Override the status-sync state directory (or env SWITCHBOT_STATUS_SYNC_HOME)', stringArg('--state-dir'))
93
- .action((options) => {
94
- try {
95
- const result = stopStatusSync(options);
96
- if (isJsonMode()) {
97
- printJson(result);
98
- return;
99
- }
100
- if (result.stopped) {
101
- console.log(`Stopped status-sync (PID ${result.pid}).`);
102
- }
103
- else if (result.stale) {
104
- console.log(`Removed stale status-sync state for PID ${result.pid}.`);
105
- }
106
- else {
107
- console.log('status-sync is not running');
108
- }
109
- }
110
- catch (error) {
111
- handleError(error);
112
- }
113
- });
114
- statusSync
115
- .command('status')
116
- .description('Inspect the current status-sync bridge state')
117
- .option('--state-dir <path>', 'Override the status-sync state directory (or env SWITCHBOT_STATUS_SYNC_HOME)', stringArg('--state-dir'))
118
- .action((options) => {
119
- try {
120
- const status = getStatusSyncStatus(options);
121
- if (isJsonMode()) {
122
- printJson(status);
123
- return;
124
- }
125
- printHumanStatus(status);
126
- }
127
- catch (error) {
128
- handleError(error);
129
- }
130
- });
131
- }
132
- //# sourceMappingURL=status-sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-sync.js","sourceRoot":"","sources":["../../src/commands/status-sync.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- /**
2
- * `switchbot uninstall` — reverse of `switchbot install`.
3
- *
4
- * Unlike install, uninstall is not rollback-safe (there's nothing to
5
- * roll back to). It removes individual pieces independently and keeps
6
- * going if any single removal fails — the user gets a report and can
7
- * clean up leftovers manually. Every destructive step defaults to
8
- * confirmation; `--yes` skips the prompt.
9
- *
10
- * What it removes, from least to most destructive:
11
- * 1. skill symlink (~/.claude/skills/switchbot) — default: yes
12
- * 2. credentials (keychain entry for the profile) — default: yes (requires --remove-creds OR --yes)
13
- * 3. policy.yaml (only on --remove-policy) — default: no (user edits may live here)
14
- *
15
- * The CLI itself is never uninstalled: install did not install it,
16
- * and yanking your own binary mid-run is impolite. Users who want it
17
- * gone run `npm rm -g @switchbot/openapi-cli`.
18
- */
19
- import { Command } from 'commander';
20
- export declare function registerUninstallCommand(program: Command): void;
@@ -1,238 +0,0 @@
1
- /**
2
- * `switchbot uninstall` — reverse of `switchbot install`.
3
- *
4
- * Unlike install, uninstall is not rollback-safe (there's nothing to
5
- * roll back to). It removes individual pieces independently and keeps
6
- * going if any single removal fails — the user gets a report and can
7
- * clean up leftovers manually. Every destructive step defaults to
8
- * confirmation; `--yes` skips the prompt.
9
- *
10
- * What it removes, from least to most destructive:
11
- * 1. skill symlink (~/.claude/skills/switchbot) — default: yes
12
- * 2. credentials (keychain entry for the profile) — default: yes (requires --remove-creds OR --yes)
13
- * 3. policy.yaml (only on --remove-policy) — default: no (user edits may live here)
14
- *
15
- * The CLI itself is never uninstalled: install did not install it,
16
- * and yanking your own binary mid-run is impolite. Users who want it
17
- * gone run `npm rm -g @switchbot/openapi-cli`.
18
- */
19
- import { InvalidArgumentError } from 'commander';
20
- import fs from 'node:fs';
21
- import readline from 'node:readline';
22
- import { resolvePolicyPath } from '../policy/load.js';
23
- import { skillLinkPathFor } from '../install/default-steps.js';
24
- import { selectCredentialStore } from '../credentials/keychain.js';
25
- import { isJsonMode, printJson } from '../utils/output.js';
26
- import { getActiveProfile } from '../lib/request-context.js';
27
- import chalk from 'chalk';
28
- const AGENT_VALUES = ['claude-code', 'cursor', 'copilot', 'none'];
29
- function parseAgent(value) {
30
- if (!value)
31
- return 'claude-code';
32
- if (!AGENT_VALUES.includes(value)) {
33
- throw new InvalidArgumentError(`--agent must be one of ${AGENT_VALUES.join(', ')} (got "${value}")`);
34
- }
35
- return value;
36
- }
37
- async function prompt(question, defaultYes) {
38
- if (!process.stdin.isTTY)
39
- return defaultYes;
40
- const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
41
- return new Promise((resolve) => {
42
- const suffix = defaultYes ? ' [Y/n] ' : ' [y/N] ';
43
- rl.question(question + suffix, (ans) => {
44
- rl.close();
45
- const a = ans.trim().toLowerCase();
46
- if (!a)
47
- return resolve(defaultYes);
48
- resolve(a === 'y' || a === 'yes');
49
- });
50
- });
51
- }
52
- export function registerUninstallCommand(program) {
53
- program
54
- .command('uninstall')
55
- .description('Reverse of `switchbot install`: remove skill link, credentials, (optionally) policy')
56
- .option('--agent <name>', `target agent: ${AGENT_VALUES.join(' | ')} (default: claude-code)`)
57
- .option('--remove-creds', 'delete credentials from the OS keychain (default: prompt)')
58
- .option('--remove-policy', 'also delete policy.yaml (default: keep — user edits may live there)')
59
- .option('-y, --yes', 'assume yes to every confirmation prompt (non-interactive)')
60
- .option('--purge', 'shorthand for --yes --remove-creds --remove-policy: remove everything without prompting')
61
- .addHelpText('after', `
62
- The global --dry-run flag previews what would be removed.
63
- Global --json emits a structured removal report.
64
-
65
- What is never removed here:
66
- - the CLI itself (use: npm rm -g @switchbot/openapi-cli)
67
- - audit.log (it's your receipt; delete by hand if you want)
68
-
69
- Examples:
70
- # Interactive: prompts before each destructive step
71
- switchbot uninstall
72
-
73
- # Non-interactive, remove everything including the policy
74
- switchbot uninstall --yes --remove-policy
75
-
76
- # One-shot: remove absolutely everything without prompting
77
- switchbot uninstall --purge
78
- `)
79
- .action(async (opts, command) => {
80
- const agent = parseAgent(opts.agent);
81
- const profile = getActiveProfile() ?? 'default';
82
- const purge = Boolean(opts.purge);
83
- const yes = Boolean(opts.yes) || purge;
84
- const removePolicy = Boolean(opts.removePolicy) || purge;
85
- const removeCreds = Boolean(opts.removeCreds) || yes;
86
- const globalOpts = command.parent?.opts() ?? {};
87
- const dryRun = Boolean(globalOpts.dryRun);
88
- const policyPath = resolvePolicyPath();
89
- const skillLink = skillLinkPathFor(agent);
90
- const plan = [];
91
- // --- Plan: skill symlink removal (default yes) ---
92
- if (skillLink) {
93
- plan.push({
94
- action: 'remove-skill-link',
95
- detail: skillLink,
96
- run: async () => {
97
- if (!fs.existsSync(skillLink)) {
98
- return { action: 'remove-skill-link', status: 'absent', detail: skillLink };
99
- }
100
- const stat = fs.lstatSync(skillLink);
101
- if (!stat.isSymbolicLink()) {
102
- return {
103
- action: 'remove-skill-link',
104
- status: 'skipped',
105
- detail: `${skillLink} exists but is not a symlink — leaving it alone`,
106
- };
107
- }
108
- const ok = yes ? true : await prompt(`Remove skill link ${skillLink}?`, true);
109
- if (!ok)
110
- return { action: 'remove-skill-link', status: 'skipped', detail: skillLink };
111
- try {
112
- fs.unlinkSync(skillLink);
113
- return { action: 'remove-skill-link', status: 'removed', detail: skillLink };
114
- }
115
- catch (err) {
116
- return {
117
- action: 'remove-skill-link',
118
- status: 'failed',
119
- detail: skillLink,
120
- error: err instanceof Error ? err.message : String(err),
121
- };
122
- }
123
- },
124
- });
125
- }
126
- // --- Plan: credential removal (requires --remove-creds OR --yes) ---
127
- plan.push({
128
- action: 'remove-credentials',
129
- detail: `profile=${profile}`,
130
- run: async () => {
131
- if (!removeCreds) {
132
- return {
133
- action: 'remove-credentials',
134
- status: 'skipped',
135
- detail: 'pass --remove-creds to delete keychain entry',
136
- };
137
- }
138
- const ok = yes ? true : await prompt(`Delete credentials for profile "${profile}" from the keychain?`, false);
139
- if (!ok)
140
- return { action: 'remove-credentials', status: 'skipped', detail: `profile=${profile}` };
141
- try {
142
- const store = await selectCredentialStore();
143
- await store.delete(profile);
144
- return {
145
- action: 'remove-credentials',
146
- status: 'removed',
147
- detail: `profile=${profile} (backend=${store.describe().tag})`,
148
- };
149
- }
150
- catch (err) {
151
- return {
152
- action: 'remove-credentials',
153
- status: 'failed',
154
- detail: `profile=${profile}`,
155
- error: err instanceof Error ? err.message : String(err),
156
- };
157
- }
158
- },
159
- });
160
- // --- Plan: policy.yaml removal (opt-in) ---
161
- plan.push({
162
- action: 'remove-policy',
163
- detail: policyPath,
164
- run: async () => {
165
- if (!removePolicy) {
166
- return {
167
- action: 'remove-policy',
168
- status: 'skipped',
169
- detail: 'pass --remove-policy to delete policy.yaml',
170
- };
171
- }
172
- if (!fs.existsSync(policyPath)) {
173
- return { action: 'remove-policy', status: 'absent', detail: policyPath };
174
- }
175
- const ok = yes ? true : await prompt(`Delete policy file ${policyPath}?`, false);
176
- if (!ok)
177
- return { action: 'remove-policy', status: 'skipped', detail: policyPath };
178
- try {
179
- fs.unlinkSync(policyPath);
180
- return { action: 'remove-policy', status: 'removed', detail: policyPath };
181
- }
182
- catch (err) {
183
- return {
184
- action: 'remove-policy',
185
- status: 'failed',
186
- detail: policyPath,
187
- error: err instanceof Error ? err.message : String(err),
188
- };
189
- }
190
- },
191
- });
192
- if (dryRun) {
193
- if (isJsonMode()) {
194
- printJson({
195
- dryRun: true,
196
- profile,
197
- agent,
198
- plan: plan.map(({ action, detail }) => ({ action, detail })),
199
- });
200
- }
201
- else {
202
- console.log(chalk.bold('switchbot uninstall — dry run'));
203
- console.log(` profile: ${profile}`);
204
- console.log(` agent: ${agent}`);
205
- console.log('');
206
- console.log(chalk.bold('Would run:'));
207
- for (const p of plan)
208
- console.log(` • ${p.action} — ${p.detail}`);
209
- console.log('');
210
- console.log(chalk.dim('No changes made. Re-run without --dry-run (add --yes to skip prompts).'));
211
- }
212
- return;
213
- }
214
- const outcomes = [];
215
- for (const p of plan) {
216
- outcomes.push(await p.run());
217
- }
218
- const anyFailed = outcomes.some((o) => o.status === 'failed');
219
- if (isJsonMode()) {
220
- printJson({ ok: !anyFailed, profile, agent, outcomes });
221
- }
222
- else {
223
- console.log(chalk.bold('switchbot uninstall'));
224
- for (const o of outcomes) {
225
- const tag = o.status === 'removed' ? chalk.green('✓') :
226
- o.status === 'absent' ? chalk.dim('·') :
227
- o.status === 'skipped' ? chalk.yellow('↷') :
228
- chalk.red('✗');
229
- console.log(` ${tag} ${o.action} [${o.status}] ${o.detail ?? ''}`);
230
- if (o.error)
231
- console.log(` ${chalk.red(o.error)}`);
232
- }
233
- }
234
- if (anyFailed)
235
- process.exit(3);
236
- });
237
- }
238
- //# sourceMappingURL=uninstall.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerUpgradeCheckCommand(program: Command): void;
@@ -1,107 +0,0 @@
1
- import https from 'node:https';
2
- import { isJsonMode, printJson } from '../utils/output.js';
3
- import chalk from 'chalk';
4
- import { VERSION as currentVersion } from '../version.js';
5
- const pkgName = '@switchbot/openapi-cli';
6
- function fetchLatestVersion(packageName, timeoutMs = 8000) {
7
- const encoded = packageName.replace('/', '%2F');
8
- // /latest is shorthand for dist-tags.latest — always the current stable
9
- // release tag, never a prerelease unless accidentally published as such.
10
- const url = `https://registry.npmjs.org/${encoded}/latest`;
11
- return new Promise((resolve, reject) => {
12
- const req = https.get(url, { timeout: timeoutMs }, (res) => {
13
- const chunks = [];
14
- res.on('data', (c) => chunks.push(c));
15
- res.on('end', () => {
16
- try {
17
- const body = JSON.parse(Buffer.concat(chunks).toString('utf-8'));
18
- if (typeof body.version === 'string')
19
- resolve(body.version);
20
- else
21
- reject(new Error('version field missing from registry response'));
22
- }
23
- catch (err) {
24
- reject(err);
25
- }
26
- });
27
- });
28
- req.on('timeout', () => { req.destroy(); reject(new Error(`registry request timed out after ${timeoutMs}ms`)); });
29
- req.on('error', reject);
30
- });
31
- }
32
- // Intentionally avoids the `semver` npm package (YAGNI): comparing two
33
- // well-formed registry version strings needs only these 10 lines, and adding
34
- // a runtime dep solely for version comparison would bloat install footprint.
35
- function semverGt(a, b) {
36
- const numParts = (v) => v.replace(/-.*$/, '').split('.').map((n) => Number.parseInt(n, 10));
37
- const [aMaj, aMin, aPat] = numParts(a);
38
- const [bMaj, bMin, bPat] = numParts(b);
39
- if (aMaj !== bMaj)
40
- return aMaj > bMaj;
41
- if (aMin !== bMin)
42
- return aMin > bMin;
43
- if (aPat !== bPat)
44
- return aPat > bPat;
45
- // Same numeric version: release (no prerelease) > prerelease
46
- return !a.includes('-') && b.includes('-');
47
- }
48
- export function registerUpgradeCheckCommand(program) {
49
- program
50
- .command('upgrade-check')
51
- .description('Check whether a newer version of this CLI is available on npm.')
52
- .option('--timeout <ms>', 'Registry request timeout in milliseconds (default: 8000)', (v) => Number.parseInt(v, 10))
53
- .action(async (opts) => {
54
- let latestVersion;
55
- try {
56
- latestVersion = await fetchLatestVersion(pkgName, opts.timeout ?? 8000);
57
- }
58
- catch (err) {
59
- const msg = err instanceof Error ? err.message : String(err);
60
- if (isJsonMode()) {
61
- printJson({ ok: false, error: msg, current: currentVersion });
62
- }
63
- else {
64
- console.error(chalk.red(`upgrade-check failed: ${msg}`));
65
- }
66
- process.exit(1);
67
- }
68
- const upToDate = !semverGt(latestVersion, currentVersion);
69
- const currentMajor = Number.parseInt(currentVersion.split('.')[0], 10);
70
- const latestMajor = Number.parseInt(latestVersion.split('.')[0], 10);
71
- if (latestVersion.includes('-')) {
72
- const msg = `Latest registry version (${latestVersion}) is a prerelease — skipping update check.`;
73
- if (isJsonMode()) {
74
- printJson({
75
- current: currentVersion, latest: latestVersion, upToDate: true,
76
- updateAvailable: false, breakingChange: false, installCommand: null,
77
- note: msg,
78
- });
79
- }
80
- else {
81
- console.log(`${chalk.green('✓')} You are running the latest stable version (${currentVersion}). Registry latest (${latestVersion}) is a prerelease — skipping.`);
82
- }
83
- return;
84
- }
85
- const result = {
86
- current: currentVersion,
87
- latest: latestVersion,
88
- upToDate,
89
- updateAvailable: !upToDate,
90
- breakingChange: latestMajor > currentMajor,
91
- installCommand: upToDate ? null : `npm install -g ${pkgName}@${latestVersion}`,
92
- };
93
- if (isJsonMode()) {
94
- printJson(result);
95
- return;
96
- }
97
- if (upToDate) {
98
- console.log(`${chalk.green('✓')} You are running the latest version (${currentVersion}).`);
99
- }
100
- else {
101
- console.log(`${chalk.yellow('!')} Update available: ${chalk.bold(currentVersion)} → ${chalk.bold(latestVersion)}`);
102
- console.log(` Run: ${chalk.cyan(`npm install -g ${pkgName}@${latestVersion}`)}`);
103
- process.exit(1);
104
- }
105
- });
106
- }
107
- //# sourceMappingURL=upgrade-check.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upgrade-check.js","sourceRoot":"","sources":["../../src/commands/upgrade-check.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerWatchCommand(devices: Command): void;