@switchbot/openapi-cli 3.1.1 → 3.2.1

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 (333) hide show
  1. package/README.md +3 -3
  2. package/dist/api/client.d.ts +31 -0
  3. package/dist/api/client.js +1 -0
  4. package/dist/api/client.js.map +1 -0
  5. package/dist/auth.d.ts +1 -0
  6. package/dist/auth.js +1 -0
  7. package/dist/auth.js.map +1 -0
  8. package/dist/commands/agent-bootstrap.d.ts +10 -0
  9. package/dist/commands/agent-bootstrap.js +23 -5
  10. package/dist/commands/agent-bootstrap.js.map +1 -0
  11. package/dist/commands/auth.d.ts +18 -0
  12. package/dist/commands/auth.js +1 -0
  13. package/dist/commands/auth.js.map +1 -0
  14. package/dist/commands/batch.d.ts +2 -0
  15. package/dist/commands/batch.js +1 -0
  16. package/dist/commands/batch.js.map +1 -0
  17. package/dist/commands/cache.d.ts +2 -0
  18. package/dist/commands/cache.js +1 -0
  19. package/dist/commands/cache.js.map +1 -0
  20. package/dist/commands/capabilities.d.ts +31 -0
  21. package/dist/commands/capabilities.js +5 -7
  22. package/dist/commands/capabilities.js.map +1 -0
  23. package/dist/commands/catalog.d.ts +2 -0
  24. package/dist/commands/catalog.js +1 -0
  25. package/dist/commands/catalog.js.map +1 -0
  26. package/dist/commands/completion.d.ts +2 -0
  27. package/dist/commands/completion.js +1 -0
  28. package/dist/commands/completion.js.map +1 -0
  29. package/dist/commands/config.d.ts +21 -0
  30. package/dist/commands/config.js +1 -0
  31. package/dist/commands/config.js.map +1 -0
  32. package/dist/commands/daemon.d.ts +2 -0
  33. package/dist/commands/daemon.js +1 -0
  34. package/dist/commands/daemon.js.map +1 -0
  35. package/dist/commands/device-meta.d.ts +2 -0
  36. package/dist/commands/device-meta.js +1 -0
  37. package/dist/commands/device-meta.js.map +1 -0
  38. package/dist/commands/devices.d.ts +2 -0
  39. package/dist/commands/devices.js +1 -0
  40. package/dist/commands/devices.js.map +1 -0
  41. package/dist/commands/doctor.d.ts +3 -0
  42. package/dist/commands/doctor.js +1 -0
  43. package/dist/commands/doctor.js.map +1 -0
  44. package/dist/commands/events.d.ts +31 -0
  45. package/dist/commands/events.js +1 -0
  46. package/dist/commands/events.js.map +1 -0
  47. package/dist/commands/expand.d.ts +2 -0
  48. package/dist/commands/expand.js +1 -0
  49. package/dist/commands/expand.js.map +1 -0
  50. package/dist/commands/explain.d.ts +2 -0
  51. package/dist/commands/explain.js +1 -0
  52. package/dist/commands/explain.js.map +1 -0
  53. package/dist/commands/health.d.ts +8 -0
  54. package/dist/commands/health.js +1 -0
  55. package/dist/commands/health.js.map +1 -0
  56. package/dist/commands/history.d.ts +2 -0
  57. package/dist/commands/history.js +1 -0
  58. package/dist/commands/history.js.map +1 -0
  59. package/dist/commands/identity.d.ts +45 -0
  60. package/dist/commands/identity.js +1 -0
  61. package/dist/commands/identity.js.map +1 -0
  62. package/dist/commands/install.d.ts +20 -0
  63. package/dist/commands/install.js +1 -0
  64. package/dist/commands/install.js.map +1 -0
  65. package/dist/commands/mcp.d.ts +14 -0
  66. package/dist/commands/mcp.js +1 -0
  67. package/dist/commands/mcp.js.map +1 -0
  68. package/dist/commands/plan.d.ts +51 -0
  69. package/dist/commands/plan.js +1 -0
  70. package/dist/commands/plan.js.map +1 -0
  71. package/dist/commands/policy.d.ts +24 -0
  72. package/dist/commands/policy.js +1 -0
  73. package/dist/commands/policy.js.map +1 -0
  74. package/dist/commands/quota.d.ts +2 -0
  75. package/dist/commands/quota.js +1 -0
  76. package/dist/commands/quota.js.map +1 -0
  77. package/dist/commands/rules.d.ts +2 -0
  78. package/dist/commands/rules.js +1 -0
  79. package/dist/commands/rules.js.map +1 -0
  80. package/dist/commands/scenes.d.ts +2 -0
  81. package/dist/commands/scenes.js +1 -0
  82. package/dist/commands/scenes.js.map +1 -0
  83. package/dist/commands/schema.d.ts +2 -0
  84. package/dist/commands/schema.js +10 -2
  85. package/dist/commands/schema.js.map +1 -0
  86. package/dist/commands/status-sync.d.ts +2 -0
  87. package/dist/commands/status-sync.js +1 -0
  88. package/dist/commands/status-sync.js.map +1 -0
  89. package/dist/commands/uninstall.d.ts +20 -0
  90. package/dist/commands/uninstall.js +1 -0
  91. package/dist/commands/uninstall.js.map +1 -0
  92. package/dist/commands/upgrade-check.d.ts +2 -0
  93. package/dist/commands/upgrade-check.js +3 -3
  94. package/dist/commands/upgrade-check.js.map +1 -0
  95. package/dist/commands/watch.d.ts +2 -0
  96. package/dist/commands/watch.js +1 -0
  97. package/dist/commands/watch.js.map +1 -0
  98. package/dist/commands/webhook.d.ts +2 -0
  99. package/dist/commands/webhook.js +1 -0
  100. package/dist/commands/webhook.js.map +1 -0
  101. package/dist/config.d.ts +57 -0
  102. package/dist/config.js +1 -0
  103. package/dist/config.js.map +1 -0
  104. package/dist/credentials/backends/file.d.ts +18 -0
  105. package/dist/credentials/backends/file.js +1 -0
  106. package/dist/credentials/backends/file.js.map +1 -0
  107. package/dist/credentials/backends/linux.d.ts +16 -0
  108. package/dist/credentials/backends/linux.js +1 -0
  109. package/dist/credentials/backends/linux.js.map +1 -0
  110. package/dist/credentials/backends/macos.d.ts +18 -0
  111. package/dist/credentials/backends/macos.js +1 -0
  112. package/dist/credentials/backends/macos.js.map +1 -0
  113. package/dist/credentials/backends/windows.d.ts +23 -0
  114. package/dist/credentials/backends/windows.js +1 -0
  115. package/dist/credentials/backends/windows.js.map +1 -0
  116. package/dist/credentials/keychain.d.ts +83 -0
  117. package/dist/credentials/keychain.js +1 -0
  118. package/dist/credentials/keychain.js.map +1 -0
  119. package/dist/credentials/prime.d.ts +32 -0
  120. package/dist/credentials/prime.js +1 -0
  121. package/dist/credentials/prime.js.map +1 -0
  122. package/dist/devices/cache.d.ts +79 -0
  123. package/dist/devices/cache.js +1 -0
  124. package/dist/devices/cache.js.map +1 -0
  125. package/dist/devices/catalog.d.ts +138 -0
  126. package/dist/devices/catalog.js +1 -0
  127. package/dist/devices/catalog.js.map +1 -0
  128. package/dist/devices/device-meta.d.ts +15 -0
  129. package/dist/devices/device-meta.js +1 -0
  130. package/dist/devices/device-meta.js.map +1 -0
  131. package/dist/devices/history-agg.d.ts +37 -0
  132. package/dist/devices/history-agg.js +1 -0
  133. package/dist/devices/history-agg.js.map +1 -0
  134. package/dist/devices/history-query.d.ts +45 -0
  135. package/dist/devices/history-query.js +1 -0
  136. package/dist/devices/history-query.js.map +1 -0
  137. package/dist/devices/param-validator.d.ts +40 -0
  138. package/dist/devices/param-validator.js +1 -0
  139. package/dist/devices/param-validator.js.map +1 -0
  140. package/dist/devices/resources.d.ts +74 -0
  141. package/dist/devices/resources.js +1 -0
  142. package/dist/devices/resources.js.map +1 -0
  143. package/dist/index.d.ts +1 -0
  144. package/dist/index.js +1 -1
  145. package/dist/index.js.map +1 -0
  146. package/dist/install/default-steps.d.ts +66 -0
  147. package/dist/install/default-steps.js +1 -0
  148. package/dist/install/default-steps.js.map +1 -0
  149. package/dist/install/preflight.d.ts +60 -0
  150. package/dist/install/preflight.js +1 -0
  151. package/dist/install/preflight.js.map +1 -0
  152. package/dist/install/steps.d.ts +61 -0
  153. package/dist/install/steps.js +1 -0
  154. package/dist/install/steps.js.map +1 -0
  155. package/dist/lib/command-keywords.d.ts +5 -0
  156. package/dist/lib/command-keywords.js +1 -0
  157. package/dist/lib/command-keywords.js.map +1 -0
  158. package/dist/lib/daemon-state.d.ts +24 -0
  159. package/dist/lib/daemon-state.js +1 -0
  160. package/dist/lib/daemon-state.js.map +1 -0
  161. package/dist/lib/destructive-mode.d.ts +2 -0
  162. package/dist/lib/destructive-mode.js +1 -0
  163. package/dist/lib/destructive-mode.js.map +1 -0
  164. package/dist/lib/devices.d.ts +151 -0
  165. package/dist/lib/devices.js +1 -0
  166. package/dist/lib/devices.js.map +1 -0
  167. package/dist/lib/idempotency.d.ts +46 -0
  168. package/dist/lib/idempotency.js +1 -0
  169. package/dist/lib/idempotency.js.map +1 -0
  170. package/dist/lib/plan-store.d.ts +19 -0
  171. package/dist/lib/plan-store.js +1 -0
  172. package/dist/lib/plan-store.js.map +1 -0
  173. package/dist/lib/request-context.d.ts +7 -0
  174. package/dist/lib/request-context.js +1 -0
  175. package/dist/lib/request-context.js.map +1 -0
  176. package/dist/lib/scenes.d.ts +7 -0
  177. package/dist/lib/scenes.js +1 -0
  178. package/dist/lib/scenes.js.map +1 -0
  179. package/dist/logger.d.ts +4 -0
  180. package/dist/logger.js +1 -0
  181. package/dist/logger.js.map +1 -0
  182. package/dist/mcp/device-history.d.ts +36 -0
  183. package/dist/mcp/device-history.js +1 -0
  184. package/dist/mcp/device-history.js.map +1 -0
  185. package/dist/mcp/events-subscription.d.ts +45 -0
  186. package/dist/mcp/events-subscription.js +1 -0
  187. package/dist/mcp/events-subscription.js.map +1 -0
  188. package/dist/mqtt/client.d.ts +25 -0
  189. package/dist/mqtt/client.js +1 -0
  190. package/dist/mqtt/client.js.map +1 -0
  191. package/dist/mqtt/credential.d.ts +16 -0
  192. package/dist/mqtt/credential.js +1 -0
  193. package/dist/mqtt/credential.js.map +1 -0
  194. package/dist/policy/add-rule.d.ts +21 -0
  195. package/dist/policy/add-rule.js +1 -0
  196. package/dist/policy/add-rule.js.map +1 -0
  197. package/dist/policy/diff.d.ts +21 -0
  198. package/dist/policy/diff.js +1 -0
  199. package/dist/policy/diff.js.map +1 -0
  200. package/dist/policy/format.d.ts +6 -0
  201. package/dist/policy/format.js +1 -0
  202. package/dist/policy/format.js.map +1 -0
  203. package/dist/policy/load.d.ts +32 -0
  204. package/dist/policy/load.js +1 -0
  205. package/dist/policy/load.js.map +1 -0
  206. package/dist/policy/migrate.d.ts +21 -0
  207. package/dist/policy/migrate.js +1 -0
  208. package/dist/policy/migrate.js.map +1 -0
  209. package/dist/policy/schema/v0.2.json +1 -1
  210. package/dist/policy/schema.d.ts +5 -0
  211. package/dist/policy/schema.js +1 -0
  212. package/dist/policy/schema.js.map +1 -0
  213. package/dist/policy/validate.d.ts +19 -0
  214. package/dist/policy/validate.js +1 -0
  215. package/dist/policy/validate.js.map +1 -0
  216. package/dist/rules/action.d.ts +65 -0
  217. package/dist/rules/action.js +1 -0
  218. package/dist/rules/action.js.map +1 -0
  219. package/dist/rules/audit-query.d.ts +51 -0
  220. package/dist/rules/audit-query.js +1 -0
  221. package/dist/rules/audit-query.js.map +1 -0
  222. package/dist/rules/conflict-analyzer.d.ts +57 -0
  223. package/dist/rules/conflict-analyzer.js +1 -0
  224. package/dist/rules/conflict-analyzer.js.map +1 -0
  225. package/dist/rules/cron-scheduler.d.ts +62 -0
  226. package/dist/rules/cron-scheduler.js +1 -0
  227. package/dist/rules/cron-scheduler.js.map +1 -0
  228. package/dist/rules/destructive.d.ts +20 -0
  229. package/dist/rules/destructive.js +1 -0
  230. package/dist/rules/destructive.js.map +1 -0
  231. package/dist/rules/engine.d.ts +193 -0
  232. package/dist/rules/engine.js +1 -0
  233. package/dist/rules/engine.js.map +1 -0
  234. package/dist/rules/matcher.d.ts +56 -0
  235. package/dist/rules/matcher.js +1 -0
  236. package/dist/rules/matcher.js.map +1 -0
  237. package/dist/rules/pid-file.d.ts +43 -0
  238. package/dist/rules/pid-file.js +1 -0
  239. package/dist/rules/pid-file.js.map +1 -0
  240. package/dist/rules/quiet-hours.d.ts +26 -0
  241. package/dist/rules/quiet-hours.js +1 -0
  242. package/dist/rules/quiet-hours.js.map +1 -0
  243. package/dist/rules/suggest.d.ts +20 -0
  244. package/dist/rules/suggest.js +1 -0
  245. package/dist/rules/suggest.js.map +1 -0
  246. package/dist/rules/throttle.d.ts +61 -0
  247. package/dist/rules/throttle.js +1 -0
  248. package/dist/rules/throttle.js.map +1 -0
  249. package/dist/rules/types.d.ts +117 -0
  250. package/dist/rules/types.js +1 -0
  251. package/dist/rules/types.js.map +1 -0
  252. package/dist/rules/webhook-listener.d.ts +63 -0
  253. package/dist/rules/webhook-listener.js +1 -0
  254. package/dist/rules/webhook-listener.js.map +1 -0
  255. package/dist/rules/webhook-token.d.ts +50 -0
  256. package/dist/rules/webhook-token.js +1 -0
  257. package/dist/rules/webhook-token.js.map +1 -0
  258. package/dist/schema/field-aliases.d.ts +34 -0
  259. package/dist/schema/field-aliases.js +1 -0
  260. package/dist/schema/field-aliases.js.map +1 -0
  261. package/dist/sinks/dispatcher.d.ts +7 -0
  262. package/dist/sinks/dispatcher.js +1 -0
  263. package/dist/sinks/dispatcher.js.map +1 -0
  264. package/dist/sinks/file.d.ts +6 -0
  265. package/dist/sinks/file.js +1 -0
  266. package/dist/sinks/file.js.map +1 -0
  267. package/dist/sinks/format.d.ts +20 -0
  268. package/dist/sinks/format.js +1 -0
  269. package/dist/sinks/format.js.map +1 -0
  270. package/dist/sinks/homeassistant.d.ts +18 -0
  271. package/dist/sinks/homeassistant.js +1 -0
  272. package/dist/sinks/homeassistant.js.map +1 -0
  273. package/dist/sinks/openclaw.d.ts +13 -0
  274. package/dist/sinks/openclaw.js +1 -0
  275. package/dist/sinks/openclaw.js.map +1 -0
  276. package/dist/sinks/stdout.d.ts +4 -0
  277. package/dist/sinks/stdout.js +1 -0
  278. package/dist/sinks/stdout.js.map +1 -0
  279. package/dist/sinks/telegram.d.ts +11 -0
  280. package/dist/sinks/telegram.js +1 -0
  281. package/dist/sinks/telegram.js.map +1 -0
  282. package/dist/sinks/types.d.ts +13 -0
  283. package/dist/sinks/types.js +1 -0
  284. package/dist/sinks/types.js.map +1 -0
  285. package/dist/sinks/webhook.d.ts +6 -0
  286. package/dist/sinks/webhook.js +1 -0
  287. package/dist/sinks/webhook.js.map +1 -0
  288. package/dist/status-sync/manager.d.ts +48 -0
  289. package/dist/status-sync/manager.js +1 -0
  290. package/dist/status-sync/manager.js.map +1 -0
  291. package/dist/utils/arg-parsers.d.ts +16 -0
  292. package/dist/utils/arg-parsers.js +1 -0
  293. package/dist/utils/arg-parsers.js.map +1 -0
  294. package/dist/utils/audit.d.ts +69 -0
  295. package/dist/utils/audit.js +1 -0
  296. package/dist/utils/audit.js.map +1 -0
  297. package/dist/utils/filter.d.ts +81 -0
  298. package/dist/utils/filter.js +1 -0
  299. package/dist/utils/filter.js.map +1 -0
  300. package/dist/utils/flags.d.ts +72 -0
  301. package/dist/utils/flags.js +1 -0
  302. package/dist/utils/flags.js.map +1 -0
  303. package/dist/utils/format.d.ts +9 -0
  304. package/dist/utils/format.js +1 -0
  305. package/dist/utils/format.js.map +1 -0
  306. package/dist/utils/health.d.ts +48 -0
  307. package/dist/utils/health.js +1 -0
  308. package/dist/utils/health.js.map +1 -0
  309. package/dist/utils/help-json.d.ts +39 -0
  310. package/dist/utils/help-json.js +1 -0
  311. package/dist/utils/help-json.js.map +1 -0
  312. package/dist/utils/name-resolver.d.ts +26 -0
  313. package/dist/utils/name-resolver.js +1 -0
  314. package/dist/utils/name-resolver.js.map +1 -0
  315. package/dist/utils/output.d.ts +73 -0
  316. package/dist/utils/output.js +1 -0
  317. package/dist/utils/output.js.map +1 -0
  318. package/dist/utils/quota.d.ts +61 -0
  319. package/dist/utils/quota.js +1 -0
  320. package/dist/utils/quota.js.map +1 -0
  321. package/dist/utils/redact.d.ts +23 -0
  322. package/dist/utils/redact.js +1 -0
  323. package/dist/utils/redact.js.map +1 -0
  324. package/dist/utils/retry.d.ts +72 -0
  325. package/dist/utils/retry.js +1 -0
  326. package/dist/utils/retry.js.map +1 -0
  327. package/dist/utils/string.d.ts +2 -0
  328. package/dist/utils/string.js +1 -0
  329. package/dist/utils/string.js.map +1 -0
  330. package/dist/version.d.ts +2 -0
  331. package/dist/version.js +1 -0
  332. package/dist/version.js.map +1 -0
  333. package/package.json +4 -3
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Default install steps used by `switchbot install` (Phase 3B in-repo).
3
+ *
4
+ * Each factory returns an `InstallStep<InstallContext>` whose `execute`
5
+ * and `undo` both operate on the shared context. Steps are intentionally
6
+ * small — each one either mutates one system (keychain / filesystem /
7
+ * symlink) or captures input, never a mix. The orchestrator composes
8
+ * them in `src/commands/install.ts`.
9
+ *
10
+ * The step runner (`src/install/steps.ts`) handles rollback on failure;
11
+ * these factories just make sure every `execute` records what it needs
12
+ * into the context so the matching `undo` can unwind it.
13
+ */
14
+ import type { InstallStep } from './steps.js';
15
+ import { type ScaffoldPolicyResult } from '../commands/policy.js';
16
+ import { type CredentialStore, type CredentialBundle } from '../credentials/keychain.js';
17
+ export type AgentName = 'claude-code' | 'cursor' | 'copilot' | 'none';
18
+ export interface InstallContext {
19
+ /** Profile to write credentials under (default `default`). */
20
+ profile: string;
21
+ /** Which agent to link the skill for. `none` → skip skill step. */
22
+ agent: AgentName;
23
+ /** Absolute path to a local clone of openclaw-switchbot-skill, or undefined. */
24
+ skillPath?: string;
25
+ /** Policy file path (default: from resolvePolicyPath()). */
26
+ policyPath: string;
27
+ /** Non-interactive credential file, read once and unlinked on success. */
28
+ tokenFile?: string;
29
+ /** True if stdout is not a TTY; forbids interactive prompting. */
30
+ nonInteractive?: boolean;
31
+ credentials?: CredentialBundle;
32
+ credentialStore?: CredentialStore;
33
+ credentialsWereStored?: boolean;
34
+ previousCredentials?: CredentialBundle | null;
35
+ policyScaffoldResult?: ScaffoldPolicyResult;
36
+ skillLinkPath?: string;
37
+ skillLinkCreated?: boolean;
38
+ skillRecipePrinted?: boolean;
39
+ doctorOk?: boolean;
40
+ doctorReport?: unknown;
41
+ }
42
+ export declare function stepPromptCredentials(): InstallStep<InstallContext>;
43
+ export declare function stepWriteKeychain(): InstallStep<InstallContext>;
44
+ export declare function stepScaffoldPolicy(): InstallStep<InstallContext>;
45
+ /**
46
+ * Compute the on-disk location where an agent expects to find this skill.
47
+ * Only `claude-code` has an automation path today; others are informational
48
+ * (the installer will print a recipe instead of creating anything).
49
+ */
50
+ export declare function skillLinkPathFor(agent: AgentName, home?: string): string | null;
51
+ export interface SymlinkSkillOptions {
52
+ /** When true, replace an existing symlink even if it points elsewhere. */
53
+ force?: boolean;
54
+ }
55
+ export declare function stepSymlinkSkill(opts?: SymlinkSkillOptions): InstallStep<InstallContext>;
56
+ export interface DoctorSpawnResult {
57
+ ok: boolean;
58
+ exitCode: number | null;
59
+ stdout: string;
60
+ stderr: string;
61
+ }
62
+ export type DoctorSpawner = (cliPath: string, profile: string) => DoctorSpawnResult;
63
+ export declare function stepDoctorVerify(opts?: {
64
+ cliPath: string;
65
+ spawner?: DoctorSpawner;
66
+ }): InstallStep<InstallContext>;
@@ -255,3 +255,4 @@ export function stepDoctorVerify(opts = { cliPath: '' }) {
255
255
  },
