@murphai/murph 1.2.0 → 1.2.4

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 (1903) hide show
  1. package/CHANGELOG.md +1303 -0
  2. package/config.schema.json +412 -50
  3. package/dist/cli-entry.d.ts.map +1 -1
  4. package/dist/cli-entry.js +13 -20
  5. package/dist/cli-entry.js.map +1 -1
  6. package/dist/commands/audit-command-helpers.js.map +1 -1
  7. package/dist/commands/audit.js +2 -2
  8. package/dist/commands/automation.d.ts +118 -7
  9. package/dist/commands/automation.d.ts.map +1 -1
  10. package/dist/commands/automation.js +140 -54
  11. package/dist/commands/automation.js.map +1 -1
  12. package/dist/commands/batch.d.ts.map +1 -1
  13. package/dist/commands/batch.js +12 -4
  14. package/dist/commands/batch.js.map +1 -1
  15. package/dist/commands/capture.d.ts +9 -9
  16. package/dist/commands/capture.d.ts.map +1 -1
  17. package/dist/commands/clinical-imports.d.ts +101 -101
  18. package/dist/commands/command-factory-primitives.d.ts +3 -3
  19. package/dist/commands/command-factory-primitives.d.ts.map +1 -1
  20. package/dist/commands/command-factory-primitives.js +1 -1
  21. package/dist/commands/commons.d.ts +9 -9
  22. package/dist/commands/document.d.ts.map +1 -1
  23. package/dist/commands/document.js +3 -0
  24. package/dist/commands/document.js.map +1 -1
  25. package/dist/commands/encounter.d.ts +42 -42
  26. package/dist/commands/encounter.d.ts.map +1 -1
  27. package/dist/commands/event.js +1 -1
  28. package/dist/commands/exercise.js.map +1 -1
  29. package/dist/commands/experiment.d.ts.map +1 -1
  30. package/dist/commands/experiment.js +1 -0
  31. package/dist/commands/experiment.js.map +1 -1
  32. package/dist/commands/export-intake-read-helpers.d.ts +4 -4
  33. package/dist/commands/export-intake-read-helpers.d.ts.map +1 -1
  34. package/dist/commands/export-intake-read-helpers.js +1 -1
  35. package/dist/commands/export-intake-read-helpers.js.map +1 -1
  36. package/dist/commands/export.js +1 -1
  37. package/dist/commands/food.d.ts +4 -4
  38. package/dist/commands/food.js +1 -1
  39. package/dist/commands/group.d.ts +81 -0
  40. package/dist/commands/group.d.ts.map +1 -0
  41. package/dist/commands/group.js +242 -0
  42. package/dist/commands/group.js.map +1 -0
  43. package/dist/commands/habitat.d.ts +3 -0
  44. package/dist/commands/habitat.d.ts.map +1 -0
  45. package/dist/commands/habitat.js +282 -0
  46. package/dist/commands/habitat.js.map +1 -0
  47. package/dist/commands/health-allergy-save.d.ts.map +1 -1
  48. package/dist/commands/health-allergy-save.js +1 -1
  49. package/dist/commands/health-allergy-save.js.map +1 -1
  50. package/dist/commands/health-condition-save.d.ts.map +1 -1
  51. package/dist/commands/health-condition-save.js +1 -1
  52. package/dist/commands/health-condition-save.js.map +1 -1
  53. package/dist/commands/health-goal-save.d.ts.map +1 -1
  54. package/dist/commands/health-goal-save.js +1 -1
  55. package/dist/commands/health-goal-save.js.map +1 -1
  56. package/dist/commands/intake.js +1 -1
  57. package/dist/commands/intervention.d.ts.map +1 -1
  58. package/dist/commands/intervention.js +10 -0
  59. package/dist/commands/intervention.js.map +1 -1
  60. package/dist/commands/knowledge.js +2 -2
  61. package/dist/commands/measurement.d.ts +7 -7
  62. package/dist/commands/measurement.d.ts.map +1 -1
  63. package/dist/commands/medication.d.ts +3 -3
  64. package/dist/commands/memory.d.ts.map +1 -1
  65. package/dist/commands/memory.js +26 -2
  66. package/dist/commands/memory.js.map +1 -1
  67. package/dist/commands/model.js.map +1 -1
  68. package/dist/commands/murph-age.d.ts +499 -498
  69. package/dist/commands/murph-age.d.ts.map +1 -1
  70. package/dist/commands/murph-age.js +3 -2
  71. package/dist/commands/murph-age.js.map +1 -1
  72. package/dist/commands/payload-schema-command.d.ts +1 -1
  73. package/dist/commands/protocol.js +2 -2
  74. package/dist/commands/provider.js +1 -1
  75. package/dist/commands/recipe.js +1 -1
  76. package/dist/commands/record-mutation-command-helpers.d.ts +3 -3
  77. package/dist/commands/record-mutation-command-helpers.d.ts.map +1 -1
  78. package/dist/commands/research.js.map +1 -1
  79. package/dist/commands/sample-batch-command-helpers.js.map +1 -1
  80. package/dist/commands/sample-import-command-helpers.d.ts.map +1 -1
  81. package/dist/commands/sample-query-command-helpers.d.ts +1 -1
  82. package/dist/commands/sample-query-command-helpers.d.ts.map +1 -1
  83. package/dist/commands/sample-query-command-helpers.js.map +1 -1
  84. package/dist/commands/samples.js +2 -2
  85. package/dist/commands/scheduled-log.d.ts +127 -275
  86. package/dist/commands/scheduled-log.d.ts.map +1 -1
  87. package/dist/commands/scheduled-log.js +28 -3
  88. package/dist/commands/scheduled-log.js.map +1 -1
  89. package/dist/commands/search.js +1 -1
  90. package/dist/commands/supplement.js +1 -1
  91. package/dist/commands/vault.d.ts +2 -1
  92. package/dist/commands/vault.d.ts.map +1 -1
  93. package/dist/commands/vault.js +111 -1
  94. package/dist/commands/vault.js.map +1 -1
  95. package/dist/commands/wearables.d.ts +695 -667
  96. package/dist/commands/wearables.d.ts.map +1 -1
  97. package/dist/commands/wearables.js +10 -3
  98. package/dist/commands/wearables.js.map +1 -1
  99. package/dist/commands/workout.d.ts.map +1 -1
  100. package/dist/commands/workout.js +9 -2
  101. package/dist/commands/workout.js.map +1 -1
  102. package/dist/device-services.d.ts.map +1 -1
  103. package/dist/device-services.js +33 -8
  104. package/dist/device-services.js.map +1 -1
  105. package/dist/food-labels.d.ts +39 -39
  106. package/dist/food-labels.js.map +1 -1
  107. package/dist/foreground-terminal-logging.js.map +1 -1
  108. package/dist/hosted-data-api-labels.d.ts +117 -117
  109. package/dist/hosted-data-api-labels.js.map +1 -1
  110. package/dist/incur.generated.d.ts +93 -0
  111. package/dist/incur.generated.d.ts.map +1 -1
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/mapbox-route-contracts.d.ts +13 -13
  114. package/dist/mapbox-route-contracts.d.ts.map +1 -1
  115. package/dist/mapbox-route.js.map +1 -1
  116. package/dist/research-scout-client.js.map +1 -1
  117. package/dist/supplement-labels.d.ts +39 -39
  118. package/dist/supplement-labels.js.map +1 -1
  119. package/dist/vault-cli-command-manifest.d.ts +1451 -1478
  120. package/dist/vault-cli-command-manifest.d.ts.map +1 -1
  121. package/dist/vault-cli-command-manifest.js +80 -2
  122. package/dist/vault-cli-command-manifest.js.map +1 -1
  123. package/dist/vault-cli-command-routing.d.ts.map +1 -1
  124. package/dist/vault-cli-command-routing.js +79 -2
  125. package/dist/vault-cli-command-routing.js.map +1 -1
  126. package/dist/vault-cli-package.d.ts +1 -1
  127. package/dist/vault-cli-package.d.ts.map +1 -1
  128. package/dist/vault-cli-package.js.map +1 -1
  129. package/dist/vault-cli-routing.d.ts +4 -1
  130. package/dist/vault-cli-routing.d.ts.map +1 -1
  131. package/dist/vault-cli-routing.js +45 -5
  132. package/dist/vault-cli-routing.js.map +1 -1
  133. package/dist/vault-cli-shell.d.ts +3 -1
  134. package/dist/vault-cli-shell.d.ts.map +1 -1
  135. package/dist/vault-cli-shell.js +4 -1
  136. package/dist/vault-cli-shell.js.map +1 -1
  137. package/dist/vault-cli-skill-hash.generated.d.ts +2 -0
  138. package/dist/vault-cli-skill-hash.generated.d.ts.map +1 -0
  139. package/dist/vault-cli-skill-hash.generated.js +3 -0
  140. package/dist/vault-cli-skill-hash.generated.js.map +1 -0
  141. package/dist/vault-cli-vault-context.js.map +1 -1
  142. package/dist/vault-cli.js.map +1 -1
  143. package/node_modules/@murphai/assistant-cli/dist/assistant/automation/run-loop.d.ts +1 -1
  144. package/node_modules/@murphai/assistant-cli/dist/assistant/doctor-security.js.map +1 -1
  145. package/node_modules/@murphai/assistant-cli/dist/assistant/doctor.js.map +1 -1
  146. package/node_modules/@murphai/assistant-cli/dist/assistant/service.d.ts +24 -22
  147. package/node_modules/@murphai/assistant-cli/dist/assistant/service.d.ts.map +1 -1
  148. package/node_modules/@murphai/assistant-cli/dist/assistant/stop.d.ts +1 -1
  149. package/node_modules/@murphai/assistant-cli/dist/assistant/store.d.ts +3 -1
  150. package/node_modules/@murphai/assistant-cli/dist/assistant/store.d.ts.map +1 -1
  151. package/node_modules/@murphai/assistant-cli/dist/assistant/store.js +5 -2
  152. package/node_modules/@murphai/assistant-cli/dist/assistant/store.js.map +1 -1
  153. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink-composer-panel.d.ts +4 -4
  154. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink-composer-panel.d.ts.map +1 -1
  155. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink-layout.d.ts +9 -9
  156. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink-layout.d.ts.map +1 -1
  157. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink-message-text.d.ts +4 -4
  158. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink-message-text.d.ts.map +1 -1
  159. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink-message-text.js.map +1 -1
  160. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink-transcript.d.ts +4 -4
  161. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink-transcript.d.ts.map +1 -1
  162. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink.js.map +1 -1
  163. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/theme.js.map +1 -1
  164. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/view-model.d.ts +1 -1
  165. package/node_modules/@murphai/assistant-cli/dist/assistant/ui/view-model.d.ts.map +1 -1
  166. package/node_modules/@murphai/assistant-cli/dist/assistant-daemon-client.d.ts.map +1 -1
  167. package/node_modules/@murphai/assistant-cli/dist/assistant-daemon-client.js +2 -2
  168. package/node_modules/@murphai/assistant-cli/dist/assistant-daemon-client.js.map +1 -1
  169. package/node_modules/@murphai/assistant-cli/dist/commands/assistant.d.ts.map +1 -1
  170. package/node_modules/@murphai/assistant-cli/dist/commands/assistant.js +52 -7
  171. package/node_modules/@murphai/assistant-cli/dist/commands/assistant.js.map +1 -1
  172. package/node_modules/@murphai/assistant-cli/dist/run-terminal-logging.js.map +1 -1
  173. package/node_modules/@murphai/assistant-engine/README.md +55 -7
  174. package/node_modules/@murphai/assistant-engine/dist/assistant/active-experiment-context.d.ts.map +1 -1
  175. package/node_modules/@murphai/assistant-engine/dist/assistant/active-experiment-context.js +36 -24
  176. package/node_modules/@murphai/assistant-engine/dist/assistant/active-experiment-context.js.map +1 -1
  177. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.d.ts +10 -0
  178. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.d.ts.map +1 -1
  179. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.js +89 -7
  180. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.js.map +1 -1
  181. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-journal.d.ts +36 -36
  182. package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-journal.d.ts.map +1 -1
  183. package/node_modules/@murphai/assistant-engine/dist/assistant/ask-continuation.d.ts +32 -0
  184. package/node_modules/@murphai/assistant-engine/dist/assistant/ask-continuation.d.ts.map +1 -0
  185. package/node_modules/@murphai/assistant-engine/dist/assistant/ask-continuation.js +347 -0
  186. package/node_modules/@murphai/assistant-engine/dist/assistant/ask-continuation.js.map +1 -0
  187. package/node_modules/@murphai/assistant-engine/dist/assistant/attachment-artifact-paths.d.ts +2 -2
  188. package/node_modules/@murphai/assistant-engine/dist/assistant/attachment-artifact-paths.d.ts.map +1 -1
  189. package/node_modules/@murphai/assistant-engine/dist/assistant/attachment-evidence-model.d.ts +5 -0
  190. package/node_modules/@murphai/assistant-engine/dist/assistant/attachment-evidence-model.d.ts.map +1 -1
  191. package/node_modules/@murphai/assistant-engine/dist/assistant/attachment-evidence-model.js +163 -42
  192. package/node_modules/@murphai/assistant-engine/dist/assistant/attachment-evidence-model.js.map +1 -1
  193. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/evidence.d.ts +3 -3
  194. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/evidence.d.ts.map +1 -1
  195. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/evidence.js +8 -7
  196. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/evidence.js.map +1 -1
  197. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/grouping.d.ts +2 -1
  198. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/grouping.d.ts.map +1 -1
  199. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/grouping.js +11 -0
  200. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/grouping.js.map +1 -1
  201. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/input-summary.d.ts +1 -0
  202. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/input-summary.d.ts.map +1 -1
  203. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/input-summary.js +2 -0
  204. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/input-summary.js.map +1 -1
  205. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/operation-scope.d.ts +11 -0
  206. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/operation-scope.d.ts.map +1 -0
  207. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/operation-scope.js +2 -0
  208. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/operation-scope.js.map +1 -0
  209. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/prompt-builder.d.ts +18 -0
  210. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/prompt-builder.d.ts.map +1 -1
  211. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/prompt-builder.js +66 -16
  212. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/prompt-builder.js.map +1 -1
  213. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/reply.d.ts +26 -8
  214. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/reply.d.ts.map +1 -1
  215. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/reply.js +644 -158
  216. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/reply.js.map +1 -1
  217. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/run-loop.d.ts +15 -1
  218. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/run-loop.d.ts.map +1 -1
  219. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/run-loop.js +90 -29
  220. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/run-loop.js.map +1 -1
  221. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/scanner.d.ts +6 -1
  222. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/scanner.d.ts.map +1 -1
  223. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/scanner.js +18 -6
  224. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/scanner.js.map +1 -1
  225. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/shared.d.ts +9 -1
  226. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/shared.d.ts.map +1 -1
  227. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/shared.js.map +1 -1
  228. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/target-override.d.ts +5 -0
  229. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/target-override.d.ts.map +1 -0
  230. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/target-override.js +30 -0
  231. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/target-override.js.map +1 -0
  232. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/turn-envelope.d.ts +4 -1
  233. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/turn-envelope.d.ts.map +1 -1
  234. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/turn-envelope.js +4 -0
  235. package/node_modules/@murphai/assistant-engine/dist/assistant/automation/turn-envelope.js.map +1 -1
  236. package/node_modules/@murphai/assistant-engine/dist/assistant/automation.d.ts +5 -3
  237. package/node_modules/@murphai/assistant-engine/dist/assistant/automation.d.ts.map +1 -1
  238. package/node_modules/@murphai/assistant-engine/dist/assistant/automation.js +3 -2
  239. package/node_modules/@murphai/assistant-engine/dist/assistant/automation.js.map +1 -1
  240. package/node_modules/@murphai/assistant-engine/dist/assistant/bindings.d.ts +2 -0
  241. package/node_modules/@murphai/assistant-engine/dist/assistant/bindings.d.ts.map +1 -1
  242. package/node_modules/@murphai/assistant-engine/dist/assistant/bindings.js +22 -1
  243. package/node_modules/@murphai/assistant-engine/dist/assistant/bindings.js.map +1 -1
  244. package/node_modules/@murphai/assistant-engine/dist/assistant/channel-adapters.d.ts +2 -2
  245. package/node_modules/@murphai/assistant-engine/dist/assistant/channel-adapters.d.ts.map +1 -1
  246. package/node_modules/@murphai/assistant-engine/dist/assistant/channel-adapters.js +1 -1
  247. package/node_modules/@murphai/assistant-engine/dist/assistant/channel-adapters.js.map +1 -1
  248. package/node_modules/@murphai/assistant-engine/dist/assistant/channel-typing.d.ts +4 -2
  249. package/node_modules/@murphai/assistant-engine/dist/assistant/channel-typing.d.ts.map +1 -1
  250. package/node_modules/@murphai/assistant-engine/dist/assistant/channel-typing.js +51 -18
  251. package/node_modules/@murphai/assistant-engine/dist/assistant/channel-typing.js.map +1 -1
  252. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/descriptors.d.ts.map +1 -1
  253. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/descriptors.js +87 -49
  254. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/descriptors.js.map +1 -1
  255. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/helpers.d.ts.map +1 -1
  256. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/helpers.js +5 -0
  257. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/helpers.js.map +1 -1
  258. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/runtime.d.ts +2 -10
  259. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/runtime.d.ts.map +1 -1
  260. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/runtime.js +80 -61
  261. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/runtime.js.map +1 -1
  262. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/types.d.ts +31 -20
  263. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/types.d.ts.map +1 -1
  264. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/types.js.map +1 -1
  265. package/node_modules/@murphai/assistant-engine/dist/assistant/cli-surface-bootstrap.d.ts +5 -24
  266. package/node_modules/@murphai/assistant-engine/dist/assistant/cli-surface-bootstrap.d.ts.map +1 -1
  267. package/node_modules/@murphai/assistant-engine/dist/assistant/cli-surface-bootstrap.js +95 -228
  268. package/node_modules/@murphai/assistant-engine/dist/assistant/cli-surface-bootstrap.js.map +1 -1
  269. package/node_modules/@murphai/assistant-engine/dist/assistant/cli-surface-contract.generated.json +4 -0
  270. package/node_modules/@murphai/assistant-engine/dist/assistant/cli-surface-manifest.js.map +1 -1
  271. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-contract-fingerprint.js.map +1 -1
  272. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-resume-binding.d.ts +4 -0
  273. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-resume-binding.d.ts.map +1 -1
  274. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-resume-binding.js +24 -5
  275. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-resume-binding.js.map +1 -1
  276. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-thread-route.d.ts +2 -0
  277. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-thread-route.d.ts.map +1 -1
  278. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-thread-route.js +26 -0
  279. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-thread-route.js.map +1 -1
  280. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/attempt-observability.d.ts +0 -29
  281. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/attempt-observability.d.ts.map +1 -1
  282. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/attempt-observability.js +50 -129
  283. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/attempt-observability.js.map +1 -1
  284. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.d.ts +22 -19
  285. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.d.ts.map +1 -1
  286. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.js +186 -109
  287. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.js.map +1 -1
  288. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn-runner.d.ts +9 -8
  289. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn-runner.d.ts.map +1 -1
  290. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn-runner.js +42 -73
  291. package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn-runner.js.map +1 -1
  292. package/node_modules/@murphai/assistant-engine/dist/assistant/context-snapshot.d.ts +3 -2
  293. package/node_modules/@murphai/assistant-engine/dist/assistant/context-snapshot.d.ts.map +1 -1
  294. package/node_modules/@murphai/assistant-engine/dist/assistant/context-snapshot.js +83 -91
  295. package/node_modules/@murphai/assistant-engine/dist/assistant/context-snapshot.js.map +1 -1
  296. package/node_modules/@murphai/assistant-engine/dist/assistant/conversation-policy.d.ts +4 -2
  297. package/node_modules/@murphai/assistant-engine/dist/assistant/conversation-policy.d.ts.map +1 -1
  298. package/node_modules/@murphai/assistant-engine/dist/assistant/conversation-policy.js +48 -11
  299. package/node_modules/@murphai/assistant-engine/dist/assistant/conversation-policy.js.map +1 -1
  300. package/node_modules/@murphai/assistant-engine/dist/assistant/conversation-ref.d.ts +1 -1
  301. package/node_modules/@murphai/assistant-engine/dist/assistant/conversation-ref.d.ts.map +1 -1
  302. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/canonical-jobs.d.ts +3 -1
  303. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/canonical-jobs.d.ts.map +1 -1
  304. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/canonical-jobs.js +33 -2
  305. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/canonical-jobs.js.map +1 -1
  306. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/delivery-reconciliation.d.ts.map +1 -1
  307. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/delivery-reconciliation.js +38 -31
  308. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/delivery-reconciliation.js.map +1 -1
  309. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.d.ts +47 -6
  310. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.d.ts.map +1 -1
  311. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.js +881 -117
  312. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.js.map +1 -1
  313. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/schedule.d.ts.map +1 -1
  314. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/schedule.js +84 -19
  315. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/schedule.js.map +1 -1
  316. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/scheduled-log.d.ts +1 -0
  317. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/scheduled-log.d.ts.map +1 -1
  318. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/scheduled-log.js +1 -0
  319. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/scheduled-log.js.map +1 -1
  320. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/store.d.ts +4 -1
  321. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/store.d.ts.map +1 -1
  322. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/store.js +3 -0
  323. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/store.js.map +1 -1
  324. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/targets.d.ts +7 -1
  325. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/targets.d.ts.map +1 -1
  326. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/targets.js +27 -2
  327. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/targets.js.map +1 -1
  328. package/node_modules/@murphai/assistant-engine/dist/assistant/cron.d.ts +9 -2
  329. package/node_modules/@murphai/assistant-engine/dist/assistant/cron.d.ts.map +1 -1
  330. package/node_modules/@murphai/assistant-engine/dist/assistant/cron.js +134 -65
  331. package/node_modules/@murphai/assistant-engine/dist/assistant/cron.js.map +1 -1
  332. package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.d.ts +5 -0
  333. package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.d.ts.map +1 -1
  334. package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.js +131 -22
  335. package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.js.map +1 -1
  336. package/node_modules/@murphai/assistant-engine/dist/assistant/device-activity-automations.d.ts.map +1 -1
  337. package/node_modules/@murphai/assistant-engine/dist/assistant/device-activity-automations.js +58 -90
  338. package/node_modules/@murphai/assistant-engine/dist/assistant/device-activity-automations.js.map +1 -1
  339. package/node_modules/@murphai/assistant-engine/dist/assistant/device-activity-cron-tags.d.ts +4 -0
  340. package/node_modules/@murphai/assistant-engine/dist/assistant/device-activity-cron-tags.d.ts.map +1 -1
  341. package/node_modules/@murphai/assistant-engine/dist/assistant/device-activity-cron-tags.js +9 -3
  342. package/node_modules/@murphai/assistant-engine/dist/assistant/device-activity-cron-tags.js.map +1 -1
  343. package/node_modules/@murphai/assistant-engine/dist/assistant/diagnostics.d.ts.map +1 -1
  344. package/node_modules/@murphai/assistant-engine/dist/assistant/diagnostics.js +6 -0
  345. package/node_modules/@murphai/assistant-engine/dist/assistant/diagnostics.js.map +1 -1
  346. package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.d.ts +43 -3
  347. package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.d.ts.map +1 -1
  348. package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.js +79 -0
  349. package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.js.map +1 -1
  350. package/node_modules/@murphai/assistant-engine/dist/assistant/experiment-support-automations.d.ts +5 -3
  351. package/node_modules/@murphai/assistant-engine/dist/assistant/experiment-support-automations.d.ts.map +1 -1
  352. package/node_modules/@murphai/assistant-engine/dist/assistant/experiment-support-automations.js +73 -6
  353. package/node_modules/@murphai/assistant-engine/dist/assistant/experiment-support-automations.js.map +1 -1
  354. package/node_modules/@murphai/assistant-engine/dist/assistant/fault-injection.js.map +1 -1
  355. package/node_modules/@murphai/assistant-engine/dist/assistant/first-contact-welcome.d.ts +1 -1
  356. package/node_modules/@murphai/assistant-engine/dist/assistant/first-contact-welcome.d.ts.map +1 -1
  357. package/node_modules/@murphai/assistant-engine/dist/assistant/generate-cli-surface-contract.js +1 -2
  358. package/node_modules/@murphai/assistant-engine/dist/assistant/generate-cli-surface-contract.js.map +1 -1
  359. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-context-diagnostics.d.ts +1 -1
  360. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-context-diagnostics.d.ts.map +1 -1
  361. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-context-diagnostics.js +0 -27
  362. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-context-diagnostics.js.map +1 -1
  363. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-mailbox-input-items.d.ts +22 -2
  364. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-mailbox-input-items.d.ts.map +1 -1
  365. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-mailbox-input-items.js +78 -4
  366. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-mailbox-input-items.js.map +1 -1
  367. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.d.ts +46 -3
  368. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.d.ts.map +1 -1
  369. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.js +47 -5
  370. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.js.map +1 -1
  371. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-turn-timing.d.ts +1 -0
  372. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-turn-timing.d.ts.map +1 -1
  373. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-turn-timing.js +1 -0
  374. package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-turn-timing.js.map +1 -1
  375. package/node_modules/@murphai/assistant-engine/dist/assistant/inbox-attachment-evidence.js +23 -12
  376. package/node_modules/@murphai/assistant-engine/dist/assistant/inbox-attachment-evidence.js.map +1 -1
  377. package/node_modules/@murphai/assistant-engine/dist/assistant/input-source.d.ts +8 -0
  378. package/node_modules/@murphai/assistant-engine/dist/assistant/input-source.d.ts.map +1 -1
  379. package/node_modules/@murphai/assistant-engine/dist/assistant/input-source.js +37 -6
  380. package/node_modules/@murphai/assistant-engine/dist/assistant/input-source.js.map +1 -1
  381. package/node_modules/@murphai/assistant-engine/dist/assistant/input-store.d.ts +109 -44
  382. package/node_modules/@murphai/assistant-engine/dist/assistant/input-store.d.ts.map +1 -1
  383. package/node_modules/@murphai/assistant-engine/dist/assistant/input-store.js +46 -10
  384. package/node_modules/@murphai/assistant-engine/dist/assistant/input-store.js.map +1 -1
  385. package/node_modules/@murphai/assistant-engine/dist/assistant/local-service.d.ts.map +1 -1
  386. package/node_modules/@murphai/assistant-engine/dist/assistant/local-service.js +335 -120
  387. package/node_modules/@murphai/assistant-engine/dist/assistant/local-service.js.map +1 -1
  388. package/node_modules/@murphai/assistant-engine/dist/assistant/maintenance-evidence.d.ts +7 -0
  389. package/node_modules/@murphai/assistant-engine/dist/assistant/maintenance-evidence.d.ts.map +1 -0
  390. package/node_modules/@murphai/assistant-engine/dist/assistant/maintenance-evidence.js +101 -0
  391. package/node_modules/@murphai/assistant-engine/dist/assistant/maintenance-evidence.js.map +1 -0
  392. package/node_modules/@murphai/assistant-engine/dist/assistant/managed-automations.d.ts +69 -1
  393. package/node_modules/@murphai/assistant-engine/dist/assistant/managed-automations.d.ts.map +1 -1
  394. package/node_modules/@murphai/assistant-engine/dist/assistant/managed-automations.js +234 -49
  395. package/node_modules/@murphai/assistant-engine/dist/assistant/managed-automations.js.map +1 -1
  396. package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.d.ts +1 -1
  397. package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.d.ts.map +1 -1
  398. package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.js +3 -4
  399. package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.js.map +1 -1
  400. package/node_modules/@murphai/assistant-engine/dist/assistant/newsletter-outbox.d.ts +12 -0
  401. package/node_modules/@murphai/assistant-engine/dist/assistant/newsletter-outbox.d.ts.map +1 -0
  402. package/node_modules/@murphai/assistant-engine/dist/assistant/newsletter-outbox.js +294 -0
  403. package/node_modules/@murphai/assistant-engine/dist/assistant/newsletter-outbox.js.map +1 -0
  404. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.d.ts +20 -1
  405. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.d.ts.map +1 -1
  406. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.js +556 -113
  407. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.js.map +1 -1
  408. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-followup-automation.d.ts.map +1 -1
  409. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-followup-automation.js +11 -9
  410. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-followup-automation.js.map +1 -1
  411. package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-state.d.ts.map +1 -1
  412. package/node_modules/@murphai/assistant-engine/dist/assistant/operator-authority.d.ts +1 -1
  413. package/node_modules/@murphai/assistant-engine/dist/assistant/operator-authority.d.ts.map +1 -1
  414. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/dispatch-state.d.ts +3 -0
  415. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/dispatch-state.d.ts.map +1 -1
  416. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/dispatch-state.js +132 -21
  417. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/dispatch-state.js.map +1 -1
  418. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/ordering.d.ts +7 -0
  419. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/ordering.d.ts.map +1 -0
  420. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/ordering.js +140 -0
  421. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/ordering.js.map +1 -0
  422. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/retry-policy.d.ts +3 -0
  423. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/retry-policy.d.ts.map +1 -1
  424. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/retry-policy.js +79 -1
  425. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/retry-policy.js.map +1 -1
  426. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/store.d.ts.map +1 -1
  427. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/store.js +28 -2
  428. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/store.js.map +1 -1
  429. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.d.ts +20 -0
  430. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.d.ts.map +1 -1
  431. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.js +154 -19
  432. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.js.map +1 -1
  433. package/node_modules/@murphai/assistant-engine/dist/assistant/progress-constants.d.ts +7 -2
  434. package/node_modules/@murphai/assistant-engine/dist/assistant/progress-constants.d.ts.map +1 -1
  435. package/node_modules/@murphai/assistant-engine/dist/assistant/progress-constants.js +16 -2
  436. package/node_modules/@murphai/assistant-engine/dist/assistant/progress-constants.js.map +1 -1
  437. package/node_modules/@murphai/assistant-engine/dist/assistant/provider-progress.d.ts +1 -1
  438. package/node_modules/@murphai/assistant-engine/dist/assistant/provider-progress.d.ts.map +1 -1
  439. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/codex-cli.d.ts.map +1 -1
  440. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/codex-cli.js +55 -173
  441. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/codex-cli.js.map +1 -1
  442. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/helpers.d.ts.map +1 -1
  443. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/helpers.js +5 -3
  444. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/helpers.js.map +1 -1
  445. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/types.d.ts +24 -25
  446. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/types.d.ts.map +1 -1
  447. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/types.js.map +1 -1
  448. package/node_modules/@murphai/assistant-engine/dist/assistant/receipts.d.ts +1 -0
  449. package/node_modules/@murphai/assistant-engine/dist/assistant/receipts.d.ts.map +1 -1
  450. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-bubbles.d.ts +6 -0
  451. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-bubbles.d.ts.map +1 -0
  452. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-bubbles.js +47 -0
  453. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-bubbles.js.map +1 -0
  454. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.d.ts +1 -1
  455. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.d.ts.map +1 -1
  456. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.js +8 -0
  457. package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.js.map +1 -1
  458. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-budget-policy.d.ts.map +1 -1
  459. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-budgets.d.ts +2 -0
  460. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-budgets.d.ts.map +1 -1
  461. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-budgets.js +92 -40
  462. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-budgets.js.map +1 -1
  463. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.d.ts +3 -0
  464. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.d.ts.map +1 -1
  465. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.js +107 -37
  466. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.js.map +1 -1
  467. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-write-lock.d.ts +1 -1
  468. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-write-lock.d.ts.map +1 -1
  469. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-write-lock.js +2 -2
  470. package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-write-lock.js.map +1 -1
  471. package/node_modules/@murphai/assistant-engine/dist/assistant/service-contracts.d.ts +15 -3
  472. package/node_modules/@murphai/assistant-engine/dist/assistant/service-contracts.d.ts.map +1 -1
  473. package/node_modules/@murphai/assistant-engine/dist/assistant/service-turn-routes.d.ts.map +1 -1
  474. package/node_modules/@murphai/assistant-engine/dist/assistant/service-turn-routes.js +11 -2
  475. package/node_modules/@murphai/assistant-engine/dist/assistant/service-turn-routes.js.map +1 -1
  476. package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.d.ts +2 -0
  477. package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.d.ts.map +1 -1
  478. package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.js +9 -1
  479. package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.js.map +1 -1
  480. package/node_modules/@murphai/assistant-engine/dist/assistant/service.d.ts +29 -24
  481. package/node_modules/@murphai/assistant-engine/dist/assistant/service.d.ts.map +1 -1
  482. package/node_modules/@murphai/assistant-engine/dist/assistant/service.js +5 -0
  483. package/node_modules/@murphai/assistant-engine/dist/assistant/service.js.map +1 -1
  484. package/node_modules/@murphai/assistant-engine/dist/assistant/session-resolution.d.ts +1 -1
  485. package/node_modules/@murphai/assistant-engine/dist/assistant/session-resolution.d.ts.map +1 -1
  486. package/node_modules/@murphai/assistant-engine/dist/assistant/session-resolution.js +81 -13
  487. package/node_modules/@murphai/assistant-engine/dist/assistant/session-resolution.js.map +1 -1
  488. package/node_modules/@murphai/assistant-engine/dist/assistant/state-write-lock.d.ts +1 -1
  489. package/node_modules/@murphai/assistant-engine/dist/assistant/state-write-lock.d.ts.map +1 -1
  490. package/node_modules/@murphai/assistant-engine/dist/assistant/state-write-lock.js +35 -5
  491. package/node_modules/@murphai/assistant-engine/dist/assistant/state-write-lock.js.map +1 -1
  492. package/node_modules/@murphai/assistant-engine/dist/assistant/status.d.ts.map +1 -1
  493. package/node_modules/@murphai/assistant-engine/dist/assistant/status.js +36 -4
  494. package/node_modules/@murphai/assistant-engine/dist/assistant/status.js.map +1 -1
  495. package/node_modules/@murphai/assistant-engine/dist/assistant/store/paths.d.ts +1 -0
  496. package/node_modules/@murphai/assistant-engine/dist/assistant/store/paths.d.ts.map +1 -1
  497. package/node_modules/@murphai/assistant-engine/dist/assistant/store/paths.js +23 -1
  498. package/node_modules/@murphai/assistant-engine/dist/assistant/store/paths.js.map +1 -1
  499. package/node_modules/@murphai/assistant-engine/dist/assistant/store/persistence.d.ts +6 -3
  500. package/node_modules/@murphai/assistant-engine/dist/assistant/store/persistence.d.ts.map +1 -1
  501. package/node_modules/@murphai/assistant-engine/dist/assistant/store/persistence.js +137 -16
  502. package/node_modules/@murphai/assistant-engine/dist/assistant/store/persistence.js.map +1 -1
  503. package/node_modules/@murphai/assistant-engine/dist/assistant/store/types.d.ts +1 -0
  504. package/node_modules/@murphai/assistant-engine/dist/assistant/store/types.d.ts.map +1 -1
  505. package/node_modules/@murphai/assistant-engine/dist/assistant/store.d.ts +6 -1
  506. package/node_modules/@murphai/assistant-engine/dist/assistant/store.d.ts.map +1 -1
  507. package/node_modules/@murphai/assistant-engine/dist/assistant/store.js +94 -22
  508. package/node_modules/@murphai/assistant-engine/dist/assistant/store.js.map +1 -1
  509. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.d.ts +16 -6
  510. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.d.ts.map +1 -1
  511. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.js +546 -230
  512. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.js.map +1 -1
  513. package/node_modules/@murphai/assistant-engine/dist/assistant/transcript-audit.js.map +1 -1
  514. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.d.ts +16 -0
  515. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.d.ts.map +1 -1
  516. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.js +58 -10
  517. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.js.map +1 -1
  518. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-input.d.ts +2 -0
  519. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-input.d.ts.map +1 -1
  520. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-input.js.map +1 -1
  521. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-plan.d.ts.map +1 -1
  522. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-plan.js +1 -0
  523. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-plan.js.map +1 -1
  524. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-progress.d.ts +3 -6
  525. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-progress.d.ts.map +1 -1
  526. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-progress.js +29 -22
  527. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-progress.js.map +1 -1
  528. package/node_modules/@murphai/assistant-engine/dist/assistant/turns.d.ts +7 -1
  529. package/node_modules/@murphai/assistant-engine/dist/assistant/turns.d.ts.map +1 -1
  530. package/node_modules/@murphai/assistant-engine/dist/assistant/turns.js +33 -5
  531. package/node_modules/@murphai/assistant-engine/dist/assistant/turns.js.map +1 -1
  532. package/node_modules/@murphai/assistant-engine/dist/assistant/usage-attribution.d.ts +1 -1
  533. package/node_modules/@murphai/assistant-engine/dist/assistant/usage-attribution.d.ts.map +1 -1
  534. package/node_modules/@murphai/assistant-engine/dist/assistant/usage-attribution.js.map +1 -1
  535. package/node_modules/@murphai/assistant-engine/dist/assistant/vault-file-send.d.ts +12 -1
  536. package/node_modules/@murphai/assistant-engine/dist/assistant/vault-file-send.d.ts.map +1 -1
  537. package/node_modules/@murphai/assistant-engine/dist/assistant/vault-file-send.js +53 -1
  538. package/node_modules/@murphai/assistant-engine/dist/assistant/vault-file-send.js.map +1 -1
  539. package/node_modules/@murphai/assistant-engine/dist/assistant-ask.d.ts +70 -0
  540. package/node_modules/@murphai/assistant-engine/dist/assistant-ask.d.ts.map +1 -0
  541. package/node_modules/@murphai/assistant-engine/dist/assistant-ask.js +218 -0
  542. package/node_modules/@murphai/assistant-engine/dist/assistant-ask.js.map +1 -0
  543. package/node_modules/@murphai/assistant-engine/dist/assistant-channel-adapters.d.ts +2 -2
  544. package/node_modules/@murphai/assistant-engine/dist/assistant-channel-adapters.d.ts.map +1 -1
  545. package/node_modules/@murphai/assistant-engine/dist/assistant-channel-adapters.js +1 -1
  546. package/node_modules/@murphai/assistant-engine/dist/assistant-channel-adapters.js.map +1 -1
  547. package/node_modules/@murphai/assistant-engine/dist/assistant-channel-runtime.d.ts +1 -1
  548. package/node_modules/@murphai/assistant-engine/dist/assistant-channel-runtime.d.ts.map +1 -1
  549. package/node_modules/@murphai/assistant-engine/dist/assistant-channel-runtime.js +1 -1
  550. package/node_modules/@murphai/assistant-engine/dist/assistant-channel-runtime.js.map +1 -1
  551. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-access.d.ts.map +1 -1
  552. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-access.js +4 -1
  553. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-access.js.map +1 -1
  554. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-requests.d.ts.map +1 -1
  555. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-requests.js +25 -1
  556. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-requests.js.map +1 -1
  557. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.d.ts +5 -0
  558. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.d.ts.map +1 -1
  559. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.js +12 -5
  560. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.js.map +1 -1
  561. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/assistant-style.d.ts +82 -0
  562. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/assistant-style.d.ts.map +1 -0
  563. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/assistant-style.js +190 -0
  564. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/assistant-style.js.map +1 -0
  565. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/connected-apps.d.ts +18 -18
  566. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/connected-apps.d.ts.map +1 -1
  567. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/connected-apps.js +2 -2
  568. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/connected-apps.js.map +1 -1
  569. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/generate-song.d.ts +8 -8
  570. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/generate-song.d.ts.map +1 -1
  571. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/generate-song.js +1 -1
  572. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/generate-song.js.map +1 -1
  573. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/generate-voice-memo.d.ts +10 -10
  574. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/generate-voice-memo.d.ts.map +1 -1
  575. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/phone-calls.d.ts +4 -3
  576. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/phone-calls.d.ts.map +1 -1
  577. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/phone-calls.js +17 -8
  578. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/phone-calls.js.map +1 -1
  579. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.d.ts +1273 -268
  580. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.d.ts.map +1 -1
  581. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.js +1724 -34
  582. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.js.map +1 -1
  583. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/failures.d.ts +1 -1
  584. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/failures.d.ts.map +1 -1
  585. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/failures.js +4 -13
  586. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/failures.js.map +1 -1
  587. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/generate-image-tool.d.ts +3 -3
  588. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/generate-image-tool.d.ts.map +1 -1
  589. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/generate-image-tool.js +352 -74
  590. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/generate-image-tool.js.map +1 -1
  591. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/generate-voice-memo-tool.d.ts +1 -0
  592. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/generate-voice-memo-tool.d.ts.map +1 -1
  593. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/generate-voice-memo-tool.js +6 -12
  594. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/generate-voice-memo-tool.js.map +1 -1
  595. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/image-reference-resolver.d.ts +2 -3
  596. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/image-reference-resolver.d.ts.map +1 -1
  597. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/image-reference-resolver.js +89 -39
  598. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/image-reference-resolver.js.map +1 -1
  599. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/openai-image-generation.d.ts +1 -1
  600. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/openai-image-generation.js +4 -4
  601. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/openai-image-generation.js.map +1 -1
  602. package/node_modules/@murphai/assistant-engine/dist/assistant-codex-events.d.ts +2 -2
  603. package/node_modules/@murphai/assistant-engine/dist/assistant-codex-events.d.ts.map +1 -1
  604. package/node_modules/@murphai/assistant-engine/dist/assistant-codex-events.js +1 -6
  605. package/node_modules/@murphai/assistant-engine/dist/assistant-codex-events.js.map +1 -1
  606. package/node_modules/@murphai/assistant-engine/dist/assistant-codex.d.ts +23 -15
  607. package/node_modules/@murphai/assistant-engine/dist/assistant-codex.d.ts.map +1 -1
  608. package/node_modules/@murphai/assistant-engine/dist/assistant-codex.js +868 -533
  609. package/node_modules/@murphai/assistant-engine/dist/assistant-codex.js.map +1 -1
  610. package/node_modules/@murphai/assistant-engine/dist/assistant-service.d.ts +1 -1
  611. package/node_modules/@murphai/assistant-engine/dist/assistant-service.d.ts.map +1 -1
  612. package/node_modules/@murphai/assistant-engine/dist/assistant-service.js +1 -1
  613. package/node_modules/@murphai/assistant-engine/dist/assistant-service.js.map +1 -1
  614. package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.d.ts +140 -48
  615. package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.d.ts.map +1 -1
  616. package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.js +118 -3
  617. package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.js.map +1 -1
  618. package/node_modules/@murphai/assistant-engine/dist/assistant-skill-env.d.ts +2 -2
  619. package/node_modules/@murphai/assistant-engine/dist/attachment-prompt-contracts.d.ts +17 -17
  620. package/node_modules/@murphai/assistant-engine/dist/attachment-prompt-contracts.d.ts.map +1 -1
  621. package/node_modules/@murphai/assistant-engine/dist/codex-lifecycle.d.ts +3 -1
  622. package/node_modules/@murphai/assistant-engine/dist/codex-lifecycle.d.ts.map +1 -1
  623. package/node_modules/@murphai/assistant-engine/dist/codex-lifecycle.js +7 -1
  624. package/node_modules/@murphai/assistant-engine/dist/codex-lifecycle.js.map +1 -1
  625. package/node_modules/@murphai/assistant-engine/dist/inbox-routing-vision.d.ts +2 -2
  626. package/node_modules/@murphai/assistant-engine/dist/inbox-routing-vision.d.ts.map +1 -1
  627. package/node_modules/@murphai/assistant-engine/dist/index.d.ts +2 -0
  628. package/node_modules/@murphai/assistant-engine/dist/index.d.ts.map +1 -1
  629. package/node_modules/@murphai/assistant-engine/dist/index.js +1 -0
  630. package/node_modules/@murphai/assistant-engine/dist/index.js.map +1 -1
  631. package/node_modules/@murphai/assistant-engine/dist/knowledge/service.js.map +1 -1
  632. package/node_modules/@murphai/assistant-engine/dist/outbound-channel.d.ts +3 -2
  633. package/node_modules/@murphai/assistant-engine/dist/outbound-channel.d.ts.map +1 -1
  634. package/node_modules/@murphai/assistant-engine/dist/outbound-channel.js +4 -2
  635. package/node_modules/@murphai/assistant-engine/dist/outbound-channel.js.map +1 -1
  636. package/node_modules/@murphai/assistant-engine/package.json +4 -0
  637. package/node_modules/@murphai/assistant-engine/skills/aerobic-fitness/SKILL.md +56 -0
  638. package/node_modules/@murphai/assistant-engine/skills/appointment-scheduling/SKILL.md +249 -0
  639. package/node_modules/@murphai/assistant-engine/skills/behavior-followthrough/SKILL.md +18 -9
  640. package/node_modules/@murphai/assistant-engine/skills/body-composition/SKILL.md +56 -0
  641. package/node_modules/@murphai/assistant-engine/skills/cardiometabolic-health/SKILL.md +56 -0
  642. package/node_modules/@murphai/assistant-engine/skills/circadian-rhythm/SKILL.md +57 -0
  643. package/node_modules/@murphai/assistant-engine/skills/cognitive-focus/SKILL.md +55 -0
  644. package/node_modules/@murphai/assistant-engine/skills/computer-use/SKILL.md +163 -121
  645. package/node_modules/@murphai/assistant-engine/skills/computer-use/references/health-browser-playbook.md +16 -9
  646. package/node_modules/@murphai/assistant-engine/skills/cycle-hormonal-health/SKILL.md +55 -0
  647. package/node_modules/@murphai/assistant-engine/skills/daily-activity/SKILL.md +55 -0
  648. package/node_modules/@murphai/assistant-engine/skills/energy-fatigue/SKILL.md +57 -0
  649. package/node_modules/@murphai/assistant-engine/skills/experiment-onboarding/SKILL.md +24 -10
  650. package/node_modules/@murphai/assistant-engine/skills/food-journal/SKILL.md +26 -0
  651. package/node_modules/@murphai/assistant-engine/skills/general-eye-health/SKILL.md +77 -0
  652. package/node_modules/@murphai/assistant-engine/skills/general-eye-health/references/evidence-register.md +34 -0
  653. package/node_modules/@murphai/assistant-engine/skills/general-eye-health/references/triage-and-contact-lenses.md +103 -0
  654. package/node_modules/@murphai/assistant-engine/skills/group-challenge/SKILL.md +346 -0
  655. package/node_modules/@murphai/assistant-engine/skills/group-chat/SKILL.md +296 -0
  656. package/node_modules/@murphai/assistant-engine/skills/group-newsletter/SKILL.md +210 -0
  657. package/node_modules/@murphai/assistant-engine/skills/groupchat-comedy/SKILL.md +182 -0
  658. package/node_modules/@murphai/assistant-engine/skills/gut-digestion/SKILL.md +57 -0
  659. package/node_modules/@murphai/assistant-engine/skills/hrv-resting-heart-rate/SKILL.md +55 -0
  660. package/node_modules/@murphai/assistant-engine/skills/micronutrients-supplements/SKILL.md +80 -0
  661. package/node_modules/@murphai/assistant-engine/skills/mobility-posture/SKILL.md +56 -0
  662. package/node_modules/@murphai/assistant-engine/skills/murph-onboarding/SKILL.md +358 -124
  663. package/node_modules/@murphai/assistant-engine/skills/music-generation/SKILL.md +162 -0
  664. package/node_modules/@murphai/assistant-engine/skills/nutrition-strategy/SKILL.md +73 -109
  665. package/node_modules/@murphai/assistant-engine/skills/physical-therapy/SKILL.md +3 -1
  666. package/node_modules/@murphai/assistant-engine/skills/recovery-modalities/SKILL.md +57 -0
  667. package/node_modules/@murphai/assistant-engine/skills/red-light-therapy/SKILL.md +145 -0
  668. package/node_modules/@murphai/assistant-engine/skills/red-light-therapy/device-seeds.json +259 -0
  669. package/node_modules/@murphai/assistant-engine/skills/shared/exercise-catalog-runtime.md +29 -0
  670. package/node_modules/@murphai/assistant-engine/skills/shared/murph-character-sheet-v1.png +0 -0
  671. package/node_modules/@murphai/assistant-engine/skills/sleep-improvement/SKILL.md +60 -0
  672. package/node_modules/@murphai/assistant-engine/skills/sleep-recovery-readiness/SKILL.md +68 -178
  673. package/node_modules/@murphai/assistant-engine/skills/strength-training/SKILL.md +1 -1
  674. package/node_modules/@murphai/assistant-engine/skills/substance-load/SKILL.md +56 -0
  675. package/node_modules/@murphai/assistantd/dist/client.js.map +1 -1
  676. package/node_modules/@murphai/assistantd/dist/config.js.map +1 -1
  677. package/node_modules/@murphai/assistantd/dist/http-protocol.d.ts.map +1 -1
  678. package/node_modules/@murphai/assistantd/dist/http-protocol.js.map +1 -1
  679. package/node_modules/@murphai/clinical-records/README.md +82 -0
  680. package/node_modules/@murphai/clinical-records/dist/index.d.ts +1865 -0
  681. package/node_modules/@murphai/clinical-records/dist/index.d.ts.map +1 -0
  682. package/node_modules/@murphai/clinical-records/dist/index.js +488 -0
  683. package/node_modules/@murphai/clinical-records/dist/index.js.map +1 -0
  684. package/node_modules/@murphai/clinical-records/package.json +27 -0
  685. package/node_modules/@murphai/core/dist/atomic-write.d.ts +4 -0
  686. package/node_modules/@murphai/core/dist/atomic-write.d.ts.map +1 -1
  687. package/node_modules/@murphai/core/dist/atomic-write.js +26 -0
  688. package/node_modules/@murphai/core/dist/atomic-write.js.map +1 -1
  689. package/node_modules/@murphai/core/dist/automation.d.ts +8 -2
  690. package/node_modules/@murphai/core/dist/automation.d.ts.map +1 -1
  691. package/node_modules/@murphai/core/dist/automation.js +66 -2
  692. package/node_modules/@murphai/core/dist/automation.js.map +1 -1
  693. package/node_modules/@murphai/core/dist/bank/goals.js.map +1 -1
  694. package/node_modules/@murphai/core/dist/bank/habitat.d.ts +36 -0
  695. package/node_modules/@murphai/core/dist/bank/habitat.d.ts.map +1 -0
  696. package/node_modules/@murphai/core/dist/bank/habitat.js +179 -0
  697. package/node_modules/@murphai/core/dist/bank/habitat.js.map +1 -0
  698. package/node_modules/@murphai/core/dist/bank/regimens.js.map +1 -1
  699. package/node_modules/@murphai/core/dist/constants.d.ts +4 -0
  700. package/node_modules/@murphai/core/dist/constants.d.ts.map +1 -1
  701. package/node_modules/@murphai/core/dist/domains/events/attachment-backed.d.ts +41 -1
  702. package/node_modules/@murphai/core/dist/domains/events/attachment-backed.d.ts.map +1 -1
  703. package/node_modules/@murphai/core/dist/domains/events/attachment-backed.js +311 -5
  704. package/node_modules/@murphai/core/dist/domains/events/attachment-backed.js.map +1 -1
  705. package/node_modules/@murphai/core/dist/domains/events/capture-lookup.d.ts +6 -0
  706. package/node_modules/@murphai/core/dist/domains/events/capture-lookup.d.ts.map +1 -0
  707. package/node_modules/@murphai/core/dist/domains/events/capture-lookup.js +7 -0
  708. package/node_modules/@murphai/core/dist/domains/events/capture-lookup.js.map +1 -0
  709. package/node_modules/@murphai/core/dist/domains/events/ledger.d.ts.map +1 -1
  710. package/node_modules/@murphai/core/dist/domains/events/ledger.js +4 -0
  711. package/node_modules/@murphai/core/dist/domains/events/ledger.js.map +1 -1
  712. package/node_modules/@murphai/core/dist/domains/events.d.ts +2 -2
  713. package/node_modules/@murphai/core/dist/domains/events.d.ts.map +1 -1
  714. package/node_modules/@murphai/core/dist/domains/events.js +1 -1
  715. package/node_modules/@murphai/core/dist/domains/events.js.map +1 -1
  716. package/node_modules/@murphai/core/dist/domains/experiments.d.ts.map +1 -1
  717. package/node_modules/@murphai/core/dist/domains/experiments.js +9 -3
  718. package/node_modules/@murphai/core/dist/domains/experiments.js.map +1 -1
  719. package/node_modules/@murphai/core/dist/domains/shared.js.map +1 -1
  720. package/node_modules/@murphai/core/dist/errors.d.ts.map +1 -1
  721. package/node_modules/@murphai/core/dist/errors.js.map +1 -1
  722. package/node_modules/@murphai/core/dist/event-attachments.d.ts +2 -1
  723. package/node_modules/@murphai/core/dist/event-attachments.d.ts.map +1 -1
  724. package/node_modules/@murphai/core/dist/event-attachments.js +1 -0
  725. package/node_modules/@murphai/core/dist/event-attachments.js.map +1 -1
  726. package/node_modules/@murphai/core/dist/experiment-media-repair.d.ts +33 -0
  727. package/node_modules/@murphai/core/dist/experiment-media-repair.d.ts.map +1 -0
  728. package/node_modules/@murphai/core/dist/experiment-media-repair.js +685 -0
  729. package/node_modules/@murphai/core/dist/experiment-media-repair.js.map +1 -0
  730. package/node_modules/@murphai/core/dist/experiment-storage.d.ts +12 -0
  731. package/node_modules/@murphai/core/dist/experiment-storage.d.ts.map +1 -0
  732. package/node_modules/@murphai/core/dist/experiment-storage.js +70 -0
  733. package/node_modules/@murphai/core/dist/experiment-storage.js.map +1 -0
  734. package/node_modules/@murphai/core/dist/frontmatter.js.map +1 -1
  735. package/node_modules/@murphai/core/dist/fs.d.ts +1 -0
  736. package/node_modules/@murphai/core/dist/fs.d.ts.map +1 -1
  737. package/node_modules/@murphai/core/dist/fs.js +3 -0
  738. package/node_modules/@murphai/core/dist/fs.js.map +1 -1
  739. package/node_modules/@murphai/core/dist/history/api.d.ts +11 -0
  740. package/node_modules/@murphai/core/dist/history/api.d.ts.map +1 -1
  741. package/node_modules/@murphai/core/dist/history/api.js +60 -3
  742. package/node_modules/@murphai/core/dist/history/api.js.map +1 -1
  743. package/node_modules/@murphai/core/dist/history/types.d.ts.map +1 -1
  744. package/node_modules/@murphai/core/dist/ids.js.map +1 -1
  745. package/node_modules/@murphai/core/dist/index.d.ts +12 -6
  746. package/node_modules/@murphai/core/dist/index.d.ts.map +1 -1
  747. package/node_modules/@murphai/core/dist/index.js +6 -4
  748. package/node_modules/@murphai/core/dist/index.js.map +1 -1
  749. package/node_modules/@murphai/core/dist/integration-ingest-migration.d.ts.map +1 -1
  750. package/node_modules/@murphai/core/dist/integration-ingest-migration.js +1 -1
  751. package/node_modules/@murphai/core/dist/integration-ingest-migration.js.map +1 -1
  752. package/node_modules/@murphai/core/dist/integration-ingests.d.ts +73 -2
  753. package/node_modules/@murphai/core/dist/integration-ingests.d.ts.map +1 -1
  754. package/node_modules/@murphai/core/dist/integration-ingests.js +1196 -77
  755. package/node_modules/@murphai/core/dist/integration-ingests.js.map +1 -1
  756. package/node_modules/@murphai/core/dist/jsonl.d.ts +10 -0
  757. package/node_modules/@murphai/core/dist/jsonl.d.ts.map +1 -1
  758. package/node_modules/@murphai/core/dist/jsonl.js +63 -12
  759. package/node_modules/@murphai/core/dist/jsonl.js.map +1 -1
  760. package/node_modules/@murphai/core/dist/markdown-documents.js.map +1 -1
  761. package/node_modules/@murphai/core/dist/memory.d.ts +7 -2
  762. package/node_modules/@murphai/core/dist/memory.d.ts.map +1 -1
  763. package/node_modules/@murphai/core/dist/memory.js +36 -1
  764. package/node_modules/@murphai/core/dist/memory.js.map +1 -1
  765. package/node_modules/@murphai/core/dist/mutations.d.ts +33 -5
  766. package/node_modules/@murphai/core/dist/mutations.d.ts.map +1 -1
  767. package/node_modules/@murphai/core/dist/mutations.js +1684 -205
  768. package/node_modules/@murphai/core/dist/mutations.js.map +1 -1
  769. package/node_modules/@murphai/core/dist/operations/canonical-resource-lock.js.map +1 -1
  770. package/node_modules/@murphai/core/dist/operations/canonical-write-lock.js.map +1 -1
  771. package/node_modules/@murphai/core/dist/operations/index.d.ts +1 -1
  772. package/node_modules/@murphai/core/dist/operations/index.d.ts.map +1 -1
  773. package/node_modules/@murphai/core/dist/operations/index.js +1 -1
  774. package/node_modules/@murphai/core/dist/operations/index.js.map +1 -1
  775. package/node_modules/@murphai/core/dist/operations/write-batch.d.ts +34 -1
  776. package/node_modules/@murphai/core/dist/operations/write-batch.d.ts.map +1 -1
  777. package/node_modules/@murphai/core/dist/operations/write-batch.js +684 -39
  778. package/node_modules/@murphai/core/dist/operations/write-batch.js.map +1 -1
  779. package/node_modules/@murphai/core/dist/path-safety.js.map +1 -1
  780. package/node_modules/@murphai/core/dist/preferences.d.ts +21 -2
  781. package/node_modules/@murphai/core/dist/preferences.d.ts.map +1 -1
  782. package/node_modules/@murphai/core/dist/preferences.js +249 -12
  783. package/node_modules/@murphai/core/dist/preferences.js.map +1 -1
  784. package/node_modules/@murphai/core/dist/public-mutations.d.ts +13 -2
  785. package/node_modules/@murphai/core/dist/public-mutations.d.ts.map +1 -1
  786. package/node_modules/@murphai/core/dist/public-mutations.js +20 -3
  787. package/node_modules/@murphai/core/dist/public-mutations.js.map +1 -1
  788. package/node_modules/@murphai/core/dist/raw-artifact-integrity.js.map +1 -1
  789. package/node_modules/@murphai/core/dist/registry/api.d.ts.map +1 -1
  790. package/node_modules/@murphai/core/dist/scheduled-logs.d.ts +1 -0
  791. package/node_modules/@murphai/core/dist/scheduled-logs.d.ts.map +1 -1
  792. package/node_modules/@murphai/core/dist/scheduled-logs.js +1 -0
  793. package/node_modules/@murphai/core/dist/scheduled-logs.js.map +1 -1
  794. package/node_modules/@murphai/core/dist/vault.d.ts.map +1 -1
  795. package/node_modules/@murphai/core/dist/vault.js +174 -11
  796. package/node_modules/@murphai/core/dist/vault.js.map +1 -1
  797. package/node_modules/@murphai/core/dist/wearable-receipts.js.map +1 -1
  798. package/node_modules/@murphai/core/dist/wearable-storage-migration.js.map +1 -1
  799. package/node_modules/@murphai/core/dist/write-policy.d.ts +3 -0
  800. package/node_modules/@murphai/core/dist/write-policy.d.ts.map +1 -1
  801. package/node_modules/@murphai/core/dist/write-policy.js +54 -3
  802. package/node_modules/@murphai/core/dist/write-policy.js.map +1 -1
  803. package/node_modules/@murphai/device-syncd/README.md +45 -5
  804. package/node_modules/@murphai/device-syncd/dist/callback-redirect.d.ts +7 -0
  805. package/node_modules/@murphai/device-syncd/dist/callback-redirect.d.ts.map +1 -1
  806. package/node_modules/@murphai/device-syncd/dist/callback-redirect.js +9 -0
  807. package/node_modules/@murphai/device-syncd/dist/callback-redirect.js.map +1 -1
  808. package/node_modules/@murphai/device-syncd/dist/client.js.map +1 -1
  809. package/node_modules/@murphai/device-syncd/dist/companion-health-metadata-parser.d.ts +30 -0
  810. package/node_modules/@murphai/device-syncd/dist/companion-health-metadata-parser.d.ts.map +1 -0
  811. package/node_modules/@murphai/device-syncd/dist/companion-health-metadata-parser.js +130 -0
  812. package/node_modules/@murphai/device-syncd/dist/companion-health-metadata-parser.js.map +1 -0
  813. package/node_modules/@murphai/device-syncd/dist/companion-health-metadata.d.ts +18 -0
  814. package/node_modules/@murphai/device-syncd/dist/companion-health-metadata.d.ts.map +1 -0
  815. package/node_modules/@murphai/device-syncd/dist/companion-health-metadata.js +18 -0
  816. package/node_modules/@murphai/device-syncd/dist/companion-health-metadata.js.map +1 -0
  817. package/node_modules/@murphai/device-syncd/dist/config/connect-routes.d.ts +4 -1
  818. package/node_modules/@murphai/device-syncd/dist/config/connect-routes.d.ts.map +1 -1
  819. package/node_modules/@murphai/device-syncd/dist/config/connect-routes.js +39 -4
  820. package/node_modules/@murphai/device-syncd/dist/config/connect-routes.js.map +1 -1
  821. package/node_modules/@murphai/device-syncd/dist/config/env-keys.d.ts.map +1 -1
  822. package/node_modules/@murphai/device-syncd/dist/config/junction-client-config.d.ts +9 -0
  823. package/node_modules/@murphai/device-syncd/dist/config/junction-client-config.d.ts.map +1 -0
  824. package/node_modules/@murphai/device-syncd/dist/config/junction-client-config.js +56 -0
  825. package/node_modules/@murphai/device-syncd/dist/config/junction-client-config.js.map +1 -0
  826. package/node_modules/@murphai/device-syncd/dist/config/junction-config.d.ts +3 -0
  827. package/node_modules/@murphai/device-syncd/dist/config/junction-config.d.ts.map +1 -0
  828. package/node_modules/@murphai/device-syncd/dist/config/junction-config.js +46 -0
  829. package/node_modules/@murphai/device-syncd/dist/config/junction-config.js.map +1 -0
  830. package/node_modules/@murphai/device-syncd/dist/config/junction-connect-sources.d.ts.map +1 -0
  831. package/node_modules/@murphai/device-syncd/dist/{providers → config}/junction-connect-sources.js +1 -1
  832. package/node_modules/@murphai/device-syncd/dist/config/junction-connect-sources.js.map +1 -0
  833. package/node_modules/@murphai/device-syncd/dist/config/provider-configs.d.ts +3 -5
  834. package/node_modules/@murphai/device-syncd/dist/config/provider-configs.d.ts.map +1 -1
  835. package/node_modules/@murphai/device-syncd/dist/config/provider-configs.js +69 -14
  836. package/node_modules/@murphai/device-syncd/dist/config/provider-configs.js.map +1 -1
  837. package/node_modules/@murphai/device-syncd/dist/config/provider-env.d.ts +2 -3
  838. package/node_modules/@murphai/device-syncd/dist/config/provider-env.d.ts.map +1 -1
  839. package/node_modules/@murphai/device-syncd/dist/config/provider-env.js +0 -3
  840. package/node_modules/@murphai/device-syncd/dist/config/provider-env.js.map +1 -1
  841. package/node_modules/@murphai/device-syncd/dist/config/provider-factory.d.ts.map +1 -1
  842. package/node_modules/@murphai/device-syncd/dist/config/provider-factory.js +9 -5
  843. package/node_modules/@murphai/device-syncd/dist/config/provider-factory.js.map +1 -1
  844. package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.d.ts +26 -16
  845. package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.d.ts.map +1 -1
  846. package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.js +236 -339
  847. package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.js.map +1 -1
  848. package/node_modules/@murphai/device-syncd/dist/config/provider-types.d.ts +62 -5
  849. package/node_modules/@murphai/device-syncd/dist/config/provider-types.d.ts.map +1 -1
  850. package/node_modules/@murphai/device-syncd/dist/config/runtime-config.d.ts.map +1 -1
  851. package/node_modules/@murphai/device-syncd/dist/config/runtime-config.js +7 -361
  852. package/node_modules/@murphai/device-syncd/dist/config/runtime-config.js.map +1 -1
  853. package/node_modules/@murphai/device-syncd/dist/config/serializable-provider-configs.d.ts +17 -1
  854. package/node_modules/@murphai/device-syncd/dist/config/serializable-provider-configs.d.ts.map +1 -1
  855. package/node_modules/@murphai/device-syncd/dist/config/serializable-provider-configs.js +104 -11
  856. package/node_modules/@murphai/device-syncd/dist/config/serializable-provider-configs.js.map +1 -1
  857. package/node_modules/@murphai/device-syncd/dist/config.d.ts +5 -3
  858. package/node_modules/@murphai/device-syncd/dist/config.d.ts.map +1 -1
  859. package/node_modules/@murphai/device-syncd/dist/config.js +4 -2
  860. package/node_modules/@murphai/device-syncd/dist/config.js.map +1 -1
  861. package/node_modules/@murphai/device-syncd/dist/configured-provider-descriptors.d.ts +6 -0
  862. package/node_modules/@murphai/device-syncd/dist/configured-provider-descriptors.d.ts.map +1 -0
  863. package/node_modules/@murphai/device-syncd/dist/configured-provider-descriptors.js +7 -0
  864. package/node_modules/@murphai/device-syncd/dist/configured-provider-descriptors.js.map +1 -0
  865. package/node_modules/@murphai/device-syncd/dist/configured-provider-runtime-descriptors.d.ts +3 -0
  866. package/node_modules/@murphai/device-syncd/dist/configured-provider-runtime-descriptors.d.ts.map +1 -0
  867. package/node_modules/@murphai/device-syncd/dist/configured-provider-runtime-descriptors.js +2 -0
  868. package/node_modules/@murphai/device-syncd/dist/configured-provider-runtime-descriptors.js.map +1 -0
  869. package/node_modules/@murphai/device-syncd/dist/connect-config.d.ts +2 -2
  870. package/node_modules/@murphai/device-syncd/dist/connect-config.d.ts.map +1 -1
  871. package/node_modules/@murphai/device-syncd/dist/connect-config.js +4 -11
  872. package/node_modules/@murphai/device-syncd/dist/connect-config.js.map +1 -1
  873. package/node_modules/@murphai/device-syncd/dist/errors.d.ts +8 -0
  874. package/node_modules/@murphai/device-syncd/dist/errors.d.ts.map +1 -1
  875. package/node_modules/@murphai/device-syncd/dist/errors.js +26 -0
  876. package/node_modules/@murphai/device-syncd/dist/errors.js.map +1 -1
  877. package/node_modules/@murphai/device-syncd/dist/hosted-hints.js +1 -1
  878. package/node_modules/@murphai/device-syncd/dist/hosted-hints.js.map +1 -1
  879. package/node_modules/@murphai/device-syncd/dist/hosted-runtime.d.ts +24 -0
  880. package/node_modules/@murphai/device-syncd/dist/hosted-runtime.d.ts.map +1 -1
  881. package/node_modules/@murphai/device-syncd/dist/hosted-runtime.js +187 -28
  882. package/node_modules/@murphai/device-syncd/dist/hosted-runtime.js.map +1 -1
  883. package/node_modules/@murphai/device-syncd/dist/http.d.ts +2 -9
  884. package/node_modules/@murphai/device-syncd/dist/http.d.ts.map +1 -1
  885. package/node_modules/@murphai/device-syncd/dist/http.js +26 -29
  886. package/node_modules/@murphai/device-syncd/dist/http.js.map +1 -1
  887. package/node_modules/@murphai/device-syncd/dist/index.d.ts +7 -7
  888. package/node_modules/@murphai/device-syncd/dist/index.d.ts.map +1 -1
  889. package/node_modules/@murphai/device-syncd/dist/index.js +1 -1
  890. package/node_modules/@murphai/device-syncd/dist/index.js.map +1 -1
  891. package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.d.ts +60 -0
  892. package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.d.ts.map +1 -0
  893. package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.js +382 -0
  894. package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.js.map +1 -0
  895. package/node_modules/@murphai/device-syncd/dist/junction-resources.d.ts +17 -0
  896. package/node_modules/@murphai/device-syncd/dist/junction-resources.d.ts.map +1 -0
  897. package/node_modules/@murphai/device-syncd/dist/junction-resources.js +28 -0
  898. package/node_modules/@murphai/device-syncd/dist/junction-resources.js.map +1 -0
  899. package/node_modules/@murphai/device-syncd/dist/metadata.d.ts +1 -0
  900. package/node_modules/@murphai/device-syncd/dist/metadata.d.ts.map +1 -1
  901. package/node_modules/@murphai/device-syncd/dist/metadata.js +1 -1
  902. package/node_modules/@murphai/device-syncd/dist/metadata.js.map +1 -1
  903. package/node_modules/@murphai/device-syncd/dist/provider-configs.d.ts +3 -0
  904. package/node_modules/@murphai/device-syncd/dist/provider-configs.d.ts.map +1 -0
  905. package/node_modules/@murphai/device-syncd/dist/provider-configs.js +2 -0
  906. package/node_modules/@murphai/device-syncd/dist/provider-configs.js.map +1 -0
  907. package/node_modules/@murphai/device-syncd/dist/provider-credential-policy.d.ts +6 -0
  908. package/node_modules/@murphai/device-syncd/dist/provider-credential-policy.d.ts.map +1 -0
  909. package/node_modules/@murphai/device-syncd/dist/provider-credential-policy.js +22 -0
  910. package/node_modules/@murphai/device-syncd/dist/provider-credential-policy.js.map +1 -0
  911. package/node_modules/@murphai/device-syncd/dist/provider-job-definitions.d.ts +7 -0
  912. package/node_modules/@murphai/device-syncd/dist/provider-job-definitions.d.ts.map +1 -0
  913. package/node_modules/@murphai/device-syncd/dist/provider-job-definitions.js +116 -0
  914. package/node_modules/@murphai/device-syncd/dist/provider-job-definitions.js.map +1 -0
  915. package/node_modules/@murphai/device-syncd/dist/provider-label.d.ts.map +1 -1
  916. package/node_modules/@murphai/device-syncd/dist/provider-label.js +5 -5
  917. package/node_modules/@murphai/device-syncd/dist/provider-label.js.map +1 -1
  918. package/node_modules/@murphai/device-syncd/dist/providers/junction-client.d.ts +22 -5
  919. package/node_modules/@murphai/device-syncd/dist/providers/junction-client.d.ts.map +1 -1
  920. package/node_modules/@murphai/device-syncd/dist/providers/junction-client.js +93 -58
  921. package/node_modules/@murphai/device-syncd/dist/providers/junction-client.js.map +1 -1
  922. package/node_modules/@murphai/device-syncd/dist/providers/junction-config.d.ts +3 -0
  923. package/node_modules/@murphai/device-syncd/dist/providers/junction-config.d.ts.map +1 -0
  924. package/node_modules/@murphai/device-syncd/dist/providers/junction-config.js +2 -0
  925. package/node_modules/@murphai/device-syncd/dist/providers/junction-config.js.map +1 -0
  926. package/node_modules/@murphai/device-syncd/dist/providers/junction.d.ts +5 -28
  927. package/node_modules/@murphai/device-syncd/dist/providers/junction.d.ts.map +1 -1
  928. package/node_modules/@murphai/device-syncd/dist/providers/junction.js +927 -719
  929. package/node_modules/@murphai/device-syncd/dist/providers/junction.js.map +1 -1
  930. package/node_modules/@murphai/device-syncd/dist/providers/oura-webhooks.js.map +1 -1
  931. package/node_modules/@murphai/device-syncd/dist/providers/oura.d.ts +2 -14
  932. package/node_modules/@murphai/device-syncd/dist/providers/oura.d.ts.map +1 -1
  933. package/node_modules/@murphai/device-syncd/dist/providers/oura.js +3 -26
  934. package/node_modules/@murphai/device-syncd/dist/providers/oura.js.map +1 -1
  935. package/node_modules/@murphai/device-syncd/dist/providers/provider-diagnostics.d.ts.map +1 -1
  936. package/node_modules/@murphai/device-syncd/dist/providers/provider-diagnostics.js +34 -30
  937. package/node_modules/@murphai/device-syncd/dist/providers/provider-diagnostics.js.map +1 -1
  938. package/node_modules/@murphai/device-syncd/dist/providers/shared-oauth.js.map +1 -1
  939. package/node_modules/@murphai/device-syncd/dist/providers/strava-webhooks.js.map +1 -1
  940. package/node_modules/@murphai/device-syncd/dist/providers/strava.d.ts +2 -15
  941. package/node_modules/@murphai/device-syncd/dist/providers/strava.d.ts.map +1 -1
  942. package/node_modules/@murphai/device-syncd/dist/providers/strava.js +8 -43
  943. package/node_modules/@murphai/device-syncd/dist/providers/strava.js.map +1 -1
  944. package/node_modules/@murphai/device-syncd/dist/providers/whoop.d.ts +2 -12
  945. package/node_modules/@murphai/device-syncd/dist/providers/whoop.d.ts.map +1 -1
  946. package/node_modules/@murphai/device-syncd/dist/providers/whoop.js +3 -22
  947. package/node_modules/@murphai/device-syncd/dist/providers/whoop.js.map +1 -1
  948. package/node_modules/@murphai/device-syncd/dist/public-account.d.ts +25 -0
  949. package/node_modules/@murphai/device-syncd/dist/public-account.d.ts.map +1 -1
  950. package/node_modules/@murphai/device-syncd/dist/public-account.js +32 -0
  951. package/node_modules/@murphai/device-syncd/dist/public-account.js.map +1 -1
  952. package/node_modules/@murphai/device-syncd/dist/public-ingress.d.ts +9 -4
  953. package/node_modules/@murphai/device-syncd/dist/public-ingress.d.ts.map +1 -1
  954. package/node_modules/@murphai/device-syncd/dist/public-ingress.js +125 -40
  955. package/node_modules/@murphai/device-syncd/dist/public-ingress.js.map +1 -1
  956. package/node_modules/@murphai/device-syncd/dist/public-provider-descriptor-shared.d.ts +3 -0
  957. package/node_modules/@murphai/device-syncd/dist/public-provider-descriptor-shared.d.ts.map +1 -0
  958. package/node_modules/@murphai/device-syncd/dist/public-provider-descriptor-shared.js +4 -0
  959. package/node_modules/@murphai/device-syncd/dist/public-provider-descriptor-shared.js.map +1 -0
  960. package/node_modules/@murphai/device-syncd/dist/public-provider-descriptors.d.ts +10 -0
  961. package/node_modules/@murphai/device-syncd/dist/public-provider-descriptors.d.ts.map +1 -0
  962. package/node_modules/@murphai/device-syncd/dist/public-provider-descriptors.js +41 -0
  963. package/node_modules/@murphai/device-syncd/dist/public-provider-descriptors.js.map +1 -0
  964. package/node_modules/@murphai/device-syncd/dist/registry.js.map +1 -1
  965. package/node_modules/@murphai/device-syncd/dist/service.d.ts +1 -1
  966. package/node_modules/@murphai/device-syncd/dist/service.d.ts.map +1 -1
  967. package/node_modules/@murphai/device-syncd/dist/service.js +219 -61
  968. package/node_modules/@murphai/device-syncd/dist/service.js.map +1 -1
  969. package/node_modules/@murphai/device-syncd/dist/shared.js.map +1 -1
  970. package/node_modules/@murphai/device-syncd/dist/store/accounts.d.ts +6 -0
  971. package/node_modules/@murphai/device-syncd/dist/store/accounts.d.ts.map +1 -1
  972. package/node_modules/@murphai/device-syncd/dist/store/accounts.js +129 -40
  973. package/node_modules/@murphai/device-syncd/dist/store/accounts.js.map +1 -1
  974. package/node_modules/@murphai/device-syncd/dist/store/hosted-account-hydration.d.ts +2 -0
  975. package/node_modules/@murphai/device-syncd/dist/store/hosted-account-hydration.d.ts.map +1 -1
  976. package/node_modules/@murphai/device-syncd/dist/store/hosted-account-hydration.js +80 -6
  977. package/node_modules/@murphai/device-syncd/dist/store/hosted-account-hydration.js.map +1 -1
  978. package/node_modules/@murphai/device-syncd/dist/store/jobs.d.ts +15 -0
  979. package/node_modules/@murphai/device-syncd/dist/store/jobs.d.ts.map +1 -1
  980. package/node_modules/@murphai/device-syncd/dist/store/jobs.js +119 -39
  981. package/node_modules/@murphai/device-syncd/dist/store/jobs.js.map +1 -1
  982. package/node_modules/@murphai/device-syncd/dist/store/oauth-states.d.ts.map +1 -1
  983. package/node_modules/@murphai/device-syncd/dist/store/oauth-states.js +14 -8
  984. package/node_modules/@murphai/device-syncd/dist/store/oauth-states.js.map +1 -1
  985. package/node_modules/@murphai/device-syncd/dist/store/schema.d.ts +1 -1
  986. package/node_modules/@murphai/device-syncd/dist/store/schema.d.ts.map +1 -1
  987. package/node_modules/@murphai/device-syncd/dist/store/schema.js +22 -4
  988. package/node_modules/@murphai/device-syncd/dist/store/schema.js.map +1 -1
  989. package/node_modules/@murphai/device-syncd/dist/store/sync-state.d.ts +9 -1
  990. package/node_modules/@murphai/device-syncd/dist/store/sync-state.d.ts.map +1 -1
  991. package/node_modules/@murphai/device-syncd/dist/store/sync-state.js +57 -52
  992. package/node_modules/@murphai/device-syncd/dist/store/sync-state.js.map +1 -1
  993. package/node_modules/@murphai/device-syncd/dist/store.d.ts +46 -2
  994. package/node_modules/@murphai/device-syncd/dist/store.d.ts.map +1 -1
  995. package/node_modules/@murphai/device-syncd/dist/store.js +103 -6
  996. package/node_modules/@murphai/device-syncd/dist/store.js.map +1 -1
  997. package/node_modules/@murphai/device-syncd/dist/types.d.ts +24 -1
  998. package/node_modules/@murphai/device-syncd/dist/types.d.ts.map +1 -1
  999. package/node_modules/@murphai/device-syncd/dist/types.js.map +1 -1
  1000. package/node_modules/@murphai/device-syncd/package.json +28 -0
  1001. package/node_modules/@murphai/exercise-library/content/seed/at-home-exercise-strength-addon-250.csv +251 -251
  1002. package/node_modules/@murphai/exercise-library/content/seed/at-home-exercise-stretch-addon-500.csv +359 -359
  1003. package/node_modules/@murphai/exercise-library/content/seed/at-home-exercise-stretch.csv +154 -154
  1004. package/node_modules/@murphai/exercise-library/dist/build.js.map +1 -1
  1005. package/node_modules/@murphai/exercise-library/dist/runtime.js.map +1 -1
  1006. package/node_modules/@murphai/exercise-library/dist/schema.d.ts.map +1 -1
  1007. package/node_modules/@murphai/exercise-library/generated/catalog.hash +1 -1
  1008. package/node_modules/@murphai/exercise-library/generated/exercise-details.json +12082 -764
  1009. package/node_modules/@murphai/exercise-library/generated/exercise-facets.json +1 -1
  1010. package/node_modules/@murphai/exercise-library/generated/exercise-index.json +1 -1
  1011. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-11776448.md +60 -0
  1012. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-18306161.md +60 -0
  1013. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-19817517.md +60 -0
  1014. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-19913903.md +60 -0
  1015. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-19995444.md +62 -0
  1016. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-20662037.md +60 -0
  1017. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-24568233.md +62 -0
  1018. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-26914684.md +60 -0
  1019. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-27141153.md +62 -0
  1020. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-28186867.md +62 -0
  1021. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-36495670.md +62 -0
  1022. package/node_modules/@murphai/health-commons/content/sources/photobiomodulation-intake/pmid-37760145.md +62 -0
  1023. package/node_modules/@murphai/health-commons/dist/build.js.map +1 -1
  1024. package/node_modules/@murphai/health-commons/dist/catalog.d.ts +4 -4
  1025. package/node_modules/@murphai/health-commons/dist/hash-artifact.js.map +1 -1
  1026. package/node_modules/@murphai/health-commons/dist/runtime.d.ts +3 -7
  1027. package/node_modules/@murphai/health-commons/dist/runtime.d.ts.map +1 -1
  1028. package/node_modules/@murphai/health-commons/dist/runtime.js +59 -47
  1029. package/node_modules/@murphai/health-commons/dist/runtime.js.map +1 -1
  1030. package/node_modules/@murphai/health-commons/dist/sync-cloudflare-r2.js.map +1 -1
  1031. package/node_modules/@murphai/health-commons/generated/catalog.hash +1 -1
  1032. package/node_modules/@murphai/health-commons/generated/protocol-family-graph.json +1 -1
  1033. package/node_modules/@murphai/health-commons/generated/protocol-index.json +1 -1
  1034. package/node_modules/@murphai/health-commons/generated/protocol-run-specs.json +1 -1
  1035. package/node_modules/@murphai/health-commons/generated/source-artifact-index.json +1 -1
  1036. package/node_modules/@murphai/health-commons/generated/source-identities.ndjson +54 -0
  1037. package/node_modules/@murphai/health-commons/generated/source-index.json +727 -1
  1038. package/node_modules/@murphai/health-commons/generated/web/browse/biomarkers.json +1 -1
  1039. package/node_modules/@murphai/health-commons/generated/web/browse/experiments.json +1 -1
  1040. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/added-sugar-intake.json +1 -1
  1041. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/adherence.json +1 -1
  1042. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/adverse-symptoms.json +1 -1
  1043. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/alanine-aminotransferase.json +1 -1
  1044. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/alcohol-craving.json +1 -1
  1045. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/alcohol-free-days.json +1 -1
  1046. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/alcohol-intake.json +1 -1
  1047. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/alcohol-withdrawal-symptoms.json +1 -1
  1048. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/ankle-knee-to-wall-distance.json +1 -1
  1049. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/apolipoprotein-b.json +1 -1
  1050. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/aspartate-aminotransferase.json +1 -1
  1051. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/bilirubin.json +1 -1
  1052. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/blood-glucose.json +1 -1
  1053. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/blood-ketones-beta-hydroxybutyrate.json +1 -1
  1054. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/blood-oxygen-spo2.json +1 -1
  1055. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/blood-pressure.json +1 -1
  1056. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/blood-urea-nitrogen.json +1 -1
  1057. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/body-fat-percent.json +1 -1
  1058. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/body-weight.json +1 -1
  1059. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/chosen-primary-outcome-score.json +1 -1
  1060. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/continuous-glucose.json +1 -1
  1061. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/creatine-kinase.json +1 -1
  1062. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/daily-energy-intake-kcal.json +1 -1
  1063. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/daily-protein-g-per-kg.json +1 -1
  1064. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/daily-protein-grams.json +1 -1
  1065. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/daily-step-count.json +1 -1
  1066. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/daytime-sleepiness.json +1 -1
  1067. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/deep-sleep-minutes.json +1 -1
  1068. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/dietary-fiber-g-day.json +1 -1
  1069. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/digestive-comfort.json +1 -1
  1070. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/egfr.json +1 -1
  1071. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/estimated-gfr.json +1 -1
  1072. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/estimated-vo2max.json +1 -1
  1073. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/fasting-triglycerides.json +1 -1
  1074. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/gi-symptom-score.json +1 -1
  1075. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/gi-tolerance.json +1 -1
  1076. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/hbot-session-tolerability.json +1 -1
  1077. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/hdl-c.json +1 -1
  1078. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/hrv-rmssd.json +1 -1
  1079. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/lateral-knee-pain.json +1 -1
  1080. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/ldl-c.json +1 -1
  1081. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/ldl-cholesterol.json +1 -1
  1082. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/lean-body-mass.json +1 -1
  1083. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/lean-mass.json +1 -1
  1084. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/leg-heaviness-score.json +1 -1
  1085. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/liver-enzyme-panel.json +1 -1
  1086. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/macular-health-safety.json +1 -1
  1087. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/moderate-to-vigorous-activity-minutes.json +1 -1
  1088. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/mood-affect.json +1 -1
  1089. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/morning-blood-pressure.json +1 -1
  1090. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/muscle-soreness-score.json +1 -1
  1091. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/musculoskeletal-pain.json +1 -1
  1092. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/non-hdl-c.json +1 -1
  1093. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/non-hdl-cholesterol.json +1 -1
  1094. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/omega-3-index.json +1 -1
  1095. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/perceived-recovery-score.json +1 -1
  1096. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/perceived-recovery.json +1 -1
  1097. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/perceived-stiffness.json +1 -1
  1098. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/perceived-stress.json +1 -1
  1099. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/periocular-wrinkle-score.json +1 -1
  1100. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/postprandial-glucose-excursion.json +1 -1
  1101. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/pre-sleep-arousal.json +1 -1
  1102. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/rem-sleep-minutes.json +1 -1
  1103. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/resting-heart-rate.json +1 -1
  1104. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/running-tolerance.json +1 -1
  1105. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/saturated-fat-g-day.json +1 -1
  1106. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/sedentary-time.json +1 -1
  1107. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/self-reported-mood.json +1 -1
  1108. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/serum-25-hydroxyvitamin-d.json +1 -1
  1109. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/serum-creatinine.json +1 -1
  1110. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/serum-uric-acid.json +1 -1
  1111. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/shoulder-reach-distance.json +1 -1
  1112. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/sit-and-reach-distance.json +1 -1
  1113. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/skin-texture-roughness-score.json +1 -1
  1114. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/skin-tolerability-symptoms.json +1 -1
  1115. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/sleep-efficiency.json +1 -1
  1116. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/sleep-onset-latency.json +1 -1
  1117. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/sleep-quality.json +1 -1
  1118. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/standardized-skin-photo-score.json +1 -1
  1119. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/step-floor-days.json +1 -1
  1120. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/stretching-adherence-sessions.json +1 -1
  1121. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/stretching-session-burden.json +1 -1
  1122. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/stretching-symptoms.json +1 -1
  1123. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/subjective-eye-strain.json +1 -1
  1124. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/subjective-satiety.json +1 -1
  1125. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/supplement-adherence.json +1 -1
  1126. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/task-performance.json +1 -1
  1127. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/toe-touch-distance.json +1 -1
  1128. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/total-cholesterol.json +1 -1
  1129. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/total-sleep-time.json +1 -1
  1130. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/training-performance.json +1 -1
  1131. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/training-volume.json +1 -1
  1132. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/triglycerides.json +1 -1
  1133. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/urine-albumin-creatinine-ratio.json +1 -1
  1134. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/visual-fatigue.json +1 -1
  1135. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/visual-performance.json +1 -1
  1136. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/waist-circumference.json +1 -1
  1137. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/wake-time-variability.json +1 -1
  1138. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/walking-bout-minutes.json +1 -1
  1139. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/walking-cadence.json +1 -1
  1140. package/node_modules/@murphai/health-commons/generated/web/bundles/biomarker/walking-safety-events.json +1 -1
  1141. package/node_modules/@murphai/health-commons/generated/web/bundles/measurement_method/clinic-imaging-upgrade.json +1 -1
  1142. package/node_modules/@murphai/health-commons/generated/web/bundles/measurement_method/home-standardized-photo-roi-analysis.json +1 -1
  1143. package/node_modules/@murphai/health-commons/generated/web/bundles/measurement_method/standardized-photo-score-workflow.json +1 -1
  1144. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/at-home-static-stretching-for-flexibility.json +1 -1
  1145. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/bryan-johnson-blueprint.json +1 -1
  1146. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/caffeine-curfew-dose-reset.json +1 -1
  1147. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/cold-plunge.json +1 -1
  1148. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/consistent-wake-time.json +1 -1
  1149. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/creatine-monohydrate.json +1 -1
  1150. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/daily-step-floor.json +1 -1
  1151. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/daily-vitamin-d3-supplementation.json +1 -1
  1152. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/digital-sunset.json +1 -1
  1153. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/finnish-sauna.json +1 -1
  1154. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/hydrolyzed-collagen-peptides.json +1 -1
  1155. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/hyperbaric-oxygen-therapy.json +1 -1
  1156. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/it-band-syndrome-rehab-and-return-to-run.json +1 -1
  1157. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/morning-outdoor-light-exposure.json +1 -1
  1158. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/no-added-sugar-diet.json +1 -1
  1159. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/norwegian-4x4.json +1 -1
  1160. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/oral-epa-dha-supplementation.json +1 -1
  1161. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/pneumatic-compression-pants.json +1 -1
  1162. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/pre-sleep-resonance-breathing-and-meditation.json +1 -1
  1163. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/pre-sleep-silent-meditation.json +1 -1
  1164. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/prolonged-fasting-24-72-hours.json +1 -1
  1165. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/protein-floor-high-protein-intake.json +1 -1
  1166. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/psyllium-husk-for-cholesterol.json +1 -1
  1167. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/red-light-glasses-before-bed.json +1 -1
  1168. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/red-near-infrared-skin-texture-photoaging.json +1 -1
  1169. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/red-yeast-rice-for-cholesterol.json +1 -1
  1170. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/short-term-alcohol-abstinence.json +1 -1
  1171. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/social-media-fast.json +1 -1
  1172. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/tabata-20-10-interval-training.json +1 -1
  1173. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/time-restricted-eating-18-6.json +1 -1
  1174. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/walking-after-every-meal.json +1 -1
  1175. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/whole-body-red-and-near-infrared-light-exposure.json +1 -1
  1176. package/node_modules/@murphai/health-commons/generated/web/bundles/protocol_variant/zone-2-aerobic-base-block.json +1 -1
  1177. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/blood-oxygen-spo2/overview.json +1 -1
  1178. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/blood-oxygen-spo2/research.json +1 -1
  1179. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/deep-sleep-minutes/overview.json +1 -1
  1180. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/deep-sleep-minutes/research.json +1 -1
  1181. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/estimated-vo2max/overview.json +1 -1
  1182. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/estimated-vo2max/research.json +1 -1
  1183. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/hrv-rmssd/overview.json +1 -1
  1184. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/hrv-rmssd/research.json +1 -1
  1185. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/rem-sleep-minutes/overview.json +1 -1
  1186. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/rem-sleep-minutes/research.json +1 -1
  1187. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/resting-heart-rate/overview.json +1 -1
  1188. package/node_modules/@murphai/health-commons/generated/web/pages/biomarkers/resting-heart-rate/research.json +1 -1
  1189. package/node_modules/@murphai/health-commons/generated/web/routes/index.json +1 -1
  1190. package/node_modules/@murphai/health-commons/generated/web/shell/biomarkers/blood-oxygen-spo2.json +1 -1
  1191. package/node_modules/@murphai/health-commons/generated/web/shell/biomarkers/deep-sleep-minutes.json +1 -1
  1192. package/node_modules/@murphai/health-commons/generated/web/shell/biomarkers/estimated-vo2max.json +1 -1
  1193. package/node_modules/@murphai/health-commons/generated/web/shell/biomarkers/hrv-rmssd.json +1 -1
  1194. package/node_modules/@murphai/health-commons/generated/web/shell/biomarkers/rem-sleep-minutes.json +1 -1
  1195. package/node_modules/@murphai/health-commons/generated/web/shell/biomarkers/resting-heart-rate.json +1 -1
  1196. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/at-home-static-stretching-for-flexibility.json +1 -1
  1197. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/bryan-johnson-blueprint.json +1 -1
  1198. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/caffeine-curfew-dose-reset.json +1 -1
  1199. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/cold-plunge.json +1 -1
  1200. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/consistent-wake-time.json +1 -1
  1201. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/daily-step-floor.json +1 -1
  1202. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/digital-sunset.json +1 -1
  1203. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/finnish-sauna.json +1 -1
  1204. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/hyperbaric-oxygen-therapy.json +1 -1
  1205. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/morning-outdoor-light-exposure.json +1 -1
  1206. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/no-added-sugar-diet.json +1 -1
  1207. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/norwegian-4x4.json +1 -1
  1208. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/pneumatic-compression-pants.json +1 -1
  1209. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/pre-sleep-resonance-breathing-and-meditation.json +1 -1
  1210. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/pre-sleep-silent-meditation.json +1 -1
  1211. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/prolonged-fasting-24-72-hours.json +1 -1
  1212. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/protein-floor-high-protein-intake.json +1 -1
  1213. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/red-light-glasses-before-bed.json +1 -1
  1214. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/red-near-infrared-skin-texture-photoaging.json +1 -1
  1215. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/short-term-alcohol-abstinence.json +1 -1
  1216. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/tabata-20-10-interval-training.json +1 -1
  1217. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/time-restricted-eating-18-6.json +1 -1
  1218. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/walking-after-every-meal.json +1 -1
  1219. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/whole-body-red-and-near-infrared-light-exposure.json +1 -1
  1220. package/node_modules/@murphai/health-commons/generated/web/shell/experiments/zone-2-aerobic-base-block.json +1 -1
  1221. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/at-home-static-stretching-for-flexibility/protocol.json +1 -1
  1222. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/at-home-static-stretching-for-flexibility/research.json +1 -1
  1223. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/at-home-static-stretching-for-flexibility/results-public.json +2 -2
  1224. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/bryan-johnson-blueprint/protocol.json +1 -1
  1225. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/bryan-johnson-blueprint/research.json +1 -1
  1226. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/bryan-johnson-blueprint/results-public.json +2 -2
  1227. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/caffeine-curfew-dose-reset/protocol.json +1 -1
  1228. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/caffeine-curfew-dose-reset/research.json +1 -1
  1229. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/caffeine-curfew-dose-reset/results-public.json +2 -2
  1230. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/cold-plunge/protocol.json +1 -1
  1231. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/cold-plunge/research.json +1 -1
  1232. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/cold-plunge/results-public.json +2 -2
  1233. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/consistent-wake-time/protocol.json +1 -1
  1234. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/consistent-wake-time/research.json +1 -1
  1235. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/consistent-wake-time/results-public.json +2 -2
  1236. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/daily-step-floor/protocol.json +1 -1
  1237. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/daily-step-floor/research.json +1 -1
  1238. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/daily-step-floor/results-public.json +2 -2
  1239. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/digital-sunset/protocol.json +1 -1
  1240. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/digital-sunset/research.json +1 -1
  1241. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/digital-sunset/results-public.json +2 -2
  1242. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/finnish-sauna/protocol.json +1 -1
  1243. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/finnish-sauna/research.json +1 -1
  1244. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/finnish-sauna/results-public.json +2 -2
  1245. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/hyperbaric-oxygen-therapy/protocol.json +1 -1
  1246. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/hyperbaric-oxygen-therapy/research.json +1 -1
  1247. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/hyperbaric-oxygen-therapy/results-public.json +2 -2
  1248. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/morning-outdoor-light-exposure/protocol.json +1 -1
  1249. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/morning-outdoor-light-exposure/research.json +1 -1
  1250. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/morning-outdoor-light-exposure/results-public.json +2 -2
  1251. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/no-added-sugar-diet/protocol.json +1 -1
  1252. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/no-added-sugar-diet/research.json +1 -1
  1253. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/no-added-sugar-diet/results-public.json +2 -2
  1254. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/norwegian-4x4/protocol.json +1 -1
  1255. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/norwegian-4x4/research.json +1 -1
  1256. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/norwegian-4x4/results-public.json +2 -2
  1257. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/pneumatic-compression-pants/protocol.json +1 -1
  1258. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/pneumatic-compression-pants/research.json +1 -1
  1259. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/pneumatic-compression-pants/results-public.json +2 -2
  1260. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/pre-sleep-resonance-breathing-and-meditation/protocol.json +1 -1
  1261. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/pre-sleep-resonance-breathing-and-meditation/research.json +1 -1
  1262. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/pre-sleep-resonance-breathing-and-meditation/results-public.json +2 -2
  1263. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/pre-sleep-silent-meditation/protocol.json +1 -1
  1264. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/pre-sleep-silent-meditation/research.json +1 -1
  1265. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/pre-sleep-silent-meditation/results-public.json +2 -2
  1266. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/prolonged-fasting-24-72-hours/protocol.json +1 -1
  1267. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/prolonged-fasting-24-72-hours/research.json +1 -1
  1268. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/prolonged-fasting-24-72-hours/results-public.json +2 -2
  1269. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/protein-floor-high-protein-intake/protocol.json +1 -1
  1270. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/protein-floor-high-protein-intake/research.json +1 -1
  1271. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/protein-floor-high-protein-intake/results-public.json +2 -2
  1272. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/red-light-glasses-before-bed/protocol.json +1 -1
  1273. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/red-light-glasses-before-bed/research.json +1 -1
  1274. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/red-light-glasses-before-bed/results-public.json +2 -2
  1275. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/red-near-infrared-skin-texture-photoaging/protocol.json +1 -1
  1276. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/red-near-infrared-skin-texture-photoaging/research.json +1 -1
  1277. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/red-near-infrared-skin-texture-photoaging/results-public.json +2 -2
  1278. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/short-term-alcohol-abstinence/protocol.json +1 -1
  1279. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/short-term-alcohol-abstinence/research.json +1 -1
  1280. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/short-term-alcohol-abstinence/results-public.json +2 -2
  1281. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/tabata-20-10-interval-training/protocol.json +1 -1
  1282. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/tabata-20-10-interval-training/research.json +1 -1
  1283. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/tabata-20-10-interval-training/results-public.json +2 -2
  1284. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/time-restricted-eating-18-6/protocol.json +1 -1
  1285. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/time-restricted-eating-18-6/research.json +1 -1
  1286. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/time-restricted-eating-18-6/results-public.json +2 -2
  1287. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/walking-after-every-meal/protocol.json +1 -1
  1288. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/walking-after-every-meal/research.json +1 -1
  1289. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/walking-after-every-meal/results-public.json +2 -2
  1290. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/whole-body-red-and-near-infrared-light-exposure/protocol.json +1 -1
  1291. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/whole-body-red-and-near-infrared-light-exposure/research.json +1 -1
  1292. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/whole-body-red-and-near-infrared-light-exposure/results-public.json +2 -2
  1293. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/zone-2-aerobic-base-block/protocol.json +1 -1
  1294. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/zone-2-aerobic-base-block/research.json +1 -1
  1295. package/node_modules/@murphai/health-commons/generated/web/tabs/experiments/zone-2-aerobic-base-block/results-public.json +2 -2
  1296. package/node_modules/@murphai/health-metrics/README.md +4 -0
  1297. package/node_modules/@murphai/health-metrics/dist/catalog.js.map +1 -1
  1298. package/node_modules/@murphai/health-metrics/dist/definitions/activity.d.ts +15 -1
  1299. package/node_modules/@murphai/health-metrics/dist/definitions/activity.d.ts.map +1 -1
  1300. package/node_modules/@murphai/health-metrics/dist/definitions/activity.js +99 -0
  1301. package/node_modules/@murphai/health-metrics/dist/definitions/activity.js.map +1 -1
  1302. package/node_modules/@murphai/health-metrics/dist/definitions/labs.d.ts +1 -1
  1303. package/node_modules/@murphai/health-metrics/dist/definitions/recovery.d.ts +1 -1
  1304. package/node_modules/@murphai/health-metrics/dist/definitions/recovery.d.ts.map +1 -1
  1305. package/node_modules/@murphai/health-metrics/dist/definitions/recovery.js +12 -0
  1306. package/node_modules/@murphai/health-metrics/dist/definitions/recovery.js.map +1 -1
  1307. package/node_modules/@murphai/health-metrics/dist/definitions/sleep.d.ts +1 -1
  1308. package/node_modules/@murphai/health-metrics/dist/format.js.map +1 -1
  1309. package/node_modules/@murphai/health-metrics/dist/goals.js.map +1 -1
  1310. package/node_modules/@murphai/health-metrics/dist/index.d.ts +0 -2
  1311. package/node_modules/@murphai/health-metrics/dist/index.d.ts.map +1 -1
  1312. package/node_modules/@murphai/health-metrics/dist/index.js +0 -2
  1313. package/node_modules/@murphai/health-metrics/dist/index.js.map +1 -1
  1314. package/node_modules/@murphai/health-metrics/dist/murph-age-source-routes.d.ts.map +1 -1
  1315. package/node_modules/@murphai/health-metrics/dist/murph-age-source-routes.js.map +1 -1
  1316. package/node_modules/@murphai/health-metrics/dist/murph-age.d.ts.map +1 -1
  1317. package/node_modules/@murphai/health-metrics/dist/murph-age.js.map +1 -1
  1318. package/node_modules/@murphai/health-metrics/dist/normalize.js.map +1 -1
  1319. package/node_modules/@murphai/health-metrics/dist/selectors.js.map +1 -1
  1320. package/node_modules/@murphai/health-metrics/dist/wearable-metric-catalog.d.ts.map +1 -1
  1321. package/node_modules/@murphai/health-metrics/dist/wearable-metric-catalog.js.map +1 -1
  1322. package/node_modules/@murphai/health-metrics/dist/wearable-provider-catalog.d.ts.map +1 -1
  1323. package/node_modules/@murphai/health-metrics/dist/wearable-provider-catalog.js.map +1 -1
  1324. package/node_modules/@murphai/health-metrics/package.json +10 -0
  1325. package/node_modules/@murphai/importers/README.md +13 -0
  1326. package/node_modules/@murphai/importers/dist/assessment/import-assessment-response.js.map +1 -1
  1327. package/node_modules/@murphai/importers/dist/clinical-records/index.d.ts +19 -0
  1328. package/node_modules/@murphai/importers/dist/clinical-records/index.d.ts.map +1 -0
  1329. package/node_modules/@murphai/importers/dist/clinical-records/index.js +1523 -0
  1330. package/node_modules/@murphai/importers/dist/clinical-records/index.js.map +1 -0
  1331. package/node_modules/@murphai/importers/dist/core-port.d.ts +1 -0
  1332. package/node_modules/@murphai/importers/dist/core-port.d.ts.map +1 -1
  1333. package/node_modules/@murphai/importers/dist/core-port.js.map +1 -1
  1334. package/node_modules/@murphai/importers/dist/create-importers.d.ts.map +1 -1
  1335. package/node_modules/@murphai/importers/dist/create-importers.js.map +1 -1
  1336. package/node_modules/@murphai/importers/dist/csv-sample-import-planner.js.map +1 -1
  1337. package/node_modules/@murphai/importers/dist/csv-sample-importer.js.map +1 -1
  1338. package/node_modules/@murphai/importers/dist/device-providers/import-device-provider-snapshot.js.map +1 -1
  1339. package/node_modules/@murphai/importers/dist/device-providers/index.d.ts +1 -1
  1340. package/node_modules/@murphai/importers/dist/device-providers/index.d.ts.map +1 -1
  1341. package/node_modules/@murphai/importers/dist/device-providers/index.js +1 -1
  1342. package/node_modules/@murphai/importers/dist/device-providers/index.js.map +1 -1
  1343. package/node_modules/@murphai/importers/dist/device-providers/junction-origin.js.map +1 -1
  1344. package/node_modules/@murphai/importers/dist/device-providers/junction-resources.d.ts +3 -2
  1345. package/node_modules/@murphai/importers/dist/device-providers/junction-resources.d.ts.map +1 -1
  1346. package/node_modules/@murphai/importers/dist/device-providers/junction-resources.js +12 -20
  1347. package/node_modules/@murphai/importers/dist/device-providers/junction-resources.js.map +1 -1
  1348. package/node_modules/@murphai/importers/dist/device-providers/junction.d.ts +18 -0
  1349. package/node_modules/@murphai/importers/dist/device-providers/junction.d.ts.map +1 -1
  1350. package/node_modules/@murphai/importers/dist/device-providers/junction.js +1026 -123
  1351. package/node_modules/@murphai/importers/dist/device-providers/junction.js.map +1 -1
  1352. package/node_modules/@murphai/importers/dist/device-providers/provider-descriptors.d.ts +132 -132
  1353. package/node_modules/@murphai/importers/dist/device-providers/provider-descriptors.d.ts.map +1 -1
  1354. package/node_modules/@murphai/importers/dist/device-providers/provider-descriptors.js.map +1 -1
  1355. package/node_modules/@murphai/importers/dist/device-providers/registry.js.map +1 -1
  1356. package/node_modules/@murphai/importers/dist/device-providers/whoop.js.map +1 -1
  1357. package/node_modules/@murphai/importers/dist/document-importer.js.map +1 -1
  1358. package/node_modules/@murphai/importers/dist/meal-importer.js.map +1 -1
  1359. package/node_modules/@murphai/importers/dist/preset-registry.js.map +1 -1
  1360. package/node_modules/@murphai/importers/package.json +5 -0
  1361. package/node_modules/@murphai/inbox-services/dist/inbox-app/bootstrap-doctor.js.map +1 -1
  1362. package/node_modules/@murphai/inbox-services/dist/inbox-app/environment.js.map +1 -1
  1363. package/node_modules/@murphai/inbox-services/dist/inbox-app/reads.js +1 -1
  1364. package/node_modules/@murphai/inbox-services/dist/inbox-app/reads.js.map +1 -1
  1365. package/node_modules/@murphai/inbox-services/dist/inbox-app/service.d.ts.map +1 -1
  1366. package/node_modules/@murphai/inbox-services/dist/inbox-app/service.js +2 -0
  1367. package/node_modules/@murphai/inbox-services/dist/inbox-app/service.js.map +1 -1
  1368. package/node_modules/@murphai/inbox-services/dist/inbox-app/storage-repair.d.ts +3 -0
  1369. package/node_modules/@murphai/inbox-services/dist/inbox-app/storage-repair.d.ts.map +1 -0
  1370. package/node_modules/@murphai/inbox-services/dist/inbox-app/storage-repair.js +37 -0
  1371. package/node_modules/@murphai/inbox-services/dist/inbox-app/storage-repair.js.map +1 -0
  1372. package/node_modules/@murphai/inbox-services/dist/inbox-app/types.d.ts +22 -2
  1373. package/node_modules/@murphai/inbox-services/dist/inbox-app/types.d.ts.map +1 -1
  1374. package/node_modules/@murphai/inbox-services/dist/inbox-services/connectors.js.map +1 -1
  1375. package/node_modules/@murphai/inbox-services/dist/inbox-services/daemon.js.map +1 -1
  1376. package/node_modules/@murphai/inbox-services/dist/inbox-services/parser.d.ts +1 -1
  1377. package/node_modules/@murphai/inbox-services/dist/inbox-services/parser.js +2 -2
  1378. package/node_modules/@murphai/inbox-services/dist/inbox-services/parser.js.map +1 -1
  1379. package/node_modules/@murphai/inbox-services/dist/inbox-services/promotions.d.ts +2 -2
  1380. package/node_modules/@murphai/inbox-services/dist/inbox-services/promotions.d.ts.map +1 -1
  1381. package/node_modules/@murphai/inbox-services/dist/inbox-services/promotions.js.map +1 -1
  1382. package/node_modules/@murphai/inbox-services/dist/inbox-services/query.d.ts +27 -27
  1383. package/node_modules/@murphai/inbox-services/dist/inbox-services/query.d.ts.map +1 -1
  1384. package/node_modules/@murphai/inbox-services/dist/inbox-services/query.js +2 -2
  1385. package/node_modules/@murphai/inbox-services/dist/inbox-services/query.js.map +1 -1
  1386. package/node_modules/@murphai/inbox-services/dist/inbox-services/state.js.map +1 -1
  1387. package/node_modules/@murphai/inboxd/README.md +3 -2
  1388. package/node_modules/@murphai/inboxd/dist/checkpoint.d.ts +2 -0
  1389. package/node_modules/@murphai/inboxd/dist/checkpoint.d.ts.map +1 -0
  1390. package/node_modules/@murphai/inboxd/dist/checkpoint.js +2 -0
  1391. package/node_modules/@murphai/inboxd/dist/checkpoint.js.map +1 -0
  1392. package/node_modules/@murphai/inboxd/dist/connectors/email/directness.d.ts +11 -0
  1393. package/node_modules/@murphai/inboxd/dist/connectors/email/directness.d.ts.map +1 -0
  1394. package/node_modules/@murphai/inboxd/dist/connectors/email/directness.js +67 -0
  1395. package/node_modules/@murphai/inboxd/dist/connectors/email/directness.js.map +1 -0
  1396. package/node_modules/@murphai/inboxd/dist/connectors/email/normalize-parsed.d.ts +3 -1
  1397. package/node_modules/@murphai/inboxd/dist/connectors/email/normalize-parsed.d.ts.map +1 -1
  1398. package/node_modules/@murphai/inboxd/dist/connectors/email/normalize-parsed.js +18 -9
  1399. package/node_modules/@murphai/inboxd/dist/connectors/email/normalize-parsed.js.map +1 -1
  1400. package/node_modules/@murphai/inboxd/dist/connectors/email/normalize.d.ts +1 -10
  1401. package/node_modules/@murphai/inboxd/dist/connectors/email/normalize.d.ts.map +1 -1
  1402. package/node_modules/@murphai/inboxd/dist/connectors/email/normalize.js +2 -65
  1403. package/node_modules/@murphai/inboxd/dist/connectors/email/normalize.js.map +1 -1
  1404. package/node_modules/@murphai/inboxd/dist/connectors/hosted-conversation.d.ts +0 -15
  1405. package/node_modules/@murphai/inboxd/dist/connectors/hosted-conversation.d.ts.map +1 -1
  1406. package/node_modules/@murphai/inboxd/dist/connectors/hosted-conversation.js +0 -33
  1407. package/node_modules/@murphai/inboxd/dist/connectors/hosted-conversation.js.map +1 -1
  1408. package/node_modules/@murphai/inboxd/dist/connectors/telegram/connector.d.ts.map +1 -1
  1409. package/node_modules/@murphai/inboxd/dist/contracts/capture.d.ts +1 -2
  1410. package/node_modules/@murphai/inboxd/dist/contracts/capture.d.ts.map +1 -1
  1411. package/node_modules/@murphai/inboxd/dist/contracts/search.d.ts +2 -2
  1412. package/node_modules/@murphai/inboxd/dist/contracts/search.d.ts.map +1 -1
  1413. package/node_modules/@murphai/inboxd/dist/index.d.ts +1 -0
  1414. package/node_modules/@murphai/inboxd/dist/index.d.ts.map +1 -1
  1415. package/node_modules/@murphai/inboxd/dist/index.js +1 -0
  1416. package/node_modules/@murphai/inboxd/dist/index.js.map +1 -1
  1417. package/node_modules/@murphai/inboxd/dist/indexing/envelope-migration.d.ts +21 -0
  1418. package/node_modules/@murphai/inboxd/dist/indexing/envelope-migration.d.ts.map +1 -0
  1419. package/node_modules/@murphai/inboxd/dist/indexing/envelope-migration.js +259 -0
  1420. package/node_modules/@murphai/inboxd/dist/indexing/envelope-migration.js.map +1 -0
  1421. package/node_modules/@murphai/inboxd/dist/indexing/parser-derivatives.d.ts +1 -1
  1422. package/node_modules/@murphai/inboxd/dist/indexing/parser-derivatives.d.ts.map +1 -1
  1423. package/node_modules/@murphai/inboxd/dist/indexing/parser-derivatives.js +7 -4
  1424. package/node_modules/@murphai/inboxd/dist/indexing/parser-derivatives.js.map +1 -1
  1425. package/node_modules/@murphai/inboxd/dist/indexing/persist/canonical-records.d.ts +13 -1
  1426. package/node_modules/@murphai/inboxd/dist/indexing/persist/canonical-records.d.ts.map +1 -1
  1427. package/node_modules/@murphai/inboxd/dist/indexing/persist/canonical-records.js +68 -13
  1428. package/node_modules/@murphai/inboxd/dist/indexing/persist/canonical-records.js.map +1 -1
  1429. package/node_modules/@murphai/inboxd/dist/indexing/persist.d.ts +12 -6
  1430. package/node_modules/@murphai/inboxd/dist/indexing/persist.d.ts.map +1 -1
  1431. package/node_modules/@murphai/inboxd/dist/indexing/persist.js +226 -73
  1432. package/node_modules/@murphai/inboxd/dist/indexing/persist.js.map +1 -1
  1433. package/node_modules/@murphai/inboxd/dist/indexing/retention.js.map +1 -1
  1434. package/node_modules/@murphai/inboxd/dist/kernel/pipeline.js +4 -4
  1435. package/node_modules/@murphai/inboxd/dist/kernel/pipeline.js.map +1 -1
  1436. package/node_modules/@murphai/inboxd/dist/kernel/registry.js.map +1 -1
  1437. package/node_modules/@murphai/inboxd/dist/kernel/sqlite/rows.d.ts +2 -2
  1438. package/node_modules/@murphai/inboxd/dist/kernel/sqlite/rows.d.ts.map +1 -1
  1439. package/node_modules/@murphai/inboxd/dist/kernel/sqlite/rows.js +3 -3
  1440. package/node_modules/@murphai/inboxd/dist/kernel/sqlite/rows.js.map +1 -1
  1441. package/node_modules/@murphai/inboxd/dist/kernel/sqlite.d.ts.map +1 -1
  1442. package/node_modules/@murphai/inboxd/dist/kernel/sqlite.js +42 -12
  1443. package/node_modules/@murphai/inboxd/dist/kernel/sqlite.js.map +1 -1
  1444. package/node_modules/@murphai/inboxd/dist/retention.d.ts +2 -0
  1445. package/node_modules/@murphai/inboxd/dist/retention.d.ts.map +1 -0
  1446. package/node_modules/@murphai/inboxd/dist/retention.js +2 -0
  1447. package/node_modules/@murphai/inboxd/dist/retention.js.map +1 -0
  1448. package/node_modules/@murphai/inboxd/dist/runtime.d.ts +2 -1
  1449. package/node_modules/@murphai/inboxd/dist/runtime.d.ts.map +1 -1
  1450. package/node_modules/@murphai/inboxd/dist/runtime.js +1 -0
  1451. package/node_modules/@murphai/inboxd/dist/runtime.js.map +1 -1
  1452. package/node_modules/@murphai/inboxd/package.json +12 -0
  1453. package/node_modules/@murphai/messaging-ingress/README.md +1 -5
  1454. package/node_modules/@murphai/messaging-ingress/dist/internal.d.ts.map +1 -1
  1455. package/node_modules/@murphai/messaging-ingress/dist/internal.js +4 -0
  1456. package/node_modules/@murphai/messaging-ingress/dist/internal.js.map +1 -1
  1457. package/node_modules/@murphai/messaging-ingress/dist/linq-webhook.d.ts.map +1 -1
  1458. package/node_modules/@murphai/messaging-ingress/dist/linq-webhook.js.map +1 -1
  1459. package/node_modules/@murphai/messaging-ingress/package.json +0 -4
  1460. package/node_modules/@murphai/operator-config/dist/agentmail-runtime.js.map +1 -1
  1461. package/node_modules/@murphai/operator-config/dist/assistant/codex-resume-state.d.ts +2 -0
  1462. package/node_modules/@murphai/operator-config/dist/assistant/codex-resume-state.d.ts.map +1 -1
  1463. package/node_modules/@murphai/operator-config/dist/assistant/codex-resume-state.js +5 -0
  1464. package/node_modules/@murphai/operator-config/dist/assistant/codex-resume-state.js.map +1 -1
  1465. package/node_modules/@murphai/operator-config/dist/assistant/current-delivery-route.d.ts +5 -0
  1466. package/node_modules/@murphai/operator-config/dist/assistant/current-delivery-route.d.ts.map +1 -1
  1467. package/node_modules/@murphai/operator-config/dist/assistant/current-delivery-route.js +58 -0
  1468. package/node_modules/@murphai/operator-config/dist/assistant/current-delivery-route.js.map +1 -1
  1469. package/node_modules/@murphai/operator-config/dist/assistant/delivery-failure.d.ts +2 -2
  1470. package/node_modules/@murphai/operator-config/dist/assistant/delivery-failure.d.ts.map +1 -1
  1471. package/node_modules/@murphai/operator-config/dist/assistant/delivery-failure.js.map +1 -1
  1472. package/node_modules/@murphai/operator-config/dist/assistant/hosted-config.d.ts +5 -5
  1473. package/node_modules/@murphai/operator-config/dist/assistant/hosted-config.d.ts.map +1 -1
  1474. package/node_modules/@murphai/operator-config/dist/assistant/target-runtime.d.ts +32 -31
  1475. package/node_modules/@murphai/operator-config/dist/assistant/target-runtime.d.ts.map +1 -1
  1476. package/node_modules/@murphai/operator-config/dist/assistant/target-runtime.js +4 -2
  1477. package/node_modules/@murphai/operator-config/dist/assistant/target-runtime.js.map +1 -1
  1478. package/node_modules/@murphai/operator-config/dist/assistant-backend.d.ts +2 -2
  1479. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.d.ts +488 -317
  1480. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.d.ts.map +1 -1
  1481. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.js +171 -22
  1482. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.js.map +1 -1
  1483. package/node_modules/@murphai/operator-config/dist/device-cli-contracts.d.ts +32 -27
  1484. package/node_modules/@murphai/operator-config/dist/device-cli-contracts.d.ts.map +1 -1
  1485. package/node_modules/@murphai/operator-config/dist/device-cli-contracts.js +11 -1
  1486. package/node_modules/@murphai/operator-config/dist/device-cli-contracts.js.map +1 -1
  1487. package/node_modules/@murphai/operator-config/dist/device-daemon/paths.js.map +1 -1
  1488. package/node_modules/@murphai/operator-config/dist/device-daemon.js.map +1 -1
  1489. package/node_modules/@murphai/operator-config/dist/device-sync-browser-opener.js.map +1 -1
  1490. package/node_modules/@murphai/operator-config/dist/device-sync-client.d.ts +1 -1
  1491. package/node_modules/@murphai/operator-config/dist/device-sync-client.d.ts.map +1 -1
  1492. package/node_modules/@murphai/operator-config/dist/device-sync-client.js +6 -2
  1493. package/node_modules/@murphai/operator-config/dist/device-sync-client.js.map +1 -1
  1494. package/node_modules/@murphai/operator-config/dist/hosted-assistant-config-constants.d.ts +1 -1
  1495. package/node_modules/@murphai/operator-config/dist/hosted-assistant-config-constants.d.ts.map +1 -1
  1496. package/node_modules/@murphai/operator-config/dist/hosted-assistant-config.d.ts.map +1 -1
  1497. package/node_modules/@murphai/operator-config/dist/inbox-cli-contracts.d.ts +138 -93
  1498. package/node_modules/@murphai/operator-config/dist/inbox-cli-contracts.d.ts.map +1 -1
  1499. package/node_modules/@murphai/operator-config/dist/inbox-cli-contracts.js +40 -3
  1500. package/node_modules/@murphai/operator-config/dist/inbox-cli-contracts.js.map +1 -1
  1501. package/node_modules/@murphai/operator-config/dist/linq-runtime.d.ts +7 -11
  1502. package/node_modules/@murphai/operator-config/dist/linq-runtime.d.ts.map +1 -1
  1503. package/node_modules/@murphai/operator-config/dist/linq-runtime.js +25 -10
  1504. package/node_modules/@murphai/operator-config/dist/linq-runtime.js.map +1 -1
  1505. package/node_modules/@murphai/operator-config/dist/message-formatting.d.ts.map +1 -1
  1506. package/node_modules/@murphai/operator-config/dist/message-formatting.js +14 -3
  1507. package/node_modules/@murphai/operator-config/dist/message-formatting.js.map +1 -1
  1508. package/node_modules/@murphai/operator-config/dist/operator-config/self-delivery-targets.d.ts +4 -2
  1509. package/node_modules/@murphai/operator-config/dist/operator-config/self-delivery-targets.d.ts.map +1 -1
  1510. package/node_modules/@murphai/operator-config/dist/operator-config/storage.js.map +1 -1
  1511. package/node_modules/@murphai/operator-config/dist/operator-config.d.ts +7 -5
  1512. package/node_modules/@murphai/operator-config/dist/operator-config.d.ts.map +1 -1
  1513. package/node_modules/@murphai/operator-config/dist/operator-config.js.map +1 -1
  1514. package/node_modules/@murphai/operator-config/dist/setup-cli-contracts.d.ts +54 -54
  1515. package/node_modules/@murphai/operator-config/dist/setup-cli-contracts.d.ts.map +1 -1
  1516. package/node_modules/@murphai/operator-config/dist/setup-runtime-env.js.map +1 -1
  1517. package/node_modules/@murphai/operator-config/dist/telegram-runtime.d.ts.map +1 -1
  1518. package/node_modules/@murphai/operator-config/dist/telegram-runtime.js +11 -1
  1519. package/node_modules/@murphai/operator-config/dist/telegram-runtime.js.map +1 -1
  1520. package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.d.ts +85 -85
  1521. package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.js +1 -1
  1522. package/node_modules/@murphai/operator-config/dist/vault-cli-errors.d.ts.map +1 -1
  1523. package/node_modules/@murphai/operator-config/package.json +0 -5
  1524. package/node_modules/@murphai/parsers/README.md +4 -2
  1525. package/node_modules/@murphai/parsers/dist/adapters/ffmpeg.js.map +1 -1
  1526. package/node_modules/@murphai/parsers/dist/adapters/poppler-pdf.js.map +1 -1
  1527. package/node_modules/@murphai/parsers/dist/adapters/text-file.js.map +1 -1
  1528. package/node_modules/@murphai/parsers/dist/adapters/whisper-cpp.js.map +1 -1
  1529. package/node_modules/@murphai/parsers/dist/adapters/zxing-wasm.js.map +1 -1
  1530. package/node_modules/@murphai/parsers/dist/contracts/parser-output.d.ts +15 -0
  1531. package/node_modules/@murphai/parsers/dist/contracts/parser-output.d.ts.map +1 -0
  1532. package/node_modules/@murphai/parsers/dist/contracts/parser-output.js +368 -0
  1533. package/node_modules/@murphai/parsers/dist/contracts/parser-output.js.map +1 -0
  1534. package/node_modules/@murphai/parsers/dist/index.d.ts +5 -2
  1535. package/node_modules/@murphai/parsers/dist/index.d.ts.map +1 -1
  1536. package/node_modules/@murphai/parsers/dist/index.js +3 -1
  1537. package/node_modules/@murphai/parsers/dist/index.js.map +1 -1
  1538. package/node_modules/@murphai/parsers/dist/parser-result.d.ts +2 -0
  1539. package/node_modules/@murphai/parsers/dist/parser-result.d.ts.map +1 -0
  1540. package/node_modules/@murphai/parsers/dist/parser-result.js +2 -0
  1541. package/node_modules/@murphai/parsers/dist/parser-result.js.map +1 -0
  1542. package/node_modules/@murphai/parsers/dist/pipelines/parse-attachment.d.ts.map +1 -1
  1543. package/node_modules/@murphai/parsers/dist/pipelines/parse-attachment.js +2 -245
  1544. package/node_modules/@murphai/parsers/dist/pipelines/parse-attachment.js.map +1 -1
  1545. package/node_modules/@murphai/parsers/dist/pipelines/worker.d.ts +1 -1
  1546. package/node_modules/@murphai/parsers/dist/pipelines/worker.d.ts.map +1 -1
  1547. package/node_modules/@murphai/parsers/dist/pipelines/worker.js +12 -4
  1548. package/node_modules/@murphai/parsers/dist/pipelines/worker.js.map +1 -1
  1549. package/node_modules/@murphai/parsers/dist/publish/legacy-attempt-compactor.d.ts +18 -0
  1550. package/node_modules/@murphai/parsers/dist/publish/legacy-attempt-compactor.d.ts.map +1 -0
  1551. package/node_modules/@murphai/parsers/dist/publish/legacy-attempt-compactor.js +480 -0
  1552. package/node_modules/@murphai/parsers/dist/publish/legacy-attempt-compactor.js.map +1 -0
  1553. package/node_modules/@murphai/parsers/dist/publish/writer.d.ts +26 -8
  1554. package/node_modules/@murphai/parsers/dist/publish/writer.d.ts.map +1 -1
  1555. package/node_modules/@murphai/parsers/dist/publish/writer.js +168 -57
  1556. package/node_modules/@murphai/parsers/dist/publish/writer.js.map +1 -1
  1557. package/node_modules/@murphai/parsers/dist/registry/policy.js.map +1 -1
  1558. package/node_modules/@murphai/parsers/dist/registry/registry.js.map +1 -1
  1559. package/node_modules/@murphai/parsers/dist/shared.js.map +1 -1
  1560. package/node_modules/@murphai/parsers/dist/toolchain/discover.js.map +1 -1
  1561. package/node_modules/@murphai/parsers/package.json +4 -0
  1562. package/node_modules/@murphai/query/dist/automation.d.ts +3 -2
  1563. package/node_modules/@murphai/query/dist/automation.d.ts.map +1 -1
  1564. package/node_modules/@murphai/query/dist/automation.js +68 -5
  1565. package/node_modules/@murphai/query/dist/automation.js.map +1 -1
  1566. package/node_modules/@murphai/query/dist/biomarker-change-sentiment.d.ts +10 -0
  1567. package/node_modules/@murphai/query/dist/biomarker-change-sentiment.d.ts.map +1 -0
  1568. package/node_modules/@murphai/query/dist/biomarker-change-sentiment.js +24 -0
  1569. package/node_modules/@murphai/query/dist/biomarker-change-sentiment.js.map +1 -0
  1570. package/node_modules/@murphai/query/dist/browser-experiments.d.ts +4 -0
  1571. package/node_modules/@murphai/query/dist/browser-experiments.d.ts.map +1 -1
  1572. package/node_modules/@murphai/query/dist/browser-experiments.js +3 -0
  1573. package/node_modules/@murphai/query/dist/browser-experiments.js.map +1 -1
  1574. package/node_modules/@murphai/query/dist/browser-replica/biomarker-panel.js +3 -3
  1575. package/node_modules/@murphai/query/dist/browser-replica/biomarker-panel.js.map +1 -1
  1576. package/node_modules/@murphai/query/dist/browser-replica/build.d.ts.map +1 -1
  1577. package/node_modules/@murphai/query/dist/browser-replica/build.js +20 -0
  1578. package/node_modules/@murphai/query/dist/browser-replica/build.js.map +1 -1
  1579. package/node_modules/@murphai/query/dist/browser-replica/experiments.d.ts +8 -2
  1580. package/node_modules/@murphai/query/dist/browser-replica/experiments.d.ts.map +1 -1
  1581. package/node_modules/@murphai/query/dist/browser-replica/experiments.js +128 -26
  1582. package/node_modules/@murphai/query/dist/browser-replica/experiments.js.map +1 -1
  1583. package/node_modules/@murphai/query/dist/browser-replica/murph-age.d.ts +1 -1
  1584. package/node_modules/@murphai/query/dist/browser-replica/murph-age.d.ts.map +1 -1
  1585. package/node_modules/@murphai/query/dist/browser-replica/murph-age.js +2 -1
  1586. package/node_modules/@murphai/query/dist/browser-replica/murph-age.js.map +1 -1
  1587. package/node_modules/@murphai/query/dist/browser-replica/query.js.map +1 -1
  1588. package/node_modules/@murphai/query/dist/browser-replica/shared.d.ts +1 -1
  1589. package/node_modules/@murphai/query/dist/browser-replica/shared.d.ts.map +1 -1
  1590. package/node_modules/@murphai/query/dist/browser-replica/shared.js +1 -0
  1591. package/node_modules/@murphai/query/dist/browser-replica/shared.js.map +1 -1
  1592. package/node_modules/@murphai/query/dist/browser-replica/views.js +1 -0
  1593. package/node_modules/@murphai/query/dist/browser-replica/views.js.map +1 -1
  1594. package/node_modules/@murphai/query/dist/browser-replica.d.ts +1 -3
  1595. package/node_modules/@murphai/query/dist/browser-replica.d.ts.map +1 -1
  1596. package/node_modules/@murphai/query/dist/browser-replica.js +0 -1
  1597. package/node_modules/@murphai/query/dist/browser-replica.js.map +1 -1
  1598. package/node_modules/@murphai/query/dist/browser.d.ts +2 -2
  1599. package/node_modules/@murphai/query/dist/browser.d.ts.map +1 -1
  1600. package/node_modules/@murphai/query/dist/browser.js +1 -1
  1601. package/node_modules/@murphai/query/dist/browser.js.map +1 -1
  1602. package/node_modules/@murphai/query/dist/canonical-entities.d.ts.map +1 -1
  1603. package/node_modules/@murphai/query/dist/canonical-entities.js +1 -0
  1604. package/node_modules/@murphai/query/dist/canonical-entities.js.map +1 -1
  1605. package/node_modules/@murphai/query/dist/entity-families.d.ts +1 -1
  1606. package/node_modules/@murphai/query/dist/entity-families.d.ts.map +1 -1
  1607. package/node_modules/@murphai/query/dist/entity-families.js +1 -0
  1608. package/node_modules/@murphai/query/dist/entity-families.js.map +1 -1
  1609. package/node_modules/@murphai/query/dist/experiment-adherence.d.ts +55 -2
  1610. package/node_modules/@murphai/query/dist/experiment-adherence.d.ts.map +1 -1
  1611. package/node_modules/@murphai/query/dist/experiment-adherence.js +367 -13
  1612. package/node_modules/@murphai/query/dist/experiment-adherence.js.map +1 -1
  1613. package/node_modules/@murphai/query/dist/experiment-progress-card.d.ts +6 -1
  1614. package/node_modules/@murphai/query/dist/experiment-progress-card.d.ts.map +1 -1
  1615. package/node_modules/@murphai/query/dist/experiment-progress-card.js +48 -13
  1616. package/node_modules/@murphai/query/dist/experiment-progress-card.js.map +1 -1
  1617. package/node_modules/@murphai/query/dist/experiments.d.ts +11 -1
  1618. package/node_modules/@murphai/query/dist/experiments.d.ts.map +1 -1
  1619. package/node_modules/@murphai/query/dist/experiments.js +265 -36
  1620. package/node_modules/@murphai/query/dist/experiments.js.map +1 -1
  1621. package/node_modules/@murphai/query/dist/export-pack.js.map +1 -1
  1622. package/node_modules/@murphai/query/dist/group-weekly.d.ts +32 -0
  1623. package/node_modules/@murphai/query/dist/group-weekly.d.ts.map +1 -0
  1624. package/node_modules/@murphai/query/dist/group-weekly.js +166 -0
  1625. package/node_modules/@murphai/query/dist/group-weekly.js.map +1 -0
  1626. package/node_modules/@murphai/query/dist/health/assessments.js.map +1 -1
  1627. package/node_modules/@murphai/query/dist/health/blood-tests.js.map +1 -1
  1628. package/node_modules/@murphai/query/dist/health/canonical-collector.d.ts +1 -0
  1629. package/node_modules/@murphai/query/dist/health/canonical-collector.d.ts.map +1 -1
  1630. package/node_modules/@murphai/query/dist/health/canonical-collector.js +4 -1
  1631. package/node_modules/@murphai/query/dist/health/canonical-collector.js.map +1 -1
  1632. package/node_modules/@murphai/query/dist/health/foods.js.map +1 -1
  1633. package/node_modules/@murphai/query/dist/health/habitat.d.ts +6 -0
  1634. package/node_modules/@murphai/query/dist/health/habitat.d.ts.map +1 -0
  1635. package/node_modules/@murphai/query/dist/health/habitat.js +12 -0
  1636. package/node_modules/@murphai/query/dist/health/habitat.js.map +1 -0
  1637. package/node_modules/@murphai/query/dist/health/immunizations.js.map +1 -1
  1638. package/node_modules/@murphai/query/dist/health/index.d.ts +1 -0
  1639. package/node_modules/@murphai/query/dist/health/index.d.ts.map +1 -1
  1640. package/node_modules/@murphai/query/dist/health/index.js +1 -0
  1641. package/node_modules/@murphai/query/dist/health/index.js.map +1 -1
  1642. package/node_modules/@murphai/query/dist/health/projections.js.map +1 -1
  1643. package/node_modules/@murphai/query/dist/health/projectors/history.d.ts +1 -1
  1644. package/node_modules/@murphai/query/dist/health/providers.js.map +1 -1
  1645. package/node_modules/@murphai/query/dist/health/recipes.js.map +1 -1
  1646. package/node_modules/@murphai/query/dist/health/registries.d.ts +11 -0
  1647. package/node_modules/@murphai/query/dist/health/registries.d.ts.map +1 -1
  1648. package/node_modules/@murphai/query/dist/health/registries.js +18 -2
  1649. package/node_modules/@murphai/query/dist/health/registries.js.map +1 -1
  1650. package/node_modules/@murphai/query/dist/health/supplements.js.map +1 -1
  1651. package/node_modules/@murphai/query/dist/health/workout-formats.js.map +1 -1
  1652. package/node_modules/@murphai/query/dist/id-families.d.ts +1 -13
  1653. package/node_modules/@murphai/query/dist/id-families.d.ts.map +1 -1
  1654. package/node_modules/@murphai/query/dist/id-families.js +1 -119
  1655. package/node_modules/@murphai/query/dist/id-families.js.map +1 -1
  1656. package/node_modules/@murphai/query/dist/index.d.ts +10 -15
  1657. package/node_modules/@murphai/query/dist/index.d.ts.map +1 -1
  1658. package/node_modules/@murphai/query/dist/index.js +7 -31
  1659. package/node_modules/@murphai/query/dist/index.js.map +1 -1
  1660. package/node_modules/@murphai/query/dist/knowledge-format.js +1 -1
  1661. package/node_modules/@murphai/query/dist/knowledge-graph.js +4 -4
  1662. package/node_modules/@murphai/query/dist/knowledge-model.d.ts +1 -1
  1663. package/node_modules/@murphai/query/dist/knowledge-search.js +2 -2
  1664. package/node_modules/@murphai/query/dist/knowledge-search.js.map +1 -1
  1665. package/node_modules/@murphai/query/dist/meal-nutrition.js.map +1 -1
  1666. package/node_modules/@murphai/query/dist/memory.d.ts +3 -2
  1667. package/node_modules/@murphai/query/dist/memory.d.ts.map +1 -1
  1668. package/node_modules/@murphai/query/dist/memory.js +4 -1
  1669. package/node_modules/@murphai/query/dist/memory.js.map +1 -1
  1670. package/node_modules/@murphai/query/dist/metrics/index.js +23 -1
  1671. package/node_modules/@murphai/query/dist/metrics/index.js.map +1 -1
  1672. package/node_modules/@murphai/query/dist/metrics/projection.d.ts.map +1 -1
  1673. package/node_modules/@murphai/query/dist/metrics/projection.js +101 -7
  1674. package/node_modules/@murphai/query/dist/metrics/projection.js.map +1 -1
  1675. package/node_modules/@murphai/query/dist/murph-age.d.ts +1 -1
  1676. package/node_modules/@murphai/query/dist/murph-age.d.ts.map +1 -1
  1677. package/node_modules/@murphai/query/dist/murph-age.js +2 -1
  1678. package/node_modules/@murphai/query/dist/murph-age.js.map +1 -1
  1679. package/node_modules/@murphai/query/dist/overview-weekly-stats.js.map +1 -1
  1680. package/node_modules/@murphai/query/dist/overview.js.map +1 -1
  1681. package/node_modules/@murphai/query/dist/projection/entity-store.d.ts +2 -0
  1682. package/node_modules/@murphai/query/dist/projection/entity-store.d.ts.map +1 -1
  1683. package/node_modules/@murphai/query/dist/projection/entity-store.js +56 -0
  1684. package/node_modules/@murphai/query/dist/projection/entity-store.js.map +1 -1
  1685. package/node_modules/@murphai/query/dist/projection/rebuild.js.map +1 -1
  1686. package/node_modules/@murphai/query/dist/projection/schema.d.ts +1 -1
  1687. package/node_modules/@murphai/query/dist/projection/schema.js +2 -2
  1688. package/node_modules/@murphai/query/dist/projection/schema.js.map +1 -1
  1689. package/node_modules/@murphai/query/dist/projection/wearable-summary-compose.js +25 -2
  1690. package/node_modules/@murphai/query/dist/projection/wearable-summary-compose.js.map +1 -1
  1691. package/node_modules/@murphai/query/dist/projection/wearable-summary-projector.js +1 -0
  1692. package/node_modules/@murphai/query/dist/projection/wearable-summary-projector.js.map +1 -1
  1693. package/node_modules/@murphai/query/dist/projection/wearable-summary-store.d.ts.map +1 -1
  1694. package/node_modules/@murphai/query/dist/protocols.js.map +1 -1
  1695. package/node_modules/@murphai/query/dist/query-projection-types.d.ts +7 -0
  1696. package/node_modules/@murphai/query/dist/query-projection-types.d.ts.map +1 -1
  1697. package/node_modules/@murphai/query/dist/query-projection.d.ts +3 -2
  1698. package/node_modules/@murphai/query/dist/query-projection.d.ts.map +1 -1
  1699. package/node_modules/@murphai/query/dist/query-projection.js +5 -1
  1700. package/node_modules/@murphai/query/dist/query-projection.js.map +1 -1
  1701. package/node_modules/@murphai/query/dist/read-model.d.ts +4 -0
  1702. package/node_modules/@murphai/query/dist/read-model.d.ts.map +1 -1
  1703. package/node_modules/@murphai/query/dist/read-model.js +1 -0
  1704. package/node_modules/@murphai/query/dist/read-model.js.map +1 -1
  1705. package/node_modules/@murphai/query/dist/scheduled-logs.js.map +1 -1
  1706. package/node_modules/@murphai/query/dist/search-shared.js.map +1 -1
  1707. package/node_modules/@murphai/query/dist/search.js.map +1 -1
  1708. package/node_modules/@murphai/query/dist/summaries.js.map +1 -1
  1709. package/node_modules/@murphai/query/dist/timeline.js.map +1 -1
  1710. package/node_modules/@murphai/query/dist/vault-source.d.ts.map +1 -1
  1711. package/node_modules/@murphai/query/dist/vault-source.js +39 -3
  1712. package/node_modules/@murphai/query/dist/vault-source.js.map +1 -1
  1713. package/node_modules/@murphai/query/dist/wearables/candidates.d.ts +5 -2
  1714. package/node_modules/@murphai/query/dist/wearables/candidates.d.ts.map +1 -1
  1715. package/node_modules/@murphai/query/dist/wearables/candidates.js +305 -7
  1716. package/node_modules/@murphai/query/dist/wearables/candidates.js.map +1 -1
  1717. package/node_modules/@murphai/query/dist/wearables/dedupe.d.ts.map +1 -1
  1718. package/node_modules/@murphai/query/dist/wearables/dedupe.js +3 -1
  1719. package/node_modules/@murphai/query/dist/wearables/dedupe.js.map +1 -1
  1720. package/node_modules/@murphai/query/dist/wearables/observation.js.map +1 -1
  1721. package/node_modules/@murphai/query/dist/wearables/origin.js.map +1 -1
  1722. package/node_modules/@murphai/query/dist/wearables/provider-policy.js.map +1 -1
  1723. package/node_modules/@murphai/query/dist/wearables/public-output.d.ts.map +1 -1
  1724. package/node_modules/@murphai/query/dist/wearables/public-output.js +6 -79
  1725. package/node_modules/@murphai/query/dist/wearables/public-output.js.map +1 -1
  1726. package/node_modules/@murphai/query/dist/wearables/selection.d.ts.map +1 -1
  1727. package/node_modules/@murphai/query/dist/wearables/selection.js +5 -1
  1728. package/node_modules/@murphai/query/dist/wearables/selection.js.map +1 -1
  1729. package/node_modules/@murphai/query/dist/wearables/sleep-association.d.ts +9 -0
  1730. package/node_modules/@murphai/query/dist/wearables/sleep-association.d.ts.map +1 -0
  1731. package/node_modules/@murphai/query/dist/wearables/sleep-association.js +81 -0
  1732. package/node_modules/@murphai/query/dist/wearables/sleep-association.js.map +1 -0
  1733. package/node_modules/@murphai/query/dist/wearables/types.d.ts +29 -4
  1734. package/node_modules/@murphai/query/dist/wearables/types.d.ts.map +1 -1
  1735. package/node_modules/@murphai/query/dist/wearables/types.js.map +1 -1
  1736. package/node_modules/@murphai/query/dist/wearables.d.ts.map +1 -1
  1737. package/node_modules/@murphai/query/dist/wearables.js +50 -50
  1738. package/node_modules/@murphai/query/dist/wearables.js.map +1 -1
  1739. package/node_modules/@murphai/query/package.json +5 -0
  1740. package/node_modules/@murphai/runtime-state/README.md +1 -1
  1741. package/node_modules/@murphai/runtime-state/dist/assistant-state-fs.js.map +1 -1
  1742. package/node_modules/@murphai/runtime-state/dist/assistant-state-security.js +1 -1
  1743. package/node_modules/@murphai/runtime-state/dist/assistant-state-security.js.map +1 -1
  1744. package/node_modules/@murphai/runtime-state/dist/atomic-write.js.map +1 -1
  1745. package/node_modules/@murphai/runtime-state/dist/clinical-records-local-state-descriptors.d.ts +3 -0
  1746. package/node_modules/@murphai/runtime-state/dist/clinical-records-local-state-descriptors.d.ts.map +1 -0
  1747. package/node_modules/@murphai/runtime-state/dist/clinical-records-local-state-descriptors.js +12 -0
  1748. package/node_modules/@murphai/runtime-state/dist/clinical-records-local-state-descriptors.js.map +1 -0
  1749. package/node_modules/@murphai/runtime-state/dist/hosted-bundles.d.ts +1 -0
  1750. package/node_modules/@murphai/runtime-state/dist/hosted-bundles.d.ts.map +1 -1
  1751. package/node_modules/@murphai/runtime-state/dist/hosted-bundles.js +65 -31
  1752. package/node_modules/@murphai/runtime-state/dist/hosted-bundles.js.map +1 -1
  1753. package/node_modules/@murphai/runtime-state/dist/hosted-domain-crypto.d.ts +1 -1
  1754. package/node_modules/@murphai/runtime-state/dist/hosted-domain-crypto.d.ts.map +1 -1
  1755. package/node_modules/@murphai/runtime-state/dist/hosted-domain-crypto.js +10 -0
  1756. package/node_modules/@murphai/runtime-state/dist/hosted-domain-crypto.js.map +1 -1
  1757. package/node_modules/@murphai/runtime-state/dist/hosted-email.d.ts +11 -0
  1758. package/node_modules/@murphai/runtime-state/dist/hosted-email.d.ts.map +1 -1
  1759. package/node_modules/@murphai/runtime-state/dist/hosted-email.js +56 -3
  1760. package/node_modules/@murphai/runtime-state/dist/hosted-email.js.map +1 -1
  1761. package/node_modules/@murphai/runtime-state/dist/hosted-storage.d.ts +1 -1
  1762. package/node_modules/@murphai/runtime-state/dist/hosted-storage.d.ts.map +1 -1
  1763. package/node_modules/@murphai/runtime-state/dist/hosted-storage.js +12 -2
  1764. package/node_modules/@murphai/runtime-state/dist/hosted-storage.js.map +1 -1
  1765. package/node_modules/@murphai/runtime-state/dist/local-state-descriptor-helpers.js.map +1 -1
  1766. package/node_modules/@murphai/runtime-state/dist/local-state-descriptor-manifests.d.ts.map +1 -1
  1767. package/node_modules/@murphai/runtime-state/dist/local-state-descriptor-manifests.js +2 -0
  1768. package/node_modules/@murphai/runtime-state/dist/local-state-descriptor-manifests.js.map +1 -1
  1769. package/node_modules/@murphai/runtime-state/dist/locks.d.ts.map +1 -1
  1770. package/node_modules/@murphai/runtime-state/dist/loopback-control-plane.js.map +1 -1
  1771. package/node_modules/@murphai/runtime-state/dist/process-env.js.map +1 -1
  1772. package/node_modules/@murphai/runtime-state/dist/process-identity.js.map +1 -1
  1773. package/node_modules/@murphai/runtime-state/dist/runtime-paths.d.ts +2 -0
  1774. package/node_modules/@murphai/runtime-state/dist/runtime-paths.d.ts.map +1 -1
  1775. package/node_modules/@murphai/runtime-state/dist/runtime-paths.js +2 -0
  1776. package/node_modules/@murphai/runtime-state/dist/runtime-paths.js.map +1 -1
  1777. package/node_modules/@murphai/runtime-state/dist/shared.js.map +1 -1
  1778. package/node_modules/@murphai/runtime-state/dist/sqlite-warning-filter.js.map +1 -1
  1779. package/node_modules/@murphai/runtime-state/dist/sqlite.js.map +1 -1
  1780. package/node_modules/@murphai/runtime-state/dist/ulid.js.map +1 -1
  1781. package/node_modules/@murphai/setup-cli/dist/setup-agentmail.js.map +1 -1
  1782. package/node_modules/@murphai/setup-cli/dist/setup-assistant-account.js.map +1 -1
  1783. package/node_modules/@murphai/setup-cli/dist/setup-assistant-defaults.js.map +1 -1
  1784. package/node_modules/@murphai/setup-cli/dist/setup-assistant-wizard.js.map +1 -1
  1785. package/node_modules/@murphai/setup-cli/dist/setup-assistant.js.map +1 -1
  1786. package/node_modules/@murphai/setup-cli/dist/setup-cli.d.ts.map +1 -1
  1787. package/node_modules/@murphai/setup-cli/dist/setup-cli.js +1 -1
  1788. package/node_modules/@murphai/setup-cli/dist/setup-cli.js.map +1 -1
  1789. package/node_modules/@murphai/setup-cli/dist/setup-services/toolchain.js.map +1 -1
  1790. package/node_modules/@murphai/setup-cli/dist/setup-services.js.map +1 -1
  1791. package/node_modules/@murphai/setup-cli/dist/setup-wizard-options.js.map +1 -1
  1792. package/node_modules/@murphai/vault-usecases/README.md +11 -0
  1793. package/node_modules/@murphai/vault-usecases/dist/assistant-vault-paths.js.map +1 -1
  1794. package/node_modules/@murphai/vault-usecases/dist/clinical-records.d.ts +102 -0
  1795. package/node_modules/@murphai/vault-usecases/dist/clinical-records.d.ts.map +1 -0
  1796. package/node_modules/@murphai/vault-usecases/dist/clinical-records.js +374 -0
  1797. package/node_modules/@murphai/vault-usecases/dist/clinical-records.js.map +1 -0
  1798. package/node_modules/@murphai/vault-usecases/dist/commands/query-record-command-helpers.d.ts.map +1 -1
  1799. package/node_modules/@murphai/vault-usecases/dist/commands/query-record-command-helpers.js +13 -4
  1800. package/node_modules/@murphai/vault-usecases/dist/commands/query-record-command-helpers.js.map +1 -1
  1801. package/node_modules/@murphai/vault-usecases/dist/experiment-onboarding-options.d.ts +2 -2
  1802. package/node_modules/@murphai/vault-usecases/dist/health-cli-descriptors.d.ts +3 -3
  1803. package/node_modules/@murphai/vault-usecases/dist/health-cli-descriptors.js +1 -1
  1804. package/node_modules/@murphai/vault-usecases/dist/preferences.d.ts +34 -3
  1805. package/node_modules/@murphai/vault-usecases/dist/preferences.d.ts.map +1 -1
  1806. package/node_modules/@murphai/vault-usecases/dist/preferences.js +84 -1
  1807. package/node_modules/@murphai/vault-usecases/dist/preferences.js.map +1 -1
  1808. package/node_modules/@murphai/vault-usecases/dist/testing/junction-wearable-fixture.d.ts +16 -2
  1809. package/node_modules/@murphai/vault-usecases/dist/testing/junction-wearable-fixture.d.ts.map +1 -1
  1810. package/node_modules/@murphai/vault-usecases/dist/testing/junction-wearable-fixture.js +20 -1
  1811. package/node_modules/@murphai/vault-usecases/dist/testing/junction-wearable-fixture.js.map +1 -1
  1812. package/node_modules/@murphai/vault-usecases/dist/testing.d.ts +2 -2
  1813. package/node_modules/@murphai/vault-usecases/dist/testing.d.ts.map +1 -1
  1814. package/node_modules/@murphai/vault-usecases/dist/testing.js +1 -1
  1815. package/node_modules/@murphai/vault-usecases/dist/testing.js.map +1 -1
  1816. package/node_modules/@murphai/vault-usecases/dist/usecases/capture.d.ts +18 -18
  1817. package/node_modules/@murphai/vault-usecases/dist/usecases/capture.d.ts.map +1 -1
  1818. package/node_modules/@murphai/vault-usecases/dist/usecases/clinical-imports.d.ts +154 -154
  1819. package/node_modules/@murphai/vault-usecases/dist/usecases/clinical-imports.d.ts.map +1 -1
  1820. package/node_modules/@murphai/vault-usecases/dist/usecases/clinical-imports.js +3 -1
  1821. package/node_modules/@murphai/vault-usecases/dist/usecases/clinical-imports.js.map +1 -1
  1822. package/node_modules/@murphai/vault-usecases/dist/usecases/document-meal-read.d.ts +10 -9
  1823. package/node_modules/@murphai/vault-usecases/dist/usecases/document-meal-read.d.ts.map +1 -1
  1824. package/node_modules/@murphai/vault-usecases/dist/usecases/document-meal-read.js +2 -1
  1825. package/node_modules/@murphai/vault-usecases/dist/usecases/document-meal-read.js.map +1 -1
  1826. package/node_modules/@murphai/vault-usecases/dist/usecases/encounter.d.ts +35 -35
  1827. package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.d.ts +38 -37
  1828. package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.d.ts.map +1 -1
  1829. package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.js +37 -5
  1830. package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.js.map +1 -1
  1831. package/node_modules/@murphai/vault-usecases/dist/usecases/explicit-health-family-services.js +7 -7
  1832. package/node_modules/@murphai/vault-usecases/dist/usecases/food.d.ts +2 -2
  1833. package/node_modules/@murphai/vault-usecases/dist/usecases/food.d.ts.map +1 -1
  1834. package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.d.ts.map +1 -1
  1835. package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.js +57 -20
  1836. package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.js.map +1 -1
  1837. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention-experiment-link.d.ts +20 -10
  1838. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention-experiment-link.d.ts.map +1 -1
  1839. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention-experiment-link.js +1 -1
  1840. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention-experiment-link.js.map +1 -1
  1841. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention.d.ts +6 -6
  1842. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention.d.ts.map +1 -1
  1843. package/node_modules/@murphai/vault-usecases/dist/usecases/measurement-read.d.ts +9 -9
  1844. package/node_modules/@murphai/vault-usecases/dist/usecases/measurement-read.d.ts.map +1 -1
  1845. package/node_modules/@murphai/vault-usecases/dist/usecases/measurement.d.ts +4 -4
  1846. package/node_modules/@murphai/vault-usecases/dist/usecases/measurement.d.ts.map +1 -1
  1847. package/node_modules/@murphai/vault-usecases/dist/usecases/provider-event.d.ts +13 -13
  1848. package/node_modules/@murphai/vault-usecases/dist/usecases/provider-event.d.ts.map +1 -1
  1849. package/node_modules/@murphai/vault-usecases/dist/usecases/recipe.d.ts +3 -3
  1850. package/node_modules/@murphai/vault-usecases/dist/usecases/runtime.d.ts.map +1 -1
  1851. package/node_modules/@murphai/vault-usecases/dist/usecases/runtime.js +1 -0
  1852. package/node_modules/@murphai/vault-usecases/dist/usecases/runtime.js.map +1 -1
  1853. package/node_modules/@murphai/vault-usecases/dist/usecases/shared.d.ts +1 -0
  1854. package/node_modules/@murphai/vault-usecases/dist/usecases/shared.d.ts.map +1 -1
  1855. package/node_modules/@murphai/vault-usecases/dist/usecases/shared.js +101 -8
  1856. package/node_modules/@murphai/vault-usecases/dist/usecases/shared.js.map +1 -1
  1857. package/node_modules/@murphai/vault-usecases/dist/usecases/types.d.ts +34 -0
  1858. package/node_modules/@murphai/vault-usecases/dist/usecases/types.d.ts.map +1 -1
  1859. package/node_modules/@murphai/vault-usecases/dist/usecases/vault-usecase-helpers.js.map +1 -1
  1860. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-format.d.ts +33 -33
  1861. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-format.d.ts.map +1 -1
  1862. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-measurement.d.ts +4 -4
  1863. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-model.js.map +1 -1
  1864. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-read.d.ts +8 -8
  1865. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-read.d.ts.map +1 -1
  1866. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-read.js +1 -1
  1867. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-read.js.map +1 -1
  1868. package/node_modules/@murphai/vault-usecases/dist/usecases/workout.d.ts +48 -48
  1869. package/node_modules/@murphai/vault-usecases/dist/usecases/workout.d.ts.map +1 -1
  1870. package/node_modules/@murphai/vault-usecases/dist/vault-services.d.ts.map +1 -1
  1871. package/node_modules/@murphai/vault-usecases/dist/vault-services.js +1 -0
  1872. package/node_modules/@murphai/vault-usecases/dist/vault-services.js.map +1 -1
  1873. package/node_modules/@murphai/vault-usecases/package.json +8 -0
  1874. package/node_modules/incur/dist/Cli.d.ts +4 -0
  1875. package/node_modules/incur/dist/Cli.js +10 -3
  1876. package/node_modules/incur/dist/SyncSkills.d.ts +2 -0
  1877. package/node_modules/incur/dist/SyncSkills.js +5 -2
  1878. package/node_modules/incur/src/Cli.ts +14 -3
  1879. package/node_modules/incur/src/SyncSkills.ts +9 -2
  1880. package/package.json +6 -4
  1881. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/turn-attachment-image-refs.d.ts +0 -15
  1882. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/turn-attachment-image-refs.d.ts.map +0 -1
  1883. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/turn-attachment-image-refs.js +0 -79
  1884. package/node_modules/@murphai/assistant-engine/dist/assistant-codex/turn-attachment-image-refs.js.map +0 -1
  1885. package/node_modules/@murphai/device-syncd/dist/providers/junction-connect-sources.d.ts.map +0 -1
  1886. package/node_modules/@murphai/device-syncd/dist/providers/junction-connect-sources.js.map +0 -1
  1887. package/node_modules/@murphai/messaging-ingress/dist/whatsapp-webhook.d.ts +0 -73
  1888. package/node_modules/@murphai/messaging-ingress/dist/whatsapp-webhook.d.ts.map +0 -1
  1889. package/node_modules/@murphai/messaging-ingress/dist/whatsapp-webhook.js +0 -212
  1890. package/node_modules/@murphai/messaging-ingress/dist/whatsapp-webhook.js.map +0 -1
  1891. package/node_modules/@murphai/operator-config/dist/runtime-errors.d.ts +0 -4
  1892. package/node_modules/@murphai/operator-config/dist/runtime-errors.d.ts.map +0 -1
  1893. package/node_modules/@murphai/operator-config/dist/runtime-errors.js +0 -19
  1894. package/node_modules/@murphai/operator-config/dist/runtime-errors.js.map +0 -1
  1895. package/node_modules/@murphai/operator-config/dist/whatsapp-runtime.d.ts +0 -34
  1896. package/node_modules/@murphai/operator-config/dist/whatsapp-runtime.d.ts.map +0 -1
  1897. package/node_modules/@murphai/operator-config/dist/whatsapp-runtime.js +0 -208
  1898. package/node_modules/@murphai/operator-config/dist/whatsapp-runtime.js.map +0 -1
  1899. package/node_modules/@murphai/vault-usecases/dist/query-id-families.d.ts +0 -4
  1900. package/node_modules/@murphai/vault-usecases/dist/query-id-families.d.ts.map +0 -1
  1901. package/node_modules/@murphai/vault-usecases/dist/query-id-families.js +0 -104
  1902. package/node_modules/@murphai/vault-usecases/dist/query-id-families.js.map +0 -1
  1903. /package/node_modules/@murphai/device-syncd/dist/{providers → config}/junction-connect-sources.d.ts +0 -0
