@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,21 +0,0 @@
1
- export type DiffKind = 'added' | 'removed' | 'changed';
2
- export interface PolicyDiffChange {
3
- path: string;
4
- kind: DiffKind;
5
- before?: unknown;
6
- after?: unknown;
7
- }
8
- export interface PolicyDiffResult {
9
- equal: boolean;
10
- changeCount: number;
11
- truncated: boolean;
12
- stats: {
13
- added: number;
14
- removed: number;
15
- changed: number;
16
- };
17
- changes: PolicyDiffChange[];
18
- diff: string;
19
- }
20
- export declare const MAX_POLICY_DIFF_CHANGES = 200;
21
- export declare function diffPolicyValues(leftDoc: unknown, rightDoc: unknown, leftSource: string, rightSource: string, maxChanges?: number): PolicyDiffResult;
@@ -1,92 +0,0 @@
1
- export const MAX_POLICY_DIFF_CHANGES = 200;
2
- function isPlainObject(v) {
3
- return !!v && typeof v === 'object' && !Array.isArray(v);
4
- }
5
- function collectPolicyDiff(left, right, at, out, limit) {
6
- if (out.length >= limit)
7
- return;
8
- if (Array.isArray(left) && Array.isArray(right)) {
9
- const maxLen = Math.max(left.length, right.length);
10
- for (let i = 0; i < maxLen; i++) {
11
- if (out.length >= limit)
12
- return;
13
- const path = `${at}[${i}]`;
14
- if (i >= left.length) {
15
- out.push({ path, kind: 'added', after: right[i] });
16
- }
17
- else if (i >= right.length) {
18
- out.push({ path, kind: 'removed', before: left[i] });
19
- }
20
- else {
21
- collectPolicyDiff(left[i], right[i], path, out, limit);
22
- }
23
- }
24
- return;
25
- }
26
- if (isPlainObject(left) && isPlainObject(right)) {
27
- const keys = new Set([...Object.keys(left), ...Object.keys(right)]);
28
- for (const key of [...keys].sort()) {
29
- if (out.length >= limit)
30
- return;
31
- const path = at === '$' ? `$.${key}` : `${at}.${key}`;
32
- const leftHas = Object.prototype.hasOwnProperty.call(left, key);
33
- const rightHas = Object.prototype.hasOwnProperty.call(right, key);
34
- if (!leftHas && rightHas) {
35
- out.push({ path, kind: 'added', after: right[key] });
36
- }
37
- else if (leftHas && !rightHas) {
38
- out.push({ path, kind: 'removed', before: left[key] });
39
- }
40
- else {
41
- collectPolicyDiff(left[key], right[key], path, out, limit);
42
- }
43
- }
44
- return;
45
- }
46
- if (!Object.is(left, right)) {
47
- out.push({ path: at, kind: 'changed', before: left, after: right });
48
- }
49
- }
50
- function buildLineDiff(before, after) {
51
- const beforeLines = before.split('\n');
52
- const afterLines = after.split('\n');
53
- const lines = ['--- before', '+++ after'];
54
- let i = 0;
55
- let j = 0;
56
- while (i < beforeLines.length || j < afterLines.length) {
57
- const b = beforeLines[i];
58
- const a = afterLines[j];
59
- if (i < beforeLines.length && j < afterLines.length && b === a) {
60
- lines.push(` ${b}`);
61
- i++;
62
- j++;
63
- }
64
- else if (j < afterLines.length && (i >= beforeLines.length || b !== a)) {
65
- lines.push(`+${a}`);
66
- j++;
67
- }
68
- else {
69
- lines.push(`-${b}`);
70
- i++;
71
- }
72
- }
73
- return lines.join('\n');
74
- }
75
- export function diffPolicyValues(leftDoc, rightDoc, leftSource, rightSource, maxChanges = MAX_POLICY_DIFF_CHANGES) {
76
- const changes = [];
77
- collectPolicyDiff(leftDoc, rightDoc, '$', changes, maxChanges);
78
- const equal = changes.length === 0;
79
- return {
80
- equal,
81
- changeCount: changes.length,
82
- truncated: changes.length >= maxChanges,
83
- stats: {
84
- added: changes.filter((c) => c.kind === 'added').length,
85
- removed: changes.filter((c) => c.kind === 'removed').length,
86
- changed: changes.filter((c) => c.kind === 'changed').length,
87
- },
88
- changes,
89
- diff: buildLineDiff(leftSource, rightSource),
90
- };
91
- }
92
- //# sourceMappingURL=diff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/policy/diff.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import type { PolicyValidationResult } from './validate.js';
2
- export interface FormatOptions {
3
- color?: boolean;
4
- noSnippet?: boolean;
5
- }
6
- export declare function formatValidationResult(result: PolicyValidationResult, source: string, opts?: FormatOptions): string;
@@ -1,58 +0,0 @@
1
- import chalk, { Chalk } from 'chalk';
2
- const noColorChalk = new Chalk({ level: 0 });
3
- function colorize(enabled) {
4
- return enabled ? chalk : noColorChalk;
5
- }
6
- function snippet(source, line, col, length, c) {
7
- const lines = source.split(/\r?\n/);
8
- if (line < 1 || line > lines.length)
9
- return '';
10
- const lineText = lines[line - 1];
11
- const gutter = ` ${line} | `;
12
- const pad = ' '.repeat(gutter.length);
13
- const caretStart = Math.max(0, col - 1);
14
- const caretLen = Math.max(1, length);
15
- const caret = `${' '.repeat(caretStart)}${c.red('^'.repeat(caretLen))}`;
16
- return `${c.dim(gutter)}${lineText}\n${c.dim(pad)}${caret}`;
17
- }
18
- function estimateTokenLength(source, line, col) {
19
- const lines = source.split(/\r?\n/);
20
- if (line < 1 || line > lines.length)
21
- return 1;
22
- const lineText = lines[line - 1];
23
- const start = Math.max(0, col - 1);
24
- if (start >= lineText.length)
25
- return 1;
26
- const rest = lineText.slice(start);
27
- const quoted = rest.match(/^(['"]).*?\1/);
28
- if (quoted)
29
- return quoted[0].length;
30
- const token = rest.match(/^[^\s,\[\]{}]+/);
31
- return token ? token[0].length : 1;
32
- }
33
- function formatError(err, policyPath, source, opts) {
34
- const c = colorize(opts.color ?? true);
35
- const loc = err.line !== undefined && err.col !== undefined ? `${err.line}:${err.col}` : '(unknown)';
36
- const header = `${c.cyan(policyPath)}:${c.yellow(loc)}`;
37
- const body = [`${c.red.bold('error')}: ${err.message}`];
38
- if (err.line !== undefined && err.col !== undefined && !opts.noSnippet) {
39
- const len = estimateTokenLength(source, err.line, err.col);
40
- const snip = snippet(source, err.line, err.col, len, c);
41
- if (snip)
42
- body.unshift(snip);
43
- }
44
- if (err.hint)
45
- body.push(`${c.green.bold('hint')}: ${err.hint}`);
46
- return [header, ...body].join('\n');
47
- }
48
- export function formatValidationResult(result, source, opts = {}) {
49
- const c = colorize(opts.color ?? true);
50
- if (result.valid) {
51
- return `${c.green.bold('✓')} ${result.policyPath} is valid (schema v${result.schemaVersion})`;
52
- }
53
- const blocks = result.errors.map((e) => formatError(e, result.policyPath, source, opts));
54
- const count = result.errors.length;
55
- const footer = `${c.red.bold(`✗ ${count} ${count === 1 ? 'error' : 'errors'}`)} in ${result.policyPath} (schema v${result.schemaVersion})`;
56
- return [...blocks, '', footer].join('\n\n').replace(/\n{3,}/g, '\n\n');
57
- }
58
- //# sourceMappingURL=format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/policy/format.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- import { LineCounter, type Document } from 'yaml';
2
- export declare const DEFAULT_POLICY_PATH: string;
3
- export interface ResolvePolicyPathOptions {
4
- flag?: string;
5
- env?: NodeJS.ProcessEnv;
6
- }
7
- export declare function resolvePolicyPath(options?: ResolvePolicyPathOptions): string;
8
- export interface LoadedPolicy {
9
- path: string;
10
- source: string;
11
- doc: Document.Parsed;
12
- lineCounter: LineCounter;
13
- data: unknown;
14
- }
15
- export declare class PolicyFileNotFoundError extends Error {
16
- readonly policyPath: string;
17
- constructor(policyPath: string);
18
- }
19
- export declare class PolicyYamlParseError extends Error {
20
- readonly policyPath: string;
21
- readonly yamlErrors: ReadonlyArray<{
22
- line?: number;
23
- col?: number;
24
- message: string;
25
- }>;
26
- constructor(message: string, policyPath: string, yamlErrors: ReadonlyArray<{
27
- line?: number;
28
- col?: number;
29
- message: string;
30
- }>);
31
- }
32
- export declare function loadPolicyFile(policyPath: string): LoadedPolicy;
@@ -1,62 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
- import { homedir } from 'node:os';
3
- import { join, resolve } from 'node:path';
4
- import { parseDocument, LineCounter } from 'yaml';
5
- export const DEFAULT_POLICY_PATH = join(homedir(), '.config', 'openclaw', 'switchbot', 'policy.yaml');
6
- export function resolvePolicyPath(options = {}) {
7
- const { flag, env = process.env } = options;
8
- if (flag && flag.trim().length > 0)
9
- return resolve(flag);
10
- const fromEnv = env.SWITCHBOT_POLICY_PATH;
11
- if (fromEnv && fromEnv.trim().length > 0)
12
- return resolve(fromEnv);
13
- return DEFAULT_POLICY_PATH;
14
- }
15
- export class PolicyFileNotFoundError extends Error {
16
- policyPath;
17
- constructor(policyPath) {
18
- super(`policy file not found: ${policyPath}`);
19
- this.policyPath = policyPath;
20
- this.name = 'PolicyFileNotFoundError';
21
- }
22
- }
23
- export class PolicyYamlParseError extends Error {
24
- policyPath;
25
- yamlErrors;
26
- constructor(message, policyPath, yamlErrors) {
27
- super(message);
28
- this.policyPath = policyPath;
29
- this.yamlErrors = yamlErrors;
30
- this.name = 'PolicyYamlParseError';
31
- }
32
- }
33
- export function loadPolicyFile(policyPath) {
34
- let source;
35
- try {
36
- source = readFileSync(policyPath, 'utf-8');
37
- }
38
- catch (err) {
39
- const e = err;
40
- if (e.code === 'ENOENT')
41
- throw new PolicyFileNotFoundError(policyPath);
42
- throw err;
43
- }
44
- const lineCounter = new LineCounter();
45
- const doc = parseDocument(source, { lineCounter, keepSourceTokens: true });
46
- if (doc.errors.length > 0) {
47
- const yamlErrors = doc.errors.map((e) => {
48
- const pos = e.pos?.[0];
49
- const loc = pos !== undefined ? lineCounter.linePos(pos) : undefined;
50
- return { line: loc?.line, col: loc?.col, message: e.message };
51
- });
52
- throw new PolicyYamlParseError(doc.errors[0].message, policyPath, yamlErrors);
53
- }
54
- return {
55
- path: policyPath,
56
- source,
57
- doc,
58
- lineCounter,
59
- data: doc.toJS({ maxAliasCount: 100 }),
60
- };
61
- }
62
- //# sourceMappingURL=load.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/policy/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAiB,MAAM,MAAM,CAAC;AAEjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AAOtG,MAAM,UAAU,iBAAiB,CAAC,UAAoC,EAAE;IACtE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC;IAC1C,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAUD,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACpB;IAA5B,YAA4B,UAAkB;QAC5C,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;QADpB,eAAU,GAAV,UAAU,CAAQ;QAE5C,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAG3B;IACA;IAHlB,YACE,OAAe,EACC,UAAkB,EAClB,UAA2E;QAE3F,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,eAAU,GAAV,UAAU,CAAQ;QAClB,eAAU,GAAV,UAAU,CAAiE;QAG3F,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAA4B,CAAC;QACvC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACvE,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3E,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACtC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,GAAG,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAChE,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAChF,CAAC;IAED,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,MAAM;QACN,GAAG;QACH,WAAW;QACX,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;KACvC,CAAC;AACJ,CAAC"}
@@ -1,21 +0,0 @@
1
- import { type Document } from 'yaml';
2
- import { type PolicyValidationResult } from './validate.js';
3
- import type { LoadedPolicy } from './load.js';
4
- import type { PolicySchemaVersion } from './schema.js';
5
- export interface MigrationPlan {
6
- fromVersion: PolicySchemaVersion;
7
- toVersion: PolicySchemaVersion;
8
- migrate: (doc: Document.Parsed) => void;
9
- }
10
- export declare class PolicyMigrationError extends Error {
11
- readonly code: string;
12
- constructor(message: string, code: string);
13
- }
14
- export interface MigrationDryRun {
15
- changed: boolean;
16
- fromVersion: PolicySchemaVersion;
17
- toVersion: PolicySchemaVersion;
18
- nextSource: string;
19
- precheck: PolicyValidationResult;
20
- }
21
- export declare function planMigration(loaded: LoadedPolicy, from: PolicySchemaVersion, to: PolicySchemaVersion): MigrationDryRun;
@@ -1,68 +0,0 @@
1
- import { isMap, isScalar, parseDocument, LineCounter } from 'yaml';
2
- import { validateLoadedPolicy } from './validate.js';
3
- export class PolicyMigrationError extends Error {
4
- code;
5
- constructor(message, code) {
6
- super(message);
7
- this.code = code;
8
- this.name = 'PolicyMigrationError';
9
- }
10
- }
11
- const MIGRATION_CHAIN = [];
12
- function bumpVersionScalar(doc, target) {
13
- if (!isMap(doc.contents)) {
14
- throw new PolicyMigrationError('policy root must be a YAML mapping (got null or an array)', 'invalid-shape');
15
- }
16
- const pair = doc.contents.items.find((p) => isScalar(p.key) && p.key.value === 'version');
17
- if (!pair || !isScalar(pair.value)) {
18
- throw new PolicyMigrationError('policy has no `version` scalar to migrate; add `version: "0.2"` (or `"0.1"`) and retry', 'no-version-field');
19
- }
20
- pair.value.value = target;
21
- }
22
- function findPlan(from, to) {
23
- const chain = [];
24
- let cur = from;
25
- while (cur !== to) {
26
- const step = MIGRATION_CHAIN.find((p) => p.fromVersion === cur);
27
- if (!step) {
28
- throw new PolicyMigrationError(`no migration path from v${from} to v${to} (missing step at v${cur})`, 'no-path');
29
- }
30
- chain.push(step);
31
- cur = step.toVersion;
32
- }
33
- return chain;
34
- }
35
- export function planMigration(loaded, from, to) {
36
- if (from === to) {
37
- const precheck = validateLoadedPolicy(loaded);
38
- return { changed: false, fromVersion: from, toVersion: to, nextSource: loaded.source, precheck };
39
- }
40
- const plan = findPlan(from, to);
41
- // Round-trip through source instead of Document.clone(): keeps comments +
42
- // anchors intact, works across yaml library versions, and leaves the
43
- // caller's `loaded.doc` untouched.
44
- const nextLineCounter = new LineCounter();
45
- const clone = parseDocument(loaded.source, {
46
- lineCounter: nextLineCounter,
47
- keepSourceTokens: true,
48
- });
49
- for (const step of plan)
50
- step.migrate(clone);
51
- const nextSource = String(clone);
52
- // Re-parse after serialization so `doc` and `source` stay in sync for the
53
- // validator's line/col mapping.
54
- const reLineCounter = new LineCounter();
55
- const reDoc = parseDocument(nextSource, {
56
- lineCounter: reLineCounter,
57
- keepSourceTokens: true,
58
- });
59
- const precheck = validateLoadedPolicy({
60
- path: loaded.path,
61
- source: nextSource,
62
- doc: reDoc,
63
- lineCounter: reLineCounter,
64
- data: reDoc.toJS({ maxAliasCount: 100 }),
65
- });
66
- return { changed: true, fromVersion: from, toVersion: to, nextSource, precheck };
67
- }
68
- //# sourceMappingURL=migrate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/policy/migrate.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export type PolicySchemaVersion = '0.2';
2
- export declare const SUPPORTED_POLICY_SCHEMA_VERSIONS: PolicySchemaVersion[];
3
- export declare const CURRENT_POLICY_SCHEMA_VERSION: PolicySchemaVersion;
4
- export declare function loadPolicySchema(version?: PolicySchemaVersion): object;
5
- export declare function isSupportedPolicySchemaVersion(v: unknown): v is PolicySchemaVersion;
@@ -1,19 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
- import { fileURLToPath } from 'node:url';
3
- export const SUPPORTED_POLICY_SCHEMA_VERSIONS = ['0.2'];
4
- export const CURRENT_POLICY_SCHEMA_VERSION = '0.2';
5
- const schemaCache = new Map();
6
- export function loadPolicySchema(version = CURRENT_POLICY_SCHEMA_VERSION) {
7
- const cached = schemaCache.get(version);
8
- if (cached)
9
- return cached;
10
- const url = new URL(`./schema/v${version}.json`, import.meta.url);
11
- const raw = readFileSync(fileURLToPath(url), 'utf-8');
12
- const parsed = JSON.parse(raw);
13
- schemaCache.set(version, parsed);
14
- return parsed;
15
- }
16
- export function isSupportedPolicySchemaVersion(v) {
17
- return typeof v === 'string' && SUPPORTED_POLICY_SCHEMA_VERSIONS.includes(v);
18
- }
19
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/policy/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,MAAM,CAAC,MAAM,gCAAgC,GAA0B,CAAC,KAAK,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,6BAA6B,GAAwB,KAAK,CAAC;AAExE,MAAM,WAAW,GAAG,IAAI,GAAG,EAA+B,CAAC;AAE3D,MAAM,UAAU,gBAAgB,CAAC,UAA+B,6BAA6B;IAC3F,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,OAAO,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAW,CAAC;IACzC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,CAAU;IACvD,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAK,gCAA6C,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7F,CAAC"}
@@ -1,19 +0,0 @@
1
- import { type LoadedPolicy } from './load.js';
2
- import { type PolicySchemaVersion } from './schema.js';
3
- export interface PolicyValidationError {
4
- path: string;
5
- line?: number;
6
- col?: number;
7
- keyword: string;
8
- message: string;
9
- hint?: string;
10
- schemaPath: string;
11
- }
12
- export interface PolicyValidationResult {
13
- policyPath: string;
14
- schemaVersion: PolicySchemaVersion;
15
- valid: boolean;
16
- errors: PolicyValidationError[];
17
- }
18
- export declare function validateLoadedPolicy(loaded: LoadedPolicy): PolicyValidationResult;
19
- export declare function validatePolicyFile(policyPath: string): PolicyValidationResult;