256
256
  };
257
257
  }
258
+ //# sourceMappingURL=default-steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-steps.js","sourceRoot":"","sources":["../../src/install/default-steps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Install-orchestrator pre-flight (Phase 3A · F5).
3
+ *
4
+ * Pure library — no CLI entry. Consumers (e.g. a future
5
+ * `openclaw plugins install` command) call `runPreflight()` and decide
6
+ * whether to proceed based on the returned result. Nothing here mutates
7
+ * user state: every check is read-only.
8
+ *
9
+ * The check list mirrors `docs/design/phase3-install.md` step 1 minus
10
+ * the bits that require external services (npm registry / SwitchBot API
11
+ * reachability are left for the installer itself to probe when it has
12
+ * a plan to retry, since they are the flakiest of the lot).
13
+ */
14
+ export type PreflightStatus = 'ok' | 'warn' | 'fail';
15
+ export interface PreflightCheck {
16
+ name: string;
17
+ status: PreflightStatus;
18
+ message: string;
19
+ hint?: string;
20
+ }
21
+ export interface PreflightResult {
22
+ checks: PreflightCheck[];
23
+ /** True when no check is at 'fail'. Warnings are informational. */
24
+ ok: boolean;
25
+ }
26
+ export interface PreflightOptions {
27
+ /**
28
+ * Minimum required major version of Node.js. Defaults to 18 (current
29
+ * package.json "engines.node" floor).
30
+ */
31
+ minNodeMajor?: number;
32
+ /**
33
+ * Override process.version for deterministic tests.
34
+ */
35
+ nodeVersion?: string;
36
+ /**
37
+ * Override process.platform for tests.
38
+ */
39
+ platform?: NodeJS.Platform;
40
+ /**
41
+ * Target agent. When set to `claude-code` the preflight probes that
42
+ * `~/.claude/` (or the skills directory underneath it) is writable, so
43
+ * the later symlink-skill step fails fast with a clear message.
44
+ * Unset (or `none`/`cursor`/`copilot`) skips the check.
45
+ */
46
+ agent?: 'claude-code' | 'cursor' | 'copilot' | 'none';
47
+ /**
48
+ * Whether this install run will actually attempt to create the Claude
49
+ * skill link. When false, the agent-skills-dir check is skipped even if
50
+ * agent is `claude-code` (e.g. recipe-only installs without --skill-path).
51
+ *
52
+ * Defaults to true for backward compatibility when `agent=claude-code`.
53
+ */
54
+ expectSkillLink?: boolean;
55
+ }
56
+ /**
57
+ * Run every pre-flight check and return a combined result. Safe to
58
+ * call multiple times; no state is cached.
59
+ */
60
+ export declare function runPreflight(options?: PreflightOptions): Promise<PreflightResult>;
@@ -210,3 +210,4 @@ export async function runPreflight(options = {}) {
210
210
  const ok = checks.every((c) => c.status !== 'fail');
211
211
  return { checks, ok };
212
212
  }