@@ -1,15 +1,18 @@
1
1
  import { spawn } from 'node:child_process';
2
2
  import { createHash } from 'node:crypto';
3
- import { mkdtemp, readFile, rm, stat } from 'node:fs/promises';
3
+ import { mkdtemp, rm, stat } from 'node:fs/promises';
4
4
  import { tmpdir } from 'node:os';
5
5
  import path from 'node:path';
6
+ import { HOSTED_CLI_BRIDGE_TOKEN_ENV } from '@murphai/hosted-execution/cli-runtime-bridge';
6
7
  import { normalizeNullableString } from '@murphai/operator-config/text/shared';
7
8
  import { VaultCliError } from '@murphai/operator-config/vault-cli-errors';
8
- import { extractAssistantMessageFallback, extractCodexErrorInfo, extractCodexErrorMessage, extractCodexCompletedFinalAgentMessageTextFromNormalized, extractCodexProgressEventFromNormalized, isCodexCompletedUserMessageItemFromNormalized, extractCodexSessionId, extractCodexStatusEventFromStderrLine, extractCodexTraceUpdatesFromNormalized, extractCodexCurrentChannelProgressTextFromNormalized, normalizeCodexEvent, normalizeStreamingText, } from './assistant-codex-events.js';
9
+ import { readHostedCanonicalWritePort, withHostedCanonicalWritePort, } from '@murphai/core';
10
+ import { registerStopWarmCodexAppServer } from './codex-lifecycle.js';
11
+ import { extractAssistantMessageFallback, extractCodexErrorInfo, extractCodexErrorMessage, extractCodexCompletedFinalAgentMessageTextFromNormalized, extractCodexProgressEventFromNormalized, isCodexCompletedUserMessageItemFromNormalized, extractCodexStatusEventFromStderrLine, extractCodexTraceUpdatesFromNormalized, extractCodexContextCompactionProgressTextFromNormalized, normalizeCodexEvent, normalizeStreamingText, } from './assistant-codex-events.js';
9
12
  import { buildCodexTurnInterruptParams, buildCodexThreadResumeParams, buildCodexThreadStartParams, buildCodexTurnSteerParams, buildCodexTurnStartParams, mapCodexAppServerApprovalPolicy, mapCodexAppServerSandboxMode, resolveSupportedCodexAppServerApprovalPolicy, } from './assistant-codex/app-server-requests.js';
