@murphai/murph 0.2.7 → 0.2.10

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 (336) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/config.schema.json +36 -3
  3. package/dist/cli-entry.d.ts.map +1 -1
  4. package/dist/cli-entry.js +7 -5
  5. package/dist/cli-entry.js.map +1 -1
  6. package/dist/commands/automation.d.ts +4 -8
  7. package/dist/commands/automation.d.ts.map +1 -1
  8. package/dist/commands/automation.js +2 -2
  9. package/dist/commands/automation.js.map +1 -1
  10. package/dist/commands/document.d.ts.map +1 -1
  11. package/dist/commands/document.js +1 -1
  12. package/dist/commands/document.js.map +1 -1
  13. package/dist/commands/intervention.d.ts.map +1 -1
  14. package/dist/commands/intervention.js +1 -1
  15. package/dist/commands/intervention.js.map +1 -1
  16. package/dist/commands/meal.d.ts +1 -1
  17. package/dist/commands/meal.d.ts.map +1 -1
  18. package/dist/commands/meal.js +53 -3
  19. package/dist/commands/meal.js.map +1 -1
  20. package/dist/commands/route.d.ts.map +1 -1
  21. package/dist/commands/route.js +6 -6
  22. package/dist/commands/route.js.map +1 -1
  23. package/dist/commands/search.d.ts.map +1 -1
  24. package/dist/commands/search.js +2 -1
  25. package/dist/commands/search.js.map +1 -1
  26. package/dist/commands/workout.d.ts.map +1 -1
  27. package/dist/commands/workout.js +1 -1
  28. package/dist/commands/workout.js.map +1 -1
  29. package/dist/incur.generated.d.ts +9 -0
  30. package/dist/incur.generated.d.ts.map +1 -1
  31. package/dist/vault-cli-bootstrap.d.ts +1 -1
  32. package/dist/vault-cli-bootstrap.d.ts.map +1 -1
  33. package/dist/vault-cli-bootstrap.js +2 -2
  34. package/dist/vault-cli-bootstrap.js.map +1 -1
  35. package/dist/vault-cli-command-manifest.d.ts +3 -0
  36. package/dist/vault-cli-command-manifest.d.ts.map +1 -1
  37. package/dist/vault-cli-command-manifest.js +4 -0
  38. package/dist/vault-cli-command-manifest.js.map +1 -1
  39. package/dist/vault-cli.d.ts +6 -0
  40. package/dist/vault-cli.d.ts.map +1 -1
  41. package/dist/vault-cli.js +19 -8
  42. package/dist/vault-cli.js.map +1 -1
  43. package/node_modules/@murphai/assistant-cli/dist/assistant/service.d.ts +2 -2
  44. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/descriptors.d.ts.map +1 -1
  45. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/descriptors.js +1 -16
  46. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/descriptors.js.map +1 -1
  47. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/helpers.d.ts +2 -12
  48. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/helpers.d.ts.map +1 -1
  49. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/helpers.js +23 -43
  50. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/helpers.js.map +1 -1
  51. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/registry.d.ts.map +1 -1
  52. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/registry.js +3 -2
  53. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/registry.js.map +1 -1
  54. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/types.d.ts +1 -1
  55. package/node_modules/@murphai/assistant-engine/dist/assistant/channels/types.d.ts.map +1 -1
  56. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/notification-delivery.d.ts +6 -0
  57. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/notification-delivery.d.ts.map +1 -0
  58. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/notification-delivery.js +21 -0
  59. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/notification-delivery.js.map +1 -0
  60. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/store.d.ts +0 -2
  61. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/store.d.ts.map +1 -1
  62. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/store.js +0 -1
  63. package/node_modules/@murphai/assistant-engine/dist/assistant/cron/store.js.map +1 -1
  64. package/node_modules/@murphai/assistant-engine/dist/assistant/cron.d.ts.map +1 -1
  65. package/node_modules/@murphai/assistant-engine/dist/assistant/cron.js +67 -43
  66. package/node_modules/@murphai/assistant-engine/dist/assistant/cron.js.map +1 -1
  67. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.d.ts +25 -0
  68. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.d.ts.map +1 -0
  69. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.js +201 -0
  70. package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.js.map +1 -0
  71. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/dispatch-state.d.ts +38 -0
  72. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/dispatch-state.d.ts.map +1 -0
  73. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/dispatch-state.js +215 -0
  74. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/dispatch-state.js.map +1 -0
  75. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/retry-policy.d.ts.map +1 -1
  76. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/retry-policy.js +77 -41
  77. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/retry-policy.js.map +1 -1
  78. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.d.ts.map +1 -1
  79. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.js +4 -201
  80. package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.js.map +1 -1
  81. package/node_modules/@murphai/assistant-engine/dist/assistant/provider-config.d.ts.map +1 -1
  82. package/node_modules/@murphai/assistant-engine/dist/assistant/provider-config.js +10 -3
  83. package/node_modules/@murphai/assistant-engine/dist/assistant/provider-config.js.map +1 -1
  84. package/node_modules/@murphai/assistant-engine/dist/assistant/provider-turn-runner.d.ts +9 -0
  85. package/node_modules/@murphai/assistant-engine/dist/assistant/provider-turn-runner.d.ts.map +1 -1
  86. package/node_modules/@murphai/assistant-engine/dist/assistant/provider-turn-runner.js +60 -25
  87. package/node_modules/@murphai/assistant-engine/dist/assistant/provider-turn-runner.js.map +1 -1
  88. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/openai-compatible.d.ts.map +1 -1
  89. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/openai-compatible.js +20 -58
  90. package/node_modules/@murphai/assistant-engine/dist/assistant/providers/openai-compatible.js.map +1 -1
  91. package/node_modules/@murphai/assistant-engine/dist/assistant/redaction.d.ts +4 -8
  92. package/node_modules/@murphai/assistant-engine/dist/assistant/redaction.d.ts.map +1 -1
  93. package/node_modules/@murphai/assistant-engine/dist/assistant/redaction.js +3 -37
  94. package/node_modules/@murphai/assistant-engine/dist/assistant/redaction.js.map +1 -1
  95. package/node_modules/@murphai/assistant-engine/dist/assistant/service.d.ts +8 -5
  96. package/node_modules/@murphai/assistant-engine/dist/assistant/service.d.ts.map +1 -1
  97. package/node_modules/@murphai/assistant-engine/dist/assistant/service.js +5 -0
  98. package/node_modules/@murphai/assistant-engine/dist/assistant/service.js.map +1 -1
  99. package/node_modules/@murphai/assistant-engine/dist/assistant/state-ids.d.ts +0 -1
  100. package/node_modules/@murphai/assistant-engine/dist/assistant/state-ids.d.ts.map +1 -1
  101. package/node_modules/@murphai/assistant-engine/dist/assistant/state-ids.js +3 -8
  102. package/node_modules/@murphai/assistant-engine/dist/assistant/state-ids.js.map +1 -1
  103. package/node_modules/@murphai/assistant-engine/dist/assistant/state-secrets.d.ts.map +1 -1
  104. package/node_modules/@murphai/assistant-engine/dist/assistant/state-secrets.js +9 -15
  105. package/node_modules/@murphai/assistant-engine/dist/assistant/state-secrets.js.map +1 -1
  106. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.d.ts +8 -0
  107. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.d.ts.map +1 -1
  108. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.js +30 -4
  109. package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.js.map +1 -1
  110. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.d.ts +3 -0
  111. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.d.ts.map +1 -1
  112. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.js +19 -11
  113. package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.js.map +1 -1
  114. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools/capability-definitions.d.ts +3 -3
  115. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools/capability-definitions.d.ts.map +1 -1
  116. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools/capability-definitions.js +35 -17
  117. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools/capability-definitions.js.map +1 -1
  118. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools/catalog-profiles.d.ts +1 -0
  119. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools/catalog-profiles.d.ts.map +1 -1
  120. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools/catalog-profiles.js +14 -0
  121. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools/catalog-profiles.js.map +1 -1
  122. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools/policy-wrappers.d.ts.map +1 -1
  123. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools/policy-wrappers.js +1 -0
  124. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools/policy-wrappers.js.map +1 -1
  125. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools.d.ts +1 -1
  126. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools.d.ts.map +1 -1
  127. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools.js +1 -1
  128. package/node_modules/@murphai/assistant-engine/dist/assistant-cli-tools.js.map +1 -1
  129. package/node_modules/@murphai/assistant-engine/dist/inbox-model-contracts.d.ts +1 -4
  130. package/node_modules/@murphai/assistant-engine/dist/inbox-model-contracts.d.ts.map +1 -1
  131. package/node_modules/@murphai/assistant-engine/dist/inbox-model-contracts.js +1 -1
  132. package/node_modules/@murphai/assistant-engine/dist/inbox-model-contracts.js.map +1 -1
  133. package/node_modules/@murphai/assistant-engine/dist/inbox-model-harness.js +1 -1
  134. package/node_modules/@murphai/assistant-engine/dist/inbox-model-harness.js.map +1 -1
  135. package/node_modules/@murphai/assistant-engine/dist/model-harness.d.ts +4 -0
  136. package/node_modules/@murphai/assistant-engine/dist/model-harness.d.ts.map +1 -1
  137. package/node_modules/@murphai/assistant-engine/dist/model-harness.js +46 -25
  138. package/node_modules/@murphai/assistant-engine/dist/model-harness.js.map +1 -1
  139. package/node_modules/@murphai/assistant-engine/package.json +2 -2
  140. package/node_modules/@murphai/assistantd/package.json +1 -1
  141. package/node_modules/@murphai/core/dist/automation.d.ts +1 -1
  142. package/node_modules/@murphai/core/dist/automation.d.ts.map +1 -1
  143. package/node_modules/@murphai/core/dist/automation.js +13 -16
  144. package/node_modules/@murphai/core/dist/automation.js.map +1 -1
  145. package/node_modules/@murphai/core/dist/bank/foods.d.ts.map +1 -1
  146. package/node_modules/@murphai/core/dist/bank/foods.js +29 -0
  147. package/node_modules/@murphai/core/dist/bank/foods.js.map +1 -1
  148. package/node_modules/@murphai/core/dist/bank/types.d.ts +3 -1
  149. package/node_modules/@murphai/core/dist/bank/types.d.ts.map +1 -1
  150. package/node_modules/@murphai/core/dist/bank/types.js.map +1 -1
  151. package/node_modules/@murphai/core/dist/mutations.d.ts +3 -2
  152. package/node_modules/@murphai/core/dist/mutations.d.ts.map +1 -1
  153. package/node_modules/@murphai/core/dist/mutations.js +6 -3
  154. package/node_modules/@murphai/core/dist/mutations.js.map +1 -1
  155. package/node_modules/@murphai/core/dist/nutrition.d.ts +6 -0
  156. package/node_modules/@murphai/core/dist/nutrition.d.ts.map +1 -0
  157. package/node_modules/@murphai/core/dist/nutrition.js +69 -0
  158. package/node_modules/@murphai/core/dist/nutrition.js.map +1 -0
  159. package/node_modules/@murphai/core/package.json +1 -1
  160. package/node_modules/@murphai/device-syncd/README.md +4 -2
  161. package/node_modules/@murphai/device-syncd/dist/callback-redirect.d.ts +11 -0
  162. package/node_modules/@murphai/device-syncd/dist/callback-redirect.d.ts.map +1 -0
  163. package/node_modules/@murphai/device-syncd/dist/callback-redirect.js +51 -0
  164. package/node_modules/@murphai/device-syncd/dist/callback-redirect.js.map +1 -0
  165. package/node_modules/@murphai/device-syncd/dist/client.d.ts +21 -0
  166. package/node_modules/@murphai/device-syncd/dist/client.d.ts.map +1 -1
  167. package/node_modules/@murphai/device-syncd/dist/client.js.map +1 -1
  168. package/node_modules/@murphai/device-syncd/dist/hosted-runtime.d.ts.map +1 -1
  169. package/node_modules/@murphai/device-syncd/dist/hosted-runtime.js +11 -30
  170. package/node_modules/@murphai/device-syncd/dist/hosted-runtime.js.map +1 -1
  171. package/node_modules/@murphai/device-syncd/dist/http.d.ts +1 -5
  172. package/node_modules/@murphai/device-syncd/dist/http.d.ts.map +1 -1
  173. package/node_modules/@murphai/device-syncd/dist/http.js +10 -26
  174. package/node_modules/@murphai/device-syncd/dist/http.js.map +1 -1
  175. package/node_modules/@murphai/device-syncd/dist/index.d.ts +1 -0
  176. package/node_modules/@murphai/device-syncd/dist/index.d.ts.map +1 -1
  177. package/node_modules/@murphai/device-syncd/dist/index.js +1 -0
  178. package/node_modules/@murphai/device-syncd/dist/index.js.map +1 -1
  179. package/node_modules/@murphai/device-syncd/dist/public-ingress.d.ts +2 -1
  180. package/node_modules/@murphai/device-syncd/dist/public-ingress.d.ts.map +1 -1
  181. package/node_modules/@murphai/device-syncd/dist/public-ingress.js +22 -12
  182. package/node_modules/@murphai/device-syncd/dist/public-ingress.js.map +1 -1
  183. package/node_modules/@murphai/device-syncd/dist/service.d.ts.map +1 -1
  184. package/node_modules/@murphai/device-syncd/dist/service.js +1 -1
  185. package/node_modules/@murphai/device-syncd/dist/service.js.map +1 -1
  186. package/node_modules/@murphai/device-syncd/dist/store/oauth-states.d.ts +2 -2
  187. package/node_modules/@murphai/device-syncd/dist/store/oauth-states.d.ts.map +1 -1
  188. package/node_modules/@murphai/device-syncd/dist/store/oauth-states.js +20 -4
  189. package/node_modules/@murphai/device-syncd/dist/store/oauth-states.js.map +1 -1
  190. package/node_modules/@murphai/device-syncd/dist/store/webhook-traces.d.ts +1 -1
  191. package/node_modules/@murphai/device-syncd/dist/store/webhook-traces.d.ts.map +1 -1
  192. package/node_modules/@murphai/device-syncd/dist/store/webhook-traces.js +18 -4
  193. package/node_modules/@murphai/device-syncd/dist/store/webhook-traces.js.map +1 -1
  194. package/node_modules/@murphai/device-syncd/dist/store.d.ts +2 -2
  195. package/node_modules/@murphai/device-syncd/dist/store.d.ts.map +1 -1
  196. package/node_modules/@murphai/device-syncd/dist/store.js +2 -2
  197. package/node_modules/@murphai/device-syncd/dist/store.js.map +1 -1
  198. package/node_modules/@murphai/device-syncd/dist/types.d.ts +12 -23
  199. package/node_modules/@murphai/device-syncd/dist/types.d.ts.map +1 -1
  200. package/node_modules/@murphai/device-syncd/dist/types.js.map +1 -1
  201. package/node_modules/@murphai/device-syncd/package.json +4 -0
  202. package/node_modules/@murphai/gateway-local/package.json +1 -1
  203. package/node_modules/@murphai/importers/package.json +1 -1
  204. package/node_modules/@murphai/inbox-services/package.json +1 -1
  205. package/node_modules/@murphai/inboxd/README.md +2 -1
  206. package/node_modules/@murphai/inboxd/dist/index.d.ts +1 -1
  207. package/node_modules/@murphai/inboxd/dist/index.d.ts.map +1 -1
  208. package/node_modules/@murphai/inboxd/dist/index.js +1 -1
  209. package/node_modules/@murphai/inboxd/dist/index.js.map +1 -1
  210. package/node_modules/@murphai/inboxd/dist/indexing/persist.d.ts +2 -26
  211. package/node_modules/@murphai/inboxd/dist/indexing/persist.d.ts.map +1 -1
  212. package/node_modules/@murphai/inboxd/dist/indexing/persist.js +245 -241
  213. package/node_modules/@murphai/inboxd/dist/indexing/persist.js.map +1 -1
  214. package/node_modules/@murphai/inboxd/dist/kernel/pipeline.js +1 -1
  215. package/node_modules/@murphai/inboxd/dist/kernel/pipeline.js.map +1 -1
  216. package/node_modules/@murphai/inboxd/package.json +1 -1
  217. package/node_modules/@murphai/operator-config/dist/assistant/provider-config.d.ts.map +1 -1
  218. package/node_modules/@murphai/operator-config/dist/assistant/provider-config.js +1 -2
  219. package/node_modules/@murphai/operator-config/dist/assistant/provider-config.js.map +1 -1
  220. package/node_modules/@murphai/operator-config/dist/assistant/redaction.d.ts +1 -0
  221. package/node_modules/@murphai/operator-config/dist/assistant/redaction.d.ts.map +1 -1
  222. package/node_modules/@murphai/operator-config/dist/assistant/redaction.js +8 -2
  223. package/node_modules/@murphai/operator-config/dist/assistant/redaction.js.map +1 -1
  224. package/node_modules/@murphai/operator-config/dist/assistant/target-runtime.d.ts +1 -1
  225. package/node_modules/@murphai/operator-config/dist/assistant/target-runtime.d.ts.map +1 -1
  226. package/node_modules/@murphai/operator-config/dist/assistant/target-runtime.js +36 -31
  227. package/node_modules/@murphai/operator-config/dist/assistant/target-runtime.js.map +1 -1
  228. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.d.ts +30 -40
  229. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.d.ts.map +1 -1
  230. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.js +28 -21
  231. package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.js.map +1 -1
  232. package/node_modules/@murphai/operator-config/dist/device-sync-client.d.ts +1 -22
  233. package/node_modules/@murphai/operator-config/dist/device-sync-client.d.ts.map +1 -1
  234. package/node_modules/@murphai/operator-config/dist/device-sync-client.js.map +1 -1
  235. package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.js +1 -1
  236. package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.js.map +1 -1
  237. package/node_modules/@murphai/operator-config/package.json +7 -2
  238. package/node_modules/@murphai/query/README.md +2 -0
  239. package/node_modules/@murphai/query/dist/automation.d.ts +1 -1
  240. package/node_modules/@murphai/query/dist/automation.d.ts.map +1 -1
  241. package/node_modules/@murphai/query/dist/automation.js +7 -8
  242. package/node_modules/@murphai/query/dist/automation.js.map +1 -1
  243. package/node_modules/@murphai/query/dist/entity-families.d.ts +2 -0
  244. package/node_modules/@murphai/query/dist/entity-families.d.ts.map +1 -0
  245. package/node_modules/@murphai/query/dist/entity-families.js +20 -0
  246. package/node_modules/@murphai/query/dist/entity-families.js.map +1 -0
  247. package/node_modules/@murphai/query/dist/health/bank-registry-query-metadata.d.ts +1 -3
  248. package/node_modules/@murphai/query/dist/health/bank-registry-query-metadata.d.ts.map +1 -1
  249. package/node_modules/@murphai/query/dist/health/bank-registry-query-metadata.js +1 -4
  250. package/node_modules/@murphai/query/dist/health/bank-registry-query-metadata.js.map +1 -1
  251. package/node_modules/@murphai/query/dist/health/registries.d.ts +6 -1
  252. package/node_modules/@murphai/query/dist/health/registries.d.ts.map +1 -1
  253. package/node_modules/@murphai/query/dist/health/registries.js.map +1 -1
  254. package/node_modules/@murphai/query/dist/index.d.ts +3 -1
  255. package/node_modules/@murphai/query/dist/index.d.ts.map +1 -1
  256. package/node_modules/@murphai/query/dist/index.js +2 -1
  257. package/node_modules/@murphai/query/dist/index.js.map +1 -1
  258. package/node_modules/@murphai/query/dist/meal-nutrition.d.ts +31 -0
  259. package/node_modules/@murphai/query/dist/meal-nutrition.d.ts.map +1 -0
  260. package/node_modules/@murphai/query/dist/meal-nutrition.js +127 -0
  261. package/node_modules/@murphai/query/dist/meal-nutrition.js.map +1 -0
  262. package/node_modules/@murphai/query/dist/model.d.ts +0 -1
  263. package/node_modules/@murphai/query/dist/model.d.ts.map +1 -1
  264. package/node_modules/@murphai/query/dist/model.js +1 -19
  265. package/node_modules/@murphai/query/dist/model.js.map +1 -1
  266. package/node_modules/@murphai/query/package.json +6 -1
  267. package/node_modules/@murphai/runtime-state/README.md +2 -1
  268. package/node_modules/@murphai/runtime-state/dist/assistant-ids.d.ts +3 -0
  269. package/node_modules/@murphai/runtime-state/dist/assistant-ids.d.ts.map +1 -0
  270. package/node_modules/@murphai/runtime-state/dist/assistant-ids.js +14 -0
  271. package/node_modules/@murphai/runtime-state/dist/assistant-ids.js.map +1 -0
  272. package/node_modules/@murphai/runtime-state/package.json +4 -0
  273. package/node_modules/@murphai/setup-cli/dist/setup-services/operator-defaults.d.ts +27 -0
  274. package/node_modules/@murphai/setup-cli/dist/setup-services/operator-defaults.d.ts.map +1 -0
  275. package/node_modules/@murphai/setup-cli/dist/setup-services/operator-defaults.js +92 -0
  276. package/node_modules/@murphai/setup-cli/dist/setup-services/operator-defaults.js.map +1 -0
  277. package/node_modules/@murphai/setup-cli/dist/setup-services/tool-provisioning.d.ts +29 -0
  278. package/node_modules/@murphai/setup-cli/dist/setup-services/tool-provisioning.d.ts.map +1 -0
  279. package/node_modules/@murphai/setup-cli/dist/setup-services/tool-provisioning.js +306 -0
  280. package/node_modules/@murphai/setup-cli/dist/setup-services/tool-provisioning.js.map +1 -0
  281. package/node_modules/@murphai/setup-cli/dist/setup-services.d.ts.map +1 -1
  282. package/node_modules/@murphai/setup-cli/dist/setup-services.js +20 -405
  283. package/node_modules/@murphai/setup-cli/dist/setup-services.js.map +1 -1
  284. package/node_modules/@murphai/vault-usecases/dist/query-runtime.d.ts +10 -3
  285. package/node_modules/@murphai/vault-usecases/dist/query-runtime.d.ts.map +1 -1
  286. package/node_modules/@murphai/vault-usecases/dist/query-runtime.js +1 -2
  287. package/node_modules/@murphai/vault-usecases/dist/query-runtime.js.map +1 -1
  288. package/node_modules/@murphai/vault-usecases/dist/runtime.d.ts +1 -1
  289. package/node_modules/@murphai/vault-usecases/dist/runtime.d.ts.map +1 -1
  290. package/node_modules/@murphai/vault-usecases/dist/runtime.js +1 -1
  291. package/node_modules/@murphai/vault-usecases/dist/runtime.js.map +1 -1
  292. package/node_modules/@murphai/vault-usecases/dist/usecases/food.d.ts +49 -12
  293. package/node_modules/@murphai/vault-usecases/dist/usecases/food.d.ts.map +1 -1
  294. package/node_modules/@murphai/vault-usecases/dist/usecases/food.js +20 -4
  295. package/node_modules/@murphai/vault-usecases/dist/usecases/food.js.map +1 -1
  296. package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.d.ts.map +1 -1
  297. package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.js +21 -2
  298. package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.js.map +1 -1
  299. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention.d.ts +2 -1
  300. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention.d.ts.map +1 -1
  301. package/node_modules/@murphai/vault-usecases/dist/usecases/intervention.js.map +1 -1
  302. package/node_modules/@murphai/vault-usecases/dist/usecases/types.d.ts +23 -2
  303. package/node_modules/@murphai/vault-usecases/dist/usecases/types.d.ts.map +1 -1
  304. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-measurement.d.ts +2 -2
  305. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-measurement.d.ts.map +1 -1
  306. package/node_modules/@murphai/vault-usecases/dist/usecases/workout-measurement.js.map +1 -1
  307. package/node_modules/@murphai/vault-usecases/dist/usecases/workout.d.ts +2 -2
  308. package/node_modules/@murphai/vault-usecases/dist/usecases/workout.d.ts.map +1 -1
  309. package/node_modules/@murphai/vault-usecases/dist/usecases/workout.js +73 -1
  310. package/node_modules/@murphai/vault-usecases/dist/usecases/workout.js.map +1 -1
  311. package/node_modules/@murphai/vault-usecases/package.json +1 -1
  312. package/package.json +4 -4
  313. package/dist/runner-vault-cli-bin.d.ts +0 -3
  314. package/dist/runner-vault-cli-bin.d.ts.map +0 -1
  315. package/dist/runner-vault-cli-bin.js +0 -8
  316. package/dist/runner-vault-cli-bin.js.map +0 -1
  317. package/dist/runner-vault-cli-command-manifest.d.ts +0 -9
  318. package/dist/runner-vault-cli-command-manifest.d.ts.map +0 -1
  319. package/dist/runner-vault-cli-command-manifest.js +0 -71
  320. package/dist/runner-vault-cli-command-manifest.js.map +0 -1
  321. package/dist/runner-vault-cli.d.ts +0 -10
  322. package/dist/runner-vault-cli.d.ts.map +0 -1
  323. package/dist/runner-vault-cli.js +0 -22
  324. package/dist/runner-vault-cli.js.map +0 -1
  325. package/node_modules/@murphai/core/dist/storage-spine.d.ts +0 -3
  326. package/node_modules/@murphai/core/dist/storage-spine.d.ts.map +0 -1
  327. package/node_modules/@murphai/core/dist/storage-spine.js +0 -3
  328. package/node_modules/@murphai/core/dist/storage-spine.js.map +0 -1
  329. package/node_modules/@murphai/operator-config/dist/assistant/state-ids.d.ts +0 -2
  330. package/node_modules/@murphai/operator-config/dist/assistant/state-ids.d.ts.map +0 -1
  331. package/node_modules/@murphai/operator-config/dist/assistant/state-ids.js +0 -7
  332. package/node_modules/@murphai/operator-config/dist/assistant/state-ids.js.map +0 -1
  333. package/node_modules/@murphai/query/dist/health/health-registry-query-metadata.d.ts +0 -3
  334. package/node_modules/@murphai/query/dist/health/health-registry-query-metadata.d.ts.map +0 -1
  335. package/node_modules/@murphai/query/dist/health/health-registry-query-metadata.js +0 -2
  336. package/node_modules/@murphai/query/dist/health/health-registry-query-metadata.js.map +0 -1