213
+ //# sourceMappingURL=preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/install/preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Install-orchestrator step runner (Phase 3A · F5).
3
+ *
4
+ * Each step has a deterministic `execute` and a matching `undo`. The
5
+ * runner executes steps in order; on any failure it walks the
6
+ * already-completed steps in reverse and invokes their `undo`. If an
7
+ * `undo` itself fails, the error is captured and surfaced — the
8
+ * runner does NOT abort the rollback. The caller gets a full report
9
+ * and can decide how to surface partial cleanup failures.
10
+ *
11
+ * The module is intentionally agnostic of what steps do; consumers
12
+ * (future `openclaw plugins install`) plug in concrete steps like
13
+ * "npm i -g the CLI" or "write the credential to the keychain".
14
+ */
15
+ export interface InstallStep<Ctx = unknown> {
16
+ name: string;
17
+ description?: string;
18
+ execute: (ctx: Ctx) => Promise<void> | void;
19
+ undo: (ctx: Ctx) => Promise<void> | void;
20
+ }
21
+ export type StepOutcome = {
22
+ step: string;
23
+ status: 'succeeded';
24
+ } | {
25
+ step: string;
26
+ status: 'failed';
27
+ error: string;
28
+ } | {
29
+ step: string;
30
+ status: 'rolled-back';
31
+ } | {
32
+ step: string;
33
+ status: 'rollback-failed';
34
+ error: string;
35
+ } | {
36
+ step: string;
37
+ status: 'skipped';
38
+ };
39
+ export interface InstallReport {
40
+ ok: boolean;
41
+ /** Outcome entries in execution order (execution first, then rollback). */
42
+ outcomes: StepOutcome[];
43
+ /** Name of the step that caused the rollback, if any. */
44
+ failedAt?: string;
45
+ }
46
+ export interface RunInstallOptions<Ctx> {
47
+ /** Context object passed to every step. Defaults to `{}`. */
48
+ context?: Ctx;
49
+ /**
50
+ * When set, the runner stops immediately after executing this step
51
+ * (even on success). Useful for tests that want to exercise partial
52
+ * state without needing every step to succeed.
53
+ */
54
+ stopAfter?: string;
55
+ }
56
+ /**
57
+ * Run the given steps in order. On the first failure, the runner
58
+ * walks already-executed steps in reverse and invokes each step's
59
+ * undo. Returns a report describing every step's fate.
60
+ */
61
+ export declare function runInstall<Ctx = Record<string, unknown>>(steps: InstallStep<Ctx>[], options?: RunInstallOptions<Ctx>): Promise<InstallReport>;
@@ -65,3 +65,4 @@ export async function runInstall(steps, options = {}) {
65
65
  ...(failedAt !== undefined ? { failedAt } : {}),
66
66
  };
