@elizaos/plugin-elizacloud 2.0.0-beta.1 → 2.0.3-beta.3

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 (338) hide show
  1. package/README.md +20 -44
  2. package/auto-enable.ts +10 -5
  3. package/dist/browser/index.browser.js +2 -2
  4. package/dist/browser/index.browser.js.map +4 -4
  5. package/dist/cjs/index.node.cjs +2918 -5924
  6. package/dist/cjs/index.node.js.map +47 -116
  7. package/dist/cloud/auth-service-types.d.ts +8 -0
  8. package/dist/cloud/auth-service-types.d.ts.map +1 -0
  9. package/dist/cloud/auth-service-types.js +36 -0
  10. package/dist/cloud/auth-service-types.js.map +10 -0
  11. package/dist/cloud/auth.js +4 -51
  12. package/dist/cloud/auth.js.map +4 -4
  13. package/dist/cloud/backup.js +1 -1
  14. package/dist/cloud/backup.js.map +1 -1
  15. package/dist/cloud/base-url.d.ts +6 -2
  16. package/dist/cloud/base-url.d.ts.map +1 -1
  17. package/dist/cloud/base-url.js +3 -51
  18. package/dist/cloud/base-url.js.map +3 -3
  19. package/dist/cloud/bridge-client.d.ts +3 -3
  20. package/dist/cloud/bridge-client.d.ts.map +1 -1
  21. package/dist/cloud/bridge-client.js +3 -51
  22. package/dist/cloud/bridge-client.js.map +3 -3
  23. package/dist/cloud/clack-observer.d.ts +35 -0
  24. package/dist/cloud/clack-observer.d.ts.map +1 -0
  25. package/dist/cloud/clack-observer.js +143 -0
  26. package/dist/cloud/clack-observer.js.map +10 -0
  27. package/dist/cloud/cloud-api-key.js +1 -1
  28. package/dist/cloud/cloud-api-key.js.map +1 -1
  29. package/dist/cloud/cloud-manager.js +45 -92
  30. package/dist/cloud/cloud-manager.js.map +6 -6
  31. package/dist/cloud/cloud-proxy.js +1 -1
  32. package/dist/cloud/cloud-proxy.js.map +1 -1
  33. package/dist/cloud/cloud-wallet.js +2 -4835
  34. package/dist/cloud/cloud-wallet.js.map +3 -82
  35. package/dist/cloud/duffel-client.d.ts +181 -0
  36. package/dist/cloud/duffel-client.d.ts.map +1 -0
  37. package/dist/cloud/duffel-client.js +506 -0
  38. package/dist/cloud/duffel-client.js.map +11 -0
  39. package/dist/cloud/index.d.ts +6 -0
  40. package/dist/cloud/index.d.ts.map +1 -1
  41. package/dist/cloud/index.js +1782 -1
  42. package/dist/cloud/index.js.map +18 -3
  43. package/dist/cloud/lifeops-schedule-sync-client.d.ts +43 -0
  44. package/dist/cloud/lifeops-schedule-sync-client.d.ts.map +1 -0
  45. package/dist/cloud/lifeops-schedule-sync-client.js +180 -0
  46. package/dist/cloud/lifeops-schedule-sync-client.js.map +11 -0
  47. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts +89 -0
  48. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts.map +1 -0
  49. package/dist/cloud/lifeops-schedule-sync-contracts.js +39 -0
  50. package/dist/cloud/lifeops-schedule-sync-contracts.js.map +10 -0
  51. package/dist/cloud/managed-payment-clients.d.ts +166 -0
  52. package/dist/cloud/managed-payment-clients.d.ts.map +1 -0
  53. package/dist/cloud/managed-payment-clients.js +238 -0
  54. package/dist/cloud/managed-payment-clients.js.map +11 -0
  55. package/dist/cloud/null-observer.d.ts +35 -0
  56. package/dist/cloud/null-observer.d.ts.map +1 -0
  57. package/dist/cloud/null-observer.js +45 -0
  58. package/dist/cloud/null-observer.js.map +10 -0
  59. package/dist/cloud/reconnect.js +1 -1
  60. package/dist/cloud/reconnect.js.map +1 -1
  61. package/dist/cloud/setup-observer.d.ts +98 -0
  62. package/dist/cloud/setup-observer.d.ts.map +1 -0
  63. package/dist/cloud/setup-observer.js +2 -0
  64. package/dist/cloud/setup-observer.js.map +9 -0
  65. package/dist/cloud/validate-url.d.ts.map +1 -1
  66. package/dist/cloud/validate-url.js +2 -1
  67. package/dist/cloud/validate-url.js.map +3 -3
  68. package/dist/cloud/x402-payment-handler.d.ts +85 -0
  69. package/dist/cloud/x402-payment-handler.d.ts.map +1 -0
  70. package/dist/cloud/x402-payment-handler.js +119 -0
  71. package/dist/cloud/x402-payment-handler.js.map +10 -0
  72. package/dist/cloud-providers/cloud-status.js +1 -1
  73. package/dist/cloud-providers/cloud-status.js.map +1 -1
  74. package/dist/cloud-providers/container-health.js +1 -1
  75. package/dist/cloud-providers/container-health.js.map +1 -1
  76. package/dist/cloud-providers/credit-balance.js +1 -1
  77. package/dist/cloud-providers/credit-balance.js.map +1 -1
  78. package/dist/cloud-providers/index.js +1 -1
  79. package/dist/cloud-providers/index.js.map +1 -1
  80. package/dist/cloud-providers/model-registry.js +1 -1
  81. package/dist/cloud-providers/model-registry.js.map +1 -1
  82. package/dist/cloud-setup.d.ts +36 -0
  83. package/dist/cloud-setup.d.ts.map +1 -0
  84. package/dist/{onboarding.js → cloud-setup.js} +139 -139
  85. package/dist/cloud-setup.js.map +14 -0
  86. package/dist/cloud-voice-catalog.d.ts +65 -0
  87. package/dist/cloud-voice-catalog.d.ts.map +1 -0
  88. package/dist/cloud-voice-catalog.js +278 -0
  89. package/dist/cloud-voice-catalog.js.map +12 -0
  90. package/dist/index.browser.d.ts +11 -0
  91. package/dist/index.browser.d.ts.map +1 -1
  92. package/dist/index.d.ts +7 -1
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +5458 -8412
  95. package/dist/index.js.map +48 -116
  96. package/dist/index.node.d.ts +8 -1
  97. package/dist/index.node.d.ts.map +1 -1
  98. package/dist/init.js +17 -4
  99. package/dist/init.js.map +4 -4
  100. package/dist/lib/cloud-connection.d.ts +0 -1
  101. package/dist/lib/cloud-connection.d.ts.map +1 -1
  102. package/dist/lib/cloud-connection.js +14 -91
  103. package/dist/lib/cloud-connection.js.map +7 -7
  104. package/dist/lib/cloud-secrets.d.ts +5 -18
  105. package/dist/lib/cloud-secrets.d.ts.map +1 -1
  106. package/dist/lib/cloud-secrets.js +8 -36
  107. package/dist/lib/cloud-secrets.js.map +3 -3
  108. package/dist/lib/config-env.js +1 -1
  109. package/dist/lib/config-env.js.map +1 -1
  110. package/dist/lib/config-like.d.ts +1 -1
  111. package/dist/lib/config-like.d.ts.map +1 -1
  112. package/dist/lib/config-like.js +3 -3
  113. package/dist/lib/config-like.js.map +3 -3
  114. package/dist/lib/credential-type-map.d.ts +1 -1
  115. package/dist/lib/credential-type-map.js +1 -1
  116. package/dist/lib/credential-type-map.js.map +2 -2
  117. package/dist/lib/feature-flags.js +1 -1
  118. package/dist/lib/feature-flags.js.map +1 -1
  119. package/dist/lib/http.d.ts +0 -11
  120. package/dist/lib/http.d.ts.map +1 -1
  121. package/dist/lib/http.js +1 -1
  122. package/dist/lib/http.js.map +3 -3
  123. package/dist/lib/server-cloud-tts.d.ts +12 -25
  124. package/dist/lib/server-cloud-tts.d.ts.map +1 -1
  125. package/dist/lib/server-cloud-tts.js +31 -329
  126. package/dist/lib/server-cloud-tts.js.map +4 -7
  127. package/dist/lib/state-paths.js +1 -1
  128. package/dist/lib/state-paths.js.map +1 -1
  129. package/dist/lib/tts-debug.d.ts +5 -3
  130. package/dist/lib/tts-debug.d.ts.map +1 -1
  131. package/dist/lib/tts-debug.js +1 -34
  132. package/dist/lib/tts-debug.js.map +3 -4
  133. package/dist/models/embeddings.d.ts +7 -0
  134. package/dist/models/embeddings.d.ts.map +1 -1
  135. package/dist/models/embeddings.js +98 -73
  136. package/dist/models/embeddings.js.map +6 -6
  137. package/dist/models/image.d.ts.map +1 -1
  138. package/dist/models/image.js +42 -15
  139. package/dist/models/image.js.map +6 -6
  140. package/dist/models/index.js +719 -175
  141. package/dist/models/index.js.map +11 -12
  142. package/dist/models/research.d.ts.map +1 -1
  143. package/dist/models/research.js +24 -7
  144. package/dist/models/research.js.map +6 -6
  145. package/dist/models/speech.d.ts +61 -3
  146. package/dist/models/speech.d.ts.map +1 -1
  147. package/dist/models/speech.js +173 -17
  148. package/dist/models/speech.js.map +5 -5
  149. package/dist/models/text.d.ts +114 -1
  150. package/dist/models/text.d.ts.map +1 -1
  151. package/dist/models/text.js +481 -88
  152. package/dist/models/text.js.map +7 -8
  153. package/dist/models/tokenization.d.ts.map +1 -1
  154. package/dist/models/tokenization.js +1 -1
  155. package/dist/models/tokenization.js.map +3 -3
  156. package/dist/models/transcription.d.ts.map +1 -1
  157. package/dist/models/transcription.js +20 -6
  158. package/dist/models/transcription.js.map +5 -5
  159. package/dist/node/index.node.js +2872 -5847
  160. package/dist/node/index.node.js.map +47 -116
  161. package/dist/plugin.d.ts.map +1 -1
  162. package/dist/plugin.js +376 -5050
  163. package/dist/plugin.js.map +16 -92
  164. package/dist/providers/openai.js +11 -2
  165. package/dist/providers/openai.js.map +3 -3
  166. package/dist/register-routes.js +376 -5050
  167. package/dist/register-routes.js.map +16 -92
  168. package/dist/routes/cloud-billing-routes.d.ts.map +1 -1
  169. package/dist/routes/cloud-billing-routes.js +17 -60
  170. package/dist/routes/cloud-billing-routes.js.map +8 -7
  171. package/dist/routes/cloud-coding-container-routes.d.ts +8 -0
  172. package/dist/routes/cloud-coding-container-routes.d.ts.map +1 -0
  173. package/dist/routes/cloud-coding-container-routes.js +214 -0
  174. package/dist/routes/cloud-coding-container-routes.js.map +11 -0
  175. package/dist/routes/cloud-compat-routes.d.ts.map +1 -1
  176. package/dist/routes/cloud-compat-routes.js +17 -60
  177. package/dist/routes/cloud-compat-routes.js.map +8 -7
  178. package/dist/routes/cloud-features-routes.js +2 -2
  179. package/dist/routes/cloud-features-routes.js.map +4 -4
  180. package/dist/routes/cloud-provisioning.js +1 -1
  181. package/dist/routes/cloud-provisioning.js.map +1 -1
  182. package/dist/routes/cloud-relay-routes.d.ts +2 -1
  183. package/dist/routes/cloud-relay-routes.d.ts.map +1 -1
  184. package/dist/routes/cloud-relay-routes.js +84 -2
  185. package/dist/routes/cloud-relay-routes.js.map +5 -4
  186. package/dist/routes/cloud-routes-autonomous.d.ts +3 -4
  187. package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -1
  188. package/dist/routes/cloud-routes-autonomous.js +11 -4893
  189. package/dist/routes/cloud-routes-autonomous.js.map +8 -87
  190. package/dist/routes/cloud-routes.d.ts +2 -2
  191. package/dist/routes/cloud-routes.d.ts.map +1 -1
  192. package/dist/routes/cloud-routes.js +343 -5058
  193. package/dist/routes/cloud-routes.js.map +13 -90
  194. package/dist/routes/cloud-status-routes-autonomous.d.ts +1 -2
  195. package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -1
  196. package/dist/routes/cloud-status-routes-autonomous.js +4 -51
  197. package/dist/routes/cloud-status-routes-autonomous.js.map +5 -5
  198. package/dist/routes/cloud-status-routes.js +14 -90
  199. package/dist/routes/cloud-status-routes.js.map +7 -7
  200. package/dist/routes/home-remote-runner-access-url.d.ts +16 -0
  201. package/dist/routes/home-remote-runner-access-url.d.ts.map +1 -0
  202. package/dist/routes/home-remote-runner-access-url.js +91 -0
  203. package/dist/routes/home-remote-runner-access-url.js.map +10 -0
  204. package/dist/routes/travel-provider-relay-routes.d.ts +9 -0
  205. package/dist/routes/travel-provider-relay-routes.d.ts.map +1 -0
  206. package/dist/routes/travel-provider-relay-routes.js +358 -0
  207. package/dist/routes/travel-provider-relay-routes.js.map +14 -0
  208. package/dist/services/cloud-auth.d.ts +1 -1
  209. package/dist/services/cloud-auth.d.ts.map +1 -1
  210. package/dist/services/cloud-auth.js +7 -2
  211. package/dist/services/cloud-auth.js.map +4 -4
  212. package/dist/services/cloud-backup.js +1 -1
  213. package/dist/services/cloud-backup.js.map +3 -3
  214. package/dist/services/cloud-bootstrap.d.ts.map +1 -1
  215. package/dist/services/cloud-bootstrap.js +1 -1
  216. package/dist/services/cloud-bootstrap.js.map +3 -3
  217. package/dist/services/cloud-bridge.js +1 -1
  218. package/dist/services/cloud-bridge.js.map +4 -4
  219. package/dist/services/cloud-container.d.ts +5 -1
  220. package/dist/services/cloud-container.d.ts.map +1 -1
  221. package/dist/services/cloud-container.js +52 -1
  222. package/dist/services/cloud-container.js.map +4 -4
  223. package/dist/services/cloud-credential-provider.js +1 -1
  224. package/dist/services/cloud-credential-provider.js.map +3 -3
  225. package/dist/services/cloud-managed-gateway-relay.js +1 -1
  226. package/dist/services/cloud-managed-gateway-relay.js.map +1 -1
  227. package/dist/services/cloud-model-registry.js +1 -1
  228. package/dist/services/cloud-model-registry.js.map +3 -3
  229. package/dist/services/index.js +1 -1
  230. package/dist/services/index.js.map +1 -1
  231. package/dist/types/cloud.d.ts +1 -0
  232. package/dist/types/cloud.d.ts.map +1 -1
  233. package/dist/types/cloud.js +1 -1
  234. package/dist/types/cloud.js.map +3 -3
  235. package/dist/types/index.d.ts +1 -1
  236. package/dist/types/index.d.ts.map +1 -1
  237. package/dist/types/index.js +1 -1
  238. package/dist/types/index.js.map +1 -1
  239. package/dist/utils/cloud-api.js +1 -1
  240. package/dist/utils/cloud-api.js.map +1 -1
  241. package/dist/utils/cloud-sdk/client.d.ts.map +1 -1
  242. package/dist/utils/cloud-sdk/client.js +136 -4
  243. package/dist/utils/cloud-sdk/client.js.map +5 -5
  244. package/dist/utils/cloud-sdk/http.js +1 -1
  245. package/dist/utils/cloud-sdk/http.js.map +2 -2
  246. package/dist/utils/cloud-sdk/index.js +1 -1
  247. package/dist/utils/cloud-sdk/index.js.map +1 -1
  248. package/dist/utils/cloud-sdk/public-routes.d.ts +186 -0
  249. package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -1
  250. package/dist/utils/cloud-sdk/public-routes.js +99 -1
  251. package/dist/utils/cloud-sdk/public-routes.js.map +3 -3
  252. package/dist/utils/cloud-sdk/types.d.ts +0 -2
  253. package/dist/utils/cloud-sdk/types.d.ts.map +1 -1
  254. package/dist/utils/cloud-sdk/types.js +1 -1
  255. package/dist/utils/cloud-sdk/types.js.map +2 -2
  256. package/dist/utils/config.d.ts +10 -1
  257. package/dist/utils/config.d.ts.map +1 -1
  258. package/dist/utils/config.js +12 -2
  259. package/dist/utils/config.js.map +3 -3
  260. package/dist/utils/events.d.ts +23 -2
  261. package/dist/utils/events.d.ts.map +1 -1
  262. package/dist/utils/events.js +5 -3
  263. package/dist/utils/events.js.map +3 -3
  264. package/dist/utils/helpers.js +1 -1
  265. package/dist/utils/helpers.js.map +1 -1
  266. package/dist/utils/responses-output.js +1 -1
  267. package/dist/utils/responses-output.js.map +1 -1
  268. package/dist/utils/sdk-client.d.ts.map +1 -1
  269. package/dist/utils/sdk-client.js +17 -4
  270. package/dist/utils/sdk-client.js.map +4 -4
  271. package/dist/utils/waifu-metering.d.ts +108 -0
  272. package/dist/utils/waifu-metering.d.ts.map +1 -0
  273. package/dist/utils/waifu-metering.js +166 -0
  274. package/dist/utils/waifu-metering.js.map +10 -0
  275. package/package.json +52 -22
  276. package/registry-entry.json +208 -0
  277. package/src/cloud/auth-service-types.ts +24 -0
  278. package/src/cloud/base-url.ts +6 -62
  279. package/src/cloud/clack-observer.ts +189 -0
  280. package/src/cloud/duffel-client.ts +847 -0
  281. package/src/cloud/index.ts +10 -0
  282. package/src/cloud/lifeops-schedule-sync-client.ts +245 -0
  283. package/src/cloud/lifeops-schedule-sync-contracts.ts +124 -0
  284. package/src/cloud/managed-payment-clients.ts +374 -0
  285. package/src/cloud/null-observer.ts +45 -0
  286. package/src/cloud/setup-observer.ts +125 -0
  287. package/src/cloud/validate-url.ts +7 -1
  288. package/src/cloud/x402-payment-handler.ts +215 -0
  289. package/src/cloud-setup.ts +531 -0
  290. package/src/cloud-voice-catalog.test.ts +254 -0
  291. package/src/cloud-voice-catalog.ts +246 -0
  292. package/src/index.browser.ts +29 -0
  293. package/src/index.node.ts +31 -1
  294. package/src/index.ts +81 -4
  295. package/src/lib/cloud-connection.ts +2 -4
  296. package/src/lib/cloud-secrets.ts +10 -54
  297. package/src/lib/config-like.ts +1 -1
  298. package/src/lib/credential-type-map.ts +2 -2
  299. package/src/lib/http.ts +0 -17
  300. package/src/lib/server-cloud-tts.ts +33 -341
  301. package/src/lib/tts-debug.ts +5 -34
  302. package/src/models/embeddings.ts +187 -78
  303. package/src/models/image.ts +29 -14
  304. package/src/models/research.ts +11 -1
  305. package/src/models/speech.ts +269 -23
  306. package/src/models/text.ts +756 -114
  307. package/src/models/tokenization.ts +2 -2
  308. package/src/models/transcription.ts +7 -3
  309. package/src/plugin.ts +38 -0
  310. package/src/routes/cloud-billing-routes.ts +4 -14
  311. package/src/routes/cloud-coding-container-routes.ts +198 -0
  312. package/src/routes/cloud-compat-routes.ts +4 -14
  313. package/src/routes/cloud-features-routes.ts +1 -1
  314. package/src/routes/cloud-relay-routes.ts +47 -1
  315. package/src/routes/cloud-routes-autonomous.ts +7 -10
  316. package/src/routes/cloud-routes.ts +68 -7
  317. package/src/routes/cloud-status-routes-autonomous.ts +6 -2
  318. package/src/routes/home-remote-runner-access-url.ts +83 -0
  319. package/src/routes/travel-provider-relay-routes.ts +193 -0
  320. package/src/services/cloud-auth.ts +9 -2
  321. package/src/services/cloud-bootstrap.ts +1 -3
  322. package/src/services/cloud-bridge.ts +1 -1
  323. package/src/services/cloud-container.ts +93 -0
  324. package/src/services/cloud-credential-provider.ts +1 -1
  325. package/src/services/cloud-model-registry.ts +1 -1
  326. package/src/types/cloud.ts +22 -0
  327. package/src/types/index.ts +19 -0
  328. package/src/utils/cloud-sdk/client.ts +42 -3
  329. package/src/utils/cloud-sdk/public-routes.ts +168 -0
  330. package/src/utils/cloud-sdk/types.ts +0 -2
  331. package/src/utils/config.ts +20 -1
  332. package/src/utils/events.ts +30 -2
  333. package/src/utils/sdk-client.ts +5 -1
  334. package/src/utils/waifu-metering.ts +302 -0
  335. package/dist/onboarding.d.ts +0 -35
  336. package/dist/onboarding.d.ts.map +0 -1
  337. package/dist/onboarding.js.map +0 -14
  338. package/src/onboarding.ts +0 -396
