@elizaos/plugin-personal-assistant 2.0.3-beta.6 → 2.0.3-beta.7

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 (1317) hide show
  1. package/dist/actions/app-block.d.ts +15 -0
  2. package/dist/actions/app-block.d.ts.map +1 -0
  3. package/dist/actions/app-block.js +349 -0
  4. package/dist/actions/app-block.js.map +1 -0
  5. package/dist/actions/autofill.d.ts +20 -0
  6. package/dist/actions/autofill.d.ts.map +1 -0
  7. package/dist/actions/autofill.js +370 -0
  8. package/dist/actions/autofill.js.map +1 -0
  9. package/dist/actions/block.d.ts +30 -0
  10. package/dist/actions/block.d.ts.map +1 -0
  11. package/dist/actions/block.js +326 -0
  12. package/dist/actions/block.js.map +1 -0
  13. package/dist/actions/book-travel.d.ts +10 -0
  14. package/dist/actions/book-travel.d.ts.map +1 -0
  15. package/dist/actions/book-travel.js +467 -0
  16. package/dist/actions/book-travel.js.map +1 -0
  17. package/dist/actions/brief.d.ts +60 -0
  18. package/dist/actions/brief.d.ts.map +1 -0
  19. package/dist/actions/brief.js +485 -0
  20. package/dist/actions/brief.js.map +1 -0
  21. package/dist/actions/calendar.d.ts +22 -0
  22. package/dist/actions/calendar.d.ts.map +1 -0
  23. package/dist/actions/calendar.js +832 -0
  24. package/dist/actions/calendar.js.map +1 -0
  25. package/dist/actions/conflict-detect.d.ts +67 -0
  26. package/dist/actions/conflict-detect.d.ts.map +1 -0
  27. package/dist/actions/conflict-detect.js +310 -0
  28. package/dist/actions/conflict-detect.js.map +1 -0
  29. package/dist/actions/connector.d.ts +5 -0
  30. package/dist/actions/connector.d.ts.map +1 -0
  31. package/dist/actions/connector.js +1354 -0
  32. package/dist/actions/connector.js.map +1 -0
  33. package/dist/actions/credentials.d.ts +14 -0
  34. package/dist/actions/credentials.d.ts.map +1 -0
  35. package/dist/actions/credentials.js +191 -0
  36. package/dist/actions/credentials.js.map +1 -0
  37. package/dist/actions/document.d.ts +36 -0
  38. package/dist/actions/document.d.ts.map +1 -0
  39. package/dist/actions/document.js +613 -0
  40. package/dist/actions/document.js.map +1 -0
  41. package/dist/actions/entity.d.ts +20 -0
  42. package/dist/actions/entity.d.ts.map +1 -0
  43. package/dist/actions/entity.js +785 -0
  44. package/dist/actions/entity.js.map +1 -0
  45. package/dist/actions/health.d.ts +4 -0
  46. package/dist/actions/health.d.ts.map +1 -0
  47. package/dist/actions/health.js +37 -0
  48. package/dist/actions/health.js.map +1 -0
  49. package/dist/actions/inbox.d.ts +12 -0
  50. package/dist/actions/inbox.d.ts.map +1 -0
  51. package/dist/actions/inbox.js +13 -0
  52. package/dist/actions/inbox.js.map +1 -0
  53. package/dist/actions/lib/calendly-handler.d.ts +3 -0
  54. package/dist/actions/lib/calendly-handler.d.ts.map +1 -0
  55. package/dist/actions/lib/calendly-handler.js +506 -0
  56. package/dist/actions/lib/calendly-handler.js.map +1 -0
  57. package/dist/actions/lib/extract-goal-plan.d.ts +69 -0
  58. package/dist/actions/lib/extract-goal-plan.d.ts.map +1 -0
  59. package/dist/actions/lib/extract-goal-plan.js +488 -0
  60. package/dist/actions/lib/extract-goal-plan.js.map +1 -0
  61. package/dist/actions/lib/extract-life-operation.d.ts +18 -0
  62. package/dist/actions/lib/extract-life-operation.d.ts.map +1 -0
  63. package/dist/actions/lib/extract-life-operation.js +318 -0
  64. package/dist/actions/lib/extract-life-operation.js.map +1 -0
  65. package/dist/actions/lib/extract-task-plan.d.ts +78 -0
  66. package/dist/actions/lib/extract-task-plan.d.ts.map +1 -0
  67. package/dist/actions/lib/extract-task-plan.js +355 -0
  68. package/dist/actions/lib/extract-task-plan.js.map +1 -0
  69. package/dist/actions/lib/extract-update-fields.d.ts +27 -0
  70. package/dist/actions/lib/extract-update-fields.d.ts.map +1 -0
  71. package/dist/actions/lib/extract-update-fields.js +172 -0
  72. package/dist/actions/lib/extract-update-fields.js.map +1 -0
  73. package/dist/actions/lib/lifeops-deferred-draft.d.ts +68 -0
  74. package/dist/actions/lib/lifeops-deferred-draft.d.ts.map +1 -0
  75. package/dist/actions/lib/lifeops-deferred-draft.js +315 -0
  76. package/dist/actions/lib/lifeops-deferred-draft.js.map +1 -0
  77. package/dist/actions/lib/messaging-helpers.d.ts +20 -0
  78. package/dist/actions/lib/messaging-helpers.d.ts.map +1 -0
  79. package/dist/actions/lib/messaging-helpers.js +103 -0
  80. package/dist/actions/lib/messaging-helpers.js.map +1 -0
  81. package/dist/actions/lib/owner-policy-writes.d.ts +49 -0
  82. package/dist/actions/lib/owner-policy-writes.d.ts.map +1 -0
  83. package/dist/actions/lib/owner-policy-writes.js +157 -0
  84. package/dist/actions/lib/owner-policy-writes.js.map +1 -0
  85. package/dist/actions/lib/prompt-format.d.ts +3 -0
  86. package/dist/actions/lib/prompt-format.d.ts.map +1 -0
  87. package/dist/actions/lib/prompt-format.js +42 -0
  88. package/dist/actions/lib/prompt-format.js.map +1 -0
  89. package/dist/actions/lib/scheduling-handler.d.ts +93 -0
  90. package/dist/actions/lib/scheduling-handler.d.ts.map +1 -0
  91. package/dist/actions/lib/scheduling-handler.js +868 -0
  92. package/dist/actions/lib/scheduling-handler.js.map +1 -0
  93. package/dist/actions/life.d.ts +13 -0
  94. package/dist/actions/life.d.ts.map +1 -0
  95. package/dist/actions/life.js +2524 -0
  96. package/dist/actions/life.js.map +1 -0
  97. package/dist/actions/money.d.ts +24 -0
  98. package/dist/actions/money.d.ts.map +1 -0
  99. package/dist/actions/money.js +41 -0
  100. package/dist/actions/money.js.map +1 -0
  101. package/dist/actions/owner-surfaces.d.ts +11 -0
  102. package/dist/actions/owner-surfaces.d.ts.map +1 -0
  103. package/dist/actions/owner-surfaces.js +493 -0
  104. package/dist/actions/owner-surfaces.js.map +1 -0
  105. package/dist/actions/password-manager.d.ts +10 -0
  106. package/dist/actions/password-manager.d.ts.map +1 -0
  107. package/dist/actions/password-manager.js +195 -0
  108. package/dist/actions/password-manager.js.map +1 -0
  109. package/dist/actions/payments.d.ts +10 -0
  110. package/dist/actions/payments.d.ts.map +1 -0
  111. package/dist/actions/payments.js +5 -0
  112. package/dist/actions/payments.js.map +1 -0
  113. package/dist/actions/prioritize.d.ts +49 -0
  114. package/dist/actions/prioritize.d.ts.map +1 -0
  115. package/dist/actions/prioritize.js +313 -0
  116. package/dist/actions/prioritize.js.map +1 -0
  117. package/dist/actions/remote-desktop.d.ts +13 -0
  118. package/dist/actions/remote-desktop.d.ts.map +1 -0
  119. package/dist/actions/remote-desktop.js +11 -0
  120. package/dist/actions/remote-desktop.js.map +1 -0
  121. package/dist/actions/resolve-request.d.ts +12 -0
  122. package/dist/actions/resolve-request.d.ts.map +1 -0
  123. package/dist/actions/resolve-request.js +427 -0
  124. package/dist/actions/resolve-request.js.map +1 -0
  125. package/dist/actions/schedule.d.ts +10 -0
  126. package/dist/actions/schedule.d.ts.map +1 -0
  127. package/dist/actions/schedule.js +113 -0
  128. package/dist/actions/schedule.js.map +1 -0
  129. package/dist/actions/scheduled-task.d.ts +32 -0
  130. package/dist/actions/scheduled-task.d.ts.map +1 -0
  131. package/dist/actions/scheduled-task.js +661 -0
  132. package/dist/actions/scheduled-task.js.map +1 -0
  133. package/dist/actions/screen-time.d.ts +4 -0
  134. package/dist/actions/screen-time.d.ts.map +1 -0
  135. package/dist/actions/screen-time.js +47 -0
  136. package/dist/actions/screen-time.js.map +1 -0
  137. package/dist/actions/subscriptions.d.ts +8 -0
  138. package/dist/actions/subscriptions.d.ts.map +1 -0
  139. package/dist/actions/subscriptions.js +327 -0
  140. package/dist/actions/subscriptions.js.map +1 -0
  141. package/dist/actions/voice-call.d.ts +16 -0
  142. package/dist/actions/voice-call.d.ts.map +1 -0
  143. package/dist/actions/voice-call.js +756 -0
  144. package/dist/actions/voice-call.js.map +1 -0
  145. package/dist/actions/website-block.d.ts +15 -0
  146. package/dist/actions/website-block.d.ts.map +1 -0
  147. package/dist/actions/website-block.js +719 -0
  148. package/dist/actions/website-block.js.map +1 -0
  149. package/dist/actions/work-thread.d.ts +5 -0
  150. package/dist/actions/work-thread.d.ts.map +1 -0
  151. package/dist/actions/work-thread.js +556 -0
  152. package/dist/actions/work-thread.js.map +1 -0
  153. package/dist/activity-profile/activity-tracker-repo.d.ts +28 -0
  154. package/dist/activity-profile/activity-tracker-repo.d.ts.map +1 -0
  155. package/dist/activity-profile/activity-tracker-repo.js +61 -0
  156. package/dist/activity-profile/activity-tracker-repo.js.map +1 -0
  157. package/dist/activity-profile/activity-tracker-reporting.d.ts +52 -0
  158. package/dist/activity-profile/activity-tracker-reporting.d.ts.map +1 -0
  159. package/dist/activity-profile/activity-tracker-reporting.js +119 -0
  160. package/dist/activity-profile/activity-tracker-reporting.js.map +1 -0
  161. package/dist/activity-profile/activity-tracker-service.d.ts +36 -0
  162. package/dist/activity-profile/activity-tracker-service.d.ts.map +1 -0
  163. package/dist/activity-profile/activity-tracker-service.js +187 -0
  164. package/dist/activity-profile/activity-tracker-service.js.map +1 -0
  165. package/dist/activity-profile/analyzer.d.ts +23 -0
  166. package/dist/activity-profile/analyzer.d.ts.map +1 -0
  167. package/dist/activity-profile/analyzer.js +485 -0
  168. package/dist/activity-profile/analyzer.js.map +1 -0
  169. package/dist/activity-profile/presence-signal-bridge-service.d.ts +14 -0
  170. package/dist/activity-profile/presence-signal-bridge-service.d.ts.map +1 -0
  171. package/dist/activity-profile/presence-signal-bridge-service.js +159 -0
  172. package/dist/activity-profile/presence-signal-bridge-service.js.map +1 -0
  173. package/dist/activity-profile/proactive-inbox-digest.d.ts +3 -0
  174. package/dist/activity-profile/proactive-inbox-digest.d.ts.map +1 -0
  175. package/dist/activity-profile/proactive-inbox-digest.js +21 -0
  176. package/dist/activity-profile/proactive-inbox-digest.js.map +1 -0
  177. package/dist/activity-profile/proactive-planner.d.ts +150 -0
  178. package/dist/activity-profile/proactive-planner.d.ts.map +1 -0
  179. package/dist/activity-profile/proactive-planner.js +529 -0
  180. package/dist/activity-profile/proactive-planner.js.map +1 -0
  181. package/dist/activity-profile/proactive-worker.d.ts +33 -0
  182. package/dist/activity-profile/proactive-worker.d.ts.map +1 -0
  183. package/dist/activity-profile/proactive-worker.js +779 -0
  184. package/dist/activity-profile/proactive-worker.js.map +1 -0
  185. package/dist/activity-profile/profile-metadata.d.ts +10 -0
  186. package/dist/activity-profile/profile-metadata.d.ts.map +1 -0
  187. package/dist/activity-profile/profile-metadata.js +16 -0
  188. package/dist/activity-profile/profile-metadata.js.map +1 -0
  189. package/dist/activity-profile/redactor.d.ts +15 -0
  190. package/dist/activity-profile/redactor.d.ts.map +1 -0
  191. package/dist/activity-profile/redactor.js +22 -0
  192. package/dist/activity-profile/redactor.js.map +1 -0
  193. package/dist/activity-profile/service.d.ts +11 -0
  194. package/dist/activity-profile/service.d.ts.map +1 -0
  195. package/dist/activity-profile/service.js +272 -0
  196. package/dist/activity-profile/service.js.map +1 -0
  197. package/dist/activity-profile/types.d.ts +97 -0
  198. package/dist/activity-profile/types.d.ts.map +1 -0
  199. package/dist/activity-profile/types.js +36 -0
  200. package/dist/activity-profile/types.js.map +1 -0
  201. package/dist/agent-lifeops.d.ts +2 -0
  202. package/dist/agent-lifeops.d.ts.map +1 -0
  203. package/dist/agent-lifeops.js +2 -0
  204. package/dist/agent-lifeops.js.map +1 -0
  205. package/dist/api/client-lifeops.d.ts +319 -0
  206. package/dist/api/client-lifeops.d.ts.map +1 -0
  207. package/dist/api/client-lifeops.js +794 -0
  208. package/dist/api/client-lifeops.js.map +1 -0
  209. package/dist/automation-node-contributor.d.ts +2 -0
  210. package/dist/automation-node-contributor.d.ts.map +1 -0
  211. package/dist/automation-node-contributor.js +184 -0
  212. package/dist/automation-node-contributor.js.map +1 -0
  213. package/dist/client.d.ts +16 -0
  214. package/dist/client.d.ts.map +1 -0
  215. package/dist/client.js +18 -0
  216. package/dist/client.js.map +1 -0
  217. package/dist/components/AppBlockerSettingsCard.d.ts +3 -0
  218. package/dist/components/AppBlockerSettingsCard.d.ts.map +1 -0
  219. package/dist/components/AppBlockerSettingsCard.js +538 -0
  220. package/dist/components/AppBlockerSettingsCard.js.map +1 -0
  221. package/dist/components/WebsiteBlockerSettingsCard.d.ts +3 -0
  222. package/dist/components/WebsiteBlockerSettingsCard.d.ts.map +1 -0
  223. package/dist/components/WebsiteBlockerSettingsCard.js +148 -0
  224. package/dist/components/WebsiteBlockerSettingsCard.js.map +1 -0
  225. package/dist/contracts/index.d.ts +2 -0
  226. package/dist/contracts/index.d.ts.map +1 -0
  227. package/dist/contracts/index.js +2 -0
  228. package/dist/contracts/index.js.map +1 -0
  229. package/dist/contracts/lifeops.d.ts +2 -0
  230. package/dist/contracts/lifeops.d.ts.map +1 -0
  231. package/dist/contracts/lifeops.js +2 -0
  232. package/dist/contracts/lifeops.js.map +1 -0
  233. package/dist/default-packs/autofill-whitelist-pack.d.ts +17 -0
  234. package/dist/default-packs/autofill-whitelist-pack.d.ts.map +1 -0
  235. package/dist/default-packs/autofill-whitelist-pack.js +56 -0
  236. package/dist/default-packs/autofill-whitelist-pack.js.map +1 -0
  237. package/dist/default-packs/consolidation-policies.d.ts +14 -0
  238. package/dist/default-packs/consolidation-policies.d.ts.map +1 -0
  239. package/dist/default-packs/consolidation-policies.js +17 -0
  240. package/dist/default-packs/consolidation-policies.js.map +1 -0
  241. package/dist/default-packs/contract-types.d.ts +200 -0
  242. package/dist/default-packs/contract-types.d.ts.map +1 -0
  243. package/dist/default-packs/contract-types.js +1 -0
  244. package/dist/default-packs/contract-types.js.map +1 -0
  245. package/dist/default-packs/daily-rhythm.d.ts +28 -0
  246. package/dist/default-packs/daily-rhythm.d.ts.map +1 -0
  247. package/dist/default-packs/daily-rhythm.js +136 -0
  248. package/dist/default-packs/daily-rhythm.js.map +1 -0
  249. package/dist/default-packs/escalation-ladders.d.ts +18 -0
  250. package/dist/default-packs/escalation-ladders.d.ts.map +1 -0
  251. package/dist/default-packs/escalation-ladders.js +17 -0
  252. package/dist/default-packs/escalation-ladders.js.map +1 -0
  253. package/dist/default-packs/executive-assistant.d.ts +50 -0
  254. package/dist/default-packs/executive-assistant.d.ts.map +1 -0
  255. package/dist/default-packs/executive-assistant.js +745 -0
  256. package/dist/default-packs/executive-assistant.js.map +1 -0
  257. package/dist/default-packs/followup-starter.d.ts +49 -0
  258. package/dist/default-packs/followup-starter.d.ts.map +1 -0
  259. package/dist/default-packs/followup-starter.js +104 -0
  260. package/dist/default-packs/followup-starter.js.map +1 -0
  261. package/dist/default-packs/habit-starters.d.ts +37 -0
  262. package/dist/default-packs/habit-starters.d.ts.map +1 -0
  263. package/dist/default-packs/habit-starters.js +255 -0
  264. package/dist/default-packs/habit-starters.js.map +1 -0
  265. package/dist/default-packs/inbox-triage-starter.d.ts +23 -0
  266. package/dist/default-packs/inbox-triage-starter.d.ts.map +1 -0
  267. package/dist/default-packs/inbox-triage-starter.js +61 -0
  268. package/dist/default-packs/inbox-triage-starter.js.map +1 -0
  269. package/dist/default-packs/index.d.ts +54 -0
  270. package/dist/default-packs/index.d.ts.map +1 -0
  271. package/dist/default-packs/index.js +150 -0
  272. package/dist/default-packs/index.js.map +1 -0
  273. package/dist/default-packs/lint.d.ts +62 -0
  274. package/dist/default-packs/lint.d.ts.map +1 -0
  275. package/dist/default-packs/lint.js +161 -0
  276. package/dist/default-packs/lint.js.map +1 -0
  277. package/dist/default-packs/morning-brief.d.ts +44 -0
  278. package/dist/default-packs/morning-brief.d.ts.map +1 -0
  279. package/dist/default-packs/morning-brief.js +69 -0
  280. package/dist/default-packs/morning-brief.js.map +1 -0
  281. package/dist/default-packs/quiet-user-watcher.d.ts +49 -0
  282. package/dist/default-packs/quiet-user-watcher.d.ts.map +1 -0
  283. package/dist/default-packs/quiet-user-watcher.js +92 -0
  284. package/dist/default-packs/quiet-user-watcher.js.map +1 -0
  285. package/dist/default-packs/registry-types.d.ts +51 -0
  286. package/dist/default-packs/registry-types.d.ts.map +1 -0
  287. package/dist/default-packs/registry-types.js +1 -0
  288. package/dist/default-packs/registry-types.js.map +1 -0
  289. package/dist/default-packs/task-definitions.d.ts +88 -0
  290. package/dist/default-packs/task-definitions.d.ts.map +1 -0
  291. package/dist/default-packs/task-definitions.js +87 -0
  292. package/dist/default-packs/task-definitions.js.map +1 -0
  293. package/dist/events/index.d.ts +34 -0
  294. package/dist/events/index.d.ts.map +1 -0
  295. package/dist/events/index.js +30 -0
  296. package/dist/events/index.js.map +1 -0
  297. package/dist/followup/actions/listOverdueFollowups.d.ts +3 -0
  298. package/dist/followup/actions/listOverdueFollowups.d.ts.map +1 -0
  299. package/dist/followup/actions/listOverdueFollowups.js +90 -0
  300. package/dist/followup/actions/listOverdueFollowups.js.map +1 -0
  301. package/dist/followup/actions/markFollowupDone.d.ts +3 -0
  302. package/dist/followup/actions/markFollowupDone.d.ts.map +1 -0
  303. package/dist/followup/actions/markFollowupDone.js +171 -0
  304. package/dist/followup/actions/markFollowupDone.js.map +1 -0
  305. package/dist/followup/actions/setFollowupThreshold.d.ts +3 -0
  306. package/dist/followup/actions/setFollowupThreshold.d.ts.map +1 -0
  307. package/dist/followup/actions/setFollowupThreshold.js +171 -0
  308. package/dist/followup/actions/setFollowupThreshold.js.map +1 -0
  309. package/dist/followup/followup-tracker.d.ts +83 -0
  310. package/dist/followup/followup-tracker.d.ts.map +1 -0
  311. package/dist/followup/followup-tracker.js +311 -0
  312. package/dist/followup/followup-tracker.js.map +1 -0
  313. package/dist/followup/index.d.ts +5 -0
  314. package/dist/followup/index.d.ts.map +1 -0
  315. package/dist/followup/index.js +39 -0
  316. package/dist/followup/index.js.map +1 -0
  317. package/dist/hooks/connector-error.d.ts +2 -0
  318. package/dist/hooks/connector-error.d.ts.map +1 -0
  319. package/dist/hooks/connector-error.js +13 -0
  320. package/dist/hooks/connector-error.js.map +1 -0
  321. package/dist/hooks/useDiscordConnector.d.ts +11 -0
  322. package/dist/hooks/useDiscordConnector.d.ts.map +1 -0
  323. package/dist/hooks/useDiscordConnector.js +95 -0
  324. package/dist/hooks/useDiscordConnector.js.map +1 -0
  325. package/dist/hooks/useGoogleLifeOpsConnector.d.ts +23 -0
  326. package/dist/hooks/useGoogleLifeOpsConnector.d.ts.map +1 -0
  327. package/dist/hooks/useGoogleLifeOpsConnector.js +630 -0
  328. package/dist/hooks/useGoogleLifeOpsConnector.js.map +1 -0
  329. package/dist/hooks/useIMessageConnector.d.ts +10 -0
  330. package/dist/hooks/useIMessageConnector.d.ts.map +1 -0
  331. package/dist/hooks/useIMessageConnector.js +57 -0
  332. package/dist/hooks/useIMessageConnector.js.map +1 -0
  333. package/dist/hooks/useInbox.d.ts +36 -0
  334. package/dist/hooks/useInbox.d.ts.map +1 -0
  335. package/dist/hooks/useInbox.js +96 -0
  336. package/dist/hooks/useInbox.js.map +1 -0
  337. package/dist/hooks/useLifeOpsActivitySignals.d.ts +2 -0
  338. package/dist/hooks/useLifeOpsActivitySignals.d.ts.map +1 -0
  339. package/dist/hooks/useLifeOpsActivitySignals.js +358 -0
  340. package/dist/hooks/useLifeOpsActivitySignals.js.map +1 -0
  341. package/dist/hooks/useLifeOpsAppState.d.ts +9 -0
  342. package/dist/hooks/useLifeOpsAppState.d.ts.map +1 -0
  343. package/dist/hooks/useLifeOpsAppState.js +79 -0
  344. package/dist/hooks/useLifeOpsAppState.js.map +1 -0
  345. package/dist/hooks/useLifeOpsCapabilitiesStatus.d.ts +8 -0
  346. package/dist/hooks/useLifeOpsCapabilitiesStatus.d.ts.map +1 -0
  347. package/dist/hooks/useLifeOpsCapabilitiesStatus.js +60 -0
  348. package/dist/hooks/useLifeOpsCapabilitiesStatus.js.map +1 -0
  349. package/dist/hooks/useLifeOpsXConnector.d.ts +11 -0
  350. package/dist/hooks/useLifeOpsXConnector.d.ts.map +1 -0
  351. package/dist/hooks/useLifeOpsXConnector.js +92 -0
  352. package/dist/hooks/useLifeOpsXConnector.js.map +1 -0
  353. package/dist/hooks/useSignalConnector.d.ts +14 -0
  354. package/dist/hooks/useSignalConnector.d.ts.map +1 -0
  355. package/dist/hooks/useSignalConnector.js +89 -0
  356. package/dist/hooks/useSignalConnector.js.map +1 -0
  357. package/dist/hooks/useTelegramConnector.d.ts +14 -0
  358. package/dist/hooks/useTelegramConnector.d.ts.map +1 -0
  359. package/dist/hooks/useTelegramConnector.js +97 -0
  360. package/dist/hooks/useTelegramConnector.js.map +1 -0
  361. package/dist/hooks/useWhatsAppConnector.d.ts +8 -0
  362. package/dist/hooks/useWhatsAppConnector.d.ts.map +1 -0
  363. package/dist/hooks/useWhatsAppConnector.js +62 -0
  364. package/dist/hooks/useWhatsAppConnector.js.map +1 -0
  365. package/dist/inbox/message-fetcher.d.ts +11 -0
  366. package/dist/inbox/message-fetcher.d.ts.map +1 -0
  367. package/dist/inbox/message-fetcher.js +13 -0
  368. package/dist/inbox/message-fetcher.js.map +1 -0
  369. package/dist/inbox/repository.d.ts +11 -0
  370. package/dist/inbox/repository.d.ts.map +1 -0
  371. package/dist/inbox/repository.js +5 -0
  372. package/dist/inbox/repository.js.map +1 -0
  373. package/dist/inbox/types.d.ts +10 -0
  374. package/dist/inbox/types.d.ts.map +1 -0
  375. package/dist/inbox/types.js +2 -0
  376. package/dist/inbox/types.js.map +1 -0
  377. package/dist/index.d.ts +36 -0
  378. package/dist/index.d.ts.map +1 -0
  379. package/dist/index.js +188 -0
  380. package/dist/index.js.map +1 -0
  381. package/dist/lifeops/access.d.ts +29 -0
  382. package/dist/lifeops/access.d.ts.map +1 -0
  383. package/dist/lifeops/access.js +56 -0
  384. package/dist/lifeops/access.js.map +1 -0
  385. package/dist/lifeops/app-state.d.ts +22 -0
  386. package/dist/lifeops/app-state.d.ts.map +1 -0
  387. package/dist/lifeops/app-state.js +67 -0
  388. package/dist/lifeops/app-state.js.map +1 -0
  389. package/dist/lifeops/apple-reminders.d.ts +67 -0
  390. package/dist/lifeops/apple-reminders.d.ts.map +1 -0
  391. package/dist/lifeops/apple-reminders.js +396 -0
  392. package/dist/lifeops/apple-reminders.js.map +1 -0
  393. package/dist/lifeops/approval-queue.d.ts +38 -0
  394. package/dist/lifeops/approval-queue.d.ts.map +1 -0
  395. package/dist/lifeops/approval-queue.js +575 -0
  396. package/dist/lifeops/approval-queue.js.map +1 -0
  397. package/dist/lifeops/approval-queue.types.d.ts +172 -0
  398. package/dist/lifeops/approval-queue.types.d.ts.map +1 -0
  399. package/dist/lifeops/approval-queue.types.js +27 -0
  400. package/dist/lifeops/approval-queue.types.js.map +1 -0
  401. package/dist/lifeops/autofill-whitelist.d.ts +20 -0
  402. package/dist/lifeops/autofill-whitelist.d.ts.map +1 -0
  403. package/dist/lifeops/autofill-whitelist.js +59 -0
  404. package/dist/lifeops/autofill-whitelist.js.map +1 -0
  405. package/dist/lifeops/background-planner-dispatch.d.ts +60 -0
  406. package/dist/lifeops/background-planner-dispatch.d.ts.map +1 -0
  407. package/dist/lifeops/background-planner-dispatch.js +113 -0
  408. package/dist/lifeops/background-planner-dispatch.js.map +1 -0
  409. package/dist/lifeops/background-planner.d.ts +140 -0
  410. package/dist/lifeops/background-planner.d.ts.map +1 -0
  411. package/dist/lifeops/background-planner.js +359 -0
  412. package/dist/lifeops/background-planner.js.map +1 -0
  413. package/dist/lifeops/bill-extraction.d.ts +46 -0
  414. package/dist/lifeops/bill-extraction.d.ts.map +1 -0
  415. package/dist/lifeops/bill-extraction.js +325 -0
  416. package/dist/lifeops/bill-extraction.js.map +1 -0
  417. package/dist/lifeops/browser-constants.d.ts +4 -0
  418. package/dist/lifeops/browser-constants.d.ts.map +1 -0
  419. package/dist/lifeops/browser-constants.js +27 -0
  420. package/dist/lifeops/browser-constants.js.map +1 -0
  421. package/dist/lifeops/browser-extension-store.d.ts +61 -0
  422. package/dist/lifeops/browser-extension-store.d.ts.map +1 -0
  423. package/dist/lifeops/browser-extension-store.js +176 -0
  424. package/dist/lifeops/browser-extension-store.js.map +1 -0
  425. package/dist/lifeops/browser-session-lifecycle.d.ts +57 -0
  426. package/dist/lifeops/browser-session-lifecycle.d.ts.map +1 -0
  427. package/dist/lifeops/browser-session-lifecycle.js +308 -0
  428. package/dist/lifeops/browser-session-lifecycle.js.map +1 -0
  429. package/dist/lifeops/bulk-review.d.ts +333 -0
  430. package/dist/lifeops/bulk-review.d.ts.map +1 -0
  431. package/dist/lifeops/bulk-review.js +1120 -0
  432. package/dist/lifeops/bulk-review.js.map +1 -0
  433. package/dist/lifeops/calendar-gate.d.ts +20 -0
  434. package/dist/lifeops/calendar-gate.d.ts.map +1 -0
  435. package/dist/lifeops/calendar-gate.js +30 -0
  436. package/dist/lifeops/calendar-gate.js.map +1 -0
  437. package/dist/lifeops/channels/contract.d.ts +47 -0
  438. package/dist/lifeops/channels/contract.d.ts.map +1 -0
  439. package/dist/lifeops/channels/contract.js +1 -0
  440. package/dist/lifeops/channels/contract.js.map +1 -0
  441. package/dist/lifeops/channels/default-pack.d.ts +26 -0
  442. package/dist/lifeops/channels/default-pack.d.ts.map +1 -0
  443. package/dist/lifeops/channels/default-pack.js +243 -0
  444. package/dist/lifeops/channels/default-pack.js.map +1 -0
  445. package/dist/lifeops/channels/index.d.ts +5 -0
  446. package/dist/lifeops/channels/index.d.ts.map +1 -0
  447. package/dist/lifeops/channels/index.js +23 -0
  448. package/dist/lifeops/channels/index.js.map +1 -0
  449. package/dist/lifeops/channels/priority-posture.d.ts +36 -0
  450. package/dist/lifeops/channels/priority-posture.d.ts.map +1 -0
  451. package/dist/lifeops/channels/priority-posture.js +27 -0
  452. package/dist/lifeops/channels/priority-posture.js.map +1 -0
  453. package/dist/lifeops/channels/registry.d.ts +7 -0
  454. package/dist/lifeops/channels/registry.d.ts.map +1 -0
  455. package/dist/lifeops/channels/registry.js +49 -0
  456. package/dist/lifeops/channels/registry.js.map +1 -0
  457. package/dist/lifeops/checkin/checkin-service.d.ts +66 -0
  458. package/dist/lifeops/checkin/checkin-service.d.ts.map +1 -0
  459. package/dist/lifeops/checkin/checkin-service.js +1084 -0
  460. package/dist/lifeops/checkin/checkin-service.js.map +1 -0
  461. package/dist/lifeops/checkin/schedule-resolver.d.ts +17 -0
  462. package/dist/lifeops/checkin/schedule-resolver.d.ts.map +1 -0
  463. package/dist/lifeops/checkin/schedule-resolver.js +26 -0
  464. package/dist/lifeops/checkin/schedule-resolver.js.map +1 -0
  465. package/dist/lifeops/checkin/types.d.ts +106 -0
  466. package/dist/lifeops/checkin/types.d.ts.map +1 -0
  467. package/dist/lifeops/checkin/types.js +1 -0
  468. package/dist/lifeops/checkin/types.js.map +1 -0
  469. package/dist/lifeops/connectors/_helpers.d.ts +51 -0
  470. package/dist/lifeops/connectors/_helpers.d.ts.map +1 -0
  471. package/dist/lifeops/connectors/_helpers.js +104 -0
  472. package/dist/lifeops/connectors/_helpers.js.map +1 -0
  473. package/dist/lifeops/connectors/calendly.d.ts +11 -0
  474. package/dist/lifeops/connectors/calendly.d.ts.map +1 -0
  475. package/dist/lifeops/connectors/calendly.js +61 -0
  476. package/dist/lifeops/connectors/calendly.js.map +1 -0
  477. package/dist/lifeops/connectors/contract.d.ts +88 -0
  478. package/dist/lifeops/connectors/contract.d.ts.map +1 -0
  479. package/dist/lifeops/connectors/contract.js +1 -0
  480. package/dist/lifeops/connectors/contract.js.map +1 -0
  481. package/dist/lifeops/connectors/default-pack.d.ts +35 -0
  482. package/dist/lifeops/connectors/default-pack.d.ts.map +1 -0
  483. package/dist/lifeops/connectors/default-pack.js +37 -0
  484. package/dist/lifeops/connectors/default-pack.js.map +1 -0
  485. package/dist/lifeops/connectors/discord.d.ts +8 -0
  486. package/dist/lifeops/connectors/discord.d.ts.map +1 -0
  487. package/dist/lifeops/connectors/discord.js +53 -0
  488. package/dist/lifeops/connectors/discord.js.map +1 -0
  489. package/dist/lifeops/connectors/dispatch-policy.d.ts +75 -0
  490. package/dist/lifeops/connectors/dispatch-policy.d.ts.map +1 -0
  491. package/dist/lifeops/connectors/dispatch-policy.js +35 -0
  492. package/dist/lifeops/connectors/dispatch-policy.js.map +1 -0
  493. package/dist/lifeops/connectors/duffel.d.ts +11 -0
  494. package/dist/lifeops/connectors/duffel.d.ts.map +1 -0
  495. package/dist/lifeops/connectors/duffel.js +74 -0
  496. package/dist/lifeops/connectors/duffel.js.map +1 -0
  497. package/dist/lifeops/connectors/google.d.ts +27 -0
  498. package/dist/lifeops/connectors/google.d.ts.map +1 -0
  499. package/dist/lifeops/connectors/google.js +80 -0
  500. package/dist/lifeops/connectors/google.js.map +1 -0
  501. package/dist/lifeops/connectors/imessage.d.ts +11 -0
  502. package/dist/lifeops/connectors/imessage.d.ts.map +1 -0
  503. package/dist/lifeops/connectors/imessage.js +55 -0
  504. package/dist/lifeops/connectors/imessage.js.map +1 -0
  505. package/dist/lifeops/connectors/index.d.ts +5 -0
  506. package/dist/lifeops/connectors/index.d.ts.map +1 -0
  507. package/dist/lifeops/connectors/index.js +23 -0
  508. package/dist/lifeops/connectors/index.js.map +1 -0
  509. package/dist/lifeops/connectors/mockoon-redirect.d.ts +54 -0
  510. package/dist/lifeops/connectors/mockoon-redirect.d.ts.map +1 -0
  511. package/dist/lifeops/connectors/mockoon-redirect.js +71 -0
  512. package/dist/lifeops/connectors/mockoon-redirect.js.map +1 -0
  513. package/dist/lifeops/connectors/registry.d.ts +7 -0
  514. package/dist/lifeops/connectors/registry.d.ts.map +1 -0
  515. package/dist/lifeops/connectors/registry.js +55 -0
  516. package/dist/lifeops/connectors/registry.js.map +1 -0
  517. package/dist/lifeops/connectors/signal.d.ts +8 -0
  518. package/dist/lifeops/connectors/signal.d.ts.map +1 -0
  519. package/dist/lifeops/connectors/signal.js +60 -0
  520. package/dist/lifeops/connectors/signal.js.map +1 -0
  521. package/dist/lifeops/connectors/telegram.d.ts +12 -0
  522. package/dist/lifeops/connectors/telegram.d.ts.map +1 -0
  523. package/dist/lifeops/connectors/telegram.js +65 -0
  524. package/dist/lifeops/connectors/telegram.js.map +1 -0
  525. package/dist/lifeops/connectors/twilio.d.ts +15 -0
  526. package/dist/lifeops/connectors/twilio.d.ts.map +1 -0
  527. package/dist/lifeops/connectors/twilio.js +126 -0
  528. package/dist/lifeops/connectors/twilio.js.map +1 -0
  529. package/dist/lifeops/connectors/whatsapp.d.ts +10 -0
  530. package/dist/lifeops/connectors/whatsapp.d.ts.map +1 -0
  531. package/dist/lifeops/connectors/whatsapp.js +56 -0
  532. package/dist/lifeops/connectors/whatsapp.js.map +1 -0
  533. package/dist/lifeops/connectors/x.d.ts +8 -0
  534. package/dist/lifeops/connectors/x.d.ts.map +1 -0
  535. package/dist/lifeops/connectors/x.js +62 -0
  536. package/dist/lifeops/connectors/x.js.map +1 -0
  537. package/dist/lifeops/contact-route-policy.d.ts +27 -0
  538. package/dist/lifeops/contact-route-policy.d.ts.map +1 -0
  539. package/dist/lifeops/contact-route-policy.js +153 -0
  540. package/dist/lifeops/contact-route-policy.js.map +1 -0
  541. package/dist/lifeops/continuity-probe.d.ts +49 -0
  542. package/dist/lifeops/continuity-probe.d.ts.map +1 -0
  543. package/dist/lifeops/continuity-probe.js +161 -0
  544. package/dist/lifeops/continuity-probe.js.map +1 -0
  545. package/dist/lifeops/cross-channel-search.d.ts +108 -0
  546. package/dist/lifeops/cross-channel-search.d.ts.map +1 -0
  547. package/dist/lifeops/cross-channel-search.js +888 -0
  548. package/dist/lifeops/cross-channel-search.js.map +1 -0
  549. package/dist/lifeops/defaults.d.ts +30 -0
  550. package/dist/lifeops/defaults.d.ts.map +1 -0
  551. package/dist/lifeops/defaults.js +206 -0
  552. package/dist/lifeops/defaults.js.map +1 -0
  553. package/dist/lifeops/device-bus-service.d.ts +16 -0
  554. package/dist/lifeops/device-bus-service.d.ts.map +1 -0
  555. package/dist/lifeops/device-bus-service.js +20 -0
  556. package/dist/lifeops/device-bus-service.js.map +1 -0
  557. package/dist/lifeops/device-identity.d.ts +31 -0
  558. package/dist/lifeops/device-identity.d.ts.map +1 -0
  559. package/dist/lifeops/device-identity.js +94 -0
  560. package/dist/lifeops/device-identity.js.map +1 -0
  561. package/dist/lifeops/document-review.d.ts +264 -0
  562. package/dist/lifeops/document-review.d.ts.map +1 -0
  563. package/dist/lifeops/document-review.js +925 -0
  564. package/dist/lifeops/document-review.js.map +1 -0
  565. package/dist/lifeops/email-classifier.d.ts +9 -0
  566. package/dist/lifeops/email-classifier.d.ts.map +1 -0
  567. package/dist/lifeops/email-classifier.js +15 -0
  568. package/dist/lifeops/email-classifier.js.map +1 -0
  569. package/dist/lifeops/email-curation.d.ts +13 -0
  570. package/dist/lifeops/email-curation.d.ts.map +1 -0
  571. package/dist/lifeops/email-curation.js +2 -0
  572. package/dist/lifeops/email-curation.js.map +1 -0
  573. package/dist/lifeops/email-unsubscribe-types.d.ts +7 -0
  574. package/dist/lifeops/email-unsubscribe-types.d.ts.map +1 -0
  575. package/dist/lifeops/email-unsubscribe-types.js +1 -0
  576. package/dist/lifeops/email-unsubscribe-types.js.map +1 -0
  577. package/dist/lifeops/enforcement-windows.d.ts +34 -0
  578. package/dist/lifeops/enforcement-windows.d.ts.map +1 -0
  579. package/dist/lifeops/enforcement-windows.js +80 -0
  580. package/dist/lifeops/enforcement-windows.js.map +1 -0
  581. package/dist/lifeops/engine.d.ts +8 -0
  582. package/dist/lifeops/engine.d.ts.map +1 -0
  583. package/dist/lifeops/engine.js +540 -0
  584. package/dist/lifeops/engine.js.map +1 -0
  585. package/dist/lifeops/entities/index.d.ts +4 -0
  586. package/dist/lifeops/entities/index.d.ts.map +1 -0
  587. package/dist/lifeops/entities/index.js +29 -0
  588. package/dist/lifeops/entities/index.js.map +1 -0
  589. package/dist/lifeops/entities/merge.d.ts +9 -0
  590. package/dist/lifeops/entities/merge.d.ts.map +1 -0
  591. package/dist/lifeops/entities/merge.js +17 -0
  592. package/dist/lifeops/entities/merge.js.map +1 -0
  593. package/dist/lifeops/entities/store.d.ts +13 -0
  594. package/dist/lifeops/entities/store.d.ts.map +1 -0
  595. package/dist/lifeops/entities/store.js +7 -0
  596. package/dist/lifeops/entities/store.js.map +1 -0
  597. package/dist/lifeops/entities/types.d.ts +9 -0
  598. package/dist/lifeops/entities/types.d.ts.map +1 -0
  599. package/dist/lifeops/entities/types.js +13 -0
  600. package/dist/lifeops/entities/types.js.map +1 -0
  601. package/dist/lifeops/entities/voice-attribution.d.ts +70 -0
  602. package/dist/lifeops/entities/voice-attribution.d.ts.map +1 -0
  603. package/dist/lifeops/entities/voice-attribution.js +121 -0
  604. package/dist/lifeops/entities/voice-attribution.js.map +1 -0
  605. package/dist/lifeops/entities/voice-observer-bridge.d.ts +32 -0
  606. package/dist/lifeops/entities/voice-observer-bridge.d.ts.map +1 -0
  607. package/dist/lifeops/entities/voice-observer-bridge.js +68 -0
  608. package/dist/lifeops/entities/voice-observer-bridge.js.map +1 -0
  609. package/dist/lifeops/entities/voice-observer.d.ts +72 -0
  610. package/dist/lifeops/entities/voice-observer.d.ts.map +1 -0
  611. package/dist/lifeops/entities/voice-observer.js +97 -0
  612. package/dist/lifeops/entities/voice-observer.js.map +1 -0
  613. package/dist/lifeops/escalation-ladders.d.ts +28 -0
  614. package/dist/lifeops/escalation-ladders.d.ts.map +1 -0
  615. package/dist/lifeops/escalation-ladders.js +17 -0
  616. package/dist/lifeops/escalation-ladders.js.map +1 -0
  617. package/dist/lifeops/fda-probe.d.ts +23 -0
  618. package/dist/lifeops/fda-probe.d.ts.map +1 -0
  619. package/dist/lifeops/fda-probe.js +59 -0
  620. package/dist/lifeops/fda-probe.js.map +1 -0
  621. package/dist/lifeops/feature-flags.d.ts +24 -0
  622. package/dist/lifeops/feature-flags.d.ts.map +1 -0
  623. package/dist/lifeops/feature-flags.js +261 -0
  624. package/dist/lifeops/feature-flags.js.map +1 -0
  625. package/dist/lifeops/feature-flags.types.d.ts +156 -0
  626. package/dist/lifeops/feature-flags.types.d.ts.map +1 -0
  627. package/dist/lifeops/feature-flags.types.js +129 -0
  628. package/dist/lifeops/feature-flags.types.js.map +1 -0
  629. package/dist/lifeops/first-run/defaults.d.ts +57 -0
  630. package/dist/lifeops/first-run/defaults.d.ts.map +1 -0
  631. package/dist/lifeops/first-run/defaults.js +159 -0
  632. package/dist/lifeops/first-run/defaults.js.map +1 -0
  633. package/dist/lifeops/first-run/questions.d.ts +74 -0
  634. package/dist/lifeops/first-run/questions.d.ts.map +1 -0
  635. package/dist/lifeops/first-run/questions.js +184 -0
  636. package/dist/lifeops/first-run/questions.js.map +1 -0
  637. package/dist/lifeops/first-run/replay.d.ts +41 -0
  638. package/dist/lifeops/first-run/replay.d.ts.map +1 -0
  639. package/dist/lifeops/first-run/replay.js +34 -0
  640. package/dist/lifeops/first-run/replay.js.map +1 -0
  641. package/dist/lifeops/first-run/service.d.ts +147 -0
  642. package/dist/lifeops/first-run/service.d.ts.map +1 -0
  643. package/dist/lifeops/first-run/service.js +455 -0
  644. package/dist/lifeops/first-run/service.js.map +1 -0
  645. package/dist/lifeops/first-run/state.d.ts +36 -0
  646. package/dist/lifeops/first-run/state.d.ts.map +1 -0
  647. package/dist/lifeops/first-run/state.js +128 -0
  648. package/dist/lifeops/first-run/state.js.map +1 -0
  649. package/dist/lifeops/global-pause/store.d.ts +22 -0
  650. package/dist/lifeops/global-pause/store.d.ts.map +1 -0
  651. package/dist/lifeops/global-pause/store.js +18 -0
  652. package/dist/lifeops/global-pause/store.js.map +1 -0
  653. package/dist/lifeops/goal-grounding.d.ts +9 -0
  654. package/dist/lifeops/goal-grounding.d.ts.map +1 -0
  655. package/dist/lifeops/goal-grounding.js +19 -0
  656. package/dist/lifeops/goal-grounding.js.map +1 -0
  657. package/dist/lifeops/goal-semantic-evaluator.d.ts +8 -0
  658. package/dist/lifeops/goal-semantic-evaluator.d.ts.map +1 -0
  659. package/dist/lifeops/goal-semantic-evaluator.js +7 -0
  660. package/dist/lifeops/goal-semantic-evaluator.js.map +1 -0
  661. package/dist/lifeops/google/format-helpers.d.ts +63 -0
  662. package/dist/lifeops/google/format-helpers.d.ts.map +1 -0
  663. package/dist/lifeops/google/format-helpers.js +597 -0
  664. package/dist/lifeops/google/format-helpers.js.map +1 -0
  665. package/dist/lifeops/google-plugin-delegates.d.ts +59 -0
  666. package/dist/lifeops/google-plugin-delegates.d.ts.map +1 -0
  667. package/dist/lifeops/google-plugin-delegates.js +408 -0
  668. package/dist/lifeops/google-plugin-delegates.js.map +1 -0
  669. package/dist/lifeops/google-scopes.d.ts +15 -0
  670. package/dist/lifeops/google-scopes.d.ts.map +1 -0
  671. package/dist/lifeops/google-scopes.js +118 -0
  672. package/dist/lifeops/google-scopes.js.map +1 -0
  673. package/dist/lifeops/handoff/store.d.ts +23 -0
  674. package/dist/lifeops/handoff/store.d.ts.map +1 -0
  675. package/dist/lifeops/handoff/store.js +20 -0
  676. package/dist/lifeops/handoff/store.js.map +1 -0
  677. package/dist/lifeops/i18n/localized-examples-provider.d.ts +16 -0
  678. package/dist/lifeops/i18n/localized-examples-provider.d.ts.map +1 -0
  679. package/dist/lifeops/i18n/localized-examples-provider.js +33 -0
  680. package/dist/lifeops/i18n/localized-examples-provider.js.map +1 -0
  681. package/dist/lifeops/i18n/localized-examples-resolver.d.ts +32 -0
  682. package/dist/lifeops/i18n/localized-examples-resolver.d.ts.map +1 -0
  683. package/dist/lifeops/i18n/localized-examples-resolver.js +28 -0
  684. package/dist/lifeops/i18n/localized-examples-resolver.js.map +1 -0
  685. package/dist/lifeops/i18n/prompt-registry.d.ts +64 -0
  686. package/dist/lifeops/i18n/prompt-registry.d.ts.map +1 -0
  687. package/dist/lifeops/i18n/prompt-registry.js +283 -0
  688. package/dist/lifeops/i18n/prompt-registry.js.map +1 -0
  689. package/dist/lifeops/imessage-outbound-probe.d.ts +7 -0
  690. package/dist/lifeops/imessage-outbound-probe.d.ts.map +1 -0
  691. package/dist/lifeops/imessage-outbound-probe.js +81 -0
  692. package/dist/lifeops/imessage-outbound-probe.js.map +1 -0
  693. package/dist/lifeops/index.d.ts +24 -0
  694. package/dist/lifeops/index.d.ts.map +1 -0
  695. package/dist/lifeops/index.js +24 -0
  696. package/dist/lifeops/index.js.map +1 -0
  697. package/dist/lifeops/intent-sync.d.ts +64 -0
  698. package/dist/lifeops/intent-sync.d.ts.map +1 -0
  699. package/dist/lifeops/intent-sync.js +321 -0
  700. package/dist/lifeops/intent-sync.js.map +1 -0
  701. package/dist/lifeops/messaging/index.d.ts +2 -0
  702. package/dist/lifeops/messaging/index.d.ts.map +1 -0
  703. package/dist/lifeops/messaging/index.js +5 -0
  704. package/dist/lifeops/messaging/index.js.map +1 -0
  705. package/dist/lifeops/messaging/owner-send-policy.d.ts +3 -0
  706. package/dist/lifeops/messaging/owner-send-policy.d.ts.map +1 -0
  707. package/dist/lifeops/messaging/owner-send-policy.js +83 -0
  708. package/dist/lifeops/messaging/owner-send-policy.js.map +1 -0
  709. package/dist/lifeops/notifications-push.d.ts +37 -0
  710. package/dist/lifeops/notifications-push.d.ts.map +1 -0
  711. package/dist/lifeops/notifications-push.js +95 -0
  712. package/dist/lifeops/notifications-push.js.map +1 -0
  713. package/dist/lifeops/optimized-prompt-instructions.d.ts +5 -0
  714. package/dist/lifeops/optimized-prompt-instructions.d.ts.map +1 -0
  715. package/dist/lifeops/optimized-prompt-instructions.js +48 -0
  716. package/dist/lifeops/optimized-prompt-instructions.js.map +1 -0
  717. package/dist/lifeops/owner/fact-store.d.ts +143 -0
  718. package/dist/lifeops/owner/fact-store.d.ts.map +1 -0
  719. package/dist/lifeops/owner/fact-store.js +446 -0
  720. package/dist/lifeops/owner/fact-store.js.map +1 -0
  721. package/dist/lifeops/owner/profile-extraction-evaluator.d.ts +3 -0
  722. package/dist/lifeops/owner/profile-extraction-evaluator.d.ts.map +1 -0
  723. package/dist/lifeops/owner/profile-extraction-evaluator.js +241 -0
  724. package/dist/lifeops/owner/profile-extraction-evaluator.js.map +1 -0
  725. package/dist/lifeops/owner-profile.d.ts +61 -0
  726. package/dist/lifeops/owner-profile.d.ts.map +1 -0
  727. package/dist/lifeops/owner-profile.js +407 -0
  728. package/dist/lifeops/owner-profile.js.map +1 -0
  729. package/dist/lifeops/pending-prompts/store.d.ts +23 -0
  730. package/dist/lifeops/pending-prompts/store.d.ts.map +1 -0
  731. package/dist/lifeops/pending-prompts/store.js +16 -0
  732. package/dist/lifeops/pending-prompts/store.js.map +1 -0
  733. package/dist/lifeops/policy-memory.d.ts +190 -0
  734. package/dist/lifeops/policy-memory.d.ts.map +1 -0
  735. package/dist/lifeops/policy-memory.js +1026 -0
  736. package/dist/lifeops/policy-memory.js.map +1 -0
  737. package/dist/lifeops/priority-scoring.d.ts +51 -0
  738. package/dist/lifeops/priority-scoring.d.ts.map +1 -0
  739. package/dist/lifeops/priority-scoring.js +305 -0
  740. package/dist/lifeops/priority-scoring.js.map +1 -0
  741. package/dist/lifeops/privacy-egress.d.ts +92 -0
  742. package/dist/lifeops/privacy-egress.d.ts.map +1 -0
  743. package/dist/lifeops/privacy-egress.js +230 -0
  744. package/dist/lifeops/privacy-egress.js.map +1 -0
  745. package/dist/lifeops/privacy.d.ts +49 -0
  746. package/dist/lifeops/privacy.d.ts.map +1 -0
  747. package/dist/lifeops/privacy.js +66 -0
  748. package/dist/lifeops/privacy.js.map +1 -0
  749. package/dist/lifeops/redact-sensitive-data.d.ts +32 -0
  750. package/dist/lifeops/redact-sensitive-data.d.ts.map +1 -0
  751. package/dist/lifeops/redact-sensitive-data.js +98 -0
  752. package/dist/lifeops/redact-sensitive-data.js.map +1 -0
  753. package/dist/lifeops/registries/app-blocker-contribution.d.ts +13 -0
  754. package/dist/lifeops/registries/app-blocker-contribution.d.ts.map +1 -0
  755. package/dist/lifeops/registries/app-blocker-contribution.js +73 -0
  756. package/dist/lifeops/registries/app-blocker-contribution.js.map +1 -0
  757. package/dist/lifeops/registries/blocker-registry.d.ts +76 -0
  758. package/dist/lifeops/registries/blocker-registry.d.ts.map +1 -0
  759. package/dist/lifeops/registries/blocker-registry.js +40 -0
  760. package/dist/lifeops/registries/blocker-registry.js.map +1 -0
  761. package/dist/lifeops/registries/event-kind-registry.d.ts +57 -0
  762. package/dist/lifeops/registries/event-kind-registry.d.ts.map +1 -0
  763. package/dist/lifeops/registries/event-kind-registry.js +82 -0
  764. package/dist/lifeops/registries/event-kind-registry.js.map +1 -0
  765. package/dist/lifeops/registries/family-registry.d.ts +72 -0
  766. package/dist/lifeops/registries/family-registry.d.ts.map +1 -0
  767. package/dist/lifeops/registries/family-registry.js +98 -0
  768. package/dist/lifeops/registries/family-registry.js.map +1 -0
  769. package/dist/lifeops/registries/feature-flag-default-pack.d.ts +32 -0
  770. package/dist/lifeops/registries/feature-flag-default-pack.d.ts.map +1 -0
  771. package/dist/lifeops/registries/feature-flag-default-pack.js +36 -0
  772. package/dist/lifeops/registries/feature-flag-default-pack.js.map +1 -0
  773. package/dist/lifeops/registries/feature-flag-registry.d.ts +76 -0
  774. package/dist/lifeops/registries/feature-flag-registry.d.ts.map +1 -0
  775. package/dist/lifeops/registries/feature-flag-registry.js +68 -0
  776. package/dist/lifeops/registries/feature-flag-registry.js.map +1 -0
  777. package/dist/lifeops/registries/index.d.ts +24 -0
  778. package/dist/lifeops/registries/index.d.ts.map +1 -0
  779. package/dist/lifeops/registries/index.js +115 -0
  780. package/dist/lifeops/registries/index.js.map +1 -0
  781. package/dist/lifeops/registries/website-blocker-contribution.d.ts +21 -0
  782. package/dist/lifeops/registries/website-blocker-contribution.d.ts.map +1 -0
  783. package/dist/lifeops/registries/website-blocker-contribution.js +76 -0
  784. package/dist/lifeops/registries/website-blocker-contribution.js.map +1 -0
  785. package/dist/lifeops/registries/workflow-step-default-pack.d.ts +30 -0
  786. package/dist/lifeops/registries/workflow-step-default-pack.d.ts.map +1 -0
  787. package/dist/lifeops/registries/workflow-step-default-pack.js +315 -0
  788. package/dist/lifeops/registries/workflow-step-default-pack.js.map +1 -0
  789. package/dist/lifeops/registries/workflow-step-registry.d.ts +101 -0
  790. package/dist/lifeops/registries/workflow-step-registry.d.ts.map +1 -0
  791. package/dist/lifeops/registries/workflow-step-registry.js +56 -0
  792. package/dist/lifeops/registries/workflow-step-registry.js.map +1 -0
  793. package/dist/lifeops/relationships/extraction.d.ts +77 -0
  794. package/dist/lifeops/relationships/extraction.d.ts.map +1 -0
  795. package/dist/lifeops/relationships/extraction.js +146 -0
  796. package/dist/lifeops/relationships/extraction.js.map +1 -0
  797. package/dist/lifeops/relationships/index.d.ts +4 -0
  798. package/dist/lifeops/relationships/index.d.ts.map +1 -0
  799. package/dist/lifeops/relationships/index.js +19 -0
  800. package/dist/lifeops/relationships/index.js.map +1 -0
  801. package/dist/lifeops/relationships/mapping.d.ts +34 -0
  802. package/dist/lifeops/relationships/mapping.d.ts.map +1 -0
  803. package/dist/lifeops/relationships/mapping.js +87 -0
  804. package/dist/lifeops/relationships/mapping.js.map +1 -0
  805. package/dist/lifeops/relationships/store.d.ts +12 -0
  806. package/dist/lifeops/relationships/store.d.ts.map +1 -0
  807. package/dist/lifeops/relationships/store.js +5 -0
  808. package/dist/lifeops/relationships/store.js.map +1 -0
  809. package/dist/lifeops/relationships/types.d.ts +9 -0
  810. package/dist/lifeops/relationships/types.d.ts.map +1 -0
  811. package/dist/lifeops/relationships/types.js +11 -0
  812. package/dist/lifeops/relationships/types.js.map +1 -0
  813. package/dist/lifeops/relative-schedule-resolver.d.ts +13 -0
  814. package/dist/lifeops/relative-schedule-resolver.d.ts.map +1 -0
  815. package/dist/lifeops/relative-schedule-resolver.js +107 -0
  816. package/dist/lifeops/relative-schedule-resolver.js.map +1 -0
  817. package/dist/lifeops/relative-time.d.ts +15 -0
  818. package/dist/lifeops/relative-time.d.ts.map +1 -0
  819. package/dist/lifeops/relative-time.js +191 -0
  820. package/dist/lifeops/relative-time.js.map +1 -0
  821. package/dist/lifeops/repository.d.ts +638 -0
  822. package/dist/lifeops/repository.d.ts.map +1 -0
  823. package/dist/lifeops/repository.js +6289 -0
  824. package/dist/lifeops/repository.js.map +1 -0
  825. package/dist/lifeops/runtime-cache.d.ts +4 -0
  826. package/dist/lifeops/runtime-cache.d.ts.map +1 -0
  827. package/dist/lifeops/runtime-cache.js +7 -0
  828. package/dist/lifeops/runtime-cache.js.map +1 -0
  829. package/dist/lifeops/runtime-service-delegates.d.ts +236 -0
  830. package/dist/lifeops/runtime-service-delegates.d.ts.map +1 -0
  831. package/dist/lifeops/runtime-service-delegates.js +839 -0
  832. package/dist/lifeops/runtime-service-delegates.js.map +1 -0
  833. package/dist/lifeops/runtime.d.ts +13 -0
  834. package/dist/lifeops/runtime.d.ts.map +1 -0
  835. package/dist/lifeops/runtime.js +104 -0
  836. package/dist/lifeops/runtime.js.map +1 -0
  837. package/dist/lifeops/schedule-insight.d.ts +133 -0
  838. package/dist/lifeops/schedule-insight.d.ts.map +1 -0
  839. package/dist/lifeops/schedule-insight.js +726 -0
  840. package/dist/lifeops/schedule-insight.js.map +1 -0
  841. package/dist/lifeops/schedule-state.d.ts +39 -0
  842. package/dist/lifeops/schedule-state.d.ts.map +1 -0
  843. package/dist/lifeops/schedule-state.js +671 -0
  844. package/dist/lifeops/schedule-state.js.map +1 -0
  845. package/dist/lifeops/schedule-sync-config.d.ts +3 -0
  846. package/dist/lifeops/schedule-sync-config.d.ts.map +1 -0
  847. package/dist/lifeops/schedule-sync-config.js +23 -0
  848. package/dist/lifeops/schedule-sync-config.js.map +1 -0
  849. package/dist/lifeops/schedule-sync-contracts.d.ts +2 -0
  850. package/dist/lifeops/schedule-sync-contracts.d.ts.map +1 -0
  851. package/dist/lifeops/schedule-sync-contracts.js +2 -0
  852. package/dist/lifeops/schedule-sync-contracts.js.map +1 -0
  853. package/dist/lifeops/scheduled-task/index.d.ts +13 -0
  854. package/dist/lifeops/scheduled-task/index.d.ts.map +1 -0
  855. package/dist/lifeops/scheduled-task/index.js +14 -0
  856. package/dist/lifeops/scheduled-task/index.js.map +1 -0
  857. package/dist/lifeops/scheduled-task/runtime-wiring.d.ts +33 -0
  858. package/dist/lifeops/scheduled-task/runtime-wiring.d.ts.map +1 -0
  859. package/dist/lifeops/scheduled-task/runtime-wiring.js +334 -0
  860. package/dist/lifeops/scheduled-task/runtime-wiring.js.map +1 -0
  861. package/dist/lifeops/scheduled-task/scheduler.d.ts +28 -0
  862. package/dist/lifeops/scheduled-task/scheduler.d.ts.map +1 -0
  863. package/dist/lifeops/scheduled-task/scheduler.js +202 -0
  864. package/dist/lifeops/scheduled-task/scheduler.js.map +1 -0
  865. package/dist/lifeops/scheduled-task/service.d.ts +61 -0
  866. package/dist/lifeops/scheduled-task/service.d.ts.map +1 -0
  867. package/dist/lifeops/scheduled-task/service.js +64 -0
  868. package/dist/lifeops/scheduled-task/service.js.map +1 -0
  869. package/dist/lifeops/scheduler-task.d.ts +19 -0
  870. package/dist/lifeops/scheduler-task.d.ts.map +1 -0
  871. package/dist/lifeops/scheduler-task.js +201 -0
  872. package/dist/lifeops/scheduler-task.js.map +1 -0
  873. package/dist/lifeops/schema.d.ts +28068 -0
  874. package/dist/lifeops/schema.d.ts.map +1 -0
  875. package/dist/lifeops/schema.js +1689 -0
  876. package/dist/lifeops/schema.js.map +1 -0
  877. package/dist/lifeops/screen-context.d.ts +66 -0
  878. package/dist/lifeops/screen-context.d.ts.map +1 -0
  879. package/dist/lifeops/screen-context.js +347 -0
  880. package/dist/lifeops/screen-context.js.map +1 -0
  881. package/dist/lifeops/seed-routine-migration/migrator.d.ts +113 -0
  882. package/dist/lifeops/seed-routine-migration/migrator.d.ts.map +1 -0
  883. package/dist/lifeops/seed-routine-migration/migrator.js +142 -0
  884. package/dist/lifeops/seed-routine-migration/migrator.js.map +1 -0
  885. package/dist/lifeops/seed-routines.d.ts +24 -0
  886. package/dist/lifeops/seed-routines.d.ts.map +1 -0
  887. package/dist/lifeops/seed-routines.js +140 -0
  888. package/dist/lifeops/seed-routines.js.map +1 -0
  889. package/dist/lifeops/send-policy/contract.d.ts +81 -0
  890. package/dist/lifeops/send-policy/contract.d.ts.map +1 -0
  891. package/dist/lifeops/send-policy/contract.js +1 -0
  892. package/dist/lifeops/send-policy/contract.js.map +1 -0
  893. package/dist/lifeops/send-policy/index.d.ts +3 -0
  894. package/dist/lifeops/send-policy/index.d.ts.map +1 -0
  895. package/dist/lifeops/send-policy/index.js +13 -0
  896. package/dist/lifeops/send-policy/index.js.map +1 -0
  897. package/dist/lifeops/send-policy/registry.d.ts +7 -0
  898. package/dist/lifeops/send-policy/registry.d.ts.map +1 -0
  899. package/dist/lifeops/send-policy/registry.js +62 -0
  900. package/dist/lifeops/send-policy/registry.js.map +1 -0
  901. package/dist/lifeops/sensitive-request-delivery.d.ts +46 -0
  902. package/dist/lifeops/sensitive-request-delivery.d.ts.map +1 -0
  903. package/dist/lifeops/sensitive-request-delivery.js +103 -0
  904. package/dist/lifeops/sensitive-request-delivery.js.map +1 -0
  905. package/dist/lifeops/service-constants.d.ts +10 -0
  906. package/dist/lifeops/service-constants.d.ts.map +1 -0
  907. package/dist/lifeops/service-constants.js +129 -0
  908. package/dist/lifeops/service-constants.js.map +1 -0
  909. package/dist/lifeops/service-helpers-browser.d.ts +41 -0
  910. package/dist/lifeops/service-helpers-browser.d.ts.map +1 -0
  911. package/dist/lifeops/service-helpers-browser.js +290 -0
  912. package/dist/lifeops/service-helpers-browser.js.map +1 -0
  913. package/dist/lifeops/service-helpers-misc.d.ts +68 -0
  914. package/dist/lifeops/service-helpers-misc.d.ts.map +1 -0
  915. package/dist/lifeops/service-helpers-misc.js +531 -0
  916. package/dist/lifeops/service-helpers-misc.js.map +1 -0
  917. package/dist/lifeops/service-helpers-occurrence.d.ts +23 -0
  918. package/dist/lifeops/service-helpers-occurrence.d.ts.map +1 -0
  919. package/dist/lifeops/service-helpers-occurrence.js +257 -0
  920. package/dist/lifeops/service-helpers-occurrence.js.map +1 -0
  921. package/dist/lifeops/service-helpers-reminder.d.ts +260 -0
  922. package/dist/lifeops/service-helpers-reminder.d.ts.map +1 -0
  923. package/dist/lifeops/service-helpers-reminder.js +1186 -0
  924. package/dist/lifeops/service-helpers-reminder.js.map +1 -0
  925. package/dist/lifeops/service-mixin-browser.d.ts +31 -0
  926. package/dist/lifeops/service-mixin-browser.d.ts.map +1 -0
  927. package/dist/lifeops/service-mixin-browser.js +975 -0
  928. package/dist/lifeops/service-mixin-browser.js.map +1 -0
  929. package/dist/lifeops/service-mixin-calendar.d.ts +53 -0
  930. package/dist/lifeops/service-mixin-calendar.d.ts.map +1 -0
  931. package/dist/lifeops/service-mixin-calendar.js +68 -0
  932. package/dist/lifeops/service-mixin-calendar.js.map +1 -0
  933. package/dist/lifeops/service-mixin-core.d.ts +51 -0
  934. package/dist/lifeops/service-mixin-core.d.ts.map +1 -0
  935. package/dist/lifeops/service-mixin-core.js +500 -0
  936. package/dist/lifeops/service-mixin-core.js.map +1 -0
  937. package/dist/lifeops/service-mixin-definitions.d.ts +14 -0
  938. package/dist/lifeops/service-mixin-definitions.d.ts.map +1 -0
  939. package/dist/lifeops/service-mixin-definitions.js +470 -0
  940. package/dist/lifeops/service-mixin-definitions.js.map +1 -0
  941. package/dist/lifeops/service-mixin-discord.d.ts +49 -0
  942. package/dist/lifeops/service-mixin-discord.d.ts.map +1 -0
  943. package/dist/lifeops/service-mixin-discord.js +1253 -0
  944. package/dist/lifeops/service-mixin-discord.js.map +1 -0
  945. package/dist/lifeops/service-mixin-drive.d.ts +96 -0
  946. package/dist/lifeops/service-mixin-drive.d.ts.map +1 -0
  947. package/dist/lifeops/service-mixin-drive.js +213 -0
  948. package/dist/lifeops/service-mixin-drive.js.map +1 -0
  949. package/dist/lifeops/service-mixin-email-unsubscribe.d.ts +23 -0
  950. package/dist/lifeops/service-mixin-email-unsubscribe.d.ts.map +1 -0
  951. package/dist/lifeops/service-mixin-email-unsubscribe.js +27 -0
  952. package/dist/lifeops/service-mixin-email-unsubscribe.js.map +1 -0
  953. package/dist/lifeops/service-mixin-gmail.d.ts +43 -0
  954. package/dist/lifeops/service-mixin-gmail.d.ts.map +1 -0
  955. package/dist/lifeops/service-mixin-gmail.js +727 -0
  956. package/dist/lifeops/service-mixin-gmail.js.map +1 -0
  957. package/dist/lifeops/service-mixin-goals.d.ts +22 -0
  958. package/dist/lifeops/service-mixin-goals.d.ts.map +1 -0
  959. package/dist/lifeops/service-mixin-goals.js +884 -0
  960. package/dist/lifeops/service-mixin-goals.js.map +1 -0
  961. package/dist/lifeops/service-mixin-google.d.ts +13 -0
  962. package/dist/lifeops/service-mixin-google.d.ts.map +1 -0
  963. package/dist/lifeops/service-mixin-google.js +398 -0
  964. package/dist/lifeops/service-mixin-google.js.map +1 -0
  965. package/dist/lifeops/service-mixin-health.d.ts +27 -0
  966. package/dist/lifeops/service-mixin-health.d.ts.map +1 -0
  967. package/dist/lifeops/service-mixin-health.js +670 -0
  968. package/dist/lifeops/service-mixin-health.js.map +1 -0
  969. package/dist/lifeops/service-mixin-imessage.d.ts +106 -0
  970. package/dist/lifeops/service-mixin-imessage.d.ts.map +1 -0
  971. package/dist/lifeops/service-mixin-imessage.js +303 -0
  972. package/dist/lifeops/service-mixin-imessage.js.map +1 -0
  973. package/dist/lifeops/service-mixin-inbox.d.ts +55 -0
  974. package/dist/lifeops/service-mixin-inbox.d.ts.map +1 -0
  975. package/dist/lifeops/service-mixin-inbox.js +597 -0
  976. package/dist/lifeops/service-mixin-inbox.js.map +1 -0
  977. package/dist/lifeops/service-mixin-relationships.d.ts +65 -0
  978. package/dist/lifeops/service-mixin-relationships.d.ts.map +1 -0
  979. package/dist/lifeops/service-mixin-relationships.js +150 -0
  980. package/dist/lifeops/service-mixin-relationships.js.map +1 -0
  981. package/dist/lifeops/service-mixin-reminders.d.ts +62 -0
  982. package/dist/lifeops/service-mixin-reminders.d.ts.map +1 -0
  983. package/dist/lifeops/service-mixin-reminders.js +4003 -0
  984. package/dist/lifeops/service-mixin-reminders.js.map +1 -0
  985. package/dist/lifeops/service-mixin-scheduling.d.ts +53 -0
  986. package/dist/lifeops/service-mixin-scheduling.d.ts.map +1 -0
  987. package/dist/lifeops/service-mixin-scheduling.js +405 -0
  988. package/dist/lifeops/service-mixin-scheduling.js.map +1 -0
  989. package/dist/lifeops/service-mixin-screentime.d.ts +71 -0
  990. package/dist/lifeops/service-mixin-screentime.d.ts.map +1 -0
  991. package/dist/lifeops/service-mixin-screentime.js +530 -0
  992. package/dist/lifeops/service-mixin-screentime.js.map +1 -0
  993. package/dist/lifeops/service-mixin-signal.d.ts +74 -0
  994. package/dist/lifeops/service-mixin-signal.d.ts.map +1 -0
  995. package/dist/lifeops/service-mixin-signal.js +214 -0
  996. package/dist/lifeops/service-mixin-signal.js.map +1 -0
  997. package/dist/lifeops/service-mixin-sleep.d.ts +68 -0
  998. package/dist/lifeops/service-mixin-sleep.d.ts.map +1 -0
  999. package/dist/lifeops/service-mixin-sleep.js +43 -0
  1000. package/dist/lifeops/service-mixin-sleep.js.map +1 -0
  1001. package/dist/lifeops/service-mixin-status.d.ts +31 -0
  1002. package/dist/lifeops/service-mixin-status.d.ts.map +1 -0
  1003. package/dist/lifeops/service-mixin-status.js +373 -0
  1004. package/dist/lifeops/service-mixin-status.js.map +1 -0
  1005. package/dist/lifeops/service-mixin-subscriptions.d.ts +101 -0
  1006. package/dist/lifeops/service-mixin-subscriptions.d.ts.map +1 -0
  1007. package/dist/lifeops/service-mixin-subscriptions.js +50 -0
  1008. package/dist/lifeops/service-mixin-subscriptions.js.map +1 -0
  1009. package/dist/lifeops/service-mixin-telegram.d.ts +104 -0
  1010. package/dist/lifeops/service-mixin-telegram.d.ts.map +1 -0
  1011. package/dist/lifeops/service-mixin-telegram.js +280 -0
  1012. package/dist/lifeops/service-mixin-telegram.js.map +1 -0
  1013. package/dist/lifeops/service-mixin-travel.d.ts +66 -0
  1014. package/dist/lifeops/service-mixin-travel.d.ts.map +1 -0
  1015. package/dist/lifeops/service-mixin-travel.js +275 -0
  1016. package/dist/lifeops/service-mixin-travel.js.map +1 -0
  1017. package/dist/lifeops/service-mixin-whatsapp.d.ts +96 -0
  1018. package/dist/lifeops/service-mixin-whatsapp.d.ts.map +1 -0
  1019. package/dist/lifeops/service-mixin-whatsapp.js +186 -0
  1020. package/dist/lifeops/service-mixin-whatsapp.js.map +1 -0
  1021. package/dist/lifeops/service-mixin-workflows.d.ts +15 -0
  1022. package/dist/lifeops/service-mixin-workflows.d.ts.map +1 -0
  1023. package/dist/lifeops/service-mixin-workflows.js +710 -0
  1024. package/dist/lifeops/service-mixin-workflows.js.map +1 -0
  1025. package/dist/lifeops/service-mixin-x-read.d.ts +31 -0
  1026. package/dist/lifeops/service-mixin-x-read.d.ts.map +1 -0
  1027. package/dist/lifeops/service-mixin-x-read.js +267 -0
  1028. package/dist/lifeops/service-mixin-x-read.js.map +1 -0
  1029. package/dist/lifeops/service-mixin-x.d.ts +66 -0
  1030. package/dist/lifeops/service-mixin-x.d.ts.map +1 -0
  1031. package/dist/lifeops/service-mixin-x.js +501 -0
  1032. package/dist/lifeops/service-mixin-x.js.map +1 -0
  1033. package/dist/lifeops/service-normalize-connector.d.ts +19 -0
  1034. package/dist/lifeops/service-normalize-connector.d.ts.map +1 -0
  1035. package/dist/lifeops/service-normalize-connector.js +816 -0
  1036. package/dist/lifeops/service-normalize-connector.js.map +1 -0
  1037. package/dist/lifeops/service-normalize-gmail.d.ts +11 -0
  1038. package/dist/lifeops/service-normalize-gmail.d.ts.map +1 -0
  1039. package/dist/lifeops/service-normalize-gmail.js +85 -0
  1040. package/dist/lifeops/service-normalize-gmail.js.map +1 -0
  1041. package/dist/lifeops/service-normalize-task.d.ts +9 -0
  1042. package/dist/lifeops/service-normalize-task.d.ts.map +1 -0
  1043. package/dist/lifeops/service-normalize-task.js +567 -0
  1044. package/dist/lifeops/service-normalize-task.js.map +1 -0
  1045. package/dist/lifeops/service-normalize.d.ts +9 -0
  1046. package/dist/lifeops/service-normalize.d.ts.map +1 -0
  1047. package/dist/lifeops/service-normalize.js +53 -0
  1048. package/dist/lifeops/service-normalize.js.map +1 -0
  1049. package/dist/lifeops/service-types.d.ts +75 -0
  1050. package/dist/lifeops/service-types.d.ts.map +1 -0
  1051. package/dist/lifeops/service-types.js +5 -0
  1052. package/dist/lifeops/service-types.js.map +1 -0
  1053. package/dist/lifeops/service.d.ts +482 -0
  1054. package/dist/lifeops/service.d.ts.map +1 -0
  1055. package/dist/lifeops/service.js +62 -0
  1056. package/dist/lifeops/service.js.map +1 -0
  1057. package/dist/lifeops/signal-runtime-config.d.ts +13 -0
  1058. package/dist/lifeops/signal-runtime-config.d.ts.map +1 -0
  1059. package/dist/lifeops/signal-runtime-config.js +44 -0
  1060. package/dist/lifeops/signal-runtime-config.js.map +1 -0
  1061. package/dist/lifeops/signals/bus.d.ts +78 -0
  1062. package/dist/lifeops/signals/bus.d.ts.map +1 -0
  1063. package/dist/lifeops/signals/bus.js +117 -0
  1064. package/dist/lifeops/signals/bus.js.map +1 -0
  1065. package/dist/lifeops/sql.d.ts +65 -0
  1066. package/dist/lifeops/sql.d.ts.map +1 -0
  1067. package/dist/lifeops/sql.js +182 -0
  1068. package/dist/lifeops/sql.js.map +1 -0
  1069. package/dist/lifeops/stretch-decider.d.ts +73 -0
  1070. package/dist/lifeops/stretch-decider.d.ts.map +1 -0
  1071. package/dist/lifeops/stretch-decider.js +49 -0
  1072. package/dist/lifeops/stretch-decider.js.map +1 -0
  1073. package/dist/lifeops/telemetry-mapping.d.ts +14 -0
  1074. package/dist/lifeops/telemetry-mapping.d.ts.map +1 -0
  1075. package/dist/lifeops/telemetry-mapping.js +115 -0
  1076. package/dist/lifeops/telemetry-mapping.js.map +1 -0
  1077. package/dist/lifeops/telemetry-retention.d.ts +21 -0
  1078. package/dist/lifeops/telemetry-retention.d.ts.map +1 -0
  1079. package/dist/lifeops/telemetry-retention.js +13 -0
  1080. package/dist/lifeops/telemetry-retention.js.map +1 -0
  1081. package/dist/lifeops/time/timezone.d.ts +4 -0
  1082. package/dist/lifeops/time/timezone.d.ts.map +1 -0
  1083. package/dist/lifeops/time/timezone.js +154 -0
  1084. package/dist/lifeops/time/timezone.js.map +1 -0
  1085. package/dist/lifeops/time-util.d.ts +10 -0
  1086. package/dist/lifeops/time-util.d.ts.map +1 -0
  1087. package/dist/lifeops/time-util.js +14 -0
  1088. package/dist/lifeops/time-util.js.map +1 -0
  1089. package/dist/lifeops/time.d.ts +17 -0
  1090. package/dist/lifeops/time.d.ts.map +1 -0
  1091. package/dist/lifeops/time.js +152 -0
  1092. package/dist/lifeops/time.js.map +1 -0
  1093. package/dist/lifeops/travel-booking.types.d.ts +46 -0
  1094. package/dist/lifeops/travel-booking.types.d.ts.map +1 -0
  1095. package/dist/lifeops/travel-booking.types.js +1 -0
  1096. package/dist/lifeops/travel-booking.types.js.map +1 -0
  1097. package/dist/lifeops/triggers/schedule-once.d.ts +19 -0
  1098. package/dist/lifeops/triggers/schedule-once.d.ts.map +1 -0
  1099. package/dist/lifeops/triggers/schedule-once.js +99 -0
  1100. package/dist/lifeops/triggers/schedule-once.js.map +1 -0
  1101. package/dist/lifeops/validate/coding-task-request.d.ts +18 -0
  1102. package/dist/lifeops/validate/coding-task-request.d.ts.map +1 -0
  1103. package/dist/lifeops/validate/coding-task-request.js +16 -0
  1104. package/dist/lifeops/validate/coding-task-request.js.map +1 -0
  1105. package/dist/lifeops/voice/grounded-reply.d.ts +41 -0
  1106. package/dist/lifeops/voice/grounded-reply.d.ts.map +1 -0
  1107. package/dist/lifeops/voice/grounded-reply.js +24 -0
  1108. package/dist/lifeops/voice/grounded-reply.js.map +1 -0
  1109. package/dist/lifeops/voice-affect.d.ts +79 -0
  1110. package/dist/lifeops/voice-affect.d.ts.map +1 -0
  1111. package/dist/lifeops/voice-affect.js +253 -0
  1112. package/dist/lifeops/voice-affect.js.map +1 -0
  1113. package/dist/lifeops/wave1-types.d.ts +125 -0
  1114. package/dist/lifeops/wave1-types.d.ts.map +1 -0
  1115. package/dist/lifeops/wave1-types.js +1 -0
  1116. package/dist/lifeops/wave1-types.js.map +1 -0
  1117. package/dist/lifeops/work-threads/field-evaluator-thread-ops.d.ts +33 -0
  1118. package/dist/lifeops/work-threads/field-evaluator-thread-ops.d.ts.map +1 -0
  1119. package/dist/lifeops/work-threads/field-evaluator-thread-ops.js +226 -0
  1120. package/dist/lifeops/work-threads/field-evaluator-thread-ops.js.map +1 -0
  1121. package/dist/lifeops/work-threads/index.d.ts +3 -0
  1122. package/dist/lifeops/work-threads/index.d.ts.map +1 -0
  1123. package/dist/lifeops/work-threads/index.js +7 -0
  1124. package/dist/lifeops/work-threads/index.js.map +1 -0
  1125. package/dist/lifeops/work-threads/store.d.ts +91 -0
  1126. package/dist/lifeops/work-threads/store.d.ts.map +1 -0
  1127. package/dist/lifeops/work-threads/store.js +245 -0
  1128. package/dist/lifeops/work-threads/store.js.map +1 -0
  1129. package/dist/lifeops/work-threads/types.d.ts +58 -0
  1130. package/dist/lifeops/work-threads/types.d.ts.map +1 -0
  1131. package/dist/lifeops/work-threads/types.js +1 -0
  1132. package/dist/lifeops/work-threads/types.js.map +1 -0
  1133. package/dist/platform/host.d.ts +16 -0
  1134. package/dist/platform/host.d.ts.map +1 -0
  1135. package/dist/platform/host.js +22 -0
  1136. package/dist/platform/host.js.map +1 -0
  1137. package/dist/platform/index.d.ts +3 -0
  1138. package/dist/platform/index.d.ts.map +1 -0
  1139. package/dist/platform/index.js +3 -0
  1140. package/dist/platform/index.js.map +1 -0
  1141. package/dist/platform/lifeops-github.d.ts +15 -0
  1142. package/dist/platform/lifeops-github.d.ts.map +1 -0
  1143. package/dist/platform/lifeops-github.js +146 -0
  1144. package/dist/platform/lifeops-github.js.map +1 -0
  1145. package/dist/plugin.d.ts +106 -0
  1146. package/dist/plugin.d.ts.map +1 -0
  1147. package/dist/plugin.js +989 -0
  1148. package/dist/plugin.js.map +1 -0
  1149. package/dist/provider.d.ts +4 -0
  1150. package/dist/provider.d.ts.map +1 -0
  1151. package/dist/provider.js +108 -0
  1152. package/dist/provider.js.map +1 -0
  1153. package/dist/providers/activity-profile.d.ts +3 -0
  1154. package/dist/providers/activity-profile.d.ts.map +1 -0
  1155. package/dist/providers/activity-profile.js +140 -0
  1156. package/dist/providers/activity-profile.js.map +1 -0
  1157. package/dist/providers/cross-channel-context.d.ts +29 -0
  1158. package/dist/providers/cross-channel-context.d.ts.map +1 -0
  1159. package/dist/providers/cross-channel-context.js +206 -0
  1160. package/dist/providers/cross-channel-context.js.map +1 -0
  1161. package/dist/providers/first-run.d.ts +22 -0
  1162. package/dist/providers/first-run.d.ts.map +1 -0
  1163. package/dist/providers/first-run.js +93 -0
  1164. package/dist/providers/first-run.js.map +1 -0
  1165. package/dist/providers/health.d.ts +2 -0
  1166. package/dist/providers/health.d.ts.map +1 -0
  1167. package/dist/providers/health.js +14 -0
  1168. package/dist/providers/health.js.map +1 -0
  1169. package/dist/providers/inbox-triage.d.ts +3 -0
  1170. package/dist/providers/inbox-triage.d.ts.map +1 -0
  1171. package/dist/providers/inbox-triage.js +134 -0
  1172. package/dist/providers/inbox-triage.js.map +1 -0
  1173. package/dist/providers/lifeops.d.ts +3 -0
  1174. package/dist/providers/lifeops.d.ts.map +1 -0
  1175. package/dist/providers/lifeops.js +548 -0
  1176. package/dist/providers/lifeops.js.map +1 -0
  1177. package/dist/providers/pending-prompts.d.ts +38 -0
  1178. package/dist/providers/pending-prompts.d.ts.map +1 -0
  1179. package/dist/providers/pending-prompts.js +81 -0
  1180. package/dist/providers/pending-prompts.js.map +1 -0
  1181. package/dist/providers/recent-task-states.d.ts +52 -0
  1182. package/dist/providers/recent-task-states.d.ts.map +1 -0
  1183. package/dist/providers/recent-task-states.js +166 -0
  1184. package/dist/providers/recent-task-states.js.map +1 -0
  1185. package/dist/providers/room-policy.d.ts +16 -0
  1186. package/dist/providers/room-policy.d.ts.map +1 -0
  1187. package/dist/providers/room-policy.js +71 -0
  1188. package/dist/providers/room-policy.js.map +1 -0
  1189. package/dist/providers/work-threads.d.ts +3 -0
  1190. package/dist/providers/work-threads.d.ts.map +1 -0
  1191. package/dist/providers/work-threads.js +97 -0
  1192. package/dist/providers/work-threads.js.map +1 -0
  1193. package/dist/public.d.ts +3 -0
  1194. package/dist/public.d.ts.map +1 -0
  1195. package/dist/public.js +17 -0
  1196. package/dist/public.js.map +1 -0
  1197. package/dist/routes/cloud-features-routes.d.ts +9 -0
  1198. package/dist/routes/cloud-features-routes.d.ts.map +1 -0
  1199. package/dist/routes/cloud-features-routes.js +164 -0
  1200. package/dist/routes/cloud-features-routes.js.map +1 -0
  1201. package/dist/routes/entities.d.ts +14 -0
  1202. package/dist/routes/entities.d.ts.map +1 -0
  1203. package/dist/routes/entities.js +203 -0
  1204. package/dist/routes/entities.js.map +1 -0
  1205. package/dist/routes/lifeops-routes.d.ts +20 -0
  1206. package/dist/routes/lifeops-routes.d.ts.map +1 -0
  1207. package/dist/routes/lifeops-routes.js +2337 -0
  1208. package/dist/routes/lifeops-routes.js.map +1 -0
  1209. package/dist/routes/plugin.d.ts +9 -0
  1210. package/dist/routes/plugin.d.ts.map +1 -0
  1211. package/dist/routes/plugin.js +568 -0
  1212. package/dist/routes/plugin.js.map +1 -0
  1213. package/dist/routes/relationships.d.ts +13 -0
  1214. package/dist/routes/relationships.d.ts.map +1 -0
  1215. package/dist/routes/relationships.js +195 -0
  1216. package/dist/routes/relationships.js.map +1 -0
  1217. package/dist/routes/scheduled-tasks.d.ts +102 -0
  1218. package/dist/routes/scheduled-tasks.d.ts.map +1 -0
  1219. package/dist/routes/scheduled-tasks.js +322 -0
  1220. package/dist/routes/scheduled-tasks.js.map +1 -0
  1221. package/dist/routes/sleep-routes.d.ts +3 -0
  1222. package/dist/routes/sleep-routes.d.ts.map +1 -0
  1223. package/dist/routes/sleep-routes.js +33 -0
  1224. package/dist/routes/sleep-routes.js.map +1 -0
  1225. package/dist/routes/travel-provider-relay-routes.d.ts +2 -0
  1226. package/dist/routes/travel-provider-relay-routes.d.ts.map +1 -0
  1227. package/dist/routes/travel-provider-relay-routes.js +7 -0
  1228. package/dist/routes/travel-provider-relay-routes.js.map +1 -0
  1229. package/dist/routes/website-blocker-routes.d.ts +6 -0
  1230. package/dist/routes/website-blocker-routes.d.ts.map +1 -0
  1231. package/dist/routes/website-blocker-routes.js +218 -0
  1232. package/dist/routes/website-blocker-routes.js.map +1 -0
  1233. package/dist/security/action-confirmation.d.ts +12 -0
  1234. package/dist/security/action-confirmation.d.ts.map +1 -0
  1235. package/dist/security/action-confirmation.js +36 -0
  1236. package/dist/security/action-confirmation.js.map +1 -0
  1237. package/dist/service.d.ts +34 -0
  1238. package/dist/service.d.ts.map +1 -0
  1239. package/dist/service.js +111 -0
  1240. package/dist/service.js.map +1 -0
  1241. package/dist/travel-time/calendar-create.d.ts +17 -0
  1242. package/dist/travel-time/calendar-create.d.ts.map +1 -0
  1243. package/dist/travel-time/calendar-create.js +28 -0
  1244. package/dist/travel-time/calendar-create.js.map +1 -0
  1245. package/dist/travel-time/service.d.ts +114 -0
  1246. package/dist/travel-time/service.d.ts.map +1 -0
  1247. package/dist/travel-time/service.js +209 -0
  1248. package/dist/travel-time/service.js.map +1 -0
  1249. package/dist/types/app-blocker-settings-card.d.ts +2 -0
  1250. package/dist/types/app-blocker-settings-card.d.ts.map +1 -0
  1251. package/dist/types/app-blocker-settings-card.js +1 -0
  1252. package/dist/types/app-blocker-settings-card.js.map +1 -0
  1253. package/dist/types/briefing.d.ts +59 -0
  1254. package/dist/types/briefing.d.ts.map +1 -0
  1255. package/dist/types/briefing.js +1 -0
  1256. package/dist/types/briefing.js.map +1 -0
  1257. package/dist/types/document-request.d.ts +41 -0
  1258. package/dist/types/document-request.d.ts.map +1 -0
  1259. package/dist/types/document-request.js +1 -0
  1260. package/dist/types/document-request.js.map +1 -0
  1261. package/dist/types/index.d.ts +5 -0
  1262. package/dist/types/index.d.ts.map +1 -0
  1263. package/dist/types/index.js +1 -0
  1264. package/dist/types/index.js.map +1 -0
  1265. package/dist/types/website-blocker-settings-card.d.ts +2 -0
  1266. package/dist/types/website-blocker-settings-card.d.ts.map +1 -0
  1267. package/dist/types/website-blocker-settings-card.js +1 -0
  1268. package/dist/types/website-blocker-settings-card.js.map +1 -0
  1269. package/dist/ui.d.ts +13 -0
  1270. package/dist/ui.d.ts.map +1 -0
  1271. package/dist/ui.js +25 -0
  1272. package/dist/ui.js.map +1 -0
  1273. package/dist/utils/format-duration.d.ts +2 -0
  1274. package/dist/utils/format-duration.d.ts.map +1 -0
  1275. package/dist/utils/format-duration.js +13 -0
  1276. package/dist/utils/format-duration.js.map +1 -0
  1277. package/dist/utils/index.d.ts +3 -0
  1278. package/dist/utils/index.d.ts.map +1 -0
  1279. package/dist/utils/index.js +3 -0
  1280. package/dist/utils/index.js.map +1 -0
  1281. package/dist/utils/lifeops-url.d.ts +3 -0
  1282. package/dist/utils/lifeops-url.d.ts.map +1 -0
  1283. package/dist/utils/lifeops-url.js +28 -0
  1284. package/dist/utils/lifeops-url.js.map +1 -0
  1285. package/dist/website-blocker/chat-integration/block-activator.d.ts +32 -0
  1286. package/dist/website-blocker/chat-integration/block-activator.d.ts.map +1 -0
  1287. package/dist/website-blocker/chat-integration/block-activator.js +30 -0
  1288. package/dist/website-blocker/chat-integration/block-activator.js.map +1 -0
  1289. package/dist/website-blocker/chat-integration/block-rule-reconciler.d.ts +7 -0
  1290. package/dist/website-blocker/chat-integration/block-rule-reconciler.d.ts.map +1 -0
  1291. package/dist/website-blocker/chat-integration/block-rule-reconciler.js +115 -0
  1292. package/dist/website-blocker/chat-integration/block-rule-reconciler.js.map +1 -0
  1293. package/dist/website-blocker/chat-integration/block-rule-schema.d.ts +39 -0
  1294. package/dist/website-blocker/chat-integration/block-rule-schema.d.ts.map +1 -0
  1295. package/dist/website-blocker/chat-integration/block-rule-schema.js +133 -0
  1296. package/dist/website-blocker/chat-integration/block-rule-schema.js.map +1 -0
  1297. package/dist/website-blocker/chat-integration/block-rule-service.d.ts +21 -0
  1298. package/dist/website-blocker/chat-integration/block-rule-service.d.ts.map +1 -0
  1299. package/dist/website-blocker/chat-integration/block-rule-service.js +230 -0
  1300. package/dist/website-blocker/chat-integration/block-rule-service.js.map +1 -0
  1301. package/dist/website-blocker/chat-integration/harsh-mode-check.d.ts +13 -0
  1302. package/dist/website-blocker/chat-integration/harsh-mode-check.d.ts.map +1 -0
  1303. package/dist/website-blocker/chat-integration/harsh-mode-check.js +22 -0
  1304. package/dist/website-blocker/chat-integration/harsh-mode-check.js.map +1 -0
  1305. package/dist/website-blocker/chat-integration/index.d.ts +5 -0
  1306. package/dist/website-blocker/chat-integration/index.d.ts.map +1 -0
  1307. package/dist/website-blocker/chat-integration/index.js +26 -0
  1308. package/dist/website-blocker/chat-integration/index.js.map +1 -0
  1309. package/dist/website-blocker/proactive-block-bridge.d.ts +75 -0
  1310. package/dist/website-blocker/proactive-block-bridge.d.ts.map +1 -0
  1311. package/dist/website-blocker/proactive-block-bridge.js +154 -0
  1312. package/dist/website-blocker/proactive-block-bridge.js.map +1 -0
  1313. package/dist/website-blocker/public.d.ts +12 -0
  1314. package/dist/website-blocker/public.d.ts.map +1 -0
  1315. package/dist/website-blocker/public.js +51 -0
  1316. package/dist/website-blocker/public.js.map +1 -0
  1317. package/package.json +28 -28