10
13
  import { buildRuntimeIssueInputForFailedCodexAction, createCodexActionDiagnosticsReducer, } from './assistant-codex/action-diagnostics.js';
11
- import { executeMurphDynamicToolRequest, isComputerDynamicToolRequest, readMurphDynamicToolRequest, } from './assistant-codex/dynamic-tools.js';
12
- import { attachCodexAppServerProcessExitCleanup, attachCodexAbortListener, consumeCompleteLines, denyUnsupportedCodexServerRequest, readCodexRpcResponseId, readCodexRpcServerRequestId, rejectPendingCodexRpcRequests, resolvePendingCodexRpcRequest, signalCodexAppServerChild, stopCodexAppServerChild, stripUndefinedRpcParams, tryParseJsonLine, waitForCodexSpawn, withCodexRpcTimeout, writeCodexRpcMessage, } from './assistant-codex/app-server-rpc.js';
14
+ import { executeMurphDynamicToolRequest, isComputerDynamicToolRequest, MURPH_ASSISTANT_STYLE_TOOL, readMurphDynamicToolRequest, } from './assistant-codex/dynamic-tools.js';
15
+ import { attachCodexAppServerProcessExitCleanup, attachCodexAbortListener, consumeCompleteLines, denyUnsupportedCodexServerRequest, rejectCodexServerRequest, readCodexRpcResponseId, readCodexRpcServerRequestId, rejectPendingCodexRpcRequests, resolvePendingCodexRpcRequest, signalCodexAppServerChild, stopCodexAppServerChild, stripUndefinedRpcParams, tryParseJsonLine, waitForCodexSpawn, withCodexRpcTimeout, writeCodexRpcMessage, } from './assistant-codex/app-server-rpc.js';
13
16
  import { resolveCodexChildEnv, withHostedCodexModelCatalogConfigOverride, } from './assistant-codex/config.js';