@@ -0,0 +1,201 @@
1
+ import * as z from 'zod';
2
+ import { createDefaultLocalAssistantModelTarget } from '@murphai/operator-config/assistant-backend';
3
+ import { resolveAssistantOperatorDefaults } from '@murphai/operator-config/operator-config';
4
+ import { VaultCliError } from '@murphai/operator-config/vault-cli-errors';
5
+ import { createAssistantRuntimeStateService } from './runtime-state-service.js';
6
+ import { normalizeAssistantExecutionContext } from './execution-context.js';
7
+ import { resolveAssistantSessionForMessage } from './session-resolution.js';
8
+ import { resolveAssistantTurnSharedPlan } from './turn-plan.js';
9
+ import { executeProviderTurnWithRecovery, } from './provider-turn-runner.js';
10
+ import { persistPendingAssistantUsageEvent } from './service-usage.js';
11
+ import { persistAssistantTurnAndSession } from './turn-finalizer.js';
12
+ import { resolveAssistantTurnRoutes } from './service-turn-routes.js';
13
+ import { prioritizeAssistantRoutesForRichUserMessageContent } from './rich-content-routing.js';
14
+ import { createAssistantTurnId } from './turns.js';
15
+ import { sanitizeAssistantOutboundReply } from './reply-sanitizer.js';
16
+ import { withAssistantTurnLock } from './turn-lock.js';
17
+ import { normalizeRequiredText } from './shared.js';
18
+ const assistantNotificationSkipDecisionSchema = z
19
+ .object({
20
+ kind: z.literal('skip'),
21
+ privateSummary: z.string().min(1),
22
+ })
23
+ .strict();
24
+ const assistantNotificationSendDecisionSchema = z
25
+ .object({
26
+ kind: z.literal('send_message'),
27
+ text: z.string().min(1),
28
+ privateSummary: z.string().min(1),
29
+ })
30
+ .strict();
31
+ const assistantNotificationDecisionSchema = z.discriminatedUnion('kind', [
32
+ assistantNotificationSkipDecisionSchema,
33
+ assistantNotificationSendDecisionSchema,
34
+ ]);
35
+ const ASSISTANT_NOTIFICATION_TURN_PROFILE = {
36
+ nativeResumePolicy: 'disabled',
37
+ promptProfile: 'notification-decision',
38
+ toolProfile: 'notification-turn',
39
+ };
40
+ export async function sendAssistantNotificationLocal(input) {
41
+ const executionContext = normalizeAssistantExecutionContext(input.executionContext);
42
+ const defaults = await resolveAssistantOperatorDefaults();
43
+ return withAssistantTurnLock({
44
+ abortSignal: input.abortSignal,
45
+ vault: input.vault,
46
+ run: async () => {
47
+ const messageInput = buildAssistantNotificationMessageInput(input);
48
+ const resolved = await resolveAssistantSessionForMessage({
49
+ boundaryDefaultTarget: createDefaultLocalAssistantModelTarget(),
50
+ defaults,
51
+ message: messageInput,
52
+ });
53
+ const sharedPlan = await resolveAssistantTurnSharedPlan(messageInput, resolved);
54
+ const routes = prioritizeAssistantRoutesForRichUserMessageContent({
55
+ routes: resolveAssistantTurnRoutes(messageInput, defaults, resolved),
56
+ userMessageContent: null,
57
+ });
58
+ const turnId = createAssistantTurnId();
59
+ const turnCreatedAt = new Date().toISOString();
60
+ const providerOutcome = await executeProviderTurnWithRecovery({
61
+ input: messageInput,
62
+ plan: sharedPlan,
63
+ profile: ASSISTANT_NOTIFICATION_TURN_PROFILE,
64
+ resolvedSession: resolved.session,
65
+ routes,
66
+ turnCreatedAt,
67
+ turnId,
68
+ });
69
+ if (providerOutcome.kind === 'failed_terminal') {
70
+ throw providerOutcome.error;
71
+ }
72
+ const providerResult = providerOutcome.providerTurn;
73
+ await persistPendingAssistantUsageEvent({
74
+ executionContext,
75
+ providerResult,
76
+ turnId,
77
+ vault: input.vault,
78
+ });
79
+ const decision = parseAssistantNotificationDecision(providerResult.response);
80
+ if (decision.kind === 'skip') {
81
+ return {
82
+ decision,
83
+ response: null,
84
+ session: providerResult.session,
85
+ };
86
+ }
87
+ const sanitizedResponse = normalizeRequiredText(sanitizeAssistantOutboundReply(decision.text, providerResult.session.binding.channel ?? input.channel ?? null), 'notification response');
88
+ const savedSession = await persistAssistantTurnAndSession({
89
+ assistantTranscriptText: sanitizedResponse,
90
+ input: messageInput,
91
+ plan: sharedPlan,
92
+ persistUserPromptToTranscript: false,
93
+ providerResult,
94
+ resumeStatePolicy: 'clear',
95
+ session: providerResult.session,
96
+ turnCreatedAt,
97
+ turnId,
98
+ });
99
+ await deliverAssistantNotificationMessage({
100
+ dedupeToken: input.deliveryDedupeToken ?? null,
101
+ input: messageInput,
102
+ message: sanitizedResponse,
103
+ session: savedSession,
104
+ sharedPlan,
105
+ turnId,
106
+ });
107
+ return {
108
+ decision: {
109
+ ...decision,
110
+ text: sanitizedResponse,
111
+ },
112
+ response: sanitizedResponse,
113
+ session: savedSession,
114
+ };
115
+ },
116
+ });
117
+ }
118
+ function buildAssistantNotificationMessageInput(input) {
119
+ const { instructions: _instructions, ...sessionInput } = input;
120
+ return {
121
+ ...sessionInput,
122
+ abortSignal: input.abortSignal,
123
+ codexCommand: input.codexCommand,
124
+ deliverResponse: true,
125
+ deliveryDispatchMode: input.deliveryDispatchMode,
126
+ deliveryReplyToMessageId: input.deliveryReplyToMessageId ?? null,
127
+ deliveryTarget: input.deliveryTarget ?? null,
128
+ executionContext: input.executionContext,
129
+ failoverRoutes: input.failoverRoutes,
130
+ includeFirstTurnCheckIn: false,
131
+ onProviderEvent: input.onProviderEvent ?? null,
132
+ onTraceEvent: input.onTraceEvent,
133
+ operatorAuthority: input.operatorAuthority,
134
+ persistUserPromptOnFailure: false,
135
+ prompt: normalizeRequiredText(input.instructions, 'instructions'),
136
+ showThinkingTraces: input.showThinkingTraces,
137
+ turnTrigger: input.turnTrigger ?? 'automation-cron',
138
+ userMessageContent: null,
139
+ workingDirectory: input.workingDirectory ?? input.vault,
140
+ };
141
+ }
142
+ async function deliverAssistantNotificationMessage(input) {
143
+ const state = createAssistantRuntimeStateService(input.input.vault);
144
+ const audience = input.sharedPlan.conversationPolicy.audience;
145
+ const outcome = await state.outbox.deliverMessage({
146
+ turnId: input.turnId,
147
+ sessionId: input.session.sessionId,
148
+ message: input.message,
149
+ dedupeToken: input.dedupeToken,
150
+ channel: audience.channel ?? input.session.binding.channel,
151
+ identityId: audience.identityId ?? input.session.binding.identityId,
152
+ actorId: audience.actorId ?? input.session.binding.actorId,
153
+ threadId: audience.threadId ?? input.session.binding.threadId,
154
+ threadIsDirect: audience.threadIsDirect ?? input.session.binding.threadIsDirect,
155
+ bindingDelivery: audience.bindingDelivery ?? input.session.binding.delivery,
156
+ explicitTarget: audience.explicitTarget ?? input.input.deliveryTarget ?? null,
157
+ replyToMessageId: audience.replyToMessageId ?? input.input.deliveryReplyToMessageId ?? null,
158
+ dispatchMode: input.input.deliveryDispatchMode,
159
+ });
160
+ switch (outcome.kind) {
161
+ case 'sent':
162
+ case 'queued':
163
+ return;
164
+ case 'failed':
165
+ throw outcome.deliveryError;
166
+ default:
167
+ throw new VaultCliError('ASSISTANT_DELIVERY_FAILED', 'Assistant outbound delivery did not complete successfully.');
168
+ }
169
+ }
170
+ export function parseAssistantNotificationDecision(value) {
171
+ const normalized = normalizeAssistantNotificationDecisionJson(value);
172
+ try {
173
+ return assistantNotificationDecisionSchema.parse(JSON.parse(normalized));
174
+ }
175
+ catch (error) {
176
+ const extracted = tryExtractAssistantNotificationDecisionObject(normalized);
177
+ if (!extracted) {
178
+ throw new VaultCliError('ASSISTANT_NOTIFICATION_INVALID_RESPONSE', 'Assistant notification turn must return a single valid JSON decision object.');
179
+ }
180
+ try {
181
+ return assistantNotificationDecisionSchema.parse(JSON.parse(extracted));
182
+ }
183
+ catch {
184
+ throw new VaultCliError('ASSISTANT_NOTIFICATION_INVALID_RESPONSE', 'Assistant notification turn returned an invalid decision object.');
185
+ }
186
+ }
187
+ }
188
+ function normalizeAssistantNotificationDecisionJson(value) {
189
+ const trimmed = value.trim();
190
+ const fenced = /^```(?:json)?\s*([\s\S]*?)\s*```$/iu.exec(trimmed);
191
+ return fenced?.[1]?.trim() ?? trimmed;
192
+ }
193
+ function tryExtractAssistantNotificationDecisionObject(value) {
194
+ const firstBrace = value.indexOf('{');
195
+ const lastBrace = value.lastIndexOf('}');
196
+ if (firstBrace === -1 || lastBrace === -1 || lastBrace < firstBrace) {
197
+ return null;
198
+ }
199
+ return value.slice(firstBrace, lastBrace + 1).trim();
200
+ }
201
+ //# sourceMappingURL=notification-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-turn.js","sourceRoot":"","sources":["../../src/assistant/notification-turn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { type AssistantChannelDelivery, type AssistantDeliveryError, type AssistantOutboxIntent } from '@murphai/operator-config/assistant-cli-contracts';
2
+ /**
3
+ * Dispatch-state owns the persisted outbox intent transitions that happen once
4
+ * delivery work begins, so outbox.ts can focus on API orchestration.
5
+ */
6
+ export declare function buildAssistantDeliveryIdempotencyKey(intent: Pick<AssistantOutboxIntent, 'intentId'>): string;
7
+ export declare function errorImpliesAssistantDeliveryMayHaveSucceeded(error: unknown): boolean;
8
+ export declare function persistAssistantOutboxIntentDeliveryPendingConfirmation(input: {
9
+ delivery: AssistantChannelDelivery;
10
+ deliveryTransportIdempotent: boolean;
11
+ intent: AssistantOutboxIntent;
12
+ intentPath: string;
13
+ vault: string;
14
+ }): Promise<AssistantOutboxIntent>;
15
+ export declare function markAssistantOutboxIntentSent(input: {
16
+ delivery: AssistantChannelDelivery;
17
+ intent: AssistantOutboxIntent;
18
+ intentPath: string;
19
+ preserveCurrentDispatchMetadata?: boolean;
20
+ vault: string;
21
+ }): Promise<AssistantOutboxIntent>;
22
+ export declare function updateAssistantOutboxAfterDispatchFailure(input: {
23
+ deliveryMayHaveSucceeded: boolean;
24
+ deliveryTransportIdempotent: boolean;
25
+ error: unknown;
26
+ failedAt: Date;
27
+ intentPath: string;
28
+ sending: AssistantOutboxIntent;
29
+ vault: string;
30
+ }): Promise<AssistantOutboxIntent>;
31
+ export declare function rescheduleAssistantOutboxConfirmationRetry(input: {
32
+ error: AssistantDeliveryError;
33
+ intentPath: string;
34
+ scheduledAt: Date;
35
+ sending: AssistantOutboxIntent;
36
+ vault: string;
37
+ }): Promise<AssistantOutboxIntent>;
38
+ //# sourceMappingURL=dispatch-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-state.d.ts","sourceRoot":"","sources":["../../../src/assistant/outbox/dispatch-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,kDAAkD,CAAA;AAczD;;;GAGG;AAEH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,GAC9C,MAAM,CAER;AAED,wBAAgB,6CAA6C,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAWrF;AAED,wBAAsB,uDAAuD,CAAC,KAAK,EAAE;IACnF,QAAQ,EAAE,wBAAwB,CAAA;IAClC,2BAA2B,EAAE,OAAO,CAAA;IACpC,MAAM,EAAE,qBAAqB,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAoBjC;AAED,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,QAAQ,EAAE,wBAAwB,CAAA;IAClC,MAAM,EAAE,qBAAqB,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAyEjC;AAED,wBAAsB,yCAAyC,CAAC,KAAK,EAAE;IACrE,wBAAwB,EAAE,OAAO,CAAA;IACjC,2BAA2B,EAAE,OAAO,CAAA;IACpC,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE,IAAI,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,qBAAqB,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAyEjC;AAED,wBAAsB,0CAA0C,CAAC,KAAK,EAAE;IACtE,KAAK,EAAE,sBAAsB,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,IAAI,CAAA;IACjB,OAAO,EAAE,qBAAqB,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAoBjC"}
@@ -0,0 +1,215 @@
1
+ import { assistantOutboxIntentSchema, } from '@murphai/operator-config/assistant-cli-contracts';
2
+ import { recordAssistantDiagnosticEvent } from '../diagnostics.js';
3
+ import { withAssistantRuntimeWriteLock } from '../runtime-write-lock.js';
4
+ import { ensureAssistantState } from '../store/persistence.js';
5
+ import { appendAssistantTurnReceiptEvent, updateAssistantTurnReceipt } from '../turns.js';
6
+ import { writeJsonFileAtomic } from '../shared.js';
7
+ import { createAssistantDeliveryConfirmationPendingError, isAssistantOutboxRetryableError, normalizeAssistantDeliveryError, resolveAssistantOutboxRetryDelayMs, } from './retry-policy.js';
8
+ import { readAssistantOutboxIntentAtPath } from './store.js';
9
+ /**
10
+ * Dispatch-state owns the persisted outbox intent transitions that happen once
11
+ * delivery work begins, so outbox.ts can focus on API orchestration.
12
+ */
13
+ export function buildAssistantDeliveryIdempotencyKey(intent) {
14
+ return `assistant-outbox:${intent.intentId}`;
15
+ }
16
+ export function errorImpliesAssistantDeliveryMayHaveSucceeded(error) {
17
+ if (typeof error === 'object' &&
18
+ error !== null &&
19
+ 'deliveryMayHaveSucceeded' in error &&
20
+ typeof error.deliveryMayHaveSucceeded === 'boolean') {
21
+ return error.deliveryMayHaveSucceeded;
22
+ }
23
+ return normalizeAssistantDeliveryError(error).code === 'ASSISTANT_DELIVERY_CONFIRMATION_PENDING';
24
+ }
25
+ export async function persistAssistantOutboxIntentDeliveryPendingConfirmation(input) {
26
+ return withAssistantRuntimeWriteLock(input.vault, async (paths) => {
27
+ await ensureAssistantState(paths);
28
+ const current = await readAssistantOutboxIntentAtPath(input.intentPath);
29
+ const baseIntent = current ?? input.intent;
30
+ const pendingIntent = assistantOutboxIntentSchema.parse({
31
+ ...baseIntent,
32
+ deliveryConfirmationPending: true,
33
+ deliveryTransportIdempotent: input.deliveryTransportIdempotent,
34
+ deliveryIdempotencyKey: input.delivery.idempotencyKey ?? baseIntent.deliveryIdempotencyKey,
35
+ updatedAt: input.delivery.sentAt,
36
+ nextAttemptAt: null,
37
+ status: 'sending',
38
+ delivery: input.delivery,
39
+ lastError: createAssistantDeliveryConfirmationPendingError(),
40
+ });
41
+ await writeJsonFileAtomic(input.intentPath, pendingIntent);
42
+ return pendingIntent;
43
+ });
44
+ }
45
+ export async function markAssistantOutboxIntentSent(input) {
46
+ const completedAt = input.delivery.sentAt;
47
+ return withAssistantRuntimeWriteLock(input.vault, async (paths) => {
48
+ await ensureAssistantState(paths);
49
+ const current = await readAssistantOutboxIntentAtPath(input.intentPath);
50
+ if (current?.status === 'sent' &&
51
+ current.delivery &&
52
+ sameAssistantChannelDelivery(current.delivery, input.delivery)) {
53
+ return current;
54
+ }
55
+ const baseIntent = input.preserveCurrentDispatchMetadata === false
56
+ ? input.intent
57
+ : current ?? input.intent;
58
+ const sentIntent = assistantOutboxIntentSchema.parse({
59
+ ...baseIntent,
60
+ deliveryConfirmationPending: false,
61
+ deliveryIdempotencyKey: input.delivery.idempotencyKey ?? baseIntent.deliveryIdempotencyKey,
62
+ updatedAt: completedAt,
63
+ nextAttemptAt: null,
64
+ sentAt: completedAt,
65
+ status: 'sent',
66
+ delivery: input.delivery,
67
+ lastError: null,
68
+ });
69
+ await writeJsonFileAtomic(input.intentPath, sentIntent);
70
+ await appendAssistantTurnReceiptEvent({
71
+ vault: input.vault,
72
+ turnId: sentIntent.turnId,
73
+ kind: 'delivery.sent',
74
+ detail: input.delivery.target,
75
+ metadata: {
76
+ intentId: sentIntent.intentId,
77
+ channel: input.delivery.channel,
78
+ target: input.delivery.target,
79
+ },
80
+ at: completedAt,
81
+ });
82
+ await updateAssistantTurnReceipt({
83
+ vault: input.vault,
84
+ turnId: sentIntent.turnId,
85
+ mutate(receipt) {
86
+ return {
87
+ ...receipt,
88
+ updatedAt: completedAt,
89
+ completedAt,
90
+ status: receipt.status === 'failed' ? 'failed' : 'completed',
91
+ deliveryDisposition: 'sent',
92
+ lastError: null,
93
+ };
94
+ },
95
+ });
96
+ await recordAssistantDiagnosticEvent({
97
+ vault: input.vault,
98
+ component: 'delivery',
99
+ kind: 'delivery.sent',
100
+ message: `Delivered outbound assistant reply over ${input.delivery.channel}.`,
101
+ sessionId: sentIntent.sessionId,
102
+ turnId: sentIntent.turnId,
103
+ intentId: sentIntent.intentId,
104
+ counterDeltas: {
105
+ deliveriesSent: 1,
106
+ },
107
+ at: completedAt,
108
+ });
109
+ return sentIntent;
110
+ });
111
+ }
112
+ export async function updateAssistantOutboxAfterDispatchFailure(input) {
113
+ const deliveryError = input.deliveryMayHaveSucceeded
114
+ ? createAssistantDeliveryConfirmationPendingError(input.error)
115
+ : normalizeAssistantDeliveryError(input.error);
116
+ const retryable = input.deliveryMayHaveSucceeded || isAssistantOutboxRetryableError(input.error);
117
+ return withAssistantRuntimeWriteLock(input.vault, async (paths) => {
118
+ await ensureAssistantState(paths);
119
+ const current = await readAssistantOutboxIntentAtPath(input.intentPath);
120
+ const attemptCount = current?.attemptCount ?? input.sending.attemptCount;
121
+ const failedAt = input.failedAt.toISOString();
122
+ const nextAttemptAt = retryable
123
+ ? buildAssistantOutboxRetryTimestamp(input.failedAt, attemptCount)
124
+ : null;
125
+ const failedIntent = assistantOutboxIntentSchema.parse({
126
+ ...(current ?? input.sending),
127
+ deliveryConfirmationPending: input.deliveryMayHaveSucceeded,
128
+ deliveryTransportIdempotent: input.deliveryMayHaveSucceeded
129
+ ? input.deliveryTransportIdempotent
130
+ : (current?.deliveryTransportIdempotent ?? input.sending.deliveryTransportIdempotent),
131
+ updatedAt: failedAt,
132
+ nextAttemptAt,
133
+ status: retryable ? 'retryable' : 'failed',
134
+ lastError: deliveryError,
135
+ });
136
+ await writeJsonFileAtomic(input.intentPath, failedIntent);
137
+ await appendAssistantTurnReceiptEvent({
138
+ vault: input.vault,
139
+ turnId: failedIntent.turnId,
140
+ kind: retryable ? 'delivery.retry-scheduled' : 'delivery.failed',
141
+ detail: deliveryError.message,
142
+ metadata: {
143
+ intentId: failedIntent.intentId,
144
+ retryable: retryable ? 'true' : 'false',
145
+ },
146
+ at: failedIntent.updatedAt,
147
+ });
148
+ await updateAssistantTurnReceipt({
149
+ vault: input.vault,
150
+ turnId: failedIntent.turnId,
151
+ mutate(receipt) {
152
+ return {
153
+ ...receipt,
154
+ updatedAt: failedIntent.updatedAt,
155
+ status: retryable ? 'deferred' : 'failed',
156
+ deliveryDisposition: retryable ? 'retryable' : 'failed',
157
+ lastError: deliveryError,
158
+ };
159
+ },
160
+ });
161
+ await recordAssistantDiagnosticEvent({
162
+ vault: input.vault,
163
+ component: retryable ? 'outbox' : 'delivery',
164
+ kind: retryable ? 'delivery.retry-scheduled' : 'delivery.failed',
165
+ message: deliveryError.message,
166
+ level: retryable ? 'warn' : 'error',
167
+ code: deliveryError.code,
168
+ sessionId: failedIntent.sessionId,
169
+ turnId: failedIntent.turnId,
170
+ intentId: failedIntent.intentId,
171
+ counterDeltas: retryable
172
+ ? {
173
+ deliveriesRetryable: 1,
174
+ outboxRetries: 1,
175
+ }
176
+ : {
177
+ deliveriesFailed: 1,
178
+ },
179
+ at: failedIntent.updatedAt,
180
+ });
181
+ return failedIntent;
182
+ });
183
+ }
184
+ export async function rescheduleAssistantOutboxConfirmationRetry(input) {
185
+ return withAssistantRuntimeWriteLock(input.vault, async (paths) => {
186
+ await ensureAssistantState(paths);
187
+ const current = await readAssistantOutboxIntentAtPath(input.intentPath);
188
+ const baseIntent = current ?? input.sending;
189
+ const scheduledAt = input.scheduledAt.toISOString();
190
+ const retryIntent = assistantOutboxIntentSchema.parse({
191
+ ...baseIntent,
192
+ deliveryConfirmationPending: true,
193
+ updatedAt: scheduledAt,
194
+ nextAttemptAt: buildAssistantOutboxRetryTimestamp(input.scheduledAt, baseIntent.attemptCount),
195
+ status: 'retryable',
196
+ lastError: input.error,
197
+ });
198
+ await writeJsonFileAtomic(input.intentPath, retryIntent);
199
+ return retryIntent;
200
+ });
201
+ }
202
+ function buildAssistantOutboxRetryTimestamp(at, attemptCount) {
203
+ return new Date(at.getTime() + resolveAssistantOutboxRetryDelayMs(attemptCount)).toISOString();
204
+ }
205
+ function sameAssistantChannelDelivery(left, right) {
206
+ return (left.channel === right.channel &&
207
+ left.idempotencyKey === right.idempotencyKey &&
208
+ left.target === right.target &&
209
+ left.targetKind === right.targetKind &&
210
+ left.sentAt === right.sentAt &&
211
+ left.messageLength === right.messageLength &&
212
+ left.providerMessageId === right.providerMessageId &&
213
+ left.providerThreadId === right.providerThreadId);
214
+ }
215
+ //# sourceMappingURL=dispatch-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-state.js","sourceRoot":"","sources":["../../../src/assistant/outbox/dispatch-state.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"retry-policy.d.ts","sourceRoot":"","sources":["../../../src/assistant/outbox/retry-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,kDAAkD,CAAA;AAMzD,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,IAAI,GACR,OAAO,CAiBT;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,IAAI,EACT,KAAK,EAAE,OAAO,GACb,OAAO,CAQT;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAkDvE;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,GACb,sBAAsB,CAexB;AAED,wBAAgB,kCAAkC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAM/E;AAED,wBAAgB,+CAA+C,CAC7D,KAAK,CAAC,EAAE,OAAO,GACd,sBAAsB,CAQxB"}
1
+ {"version":3,"file":"retry-policy.d.ts","sourceRoot":"","sources":["../../../src/assistant/outbox/retry-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,kDAAkD,CAAA;AA8BzD,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,IAAI,GACR,OAAO,CAiBT;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,IAAI,EACT,KAAK,EAAE,OAAO,GACb,OAAO,CAQT;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAevE;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,GACb,sBAAsB,CAKxB;AAED,wBAAgB,kCAAkC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAM/E;AAED,wBAAgB,+CAA+C,CAC7D,KAAK,CAAC,EAAE,OAAO,GACd,sBAAsB,CAQxB"}
@@ -2,6 +2,30 @@ import { assistantDeliveryErrorSchema, } from '@murphai/operator-config/assistan
2
2
  import { redactAssistantStateString } from '../redaction.js';
3
3
  const OUTBOX_RETRY_DELAYS_MS = [30_000, 120_000, 600_000, 1_800_000];
4
4
  const STALE_SENDING_AFTER_MS = 10 * 60 * 1000;
5
+ const NON_RETRYABLE_OUTBOX_ERROR_CODE_MARKERS = [
6
+ 'UNSUPPORTED',
7
+ 'INVALID',
8
+ 'TARGET_REQUIRED',
9
+ 'CHANNEL_REQUIRED',
10
+ ];
11
+ const RETRYABLE_OUTBOX_ERROR_CODE_MARKERS = [
12
+ 'REQUEST_FAILED',
13
+ 'DELIVERY_FAILED',
14
+ 'TIMEOUT',
15
+ 'CONNECTION',
16
+ 'UNAVAILABLE',
17
+ 'RATE',
18
+ 'LIMIT',
19
+ ];
20
+ const RETRYABLE_OUTBOX_ERROR_MESSAGE_MARKERS = [
21
+ 'timed out',
22
+ 'temporary',
23
+ 'retry',
24
+ 'rate limit',
25
+ 'too many requests',
26
+ 'connection',
27
+ 'network',
28
+ ];
5
29
  export function shouldDispatchAssistantOutboxIntent(intent, now) {
6
30
  switch (intent.status) {
7
31
  case 'pending':
@@ -29,56 +53,23 @@ export function shouldBeginAssistantOutboxDispatch(intent, now, force) {
29
53
  : shouldDispatchAssistantOutboxIntent(intent, now);
30
54
  }
31
55
  export function isAssistantOutboxRetryableError(error) {
32
- if (typeof error === 'object' &&
33
- error !== null &&
34
- 'context' in error &&
35
- typeof error.context === 'object' &&
36
- error.context !== null &&
37
- typeof error.context.retryable === 'boolean') {
38
- return error.context.retryable;
39
- }
40
- if (typeof error === 'object' &&
41
- error !== null &&
42
- 'retryable' in error &&
43
- typeof error.retryable === 'boolean') {
44
- return error.retryable;
56
+ const explicitRetryable = readAssistantOutboxRetryableFlag(error);
57
+ if (explicitRetryable !== null) {
58
+ return explicitRetryable;
45
59
  }
46
60
  const deliveryError = normalizeAssistantDeliveryError(error);
47
61
  const code = deliveryError.code?.toUpperCase() ?? '';
48
62
  const message = deliveryError.message.toLowerCase();
49
- if (code.endsWith('_REQUIRED') ||
50
- code.includes('UNSUPPORTED') ||
51
- code.includes('INVALID') ||
52
- code.includes('TARGET_REQUIRED') ||
53
- code.includes('CHANNEL_REQUIRED')) {
63
+ if (assistantOutboxErrorCodeLooksPermanent(code)) {
54
64
  return false;
55
65
  }
56
- return (code.includes('REQUEST_FAILED') ||
57
- code.includes('DELIVERY_FAILED') ||
58
- code.includes('TIMEOUT') ||
59
- code.includes('CONNECTION') ||
60
- code.includes('UNAVAILABLE') ||
61
- code.includes('RATE') ||
62
- code.includes('LIMIT') ||
63
- message.includes('timed out') ||
64
- message.includes('temporary') ||
65
- message.includes('retry') ||
66
- message.includes('rate limit') ||
67
- message.includes('too many requests') ||
68
- message.includes('connection') ||
69
- message.includes('network'));
66
+ return assistantOutboxErrorCodeLooksRetryable(code) ||
67
+ assistantOutboxErrorMessageLooksRetryable(message);
70
68
  }
71
69
  export function normalizeAssistantDeliveryError(error) {
72
70
  return assistantDeliveryErrorSchema.parse({
73
- code: typeof error === 'object' &&
74
- error !== null &&
75
- 'code' in error &&
76
- typeof error.code === 'string'
77
- ? error.code
78
- : null,
79
- message: redactAssistantStateString(error instanceof Error && error.message.trim().length > 0
80
- ? error.message
81
- : String(error)),
71
+ code: readStringProperty(error, 'code'),
72
+ message: redactAssistantStateString(resolveAssistantDeliveryErrorMessage(error)),
82
73
  });
83
74
  }
84
75
  export function resolveAssistantOutboxRetryDelayMs(attemptCount) {
@@ -93,4 +84,49 @@ export function createAssistantDeliveryConfirmationPendingError(cause) {
93
84
  : 'Assistant outbound delivery may have succeeded already and must be reconciled before resend.',
94
85
  });
95
86
  }
87
+ function readAssistantOutboxRetryableFlag(error) {
88
+ const contextRetryable = readBooleanProperty(readRecord(error)?.context, 'retryable');
89
+ if (contextRetryable !== null) {
90
+ return contextRetryable;
91
+ }
92
+ return readBooleanProperty(error, 'retryable');
93
+ }
94
+ function resolveAssistantDeliveryErrorMessage(error) {
95
+ return readNonEmptyStringProperty(error, 'message') ?? String(error);
96
+ }
97
+ function assistantOutboxErrorCodeLooksPermanent(code) {
98
+ return code.endsWith('_REQUIRED') || includesAny(code, NON_RETRYABLE_OUTBOX_ERROR_CODE_MARKERS);
99
+ }
100
+ function assistantOutboxErrorCodeLooksRetryable(code) {
101
+ return includesAny(code, RETRYABLE_OUTBOX_ERROR_CODE_MARKERS);
102
+ }
103
+ function assistantOutboxErrorMessageLooksRetryable(message) {
104
+ return includesAny(message, RETRYABLE_OUTBOX_ERROR_MESSAGE_MARKERS);
105
+ }
106
+ function includesAny(value, fragments) {
107
+ return fragments.some((fragment) => value.includes(fragment));
108
+ }
109
+ function readRecord(value) {
110
+ return typeof value === 'object' && value !== null
111
+ ? value
112
+ : null;
113
+ }
114
+ function readBooleanProperty(value, property) {
115
+ const record = readRecord(value);
116
+ return record && typeof record[property] === 'boolean'
117
+ ? record[property]
118
+ : null;
119
+ }
120
+ function readStringProperty(value, property) {
121
+ const record = readRecord(value);
122
+ return record && typeof record[property] === 'string'
123
+ ? record[property]
124
+ : null;
125
+ }
126
+ function readNonEmptyStringProperty(value, property) {
127
+ const propertyValue = readStringProperty(value, property);
128
+ return propertyValue && propertyValue.trim().length > 0
129
+ ? propertyValue
130
+ : null;
131
+ }
96
132
  //# sourceMappingURL=retry-policy.js.map