@murphai/murph 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (779) hide show
  1. package/CHANGELOG.md +808 -0
  2. package/config.schema.json +91 -40
  3. package/dist/bin.js +6 -4
  4. package/dist/bin.js.map +1 -1
  5. package/dist/cli-entry.d.ts +8 -1
  6. package/dist/cli-entry.d.ts.map +1 -1
  7. package/dist/cli-entry.js +79 -3
  8. package/dist/cli-entry.js.map +1 -1
  9. package/dist/commands/audit-command-helpers.d.ts.map +1 -1
  10. package/dist/commands/audit-command-helpers.js +7 -5
  11. package/dist/commands/audit-command-helpers.js.map +1 -1
  12. package/dist/commands/batch.d.ts +5 -5
  13. package/dist/commands/batch.d.ts.map +1 -1
  14. package/dist/commands/batch.js +2 -21
  15. package/dist/commands/batch.js.map +1 -1
  16. package/dist/commands/commons.d.ts.map +1 -1
  17. package/dist/commands/commons.js +2 -4
  18. package/dist/commands/commons.js.map +1 -1
  19. package/dist/commands/exercise.d.ts.map +1 -1
  20. package/dist/commands/exercise.js +16 -3
  21. package/dist/commands/exercise.js.map +1 -1
  22. package/dist/commands/experiment-progress-card-image.d.ts.map +1 -1
  23. package/dist/commands/experiment-progress-card-image.js +63 -12
  24. package/dist/commands/experiment-progress-card-image.js.map +1 -1
  25. package/dist/commands/experiment.d.ts.map +1 -1
  26. package/dist/commands/experiment.js +45 -5
  27. package/dist/commands/experiment.js.map +1 -1
  28. package/dist/commands/export-intake-read-helpers.d.ts.map +1 -1
  29. package/dist/commands/export-intake-read-helpers.js +2 -3
  30. package/dist/commands/export-intake-read-helpers.js.map +1 -1
  31. package/dist/commands/food.d.ts.map +1 -1
  32. package/dist/commands/food.js +1 -7
  33. package/dist/commands/food.js.map +1 -1
  34. package/dist/commands/habitat.d.ts.map +1 -1
  35. package/dist/commands/habitat.js +120 -9
  36. package/dist/commands/habitat.js.map +1 -1
  37. package/dist/commands/health-blood-test-save.d.ts.map +1 -1
  38. package/dist/commands/health-blood-test-save.js +42 -8
  39. package/dist/commands/health-blood-test-save.js.map +1 -1
  40. package/dist/commands/meal.d.ts.map +1 -1
  41. package/dist/commands/meal.js +4 -1
  42. package/dist/commands/meal.js.map +1 -1
  43. package/dist/commands/measurement.d.ts.map +1 -1
  44. package/dist/commands/measurement.js +3 -0
  45. package/dist/commands/measurement.js.map +1 -1
  46. package/dist/commands/murph-age.d.ts +9 -1
  47. package/dist/commands/murph-age.d.ts.map +1 -1
  48. package/dist/commands/murph-age.js +132 -7
  49. package/dist/commands/murph-age.js.map +1 -1
  50. package/dist/commands/public-validation-issue.d.ts +7 -0
  51. package/dist/commands/public-validation-issue.d.ts.map +1 -0
  52. package/dist/commands/public-validation-issue.js +7 -0
  53. package/dist/commands/public-validation-issue.js.map +1 -0
  54. package/dist/commands/scheduled-log.d.ts +12 -0
  55. package/dist/commands/scheduled-log.d.ts.map +1 -1
  56. package/dist/commands/scheduled-log.js +456 -106
  57. package/dist/commands/scheduled-log.js.map +1 -1
  58. package/dist/commands/wearables.d.ts +286 -0
  59. package/dist/commands/wearables.d.ts.map +1 -1
  60. package/dist/commands/wearables.js +33 -1
  61. package/dist/commands/wearables.js.map +1 -1
  62. package/dist/commands/workout-live.d.ts.map +1 -1
  63. package/dist/commands/workout-live.js +123 -42
  64. package/dist/commands/workout-live.js.map +1 -1
  65. package/dist/commands/workout-typed-options.d.ts +38 -0
  66. package/dist/commands/workout-typed-options.d.ts.map +1 -0
  67. package/dist/commands/workout-typed-options.js +90 -0
  68. package/dist/commands/workout-typed-options.js.map +1 -0
  69. package/dist/commands/workout.d.ts.map +1 -1
  70. package/dist/commands/workout.js +80 -73
  71. package/dist/commands/workout.js.map +1 -1
  72. package/dist/hosted-data-api-labels.d.ts.map +1 -1
  73. package/dist/hosted-data-api-labels.js +161 -30
  74. package/dist/hosted-data-api-labels.js.map +1 -1
  75. package/dist/incur-error-bridge.d.ts.map +1 -1
  76. package/dist/incur-error-bridge.js +7 -15
  77. package/dist/incur-error-bridge.js.map +1 -1
  78. package/dist/incur.generated.d.ts +22 -13
  79. package/dist/incur.generated.d.ts.map +1 -1
  80. package/dist/mapbox-address.d.ts.map +1 -1
  81. package/dist/mapbox-address.js +3 -4
  82. package/dist/mapbox-address.js.map +1 -1
  83. package/dist/mapbox-route-client.d.ts +2 -2
  84. package/dist/mapbox-route-client.d.ts.map +1 -1
  85. package/dist/mapbox-route-client.js +49 -12
  86. package/dist/mapbox-route-client.js.map +1 -1
  87. package/dist/mapbox-route-directions.d.ts.map +1 -1
  88. package/dist/mapbox-route-directions.js +0 -1
  89. package/dist/mapbox-route-directions.js.map +1 -1
  90. package/dist/mapbox-route-elevation.js +0 -1
  91. package/dist/mapbox-route-elevation.js.map +1 -1
  92. package/dist/mapbox-route-points.js +0 -2
  93. package/dist/mapbox-route-points.js.map +1 -1
  94. package/dist/mapbox-route.d.ts.map +1 -1
  95. package/dist/mapbox-route.js +1 -1
  96. package/dist/mapbox-route.js.map +1 -1
  97. package/dist/vault-cli-command-manifest.d.ts +304 -6
  98. package/dist/vault-cli-command-manifest.d.ts.map +1 -1
  99. package/dist/vault-cli-skill-hash.generated.d.ts +1 -1
  100. package/dist/vault-cli-skill-hash.generated.js +1 -1
  101. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink.d.ts.map +1 -1
  102. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink.js +6 -2
  103. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink.js.map +1 -1
  104. package/node_modules/@murphai/assistant-engine/README.md +4 -3
  105. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.d.ts +15 -1
  106. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.d.ts.map +1 -1
  107. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.js +121 -24
  108. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.js.map +1 -1
  109. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-journal.js +2 -2
  110. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-journal.js.map +1 -1
  111. package/node_modules/@murphai/assistant-engine/dist/assistant/ask-continuation.d.ts.map +1 -1
  112. package/node_modules/@murphai/assistant-engine/dist/assistant/ask-continuation.js +1 -0
  113. package/node_modules/@murphai/assistant-engine/dist/assistant/ask-continuation.js.map +1 -1
  114. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/reply.d.ts.map +1 -1
  115. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/reply.js +55 -7
  116. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/reply.js.map +1 -1
  117. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/run-loop.d.ts.map +1 -1
  118. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/run-loop.js +9 -1
  119. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/run-loop.js.map +1 -1
  120. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/shared.d.ts +1 -0
  121. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/shared.d.ts.map +1 -1
  122. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/shared.js.map +1 -1
  123. package/node_modules/@murphai/assistant-engine/dist/assistant/cli-surface-contract.generated.json +1 -1
  124. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-base-instructions.d.ts +1 -1
  125. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-base-instructions.d.ts.map +1 -1
  126. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-base-instructions.js +7 -7
  127. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-base-instructions.js.map +1 -1
  128. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.d.ts +1 -1
  129. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.d.ts.map +1 -1
  130. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.js +123 -22
  131. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.js.map +1 -1
  132. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn-runner.d.ts.map +1 -1
  133. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn-runner.js +48 -19
  134. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn-runner.js.map +1 -1
  135. package/node_modules/@murphai/assistant-engine/dist/assistant/context-snapshot.js +3 -7
  136. package/node_modules/@murphai/assistant-engine/dist/assistant/context-snapshot.js.map +1 -1
  137. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.d.ts +5 -0
  138. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.d.ts.map +1 -1
  139. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.js +24 -10
  140. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.js.map +1 -1
  141. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/schedule.d.ts +2 -0
  142. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/schedule.d.ts.map +1 -1
  143. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/schedule.js +12 -0
  144. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/schedule.js.map +1 -1
  145. package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.d.ts +5 -0
  146. package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.d.ts.map +1 -1
  147. package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.js +9 -10
  148. package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.js.map +1 -1
  149. package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.d.ts +41 -9
  150. package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.d.ts.map +1 -1
  151. package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.js +9 -0
  152. package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.js.map +1 -1
  153. package/node_modules/@murphai/assistant-engine/dist/assistant/experiment-support-automations.d.ts.map +1 -1
  154. package/node_modules/@murphai/assistant-engine/dist/assistant/experiment-support-automations.js +2 -0
  155. package/node_modules/@murphai/assistant-engine/dist/assistant/experiment-support-automations.js.map +1 -1
  156. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.d.ts +3 -0
  157. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.d.ts.map +1 -1
  158. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.js +8 -0
  159. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.js.map +1 -1
  160. package/node_modules/@murphai/assistant-engine/dist/assistant/issue-reporting.d.ts +3 -0
  161. package/node_modules/@murphai/assistant-engine/dist/assistant/issue-reporting.d.ts.map +1 -1
  162. package/node_modules/@murphai/assistant-engine/dist/assistant/issue-reporting.js +26 -1
  163. package/node_modules/@murphai/assistant-engine/dist/assistant/issue-reporting.js.map +1 -1
  164. package/node_modules/@murphai/assistant-engine/dist/assistant/local-service.d.ts.map +1 -1
  165. package/node_modules/@murphai/assistant-engine/dist/assistant/local-service.js +687 -370
  166. package/node_modules/@murphai/assistant-engine/dist/assistant/local-service.js.map +1 -1
  167. package/node_modules/@murphai/assistant-engine/dist/assistant/managed-automations.d.ts.map +1 -1
  168. package/node_modules/@murphai/assistant-engine/dist/assistant/managed-automations.js +54 -18
  169. package/node_modules/@murphai/assistant-engine/dist/assistant/managed-automations.js.map +1 -1
  170. package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.d.ts +2 -3
  171. package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.d.ts.map +1 -1
  172. package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.js +10 -9
  173. package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.js.map +1 -1
  174. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.d.ts +1 -1
  175. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.d.ts.map +1 -1
  176. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.js +146 -18
  177. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.js.map +1 -1
  178. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-followup-seed.d.ts +25 -0
  179. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-followup-seed.d.ts.map +1 -0
  180. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-followup-seed.js +72 -0
  181. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-followup-seed.js.map +1 -0
  182. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-state.d.ts +4 -0
  183. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-state.d.ts.map +1 -1
  184. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-state.js +14 -0
  185. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-state.js.map +1 -1
  186. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/store.d.ts +1 -1
  187. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/store.d.ts.map +1 -1
  188. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/store.js +8 -5
  189. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/store.js.map +1 -1
  190. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.d.ts +4 -0
  191. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.d.ts.map +1 -1
  192. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.js +8 -0
  193. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.js.map +1 -1
  194. package/node_modules/@murphai/assistant-engine/dist/assistant/private-completion-continuity.js +1 -0
  195. package/node_modules/@murphai/assistant-engine/dist/assistant/private-completion-continuity.js.map +1 -1
  196. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/codex-cli.d.ts.map +1 -1
  197. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/codex-cli.js +25 -2
  198. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/codex-cli.js.map +1 -1
  199. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/helpers.d.ts +11 -3
  200. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/helpers.d.ts.map +1 -1
  201. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/helpers.js +67 -176
  202. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/helpers.js.map +1 -1
  203. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/types.d.ts +17 -0
  204. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/types.d.ts.map +1 -1
  205. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/types.js.map +1 -1
  206. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.d.ts +1 -1
  207. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.d.ts.map +1 -1
  208. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.js +10 -0
  209. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.js.map +1 -1
  210. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.d.ts +19 -4
  211. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.d.ts.map +1 -1
  212. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.js +76 -40
  213. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.js.map +1 -1
  214. package/node_modules/@murphai/assistant-engine/dist/assistant/service-contracts.d.ts +3 -1
  215. package/node_modules/@murphai/assistant-engine/dist/assistant/service-contracts.d.ts.map +1 -1
  216. package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.d.ts +4 -2
  217. package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.d.ts.map +1 -1
  218. package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.js +8 -7
  219. package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.js.map +1 -1
  220. package/node_modules/@murphai/assistant-engine/dist/assistant/shared.d.ts +1 -1
  221. package/node_modules/@murphai/assistant-engine/dist/assistant/shared.d.ts.map +1 -1
  222. package/node_modules/@murphai/assistant-engine/dist/assistant/shared.js +1 -1
  223. package/node_modules/@murphai/assistant-engine/dist/assistant/shared.js.map +1 -1
  224. package/node_modules/@murphai/assistant-engine/dist/assistant/store/types.d.ts +1 -0
  225. package/node_modules/@murphai/assistant-engine/dist/assistant/store/types.d.ts.map +1 -1
  226. package/node_modules/@murphai/assistant-engine/dist/assistant/store.d.ts.map +1 -1
  227. package/node_modules/@murphai/assistant-engine/dist/assistant/store.js +6 -0
  228. package/node_modules/@murphai/assistant-engine/dist/assistant/store.js.map +1 -1
  229. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.d.ts +3 -0
  230. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.d.ts.map +1 -1
  231. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.js +57 -29
  232. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.js.map +1 -1
  233. package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-digest.d.ts +1 -0
  234. package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-digest.d.ts.map +1 -1
  235. package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-digest.js +17 -3
  236. package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-digest.js.map +1 -1
  237. package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-feedback.d.ts +4 -7
  238. package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-feedback.d.ts.map +1 -1
  239. package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-feedback.js +21 -6
  240. package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-feedback.js.map +1 -1
  241. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.d.ts +1 -0
  242. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.d.ts.map +1 -1
  243. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.js +6 -0
  244. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.js.map +1 -1
  245. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-input.d.ts +1 -1
  246. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-input.d.ts.map +1 -1
  247. package/node_modules/@murphai/assistant-engine/dist/assistant/usage-attribution.d.ts +1 -1
  248. package/node_modules/@murphai/assistant-engine/dist/assistant/usage-attribution.d.ts.map +1 -1
  249. package/node_modules/@murphai/assistant-engine/dist/assistant/usage-attribution.js.map +1 -1
  250. package/node_modules/@murphai/assistant-engine/dist/assistant-ask.js +8 -0
  251. package/node_modules/@murphai/assistant-engine/dist/assistant-ask.js.map +1 -1
  252. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-access.d.ts.map +1 -1
  253. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-access.js +1 -0
  254. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-access.js.map +1 -1
  255. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/analyze-video-tool.d.ts +49 -0
  256. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/analyze-video-tool.d.ts.map +1 -0
  257. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/analyze-video-tool.js +387 -0
  258. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/analyze-video-tool.js.map +1 -0
  259. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-protocol.d.ts +1 -1
  260. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-protocol.d.ts.map +1 -1
  261. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-protocol.js +12 -13
  262. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-protocol.js.map +1 -1
  263. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-requests.d.ts +1 -0
  264. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-requests.d.ts.map +1 -1
  265. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-requests.js +16 -5
  266. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-requests.js.map +1 -1
  267. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.d.ts +1 -1
  268. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.d.ts.map +1 -1
  269. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.js +2 -1
  270. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.js.map +1 -1
  271. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/command-family.d.ts +4 -0
  272. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/command-family.d.ts.map +1 -1
  273. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/command-family.js +26 -13
  274. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/command-family.js.map +1 -1
  275. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tool-catalog.d.ts +1024 -1091
  276. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tool-catalog.d.ts.map +1 -1
  277. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tool-catalog.js +354 -330
  278. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tool-catalog.js.map +1 -1
  279. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/analyze-video.d.ts +50 -0
  280. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/analyze-video.d.ts.map +1 -0
  281. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/analyze-video.js +79 -0
  282. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/analyze-video.js.map +1 -0
  283. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation-model-input-schema.d.ts +4 -0
  284. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation-model-input-schema.d.ts.map +1 -0
  285. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation-model-input-schema.js +153 -0
  286. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation-model-input-schema.js.map +1 -0
  287. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation.d.ts +4 -1
  288. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation.d.ts.map +1 -1
  289. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation.js +29 -35
  290. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation.js.map +1 -1
  291. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/device.d.ts +4 -1
  292. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/device.d.ts.map +1 -1
  293. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/device.js +43 -9
  294. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/device.js.map +1 -1
  295. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/dynamic-tool-wrapper.d.ts +6 -0
  296. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/dynamic-tool-wrapper.d.ts.map +1 -1
  297. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/dynamic-tool-wrapper.js.map +1 -1
  298. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/member-memory.d.ts +60 -0
  299. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/member-memory.d.ts.map +1 -0
  300. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/member-memory.js +91 -0
  301. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/member-memory.js.map +1 -0
  302. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/physical-notes.d.ts +41 -1
  303. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/physical-notes.d.ts.map +1 -1
  304. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/physical-notes.js +85 -9
  305. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/physical-notes.js.map +1 -1
  306. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.d.ts +25 -2
  307. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.d.ts.map +1 -1
  308. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.js +280 -89
  309. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.js.map +1 -1
  310. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/failures.js +1 -1
  311. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/response-card-validation-feedback.d.ts.map +1 -1
  312. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/response-card-validation-feedback.js +1 -3
  313. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/response-card-validation-feedback.js.map +1 -1
  314. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/workout-delivery-context.d.ts +19 -0
  315. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/workout-delivery-context.d.ts.map +1 -0
  316. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/workout-delivery-context.js +203 -0
  317. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/workout-delivery-context.js.map +1 -0
  318. package/node_modules/@murphai/assistant-engine/dist/assistant-codex.d.ts +9 -1
  319. package/node_modules/@murphai/assistant-engine/dist/assistant-codex.d.ts.map +1 -1
  320. package/node_modules/@murphai/assistant-engine/dist/assistant-codex.js +220 -130
  321. package/node_modules/@murphai/assistant-engine/dist/assistant-codex.js.map +1 -1
  322. package/node_modules/@murphai/assistant-engine/dist/assistant-runtime-residue.d.ts +1 -1
  323. package/node_modules/@murphai/assistant-engine/dist/assistant-runtime-residue.d.ts.map +1 -1
  324. package/node_modules/@murphai/assistant-engine/dist/assistant-runtime-residue.js +1 -1
  325. package/node_modules/@murphai/assistant-engine/dist/assistant-runtime-residue.js.map +1 -1
  326. package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.d.ts +1 -1
  327. package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.d.ts.map +1 -1
  328. package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.js +1 -1
  329. package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.js.map +1 -1
  330. package/node_modules/@murphai/assistant-engine/dist/index.d.ts +2 -1
  331. package/node_modules/@murphai/assistant-engine/dist/index.d.ts.map +1 -1
  332. package/node_modules/@murphai/assistant-engine/dist/index.js +1 -0
  333. package/node_modules/@murphai/assistant-engine/dist/index.js.map +1 -1
  334. package/node_modules/@murphai/assistant-engine/skills/automatic-meal-capture/SKILL.md +111 -68
  335. package/node_modules/@murphai/assistant-engine/skills/behavior-followthrough/SKILL.md +0 -2
  336. package/node_modules/@murphai/assistant-engine/skills/daily-activity/SKILL.md +11 -4
  337. package/node_modules/@murphai/assistant-engine/skills/food-journal/SKILL.md +83 -22
  338. package/node_modules/@murphai/assistant-engine/skills/hosted-low-usage/SKILL.md +3 -3
  339. package/node_modules/@murphai/assistant-engine/skills/murph-family/SKILL.md +1 -1
  340. package/node_modules/@murphai/assistant-engine/skills/nutrition-strategy/SKILL.md +17 -11
  341. package/node_modules/@murphai/assistant-engine/skills/nutrition-strategy/references/daily-nutrition-card-goals.md +62 -34
  342. package/node_modules/@murphai/assistant-engine/skills/physical-notes/SKILL.md +47 -0
  343. package/node_modules/@murphai/assistant-engine/skills/shared/exercise-catalog-runtime.md +6 -0
  344. package/node_modules/@murphai/assistant-engine/skills/signup-link/SKILL.md +1 -1
  345. package/node_modules/@murphai/assistant-engine/skills/strength-training/SKILL.md +12 -5
  346. package/node_modules/@murphai/assistant-engine/skills/tracked-table/SKILL.md +156 -66
  347. package/node_modules/@murphai/core/dist/automation.d.ts.map +1 -1
  348. package/node_modules/@murphai/core/dist/automation.js +17 -9
  349. package/node_modules/@murphai/core/dist/automation.js.map +1 -1
  350. package/node_modules/@murphai/core/dist/bank/habitat.d.ts +2 -0
  351. package/node_modules/@murphai/core/dist/bank/habitat.d.ts.map +1 -1
  352. package/node_modules/@murphai/core/dist/bank/habitat.js +27 -0
  353. package/node_modules/@murphai/core/dist/bank/habitat.js.map +1 -1
  354. package/node_modules/@murphai/core/dist/bank/regimens.js +1 -1
  355. package/node_modules/@murphai/core/dist/bank/regimens.js.map +1 -1
  356. package/node_modules/@murphai/core/dist/domains/events/ledger.d.ts +21 -0
  357. package/node_modules/@murphai/core/dist/domains/events/ledger.d.ts.map +1 -1
  358. package/node_modules/@murphai/core/dist/domains/events/ledger.js +102 -8
  359. package/node_modules/@murphai/core/dist/domains/events/ledger.js.map +1 -1
  360. package/node_modules/@murphai/core/dist/domains/events.d.ts +2 -2
  361. package/node_modules/@murphai/core/dist/domains/events.d.ts.map +1 -1
  362. package/node_modules/@murphai/core/dist/domains/events.js +1 -1
  363. package/node_modules/@murphai/core/dist/domains/events.js.map +1 -1
  364. package/node_modules/@murphai/core/dist/history/api.d.ts.map +1 -1
  365. package/node_modules/@murphai/core/dist/history/api.js +18 -3
  366. package/node_modules/@murphai/core/dist/history/api.js.map +1 -1
  367. package/node_modules/@murphai/core/dist/index.d.ts +4 -2
  368. package/node_modules/@murphai/core/dist/index.d.ts.map +1 -1
  369. package/node_modules/@murphai/core/dist/index.js +3 -1
  370. package/node_modules/@murphai/core/dist/index.js.map +1 -1
  371. package/node_modules/@murphai/core/dist/mutations.d.ts +25 -2
  372. package/node_modules/@murphai/core/dist/mutations.d.ts.map +1 -1
  373. package/node_modules/@murphai/core/dist/mutations.js +1588 -78
  374. package/node_modules/@murphai/core/dist/mutations.js.map +1 -1
  375. package/node_modules/@murphai/core/dist/operations/index.d.ts +1 -1
  376. package/node_modules/@murphai/core/dist/operations/index.d.ts.map +1 -1
  377. package/node_modules/@murphai/core/dist/operations/index.js +1 -1
  378. package/node_modules/@murphai/core/dist/operations/index.js.map +1 -1
  379. package/node_modules/@murphai/core/dist/operations/write-batch.d.ts +2 -0
  380. package/node_modules/@murphai/core/dist/operations/write-batch.d.ts.map +1 -1
  381. package/node_modules/@murphai/core/dist/operations/write-batch.js +7 -0
  382. package/node_modules/@murphai/core/dist/operations/write-batch.js.map +1 -1
  383. package/node_modules/@murphai/core/dist/protocols.d.ts.map +1 -1
  384. package/node_modules/@murphai/core/dist/protocols.js +52 -9
  385. package/node_modules/@murphai/core/dist/protocols.js.map +1 -1
  386. package/node_modules/@murphai/core/dist/public-mutations.d.ts +1 -1
  387. package/node_modules/@murphai/core/dist/public-mutations.d.ts.map +1 -1
  388. package/node_modules/@murphai/core/dist/public-mutations.js +2 -2
  389. package/node_modules/@murphai/core/dist/public-mutations.js.map +1 -1
  390. package/node_modules/@murphai/core/dist/scheduled-logs.d.ts +3 -0
  391. package/node_modules/@murphai/core/dist/scheduled-logs.d.ts.map +1 -1
  392. package/node_modules/@murphai/core/dist/scheduled-logs.js +65 -29
  393. package/node_modules/@murphai/core/dist/scheduled-logs.js.map +1 -1
  394. package/node_modules/@murphai/device-syncd/README.md +140 -46
  395. package/node_modules/@murphai/device-syncd/dist/client.d.ts +14 -0
  396. package/node_modules/@murphai/device-syncd/dist/client.d.ts.map +1 -1
  397. package/node_modules/@murphai/device-syncd/dist/client.js.map +1 -1
  398. package/node_modules/@murphai/device-syncd/dist/config/connect-routes.d.ts +4 -1
  399. package/node_modules/@murphai/device-syncd/dist/config/connect-routes.d.ts.map +1 -1
  400. package/node_modules/@murphai/device-syncd/dist/config/connect-routes.js +24 -2
  401. package/node_modules/@murphai/device-syncd/dist/config/connect-routes.js.map +1 -1
  402. package/node_modules/@murphai/device-syncd/dist/config/junction-connect-sources.js +2 -2
  403. package/node_modules/@murphai/device-syncd/dist/config/junction-connect-sources.js.map +1 -1
  404. package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.d.ts +53 -0
  405. package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.d.ts.map +1 -1
  406. package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.js +13 -0
  407. package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.js.map +1 -1
  408. package/node_modules/@murphai/device-syncd/dist/connect-config.d.ts +1 -1
  409. package/node_modules/@murphai/device-syncd/dist/connect-config.d.ts.map +1 -1
  410. package/node_modules/@murphai/device-syncd/dist/connect-config.js +1 -1
  411. package/node_modules/@murphai/device-syncd/dist/connect-config.js.map +1 -1
  412. package/node_modules/@murphai/device-syncd/dist/fitbit-migration.d.ts +57 -0
  413. package/node_modules/@murphai/device-syncd/dist/fitbit-migration.d.ts.map +1 -0
  414. package/node_modules/@murphai/device-syncd/dist/fitbit-migration.js +166 -0
  415. package/node_modules/@murphai/device-syncd/dist/fitbit-migration.js.map +1 -0
  416. package/node_modules/@murphai/device-syncd/dist/hosted-runtime.d.ts +43 -0
  417. package/node_modules/@murphai/device-syncd/dist/hosted-runtime.d.ts.map +1 -1
  418. package/node_modules/@murphai/device-syncd/dist/hosted-runtime.js +129 -5
  419. package/node_modules/@murphai/device-syncd/dist/hosted-runtime.js.map +1 -1
  420. package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.d.ts +3 -0
  421. package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.d.ts.map +1 -1
  422. package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.js +36 -16
  423. package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.js.map +1 -1
  424. package/node_modules/@murphai/device-syncd/dist/junction-inline-authority.d.ts +17 -2
  425. package/node_modules/@murphai/device-syncd/dist/junction-inline-authority.d.ts.map +1 -1
  426. package/node_modules/@murphai/device-syncd/dist/junction-inline-authority.js +99 -40
  427. package/node_modules/@murphai/device-syncd/dist/junction-inline-authority.js.map +1 -1
  428. package/node_modules/@murphai/device-syncd/dist/junction-source-reconnect.d.ts +17 -0
  429. package/node_modules/@murphai/device-syncd/dist/junction-source-reconnect.d.ts.map +1 -0
  430. package/node_modules/@murphai/device-syncd/dist/junction-source-reconnect.js +45 -0
  431. package/node_modules/@murphai/device-syncd/dist/junction-source-reconnect.js.map +1 -0
  432. package/node_modules/@murphai/device-syncd/dist/junction-timeseries-progress.d.ts +8 -1
  433. package/node_modules/@murphai/device-syncd/dist/junction-timeseries-progress.d.ts.map +1 -1
  434. package/node_modules/@murphai/device-syncd/dist/junction-timeseries-progress.js +12 -1
  435. package/node_modules/@murphai/device-syncd/dist/junction-timeseries-progress.js.map +1 -1
  436. package/node_modules/@murphai/device-syncd/dist/providers/junction-client.d.ts +7 -0
  437. package/node_modules/@murphai/device-syncd/dist/providers/junction-client.d.ts.map +1 -1
  438. package/node_modules/@murphai/device-syncd/dist/providers/junction-client.js +285 -46
  439. package/node_modules/@murphai/device-syncd/dist/providers/junction-client.js.map +1 -1
  440. package/node_modules/@murphai/device-syncd/dist/providers/junction.d.ts +9 -0
  441. package/node_modules/@murphai/device-syncd/dist/providers/junction.d.ts.map +1 -1
  442. package/node_modules/@murphai/device-syncd/dist/providers/junction.js +2045 -367
  443. package/node_modules/@murphai/device-syncd/dist/providers/junction.js.map +1 -1
  444. package/node_modules/@murphai/device-syncd/dist/public-account.d.ts +2 -0
  445. package/node_modules/@murphai/device-syncd/dist/public-account.d.ts.map +1 -1
  446. package/node_modules/@murphai/device-syncd/dist/public-account.js +96 -0
  447. package/node_modules/@murphai/device-syncd/dist/public-account.js.map +1 -1
  448. package/node_modules/@murphai/device-syncd/dist/public-ingress.d.ts.map +1 -1
  449. package/node_modules/@murphai/device-syncd/dist/public-ingress.js +6 -4
  450. package/node_modules/@murphai/device-syncd/dist/public-ingress.js.map +1 -1
  451. package/node_modules/@murphai/device-syncd/dist/service.d.ts +6 -2
  452. package/node_modules/@murphai/device-syncd/dist/service.d.ts.map +1 -1
  453. package/node_modules/@murphai/device-syncd/dist/service.js +385 -44
  454. package/node_modules/@murphai/device-syncd/dist/service.js.map +1 -1
  455. package/node_modules/@murphai/device-syncd/dist/source-staleness.d.ts +15 -0
  456. package/node_modules/@murphai/device-syncd/dist/source-staleness.d.ts.map +1 -1
  457. package/node_modules/@murphai/device-syncd/dist/source-staleness.js +25 -1
  458. package/node_modules/@murphai/device-syncd/dist/source-staleness.js.map +1 -1
  459. package/node_modules/@murphai/device-syncd/dist/store/jobs.d.ts +10 -1
  460. package/node_modules/@murphai/device-syncd/dist/store/jobs.d.ts.map +1 -1
  461. package/node_modules/@murphai/device-syncd/dist/store/jobs.js +95 -1
  462. package/node_modules/@murphai/device-syncd/dist/store/jobs.js.map +1 -1
  463. package/node_modules/@murphai/device-syncd/dist/store/schema.d.ts +1 -1
  464. package/node_modules/@murphai/device-syncd/dist/store/schema.d.ts.map +1 -1
  465. package/node_modules/@murphai/device-syncd/dist/store/schema.js +25 -3
  466. package/node_modules/@murphai/device-syncd/dist/store/schema.js.map +1 -1
  467. package/node_modules/@murphai/device-syncd/dist/store/sources.d.ts +24 -2
  468. package/node_modules/@murphai/device-syncd/dist/store/sources.d.ts.map +1 -1
  469. package/node_modules/@murphai/device-syncd/dist/store/sources.js +223 -14
  470. package/node_modules/@murphai/device-syncd/dist/store/sources.js.map +1 -1
  471. package/node_modules/@murphai/device-syncd/dist/store.d.ts +13 -3
  472. package/node_modules/@murphai/device-syncd/dist/store.d.ts.map +1 -1
  473. package/node_modules/@murphai/device-syncd/dist/store.js +104 -22
  474. package/node_modules/@murphai/device-syncd/dist/store.js.map +1 -1
  475. package/node_modules/@murphai/device-syncd/dist/types.d.ts +96 -9
  476. package/node_modules/@murphai/device-syncd/dist/types.d.ts.map +1 -1
  477. package/node_modules/@murphai/device-syncd/dist/types.js +4 -0
  478. package/node_modules/@murphai/device-syncd/dist/types.js.map +1 -1
  479. package/node_modules/@murphai/device-syncd/package.json +8 -0
  480. package/node_modules/@murphai/health-metrics/dist/definitions/activity.d.ts.map +1 -1
  481. package/node_modules/@murphai/health-metrics/dist/definitions/activity.js +66 -0
  482. package/node_modules/@murphai/health-metrics/dist/definitions/activity.js.map +1 -1
  483. package/node_modules/@murphai/health-metrics/dist/definitions/body.js +2 -2
  484. package/node_modules/@murphai/health-metrics/dist/definitions/body.js.map +1 -1
  485. package/node_modules/@murphai/health-metrics/dist/normalize.d.ts.map +1 -1
  486. package/node_modules/@murphai/health-metrics/dist/normalize.js +3 -0
  487. package/node_modules/@murphai/health-metrics/dist/normalize.js.map +1 -1
  488. package/node_modules/@murphai/health-metrics/dist/wearable-metric-catalog.d.ts +3 -1
  489. package/node_modules/@murphai/health-metrics/dist/wearable-metric-catalog.d.ts.map +1 -1
  490. package/node_modules/@murphai/health-metrics/dist/wearable-metric-catalog.js +5 -1
  491. package/node_modules/@murphai/health-metrics/dist/wearable-metric-catalog.js.map +1 -1
  492. package/node_modules/@murphai/health-metrics/dist/wearable-provider-catalog.d.ts +79 -0
  493. package/node_modules/@murphai/health-metrics/dist/wearable-provider-catalog.d.ts.map +1 -1
  494. package/node_modules/@murphai/health-metrics/dist/wearable-provider-catalog.js +19 -0
  495. package/node_modules/@murphai/health-metrics/dist/wearable-provider-catalog.js.map +1 -1
  496. package/node_modules/@murphai/importers/dist/core-port.d.ts +15 -1
  497. package/node_modules/@murphai/importers/dist/core-port.d.ts.map +1 -1
  498. package/node_modules/@murphai/importers/dist/core-port.js.map +1 -1
  499. package/node_modules/@murphai/importers/dist/create-importers.d.ts +9 -1
  500. package/node_modules/@murphai/importers/dist/create-importers.d.ts.map +1 -1
  501. package/node_modules/@murphai/importers/dist/create-importers.js +12 -2
  502. package/node_modules/@murphai/importers/dist/create-importers.js.map +1 -1
  503. package/node_modules/@murphai/importers/dist/device-providers/import-device-provider-snapshot.d.ts +17 -3
  504. package/node_modules/@murphai/importers/dist/device-providers/import-device-provider-snapshot.d.ts.map +1 -1
  505. package/node_modules/@murphai/importers/dist/device-providers/import-device-provider-snapshot.js +102 -8
  506. package/node_modules/@murphai/importers/dist/device-providers/import-device-provider-snapshot.js.map +1 -1
  507. package/node_modules/@murphai/importers/dist/device-providers/index.d.ts +5 -4
  508. package/node_modules/@murphai/importers/dist/device-providers/index.d.ts.map +1 -1
  509. package/node_modules/@murphai/importers/dist/device-providers/index.js +4 -3
  510. package/node_modules/@murphai/importers/dist/device-providers/index.js.map +1 -1
  511. package/node_modules/@murphai/importers/dist/device-providers/junction-bounded-features.d.ts +11 -1
  512. package/node_modules/@murphai/importers/dist/device-providers/junction-bounded-features.d.ts.map +1 -1
  513. package/node_modules/@murphai/importers/dist/device-providers/junction-bounded-features.js +420 -27
  514. package/node_modules/@murphai/importers/dist/device-providers/junction-bounded-features.js.map +1 -1
  515. package/node_modules/@murphai/importers/dist/device-providers/junction-origin.d.ts +1 -0
  516. package/node_modules/@murphai/importers/dist/device-providers/junction-origin.d.ts.map +1 -1
  517. package/node_modules/@murphai/importers/dist/device-providers/junction-origin.js +7 -2
  518. package/node_modules/@murphai/importers/dist/device-providers/junction-origin.js.map +1 -1
  519. package/node_modules/@murphai/importers/dist/device-providers/junction-resources.d.ts +4 -1
  520. package/node_modules/@murphai/importers/dist/device-providers/junction-resources.d.ts.map +1 -1
  521. package/node_modules/@murphai/importers/dist/device-providers/junction-resources.js +42 -1
  522. package/node_modules/@murphai/importers/dist/device-providers/junction-resources.js.map +1 -1
  523. package/node_modules/@murphai/importers/dist/device-providers/junction-timeseries-features.d.ts +79 -0
  524. package/node_modules/@murphai/importers/dist/device-providers/junction-timeseries-features.d.ts.map +1 -0
  525. package/node_modules/@murphai/importers/dist/device-providers/junction-timeseries-features.js +356 -0
  526. package/node_modules/@murphai/importers/dist/device-providers/junction-timeseries-features.js.map +1 -0
  527. package/node_modules/@murphai/importers/dist/device-providers/junction.d.ts +76 -3
  528. package/node_modules/@murphai/importers/dist/device-providers/junction.d.ts.map +1 -1
  529. package/node_modules/@murphai/importers/dist/device-providers/junction.js +1676 -347
  530. package/node_modules/@murphai/importers/dist/device-providers/junction.js.map +1 -1
  531. package/node_modules/@murphai/importers/dist/device-providers/shared-normalization.d.ts.map +1 -1
  532. package/node_modules/@murphai/importers/dist/device-providers/shared-normalization.js +1 -0
  533. package/node_modules/@murphai/importers/dist/device-providers/shared-normalization.js.map +1 -1
  534. package/node_modules/@murphai/importers/dist/device-providers/types.d.ts +9 -1
  535. package/node_modules/@murphai/importers/dist/device-providers/types.d.ts.map +1 -1
  536. package/node_modules/@murphai/importers/dist/index.d.ts +2 -2
  537. package/node_modules/@murphai/importers/dist/index.d.ts.map +1 -1
  538. package/node_modules/@murphai/importers/dist/index.js +1 -1
  539. package/node_modules/@murphai/importers/dist/index.js.map +1 -1
  540. package/node_modules/@murphai/inboxd/README.md +1 -1
  541. package/node_modules/@murphai/inboxd/dist/indexing/retention.d.ts +6 -0
  542. package/node_modules/@murphai/inboxd/dist/indexing/retention.d.ts.map +1 -1
  543. package/node_modules/@murphai/inboxd/dist/indexing/retention.js +64 -18
  544. package/node_modules/@murphai/inboxd/dist/indexing/retention.js.map +1 -1
  545. package/node_modules/@murphai/inboxd/dist/retention.d.ts +1 -1
  546. package/node_modules/@murphai/inboxd/dist/retention.d.ts.map +1 -1
  547. package/node_modules/@murphai/inboxd/dist/retention.js +1 -1
  548. package/node_modules/@murphai/inboxd/dist/retention.js.map +1 -1
  549. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.d.ts +1 -0
  550. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.d.ts.map +1 -1
  551. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.js +5 -0
  552. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.js.map +1 -1
  553. package/node_modules/@murphai/operator-config/dist/assistant-response-cards.d.ts +175 -152
  554. package/node_modules/@murphai/operator-config/dist/assistant-response-cards.d.ts.map +1 -1
  555. package/node_modules/@murphai/operator-config/dist/assistant-response-cards.js +62 -41
  556. package/node_modules/@murphai/operator-config/dist/assistant-response-cards.js.map +1 -1
  557. package/node_modules/@murphai/operator-config/dist/device-sync-client.d.ts.map +1 -1
  558. package/node_modules/@murphai/operator-config/dist/device-sync-client.js +1 -5
  559. package/node_modules/@murphai/operator-config/dist/device-sync-client.js.map +1 -1
  560. package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.d.ts +66 -0
  561. package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.d.ts.map +1 -1
  562. package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.js +58 -0
  563. package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.js.map +1 -1
  564. package/node_modules/@murphai/operator-config/dist/vault-cli-error-projection.d.ts +24 -0
  565. package/node_modules/@murphai/operator-config/dist/vault-cli-error-projection.d.ts.map +1 -0
  566. package/node_modules/@murphai/operator-config/dist/vault-cli-error-projection.js +219 -0
  567. package/node_modules/@murphai/operator-config/dist/vault-cli-error-projection.js.map +1 -0
  568. package/node_modules/@murphai/operator-config/dist/vault-cli-errors.d.ts.map +1 -1
  569. package/node_modules/@murphai/operator-config/dist/vault-cli-errors.js.map +1 -1
  570. package/node_modules/@murphai/operator-config/dist/workout-action-binding.d.ts +9 -0
  571. package/node_modules/@murphai/operator-config/dist/workout-action-binding.d.ts.map +1 -1
  572. package/node_modules/@murphai/operator-config/dist/workout-action-binding.js +48 -5
  573. package/node_modules/@murphai/operator-config/dist/workout-action-binding.js.map +1 -1
  574. package/node_modules/@murphai/operator-config/package.json +5 -0
  575. package/node_modules/@murphai/query/README.md +20 -5
  576. package/node_modules/@murphai/query/dist/browser-replica/build.d.ts +1 -1
  577. package/node_modules/@murphai/query/dist/browser-replica/build.d.ts.map +1 -1
  578. package/node_modules/@murphai/query/dist/browser-replica/build.js +25 -16
  579. package/node_modules/@murphai/query/dist/browser-replica/build.js.map +1 -1
  580. package/node_modules/@murphai/query/dist/browser-replica/json.d.ts +6 -0
  581. package/node_modules/@murphai/query/dist/browser-replica/json.d.ts.map +1 -0
  582. package/node_modules/@murphai/query/dist/browser-replica/json.js +103 -0
  583. package/node_modules/@murphai/query/dist/browser-replica/json.js.map +1 -0
  584. package/node_modules/@murphai/query/dist/browser-replica/shared.d.ts +1 -0
  585. package/node_modules/@murphai/query/dist/browser-replica/shared.d.ts.map +1 -1
  586. package/node_modules/@murphai/query/dist/browser-replica/source.d.ts +13 -0
  587. package/node_modules/@murphai/query/dist/browser-replica/source.d.ts.map +1 -0
  588. package/node_modules/@murphai/query/dist/browser-replica/source.js +45 -0
  589. package/node_modules/@murphai/query/dist/browser-replica/source.js.map +1 -0
  590. package/node_modules/@murphai/query/dist/browser-replica-server.d.ts +2 -0
  591. package/node_modules/@murphai/query/dist/browser-replica-server.d.ts.map +1 -1
  592. package/node_modules/@murphai/query/dist/browser-replica-server.js +2 -0
  593. package/node_modules/@murphai/query/dist/browser-replica-server.js.map +1 -1
  594. package/node_modules/@murphai/query/dist/health/blood-tests.d.ts.map +1 -1
  595. package/node_modules/@murphai/query/dist/health/blood-tests.js +3 -2
  596. package/node_modules/@murphai/query/dist/health/blood-tests.js.map +1 -1
  597. package/node_modules/@murphai/query/dist/health/canonical-collector.d.ts +11 -1
  598. package/node_modules/@murphai/query/dist/health/canonical-collector.d.ts.map +1 -1
  599. package/node_modules/@murphai/query/dist/health/canonical-collector.js +39 -16
  600. package/node_modules/@murphai/query/dist/health/canonical-collector.js.map +1 -1
  601. package/node_modules/@murphai/query/dist/health/entity-slices.d.ts +9 -3
  602. package/node_modules/@murphai/query/dist/health/entity-slices.d.ts.map +1 -1
  603. package/node_modules/@murphai/query/dist/health/entity-slices.js +6 -6
  604. package/node_modules/@murphai/query/dist/health/entity-slices.js.map +1 -1
  605. package/node_modules/@murphai/query/dist/health/immunizations.d.ts.map +1 -1
  606. package/node_modules/@murphai/query/dist/health/immunizations.js +14 -11
  607. package/node_modules/@murphai/query/dist/health/immunizations.js.map +1 -1
  608. package/node_modules/@murphai/query/dist/health/loaders.d.ts +21 -7
  609. package/node_modules/@murphai/query/dist/health/loaders.d.ts.map +1 -1
  610. package/node_modules/@murphai/query/dist/health/loaders.js +53 -15
  611. package/node_modules/@murphai/query/dist/health/loaders.js.map +1 -1
  612. package/node_modules/@murphai/query/dist/health/registries.d.ts +1 -0
  613. package/node_modules/@murphai/query/dist/health/registries.d.ts.map +1 -1
  614. package/node_modules/@murphai/query/dist/health/registries.js.map +1 -1
  615. package/node_modules/@murphai/query/dist/index.d.ts +4 -3
  616. package/node_modules/@murphai/query/dist/index.d.ts.map +1 -1
  617. package/node_modules/@murphai/query/dist/index.js +4 -3
  618. package/node_modules/@murphai/query/dist/index.js.map +1 -1
  619. package/node_modules/@murphai/query/dist/meal-nutrition.d.ts +1 -1
  620. package/node_modules/@murphai/query/dist/meal-nutrition.d.ts.map +1 -1
  621. package/node_modules/@murphai/query/dist/meal-nutrition.js +10 -3
  622. package/node_modules/@murphai/query/dist/meal-nutrition.js.map +1 -1
  623. package/node_modules/@murphai/query/dist/metrics/projection.d.ts.map +1 -1
  624. package/node_modules/@murphai/query/dist/metrics/projection.js +19 -6
  625. package/node_modules/@murphai/query/dist/metrics/projection.js.map +1 -1
  626. package/node_modules/@murphai/query/dist/murph-age.d.ts +5 -1
  627. package/node_modules/@murphai/query/dist/murph-age.d.ts.map +1 -1
  628. package/node_modules/@murphai/query/dist/murph-age.js +22 -8
  629. package/node_modules/@murphai/query/dist/murph-age.js.map +1 -1
  630. package/node_modules/@murphai/query/dist/projection/entity-store.js +4 -4
  631. package/node_modules/@murphai/query/dist/projection/entity-store.js.map +1 -1
  632. package/node_modules/@murphai/query/dist/projection/schema.d.ts +1 -1
  633. package/node_modules/@murphai/query/dist/projection/schema.d.ts.map +1 -1
  634. package/node_modules/@murphai/query/dist/projection/schema.js +3 -1
  635. package/node_modules/@murphai/query/dist/projection/schema.js.map +1 -1
  636. package/node_modules/@murphai/query/dist/projection/wearable-summary-compose.js +4 -0
  637. package/node_modules/@murphai/query/dist/projection/wearable-summary-compose.js.map +1 -1
  638. package/node_modules/@murphai/query/dist/projection/wearable-summary-projector.js +4 -0
  639. package/node_modules/@murphai/query/dist/projection/wearable-summary-projector.js.map +1 -1
  640. package/node_modules/@murphai/query/dist/query-visibility.d.ts +5 -0
  641. package/node_modules/@murphai/query/dist/query-visibility.d.ts.map +1 -1
  642. package/node_modules/@murphai/query/dist/query-visibility.js +11 -5
  643. package/node_modules/@murphai/query/dist/query-visibility.js.map +1 -1
  644. package/node_modules/@murphai/query/dist/read-model.d.ts +8 -0
  645. package/node_modules/@murphai/query/dist/read-model.d.ts.map +1 -1
  646. package/node_modules/@murphai/query/dist/read-model.js +11 -1
  647. package/node_modules/@murphai/query/dist/read-model.js.map +1 -1
  648. package/node_modules/@murphai/query/dist/scheduled-logs.d.ts.map +1 -1
  649. package/node_modules/@murphai/query/dist/scheduled-logs.js +55 -79
  650. package/node_modules/@murphai/query/dist/scheduled-logs.js.map +1 -1
  651. package/node_modules/@murphai/query/dist/vault-source.d.ts +22 -4
  652. package/node_modules/@murphai/query/dist/vault-source.d.ts.map +1 -1
  653. package/node_modules/@murphai/query/dist/vault-source.js +188 -59
  654. package/node_modules/@murphai/query/dist/vault-source.js.map +1 -1
  655. package/node_modules/@murphai/query/dist/wearables/candidates.d.ts.map +1 -1
  656. package/node_modules/@murphai/query/dist/wearables/candidates.js +26 -15
  657. package/node_modules/@murphai/query/dist/wearables/candidates.js.map +1 -1
  658. package/node_modules/@murphai/query/dist/wearables/public-output.d.ts.map +1 -1
  659. package/node_modules/@murphai/query/dist/wearables/public-output.js +6 -0
  660. package/node_modules/@murphai/query/dist/wearables/public-output.js.map +1 -1
  661. package/node_modules/@murphai/query/dist/wearables/source-health.d.ts.map +1 -1
  662. package/node_modules/@murphai/query/dist/wearables/source-health.js +4 -0
  663. package/node_modules/@murphai/query/dist/wearables/source-health.js.map +1 -1
  664. package/node_modules/@murphai/query/dist/wearables/types.d.ts +41 -4
  665. package/node_modules/@murphai/query/dist/wearables/types.d.ts.map +1 -1
  666. package/node_modules/@murphai/query/dist/wearables/types.js +2 -0
  667. package/node_modules/@murphai/query/dist/wearables/types.js.map +1 -1
  668. package/node_modules/@murphai/query/dist/wearables/workout-features.d.ts +5 -0
  669. package/node_modules/@murphai/query/dist/wearables/workout-features.d.ts.map +1 -0
  670. package/node_modules/@murphai/query/dist/wearables/workout-features.js +179 -0
  671. package/node_modules/@murphai/query/dist/wearables/workout-features.js.map +1 -0
  672. package/node_modules/@murphai/query/dist/wearables.d.ts.map +1 -1
  673. package/node_modules/@murphai/query/dist/wearables.js +23 -6
  674. package/node_modules/@murphai/query/dist/wearables.js.map +1 -1
  675. package/node_modules/@murphai/query/package.json +5 -0
  676. package/node_modules/@murphai/runtime-state/README.md +1 -1
  677. package/node_modules/@murphai/runtime-state/dist/assistant-runtime-issues.d.ts +4 -0
  678. package/node_modules/@murphai/runtime-state/dist/assistant-runtime-issues.d.ts.map +1 -1
  679. package/node_modules/@murphai/runtime-state/dist/assistant-runtime-issues.js +16 -3
  680. package/node_modules/@murphai/runtime-state/dist/assistant-runtime-issues.js.map +1 -1
  681. package/node_modules/@murphai/runtime-state/dist/hosted-bundles.d.ts +1 -0
  682. package/node_modules/@murphai/runtime-state/dist/hosted-bundles.d.ts.map +1 -1
  683. package/node_modules/@murphai/runtime-state/dist/hosted-bundles.js +31 -0
  684. package/node_modules/@murphai/runtime-state/dist/hosted-bundles.js.map +1 -1
  685. package/node_modules/@murphai/runtime-state/dist/hosted-email.d.ts +5 -0
  686. package/node_modules/@murphai/runtime-state/dist/hosted-email.d.ts.map +1 -1
  687. package/node_modules/@murphai/runtime-state/dist/hosted-email.js +10 -0
  688. package/node_modules/@murphai/runtime-state/dist/hosted-email.js.map +1 -1
  689. package/node_modules/@murphai/setup-cli/dist/incur-error-bridge.d.ts.map +1 -1
  690. package/node_modules/@murphai/setup-cli/dist/incur-error-bridge.js +6 -15
  691. package/node_modules/@murphai/setup-cli/dist/incur-error-bridge.js.map +1 -1
  692. package/node_modules/@murphai/vault-usecases/README.md +9 -0
  693. package/node_modules/@murphai/vault-usecases/dist/commands/query-record-command-helpers.d.ts +6 -0
  694. package/node_modules/@murphai/vault-usecases/dist/commands/query-record-command-helpers.d.ts.map +1 -1
  695. package/node_modules/@murphai/vault-usecases/dist/commands/query-record-command-helpers.js +49 -1
  696. package/node_modules/@murphai/vault-usecases/dist/commands/query-record-command-helpers.js.map +1 -1
  697. package/node_modules/@murphai/vault-usecases/dist/usecases/capture.d.ts.map +1 -1
  698. package/node_modules/@murphai/vault-usecases/dist/usecases/capture.js +22 -12
  699. package/node_modules/@murphai/vault-usecases/dist/usecases/capture.js.map +1 -1
  700. package/node_modules/@murphai/vault-usecases/dist/usecases/clinical-imports.d.ts.map +1 -1
  701. package/node_modules/@murphai/vault-usecases/dist/usecases/clinical-imports.js +1 -3
  702. package/node_modules/@murphai/vault-usecases/dist/usecases/clinical-imports.js.map +1 -1
  703. package/node_modules/@murphai/vault-usecases/dist/usecases/document-meal-read.d.ts.map +1 -1
  704. package/node_modules/@murphai/vault-usecases/dist/usecases/document-meal-read.js +24 -18
  705. package/node_modules/@murphai/vault-usecases/dist/usecases/document-meal-read.js.map +1 -1
  706. package/node_modules/@murphai/vault-usecases/dist/usecases/encounter.d.ts.map +1 -1
  707. package/node_modules/@murphai/vault-usecases/dist/usecases/encounter.js +1 -3
  708. package/node_modules/@murphai/vault-usecases/dist/usecases/encounter.js.map +1 -1
  709. package/node_modules/@murphai/vault-usecases/dist/usecases/event-record-mutations.d.ts +8 -0
  710. package/node_modules/@murphai/vault-usecases/dist/usecases/event-record-mutations.d.ts.map +1 -1
  711. package/node_modules/@murphai/vault-usecases/dist/usecases/event-record-mutations.js +56 -5
  712. package/node_modules/@murphai/vault-usecases/dist/usecases/event-record-mutations.js.map +1 -1
  713. package/node_modules/@murphai/vault-usecases/dist/usecases/exact-event-record.d.ts +20 -0
  714. package/node_modules/@murphai/vault-usecases/dist/usecases/exact-event-record.d.ts.map +1 -0
  715. package/node_modules/@murphai/vault-usecases/dist/usecases/exact-event-record.js +72 -0
  716. package/node_modules/@murphai/vault-usecases/dist/usecases/exact-event-record.js.map +1 -0
  717. package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.d.ts +1 -1
  718. package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.d.ts.map +1 -1
  719. package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.js +42 -9
  720. package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.js.map +1 -1
  721. package/node_modules/@murphai/vault-usecases/dist/usecases/explicit-health-family-services.d.ts.map +1 -1
  722. package/node_modules/@murphai/vault-usecases/dist/usecases/explicit-health-family-services.js +158 -24
  723. package/node_modules/@murphai/vault-usecases/dist/usecases/explicit-health-family-services.js.map +1 -1
  724. package/node_modules/@murphai/vault-usecases/dist/usecases/food.d.ts.map +1 -1
  725. package/node_modules/@murphai/vault-usecases/dist/usecases/food.js +98 -5
  726. package/node_modules/@murphai/vault-usecases/dist/usecases/food.js.map +1 -1
  727. package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.d.ts.map +1 -1
  728. package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.js +20 -4
  729. package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.js.map +1 -1
  730. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention-experiment-link.d.ts.map +1 -1
  731. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention-experiment-link.js +49 -24
  732. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention-experiment-link.js.map +1 -1
  733. package/node_modules/@murphai/vault-usecases/dist/usecases/measurement-read.d.ts.map +1 -1
  734. package/node_modules/@murphai/vault-usecases/dist/usecases/measurement-read.js +13 -11
  735. package/node_modules/@murphai/vault-usecases/dist/usecases/measurement-read.js.map +1 -1
  736. package/node_modules/@murphai/vault-usecases/dist/usecases/provider-event.d.ts.map +1 -1
  737. package/node_modules/@murphai/vault-usecases/dist/usecases/provider-event.js +18 -11
  738. package/node_modules/@murphai/vault-usecases/dist/usecases/provider-event.js.map +1 -1
  739. package/node_modules/@murphai/vault-usecases/dist/usecases/recipe.d.ts.map +1 -1
  740. package/node_modules/@murphai/vault-usecases/dist/usecases/recipe.js +43 -1
  741. package/node_modules/@murphai/vault-usecases/dist/usecases/recipe.js.map +1 -1
  742. package/node_modules/@murphai/vault-usecases/dist/usecases/shared.d.ts.map +1 -1
  743. package/node_modules/@murphai/vault-usecases/dist/usecases/shared.js +1 -3
  744. package/node_modules/@murphai/vault-usecases/dist/usecases/shared.js.map +1 -1
  745. package/node_modules/@murphai/vault-usecases/dist/usecases/vault-usecase-helpers.d.ts +2 -0
  746. package/node_modules/@murphai/vault-usecases/dist/usecases/vault-usecase-helpers.d.ts.map +1 -1
  747. package/node_modules/@murphai/vault-usecases/dist/usecases/vault-usecase-helpers.js +24 -1
  748. package/node_modules/@murphai/vault-usecases/dist/usecases/vault-usecase-helpers.js.map +1 -1
  749. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-format.d.ts +2 -0
  750. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-format.d.ts.map +1 -1
  751. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-model.d.ts +36 -4
  752. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-model.d.ts.map +1 -1
  753. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-model.js +48 -12
  754. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-model.js.map +1 -1
  755. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-state.d.ts +14 -14
  756. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-state.d.ts.map +1 -1
  757. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-state.js +84 -82
  758. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-state.js.map +1 -1
  759. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live.d.ts +16 -4
  760. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live.d.ts.map +1 -1
  761. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live.js +316 -79
  762. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live.js.map +1 -1
  763. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-read.d.ts.map +1 -1
  764. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-read.js +19 -17
  765. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-read.js.map +1 -1
  766. package/node_modules/@murphai/vault-usecases/dist/usecases/workout.d.ts +20 -7
  767. package/node_modules/@murphai/vault-usecases/dist/usecases/workout.d.ts.map +1 -1
  768. package/node_modules/@murphai/vault-usecases/dist/usecases/workout.js +56 -31
  769. package/node_modules/@murphai/vault-usecases/dist/usecases/workout.js.map +1 -1
  770. package/node_modules/incur/dist/Cli.js +7 -32
  771. package/node_modules/incur/dist/Errors.d.ts +17 -0
  772. package/node_modules/incur/dist/Errors.js +23 -0
  773. package/node_modules/incur/dist/internal/command.d.ts +2 -0
  774. package/node_modules/incur/dist/internal/command.js +2 -6
  775. package/node_modules/incur/src/Cli.ts +11 -32
  776. package/node_modules/incur/src/Errors.ts +36 -0
  777. package/node_modules/incur/src/internal/command.ts +4 -6
  778. package/package.json +4 -4
  779. package/node_modules/@murphai/assistant-engine/skills/nutrition-strategy/references/daily-nutrition-card-safety.md +0 -211
