@elizaos/plugin-personal-assistant 2.0.3-beta.5 → 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,2524 @@
1
+ import {
2
+ extractConversationMetadataFromRoom,
3
+ isPageScopedConversationMetadata,
4
+ renderGroundedActionReply
5
+ } from "@elizaos/agent";
6
+ import { resolveActionArgs } from "@elizaos/core";
7
+ import {
8
+ buildNativeAppleReminderMetadata
9
+ } from "../lifeops/apple-reminders.js";
10
+ import {
11
+ resolveDefaultTimeZone,
12
+ resolveDefaultWindowPolicy
13
+ } from "../lifeops/defaults.js";
14
+ import {
15
+ detailBoolean,
16
+ detailNumber,
17
+ detailObject,
18
+ detailString,
19
+ formatOverviewForQuery,
20
+ messageText,
21
+ toActionData
22
+ } from "../lifeops/google/format-helpers.js";
23
+ import { LifeOpsService, LifeOpsServiceError } from "../lifeops/service.js";
24
+ import { normalizeExplicitTimeZoneToken } from "../lifeops/time/timezone.js";
25
+ import {
26
+ addDaysToLocalDate,
27
+ buildUtcDateFromLocalParts,
28
+ getZonedDateParts
29
+ } from "../lifeops/time.js";
30
+ import {
31
+ extractGoalCreatePlanWithLlm,
32
+ extractGoalUpdatePlanWithLlm,
33
+ mergeGoalMetadataWithGrounding
34
+ } from "./lib/extract-goal-plan.js";
35
+ import {
36
+ extractLifeOperationWithLlm
37
+ } from "./lib/extract-life-operation.js";
38
+ import {
39
+ extractTaskCreatePlanWithLlm
40
+ } from "./lib/extract-task-plan.js";
41
+ import {
42
+ extractUpdateFieldsWithLlm
43
+ } from "./lib/extract-update-fields.js";
44
+ import {
45
+ countTurnsSinceLatestDeferredLifeDraft,
46
+ deferredLifeDraftExpiryReason,
47
+ extractDeferredLifeDraftFollowupWithLlm,
48
+ latestDeferredLifeDraft
49
+ } from "./lib/lifeops-deferred-draft.js";
50
+ import {
51
+ applyOwnerPolicyConfigureEscalation,
52
+ applyOwnerPolicySetReminder
53
+ } from "./lib/owner-policy-writes.js";
54
+ const SUBACTIONS = {
55
+ create: {
56
+ description: "Create a life-item: kind=definition (habit/routine/reminder/alarm/todo) or kind=goal (long-term aspiration).",
57
+ descriptionCompressed: "create life-item definition(habit|routine|reminder|alarm|todo)|goal; infer cadence/title",
58
+ required: ["kind", "title"],
59
+ optional: ["intent", "details"]
60
+ },
61
+ update: {
62
+ description: "Update an existing life-item by id or title (kind: definition or goal).",
63
+ descriptionCompressed: "update life-item by id/title: kind, target, fields",
64
+ required: ["kind", "target"],
65
+ optional: ["title", "details"]
66
+ },
67
+ delete: {
68
+ description: "Delete a life-item by id or title (kind: definition or goal).",
69
+ descriptionCompressed: "delete life-item by id/title",
70
+ required: ["kind", "target"]
71
+ },
72
+ complete: {
73
+ description: "Mark an occurrence as done.",
74
+ descriptionCompressed: "mark occurrence done",
75
+ required: ["target"]
76
+ },
77
+ skip: {
78
+ description: "Skip an occurrence.",
79
+ descriptionCompressed: "skip occurrence",
80
+ required: ["target"]
81
+ },
82
+ snooze: {
83
+ description: "Snooze an occurrence by minutes or preset duration.",
84
+ descriptionCompressed: "snooze occurrence; duration",
85
+ required: ["target"],
86
+ optional: ["minutes"]
87
+ },
88
+ review: {
89
+ description: "Review progress on a goal.",
90
+ descriptionCompressed: "review goal progress",
91
+ required: ["target"]
92
+ },
93
+ policy_set_reminder: {
94
+ description: "Set reminder intensity policy on the OwnerFactStore: minimal | normal | persistent | high_priority_only. Optional per-definition target.",
95
+ descriptionCompressed: "policy.set_reminder: intensity=minimal|normal|persistent|high_priority_only",
96
+ required: [],
97
+ optional: ["intent", "details"]
98
+ },
99
+ policy_configure_escalation: {
100
+ description: "Configure escalation policy on the OwnerFactStore (timeoutMinutes, callAfterMinutes). Optional per-definition target.",
101
+ descriptionCompressed: "policy.configure_escalation: timeout-minutes call-after-no-response",
102
+ required: [],
103
+ optional: ["intent", "details"]
104
+ }
105
+ };
106
+ function toInternalLifeOp(operation, kind) {
107
+ switch (operation) {
108
+ case "create":
109
+ return kind === "goal" ? "create_goal" : "create_definition";
110
+ case "update":
111
+ return kind === "goal" ? "update_goal" : "update_definition";
112
+ case "delete":
113
+ return kind === "goal" ? "delete_goal" : "delete_definition";
114
+ case "complete":
115
+ return "complete_occurrence";
116
+ case "skip":
117
+ return "skip_occurrence";
118
+ case "snooze":
119
+ return "snooze_occurrence";
120
+ case "review":
121
+ return "review_goal";
122
+ case "policy_set_reminder":
123
+ return "policy_set_reminder";
124
+ case "policy_configure_escalation":
125
+ return "policy_configure_escalation";
126
+ }
127
+ }
128
+ function inferLifeKindFromIntent(intent) {
129
+ const normalized = intent.toLowerCase();
130
+ if (/\bgoal\b|\baspirat|achiev|long[\s-]?term/.test(normalized) || /\bi (?:want|hope|wish|aspire) to\b/.test(normalized)) {
131
+ return "goal";
132
+ }
133
+ return "definition";
134
+ }
135
+ const GENERIC_DERIVED_TITLE_RE = /^(?:new\s+)?(?:habit|routine|task|goal|life goal|thing|item|something|anything|stuff|plan|reminder|todo|to do|achieve|achieve a|achieve an)$/i;
136
+ function normalizeLifeTimeZoneToken(value) {
137
+ return normalizeExplicitTimeZoneToken(value);
138
+ }
139
+ function isLifeOwnedOperation(value) {
140
+ return value != null && value !== "query_calendar_today" && value !== "query_calendar_next" && value !== "query_email" && value !== "query_overview";
141
+ }
142
+ function normalizeExplicitLifeAction(value) {
143
+ if (typeof value !== "string") {
144
+ return null;
145
+ }
146
+ const normalized = value.trim().toLowerCase().replace(/[-\s]+/g, "_");
147
+ switch (normalized) {
148
+ case "create_goal":
149
+ case "goal_create":
150
+ return { operation: "create", kind: "goal" };
151
+ case "create_definition":
152
+ case "create_habit":
153
+ case "create_routine":
154
+ case "create_reminder":
155
+ case "create_todo":
156
+ return { operation: "create", kind: "definition" };
157
+ case "calendar":
158
+ case "query_calendar":
159
+ case "query_calendar_today":
160
+ return { operation: "query_calendar_today" };
161
+ case "query_calendar_next":
162
+ case "next_calendar":
163
+ return { operation: "query_calendar_next" };
164
+ case "email":
165
+ case "gmail":
166
+ case "query_email":
167
+ return { operation: "query_email" };
168
+ case "overview":
169
+ case "query_overview":
170
+ return { operation: "query_overview" };
171
+ case "phone":
172
+ case "capture_phone":
173
+ return "phone";
174
+ default:
175
+ return isLifeOwnedOperation(normalized) ? { operation: normalized } : null;
176
+ }
177
+ }
178
+ async function resolveLifeOperationPlan(args) {
179
+ const { runtime, message, state, intent, explicitOperation } = args;
180
+ if (explicitOperation) {
181
+ return {
182
+ operation: explicitOperation,
183
+ confidence: 1,
184
+ missing: [],
185
+ shouldAct: true
186
+ };
187
+ }
188
+ const extracted = await extractLifeOperationWithLlm({
189
+ runtime,
190
+ message,
191
+ state,
192
+ intent
193
+ });
194
+ if (!extracted.shouldAct || !extracted.operation || !isLifeOwnedOperation(extracted.operation)) {
195
+ return {
196
+ operation: isLifeOwnedOperation(extracted.operation) ? extracted.operation : null,
197
+ confidence: extracted.confidence,
198
+ missing: extracted.missing,
199
+ shouldAct: false
200
+ };
201
+ }
202
+ return {
203
+ operation: extracted.operation,
204
+ confidence: extracted.confidence,
205
+ missing: extracted.missing,
206
+ shouldAct: true
207
+ };
208
+ }
209
+ async function routeLifeSubaction(args) {
210
+ const { runtime, message, state, options, intent, explicitSubaction } = args;
211
+ if (explicitSubaction && !isLifeOwnedOperation(explicitSubaction)) {
212
+ return {
213
+ operation: explicitSubaction,
214
+ confidence: 1,
215
+ missing: [],
216
+ shouldAct: true
217
+ };
218
+ }
219
+ const resolved = await resolveActionArgs({
220
+ runtime,
221
+ message,
222
+ state,
223
+ options,
224
+ actionName: ownerSurfaceActionNameFromOptions(options),
225
+ subactions: SUBACTIONS,
226
+ intentHint: intent
227
+ });
228
+ if (resolved.ok) {
229
+ return {
230
+ operation: resolved.subaction,
231
+ confidence: 1,
232
+ missing: [],
233
+ shouldAct: true
234
+ };
235
+ }
236
+ return resolveLifeOperationPlan({
237
+ runtime,
238
+ message,
239
+ state,
240
+ intent,
241
+ explicitOperation: explicitSubaction
242
+ });
243
+ }
244
+ function resolveDeferredLifeDraftReuseMode(args) {
245
+ if (!args.draft) {
246
+ return null;
247
+ }
248
+ if (deferredLifeDraftExpiryReason(args)) {
249
+ return null;
250
+ }
251
+ if (detailBoolean(args.details, "confirmed") === true) {
252
+ return "confirm";
253
+ }
254
+ const explicitOperation = args.explicitOperation ? String(args.explicitOperation) : void 0;
255
+ const draftOperation = String(args.draft.operation);
256
+ if (explicitOperation && explicitOperation !== draftOperation) {
257
+ return null;
258
+ }
259
+ if (args.llmMode === "confirm" || args.llmMode === "edit") {
260
+ return args.llmMode;
261
+ }
262
+ return null;
263
+ }
264
+ function shouldForceLifeCreateExecution(args) {
265
+ if (args.operation !== "create" || args.kind === "goal") {
266
+ return false;
267
+ }
268
+ const blockingFields = args.missing.filter(
269
+ (field) => field !== "title" && field !== "schedule"
270
+ );
271
+ if (blockingFields.length > 0) {
272
+ return false;
273
+ }
274
+ if (typeof args.title === "string" && args.title.trim().length > 0) {
275
+ return true;
276
+ }
277
+ if (normalizeCadenceDetail(detailObject(args.details, "cadence"))) {
278
+ return true;
279
+ }
280
+ return false;
281
+ }
282
+ function requestedOwnership(domain) {
283
+ if (domain === "agent_ops") {
284
+ return { domain: "agent_ops", subjectType: "agent" };
285
+ }
286
+ return { domain: "user_lifeops", subjectType: "owner" };
287
+ }
288
+ function normalizeIntentText(value) {
289
+ return normalizeLifeInputText(value).toLowerCase();
290
+ }
291
+ function normalizeLifeInputText(value) {
292
+ return value.replace(/[\u00a0\u1680\u2000-\u200b\u202f\u205f\u3000]/g, " ").replace(/\s+/g, " ").trim();
293
+ }
294
+ function normalizeTitle(value) {
295
+ return normalizeIntentText(value);
296
+ }
297
+ function matchByTitle(entries, targetTitle) {
298
+ const normalized = normalizeTitle(targetTitle);
299
+ return entries.find(
300
+ (e) => normalizeTitle(e.definition?.title ?? e.goal?.title ?? "") === normalized
301
+ ) ?? entries.find(
302
+ (e) => normalizeTitle(e.definition?.title ?? e.goal?.title ?? "").includes(
303
+ normalized
304
+ )
305
+ ) ?? null;
306
+ }
307
+ async function resolveGoal(service, target, domain) {
308
+ if (!target) return null;
309
+ const goals = (await service.listGoals()).filter(
310
+ (e) => domain ? e.goal.domain === domain : true
311
+ );
312
+ return goals.find((e) => e.goal.id === target) ?? matchByTitle(goals, target);
313
+ }
314
+ async function resolveDefinition(service, target, domain) {
315
+ if (!target) return null;
316
+ const defs = (await service.listDefinitions()).filter(
317
+ (e) => domain ? e.definition.domain === domain : true
318
+ );
319
+ return defs.find((e) => e.definition.id === target) ?? matchByTitle(defs, target);
320
+ }
321
+ function tokenizeTitle(value) {
322
+ return normalizeTitle(value).split(" ").filter((token) => token.length >= 3);
323
+ }
324
+ async function resolveDefinitionFromIntent(service, target, intent, domain) {
325
+ const direct = await resolveDefinition(service, target, domain);
326
+ if (direct) {
327
+ return direct;
328
+ }
329
+ const defs = (await service.listDefinitions()).filter(
330
+ (entry) => domain ? entry.definition.domain === domain : true
331
+ );
332
+ const intentTokens = new Set(tokenizeTitle(intent));
333
+ let best = null;
334
+ let bestScore = 0;
335
+ let tied = false;
336
+ for (const entry of defs) {
337
+ const title = normalizeTitle(entry.definition.title);
338
+ if (title.length > 0 && normalizeTitle(intent).includes(title)) {
339
+ return entry;
340
+ }
341
+ const overlap = tokenizeTitle(entry.definition.title).filter(
342
+ (token) => intentTokens.has(token)
343
+ ).length;
344
+ if (overlap === 0) {
345
+ continue;
346
+ }
347
+ if (overlap > bestScore) {
348
+ best = entry;
349
+ bestScore = overlap;
350
+ tied = false;
351
+ continue;
352
+ }
353
+ if (overlap === bestScore) {
354
+ tied = true;
355
+ }
356
+ }
357
+ return bestScore > 0 && !tied ? best : null;
358
+ }
359
+ function formatOccurrenceDisambiguationLabel(occurrence) {
360
+ const hints = [];
361
+ if (typeof occurrence.windowName === "string" && occurrence.windowName.trim()) {
362
+ hints.push(occurrence.windowName.trim());
363
+ }
364
+ if (occurrence.dueAt) {
365
+ const dueAt = new Date(occurrence.dueAt);
366
+ if (!Number.isNaN(dueAt.getTime())) {
367
+ hints.push(
368
+ dueAt.toLocaleString(void 0, {
369
+ month: "short",
370
+ day: "numeric",
371
+ hour: "numeric",
372
+ minute: "2-digit"
373
+ })
374
+ );
375
+ }
376
+ }
377
+ return hints.length > 0 ? `${occurrence.title} (${hints.join(", ")})` : occurrence.title;
378
+ }
379
+ function narrowOccurrenceCandidates(matches) {
380
+ const actionableMatches = matches.filter(
381
+ (occurrence) => occurrence.state === "visible" || occurrence.state === "snoozed"
382
+ );
383
+ return actionableMatches.length > 0 ? actionableMatches : matches;
384
+ }
385
+ async function resolveOccurrence(service, target, domain) {
386
+ if (!target) return { match: null, ambiguousCandidates: [] };
387
+ const overview = await service.getOverview();
388
+ const all = [
389
+ ...overview.owner.occurrences,
390
+ ...overview.agentOps.occurrences
391
+ ].filter((o) => domain ? o.domain === domain : true);
392
+ const normalized = normalizeTitle(target);
393
+ const byId = all.find((o) => o.id === target);
394
+ if (byId) return { match: byId, ambiguousCandidates: [] };
395
+ const exactMatches = all.filter(
396
+ (o) => normalizeTitle(o.title) === normalized
397
+ );
398
+ if (exactMatches.length === 1) {
399
+ return { match: exactMatches.at(0) ?? null, ambiguousCandidates: [] };
400
+ }
401
+ if (exactMatches.length > 1) {
402
+ const narrowedMatches = narrowOccurrenceCandidates(exactMatches);
403
+ if (narrowedMatches.length === 1) {
404
+ return { match: narrowedMatches.at(0) ?? null, ambiguousCandidates: [] };
405
+ }
406
+ return {
407
+ match: null,
408
+ ambiguousCandidates: narrowedMatches.map(
409
+ formatOccurrenceDisambiguationLabel
410
+ )
411
+ };
412
+ }
413
+ const substringMatches = all.filter(
414
+ (o) => normalizeTitle(o.title).includes(normalized)
415
+ );
416
+ if (substringMatches.length === 1) {
417
+ return { match: substringMatches.at(0) ?? null, ambiguousCandidates: [] };
418
+ }
419
+ if (substringMatches.length > 1) {
420
+ const narrowedSubstringMatches = narrowOccurrenceCandidates(substringMatches);
421
+ if (narrowedSubstringMatches.length === 1) {
422
+ return {
423
+ match: narrowedSubstringMatches.at(0) ?? null,
424
+ ambiguousCandidates: []
425
+ };
426
+ }
427
+ const startsWithMatches = narrowedSubstringMatches.filter(
428
+ (o) => normalizeTitle(o.title).startsWith(normalized)
429
+ );
430
+ if (startsWithMatches.length === 1) {
431
+ return {
432
+ match: startsWithMatches.at(0) ?? null,
433
+ ambiguousCandidates: []
434
+ };
435
+ }
436
+ if (startsWithMatches.length > 1) {
437
+ return {
438
+ match: null,
439
+ ambiguousCandidates: startsWithMatches.map(
440
+ formatOccurrenceDisambiguationLabel
441
+ )
442
+ };
443
+ }
444
+ return {
445
+ match: null,
446
+ ambiguousCandidates: narrowedSubstringMatches.map(
447
+ formatOccurrenceDisambiguationLabel
448
+ )
449
+ };
450
+ }
451
+ const targetTokens = normalized.split(/\s+/).filter(Boolean);
452
+ if (targetTokens.length > 1) {
453
+ const tokenSetMatches = all.filter((occurrence) => {
454
+ const occurrenceTokens = new Set(
455
+ normalizeTitle(occurrence.title).split(/\s+/).filter(Boolean)
456
+ );
457
+ return targetTokens.every((token) => occurrenceTokens.has(token));
458
+ });
459
+ if (tokenSetMatches.length === 1) {
460
+ return { match: tokenSetMatches.at(0) ?? null, ambiguousCandidates: [] };
461
+ }
462
+ if (tokenSetMatches.length > 1) {
463
+ const narrowedTokenSetMatches = narrowOccurrenceCandidates(tokenSetMatches);
464
+ if (narrowedTokenSetMatches.length === 1) {
465
+ return {
466
+ match: narrowedTokenSetMatches.at(0) ?? null,
467
+ ambiguousCandidates: []
468
+ };
469
+ }
470
+ return {
471
+ match: null,
472
+ ambiguousCandidates: narrowedTokenSetMatches.map(
473
+ formatOccurrenceDisambiguationLabel
474
+ )
475
+ };
476
+ }
477
+ }
478
+ return { match: null, ambiguousCandidates: [] };
479
+ }
480
+ function deriveOccurrenceTargetFromIntent(intent, operation) {
481
+ const normalized = normalizeLifeInputText(intent);
482
+ if (!normalized) {
483
+ return null;
484
+ }
485
+ let candidate = normalized;
486
+ if (operation === "snooze") {
487
+ candidate = candidate.replace(
488
+ /^(?:please\s+)?(?:snooze|postpone|push\b.*\bback|remind me later about)\s+/i,
489
+ ""
490
+ ).replace(/\bfor\s+\d+\s*(?:minutes?|hours?)\b.*$/i, "").replace(/\b(?:until|til)\b.+$/i, "").trim();
491
+ } else if (operation === "skip") {
492
+ candidate = candidate.replace(/^(?:please\s+)?(?:skip|pass on)\s+/i, "").replace(/\b(?:today|tonight|for now)\b.*$/i, "").trim();
493
+ } else if (operation === "complete") {
494
+ candidate = candidate.replace(
495
+ /^(?:please\s+)?(?:mark\s+|i(?:'ve| have)?\s+|just\s+)?(?:done|completed|finished|did)\s+/i,
496
+ ""
497
+ ).replace(/\b(?:done|complete|completed|finished)\b.*$/i, "").trim();
498
+ }
499
+ return candidate.length > 0 ? candidate : null;
500
+ }
501
+ async function resolveOccurrenceWithIntentFallback(args) {
502
+ const direct = await resolveOccurrence(
503
+ args.service,
504
+ args.target,
505
+ args.domain
506
+ );
507
+ if (direct.match || direct.ambiguousCandidates.length > 0) {
508
+ return direct;
509
+ }
510
+ const fallbackTarget = deriveOccurrenceTargetFromIntent(
511
+ args.intent,
512
+ args.operation
513
+ );
514
+ if (!fallbackTarget || args.target && normalizeTitle(fallbackTarget) === normalizeTitle(args.target)) {
515
+ return direct;
516
+ }
517
+ return resolveOccurrence(args.service, fallbackTarget, args.domain);
518
+ }
519
+ function summarizeCadence(cadence) {
520
+ const cadenceWindows = Array.isArray(
521
+ cadence.windows
522
+ ) ? (cadence.windows ?? []).filter(
523
+ (windowName) => typeof windowName === "string" && windowName.trim().length > 0
524
+ ) : [];
525
+ switch (cadence.kind) {
526
+ case "once": {
527
+ const dueAt = new Date(cadence.dueAt);
528
+ if (Number.isNaN(dueAt.getTime())) {
529
+ return "once";
530
+ }
531
+ return `once on ${dueAt.toLocaleString(void 0, {
532
+ month: "short",
533
+ day: "numeric",
534
+ hour: "numeric",
535
+ minute: "2-digit",
536
+ timeZone: resolveDefaultTimeZone()
537
+ })}`;
538
+ }
539
+ case "daily":
540
+ return cadenceWindows.length > 0 ? `every day in ${cadenceWindows.join(", ")}` : "every day";
541
+ case "times_per_day":
542
+ return cadence.slots.map((slot) => slot.label.trim() || `${slot.minuteOfDay}`).filter(Boolean).join(" and ");
543
+ case "interval":
544
+ return cadenceWindows.length > 0 ? `every ${cadence.everyMinutes} minutes in ${cadenceWindows.join(", ")}` : `every ${cadence.everyMinutes} minutes`;
545
+ case "weekly":
546
+ return `weekly on ${cadence.weekdays.map(
547
+ (weekday) => [
548
+ "Sunday",
549
+ "Monday",
550
+ "Tuesday",
551
+ "Wednesday",
552
+ "Thursday",
553
+ "Friday",
554
+ "Saturday"
555
+ ][weekday] ?? String(weekday)
556
+ ).join(", ")}`;
557
+ }
558
+ }
559
+ function buildRuleBasedLifeReply(args) {
560
+ const context = args.context ?? {};
561
+ const updated = context.updated && typeof context.updated === "object" ? context.updated : null;
562
+ const created = context.created && typeof context.created === "object" ? context.created : null;
563
+ const title = (typeof updated?.title === "string" ? updated.title : null) ?? (typeof created?.title === "string" ? created.title : null) ?? (typeof context.title === "string" ? context.title : null) ?? null;
564
+ switch (args.scenario) {
565
+ case "updated_definition":
566
+ if (title) {
567
+ return `${title} is updated.`;
568
+ }
569
+ break;
570
+ case "deleted_definition":
571
+ if (title) {
572
+ return `${title} is off your list.`;
573
+ }
574
+ break;
575
+ case "deleted_goal":
576
+ if (title) {
577
+ return `${title} is off your goals list.`;
578
+ }
579
+ break;
580
+ case "completed_occurrence":
581
+ if (title) {
582
+ return `Marked ${title} done.`;
583
+ }
584
+ break;
585
+ case "skipped_occurrence":
586
+ if (title) {
587
+ return `Okay, skipping ${title} for now.`;
588
+ }
589
+ break;
590
+ case "snoozed_occurrence":
591
+ if (title) {
592
+ return `Okay, I'll bring ${title} back a bit later.`;
593
+ }
594
+ break;
595
+ default:
596
+ break;
597
+ }
598
+ return args.fallback;
599
+ }
600
+ async function renderLifeActionReply(args) {
601
+ const { runtime, message, state, intent, scenario, fallback, context } = args;
602
+ const naturalFallback = buildRuleBasedLifeReply({
603
+ scenario,
604
+ intent,
605
+ fallback,
606
+ context
607
+ });
608
+ return renderGroundedActionReply({
609
+ runtime,
610
+ message,
611
+ state,
612
+ intent,
613
+ domain: "lifeops",
614
+ scenario,
615
+ fallback: naturalFallback,
616
+ context,
617
+ preferCharacterVoice: true,
618
+ additionalRules: [
619
+ "Mirror the user's phrasing for time and date when possible.",
620
+ "Prefer phrases like tomorrow morning, every night, 7 am, or the user's own wording over robotic schedule language.",
621
+ "Never surface raw ISO timestamps unless the user used raw ISO timestamps.",
622
+ "If this is a preview, make clear it is not saved yet and the user can confirm or change it naturally.",
623
+ "If this is reply-only, do not pretend you saved or changed anything."
624
+ ]
625
+ });
626
+ }
627
+ function buildLifeClarificationFallback(args) {
628
+ const missing = new Set(args.missing);
629
+ if (args.operation === "create" && args.kind === "goal") {
630
+ return "What do you want the goal to be?";
631
+ }
632
+ if (missing.has("title") && missing.has("schedule")) {
633
+ return "What do you want the todo to be, and when should it happen?";
634
+ }
635
+ if (missing.has("title")) {
636
+ return "What do you want it to be?";
637
+ }
638
+ if (missing.has("schedule")) {
639
+ return "When should it happen?";
640
+ }
641
+ return "Tell me a bit more about what you want to set up.";
642
+ }
643
+ function buildLifeServiceErrorFallback(error, intent) {
644
+ const normalized = error.message.toLowerCase();
645
+ if (normalized.includes("utc 'z' suffix") || normalized.includes("local datetime without 'z'") || normalized.includes("time didn't parse") || normalized.includes("invalid dueat") || normalized.includes("cadence.dueat")) {
646
+ return `I couldn't pin down the reminder time from "${intent}". Tell me the time again in plain language, like "Friday at 8 pm Pacific."`;
647
+ }
648
+ if (normalized.includes("when windowpreset is not provided") || normalized.includes("startat is required")) {
649
+ return "I still need the time for that reminder. Tell me when it should happen.";
650
+ }
651
+ if (error.status === 429 || normalized.includes("rate limit")) {
652
+ return "LifeOps is rate-limited right now. Try again in a bit.";
653
+ }
654
+ return "I couldn't finish that LifeOps change yet. Tell me the task and timing again, and I'll try it a different way.";
655
+ }
656
+ const DEFAULT_WINDOW_SLOT_TIMES = {
657
+ morning: {
658
+ minuteOfDay: 8 * 60,
659
+ durationMinutes: 45,
660
+ label: "Morning"
661
+ },
662
+ afternoon: {
663
+ minuteOfDay: 13 * 60,
664
+ durationMinutes: 45,
665
+ label: "Afternoon"
666
+ },
667
+ evening: {
668
+ minuteOfDay: 18 * 60,
669
+ durationMinutes: 45,
670
+ label: "Evening"
671
+ },
672
+ night: {
673
+ minuteOfDay: 21 * 60,
674
+ durationMinutes: 45,
675
+ label: "Night"
676
+ }
677
+ };
678
+ function buildSlotsFromWindows(windows) {
679
+ return windows.map((window, index) => {
680
+ const preset = DEFAULT_WINDOW_SLOT_TIMES[window];
681
+ return {
682
+ key: windows.indexOf(window) === index ? window : `${window}-${index + 1}`,
683
+ label: preset.label,
684
+ minuteOfDay: preset.minuteOfDay,
685
+ durationMinutes: preset.durationMinutes
686
+ };
687
+ });
688
+ }
689
+ function buildDistributedDailySlots(count) {
690
+ const normalizedCount = Math.max(1, Math.min(6, count));
691
+ let minutes;
692
+ switch (normalizedCount) {
693
+ case 1:
694
+ minutes = [9 * 60];
695
+ break;
696
+ case 2:
697
+ minutes = [8 * 60, 21 * 60];
698
+ break;
699
+ case 3:
700
+ minutes = [8 * 60, 13 * 60, 20 * 60];
701
+ break;
702
+ case 4:
703
+ minutes = [8 * 60, 12 * 60, 16 * 60, 20 * 60];
704
+ break;
705
+ case 5:
706
+ minutes = [8 * 60, 11 * 60, 14 * 60, 17 * 60, 20 * 60];
707
+ break;
708
+ default:
709
+ minutes = [8 * 60, 10 * 60, 12 * 60, 14 * 60, 17 * 60, 20 * 60];
710
+ break;
711
+ }
712
+ return minutes.map((minuteOfDay, index) => ({
713
+ key: `slot-${index + 1}`,
714
+ label: `Time ${index + 1}`,
715
+ minuteOfDay,
716
+ durationMinutes: 45
717
+ }));
718
+ }
719
+ function inferWindowFromMinuteOfDay(minuteOfDay) {
720
+ if (minuteOfDay < 12 * 60) {
721
+ return "morning";
722
+ }
723
+ if (minuteOfDay < 17 * 60) {
724
+ return "afternoon";
725
+ }
726
+ if (minuteOfDay < 21 * 60) {
727
+ return "evening";
728
+ }
729
+ return "night";
730
+ }
731
+ function buildSingleDailySlot(minuteOfDay, durationMinutes = 45) {
732
+ return {
733
+ key: `time-${minuteOfDay}`,
734
+ label: formatMinuteOfDayLabel(minuteOfDay),
735
+ minuteOfDay,
736
+ durationMinutes
737
+ };
738
+ }
739
+ function buildCustomTimeWindowPolicy(minuteOfDay, timeZone) {
740
+ const basePolicy = resolveDefaultWindowPolicy(timeZone);
741
+ return {
742
+ timezone: basePolicy.timezone,
743
+ windows: [
744
+ ...basePolicy.windows,
745
+ {
746
+ name: "custom",
747
+ label: formatMinuteOfDayLabel(minuteOfDay),
748
+ startMinute: minuteOfDay,
749
+ endMinute: Math.min(minuteOfDay + 1, 24 * 60)
750
+ }
751
+ ]
752
+ };
753
+ }
754
+ function formatMinuteOfDayLabel(minuteOfDay) {
755
+ const hour24 = Math.floor(minuteOfDay / 60);
756
+ const minute = minuteOfDay % 60;
757
+ const meridiem = hour24 >= 12 ? "pm" : "am";
758
+ const hour12 = hour24 % 12 === 0 ? 12 : hour24 % 12;
759
+ return minute === 0 ? `${hour12}${meridiem}` : `${hour12}:${String(minute).padStart(2, "0")}${meridiem}`;
760
+ }
761
+ function parseClockToken(token) {
762
+ const normalized = token.trim().toLowerCase();
763
+ if (normalized === "noon") {
764
+ return 12 * 60;
765
+ }
766
+ if (normalized === "midnight") {
767
+ return 0;
768
+ }
769
+ const match = normalized.match(/^(\d{1,2})(?::(\d{2}))?\s*(am|pm)$/);
770
+ if (!match) {
771
+ return null;
772
+ }
773
+ const hour = Number(match[1]);
774
+ const minute = Number(match[2] ?? "0");
775
+ if (!Number.isFinite(hour) || !Number.isFinite(minute) || minute >= 60) {
776
+ return null;
777
+ }
778
+ if (hour < 1 || hour > 12) {
779
+ return null;
780
+ }
781
+ const meridiem = match[3];
782
+ const normalizedHour = meridiem === "am" ? hour % 12 : hour % 12 === 0 ? 12 : hour % 12 + 12;
783
+ return normalizedHour * 60 + minute;
784
+ }
785
+ function parseTimeOfDayToken(token) {
786
+ const normalized = normalizeLifeInputText(token).toLowerCase();
787
+ const hhmmMatch = normalized.match(/^(\d{1,2}):(\d{2})$/);
788
+ if (hhmmMatch) {
789
+ const hour = Number(hhmmMatch[1]);
790
+ const minute = Number(hhmmMatch[2]);
791
+ if (Number.isFinite(hour) && Number.isFinite(minute) && hour >= 0 && hour <= 23 && minute >= 0 && minute < 60) {
792
+ return hour * 60 + minute;
793
+ }
794
+ }
795
+ return parseClockToken(normalized);
796
+ }
797
+ function buildOneOffDueAtFromMinuteOfDay(args) {
798
+ const now = args.now ?? /* @__PURE__ */ new Date();
799
+ const timeZone = args.timeZone ?? resolveDefaultTimeZone();
800
+ const nowParts = getZonedDateParts(now, timeZone);
801
+ let localDate = {
802
+ year: nowParts.year,
803
+ month: nowParts.month,
804
+ day: nowParts.day
805
+ };
806
+ const buildCandidate = () => buildUtcDateFromLocalParts(timeZone, {
807
+ ...localDate,
808
+ hour: Math.floor(args.minuteOfDay / 60),
809
+ minute: args.minuteOfDay % 60,
810
+ second: 0
811
+ });
812
+ let candidate = buildCandidate();
813
+ if (candidate.getTime() <= now.getTime()) {
814
+ localDate = addDaysToLocalDate(localDate, 1);
815
+ candidate = buildCandidate();
816
+ }
817
+ return candidate.toISOString();
818
+ }
819
+ function mergeMetadataRecords(...records) {
820
+ const merged = Object.assign(
821
+ {},
822
+ ...records.filter(
823
+ (record) => record != null && Object.keys(record).length > 0
824
+ )
825
+ );
826
+ return Object.keys(merged).length > 0 ? merged : void 0;
827
+ }
828
+ function extractExplicitDailySlots(intent) {
829
+ const tokens = [
830
+ ...intent.matchAll(/\b(\d{1,2}(?::\d{2})?\s*(?:am|pm)|noon|midnight)\b/gi)
831
+ ].map((match) => match[1]).filter(
832
+ (token) => typeof token === "string" && token.length > 0
833
+ );
834
+ const seen = /* @__PURE__ */ new Set();
835
+ const slots = [];
836
+ for (const [index, token] of tokens.entries()) {
837
+ const minuteOfDay = parseClockToken(token);
838
+ if (minuteOfDay === null || seen.has(minuteOfDay)) {
839
+ continue;
840
+ }
841
+ seen.add(minuteOfDay);
842
+ slots.push({
843
+ key: `clock-${index + 1}`,
844
+ label: token.trim(),
845
+ minuteOfDay,
846
+ durationMinutes: 45
847
+ });
848
+ }
849
+ return slots.sort((left, right) => left.minuteOfDay - right.minuteOfDay);
850
+ }
851
+ function normalizeLifeWindows(value) {
852
+ const values = Array.isArray(value) ? value : value == null ? [] : [value];
853
+ const normalized = values.flatMap((entry) => {
854
+ if (typeof entry !== "string") {
855
+ return [];
856
+ }
857
+ const lower = normalizeLifeInputText(entry).toLowerCase();
858
+ if (lower === "morning") return ["morning"];
859
+ if (lower === "afternoon") return ["afternoon"];
860
+ if (lower === "evening") return ["evening"];
861
+ if (lower === "night") return ["night"];
862
+ return [];
863
+ });
864
+ return [...new Set(normalized)];
865
+ }
866
+ function normalizeCadenceDetail(value) {
867
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
868
+ return void 0;
869
+ }
870
+ const record = value;
871
+ const cadenceKind = typeof record.kind === "string" ? normalizeLifeInputText(record.kind).toLowerCase() : typeof record.type === "string" ? normalizeLifeInputText(record.type).toLowerCase() : "";
872
+ if (!cadenceKind) {
873
+ return void 0;
874
+ }
875
+ if (cadenceKind === "once" && typeof record.dueAt === "string") {
876
+ return {
877
+ kind: "once",
878
+ dueAt: record.dueAt
879
+ };
880
+ }
881
+ if (cadenceKind === "interval") {
882
+ const everyMinutes = typeof record.everyMinutes === "number" ? record.everyMinutes : typeof record.everyMinutes === "string" ? Number(record.everyMinutes) : typeof record.minutes === "number" ? record.minutes : typeof record.minutes === "string" ? Number(record.minutes) : NaN;
883
+ if (Number.isFinite(everyMinutes) && everyMinutes > 0) {
884
+ return {
885
+ kind: "interval",
886
+ everyMinutes,
887
+ windows: normalizeLifeWindows(record.windows)
888
+ };
889
+ }
890
+ return void 0;
891
+ }
892
+ if (cadenceKind === "weekly") {
893
+ const weekdays = Array.isArray(record.weekdays) ? record.weekdays.map(
894
+ (entry) => typeof entry === "number" ? entry : typeof entry === "string" ? Number(entry) : NaN
895
+ ).filter((entry) => Number.isFinite(entry)) : [];
896
+ if (weekdays.length > 0) {
897
+ return {
898
+ kind: "weekly",
899
+ weekdays,
900
+ windows: normalizeLifeWindows(record.windows)
901
+ };
902
+ }
903
+ return void 0;
904
+ }
905
+ const explicitTimes = Array.isArray(record.times) ? record.times.map(
906
+ (entry) => typeof entry === "string" ? parseTimeOfDayToken(entry) : null
907
+ ).filter((entry) => entry !== null) : [];
908
+ if (explicitTimes.length > 0) {
909
+ return {
910
+ kind: "times_per_day",
911
+ slots: explicitTimes.map((minuteOfDay, index) => ({
912
+ key: `time-${index + 1}`,
913
+ label: formatMinuteOfDayLabel(minuteOfDay),
914
+ minuteOfDay,
915
+ durationMinutes: 45
916
+ })),
917
+ visibilityLeadMinutes: 90,
918
+ visibilityLagMinutes: 180
919
+ };
920
+ }
921
+ if (cadenceKind === "times_per_day") {
922
+ if (Array.isArray(record.slots)) {
923
+ const slots = record.slots.map((entry, index) => {
924
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
925
+ return null;
926
+ }
927
+ const slot = entry;
928
+ const minuteOfDay = typeof slot.minuteOfDay === "number" ? slot.minuteOfDay : typeof slot.minuteOfDay === "string" ? Number(slot.minuteOfDay) : null;
929
+ if (minuteOfDay === null || !Number.isFinite(minuteOfDay)) {
930
+ return null;
931
+ }
932
+ return {
933
+ key: typeof slot.key === "string" && slot.key.trim().length > 0 ? slot.key : `slot-${index + 1}`,
934
+ label: typeof slot.label === "string" && slot.label.trim().length > 0 ? slot.label : formatMinuteOfDayLabel(minuteOfDay),
935
+ minuteOfDay,
936
+ durationMinutes: typeof slot.durationMinutes === "number" && Number.isFinite(slot.durationMinutes) && slot.durationMinutes > 0 ? slot.durationMinutes : 45
937
+ };
938
+ }).filter((entry) => entry !== null);
939
+ if (slots.length > 0) {
940
+ return {
941
+ kind: "times_per_day",
942
+ slots,
943
+ visibilityLeadMinutes: typeof record.visibilityLeadMinutes === "number" ? record.visibilityLeadMinutes : 90,
944
+ visibilityLagMinutes: typeof record.visibilityLagMinutes === "number" ? record.visibilityLagMinutes : 180
945
+ };
946
+ }
947
+ }
948
+ const count = typeof record.count === "number" ? record.count : typeof record.count === "string" ? Number(record.count) : NaN;
949
+ if (Number.isFinite(count) && count > 0) {
950
+ return {
951
+ kind: "times_per_day",
952
+ slots: buildDistributedDailySlots(count),
953
+ visibilityLeadMinutes: 90,
954
+ visibilityLagMinutes: 180
955
+ };
956
+ }
957
+ }
958
+ if (cadenceKind === "daily") {
959
+ const windows = normalizeLifeWindows(record.windows ?? record.window);
960
+ if (windows.length > 0) {
961
+ return {
962
+ kind: "daily",
963
+ windows
964
+ };
965
+ }
966
+ return {
967
+ kind: "daily",
968
+ windows: ["morning"]
969
+ };
970
+ }
971
+ return void 0;
972
+ }
973
+ function buildCadenceFromLlmParams(params, context) {
974
+ const kind = params.cadenceKind;
975
+ if (!kind) return null;
976
+ const effectiveTimeZone = context?.timeZone;
977
+ const timeOfDayMinute = typeof params.timeOfDay === "string" ? parseTimeOfDayToken(params.timeOfDay) : null;
978
+ const explicitSlots = typeof context?.intent === "string" ? extractExplicitDailySlots(context.intent) : [];
979
+ const slotDuration = typeof params.durationMinutes === "number" && params.durationMinutes > 0 ? params.durationMinutes : 45;
980
+ const windows = (params.windows ?? []).filter(
981
+ (w) => w === "morning" || w === "afternoon" || w === "evening" || w === "night"
982
+ );
983
+ const effectiveWindows = windows.length > 0 ? windows : timeOfDayMinute !== null ? [inferWindowFromMinuteOfDay(timeOfDayMinute)] : ["morning"];
984
+ if (kind === "once") {
985
+ if (timeOfDayMinute !== null) {
986
+ return {
987
+ cadence: {
988
+ kind: "once",
989
+ dueAt: buildOneOffDueAtFromMinuteOfDay({
990
+ minuteOfDay: timeOfDayMinute,
991
+ now: context?.now,
992
+ timeZone: effectiveTimeZone
993
+ })
994
+ }
995
+ };
996
+ }
997
+ return { cadence: { kind: "once", dueAt: (/* @__PURE__ */ new Date()).toISOString() } };
998
+ }
999
+ if (kind === "daily") {
1000
+ if (explicitSlots.length >= 2) {
1001
+ return {
1002
+ cadence: {
1003
+ kind: "times_per_day",
1004
+ slots: explicitSlots.map((slot) => ({
1005
+ ...slot,
1006
+ durationMinutes: slot.durationMinutes
1007
+ })),
1008
+ visibilityLeadMinutes: 90,
1009
+ visibilityLagMinutes: 180
1010
+ }
1011
+ };
1012
+ }
1013
+ if (timeOfDayMinute !== null) {
1014
+ return {
1015
+ cadence: {
1016
+ kind: "times_per_day",
1017
+ slots: [buildSingleDailySlot(timeOfDayMinute, slotDuration)],
1018
+ visibilityLeadMinutes: 90,
1019
+ visibilityLagMinutes: 180
1020
+ }
1021
+ };
1022
+ }
1023
+ if (effectiveWindows.length >= 2) {
1024
+ return {
1025
+ cadence: {
1026
+ kind: "times_per_day",
1027
+ slots: buildSlotsFromWindows(effectiveWindows),
1028
+ visibilityLeadMinutes: 90,
1029
+ visibilityLagMinutes: 180
1030
+ }
1031
+ };
1032
+ }
1033
+ return { cadence: { kind: "daily", windows: effectiveWindows } };
1034
+ }
1035
+ if (kind === "weekly") {
1036
+ const weekdays = params.weekdays;
1037
+ if (!weekdays || weekdays.length === 0) return null;
1038
+ if (timeOfDayMinute !== null) {
1039
+ return {
1040
+ cadence: { kind: "weekly", weekdays, windows: ["custom"] },
1041
+ windowPolicy: buildCustomTimeWindowPolicy(
1042
+ timeOfDayMinute,
1043
+ effectiveTimeZone ?? resolveDefaultTimeZone()
1044
+ )
1045
+ };
1046
+ }
1047
+ return { cadence: { kind: "weekly", weekdays, windows: effectiveWindows } };
1048
+ }
1049
+ if (kind === "interval") {
1050
+ const everyMinutes = params.everyMinutes;
1051
+ if (!everyMinutes || everyMinutes <= 0) return null;
1052
+ return {
1053
+ cadence: {
1054
+ kind: "interval",
1055
+ everyMinutes,
1056
+ windows: effectiveWindows,
1057
+ startMinuteOfDay: timeOfDayMinute ?? void 0,
1058
+ durationMinutes: typeof params.durationMinutes === "number" && params.durationMinutes > 0 ? params.durationMinutes : void 0
1059
+ }
1060
+ };
1061
+ }
1062
+ if (kind === "times_per_day") {
1063
+ if (explicitSlots.length >= 2) {
1064
+ return {
1065
+ cadence: {
1066
+ kind: "times_per_day",
1067
+ slots: explicitSlots.map((slot) => ({
1068
+ ...slot,
1069
+ durationMinutes: slot.durationMinutes
1070
+ })),
1071
+ visibilityLeadMinutes: 90,
1072
+ visibilityLagMinutes: 180
1073
+ }
1074
+ };
1075
+ }
1076
+ if (timeOfDayMinute !== null) {
1077
+ return {
1078
+ cadence: {
1079
+ kind: "times_per_day",
1080
+ slots: [buildSingleDailySlot(timeOfDayMinute, slotDuration)],
1081
+ visibilityLeadMinutes: 90,
1082
+ visibilityLagMinutes: 180
1083
+ }
1084
+ };
1085
+ }
1086
+ const count = params.timesPerDay;
1087
+ if (!count || count <= 0) return null;
1088
+ return {
1089
+ cadence: {
1090
+ kind: "times_per_day",
1091
+ slots: buildDistributedDailySlots(count).map((slot) => ({
1092
+ ...slot,
1093
+ durationMinutes: slotDuration
1094
+ })),
1095
+ visibilityLeadMinutes: 90,
1096
+ visibilityLagMinutes: 180
1097
+ }
1098
+ };
1099
+ }
1100
+ return null;
1101
+ }
1102
+ function buildCadenceFromUpdateFields(args) {
1103
+ const { currentCadence, currentWindowPolicy, timeZone, update } = args;
1104
+ const kind = update.cadenceKind ?? currentCadence.kind;
1105
+ const requestedWindows = normalizeLifeWindows(update.windows ?? []);
1106
+ const timeOfDayMinute = typeof update.timeOfDay === "string" ? parseTimeOfDayToken(update.timeOfDay) : null;
1107
+ if (kind === "interval") {
1108
+ const everyMinutes = update.everyMinutes ?? (currentCadence.kind === "interval" ? currentCadence.everyMinutes : null);
1109
+ if (!everyMinutes || everyMinutes <= 0) {
1110
+ return null;
1111
+ }
1112
+ const windows = requestedWindows.length > 0 ? requestedWindows : currentCadence.kind === "interval" && currentCadence.windows.length > 0 ? normalizeLifeWindows(currentCadence.windows) : timeOfDayMinute !== null ? [inferWindowFromMinuteOfDay(timeOfDayMinute)] : ["morning"];
1113
+ return {
1114
+ cadence: {
1115
+ kind: "interval",
1116
+ everyMinutes,
1117
+ windows,
1118
+ startMinuteOfDay: timeOfDayMinute ?? (currentCadence.kind === "interval" ? currentCadence.startMinuteOfDay : void 0),
1119
+ maxOccurrencesPerDay: currentCadence.kind === "interval" ? currentCadence.maxOccurrencesPerDay : void 0,
1120
+ durationMinutes: currentCadence.kind === "interval" ? currentCadence.durationMinutes : void 0,
1121
+ visibilityLeadMinutes: currentCadence.kind === "interval" ? currentCadence.visibilityLeadMinutes : void 0,
1122
+ visibilityLagMinutes: currentCadence.kind === "interval" ? currentCadence.visibilityLagMinutes : void 0
1123
+ }
1124
+ };
1125
+ }
1126
+ if (kind === "weekly") {
1127
+ const weekdays = update.weekdays ?? (currentCadence.kind === "weekly" ? currentCadence.weekdays : null);
1128
+ if (!weekdays || weekdays.length === 0) {
1129
+ return null;
1130
+ }
1131
+ if (timeOfDayMinute !== null) {
1132
+ return {
1133
+ cadence: {
1134
+ kind: "weekly",
1135
+ weekdays,
1136
+ windows: ["custom"],
1137
+ visibilityLeadMinutes: currentCadence.kind === "weekly" ? currentCadence.visibilityLeadMinutes : void 0,
1138
+ visibilityLagMinutes: currentCadence.kind === "weekly" ? currentCadence.visibilityLagMinutes : void 0
1139
+ },
1140
+ windowPolicy: buildCustomTimeWindowPolicy(timeOfDayMinute, timeZone)
1141
+ };
1142
+ }
1143
+ return {
1144
+ cadence: {
1145
+ kind: "weekly",
1146
+ weekdays,
1147
+ windows: requestedWindows.length > 0 ? requestedWindows : currentCadence.kind === "weekly" && currentCadence.windows.length > 0 ? currentCadence.windows : ["morning"],
1148
+ visibilityLeadMinutes: currentCadence.kind === "weekly" ? currentCadence.visibilityLeadMinutes : void 0,
1149
+ visibilityLagMinutes: currentCadence.kind === "weekly" ? currentCadence.visibilityLagMinutes : void 0
1150
+ },
1151
+ windowPolicy: currentWindowPolicy.windows.some(
1152
+ (window) => (requestedWindows.length > 0 ? requestedWindows : ["morning"]).includes(
1153
+ window.name
1154
+ )
1155
+ ) ? void 0 : resolveDefaultWindowPolicy(timeZone)
1156
+ };
1157
+ }
1158
+ if (kind === "daily") {
1159
+ if (timeOfDayMinute !== null) {
1160
+ return {
1161
+ cadence: {
1162
+ kind: "times_per_day",
1163
+ slots: [buildSingleDailySlot(timeOfDayMinute)],
1164
+ visibilityLeadMinutes: 90,
1165
+ visibilityLagMinutes: 180
1166
+ }
1167
+ };
1168
+ }
1169
+ return {
1170
+ cadence: {
1171
+ kind: "daily",
1172
+ windows: requestedWindows.length > 0 ? requestedWindows : currentCadence.kind === "daily" && currentCadence.windows.length > 0 ? currentCadence.windows : ["morning"],
1173
+ visibilityLeadMinutes: currentCadence.kind === "daily" ? currentCadence.visibilityLeadMinutes : void 0,
1174
+ visibilityLagMinutes: currentCadence.kind === "daily" ? currentCadence.visibilityLagMinutes : void 0
1175
+ }
1176
+ };
1177
+ }
1178
+ if (kind === "times_per_day") {
1179
+ if (timeOfDayMinute !== null) {
1180
+ return {
1181
+ cadence: {
1182
+ kind: "times_per_day",
1183
+ slots: [buildSingleDailySlot(timeOfDayMinute)],
1184
+ visibilityLeadMinutes: 90,
1185
+ visibilityLagMinutes: 180
1186
+ }
1187
+ };
1188
+ }
1189
+ if (requestedWindows.length > 0) {
1190
+ return {
1191
+ cadence: {
1192
+ kind: "times_per_day",
1193
+ slots: buildSlotsFromWindows(requestedWindows),
1194
+ visibilityLeadMinutes: 90,
1195
+ visibilityLagMinutes: 180
1196
+ }
1197
+ };
1198
+ }
1199
+ return currentCadence.kind === "times_per_day" ? { cadence: currentCadence } : null;
1200
+ }
1201
+ return currentCadence.kind === "once" ? { cadence: currentCadence } : null;
1202
+ }
1203
+ function hasDefinitionUpdateChanges(request) {
1204
+ return request.title != null || request.cadence != null || request.priority != null || request.description != null || request.windowPolicy != null || request.reminderPlan != null;
1205
+ }
1206
+ function buildDefaultReminderPlan(label) {
1207
+ return {
1208
+ steps: [{ channel: "in_app", offsetMinutes: 0, label }]
1209
+ };
1210
+ }
1211
+ function scoreDefinitionTitleQuality(value) {
1212
+ const normalized = normalizeTitle(value ?? "");
1213
+ if (!normalized) {
1214
+ return Number.NEGATIVE_INFINITY;
1215
+ }
1216
+ let score = normalized.split(/\s+/).filter(Boolean).length;
1217
+ if (/\b\d+\b/.test(normalized)) {
1218
+ score += 6;
1219
+ }
1220
+ if (/[+&]/.test(value ?? "") || /\band\b/.test(normalized)) {
1221
+ score += 4;
1222
+ }
1223
+ if (/^(?:do|work out|workout|habit|routine|task|todo|reminder|alarm)\b/.test(
1224
+ normalized
1225
+ )) {
1226
+ score -= 5;
1227
+ }
1228
+ if (GENERIC_DERIVED_TITLE_RE.test(normalized)) {
1229
+ score -= 6;
1230
+ }
1231
+ return score;
1232
+ }
1233
+ function shouldAdoptPlannerTitle(args) {
1234
+ const plannerTitle = args.plannerTitle?.trim();
1235
+ if (!plannerTitle) {
1236
+ return false;
1237
+ }
1238
+ const currentTitle = args.currentTitle?.trim();
1239
+ if (!currentTitle) {
1240
+ return true;
1241
+ }
1242
+ if (normalizeTitle(currentTitle) === normalizeTitle(plannerTitle)) {
1243
+ return false;
1244
+ }
1245
+ return scoreDefinitionTitleQuality(plannerTitle) > scoreDefinitionTitleQuality(currentTitle);
1246
+ }
1247
+ function shouldAdoptPlannerCadence(args) {
1248
+ const { currentCadence, plannerCadence } = args;
1249
+ if (!currentCadence) {
1250
+ return true;
1251
+ }
1252
+ if (currentCadence.kind === "times_per_day") {
1253
+ return plannerCadence.kind === "times_per_day" && plannerCadence.slots.length >= currentCadence.slots.length || plannerCadence.kind === "once" && currentCadence.slots.length === 1;
1254
+ }
1255
+ if (currentCadence.kind === "weekly") {
1256
+ return plannerCadence.kind === "weekly" && plannerCadence.weekdays.length >= currentCadence.weekdays.length && (currentCadence.windows.includes("custom") ? plannerCadence.windows.includes("custom") : plannerCadence.windows.length >= currentCadence.windows.length);
1257
+ }
1258
+ if (currentCadence.kind === "interval") {
1259
+ return plannerCadence.kind === "interval";
1260
+ }
1261
+ if (currentCadence.kind === "once") {
1262
+ return plannerCadence.kind === "once";
1263
+ }
1264
+ if (currentCadence.kind === "daily") {
1265
+ return plannerCadence.kind === "times_per_day" || plannerCadence.kind === "daily" && plannerCadence.windows.length >= currentCadence.windows.length;
1266
+ }
1267
+ return true;
1268
+ }
1269
+ function shouldRequireLifeCreateConfirmation(args) {
1270
+ if (args.messageSource === "autonomy") {
1271
+ return false;
1272
+ }
1273
+ if (args.requestKind && args.cadence?.kind === "once") {
1274
+ return false;
1275
+ }
1276
+ return !args.confirmed;
1277
+ }
1278
+ function formatGoalExperienceLoopSummary(experienceLoop) {
1279
+ if (!experienceLoop?.summary) {
1280
+ return null;
1281
+ }
1282
+ const similarGoalTitle = experienceLoop.similarGoals?.[0]?.title?.trim();
1283
+ const carryForwardTitle = experienceLoop.suggestedCarryForward?.[0]?.title?.trim();
1284
+ const parts = [experienceLoop.summary.trim()];
1285
+ if (similarGoalTitle) {
1286
+ parts.push(`Closest match: "${similarGoalTitle}".`);
1287
+ }
1288
+ if (carryForwardTitle) {
1289
+ parts.push(`Carry forward "${carryForwardTitle}" if it still fits.`);
1290
+ }
1291
+ return parts.join(" ");
1292
+ }
1293
+ function formatWeeklyGoalReview(args) {
1294
+ const parts = [
1295
+ `Weekly goal review: ${args.summary.totalGoals} active ${args.summary.totalGoals === 1 ? "goal" : "goals"}, ${args.summary.onTrackCount} on track, ${args.summary.atRiskCount} at risk, ${args.summary.needsAttentionCount} needing attention.`
1296
+ ];
1297
+ if (args.atRisk.length > 0) {
1298
+ parts.push(
1299
+ `Drifting: ${args.atRisk.slice(0, 3).map((review) => review.goal.title).join(", ")}.`
1300
+ );
1301
+ }
1302
+ if (args.needsAttention.length > 0) {
1303
+ parts.push(
1304
+ `Needs attention: ${args.needsAttention.slice(0, 3).map((review) => review.goal.title).join(", ")}.`
1305
+ );
1306
+ }
1307
+ if (args.onTrack.length > 0) {
1308
+ parts.push(
1309
+ `On track: ${args.onTrack.slice(0, 3).map((review) => review.goal.title).join(", ")}.`
1310
+ );
1311
+ }
1312
+ return parts.join(" ");
1313
+ }
1314
+ async function isForeignPageScope(runtime, message) {
1315
+ const room = await runtime.getRoom(message.roomId);
1316
+ const metadata = extractConversationMetadataFromRoom(room);
1317
+ return isPageScopedConversationMetadata(metadata);
1318
+ }
1319
+ const OWNER_OPERATION_TAGS = [
1320
+ "domain:reminders",
1321
+ "capability:read",
1322
+ "capability:write",
1323
+ "capability:update",
1324
+ "capability:delete",
1325
+ "capability:schedule",
1326
+ "surface:internal"
1327
+ ];
1328
+ const OWNER_OPERATION_CONTEXTS = [
1329
+ "general",
1330
+ "tasks",
1331
+ "todos",
1332
+ "calendar",
1333
+ "health"
1334
+ ];
1335
+ const OWNER_OPERATION_ROLE_GATE = { minRole: "OWNER" };
1336
+ const OWNER_OPERATION_SUPPRESS_POST_ACTION_CONTINUATION = true;
1337
+ const OWNER_OPERATION_VALIDATE = async (runtime, message) => {
1338
+ if (await isForeignPageScope(runtime, message)) {
1339
+ return false;
1340
+ }
1341
+ return true;
1342
+ };
1343
+ function ownerSurfaceActionNameFromOptions(options) {
1344
+ const raw = options?.parameters;
1345
+ return typeof raw?.ownerSurface === "string" && raw.ownerSurface.length > 0 ? raw.ownerSurface : "OWNER_TODOS";
1346
+ }
1347
+ async function runLifeOperationHandler(runtime, message, state, options, _callback) {
1348
+ const ownerSurfaceActionName = ownerSurfaceActionNameFromOptions(options);
1349
+ if (await isForeignPageScope(runtime, message)) {
1350
+ return {
1351
+ success: false,
1352
+ text: "",
1353
+ data: {
1354
+ actionName: ownerSurfaceActionName,
1355
+ reason: "foreign_page_scope"
1356
+ }
1357
+ };
1358
+ }
1359
+ const rawParams = options?.parameters;
1360
+ const params = rawParams ?? {};
1361
+ const currentText = normalizeLifeInputText(messageText(message));
1362
+ const details = params.details;
1363
+ const deferredDraft = latestDeferredLifeDraft(state);
1364
+ const turnsSinceDraft = deferredDraft != null ? (countTurnsSinceLatestDeferredLifeDraft(state) ?? 0) + 1 : void 0;
1365
+ const deferredDraftFollowupMode = deferredDraft ? await extractDeferredLifeDraftFollowupWithLlm({
1366
+ runtime,
1367
+ message,
1368
+ state,
1369
+ currentText,
1370
+ draft: deferredDraft
1371
+ }) : null;
1372
+ const draftExpiryReason = deferredLifeDraftExpiryReason({
1373
+ draft: deferredDraft,
1374
+ turnsSinceDraft
1375
+ });
1376
+ if (draftExpiryReason && deferredDraftFollowupMode === "confirm") {
1377
+ const fallback = "That LifeOps draft expired. Please restate it and I'll preview it again.";
1378
+ return {
1379
+ success: false,
1380
+ text: await renderLifeActionReply({
1381
+ runtime,
1382
+ message,
1383
+ state,
1384
+ intent: currentText,
1385
+ scenario: "reply_only",
1386
+ fallback,
1387
+ context: {
1388
+ reason: "draft_expired"
1389
+ }
1390
+ })
1391
+ };
1392
+ }
1393
+ if (deferredDraftFollowupMode === "cancel") {
1394
+ const fallback = "Okay, I won't save it yet.";
1395
+ return {
1396
+ success: true,
1397
+ text: await renderLifeActionReply({
1398
+ runtime,
1399
+ message,
1400
+ state,
1401
+ intent: currentText,
1402
+ scenario: "reply_only",
1403
+ fallback,
1404
+ context: {
1405
+ reason: "draft_cancelled",
1406
+ draft: deferredDraft ? {
1407
+ operation: deferredDraft.operation,
1408
+ title: deferredDraft.request.title
1409
+ } : null
1410
+ }
1411
+ }),
1412
+ data: {
1413
+ actionName: ownerSurfaceActionName,
1414
+ noop: true
1415
+ }
1416
+ };
1417
+ }
1418
+ const explicitAction = normalizeExplicitLifeAction(params.action);
1419
+ if (explicitAction === "phone") {
1420
+ return {
1421
+ success: false,
1422
+ text: "I need the phone number before I can save text reminders.",
1423
+ data: {
1424
+ actionName: ownerSurfaceActionName,
1425
+ missingField: "phone_number"
1426
+ }
1427
+ };
1428
+ }
1429
+ const explicitSubaction = typeof params.subaction === "string" && Object.hasOwn(SUBACTIONS, params.subaction) ? params.subaction : explicitAction?.operation;
1430
+ const deferredDraftReuseMode = resolveDeferredLifeDraftReuseMode({
1431
+ details,
1432
+ draft: deferredDraft,
1433
+ explicitOperation: explicitSubaction,
1434
+ llmMode: deferredDraftFollowupMode,
1435
+ turnsSinceDraft
1436
+ });
1437
+ const reuseDeferredDraft = deferredDraftReuseMode !== null;
1438
+ const intent = reuseDeferredDraft ? deferredDraftReuseMode === "confirm" ? normalizeLifeInputText(deferredDraft?.intent ?? "") : normalizeLifeInputText(params.intent?.trim() ?? currentText) : normalizeLifeInputText(params.intent?.trim() ?? currentText);
1439
+ if (!intent) {
1440
+ const fallback = "Tell me what you want me to do.";
1441
+ return {
1442
+ success: false,
1443
+ text: await renderLifeActionReply({
1444
+ runtime,
1445
+ message,
1446
+ state,
1447
+ intent: currentText,
1448
+ scenario: "reply_only",
1449
+ fallback,
1450
+ context: {
1451
+ reason: "missing_intent"
1452
+ }
1453
+ })
1454
+ };
1455
+ }
1456
+ const operationPlan = reuseDeferredDraft && deferredDraft ? {
1457
+ confidence: 1,
1458
+ missing: [],
1459
+ operation: "create",
1460
+ kind: deferredDraft.operation === "create_goal" ? "goal" : "definition",
1461
+ shouldAct: true
1462
+ } : explicitAction ? {
1463
+ confidence: 1,
1464
+ missing: [],
1465
+ operation: explicitAction.operation,
1466
+ kind: explicitAction.kind,
1467
+ shouldAct: true
1468
+ } : await routeLifeSubaction({
1469
+ runtime,
1470
+ message,
1471
+ state,
1472
+ options,
1473
+ intent,
1474
+ explicitSubaction
1475
+ });
1476
+ const explicitKind = params.kind === "definition" || params.kind === "goal" ? params.kind : void 0;
1477
+ const resolvedKind = operationPlan.kind ?? explicitKind;
1478
+ const forceCreateExecution = shouldForceLifeCreateExecution({
1479
+ intent,
1480
+ missing: operationPlan.missing,
1481
+ operation: operationPlan.operation,
1482
+ kind: resolvedKind,
1483
+ details,
1484
+ title: params.title
1485
+ });
1486
+ if (!operationPlan.shouldAct && !forceCreateExecution) {
1487
+ const fallback = buildLifeClarificationFallback({
1488
+ missing: operationPlan.missing,
1489
+ operation: operationPlan.operation,
1490
+ kind: resolvedKind
1491
+ });
1492
+ return {
1493
+ success: true,
1494
+ text: await renderLifeActionReply({
1495
+ runtime,
1496
+ message,
1497
+ state,
1498
+ intent,
1499
+ scenario: operationPlan.operation === "create" && resolvedKind === "goal" ? "clarify_create_goal" : "clarify_create_definition",
1500
+ fallback,
1501
+ context: {
1502
+ missing: operationPlan.missing,
1503
+ operation: operationPlan.operation
1504
+ }
1505
+ }),
1506
+ data: {
1507
+ actionName: ownerSurfaceActionName,
1508
+ noop: true,
1509
+ suggestedOperation: operationPlan.operation
1510
+ }
1511
+ };
1512
+ }
1513
+ const operation = forceCreateExecution ? "create" : isLifeOwnedOperation(operationPlan.operation) ? operationPlan.operation : null;
1514
+ const queryOperation = forceCreateExecution ? null : !isLifeOwnedOperation(operationPlan.operation) ? operationPlan.operation : null;
1515
+ const service = new LifeOpsService(runtime);
1516
+ if (queryOperation === "query_calendar_today") {
1517
+ return {
1518
+ success: false,
1519
+ text: "Calendar access is not available. Grant Apple Calendar access or connect Google Calendar to use calendar actions.",
1520
+ data: {
1521
+ actionName: ownerSurfaceActionName,
1522
+ operation: queryOperation
1523
+ }
1524
+ };
1525
+ }
1526
+ if (queryOperation === "query_calendar_next") {
1527
+ return {
1528
+ success: false,
1529
+ text: "Calendar access is not available. Grant Apple Calendar access or connect Google Calendar to use calendar actions.",
1530
+ data: {
1531
+ actionName: ownerSurfaceActionName,
1532
+ operation: queryOperation
1533
+ }
1534
+ };
1535
+ }
1536
+ if (queryOperation === "query_email") {
1537
+ return {
1538
+ success: false,
1539
+ text: "Gmail is not connected. Connect Google in LifeOps settings to use Gmail actions.",
1540
+ data: {
1541
+ actionName: ownerSurfaceActionName,
1542
+ operation: queryOperation
1543
+ }
1544
+ };
1545
+ }
1546
+ if (queryOperation === "query_overview") {
1547
+ const overview = await service.getOverview();
1548
+ const userQuery = messageText(message) || intent || "overview";
1549
+ const fallback = formatOverviewForQuery(overview, userQuery);
1550
+ return {
1551
+ success: true,
1552
+ text: await renderLifeActionReply({
1553
+ runtime,
1554
+ message,
1555
+ state,
1556
+ intent: userQuery,
1557
+ scenario: "overview",
1558
+ fallback,
1559
+ context: {
1560
+ summary: overview.owner.summary,
1561
+ occurrenceTitles: overview.owner.occurrences.slice(0, 6).map((occurrence) => occurrence.title),
1562
+ goalTitles: overview.owner.goals.slice(0, 3).map((goal) => goal.title)
1563
+ }
1564
+ }),
1565
+ data: toActionData(overview)
1566
+ };
1567
+ }
1568
+ const kind = resolvedKind ?? (operation === "create" || operation === "update" || operation === "delete" ? inferLifeKindFromIntent(intent) : "definition");
1569
+ const internalOp = operation ? toInternalLifeOp(operation, kind) : null;
1570
+ if (!operation) {
1571
+ const fallback = "Tell me what LifeOps action you want me to take.";
1572
+ return {
1573
+ success: true,
1574
+ text: await renderLifeActionReply({
1575
+ runtime,
1576
+ message,
1577
+ state,
1578
+ intent,
1579
+ scenario: "reply_only",
1580
+ fallback,
1581
+ context: {
1582
+ reason: "missing_operation_after_extraction"
1583
+ }
1584
+ }),
1585
+ data: {
1586
+ actionName: ownerSurfaceActionName,
1587
+ noop: true
1588
+ }
1589
+ };
1590
+ }
1591
+ const domain = detailString(details, "domain");
1592
+ const ownership = requestedOwnership(domain);
1593
+ const targetName = params.target ?? params.title;
1594
+ const createConfirmed = deferredDraftReuseMode === "confirm" || detailBoolean(details, "confirmed") === true;
1595
+ try {
1596
+ const createDefinition = async () => {
1597
+ const deferredDefinitionDraft = reuseDeferredDraft && deferredDraft?.operation === "create_definition" ? deferredDraft : null;
1598
+ const editingDeferredDefinitionDraft = deferredDraftReuseMode === "edit" && deferredDefinitionDraft?.operation === "create_definition";
1599
+ const explicitCadenceDetail = normalizeCadenceDetail(
1600
+ detailObject(details, "cadence")
1601
+ );
1602
+ const hasCompleteNativeDefinitionCreatePlan = Boolean(
1603
+ params.title && explicitCadenceDetail && detailString(details, "kind")
1604
+ );
1605
+ const fallbackTitle = deferredDefinitionDraft?.request.title ?? null;
1606
+ let title = editingDeferredDefinitionDraft ? params.title ?? fallbackTitle : fallbackTitle ?? params.title ?? null;
1607
+ const fallbackCadence = deferredDefinitionDraft?.request.cadence;
1608
+ let cadence = editingDeferredDefinitionDraft ? explicitCadenceDetail ?? fallbackCadence ?? void 0 : fallbackCadence ?? explicitCadenceDetail ?? void 0;
1609
+ let windowPolicy = editingDeferredDefinitionDraft ? (
1610
+ // detailObject returns Record<string,unknown>; cast to the policy
1611
+ // type at this validated boundary.
1612
+ detailObject(details, "windowPolicy") ?? deferredDefinitionDraft.request.windowPolicy
1613
+ ) : deferredDefinitionDraft?.request.windowPolicy ?? detailObject(details, "windowPolicy");
1614
+ const explicitPriority = detailNumber(details, "priority");
1615
+ const explicitDescription = detailString(details, "description");
1616
+ const explicitMetadata = detailObject(details, "metadata");
1617
+ const hadExplicitCadence = Boolean(
1618
+ (editingDeferredDefinitionDraft ? explicitCadenceDetail ?? deferredDefinitionDraft.request.cadence : deferredDefinitionDraft?.request.cadence) ?? explicitCadenceDetail
1619
+ );
1620
+ const hadExplicitTitle = Boolean(
1621
+ (editingDeferredDefinitionDraft ? params.title : deferredDefinitionDraft?.request.title) ?? params.title
1622
+ );
1623
+ let llmPlan = null;
1624
+ let llmDescription;
1625
+ let llmPriority;
1626
+ let llmRequestKind = null;
1627
+ if ((!deferredDefinitionDraft || editingDeferredDefinitionDraft) && !hasCompleteNativeDefinitionCreatePlan) {
1628
+ llmPlan = await extractTaskCreatePlanWithLlm({
1629
+ runtime,
1630
+ intent,
1631
+ state: state ?? void 0,
1632
+ message
1633
+ });
1634
+ const shouldHonorPlannerResponse = llmPlan.mode === "respond" && Boolean(llmPlan.response) && !editingDeferredDefinitionDraft && !params.title && !explicitCadenceDetail && !detailString(details, "description") && !detailString(details, "goalId") && !detailString(details, "goalTitle") && !detailString(details, "kind");
1635
+ if (shouldHonorPlannerResponse && llmPlan.response) {
1636
+ return {
1637
+ success: true,
1638
+ text: llmPlan.response
1639
+ };
1640
+ }
1641
+ if (llmPlan) {
1642
+ llmRequestKind = llmPlan.requestKind;
1643
+ if (!hadExplicitTitle && shouldAdoptPlannerTitle({
1644
+ currentTitle: title,
1645
+ plannerTitle: llmPlan.title
1646
+ })) {
1647
+ title = llmPlan.title;
1648
+ }
1649
+ if ((editingDeferredDefinitionDraft || !hadExplicitCadence) && llmPlan.cadenceKind) {
1650
+ const llmCadenceTimeZone = normalizeLifeTimeZoneToken(
1651
+ detailString(details, "timeZone") ?? llmPlan.timeZone ?? deferredDefinitionDraft?.request.timezone ?? windowPolicy?.timezone
1652
+ );
1653
+ const llmCadence = buildCadenceFromLlmParams(llmPlan, {
1654
+ intent,
1655
+ timeZone: llmCadenceTimeZone ?? void 0
1656
+ });
1657
+ if (llmCadence && shouldAdoptPlannerCadence({
1658
+ currentCadence: cadence,
1659
+ plannerCadence: llmCadence.cadence
1660
+ })) {
1661
+ cadence = llmCadence.cadence;
1662
+ windowPolicy = llmCadence.windowPolicy ?? windowPolicy;
1663
+ }
1664
+ }
1665
+ if (!explicitDescription && llmPlan.description) {
1666
+ llmDescription = llmPlan.description;
1667
+ }
1668
+ if (explicitPriority === void 0 && llmPlan.priority) {
1669
+ llmPriority = llmPlan.priority;
1670
+ }
1671
+ }
1672
+ }
1673
+ const resolvedTimeZone = normalizeLifeTimeZoneToken(
1674
+ detailString(details, "timeZone") ?? llmPlan?.timeZone ?? deferredDefinitionDraft?.request.timezone ?? windowPolicy?.timezone
1675
+ );
1676
+ const timedRequestKind = llmRequestKind;
1677
+ const nativeAppleMetadata = timedRequestKind && cadence?.kind === "once" ? buildNativeAppleReminderMetadata({
1678
+ kind: timedRequestKind,
1679
+ source: "llm"
1680
+ }) : void 0;
1681
+ const definitionMetadata = editingDeferredDefinitionDraft ? mergeMetadataRecords(
1682
+ deferredDefinitionDraft.request.metadata,
1683
+ mergeMetadataRecords(explicitMetadata, nativeAppleMetadata)
1684
+ ) : deferredDefinitionDraft?.request.metadata ?? mergeMetadataRecords(explicitMetadata, nativeAppleMetadata);
1685
+ if (!title) {
1686
+ const fallback2 = "What should I call it?";
1687
+ return {
1688
+ success: false,
1689
+ text: await renderLifeActionReply({
1690
+ runtime,
1691
+ message,
1692
+ state,
1693
+ intent,
1694
+ scenario: "clarify_create_definition",
1695
+ fallback: fallback2,
1696
+ context: {
1697
+ missing: ["title"],
1698
+ operation: "create_definition"
1699
+ }
1700
+ }),
1701
+ // Asking the owner to fill in a missing field — selection +
1702
+ // execution were both correct, terminal state is "needs human
1703
+ // input". Flag so the native planner chain breaks and the spy
1704
+ // scores this as completed.
1705
+ values: {
1706
+ success: false,
1707
+ error: "MISSING_DEFINITION_FIELD",
1708
+ missingField: "title",
1709
+ requiresConfirmation: true
1710
+ },
1711
+ data: {
1712
+ actionName: ownerSurfaceActionName,
1713
+ missingField: "title",
1714
+ requiresConfirmation: true
1715
+ }
1716
+ };
1717
+ }
1718
+ if (!cadence) {
1719
+ const fallback2 = "When should it happen?";
1720
+ return {
1721
+ success: false,
1722
+ text: await renderLifeActionReply({
1723
+ runtime,
1724
+ message,
1725
+ state,
1726
+ intent,
1727
+ scenario: "clarify_create_definition",
1728
+ fallback: fallback2,
1729
+ context: {
1730
+ missing: ["schedule"],
1731
+ operation: "create_definition"
1732
+ }
1733
+ }),
1734
+ values: {
1735
+ success: false,
1736
+ error: "MISSING_DEFINITION_FIELD",
1737
+ missingField: "schedule",
1738
+ requiresConfirmation: true
1739
+ },
1740
+ data: {
1741
+ actionName: ownerSurfaceActionName,
1742
+ missingField: "schedule",
1743
+ requiresConfirmation: true
1744
+ }
1745
+ };
1746
+ }
1747
+ const kind2 = (editingDeferredDefinitionDraft ? detailString(details, "kind") : deferredDefinitionDraft?.request.kind) ?? detailString(details, "kind") ?? "habit";
1748
+ const definitionDraft = {
1749
+ intent,
1750
+ operation: "create_definition",
1751
+ createdAt: editingDeferredDefinitionDraft ? Date.now() : deferredDefinitionDraft?.createdAt ?? Date.now(),
1752
+ request: {
1753
+ cadence,
1754
+ description: explicitDescription ?? llmDescription ?? (editingDeferredDefinitionDraft ? deferredDefinitionDraft.request.description : void 0),
1755
+ goalRef: detailString(details, "goalId") ?? detailString(details, "goalTitle") ?? deferredDefinitionDraft?.request.goalRef ?? void 0,
1756
+ kind: kind2,
1757
+ priority: explicitPriority ?? llmPriority ?? deferredDefinitionDraft?.request.priority,
1758
+ progressionRule: detailObject(
1759
+ details,
1760
+ "progressionRule"
1761
+ ) ?? deferredDefinitionDraft?.request.progressionRule,
1762
+ reminderPlan: detailObject(details, "reminderPlan") ?? deferredDefinitionDraft?.request.reminderPlan ?? buildDefaultReminderPlan(`${title} reminder`),
1763
+ timezone: normalizeLifeTimeZoneToken(llmPlan?.timeZone) ?? normalizeLifeTimeZoneToken(
1764
+ resolvedTimeZone ?? deferredDefinitionDraft?.request.timezone
1765
+ ) ?? resolvedTimeZone ?? deferredDefinitionDraft?.request.timezone,
1766
+ title,
1767
+ metadata: definitionMetadata,
1768
+ windowPolicy,
1769
+ // detailObject returns Record<string,unknown>; cast at validated boundary.
1770
+ websiteAccess: detailObject(details, "websiteAccess") ?? deferredDefinitionDraft?.request.websiteAccess
1771
+ }
1772
+ };
1773
+ if (shouldRequireLifeCreateConfirmation({
1774
+ confirmed: createConfirmed,
1775
+ messageSource: typeof message.content.source === "string" ? message.content.source : void 0,
1776
+ requestKind: timedRequestKind,
1777
+ cadence: definitionDraft.request.cadence
1778
+ })) {
1779
+ const fallback2 = `I can save this as a ${definitionDraft.request.kind} named "${definitionDraft.request.title}" that happens ${summarizeCadence(definitionDraft.request.cadence)}. Confirm and I'll save it, or tell me what to change.`;
1780
+ return {
1781
+ success: true,
1782
+ text: await renderLifeActionReply({
1783
+ runtime,
1784
+ message,
1785
+ state,
1786
+ intent,
1787
+ scenario: "preview_definition",
1788
+ fallback: fallback2,
1789
+ context: {
1790
+ draft: definitionDraft.request,
1791
+ requestKind: timedRequestKind
1792
+ }
1793
+ }),
1794
+ data: {
1795
+ actionName: ownerSurfaceActionName,
1796
+ deferred: true,
1797
+ lifeDraft: definitionDraft,
1798
+ preview: {
1799
+ cadence: definitionDraft.request.cadence,
1800
+ kind: definitionDraft.request.kind,
1801
+ title: definitionDraft.request.title
1802
+ }
1803
+ }
1804
+ };
1805
+ }
1806
+ const resolvedGoal = definitionDraft.request.goalRef ? await resolveGoal(service, definitionDraft.request.goalRef, domain) : null;
1807
+ const created = await service.createDefinition({
1808
+ ownership,
1809
+ kind: definitionDraft.request.kind,
1810
+ title: definitionDraft.request.title,
1811
+ description: definitionDraft.request.description,
1812
+ originalIntent: definitionDraft.intent || definitionDraft.request.title,
1813
+ cadence: definitionDraft.request.cadence,
1814
+ timezone: normalizeLifeTimeZoneToken(definitionDraft.request.timezone) ?? definitionDraft.request.timezone,
1815
+ priority: definitionDraft.request.priority,
1816
+ windowPolicy: definitionDraft.request.windowPolicy,
1817
+ progressionRule: definitionDraft.request.progressionRule,
1818
+ reminderPlan: definitionDraft.request.reminderPlan,
1819
+ metadata: definitionDraft.request.metadata,
1820
+ websiteAccess: definitionDraft.request.websiteAccess,
1821
+ goalId: resolvedGoal?.goal.id ?? null,
1822
+ source: "chat"
1823
+ });
1824
+ const fallback = `Saved "${created.definition.title}" as ${summarizeCadence(created.definition.cadence)}.`;
1825
+ return {
1826
+ success: true,
1827
+ text: await renderLifeActionReply({
1828
+ runtime,
1829
+ message,
1830
+ state,
1831
+ intent,
1832
+ scenario: "saved_definition",
1833
+ fallback,
1834
+ context: {
1835
+ created: {
1836
+ title: created.definition.title,
1837
+ cadence: created.definition.cadence
1838
+ },
1839
+ requestKind: timedRequestKind
1840
+ }
1841
+ }),
1842
+ data: toActionData(created)
1843
+ };
1844
+ };
1845
+ if (internalOp === "create_definition") {
1846
+ return await createDefinition();
1847
+ }
1848
+ if (internalOp === "create_goal") {
1849
+ const deferredGoalDraft = reuseDeferredDraft && deferredDraft?.operation === "create_goal" ? deferredDraft : null;
1850
+ const editingDeferredGoalDraft = deferredDraftReuseMode === "edit" && deferredGoalDraft?.operation === "create_goal";
1851
+ const explicitDescription = detailString(details, "description");
1852
+ const explicitCadence = normalizeCadenceDetail(
1853
+ detailObject(details, "cadence")
1854
+ );
1855
+ const explicitSuccessCriteria = detailObject(
1856
+ details,
1857
+ "successCriteria"
1858
+ );
1859
+ const explicitSupportStrategy = detailObject(
1860
+ details,
1861
+ "supportStrategy"
1862
+ );
1863
+ const explicitMetadata = detailObject(details, "metadata");
1864
+ let title = editingDeferredGoalDraft ? params.title ?? deferredGoalDraft.request.title : deferredGoalDraft?.request.title ?? params.title ?? null;
1865
+ let description = editingDeferredGoalDraft ? explicitDescription ?? deferredGoalDraft.request.description : deferredGoalDraft?.request.description ?? explicitDescription;
1866
+ let cadence = editingDeferredGoalDraft ? explicitCadence ?? deferredGoalDraft.request.cadence : deferredGoalDraft?.request.cadence ?? explicitCadence;
1867
+ let successCriteria = editingDeferredGoalDraft ? explicitSuccessCriteria ?? deferredGoalDraft.request.successCriteria : deferredGoalDraft?.request.successCriteria ?? explicitSuccessCriteria;
1868
+ let supportStrategy = editingDeferredGoalDraft ? explicitSupportStrategy ?? deferredGoalDraft.request.supportStrategy : deferredGoalDraft?.request.supportStrategy ?? explicitSupportStrategy;
1869
+ let goalMetadata = editingDeferredGoalDraft ? explicitMetadata ?? deferredGoalDraft.request.metadata : deferredGoalDraft?.request.metadata ?? explicitMetadata;
1870
+ let evaluationSummary = null;
1871
+ const hasExplicitGroundedGoal = Boolean(title) && (createConfirmed || Boolean(successCriteria) && Boolean(supportStrategy));
1872
+ if ((!deferredGoalDraft || editingDeferredGoalDraft) && !hasExplicitGroundedGoal) {
1873
+ const llmPlan = await extractGoalCreatePlanWithLlm({
1874
+ runtime,
1875
+ intent,
1876
+ state: state ?? void 0,
1877
+ message
1878
+ });
1879
+ if (!title && llmPlan.title) {
1880
+ title = llmPlan.title;
1881
+ }
1882
+ if (!description && llmPlan.description) {
1883
+ description = llmPlan.description;
1884
+ }
1885
+ if (!cadence && llmPlan.cadence) {
1886
+ cadence = llmPlan.cadence;
1887
+ }
1888
+ if (!successCriteria && llmPlan.successCriteria) {
1889
+ successCriteria = llmPlan.successCriteria;
1890
+ }
1891
+ if (!supportStrategy && llmPlan.supportStrategy) {
1892
+ supportStrategy = llmPlan.supportStrategy;
1893
+ }
1894
+ evaluationSummary = llmPlan.evaluationSummary;
1895
+ if (llmPlan.groundingState === "grounded" && llmPlan.successCriteria && title) {
1896
+ goalMetadata = mergeGoalMetadataWithGrounding({
1897
+ metadata: {
1898
+ ...goalMetadata,
1899
+ source: "chat",
1900
+ originalIntent: intent
1901
+ },
1902
+ nowIso: (/* @__PURE__ */ new Date()).toISOString(),
1903
+ plan: llmPlan
1904
+ });
1905
+ }
1906
+ if (llmPlan.groundingState !== "grounded" || !title || !successCriteria || !supportStrategy) {
1907
+ return {
1908
+ success: true,
1909
+ text: llmPlan.response ?? "What would count as success for that goal, and over what time window?",
1910
+ values: {
1911
+ success: true,
1912
+ error: "NOOP_GOAL_UNGROUNDED",
1913
+ noop: true,
1914
+ suggestedOperation: "create_goal"
1915
+ },
1916
+ data: {
1917
+ actionName: ownerSurfaceActionName,
1918
+ noop: true,
1919
+ error: "NOOP_GOAL_UNGROUNDED",
1920
+ suggestedOperation: "create_goal"
1921
+ }
1922
+ };
1923
+ }
1924
+ }
1925
+ if (!title)
1926
+ return {
1927
+ success: false,
1928
+ text: await renderLifeActionReply({
1929
+ runtime,
1930
+ message,
1931
+ state,
1932
+ intent,
1933
+ scenario: "clarify_create_goal",
1934
+ fallback: "What are you trying to achieve?",
1935
+ context: {
1936
+ missing: ["title"],
1937
+ operation: "create_goal"
1938
+ }
1939
+ })
1940
+ };
1941
+ const goalDraft = deferredGoalDraft ?? {
1942
+ intent,
1943
+ operation: "create_goal",
1944
+ createdAt: Date.now(),
1945
+ request: {
1946
+ cadence,
1947
+ description,
1948
+ metadata: goalMetadata,
1949
+ successCriteria,
1950
+ supportStrategy,
1951
+ title
1952
+ }
1953
+ };
1954
+ const experienceLoop = await service.buildGoalExperienceLoop({
1955
+ title: goalDraft.request.title,
1956
+ description: goalDraft.request.description,
1957
+ successCriteria: goalDraft.request.successCriteria ?? null
1958
+ });
1959
+ if (shouldRequireLifeCreateConfirmation({
1960
+ confirmed: createConfirmed,
1961
+ messageSource: typeof message.content.source === "string" ? message.content.source : void 0
1962
+ })) {
1963
+ const fallbackParts = [
1964
+ evaluationSummary ? `I can save "${goalDraft.request.title}" as a goal. Success looks like this: ${evaluationSummary} Confirm and I'll save it, or tell me what to change.` : `I can save this goal as "${goalDraft.request.title}". Confirm and I'll save it, or tell me what to change.`
1965
+ ];
1966
+ const experienceSummary2 = formatGoalExperienceLoopSummary(experienceLoop);
1967
+ if (experienceSummary2) {
1968
+ fallbackParts.push(experienceSummary2);
1969
+ }
1970
+ return {
1971
+ success: true,
1972
+ text: await renderLifeActionReply({
1973
+ runtime,
1974
+ message,
1975
+ state,
1976
+ intent,
1977
+ scenario: "preview_goal",
1978
+ fallback: fallbackParts.join(" "),
1979
+ context: {
1980
+ draft: goalDraft.request,
1981
+ groundingSummary: evaluationSummary,
1982
+ experienceLoop
1983
+ }
1984
+ }),
1985
+ data: {
1986
+ actionName: ownerSurfaceActionName,
1987
+ deferred: true,
1988
+ lifeDraft: goalDraft,
1989
+ experienceLoop,
1990
+ preview: {
1991
+ title: goalDraft.request.title
1992
+ }
1993
+ }
1994
+ };
1995
+ }
1996
+ const created = await service.createGoal({
1997
+ ownership,
1998
+ title: goalDraft.request.title,
1999
+ description: goalDraft.request.description,
2000
+ cadence: goalDraft.request.cadence,
2001
+ supportStrategy: goalDraft.request.supportStrategy,
2002
+ successCriteria: goalDraft.request.successCriteria,
2003
+ metadata: {
2004
+ ...goalDraft.request.metadata,
2005
+ source: "chat",
2006
+ originalIntent: goalDraft.intent || goalDraft.request.title
2007
+ }
2008
+ });
2009
+ const createdExperienceLoop = await service.buildGoalExperienceLoop({
2010
+ goalId: created.goal.id,
2011
+ title: created.goal.title,
2012
+ description: created.goal.description,
2013
+ successCriteria: created.goal.successCriteria ?? null
2014
+ });
2015
+ const experienceSummary = formatGoalExperienceLoopSummary(
2016
+ createdExperienceLoop
2017
+ );
2018
+ const fallback = experienceSummary ? `Saved goal "${created.goal.title}". ${experienceSummary}` : `Saved goal "${created.goal.title}".`;
2019
+ return {
2020
+ success: true,
2021
+ text: await renderLifeActionReply({
2022
+ runtime,
2023
+ message,
2024
+ state,
2025
+ intent,
2026
+ scenario: "saved_goal",
2027
+ fallback,
2028
+ context: {
2029
+ created: {
2030
+ title: created.goal.title,
2031
+ cadence: created.goal.cadence
2032
+ },
2033
+ experienceLoop: createdExperienceLoop
2034
+ }
2035
+ }),
2036
+ data: toActionData({
2037
+ ...created,
2038
+ experienceLoop: createdExperienceLoop
2039
+ })
2040
+ };
2041
+ }
2042
+ if (internalOp === "update_definition") {
2043
+ const target = await resolveDefinition(service, targetName, domain);
2044
+ if (!target)
2045
+ return {
2046
+ success: false,
2047
+ text: "I could not find that item to update."
2048
+ };
2049
+ const request = {
2050
+ ownership,
2051
+ title: params.title !== target.definition.title ? params.title : void 0,
2052
+ description: detailString(details, "description"),
2053
+ cadence: normalizeCadenceDetail(detailObject(details, "cadence")),
2054
+ priority: detailNumber(details, "priority"),
2055
+ // detailObject returns Record<string,unknown>; cast at validated boundary.
2056
+ windowPolicy: detailObject(
2057
+ details,
2058
+ "windowPolicy"
2059
+ ),
2060
+ reminderPlan: detailObject(
2061
+ details,
2062
+ "reminderPlan"
2063
+ )
2064
+ };
2065
+ const hasExplicitChanges = hasDefinitionUpdateChanges(request);
2066
+ if (!hasExplicitChanges && intent) {
2067
+ const llmFields = await extractUpdateFieldsWithLlm({
2068
+ runtime,
2069
+ intent,
2070
+ currentTitle: target.definition.title,
2071
+ currentCadenceKind: target.definition.cadence.kind,
2072
+ currentWindows: target.definition.windowPolicy.windows.map(
2073
+ (w) => w.name
2074
+ )
2075
+ });
2076
+ if (llmFields) {
2077
+ if (llmFields.title) request.title = llmFields.title;
2078
+ if (llmFields.priority) request.priority = llmFields.priority;
2079
+ if (llmFields.description)
2080
+ request.description = llmFields.description;
2081
+ if (llmFields.cadenceKind || llmFields.windows || llmFields.weekdays || llmFields.everyMinutes || llmFields.timeOfDay) {
2082
+ const built = buildCadenceFromUpdateFields({
2083
+ currentCadence: target.definition.cadence,
2084
+ currentWindowPolicy: target.definition.windowPolicy,
2085
+ timeZone: target.definition.timezone,
2086
+ update: llmFields
2087
+ });
2088
+ if (built) {
2089
+ request.cadence = built.cadence;
2090
+ request.windowPolicy = built.windowPolicy;
2091
+ }
2092
+ }
2093
+ }
2094
+ }
2095
+ if (!hasDefinitionUpdateChanges(request)) {
2096
+ return {
2097
+ success: false,
2098
+ text: `Tell me what to change about "${target.definition.title}" and I'll update it.`
2099
+ };
2100
+ }
2101
+ const updated = await service.updateDefinition(
2102
+ target.definition.id,
2103
+ request
2104
+ );
2105
+ const fallback = `Updated "${updated.definition.title}".`;
2106
+ return {
2107
+ success: true,
2108
+ text: await renderLifeActionReply({
2109
+ runtime,
2110
+ message,
2111
+ state,
2112
+ intent,
2113
+ scenario: "updated_definition",
2114
+ fallback,
2115
+ context: {
2116
+ previousTitle: target.definition.title,
2117
+ updated: {
2118
+ title: updated.definition.title
2119
+ }
2120
+ }
2121
+ }),
2122
+ data: toActionData(updated)
2123
+ };
2124
+ }
2125
+ if (internalOp === "update_goal") {
2126
+ const target = await resolveGoal(service, targetName, domain);
2127
+ if (!target)
2128
+ return {
2129
+ success: false,
2130
+ text: "I could not find that goal to update."
2131
+ };
2132
+ const request = {
2133
+ ownership,
2134
+ title: params.title !== target.goal.title ? params.title : void 0,
2135
+ description: detailString(details, "description"),
2136
+ cadence: normalizeCadenceDetail(
2137
+ detailObject(details, "cadence")
2138
+ ),
2139
+ supportStrategy: detailObject(details, "supportStrategy"),
2140
+ successCriteria: detailObject(details, "successCriteria")
2141
+ };
2142
+ const hasExplicitGoalChanges = request.title !== void 0 || request.description !== void 0 || request.cadence !== void 0 || request.supportStrategy !== void 0 || request.successCriteria !== void 0;
2143
+ if (!hasExplicitGoalChanges) {
2144
+ const llmPlan = await extractGoalUpdatePlanWithLlm({
2145
+ runtime,
2146
+ currentGoal: target.goal,
2147
+ intent,
2148
+ state: state ?? void 0,
2149
+ message
2150
+ });
2151
+ if (llmPlan.mode === "respond") {
2152
+ return {
2153
+ success: true,
2154
+ text: llmPlan.response ?? `Tell me what to change about "${target.goal.title}" and I'll update it.`,
2155
+ data: {
2156
+ actionName: ownerSurfaceActionName,
2157
+ noop: true,
2158
+ suggestedOperation: "update_goal"
2159
+ }
2160
+ };
2161
+ }
2162
+ if (llmPlan.title) request.title = llmPlan.title;
2163
+ if (llmPlan.description) request.description = llmPlan.description;
2164
+ if (llmPlan.cadence) request.cadence = llmPlan.cadence;
2165
+ if (llmPlan.supportStrategy)
2166
+ request.supportStrategy = llmPlan.supportStrategy;
2167
+ if (llmPlan.successCriteria)
2168
+ request.successCriteria = llmPlan.successCriteria;
2169
+ if (llmPlan.groundingState) {
2170
+ request.metadata = mergeGoalMetadataWithGrounding({
2171
+ metadata: target.goal.metadata,
2172
+ nowIso: (/* @__PURE__ */ new Date()).toISOString(),
2173
+ plan: {
2174
+ cadence: llmPlan.cadence,
2175
+ confidence: llmPlan.confidence,
2176
+ evaluationSummary: llmPlan.evaluationSummary,
2177
+ groundingState: llmPlan.groundingState,
2178
+ missingCriticalFields: llmPlan.missingCriticalFields,
2179
+ successCriteria: llmPlan.successCriteria ?? target.goal.successCriteria,
2180
+ targetDomain: llmPlan.targetDomain
2181
+ }
2182
+ });
2183
+ }
2184
+ }
2185
+ if (request.title === void 0 && request.description === void 0 && request.cadence === void 0 && request.supportStrategy === void 0 && request.successCriteria === void 0 && request.metadata === void 0) {
2186
+ return {
2187
+ success: false,
2188
+ text: `Tell me what to change about "${target.goal.title}" and I'll update it.`
2189
+ };
2190
+ }
2191
+ const updated = await service.updateGoal(target.goal.id, request);
2192
+ const fallback = `Updated goal "${updated.goal.title}".`;
2193
+ return {
2194
+ success: true,
2195
+ text: await renderLifeActionReply({
2196
+ runtime,
2197
+ message,
2198
+ state,
2199
+ intent,
2200
+ scenario: "updated_goal",
2201
+ fallback,
2202
+ context: {
2203
+ previousTitle: target.goal.title,
2204
+ updated: {
2205
+ title: updated.goal.title
2206
+ }
2207
+ }
2208
+ }),
2209
+ data: toActionData(updated)
2210
+ };
2211
+ }
2212
+ if (internalOp === "delete_definition") {
2213
+ const target = await resolveDefinition(service, targetName, domain);
2214
+ if (!target)
2215
+ return {
2216
+ success: false,
2217
+ text: "I could not find that item to delete."
2218
+ };
2219
+ await service.deleteDefinition(target.definition.id);
2220
+ const fallback = `Deleted "${target.definition.title}" and its occurrences.`;
2221
+ return {
2222
+ success: true,
2223
+ text: await renderLifeActionReply({
2224
+ runtime,
2225
+ message,
2226
+ state,
2227
+ intent,
2228
+ scenario: "deleted_definition",
2229
+ fallback,
2230
+ context: {
2231
+ deleted: {
2232
+ title: target.definition.title
2233
+ }
2234
+ }
2235
+ })
2236
+ };
2237
+ }
2238
+ if (internalOp === "delete_goal") {
2239
+ const target = await resolveGoal(service, targetName, domain);
2240
+ if (!target)
2241
+ return {
2242
+ success: false,
2243
+ text: "I could not find that goal to delete."
2244
+ };
2245
+ await service.deleteGoal(target.goal.id);
2246
+ const fallback = `Deleted goal "${target.goal.title}".`;
2247
+ return {
2248
+ success: true,
2249
+ text: await renderLifeActionReply({
2250
+ runtime,
2251
+ message,
2252
+ state,
2253
+ intent,
2254
+ scenario: "deleted_goal",
2255
+ fallback,
2256
+ context: {
2257
+ deleted: {
2258
+ title: target.goal.title
2259
+ }
2260
+ }
2261
+ })
2262
+ };
2263
+ }
2264
+ if (internalOp === "complete_occurrence") {
2265
+ const directOccurrenceId = detailString(details, "occurrenceId");
2266
+ let resolvedTargetId;
2267
+ if (directOccurrenceId) {
2268
+ resolvedTargetId = directOccurrenceId;
2269
+ } else {
2270
+ const { match: target, ambiguousCandidates } = await resolveOccurrenceWithIntentFallback({
2271
+ service,
2272
+ target: targetName,
2273
+ domain,
2274
+ intent,
2275
+ operation
2276
+ });
2277
+ if (!target) {
2278
+ if (ambiguousCandidates.length > 0) {
2279
+ return {
2280
+ success: false,
2281
+ text: `Multiple items match \u2014 which one?
2282
+ ${ambiguousCandidates.map((t) => ` - ${t}`).join("\n")}`
2283
+ };
2284
+ }
2285
+ return {
2286
+ success: false,
2287
+ text: "I could not find that active item to complete."
2288
+ };
2289
+ }
2290
+ resolvedTargetId = target.id;
2291
+ }
2292
+ const completed = await service.completeOccurrence(resolvedTargetId, {
2293
+ note: detailString(details, "note")
2294
+ });
2295
+ const fallback = `Marked "${completed.title}" done.`;
2296
+ return {
2297
+ success: true,
2298
+ text: await renderLifeActionReply({
2299
+ runtime,
2300
+ message,
2301
+ state,
2302
+ intent,
2303
+ scenario: "completed_occurrence",
2304
+ fallback,
2305
+ context: {
2306
+ completed: {
2307
+ title: completed.title
2308
+ },
2309
+ note: detailString(details, "note")
2310
+ }
2311
+ }),
2312
+ data: toActionData(completed)
2313
+ };
2314
+ }
2315
+ if (internalOp === "skip_occurrence") {
2316
+ const { match: target, ambiguousCandidates } = await resolveOccurrenceWithIntentFallback({
2317
+ service,
2318
+ target: targetName,
2319
+ domain,
2320
+ intent,
2321
+ operation
2322
+ });
2323
+ if (!target) {
2324
+ if (ambiguousCandidates.length > 0) {
2325
+ return {
2326
+ success: false,
2327
+ text: `Multiple items match \u2014 which one?
2328
+ ${ambiguousCandidates.map((t) => ` - ${t}`).join("\n")}`
2329
+ };
2330
+ }
2331
+ return {
2332
+ success: false,
2333
+ text: "I could not find that active item to skip."
2334
+ };
2335
+ }
2336
+ const skipped = await service.skipOccurrence(target.id);
2337
+ const fallback = `Skipped "${skipped.title}".`;
2338
+ return {
2339
+ success: true,
2340
+ text: await renderLifeActionReply({
2341
+ runtime,
2342
+ message,
2343
+ state,
2344
+ intent,
2345
+ scenario: "skipped_occurrence",
2346
+ fallback,
2347
+ context: {
2348
+ skipped: {
2349
+ title: skipped.title
2350
+ }
2351
+ }
2352
+ }),
2353
+ data: toActionData(skipped)
2354
+ };
2355
+ }
2356
+ if (internalOp === "snooze_occurrence") {
2357
+ const directOccurrenceId = detailString(details, "occurrenceId");
2358
+ let resolvedTargetId;
2359
+ if (directOccurrenceId) {
2360
+ resolvedTargetId = directOccurrenceId;
2361
+ } else {
2362
+ const { match: target, ambiguousCandidates } = await resolveOccurrenceWithIntentFallback({
2363
+ service,
2364
+ target: targetName,
2365
+ domain,
2366
+ intent,
2367
+ operation
2368
+ });
2369
+ if (!target) {
2370
+ if (ambiguousCandidates.length > 0) {
2371
+ return {
2372
+ success: false,
2373
+ text: `Multiple items match \u2014 which one?
2374
+ ${ambiguousCandidates.map((t) => ` - ${t}`).join("\n")}`
2375
+ };
2376
+ }
2377
+ return {
2378
+ success: false,
2379
+ text: "I could not find that active item to snooze."
2380
+ };
2381
+ }
2382
+ resolvedTargetId = target.id;
2383
+ }
2384
+ const preset = detailString(details, "preset");
2385
+ const minutes = detailNumber(details, "minutes");
2386
+ const snoozed = await service.snoozeOccurrence(resolvedTargetId, {
2387
+ preset,
2388
+ minutes
2389
+ });
2390
+ const fallback = `Snoozed "${snoozed.title}".`;
2391
+ return {
2392
+ success: true,
2393
+ text: await renderLifeActionReply({
2394
+ runtime,
2395
+ message,
2396
+ state,
2397
+ intent,
2398
+ scenario: "snoozed_occurrence",
2399
+ fallback,
2400
+ context: {
2401
+ snoozed: {
2402
+ title: snoozed.title
2403
+ },
2404
+ preset: preset ?? null,
2405
+ minutes: minutes ?? null
2406
+ }
2407
+ }),
2408
+ data: toActionData(snoozed)
2409
+ };
2410
+ }
2411
+ if (internalOp === "review_goal") {
2412
+ const target = await resolveGoal(service, targetName, domain);
2413
+ if (!target) {
2414
+ const weeklyReview = await service.reviewGoalsForWeek();
2415
+ if (weeklyReview.summary.totalGoals === 0) {
2416
+ const overview = await service.getOverview();
2417
+ const userQuery = messageText(message) || intent || "overview";
2418
+ const fallback2 = formatOverviewForQuery(overview, userQuery);
2419
+ return {
2420
+ success: true,
2421
+ text: await renderLifeActionReply({
2422
+ runtime,
2423
+ message,
2424
+ state,
2425
+ intent: userQuery,
2426
+ scenario: "overview",
2427
+ fallback: fallback2,
2428
+ context: {
2429
+ summary: overview.owner.summary,
2430
+ occurrenceTitles: overview.owner.occurrences.slice(0, 6).map((occurrence) => occurrence.title),
2431
+ goalTitles: overview.owner.goals.slice(0, 3).map((goal) => goal.title)
2432
+ }
2433
+ }),
2434
+ data: toActionData(overview)
2435
+ };
2436
+ }
2437
+ const fallback = formatWeeklyGoalReview(weeklyReview);
2438
+ return {
2439
+ success: true,
2440
+ text: await renderLifeActionReply({
2441
+ runtime,
2442
+ message,
2443
+ state,
2444
+ intent,
2445
+ scenario: "weekly_goal_review",
2446
+ fallback,
2447
+ context: {
2448
+ summary: weeklyReview.summary,
2449
+ atRiskTitles: weeklyReview.atRisk.slice(0, 3).map((review2) => review2.goal.title),
2450
+ needsAttentionTitles: weeklyReview.needsAttention.slice(0, 3).map((review2) => review2.goal.title),
2451
+ onTrackTitles: weeklyReview.onTrack.slice(0, 3).map((review2) => review2.goal.title)
2452
+ }
2453
+ }),
2454
+ data: toActionData(weeklyReview)
2455
+ };
2456
+ }
2457
+ const review = await service.reviewGoal(target.goal.id);
2458
+ return {
2459
+ success: true,
2460
+ text: review.summary.explanation,
2461
+ data: toActionData(review)
2462
+ };
2463
+ }
2464
+ if (internalOp === "policy_set_reminder") {
2465
+ const intensityDetail = detailString(details, "intensity");
2466
+ const intensity = intensityDetail === "minimal" || intensityDetail === "normal" || intensityDetail === "persistent" || intensityDetail === "high_priority_only" ? intensityDetail : void 0;
2467
+ return applyOwnerPolicySetReminder({
2468
+ runtime,
2469
+ message,
2470
+ intent,
2471
+ resolveDefinition: resolveDefinitionFromIntent,
2472
+ intensity,
2473
+ target: targetName,
2474
+ details
2475
+ });
2476
+ }
2477
+ if (internalOp === "policy_configure_escalation") {
2478
+ return applyOwnerPolicyConfigureEscalation({
2479
+ runtime,
2480
+ message,
2481
+ intent,
2482
+ resolveDefinition: resolveDefinitionFromIntent,
2483
+ target: targetName,
2484
+ timeoutMinutes: detailNumber(details, "timeoutMinutes"),
2485
+ callAfterMinutes: detailNumber(details, "callAfterMinutes"),
2486
+ details
2487
+ });
2488
+ }
2489
+ return {
2490
+ success: false,
2491
+ text: "I didn't understand that life management request."
2492
+ };
2493
+ } catch (err) {
2494
+ if (err instanceof LifeOpsServiceError) {
2495
+ const fallback = buildLifeServiceErrorFallback(err, intent);
2496
+ return {
2497
+ success: false,
2498
+ text: await renderLifeActionReply({
2499
+ runtime,
2500
+ message,
2501
+ state,
2502
+ intent,
2503
+ scenario: "service_error",
2504
+ fallback,
2505
+ context: {
2506
+ status: err.status,
2507
+ operation
2508
+ }
2509
+ })
2510
+ };
2511
+ }
2512
+ throw err;
2513
+ }
2514
+ }
2515
+ export {
2516
+ OWNER_OPERATION_CONTEXTS,
2517
+ OWNER_OPERATION_ROLE_GATE,
2518
+ OWNER_OPERATION_SUPPRESS_POST_ACTION_CONTINUATION,
2519
+ OWNER_OPERATION_TAGS,
2520
+ OWNER_OPERATION_VALIDATE,
2521
+ resolveDefinitionFromIntent,
2522
+ runLifeOperationHandler
2523
+ };
2524
+ //# sourceMappingURL=life.js.map