67
67
  }
68
+ //# sourceMappingURL=steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/install/steps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAmCH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAyB,EACzB,UAAkC,EAAE;IAEpC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,IAAK,EAAU,CAAQ,CAAC;IACpD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IAExC,IAAI,QAA4B,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YACxD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,MAAM;QACR,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI;YAAE,MAAM;IAC7C,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,mEAAmE;QACnE,8DAA8D;QAC9D,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,iBAAiB;oBACzB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,EAAE,EAAE,QAAQ,KAAK,SAAS;QAC1B,QAAQ;QACR,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const COMMAND_KEYWORDS: Array<{
2
+ pattern: RegExp;
3
+ command: string;
4
+ }>;
5
+ export declare function inferCommandFromIntent(intent: string): string | undefined;
@@ -15,3 +15,4 @@ export function inferCommandFromIntent(intent) {
15
15
  }
16
16
  return undefined;
17
17
  }
18
+ //# sourceMappingURL=command-keywords.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-keywords.js","sourceRoot":"","sources":["../../src/lib/command-keywords.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAgD;IAC3E,EAAE,OAAO,EAAE,iCAAiC,EAAE,OAAO,EAAE,SAAS,EAAE;IAClE,EAAE,OAAO,EAAE,gCAAgC,EAAE,OAAO,EAAE,QAAQ,EAAE;IAChE,EAAE,OAAO,EAAE,8BAA8B,EAAE,OAAO,EAAE,OAAO,EAAE;IAC7D,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE;IACzC,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC7C,EAAE,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,MAAM,EAAE;IAC1D,EAAE,OAAO,EAAE,+BAA+B,EAAE,OAAO,EAAE,OAAO,EAAE;IAC9D,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE;CAC5C,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,CAAC,CAAC,OAAO,CAAC;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,24 @@
1
+ export declare const DAEMON_PID_FILE: string;
2
+ export declare const DAEMON_LOG_FILE: string;
3
+ export declare const DAEMON_STATE_FILE: string;
4
+ export declare const HEALTHZ_PID_FILE: string;
5
+ export interface DaemonState {
6
+ status: 'starting' | 'running' | 'stopped' | 'failed';
7
+ pid: number | null;
8
+ startedAt?: string;
9
+ stoppedAt?: string;
10
+ failedAt?: string;
11
+ failureReason?: string;
12
+ logFile: string;
13
+ pidFile: string;
14
+ stateFile: string;
15
+ healthzPid?: number | null;
16
+ healthzPort?: number | null;
17
+ healthzPidFile?: string;
18
+ lastReloadAt?: string;
19
+ lastReloadStatus?: 'ok' | 'failed';
20
+ lastReloadMessage?: string;
21
+ }
22
+ export declare function writeDaemonState(state: DaemonState): void;
23
+ export declare function readDaemonState(): DaemonState | null;
24
+ export declare function removeDaemonState(): void;
@@ -44,3 +44,4 @@ export function removeDaemonState() {
44
44
  // best effort
45
45
  }