14
17
  import { buildCodexProcessExitError, buildCodexStdinFailureFallback, buildCodexTurnFailedError, extractCodexThreadIdFromMessage, extractCodexThreadIdFromResult, extractCodexThreadPathFromResult, extractCodexTurnErrorMessage, extractCodexTurnIdFromMessage, extractCodexTurnIdFromResult, extractCodexTurnStatus, isFailedCodexTurnStatus, readNodeErrorCode, } from './assistant-codex/failures.js';
15
18
  import { extractCodexSubagentUsageDrafts, isAssistantCodexTokenUsageEventType, readCodexCollabReceiverThreadIds, } from './assistant/providers/helpers.js';
@@ -22,6 +25,7 @@ const CODEX_RPC_CLIENT_NAME = 'murph';
22
25
  const CODEX_RPC_CLIENT_TITLE = 'Murph';
23
26
  const CODEX_RPC_CLIENT_VERSION = '1.0.0';
24
27
  const CODEX_RPC_DEFAULT_TIMEOUT_MS = 120_000;
28
+ const HOSTED_CODEX_BACKGROUND_TERMINAL_CLEANUP_TIMEOUT_MS = 5_000;
25
29
  const CODEX_RPC_STEER_TIMEOUT_MS = 15_000;
26
30
  const CODEX_APP_SERVER_INTERRUPT_CLEANUP_TIMEOUT_MS = 15_000;