@@ -4,10 +4,18 @@ export {
4
4
  cloudLogin,
5
5
  } from "./auth.js";
6
6
  export { BackupScheduler } from "./backup.js";
7
+ export {
8
+ isCloudAuthApiKeyService,
9
+ normalizeCloudApiKey,
10
+ type CloudAuthApiKeyService,
11
+ } from "./auth-service-types.js";
7
12
  export {
8
13
  normalizeCloudSiteUrl,
9
14
  resolveCloudApiBaseUrl,
10
15
  } from "./base-url.js";
16
+ export * from "./duffel-client.js";
17
+ export * from "./lifeops-schedule-sync-client.js";
18
+ export * from "./lifeops-schedule-sync-contracts.js";
11
19
  export {
12
20
  type BackupInfo,
13
21
  type CloudAgent,
@@ -21,6 +29,8 @@ export {
21
29
  type CloudManagerCallbacks,
22
30
  } from "./cloud-manager.js";
23
31
  export { CloudRuntimeProxy } from "./cloud-proxy.js";
32
+ export * from "./managed-payment-clients.js";
33
+ export * from "./x402-payment-handler.js";
24
34
  export {
25
35
  ConnectionMonitor,
26
36
  type ConnectionMonitorCallbacks,
@@ -0,0 +1,245 @@
1
+ import {
2
+ normalizeCloudSiteUrl,
3
+ resolveCloudApiBaseUrl,
4
+ } from "./base-url.js";
5
+ import type {
6
+ GetLifeOpsScheduleMergedStateResponse,
7
+ SyncLifeOpsScheduleObservationsRequest,
8
+ SyncLifeOpsScheduleObservationsResponse,
9
+ } from "./lifeops-schedule-sync-contracts.js";
10
+
11
+ const LIFEOPS_SCHEDULE_REQUEST_TIMEOUT_MS = 20_000;
12
+
13
+ export class LifeOpsScheduleSyncClientError extends Error {
14
+ constructor(
15
+ public readonly status: number,
16
+ message: string,
17
+ ) {
18
+ super(message);
19
+ this.name = "LifeOpsScheduleSyncClientError";
20
+ }
21
+ }
22
+
23
+ export type ResolvedLifeOpsScheduleSyncConfig =
24
+ | {
25
+ configured: false;
26
+ mode: "none";
27
+ }
28
+ | {
29
+ configured: true;
30
+ mode: "remote";
31
+ baseUrl: string;
32
+ accessToken: string | null;
33
+ }
34
+ | {
35
+ configured: true;
36
+ mode: "cloud";
37
+ apiBaseUrl: string;
38
+ apiKey: string;
39
+ agentId: string;
40
+ };
41
+
42
+ export interface LifeOpsScheduleSyncConfigInput {
43
+ remoteApiBase?: string | null;
44
+ remoteAccessToken?: string | null;
45
+ apiKey?: string | null;
46
+ baseUrl?: string | null;
47
+ agentId?: string | null;
48
+ }
49
+
50
+ function normalizeOptionalString(value: string | null | undefined): string | null {
51
+ const trimmed = value?.trim();
52
+ return trimmed && trimmed.length > 0 ? trimmed : null;
53
+ }
54
+
55
+ export function normalizeLifeOpsScheduleSyncSecret(
56
+ value: string | null | undefined,
57
+ ): string | null {
58
+ const trimmed = normalizeOptionalString(value);
59
+ if (!trimmed) {
60
+ return null;
61
+ }
62
+ return trimmed.toUpperCase() === "[REDACTED]" ? null : trimmed;
63
+ }
64
+
65
+ export function resolveLifeOpsScheduleSyncConfig(
66
+ config: LifeOpsScheduleSyncConfigInput = {},
67
+ ): ResolvedLifeOpsScheduleSyncConfig {
68
+ const remoteApiBase = normalizeOptionalString(config.remoteApiBase);
69
+ if (remoteApiBase) {
70
+ return {
71
+ configured: true,
72
+ mode: "remote",
73
+ baseUrl: remoteApiBase.replace(/\/+$/, ""),
74
+ accessToken:
75
+ normalizeLifeOpsScheduleSyncSecret(config.remoteAccessToken) ??
76
+ normalizeLifeOpsScheduleSyncSecret(process.env.ELIZA_REMOTE_ACCESS_TOKEN),
77
+ };
78
+ }
79
+
80
+ const apiKey =
81
+ normalizeLifeOpsScheduleSyncSecret(config.apiKey) ??
82
+ normalizeLifeOpsScheduleSyncSecret(process.env.ELIZAOS_CLOUD_API_KEY);
83
+ const agentId =
84
+ normalizeLifeOpsScheduleSyncSecret(config.agentId) ??
85
+ normalizeLifeOpsScheduleSyncSecret(process.env.ELIZAOS_CLOUD_AGENT_ID);
86
+ if (!apiKey || !agentId) {
87
+ return {
88
+ configured: false,
89
+ mode: "none",
90
+ };
91
+ }
92
+
93
+ return {
94
+ configured: true,
95
+ mode: "cloud",
96
+ apiBaseUrl: resolveCloudApiBaseUrl(
97
+ normalizeOptionalString(config.baseUrl) ?? process.env.ELIZAOS_CLOUD_BASE_URL,
98
+ ),
99
+ apiKey,
100
+ agentId,
101
+ };
102
+ }
103
+
104
+ function buildTimeoutSignal(): AbortSignal {
105
+ return AbortSignal.timeout(LIFEOPS_SCHEDULE_REQUEST_TIMEOUT_MS);
106
+ }
107
+
108
+ async function readJsonResponse<T>(response: Response): Promise<T> {
109
+ if (!response.ok) {
110
+ let detail = `${response.status} ${response.statusText}`.trim();
111
+ const text = await response.text();
112
+ const trimmed = text.trim();
113
+ if (trimmed.length > 0) {
114
+ try {
115
+ const parsed = JSON.parse(trimmed) as {
116
+ error?: string;
117
+ message?: string;
118
+ };
119
+ detail = parsed.message ?? parsed.error ?? trimmed;
120
+ } catch {
121
+ detail = trimmed.slice(0, 200);
122
+ }
123
+ }
124
+ throw new LifeOpsScheduleSyncClientError(response.status, detail);
125
+ }
126
+ return (await response.json()) as T;
127
+ }
128
+
129
+ export function resolveLifeOpsScheduleSyncSiteUrl(rawUrl?: string): string {
130
+ return normalizeCloudSiteUrl(rawUrl);
131
+ }
132
+
133
+ export class LifeOpsScheduleSyncClient {
134
+ constructor(
135
+ private readonly configSource:
136
+ | ResolvedLifeOpsScheduleSyncConfig
137
+ | (() => ResolvedLifeOpsScheduleSyncConfig) =
138
+ resolveLifeOpsScheduleSyncConfig,
139
+ ) {}
140
+
141
+ private getConfig(): ResolvedLifeOpsScheduleSyncConfig {
142
+ return typeof this.configSource === "function"
143
+ ? this.configSource()
144
+ : this.configSource;
145
+ }
146
+
147
+ get configured(): boolean {
148
+ return this.getConfig().configured;
149
+ }
150
+
151
+ private requireConfig(): Exclude<
152
+ ResolvedLifeOpsScheduleSyncConfig,
153
+ { configured: false }
154
+ > {
155
+ const config = this.getConfig();
156
+ if (!config.configured) {
157
+ throw new LifeOpsScheduleSyncClientError(
158
+ 409,
159
+ "LifeOps schedule sync is not configured.",
160
+ );
161
+ }
162
+ return config;
163
+ }
164
+
165
+ private resolvePath(pathname: string): string {
166
+ const config = this.requireConfig();
167
+ const normalizedPath = pathname.replace(/^\/+/, "");
168
+ if (config.mode === "remote") {
169
+ return new URL(
170
+ `api/lifeops/schedule/${normalizedPath}`,
171
+ `${config.baseUrl.replace(/\/+$/, "")}/`,
172
+ ).toString();
173
+ }
174
+ return new URL(
175
+ `eliza/agents/${encodeURIComponent(config.agentId)}/lifeops/schedule/${normalizedPath}`,
176
+ `${config.apiBaseUrl.replace(/\/+$/, "")}/`,
177
+ ).toString();
178
+ }
179
+
180
+ private requestHeaders(
181
+ initHeaders: HeadersInit | undefined,
182
+ ): Record<string, string> {
183
+ const config = this.requireConfig();
184
+ const headers: Record<string, string> = {
185
+ Accept: "application/json",
186
+ "Content-Type": "application/json",
187
+ };
188
+ if (config.mode === "cloud") {
189
+ headers["X-API-Key"] = config.apiKey;
190
+ }
191
+ if (config.mode === "remote" && config.accessToken) {
192
+ headers.Authorization = `Bearer ${config.accessToken}`;
193
+ }
194
+ if (initHeaders instanceof Headers) {
195
+ for (const [key, value] of initHeaders.entries()) {
196
+ headers[key] = value;
197
+ }
198
+ return headers;
199
+ }
200
+ if (Array.isArray(initHeaders)) {
201
+ for (const [key, value] of initHeaders) {
202
+ headers[key] = value;
203
+ }
204
+ return headers;
205
+ }
206
+ return {
207
+ ...headers,
208
+ ...(initHeaders ?? {}),
209
+ };
210
+ }
211
+
212
+ private async request<T>(pathname: string, init: RequestInit): Promise<T> {
213
+ const response = await fetch(this.resolvePath(pathname), {
214
+ ...init,
215
+ headers: this.requestHeaders(init.headers),
216
+ signal: init.signal ?? buildTimeoutSignal(),
217
+ });
218
+ return readJsonResponse<T>(response);
219
+ }
220
+
221
+ async syncObservations(
222
+ request: SyncLifeOpsScheduleObservationsRequest,
223
+ ): Promise<SyncLifeOpsScheduleObservationsResponse> {
224
+ return this.request<SyncLifeOpsScheduleObservationsResponse>(
225
+ "observations",
226
+ {
227
+ method: "POST",
228
+ body: JSON.stringify(request),
229
+ },
230
+ );
231
+ }
232
+
233
+ async getMergedState(
234
+ timezone: string,
235
+ scope: "local" | "cloud" | "effective" = "cloud",
236
+ ): Promise<GetLifeOpsScheduleMergedStateResponse> {
237
+ const query = new URLSearchParams({ timezone, scope });
238
+ return this.request<GetLifeOpsScheduleMergedStateResponse>(
239
+ `merged-state?${query.toString()}`,
240
+ {
241
+ method: "GET",
242
+ },
243
+ );
244
+ }
245
+ }
@@ -0,0 +1,124 @@
1
+ import type {
2
+ LifeOpsAwakeProbability,
3
+ LifeOpsCircadianState,
4
+ LifeOpsPersonalBaseline,
5
+ LifeOpsRelativeTime,
6
+ LifeOpsScheduleInsight,
7
+ LifeOpsScheduleMealLabel,
8
+ LifeOpsScheduleRegularity,
9
+ LifeOpsScheduleSleepStatus,
10
+ LifeOpsUnclearReason,
11
+ } from "@elizaos/shared";
12
+
13
+ export const LIFEOPS_SCHEDULE_DEVICE_KINDS = [
14
+ "iphone",
15
+ "ipad",
16
+ "mac",
17
+ "watch",
18
+ "cloud",
19
+ "unknown",
20
+ ] as const;
21
+
22
+ export type LifeOpsScheduleDeviceKind =
23
+ (typeof LIFEOPS_SCHEDULE_DEVICE_KINDS)[number];
24
+
25
+ export const LIFEOPS_SCHEDULE_OBSERVATION_ORIGINS = [
26
+ "local_inference",
27
+ "device_sync",
28
+ ] as const;
29
+
30
+ export type LifeOpsScheduleObservationOrigin =
31
+ (typeof LIFEOPS_SCHEDULE_OBSERVATION_ORIGINS)[number];
32
+
33
+ export const LIFEOPS_SCHEDULE_STATE_SCOPES = ["local", "cloud"] as const;
34
+
35
+ export type LifeOpsScheduleStateScope =
36
+ (typeof LIFEOPS_SCHEDULE_STATE_SCOPES)[number];
37
+
38
+ export interface LifeOpsScheduleObservationSnapshot {
39
+ effectiveDayKey: string;
40
+ localDate: string;
41
+ phase: LifeOpsCircadianState;
42
+ circadianState: LifeOpsCircadianState;
43
+ stateConfidence: number;
44
+ uncertaintyReason: LifeOpsUnclearReason | null;
45
+ relativeTime: LifeOpsRelativeTime;
46
+ awakeProbability: LifeOpsAwakeProbability;
47
+ regularity: LifeOpsScheduleRegularity;
48
+ baseline: LifeOpsPersonalBaseline | null;
49
+ sleepStatus: LifeOpsScheduleSleepStatus;
50
+ isProbablySleeping: boolean;
51
+ sleepConfidence: number;
52
+ currentSleepStartedAt: string | null;
53
+ lastSleepStartedAt: string | null;
54
+ lastSleepEndedAt: string | null;
55
+ lastSleepDurationMinutes: number | null;
56
+ wakeAt: string | null;
57
+ firstActiveAt: string | null;
58
+ lastActiveAt: string | null;
59
+ lastMealAt: string | null;
60
+ nextMealLabel: LifeOpsScheduleMealLabel | null;
61
+ nextMealWindowStartAt: string | null;
62
+ nextMealWindowEndAt: string | null;
63
+ nextMealConfidence: number;
64
+ }
65
+
66
+ export interface LifeOpsScheduleObservation {
67
+ id: string;
68
+ agentId: string;
69
+ origin: LifeOpsScheduleObservationOrigin;
70
+ deviceId: string;
71
+ deviceKind: LifeOpsScheduleDeviceKind;
72
+ timezone: string;
73
+ observedAt: string;
74
+ windowStartAt: string;
75
+ windowEndAt: string | null;
76
+ circadianState: LifeOpsCircadianState;
77
+ stateConfidence: number;
78
+ uncertaintyReason: LifeOpsUnclearReason | null;
79
+ mealLabel: LifeOpsScheduleMealLabel | null;
80
+ metadata: Record<string, unknown>;
81
+ createdAt: string;
82
+ updatedAt: string;
83
+ }
84
+
85
+ export interface LifeOpsScheduleMergedState extends LifeOpsScheduleInsight {
86
+ id: string;
87
+ agentId: string;
88
+ scope: LifeOpsScheduleStateScope;
89
+ mergedAt: string;
90
+ observationCount: number;
91
+ deviceCount: number;
92
+ contributingDeviceKinds: LifeOpsScheduleDeviceKind[];
93
+ metadata: Record<string, unknown>;
94
+ createdAt: string;
95
+ updatedAt: string;
96
+ }
97
+
98
+ export interface SyncLifeOpsScheduleObservationInput {
99
+ circadianState: LifeOpsCircadianState;
100
+ stateConfidence: number;
101
+ uncertaintyReason?: LifeOpsUnclearReason | null;
102
+ windowStartAt: string;
103
+ windowEndAt?: string | null;
104
+ mealLabel?: LifeOpsScheduleMealLabel | null;
105
+ snapshot?: Partial<LifeOpsScheduleObservationSnapshot> | null;
106
+ metadata?: Record<string, unknown>;
107
+ }
108
+
109
+ export interface SyncLifeOpsScheduleObservationsRequest {
110
+ deviceId: string;
111
+ deviceKind: LifeOpsScheduleDeviceKind;
112
+ timezone: string;
113
+ observedAt?: string;
114
+ observations: SyncLifeOpsScheduleObservationInput[];
115
+ }
116
+
117
+ export interface SyncLifeOpsScheduleObservationsResponse {
118
+ acceptedCount: number;
119
+ mergedState: LifeOpsScheduleMergedState;
120
+ }
121
+
122
+ export interface GetLifeOpsScheduleMergedStateResponse {
123
+ mergedState: LifeOpsScheduleMergedState | null;
124
+ }