46
46
  }
47
+ //# sourceMappingURL=daemon-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-state.js","sourceRoot":"","sources":["../../src/lib/daemon-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,mBAAmB,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,EAAE,CAAC;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,EAAE,CAAC;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,EAAE,CAAC;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,EAAE,CAAC;AAoBpD,SAAS,cAAc;IACrB,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IACjD,cAAc,EAAE,CAAC;IACjB,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function allowsDirectDestructiveExecution(profile?: string | undefined): boolean;
2
+ export declare function destructiveExecutionHint(): string;
@@ -10,3 +10,4 @@ export function allowsDirectDestructiveExecution(profile = getActiveProfile()) {
10
10
  export function destructiveExecutionHint() {
11
11
  return "Use 'switchbot plan save <file>' -> 'switchbot plan review <planId>' -> 'switchbot plan approve <planId>' -> 'switchbot plan execute <planId>' instead.";
12
12
  }
13
+ //# sourceMappingURL=destructive-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destructive-mode.js","sourceRoot":"","sources":["../../src/lib/destructive-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;AAEpE,MAAM,UAAU,gCAAgC,CAAC,OAAO,GAAG,gBAAgB,EAAE;IAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,kCAAkC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACxE,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,2BAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,yJAAyJ,CAAC;AACnK,CAAC"}
@@ -0,0 +1,151 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ import { suggestedActions, type DeviceCatalogEntry, type CommandSpec } from '../devices/catalog.js';
3
+ export interface Device {
4
+ deviceId: string;
5
+ deviceName: string;
6
+ deviceType?: string;
7
+ enableCloudService: boolean;
8
+ hubDeviceId: string;
9
+ roomID?: string;
10
+ roomName?: string | null;
11
+ familyName?: string;
12
+ controlType?: string;
13
+ }
14
+ export interface InfraredDevice {
15
+ deviceId: string;
16
+ deviceName: string;
17
+ remoteType: string;
18
+ hubDeviceId: string;
19
+ controlType?: string;
20
+ }
21
+ export interface DeviceListBody {
22
+ deviceList: Device[];
23
+ infraredRemoteList: InfraredDevice[];
24
+ }
25
+ export interface DescribeCapabilities {
26
+ role: string | null;
27
+ readOnly: boolean;
28
+ commands: CommandSpec[];
29
+ statusFields: string[];
30
+ liveStatus?: Record<string, unknown>;
31
+ }
32
+ export interface DescribeResult {
33
+ device: Device | InfraredDevice;
34
+ isPhysical: boolean;
35
+ typeName: string;
36
+ controlType: string | null;
37
+ catalog: DeviceCatalogEntry | null;
38
+ capabilities: DescribeCapabilities | {
39
+ liveStatus: Record<string, unknown>;
40
+ } | null;
41
+ source: 'catalog' | 'live' | 'catalog+live' | 'none';
42
+ suggestedActions: ReturnType<typeof suggestedActions>;
43
+ /** For IR remotes: the family/room inherited from their bound Hub. Undefined for physical devices. */
44
+ inheritedLocation?: {
45
+ family?: string;
46
+ room?: string;
47
+ roomID?: string;
48
+ };
49
+ }
50
+ export declare class DeviceNotFoundError extends Error {
51
+ readonly deviceId: string;
52
+ constructor(deviceId: string);
53
+ }
54
+ export declare class CommandValidationError extends Error {
55
+ readonly kind: 'read-only-device' | 'unknown-command' | 'unexpected-parameter' | 'missing-parameter';
56
+ readonly hint?: string | undefined;
57
+ constructor(message: string, kind: 'read-only-device' | 'unknown-command' | 'unexpected-parameter' | 'missing-parameter', hint?: string | undefined);
58
+ }
59
+ /** Fetch the full device + IR remote inventory and refresh the local cache. */
60
+ export declare function fetchDeviceList(client?: AxiosInstance): Promise<DeviceListBody>;
61
+ /** Fetch live status for a single physical device. IR remotes have no status channel. */
62
+ export declare function fetchDeviceStatus(deviceId: string, client?: AxiosInstance): Promise<Record<string, unknown>>;
63
+ /**
64
+ * Execute a command on a device. `parameter` is the fully-parsed value already
65
+ * (JSON-object when applicable), not a raw CLI string — callers should parse
66
+ * upstream if needed.
67
+ */
68
+ export declare function executeCommand(deviceId: string, cmd: string, parameter: unknown, commandType: 'command' | 'customize', client?: AxiosInstance, options?: {
69
+ idempotencyKey?: string;
70
+ planId?: string;
71
+ }): Promise<unknown>;
72
+ /**
73
+ * Validate a command against the locally-cached device → catalog mapping.
74
+ * Returns `{ ok: true }` when validation passes or is skipped (unknown device,
75
+ * custom IR button, etc.). On a case-only mismatch the canonical command name
76
+ * is returned via `normalized` along with a `caseNormalizedFrom` field so the
77
+ * caller can emit a warning and continue with the canonical name.
78
+ * Returns `{ ok: false, error }` only when the caller should refuse the call.
79
+ */
80
+ export declare function validateCommand(deviceId: string, cmd: string, parameter: string | undefined, commandType: string): {
81
+ ok: true;
82
+ normalized?: string;
83
+ caseNormalizedFrom?: string;
84
+ } | {
85
+ ok: false;
86
+ error: CommandValidationError;
87
+ };
88
+ /**
89
+ * Inspect catalog annotations to decide whether a command is destructive,
90
+ * i.e. has hard-to-reverse real-world effects and should require an explicit
91
+ * confirmation from an agent / operator before execution. Customize commands
92
+ * are considered non-destructive here — they're user-defined IR buttons
93
+ * whose behavior the catalog can't know about.
94
+ */
95
+ export declare function isDestructiveCommand(deviceType: string | undefined, cmd: string, commandType: string): boolean;
96
+ /** Return the safetyReason for a command, or null if not destructive / not found. */
97
+ export declare function getDestructiveReason(deviceType: string | undefined, cmd: string, commandType: string): string | null;
98
+ /**
99
+ * Describe a device by id: metadata + catalog entry (if known) +
100
+ * optional live status. Throws `DeviceNotFoundError` when the id is unknown.
101
+ */
102
+ export declare function describeDevice(deviceId: string, options?: {
103
+ live?: boolean;
104
+ }, client?: AxiosInstance): Promise<DescribeResult>;
105
+ /** Build a map from hubDeviceId → room/family/roomID for IR-remote inheritance. */
106
+ export declare function buildHubLocationMap(deviceList: Device[]): Map<string, {
107
+ family?: string;
108
+ room?: string;
109
+ roomID?: string;
110
+ }>;
111
+ /**
112
+ * Search the local catalog by type name / alias. Returns up to `limit`
113
+ * entries whose type or alias contains the query (case-insensitive).
114
+ * Intended for MCP's `search_catalog` tool — not for dispatching commands.
115
+ */
116
+ export declare function searchCatalog(query: string, limit?: number): DeviceCatalogEntry[];
117
+ /** Shape expected by the MCP describe_device outputSchema. */
118
+ export interface McpDescribeShape {
119
+ device: {
120
+ deviceId: string;
121
+ deviceName: string;
122
+ deviceType?: string;
123
+ enableCloudService?: boolean;
124
+ hubDeviceId?: string;
125
+ roomID?: string;
126
+ roomName?: string | null;
127
+ familyName?: string;
128
+ controlType?: string;
129
+ remoteType?: string;
130
+ };
131
+ isPhysical: boolean;
132
+ typeName: string;
133
+ controlType: string | null;
134
+ source: 'catalog' | 'live' | 'catalog+live' | 'none';
135
+ capabilities: unknown;
136
+ suggestedActions: Array<{
137
+ command: string;
138
+ parameter?: string;
139
+ description: string;
140
+ }>;
141
+ inheritedLocation?: {
142
+ family?: string;
143
+ room?: string;
144
+ };
145
+ }
146
+ /** Convert a DescribeResult to the shape validated by the MCP outputSchema. */
147
+ export declare function toMcpDescribeShape(r: DescribeResult): McpDescribeShape;
148
+ /** Shapes the device list body for the MCP list_devices outputSchema. */
149
+ export declare function toMcpDeviceListShape(d: Device): Record<string, unknown>;
150
+ /** Shapes an infrared remote for the MCP list_devices outputSchema. */
151
+ export declare function toMcpIrDeviceShape(d: InfraredDevice): Record<string, unknown>;
@@ -380,3 +380,4 @@ export function toMcpIrDeviceShape(d) {
380
380
  controlType: d.controlType,
381
381
  };
382
382
  }
