@switchbot/openapi-cli 3.2.1 → 3.3.0
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/README.md +3 -1
- package/dist/index.js +57419 -170
- package/package.json +9 -5
- package/dist/api/client.d.ts +0 -31
- package/dist/api/client.js +0 -236
- package/dist/api/client.js.map +0 -1
- package/dist/auth.d.ts +0 -1
- package/dist/auth.js +0 -21
- package/dist/auth.js.map +0 -1
- package/dist/commands/agent-bootstrap.d.ts +0 -10
- package/dist/commands/agent-bootstrap.js +0 -200
- package/dist/commands/agent-bootstrap.js.map +0 -1
- package/dist/commands/auth.d.ts +0 -18
- package/dist/commands/auth.js +0 -355
- package/dist/commands/auth.js.map +0 -1
- package/dist/commands/batch.d.ts +0 -2
- package/dist/commands/batch.js +0 -414
- package/dist/commands/batch.js.map +0 -1
- package/dist/commands/cache.d.ts +0 -2
- package/dist/commands/cache.js +0 -127
- package/dist/commands/cache.js.map +0 -1
- package/dist/commands/capabilities.d.ts +0 -31
- package/dist/commands/capabilities.js +0 -383
- package/dist/commands/capabilities.js.map +0 -1
- package/dist/commands/catalog.d.ts +0 -2
- package/dist/commands/catalog.js +0 -360
- package/dist/commands/catalog.js.map +0 -1
- package/dist/commands/completion.d.ts +0 -2
- package/dist/commands/completion.js +0 -386
- package/dist/commands/completion.js.map +0 -1
- package/dist/commands/config.d.ts +0 -21
- package/dist/commands/config.js +0 -377
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/daemon.d.ts +0 -2
- package/dist/commands/daemon.js +0 -411
- package/dist/commands/daemon.js.map +0 -1
- package/dist/commands/device-meta.d.ts +0 -2
- package/dist/commands/device-meta.js +0 -160
- package/dist/commands/device-meta.js.map +0 -1
- package/dist/commands/devices.d.ts +0 -2
- package/dist/commands/devices.js +0 -949
- package/dist/commands/devices.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -3
- package/dist/commands/doctor.js +0 -1016
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/events.d.ts +0 -31
- package/dist/commands/events.js +0 -564
- package/dist/commands/events.js.map +0 -1
- package/dist/commands/expand.d.ts +0 -2
- package/dist/commands/expand.js +0 -131
- package/dist/commands/expand.js.map +0 -1
- package/dist/commands/explain.d.ts +0 -2
- package/dist/commands/explain.js +0 -140
- package/dist/commands/explain.js.map +0 -1
- package/dist/commands/health.d.ts +0 -8
- package/dist/commands/health.js +0 -114
- package/dist/commands/health.js.map +0 -1
- package/dist/commands/history.d.ts +0 -2
- package/dist/commands/history.js +0 -321
- package/dist/commands/history.js.map +0 -1
- package/dist/commands/identity.d.ts +0 -45
- package/dist/commands/identity.js +0 -60
- package/dist/commands/identity.js.map +0 -1
- package/dist/commands/install.d.ts +0 -20
- package/dist/commands/install.js +0 -247
- package/dist/commands/install.js.map +0 -1
- package/dist/commands/mcp.d.ts +0 -14
- package/dist/commands/mcp.js +0 -2018
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/plan.d.ts +0 -51
- package/dist/commands/plan.js +0 -654
- package/dist/commands/plan.js.map +0 -1
- package/dist/commands/policy.d.ts +0 -24
- package/dist/commands/policy.js +0 -587
- package/dist/commands/policy.js.map +0 -1
- package/dist/commands/quota.d.ts +0 -2
- package/dist/commands/quota.js +0 -79
- package/dist/commands/quota.js.map +0 -1
- package/dist/commands/rules.d.ts +0 -2
- package/dist/commands/rules.js +0 -876
- package/dist/commands/rules.js.map +0 -1
- package/dist/commands/scenes.d.ts +0 -2
- package/dist/commands/scenes.js +0 -265
- package/dist/commands/scenes.js.map +0 -1
- package/dist/commands/schema.d.ts +0 -2
- package/dist/commands/schema.js +0 -185
- package/dist/commands/schema.js.map +0 -1
- package/dist/commands/status-sync.d.ts +0 -2
- package/dist/commands/status-sync.js +0 -132
- package/dist/commands/status-sync.js.map +0 -1
- package/dist/commands/uninstall.d.ts +0 -20
- package/dist/commands/uninstall.js +0 -238
- package/dist/commands/uninstall.js.map +0 -1
- package/dist/commands/upgrade-check.d.ts +0 -2
- package/dist/commands/upgrade-check.js +0 -107
- package/dist/commands/upgrade-check.js.map +0 -1
- package/dist/commands/watch.d.ts +0 -2
- package/dist/commands/watch.js +0 -195
- package/dist/commands/watch.js.map +0 -1
- package/dist/commands/webhook.d.ts +0 -2
- package/dist/commands/webhook.js +0 -183
- package/dist/commands/webhook.js.map +0 -1
- package/dist/config.d.ts +0 -57
- package/dist/config.js +0 -259
- package/dist/config.js.map +0 -1
- package/dist/credentials/backends/file.d.ts +0 -18
- package/dist/credentials/backends/file.js +0 -102
- package/dist/credentials/backends/file.js.map +0 -1
- package/dist/credentials/backends/linux.d.ts +0 -16
- package/dist/credentials/backends/linux.js +0 -130
- package/dist/credentials/backends/linux.js.map +0 -1
- package/dist/credentials/backends/macos.d.ts +0 -18
- package/dist/credentials/backends/macos.js +0 -130
- package/dist/credentials/backends/macos.js.map +0 -1
- package/dist/credentials/backends/windows.d.ts +0 -23
- package/dist/credentials/backends/windows.js +0 -216
- package/dist/credentials/backends/windows.js.map +0 -1
- package/dist/credentials/keychain.d.ts +0 -83
- package/dist/credentials/keychain.js +0 -89
- package/dist/credentials/keychain.js.map +0 -1
- package/dist/credentials/prime.d.ts +0 -32
- package/dist/credentials/prime.js +0 -53
- package/dist/credentials/prime.js.map +0 -1
- package/dist/devices/cache.d.ts +0 -79
- package/dist/devices/cache.js +0 -294
- package/dist/devices/cache.js.map +0 -1
- package/dist/devices/catalog.d.ts +0 -138
- package/dist/devices/catalog.js +0 -768
- package/dist/devices/catalog.js.map +0 -1
- package/dist/devices/device-meta.d.ts +0 -15
- package/dist/devices/device-meta.js +0 -57
- package/dist/devices/device-meta.js.map +0 -1
- package/dist/devices/history-agg.d.ts +0 -37
- package/dist/devices/history-agg.js +0 -139
- package/dist/devices/history-agg.js.map +0 -1
- package/dist/devices/history-query.d.ts +0 -45
- package/dist/devices/history-query.js +0 -182
- package/dist/devices/history-query.js.map +0 -1
- package/dist/devices/param-validator.d.ts +0 -40
- package/dist/devices/param-validator.js +0 -434
- package/dist/devices/param-validator.js.map +0 -1
- package/dist/devices/resources.d.ts +0 -74
- package/dist/devices/resources.js +0 -271
- package/dist/devices/resources.js.map +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js.map +0 -1
- package/dist/install/default-steps.d.ts +0 -66
- package/dist/install/default-steps.js +0 -258
- package/dist/install/default-steps.js.map +0 -1
- package/dist/install/preflight.d.ts +0 -60
- package/dist/install/preflight.js +0 -213
- package/dist/install/preflight.js.map +0 -1
- package/dist/install/steps.d.ts +0 -61
- package/dist/install/steps.js +0 -68
- package/dist/install/steps.js.map +0 -1
- package/dist/lib/command-keywords.d.ts +0 -5
- package/dist/lib/command-keywords.js +0 -18
- package/dist/lib/command-keywords.js.map +0 -1
- package/dist/lib/daemon-state.d.ts +0 -24
- package/dist/lib/daemon-state.js +0 -47
- package/dist/lib/daemon-state.js.map +0 -1
- package/dist/lib/destructive-mode.d.ts +0 -2
- package/dist/lib/destructive-mode.js +0 -13
- package/dist/lib/destructive-mode.js.map +0 -1
- package/dist/lib/devices.d.ts +0 -151
- package/dist/lib/devices.js +0 -383
- package/dist/lib/devices.js.map +0 -1
- package/dist/lib/idempotency.d.ts +0 -46
- package/dist/lib/idempotency.js +0 -107
- package/dist/lib/idempotency.js.map +0 -1
- package/dist/lib/plan-store.d.ts +0 -19
- package/dist/lib/plan-store.js +0 -69
- package/dist/lib/plan-store.js.map +0 -1
- package/dist/lib/request-context.d.ts +0 -7
- package/dist/lib/request-context.js +0 -13
- package/dist/lib/request-context.js.map +0 -1
- package/dist/lib/scenes.d.ts +0 -7
- package/dist/lib/scenes.js +0 -11
- package/dist/lib/scenes.js.map +0 -1
- package/dist/logger.d.ts +0 -4
- package/dist/logger.js +0 -17
- package/dist/logger.js.map +0 -1
- package/dist/mcp/device-history.d.ts +0 -36
- package/dist/mcp/device-history.js +0 -146
- package/dist/mcp/device-history.js.map +0 -1
- package/dist/mcp/events-subscription.d.ts +0 -45
- package/dist/mcp/events-subscription.js +0 -214
- package/dist/mcp/events-subscription.js.map +0 -1
- package/dist/mqtt/client.d.ts +0 -25
- package/dist/mqtt/client.js +0 -181
- package/dist/mqtt/client.js.map +0 -1
- package/dist/mqtt/credential.d.ts +0 -16
- package/dist/mqtt/credential.js +0 -31
- package/dist/mqtt/credential.js.map +0 -1
- package/dist/policy/add-rule.d.ts +0 -21
- package/dist/policy/add-rule.js +0 -125
- package/dist/policy/add-rule.js.map +0 -1
- package/dist/policy/diff.d.ts +0 -21
- package/dist/policy/diff.js +0 -92
- package/dist/policy/diff.js.map +0 -1
- package/dist/policy/format.d.ts +0 -6
- package/dist/policy/format.js +0 -58
- package/dist/policy/format.js.map +0 -1
- package/dist/policy/load.d.ts +0 -32
- package/dist/policy/load.js +0 -62
- package/dist/policy/load.js.map +0 -1
- package/dist/policy/migrate.d.ts +0 -21
- package/dist/policy/migrate.js +0 -68
- package/dist/policy/migrate.js.map +0 -1
- package/dist/policy/schema.d.ts +0 -5
- package/dist/policy/schema.js +0 -19
- package/dist/policy/schema.js.map +0 -1
- package/dist/policy/validate.d.ts +0 -19
- package/dist/policy/validate.js +0 -263
- package/dist/policy/validate.js.map +0 -1
- package/dist/rules/action.d.ts +0 -65
- package/dist/rules/action.js +0 -217
- package/dist/rules/action.js.map +0 -1
- package/dist/rules/audit-query.d.ts +0 -51
- package/dist/rules/audit-query.js +0 -90
- package/dist/rules/audit-query.js.map +0 -1
- package/dist/rules/conflict-analyzer.d.ts +0 -57
- package/dist/rules/conflict-analyzer.js +0 -215
- package/dist/rules/conflict-analyzer.js.map +0 -1
- package/dist/rules/cron-scheduler.d.ts +0 -62
- package/dist/rules/cron-scheduler.js +0 -187
- package/dist/rules/cron-scheduler.js.map +0 -1
- package/dist/rules/destructive.d.ts +0 -20
- package/dist/rules/destructive.js +0 -53
- package/dist/rules/destructive.js.map +0 -1
- package/dist/rules/engine.d.ts +0 -193
- package/dist/rules/engine.js +0 -758
- package/dist/rules/engine.js.map +0 -1
- package/dist/rules/matcher.d.ts +0 -56
- package/dist/rules/matcher.js +0 -231
- package/dist/rules/matcher.js.map +0 -1
- package/dist/rules/pid-file.d.ts +0 -43
- package/dist/rules/pid-file.js +0 -96
- package/dist/rules/pid-file.js.map +0 -1
- package/dist/rules/quiet-hours.d.ts +0 -26
- package/dist/rules/quiet-hours.js +0 -46
- package/dist/rules/quiet-hours.js.map +0 -1
- package/dist/rules/suggest.d.ts +0 -20
- package/dist/rules/suggest.js +0 -96
- package/dist/rules/suggest.js.map +0 -1
- package/dist/rules/throttle.d.ts +0 -61
- package/dist/rules/throttle.js +0 -117
- package/dist/rules/throttle.js.map +0 -1
- package/dist/rules/types.d.ts +0 -117
- package/dist/rules/types.js +0 -35
- package/dist/rules/types.js.map +0 -1
- package/dist/rules/webhook-listener.d.ts +0 -63
- package/dist/rules/webhook-listener.js +0 -224
- package/dist/rules/webhook-listener.js.map +0 -1
- package/dist/rules/webhook-token.d.ts +0 -50
- package/dist/rules/webhook-token.js +0 -91
- package/dist/rules/webhook-token.js.map +0 -1
- package/dist/schema/field-aliases.d.ts +0 -34
- package/dist/schema/field-aliases.js +0 -132
- package/dist/schema/field-aliases.js.map +0 -1
- package/dist/sinks/dispatcher.d.ts +0 -7
- package/dist/sinks/dispatcher.js +0 -13
- package/dist/sinks/dispatcher.js.map +0 -1
- package/dist/sinks/file.d.ts +0 -6
- package/dist/sinks/file.js +0 -20
- package/dist/sinks/file.js.map +0 -1
- package/dist/sinks/format.d.ts +0 -20
- package/dist/sinks/format.js +0 -57
- package/dist/sinks/format.js.map +0 -1
- package/dist/sinks/homeassistant.d.ts +0 -18
- package/dist/sinks/homeassistant.js +0 -45
- package/dist/sinks/homeassistant.js.map +0 -1
- package/dist/sinks/openclaw.d.ts +0 -13
- package/dist/sinks/openclaw.js +0 -34
- package/dist/sinks/openclaw.js.map +0 -1
- package/dist/sinks/stdout.d.ts +0 -4
- package/dist/sinks/stdout.js +0 -6
- package/dist/sinks/stdout.js.map +0 -1
- package/dist/sinks/telegram.d.ts +0 -11
- package/dist/sinks/telegram.js +0 -29
- package/dist/sinks/telegram.js.map +0 -1
- package/dist/sinks/types.d.ts +0 -13
- package/dist/sinks/types.js +0 -2
- package/dist/sinks/types.js.map +0 -1
- package/dist/sinks/webhook.d.ts +0 -6
- package/dist/sinks/webhook.js +0 -23
- package/dist/sinks/webhook.js.map +0 -1
- package/dist/status-sync/manager.d.ts +0 -48
- package/dist/status-sync/manager.js +0 -269
- package/dist/status-sync/manager.js.map +0 -1
- package/dist/utils/arg-parsers.d.ts +0 -16
- package/dist/utils/arg-parsers.js +0 -67
- package/dist/utils/arg-parsers.js.map +0 -1
- package/dist/utils/audit.d.ts +0 -69
- package/dist/utils/audit.js +0 -122
- package/dist/utils/audit.js.map +0 -1
- package/dist/utils/filter.d.ts +0 -81
- package/dist/utils/filter.js +0 -190
- package/dist/utils/filter.js.map +0 -1
- package/dist/utils/flags.d.ts +0 -72
- package/dist/utils/flags.js +0 -187
- package/dist/utils/flags.js.map +0 -1
- package/dist/utils/format.d.ts +0 -9
- package/dist/utils/format.js +0 -118
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/health.d.ts +0 -48
- package/dist/utils/health.js +0 -102
- package/dist/utils/health.js.map +0 -1
- package/dist/utils/help-json.d.ts +0 -39
- package/dist/utils/help-json.js +0 -55
- package/dist/utils/help-json.js.map +0 -1
- package/dist/utils/name-resolver.d.ts +0 -26
- package/dist/utils/name-resolver.js +0 -138
- package/dist/utils/name-resolver.js.map +0 -1
- package/dist/utils/output.d.ts +0 -73
- package/dist/utils/output.js +0 -405
- package/dist/utils/output.js.map +0 -1
- package/dist/utils/quota.d.ts +0 -61
- package/dist/utils/quota.js +0 -228
- package/dist/utils/quota.js.map +0 -1
- package/dist/utils/redact.d.ts +0 -23
- package/dist/utils/redact.js +0 -69
- package/dist/utils/redact.js.map +0 -1
- package/dist/utils/retry.d.ts +0 -72
- package/dist/utils/retry.js +0 -141
- package/dist/utils/retry.js.map +0 -1
- package/dist/utils/string.d.ts +0 -2
- package/dist/utils/string.js +0 -23
- package/dist/utils/string.js.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.js +0 -5
- package/dist/version.js.map +0 -1
package/dist/commands/history.js
DELETED
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import os from 'node:os';
|
|
3
|
-
import { intArg, stringArg } from '../utils/arg-parsers.js';
|
|
4
|
-
import { printJson, isJsonMode, handleError, UsageError, exitWithError } from '../utils/output.js';
|
|
5
|
-
import { readAudit, verifyAudit } from '../utils/audit.js';
|
|
6
|
-
import { executeCommand } from '../lib/devices.js';
|
|
7
|
-
import { queryDeviceHistory, queryDeviceHistoryStats, } from '../devices/history-query.js';
|
|
8
|
-
import { aggregateDeviceHistory, ALL_AGG_FNS, } from '../devices/history-agg.js';
|
|
9
|
-
const DEFAULT_AUDIT = path.join(os.homedir(), '.switchbot', 'audit.log');
|
|
10
|
-
export function registerHistoryCommand(program) {
|
|
11
|
-
const history = program
|
|
12
|
-
.command('history')
|
|
13
|
-
.description('View and replay SwitchBot commands recorded via --audit-log')
|
|
14
|
-
.addHelpText('after', `
|
|
15
|
-
Every 'devices command' run with --audit-log is appended as JSONL to the
|
|
16
|
-
audit file (default ~/.switchbot/audit.log). 'history show' prints the file,
|
|
17
|
-
'history replay <n>' re-runs the Nth entry (1-indexed, most-recent last).
|
|
18
|
-
|
|
19
|
-
Examples:
|
|
20
|
-
$ switchbot --audit-log devices command <id> turnOff
|
|
21
|
-
$ switchbot history show --limit 10
|
|
22
|
-
$ switchbot history replay 3
|
|
23
|
-
`);
|
|
24
|
-
history
|
|
25
|
-
.command('show')
|
|
26
|
-
.description('Print recent audit entries')
|
|
27
|
-
.option('--file <path>', `Path to the audit log (default ${DEFAULT_AUDIT})`, stringArg('--file'))
|
|
28
|
-
.option('--limit <n>', 'Show only the last N entries', intArg('--limit', { min: 1 }))
|
|
29
|
-
.action((options) => {
|
|
30
|
-
const file = options.file ?? DEFAULT_AUDIT;
|
|
31
|
-
const entries = readAudit(file);
|
|
32
|
-
const limited = options.limit !== undefined
|
|
33
|
-
? entries.slice(-Math.max(1, Number(options.limit) || 1))
|
|
34
|
-
: entries;
|
|
35
|
-
if (isJsonMode()) {
|
|
36
|
-
printJson({ file, total: entries.length, entries: limited });
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (entries.length === 0) {
|
|
40
|
-
console.log(`(no entries in ${file})`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const startIdx = entries.length - limited.length;
|
|
44
|
-
limited.forEach((e, i) => {
|
|
45
|
-
const idx = startIdx + i + 1;
|
|
46
|
-
const mark = e.result === 'error' ? '✗' : e.dryRun ? '◦' : '✓';
|
|
47
|
-
const param = e.parameter !== undefined && e.parameter !== 'default'
|
|
48
|
-
? ` ${JSON.stringify(e.parameter)}`
|
|
49
|
-
: '';
|
|
50
|
-
const err = e.error ? ` [err: ${e.error}]` : '';
|
|
51
|
-
console.log(`${String(idx).padStart(4)} ${mark} ${e.t} ${e.deviceId} ${e.command}${param}${err}`);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
history
|
|
55
|
-
.command('replay')
|
|
56
|
-
.description('Re-run a recorded command by its 1-indexed position')
|
|
57
|
-
.argument('<index>', 'Entry index (1 = oldest; as shown by "history show")')
|
|
58
|
-
.option('--file <path>', `Path to the audit log (default ${DEFAULT_AUDIT})`, stringArg('--file'))
|
|
59
|
-
.addHelpText('after', `
|
|
60
|
-
Dry-run-honouring: pass --dry-run on the parent command to preview without
|
|
61
|
-
sending the actual call. Errors from the recorded entry are NOT replayed —
|
|
62
|
-
replay always attempts the command fresh.
|
|
63
|
-
|
|
64
|
-
Examples:
|
|
65
|
-
$ switchbot history replay 3
|
|
66
|
-
$ switchbot --dry-run history replay 3
|
|
67
|
-
`)
|
|
68
|
-
.action(async (indexArg, options) => {
|
|
69
|
-
const file = options.file ?? DEFAULT_AUDIT;
|
|
70
|
-
const entries = readAudit(file);
|
|
71
|
-
const idx = Number(indexArg);
|
|
72
|
-
if (!Number.isInteger(idx) || idx < 1 || idx > entries.length) {
|
|
73
|
-
exitWithError({
|
|
74
|
-
code: 2,
|
|
75
|
-
kind: 'usage',
|
|
76
|
-
message: `Invalid index ${indexArg}. Log has ${entries.length} entries.`,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
const entry = entries[idx - 1];
|
|
80
|
-
if (entry.kind !== 'command') {
|
|
81
|
-
exitWithError({
|
|
82
|
-
code: 2,
|
|
83
|
-
kind: 'usage',
|
|
84
|
-
message: `Entry ${idx} is not a command (kind=${entry.kind}).`,
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
try {
|
|
88
|
-
const result = await executeCommand(entry.deviceId, entry.command, entry.parameter, entry.commandType);
|
|
89
|
-
if (isJsonMode()) {
|
|
90
|
-
printJson({ replayed: entry, result });
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
console.log(`✓ replayed ${entry.command} on ${entry.deviceId}`);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
catch (err) {
|
|
97
|
-
handleError(err);
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
history
|
|
101
|
-
.command('range')
|
|
102
|
-
.description('Query time-ranged device history from JSONL storage (populated by events mqtt-tail / MCP)')
|
|
103
|
-
.argument('<deviceId>', 'Device ID to query')
|
|
104
|
-
.option('--since <duration>', 'Relative window ending now, e.g. "30s", "15m", "1h", "7d" (mutually exclusive with --from/--to)', stringArg('--since'))
|
|
105
|
-
.option('--from <iso>', 'Range start (ISO-8601)', stringArg('--from'))
|
|
106
|
-
.option('--to <iso>', 'Range end (ISO-8601)', stringArg('--to'))
|
|
107
|
-
.option('--field <name>', 'Project a payload field (repeat to keep multiple)', (v, acc = []) => acc.concat(v), [])
|
|
108
|
-
.option('--limit <n>', 'Maximum records to return (default 1000)', intArg('--limit', { min: 1 }))
|
|
109
|
-
.addHelpText('after', `
|
|
110
|
-
History is the append-only JSONL mirror of the per-device ring buffer: every
|
|
111
|
-
'events mqtt-tail' event and every MCP tool status-refresh is written to
|
|
112
|
-
~/.switchbot/device-history/<deviceId>.jsonl (rotates at 50MB × 3 files).
|
|
113
|
-
|
|
114
|
-
Examples:
|
|
115
|
-
$ switchbot history range <id> --since 7d --json
|
|
116
|
-
$ switchbot history range <id> --since 1h --field temperature --field humidity
|
|
117
|
-
$ switchbot history range <id> --from 2026-04-18T00:00:00Z --to 2026-04-19T00:00:00Z
|
|
118
|
-
`)
|
|
119
|
-
.action(async (deviceId, options) => {
|
|
120
|
-
// Usage-level validation: keep synchronous and pre-query so handleError
|
|
121
|
-
// maps these to exit 2 (via UsageError) rather than runtime exit 1.
|
|
122
|
-
if (options.since && (options.from || options.to)) {
|
|
123
|
-
handleError(new UsageError('--since is mutually exclusive with --from/--to.'));
|
|
124
|
-
}
|
|
125
|
-
try {
|
|
126
|
-
const records = await queryDeviceHistory(deviceId, {
|
|
127
|
-
since: options.since,
|
|
128
|
-
from: options.from,
|
|
129
|
-
to: options.to,
|
|
130
|
-
fields: options.field ?? [],
|
|
131
|
-
limit: options.limit !== undefined ? Number(options.limit) : undefined,
|
|
132
|
-
});
|
|
133
|
-
if (isJsonMode()) {
|
|
134
|
-
printJson({ deviceId, count: records.length, records });
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
if (records.length === 0) {
|
|
138
|
-
console.log(`(no history records for ${deviceId} in requested range)`);
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
for (const r of records) {
|
|
142
|
-
const payloadStr = JSON.stringify(r.payload);
|
|
143
|
-
console.log(`${r.t} ${r.topic} ${payloadStr}`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
catch (err) {
|
|
147
|
-
// Convert history-query's plain Error range messages into UsageError so
|
|
148
|
-
// they exit 2 instead of 1.
|
|
149
|
-
if (err instanceof Error && /^(Invalid --|--from|--since)/i.test(err.message)) {
|
|
150
|
-
handleError(new UsageError(err.message));
|
|
151
|
-
}
|
|
152
|
-
handleError(err);
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
history
|
|
156
|
-
.command('stats')
|
|
157
|
-
.description('Show on-disk size + record counts for a device history')
|
|
158
|
-
.argument('<deviceId>', 'Device ID to inspect')
|
|
159
|
-
.action((deviceId) => {
|
|
160
|
-
try {
|
|
161
|
-
const stats = queryDeviceHistoryStats(deviceId);
|
|
162
|
-
if (isJsonMode()) {
|
|
163
|
-
printJson(stats);
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
console.log(`Device: ${stats.deviceId}`);
|
|
167
|
-
console.log(`History dir: ${stats.historyDir}`);
|
|
168
|
-
console.log(`JSONL files: ${stats.fileCount} (${stats.jsonlFiles.join(', ') || '—'})`);
|
|
169
|
-
console.log(`Total size: ${stats.totalBytes.toLocaleString()} bytes`);
|
|
170
|
-
console.log(`Record count: ${stats.recordCount}`);
|
|
171
|
-
console.log(`Oldest: ${stats.oldest ?? '—'}`);
|
|
172
|
-
console.log(`Newest: ${stats.newest ?? '—'}`);
|
|
173
|
-
}
|
|
174
|
-
catch (err) {
|
|
175
|
-
handleError(err);
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
history
|
|
179
|
-
.command('verify')
|
|
180
|
-
.description('Check the audit log for malformed lines and schema-version drift')
|
|
181
|
-
.option('--file <path>', `Path to the audit log (default ${DEFAULT_AUDIT})`, stringArg('--file'))
|
|
182
|
-
.addHelpText('after', `
|
|
183
|
-
See docs/audit-log.md for the audit log format. Exit code:
|
|
184
|
-
0 every line parses and carries the current auditVersion, or file is missing (warn)
|
|
185
|
-
1 one or more lines are malformed or schema drift detected
|
|
186
|
-
2 (usage) — not emitted by this subcommand
|
|
187
|
-
|
|
188
|
-
Examples:
|
|
189
|
-
$ switchbot history verify
|
|
190
|
-
$ switchbot history verify --file ./custom.log --json
|
|
191
|
-
`)
|
|
192
|
-
.action((options) => {
|
|
193
|
-
const file = options.file ?? DEFAULT_AUDIT;
|
|
194
|
-
const report = verifyAudit(file);
|
|
195
|
-
// Determine status and exit code
|
|
196
|
-
let status = 'ok';
|
|
197
|
-
let exitCode = 0;
|
|
198
|
-
if (report.fileMissing) {
|
|
199
|
-
status = 'warn';
|
|
200
|
-
}
|
|
201
|
-
else if (report.malformedLines > 0 || report.unversionedEntries > 0) {
|
|
202
|
-
status = 'fail';
|
|
203
|
-
exitCode = 1;
|
|
204
|
-
}
|
|
205
|
-
if (isJsonMode()) {
|
|
206
|
-
const output = {
|
|
207
|
-
status,
|
|
208
|
-
fileMissing: report.fileMissing === true,
|
|
209
|
-
parsed: report.parsedLines,
|
|
210
|
-
malformed: report.malformedLines,
|
|
211
|
-
unversioned: report.unversionedEntries,
|
|
212
|
-
message: report.fileMissing
|
|
213
|
-
? 'Audit log file not found (fresh install)'
|
|
214
|
-
: report.malformedLines > 0 || report.unversionedEntries > 0
|
|
215
|
-
? 'Audit log has malformed or unversioned entries'
|
|
216
|
-
: 'Audit log is valid',
|
|
217
|
-
};
|
|
218
|
-
printJson(output);
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
if (report.fileMissing) {
|
|
222
|
-
console.log(`Audit log: ${report.file} (missing — fresh install)`);
|
|
223
|
-
console.log(`Status: ✓ warn (expected for new accounts)`);
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
console.log(`Audit log: ${report.file}`);
|
|
227
|
-
console.log(`Parsed lines: ${report.parsedLines} / ${report.totalLines}`);
|
|
228
|
-
console.log(`Malformed: ${report.malformedLines}`);
|
|
229
|
-
console.log(`Unversioned: ${report.unversionedEntries}`);
|
|
230
|
-
const versions = Object.entries(report.versionCounts)
|
|
231
|
-
.map(([v, n]) => `${v}:${n}`)
|
|
232
|
-
.join(', ');
|
|
233
|
-
console.log(`Version counts: ${versions || '—'}`);
|
|
234
|
-
if (report.earliest)
|
|
235
|
-
console.log(`Earliest: ${report.earliest}`);
|
|
236
|
-
if (report.latest)
|
|
237
|
-
console.log(`Latest: ${report.latest}`);
|
|
238
|
-
if (report.problems.length > 0) {
|
|
239
|
-
console.log('\nProblems:');
|
|
240
|
-
for (const p of report.problems) {
|
|
241
|
-
console.log(` line ${p.line}: ${p.reason}${p.preview ? ` — "${p.preview}"` : ''}`);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
process.exit(exitCode);
|
|
247
|
-
});
|
|
248
|
-
history
|
|
249
|
-
.command('aggregate')
|
|
250
|
-
.description('Aggregate time-ranged device history metrics into buckets')
|
|
251
|
-
.argument('<deviceId>', 'Device ID to aggregate')
|
|
252
|
-
.option('--since <duration>', 'Relative window ending now, e.g. "1h", "7d" (mutually exclusive with --from/--to)', stringArg('--since'))
|
|
253
|
-
.option('--from <iso>', 'Range start (ISO-8601)', stringArg('--from'))
|
|
254
|
-
.option('--to <iso>', 'Range end (ISO-8601)', stringArg('--to'))
|
|
255
|
-
.requiredOption('--metric <name>', 'Payload field to aggregate (repeat for multiple; required)', (v, acc = []) => acc.concat(v))
|
|
256
|
-
.option('--agg <csv>', 'Comma-separated aggregation functions (count,min,max,avg,sum,p50,p95)', stringArg('--agg'))
|
|
257
|
-
.option('--bucket <duration>', 'Bucket width, e.g. "15m", "1h", "1d"', stringArg('--bucket'))
|
|
258
|
-
.option('--max-bucket-samples <n>', 'Max samples per bucket for quantiles (1–100000)', intArg('--max-bucket-samples', { min: 1, max: 100_000 }))
|
|
259
|
-
.action(async (deviceId, options) => {
|
|
260
|
-
const metrics = options.metric ?? [];
|
|
261
|
-
if (options.since && (options.from || options.to)) {
|
|
262
|
-
handleError(new UsageError('--since is mutually exclusive with --from/--to.'));
|
|
263
|
-
}
|
|
264
|
-
let aggs;
|
|
265
|
-
if (options.agg !== undefined) {
|
|
266
|
-
const parts = options.agg.split(',').map((s) => s.trim()).filter(Boolean);
|
|
267
|
-
const unknown = parts.filter((p) => !ALL_AGG_FNS.includes(p));
|
|
268
|
-
if (unknown.length > 0) {
|
|
269
|
-
handleError(new UsageError(`Unknown aggregation function(s): ${unknown.join(', ')}. Legal values: ${ALL_AGG_FNS.join(', ')}.`));
|
|
270
|
-
}
|
|
271
|
-
aggs = parts;
|
|
272
|
-
}
|
|
273
|
-
const aggOpts = {
|
|
274
|
-
metrics,
|
|
275
|
-
aggs,
|
|
276
|
-
since: options.since,
|
|
277
|
-
from: options.from,
|
|
278
|
-
to: options.to,
|
|
279
|
-
bucket: options.bucket,
|
|
280
|
-
maxBucketSamples: options.maxBucketSamples !== undefined ? Number(options.maxBucketSamples) : undefined,
|
|
281
|
-
};
|
|
282
|
-
try {
|
|
283
|
-
const res = await aggregateDeviceHistory(deviceId, aggOpts);
|
|
284
|
-
if (isJsonMode()) {
|
|
285
|
-
printJson(res);
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
if (res.buckets.length === 0) {
|
|
289
|
-
console.log(`(no history records for ${deviceId} in requested range)`);
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
const aggCols = res.aggs;
|
|
293
|
-
const cols = ['t', ...res.metrics.flatMap((m) => aggCols.map((a) => `${m}.${a}`))];
|
|
294
|
-
console.log(cols.join('\t'));
|
|
295
|
-
for (const bkt of res.buckets) {
|
|
296
|
-
const row = cols.map((col) => {
|
|
297
|
-
if (col === 't')
|
|
298
|
-
return bkt.t;
|
|
299
|
-
const [metric, agg] = col.split('.');
|
|
300
|
-
const val = bkt.metrics[metric]?.[agg];
|
|
301
|
-
return val !== undefined ? String(val) : '\u2014';
|
|
302
|
-
});
|
|
303
|
-
console.log(row.join('\t'));
|
|
304
|
-
}
|
|
305
|
-
if (res.partial) {
|
|
306
|
-
for (const note of res.notes) {
|
|
307
|
-
console.error('note: ' + note);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
catch (err) {
|
|
312
|
-
if (err instanceof Error) {
|
|
313
|
-
if (/bucket/i.test(err.message) || /--since/i.test(err.message) || /--from/i.test(err.message) || /--to/i.test(err.message)) {
|
|
314
|
-
handleError(new UsageError(err.message));
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
handleError(err);
|
|
318
|
-
}
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
//# sourceMappingURL=history.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Single source of truth for SwitchBot product identity.
|
|
3
|
-
*
|
|
4
|
-
* Consumed by:
|
|
5
|
-
* - `program.description()` / `--help` (via PRODUCT_TAGLINE in src/index.ts)
|
|
6
|
-
* - `--help --json` root (via src/utils/help-json.ts)
|
|
7
|
-
* - `switchbot capabilities` / `--json` (identity block)
|
|
8
|
-
* - `switchbot agent-bootstrap --json` (identity block)
|
|
9
|
-
*
|
|
10
|
-
* Keeping this in one file prevents drift between those four surfaces.
|
|
11
|
-
*
|
|
12
|
-
* IMPORTANT: the SwitchBot CLI only talks to the SwitchBot Cloud API over
|
|
13
|
-
* HTTPS. It does NOT drive BLE radios directly — BLE-only devices are
|
|
14
|
-
* reached by going through a SwitchBot Hub, which the Cloud API already
|
|
15
|
-
* handles transparently. Please do not reintroduce the word "BLE" into the
|
|
16
|
-
* tagline / README: it is misleading for AI agents reading `--help`.
|
|
17
|
-
*/
|
|
18
|
-
export declare const IDENTITY: {
|
|
19
|
-
readonly product: "SwitchBot";
|
|
20
|
-
readonly domain: "IoT smart home device control";
|
|
21
|
-
readonly vendor: "Wonderlabs, Inc.";
|
|
22
|
-
readonly apiVersion: "v1.1";
|
|
23
|
-
readonly apiDocs: "https://github.com/OpenWonderLabs/SwitchBotAPI";
|
|
24
|
-
readonly productCategories: readonly ["lights (bulbs / strips / color)", "locks / keypads", "curtains / blinds / shades", "sensors (motion / contact / climate / water-leak)", "plugs / strips", "bots / mechanical pushers", "robot vacuums", "IR appliances via Hub (TV / AC / fan / projector)"];
|
|
25
|
-
readonly deviceCategories: {
|
|
26
|
-
readonly physical: "Wi-Fi-connected and Hub-mediated devices — controlled via Cloud API (CLI does not drive BLE directly)";
|
|
27
|
-
readonly ir: "IR remote devices learned by a SwitchBot Hub (TV, AC, fan, etc.)";
|
|
28
|
-
};
|
|
29
|
-
readonly constraints: {
|
|
30
|
-
readonly quotaPerDay: 10000;
|
|
31
|
-
readonly hubRequiredForBle: true;
|
|
32
|
-
readonly transport: "Cloud API v1.1 (HTTPS)";
|
|
33
|
-
readonly authMethod: "HMAC-SHA256 token+secret";
|
|
34
|
-
};
|
|
35
|
-
readonly agentGuide: "docs/agent-guide.md";
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* One-line product description used for `program.description()` (the first
|
|
39
|
-
* line an AI agent sees when running `switchbot --help`).
|
|
40
|
-
*
|
|
41
|
-
* Structure: "SwitchBot smart home CLI — <product categories> via <transport>;
|
|
42
|
-
* <verbs: scenes, events, MCP>." Keep categories in sync with
|
|
43
|
-
* IDENTITY.productCategories above.
|
|
44
|
-
*/
|
|
45
|
-
export declare const PRODUCT_TAGLINE: string;
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Single source of truth for SwitchBot product identity.
|
|
3
|
-
*
|
|
4
|
-
* Consumed by:
|
|
5
|
-
* - `program.description()` / `--help` (via PRODUCT_TAGLINE in src/index.ts)
|
|
6
|
-
* - `--help --json` root (via src/utils/help-json.ts)
|
|
7
|
-
* - `switchbot capabilities` / `--json` (identity block)
|
|
8
|
-
* - `switchbot agent-bootstrap --json` (identity block)
|
|
9
|
-
*
|
|
10
|
-
* Keeping this in one file prevents drift between those four surfaces.
|
|
11
|
-
*
|
|
12
|
-
* IMPORTANT: the SwitchBot CLI only talks to the SwitchBot Cloud API over
|
|
13
|
-
* HTTPS. It does NOT drive BLE radios directly — BLE-only devices are
|
|
14
|
-
* reached by going through a SwitchBot Hub, which the Cloud API already
|
|
15
|
-
* handles transparently. Please do not reintroduce the word "BLE" into the
|
|
16
|
-
* tagline / README: it is misleading for AI agents reading `--help`.
|
|
17
|
-
*/
|
|
18
|
-
export const IDENTITY = {
|
|
19
|
-
product: 'SwitchBot',
|
|
20
|
-
domain: 'IoT smart home device control',
|
|
21
|
-
vendor: 'Wonderlabs, Inc.',
|
|
22
|
-
apiVersion: 'v1.1',
|
|
23
|
-
apiDocs: 'https://github.com/OpenWonderLabs/SwitchBotAPI',
|
|
24
|
-
// Product category keywords. AI agents scan these to judge scope
|
|
25
|
-
// ("does SwitchBot control door locks? air conditioners?") without
|
|
26
|
-
// parsing the full device catalog.
|
|
27
|
-
productCategories: [
|
|
28
|
-
'lights (bulbs / strips / color)',
|
|
29
|
-
'locks / keypads',
|
|
30
|
-
'curtains / blinds / shades',
|
|
31
|
-
'sensors (motion / contact / climate / water-leak)',
|
|
32
|
-
'plugs / strips',
|
|
33
|
-
'bots / mechanical pushers',
|
|
34
|
-
'robot vacuums',
|
|
35
|
-
'IR appliances via Hub (TV / AC / fan / projector)',
|
|
36
|
-
],
|
|
37
|
-
deviceCategories: {
|
|
38
|
-
physical: 'Wi-Fi-connected and Hub-mediated devices — controlled via Cloud API (CLI does not drive BLE directly)',
|
|
39
|
-
ir: 'IR remote devices learned by a SwitchBot Hub (TV, AC, fan, etc.)',
|
|
40
|
-
},
|
|
41
|
-
constraints: {
|
|
42
|
-
quotaPerDay: 10000,
|
|
43
|
-
hubRequiredForBle: true,
|
|
44
|
-
transport: 'Cloud API v1.1 (HTTPS)',
|
|
45
|
-
authMethod: 'HMAC-SHA256 token+secret',
|
|
46
|
-
},
|
|
47
|
-
agentGuide: 'docs/agent-guide.md',
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* One-line product description used for `program.description()` (the first
|
|
51
|
-
* line an AI agent sees when running `switchbot --help`).
|
|
52
|
-
*
|
|
53
|
-
* Structure: "SwitchBot smart home CLI — <product categories> via <transport>;
|
|
54
|
-
* <verbs: scenes, events, MCP>." Keep categories in sync with
|
|
55
|
-
* IDENTITY.productCategories above.
|
|
56
|
-
*/
|
|
57
|
-
export const PRODUCT_TAGLINE = 'SwitchBot smart home CLI — control lights, locks, curtains, sensors, plugs, ' +
|
|
58
|
-
'and IR appliances (TV/AC/fan) via Cloud API v1.1; run scenes, stream real-time ' +
|
|
59
|
-
'events, and integrate AI agents via MCP.';
|
|
60
|
-
//# sourceMappingURL=identity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/commands/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,+BAA+B;IACvC,MAAM,EAAE,kBAAkB;IAC1B,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,gDAAgD;IACzD,iEAAiE;IACjE,mEAAmE;IACnE,mCAAmC;IACnC,iBAAiB,EAAE;QACjB,iCAAiC;QACjC,iBAAiB;QACjB,4BAA4B;QAC5B,mDAAmD;QACnD,gBAAgB;QAChB,2BAA2B;QAC3B,eAAe;QACf,mDAAmD;KAC3C;IACV,gBAAgB,EAAE;QAChB,QAAQ,EACN,uGAAuG;QACzG,EAAE,EAAE,kEAAkE;KACvE;IACD,WAAW,EAAE;QACX,WAAW,EAAE,KAAK;QAClB,iBAAiB,EAAE,IAAI;QACvB,SAAS,EAAE,wBAAwB;QACnC,UAAU,EAAE,0BAA0B;KACvC;IACD,UAAU,EAAE,qBAAqB;CACzB,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAC1B,8EAA8E;IAC9E,iFAAiF;IACjF,0CAA0C,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `switchbot install` — one-command bootstrap (Phase 3B in-repo).
|
|
3
|
-
*
|
|
4
|
-
* Collapses the 7-step Quickstart (credentials → policy → skill link →
|
|
5
|
-
* doctor verify) into a single orchestrated command with automatic
|
|
6
|
-
* rollback on any step failure. The step library
|
|
7
|
-
* (`src/install/default-steps.ts`) does the heavy lifting; this file
|
|
8
|
-
* composes the steps based on user flags, drives the step runner, and
|
|
9
|
-
* formats the outcome.
|
|
10
|
-
*
|
|
11
|
-
* Design notes:
|
|
12
|
-
* - `switchbot install` assumes the CLI is already on PATH (the user
|
|
13
|
-
* ran `npm i -g @switchbot/openapi-cli` to get here). We do not
|
|
14
|
-
* re-install the CLI from inside itself.
|
|
15
|
-
* - Doctor verification is NOT a step — if it failed, an automatic
|
|
16
|
-
* rollback would destroy good state. Instead we print a "next: run
|
|
17
|
-
* `switchbot doctor`" hint after success.
|
|
18
|
-
*/
|
|
19
|
-
import { Command } from 'commander';
|
|
20
|
-
export declare function registerInstallCommand(program: Command): void;
|