@@ -0,0 +1,529 @@
1
+ import { getLocalDateKey, getZonedDateParts } from "../lifeops/time.js";
2
+ import { resolveEffectiveDayKey, wasActiveToday } from "./analyzer.js";
3
+ const GM_LEAD_MINUTES = 30;
4
+ const DEFAULT_GM_HOUR = 8;
5
+ const GM_CUTOFF_HOUR = 11;
6
+ const GN_LAG_MINUTES = 30;
7
+ const DEFAULT_GN_HOUR = 22;
8
+ const GN_MIN_HOUR = 17;
9
+ const ONCE_PER_DAY_GUARD_MS = 12 * 60 * 60 * 1e3;
10
+ const NUDGE_LEAD_MINUTES = 30;
11
+ const NUDGE_HORIZON_MINUTES = 45;
12
+ const INACTIVITY_SKIP_MS = 48 * 60 * 60 * 1e3;
13
+ const GOAL_CHECK_IN_COOLDOWN_DAYS = 3;
14
+ const SOCIAL_OVERUSE_WINDOW_MINUTES = 90;
15
+ const SOCIAL_OVERUSE_THRESHOLD_MINUTES = 60;
16
+ const SOCIAL_OVERUSE_COOLDOWN_MS = 4 * 60 * 60 * 1e3;
17
+ function firedRecently(firedAt, now) {
18
+ if (!firedAt) return false;
19
+ const elapsedMs = now.getTime() - firedAt;
20
+ if (elapsedMs < 0) return true;
21
+ return elapsedMs < ONCE_PER_DAY_GUARD_MS;
22
+ }
23
+ function planGm(profile, occurrences, calendarEvents, relativeTime, inboxDigest, firedToday, timezone, now) {
24
+ const currentTime = now ?? /* @__PURE__ */ new Date();
25
+ if (profile.isCurrentlySleeping) {
26
+ return null;
27
+ }
28
+ if (firedRecently(firedToday?.gmFiredAt, currentTime)) {
29
+ return null;
30
+ }
31
+ if (profile.lastSeenAt > 0 && currentTime.getTime() - profile.lastSeenAt > INACTIVITY_SKIP_MS) {
32
+ return makeSkipped("gm", currentTime, profile, "user inactive for 48h+");
33
+ }
34
+ const localDateKey = getLocalDateKey(
35
+ getZonedDateParts(currentTime, timezone)
36
+ );
37
+ if (resolveEffectiveDayKey(profile, timezone, currentTime) !== localDateKey) {
38
+ return null;
39
+ }
40
+ const gmTime = resolveWakeTriggeredGmTime(relativeTime, timezone, currentTime) ?? localHourToEpoch(
41
+ resolveGmHour(profile, calendarEvents, timezone, currentTime),
42
+ timezone,
43
+ currentTime
44
+ );
45
+ const parts = getZonedDateParts(currentTime, timezone);
46
+ if (parts.hour >= GM_CUTOFF_HOUR) {
47
+ return null;
48
+ }
49
+ const contextParts = [];
50
+ const morningOccurrences = occurrences.filter((occ) => {
51
+ if (!occ.dueAt || occ.state === "completed" || occ.state === "skipped")
52
+ return false;
53
+ const dueMs = new Date(occ.dueAt).getTime();
54
+ const dueParts = getZonedDateParts(new Date(occ.dueAt), timezone);
55
+ return dueMs >= currentTime.getTime() && dueParts.hour < 12;
56
+ });
57
+ if (morningOccurrences.length > 0) {
58
+ const names = morningOccurrences.map((o) => o.title).join(", ");
59
+ contextParts.push(`morning habits: ${names}`);
60
+ }
61
+ const todayEvents = getTodayActionableEvents(
62
+ calendarEvents,
63
+ timezone,
64
+ currentTime
65
+ );
66
+ if (todayEvents.length > 0) {
67
+ const first = todayEvents[0];
68
+ if (first) {
69
+ const firstParts = getZonedDateParts(new Date(first.startAt), timezone);
70
+ contextParts.push(
71
+ `${todayEvents.length} meeting${todayEvents.length > 1 ? "s" : ""} today, first at ${firstParts.hour}:${String(firstParts.minute).padStart(2, "0")}`
72
+ );
73
+ }
74
+ }
75
+ appendInboxDigestContext(contextParts, inboxDigest);
76
+ const contextSummary = contextParts.length > 0 ? `gm context: ${contextParts.join(" | ")}` : "gm";
77
+ return {
78
+ kind: "gm",
79
+ scheduledFor: gmTime,
80
+ targetPlatform: selectTargetPlatform(profile, false),
81
+ contextSummary,
82
+ messageText: buildDigestMessage("gm", contextParts, inboxDigest),
83
+ status: "pending"
84
+ };
85
+ }
86
+ function planGn(profile, relativeTime, inboxDigest, firedToday, timezone, now) {
87
+ const currentTime = now ?? /* @__PURE__ */ new Date();
88
+ if (profile.isCurrentlySleeping) {
89
+ return null;
90
+ }
91
+ if (firedRecently(firedToday?.gnFiredAt, currentTime)) {
92
+ return null;
93
+ }
94
+ if (!wasActiveToday(profile, timezone, currentTime)) {
95
+ return null;
96
+ }
97
+ const gnTime = resolveNightSummaryTime(relativeTime, timezone, currentTime) ?? localHourToEpoch(resolveGnHour(profile), timezone, currentTime);
98
+ const contextParts = [];
99
+ appendInboxDigestContext(contextParts, inboxDigest);
100
+ return {
101
+ kind: "gn",
102
+ scheduledFor: gnTime,
103
+ targetPlatform: selectTargetPlatform(profile, true),
104
+ contextSummary: contextParts.length > 0 ? `gn context: ${contextParts.join(" | ")}` : "gn",
105
+ messageText: buildDigestMessage("gn", contextParts, inboxDigest),
106
+ status: "pending"
107
+ };
108
+ }
109
+ function planNudges(profile, occurrences, calendarEvents, firedToday, timezone, now) {
110
+ const currentTime = now ?? /* @__PURE__ */ new Date();
111
+ if (profile.isCurrentlySleeping) {
112
+ return [];
113
+ }
114
+ const actions = [];
115
+ const nudgedIds = new Set(firedToday?.nudgedOccurrenceIds ?? []);
116
+ const nudgedEventIds = new Set(firedToday?.nudgedCalendarEventIds ?? []);
117
+ const horizonMs = currentTime.getTime() + NUDGE_HORIZON_MINUTES * 60 * 1e3;
118
+ const leadMs = NUDGE_LEAD_MINUTES * 60 * 1e3;
119
+ for (const occ of occurrences) {
120
+ if (!occ.dueAt || occ.state === "completed" || occ.state === "skipped")
121
+ continue;
122
+ if (nudgedIds.has(occ.id)) continue;
123
+ const dueMs = new Date(occ.dueAt).getTime();
124
+ if (dueMs > horizonMs || dueMs < currentTime.getTime()) continue;
125
+ const nearbyEvent = findNearbyCalendarEvent(
126
+ calendarEvents,
127
+ dueMs,
128
+ timezone,
129
+ currentTime
130
+ );
131
+ const contextParts = [occ.title];
132
+ if (nearbyEvent) {
133
+ const eventParts = getZonedDateParts(
134
+ new Date(nearbyEvent.startAt),
135
+ timezone
136
+ );
137
+ contextParts.push(
138
+ `before your ${eventParts.hour}:${String(eventParts.minute).padStart(2, "0")} ${nearbyEvent.summary}`
139
+ );
140
+ }
141
+ actions.push({
142
+ kind: "pre_activity_nudge",
143
+ scheduledFor: dueMs - leadMs,
144
+ targetPlatform: selectTargetPlatform(profile, true),
145
+ contextSummary: contextParts.join(" \u2014 "),
146
+ messageText: contextParts.join(" \u2014 "),
147
+ occurrenceId: occ.id,
148
+ status: "pending"
149
+ });
150
+ }
151
+ for (const event of calendarEvents) {
152
+ if (!shouldNudgeCalendarEvent(event)) continue;
153
+ if (nudgedEventIds.has(event.id)) continue;
154
+ const startMs = new Date(event.startAt).getTime();
155
+ if (startMs > horizonMs || startMs < currentTime.getTime()) continue;
156
+ actions.push({
157
+ kind: "pre_activity_nudge",
158
+ scheduledFor: startMs - leadMs,
159
+ targetPlatform: selectTargetPlatform(profile, true),
160
+ contextSummary: event.summary,
161
+ messageText: event.summary,
162
+ calendarEventId: event.id,
163
+ status: "pending"
164
+ });
165
+ }
166
+ return actions;
167
+ }
168
+ function planDowntimeNudges(profile, occurrences, calendarEvents, firedToday, timezone, now) {
169
+ const currentTime = now ?? /* @__PURE__ */ new Date();
170
+ if (profile.isCurrentlySleeping) {
171
+ return [];
172
+ }
173
+ if (isBusyDay(profile, calendarEvents, timezone, currentTime)) {
174
+ return [];
175
+ }
176
+ const nudgedIds = new Set(firedToday?.nudgedOccurrenceIds ?? []);
177
+ const urgentCutoffMs = currentTime.getTime() + 2 * 60 * 60 * 1e3;
178
+ if (occurrences.some((occ) => {
179
+ if (occ.state === "completed" || occ.state === "skipped") return false;
180
+ if (!occ.dueAt) return false;
181
+ const dueMs = new Date(occ.dueAt).getTime();
182
+ return dueMs >= currentTime.getTime() && dueMs <= urgentCutoffMs;
183
+ })) {
184
+ return [];
185
+ }
186
+ const candidates = occurrences.filter((occ) => isOneOffOccurrence(occ)).filter((occ) => occ.state !== "completed" && occ.state !== "skipped").filter((occ) => occ.dueAt !== null).filter((occ) => !nudgedIds.has(occ.id)).map((occ) => {
187
+ const dueMs = new Date(occ.dueAt).getTime();
188
+ const overdueMs = Math.max(currentTime.getTime() - dueMs, 0);
189
+ const dueSoonMinutes = Math.max(dueMs - currentTime.getTime(), 0) / 6e4;
190
+ return {
191
+ occ,
192
+ score: overdueMs > 0 ? 1e6 + overdueMs - occurrencePriorityScore(occ) : 1e5 - dueSoonMinutes - occurrencePriorityScore(occ)
193
+ };
194
+ }).sort((left, right) => right.score - left.score);
195
+ const selected = candidates[0];
196
+ if (!selected) {
197
+ return [];
198
+ }
199
+ return [
200
+ {
201
+ kind: "pre_activity_nudge",
202
+ scheduledFor: currentTime.getTime(),
203
+ targetPlatform: selectTargetPlatform(profile, true),
204
+ contextSummary: buildDowntimeContext(selected.occ, currentTime),
205
+ messageText: buildDowntimeContext(selected.occ, currentTime),
206
+ occurrenceId: selected.occ.id,
207
+ status: "pending"
208
+ }
209
+ ];
210
+ }
211
+ function planGoalCheckIns(profile, goals, firedToday, _timezone, now) {
212
+ const currentTime = now ?? /* @__PURE__ */ new Date();
213
+ if (profile.isCurrentlySleeping) return [];
214
+ const checkedGoalIds = new Set(firedToday?.checkedGoalIds ?? []);
215
+ const cooldownMs = GOAL_CHECK_IN_COOLDOWN_DAYS * 24 * 60 * 60 * 1e3;
216
+ const candidates = [];
217
+ for (const goal of goals) {
218
+ if (goal.status !== "active") continue;
219
+ if (checkedGoalIds.has(goal.id)) continue;
220
+ if (goal.lastReviewedAt) {
221
+ const reviewedMs = new Date(goal.lastReviewedAt).getTime();
222
+ if (Number.isFinite(reviewedMs) && currentTime.getTime() - reviewedMs < cooldownMs) {
223
+ continue;
224
+ }
225
+ }
226
+ const isStruggling = goal.recentCompletionRate < 0.5;
227
+ const hasNoTasks = goal.linkedDefinitionCount === 0;
228
+ let contextSummary;
229
+ let messageText;
230
+ if (hasNoTasks) {
231
+ contextSummary = `Goal "${goal.title}" has no supporting tasks`;
232
+ messageText = `Your goal "${goal.title}" doesn't have any linked tasks yet. Want me to help create a plan?`;
233
+ } else if (isStruggling) {
234
+ const pct = Math.round(goal.recentCompletionRate * 100);
235
+ contextSummary = `Goal "${goal.title}" completion at ${pct}% this week`;
236
+ messageText = `Checking in on "${goal.title}" \u2014 your linked tasks are at ${pct}% completion this week. Want to talk about what's getting in the way?`;
237
+ } else {
238
+ const pct = Math.round(goal.recentCompletionRate * 100);
239
+ contextSummary = `Goal "${goal.title}" on track at ${pct}%`;
240
+ messageText = `"${goal.title}" is going well \u2014 ${pct}% completion this week. Keep it up.`;
241
+ }
242
+ candidates.push({
243
+ kind: "goal_check_in",
244
+ scheduledFor: currentTime.getTime(),
245
+ targetPlatform: selectTargetPlatform(profile, true),
246
+ contextSummary,
247
+ messageText,
248
+ goalId: goal.id,
249
+ status: "pending"
250
+ });
251
+ }
252
+ candidates.sort((a, b) => {
253
+ const scoreFor = (action) => action.contextSummary.includes("no supporting tasks") ? 3 : action.contextSummary.includes("completion at") ? 2 : 1;
254
+ return scoreFor(b) - scoreFor(a);
255
+ });
256
+ return candidates.slice(0, 1);
257
+ }
258
+ function planSocialOveruseCheck(profile, socialSummary, firedToday, _timezone, now) {
259
+ const currentTime = now ?? /* @__PURE__ */ new Date();
260
+ if (profile.isCurrentlySleeping) {
261
+ return null;
262
+ }
263
+ const totalMinutes = socialSummary.totalSeconds / 60;
264
+ if (totalMinutes <= SOCIAL_OVERUSE_THRESHOLD_MINUTES) {
265
+ return null;
266
+ }
267
+ const lastFiredAt = firedToday?.socialOveruseCheckedAt;
268
+ if (typeof lastFiredAt === "number") {
269
+ const elapsedMs = currentTime.getTime() - lastFiredAt;
270
+ if (elapsedMs < SOCIAL_OVERUSE_COOLDOWN_MS) {
271
+ return null;
272
+ }
273
+ }
274
+ const topService = pickTopSocialService(socialSummary.services);
275
+ const appName = topService?.label ?? "social media";
276
+ const roundedMinutes = Math.max(1, Math.round(totalMinutes));
277
+ const messageText = `Hey \u2014 you've been on ${appName} for ${roundedMinutes}m in the last 90 min. You good? Want me to suggest something from your todos, or block it for a bit?`;
278
+ const contextSummary = `social_overuse_check: ${appName} ${roundedMinutes}m / ${SOCIAL_OVERUSE_WINDOW_MINUTES}m window (threshold ${SOCIAL_OVERUSE_THRESHOLD_MINUTES}m)`;
279
+ return {
280
+ kind: "social_overuse_check",
281
+ scheduledFor: currentTime.getTime(),
282
+ targetPlatform: selectTargetPlatform(profile, true),
283
+ contextSummary,
284
+ messageText,
285
+ status: "pending"
286
+ };
287
+ }
288
+ function pickTopSocialService(services) {
289
+ let best = null;
290
+ for (const entry of services) {
291
+ if (!entry || typeof entry.totalSeconds !== "number") continue;
292
+ if (entry.totalSeconds <= 0) continue;
293
+ if (!best || entry.totalSeconds > best.totalSeconds) {
294
+ best = entry;
295
+ }
296
+ }
297
+ return best;
298
+ }
299
+ function selectTargetPlatform(profile, preferCurrent) {
300
+ if (preferCurrent && profile.isCurrentlyActive && profile.lastSeenPlatform) {
301
+ return profile.lastSeenPlatform;
302
+ }
303
+ return profile.primaryPlatform ?? "client_chat";
304
+ }
305
+ function resolveGmHour(profile, calendarEvents, timezone, now) {
306
+ const todayEvents = getTodayNonAllDayEvents(calendarEvents, timezone, now);
307
+ const firstEvent = todayEvents[0];
308
+ if (firstEvent) {
309
+ const firstParts = getZonedDateParts(
310
+ new Date(firstEvent.startAt),
311
+ timezone
312
+ );
313
+ const leadHour = firstParts.hour - GM_LEAD_MINUTES / 60;
314
+ if (leadHour >= 5) return Math.floor(leadHour);
315
+ }
316
+ if (profile.typicalWakeHour !== null) {
317
+ const leadHour = profile.typicalWakeHour - GM_LEAD_MINUTES / 60;
318
+ if (leadHour >= 5) return Math.floor(leadHour);
319
+ }
320
+ if (profile.typicalFirstActiveHour !== null) {
321
+ const leadHour = profile.typicalFirstActiveHour - GM_LEAD_MINUTES / 60;
322
+ if (leadHour >= 5) return Math.floor(leadHour);
323
+ }
324
+ if (profile.typicalFirstEventHour !== null) {
325
+ const leadHour = profile.typicalFirstEventHour - GM_LEAD_MINUTES / 60;
326
+ if (leadHour >= 5) return Math.floor(leadHour);
327
+ }
328
+ return DEFAULT_GM_HOUR;
329
+ }
330
+ function resolveGnHour(profile) {
331
+ if (profile.typicalLastActiveHour !== null && profile.typicalLastActiveHour >= 12) {
332
+ const lagHour = profile.typicalLastActiveHour + GN_LAG_MINUTES / 60;
333
+ const ceiled = Math.min(Math.ceil(lagHour), 23);
334
+ return Math.max(ceiled, GN_MIN_HOUR);
335
+ }
336
+ return DEFAULT_GN_HOUR;
337
+ }
338
+ function buildDigestMessage(kind, contextParts, inboxDigest) {
339
+ const normalizedParts = contextParts.map((part) => capitalizeSentence(part)).filter((part) => part.length > 0);
340
+ const opening = kind === "gm" ? "Good morning." : inboxDigest && inboxDigest.unreadCount > 0 ? "Night summary." : "Night summary. Inbox is quiet.";
341
+ if (normalizedParts.length === 0) {
342
+ return opening;
343
+ }
344
+ return `${opening} ${normalizedParts.join(". ")}.`;
345
+ }
346
+ function isOneOffOccurrence(occurrence) {
347
+ if (occurrence.cadence?.kind) {
348
+ return occurrence.cadence.kind === "once";
349
+ }
350
+ return occurrence.definitionKind === "task";
351
+ }
352
+ function occurrencePriorityScore(occurrence) {
353
+ const priority = occurrence.priority ?? 0;
354
+ if (!Number.isFinite(priority) || priority <= 0) {
355
+ return 0;
356
+ }
357
+ return Math.min(priority, 10) * 5;
358
+ }
359
+ function buildDowntimeContext(occurrence, now) {
360
+ if (!occurrence.dueAt) {
361
+ return `Downtime suggestion: ${occurrence.title}`;
362
+ }
363
+ const dueMs = new Date(occurrence.dueAt).getTime();
364
+ if (dueMs <= now.getTime()) {
365
+ return `Downtime suggestion: ${occurrence.title} (overdue)`;
366
+ }
367
+ const minutesUntilDue = Math.max(
368
+ Math.round((dueMs - now.getTime()) / 6e4),
369
+ 0
370
+ );
371
+ return `Downtime suggestion: ${occurrence.title} (due in ${minutesUntilDue}m)`;
372
+ }
373
+ function capitalizeSentence(value) {
374
+ const trimmed = value.trim();
375
+ if (trimmed.length === 0) {
376
+ return "";
377
+ }
378
+ return trimmed.charAt(0).toUpperCase() + trimmed.slice(1);
379
+ }
380
+ function appendInboxDigestContext(contextParts, inboxDigest) {
381
+ if (!inboxDigest) {
382
+ return;
383
+ }
384
+ if (inboxDigest.unreadCount > 0) {
385
+ const channelSummary = inboxDigest.channelCounts.slice(0, 3).map((entry) => `${entry.channel} ${entry.unreadCount}`).join(", ");
386
+ contextParts.push(
387
+ `inbox: ${inboxDigest.unreadCount} unread${channelSummary ? ` across ${channelSummary}` : ""}`
388
+ );
389
+ } else {
390
+ contextParts.push("inbox is quiet");
391
+ }
392
+ const topHighlights = inboxDigest.highlights.slice(0, 2).map((highlight) => formatInboxHighlight(highlight)).filter((highlight) => highlight.length > 0);
393
+ if (topHighlights.length > 0) {
394
+ contextParts.push(`top items: ${topHighlights.join("; ")}`);
395
+ }
396
+ }
397
+ function formatInboxHighlight(highlight) {
398
+ const subject = highlight.subject && highlight.subject.trim().length > 0 ? highlight.subject.trim() : null;
399
+ const snippet = summarizeSnippet(highlight.snippet);
400
+ const messageCore = subject && snippet ? `${subject} \u2014 ${snippet}` : subject ?? snippet ?? highlight.channel;
401
+ return `${highlight.sender} on ${highlight.channel}: ${messageCore}`;
402
+ }
403
+ function summarizeSnippet(value) {
404
+ const trimmed = value.trim();
405
+ if (trimmed.length === 0) {
406
+ return null;
407
+ }
408
+ if (trimmed.length <= 72) {
409
+ return trimmed;
410
+ }
411
+ return `${trimmed.slice(0, 69).trimEnd()}...`;
412
+ }
413
+ function isBusyDay(profile, calendarEvents, timezone, now) {
414
+ if (isScreenBusy(profile, now)) {
415
+ return true;
416
+ }
417
+ const todayEvents = getTodayActionableEvents(calendarEvents, timezone, now);
418
+ if (todayEvents.length >= 4) {
419
+ return true;
420
+ }
421
+ if (profile.avgWeekdayMeetings !== null && profile.avgWeekdayMeetings >= 4) {
422
+ return true;
423
+ }
424
+ const nextEvent = todayEvents.find((event) => {
425
+ const startMs = new Date(event.startAt).getTime();
426
+ return startMs >= now.getTime();
427
+ });
428
+ if (!nextEvent) {
429
+ return false;
430
+ }
431
+ const minutesUntilNextEvent = (new Date(nextEvent.startAt).getTime() - now.getTime()) / 6e4;
432
+ return minutesUntilNextEvent <= 45;
433
+ }
434
+ function isScreenBusy(profile, now) {
435
+ if (!profile.screenContextAvailable || profile.screenContextStale || !profile.screenContextBusy || !profile.screenContextSampledAt) {
436
+ return false;
437
+ }
438
+ const ageMs = now.getTime() - profile.screenContextSampledAt;
439
+ return ageMs >= 0 && ageMs < 15 * 60 * 1e3;
440
+ }
441
+ function getTodayNonAllDayEvents(events, timezone, now) {
442
+ const todayParts = getZonedDateParts(now, timezone);
443
+ return events.filter((e) => {
444
+ if (e.isAllDay) return false;
445
+ const startParts = getZonedDateParts(new Date(e.startAt), timezone);
446
+ return startParts.year === todayParts.year && startParts.month === todayParts.month && startParts.day === todayParts.day;
447
+ }).sort(
448
+ (a, b) => new Date(a.startAt).getTime() - new Date(b.startAt).getTime()
449
+ );
450
+ }
451
+ function getTodayActionableEvents(events, timezone, now) {
452
+ return getTodayNonAllDayEvents(events, timezone, now).filter(
453
+ shouldNudgeCalendarEvent
454
+ );
455
+ }
456
+ function shouldNudgeCalendarEvent(event) {
457
+ return event.proactiveCheckIn === true;
458
+ }
459
+ function resolveWakeTriggeredGmTime(relativeTime, timezone, now) {
460
+ const wakeAnchorMs = parseIsoMs(relativeTime?.wakeAnchorAt);
461
+ if (wakeAnchorMs === null) {
462
+ return null;
463
+ }
464
+ if (getLocalDateKey(getZonedDateParts(new Date(wakeAnchorMs), timezone)) !== getLocalDateKey(getZonedDateParts(now, timezone))) {
465
+ return null;
466
+ }
467
+ return wakeAnchorMs;
468
+ }
469
+ function resolveNightSummaryTime(relativeTime, timezone, now) {
470
+ const bedtimeTargetMs = parseIsoMs(relativeTime?.bedtimeTargetAt);
471
+ if (bedtimeTargetMs === null) {
472
+ return null;
473
+ }
474
+ const summaryAtMs = bedtimeTargetMs - 2 * 60 * 60 * 1e3;
475
+ if (getLocalDateKey(getZonedDateParts(new Date(summaryAtMs), timezone)) !== getLocalDateKey(getZonedDateParts(now, timezone))) {
476
+ return null;
477
+ }
478
+ return summaryAtMs;
479
+ }
480
+ function parseIsoMs(value) {
481
+ if (!value) {
482
+ return null;
483
+ }
484
+ const parsed = Date.parse(value);
485
+ return Number.isFinite(parsed) ? parsed : null;
486
+ }
487
+ function findNearbyCalendarEvent(events, referenceMs, timezone, now) {
488
+ const windowMs = 60 * 60 * 1e3;
489
+ const todayEvents = getTodayActionableEvents(events, timezone, now);
490
+ for (const event of todayEvents) {
491
+ const startMs = new Date(event.startAt).getTime();
492
+ if (startMs > referenceMs && startMs - referenceMs <= windowMs) {
493
+ return event;
494
+ }
495
+ }
496
+ return null;
497
+ }
498
+ function localHourToEpoch(hour, timezone, referenceDate) {
499
+ const parts = getZonedDateParts(referenceDate, timezone);
500
+ const dayOffset = Math.floor(hour / 24);
501
+ const normalizedHour = (hour % 24 + 24) % 24;
502
+ const diffHours = normalizedHour + dayOffset * 24 - parts.hour;
503
+ const diffMinutes = -parts.minute;
504
+ return referenceDate.getTime() + (diffHours * 60 + diffMinutes) * 60 * 1e3;
505
+ }
506
+ function makeSkipped(kind, now, profile, reason) {
507
+ return {
508
+ kind,
509
+ scheduledFor: now.getTime(),
510
+ targetPlatform: profile.primaryPlatform ?? "client_chat",
511
+ contextSummary: "",
512
+ messageText: "",
513
+ status: "skipped",
514
+ skipReason: reason
515
+ };
516
+ }
517
+ export {
518
+ SOCIAL_OVERUSE_COOLDOWN_MS,
519
+ SOCIAL_OVERUSE_THRESHOLD_MINUTES,
520
+ SOCIAL_OVERUSE_WINDOW_MINUTES,
521
+ planDowntimeNudges,
522
+ planGm,
523
+ planGn,
524
+ planGoalCheckIns,
525
+ planNudges,
526
+ planSocialOveruseCheck,
527
+ selectTargetPlatform
528
+ };
529
+ //# sourceMappingURL=proactive-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/activity-profile/proactive-planner.ts"],"sourcesContent":["/**\n * Pure decision logic for proactive agent actions (GM, GN, nudges).\n * No runtime dependencies — fully unit-testable.\n *\n * Given an ActivityProfile + occurrence/calendar context, returns\n * ProactiveAction[] describing what to send, when, and where.\n */\n\nimport { getLocalDateKey, getZonedDateParts } from \"../lifeops/time.js\";\nimport { resolveEffectiveDayKey, wasActiveToday } from \"./analyzer.js\";\nimport type {\n ActivityProfile,\n FiredActionsLog,\n ProactiveAction,\n} from \"./types.js\";\n\n// ── Configuration ─────────────────────────────────────\n\n/** Minutes before first event/activity to send GM. */\nconst GM_LEAD_MINUTES = 30;\n/** Default GM hour (local) when no calendar or message data. */\nconst DEFAULT_GM_HOUR = 8;\n/** Latest hour (local) to send GM — skip if past this. */\nconst GM_CUTOFF_HOUR = 11;\n/** Minutes after last typical active hour to send GN. */\nconst GN_LAG_MINUTES = 30;\n/** Default GN hour (local) when no data. */\nconst DEFAULT_GN_HOUR = 22;\n/** Earliest hour of day a GN message is allowed to fire. */\nconst GN_MIN_HOUR = 17;\n/**\n * Minimum interval between two GM (or two GN) deliveries. Acts as a\n * timestamp-based once-per-day cooldown that survives effective-day-key\n * flips (e.g. when an open activity cycle's start-date moves between\n * worker ticks). 12h is short enough that yesterday's GN never blocks\n * today's GN, but long enough that no single calendar day fires twice.\n */\nconst ONCE_PER_DAY_GUARD_MS = 12 * 60 * 60 * 1000;\n/** Minutes before an occurrence/event to send a nudge. */\nconst NUDGE_LEAD_MINUTES = 30;\n/** Maximum nudge lookahead window. */\nconst NUDGE_HORIZON_MINUTES = 45;\n/** If user hasn't been active in this many ms, skip GM entirely. */\nconst INACTIVITY_SKIP_MS = 48 * 60 * 60 * 1000; // 48 hours\n/** Days since last review before a goal is eligible for a check-in. */\nconst GOAL_CHECK_IN_COOLDOWN_DAYS = 3;\n\n/**\n * Trailing window the social-overuse planner looks back over. The worker\n * fetches `getSocialHabitSummary` over `[now - SOCIAL_OVERUSE_WINDOW_MINUTES,\n * now]` and the planner trips when the windowed total clears the threshold.\n */\nexport const SOCIAL_OVERUSE_WINDOW_MINUTES = 90;\n/**\n * Minimum total social-app minutes inside the trailing window required to\n * fire a social_overuse_check intent.\n */\nexport const SOCIAL_OVERUSE_THRESHOLD_MINUTES = 60;\n/**\n * Minimum gap between two consecutive social_overuse_check deliveries. The\n * worker writes `socialOveruseCheckedAt` on every fire; the planner refuses\n * to emit again until this much time has passed since the last write.\n */\nexport const SOCIAL_OVERUSE_COOLDOWN_MS = 4 * 60 * 60 * 1000; // 4h\n\n/**\n * True if `firedAt` is set and the gap to `now` is shorter than the\n * once-per-day guard window. Clock-skewed timestamps (firedAt > now) are also\n * treated as recent so we don't fire again.\n */\nfunction firedRecently(firedAt: number | undefined, now: Date): boolean {\n if (!firedAt) return false;\n const elapsedMs = now.getTime() - firedAt;\n if (elapsedMs < 0) return true;\n return elapsedMs < ONCE_PER_DAY_GUARD_MS;\n}\n\n// ── Goal check-in contract ───────────────────────────\n\nexport interface GoalSlim {\n id: string;\n title: string;\n status: string;\n linkedDefinitionCount: number;\n /** 0-1 completion rate over the last 7 days. */\n recentCompletionRate: number;\n /** ISO datetime of the last goal review, or null if never reviewed. */\n lastReviewedAt: string | null;\n}\n\n// ── Occurrence / Calendar event contracts ─────────────\n\nexport interface OccurrenceSlim {\n id: string;\n title: string;\n dueAt: string | null; // ISO datetime\n state: string;\n definitionKind?: \"task\" | \"habit\" | \"routine\";\n cadence?: {\n kind: \"once\" | \"daily\" | \"times_per_day\" | \"interval\" | \"weekly\";\n };\n priority?: number;\n}\n\nexport interface CalendarEventSlim {\n id: string;\n summary: string;\n startAt: string; // ISO datetime\n endAt: string;\n isAllDay: boolean;\n description?: string;\n location?: string;\n attendeeCount?: number;\n conferenceLink?: string | null;\n proactiveCheckIn?: boolean | null;\n proactiveCheckInReason?: string | null;\n}\n\nexport interface ProactiveRelativeTimeSlim {\n wakeAnchorAt: string | null;\n bedtimeTargetAt: string | null;\n minutesSinceWake: number | null;\n minutesUntilBedtimeTarget: number | null;\n}\n\nexport interface InboxDigestHighlightSlim {\n channel: string;\n sender: string;\n subject: string | null;\n snippet: string;\n receivedAt: string;\n unread: boolean;\n}\n\nexport interface InboxDigestSlim {\n unreadCount: number;\n channelCounts: Array<{\n channel: string;\n unreadCount: number;\n }>;\n highlights: InboxDigestHighlightSlim[];\n}\n\n// ── Social-overuse planning ──────────────────────────\n\n/**\n * Per-service totals consumed by `planSocialOveruseCheck`. Maps directly\n * onto `LifeOpsSocialHabitSummary.services`/`.sessions` entries: each entry\n * is one labelled bucket of social-app dwell time inside the trailing\n * window the worker fetched.\n */\nexport interface SocialServiceBucketSlim {\n key: string;\n label: string;\n totalSeconds: number;\n}\n\nexport interface SocialHabitSummarySlim {\n /** Total social-bucket dwell seconds inside the trailing window. */\n totalSeconds: number;\n /** Per-service breakdown, sorted by `totalSeconds` descending. */\n services: SocialServiceBucketSlim[];\n}\n\n// ── GM planning ───────────────────────────────────────\n\nexport function planGm(\n profile: ActivityProfile,\n occurrences: OccurrenceSlim[],\n calendarEvents: CalendarEventSlim[],\n relativeTime: ProactiveRelativeTimeSlim | null,\n inboxDigest: InboxDigestSlim | null,\n firedToday: FiredActionsLog | null,\n timezone: string,\n now?: Date,\n): ProactiveAction | null {\n const currentTime = now ?? new Date();\n if (profile.isCurrentlySleeping) {\n return null;\n }\n\n // Already fired recently — timestamp-based gate so a flipping effective\n // day key (which can null out firedToday) cannot cause repeated GMs.\n if (firedRecently(firedToday?.gmFiredAt, currentTime)) {\n return null;\n }\n\n // User inactive for 48h+ — don't be annoying\n if (\n profile.lastSeenAt > 0 &&\n currentTime.getTime() - profile.lastSeenAt > INACTIVITY_SKIP_MS\n ) {\n return makeSkipped(\"gm\", currentTime, profile, \"user inactive for 48h+\");\n }\n\n const localDateKey = getLocalDateKey(\n getZonedDateParts(currentTime, timezone),\n );\n if (resolveEffectiveDayKey(profile, timezone, currentTime) !== localDateKey) {\n return null;\n }\n\n const gmTime =\n resolveWakeTriggeredGmTime(relativeTime, timezone, currentTime) ??\n localHourToEpoch(\n resolveGmHour(profile, calendarEvents, timezone, currentTime),\n timezone,\n currentTime,\n );\n\n // Past cutoff — too late for GM\n const parts = getZonedDateParts(currentTime, timezone);\n if (parts.hour >= GM_CUTOFF_HOUR) {\n return null;\n }\n\n // Build context summary\n const contextParts: string[] = [];\n\n // Upcoming occurrences due in the morning\n const morningOccurrences = occurrences.filter((occ) => {\n if (!occ.dueAt || occ.state === \"completed\" || occ.state === \"skipped\")\n return false;\n const dueMs = new Date(occ.dueAt).getTime();\n const dueParts = getZonedDateParts(new Date(occ.dueAt), timezone);\n return dueMs >= currentTime.getTime() && dueParts.hour < 12;\n });\n\n if (morningOccurrences.length > 0) {\n const names = morningOccurrences.map((o) => o.title).join(\", \");\n contextParts.push(`morning habits: ${names}`);\n }\n\n // Today's calendar events\n const todayEvents = getTodayActionableEvents(\n calendarEvents,\n timezone,\n currentTime,\n );\n if (todayEvents.length > 0) {\n const first = todayEvents[0];\n if (first) {\n const firstParts = getZonedDateParts(new Date(first.startAt), timezone);\n contextParts.push(\n `${todayEvents.length} meeting${todayEvents.length > 1 ? \"s\" : \"\"} today, first at ${firstParts.hour}:${String(firstParts.minute).padStart(2, \"0\")}`,\n );\n }\n }\n\n appendInboxDigestContext(contextParts, inboxDigest);\n\n const contextSummary =\n contextParts.length > 0 ? `gm context: ${contextParts.join(\" | \")}` : \"gm\";\n\n return {\n kind: \"gm\",\n scheduledFor: gmTime,\n targetPlatform: selectTargetPlatform(profile, false),\n contextSummary,\n messageText: buildDigestMessage(\"gm\", contextParts, inboxDigest),\n status: \"pending\",\n };\n}\n\n// ── GN planning ───────────────────────────────────────\n\n/**\n * Plan a \"good night\" proactive action — the activity-feed counterpart to the\n * authoritative night summary.\n *\n * Division of responsibility (intentional, do NOT consolidate without a\n * routing-layer design review):\n *\n * - **Chat surface (the user-visible night summary):** owned by\n * `processSleepCycleCheckins` →\n * `CheckinService.runNightCheckin` (`plugins/plugin-personal-assistant/src/lifeops/checkin/checkin-service.ts`).\n * That path collects briefing sections (X DMs, Gmail, GitHub, calendar,\n * contacts, promises, habit summaries, sleep recap), runs them through\n * `useModel(TEXT_LARGE, ...)`, and persists a `CheckinReport`. Anti-spam\n * is the once-per-local-day SQL gate against `life_checkin_reports`. The\n * resulting `lifeops-checkin` event is **not** in\n * `CHAT_SUPPRESSED_AUTONOMY_SOURCES`, so it lands in the active\n * conversation.\n *\n * - **Activity-feed surface (this function):** plans a `proactive-gn`\n * action with a compact deterministic message for the activity timeline.\n * The `proactive-gn` source **is** in `CHAT_SUPPRESSED_AUTONOMY_SOURCES`\n * (`packages/agent/src/api/server-helpers-swarm.ts`), so this never\n * posts to chat — it only powers the activity-feed widget. Anti-spam is\n * a separate 12h `firedRecently` timestamp gate (`firedToday.gnFiredAt`).\n *\n * Both paths are scheduled off the same `bedtimeTargetAt` source but\n * diverge on window (3h vs 2h), gate (per-day SQL vs 12h timestamp),\n * content (LLM briefing vs compact feed message), and chat-suppression. They\n * are not redundant: the chat night summary is the user-visible artifact;\n * this is feed-only telemetry. A unifying sweep needs a routing-layer redesign\n * (collapse the two sources, then choose a single content path), not just a\n * delete here.\n */\nexport function planGn(\n profile: ActivityProfile,\n relativeTime: ProactiveRelativeTimeSlim | null,\n inboxDigest: InboxDigestSlim | null,\n firedToday: FiredActionsLog | null,\n timezone: string,\n now?: Date,\n): ProactiveAction | null {\n const currentTime = now ?? new Date();\n if (profile.isCurrentlySleeping) {\n return null;\n }\n\n // Already fired recently — timestamp-based gate so a flipping effective\n // day key (which can null out firedToday) cannot cause repeated GNs.\n if (firedRecently(firedToday?.gnFiredAt, currentTime)) {\n return null;\n }\n\n // User wasn't active at all in the current effective day — skip GN\n if (!wasActiveToday(profile, timezone, currentTime)) {\n return null;\n }\n\n const gnTime =\n resolveNightSummaryTime(relativeTime, timezone, currentTime) ??\n localHourToEpoch(resolveGnHour(profile), timezone, currentTime);\n const contextParts: string[] = [];\n appendInboxDigestContext(contextParts, inboxDigest);\n\n return {\n kind: \"gn\",\n scheduledFor: gnTime,\n targetPlatform: selectTargetPlatform(profile, true),\n contextSummary:\n contextParts.length > 0\n ? `gn context: ${contextParts.join(\" | \")}`\n : \"gn\",\n messageText: buildDigestMessage(\"gn\", contextParts, inboxDigest),\n status: \"pending\",\n };\n}\n\n// ── Nudge planning ────────────────────────────────────\n\nexport function planNudges(\n profile: ActivityProfile,\n occurrences: OccurrenceSlim[],\n calendarEvents: CalendarEventSlim[],\n firedToday: FiredActionsLog | null,\n timezone: string,\n now?: Date,\n): ProactiveAction[] {\n const currentTime = now ?? new Date();\n if (profile.isCurrentlySleeping) {\n return [];\n }\n const actions: ProactiveAction[] = [];\n const nudgedIds = new Set(firedToday?.nudgedOccurrenceIds ?? []);\n const nudgedEventIds = new Set(firedToday?.nudgedCalendarEventIds ?? []);\n\n const horizonMs = currentTime.getTime() + NUDGE_HORIZON_MINUTES * 60 * 1000;\n const leadMs = NUDGE_LEAD_MINUTES * 60 * 1000;\n\n // Nudge for upcoming occurrences\n for (const occ of occurrences) {\n if (!occ.dueAt || occ.state === \"completed\" || occ.state === \"skipped\")\n continue;\n if (nudgedIds.has(occ.id)) continue;\n\n const dueMs = new Date(occ.dueAt).getTime();\n if (dueMs > horizonMs || dueMs < currentTime.getTime()) continue;\n\n // Find any calendar event starting right after this occurrence\n const nearbyEvent = findNearbyCalendarEvent(\n calendarEvents,\n dueMs,\n timezone,\n currentTime,\n );\n const contextParts = [occ.title];\n if (nearbyEvent) {\n const eventParts = getZonedDateParts(\n new Date(nearbyEvent.startAt),\n timezone,\n );\n contextParts.push(\n `before your ${eventParts.hour}:${String(eventParts.minute).padStart(2, \"0\")} ${nearbyEvent.summary}`,\n );\n }\n\n actions.push({\n kind: \"pre_activity_nudge\",\n scheduledFor: dueMs - leadMs,\n targetPlatform: selectTargetPlatform(profile, true),\n contextSummary: contextParts.join(\" — \"),\n messageText: contextParts.join(\" — \"),\n occurrenceId: occ.id,\n status: \"pending\",\n });\n }\n\n // Nudge for upcoming calendar events (if not already covered by an occurrence nudge)\n for (const event of calendarEvents) {\n if (!shouldNudgeCalendarEvent(event)) continue;\n if (nudgedEventIds.has(event.id)) continue;\n\n const startMs = new Date(event.startAt).getTime();\n if (startMs > horizonMs || startMs < currentTime.getTime()) continue;\n\n actions.push({\n kind: \"pre_activity_nudge\",\n scheduledFor: startMs - leadMs,\n targetPlatform: selectTargetPlatform(profile, true),\n contextSummary: event.summary,\n messageText: event.summary,\n calendarEventId: event.id,\n status: \"pending\",\n });\n }\n\n return actions;\n}\n\n// ── Downtime planning ─────────────────────────────────\n\nexport function planDowntimeNudges(\n profile: ActivityProfile,\n occurrences: OccurrenceSlim[],\n calendarEvents: CalendarEventSlim[],\n firedToday: FiredActionsLog | null,\n timezone: string,\n now?: Date,\n): ProactiveAction[] {\n const currentTime = now ?? new Date();\n if (profile.isCurrentlySleeping) {\n return [];\n }\n if (isBusyDay(profile, calendarEvents, timezone, currentTime)) {\n return [];\n }\n\n const nudgedIds = new Set(firedToday?.nudgedOccurrenceIds ?? []);\n const urgentCutoffMs = currentTime.getTime() + 2 * 60 * 60 * 1000;\n\n if (\n occurrences.some((occ) => {\n if (occ.state === \"completed\" || occ.state === \"skipped\") return false;\n if (!occ.dueAt) return false;\n const dueMs = new Date(occ.dueAt).getTime();\n return dueMs >= currentTime.getTime() && dueMs <= urgentCutoffMs;\n })\n ) {\n return [];\n }\n\n const candidates = occurrences\n .filter((occ) => isOneOffOccurrence(occ))\n .filter((occ) => occ.state !== \"completed\" && occ.state !== \"skipped\")\n .filter((occ) => occ.dueAt !== null)\n .filter((occ) => !nudgedIds.has(occ.id))\n .map((occ) => {\n const dueMs = new Date(occ.dueAt as string).getTime();\n const overdueMs = Math.max(currentTime.getTime() - dueMs, 0);\n const dueSoonMinutes =\n Math.max(dueMs - currentTime.getTime(), 0) / 60_000;\n return {\n occ,\n score:\n overdueMs > 0\n ? 1_000_000 + overdueMs - occurrencePriorityScore(occ)\n : 100_000 - dueSoonMinutes - occurrencePriorityScore(occ),\n };\n })\n .sort((left, right) => right.score - left.score);\n\n const selected = candidates[0];\n if (!selected) {\n return [];\n }\n\n return [\n {\n kind: \"pre_activity_nudge\",\n scheduledFor: currentTime.getTime(),\n targetPlatform: selectTargetPlatform(profile, true),\n contextSummary: buildDowntimeContext(selected.occ, currentTime),\n messageText: buildDowntimeContext(selected.occ, currentTime),\n occurrenceId: selected.occ.id,\n status: \"pending\",\n },\n ];\n}\n\n// ── Goal check-in planning ───────────────────────────\n\nexport function planGoalCheckIns(\n profile: ActivityProfile,\n goals: GoalSlim[],\n firedToday: FiredActionsLog | null,\n _timezone: string,\n now?: Date,\n): ProactiveAction[] {\n const currentTime = now ?? new Date();\n if (profile.isCurrentlySleeping) return [];\n\n const checkedGoalIds = new Set(firedToday?.checkedGoalIds ?? []);\n const cooldownMs = GOAL_CHECK_IN_COOLDOWN_DAYS * 24 * 60 * 60 * 1000;\n\n const candidates: ProactiveAction[] = [];\n\n for (const goal of goals) {\n if (goal.status !== \"active\") continue;\n if (checkedGoalIds.has(goal.id)) continue;\n\n // Only check in on goals that haven't been reviewed recently\n if (goal.lastReviewedAt) {\n const reviewedMs = new Date(goal.lastReviewedAt).getTime();\n if (\n Number.isFinite(reviewedMs) &&\n currentTime.getTime() - reviewedMs < cooldownMs\n ) {\n continue;\n }\n }\n\n const isStruggling = goal.recentCompletionRate < 0.5;\n const hasNoTasks = goal.linkedDefinitionCount === 0;\n\n let contextSummary: string;\n let messageText: string;\n\n if (hasNoTasks) {\n contextSummary = `Goal \"${goal.title}\" has no supporting tasks`;\n messageText = `Your goal \"${goal.title}\" doesn't have any linked tasks yet. Want me to help create a plan?`;\n } else if (isStruggling) {\n const pct = Math.round(goal.recentCompletionRate * 100);\n contextSummary = `Goal \"${goal.title}\" completion at ${pct}% this week`;\n messageText = `Checking in on \"${goal.title}\" — your linked tasks are at ${pct}% completion this week. Want to talk about what's getting in the way?`;\n } else {\n const pct = Math.round(goal.recentCompletionRate * 100);\n contextSummary = `Goal \"${goal.title}\" on track at ${pct}%`;\n messageText = `\"${goal.title}\" is going well — ${pct}% completion this week. Keep it up.`;\n }\n\n candidates.push({\n kind: \"goal_check_in\",\n scheduledFor: currentTime.getTime(),\n targetPlatform: selectTargetPlatform(profile, true),\n contextSummary,\n messageText,\n goalId: goal.id,\n status: \"pending\",\n });\n }\n\n // Only return the most important goal check-in (don't flood).\n // Priority: no tasks (3) > struggling (2) > on track (1).\n candidates.sort((a, b) => {\n const scoreFor = (action: ProactiveAction): number =>\n action.contextSummary.includes(\"no supporting tasks\")\n ? 3\n : action.contextSummary.includes(\"completion at\")\n ? 2\n : 1;\n return scoreFor(b) - scoreFor(a);\n });\n\n return candidates.slice(0, 1);\n}\n\n// ── Social-overuse check planning ────────────────────\n\n/**\n * Decide whether to interrupt the user with a \"you've been on {app} for a\n * while, you good?\" intent. Pure: takes a slim social-habit summary scoped\n * to the trailing `SOCIAL_OVERUSE_WINDOW_MINUTES` and returns a single\n * pending action when the threshold + cooldown are both satisfied.\n *\n * Scope: emits the proactive check-in prompt only. Follow-up replies such as\n * asking to block the app or suggest a task are normal user intents handled by\n * LifeOps actions after the owner responds; they are deliberately outside this\n * pure planner.\n */\nexport function planSocialOveruseCheck(\n profile: ActivityProfile,\n socialSummary: SocialHabitSummarySlim,\n firedToday: FiredActionsLog | null,\n _timezone: string,\n now?: Date,\n): ProactiveAction | null {\n const currentTime = now ?? new Date();\n if (profile.isCurrentlySleeping) {\n return null;\n }\n\n const totalMinutes = socialSummary.totalSeconds / 60;\n if (totalMinutes <= SOCIAL_OVERUSE_THRESHOLD_MINUTES) {\n return null;\n }\n\n const lastFiredAt = firedToday?.socialOveruseCheckedAt;\n if (typeof lastFiredAt === \"number\") {\n const elapsedMs = currentTime.getTime() - lastFiredAt;\n // Clock-skewed timestamps stay in cooldown so a time jump never causes a re-fire.\n if (elapsedMs < SOCIAL_OVERUSE_COOLDOWN_MS) {\n return null;\n }\n }\n\n const topService = pickTopSocialService(socialSummary.services);\n const appName = topService?.label ?? \"social media\";\n const roundedMinutes = Math.max(1, Math.round(totalMinutes));\n\n const messageText =\n `Hey — you've been on ${appName} for ${roundedMinutes}m in the last 90 min. ` +\n `You good? Want me to suggest something from your todos, or block it for a bit?`;\n const contextSummary =\n `social_overuse_check: ${appName} ${roundedMinutes}m / ` +\n `${SOCIAL_OVERUSE_WINDOW_MINUTES}m window ` +\n `(threshold ${SOCIAL_OVERUSE_THRESHOLD_MINUTES}m)`;\n\n return {\n kind: \"social_overuse_check\",\n scheduledFor: currentTime.getTime(),\n targetPlatform: selectTargetPlatform(profile, true),\n contextSummary,\n messageText,\n status: \"pending\",\n };\n}\n\nfunction pickTopSocialService(\n services: SocialServiceBucketSlim[],\n): SocialServiceBucketSlim | null {\n let best: SocialServiceBucketSlim | null = null;\n for (const entry of services) {\n if (!entry || typeof entry.totalSeconds !== \"number\") continue;\n if (entry.totalSeconds <= 0) continue;\n if (!best || entry.totalSeconds > best.totalSeconds) {\n best = entry;\n }\n }\n return best;\n}\n\n// ── Platform selection ────────────────────────────────\n\nexport function selectTargetPlatform(\n profile: ActivityProfile,\n preferCurrent: boolean,\n): string {\n if (preferCurrent && profile.isCurrentlyActive && profile.lastSeenPlatform) {\n return profile.lastSeenPlatform;\n }\n return profile.primaryPlatform ?? \"client_chat\";\n}\n\n// ── Helpers ───────────────────────────────────────────\n\nfunction resolveGmHour(\n profile: ActivityProfile,\n calendarEvents: CalendarEventSlim[],\n timezone: string,\n now: Date,\n): number {\n // Priority 1: calendar — 30 min before first event\n const todayEvents = getTodayNonAllDayEvents(calendarEvents, timezone, now);\n const firstEvent = todayEvents[0];\n if (firstEvent) {\n const firstParts = getZonedDateParts(\n new Date(firstEvent.startAt),\n timezone,\n );\n const leadHour = firstParts.hour - GM_LEAD_MINUTES / 60;\n if (leadHour >= 5) return Math.floor(leadHour);\n }\n\n // Priority 2: message histogram — 30 min before typical first active hour\n if (profile.typicalWakeHour !== null) {\n const leadHour = profile.typicalWakeHour - GM_LEAD_MINUTES / 60;\n if (leadHour >= 5) return Math.floor(leadHour);\n }\n\n // Priority 3: message histogram — 30 min before typical first active hour\n if (profile.typicalFirstActiveHour !== null) {\n const leadHour = profile.typicalFirstActiveHour - GM_LEAD_MINUTES / 60;\n if (leadHour >= 5) return Math.floor(leadHour);\n }\n\n // Priority 4: calendar-derived first event hour\n if (profile.typicalFirstEventHour !== null) {\n const leadHour = profile.typicalFirstEventHour - GM_LEAD_MINUTES / 60;\n if (leadHour >= 5) return Math.floor(leadHour);\n }\n\n return DEFAULT_GM_HOUR;\n}\n\nfunction resolveGnHour(profile: ActivityProfile): number {\n // Ignore typicalLastActiveHour values that fall before noon: those almost\n // certainly come from the LATE_NIGHT bucket (00:00–05:00 midpoint = 3),\n // which historically wins the chronological-last race when a user has\n // any overnight activity at all. Treating that as \"go to bed at 4 AM\"\n // schedules GN in the past and causes per-tick spam. Fall back to the\n // sensible default and clamp to the evening floor either way.\n if (\n profile.typicalLastActiveHour !== null &&\n profile.typicalLastActiveHour >= 12\n ) {\n const lagHour = profile.typicalLastActiveHour + GN_LAG_MINUTES / 60;\n const ceiled = Math.min(Math.ceil(lagHour), 23);\n return Math.max(ceiled, GN_MIN_HOUR);\n }\n return DEFAULT_GN_HOUR;\n}\n\nfunction buildDigestMessage(\n kind: \"gm\" | \"gn\",\n contextParts: string[],\n inboxDigest: InboxDigestSlim | null,\n): string {\n const normalizedParts = contextParts\n .map((part) => capitalizeSentence(part))\n .filter((part) => part.length > 0);\n const opening =\n kind === \"gm\"\n ? \"Good morning.\"\n : inboxDigest && inboxDigest.unreadCount > 0\n ? \"Night summary.\"\n : \"Night summary. Inbox is quiet.\";\n if (normalizedParts.length === 0) {\n return opening;\n }\n return `${opening} ${normalizedParts.join(\". \")}.`;\n}\n\nfunction isOneOffOccurrence(occurrence: OccurrenceSlim): boolean {\n if (occurrence.cadence?.kind) {\n return occurrence.cadence.kind === \"once\";\n }\n return occurrence.definitionKind === \"task\";\n}\n\nfunction occurrencePriorityScore(occurrence: OccurrenceSlim): number {\n const priority = occurrence.priority ?? 0;\n if (!Number.isFinite(priority) || priority <= 0) {\n return 0;\n }\n return Math.min(priority, 10) * 5;\n}\n\nfunction buildDowntimeContext(occurrence: OccurrenceSlim, now: Date): string {\n if (!occurrence.dueAt) {\n return `Downtime suggestion: ${occurrence.title}`;\n }\n\n const dueMs = new Date(occurrence.dueAt).getTime();\n if (dueMs <= now.getTime()) {\n return `Downtime suggestion: ${occurrence.title} (overdue)`;\n }\n\n const minutesUntilDue = Math.max(\n Math.round((dueMs - now.getTime()) / 60_000),\n 0,\n );\n return `Downtime suggestion: ${occurrence.title} (due in ${minutesUntilDue}m)`;\n}\n\nfunction capitalizeSentence(value: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return \"\";\n }\n return trimmed.charAt(0).toUpperCase() + trimmed.slice(1);\n}\n\nfunction appendInboxDigestContext(\n contextParts: string[],\n inboxDigest: InboxDigestSlim | null,\n): void {\n if (!inboxDigest) {\n return;\n }\n\n if (inboxDigest.unreadCount > 0) {\n const channelSummary = inboxDigest.channelCounts\n .slice(0, 3)\n .map((entry) => `${entry.channel} ${entry.unreadCount}`)\n .join(\", \");\n contextParts.push(\n `inbox: ${inboxDigest.unreadCount} unread${channelSummary ? ` across ${channelSummary}` : \"\"}`,\n );\n } else {\n contextParts.push(\"inbox is quiet\");\n }\n\n const topHighlights = inboxDigest.highlights\n .slice(0, 2)\n .map((highlight) => formatInboxHighlight(highlight))\n .filter((highlight) => highlight.length > 0);\n if (topHighlights.length > 0) {\n contextParts.push(`top items: ${topHighlights.join(\"; \")}`);\n }\n}\n\nfunction formatInboxHighlight(highlight: InboxDigestHighlightSlim): string {\n const subject =\n highlight.subject && highlight.subject.trim().length > 0\n ? highlight.subject.trim()\n : null;\n const snippet = summarizeSnippet(highlight.snippet);\n const messageCore =\n subject && snippet\n ? `${subject} — ${snippet}`\n : (subject ?? snippet ?? highlight.channel);\n return `${highlight.sender} on ${highlight.channel}: ${messageCore}`;\n}\n\nfunction summarizeSnippet(value: string): string | null {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return null;\n }\n if (trimmed.length <= 72) {\n return trimmed;\n }\n return `${trimmed.slice(0, 69).trimEnd()}...`;\n}\n\nfunction isBusyDay(\n profile: ActivityProfile,\n calendarEvents: CalendarEventSlim[],\n timezone: string,\n now: Date,\n): boolean {\n if (isScreenBusy(profile, now)) {\n return true;\n }\n\n const todayEvents = getTodayActionableEvents(calendarEvents, timezone, now);\n if (todayEvents.length >= 4) {\n return true;\n }\n\n if (profile.avgWeekdayMeetings !== null && profile.avgWeekdayMeetings >= 4) {\n return true;\n }\n\n const nextEvent = todayEvents.find((event) => {\n const startMs = new Date(event.startAt).getTime();\n return startMs >= now.getTime();\n });\n if (!nextEvent) {\n return false;\n }\n\n const minutesUntilNextEvent =\n (new Date(nextEvent.startAt).getTime() - now.getTime()) / 60_000;\n return minutesUntilNextEvent <= 45;\n}\n\nfunction isScreenBusy(profile: ActivityProfile, now: Date): boolean {\n if (\n !profile.screenContextAvailable ||\n profile.screenContextStale ||\n !profile.screenContextBusy ||\n !profile.screenContextSampledAt\n ) {\n return false;\n }\n\n const ageMs = now.getTime() - profile.screenContextSampledAt;\n return ageMs >= 0 && ageMs < 15 * 60 * 1000;\n}\n\nfunction getTodayNonAllDayEvents(\n events: CalendarEventSlim[],\n timezone: string,\n now: Date,\n): CalendarEventSlim[] {\n const todayParts = getZonedDateParts(now, timezone);\n return events\n .filter((e) => {\n if (e.isAllDay) return false;\n const startParts = getZonedDateParts(new Date(e.startAt), timezone);\n return (\n startParts.year === todayParts.year &&\n startParts.month === todayParts.month &&\n startParts.day === todayParts.day\n );\n })\n .sort(\n (a, b) => new Date(a.startAt).getTime() - new Date(b.startAt).getTime(),\n );\n}\n\nfunction getTodayActionableEvents(\n events: CalendarEventSlim[],\n timezone: string,\n now: Date,\n): CalendarEventSlim[] {\n return getTodayNonAllDayEvents(events, timezone, now).filter(\n shouldNudgeCalendarEvent,\n );\n}\n\nfunction shouldNudgeCalendarEvent(event: CalendarEventSlim): boolean {\n return event.proactiveCheckIn === true;\n}\n\nfunction resolveWakeTriggeredGmTime(\n relativeTime: ProactiveRelativeTimeSlim | null,\n timezone: string,\n now: Date,\n): number | null {\n const wakeAnchorMs = parseIsoMs(relativeTime?.wakeAnchorAt);\n if (wakeAnchorMs === null) {\n return null;\n }\n if (\n getLocalDateKey(getZonedDateParts(new Date(wakeAnchorMs), timezone)) !==\n getLocalDateKey(getZonedDateParts(now, timezone))\n ) {\n return null;\n }\n return wakeAnchorMs;\n}\n\nfunction resolveNightSummaryTime(\n relativeTime: ProactiveRelativeTimeSlim | null,\n timezone: string,\n now: Date,\n): number | null {\n const bedtimeTargetMs = parseIsoMs(relativeTime?.bedtimeTargetAt);\n if (bedtimeTargetMs === null) {\n return null;\n }\n const summaryAtMs = bedtimeTargetMs - 2 * 60 * 60 * 1000;\n if (\n getLocalDateKey(getZonedDateParts(new Date(summaryAtMs), timezone)) !==\n getLocalDateKey(getZonedDateParts(now, timezone))\n ) {\n return null;\n }\n return summaryAtMs;\n}\n\nfunction parseIsoMs(value: string | null | undefined): number | null {\n if (!value) {\n return null;\n }\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction findNearbyCalendarEvent(\n events: CalendarEventSlim[],\n referenceMs: number,\n timezone: string,\n now: Date,\n): CalendarEventSlim | null {\n const windowMs = 60 * 60 * 1000; // 1 hour after\n const todayEvents = getTodayActionableEvents(events, timezone, now);\n for (const event of todayEvents) {\n const startMs = new Date(event.startAt).getTime();\n if (startMs > referenceMs && startMs - referenceMs <= windowMs) {\n return event;\n }\n }\n return null;\n}\n\nfunction localHourToEpoch(\n hour: number,\n timezone: string,\n referenceDate: Date,\n): number {\n // Build an ISO string for today at the target hour in the given timezone,\n // then convert to epoch ms. We approximate by getting today's date parts\n // and computing offset from midnight.\n const parts = getZonedDateParts(referenceDate, timezone);\n const dayOffset = Math.floor(hour / 24);\n const normalizedHour = ((hour % 24) + 24) % 24;\n const diffHours = normalizedHour + dayOffset * 24 - parts.hour;\n const diffMinutes = -parts.minute;\n return referenceDate.getTime() + (diffHours * 60 + diffMinutes) * 60 * 1000;\n}\n\nfunction makeSkipped(\n kind: ProactiveAction[\"kind\"],\n now: Date,\n profile: ActivityProfile,\n reason: string,\n): ProactiveAction {\n return {\n kind,\n scheduledFor: now.getTime(),\n targetPlatform: profile.primaryPlatform ?? \"client_chat\",\n contextSummary: \"\",\n messageText: \"\",\n status: \"skipped\",\n skipReason: reason,\n };\n}\n"],"mappings":"AAQA,SAAS,iBAAiB,yBAAyB;AACnD,SAAS,wBAAwB,sBAAsB;AAUvD,MAAM,kBAAkB;AAExB,MAAM,kBAAkB;AAExB,MAAM,iBAAiB;AAEvB,MAAM,iBAAiB;AAEvB,MAAM,kBAAkB;AAExB,MAAM,cAAc;AAQpB,MAAM,wBAAwB,KAAK,KAAK,KAAK;AAE7C,MAAM,qBAAqB;AAE3B,MAAM,wBAAwB;AAE9B,MAAM,qBAAqB,KAAK,KAAK,KAAK;AAE1C,MAAM,8BAA8B;AAO7B,MAAM,gCAAgC;AAKtC,MAAM,mCAAmC;AAMzC,MAAM,6BAA6B,IAAI,KAAK,KAAK;AAOxD,SAAS,cAAc,SAA6B,KAAoB;AACtE,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,YAAY,IAAI,QAAQ,IAAI;AAClC,MAAI,YAAY,EAAG,QAAO;AAC1B,SAAO,YAAY;AACrB;AA2FO,SAAS,OACd,SACA,aACA,gBACA,cACA,aACA,YACA,UACA,KACwB;AACxB,QAAM,cAAc,OAAO,oBAAI,KAAK;AACpC,MAAI,QAAQ,qBAAqB;AAC/B,WAAO;AAAA,EACT;AAIA,MAAI,cAAc,YAAY,WAAW,WAAW,GAAG;AACrD,WAAO;AAAA,EACT;AAGA,MACE,QAAQ,aAAa,KACrB,YAAY,QAAQ,IAAI,QAAQ,aAAa,oBAC7C;AACA,WAAO,YAAY,MAAM,aAAa,SAAS,wBAAwB;AAAA,EACzE;AAEA,QAAM,eAAe;AAAA,IACnB,kBAAkB,aAAa,QAAQ;AAAA,EACzC;AACA,MAAI,uBAAuB,SAAS,UAAU,WAAW,MAAM,cAAc;AAC3E,WAAO;AAAA,EACT;AAEA,QAAM,SACJ,2BAA2B,cAAc,UAAU,WAAW,KAC9D;AAAA,IACE,cAAc,SAAS,gBAAgB,UAAU,WAAW;AAAA,IAC5D;AAAA,IACA;AAAA,EACF;AAGF,QAAM,QAAQ,kBAAkB,aAAa,QAAQ;AACrD,MAAI,MAAM,QAAQ,gBAAgB;AAChC,WAAO;AAAA,EACT;AAGA,QAAM,eAAyB,CAAC;AAGhC,QAAM,qBAAqB,YAAY,OAAO,CAAC,QAAQ;AACrD,QAAI,CAAC,IAAI,SAAS,IAAI,UAAU,eAAe,IAAI,UAAU;AAC3D,aAAO;AACT,UAAM,QAAQ,IAAI,KAAK,IAAI,KAAK,EAAE,QAAQ;AAC1C,UAAM,WAAW,kBAAkB,IAAI,KAAK,IAAI,KAAK,GAAG,QAAQ;AAChE,WAAO,SAAS,YAAY,QAAQ,KAAK,SAAS,OAAO;AAAA,EAC3D,CAAC;AAED,MAAI,mBAAmB,SAAS,GAAG;AACjC,UAAM,QAAQ,mBAAmB,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI;AAC9D,iBAAa,KAAK,mBAAmB,KAAK,EAAE;AAAA,EAC9C;AAGA,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,YAAY,SAAS,GAAG;AAC1B,UAAM,QAAQ,YAAY,CAAC;AAC3B,QAAI,OAAO;AACT,YAAM,aAAa,kBAAkB,IAAI,KAAK,MAAM,OAAO,GAAG,QAAQ;AACtE,mBAAa;AAAA,QACX,GAAG,YAAY,MAAM,WAAW,YAAY,SAAS,IAAI,MAAM,EAAE,oBAAoB,WAAW,IAAI,IAAI,OAAO,WAAW,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC;AAAA,MACpJ;AAAA,IACF;AAAA,EACF;AAEA,2BAAyB,cAAc,WAAW;AAElD,QAAM,iBACJ,aAAa,SAAS,IAAI,eAAe,aAAa,KAAK,KAAK,CAAC,KAAK;AAExE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,cAAc;AAAA,IACd,gBAAgB,qBAAqB,SAAS,KAAK;AAAA,IACnD;AAAA,IACA,aAAa,mBAAmB,MAAM,cAAc,WAAW;AAAA,IAC/D,QAAQ;AAAA,EACV;AACF;AAqCO,SAAS,OACd,SACA,cACA,aACA,YACA,UACA,KACwB;AACxB,QAAM,cAAc,OAAO,oBAAI,KAAK;AACpC,MAAI,QAAQ,qBAAqB;AAC/B,WAAO;AAAA,EACT;AAIA,MAAI,cAAc,YAAY,WAAW,WAAW,GAAG;AACrD,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,eAAe,SAAS,UAAU,WAAW,GAAG;AACnD,WAAO;AAAA,EACT;AAEA,QAAM,SACJ,wBAAwB,cAAc,UAAU,WAAW,KAC3D,iBAAiB,cAAc,OAAO,GAAG,UAAU,WAAW;AAChE,QAAM,eAAyB,CAAC;AAChC,2BAAyB,cAAc,WAAW;AAElD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,cAAc;AAAA,IACd,gBAAgB,qBAAqB,SAAS,IAAI;AAAA,IAClD,gBACE,aAAa,SAAS,IAClB,eAAe,aAAa,KAAK,KAAK,CAAC,KACvC;AAAA,IACN,aAAa,mBAAmB,MAAM,cAAc,WAAW;AAAA,IAC/D,QAAQ;AAAA,EACV;AACF;AAIO,SAAS,WACd,SACA,aACA,gBACA,YACA,UACA,KACmB;AACnB,QAAM,cAAc,OAAO,oBAAI,KAAK;AACpC,MAAI,QAAQ,qBAAqB;AAC/B,WAAO,CAAC;AAAA,EACV;AACA,QAAM,UAA6B,CAAC;AACpC,QAAM,YAAY,IAAI,IAAI,YAAY,uBAAuB,CAAC,CAAC;AAC/D,QAAM,iBAAiB,IAAI,IAAI,YAAY,0BAA0B,CAAC,CAAC;AAEvE,QAAM,YAAY,YAAY,QAAQ,IAAI,wBAAwB,KAAK;AACvE,QAAM,SAAS,qBAAqB,KAAK;AAGzC,aAAW,OAAO,aAAa;AAC7B,QAAI,CAAC,IAAI,SAAS,IAAI,UAAU,eAAe,IAAI,UAAU;AAC3D;AACF,QAAI,UAAU,IAAI,IAAI,EAAE,EAAG;AAE3B,UAAM,QAAQ,IAAI,KAAK,IAAI,KAAK,EAAE,QAAQ;AAC1C,QAAI,QAAQ,aAAa,QAAQ,YAAY,QAAQ,EAAG;AAGxD,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,eAAe,CAAC,IAAI,KAAK;AAC/B,QAAI,aAAa;AACf,YAAM,aAAa;AAAA,QACjB,IAAI,KAAK,YAAY,OAAO;AAAA,QAC5B;AAAA,MACF;AACA,mBAAa;AAAA,QACX,eAAe,WAAW,IAAI,IAAI,OAAO,WAAW,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,YAAY,OAAO;AAAA,MACrG;AAAA,IACF;AAEA,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,cAAc,QAAQ;AAAA,MACtB,gBAAgB,qBAAqB,SAAS,IAAI;AAAA,MAClD,gBAAgB,aAAa,KAAK,UAAK;AAAA,MACvC,aAAa,aAAa,KAAK,UAAK;AAAA,MACpC,cAAc,IAAI;AAAA,MAClB,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAGA,aAAW,SAAS,gBAAgB;AAClC,QAAI,CAAC,yBAAyB,KAAK,EAAG;AACtC,QAAI,eAAe,IAAI,MAAM,EAAE,EAAG;AAElC,UAAM,UAAU,IAAI,KAAK,MAAM,OAAO,EAAE,QAAQ;AAChD,QAAI,UAAU,aAAa,UAAU,YAAY,QAAQ,EAAG;AAE5D,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,cAAc,UAAU;AAAA,MACxB,gBAAgB,qBAAqB,SAAS,IAAI;AAAA,MAClD,gBAAgB,MAAM;AAAA,MACtB,aAAa,MAAM;AAAA,MACnB,iBAAiB,MAAM;AAAA,MACvB,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAIO,SAAS,mBACd,SACA,aACA,gBACA,YACA,UACA,KACmB;AACnB,QAAM,cAAc,OAAO,oBAAI,KAAK;AACpC,MAAI,QAAQ,qBAAqB;AAC/B,WAAO,CAAC;AAAA,EACV;AACA,MAAI,UAAU,SAAS,gBAAgB,UAAU,WAAW,GAAG;AAC7D,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,YAAY,IAAI,IAAI,YAAY,uBAAuB,CAAC,CAAC;AAC/D,QAAM,iBAAiB,YAAY,QAAQ,IAAI,IAAI,KAAK,KAAK;AAE7D,MACE,YAAY,KAAK,CAAC,QAAQ;AACxB,QAAI,IAAI,UAAU,eAAe,IAAI,UAAU,UAAW,QAAO;AACjE,QAAI,CAAC,IAAI,MAAO,QAAO;AACvB,UAAM,QAAQ,IAAI,KAAK,IAAI,KAAK,EAAE,QAAQ;AAC1C,WAAO,SAAS,YAAY,QAAQ,KAAK,SAAS;AAAA,EACpD,CAAC,GACD;AACA,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,aAAa,YAChB,OAAO,CAAC,QAAQ,mBAAmB,GAAG,CAAC,EACvC,OAAO,CAAC,QAAQ,IAAI,UAAU,eAAe,IAAI,UAAU,SAAS,EACpE,OAAO,CAAC,QAAQ,IAAI,UAAU,IAAI,EAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC,EACtC,IAAI,CAAC,QAAQ;AACZ,UAAM,QAAQ,IAAI,KAAK,IAAI,KAAe,EAAE,QAAQ;AACpD,UAAM,YAAY,KAAK,IAAI,YAAY,QAAQ,IAAI,OAAO,CAAC;AAC3D,UAAM,iBACJ,KAAK,IAAI,QAAQ,YAAY,QAAQ,GAAG,CAAC,IAAI;AAC/C,WAAO;AAAA,MACL;AAAA,MACA,OACE,YAAY,IACR,MAAY,YAAY,wBAAwB,GAAG,IACnD,MAAU,iBAAiB,wBAAwB,GAAG;AAAA,IAC9D;AAAA,EACF,CAAC,EACA,KAAK,CAAC,MAAM,UAAU,MAAM,QAAQ,KAAK,KAAK;AAEjD,QAAM,WAAW,WAAW,CAAC;AAC7B,MAAI,CAAC,UAAU;AACb,WAAO,CAAC;AAAA,EACV;AAEA,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,cAAc,YAAY,QAAQ;AAAA,MAClC,gBAAgB,qBAAqB,SAAS,IAAI;AAAA,MAClD,gBAAgB,qBAAqB,SAAS,KAAK,WAAW;AAAA,MAC9D,aAAa,qBAAqB,SAAS,KAAK,WAAW;AAAA,MAC3D,cAAc,SAAS,IAAI;AAAA,MAC3B,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAIO,SAAS,iBACd,SACA,OACA,YACA,WACA,KACmB;AACnB,QAAM,cAAc,OAAO,oBAAI,KAAK;AACpC,MAAI,QAAQ,oBAAqB,QAAO,CAAC;AAEzC,QAAM,iBAAiB,IAAI,IAAI,YAAY,kBAAkB,CAAC,CAAC;AAC/D,QAAM,aAAa,8BAA8B,KAAK,KAAK,KAAK;AAEhE,QAAM,aAAgC,CAAC;AAEvC,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,WAAW,SAAU;AAC9B,QAAI,eAAe,IAAI,KAAK,EAAE,EAAG;AAGjC,QAAI,KAAK,gBAAgB;AACvB,YAAM,aAAa,IAAI,KAAK,KAAK,cAAc,EAAE,QAAQ;AACzD,UACE,OAAO,SAAS,UAAU,KAC1B,YAAY,QAAQ,IAAI,aAAa,YACrC;AACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,eAAe,KAAK,uBAAuB;AACjD,UAAM,aAAa,KAAK,0BAA0B;AAElD,QAAI;AACJ,QAAI;AAEJ,QAAI,YAAY;AACd,uBAAiB,SAAS,KAAK,KAAK;AACpC,oBAAc,cAAc,KAAK,KAAK;AAAA,IACxC,WAAW,cAAc;AACvB,YAAM,MAAM,KAAK,MAAM,KAAK,uBAAuB,GAAG;AACtD,uBAAiB,SAAS,KAAK,KAAK,mBAAmB,GAAG;AAC1D,oBAAc,mBAAmB,KAAK,KAAK,qCAAgC,GAAG;AAAA,IAChF,OAAO;AACL,YAAM,MAAM,KAAK,MAAM,KAAK,uBAAuB,GAAG;AACtD,uBAAiB,SAAS,KAAK,KAAK,iBAAiB,GAAG;AACxD,oBAAc,IAAI,KAAK,KAAK,0BAAqB,GAAG;AAAA,IACtD;AAEA,eAAW,KAAK;AAAA,MACd,MAAM;AAAA,MACN,cAAc,YAAY,QAAQ;AAAA,MAClC,gBAAgB,qBAAqB,SAAS,IAAI;AAAA,MAClD;AAAA,MACA;AAAA,MACA,QAAQ,KAAK;AAAA,MACb,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAIA,aAAW,KAAK,CAAC,GAAG,MAAM;AACxB,UAAM,WAAW,CAAC,WAChB,OAAO,eAAe,SAAS,qBAAqB,IAChD,IACA,OAAO,eAAe,SAAS,eAAe,IAC5C,IACA;AACR,WAAO,SAAS,CAAC,IAAI,SAAS,CAAC;AAAA,EACjC,CAAC;AAED,SAAO,WAAW,MAAM,GAAG,CAAC;AAC9B;AAeO,SAAS,uBACd,SACA,eACA,YACA,WACA,KACwB;AACxB,QAAM,cAAc,OAAO,oBAAI,KAAK;AACpC,MAAI,QAAQ,qBAAqB;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,cAAc,eAAe;AAClD,MAAI,gBAAgB,kCAAkC;AACpD,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,YAAY;AAChC,MAAI,OAAO,gBAAgB,UAAU;AACnC,UAAM,YAAY,YAAY,QAAQ,IAAI;AAE1C,QAAI,YAAY,4BAA4B;AAC1C,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,aAAa,qBAAqB,cAAc,QAAQ;AAC9D,QAAM,UAAU,YAAY,SAAS;AACrC,QAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,MAAM,YAAY,CAAC;AAE3D,QAAM,cACJ,6BAAwB,OAAO,QAAQ,cAAc;AAEvD,QAAM,iBACJ,yBAAyB,OAAO,IAAI,cAAc,OAC/C,6BAA6B,uBAClB,gCAAgC;AAEhD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,cAAc,YAAY,QAAQ;AAAA,IAClC,gBAAgB,qBAAqB,SAAS,IAAI;AAAA,IAClD;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV;AACF;AAEA,SAAS,qBACP,UACgC;AAChC,MAAI,OAAuC;AAC3C,aAAW,SAAS,UAAU;AAC5B,QAAI,CAAC,SAAS,OAAO,MAAM,iBAAiB,SAAU;AACtD,QAAI,MAAM,gBAAgB,EAAG;AAC7B,QAAI,CAAC,QAAQ,MAAM,eAAe,KAAK,cAAc;AACnD,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAIO,SAAS,qBACd,SACA,eACQ;AACR,MAAI,iBAAiB,QAAQ,qBAAqB,QAAQ,kBAAkB;AAC1E,WAAO,QAAQ;AAAA,EACjB;AACA,SAAO,QAAQ,mBAAmB;AACpC;AAIA,SAAS,cACP,SACA,gBACA,UACA,KACQ;AAER,QAAM,cAAc,wBAAwB,gBAAgB,UAAU,GAAG;AACzE,QAAM,aAAa,YAAY,CAAC;AAChC,MAAI,YAAY;AACd,UAAM,aAAa;AAAA,MACjB,IAAI,KAAK,WAAW,OAAO;AAAA,MAC3B;AAAA,IACF;AACA,UAAM,WAAW,WAAW,OAAO,kBAAkB;AACrD,QAAI,YAAY,EAAG,QAAO,KAAK,MAAM,QAAQ;AAAA,EAC/C;AAGA,MAAI,QAAQ,oBAAoB,MAAM;AACpC,UAAM,WAAW,QAAQ,kBAAkB,kBAAkB;AAC7D,QAAI,YAAY,EAAG,QAAO,KAAK,MAAM,QAAQ;AAAA,EAC/C;AAGA,MAAI,QAAQ,2BAA2B,MAAM;AAC3C,UAAM,WAAW,QAAQ,yBAAyB,kBAAkB;AACpE,QAAI,YAAY,EAAG,QAAO,KAAK,MAAM,QAAQ;AAAA,EAC/C;AAGA,MAAI,QAAQ,0BAA0B,MAAM;AAC1C,UAAM,WAAW,QAAQ,wBAAwB,kBAAkB;AACnE,QAAI,YAAY,EAAG,QAAO,KAAK,MAAM,QAAQ;AAAA,EAC/C;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,SAAkC;AAOvD,MACE,QAAQ,0BAA0B,QAClC,QAAQ,yBAAyB,IACjC;AACA,UAAM,UAAU,QAAQ,wBAAwB,iBAAiB;AACjE,UAAM,SAAS,KAAK,IAAI,KAAK,KAAK,OAAO,GAAG,EAAE;AAC9C,WAAO,KAAK,IAAI,QAAQ,WAAW;AAAA,EACrC;AACA,SAAO;AACT;AAEA,SAAS,mBACP,MACA,cACA,aACQ;AACR,QAAM,kBAAkB,aACrB,IAAI,CAAC,SAAS,mBAAmB,IAAI,CAAC,EACtC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AACnC,QAAM,UACJ,SAAS,OACL,kBACA,eAAe,YAAY,cAAc,IACvC,mBACA;AACR,MAAI,gBAAgB,WAAW,GAAG;AAChC,WAAO;AAAA,EACT;AACA,SAAO,GAAG,OAAO,IAAI,gBAAgB,KAAK,IAAI,CAAC;AACjD;AAEA,SAAS,mBAAmB,YAAqC;AAC/D,MAAI,WAAW,SAAS,MAAM;AAC5B,WAAO,WAAW,QAAQ,SAAS;AAAA,EACrC;AACA,SAAO,WAAW,mBAAmB;AACvC;AAEA,SAAS,wBAAwB,YAAoC;AACnE,QAAM,WAAW,WAAW,YAAY;AACxC,MAAI,CAAC,OAAO,SAAS,QAAQ,KAAK,YAAY,GAAG;AAC/C,WAAO;AAAA,EACT;AACA,SAAO,KAAK,IAAI,UAAU,EAAE,IAAI;AAClC;AAEA,SAAS,qBAAqB,YAA4B,KAAmB;AAC3E,MAAI,CAAC,WAAW,OAAO;AACrB,WAAO,wBAAwB,WAAW,KAAK;AAAA,EACjD;AAEA,QAAM,QAAQ,IAAI,KAAK,WAAW,KAAK,EAAE,QAAQ;AACjD,MAAI,SAAS,IAAI,QAAQ,GAAG;AAC1B,WAAO,wBAAwB,WAAW,KAAK;AAAA,EACjD;AAEA,QAAM,kBAAkB,KAAK;AAAA,IAC3B,KAAK,OAAO,QAAQ,IAAI,QAAQ,KAAK,GAAM;AAAA,IAC3C;AAAA,EACF;AACA,SAAO,wBAAwB,WAAW,KAAK,YAAY,eAAe;AAC5E;AAEA,SAAS,mBAAmB,OAAuB;AACjD,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,OAAO,CAAC,EAAE,YAAY,IAAI,QAAQ,MAAM,CAAC;AAC1D;AAEA,SAAS,yBACP,cACA,aACM;AACN,MAAI,CAAC,aAAa;AAChB;AAAA,EACF;AAEA,MAAI,YAAY,cAAc,GAAG;AAC/B,UAAM,iBAAiB,YAAY,cAChC,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,UAAU,GAAG,MAAM,OAAO,IAAI,MAAM,WAAW,EAAE,EACtD,KAAK,IAAI;AACZ,iBAAa;AAAA,MACX,UAAU,YAAY,WAAW,UAAU,iBAAiB,WAAW,cAAc,KAAK,EAAE;AAAA,IAC9F;AAAA,EACF,OAAO;AACL,iBAAa,KAAK,gBAAgB;AAAA,EACpC;AAEA,QAAM,gBAAgB,YAAY,WAC/B,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,cAAc,qBAAqB,SAAS,CAAC,EAClD,OAAO,CAAC,cAAc,UAAU,SAAS,CAAC;AAC7C,MAAI,cAAc,SAAS,GAAG;AAC5B,iBAAa,KAAK,cAAc,cAAc,KAAK,IAAI,CAAC,EAAE;AAAA,EAC5D;AACF;AAEA,SAAS,qBAAqB,WAA6C;AACzE,QAAM,UACJ,UAAU,WAAW,UAAU,QAAQ,KAAK,EAAE,SAAS,IACnD,UAAU,QAAQ,KAAK,IACvB;AACN,QAAM,UAAU,iBAAiB,UAAU,OAAO;AAClD,QAAM,cACJ,WAAW,UACP,GAAG,OAAO,WAAM,OAAO,KACtB,WAAW,WAAW,UAAU;AACvC,SAAO,GAAG,UAAU,MAAM,OAAO,UAAU,OAAO,KAAK,WAAW;AACpE;AAEA,SAAS,iBAAiB,OAA8B;AACtD,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,UAAU,IAAI;AACxB,WAAO;AAAA,EACT;AACA,SAAO,GAAG,QAAQ,MAAM,GAAG,EAAE,EAAE,QAAQ,CAAC;AAC1C;AAEA,SAAS,UACP,SACA,gBACA,UACA,KACS;AACT,MAAI,aAAa,SAAS,GAAG,GAAG;AAC9B,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,yBAAyB,gBAAgB,UAAU,GAAG;AAC1E,MAAI,YAAY,UAAU,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,uBAAuB,QAAQ,QAAQ,sBAAsB,GAAG;AAC1E,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,YAAY,KAAK,CAAC,UAAU;AAC5C,UAAM,UAAU,IAAI,KAAK,MAAM,OAAO,EAAE,QAAQ;AAChD,WAAO,WAAW,IAAI,QAAQ;AAAA,EAChC,CAAC;AACD,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AAEA,QAAM,yBACH,IAAI,KAAK,UAAU,OAAO,EAAE,QAAQ,IAAI,IAAI,QAAQ,KAAK;AAC5D,SAAO,yBAAyB;AAClC;AAEA,SAAS,aAAa,SAA0B,KAAoB;AAClE,MACE,CAAC,QAAQ,0BACT,QAAQ,sBACR,CAAC,QAAQ,qBACT,CAAC,QAAQ,wBACT;AACA,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,IAAI,QAAQ,IAAI,QAAQ;AACtC,SAAO,SAAS,KAAK,QAAQ,KAAK,KAAK;AACzC;AAEA,SAAS,wBACP,QACA,UACA,KACqB;AACrB,QAAM,aAAa,kBAAkB,KAAK,QAAQ;AAClD,SAAO,OACJ,OAAO,CAAC,MAAM;AACb,QAAI,EAAE,SAAU,QAAO;AACvB,UAAM,aAAa,kBAAkB,IAAI,KAAK,EAAE,OAAO,GAAG,QAAQ;AAClE,WACE,WAAW,SAAS,WAAW,QAC/B,WAAW,UAAU,WAAW,SAChC,WAAW,QAAQ,WAAW;AAAA,EAElC,CAAC,EACA;AAAA,IACC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,OAAO,EAAE,QAAQ;AAAA,EACxE;AACJ;AAEA,SAAS,yBACP,QACA,UACA,KACqB;AACrB,SAAO,wBAAwB,QAAQ,UAAU,GAAG,EAAE;AAAA,IACpD;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,OAAmC;AACnE,SAAO,MAAM,qBAAqB;AACpC;AAEA,SAAS,2BACP,cACA,UACA,KACe;AACf,QAAM,eAAe,WAAW,cAAc,YAAY;AAC1D,MAAI,iBAAiB,MAAM;AACzB,WAAO;AAAA,EACT;AACA,MACE,gBAAgB,kBAAkB,IAAI,KAAK,YAAY,GAAG,QAAQ,CAAC,MACnE,gBAAgB,kBAAkB,KAAK,QAAQ,CAAC,GAChD;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,wBACP,cACA,UACA,KACe;AACf,QAAM,kBAAkB,WAAW,cAAc,eAAe;AAChE,MAAI,oBAAoB,MAAM;AAC5B,WAAO;AAAA,EACT;AACA,QAAM,cAAc,kBAAkB,IAAI,KAAK,KAAK;AACpD,MACE,gBAAgB,kBAAkB,IAAI,KAAK,WAAW,GAAG,QAAQ,CAAC,MAClE,gBAAgB,kBAAkB,KAAK,QAAQ,CAAC,GAChD;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,WAAW,OAAiD;AACnE,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,QAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,SAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAC5C;AAEA,SAAS,wBACP,QACA,aACA,UACA,KAC0B;AAC1B,QAAM,WAAW,KAAK,KAAK;AAC3B,QAAM,cAAc,yBAAyB,QAAQ,UAAU,GAAG;AAClE,aAAW,SAAS,aAAa;AAC/B,UAAM,UAAU,IAAI,KAAK,MAAM,OAAO,EAAE,QAAQ;AAChD,QAAI,UAAU,eAAe,UAAU,eAAe,UAAU;AAC9D,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,iBACP,MACA,UACA,eACQ;AAIR,QAAM,QAAQ,kBAAkB,eAAe,QAAQ;AACvD,QAAM,YAAY,KAAK,MAAM,OAAO,EAAE;AACtC,QAAM,kBAAmB,OAAO,KAAM,MAAM;AAC5C,QAAM,YAAY,iBAAiB,YAAY,KAAK,MAAM;AAC1D,QAAM,cAAc,CAAC,MAAM;AAC3B,SAAO,cAAc,QAAQ,KAAK,YAAY,KAAK,eAAe,KAAK;AACzE;AAEA,SAAS,YACP,MACA,KACA,SACA,QACiB;AACjB,SAAO;AAAA,IACL;AAAA,IACA,cAAc,IAAI,QAAQ;AAAA,IAC1B,gBAAgB,QAAQ,mBAAmB;AAAA,IAC3C,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;","names":[]}
@@ -0,0 +1,33 @@
1
+ import type { IAgentRuntime, UUID } from "@elizaos/core";
2
+ import { type CalendarEventSlim } from "./proactive-planner.js";
3
+ export declare const PROACTIVE_TASK_NAME: "PROACTIVE_AGENT";
4
+ export declare const PROACTIVE_TASK_TAGS: readonly ["queue", "repeat", "proactive"];
5
+ export declare const PROACTIVE_TASK_INTERVAL_MS = 60000;
6
+ export declare function isAppFirstRunComplete(): boolean;
7
+ type ProactiveOwnerContact = {
8
+ entityId?: string;
9
+ channelId?: string;
10
+ roomId?: string;
11
+ };
12
+ type CalendarEventProactiveDecision = {
13
+ id: string;
14
+ shouldCheckIn: boolean;
15
+ reason?: string | null;
16
+ };
17
+ export declare function classifyCalendarEventsForProactivePlanning(runtime: IAgentRuntime, events: CalendarEventSlim[], timezone: string, now: Date): Promise<Map<string, CalendarEventProactiveDecision> | null>;
18
+ export declare function resolveProactiveDeliverySource(targetPlatform: string): string;
19
+ export declare function resolveProactiveOwnerContact(args: {
20
+ targetPlatform: string;
21
+ ownerEntityId: string;
22
+ ownerContacts: Record<string, ProactiveOwnerContact>;
23
+ }): {
24
+ source: string;
25
+ contact: ProactiveOwnerContact;
26
+ } | null;
27
+ export declare function executeProactiveTask(runtime: IAgentRuntime, options?: Record<string, unknown>): Promise<{
28
+ nextInterval: number;
29
+ }>;
30
+ export declare function registerProactiveTaskWorker(runtime: IAgentRuntime): void;
31
+ export declare function ensureProactiveAgentTask(runtime: IAgentRuntime): Promise<UUID>;
32
+ export {};
33
+ //# sourceMappingURL=proactive-worker.d.ts.map