383
+ //# sourceMappingURL=devices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/lib/devices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * In-memory LRU cache for idempotent request deduplication.
3
+ * Caches the outcome of a keyed operation for 60 seconds;
4
+ * duplicate keys within the window return the cached result (with a
5
+ * `replayed: true` marker). Duplicate keys within the window for a DIFFERENT
6
+ * (command, parameter) shape raise {@link IdempotencyConflictError}.
7
+ *
8
+ * Keys are stored in-memory as a SHA-256 fingerprint of the user-provided
9
+ * key — the original string never touches the Map keys, so a later heap dump
10
+ * or inadvertent log capture does not leak the raw token.
11
+ *
12
+ * Process-local only — not shared across replicas.
13
+ */
14
+ export declare class IdempotencyConflictError extends Error {
15
+ readonly key: string;
16
+ readonly existingShape: string;
17
+ readonly newShape: string;
18
+ constructor(message: string, key: string, existingShape: string, newShape: string);
19
+ }
20
+ export declare class IdempotencyCache {
21
+ private cache;
22
+ private readonly ttlMs;
23
+ private readonly maxEntries;
24
+ constructor(ttlMs?: number, maxEntries?: number);
25
+ /**
26
+ * Execute fn if the key is not cached, or return the cached result if it is.
27
+ * On new execution, caches the result for ttlMs.
28
+ *
29
+ * When `shape` is provided, a cached hit is validated against the original
30
+ * (command, parameter) fingerprint; mismatched shape raises
31
+ * {@link IdempotencyConflictError}.
32
+ *
33
+ * Returns a tuple-esque object with `replayed: true` when the cached
34
+ * result is served. The `result` field is the original cached value.
35
+ */
36
+ run<T>(key: string | undefined, fn: () => Promise<T>, shape?: {
37
+ command: string;
38
+ parameter: unknown;
39
+ }): Promise<{
40
+ result: T;
41
+ replayed: boolean;
42
+ }>;
43
+ clear(): void;
44
+ size(): number;
45
+ }
46
+ export declare const idempotencyCache: IdempotencyCache;
@@ -104,3 +104,4 @@ export class IdempotencyCache {
104
104
  }
