@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,5 @@
1
- import { type WorkoutSessionDetailV1 } from '@murphai/contracts';
2
- import { type ApplyLiveWorkoutMemberActionInput, type ApplyLiveWorkoutMemberActionResult, type AddLiveWorkoutExerciseInput, type ClearLiveWorkoutSetInput, type FinishLiveWorkoutInput, type LiveWorkoutLookupInput, type LogLiveWorkoutSetInput, type StartLiveWorkoutInput } from './workout-live-model.js';
1
+ import { type WorkoutLiveSnapshotMemberActionResultV1, type WorkoutLiveSnapshotMemberActionV1, type WorkoutSessionDetailV1 } from '@murphai/contracts';
2
+ import { type ApplyLiveWorkoutMemberActionInput, type ApplyLiveWorkoutMemberActionResult, type AddLiveWorkoutExerciseInput, type ClearLiveWorkoutSetInput, type FinishLiveWorkoutInput, type LogLiveWorkoutSetInput, type SetLiveWorkoutExerciseRepsInput, type StartLiveWorkoutInput } from './workout-live-model.js';
3
3
  export * from './workout-live-model.js';
4
4
  export declare function readLiveWorkoutCardEditor(input: {
5
5
  presentation: WorkoutSessionDetailV1;
@@ -9,6 +9,16 @@ export declare function readLiveWorkoutCardEditor(input: {
9
9
  editor: import("@murphai/contracts").WorkoutSessionEditorProjectionV1;
10
10
  workout: WorkoutSessionDetailV1;
11
11
  } | null>;
12
+ export declare function readLiveWorkoutCardSnapshot(input: {
13
+ action: WorkoutLiveSnapshotMemberActionV1;
14
+ vault: string;
15
+ }): Promise<{
16
+ result: WorkoutLiveSnapshotMemberActionResultV1;
17
+ status: 'unchanged';
18
+ } | {
19
+ reason: 'workout_changed';
20
+ status: 'rejected';
21
+ }>;
12
22
  export declare function applyLiveWorkoutMemberAction(input: ApplyLiveWorkoutMemberActionInput): Promise<ApplyLiveWorkoutMemberActionResult>;
13
23
  export declare function startLiveWorkout(input: StartLiveWorkoutInput): Promise<{
14
24
  vault: string;
@@ -80,6 +90,8 @@ export declare function startLiveWorkout(input: StartLiveWorkoutInput): Promise<
80
90
  mode?: "assisted_bodyweight" | "bodyweight" | "cardio" | "duration" | "weight_reps" | "weighted_bodyweight" | undefined;
81
91
  unitOverride?: "kg" | "lb" | undefined;
82
92
  note?: string | undefined;
93
+ memberRepsPerSet?: number | undefined;
94
+ setPlanIsFinite?: boolean | undefined;
83
95
  sets: {
84
96
  order: number;
85
97
  type?: "dropset" | "failure" | "normal" | "warmup" | undefined;
@@ -99,11 +111,11 @@ export declare function startLiveWorkout(input: StartLiveWorkoutInput): Promise<
99
111
  manifestFile: string | null;
100
112
  note: string;
101
113
  }>;
102
- export declare function showActiveLiveWorkout(input: LiveWorkoutLookupInput): Promise<{
114
+ export declare function addLiveWorkoutExercise(input: AddLiveWorkoutExerciseInput): Promise<{
103
115
  vault: string;
104
116
  entity: import("../helpers.ts").CommandShowEntity;
105
117
  }>;
106
- export declare function addLiveWorkoutExercise(input: AddLiveWorkoutExerciseInput): Promise<{
118
+ export declare function setLiveWorkoutExerciseReps(input: SetLiveWorkoutExerciseRepsInput): Promise<{
107
119
  vault: string;
108
120
  entity: import("../helpers.ts").CommandShowEntity;
109
121
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"workout-live.d.ts","sourceRoot":"","sources":["../../src/usecases/workout-live.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,sBAAsB,EAM5B,MAAM,oBAAoB,CAAA;AAU3B,OAAO,EAEL,KAAK,iCAAiC,EACtC,KAAK,kCAAkC,EACvC,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAK3B,MAAM,yBAAyB,CAAA;AAqBhC,cAAc,yBAAyB,CAAA;AAEvC,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,YAAY,EAAE,sBAAsB,CAAA;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB;;;UAYA;AAKD,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,iCAAiC,GACvC,OAAO,CAAC,kCAAkC,CAAC,CAU7C;AA8WD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAIlE;AA2FD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,sBAAsB;;;GAExE;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B;;;GAKnC;AA6DD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB;;;GAIpE;AA0DD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB;;;GAIxE;AAiCD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB;;;GAIpE"}
1
+ {"version":3,"file":"workout-live.d.ts","sourceRoot":"","sources":["../../src/usecases/workout-live.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uCAAuC,EAC5C,KAAK,iCAAiC,EAMtC,KAAK,sBAAsB,EAQ5B,MAAM,oBAAoB,CAAA;AAc3B,OAAO,EAEL,KAAK,iCAAiC,EACtC,KAAK,kCAAkC,EACvC,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAE3B,KAAK,+BAA+B,EACpC,KAAK,qBAAqB,EAQ3B,MAAM,yBAAyB,CAAA;AAqBhC,cAAc,yBAAyB,CAAA;AAEvC,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,YAAY,EAAE,sBAAsB,CAAA;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB;;;UAYA;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,MAAM,EAAE,iCAAiC,CAAA;IACzC,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,CACP;IACE,MAAM,EAAE,uCAAuC,CAAA;IAC/C,MAAM,EAAE,WAAW,CAAA;CACpB,GACD;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CACpD,CAsBA;AA+CD,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,iCAAiC,GACvC,OAAO,CAAC,kCAAkC,CAAC,CA+B7C;AAmhBD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFlE;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B;;;GAMnC;AA+DD,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,+BAA+B;;;GAMvC;AAoDD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB;;;GAKpE;AAiGD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB;;;GAKxE;AAkCD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB;;;GAIpE"}
@@ -1,24 +1,79 @@
1
- import { memberActionIdV1Schema, workoutLiveApplyMemberActionV1Schema, workoutSessionSchema, workoutTemplateSchema, } from '@murphai/contracts';
1
+ import { memberActionIdV1Schema, workoutLiveApplyMemberActionV1Schema, workoutLiveSnapshotMemberActionV1Schema, workoutSessionSchema, workoutTemplateSchema, } from '@murphai/contracts';
2
2
  import { VaultCliError } from '@murphai/operator-config/vault-cli-errors';
3
- import { deriveWorkoutActionBinding, deriveWorkoutSetRemovalBinding, hasAmbiguousWorkoutActionExerciseCoordinates, } from '@murphai/operator-config/workout-action-binding';
3
+ import { deriveWorkoutSetRemovalBinding, hasAmbiguousWorkoutActionExerciseCoordinates, workoutActionBindingMatchesCurrentState, } from '@murphai/operator-config/workout-action-binding';
4
+ import { encodeWorkoutSessionSnapshotAppCardUrl } from '@murphai/operator-config/assistant-response-cards';
4
5
  import { showWorkoutFormat } from './workout-format.js';
5
- import { addStructuredWorkoutRecord, editWorkoutRecord } from './workout.js';
6
- import { LIVE_WORKOUT_SOURCE_APP, buildLiveWorkoutCardEditor, buildLiveWorkoutSessionFromTemplate, elapsedDurationMinutes, hasLoggedWorkoutSet, } from './workout-live-model.js';
7
- import { assertTargetableLiveWorkout, compactSetPatch, findActiveLiveWorkouts, findLiveWorkoutsForMemberAction, normalizeLiveWorkoutActivityType, normalizeOptionalText, normalizeWorkoutTimestamp, optionalString, parseShownWorkout, requireLiveWorkoutSetOrder, requireNonEmptyText, requireString, resolveExerciseIndex, resolveLiveWorkout, updateLiveWorkoutExercises, updateLiveWorkoutExercisesAfterValidatedSetRemoval, withLiveWorkoutMutationLock, } from './workout-live-state.js';
6
+ import { addStructuredWorkoutRecord, editWorkoutRecord, } from './workout.js';
7
+ import { LIVE_WORKOUT_SOURCE_APP, buildLiveWorkoutCardEditor, buildLiveWorkoutCardSnapshot, buildLiveWorkoutSessionFromTemplate, elapsedDurationMinutes, hasCompletedFiniteLiveWorkoutPlan, hasLoggedWorkoutSet, isOpenLiveWorkout, } from './workout-live-model.js';
8
+ import { assertTargetableLiveWorkout, compactSetPatch, findLiveWorkoutActionTargets, findLiveWorkoutRefreshTargets, normalizeLiveWorkoutActivityType, normalizeOptionalText, normalizeWorkoutTimestamp, optionalString, parseShownWorkout, requireLiveWorkoutSetOrder, requireNonEmptyText, requireString, resolveExerciseIndex, resolveLiveWorkout, updateLiveWorkoutExercises, withLiveWorkoutMutationLock, } from './workout-live-state.js';
8
9
  export * from './workout-live-model.js';
9
10
  export async function readLiveWorkoutCardEditor(input) {
10
11
  const shown = await resolveLiveWorkout({
11
12
  vault: input.vault,
12
13
  workoutId: input.workoutId,
13
- }, { requireActive: true });
14
+ }, { requireOpen: true });
14
15
  const workout = parseShownWorkout(shown);
15
- assertTargetableLiveWorkout(workout, `Workout ${shown.entity.id}`);
16
+ assertTargetableLiveWorkout(workout);
16
17
  return buildLiveWorkoutCardEditor({
17
18
  presentation: input.presentation,
18
19
  workout,
19
20
  workoutId: shown.entity.id,
20
21
  });
21
22
  }
23
+ export async function readLiveWorkoutCardSnapshot(input) {
24
+ if (!workoutLiveSnapshotMemberActionV1Schema.safeParse(input.action).success) {
25
+ return { reason: 'workout_changed', status: 'rejected' };
26
+ }
27
+ const targets = await findLiveWorkoutRefreshTargets(input.vault, input.action.workoutBinding);
28
+ if (targets.length !== 1) {
29
+ return { reason: 'workout_changed', status: 'rejected' };
30
+ }
31
+ const cardUrl = buildLiveWorkoutMemberActionCardUrl({
32
+ presentation: input.action.presentation,
33
+ shown: targets[0],
34
+ });
35
+ if (cardUrl === null) {
36
+ return { reason: 'workout_changed', status: 'rejected' };
37
+ }
38
+ return {
39
+ result: { cardUrl, kind: 'workout.live.snapshot', version: 1 },
40
+ status: 'unchanged',
41
+ };
42
+ }
43
+ function buildLiveWorkoutMemberActionCardUrl(input) {
44
+ try {
45
+ const snapshot = buildLiveWorkoutCardSnapshot({
46
+ presentation: input.presentation.workout,
47
+ workout: parseShownWorkout(input.shown),
48
+ workoutId: input.shown.entity.id,
49
+ });
50
+ if (snapshot === null)
51
+ return null;
52
+ return encodeWorkoutSessionSnapshotAppCardUrl({
53
+ ...input.presentation,
54
+ ...(snapshot.editor === null ? {} : { editor: snapshot.editor }),
55
+ workout: snapshot.workout,
56
+ });
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ function buildLiveWorkoutApplySuccess(input) {
63
+ if (input.action.presentation === undefined) {
64
+ return { status: input.status };
65
+ }
66
+ const cardUrl = buildLiveWorkoutMemberActionCardUrl({
67
+ presentation: input.action.presentation,
68
+ shown: input.shown,
69
+ });
70
+ return cardUrl === null
71
+ ? { status: input.status }
72
+ : {
73
+ result: { cardUrl, kind: 'workout.live.apply', version: 1 },
74
+ status: input.status,
75
+ };
76
+ }
22
77
  const MAX_LIVE_WORKOUT_EXERCISES = 100;
23
78
  const MAX_LIVE_WORKOUT_SETS_PER_EXERCISE = 150;
24
79
  export async function applyLiveWorkoutMemberAction(input) {
@@ -26,28 +81,45 @@ export async function applyLiveWorkoutMemberAction(input) {
26
81
  || !memberActionIdV1Schema.safeParse(input.actionId).success) {
27
82
  return { reason: 'workout_changed', status: 'rejected' };
28
83
  }
29
- return withLiveWorkoutMutationLock(input.vault, () => applyLiveWorkoutMemberActionWithLockHeld(input));
30
- }
31
- async function applyLiveWorkoutMemberActionWithLockHeld(input) {
32
- const candidates = await findLiveWorkoutsForMemberAction(input.vault, input.actionId);
33
- if (candidates.exactReplays.length > 0) {
34
- if (candidates.exactReplays.length !== 1) {
84
+ const targets = await findLiveWorkoutActionTargets(input.vault, input.actionId, input.action.expectedWorkout.actionBinding);
85
+ if (targets.exactReplays.length > 0) {
86
+ if (targets.exactReplays.length !== 1) {
35
87
  return { reason: 'workout_changed', status: 'rejected' };
36
88
  }
37
- return { status: 'unchanged' };
38
- }
39
- const active = candidates.active;
40
- if (active.length === 0) {
41
- return { reason: 'no_active_workout', status: 'rejected' };
89
+ return buildLiveWorkoutApplySuccess({
90
+ action: input.action,
91
+ shown: targets.exactReplays[0],
92
+ status: 'unchanged',
93
+ });
42
94
  }
43
- if (active.length > 1) {
44
- return { reason: 'multiple_active_workouts', status: 'rejected' };
95
+ if (targets.bindingMatches.length !== 1) {
96
+ return { reason: 'workout_changed', status: 'rejected' };
45
97
  }
46
- const shown = active[0];
98
+ const workoutId = targets.bindingMatches[0].entity.id;
99
+ return withLiveWorkoutMutationLock(input.vault, workoutId, () => applyLiveWorkoutMemberActionWithLockHeld(input, workoutId));
100
+ }
101
+ async function applyLiveWorkoutMemberActionWithLockHeld(input, workoutId) {
102
+ let shown;
47
103
  let workout;
104
+ let acceptedAt;
48
105
  try {
106
+ shown = await resolveLiveWorkout({
107
+ vault: input.vault,
108
+ workoutId,
109
+ });
49
110
  workout = parseShownWorkout(shown);
50
- assertTargetableLiveWorkout(workout, `Workout ${shown.entity.id}`);
111
+ if (workout.lastMemberActionId === input.actionId) {
112
+ return buildLiveWorkoutApplySuccess({
113
+ action: input.action,
114
+ shown,
115
+ status: 'unchanged',
116
+ });
117
+ }
118
+ if (!isOpenLiveWorkout(workout)) {
119
+ return { reason: 'workout_changed', status: 'rejected' };
120
+ }
121
+ assertTargetableLiveWorkout(workout);
122
+ acceptedAt = normalizeWorkoutTimestamp(input.acceptedAt, 'acceptedAt');
51
123
  }
52
124
  catch {
53
125
  return { reason: 'workout_changed', status: 'rejected' };
@@ -55,18 +127,16 @@ async function applyLiveWorkoutMemberActionWithLockHeld(input) {
55
127
  if (hasAmbiguousWorkoutActionExerciseCoordinates(workout)) {
56
128
  return { reason: 'workout_changed', status: 'rejected' };
57
129
  }
58
- if (input.action.expectedWorkout.actionBinding
59
- !== deriveWorkoutActionBinding(shown.entity.id, workout)) {
130
+ if (!workoutActionBindingMatchesCurrentState(shown.entity.id, workout, input.action.expectedWorkout.actionBinding)) {
60
131
  return { reason: 'workout_changed', status: 'rejected' };
61
132
  }
62
- const acceptedAtMs = Date.parse(input.acceptedAt);
63
- if (!Number.isFinite(acceptedAtMs)
64
- || typeof workout.startedAt !== 'string'
65
- || Date.parse(workout.startedAt) > acceptedAtMs) {
133
+ if (typeof workout.startedAt !== 'string'
134
+ || Date.parse(workout.startedAt) > Date.parse(acceptedAt)) {
66
135
  return { reason: 'workout_changed', status: 'rejected' };
67
136
  }
68
- const exercises = structuredClone(workout.exercises)
137
+ const beforeExercises = structuredClone(workout.exercises)
69
138
  .sort((left, right) => left.order - right.order);
139
+ const exercises = structuredClone(beforeExercises);
70
140
  if (input.action.mutations.some((mutation) => mutation.kind === 'set.remove')
71
141
  && input.action.expectedWorkout.setRemovalBinding
72
142
  !== deriveWorkoutSetRemovalBinding(shown.entity.id, exercises)) {
@@ -76,6 +146,7 @@ async function applyLiveWorkoutMemberActionWithLockHeld(input) {
76
146
  return { reason: 'workout_changed', status: 'rejected' };
77
147
  }
78
148
  const appendMutations = input.action.mutations.filter((mutation) => mutation.kind === 'exercise.append');
149
+ const renameMutations = input.action.mutations.filter((mutation) => mutation.kind === 'exercise.rename');
79
150
  const removeMutations = input.action.mutations.filter((mutation) => mutation.kind === 'set.remove').sort((left, right) => left.exercisePosition === right.exercisePosition
80
151
  ? right.setPosition - left.setPosition
81
152
  : left.exercisePosition - right.exercisePosition);
@@ -107,11 +178,13 @@ async function applyLiveWorkoutMemberActionWithLockHeld(input) {
107
178
  ...(mutation.unitOverride
108
179
  ? { unitOverride: mutation.unitOverride }
109
180
  : {}),
181
+ setPlanIsFinite: true,
110
182
  sets: Array.from({ length: mutation.setCount }, (_, index) => ({
111
183
  order: index + 1,
112
184
  })),
113
185
  });
114
186
  }
187
+ const completedPendingSet = memberActionCompletesPendingSet(exercises, input.action);
115
188
  if (!applyMemberActionSetPuts(exercises, existingSetMutations)) {
116
189
  return { reason: 'workout_changed', status: 'rejected' };
117
190
  }
@@ -122,8 +195,7 @@ async function applyLiveWorkoutMemberActionWithLockHeld(input) {
122
195
  }
123
196
  exercise.sets.sort((left, right) => left.order - right.order);
124
197
  const existing = exercise.sets[mutation.setPosition - 1];
125
- if (!existing
126
- || exercise.sets.length <= 1) {
198
+ if (!existing || exercise.sets.length <= 1) {
127
199
  return { reason: 'workout_changed', status: 'rejected' };
128
200
  }
129
201
  exercise.sets.splice(mutation.setPosition - 1, 1);
@@ -134,6 +206,13 @@ async function applyLiveWorkoutMemberActionWithLockHeld(input) {
134
206
  if (!applyMemberActionSetAppends(exercises, newSetMutations)) {
135
207
  return { reason: 'workout_changed', status: 'rejected' };
136
208
  }
209
+ if (!applyMemberActionExerciseRenames(exercises, renameMutations, input.action.expectedWorkout.exercises)) {
210
+ return { reason: 'workout_changed', status: 'rejected' };
211
+ }
212
+ if (renameMutations.length > 0
213
+ && hasAmbiguousWorkoutActionExerciseCoordinates({ exercises })) {
214
+ return { reason: 'workout_changed', status: 'rejected' };
215
+ }
137
216
  const parsed = workoutSessionSchema.safeParse({
138
217
  ...workout,
139
218
  exercises,
@@ -141,13 +220,59 @@ async function applyLiveWorkoutMemberActionWithLockHeld(input) {
141
220
  if (!parsed.success) {
142
221
  return { reason: 'workout_changed', status: 'rejected' };
143
222
  }
223
+ const endedAt = resolveObservedWorkoutEndBoundary({
224
+ afterExercises: parsed.data.exercises,
225
+ appendedExtraSet: newSetMutations.some((mutation) => mutation.result !== null),
226
+ beforeExercises,
227
+ completedPendingSet,
228
+ observedAt: acceptedAt,
229
+ workout,
230
+ });
144
231
  const changed = JSON.stringify(parsed.data.exercises)
145
- !== JSON.stringify(workout.exercises);
146
- const persistExercises = removeMutations.length > 0
147
- ? updateLiveWorkoutExercisesAfterValidatedSetRemoval
148
- : updateLiveWorkoutExercises;
149
- await persistExercises(shown, workout, parsed.data.exercises, input.actionId);
150
- return { status: changed ? 'applied' : 'unchanged' };
232
+ !== JSON.stringify(workout.exercises)
233
+ || endedAt !== undefined;
234
+ const updated = await updateLiveWorkoutExercises(shown, workout, parsed.data.exercises, {
235
+ ...(endedAt === undefined ? {} : { endedAt }),
236
+ lastMemberActionId: input.actionId,
237
+ observedAt: acceptedAt,
238
+ });
239
+ return buildLiveWorkoutApplySuccess({
240
+ action: input.action,
241
+ shown: updated,
242
+ status: changed ? 'applied' : 'unchanged',
243
+ });
244
+ }
245
+ function memberActionCompletesPendingSet(exercises, action) {
246
+ return action.mutations.some((mutation) => {
247
+ if (mutation.kind === 'set.append') {
248
+ return mutation.result !== null;
249
+ }
250
+ if (mutation.kind !== 'set.put') {
251
+ return false;
252
+ }
253
+ const exercise = exercises[mutation.exercisePosition - 1];
254
+ const set = exercise?.sets
255
+ .slice()
256
+ .sort((left, right) => left.order - right.order)[mutation.setPosition - 1];
257
+ return set !== undefined && !hasLoggedWorkoutSet(set);
258
+ });
259
+ }
260
+ function resolveObservedWorkoutEndBoundary(input) {
261
+ if (input.workout.endedAt !== undefined) {
262
+ return input.appendedExtraSet ? input.observedAt : undefined;
263
+ }
264
+ if (!input.completedPendingSet) {
265
+ return undefined;
266
+ }
267
+ const beforeComplete = hasCompletedFiniteLiveWorkoutPlan({
268
+ ...input.workout,
269
+ exercises: input.beforeExercises,
270
+ });
271
+ const afterComplete = hasCompletedFiniteLiveWorkoutPlan({
272
+ ...input.workout,
273
+ exercises: input.afterExercises,
274
+ });
275
+ return !beforeComplete && afterComplete ? input.observedAt : undefined;
151
276
  }
152
277
  function applyMemberActionSetPuts(exercises, mutations) {
153
278
  for (const mutation of mutations) {
@@ -177,6 +302,20 @@ function applyMemberActionSetPuts(exercises, mutations) {
177
302
  }
178
303
  return true;
179
304
  }
305
+ function applyMemberActionExerciseRenames(exercises, mutations, expectedExercises) {
306
+ for (const mutation of mutations) {
307
+ const exercise = exercises[mutation.exercisePosition - 1];
308
+ const expectedExercise = expectedExercises[mutation.exercisePosition - 1];
309
+ if (!exercise
310
+ || !expectedExercise
311
+ || exercise.name !== expectedExercise.name
312
+ || mutation.name === expectedExercise.name) {
313
+ return false;
314
+ }
315
+ exercise.name = mutation.name;
316
+ }
317
+ return true;
318
+ }
180
319
  function applyMemberActionSetAppends(exercises, mutations) {
181
320
  for (const mutation of mutations) {
182
321
  const exercise = exercises[mutation.exercisePosition - 1];
@@ -284,22 +423,58 @@ function projectMemberActionWorkoutSetResult(set, kind) {
284
423
  weightUnit: set.weightUnit ?? null,
285
424
  };
286
425
  }
287
- export async function startLiveWorkout(input) {
288
- return withLiveWorkoutMutationLock(input.vault, () => startLiveWorkoutWithLockHeld(input));
426
+ function buildInitialLiveWorkoutExercises(exercises) {
427
+ if (exercises.length > MAX_LIVE_WORKOUT_EXERCISES) {
428
+ throw new VaultCliError('invalid_option', `Live workouts support at most ${MAX_LIVE_WORKOUT_EXERCISES} exercises.`);
429
+ }
430
+ return exercises.map((exercise, index) => {
431
+ const setCount = exercise.setCount ?? 1;
432
+ if (!Number.isInteger(setCount)
433
+ || setCount < 1
434
+ || setCount > MAX_LIVE_WORKOUT_SETS_PER_EXERCISE) {
435
+ throw new VaultCliError('invalid_option', `Exercise set count must be between 1 and ${MAX_LIVE_WORKOUT_SETS_PER_EXERCISE}.`);
436
+ }
437
+ if (exercise.reps !== undefined
438
+ && (!Number.isInteger(exercise.reps)
439
+ || exercise.reps < 1
440
+ || exercise.reps > 999)) {
441
+ throw new VaultCliError('invalid_option', 'Exercise repetitions per set must be an integer between 1 and 999.');
442
+ }
443
+ const sourceExerciseId = normalizeOptionalText(exercise.sourceExerciseId);
444
+ const groupId = normalizeOptionalText(exercise.groupId);
445
+ const note = normalizeOptionalText(exercise.note);
446
+ return {
447
+ name: requireNonEmptyText(exercise.name, 'Exercise name is required.'),
448
+ order: index + 1,
449
+ ...(sourceExerciseId ? { sourceExerciseId } : {}),
450
+ ...(groupId ? { groupId } : {}),
451
+ ...(exercise.mode ? { mode: exercise.mode } : {}),
452
+ ...(exercise.unitOverride ? { unitOverride: exercise.unitOverride } : {}),
453
+ ...(note ? { note } : {}),
454
+ ...(exercise.reps === undefined
455
+ ? {}
456
+ : { memberRepsPerSet: exercise.reps }),
457
+ setPlanIsFinite: exercise.setCount !== undefined,
458
+ sets: Array.from({ length: setCount }, (_, setIndex) => ({
459
+ order: setIndex + 1,
460
+ })),
461
+ };
462
+ });
289
463
  }
290
- async function startLiveWorkoutWithLockHeld(input) {
464
+ export async function startLiveWorkout(input) {
291
465
  const routineLookup = input.routine === undefined
292
466
  ? undefined
293
467
  : requireNonEmptyText(input.routine, 'Workout routine lookup is required.');
294
- const active = await findActiveLiveWorkouts(input.vault);
295
- if (active.length > 0) {
296
- throw new VaultCliError('command_failed', `Workout ${active[0]?.entity.id ?? ''} is already active. Finish or delete it before starting another live workout.`, { activeWorkoutIds: active.map((entry) => entry.entity.id) });
297
- }
298
- const startedAt = normalizeWorkoutTimestamp(input.startedAt ?? new Date().toISOString(), 'startedAt');
468
+ const observedAt = new Date().toISOString();
469
+ const startedAt = normalizeWorkoutTimestamp(input.startedAt ?? observedAt, 'startedAt');
299
470
  const name = normalizeOptionalText(input.name);
300
471
  const note = normalizeOptionalText(input.note);
301
472
  const activityTypeOverride = normalizeOptionalText(input.activityType);
302
- const durationMinutes = elapsedDurationMinutes(startedAt, new Date().toISOString());
473
+ const initialExercises = input.exercises ?? [];
474
+ const durationMinutes = elapsedDurationMinutes(startedAt, observedAt);
475
+ if (routineLookup !== undefined && initialExercises.length > 0) {
476
+ throw new VaultCliError('invalid_option', '--exercise cannot be combined with --routine.');
477
+ }
303
478
  if (routineLookup !== undefined) {
304
479
  const routine = await showWorkoutFormat(input.vault, routineLookup);
305
480
  const routineTitle = requireString(routine.entity.title, 'Workout routine title is missing.');
@@ -310,7 +485,7 @@ async function startLiveWorkoutWithLockHeld(input) {
310
485
  startedAt,
311
486
  sessionNote: note,
312
487
  });
313
- assertTargetableLiveWorkout(workout, `Workout routine "${routineTitle}"`);
488
+ assertTargetableLiveWorkout(workout);
314
489
  return addStructuredWorkoutRecord({
315
490
  vault: input.vault,
316
491
  draft: {
@@ -332,7 +507,7 @@ async function startLiveWorkoutWithLockHeld(input) {
332
507
  sourceApp: LIVE_WORKOUT_SOURCE_APP,
333
508
  startedAt,
334
509
  ...(note ? { sessionNote: note } : {}),
335
- exercises: [],
510
+ exercises: buildInitialLiveWorkoutExercises(initialExercises),
336
511
  });
337
512
  return addStructuredWorkoutRecord({
338
513
  vault: input.vault,
@@ -349,24 +524,22 @@ async function startLiveWorkoutWithLockHeld(input) {
349
524
  },
350
525
  });
351
526
  }
352
- export async function showActiveLiveWorkout(input) {
353
- return resolveLiveWorkout(input, { requireActive: true });
354
- }
355
527
  export async function addLiveWorkoutExercise(input) {
356
- return withLiveWorkoutMutationLock(input.vault, () => addLiveWorkoutExerciseWithLockHeld(input));
528
+ const observedAt = new Date().toISOString();
529
+ return withLiveWorkoutMutationLock(input.vault, input.workoutId, () => addLiveWorkoutExerciseWithLockHeld(input, observedAt));
357
530
  }
358
- async function addLiveWorkoutExerciseWithLockHeld(input) {
359
- const shown = await resolveLiveWorkout(input, { requireActive: true });
531
+ async function addLiveWorkoutExerciseWithLockHeld(input, observedAt) {
532
+ const shown = await resolveLiveWorkout(input, { requireOpen: true });
360
533
  const workout = parseShownWorkout(shown);
361
- assertTargetableLiveWorkout(workout, `Workout ${shown.entity.id}`);
534
+ assertTargetableLiveWorkout(workout);
362
535
  const exercises = structuredClone(workout.exercises);
363
536
  const order = input.order;
364
537
  const setCount = input.setCount ?? 1;
365
538
  if (!Number.isInteger(order) || order < 1) {
366
539
  throw new VaultCliError('invalid_option', 'Exercise order must be a positive integer.');
367
540
  }
368
- if (!Number.isInteger(setCount) || setCount < 1 || setCount > 150) {
369
- throw new VaultCliError('invalid_option', 'Exercise set count must be between 1 and 150.');
541
+ if (!Number.isInteger(setCount) || setCount < 1 || setCount > MAX_LIVE_WORKOUT_SETS_PER_EXERCISE) {
542
+ throw new VaultCliError('invalid_option', `Exercise set count must be between 1 and ${MAX_LIVE_WORKOUT_SETS_PER_EXERCISE}.`);
370
543
  }
371
544
  const name = requireNonEmptyText(input.name, 'Exercise name is required.');
372
545
  const sourceExerciseId = normalizeOptionalText(input.sourceExerciseId);
@@ -380,6 +553,7 @@ async function addLiveWorkoutExerciseWithLockHeld(input) {
380
553
  ...(input.mode ? { mode: input.mode } : {}),
381
554
  ...(input.unitOverride ? { unitOverride: input.unitOverride } : {}),
382
555
  ...(note ? { note } : {}),
556
+ setPlanIsFinite: input.setCount !== undefined,
383
557
  sets: Array.from({ length: setCount }, (_, index) => ({ order: index + 1 })),
384
558
  };
385
559
  const parsedProposed = workoutSessionSchema.parse({
@@ -397,30 +571,80 @@ async function addLiveWorkoutExerciseWithLockHeld(input) {
397
571
  }
398
572
  exercises.push(parsedProposed);
399
573
  exercises.sort((left, right) => left.order - right.order);
400
- return updateLiveWorkoutExercises(shown, workout, exercises);
574
+ return updateLiveWorkoutExercises(shown, workout, exercises, { observedAt });
575
+ }
576
+ export async function setLiveWorkoutExerciseReps(input) {
577
+ const observedAt = new Date().toISOString();
578
+ return withLiveWorkoutMutationLock(input.vault, input.workoutId, () => setLiveWorkoutExerciseRepsWithLockHeld(input, observedAt));
579
+ }
580
+ async function setLiveWorkoutExerciseRepsWithLockHeld(input, observedAt) {
581
+ const clear = input.clear === true;
582
+ const reps = input.reps;
583
+ const hasReps = reps !== undefined;
584
+ if (clear === hasReps) {
585
+ throw new VaultCliError('invalid_option', 'Pass exactly one of --reps or --clear.');
586
+ }
587
+ if (reps !== undefined
588
+ && (!Number.isInteger(reps) || reps < 1 || reps > 999)) {
589
+ throw new VaultCliError('invalid_option', 'Exercise repetitions per set must be an integer between 1 and 999.');
590
+ }
591
+ const shown = await resolveLiveWorkout(input);
592
+ const workout = parseShownWorkout(shown);
593
+ assertTargetableLiveWorkout(workout);
594
+ const exercises = structuredClone(workout.exercises);
595
+ const exerciseIndex = resolveExerciseIndex(exercises, input);
596
+ const exercise = exercises[exerciseIndex];
597
+ if ((clear && exercise.memberRepsPerSet === undefined)
598
+ || (!clear && exercise.memberRepsPerSet === reps)) {
599
+ return shown;
600
+ }
601
+ if (clear) {
602
+ return editWorkoutRecord({
603
+ vault: shown.vault,
604
+ lookup: shown.entity.id,
605
+ clear: [`workout.exercises.${exerciseIndex}.memberRepsPerSet`],
606
+ });
607
+ }
608
+ if (reps !== undefined) {
609
+ exercise.memberRepsPerSet = reps;
610
+ }
611
+ exercises[exerciseIndex] = exercise;
612
+ return updateLiveWorkoutExercises(shown, workout, exercises, { observedAt });
401
613
  }
402
614
  export async function logLiveWorkoutSet(input) {
403
- return withLiveWorkoutMutationLock(input.vault, () => logLiveWorkoutSetWithLockHeld(input));
615
+ const observedAt = new Date().toISOString();
616
+ return withLiveWorkoutMutationLock(input.vault, input.workoutId, () => logLiveWorkoutSetWithLockHeld(input, observedAt));
404
617
  }
405
- async function logLiveWorkoutSetWithLockHeld(input) {
618
+ async function logLiveWorkoutSetWithLockHeld(input, observedAt) {
406
619
  const setOrder = requireLiveWorkoutSetOrder(input.setOrder);
407
- const shown = await resolveLiveWorkout(input, { requireActive: true });
620
+ const shown = await resolveLiveWorkout(input);
408
621
  const workout = parseShownWorkout(shown);
409
- assertTargetableLiveWorkout(workout, `Workout ${shown.entity.id}`);
410
- const exercises = structuredClone(workout.exercises);
622
+ assertTargetableLiveWorkout(workout);
623
+ const beforeExercises = structuredClone(workout.exercises);
624
+ const exercises = structuredClone(beforeExercises);
411
625
  const exerciseIndex = resolveExerciseIndex(exercises, input);
412
626
  const exercise = exercises[exerciseIndex];
627
+ const setIndex = exercise.sets.findIndex((set) => set.order === setOrder);
628
+ const currentSet = setIndex >= 0 ? exercise.sets[setIndex] : undefined;
413
629
  const patch = compactSetPatch(input);
630
+ if (input.reps === undefined
631
+ && exercise.memberRepsPerSet !== undefined
632
+ && (currentSet === undefined || !hasLoggedWorkoutSet(currentSet))) {
633
+ patch.reps = exercise.memberRepsPerSet;
634
+ }
414
635
  if (Object.keys(patch).length === 0) {
415
- throw new VaultCliError('invalid_option', 'Log at least one set value or note.');
636
+ if (currentSet !== undefined
637
+ && hasLoggedWorkoutSet(currentSet)
638
+ && exercise.memberRepsPerSet !== undefined) {
639
+ return shown;
640
+ }
641
+ throw new VaultCliError('invalid_option', 'Log at least one set value or establish --reps for every set of this exercise first.');
416
642
  }
417
- const setIndex = exercise.sets.findIndex((set) => set.order === setOrder);
418
- const currentSet = setIndex >= 0 ? exercise.sets[setIndex] : undefined;
419
643
  if (currentSet === undefined && input.requireExistingSet) {
420
644
  throw new VaultCliError('not_found', `No set ${setOrder} exists for ${exercise.name}.`);
421
645
  }
422
- if (currentSet === undefined &&
423
- exercise.sets.length >= MAX_LIVE_WORKOUT_SETS_PER_EXERCISE) {
646
+ if (currentSet === undefined
647
+ && exercise.sets.length >= MAX_LIVE_WORKOUT_SETS_PER_EXERCISE) {
424
648
  throw new VaultCliError('invalid_operation', `Each exercise supports at most ${MAX_LIVE_WORKOUT_SETS_PER_EXERCISE} sets.`);
425
649
  }
426
650
  const parsedSet = workoutSessionSchema.parse({
@@ -438,6 +662,10 @@ async function logLiveWorkoutSetWithLockHeld(input) {
438
662
  if (currentSet && JSON.stringify(currentSet) === JSON.stringify(parsedSet)) {
439
663
  return shown;
440
664
  }
665
+ const appendedExtraSet = currentSet === undefined
666
+ && setOrder > exercise.sets.reduce((maximum, set) => Math.max(maximum, set.order), 0);
667
+ const completedPendingSet = currentSet === undefined
668
+ || !hasLoggedWorkoutSet(currentSet);
441
669
  if (setIndex >= 0) {
442
670
  exercise.sets[setIndex] = parsedSet;
443
671
  }
@@ -446,16 +674,28 @@ async function logLiveWorkoutSetWithLockHeld(input) {
446
674
  exercise.sets.sort((left, right) => left.order - right.order);
447
675
  }
448
676
  exercises[exerciseIndex] = exercise;
449
- return updateLiveWorkoutExercises(shown, workout, exercises);
677
+ const endedAt = resolveObservedWorkoutEndBoundary({
678
+ afterExercises: exercises,
679
+ appendedExtraSet,
680
+ beforeExercises,
681
+ completedPendingSet,
682
+ observedAt,
683
+ workout,
684
+ });
685
+ return updateLiveWorkoutExercises(shown, workout, exercises, {
686
+ ...(endedAt === undefined ? {} : { endedAt }),
687
+ observedAt,
688
+ });
450
689
  }
451
690
  export async function clearLiveWorkoutSet(input) {
452
- return withLiveWorkoutMutationLock(input.vault, () => clearLiveWorkoutSetWithLockHeld(input));
691
+ const observedAt = new Date().toISOString();
692
+ return withLiveWorkoutMutationLock(input.vault, input.workoutId, () => clearLiveWorkoutSetWithLockHeld(input, observedAt));
453
693
  }
454
- async function clearLiveWorkoutSetWithLockHeld(input) {
694
+ async function clearLiveWorkoutSetWithLockHeld(input, observedAt) {
455
695
  const setOrder = requireLiveWorkoutSetOrder(input.setOrder);
456
- const shown = await resolveLiveWorkout(input, { requireActive: true });
696
+ const shown = await resolveLiveWorkout(input);
457
697
  const workout = parseShownWorkout(shown);
458
- assertTargetableLiveWorkout(workout, `Workout ${shown.entity.id}`);
698
+ assertTargetableLiveWorkout(workout);
459
699
  const exercises = structuredClone(workout.exercises);
460
700
  const exerciseIndex = resolveExerciseIndex(exercises, input);
461
701
  const exercise = exercises[exerciseIndex];
@@ -473,16 +713,13 @@ async function clearLiveWorkoutSetWithLockHeld(input) {
473
713
  }
474
714
  exercise.sets[setIndex] = clearedSet;
475
715
  exercises[exerciseIndex] = exercise;
476
- return updateLiveWorkoutExercises(shown, workout, exercises);
716
+ return updateLiveWorkoutExercises(shown, workout, exercises, { observedAt });
477
717
  }
478
718
  export async function finishLiveWorkout(input) {
479
- return withLiveWorkoutMutationLock(input.vault, () => finishLiveWorkoutWithLockHeld(input));
719
+ return withLiveWorkoutMutationLock(input.vault, input.workoutId, () => finishLiveWorkoutWithLockHeld(input));
480
720
  }
481
721
  async function finishLiveWorkoutWithLockHeld(input) {
482
- const shown = await resolveLiveWorkout(input, {
483
- requireActive: input.workoutId === undefined,
484
- allowCompleted: input.workoutId !== undefined,
485
- });
722
+ const shown = await resolveLiveWorkout(input);
486
723
  const workout = parseShownWorkout(shown);
487
724
  if (workout.endedAt) {
488
725
  return shown;