@@ -1,5 +1,7 @@
1
1
  import { resolveJunctionTimeseriesResourcePolicy } from "@murphai/contracts";
2
- import { createImporters, JunctionSparseCalendarRepairNormalizationError, } from "@murphai/importers";
2
+ import { createDeviceProviderSnapshotImportSession, createImporters, JunctionSparseCalendarRepairNormalizationError, normalizeKnownJunctionSourceProviderSlug, } from "@murphai/importers";
3
+ import { JunctionWorkoutStreamTimestampCardinalityError } from "@murphai/importers/device-providers/junction";
4
+ import { normalizeJunctionCanonicalCoverageBoundary } from "@murphai/importers/device-providers/junction-resources";
3
5
  import { normalizeConfiguredDeviceSyncJobInput, normalizeConfiguredDeviceSyncJobRecord, } from "./provider-job-definitions.js";
4
6
  import { buildDeviceSyncTokenCipherOptions, createSecretCodec } from "./local-secret-codec.js";
5
7
  import { deviceSyncError, isDeviceSyncError } from "./errors.js";
@@ -12,7 +14,7 @@ import { isDeviceSyncConnectionSetupPending, isDeviceSyncSourceDisconnectFenced,
12
14
  import { createDeviceSyncRegistry } from "./registry.js";
13
15
  import { addMilliseconds, computeRetryDelayMs, defaultStateDatabasePath, generatePrefixedId, normalizeString, normalizeOriginList, normalizePublicBaseUrl, sha256Text, stringifyJson, toIsoTimestamp, } from "./shared.js";
14
16
  import { SqliteDeviceSyncStore } from "./store.js";
15
- import { DEVICE_SYNC_WEBHOOK_TRACE_COMPLETED, } from "./types.js";
17
+ import { DEVICE_SYNC_CANONICAL_IMPORT_RECEIPT_LIMIT, DEVICE_SYNC_WEBHOOK_TRACE_COMPLETED, } from "./types.js";
16
18
  export { SqliteDeviceSyncStore } from "./store.js";
17
19
  export function resolveDeviceSyncStoreNextJobWakeAt(input) {
18
20
  const store = new SqliteDeviceSyncStore(input.stateDatabasePath ?? defaultStateDatabasePath(input.vaultRoot));
@@ -38,12 +40,35 @@ const DEVICE_SYNC_JOB_YIELD_POLL_MS = 100;
38
40
  // Never retain fewer diagnostics than one hosted pass can produce, and never
39
41
  // regress below the established 100-attempt observability window.
40
42
  export const DEVICE_SYNC_JOB_FAILURE_DIAGNOSTIC_LIMIT = Math.max(100, HOSTED_EXECUTION_DEVICE_SYNC_PASS_JOB_LIMIT);
43
+ export const DEVICE_SYNC_JOB_TIMING_DIAGNOSTIC_LIMIT = Math.max(100, HOSTED_EXECUTION_DEVICE_SYNC_PASS_JOB_LIMIT);
41
44
  const DEVICE_SYNC_CONNECTION_MUTATION_MAX_PENDING = 1;
42
45
  const DEVICE_SYNC_CONNECTION_MUTATION_WAIT_TIMEOUT_MS = 15_000;
43
46
  const DEFAULT_PROVIDER_JOB_BATCH_MAX_JOBS = 50;
44
47
  const DEFAULT_PROVIDER_JOB_BATCH_MAX_ESTIMATED_BYTES = 2 * 1024 * 1024;
45
48
  const DEFAULT_PROVIDER_JOB_BATCH_CANDIDATE_SCAN_LIMIT = 200;
46
49
  const JUNCTION_WORKOUT_STREAM_CANDIDATE_DIAGNOSTIC_LIMIT = resolveJunctionTimeseriesResourcePolicy("workout_stream")?.maxRecordsPerWindow ?? 0;
50
+ const JUNCTION_ECG_DIAGNOSTIC_COUNT_LIMIT = (resolveJunctionTimeseriesResourcePolicy("electrocardiogram_voltage")?.maxSamplesPerWindow ?? 0) + 1;
51
+ const JUNCTION_ECG_BINDING_REASONS = new Set([
52
+ "collection_source_ambiguous",
53
+ "feature_cardinality_mismatch",
54
+ "group_ambiguous",
55
+ "group_collection_invalid",
56
+ "group_envelope_invalid",
57
+ "group_identity_conflict",
58
+ "group_invalid",
59
+ "recording_limit_exceeded",
60
+ "sample_count_mismatch",
61
+ "sample_identity_conflict",
62
+ "sample_invalid",
63
+ "sample_limit_exceeded",
64
+ "sample_normalization_invalid",
65
+ "sample_outside_summary_window",
66
+ "summary_identity_conflict",
67
+ "summary_identity_incomplete",
68
+ "summary_source_inconsistent",
69
+ "summary_window_invalid",
70
+ "summary_windows_ambiguous",
71
+ ]);
47
72
  const DEVICE_SYNC_VALIDATION_SENSITIVE_FIELD_PATTERN = /(?:authorization|bearer|cookie|password|secret|token|api[-_]?key|client[-_]?secret|access[-_]?token|refresh[-_]?token|id[-_]?token|email|phone|address|user(?:name)?|owner|account(?:id)?|external(?:id)?)/iu;
48
73
  const DEVICE_SYNC_VALIDATION_METADATA_FIELDS = Object.freeze([
49
74
  "expected",
@@ -116,6 +141,7 @@ class DeviceSyncServiceController {
116
141
  workerTimer = null;
117
142
  schedulerTimer = null;
118
143
  jobFailureDiagnostics = [];
144
+ jobTimingDiagnostics = [];
119
145
  connectionMutationStates = new Map();
120
146
  constructor(input) {
121
147
  this.vaultRoot = input.config.vaultRoot;
@@ -210,7 +236,7 @@ class DeviceSyncServiceController {
210
236
  }
211
237
  : null;
212
238
  },
213
- upsertConnectionSource: (input) => this.store.upsertConnectionSource(input),
239
+ upsertConnectionSource: (input, options) => this.store.upsertConnectionSource(input, options),
214
240
  listConnectionSources: (input) => this.store.listConnectionSources(input),
215
241
  resolveConnectionSourceAdmissionCandidate: (input) => this.store.listConnectionSources(input)
216
242
  .sort((left, right) => {
@@ -236,15 +262,16 @@ class DeviceSyncServiceController {
236
262
  },
237
263
  hooks: {
238
264
  runConnectionMutation: ({ provider }, operation) => this.runProviderConnectionMutation(provider, operation),
239
- onConnectionEstablished: async ({ account, connection, now, provider, sourceProviderSlug, }) => {
265
+ onConnectionEstablished: async ({ account, connection, connectionStartedAt, now, provider, sourceProviderSlug, }) => {
240
266
  const sourceInstanceKey = provider.provider === "junction" && sourceProviderSlug
241
267
  ? buildJunctionProviderSourceInstanceKey({
242
268
  connectionId: account.id,
243
269
  sourceProviderSlug,
244
270
  })
245
271
  : null;
246
- this.store.commitConnectionEstablished({
272
+ const committed = this.store.commitConnectionEstablished({
247
273
  accountId: account.id,
274
+ expectedSourceLastSeenAt: connectionStartedAt,
248
275
  jobs: this.normalizeJobsForEnqueue(account, connection.initialJobs ?? []),
249
276
  provider: account.provider,
250
277
  source: sourceInstanceKey && sourceProviderSlug
@@ -258,6 +285,14 @@ class DeviceSyncServiceController {
258
285
  }
259
286
  : null,
260
287
  });
288
+ if (sourceInstanceKey && committed === null) {
289
+ throw deviceSyncError({
290
+ code: "CONNECTION_SOURCE_START_STALE",
291
+ message: "Device source state changed while its connection link was starting. Start again.",
292
+ retryable: false,
293
+ httpStatus: 409,
294
+ });
295
+ }
261
296
  await this.ensureWebhookAdminUpkeepAfterConnectionEstablished(provider);
262
297
  return {
263
298
  sourceAdmissionCommitted: true,
@@ -347,6 +382,9 @@ class DeviceSyncServiceController {
347
382
  details: { ...entry.details },
348
383
  }));
349
384
  }
385
+ listJobTimingDiagnostics() {
386
+ return this.jobTimingDiagnostics.map((entry) => ({ ...entry }));
387
+ }
350
388
  start() {
351
389
  if (!this.workerTimer) {
352
390
  void this.runWorkerBatchOnce();
@@ -418,7 +456,13 @@ class DeviceSyncServiceController {
418
456
  }
419
457
  const provider = this.requireProvider(account.provider);
420
458
  const now = this.nowIso();
421
- const scheduledJobs = resolveProviderJobExecutor(provider)?.createScheduledJobs?.(account, now).jobs ?? [];
459
+ const scheduledJobs = resolveProviderJobExecutor(provider)?.createScheduledJobs?.(account, now, {
460
+ findActiveDedupeKeys: (dedupeKeys) => this.store.findActiveJobDedupeKeys({
461
+ accountId: account.id,
462
+ dedupeKeys,
463
+ provider: account.provider,
464
+ }),
465
+ }).jobs ?? [];
422
466
  const jobs = scheduledJobs.length > 0 ? scheduledJobs : [{ kind: "reconcile", priority: 80 }];
423
467
  const queuedJobs = this.enqueueJobs(account, jobs.map((job) => ({
424
468
  ...job,
@@ -513,7 +557,13 @@ class DeviceSyncServiceController {
513
557
  if (!jobExecutor?.createScheduledJobs) {
514
558
  continue;
515
559
  }
516
- const schedule = jobExecutor.createScheduledJobs(account, now);
560
+ const schedule = jobExecutor.createScheduledJobs(account, now, {
561
+ findActiveDedupeKeys: (dedupeKeys) => this.store.findActiveJobDedupeKeys({
562
+ accountId: account.id,
563
+ dedupeKeys,
564
+ provider: account.provider,
565
+ }),
566
+ });
517
567
  queuedJobs.push(...this.enqueueJobs(account, schedule.jobs));
518
568
  this.store.patchAccount(account.id, {
519
569
  nextReconcileAt: schedule.nextReconcileAt ?? null,
@@ -532,6 +582,7 @@ class DeviceSyncServiceController {
532
582
  async runWorkerOnce(accountId) {
533
583
  const result = await this.runWorkerPassOnce({
534
584
  accountId,
585
+ importSession: createDeviceProviderSnapshotImportSession(),
535
586
  maxJobRows: Number.POSITIVE_INFINITY,
536
587
  });
537
588
  return result?.job ?? null;
@@ -551,10 +602,67 @@ class DeviceSyncServiceController {
551
602
  return null;
552
603
  }
553
604
  let activeJobs = [job];
554
- const finishPass = () => ({
555
- job,
556
- processedJobRows: Math.max(1, activeJobs.length),
557
- });
605
+ let connectionSourceReadCount = 0;
606
+ let connectionSourceReadElapsedMs = 0;
607
+ let credentialRefreshCount = 0;
608
+ let credentialRefreshElapsedMs = 0;
609
+ let durableProgressCommitted = false;
610
+ let outcome = "cancelled";
611
+ let providerExecutionElapsedMs = null;
612
+ let providerInventoryRequestCount = 0;
613
+ let providerInventoryRequestElapsedMs = 0;
614
+ let providerResourceRequestCount = 0;
615
+ let providerResourceRequestElapsedMs = 0;
616
+ let snapshotImportCount = 0;
617
+ let snapshotImportElapsedMs = 0;
618
+ let snapshotCanonicalCoreElapsedMs = 0;
619
+ let snapshotCanonicalWriteElapsedMs = 0;
620
+ let snapshotEventIdentityIndexCacheHitCount = 0;
621
+ let snapshotEventIdentityIndexElapsedMs = 0;
622
+ let snapshotNormalizationElapsedMs = 0;
623
+ const finishPass = () => {
624
+ const finishedAt = currentNow();
625
+ const resource = readSafeDiagnosticToken(job.payload.resource);
626
+ this.recordJobTimingDiagnostic({
627
+ at: finishedAt,
628
+ attempts: job.attempts,
629
+ connectionSourceReadCount,
630
+ connectionSourceReadElapsedMs,
631
+ credentialRefreshCount,
632
+ credentialRefreshElapsedMs,
633
+ durableProgressCommitted,
634
+ elapsedMs: nonnegativeDeviceSyncDurationMs(now, finishedAt),
635
+ jobCount: Math.max(1, activeJobs.length),
636
+ jobKind: job.kind,
637
+ outcome,
638
+ provider: job.provider,
639
+ providerExecutionElapsedMs,
640
+ providerInventoryRequestCount,
641
+ providerInventoryRequestElapsedMs,
642
+ providerResourceRequestCount,
643
+ providerResourceRequestElapsedMs,
644
+ providerUnattributedElapsedMs: providerExecutionElapsedMs === null
645
+ ? null
646
+ : Math.max(0, providerExecutionElapsedMs
647
+ - connectionSourceReadElapsedMs
648
+ - credentialRefreshElapsedMs
649
+ - providerInventoryRequestElapsedMs
650
+ - providerResourceRequestElapsedMs
651
+ - snapshotImportElapsedMs),
652
+ ...(resource ? { resource } : {}),
653
+ snapshotImportCount,
654
+ snapshotImportElapsedMs,
655
+ snapshotCanonicalCoreElapsedMs,
656
+ snapshotCanonicalWriteElapsedMs,
657
+ snapshotEventIdentityIndexCacheHitCount,
658
+ snapshotEventIdentityIndexElapsedMs,
659
+ snapshotNormalizationElapsedMs,
660
+ });
661
+ return {
662
+ job,
663
+ processedJobRows: Math.max(1, activeJobs.length),
664
+ };
665
+ };
558
666
  const failClaimedJob = (code, message, retryAt, retryable) => {
559
667
  const failedAt = currentNow();
560
668
  const failureTransition = this.store.failJobIfOwned(job.id, this.workerId, failedAt, code, message, retryAt, retryable);
@@ -566,6 +674,7 @@ class DeviceSyncServiceController {
566
674
  });
567
675
  return false;
568
676
  }
677
+ outcome = "failed";
569
678
  // No summary here: these repo-authored messages can embed the local
570
679
  // account id, and the failure code already names the cause.
571
680
  const failedJobResource = readSafeDiagnosticToken(job.payload.resource);
@@ -601,7 +710,8 @@ class DeviceSyncServiceController {
601
710
  const retainsAcceptedWork = preservesAcceptedCompanionHrv || retainsAcceptedCalendarRefresh;
602
711
  const delayRetainedJobUntilAuthorityReturns = (code, message) => {
603
712
  const delayedAt = currentNow();
604
- this.store.failJobIfOwned(job.id, this.workerId, delayedAt, code, message, addMilliseconds(delayedAt, computeRetryDelayMs(job.attempts)), true, true);
713
+ const transition = this.store.failJobIfOwned(job.id, this.workerId, delayedAt, code, message, addMilliseconds(delayedAt, computeRetryDelayMs(job.attempts)), true, true);
714
+ outcome = transition ? "deferred" : "cancelled";
605
715
  };
606
716
  if (retainsAcceptedCalendarRefresh
607
717
  && !isJunctionSparseCalendarRefreshPayloadValid(job.payload)) {
@@ -633,6 +743,10 @@ class DeviceSyncServiceController {
633
743
  jobId: job.id,
634
744
  });
635
745
  }
746
+ else {
747
+ outcome = "completed";
748
+ durableProgressCommitted = true;
749
+ }
636
750
  return finishPass();
637
751
  }
638
752
  if (storedAccount.status === "reauthorization_required" && retainsAcceptedCalendarRefresh) {
@@ -744,9 +858,26 @@ class DeviceSyncServiceController {
744
858
  const normalizedJobs = activeJobs.map((activeJob) => activeJob.id === normalizedJob.id
745
859
  ? normalizedJob
746
860
  : normalizeConfiguredDeviceSyncJobRecord(provider.provider, activeJob, "execution"));
861
+ let vaultTimeZone;
862
+ if (provider.provider === "junction"
863
+ && this.importer.resolveDeviceProviderSnapshotDefaultTimeZone) {
864
+ try {
865
+ vaultTimeZone = await this.importer.resolveDeviceProviderSnapshotDefaultTimeZone({
866
+ vaultRoot: this.vaultRoot,
867
+ });
868
+ }
869
+ catch {
870
+ // Timezone-dependent authority fails closed; ordinary provider
871
+ // ingestion remains available when vault metadata cannot be read.
872
+ vaultTimeZone = undefined;
873
+ }
874
+ }
875
+ ensureExecutionActive();
876
+ const canonicalImportReceipts = new Map();
747
877
  const jobContext = {
748
878
  account: currentAccount,
749
879
  now,
880
+ ...(vaultTimeZone ? { vaultTimeZone } : {}),
750
881
  signal: jobAbortController.signal,
751
882
  connectionSourceAdmissionMode: this.listConnectionSourcesForJob
752
883
  ? "listed_only"
@@ -755,45 +886,101 @@ class DeviceSyncServiceController {
755
886
  ? { shouldYield: this.shouldYieldJobExecution }
756
887
  : {}),
757
888
  throwIfAborted: assertJobExecutionNotYielded,
758
- importSnapshot: async (snapshot) => {
889
+ recordProviderRequestTiming: (category, elapsedMs) => {
890
+ if (!Number.isFinite(elapsedMs) || elapsedMs < 0) {
891
+ return;
892
+ }
893
+ if (category === "inventory") {
894
+ providerInventoryRequestCount += 1;
895
+ providerInventoryRequestElapsedMs += elapsedMs;
896
+ }
897
+ else {
898
+ providerResourceRequestCount += 1;
899
+ providerResourceRequestElapsedMs += elapsedMs;
900
+ }
901
+ },
902
+ importSnapshot: async (snapshot, options) => {
759
903
  ensureExecutionActive();
760
- const importResult = await this.importer.importDeviceProviderSnapshot({
761
- provider: provider.provider,
762
- snapshot,
763
- vaultRoot: this.vaultRoot,
764
- });
904
+ const importStartedAt = currentNow();
905
+ snapshotImportCount += 1;
906
+ let importResult;
907
+ try {
908
+ importResult = await this.importer.importDeviceProviderSnapshot({
909
+ provider: provider.provider,
910
+ snapshot,
911
+ vaultRoot: this.vaultRoot,
912
+ ...options,
913
+ }, { importSession: input.importSession });
914
+ }
915
+ finally {
916
+ snapshotImportElapsedMs += nonnegativeDeviceSyncDurationMs(importStartedAt, currentNow());
917
+ }
918
+ const importTiming = readDeviceProviderSnapshotImportTiming(importResult);
919
+ if (importTiming) {
920
+ snapshotCanonicalCoreElapsedMs += importTiming.canonicalCoreElapsedMs;
921
+ snapshotCanonicalWriteElapsedMs += importTiming.canonicalWriteElapsedMs;
922
+ snapshotEventIdentityIndexCacheHitCount += importTiming.eventIdentityIndexCacheHit
923
+ ? 1
924
+ : 0;
925
+ snapshotEventIdentityIndexElapsedMs += importTiming.eventIdentityIndexElapsedMs;
926
+ snapshotNormalizationElapsedMs += importTiming.normalizationElapsedMs;
927
+ }
928
+ const canonicalEventCount = readCanonicalDeviceImportEventCount(importResult);
929
+ const junctionCanonicalCoverage = readCanonicalDeviceImportJunctionCoverage(importResult);
930
+ if (junctionCanonicalCoverage && junctionCanonicalCoverage.length > 0) {
931
+ const importCompletedAt = currentNow();
932
+ for (const evidence of junctionCanonicalCoverage) {
933
+ const key = `${evidence.sourceProviderSlug}\u0000${evidence.resource}`;
934
+ if (canonicalImportReceipts.has(key)
935
+ || canonicalImportReceipts.size < DEVICE_SYNC_CANONICAL_IMPORT_RECEIPT_LIMIT) {
936
+ canonicalImportReceipts.set(key, {
937
+ importCompletedAt,
938
+ resource: evidence.resource,
939
+ sourceProviderSlug: evidence.sourceProviderSlug,
940
+ });
941
+ }
942
+ }
943
+ }
765
944
  const canonicalSparseCalendarTargets = readCanonicalDeviceImportSparseCalendarTargets(importResult);
766
945
  const receipt = {
767
- canonicalEventCount: readCanonicalDeviceImportEventCount(importResult),
946
+ canonicalEventCount,
768
947
  canonicalEventDayKeys: readCanonicalDeviceImportEventDayKeys(importResult),
769
948
  canonicalEventExternalRefResourceIds: readCanonicalDeviceImportEventExternalRefResourceIds(importResult),
770
949
  ...(canonicalSparseCalendarTargets.length > 0
771
950
  ? { canonicalSparseCalendarTargets }
772
951
  : {}),
773
952
  durableDeliveryAccepted: true,
953
+ ...(junctionCanonicalCoverage === undefined
954
+ ? {}
955
+ : { junctionCanonicalCoverage }),
774
956
  };
775
957
  return receipt;
776
958
  },
777
959
  upsertConnectionSource: (input) => {
778
960
  ensureExecutionActive();
779
- return this.store.upsertConnectionSource({
780
- ...input,
781
- connectionId: currentAccount.id,
782
- });
961
+ return this.store.upsertConnectionSource({ ...input, connectionId: currentAccount.id }, { preserveDisconnected: provider.provider === "junction" });
783
962
  },
784
963
  listConnectionSources: async (input = {}) => {
785
964
  ensureExecutionActive();
786
- const sources = this.listConnectionSourcesForJob
787
- ? await this.listConnectionSourcesForJob({
788
- accountId: currentAccount.id,
789
- provider: currentAccount.provider,
790
- signal: jobAbortController.signal,
791
- ...input,
792
- })
793
- : this.store.listConnectionSources({
794
- ...input,
795
- connectionId: currentAccount.id,
796
- });
965
+ const sourceReadStartedAt = currentNow();
966
+ connectionSourceReadCount += 1;
967
+ let sources;
968
+ try {
969
+ sources = this.listConnectionSourcesForJob
970
+ ? await this.listConnectionSourcesForJob({
971
+ accountId: currentAccount.id,
972
+ provider: currentAccount.provider,
973
+ signal: jobAbortController.signal,
974
+ ...input,
975
+ })
976
+ : this.store.listConnectionSources({
977
+ ...input,
978
+ connectionId: currentAccount.id,
979
+ });
980
+ }
981
+ finally {
982
+ connectionSourceReadElapsedMs += nonnegativeDeviceSyncDurationMs(sourceReadStartedAt, currentNow());
983
+ }
797
984
  ensureExecutionActive();
798
985
  return sources;
799
986
  },
@@ -816,7 +1003,15 @@ class DeviceSyncServiceController {
816
1003
  httpStatus: 409,
817
1004
  });
818
1005
  }
819
- const refreshed = await refreshTokens(currentAccount);
1006
+ const credentialRefreshStartedAt = currentNow();
1007
+ credentialRefreshCount += 1;
1008
+ let refreshed;
1009
+ try {
1010
+ refreshed = await refreshTokens(currentAccount);
1011
+ }
1012
+ finally {
1013
+ credentialRefreshElapsedMs += nonnegativeDeviceSyncDurationMs(credentialRefreshStartedAt, currentNow());
1014
+ }
820
1015
  ensureJobLeasesOwned();
821
1016
  ensureAccountActive();
822
1017
  const updated = this.store.updateAccountTokens(currentAccount.id, this.encryptTokens(currentAccount, refreshed), disconnectGeneration);
@@ -844,13 +1039,22 @@ class DeviceSyncServiceController {
844
1039
  },
845
1040
  logger: this.logger,
846
1041
  };
847
- const result = normalizedJobs.length > 1 && jobExecutor.batch
848
- ? await jobExecutor.batch.execute(jobContext, normalizedJobs)
849
- : await jobExecutor.executeJob(jobContext, normalizedJob);
1042
+ const providerExecutionStartedAt = currentNow();
1043
+ let result;
1044
+ try {
1045
+ result = normalizedJobs.length > 1 && jobExecutor.batch
1046
+ ? await jobExecutor.batch.execute(jobContext, normalizedJobs)
1047
+ : await jobExecutor.executeJob(jobContext, normalizedJob);
1048
+ }
1049
+ finally {
1050
+ providerExecutionElapsedMs = nonnegativeDeviceSyncDurationMs(providerExecutionStartedAt, currentNow());
1051
+ }
850
1052
  ensureJobLeasesOwned();
851
1053
  ensureAccountActive();
852
1054
  if (preservesAcceptedCompanionHrv && !isOriginalActiveAccountExecutionCurrent()) {
853
- this.store.completeJobsIfOwned(activeJobs.map((activeJob) => activeJob.id), this.workerId, currentNow());
1055
+ const completed = this.store.completeJobsIfOwned(activeJobs.map((activeJob) => activeJob.id), this.workerId, currentNow());
1056
+ outcome = completed ? "completed" : "cancelled";
1057
+ durableProgressCommitted = completed;
854
1058
  return finishPass();
855
1059
  }
856
1060
  const successOptions = {
@@ -873,6 +1077,8 @@ class DeviceSyncServiceController {
873
1077
  const scheduledJobs = this.normalizeJobsForEnqueue(storedAccount, result.scheduledJobs ?? []);
874
1078
  const completed = this.store.completeJobsMarkSyncSucceededAndEnqueueJobs({
875
1079
  accountId: storedAccount.id,
1080
+ canonicalImportReceipts: [...canonicalImportReceipts.values()].sort((left, right) => left.sourceProviderSlug.localeCompare(right.sourceProviderSlug)
1081
+ || left.resource.localeCompare(right.resource)),
876
1082
  completedAt: currentNow(),
877
1083
  disconnectGeneration,
878
1084
  jobIds: activeJobs.map((activeJob) => activeJob.id),
@@ -886,6 +1092,8 @@ class DeviceSyncServiceController {
886
1092
  releaseActiveJobsIfCurrentAccountActive(currentNow());
887
1093
  return finishPass();
888
1094
  }
1095
+ outcome = "completed";
1096
+ durableProgressCommitted = true;
889
1097
  return finishPass();
890
1098
  }
891
1099
  catch (error) {
@@ -898,6 +1106,7 @@ class DeviceSyncServiceController {
898
1106
  jobCount: activeJobs.length,
899
1107
  released,
900
1108
  });
1109
+ outcome = "yielded";
901
1110
  return finishPass();
902
1111
  }
903
1112
  if (error instanceof DeviceSyncJobExecutionCancelledError) {
@@ -909,6 +1118,7 @@ class DeviceSyncServiceController {
909
1118
  jobId: job.id,
910
1119
  ...(released > 0 ? { released } : {}),
911
1120
  });
1121
+ outcome = "cancelled";
912
1122
  return finishPass();
913
1123
  }
914
1124
  const timeseriesProgress = error instanceof JunctionTimeseriesProgressError
@@ -921,6 +1131,7 @@ class DeviceSyncServiceController {
921
1131
  payload: {
922
1132
  ...job.payload,
923
1133
  windowStart: timeseriesProgress.windowStart,
1134
+ workoutStreamEmptySeen: timeseriesProgress.workoutStreamEmptySeen || undefined,
924
1135
  workoutStreamCursor: timeseriesProgress.workoutStreamCursor ?? undefined,
925
1136
  },
926
1137
  }, "retry progress").payload
@@ -956,6 +1167,8 @@ class DeviceSyncServiceController {
956
1167
  if (failureTransitions.length === 0) {
957
1168
  return finishPass();
958
1169
  }
1170
+ outcome = "failed";
1171
+ durableProgressCommitted = timeseriesProgress !== null;
959
1172
  const diagnosticTransition = failureTransitions.find(({ activeJob }) => activeJob.id === job.id)
960
1173
  ?? failureTransitions[0];
961
1174
  if (!diagnosticTransition) {
@@ -1020,18 +1233,21 @@ class DeviceSyncServiceController {
1020
1233
  stopYieldPolling();
1021
1234
  }
1022
1235
  }
1023
- async drainWorker(limit = this.workerBatchSize, accountId) {
1236
+ async drainWorker(limit = this.workerBatchSize, accountId, options = {}) {
1024
1237
  const maxJobRows = normalizeProviderJobBatchLimit(limit, this.workerBatchSize);
1025
1238
  let processedJobRows = 0;
1239
+ const importSession = createDeviceProviderSnapshotImportSession();
1026
1240
  while (processedJobRows < maxJobRows) {
1027
1241
  const result = await this.runWorkerPassOnce({
1028
1242
  accountId,
1243
+ importSession,
1029
1244
  maxJobRows: maxJobRows - processedJobRows,
1030
1245
  });
1031
1246
  if (!result) {
1032
1247
  break;
1033
1248
  }
1034
1249
  processedJobRows += result.processedJobRows;
1250
+ options.onProcessedJobRows?.(processedJobRows);
1035
1251
  }
1036
1252
  return processedJobRows;
1037
1253
  }
@@ -1144,6 +1360,12 @@ class DeviceSyncServiceController {
1144
1360
  this.jobFailureDiagnostics.splice(0, this.jobFailureDiagnostics.length - DEVICE_SYNC_JOB_FAILURE_DIAGNOSTIC_LIMIT);
1145
1361
  }
1146
1362
  }
1363
+ recordJobTimingDiagnostic(entry) {
1364
+ this.jobTimingDiagnostics.push({ ...entry });
1365
+ if (this.jobTimingDiagnostics.length > DEVICE_SYNC_JOB_TIMING_DIAGNOSTIC_LIMIT) {
1366
+ this.jobTimingDiagnostics.splice(0, this.jobTimingDiagnostics.length - DEVICE_SYNC_JOB_TIMING_DIAGNOSTIC_LIMIT);
1367
+ }
1368
+ }
1147
1369
  requireStoredAccount(accountId) {
1148
1370
  const account = this.store.getAccountById(accountId);
1149
1371
  if (!account) {
@@ -1296,8 +1518,11 @@ class DeviceSyncServiceController {
1296
1518
  export function createDefaultImporterPort() {
1297
1519
  const importers = createImporters();
1298
1520
  return {
1299
- importDeviceProviderSnapshot(input) {
1300
- return importers.importDeviceProviderSnapshot(input);
1521
+ importDeviceProviderSnapshot(input, options) {
1522
+ return importers.importDeviceProviderSnapshot(input, options);
1523
+ },
1524
+ resolveDeviceProviderSnapshotDefaultTimeZone(input) {
1525
+ return importers.resolveDeviceProviderSnapshotDefaultTimeZone(input);
1301
1526
  },
1302
1527
  };
1303
1528
  }
@@ -1314,6 +1539,7 @@ export function createDeviceSyncService(input) {
1314
1539
  listAccounts: (input) => controller.listAccounts(input),
1315
1540
  getAccount: (accountId) => controller.getAccount(accountId),
1316
1541
  listJobFailureDiagnostics: () => controller.listJobFailureDiagnostics(),
1542
+ listJobTimingDiagnostics: () => controller.listJobTimingDiagnostics(),
1317
1543
  start: () => controller.start(),
1318
1544
  stop: () => controller.stop(),
1319
1545
  close: () => controller.close(),
@@ -1327,10 +1553,18 @@ export function createDeviceSyncService(input) {
1327
1553
  getNextWakeAt: (now) => controller.getNextWakeAt(now),
1328
1554
  runSchedulerOnce: (accountId) => controller.runSchedulerOnce(accountId),
1329
1555
  runWorkerOnce: (accountId) => controller.runWorkerOnce(accountId),
1330
- drainWorker: (limit, accountId) => controller.drainWorker(limit, accountId),
1556
+ drainWorker: (limit, accountId, options) => controller.drainWorker(limit, accountId, options),
1331
1557
  });
1332
1558
  return service;
1333
1559
  }
1560
+ function nonnegativeDeviceSyncDurationMs(startAt, endAt) {
1561
+ const startMs = Date.parse(startAt);
1562
+ const endMs = Date.parse(endAt);
1563
+ if (!Number.isFinite(startMs) || !Number.isFinite(endMs) || endMs < startMs) {
1564
+ return 0;
1565
+ }
1566
+ return endMs - startMs;
1567
+ }
1334
1568
  function earliestIsoTimestamp(...values) {
1335
1569
  return values
1336
1570
  .filter((value) => typeof value === "string" && value.length > 0)
@@ -1430,10 +1664,29 @@ function connectionChangedDuringDisconnectError() {
1430
1664
  });
1431
1665
  }
1432
1666
  function normalizeExecutionError(error) {
1667
+ if (error instanceof JunctionWorkoutStreamTimestampCardinalityError) {
1668
+ return {
1669
+ code: "SYNC_JOB_FAILED",
1670
+ details: compactFailureDiagnostics({
1671
+ failureErrorName: readSafeDiagnosticToken(error.name),
1672
+ junctionWorkoutStreamMaxTimestampCount: error.diagnostic.maxTimestampCount,
1673
+ junctionWorkoutStreamTimestampCardinalityKind: readSafeDiagnosticToken(error.diagnostic.kind),
1674
+ junctionWorkoutStreamTimestampCount: error.diagnostic.timestampCount,
1675
+ }),
1676
+ message: summarizeExecutionErrorMessage(error),
1677
+ retryable: false,
1678
+ };
1679
+ }
1433
1680
  if (error instanceof JunctionSparseCalendarRepairNormalizationError) {
1434
1681
  return {
1435
1682
  code: error.code,
1436
- details: {},
1683
+ details: compactFailureDiagnostics({
1684
+ normalizationFailureReason: readSafeDiagnosticToken(error.diagnostic.reason),
1685
+ normalizationRowOrdinal: error.diagnostic.rowOrdinal,
1686
+ normalizationSourceProvider: readSafeDiagnosticToken(normalizeKnownJunctionSourceProviderSlug(error.diagnostic.sourceProvider)),
1687
+ normalizationTimestampKind: readSafeDiagnosticToken(error.diagnostic.timestampKind),
1688
+ normalizationTimestampSemantics: readSafeDiagnosticToken(error.diagnostic.timestampSemantics),
1689
+ }),
1437
1690
  message: error.message,
1438
1691
  retryable: true,
1439
1692
  };
@@ -1475,6 +1728,7 @@ function buildDeviceSyncErrorFailureDiagnostics(error) {
1475
1728
  const cause = toPlainRecord(error.cause);
1476
1729
  const providerRequestEndpointKind = readSafeDiagnosticToken(error.details?.requestEndpointKind);
1477
1730
  const workoutCandidateContext = readSafeWorkoutCandidateFailureContext(error, providerRequestEndpointKind);
1731
+ const junctionEcgContext = readSafeJunctionEcgFailureContext(error);
1478
1732
  return compactFailureDiagnostics({
1479
1733
  failureCauseCode: readSafeDiagnosticToken(cause?.code),
1480
1734
  failureCauseName: readSafeDiagnosticToken(cause?.name),
@@ -1486,6 +1740,7 @@ function buildDeviceSyncErrorFailureDiagnostics(error) {
1486
1740
  providerRequestBodyFieldCount: readSafeDiagnosticNumber(error.details?.requestBodyFieldCount),
1487
1741
  providerRequestBodyFieldNames: readSafeDiagnosticToken(error.details?.requestBodyFieldNames),
1488
1742
  providerRequestBodyKind: readSafeDiagnosticToken(error.details?.requestBodyKind),
1743
+ ...junctionEcgContext,
1489
1744
  ...workoutCandidateContext,
1490
1745
  providerRequestContentType: readSafeDiagnosticToken(error.details?.requestContentType),
1491
1746
  providerRequestCredentialPresent: readSafeDiagnosticBoolean(error.details?.requestCredentialPresent),
@@ -1575,6 +1830,32 @@ function readSafeWorkoutCandidateFailureContext(error, providerRequestEndpointKi
1575
1830
  providerRequestCandidateOrdinal: candidateOrdinal,
1576
1831
  };
1577
1832
  }
1833
+ function readSafeJunctionEcgFailureContext(error) {
1834
+ if (error.code !== "JUNCTION_ECG_RECORDING_BINDING_INCOMPLETE") {
1835
+ return {};
1836
+ }
1837
+ const reason = readSafeDiagnosticToken(error.details?.reason);
1838
+ if (!reason || !JUNCTION_ECG_BINDING_REASONS.has(reason)) {
1839
+ return {};
1840
+ }
1841
+ return compactFailureDiagnostics({
1842
+ junctionEcgActualRecordingCount: readSafeJunctionEcgDiagnosticCount(error.details?.actualRecordingCount),
1843
+ junctionEcgActualSampleCount: readSafeJunctionEcgDiagnosticCount(error.details?.actualSampleCount),
1844
+ junctionEcgBindingReason: reason,
1845
+ junctionEcgExpectedRecordingCount: readSafeJunctionEcgDiagnosticCount(error.details?.expectedRecordingCount),
1846
+ junctionEcgExpectedSampleCount: readSafeJunctionEcgDiagnosticCount(error.details?.expectedSampleCount),
1847
+ junctionEcgMaxRecordingCount: readSafeJunctionEcgDiagnosticCount(error.details?.maxRecordingCount),
1848
+ junctionEcgMaxSampleCount: readSafeJunctionEcgDiagnosticCount(error.details?.maxSampleCount),
1849
+ });
1850
+ }
1851
+ function readSafeJunctionEcgDiagnosticCount(value) {
1852
+ return typeof value === "number"
1853
+ && Number.isSafeInteger(value)
1854
+ && value >= 0
1855
+ && value <= JUNCTION_ECG_DIAGNOSTIC_COUNT_LIMIT
1856
+ ? value
1857
+ : null;
1858
+ }
1578
1859
  function readSafeWorkoutCandidateAliasSource(value) {
1579
1860
  return value === "id"
1580
1861
  || value === "multiple_equal"
@@ -1694,6 +1975,35 @@ function toPlainRecord(value) {
1694
1975
  }
1695
1976
  return value;
1696
1977
  }
1978
+ function readDeviceProviderSnapshotImportTiming(value) {
1979
+ const timing = toPlainRecord(toPlainRecord(value)?.deviceProviderSnapshotImportTiming);
1980
+ if (!timing || typeof timing.eventIdentityIndexCacheHit !== "boolean") {
1981
+ return null;
1982
+ }
1983
+ const readDuration = (field) => {
1984
+ const duration = timing[field];
1985
+ return typeof duration === "number" && Number.isFinite(duration) && duration >= 0
1986
+ ? duration
1987
+ : null;
1988
+ };
1989
+ const canonicalCoreElapsedMs = readDuration("canonicalCoreElapsedMs");
1990
+ const canonicalWriteElapsedMs = readDuration("canonicalWriteElapsedMs");
1991
+ const eventIdentityIndexElapsedMs = readDuration("eventIdentityIndexElapsedMs");
1992
+ const normalizationElapsedMs = readDuration("normalizationElapsedMs");
1993
+ if (canonicalCoreElapsedMs === null
1994
+ || canonicalWriteElapsedMs === null
1995
+ || eventIdentityIndexElapsedMs === null
1996
+ || normalizationElapsedMs === null) {
1997
+ return null;
1998
+ }
1999
+ return {
2000
+ canonicalCoreElapsedMs,
2001
+ canonicalWriteElapsedMs,
2002
+ eventIdentityIndexCacheHit: timing.eventIdentityIndexCacheHit,
2003
+ eventIdentityIndexElapsedMs,
2004
+ normalizationElapsedMs,
2005
+ };
2006
+ }
1697
2007
  function readCanonicalDeviceImportEventCount(value) {
1698
2008
  const record = toPlainRecord(value);
1699
2009
  return record && Array.isArray(record.events) ? record.events.length : 0;
@@ -1748,6 +2058,37 @@ function readCanonicalDeviceImportEventExternalRefResourceIds(value) {
1748
2058
  : [];
1749
2059
  });
1750
2060
  }
2061
+ function readCanonicalDeviceImportJunctionCoverage(value) {
2062
+ const result = toPlainRecord(value);
2063
+ if (!result || !Array.isArray(result.junctionCanonicalCoverage)) {
2064
+ return undefined;
2065
+ }
2066
+ return result.junctionCanonicalCoverage.flatMap((entry) => {
2067
+ const evidence = toPlainRecord(entry);
2068
+ const resource = typeof evidence?.resource === "string" ? evidence.resource : "";
2069
+ const coverageBoundary = normalizeJunctionCanonicalCoverageBoundary(resource, evidence?.coverageBoundary);
2070
+ if (!evidence
2071
+ || !coverageBoundary
2072
+ || !resource
2073
+ || typeof evidence.sourceProviderSlug !== "string") {
2074
+ return [];
2075
+ }
2076
+ const coverageFinalizedAt = typeof evidence.coverageFinalizedAt === "string"
2077
+ && Number.isFinite(Date.parse(evidence.coverageFinalizedAt))
2078
+ && new Date(Date.parse(evidence.coverageFinalizedAt)).toISOString()
2079
+ === evidence.coverageFinalizedAt
2080
+ ? evidence.coverageFinalizedAt
2081
+ : null;
2082
+ return [{
2083
+ coverageBoundary,
2084
+ ...(coverageFinalizedAt
2085
+ ? { coverageFinalizedAt }
2086
+ : {}),
2087
+ resource,
2088
+ sourceProviderSlug: evidence.sourceProviderSlug,
2089
+ }];
2090
+ });
2091
+ }
1751
2092
  function readCanonicalDeviceImportSparseCalendarTargets(value) {
1752
2093
  const record = toPlainRecord(value);
1753
2094
  if (!record || !Array.isArray(record.affectedSparseCalendarTargets)) {