27
31
  const CODEX_MANAGED_ACCOUNT_LOGIN_TIMEOUT_MS = 10 * 60 * 1000;
@@ -32,6 +36,8 @@ const CODEX_MANAGED_ACCOUNT_CONFIG_OVERRIDES = [
32
36
  const CODEX_APP_SERVER_COMMAND = 'app-server';
33
37
  const CODEX_APP_SERVER_TIMING_TRACE_SCHEMA = 'murph.assistant-codex-app-server-timing.v1';
34
38
  const CODEX_APP_SERVER_TIMING_TRACE_TYPE = 'assistant.codex.app_server_timing';
39
+ const CODEX_TRANSPORT_DIAGNOSTICS_TRACE_SCHEMA = 'murph.assistant-codex-transport-diagnostics.v1';
40
+ const CODEX_TRANSPORT_DIAGNOSTICS_TRACE_TYPE = 'assistant.codex.transport_diagnostics';
35
41
  const CODEX_APP_SERVER_STARTUP_STDERR_MAX_LENGTH = 16_384;
36
42
  // Bound on distinct subagent threads whose token usage is tracked per parent
37
43
  // turn. Far above any sane spawn fan-out; threads past the cap are counted
@@ -46,9 +52,9 @@ function prepareCodexRpcParams(method, params) {
46
52
  }
47
53
  return stripped;
48
54
  }
49
- // The 0.135 app-server reports compaction completion to v2 clients as a
50
- // contextCompaction item; `thread/compacted` is the legacy fan-out kept for
51
- // protocol drift tolerance.
55
+ // Modern app-server clients receive compaction lifecycle as contextCompaction
56
+ // items; `thread/compacted` is the legacy fan-out kept for protocol drift
57
+ // tolerance.
52
58
  function isCodexContextCompactionStarted(message) {
53
59
  const method = typeof message.method === 'string' ? message.method : null;
54
60
  if (method !== 'item/started' && method !== 'item.started') {
@@ -136,19 +142,6 @@ async function waitForCodexProgressDrain(pending) {
136
142
  }
137
143
  await Promise.allSettled(pending);
138
144
  }
139
- function resolveCodexCurrentChannelProgressSource(normalizedEvent) {
140
- if (normalizedEvent.kind === 'assistant_message' &&
141
- normalizedEvent.itemState === 'completed' &&
142
- normalizedEvent.messagePhase === 'commentary') {
143
- return 'model';
144
- }
145
- if (normalizedEvent.kind === 'status_item' &&
146
- normalizedEvent.itemType === 'context.compaction' &&
147
- normalizedEvent.itemState === 'running') {
148
- return 'system';
149
- }
150
- return null;
151
- }
152
145
  const CODEX_APP_SERVER_TURN_FAILURE_CONTEXT = Symbol('codexAppServerTurnFailureContext');
153
146
  const codexAppServerTurnFailureContexts = new WeakMap();
154
147
  export function readCodexAppServerTurnFailureContext(error) {
@@ -169,9 +162,9 @@ export function readCodexAppServerTurnFailureContext(error) {
169
162
  ...context.acceptedNoReplyDeliveryContextOrdinals,
170
163
  ],
171
164
  reactions: (context.reactions ?? []).map((entry) => ({ ...entry })),
172
- codexThreadHistoryUnsafe: context.codexThreadHistoryUnsafe,
173
165
  codexThreadId: context.codexThreadId,
174
166
  providerTurnId: context.providerTurnId,
167
+ rolloutRelativePath: context.rolloutRelativePath,
175
168
  };
176
169
  }
177
170
  export function buildCodexAppServerSteerRequest(input) {
@@ -180,7 +173,14 @@ export function buildCodexAppServerSteerRequest(input) {
180
173
  params: buildCodexTurnSteerParams(input),
181
174
  };
182
175
  }
176
+ function appendRequiredVaultFileApprovalUrls(message, approvalUrls) {
177
+ return [
178
+ normalizeNullableString(message),
179
+ ...approvalUrls,
180
+ ].filter((part) => part !== null).join('\n\n');
181
+ }
183
182
  export async function executeCodexAppServerTurn(input) {
183
+ assertCodexAppServerPermissionRequest(input);
184
184
  const approvalPolicy = resolveSupportedCodexAppServerApprovalPolicy(input.approvalPolicy);
185
185
  const workingDirectory = path.resolve(input.workingDirectory);
186
186
  await assertCodexAppServerWorkingDirectory(workingDirectory);
@@ -201,6 +201,7 @@ export async function executeCodexAppServerTurn(input) {
201
201
  configOverrides: input.configOverrides,
202
202
  env: input.env,
203
203
  }),
204
+ runtimeWorkspaceRoots: input.runtimeWorkspaceRoots?.map((root) => path.resolve(root)),
204
205
  };
205
206
  const args = buildCodexAppServerArgs(normalizedInput);