105
105
  }
106
106
  export const idempotencyCache = new IdempotencyCache();
107
+ //# sourceMappingURL=idempotency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/lib/idempotency.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Plan } from '../commands/plan.js';
2
+ export declare const PLANS_DIR: string;
3
+ export type PlanStatus = 'pending' | 'approved' | 'rejected' | 'executed' | 'failed';
4
+ export interface PlanRecord {
5
+ planId: string;
6
+ createdAt: string;
7
+ status: PlanStatus;
8
+ approvedAt?: string;
9
+ executedAt?: string;
10
+ /** Set when status transitions to 'failed'. */
11
+ failedAt?: string;
12
+ /** Summary of why the plan failed (e.g. "1 error, 2 skipped"). */
13
+ failureReason?: string;
14
+ plan: Plan;
15
+ }
16
+ export declare function savePlanRecord(plan: Plan): PlanRecord;
17
+ export declare function loadPlanRecord(planId: string): PlanRecord | null;
18
+ export declare function updatePlanRecord(planId: string, updates: Partial<PlanRecord>): PlanRecord;
19
+ export declare function listPlanRecords(): PlanRecord[];
@@ -66,3 +66,4 @@ export function listPlanRecords() {
66
66
  return [];
67
67
  }
68
68
  }
69
+ //# sourceMappingURL=plan-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-store.js","sourceRoot":"","sources":["../../src/lib/plan-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ export interface RequestContext {
3
+ profile?: string;
4
+ }
5
+ export declare const requestContext: AsyncLocalStorage<RequestContext>;
6
+ export declare function withRequestContext<T>(ctx: RequestContext, fn: () => T): T;
7
+ export declare function getActiveProfile(): string | undefined;
@@ -10,3 +10,4 @@ export function getActiveProfile() {
10
10
  return ctx.profile;
11
11
  return getProfile();
12
12
  }
13
+ //# sourceMappingURL=request-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.js","sourceRoot":"","sources":["../../src/lib/request-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAM/C,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAkB,CAAC;AAEtE,MAAM,UAAU,kBAAkB,CAAI,GAAmB,EAAE,EAAW;IACpE,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;IACtC,IAAI,GAAG,EAAE,OAAO,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IACnD,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ export interface Scene {
3
+ sceneId: string;
4
+ sceneName: string;
5
+ }
6
+ export declare function fetchScenes(client?: AxiosInstance): Promise<Scene[]>;
7
+ export declare function executeScene(sceneId: string, client?: AxiosInstance): Promise<void>;
@@ -8,3 +8,4 @@ export async function executeScene(sceneId, client) {
8
8
  const c = client ?? createClient();
9
9
  await c.post(`/v1.1/scenes/${sceneId}/execute`);
10
10
  }
11
+ //# sourceMappingURL=scenes.js.map