206
207
  const launchKey = buildCodexAppServerLaunchKey({
@@ -212,7 +213,6 @@ export async function executeCodexAppServerTurn(input) {
212
213
  const preparedInput = {
213
214
  ...normalizedInput,
214
215
  args,
215
- loadAuthorizedReferenceImageRefs: input.loadAuthorizedReferenceImageRefs ?? null,
216
216
  codexCommand,
217
217
  env: childEnv,
218
218
  fetchImpl: input.fetchImpl ?? fetch,
@@ -225,19 +225,55 @@ export async function executeCodexAppServerTurn(input) {
225
225
  voiceMemoRuntime: input.voiceMemoRuntime ?? null,
226
226
  workingDirectory,
227
227
  };
228
+ let oneShotProcess = null;
228
229
  try {
230
+ if (preparedInput.processLifetime === 'one-shot') {
231
+ oneShotProcess = new CodexAppServerProcess({
232
+ args: preparedInput.args,
233
+ codexCommand: preparedInput.codexCommand,
234
+ coldStartReason: 'node-process-first-use',
235
+ env: preparedInput.env,
236
+ launchKey: preparedInput.launchKey,
237
+ });
238
+ oneShotProcess.reserveTurn();
239
+ return await runCodexAppServerTurnOnProcess(oneShotProcess, preparedInput);
240
+ }
229
241
  const processInstance = await getOrStartWarmCodexProcess(preparedInput);
242
+ return await runCodexAppServerTurnOnProcess(processInstance, preparedInput);
243
+ }
244
+ finally {
230
245
  try {
231
- return await runCodexAppServerTurnOnProcess(processInstance, preparedInput);
246
+ await oneShotProcess?.stop('one-shot-complete');
232
247
  }
233
248
  finally {
234
- clearWarmCodexProcessIfUnusable(processInstance);
249
+ await rm(tempRoot, {
250
+ recursive: true,
251
+ force: true,
252
+ });
235
253
  }
236
254
  }
237
- finally {
238
- await rm(tempRoot, {
239
- recursive: true,
240
- force: true,
255
+ }
256
+ function assertCodexAppServerPermissionRequest(input) {
257
+ const permissions = normalizeNullableString(input.permissions);
258
+ if (!permissions) {
259
+ return;
260
+ }
261
+ const invalidFields = [
262
+ ...(input.sandbox ? ['sandbox'] : []),
263
+ ...(normalizeNullableString(input.resumeSessionId) ? ['resumeSessionId'] : []),
264
+ ...(input.ephemeral === true ? [] : ['ephemeral']),
265
+ ...(input.processLifetime === 'one-shot' ? [] : ['processLifetime']),
266
+ ];
267
+ if (invalidFields.length > 0) {
268
+ throw new VaultCliError('ASSISTANT_CODEX_APP_SERVER_REQUEST_INVALID', 'Named Codex permissions require a fresh ephemeral thread in a one-shot process without a legacy sandbox.', {
269
+ invalidFields,
270
+ retryable: false,
271
+ });
272
+ }
273
+ if (!input.runtimeWorkspaceRoots || input.runtimeWorkspaceRoots.length === 0) {
274
+ throw new VaultCliError('ASSISTANT_CODEX_APP_SERVER_REQUEST_INVALID', 'Named Codex permissions require at least one explicit runtime workspace root.', {
275
+ invalidFields: ['runtimeWorkspaceRoots'],
276
+ retryable: false,
241
277
  });
242
278
  }
243
279
  }
@@ -289,19 +325,21 @@ export function buildCodexAppServerArgs(input) {
289
325
  }
290
326
  class CodexAppServerProcess {
291
327
  child;
328
+ coldStartReason;
292
329
  launchKey;
293
330
  pendingRequests = new Map();
294
331
  processGroupPid;
295
332
  startedAt = Date.now();
296
333
  activeTurn = null;
297
334
  boundThreadId = null;
335
+ boundThreadModel = null;
298
336
  boundThreadServiceTier = null;
299
337
  cleanupProcessExitListener;
300
- completedTurnCount = 0;
301
338
  lastThreadTokenUsage = null;
302
339
  codexCommand;
303
340
  ignoredResponseIds = new Set();
304
341
  initialized = false;
342
+ endReason = null;
305
343
  nextRequestId = 1;
306
344
  normalShutdown = false;
307
345
  poisoned = false;
@@ -313,12 +351,19 @@ class CodexAppServerProcess {
313
351
  stdinFailure = null;
314
352
  stdoutBuffer = '';
315
353
  stopPromise = null;
354
+ postTurnCleanupPromise = null;
316
355
  constructor(input) {
317
356
  this.codexCommand = input.codexCommand;
357
+ this.coldStartReason = input.coldStartReason;
318
358
  this.launchKey = input.launchKey;
319
359
  const useProcessGroup = process.platform !== 'win32';
360
+ // The warm app-server outlives hosted workspace restores, which delete and
361
+ // recreate the workspace path between invocations. A process anchored to
362
+ // that directory keeps a dead cwd inode, and Codex config loading then
363
+ // fails with ENOENT on the next thread/start. Threads receive the real
364
+ // workspace via the explicit per-thread `cwd` param instead.
320
365
  this.child = spawn(input.codexCommand, [...input.args], {
321
- cwd: input.workingDirectory,
366
+ cwd: tmpdir(),
322
367
  detached: useProcessGroup,
323
368
  env: input.env,
324
369
  stdio: ['pipe', 'pipe', 'pipe'],
@@ -339,6 +384,14 @@ class CodexAppServerProcess {
339
384
  this.child.stderr.on('data', (chunk) => {
340
385
  this.handleStderrData(String(chunk));
341
386
  });
387
+ this.child.on('exit', () => {
388
+ // `exit` precedes `close`; claim the cause and sweep the exact owned
389
+ // group before a descendant can keep an inherited stream open forever.
390
+ if (!this.normalShutdown) {
391
+ this.endReason ??= 'previous-process-exit';
392
+ this.signal('SIGKILL');
393
+ }
394
+ });
342
395
  this.child.on('close', (code, signal) => {
343
396
  this.handleClose(code, signal);
344
397
  });
@@ -349,12 +402,21 @@ class CodexAppServerProcess {
349
402
  get processLifetimeMs() {
350
403
  return Math.max(0, Date.now() - this.startedAt);
351
404
  }
352
- get requiresCompleteTurnCorrelation() {
353
- return this.completedTurnCount > 0;
405
+ get nextColdStartReason() {
406
+ return this.endReason ?? 'previous-process-unhealthy';
407
+ }
408
+ get recordedEndReason() {
409
+ return this.endReason;
410
+ }
411
+ noteTurnAbort() {
412
+ this.endReason ??= 'previous-turn-abort';
354
413
  }
355
414
  get hasInFlightTurn() {
356
415
  return this.state === 'reserved' || this.state === 'running';
357
416
  }
417
+ get pendingPostTurnCleanup() {
418
+ return this.postTurnCleanupPromise;
419
+ }
358
420
  reserveTurn() {
359
421
  if (this.state !== 'idle' ||
360
422
  this.activeTurn ||
@@ -384,7 +446,6 @@ class CodexAppServerProcess {
384
446
  this.activeTurn = null;
385
447
  if (this.state === 'running') {
386
448
  this.state = 'idle';
387
- this.completedTurnCount += 1;
388
449
  }
389
450
  }
390
451
  releaseReservation() {
@@ -392,6 +453,33 @@ class CodexAppServerProcess {
392
453
  this.state = 'idle';
393
454
  }
394
455
  }
456
+ beginHostedBackgroundTerminalCleanup(input) {
457
+ if (this.activeTurn !== input.binding || this.state !== 'running') {
458
+ throw this.buildBusyError('Codex app-server cannot start post-turn cleanup outside its completed turn.');
459
+ }
460
+ // Keep the process unavailable while cleanup runs, but detach the completed
461
+ // turn so its provider result can proceed to durable reply delivery.
462
+ this.activeTurn = null;
463
+ this.state = 'cleanup';
464
+ const cleanup = withCodexRpcTimeout(this.sendRequest('thread/backgroundTerminals/clean', {
465
+ threadId: input.threadId,
466
+ }), HOSTED_CODEX_BACKGROUND_TERMINAL_CLEANUP_TIMEOUT_MS, 'thread/backgroundTerminals/clean').then(() => undefined, async (error) => {
467
+ // Clear the timed-out RPC before stopping the exact owned process
468
+ // group. A cleanup failure never turns a completed reply into a
469
+ // provider failure, but the process must not become reusable.
470
+ this.rejectPending(error);
471
+ await this.poison('background-terminal-cleanup-failed');
472
+ }).finally(() => {
473
+ if (this.state === 'cleanup') {
474
+ this.state = 'idle';
475
+ }
476
+ if (this.postTurnCleanupPromise === cleanup) {
477
+ this.postTurnCleanupPromise = null;
478
+ }
479
+ });
480
+ this.postTurnCleanupPromise = cleanup;
481
+ return cleanup;
482
+ }
395
483
  buildBusyError(message = 'Codex app-server process is not idle.') {
396
484
  return new VaultCliError('ASSISTANT_CODEX_APP_SERVER_BUSY', message, {
397
485
  retryable: true,
@@ -483,21 +571,27 @@ class CodexAppServerProcess {
483
571
  });
484
572
  }
485
573
  async stop(reason) {
486
- if (this.stopCompleted) {
574
+ if (this.stopPromise) {
575
+ await this.stopPromise;
487
576
  return;
488
577
  }
489
- // Memoized so detached kills (idle-compaction abort) and a racing turn's
490
- // replacement stop share one teardown instead of double-signaling; an
491
- // unsuccessful teardown clears the memo so later callers retry, matching
492
- // the pre-memoization semantics.
493
- this.stopPromise ??= this.runStop(reason).finally(() => {
494
- if (!this.stopCompleted) {
495
- this.stopPromise = null;
496
- }
578
+ if (this.stopCompleted || this.state === 'stopped') {
579
+ return;
580
+ }
581
+ // Memoized while in flight so concurrent callers (a failed compaction's
582
+ // poison and a racing turn's replacement stop) share one teardown instead
583
+ // of double-signaling. Once settled, later calls either observe the stopped
584
+ // state or retry an unsuccessful teardown.
585
+ this.stopPromise = this.runStop(reason).finally(() => {
586
+ this.stopPromise = null;
497
587
  });
498
588
  await this.stopPromise;
499
589
  }
500
- async runStop(_reason) {
590
+ async runStop(reason) {
591
+ this.endReason ??= resolveCodexAppServerEndReason(reason);
592
+ if (this.state === 'cleanup') {
593
+ this.rejectPending(new VaultCliError('ASSISTANT_CODEX_APP_SERVER_STOPPED_DURING_CLEANUP', 'Codex app-server stopped during post-turn cleanup.', { retryable: true }));
594
+ }
501
595
  this.normalShutdown = true;
502
596
  this.state = 'stopping';
503
597
  let stopped = false;
@@ -539,29 +633,6 @@ class CodexAppServerProcess {
539
633
  this.child.exitCode === null &&
540
634
  this.child.signalCode === null);
541
635
  }
542
- async snapshotExpectedRootProcess() {
543
- const pid = this.child.pid;
544
- if (typeof pid !== 'number' ||
545
- !Number.isSafeInteger(pid) ||
546
- pid <= 0 ||
547
- this.child.exitCode !== null ||
548
- this.child.signalCode !== null) {
549
- return null;
550
- }
551
- const procState = await readCodexProcState(pid);
552
- if (!procState?.commandLineDigest ||
553
- !procState?.startTimeTicksFromProcStat) {
554
- return null;
555
- }
556
- return {
557
- commandLineDigest: procState.commandLineDigest,
558
- owner: 'codex-app-server',
559
- pid,
560
- processGroupId: this.processGroupPid,
561
- startTimeTicksFromProcStat: procState.startTimeTicksFromProcStat,
562
- uid: procState.uid,
563
- };
564
- }
565
636
  closeStdin() {
566
637
  if (this.stdinFailure) {
567
638
  return this.stdinFailure;
@@ -593,7 +664,7 @@ class CodexAppServerProcess {
593
664
  const failure = this.stdinFailure ??
594
665
  this.activeTurn?.onStdinError(error) ??
595
666
  buildCodexProcessExitError({
596
- abortRequested: false,
667
+ abortOwnsTermination: false,
597
668
  code: this.child.exitCode,
598
669
  diagnostics: this.buildStartupProcessDiagnostics(),
599
670
  errorInfo: null,
@@ -678,13 +749,13 @@ class CodexAppServerProcess {
678
749
  }
679
750
  this.lastThreadTokenUsage = {
680
751
  lastInputTokens,
752
+ model: this.boundThreadModel,
681
753
  serviceTier: this.boundThreadServiceTier,
682
754
  threadId: update.threadId,
683
755
  };
684
756
  }
685
- // The most recent thread this process ran a turn for. Used between turns
686
- // to tell subagent-thread notifications apart from same-thread output
687
- // contamination, which must still poison the warm process.
757
+ // The most recent parent thread this process ran. A freshly bound turn can
758
+ // use it to route late child-thread traffic before thread/start returns.
688
759
  noteBoundThreadId(threadId) {
689
760
  if (threadId) {
690
761
  this.boundThreadId = threadId;
@@ -693,34 +764,36 @@ class CodexAppServerProcess {
693
764
  noteBoundThreadServiceTier(serviceTier) {
694
765
  this.boundThreadServiceTier = serviceTier;
695
766
  }
767
+ noteBoundThreadModel(model) {
768
+ this.boundThreadModel = normalizeNullableString(model);
769
+ }
696
770
  // Exposed so a freshly bound turn can route foreign-thread events before
697
771
  // its own thread/start response has produced the new thread id.
698
772
  get lastBoundThreadId() {
699
773
  return this.boundThreadId;
700
774
  }
701
- // Subagent threads can outlive the parent turn: codex broadcasts their
702
- // thread-scoped notifications on this connection even when no turn is
703
- // active. Tolerate (and never bill) those between turns; deny their server
704
- // requests so the child does not hang. Idle output for the bound thread
705
- // keeps poisoning so the contamination guard is unchanged.
706
- shouldTolerateIdleSubagentMessage(message) {
707
- const messageThreadId = extractCodexThreadIdFromMessage(message);
708
- if (messageThreadId === null ||
709
- this.boundThreadId === null ||
710
- messageThreadId === this.boundThreadId) {
711
- return false;
775
+ handleIdleServerMessage(message) {
776
+ const responseId = readCodexRpcResponseId(message);
777
+ if (responseId !== null) {
778
+ const resolved = resolvePendingCodexRpcRequest({
779
+ message,
780
+ pendingRequests: this.pendingRequests,
781
+ responseId,
782
+ });
783
+ if (resolved === 'unknown_response_id') {
784
+ this.consumeIgnoredResponseId(responseId);
785
+ }
786
+ return;
712
787
  }
713
788
  const requestId = readCodexRpcServerRequestId(message);
714
- if (requestId !== null) {
715
- void this.writeRpcMessage({
716
- id: requestId,
717
- error: {
718
- code: -32000,
719
- message: 'Server requests from codex subagent threads are not supported.',
720
- },
721
- });
789
+ if (requestId === null) {
790
+ return;
722
791
  }
723
- return true;
792
+ rejectCodexServerRequest({
793
+ message: 'Server requests outside an active Codex turn are not supported.',
794
+ requestId,
795
+ writeRpcMessage: (payload) => void this.writeRpcMessage(payload),
796
+ });
724
797
  }
725
798
  handleStdoutLine(line) {
726
799
  const parsed = tryParseJsonLine(line);
@@ -729,9 +802,8 @@ class CodexAppServerProcess {
729
802
  if (this.activeTurn) {
730
803
  this.activeTurn.onParsedMessage(parsed.value);
731
804
  }
732
- else if (line.trim().length > 0 &&
733
- !this.shouldTolerateIdleSubagentMessage(parsed.value)) {
734
- void this.poison('off-turn-output');
805
+ else {
806
+ this.handleIdleServerMessage(parsed.value);
735
807
  }
736
808
  return;
737
809
  }
@@ -743,7 +815,8 @@ class CodexAppServerProcess {
743
815
  this.activeTurn.onFramingError(line);
744
816
  return;
745
817
  }
746
- void this.poison('off-turn-framing-error');
818
+ // Codex may emit lifecycle text while no Murph turn is bound. Do not kill
819
+ // the resident app-server for output that cannot affect the current user.
747
820
  }
748
821
  handleClose(code, signal) {
749
822
  if (this.stderrBuffer.trim().length > 0) {
@@ -756,6 +829,10 @@ class CodexAppServerProcess {
756
829
  this.stdoutBuffer = '';
757
830
  if (!this.normalShutdown) {
758
831
  this.poisoned = true;
832
+ this.endReason ??= 'previous-process-exit';
833
+ // Retain the exact-group signal as an idempotent fallback before
834
+ // releasing parent-exit cleanup.
835
+ this.signal('SIGKILL');
759
836
  }
760
837
  this.state = 'stopped';
761
838
  this.cleanupProcessExitListener();
@@ -767,7 +844,7 @@ class CodexAppServerProcess {
767
844
  return;
768
845
  }
769
846
  const failure = buildCodexProcessExitError({
770
- abortRequested: false,
847
+ abortOwnsTermination: false,
771
848
  code,
772
849
  diagnostics: this.buildStartupProcessDiagnostics(),
773
850
  errorInfo: null,
@@ -806,7 +883,7 @@ class CodexAppServerProcess {
806
883
  if (spawnClosedBeforeReady &&
807
884
  (this.child.exitCode !== null || this.child.signalCode !== null)) {
808
885
  return buildCodexProcessExitError({
809
- abortRequested: false,
886
+ abortOwnsTermination: false,
810
887
  code: this.child.exitCode,
811
888
  diagnostics: this.buildStartupProcessDiagnostics(),
812
889
  errorInfo: null,
@@ -825,8 +902,36 @@ class CodexAppServerProcess {
825
902
  }
826
903
  }
827
904
  }
905
+ function resolveCodexAppServerEndReason(reason) {
906
+ switch (reason) {
907
+ case 'idle-compaction-failed':
908
+ return 'previous-idle-compaction-failure';
909
+ case 'launch-identity-changed':
910
+ return 'previous-launch-identity-change';
911
+ case 'process-exited':
912
+ return 'previous-process-exit';
913
+ case 'process-unhealthy':
914
+ return 'previous-process-unhealthy';
915
+ case 'turn-completed-after-abort':
916
+ return 'previous-turn-abort';
917
+ case 'turn-failure':
918
+ return 'previous-turn-failure';
919
+ default:
920
+ return 'previous-explicit-stop';
921
+ }
922
+ }
828
923
  let warmCodexProcess = null;
829
924
  let warmCodexSlotLock = Promise.resolve();
925
+ const hostedCodexPostTurnCleanupBarriers = new Set();
926
+ function trackHostedCodexPostTurnCleanup(cleanup) {
927
+ hostedCodexPostTurnCleanupBarriers.add(cleanup);
928
+ void cleanup.finally(() => {
929
+ hostedCodexPostTurnCleanupBarriers.delete(cleanup);
930
+ });
931
+ }
932
+ export async function drainHostedCodexPostTurnCleanups() {
933
+ await Promise.all([...hostedCodexPostTurnCleanupBarriers]);
934
+ }
830
935
  async function withWarmCodexSlotLock(operation) {
831
936
  const previous = warmCodexSlotLock;
832
937
  let release;
@@ -844,30 +949,36 @@ async function withWarmCodexSlotLock(operation) {
844
949
  async function getOrStartWarmCodexProcess(input) {
845
950
  const launchKey = input.launchKey;
846
951
  return await withWarmCodexSlotLock(async () => {
952
+ await warmCodexProcess?.pendingPostTurnCleanup;
847
953
  if (warmCodexProcess?.isReusableFor(launchKey)) {
848
954
  warmCodexProcess.reserveTurn();
849
955
  return warmCodexProcess;
850
956
  }
851
- if (warmCodexProcess) {
852
- if (warmCodexProcess.hasInFlightTurn) {
853
- throw warmCodexProcess.buildBusyError('Codex app-server process is already serving a turn.');
957
+ const previousProcess = warmCodexProcess;
958
+ let coldStartReason = 'node-process-first-use';
959
+ if (previousProcess) {
960
+ if (previousProcess.hasInFlightTurn) {
961
+ throw previousProcess.buildBusyError('Codex app-server process is already serving a turn.');
854
962
  }
855
- await warmCodexProcess.stop('identity-or-health-mismatch');
856
- warmCodexProcess = null;
857
- }
858
- warmCodexProcess = new CodexAppServerProcess(input);
963
+ const processExited = previousProcess.child.exitCode !== null ||
964
+ previousProcess.child.signalCode !== null;
965
+ const stopReason = processExited
966
+ ? 'process-exited'
967
+ : previousProcess.launchKey !== launchKey
968
+ ? 'launch-identity-changed'
969
+ : 'process-unhealthy';
970
+ await previousProcess.stop(stopReason);
971
+ coldStartReason = previousProcess.nextColdStartReason;
972
+ }
973
+ const processInstance = new CodexAppServerProcess({
974
+ ...input,
975
+ coldStartReason,
976
+ });
977
+ warmCodexProcess = processInstance;
859
978
  warmCodexProcess.reserveTurn();
860
979
  return warmCodexProcess;
861
980
  });
862
981
  }
863
- function clearWarmCodexProcessIfUnusable(processInstance) {
864
- const launchKey = processInstance.launchKey;
865
- if (warmCodexProcess === processInstance &&
866
- !processInstance.isReusableFor(launchKey) &&
867
- (processInstance.child.exitCode !== null || processInstance.child.signalCode !== null)) {
868
- warmCodexProcess = null;
869
- }
870
- }
871
982
  export async function stopWarmCodexAppServer(reason = 'external-stop') {
872
983
  await withWarmCodexSlotLock(async () => {
873
984
  const processInstance = warmCodexProcess;
@@ -878,11 +989,9 @@ export async function stopWarmCodexAppServer(reason = 'external-stop') {
878
989
  throw processInstance.buildBusyError('Codex app-server process is serving a turn and cannot be stopped directly.');
879
990
  }
880
991
  await processInstance.stop(reason);
881
- if (warmCodexProcess === processInstance) {
882
- warmCodexProcess = null;
883
- }
884
992
  });
885
993
  }
994
+ registerStopWarmCodexAppServer(stopWarmCodexAppServer);
886
995
  /**
887
996
  * Runs one managed ChatGPT account operation through the same app-server
888
997
  * transport used by turns. The child is intentionally short lived: account
@@ -912,7 +1021,6 @@ export async function executeCodexManagedAccountOperation(input) {
912
1021
  codexCommand,
913
1022
  env,
914
1023
  launchKey,
915
- workingDirectory,
916
1024
  });
917
1025
  let settleAccountUpdate;
918
1026
  let rejectAccountUpdate;
@@ -1081,11 +1189,6 @@ export async function executeCodexManagedAccountOperation(input) {
1081
1189
  processInstance.releaseTurn(binding);
1082
1190
  processInstance.releaseReservation();
1083
1191
  await processInstance.stop('managed-account-operation-complete').catch(() => undefined);
1084
- await withWarmCodexSlotLock(async () => {
1085
- if (warmCodexProcess === processInstance) {
1086
- warmCodexProcess = null;
1087
- }
1088
- });
1089
1192
  }
1090
1193
  }
1091
1194
  async function readCodexManagedAccount(processInstance) {
@@ -1102,7 +1205,7 @@ function normalizeCodexManagedAccountTimeout(value) {
1102
1205
  : CODEX_MANAGED_ACCOUNT_LOGIN_TIMEOUT_MS;
1103
1206
  }
1104
1207
  function estimateCodexWarmThreadCompactionUsage(threadContextTokensBefore) {
1105
- // Codex 0.135 compact_remote_v2 consumes the provider response without
1208
+ // Codex idle compaction consumes the provider response without
1106
1209
  // surfacing ResponseEvent::Completed.token_usage, then emits a recomputed
1107
1210
  // post-compact context-size update whose request input/output buckets are
1108
1211
  // zero. Until Codex surfaces real compact request usage, store the
@@ -1178,11 +1281,9 @@ function readCodexUsageNumber(value, camelKey, snakeKey) {
1178
1281
  // deliberately blunt: any non-success poisons (kills) the warm process, which
1179
1282
  // is always safe because rollouts only contain completed entries — an aborted
1180
1283
  // compact leaves the thread uncompacted and the next turn spawns a fresh
1181
- // process and resumes natively. A pending wake therefore never waits on the
1182
- // in-flight provider call or the compact timeout; it is bounded only by the
1183
- // old process's kill teardown (SIGTERM, 3s ceiling, then SIGKILL — typically
1184
- // milliseconds), which the next turn must join via the memoized stop because
1185
- // two app-server processes must never write the same rollout concurrently.
1284
+ // process and resumes natively. Teardown is awaited on every failure path
1285
+ // because the idle checkpoint that follows snapshots the Codex home,
1286
+ // including rollout files, and must never capture a rollout mid-teardown.
1186
1287
  export async function compactWarmCodexThread(input) {
1187
1288
  const reservation = await withWarmCodexSlotLock(async () => {
1188
1289
  const processInstance = warmCodexProcess;
@@ -1195,6 +1296,14 @@ export async function compactWarmCodexThread(input) {
1195
1296
  if (!vitals) {
1196
1297
  return { kind: 'skipped', reason: 'no_thread_vitals', threadContextTokensBefore: null };
1197
1298
  }
1299
+ if (input.canAccountForModel && !input.canAccountForModel(vitals.model)) {
1300
+ return {
1301
+ kind: 'skipped',
1302
+ model: vitals.model,
1303
+ reason: 'model_not_accountable',
1304
+ threadContextTokensBefore: vitals.lastInputTokens,
1305
+ };
1306
+ }
1198
1307
  if (vitals.lastInputTokens < input.minThreadTokens) {
1199
1308
  return {
1200
1309
  kind: 'skipped',
@@ -1253,7 +1362,17 @@ export async function compactWarmCodexThread(input) {
1253
1362
  }
1254
1363
  return;
1255
1364
  }
1256
- if (processInstance.shouldTolerateIdleSubagentMessage(message)) {
1365
+ const requestId = readCodexRpcServerRequestId(message);
1366
+ if (requestId !== null) {
1367
+ rejectCodexServerRequest({
1368
+ message: 'Server requests during idle Codex compaction are not supported.',
1369
+ requestId,
1370
+ writeRpcMessage: (payload) => void processInstance.writeRpcMessage(payload),
1371
+ });
1372
+ return;
1373
+ }
1374
+ const messageThreadId = extractCodexThreadIdFromMessage(message);
1375
+ if (messageThreadId !== null && messageThreadId !== vitals.threadId) {
1257
1376
  return;
1258
1377
  }
1259
1378
  const update = readCodexThreadTokenUsageUpdate(message);
@@ -1338,6 +1457,7 @@ export async function compactWarmCodexThread(input) {
1338
1457
  return {
1339
1458
  kind: 'compacted',
1340
1459
  durationMs: Date.now() - startedAt,
1460
+ model: vitals.model,
1341
1461
  threadContextTokensBefore: vitals.lastInputTokens,
1342
1462
  threadId: vitals.threadId,
1343
1463
  serviceTier: vitals.serviceTier,
@@ -1345,19 +1465,7 @@ export async function compactWarmCodexThread(input) {
1345
1465
  ?? estimateCodexWarmThreadCompactionUsage(vitals.lastInputTokens),
1346
1466
  };
1347
1467
  }
1348
- // Abort (pending wake or shutdown) detaches teardown: poison() flags the
1349
- // process unusable synchronously and SIGTERM->SIGKILL completes out of
1350
- // band; a racing turn joins it via the memoized stop (3s ceiling,
1351
- // typically milliseconds) and never waits on the provider call or the
1352
- // compact timeout. Non-abort failures (timeout/rpc_error/process_exit)
1353
- // have no wake racing and an idle checkpoint next, so they await
1354
- // teardown — the snapshot must never capture a rollout mid-teardown.
1355
- if (settledReason === 'aborted') {
1356
- void processInstance.poison('idle-compaction-failed');
1357
- }
1358
- else {
1359
- await processInstance.poison('idle-compaction-failed');
1360
- }
1468
+ await processInstance.poison('idle-compaction-failed');
1361
1469
  return {
1362
1470
  kind: 'failed',
1363
1471
  reason: settledReason,
@@ -1381,20 +1489,8 @@ export async function compactWarmCodexThread(input) {
1381
1489
  input.signal?.removeEventListener('abort', onAbort);
1382
1490
  processInstance.releaseTurn(binding);
1383
1491
  processInstance.releaseReservation();
1384
- await withWarmCodexSlotLock(async () => {
1385
- clearWarmCodexProcessIfUnusable(processInstance);
1386
- });
1387
1492
  }
1388
1493
  }
1389
- export async function snapshotExpectedCodexRootProcess() {
1390
- return await withWarmCodexSlotLock(async () => {
1391
- const processInstance = warmCodexProcess;
1392
- if (!processInstance?.isReusableFor(processInstance.launchKey)) {
1393
- return null;
1394
- }
1395
- return await processInstance.snapshotExpectedRootProcess();
1396
- });
1397
- }
1398
1494
  function hashCodexRawString(value) {
1399
1495
  return createHash('sha256')
1400
1496
  .update(value)
@@ -1409,70 +1505,138 @@ function readCodexEventMethod(message) {
1409
1505
  ? message.event
1410
1506
  : null;
1411
1507
  }
1412
- function codexEventMethodRequiresTurnCorrelation(method) {
1413
- const normalizedMethod = normalizeNullableString(method);
1414
- if (!normalizedMethod) {
1415
- return true;
1416
- }
1417
- return (normalizedMethod === 'error' ||
1418
- normalizedMethod === 'thread/compacted' ||
1419
- isCodexThreadTokenUsageUpdatedMethod(normalizedMethod) ||
1420
- normalizedMethod.startsWith('turn/') ||
1421
- normalizedMethod.startsWith('item/') ||
1422
- normalizedMethod.startsWith('rawResponseItem/') ||
1423
- normalizedMethod.startsWith('command/exec/') ||
1424
- normalizedMethod.startsWith('process/') ||
1425
- normalizedMethod.startsWith('model/') ||
1426
- normalizedMethod.startsWith('turn.') ||
1427
- normalizedMethod.startsWith('item.') ||
1428
- normalizedMethod.startsWith('rawResponseItem.') ||
1429
- normalizedMethod.startsWith('command.exec.') ||
1430
- normalizedMethod.startsWith('process.') ||
1431
- normalizedMethod.startsWith('model.') ||
1432
- normalizedMethod.includes('assistant.message.delta') ||
1433
- normalizedMethod.includes('agent.message.delta'));
1434
- }
1435
1508
  function isCodexTurnStartedMethod(method) {
1436
1509
  return method === 'turn/started' || method === 'turn.started';
1437
1510
  }
1438
1511
  function isCodexTurnCompletedMethod(method) {
1439
1512
  return method === 'turn/completed' || method === 'turn.completed';
1440
1513
  }
1441
- async function readCodexProcState(pid) {
1442
- try {
1443
- const [cmdline, stat, status] = await Promise.all([
1444
- readFile(`/proc/${pid}/cmdline`, 'utf8').catch(() => null),
1445
- readFile(`/proc/${pid}/stat`, 'utf8'),
1446
- readFile(`/proc/${pid}/status`, 'utf8').catch(() => null),
1447
- ]);
1514
+ function buildCodexTransportDiagnosticsTraceEvent(input) {
1515
+ const source = readCodexTransportDiagnosticSource(input.message, input.method);
1516
+ if (!source) {
1517
+ return null;
1518
+ }
1519
+ const diagnosticText = [source.message, source.additionalDetails]
1520
+ .filter((value) => typeof value === 'string')
1521
+ .join('\n')
1522
+ .slice(0, 4096);
1523
+ const normalizedText = diagnosticText.toLowerCase();
1524
+ const retryProgress = readCodexTransportRetryProgress(diagnosticText);
1525
+ const fallbackActivated = normalizedText.includes('falling back from websockets to https transport');
1526
+ const idleTimeout = normalizedText.includes('idle timeout waiting for websocket') ||
1527
+ normalizedText.includes('idle timeout waiting for sse');
1528
+ const streamDisconnected = normalizedText.includes('stream disconnected') ||
1529
+ normalizedText.includes('response stream disconnected');
1530
+ if (!fallbackActivated && !idleTimeout && !streamDisconnected && !retryProgress) {
1531
+ return null;
1532
+ }
1533
+ const transport = normalizedText.includes('websocket')
1534
+ ? 'websocket'
1535
+ : normalizedText.includes('https') ||
1536
+ normalizedText.includes('http') ||
1537
+ normalizedText.includes('sse')
1538
+ ? 'http'
1539
+ : 'unknown';
1540
+ const eventKind = fallbackActivated
1541
+ ? 'transport-fallback'
1542
+ : idleTimeout
1543
+ ? 'stream-idle-timeout'
1544
+ : retryProgress
1545
+ ? 'stream-retry'
1546
+ : 'stream-disconnected';
1547
+ const terminalStreamFailure = source.willRetry === false && (idleTimeout || streamDisconnected);
1548
+ return {
1549
+ schema: CODEX_TRANSPORT_DIAGNOSTICS_TRACE_SCHEMA,
1550
+ type: CODEX_TRANSPORT_DIAGNOSTICS_TRACE_TYPE,
1551
+ codexTransportAdditionalDetailsPresent: source.additionalDetails !== null,
1552
+ codexTransportErrorMessageLength: diagnosticText.length,
1553
+ codexTransportErrorMessagePresent: source.message.length > 0,
1554
+ codexTransportEventKind: eventKind,
1555
+ codexTransportFallbackActivated: fallbackActivated,
1556
+ codexTransportIdleTimeout: idleTimeout,
1557
+ codexTransportProviderActionCount: input.providerActionCount,
1558
+ codexTransportRetryCount: retryProgress?.retryCount ?? null,
1559
+ codexTransportRetryMax: retryProgress?.retryMax ?? null,
1560
+ codexTransportRetryExhausted: terminalStreamFailure,
1561
+ codexTransportSourceMethod: source.sourceMethod,
1562
+ codexTransportStreamDisconnected: streamDisconnected,
1563
+ codexTransportTerminalAfterProviderAction: terminalStreamFailure && input.providerActionCount > 0,
1564
+ codexTransportThreadIdPresent: source.threadIdPresent || input.codexThreadId !== null,
1565
+ codexTransportTransport: transport,
1566
+ codexTransportTurnIdPresent: source.turnIdPresent || input.turnId !== null,
1567
+ codexTransportWillRetry: source.willRetry,
1568
+ };
1569
+ }
1570
+ function readCodexTransportDiagnosticSource(message, method) {
1571
+ const params = readCodexRecordField(message, 'params');
1572
+ if (method === 'warning') {
1573
+ const warningMessage = readCodexStringField(params, 'message');
1574
+ if (!warningMessage) {
1575
+ return null;
1576
+ }
1448
1577
  return {
1449
- commandLineDigest: cmdline ? hashCodexRawString(cmdline) : null,
1450
- startTimeTicksFromProcStat: readCodexProcStartTimeTicks(stat),
1451
- uid: status ? readCodexProcUid(status) : null,
1578
+ additionalDetails: null,
1579
+ message: warningMessage,
1580
+ sourceMethod: 'warning',
1581
+ threadIdPresent: readCodexStringField(params, 'threadId') !== null,
1582
+ turnIdPresent: false,
1583
+ willRetry: null,
1452
1584
  };
1453
1585
  }
1454
- catch {
1586
+ if (method !== 'error') {
1587
+ return null;
1588
+ }
1589
+ const error = readCodexRecordField(params, 'error');
1590
+ const errorMessage = readCodexStringField(error, 'message');
1591
+ if (!errorMessage) {
1592
+ return null;
1593
+ }
1594
+ return {
1595
+ additionalDetails: readCodexStringField(error, 'additionalDetails'),
1596
+ message: errorMessage,
1597
+ sourceMethod: 'error',
1598
+ threadIdPresent: readCodexStringField(params, 'threadId') !== null,
1599
+ turnIdPresent: readCodexStringField(params, 'turnId') !== null,
1600
+ willRetry: readCodexBooleanField(params, 'willRetry'),
1601
+ };
1602
+ }
1603
+ function readCodexTransportRetryProgress(value) {
1604
+ const match = /\bReconnecting\.\.\.\s+(\d+)\/(\d+)\b/iu.exec(value);
1605
+ if (!match) {
1455
1606
  return null;
1456
1607
  }
1608
+ const retryCount = Number(match[1]);
1609
+ const retryMax = Number(match[2]);
1610
+ return Number.isSafeInteger(retryCount) &&
1611
+ retryCount >= 0 &&
1612
+ Number.isSafeInteger(retryMax) &&
1613
+ retryMax >= 0
1614
+ ? { retryCount, retryMax }
1615
+ : null;
1457
1616
  }
1458
- function readCodexProcStartTimeTicks(stat) {
1459
- const commandEnd = stat.lastIndexOf(') ');
1460
- if (commandEnd === -1 || commandEnd + 2 >= stat.length) {
1617
+ function readCodexRecordField(value, key) {
1618
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
1461
1619
  return null;
1462
1620
  }
1463
- const fields = stat.slice(commandEnd + 2).trim().split(/\s+/u);
1464
- const startTime = fields[19];
1465
- return typeof startTime === 'string' && /^[0-9]+$/u.test(startTime)
1466
- ? startTime
1621
+ const fieldValue = value[key];
1622
+ return fieldValue && typeof fieldValue === 'object' && !Array.isArray(fieldValue)
1623
+ ? fieldValue
1467
1624
  : null;
1468
1625
  }
1469
- function readCodexProcUid(status) {
1470
- const uidLine = status.split('\n').find((line) => line.startsWith('Uid:'));
1471
- const uidRaw = uidLine?.trim().split(/\s+/u)[1];
1472
- const uid = Number.parseInt(uidRaw ?? '', 10);
1473
- return Number.isInteger(uid) && uid >= 0 ? uid : null;
1626
+ function readCodexStringField(value, key) {
1627
+ const fieldValue = value?.[key];
1628
+ if (typeof fieldValue !== 'string') {
1629
+ return null;
1630
+ }
1631
+ const normalized = fieldValue.trim();
1632
+ return normalized.length > 0 ? normalized : null;
1633
+ }
1634
+ function readCodexBooleanField(value, key) {
1635
+ const fieldValue = value?.[key];
1636
+ return typeof fieldValue === 'boolean' ? fieldValue : null;
1474
1637
  }
1475
1638
  async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1639
+ const hostedCanonicalWritePort = readHostedCanonicalWritePort();
1476
1640
  let stdout = '';
1477
1641
  let stderr = '';
1478
1642
  let settled = false;
@@ -1480,25 +1644,28 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1480
1644
  let abortRequested = false;
1481
1645
  let lifecycleStage = 'spawn_start';
1482
1646
  let terminationSignalSent = null;
1483
- let codexThreadId = normalizeNullableString(input.resumeSessionId) ?? null;
1647
+ const requestedResumeThreadId = normalizeNullableString(input.resumeSessionId) ?? null;
1648
+ let codexThreadId = null;
1484
1649
  let turnId = null;
1485
- let expectedTurnId = null;
1486
- let lastAgentMessage = null;
1650
+ const isReusedWarmProcess = codexProcess.initializedForRpc;
1487
1651
  // Completed final-phase agent messages that were followed by a steered
1488
- // user-message item and then superseded by a newer final message in the
1489
- // same turn. A closed segment is held as a candidate until a later final
1490
- // appears; if the turn ends at the steer boundary, that segment remains the
1491
- // final reply rather than a preceding duplicate.
1652
+ // user-message item and then superseded by a newer response segment in the
1653
+ // same turn. A closed segment is held as a candidate until newer text or
1654
+ // media appears; if the turn ends at the steer boundary, that segment remains
1655
+ // the final reply rather than a preceding duplicate.
1492
1656
  const precedingAgentMessageSegments = [];
1493
1657
  let completedFinalAgentMessage = null;
1494
1658
  let trailingSteerCandidate = null;
1495
- let trailingSteerCandidateDeliveryContextOrdinal = null;
1496
- let trailingSteerCandidateMedia = null;
1497
1659
  let completedUserMessageOrdinal = -1;
1498
1660
  let lastEventError = null;
1499
1661
  let lastEventErrorInfo = null;
1500
1662
  let responseMedia = [];
1663
+ const assistantStyleSettingsOverlay = {
1664
+ settings: {},
1665
+ };
1501
1666
  let finalActionPatches = [];
1667
+ const acceptedNoReplyDeliveryContextOrdinals = [];
1668
+ let noReplySettlementStarted = false;
1502
1669
  let reactionPatches = [];
1503
1670
  const reservedNoReplyDeliveryContextOrdinals = new Set();
1504
1671
  const additionalUsages = [];
@@ -1515,6 +1682,7 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1515
1682
  const jsonEvents = [];
1516
1683
  const runtimeIssueInputs = [];
1517
1684
  let computerToolsLockedAfterUserPause = false;
1685
+ const requiredVaultFileApprovalUrls = [];
1518
1686
  const actionDiagnostics = input.onTraceEvent
1519
1687
  ? createCodexActionDiagnosticsReducer()
1520
1688
  : null;
@@ -1525,6 +1693,8 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1525
1693
  const pendingExternallyVisibleAssistantOutputDeliveryContextCounts = new Map();
1526
1694
  let stdinFailure = null;
1527
1695
  let lastTimingAt = Date.now();
1696
+ const codexAppServerTurnStartedAt = lastTimingAt;
1697
+ const codexAppServerProviderStartTiming = {};
1528
1698
  let liveInterruptRequested = false;
1529
1699
  let completeTurn = null;
1530
1700
  let failTurn = null;
@@ -1537,7 +1707,6 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1537
1707
  const pendingProgressDeliveries = new Set();
1538
1708
  let dynamicToolExecutionChain = Promise.resolve();
1539
1709
  const dynamicToolAbortController = new AbortController();
1540
- const pendingPreStartMessages = [];
1541
1710
  const turnCompleted = new Promise((resolve, reject) => {
1542
1711
  completeTurn = resolve;
1543
1712
  failTurn = reject;
@@ -1562,6 +1731,24 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1562
1731
  stderrBytes: Buffer.byteLength(stderr, 'utf8'),
1563
1732
  terminationSignalSent,
1564
1733
  });
1734
+ const buildRecordedTerminationError = (fallback) => {
1735
+ const recordedEndReason = codexProcess.recordedEndReason;
1736
+ if (recordedEndReason !== 'previous-process-exit' &&
1737
+ recordedEndReason !== 'previous-turn-abort') {
1738
+ return null;
1739
+ }
1740
+ return buildCodexProcessExitError({
1741
+ abortOwnsTermination: recordedEndReason === 'previous-turn-abort',
1742
+ code: codexProcess.child.exitCode,
1743
+ diagnostics: buildProcessExitDiagnostics(),
1744
+ errorInfo: lastEventErrorInfo,
1745
+ fallback,
1746
+ providerActionCount,
1747
+ codexThreadId,
1748
+ signal: codexProcess.child.signalCode ?? null,
1749
+ stderr,
1750
+ });
1751
+ };
1565
1752
  // Subagent usage drafts are derived lazily from the buffered per-thread
1566
1753
  // samples so both the success result and the failure context can include
1567
1754
  // whatever child usage was observed before the turn settled.
@@ -1577,6 +1764,22 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1577
1764
  const listNoReplyFinalActionPatchOrdinals = () => [...new Set(finalActionPatches
1578
1765
  .filter((entry) => entry.patch.kind === 'none')
1579
1766
  .map((entry) => entry.deliveryContextOrdinal))].sort((left, right) => left - right);
1767
+ const hasRequiredUserVisibleOutput = () => computerToolsLockedAfterUserPause || requiredVaultFileApprovalUrls.length > 0;
1768
+ const settleNoReplyFinalActions = async () => {
1769
+ if (hasRequiredUserVisibleOutput() || noReplySettlementStarted) {
1770
+ return;
1771
+ }
1772
+ noReplySettlementStarted = true;
1773
+ for (const deliveryContextOrdinal of listNoReplyFinalActionPatchOrdinals()) {
1774
+ await input.onFinishWithoutReplyAccepted?.({
1775
+ deliveryContextOrdinal,
1776
+ });
1777
+ acceptedNoReplyDeliveryContextOrdinals.push(deliveryContextOrdinal);
1778
+ await input.onFinishWithoutReplyRecorded?.({
1779
+ deliveryContextOrdinal,
1780
+ });
1781
+ }
1782
+ };
1580
1783
  const annotateTurnFailureContext = (error) => {
1581
1784
  if (!error || typeof error !== 'object') {
1582
1785
  return;
@@ -1586,14 +1789,14 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1586
1789
  additionalUsages: [...additionalUsages, ...buildSubagentUsageDrafts()],
1587
1790
  providerActionCount,
1588
1791
  runtimeIssueInputs: [...runtimeIssueInputs],
1589
- acceptedNoReplyDeliveryContextOrdinals: listNoReplyFinalActionPatchOrdinals(),
1792
+ acceptedNoReplyDeliveryContextOrdinals: [...acceptedNoReplyDeliveryContextOrdinals],
1590
1793
  reactions: reactionPatches.map((entry) => ({
1591
1794
  deliveryContextOrdinal: entry.deliveryContextOrdinal,
1592
1795
  reaction: entry.patch.reaction,
1593
1796
  })),
1594
- codexThreadHistoryUnsafe: hasNoReplyFinalActionPatch(),
1595
1797
  codexThreadId,
1596
1798
  providerTurnId: turnId,
1799
+ rolloutRelativePath,
1597
1800
  };
1598
1801
  codexAppServerTurnFailureContexts.set(error, context);
1599
1802
  try {
@@ -1627,23 +1830,47 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1627
1830
  interruptCleanupTimer = setTimeout(() => {
1628
1831
  interruptCleanupTimer = null;
1629
1832
  lifecycleStage = 'interrupt_timeout_cleanup';
1630
- normalShutdown = true;
1833
+ if (codexProcess.recordedEndReason !== 'previous-process-exit') {
1834
+ normalShutdown = true;
1835
+ }
1631
1836
  rejectOnce(buildInterruptCleanupTimeoutError());
1632
1837
  }, CODEX_APP_SERVER_INTERRUPT_CLEANUP_TIMEOUT_MS);
1633
1838
  interruptCleanupTimer.unref?.();
1634
1839
  };
1635
1840
  const emitAppServerTimingTrace = (stage) => {
1841
+ const now = Date.now();
1842
+ const elapsedMs = Math.max(0, now - lastTimingAt);
1843
+ if (stage === 'spawn-ready') {
1844
+ codexAppServerProviderStartTiming.codexAppServerSpawnReadyMs = elapsedMs;
1845
+ }
1846
+ else if (stage === 'initialized') {
1847
+ codexAppServerProviderStartTiming.codexAppServerInitializeMs = elapsedMs;
1848
+ }
1849
+ else if (stage === 'warm-reused') {
1850
+ codexAppServerProviderStartTiming.codexAppServerWarmReuseMs = elapsedMs;
1851
+ }
1852
+ else if (stage === 'thread-resumed') {
1853
+ codexAppServerProviderStartTiming.codexAppServerThreadResumeMs = elapsedMs;
1854
+ }
1855
+ else if (stage === 'thread-started') {
1856
+ codexAppServerProviderStartTiming.codexAppServerThreadStartMs = elapsedMs;
1857
+ }
1858
+ lastTimingAt = now;
1636
1859
  if (!input.onTraceEvent) {
1637
1860
  return;
1638
1861
  }
1639
- const now = Date.now();
1640
1862
  try {
1641
1863
  input.onTraceEvent({
1642
1864
  codexThreadId,
1643
1865
  rawEvent: {
1644
1866
  schema: CODEX_APP_SERVER_TIMING_TRACE_SCHEMA,
1645
1867
  type: CODEX_APP_SERVER_TIMING_TRACE_TYPE,
1646
- codexTimingElapsedMs: Math.max(0, now - lastTimingAt),
1868
+ ...(stage === 'initialized'
1869
+ ? {
1870
+ codexTimingColdStartReason: codexProcess.coldStartReason,
1871
+ }
1872
+ : {}),
1873
+ codexTimingElapsedMs: elapsedMs,
1647
1874
  codexTimingProviderActionCount: providerActionCount,
1648
1875
  codexTimingThreadIdPresent: codexThreadId !== null,
1649
1876
  codexTimingStage: stage,
@@ -1652,7 +1879,6 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1652
1879
  },
1653
1880
  updates: [],
1654
1881
  });
1655
- lastTimingAt = now;
1656
1882
  }
1657
1883
  catch {
1658
1884
  // Timing traces are diagnostic-only and must not block assistant turns.
@@ -1695,17 +1921,18 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1695
1921
  if (normalShutdown && readNodeErrorCode(error) === 'EPIPE') {
1696
1922
  return null;
1697
1923
  }
1924
+ const fallback = buildCodexStdinFailureFallback({
1925
+ error,
1926
+ lastEventError,
1927
+ stderr,
1928
+ });
1698
1929
  const failure = stdinFailure ??
1699
1930
  buildCodexProcessExitError({
1700
- abortRequested,
1931
+ abortOwnsTermination: false,
1701
1932
  code: codexProcess.child.exitCode,
1702
1933
  diagnostics: buildProcessExitDiagnostics(),
1703
1934
  errorInfo: lastEventErrorInfo,
1704
- fallback: buildCodexStdinFailureFallback({
1705
- error,
1706
- lastEventError,
1707
- stderr,
1708
- }),
1935
+ fallback,
1709
1936
  providerActionCount,
1710
1937
  codexThreadId,
1711
1938
  signal: codexProcess.child.signalCode ?? null,
@@ -1728,6 +1955,7 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1728
1955
  abortSignal: input.abortSignal,
1729
1956
  onAbort: () => {
1730
1957
  abortRequested = true;
1958
+ codexProcess.noteTurnAbort();
1731
1959
  if (codexThreadId && turnId) {
1732
1960
  codexProcess.sendUntrackedRequest('turn/interrupt', buildCodexTurnInterruptParams({
1733
1961
  threadId: codexThreadId,
@@ -1780,14 +2008,40 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1780
2008
  ? `${previousText}${normalizedText}`
1781
2009
  : normalizedText);
1782
2010
  };
2011
+ const removeAssistantTraceUpdateFromFinalFallback = (update) => {
2012
+ if (update.kind !== 'assistant') {
2013
+ return;
2014
+ }
2015
+ const streamKey = normalizeAssistantTraceStreamKey(update);
2016
+ assistantStreams.delete(streamKey);
2017
+ const streamOrderIndex = assistantStreamOrder.indexOf(streamKey);
2018
+ if (streamOrderIndex >= 0) {
2019
+ assistantStreamOrder.splice(streamOrderIndex, 1);
2020
+ }
2021
+ };
2022
+ // App-server events mutate this state inside the asynchronous message
2023
+ // handler, so finalization reads it through an explicitly typed boundary.
2024
+ const readTrailingSteerCandidate = () => trailingSteerCandidate;
2025
+ const promoteTrailingSteerCandidate = () => {
2026
+ if (!trailingSteerCandidate) {
2027
+ return;
2028
+ }
2029
+ precedingAgentMessageSegments.push(trailingSteerCandidate);
2030
+ trailingSteerCandidate = null;
2031
+ };
1783
2032
  const notifyProviderRequestStarted = () => {
1784
2033
  if (providerRequestStartedNotified) {
1785
2034
  return;
1786
2035
  }
1787
2036
  providerRequestStartedNotified = true;
2037
+ const startedAtMs = Date.now();
1788
2038
  notifyCodexAppServerProviderRequestStartedBestEffort({
1789
2039
  hook: input.onProviderRequestStarted ?? null,
1790
- startedAt: new Date().toISOString(),
2040
+ startedAt: new Date(startedAtMs).toISOString(),
2041
+ timing: {
2042
+ ...codexAppServerProviderStartTiming,
2043
+ codexAppServerPreProviderMs: Math.max(0, startedAtMs - codexAppServerTurnStartedAt),
2044
+ },
1791
2045
  });
1792
2046
  };
1793
2047
  const trackExternallyVisibleProgressDelivery = (input) => {
@@ -1803,43 +2057,37 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1803
2057
  releasePending();
1804
2058
  });
1805
2059
  };
1806
- const notifyCurrentChannelProgress = (deliveryContextOrdinal, text, source) => {
2060
+ const notifyContextCompactionProgress = (deliveryContextOrdinal, text) => {
1807
2061
  const progressDelivery = resolveCodexAppServerProgressDelivery(input);
1808
2062
  if (!progressDelivery ||
1809
- (source === 'system' &&
1810
- (contextCompactionProgressNotified || contextCompactionProgressPending))) {
2063
+ contextCompactionProgressNotified ||
2064
+ contextCompactionProgressPending) {
1811
2065
  return false;
1812
2066
  }
1813
2067
  let progressPromise;
1814
2068
  try {
1815
- if (source === 'system') {
1816
- contextCompactionProgressPending = true;
1817
- }
2069
+ contextCompactionProgressPending = true;
1818
2070
  progressPromise = progressDelivery.send(text, {
1819
- ...(source === 'system' ? { required: true } : {}),
1820
- source,
2071
+ required: true,
2072
+ source: 'system',
1821
2073
  });
1822
2074
  }
1823
2075
  catch {
1824
- if (source === 'system') {
1825
- contextCompactionProgressPending = false;
1826
- }
2076
+ contextCompactionProgressPending = false;
1827
2077
  return false;
1828
2078
  }
1829
- if (source === 'system') {
1830
- progressPromise = progressPromise.then((result) => {
1831
- if (result.kind === 'sent') {
1832
- contextCompactionProgressNotified = true;
1833
- }
1834
- else {
1835
- contextCompactionProgressPending = false;
1836
- }
1837
- return result;
1838
- }, (error) => {
2079
+ progressPromise = progressPromise.then((result) => {
2080
+ if (result.kind === 'sent') {
2081
+ contextCompactionProgressNotified = true;
2082
+ }
2083
+ else {
1839
2084
  contextCompactionProgressPending = false;
1840
- throw error;
1841
- });
1842
- }
2085
+ }
2086
+ return result;
2087
+ }, (error) => {
2088
+ contextCompactionProgressPending = false;
2089
+ throw error;
2090
+ });
1843
2091
  trackProgressDelivery(trackExternallyVisibleProgressDelivery({
1844
2092
  deliveryContextOrdinal,
1845
2093
  promise: progressPromise,
@@ -1862,8 +2110,8 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1862
2110
  }
1863
2111
  };
1864
2112
  // Stateful dynamic tools run serialized in request order so response media,
1865
- // final-action patches, and computer pause barriers apply deterministically
1866
- // even if Codex issues overlapping tool requests.
2113
+ // preference and configuration writes, final-action patches, and computer
2114
+ // pause barriers apply deterministically even if Codex overlaps tool requests.
1867
2115
  const trackDynamicToolExecution = (run) => {
1868
2116
  dynamicToolExecutionChain = dynamicToolExecutionChain
1869
2117
  .then(run)
@@ -1889,20 +2137,19 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1889
2137
  : normalizeAssistantResponseMediaList([...responseMedia, ...patch.media]);
1890
2138
  };
1891
2139
  const canApplyNoReplyPatch = (deliveryContextOrdinal) => {
2140
+ const trailingSteerCandidateOrdinal = trailingSteerCandidate?.deliveryContextOrdinal;
1892
2141
  if (externallyVisibleAssistantOutputDeliveryContexts.has(deliveryContextOrdinal) ||
1893
2142
  hasPendingExternallyVisibleAssistantOutput(deliveryContextOrdinal)) {
1894
2143
  return false;
1895
2144
  }
1896
- if (trailingSteerCandidate !== null &&
1897
- trailingSteerCandidateDeliveryContextOrdinal !== null &&
1898
- trailingSteerCandidateDeliveryContextOrdinal < deliveryContextOrdinal) {
2145
+ if (typeof trailingSteerCandidateOrdinal === 'number' &&
2146
+ trailingSteerCandidateOrdinal < deliveryContextOrdinal) {
1899
2147
  return false;
1900
2148
  }
1901
2149
  if (responseMedia.length > 0) {
1902
2150
  return false;
1903
2151
  }
1904
- if (precedingAgentMessageSegments.some((segment) => typeof segment.deliveryContextOrdinal !== 'number' ||
1905
- segment.deliveryContextOrdinal < deliveryContextOrdinal)) {
2152
+ if (precedingAgentMessageSegments.some((segment) => segment.deliveryContextOrdinal < deliveryContextOrdinal)) {
1906
2153
  return false;
1907
2154
  }
1908
2155
  return true;
@@ -1922,113 +2169,34 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
1922
2169
  };
1923
2170
  };
1924
2171
  const applyFinalActionPatch = async (patch, deliveryContextOrdinal) => {
1925
- if (patch.kind === 'none' && !canApplyNoReplyPatch(deliveryContextOrdinal)) {
2172
+ if (patch.kind === 'none' &&
2173
+ (computerToolsLockedAfterUserPause ||
2174
+ !canApplyNoReplyPatch(deliveryContextOrdinal))) {
1926
2175
  return false;
1927
2176
  }
1928
2177
  if (finalActionPatches.some((action) => action.deliveryContextOrdinal === deliveryContextOrdinal)) {
1929
2178
  return true;
1930
2179
  }
1931
- let reservedNoReply = false;
1932
- try {
1933
- if (patch.kind === 'none') {
1934
- reserveNoReplyDeliveryContext(deliveryContextOrdinal);
1935
- reservedNoReply = true;
1936
- await input.onFinishWithoutReplyAccepted?.({
1937
- deliveryContextOrdinal,
1938
- });
1939
- }
1940
- finalActionPatches = [
1941
- ...finalActionPatches,
1942
- {
1943
- deliveryContextOrdinal,
1944
- patch,
1945
- },
1946
- ];
1947
- if (patch.kind === 'none') {
1948
- reservedNoReplyDeliveryContextOrdinals.delete(deliveryContextOrdinal);
1949
- await input.onCodexThreadHistoryUnsafe?.({
1950
- deliveryContextOrdinal,
1951
- });
1952
- }
1953
- return true;
1954
- }
1955
- catch (error) {
1956
- if (reservedNoReply &&
1957
- !finalActionPatches.some((action) => action.deliveryContextOrdinal === deliveryContextOrdinal)) {
1958
- reservedNoReplyDeliveryContextOrdinals.delete(deliveryContextOrdinal);
1959
- }
1960
- throw error;
2180
+ finalActionPatches = [
2181
+ ...finalActionPatches,
2182
+ {
2183
+ deliveryContextOrdinal,
2184
+ patch,
2185
+ },
2186
+ ];
2187
+ if (patch.kind === 'none') {
2188
+ reservedNoReplyDeliveryContextOrdinals.delete(deliveryContextOrdinal);
1961
2189
  }
2190
+ return true;
1962
2191
  };
1963
2192
  const resolveFinalActionPatch = (deliveryContextOrdinal) => finalActionPatches.find((action) => action.deliveryContextOrdinal === deliveryContextOrdinal)?.patch ?? null;
1964
2193
  const shouldSuppressDeliveryContext = (deliveryContextOrdinal) => {
1965
- if (reservedNoReplyDeliveryContextOrdinals.has(deliveryContextOrdinal ?? 0)) {
2194
+ if (reservedNoReplyDeliveryContextOrdinals.has(deliveryContextOrdinal)) {
1966
2195
  return true;
1967
2196
  }
1968
- const patch = resolveFinalActionPatch(deliveryContextOrdinal ?? 0);
2197
+ const patch = resolveFinalActionPatch(deliveryContextOrdinal);
1969
2198
  return patch?.kind === 'none';
1970
2199
  };
1971
- const buildUnknownRpcResponseError = () => new VaultCliError('ASSISTANT_CODEX_APP_SERVER_LATE_RESPONSE', 'Codex app-server emitted a response for an unknown request id.', {
1972
- retryable: true,
1973
- });
1974
- const buildStaleTurnEventError = (input) => new VaultCliError('ASSISTANT_CODEX_APP_SERVER_STALE_TURN_EVENT', 'Codex app-server emitted an event that does not match the active turn.', {
1975
- eventMethod: input.eventMethod,
1976
- eventTurnIdPresent: input.eventTurnId !== null,
1977
- expectedTurnIdPresent: expectedTurnId !== null,
1978
- retryable: true,
1979
- });
1980
- const buildMissingReusedTurnIdError = () => new VaultCliError('ASSISTANT_CODEX_APP_SERVER_TURN_ID_MISSING', 'Codex app-server turn/start response is missing a turn id on a reused warm process.', {
1981
- retryable: true,
1982
- });
1983
- const bindExpectedTurnId = (candidateTurnId, eventMethod) => {
1984
- if (!candidateTurnId) {
1985
- return null;
1986
- }
1987
- if (expectedTurnId === null) {
1988
- expectedTurnId = candidateTurnId;
1989
- return null;
1990
- }
1991
- if (candidateTurnId === expectedTurnId) {
1992
- return null;
1993
- }
1994
- return buildStaleTurnEventError({
1995
- eventMethod,
1996
- eventTurnId: candidateTurnId,
1997
- });
1998
- };
1999
- const validateWarmTurnEventCorrelation = (message, eventMethod) => {
2000
- const eventTurnId = extractCodexTurnIdFromMessage(message);
2001
- if (codexProcess.requiresCompleteTurnCorrelation &&
2002
- expectedTurnId === null &&
2003
- codexEventMethodRequiresTurnCorrelation(eventMethod)) {
2004
- if (eventTurnId) {
2005
- return null;
2006
- }
2007
- return buildStaleTurnEventError({
2008
- eventMethod,
2009
- eventTurnId,
2010
- });
2011
- }
2012
- if (eventTurnId) {
2013
- return bindExpectedTurnId(eventTurnId, eventMethod);
2014
- }
2015
- return codexProcess.requiresCompleteTurnCorrelation &&
2016
- codexEventMethodRequiresTurnCorrelation(eventMethod)
2017
- ? buildStaleTurnEventError({
2018
- eventMethod,
2019
- eventTurnId: null,
2020
- })
2021
- : null;
2022
- };
2023
- const shouldBufferPreStartWarmMessage = (message, eventMethod) => {
2024
- return (codexProcess.requiresCompleteTurnCorrelation &&
2025
- expectedTurnId === null &&
2026
- codexEventMethodRequiresTurnCorrelation(eventMethod) &&
2027
- extractCodexTurnIdFromMessage(message) !== null) || (codexProcess.requiresCompleteTurnCorrelation &&
2028
- expectedTurnId === null &&
2029
- readCodexRpcServerRequestId(message) !== null &&
2030
- extractCodexTurnIdFromMessage(message) !== null);
2031
- };
2032
2200
  const acceptJsonEvent = (message) => {
2033
2201
  jsonEvents.push(message);
2034
2202
  };
@@ -2097,6 +2265,38 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2097
2265
  });
2098
2266
  return;
2099
2267
  }
2268
+ if (computerToolsLockedAfterUserPause &&
2269
+ dynamicToolRequest.kind === 'finish-without-reply') {
2270
+ void tryWriteRpcMessage({
2271
+ id: requestId,
2272
+ result: {
2273
+ success: false,
2274
+ contentItems: [
2275
+ {
2276
+ type: 'inputText',
2277
+ text: 'finish_without_reply is unavailable after pausing a computer run for the user',
2278
+ },
2279
+ ],
2280
+ },
2281
+ });
2282
+ return;
2283
+ }
2284
+ if (requiredVaultFileApprovalUrls.length > 0 &&
2285
+ dynamicToolRequest.kind === 'finish-without-reply') {
2286
+ void tryWriteRpcMessage({
2287
+ id: requestId,
2288
+ result: {
2289
+ success: false,
2290
+ contentItems: [
2291
+ {
2292
+ type: 'inputText',
2293
+ text: 'finish_without_reply is unavailable while a vault-file approval link must be delivered',
2294
+ },
2295
+ ],
2296
+ },
2297
+ });
2298
+ return;
2299
+ }
2100
2300
  if (computerToolsLockedAfterUserPause &&
2101
2301
  isComputerDynamicToolRequest(dynamicToolRequest)) {
2102
2302
  void tryWriteRpcMessage({
@@ -2149,34 +2349,44 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2149
2349
  ? addPendingExternallyVisibleAssistantOutput(dynamicToolDeliveryContextOrdinal ?? 0)
2150
2350
  : null;
2151
2351
  if (dynamicToolRequest.kind === 'computer-pause-for-user') {
2352
+ finalActionPatches = finalActionPatches.filter((entry) => entry.patch.kind !== 'none' ||
2353
+ entry.deliveryContextOrdinal !==
2354
+ dynamicToolRequestDeliveryContextOrdinal);
2355
+ reservedNoReplyDeliveryContextOrdinals.delete(dynamicToolRequestDeliveryContextOrdinal);
2152
2356
  computerToolsLockedAfterUserPause = true;
2153
2357
  closeLiveTurn();
2154
2358
  }
2155
- const runDynamicTool = () => executeMurphDynamicToolRequest({
2156
- abortSignal: input.abortSignal
2157
- ? AbortSignal.any([input.abortSignal, dynamicToolAbortController.signal])
2158
- : dynamicToolAbortController.signal,
2159
- loadAuthorizedReferenceImageRefs: input.loadAuthorizedReferenceImageRefs ?? null,
2160
- codexHome: input.codexHome ?? input.env.CODEX_HOME ?? null,
2161
- env: input.env,
2162
- fetchImpl: input.fetchImpl,
2163
- hostedGeneratedImageUploader: input.hostedGeneratedImageUploader,
2164
- hostedToolContext: resolveCodexAppServerHostedToolContext(input),
2165
- materializeWorkspaceArtifacts: input.materializeWorkspaceArtifacts ?? null,
2166
- currentResponseMedia: responseMedia,
2167
- nextUsageOrdinal: () => nextDynamicToolUsageOrdinal++,
2168
- productFeedbackRecorder: input.productFeedbackRecorder ?? null,
2169
- progressDelivery: dynamicToolRequest.kind === 'send-progress-update'
2170
- ? dynamicToolProgressDelivery
2171
- : null,
2172
- publicFetchImpl: input.publicInternetFetch ?? null,
2173
- request: dynamicToolRequest,
2174
- requireHostedGeneratedImageUploader: input.requireHostedGeneratedImageUploader ?? false,
2175
- vaultRoot: input.vaultRoot ?? null,
2176
- voiceMemoRuntime: dynamicToolRequest.kind === 'generate-voice-memo' ||
2177
- dynamicToolRequest.kind === 'generate-song'
2178
- ? input.voiceMemoRuntime ?? null
2179
- : null,
2359
+ const runDynamicTool = () => withHostedCanonicalWritePort(hostedCanonicalWritePort, async () => {
2360
+ const hostedToolContext = resolveCodexAppServerHostedToolContext(input);
2361
+ await hostedToolContext?.beforeToolExecution?.();
2362
+ return await executeMurphDynamicToolRequest({
2363
+ assistantStyleSettingsOverlay,
2364
+ assistantStyleSettingsAvailable: input.dynamicTools.some((tool) => tool.namespace === MURPH_ASSISTANT_STYLE_TOOL.namespace &&
2365
+ tool.name === MURPH_ASSISTANT_STYLE_TOOL.name),
2366
+ abortSignal: input.abortSignal
2367
+ ? AbortSignal.any([input.abortSignal, dynamicToolAbortController.signal])
2368
+ : dynamicToolAbortController.signal,
2369
+ codexHome: input.codexHome ?? input.env.CODEX_HOME ?? null,
2370
+ env: input.env,
2371
+ fetchImpl: input.fetchImpl,
2372
+ hostedGeneratedImageUploader: input.hostedGeneratedImageUploader,
2373
+ hostedToolContext,
2374
+ materializeWorkspaceArtifacts: input.materializeWorkspaceArtifacts ?? null,
2375
+ currentResponseMedia: responseMedia,
2376
+ nextUsageOrdinal: () => nextDynamicToolUsageOrdinal++,
2377
+ productFeedbackRecorder: input.productFeedbackRecorder ?? null,
2378
+ progressDelivery: dynamicToolRequest.kind === 'send-progress-update'
2379
+ ? dynamicToolProgressDelivery
2380
+ : null,
2381
+ publicFetchImpl: input.publicInternetFetch ?? null,
2382
+ request: dynamicToolRequest,
2383
+ requireHostedGeneratedImageUploader: input.requireHostedGeneratedImageUploader ?? false,
2384
+ vaultRoot: input.vaultRoot ?? null,
2385
+ voiceMemoRuntime: dynamicToolRequest.kind === 'generate-voice-memo' ||
2386
+ dynamicToolRequest.kind === 'generate-song'
2387
+ ? input.voiceMemoRuntime ?? null
2388
+ : null,
2389
+ });
2180
2390
  }).then(async (result) => {
2181
2391
  if (dynamicToolRequest.kind === 'send-progress-update') {
2182
2392
  releaseDynamicProgressPending?.();
@@ -2184,8 +2394,9 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2184
2394
  if (result.usageDraft) {
2185
2395
  additionalUsages.push(result.usageDraft);
2186
2396
  }
2187
- if (result.computerRunPausedForUser) {
2188
- computerToolsLockedAfterUserPause = true;
2397
+ if (result.requiredVaultFileApprovalUrl &&
2398
+ !requiredVaultFileApprovalUrls.includes(result.requiredVaultFileApprovalUrl)) {
2399
+ requiredVaultFileApprovalUrls.push(result.requiredVaultFileApprovalUrl);
2189
2400
  }
2190
2401
  if (result.responseMediaPatch) {
2191
2402
  try {
@@ -2284,15 +2495,11 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2284
2495
  };
2285
2496
  const handleAcceptedEvent = (message, method) => {
2286
2497
  acceptJsonEvent(message);
2287
- codexThreadId = codexThreadId ?? extractCodexSessionId(message);
2288
2498
  for (const receiverThreadId of readCodexCollabReceiverThreadIds(message)) {
2289
2499
  collabReceiverThreadIds.add(receiverThreadId);
2290
2500
  }
2291
2501
  lastEventError = extractCodexErrorMessage(message) ?? lastEventError;
2292
2502
  lastEventErrorInfo = extractCodexErrorInfo(message) ?? lastEventErrorInfo;
2293
- if (isCodexTurnStartedMethod(method)) {
2294
- turnId = extractCodexTurnIdFromMessage(message) ?? turnId;
2295
- }
2296
2503
  const normalizedEvent = normalizeCodexEvent(message);
2297
2504
  const runtimeIssueInput = buildRuntimeIssueInputForFailedCodexAction({
2298
2505
  normalizedEvent,
@@ -2306,6 +2513,27 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2306
2513
  normalizedEvent,
2307
2514
  rawEvent: message,
2308
2515
  });
2516
+ const transportDiagnosticsTraceEvent = input.onTraceEvent
2517
+ ? buildCodexTransportDiagnosticsTraceEvent({
2518
+ codexThreadId,
2519
+ message,
2520
+ method,
2521
+ providerActionCount,
2522
+ turnId,
2523
+ })
2524
+ : null;
2525
+ if (transportDiagnosticsTraceEvent) {
2526
+ try {
2527
+ input.onTraceEvent?.({
2528
+ codexThreadId: null,
2529
+ rawEvent: transportDiagnosticsTraceEvent,
2530
+ updates: [],
2531
+ });
2532
+ }
2533
+ catch {
2534
+ // Transport diagnostics are metadata-only and must not block turns.
2535
+ }
2536
+ }
2309
2537
  const providerActionKey = extractCodexProviderActionKey(normalizedEvent);
2310
2538
  if (providerActionKey && !providerActionItemIds.has(providerActionKey)) {
2311
2539
  providerActionItemIds.add(providerActionKey);
@@ -2313,11 +2541,22 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2313
2541
  }
2314
2542
  const deliveryContextOrdinal = currentDeliveryContextOrdinal();
2315
2543
  const suppressDeliveryContext = shouldSuppressDeliveryContext(deliveryContextOrdinal);
2316
- const updates = extractCodexTraceUpdatesFromNormalized(normalizedEvent)
2544
+ const isCommentaryAssistantMessage = normalizedEvent.kind === 'assistant_message' &&
2545
+ normalizedEvent.messagePhase === 'commentary';
2546
+ const rawUpdates = extractCodexTraceUpdatesFromNormalized(normalizedEvent);
2547
+ const updates = rawUpdates
2317
2548
  .filter((update) => !(suppressDeliveryContext && update.kind === 'assistant'));
2318
2549
  for (const update of updates) {
2319
2550
  recordAssistantTraceUpdate(update, deliveryContextOrdinal);
2320
2551
  }
2552
+ if (isCommentaryAssistantMessage) {
2553
+ // Commentary is internal progress, not a member-facing message. Remove
2554
+ // its stream, including any earlier deltas for the same item, so a
2555
+ // media-only response cannot reuse it as final reply text.
2556
+ for (const update of rawUpdates) {
2557
+ removeAssistantTraceUpdateFromFinalFallback(update);
2558
+ }
2559
+ }
2321
2560
  if (normalizedEvent.kind !== 'status_item' ||
2322
2561
  normalizedEvent.itemType !== 'context.compaction') {
2323
2562
  input.onTraceEvent?.({
@@ -2330,23 +2569,14 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2330
2569
  markExternallyVisibleAssistantOutput(deliveryContextOrdinal);
2331
2570
  }
2332
2571
  }
2333
- const progressDeliveryText = extractCodexCurrentChannelProgressTextFromNormalized(normalizedEvent);
2334
- const progressDeliverySource = progressDeliveryText
2335
- ? resolveCodexCurrentChannelProgressSource(normalizedEvent)
2336
- : null;
2337
- if (progressDeliveryText &&
2338
- progressDeliverySource &&
2572
+ const contextCompactionProgressText = extractCodexContextCompactionProgressTextFromNormalized(normalizedEvent);
2573
+ if (contextCompactionProgressText &&
2339
2574
  !suppressDeliveryContext) {
2340
- notifyCurrentChannelProgress(deliveryContextOrdinal, progressDeliveryText, progressDeliverySource);
2575
+ notifyContextCompactionProgress(deliveryContextOrdinal, contextCompactionProgressText);
2341
2576
  }
2342
2577
  const completedFinalAgentMessageText = extractCodexCompletedFinalAgentMessageTextFromNormalized(normalizedEvent);
2343
2578
  if (completedFinalAgentMessageText !== null && !suppressDeliveryContext) {
2344
- if (trailingSteerCandidate) {
2345
- precedingAgentMessageSegments.push(trailingSteerCandidate);
2346
- trailingSteerCandidate = null;
2347
- trailingSteerCandidateDeliveryContextOrdinal = null;
2348
- trailingSteerCandidateMedia = null;
2349
- }
2579
+ promoteTrailingSteerCandidate();
2350
2580
  completedFinalAgentMessage = completedFinalAgentMessageText;
2351
2581
  }
2352
2582
  else if (isCodexCompletedUserMessageItemFromNormalized(normalizedEvent)) {
@@ -2356,10 +2586,9 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2356
2586
  response: completedFinalAgentMessage,
2357
2587
  media: [...responseMedia],
2358
2588
  };
2359
- trailingSteerCandidateDeliveryContextOrdinal =
2360
- trailingSteerCandidate.deliveryContextOrdinal ?? 0;
2361
- trailingSteerCandidateMedia = trailingSteerCandidate.media;
2362
2589
  completedFinalAgentMessage = null;
2590
+ assistantStreams.clear();
2591
+ assistantStreamOrder.length = 0;
2363
2592
  responseMedia = [];
2364
2593
  }
2365
2594
  completedUserMessageOrdinal += 1;
@@ -2371,8 +2600,8 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2371
2600
  }
2372
2601
  else {
2373
2602
  if (progressEvent.kind === 'message') {
2374
- lastAgentMessage = progressEvent.text;
2375
- if (input.onProgress && normalizeStreamingText(progressEvent.text)) {
2603
+ if (input.onProgress &&
2604
+ normalizeStreamingText(progressEvent.text)) {
2376
2605
  markExternallyVisibleAssistantOutput(deliveryContextOrdinal);
2377
2606
  }
2378
2607
  }
@@ -2401,39 +2630,15 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2401
2630
  turnTerminal = true;
2402
2631
  completeTurn?.();
2403
2632
  };
2404
- const flushPendingPreStartMessages = () => {
2405
- while (pendingPreStartMessages.length > 0) {
2406
- const pending = pendingPreStartMessages.shift();
2407
- const correlationError = validateWarmTurnEventCorrelation(pending.message, pending.method);
2408
- if (correlationError) {
2409
- rejectOnce(correlationError);
2410
- return false;
2411
- }
2412
- if (pending.kind === 'server_request') {
2413
- const requestId = readCodexRpcServerRequestId(pending.message);
2414
- if (requestId === null) {
2415
- rejectOnce(buildUnknownRpcResponseError());
2416
- return false;
2417
- }
2418
- handleAcceptedServerRequest(pending.message, requestId);
2419
- }
2420
- else {
2421
- handleAcceptedEvent(pending.message, pending.method);
2422
- }
2423
- }
2424
- return true;
2425
- };
2426
2633
  const handleSubagentThreadMessage = (threadId, message) => {
2427
2634
  const requestId = readCodexRpcServerRequestId(message);
2428
2635
  if (requestId !== null) {
2429
2636
  // Dynamic tools and approvals stay parent-thread-scoped; answer the
2430
2637
  // child so it does not hang, without involving the parent turn.
2431
- void tryWriteRpcMessage({
2432
- id: requestId,
2433
- error: {
2434
- code: -32000,
2435
- message: 'Server requests from codex subagent threads are not supported.',
2436
- },
2638
+ rejectCodexServerRequest({
2639
+ message: 'Server requests from codex subagent threads are not supported.',
2640
+ requestId,
2641
+ writeRpcMessage: tryWriteRpcMessage,
2437
2642
  });
2438
2643
  return;
2439
2644
  }
@@ -2466,7 +2671,46 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2466
2671
  lastEvent: message,
2467
2672
  });
2468
2673
  };
2469
- const handleParsedMessage = (message) => {
2674
+ const handleStaleParentTurnMessage = (message) => {
2675
+ const requestId = readCodexRpcServerRequestId(message);
2676
+ if (requestId === null) {
2677
+ return;
2678
+ }
2679
+ rejectCodexServerRequest({
2680
+ message: 'Codex message turn id does not match the active turn.',
2681
+ requestId,
2682
+ writeRpcMessage: tryWriteRpcMessage,
2683
+ });
2684
+ };
2685
+ const rejectUnscopedParentTurnRequest = (requestId) => {
2686
+ rejectCodexServerRequest({
2687
+ message: 'Codex parent-thread request did not include the active turn id.',
2688
+ requestId,
2689
+ writeRpcMessage: tryWriteRpcMessage,
2690
+ });
2691
+ };
2692
+ const rejectPreStartParentTurnRequest = (requestId) => {
2693
+ rejectCodexServerRequest({
2694
+ message: 'Codex parent-thread request arrived before the active turn id was known.',
2695
+ requestId,
2696
+ writeRpcMessage: tryWriteRpcMessage,
2697
+ });
2698
+ };
2699
+ const acceptTurnStartResultTurnId = (resultTurnId) => {
2700
+ if (resultTurnId === null) {
2701
+ return;
2702
+ }
2703
+ if (turnId === null) {
2704
+ turnId = resultTurnId;
2705
+ return;
2706
+ }
2707
+ if (turnId !== resultTurnId) {
2708
+ rejectOnce(new VaultCliError('ASSISTANT_CODEX_APP_SERVER_TURN_ID_MISMATCH', 'Codex app-server turn/start returned a different turn id than the active turn.', {
2709
+ retryable: true,
2710
+ }));
2711
+ }
2712
+ };
2713
+ function handleParsedMessage(message) {
2470
2714
  const responseId = readCodexRpcResponseId(message);
2471
2715
  if (responseId !== null) {
2472
2716
  const pending = codexProcess.pendingRequests.get(responseId);
@@ -2475,91 +2719,69 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2475
2719
  pendingRequests: codexProcess.pendingRequests,
2476
2720
  responseId,
2477
2721
  });
2478
- if (resolveResult === 'unknown_response_id' &&
2479
- !codexProcess.consumeIgnoredResponseId(responseId)) {
2480
- rejectOnce(buildUnknownRpcResponseError());
2722
+ if (resolveResult === 'unknown_response_id') {
2723
+ codexProcess.consumeIgnoredResponseId(responseId);
2481
2724
  return;
2482
2725
  }
2483
- if (resolveResult !== 'unknown_response_id') {
2484
- acceptJsonEvent(message);
2485
- if (message.error) {
2486
- return;
2487
- }
2488
- if (pending?.method === 'thread/start' || pending?.method === 'thread/resume') {
2489
- codexThreadId = extractCodexThreadIdFromResult(message.result) ?? codexThreadId;
2490
- codexProcess.noteBoundThreadId(codexThreadId);
2491
- }
2492
- if (pending?.method === 'turn/start') {
2493
- const resultTurnId = extractCodexTurnIdFromResult(message.result);
2494
- if (codexProcess.requiresCompleteTurnCorrelation && !resultTurnId) {
2495
- rejectOnce(buildMissingReusedTurnIdError());
2496
- return;
2497
- }
2498
- const correlationError = bindExpectedTurnId(resultTurnId, 'turn/start');
2499
- if (correlationError) {
2500
- rejectOnce(correlationError);
2501
- return;
2502
- }
2503
- turnId = resultTurnId ?? turnId;
2504
- }
2505
- if (pending?.method === 'turn/start' && !flushPendingPreStartMessages()) {
2506
- return;
2507
- }
2726
+ acceptJsonEvent(message);
2727
+ if (message.error) {
2728
+ return;
2729
+ }
2730
+ if (pending?.method === 'turn/start') {
2731
+ const resultTurnId = extractCodexTurnIdFromResult(message.result);
2732
+ acceptTurnStartResultTurnId(resultTurnId);
2508
2733
  }
2509
2734
  return;
2510
2735
  }
2511
- // Codex app-server auto-attaches this connection to every thread it
2512
- // creates, including spawned subagent threads, and their notifications
2513
- // carry foreign thread/turn ids. Route them off the single-turn
2514
- // correlation path: token usage is buffered for billing, server requests
2515
- // are denied without failing the parent turn, everything else is dropped.
2516
- // Before a fresh thread/start response produces this turn's thread id,
2517
- // fall back to the process's last bound thread id so a late child event
2518
- // in that window is still routed instead of failing correlation; events
2519
- // for the last bound thread itself keep today's strict stale handling.
2736
+ // Codex owns subagent/thread lifecycle. Murph only keeps foreign thread
2737
+ // traffic away from the active parent turn: token usage is buffered for
2738
+ // billing, server requests are denied, and other child events are dropped.
2739
+ // Before a fresh thread/start response produces this turn's thread id, the
2740
+ // previous bound thread id is enough to distinguish late child traffic.
2520
2741
  const messageThreadId = extractCodexThreadIdFromMessage(message);
2521
- const knownParentThreadId = codexThreadId ?? codexProcess.lastBoundThreadId;
2742
+ const knownParentThreadId = codexThreadId ?? requestedResumeThreadId ?? codexProcess.lastBoundThreadId;
2522
2743
  if (messageThreadId !== null &&
2523
2744
  knownParentThreadId !== null &&
2524
2745
  messageThreadId !== knownParentThreadId) {
2525
2746
  handleSubagentThreadMessage(messageThreadId, message);
2526
2747
  return;
2527
2748
  }
2749
+ const messageTurnId = extractCodexTurnIdFromMessage(message);
2750
+ const method = readCodexEventMethod(message);
2528
2751
  const requestId = readCodexRpcServerRequestId(message);
2529
- if (requestId !== null) {
2530
- const requestMethod = typeof message.method === 'string' ? message.method : null;
2531
- if (shouldBufferPreStartWarmMessage(message, requestMethod)) {
2532
- pendingPreStartMessages.push({
2533
- kind: 'server_request',
2534
- message,
2535
- method: requestMethod,
2536
- });
2752
+ if (messageTurnId !== null) {
2753
+ if (turnId === null) {
2754
+ // A reused warm process adopts the turn id only from turn/started (or
2755
+ // the turn/start response); a fresh process cannot carry stale turns,
2756
+ // so any tagged message may bind it.
2757
+ if (isCodexTurnStartedMethod(method) || !isReusedWarmProcess) {
2758
+ turnId = messageTurnId;
2759
+ }
2760
+ else {
2761
+ if (requestId !== null) {
2762
+ rejectPreStartParentTurnRequest(requestId);
2763
+ }
2764
+ return;
2765
+ }
2766
+ }
2767
+ else if (messageTurnId !== turnId) {
2768
+ handleStaleParentTurnMessage(message);
2537
2769
  return;
2538
2770
  }
2539
- const correlationError = validateWarmTurnEventCorrelation(message, requestMethod);
2540
- if (correlationError) {
2541
- rejectOnce(correlationError);
2771
+ }
2772
+ if (requestId !== null) {
2773
+ if (isReusedWarmProcess && messageTurnId === null) {
2774
+ rejectUnscopedParentTurnRequest(requestId);
2542
2775
  return;
2543
2776
  }
2544
2777
  handleAcceptedServerRequest(message, requestId);
2545
2778
  return;
2546
2779
  }
2547
- const method = readCodexEventMethod(message);
2548
- if (shouldBufferPreStartWarmMessage(message, method)) {
2549
- pendingPreStartMessages.push({
2550
- kind: 'event',
2551
- message,
2552
- method,
2553
- });
2554
- return;
2555
- }
2556
- const correlationError = validateWarmTurnEventCorrelation(message, method);
2557
- if (correlationError) {
2558
- rejectOnce(correlationError);
2780
+ if (isReusedWarmProcess && messageTurnId === null) {
2559
2781
  return;
2560
2782
  }
2561
2783
  handleAcceptedEvent(message, method);
2562
- };
2784
+ }
2563
2785
  const emitActionDiagnosticsTrace = () => {
2564
2786
  if (actionDiagnosticsTraceEmitted ||
2565
2787
  !input.onTraceEvent ||
@@ -2637,7 +2859,7 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2637
2859
  return;
2638
2860
  }
2639
2861
  rejectOnce(buildCodexProcessExitError({
2640
- abortRequested,
2862
+ abortOwnsTermination: false,
2641
2863
  code,
2642
2864
  diagnostics: buildProcessExitDiagnostics(),
2643
2865
  errorInfo: lastEventErrorInfo,
@@ -2689,7 +2911,7 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2689
2911
  lifecycleStage = 'initialized';
2690
2912
  emitAppServerTimingTrace('warm-reused');
2691
2913
  }
2692
- const resumeThreadId = codexThreadId;
2914
+ const resumeThreadId = requestedResumeThreadId;
2693
2915
  const threadTimingStage = resumeThreadId ? 'thread-resumed' : 'thread-started';
2694
2916
  lifecycleStage = resumeThreadId ? 'thread_resume' : 'thread_start';
2695
2917
  const threadResult = await withCodexRpcTimeout(resumeThreadId
@@ -2705,6 +2927,12 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2705
2927
  threadResult,
2706
2928
  });
2707
2929
  }
2930
+ else if (normalizeNullableString(input.permissions)) {
2931
+ assertCodexThreadStartPermissionAttestation({
2932
+ input,
2933
+ threadResult,
2934
+ });
2935
+ }
2708
2936
  codexThreadId = extractCodexThreadIdFromResult(threadResult) ?? codexThreadId;
2709
2937
  codexProcess.noteBoundThreadId(codexThreadId);
2710
2938
  rolloutRelativePath = resolveCodexRolloutRelativePath({
@@ -2718,16 +2946,22 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2718
2946
  throw new VaultCliError('ASSISTANT_CODEX_APP_SERVER_FAILED', 'Codex app-server did not return a thread id.');
2719
2947
  }
2720
2948
  lifecycleStage = 'turn_start';
2949
+ codexProcess.noteBoundThreadModel(input.model ?? null);
2721
2950
  codexProcess.noteBoundThreadServiceTier(input.serviceTier ?? null);
2722
- const turnResult = await withCodexRpcTimeout(sendRequest('turn/start', buildCodexTurnStartParams({
2951
+ const turnStartRequest = sendRequest('turn/start', buildCodexTurnStartParams({
2723
2952
  input,
2724
2953
  imagePaths: input.imagePaths,
2725
2954
  codexThreadId,
2726
- })), CODEX_RPC_DEFAULT_TIMEOUT_MS, 'turn/start');
2727
- turnId = extractCodexTurnIdFromResult(turnResult) ?? turnId;
2955
+ }));
2956
+ // The child can begin executing (including side-effecting commands) as
2957
+ // soon as the turn/start request is written, so the provider-start
2958
+ // barrier arms here rather than at the acknowledgement. A death between
2959
+ // write and response must never be classified as pre-provider work.
2960
+ notifyProviderRequestStarted();
2961
+ const turnResult = await withCodexRpcTimeout(turnStartRequest, CODEX_RPC_DEFAULT_TIMEOUT_MS, 'turn/start');
2962
+ acceptTurnStartResultTurnId(extractCodexTurnIdFromResult(turnResult));
2728
2963
  lifecycleStage = 'turn_started';
2729
2964
  emitAppServerTimingTrace('turn-started');
2730
- notifyProviderRequestStarted();
2731
2965
  registerLiveTurn();
2732
2966
  lifecycleStage = 'turn_running';
2733
2967
  await turnCompleted;
@@ -2738,33 +2972,81 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2738
2972
  lifecycleStage = 'turn_completed';
2739
2973
  emitAppServerTimingTrace('turn-completed');
2740
2974
  closeLiveTurn();
2975
+ if (stdinFailure) {
2976
+ throw stdinFailure;
2977
+ }
2978
+ await settleNoReplyFinalActions();
2741
2979
  if (abortRequested || terminationSignalSent) {
2742
2980
  normalShutdown = true;
2743
2981
  lifecycleStage = 'abort_cleanup';
2744
2982
  await codexProcess.poison('turn-completed-after-abort');
2745
2983
  lifecycleStage = 'shutdown_complete';
2746
- emitAppServerTimingTrace('warm-abort-poisoned');
2984
+ emitAppServerTimingTrace(input.processLifetime === 'one-shot'
2985
+ ? 'one-shot-abort-stopped'
2986
+ : 'warm-abort-poisoned');
2747
2987
  }
2748
2988
  else {
2749
- lifecycleStage = 'idle';
2750
- codexProcess.releaseTurn(activeTurnBinding);
2751
- emitAppServerTimingTrace('warm-idle');
2752
- }
2753
- if (stdinFailure) {
2754
- throw stdinFailure;
2989
+ if (input.processLifetime !== 'one-shot' &&
2990
+ codexThreadId &&
2991
+ normalizeNullableString(input.env[HOSTED_CLI_BRIDGE_TOKEN_ENV])) {
2992
+ lifecycleStage = 'background_terminal_cleanup';
2993
+ const cleanup = codexProcess.beginHostedBackgroundTerminalCleanup({
2994
+ binding: activeTurnBinding,
2995
+ threadId: codexThreadId,
2996
+ });
2997
+ trackHostedCodexPostTurnCleanup(cleanup);
2998
+ void cleanup.then(() => {
2999
+ emitAppServerTimingTrace(codexProcess.isReusableFor(input.launchKey)
3000
+ ? 'background-terminals-cleaned'
3001
+ : 'warm-background-terminal-cleanup-failed');
3002
+ });
3003
+ }
3004
+ if (!normalShutdown && !codexProcess.pendingPostTurnCleanup) {
3005
+ lifecycleStage = 'idle';
3006
+ codexProcess.releaseTurn(activeTurnBinding);
3007
+ emitAppServerTimingTrace(input.processLifetime === 'one-shot'
3008
+ ? 'one-shot-complete'
3009
+ : 'warm-idle');
3010
+ }
2755
3011
  }
2756
3012
  }
2757
3013
  catch (error) {
3014
+ const recordedEndReason = codexProcess.recordedEndReason;
3015
+ const preserveInterruptCleanupTimeout = error instanceof VaultCliError &&
3016
+ error.code === 'ASSISTANT_CODEX_APP_SERVER_INTERRUPT_TIMEOUT' &&
3017
+ recordedEndReason !== 'previous-process-exit';
3018
+ const preserveMissingCodexStartupFailure = error instanceof VaultCliError &&
3019
+ error.code === 'ASSISTANT_CODEX_NOT_FOUND';
3020
+ const failureMatchesRecordedOwner = error instanceof VaultCliError &&
3021
+ ((recordedEndReason === 'previous-process-exit' &&
3022
+ error.context?.codexFailureStage === 'process_exit') ||
3023
+ (recordedEndReason === 'previous-turn-abort' &&
3024
+ error.code === 'ASSISTANT_CODEX_INTERRUPTED'));
3025
+ const shouldApplyRecordedOwner = !preserveInterruptCleanupTimeout &&
3026
+ !preserveMissingCodexStartupFailure &&
3027
+ !failureMatchesRecordedOwner &&
3028
+ (recordedEndReason === 'previous-turn-abort' ||
3029
+ (recordedEndReason === 'previous-process-exit' &&
3030
+ providerRequestStartedNotified));
3031
+ let turnFailure = shouldApplyRecordedOwner
3032
+ ? (buildRecordedTerminationError(lastEventError) ?? error)
3033
+ : error;
2758
3034
  emitActionDiagnosticsTrace();
2759
3035
  dynamicToolAbortController.abort();
2760
3036
  await drainPendingDynamicToolExecutions();
2761
3037
  await drainPendingProgressDeliveries();
2762
- annotateTurnFailureContext(error);
3038
+ try {
3039
+ await settleNoReplyFinalActions();
3040
+ }
3041
+ catch (settlementError) {
3042
+ turnFailure = settlementError;
3043
+ }
3044
+ annotateTurnFailureContext(turnFailure);
2763
3045
  closeLiveTurn();
2764
3046
  normalShutdown = true;
2765
3047
  lifecycleStage = 'error_cleanup';
2766
- await codexProcess.poison('turn-failure').catch(() => undefined);
2767
- throw error;
3048
+ await codexProcess.poison(abortRequested ? 'turn-completed-after-abort' : 'turn-failure').catch(() => undefined);
3049
+ throw turnFailure;
2768
3050
  }
2769
3051
  finally {
2770
3052
  closeLiveTurn();
@@ -2777,39 +3059,48 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2777
3059
  const extractedFinalMessage = extractAssistantMessageFallback({
2778
3060
  assistantStreams,
2779
3061
  assistantStreamOrder,
2780
- }) ??
2781
- lastAgentMessage ??
2782
- '';
3062
+ }) ?? '';
2783
3063
  const latestDeliveryContextOrdinal = Math.max(0, completedUserMessageOrdinal);
2784
3064
  const latestFinalActionPatch = resolveFinalActionPatch(latestDeliveryContextOrdinal);
3065
+ let finalTrailingSteerCandidate = readTrailingSteerCandidate();
3066
+ const trailingSteerCandidateDeliveryContextOrdinal = finalTrailingSteerCandidate?.deliveryContextOrdinal ?? null;
2785
3067
  const trailingSteerCandidateFinalActionPatch = trailingSteerCandidateDeliveryContextOrdinal !== null
2786
3068
  ? resolveFinalActionPatch(trailingSteerCandidateDeliveryContextOrdinal)
2787
3069
  : null;
2788
3070
  const suppressTrailingSteerCandidateForEarlierNoReply = latestFinalActionPatch === null &&
2789
- trailingSteerCandidate !== null &&
3071
+ finalTrailingSteerCandidate !== null &&
2790
3072
  trailingSteerCandidateFinalActionPatch?.kind === 'none';
2791
- const finalPrecedingAgentMessageSegments = latestFinalActionPatch?.kind === 'none' && trailingSteerCandidate
2792
- ? [...precedingAgentMessageSegments, trailingSteerCandidate]
2793
- : precedingAgentMessageSegments;
3073
+ const shouldPromoteTrailingSteerCandidate = finalTrailingSteerCandidate !== null &&
3074
+ (latestFinalActionPatch?.kind === 'none' ||
3075
+ (!suppressTrailingSteerCandidateForEarlierNoReply &&
3076
+ (normalizeNullableString(extractedFinalMessage) !== null ||
3077
+ responseMedia.length > 0)));
3078
+ if (shouldPromoteTrailingSteerCandidate) {
3079
+ promoteTrailingSteerCandidate();
3080
+ finalTrailingSteerCandidate = null;
3081
+ }
3082
+ const selectedFinalMessage = finalTrailingSteerCandidate?.response ?? extractedFinalMessage;
2794
3083
  const finalResponseMedia = latestFinalActionPatch?.kind === 'none'
2795
3084
  ? responseMedia
2796
3085
  : suppressTrailingSteerCandidateForEarlierNoReply
2797
3086
  ? responseMedia
2798
- : trailingSteerCandidateMedia ?? responseMedia;
3087
+ : finalTrailingSteerCandidate?.media ?? responseMedia;
2799
3088
  const finalDeliveryContextOrdinal = latestFinalActionPatch?.kind === 'none'
2800
3089
  ? latestDeliveryContextOrdinal
2801
3090
  : suppressTrailingSteerCandidateForEarlierNoReply
2802
3091
  ? latestDeliveryContextOrdinal
2803
- : trailingSteerCandidateDeliveryContextOrdinal ??
3092
+ : finalTrailingSteerCandidate?.deliveryContextOrdinal ??
2804
3093
  latestDeliveryContextOrdinal;
2805
3094
  const finalActionPatch = resolveFinalActionPatch(finalDeliveryContextOrdinal);
2806
- const noReplySelected = finalActionPatch?.kind === 'none';
3095
+ const requiredUserVisibleOutput = hasRequiredUserVisibleOutput();
3096
+ const noReplySelected = finalActionPatch?.kind === 'none' && !requiredUserVisibleOutput;
2807
3097
  const finalAction = noReplySelected
2808
3098
  ? { kind: 'none' }
2809
3099
  : null;
2810
- const finalMessage = noReplySelected || suppressTrailingSteerCandidateForEarlierNoReply
3100
+ const modelFinalMessage = noReplySelected || suppressTrailingSteerCandidateForEarlierNoReply
2811
3101
  ? ''
2812
- : extractedFinalMessage;
3102
+ : selectedFinalMessage;
3103
+ const finalMessage = appendRequiredVaultFileApprovalUrls(modelFinalMessage, requiredVaultFileApprovalUrls);
2813
3104
  if (noReplySelected &&
2814
3105
  normalizeNullableString(extractedFinalMessage) !== null) {
2815
3106
  emitCodexSuppressedFinalMessageTrace({
@@ -2819,31 +3110,27 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2819
3110
  suppressedTextLength: extractedFinalMessage.length,
2820
3111
  });
2821
3112
  }
2822
- const filteredPrecedingAgentMessageSegments = finalPrecedingAgentMessageSegments
3113
+ const filteredPrecedingAgentMessageSegments = precedingAgentMessageSegments
2823
3114
  .filter((segment) => !shouldSuppressDeliveryContext(segment.deliveryContextOrdinal));
2824
- const codexThreadHistoryUnsafe = finalActionPatches.some((entry) => entry.patch.kind === 'none') ||
2825
- suppressTrailingSteerCandidateForEarlierNoReply ||
2826
- filteredPrecedingAgentMessageSegments.length !==
2827
- finalPrecedingAgentMessageSegments.length;
2828
3115
  const finalHasDeliverableOutput = normalizeNullableString(finalMessage) !== null ||
2829
3116
  (!noReplySelected && finalResponseMedia.length > 0);
2830
3117
  return {
2831
- acceptedNoReplyDeliveryContextOrdinals: listNoReplyFinalActionPatchOrdinals(),
2832
- codexThreadHistoryUnsafe,
3118
+ acceptedNoReplyDeliveryContextOrdinals: acceptedNoReplyDeliveryContextOrdinals,
2833
3119
  finalAction,
2834
- finalActionExplicit: finalActionPatch !== null,
3120
+ finalActionExplicit: finalActionPatch !== null && !requiredUserVisibleOutput,
2835
3121
  finalMessage,
3122
+ transcriptMessage: normalizeNullableString(modelFinalMessage) ??
3123
+ (finalResponseMedia.length > 0 ? '' : null),
2836
3124
  reactions: reactionPatches.map((entry) => ({
2837
3125
  deliveryContextOrdinal: entry.deliveryContextOrdinal,
2838
3126
  reaction: entry.patch.reaction,
2839
3127
  })),
2840
3128
  precedingAgentMessageSegments: filteredPrecedingAgentMessageSegments.map((segment) => ({
2841
- ...(typeof segment.deliveryContextOrdinal === 'number'
2842
- ? { deliveryContextOrdinal: segment.deliveryContextOrdinal }
2843
- : {}),
3129
+ deliveryContextOrdinal: segment.deliveryContextOrdinal,
2844
3130
  response: segment.response,
2845
3131
  media: [...segment.media],
2846
3132
  })),
3133
+ responseDeliveryContextOrdinal: finalDeliveryContextOrdinal,
2847
3134
  additionalUsages: [...additionalUsages, ...buildSubagentUsageDrafts()],
2848
3135
  responseMedia: finalHasDeliverableOutput ? [...finalResponseMedia] : [],
2849
3136
  jsonEvents,
@@ -2857,6 +3144,45 @@ async function runCodexAppServerTurnOnProcess(codexProcess, input) {
2857
3144
  turnId,
2858
3145
  };
2859
3146
  }
3147
+ function assertCodexThreadStartPermissionAttestation(input) {
3148
+ const result = asCodexRecord(input.threadResult);
3149
+ const activePermissionProfile = asCodexRecord(result?.activePermissionProfile);
3150
+ const actualCwd = normalizeNullableString(asCodexString(result?.cwd));
3151
+ const actualRoots = asCodexStringArray(result?.runtimeWorkspaceRoots);
3152
+ const instructionSources = Array.isArray(result?.instructionSources)
3153
+ ? result.instructionSources
3154
+ : null;
3155
+ const expectedRoots = input.input.runtimeWorkspaceRoots ?? [];
3156
+ const mismatchedFields = [];
3157
+ const permissionProfileMismatch = normalizeNullableString(asCodexString(activePermissionProfile?.id)) !==
3158
+ normalizeNullableString(input.input.permissions) ||
3159
+ normalizeNullableString(asCodexString(activePermissionProfile?.extends)) !== null;
3160
+ if (permissionProfileMismatch) {
3161
+ mismatchedFields.push('activePermissionProfile');
3162
+ }
3163
+ if (!actualRoots ||
3164
+ actualRoots.length !== expectedRoots.length ||
3165
+ actualRoots.some((root, index) => path.resolve(root) !== path.resolve(expectedRoots[index] ?? ''))) {
3166
+ mismatchedFields.push('runtimeWorkspaceRoots');
3167
+ }
3168
+ if (!actualCwd || path.resolve(actualCwd) !== input.input.workingDirectory) {
3169
+ mismatchedFields.push('cwd');
3170
+ }
3171
+ if (instructionSources === null || instructionSources.length !== 0) {
3172
+ mismatchedFields.push('instructionSources');
3173
+ }
3174
+ if (asCodexString(result?.approvalPolicy) !==
3175
+ mapCodexAppServerApprovalPolicy(input.input.approvalPolicy)) {
3176
+ mismatchedFields.push('approvalPolicy');
3177
+ }
3178
+ if (mismatchedFields.length === 0) {
3179
+ return;
3180
+ }
3181
+ throw new VaultCliError('ASSISTANT_CODEX_APP_SERVER_PERMISSION_ATTESTATION_FAILED', 'Codex app-server did not attest the requested read-only execution context.', {
3182
+ mismatchedFields,
3183
+ retryable: false,
3184
+ });
3185
+ }
2860
3186
  function emitCodexSuppressedFinalMessageTrace(input) {
2861
3187
  if (!input.onTraceEvent) {
2862
3188
  return;
@@ -2882,7 +3208,10 @@ function notifyCodexAppServerProviderRequestStartedBestEffort(input) {
2882
3208
  return;
2883
3209
  }
2884
3210
  try {
2885
- void Promise.resolve(input.hook({ startedAt: input.startedAt })).catch(() => {
3211
+ void Promise.resolve(input.hook({
3212
+ ...(input.timing ?? {}),
3213
+ startedAt: input.startedAt,
3214
+ })).catch(() => {
2886
3215
  // Provider-start hooks are diagnostic-only and must not block turns.
2887
3216
  });
2888
3217
  }
@@ -2892,6 +3221,7 @@ function notifyCodexAppServerProviderRequestStartedBestEffort(input) {
2892
3221
  }
2893
3222
  function isInvalidDynamicToolRequest(request) {
2894
3223
  return (request.kind === 'invalid-generate-image-arguments' ||
3224
+ request.kind === 'invalid-assistant-style-arguments' ||
2895
3225
  request.kind === 'invalid-computer-arguments' ||
2896
3226
  request.kind === 'invalid-generate-voice-memo-arguments' ||
2897
3227
  request.kind === 'invalid-finish-without-reply-arguments' ||
@@ -2905,6 +3235,9 @@ function isSerializedDynamicToolRequest(request) {
2905
3235
  request.kind === 'generate-voice-memo' ||
2906
3236
  request.kind === 'generate-song' ||
2907
3237
  request.kind === 'attach-response-media' ||
3238
+ request.kind === 'assistant-configuration' ||
3239
+ request.kind === 'assistant-style' ||
3240
+ request.kind === 'personalization' ||
2908
3241
  request.kind === 'submit-product-feedback' ||
2909
3242
  isComputerDynamicToolRequest(request);
2910
3243
  }
@@ -2977,7 +3310,9 @@ function resolveCodexRolloutRelativePath(input) {
2977
3310
  // remain attached (codex-rs `thread_processor.rs` `resume_running_thread`).
2978
3311
  // The thread/resume response echoes the effective execution context, so this
2979
3312
  // echo check is the only client-visible stale-rejoin signal before turn/start.
2980
- // Fields with no requested value are skipped; requested fields must echo back.
3313
+ // Fields with no requested value are skipped; requested immutable execution
3314
+ // fields must echo back. Model is intentionally excluded because turn/start
3315
+ // applies its sticky model override atomically with the next user input.
2981
3316
  function assertCodexResumeContextMatches(input) {
2982
3317
  const result = asCodexRecord(input.threadResult);
2983
3318
  const actualCwd = normalizeNullableString(asCodexString(result?.cwd));
@@ -2993,11 +3328,6 @@ function assertCodexResumeContextMatches(input) {
2993
3328
  asCodexString(result?.approvalPolicy),
2994
3329
  ],
2995
3330
  ['cwd', input.input.workingDirectory, actualCwd ? path.resolve(actualCwd) : null],
2996
- [
2997
- 'model',
2998
- normalizeNullableString(input.input.model),
2999
- normalizeNullableString(asCodexString(result?.model)),
3000
- ],
3001
3331
  [
3002
3332
  'modelProvider',
3003
3333
  normalizeNullableString(input.input.modelProvider),
@@ -3045,6 +3375,11 @@ function asCodexRecord(value) {
3045
3375
  function asCodexString(value) {
3046
3376
  return typeof value === 'string' ? value : null;
3047
3377
  }
3378
+ function asCodexStringArray(value) {
3379
+ return Array.isArray(value) && value.every((entry) => typeof entry === 'string')
3380
+ ? value
3381
+ : null;
3382
+ }
3048
3383
  const codexRolloutRelativePathPattern = /^sessions\/(\d{4})\/(\d{2})\/(\d{2})\/rollout-(\d{4})-(\d{2})-(\d{2})T[^/]+-([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})\.jsonl$/u;
3049
3384
  function normalizeCodexRolloutRelativePath(value, codexThreadId) {
3050
3385
  if (value.length === 0 ||