@ouro.bot/cli 0.1.0-alpha.70 → 0.1.0-alpha.700

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 (501) hide show
  1. package/README.md +133 -23
  2. package/RepairGuide.ouro/agent.json +5 -0
  3. package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
  4. package/RepairGuide.ouro/psyche/SOUL.md +55 -0
  5. package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
  6. package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
  7. package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
  8. package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
  9. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
  10. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  12. package/changelog.json +4454 -14
  13. package/dist/a2a/card.js +57 -0
  14. package/dist/a2a/client.js +180 -0
  15. package/dist/a2a/config.js +50 -0
  16. package/dist/a2a/delegation-stores.js +56 -0
  17. package/dist/a2a/did-resolution.js +93 -0
  18. package/dist/a2a/identity.js +170 -0
  19. package/dist/a2a/inbound-share.js +107 -0
  20. package/dist/a2a/mission-result-wire.js +196 -0
  21. package/dist/a2a/onboarding.js +115 -0
  22. package/dist/a2a/pin-store.js +132 -0
  23. package/dist/a2a/seen-ledger.js +120 -0
  24. package/dist/a2a/server.js +604 -0
  25. package/dist/a2a/task-store.js +69 -0
  26. package/dist/a2a/transport.js +45 -0
  27. package/dist/a2a/types.js +3 -0
  28. package/dist/arc/attention-types.js +8 -0
  29. package/dist/arc/cares.js +144 -0
  30. package/dist/arc/episodes.js +118 -0
  31. package/dist/arc/evolution.js +490 -0
  32. package/dist/arc/flight-recorder.js +928 -0
  33. package/dist/arc/intentions.js +134 -0
  34. package/dist/arc/json-store.js +117 -0
  35. package/dist/arc/obligations.js +348 -0
  36. package/dist/arc/packets.js +336 -0
  37. package/dist/arc/presence.js +185 -0
  38. package/dist/arc/task-lifecycle.js +57 -0
  39. package/dist/commerce/store.js +755 -0
  40. package/dist/commerce/types.js +3 -0
  41. package/dist/heart/active-work.js +867 -43
  42. package/dist/heart/agent-entry.js +190 -3
  43. package/dist/heart/attachments/image-normalize.js +194 -0
  44. package/dist/heart/attachments/materialize.js +97 -0
  45. package/dist/heart/attachments/originals.js +88 -0
  46. package/dist/heart/attachments/render.js +29 -0
  47. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  48. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  49. package/dist/heart/attachments/sources/index.js +16 -0
  50. package/dist/heart/attachments/store.js +103 -0
  51. package/dist/heart/attachments/types.js +93 -0
  52. package/dist/heart/auth/auth-flow.js +479 -0
  53. package/dist/heart/autonomy-budget.js +434 -0
  54. package/dist/heart/awaiting/await-alert.js +146 -0
  55. package/dist/heart/awaiting/await-expiry.js +108 -0
  56. package/dist/heart/awaiting/await-loader.js +91 -0
  57. package/dist/heart/awaiting/await-parser.js +141 -0
  58. package/dist/heart/awaiting/await-runtime-state.js +100 -0
  59. package/dist/heart/awaiting/await-scheduler.js +378 -0
  60. package/dist/heart/background-operations.js +281 -0
  61. package/dist/heart/bridges/manager.js +137 -17
  62. package/dist/heart/bridges/store.js +14 -2
  63. package/dist/heart/bundle-state.js +168 -0
  64. package/dist/heart/commitments.js +135 -0
  65. package/dist/heart/config-registry.js +331 -0
  66. package/dist/heart/config.js +119 -127
  67. package/dist/heart/context-loss-gauntlet.js +354 -0
  68. package/dist/heart/context-loss-sentinel.js +1155 -0
  69. package/dist/heart/core.js +1306 -278
  70. package/dist/heart/cross-chat-delivery.js +8 -22
  71. package/dist/heart/daemon/agent-config-check.js +451 -0
  72. package/dist/heart/daemon/agent-discovery.js +185 -3
  73. package/dist/heart/daemon/agent-service.js +523 -0
  74. package/dist/heart/daemon/agentic-repair.js +547 -0
  75. package/dist/heart/daemon/await-private-wake.js +59 -0
  76. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  77. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  78. package/dist/heart/daemon/cadence.js +180 -0
  79. package/dist/heart/daemon/cli-defaults.js +780 -0
  80. package/dist/heart/daemon/cli-desk.js +322 -0
  81. package/dist/heart/daemon/cli-exec.js +8142 -0
  82. package/dist/heart/daemon/cli-help.js +675 -0
  83. package/dist/heart/daemon/cli-parse.js +2461 -0
  84. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  85. package/dist/heart/daemon/cli-render.js +770 -0
  86. package/dist/heart/daemon/cli-types.js +8 -0
  87. package/dist/heart/daemon/connect-bay.js +323 -0
  88. package/dist/heart/daemon/daemon-cli.js +29 -1930
  89. package/dist/heart/daemon/daemon-entry.js +822 -10
  90. package/dist/heart/daemon/daemon-health.js +176 -0
  91. package/dist/heart/daemon/daemon-rollup.js +57 -0
  92. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  93. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  94. package/dist/heart/daemon/daemon.js +1264 -84
  95. package/dist/heart/daemon/dns-workflow.js +394 -0
  96. package/dist/heart/daemon/doctor-types.js +8 -0
  97. package/dist/heart/daemon/doctor.js +1126 -0
  98. package/dist/heart/daemon/habit-private-wake.js +56 -0
  99. package/dist/heart/daemon/health-monitor.js +142 -11
  100. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  101. package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
  102. package/dist/heart/daemon/http-health-probe.js +80 -0
  103. package/dist/heart/daemon/human-command-screens.js +234 -0
  104. package/dist/heart/daemon/human-readiness.js +114 -0
  105. package/dist/heart/daemon/inner-status.js +78 -0
  106. package/dist/heart/daemon/interactive-repair.js +394 -0
  107. package/dist/heart/daemon/launchd.js +37 -8
  108. package/dist/heart/daemon/log-tailer.js +79 -10
  109. package/dist/heart/daemon/logs-prune.js +110 -0
  110. package/dist/heart/daemon/mcp-canary.js +297 -0
  111. package/dist/heart/daemon/message-router.js +45 -5
  112. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  113. package/dist/heart/daemon/os-cron-deps.js +135 -0
  114. package/dist/heart/daemon/os-cron.js +22 -14
  115. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  116. package/dist/heart/daemon/ouro-entry.js +3 -1
  117. package/dist/heart/daemon/plugin-cli.js +432 -0
  118. package/dist/heart/daemon/process-manager.js +519 -40
  119. package/dist/heart/daemon/provider-discovery.js +137 -0
  120. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  121. package/dist/heart/daemon/pulse.js +511 -0
  122. package/dist/heart/daemon/readiness-repair.js +365 -0
  123. package/dist/heart/daemon/run-hooks.js +2 -0
  124. package/dist/heart/daemon/runtime-logging.js +41 -14
  125. package/dist/heart/daemon/runtime-metadata.js +2 -30
  126. package/dist/heart/daemon/safe-mode.js +161 -0
  127. package/dist/heart/daemon/sense-manager.js +670 -48
  128. package/dist/heart/daemon/session-id-resolver.js +131 -0
  129. package/dist/heart/daemon/skill-management-installer.js +1 -1
  130. package/dist/heart/daemon/socket-client.js +171 -12
  131. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  132. package/dist/heart/daemon/startup-tui.js +338 -0
  133. package/dist/heart/daemon/task-scheduler.js +117 -39
  134. package/dist/heart/daemon/terminal-ui.js +499 -0
  135. package/dist/heart/daemon/thoughts.js +255 -43
  136. package/dist/heart/daemon/up-progress.js +366 -0
  137. package/dist/heart/daemon/vault-items.js +56 -0
  138. package/dist/heart/delegation.js +1 -4
  139. package/dist/heart/external-events/router.js +121 -0
  140. package/dist/heart/habits/habit-migration.js +189 -0
  141. package/dist/heart/habits/habit-parser.js +214 -0
  142. package/dist/heart/habits/habit-runtime-state.js +114 -0
  143. package/dist/heart/habits/habit-scheduler.js +431 -0
  144. package/dist/heart/habits/habit-session-summary.js +318 -0
  145. package/dist/heart/habits/habit-session.js +617 -0
  146. package/dist/heart/{daemon → hatch}/hatch-flow.js +51 -60
  147. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  148. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  149. package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
  150. package/dist/heart/identity.js +174 -59
  151. package/dist/heart/kept-notes.js +289 -0
  152. package/dist/heart/kicks.js +1 -1
  153. package/dist/heart/machine-identity.js +161 -0
  154. package/dist/heart/mail-import-discovery.js +353 -0
  155. package/dist/heart/mailbox/mailbox-http-hooks.js +96 -0
  156. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  157. package/dist/heart/mailbox/mailbox-http-routes.js +375 -0
  158. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  159. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  160. package/dist/heart/mailbox/mailbox-http.js +99 -0
  161. package/dist/heart/mailbox/mailbox-read.js +37 -0
  162. package/dist/heart/mailbox/mailbox-types.js +27 -0
  163. package/dist/heart/mailbox/mailbox-view.js +197 -0
  164. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  165. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  166. package/dist/heart/mailbox/readers/mail.js +375 -0
  167. package/dist/heart/mailbox/readers/runtime-readers.js +815 -0
  168. package/dist/heart/mailbox/readers/sessions.js +232 -0
  169. package/dist/heart/mailbox/readers/shared.js +111 -0
  170. package/dist/heart/mcp/mcp-server.js +696 -0
  171. package/dist/heart/migrate-config.js +100 -0
  172. package/dist/heart/model-capabilities.js +11 -0
  173. package/dist/heart/orientation-frame.js +217 -0
  174. package/dist/heart/platform.js +81 -0
  175. package/dist/heart/primitives.js +1 -1
  176. package/dist/heart/private-runtime/decision-renderer.js +156 -0
  177. package/dist/heart/private-runtime/index.js +18 -0
  178. package/dist/heart/private-runtime/ledger.js +218 -0
  179. package/dist/heart/private-runtime/policy.js +214 -0
  180. package/dist/heart/private-runtime/types.js +2 -0
  181. package/dist/heart/progress-story.js +1 -1
  182. package/dist/heart/provider-attempt.js +134 -0
  183. package/dist/heart/provider-binding-resolver.js +273 -0
  184. package/dist/heart/provider-credentials.js +441 -0
  185. package/dist/heart/provider-failover.js +311 -0
  186. package/dist/heart/provider-models.js +81 -0
  187. package/dist/heart/provider-ping.js +262 -0
  188. package/dist/heart/provider-readiness-cache.js +119 -0
  189. package/dist/heart/provider-visibility.js +188 -0
  190. package/dist/heart/providers/anthropic-token.js +131 -0
  191. package/dist/heart/providers/anthropic.js +139 -52
  192. package/dist/heart/providers/azure.js +23 -11
  193. package/dist/heart/providers/error-classification.js +127 -0
  194. package/dist/heart/providers/github-copilot.js +34 -38
  195. package/dist/heart/providers/minimax-vlm.js +189 -0
  196. package/dist/heart/providers/minimax.js +26 -8
  197. package/dist/heart/providers/openai-codex-token.js +349 -0
  198. package/dist/heart/providers/openai-codex.js +55 -40
  199. package/dist/heart/run-ledger.js +247 -0
  200. package/dist/heart/runtime-capability-check.js +170 -0
  201. package/dist/heart/runtime-credentials.js +398 -0
  202. package/dist/heart/runtime-cwd.js +87 -0
  203. package/dist/heart/sense-truth.js +20 -4
  204. package/dist/heart/session-activity.js +90 -24
  205. package/dist/heart/session-events.js +1133 -0
  206. package/dist/heart/session-playback-cli-main.js +5 -0
  207. package/dist/heart/session-playback-cli.js +36 -0
  208. package/dist/heart/session-playback.js +231 -0
  209. package/dist/heart/session-stats-cli-main.js +5 -0
  210. package/dist/heart/session-stats.js +182 -0
  211. package/dist/heart/session-transcript.js +133 -0
  212. package/dist/heart/start-of-turn-packet.js +365 -0
  213. package/dist/heart/streaming.js +44 -27
  214. package/dist/heart/structured-output.js +196 -0
  215. package/dist/heart/sync-classification.js +176 -0
  216. package/dist/heart/sync.js +449 -0
  217. package/dist/heart/target-resolution.js +11 -7
  218. package/dist/heart/tempo.js +93 -0
  219. package/dist/heart/temporal-view.js +41 -0
  220. package/dist/heart/timeouts.js +101 -0
  221. package/dist/heart/tool-activity-callbacks.js +59 -0
  222. package/dist/heart/tool-description.js +155 -0
  223. package/dist/heart/tool-friction.js +55 -0
  224. package/dist/heart/tool-loop.js +200 -0
  225. package/dist/heart/turn-context.js +472 -0
  226. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  227. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  228. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  229. package/dist/heart/versioning/ouro-version-manager.js +409 -0
  230. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  231. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  232. package/dist/heart/versioning/update-hooks.js +154 -0
  233. package/dist/heart/work-card.js +380 -0
  234. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  235. package/dist/mailbox-ui/assets/index-J8zDwHmE.js +1 -0
  236. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  237. package/dist/mailbox-ui/index.html +16 -0
  238. package/dist/mailroom/attention.js +167 -0
  239. package/dist/mailroom/autonomy.js +209 -0
  240. package/dist/mailroom/blob-store.js +715 -0
  241. package/dist/mailroom/body-cache.js +61 -0
  242. package/dist/mailroom/core.js +788 -0
  243. package/dist/mailroom/entry.js +160 -0
  244. package/dist/mailroom/file-store.js +568 -0
  245. package/dist/mailroom/mbox-import.js +393 -0
  246. package/dist/mailroom/migration.js +164 -0
  247. package/dist/mailroom/outbound.js +380 -0
  248. package/dist/mailroom/policy.js +263 -0
  249. package/dist/mailroom/reader.js +233 -0
  250. package/dist/mailroom/search-cache.js +334 -0
  251. package/dist/mailroom/search-relevance.js +319 -0
  252. package/dist/mailroom/smtp-ingress.js +176 -0
  253. package/dist/mailroom/source-state.js +176 -0
  254. package/dist/mailroom/thread.js +109 -0
  255. package/dist/mailroom/travel-extract.js +89 -0
  256. package/dist/mind/bundle-manifest.js +24 -2
  257. package/dist/mind/context.js +250 -101
  258. package/dist/mind/desk-section.js +362 -0
  259. package/dist/mind/diary-integrity.js +60 -0
  260. package/dist/mind/{memory.js → diary.js} +68 -77
  261. package/dist/mind/embedding-provider.js +60 -0
  262. package/dist/mind/file-state.js +179 -0
  263. package/dist/mind/{associative-recall.js → note-search.js} +47 -58
  264. package/dist/mind/obligation-steering.js +221 -0
  265. package/dist/mind/pending.js +13 -8
  266. package/dist/mind/prompt-budget.js +380 -0
  267. package/dist/mind/prompt-refresh.js +3 -2
  268. package/dist/mind/prompt.js +1028 -169
  269. package/dist/mind/provenance-trust.js +26 -0
  270. package/dist/mind/record-paths.js +312 -0
  271. package/dist/mind/scrutiny.js +173 -0
  272. package/dist/nerves/cli-logging.js +7 -1
  273. package/dist/nerves/coverage/audit-rules.js +15 -6
  274. package/dist/nerves/coverage/audit.js +28 -2
  275. package/dist/nerves/coverage/cli.js +1 -1
  276. package/dist/nerves/coverage/contract.js +5 -5
  277. package/dist/nerves/coverage/file-completeness.js +139 -5
  278. package/dist/nerves/event-buffer.js +111 -0
  279. package/dist/nerves/index.js +234 -4
  280. package/dist/nerves/observation.js +20 -0
  281. package/dist/nerves/redact.js +79 -0
  282. package/dist/nerves/review/cli-main.js +5 -0
  283. package/dist/nerves/review/cli.js +156 -0
  284. package/dist/nerves/review/core.js +152 -0
  285. package/dist/nerves/runtime.js +5 -1
  286. package/dist/repertoire/ado-client.js +15 -56
  287. package/dist/repertoire/ado-semantic.js +16 -10
  288. package/dist/repertoire/api-client.js +97 -0
  289. package/dist/repertoire/bitwarden-store.js +1042 -0
  290. package/dist/repertoire/bundle-templates.js +71 -0
  291. package/dist/repertoire/bw-installer.js +180 -0
  292. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  293. package/dist/repertoire/coding/context-pack.js +331 -0
  294. package/dist/repertoire/coding/feedback.js +218 -30
  295. package/dist/repertoire/coding/index.js +15 -3
  296. package/dist/repertoire/coding/manager.js +166 -10
  297. package/dist/repertoire/coding/spawner.js +58 -11
  298. package/dist/repertoire/coding/tools.js +242 -14
  299. package/dist/repertoire/coding/workbench-client.js +272 -0
  300. package/dist/repertoire/coding/workbench-manager.js +346 -0
  301. package/dist/repertoire/commerce-errors.js +109 -0
  302. package/dist/repertoire/commerce-self-test.js +156 -0
  303. package/dist/repertoire/credential-access.js +178 -0
  304. package/dist/repertoire/desk/classifier.js +362 -0
  305. package/dist/repertoire/duffel-client.js +185 -0
  306. package/dist/repertoire/github-client.js +14 -55
  307. package/dist/repertoire/graph-client.js +11 -52
  308. package/dist/repertoire/guardrails.js +156 -27
  309. package/dist/repertoire/mcp-client.js +44 -3
  310. package/dist/repertoire/mcp-manager.js +259 -20
  311. package/dist/repertoire/mcp-tools.js +83 -0
  312. package/dist/repertoire/plugin-mcp.js +175 -0
  313. package/dist/repertoire/plugins.js +253 -0
  314. package/dist/repertoire/shell-sessions.js +133 -0
  315. package/dist/repertoire/skills.js +48 -4
  316. package/dist/repertoire/stripe-client.js +131 -0
  317. package/dist/repertoire/tool-results.js +29 -0
  318. package/dist/repertoire/tools-a2a.js +699 -0
  319. package/dist/repertoire/tools-attachments.js +317 -0
  320. package/dist/repertoire/tools-awaiting.js +372 -0
  321. package/dist/repertoire/tools-base.js +65 -1095
  322. package/dist/repertoire/tools-bluebubbles.js +2 -0
  323. package/dist/repertoire/tools-bridge.js +144 -0
  324. package/dist/repertoire/tools-bundle.js +993 -0
  325. package/dist/repertoire/tools-commerce.js +253 -0
  326. package/dist/repertoire/tools-config.js +186 -0
  327. package/dist/repertoire/tools-continuity.js +252 -0
  328. package/dist/repertoire/tools-credential.js +383 -0
  329. package/dist/repertoire/tools-evolution.js +527 -0
  330. package/dist/repertoire/tools-files.js +344 -0
  331. package/dist/repertoire/tools-flight.js +290 -0
  332. package/dist/repertoire/tools-flow.js +119 -0
  333. package/dist/repertoire/tools-github.js +3 -8
  334. package/dist/repertoire/tools-mail.js +1975 -0
  335. package/dist/repertoire/tools-notes.js +459 -0
  336. package/dist/repertoire/tools-obligations.js +182 -0
  337. package/dist/repertoire/tools-orientation.js +31 -0
  338. package/dist/repertoire/tools-record.js +482 -0
  339. package/dist/repertoire/tools-rsvp.js +139 -0
  340. package/dist/repertoire/tools-runtime.js +150 -0
  341. package/dist/repertoire/tools-session.js +881 -0
  342. package/dist/repertoire/tools-shell.js +120 -0
  343. package/dist/repertoire/tools-stripe.js +224 -0
  344. package/dist/repertoire/tools-surface.js +355 -0
  345. package/dist/repertoire/tools-teams.js +12 -39
  346. package/dist/repertoire/tools-travel.js +125 -0
  347. package/dist/repertoire/tools-trip.js +982 -0
  348. package/dist/repertoire/tools-user-profile.js +146 -0
  349. package/dist/repertoire/tools-vault.js +40 -0
  350. package/dist/repertoire/tools-voice.js +145 -0
  351. package/dist/repertoire/tools.js +250 -80
  352. package/dist/repertoire/travel-api-client.js +360 -0
  353. package/dist/repertoire/user-profile.js +131 -0
  354. package/dist/repertoire/vault-setup.js +246 -0
  355. package/dist/repertoire/vault-unlock.js +594 -0
  356. package/dist/rsvp/aisleplanner-client.js +354 -0
  357. package/dist/rsvp/cli.js +704 -0
  358. package/dist/rsvp/config.js +327 -0
  359. package/dist/rsvp/cutover.js +431 -0
  360. package/dist/rsvp/diagnostics.js +222 -0
  361. package/dist/rsvp/diff-renderer.js +161 -0
  362. package/dist/rsvp/habit-policy.js +85 -0
  363. package/dist/rsvp/habit-stage.js +93 -0
  364. package/dist/rsvp/incident-bundle.js +97 -0
  365. package/dist/rsvp/migration.js +204 -0
  366. package/dist/rsvp/outbound-state.js +254 -0
  367. package/dist/rsvp/query.js +118 -0
  368. package/dist/rsvp/replay.js +233 -0
  369. package/dist/rsvp/snapshot.js +232 -0
  370. package/dist/scripts/claude-code-hook.js +41 -0
  371. package/dist/scripts/claude-code-stop-hook.js +47 -0
  372. package/dist/senses/a2a-entry.js +115 -0
  373. package/dist/senses/attention-queue.js +186 -0
  374. package/dist/senses/await-turn-message.js +58 -0
  375. package/dist/senses/bluebubbles/active-turns.js +216 -0
  376. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  377. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  378. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +226 -19
  379. package/dist/senses/bluebubbles/entry.js +77 -0
  380. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  381. package/dist/senses/bluebubbles/index.js +2937 -0
  382. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  383. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  384. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  385. package/dist/senses/bluebubbles/outbound-state.js +304 -0
  386. package/dist/senses/bluebubbles/processed-log.js +133 -0
  387. package/dist/senses/bluebubbles/replay.js +284 -0
  388. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  389. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  390. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  391. package/dist/senses/cli/bracketed-paste.js +82 -0
  392. package/dist/senses/cli/image-paste.js +287 -0
  393. package/dist/senses/cli/image-ref-navigation.js +75 -0
  394. package/dist/senses/cli/ink-app.js +156 -0
  395. package/dist/senses/cli/inline-diff.js +64 -0
  396. package/dist/senses/cli/input-keys.js +174 -0
  397. package/dist/senses/cli/kill-ring.js +86 -0
  398. package/dist/senses/cli/message-list.js +51 -0
  399. package/dist/senses/cli/ouro-tui.js +607 -0
  400. package/dist/senses/cli/spinner-imperative.js +135 -0
  401. package/dist/senses/cli/spinner.js +101 -0
  402. package/dist/senses/cli/status-line.js +60 -0
  403. package/dist/senses/cli/streaming-markdown.js +526 -0
  404. package/dist/senses/cli/tool-display.js +85 -0
  405. package/dist/senses/cli/tool-render.js +85 -0
  406. package/dist/senses/cli/tui-store.js +240 -0
  407. package/dist/senses/cli/virtual-list.js +35 -0
  408. package/dist/senses/cli-entry.js +60 -8
  409. package/dist/senses/cli-layout.js +100 -0
  410. package/dist/senses/cli.js +521 -214
  411. package/dist/senses/commands.js +66 -3
  412. package/dist/senses/context-packet-ledger.js +245 -0
  413. package/dist/senses/context-packets.js +154 -0
  414. package/dist/senses/habit-turn-message.js +160 -0
  415. package/dist/senses/mail-entry.js +66 -0
  416. package/dist/senses/mail.js +395 -0
  417. package/dist/senses/pipeline.js +952 -178
  418. package/dist/senses/private-runtime-worker.js +723 -0
  419. package/dist/senses/private-runtime.js +1157 -0
  420. package/dist/senses/proactive-content-guard.js +51 -0
  421. package/dist/senses/shared-turn.js +416 -0
  422. package/dist/senses/surface-tool.js +109 -0
  423. package/dist/senses/teams-entry.js +60 -8
  424. package/dist/senses/teams.js +397 -112
  425. package/dist/senses/trust-gate.js +104 -9
  426. package/dist/senses/voice/audio-playback.js +237 -0
  427. package/dist/senses/voice/audio-routing.js +119 -0
  428. package/dist/senses/voice/elevenlabs.js +202 -0
  429. package/dist/senses/voice/floor-control.js +431 -0
  430. package/dist/senses/voice/floor-controller.js +115 -0
  431. package/dist/senses/voice/golden-path.js +116 -0
  432. package/dist/senses/voice/index.js +29 -0
  433. package/dist/senses/voice/meeting.js +113 -0
  434. package/dist/senses/voice/outbound.js +190 -0
  435. package/dist/senses/voice/phone.js +33 -0
  436. package/dist/senses/voice/playback.js +139 -0
  437. package/dist/senses/voice/realtime-eval.js +496 -0
  438. package/dist/senses/voice/realtime-trace.js +531 -0
  439. package/dist/senses/voice/transcript.js +70 -0
  440. package/dist/senses/voice/turn.js +191 -0
  441. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  442. package/dist/senses/voice/twilio-phone.js +5081 -0
  443. package/dist/senses/voice/types.js +2 -0
  444. package/dist/senses/voice/whisper.js +161 -0
  445. package/dist/senses/voice-entry.js +81 -0
  446. package/dist/senses/voice-realtime-eval-command.js +99 -0
  447. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  448. package/dist/senses/voice-twilio-entry.js +87 -0
  449. package/dist/trips/core.js +138 -0
  450. package/dist/trips/store.js +265 -0
  451. package/dist/util/frontmatter.js +69 -0
  452. package/package.json +57 -12
  453. package/skills/agent-commerce.md +113 -0
  454. package/skills/browser-navigation.md +117 -0
  455. package/skills/commerce-setup-guide.md +116 -0
  456. package/skills/commerce-setup.md +84 -0
  457. package/skills/configure-dev-tools.md +99 -0
  458. package/skills/travel-planning.md +138 -0
  459. package/dist/heart/daemon/auth-flow.js +0 -409
  460. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  461. package/dist/heart/daemon/update-hooks.js +0 -138
  462. package/dist/heart/safe-workspace.js +0 -228
  463. package/dist/heart/session-recall.js +0 -116
  464. package/dist/mind/friends/channel.js +0 -84
  465. package/dist/mind/friends/group-context.js +0 -144
  466. package/dist/mind/friends/resolver.js +0 -84
  467. package/dist/mind/friends/store-file.js +0 -190
  468. package/dist/mind/friends/store.js +0 -4
  469. package/dist/mind/friends/tokens.js +0 -26
  470. package/dist/mind/friends/trust-explanation.js +0 -74
  471. package/dist/mind/friends/types.js +0 -29
  472. package/dist/repertoire/tasks/board.js +0 -134
  473. package/dist/repertoire/tasks/index.js +0 -224
  474. package/dist/repertoire/tasks/lifecycle.js +0 -80
  475. package/dist/repertoire/tasks/middleware.js +0 -65
  476. package/dist/repertoire/tasks/parser.js +0 -173
  477. package/dist/repertoire/tasks/scanner.js +0 -132
  478. package/dist/repertoire/tasks/transitions.js +0 -144
  479. package/dist/senses/bluebubbles-entry.js +0 -13
  480. package/dist/senses/bluebubbles.js +0 -1180
  481. package/dist/senses/debug-activity.js +0 -148
  482. package/dist/senses/inner-dialog-worker.js +0 -90
  483. package/dist/senses/inner-dialog.js +0 -480
  484. package/subagents/README.md +0 -7
  485. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  486. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  487. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  488. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  489. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  490. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  491. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  492. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  493. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  494. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  495. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  496. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  497. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  498. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  499. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  500. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  501. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,704 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.runRsvpCliCommand = runRsvpCliCommand;
37
+ const fs = __importStar(require("node:fs"));
38
+ const os = __importStar(require("node:os"));
39
+ const path = __importStar(require("node:path"));
40
+ const doctor_1 = require("../heart/daemon/doctor");
41
+ const identity_1 = require("../heart/identity");
42
+ const machine_identity_1 = require("../heart/machine-identity");
43
+ const runtime_credentials_1 = require("../heart/runtime-credentials");
44
+ const runtime_1 = require("../nerves/runtime");
45
+ const client_1 = require("../senses/bluebubbles/client");
46
+ const aisleplanner_client_1 = require("./aisleplanner-client");
47
+ const config_1 = require("./config");
48
+ const cutover_1 = require("./cutover");
49
+ const diff_renderer_1 = require("./diff-renderer");
50
+ const habit_stage_1 = require("./habit-stage");
51
+ const incident_bundle_1 = require("./incident-bundle");
52
+ const migration_1 = require("./migration");
53
+ const outbound_state_1 = require("./outbound-state");
54
+ const query_1 = require("./query");
55
+ const replay_1 = require("./replay");
56
+ const snapshot_1 = require("./snapshot");
57
+ function commandJson(command) {
58
+ return "json" in command && command.json === true;
59
+ }
60
+ function commandOutputPath(command) {
61
+ return "outputPath" in command ? command.outputPath : undefined;
62
+ }
63
+ function commandAgent(command) {
64
+ return "agent" in command ? command.agent : undefined;
65
+ }
66
+ function commandMode(command) {
67
+ return "mode" in command ? command.mode : undefined;
68
+ }
69
+ function maybeAgentRoot(command, deps) {
70
+ const agent = commandAgent(command);
71
+ if (!agent)
72
+ return undefined;
73
+ return deps.agentBundleRoot ?? path.join(deps.bundlesRoot ?? (0, identity_1.getAgentBundlesRoot)(), `${agent}.ouro`);
74
+ }
75
+ function writeJsonFile(filePath, payload) {
76
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
77
+ fs.writeFileSync(filePath, `${JSON.stringify(payload, null, 2)}\n`, "utf-8");
78
+ }
79
+ function readJsonFile(filePath) {
80
+ return JSON.parse(fs.readFileSync(filePath, "utf-8"));
81
+ }
82
+ function fallbackReadRsvpConfig(agentRoot) {
83
+ const configPath = path.join(agentRoot, "rsvp", "config.json");
84
+ if (!fs.existsSync(configPath)) {
85
+ return { ok: false, reason: "missing", path: configPath, message: "missing native RSVP config" };
86
+ }
87
+ try {
88
+ return { ok: true, config: readJsonFile(configPath), path: configPath };
89
+ }
90
+ catch {
91
+ return { ok: false, reason: "malformed", path: configPath, message: "native RSVP config is not valid JSON" };
92
+ }
93
+ }
94
+ function resolveRsvpConfig(agentRoot) {
95
+ return (0, config_1.readRsvpConfig)(agentRoot) ?? fallbackReadRsvpConfig(agentRoot);
96
+ }
97
+ function localText(value) {
98
+ return typeof value === "string" ? value.trim() : "";
99
+ }
100
+ function defaultLegacyRoot(deps) {
101
+ return path.join(deps.homeDir ?? os.homedir(), "Projects", "rsvp-tracker");
102
+ }
103
+ function resolveCutoverLegacyRoot(config, deps) {
104
+ const configured = localText(config.cutover?.legacyRoot);
105
+ if (configured)
106
+ return configured;
107
+ const fallback = defaultLegacyRoot(deps);
108
+ return fs.existsSync(path.join(fallback, "config.json")) ? fallback : null;
109
+ }
110
+ async function checkLiveSendCutover(input) {
111
+ const legacyRoot = resolveCutoverLegacyRoot(input.config, input.deps);
112
+ if (!legacyRoot)
113
+ return null;
114
+ return (0, cutover_1.checkRsvpCutover)({
115
+ agent: input.agent,
116
+ legacyRoot,
117
+ ...(input.deps.rsvpCutoverDeps ? { deps: input.deps.rsvpCutoverDeps } : {}),
118
+ });
119
+ }
120
+ function blockedLiveSendPayload(command, message, extra = {}) {
121
+ return basePayload(command, false, message, {
122
+ ok: false,
123
+ allowSend: command.allowSend === true,
124
+ sendAllowed: false,
125
+ requires: "passing RSVP cutover check",
126
+ ...extra,
127
+ });
128
+ }
129
+ function cutoverPayload(cutover) {
130
+ if (!cutover) {
131
+ return {
132
+ cutover: {
133
+ ok: false,
134
+ sendAllowed: false,
135
+ denialReasons: ["no RSVP legacy root found for live-send cutover proof"],
136
+ },
137
+ };
138
+ }
139
+ return {
140
+ legacyRoot: cutover.legacyRoot,
141
+ cutover: {
142
+ ok: cutover.ok,
143
+ sendAllowed: cutover.sendAllowed,
144
+ checks: cutover.checks,
145
+ denialReasons: cutover.denialReasons,
146
+ },
147
+ };
148
+ }
149
+ function rsvpStateRoot(agentRoot) {
150
+ return path.join(agentRoot, "state", "rsvp");
151
+ }
152
+ function latestSnapshotPath(agentRoot) {
153
+ return path.join(rsvpStateRoot(agentRoot), "snapshots", "latest.json");
154
+ }
155
+ function snapshotFilePath(agentRoot, snapshotId) {
156
+ return path.join(rsvpStateRoot(agentRoot), "snapshots", `${snapshotId}.json`);
157
+ }
158
+ function writeSnapshotFiles(agentRoot, snapshot) {
159
+ fs.mkdirSync(path.join(rsvpStateRoot(agentRoot), "snapshots"), { recursive: true });
160
+ fs.writeFileSync(snapshotFilePath(agentRoot, snapshot.snapshotId), `${JSON.stringify(snapshot, null, 2)}\n`, "utf-8");
161
+ fs.writeFileSync(latestSnapshotPath(agentRoot), `${JSON.stringify(snapshot, null, 2)}\n`, "utf-8");
162
+ }
163
+ function parseSnapshotFromFile(filePath) {
164
+ const result = (0, snapshot_1.parseRsvpSnapshot)(readJsonFile(filePath));
165
+ if (!result.ok)
166
+ throw new Error(`invalid RSVP snapshot at ${filePath}: ${result.reason}`);
167
+ return result.snapshot;
168
+ }
169
+ function readBaselineSnapshot(agentRoot) {
170
+ const baselinePath = path.join(rsvpStateRoot(agentRoot), "baseline.json");
171
+ if (!fs.existsSync(baselinePath))
172
+ return null;
173
+ const baseline = readJsonFile(baselinePath);
174
+ const snapshotId = baseline && typeof baseline === "object" && !Array.isArray(baseline)
175
+ ? baseline.nativeSnapshotId
176
+ : null;
177
+ return typeof snapshotId === "string" && fs.existsSync(snapshotFilePath(agentRoot, snapshotId))
178
+ ? parseSnapshotFromFile(snapshotFilePath(agentRoot, snapshotId))
179
+ : null;
180
+ }
181
+ function resolveLatestSnapshot(agentRoot) {
182
+ const filePath = latestSnapshotPath(agentRoot);
183
+ if (!fs.existsSync(filePath)) {
184
+ return { ok: false, path: filePath, message: "latest RSVP snapshot missing; run `ouro rsvp refresh --mode shadow --no-send` first" };
185
+ }
186
+ try {
187
+ return { ok: true, snapshot: parseSnapshotFromFile(filePath) };
188
+ }
189
+ catch (error) {
190
+ return {
191
+ ok: false,
192
+ path: filePath,
193
+ message: error instanceof Error ? error.message : /* v8 ignore next -- fs and snapshot parsing failures are Error instances. @preserve */ String(error),
194
+ };
195
+ }
196
+ }
197
+ function machineIdForCli() {
198
+ return (0, machine_identity_1.loadOrCreateMachineIdentity)().machineId;
199
+ }
200
+ function blueBubblesChatFor(config) {
201
+ const sendTarget = config.bluebubblesRoute.chatIdentifier
202
+ ? { kind: "chat_identifier", value: config.bluebubblesRoute.chatIdentifier }
203
+ : { kind: "chat_guid", value: config.bluebubblesRoute.chatGuid };
204
+ return {
205
+ chatGuid: config.bluebubblesRoute.chatGuid,
206
+ ...(config.bluebubblesRoute.chatIdentifier ? { chatIdentifier: config.bluebubblesRoute.chatIdentifier } : {}),
207
+ displayName: "RSVP",
208
+ isGroup: true,
209
+ sessionKey: `bluebubbles:rsvp:${config.bluebubblesRoute.chatIdentifier ?? config.bluebubblesRoute.chatGuid}`,
210
+ sendTarget,
211
+ participantHandles: [],
212
+ };
213
+ }
214
+ function normalizeDelivery(value) {
215
+ const record = value && typeof value === "object" && !Array.isArray(value) ? value : {};
216
+ return {
217
+ ...(typeof record.guid === "string" ? { guid: record.guid } : {}),
218
+ ...(typeof record.messageGuid === "string" ? { guid: record.messageGuid, messageGuid: record.messageGuid } : {}),
219
+ };
220
+ }
221
+ function textSummary(payload) {
222
+ const effect = payload.sideEffect ? "explicit side effects enabled" : "dry run";
223
+ const agent = payload.agent ? ` agent=${payload.agent}` : "";
224
+ const requires = payload.requires ? ` requires=${payload.requires}` : "";
225
+ return `${payload.command}: ${effect}${agent}${requires}`;
226
+ }
227
+ function writePayload(command, deps, payload) {
228
+ const outputPath = commandOutputPath(command);
229
+ if (outputPath)
230
+ writeJsonFile(outputPath, payload);
231
+ const text = commandJson(command) ? JSON.stringify(payload, null, 2) : textSummary(payload);
232
+ deps.writeStdout(text);
233
+ (0, runtime_1.emitNervesEvent)({
234
+ component: "rsvp",
235
+ event: "rsvp.cli_command_executed",
236
+ message: "executed RSVP CLI command",
237
+ meta: {
238
+ command: payload.command,
239
+ sideEffect: payload.sideEffect,
240
+ outputPath,
241
+ agent: payload.agent,
242
+ },
243
+ });
244
+ return text;
245
+ }
246
+ function writeIncidentText(deps, command, agent, bundle, outputPath) {
247
+ const text = command.json === true
248
+ ? JSON.stringify({
249
+ ok: bundle.doctor.summary.failed === 0,
250
+ command: command.kind,
251
+ agent,
252
+ sideEffect: false,
253
+ incidentBundle: bundle,
254
+ }, null, 2)
255
+ : `rsvp.incident: wrote side-effect-free bundle agent=${agent}${outputPath ? ` output=${outputPath}` : ""}`;
256
+ deps.writeStdout(text);
257
+ (0, runtime_1.emitNervesEvent)({
258
+ component: "rsvp",
259
+ event: "rsvp.cli_command_executed",
260
+ message: "executed RSVP CLI command",
261
+ meta: {
262
+ command: command.kind,
263
+ sideEffect: false,
264
+ outputPath,
265
+ agent,
266
+ },
267
+ });
268
+ return text;
269
+ }
270
+ function basePayload(command, sideEffect, message, extra = {}) {
271
+ return {
272
+ ok: true,
273
+ command: command.kind,
274
+ sideEffect,
275
+ ...(commandAgent(command) ? { agent: commandAgent(command) } : {}),
276
+ ...(commandMode(command) ? { mode: commandMode(command) } : {}),
277
+ message,
278
+ ...extra,
279
+ };
280
+ }
281
+ async function executeImportLegacy(command, deps) {
282
+ if (!command.yes) {
283
+ return basePayload(command, false, "legacy RSVP import preview only; pass --yes to write native config and runtime/config", {
284
+ requires: "--yes",
285
+ inputs: {
286
+ legacyRoot: command.legacyRoot,
287
+ mode: command.mode,
288
+ },
289
+ });
290
+ }
291
+ const agentRoot = maybeAgentRoot(command, deps);
292
+ if (!command.agent || !agentRoot) {
293
+ return {
294
+ ok: false,
295
+ command: command.kind,
296
+ sideEffect: false,
297
+ message: "legacy RSVP import requires --agent <name>",
298
+ requires: "--agent",
299
+ };
300
+ }
301
+ if (command.kind === "rsvp.import-legacy") {
302
+ const configResult = resolveRsvpConfig(agentRoot);
303
+ if (!configResult.ok) {
304
+ return {
305
+ ok: false,
306
+ command: command.kind,
307
+ sideEffect: false,
308
+ agent: command.agent,
309
+ message: configResult.message,
310
+ requires: "native RSVP config",
311
+ };
312
+ }
313
+ const result = (0, migration_1.importLegacyRsvpState)({
314
+ agent: command.agent,
315
+ agentRoot,
316
+ legacyRoot: command.legacyRoot,
317
+ weddingId: configResult.config.source.weddingId,
318
+ eventId: configResult.config.source.eventId,
319
+ importedAt: new Date().toISOString(),
320
+ });
321
+ return basePayload(command, true, result.ok ? "legacy RSVP state imported" : result.message, {
322
+ migration: result,
323
+ });
324
+ }
325
+ const result = await (0, config_1.importLegacyRsvpConfig)({
326
+ agent: command.agent,
327
+ agentRoot,
328
+ legacyRoot: command.legacyRoot,
329
+ mode: command.mode,
330
+ confirm: true,
331
+ });
332
+ return basePayload(command, true, result.ok ? "legacy RSVP config imported" : result.message, {
333
+ result: result,
334
+ });
335
+ }
336
+ async function executeCutover(command, deps) {
337
+ const result = await (0, cutover_1.runRsvpCutover)({
338
+ ...(command.agent ? { agent: command.agent } : {}),
339
+ legacyRoot: command.legacyRoot,
340
+ action: command.action,
341
+ yes: command.yes === true,
342
+ ...(deps.rsvpCutoverDeps ? { deps: deps.rsvpCutoverDeps } : {}),
343
+ });
344
+ return {
345
+ ok: result.ok,
346
+ command: command.kind,
347
+ sideEffect: result.sideEffect,
348
+ ...(command.agent ? { agent: command.agent } : {}),
349
+ action: result.action,
350
+ legacyRoot: result.legacyRoot,
351
+ message: result.message,
352
+ ...(result.requires ? { requires: result.requires } : {}),
353
+ checks: result.checks,
354
+ sendAllowed: result.sendAllowed,
355
+ denialReasons: result.denialReasons,
356
+ rollback: result.rollback,
357
+ };
358
+ }
359
+ function doctorDepsFor(deps) {
360
+ const bundlesRoot = deps.bundlesRoot ?? (0, identity_1.getAgentBundlesRoot)();
361
+ return {
362
+ existsSync: (filePath) => fs.existsSync(filePath),
363
+ readFileSync: (filePath) => fs.readFileSync(filePath, "utf-8"),
364
+ readdirSync: (dirPath) => fs.readdirSync(dirPath),
365
+ statSync: fs.statSync,
366
+ checkSocketAlive: deps.checkSocketAlive,
367
+ fetchImpl: deps.fetchImpl ?? fetch,
368
+ socketPath: deps.socketPath,
369
+ bundlesRoot,
370
+ daemonLogsDir: path.join(deps.homeDir ?? os.homedir(), ".ouro-cli", "daemon", "logs"),
371
+ homedir: deps.homeDir ?? os.homedir(),
372
+ envPath: process.env.PATH ?? "",
373
+ platform: process.platform,
374
+ ...(deps.rsvpCutoverDeps ? { rsvpCutoverDeps: deps.rsvpCutoverDeps } : {}),
375
+ };
376
+ }
377
+ async function executeDoctor(command, deps) {
378
+ const doctor = await (0, doctor_1.runDoctorChecks)(doctorDepsFor(deps), { category: "RSVP" });
379
+ const ok = doctor.summary.warnings === 0 && doctor.summary.failed === 0;
380
+ if (command.strict && !ok)
381
+ deps.setExitCode?.(1);
382
+ return basePayload(command, false, ok ? "RSVP doctor checks passed" : "RSVP doctor checks found issues", {
383
+ ok,
384
+ inputs: { strict: command.strict === true },
385
+ doctor: doctor,
386
+ strict: command.strict === true,
387
+ });
388
+ }
389
+ async function executeIncident(command, deps) {
390
+ const agentRoot = maybeAgentRoot(command, deps);
391
+ if (!command.agent || !agentRoot) {
392
+ return writePayload(command, deps, {
393
+ ok: false,
394
+ command: command.kind,
395
+ sideEffect: false,
396
+ message: "RSVP incident bundle requires --agent <name>",
397
+ requires: "--agent",
398
+ });
399
+ }
400
+ const diagnosticsDeps = {
401
+ existsSync: (filePath) => fs.existsSync(filePath),
402
+ readFileSync: (filePath) => fs.readFileSync(filePath, "utf-8"),
403
+ readdirSync: (dirPath) => fs.readdirSync(dirPath),
404
+ statSync: fs.statSync,
405
+ checkSocketAlive: deps.checkSocketAlive,
406
+ runDoctorChecks: () => (0, doctor_1.runDoctorChecks)(doctorDepsFor(deps), { category: "RSVP" }),
407
+ };
408
+ const outputPath = commandOutputPath(command);
409
+ const bundle = outputPath
410
+ ? (await (0, incident_bundle_1.writeRsvpIncidentBundle)({ agent: command.agent, agentRoot, outputPath, deps: diagnosticsDeps })).bundle
411
+ : await (0, incident_bundle_1.buildRsvpIncidentBundle)({ agent: command.agent, agentRoot, deps: diagnosticsDeps });
412
+ return writeIncidentText(deps, command, command.agent, bundle, outputPath);
413
+ }
414
+ async function executeLegacyRender(command, deps) {
415
+ const outputPath = command.outputPath ?? path.join(os.tmpdir(), `ouro-rsvp-legacy-render-${process.pid}-${Date.now()}.json`);
416
+ const result = await (0, replay_1.renderLegacyRsvpSnapshotOffline)({ legacyRoot: command.legacyRoot, outputPath });
417
+ const text = command.json
418
+ ? JSON.stringify({ ok: true, command: command.kind, sideEffect: false, result }, null, 2)
419
+ : `rsvp.legacy-render: wrote side-effect-free render output=${outputPath}`;
420
+ deps.writeStdout(text);
421
+ (0, runtime_1.emitNervesEvent)({
422
+ component: "rsvp",
423
+ event: "rsvp.cli_command_executed",
424
+ message: "executed RSVP CLI command",
425
+ meta: { command: command.kind, sideEffect: false, outputPath, agent: command.agent },
426
+ });
427
+ return text;
428
+ }
429
+ async function executeReplay(command) {
430
+ const replay = await (0, replay_1.replayRsvpFixture)({ fixturePath: command.fixturePath });
431
+ return basePayload(command, false, "RSVP replay fixture executed offline", {
432
+ replay: replay,
433
+ });
434
+ }
435
+ async function executeHabitStage(command, deps) {
436
+ const agentRoot = maybeAgentRoot(command, deps);
437
+ if (!command.agent || !agentRoot) {
438
+ return {
439
+ ok: false,
440
+ command: command.kind,
441
+ sideEffect: false,
442
+ message: "RSVP habit staging requires --agent <name>",
443
+ requires: "--agent",
444
+ };
445
+ }
446
+ const result = (0, habit_stage_1.stageRsvpHabit)({
447
+ agent: command.agent,
448
+ agentRoot,
449
+ mode: command.mode,
450
+ cadence: command.cadence,
451
+ });
452
+ return basePayload(command, true, "native RSVP habit staged", {
453
+ habit: result,
454
+ });
455
+ }
456
+ async function executeRefresh(command, deps) {
457
+ const agentRoot = maybeAgentRoot(command, deps);
458
+ if (!command.agent || !agentRoot) {
459
+ return {
460
+ ok: false,
461
+ command: command.kind,
462
+ sideEffect: false,
463
+ message: "RSVP refresh requires --agent <name>",
464
+ requires: "--agent",
465
+ };
466
+ }
467
+ const configResult = resolveRsvpConfig(agentRoot);
468
+ if (!configResult.ok) {
469
+ return basePayload(command, false, "RSVP refresh requires native RSVP config before live work can run", {
470
+ requires: "native RSVP config",
471
+ result: configResult,
472
+ });
473
+ }
474
+ const runtimeConfig = await (0, runtime_credentials_1.refreshRuntimeCredentialConfig)(command.agent, { preserveCachedOnFailure: true });
475
+ const machineRuntimeConfig = await (0, runtime_credentials_1.refreshMachineRuntimeCredentialConfig)(command.agent, machineIdForCli(), { preserveCachedOnFailure: true });
476
+ const readiness = (0, config_1.validateRsvpReadiness)({
477
+ agent: command.agent,
478
+ agentRoot,
479
+ config: configResult,
480
+ runtimeConfig,
481
+ machineRuntimeConfig,
482
+ });
483
+ const readinessOk = readiness.ok === true || readiness.status === "ready";
484
+ if (!readinessOk) {
485
+ return {
486
+ ok: false,
487
+ command: command.kind,
488
+ sideEffect: false,
489
+ agent: command.agent,
490
+ mode: command.mode,
491
+ message: "RSVP refresh blocked by readiness checks",
492
+ checks: { readiness: readiness },
493
+ };
494
+ }
495
+ const credentials = "credentials" in readiness
496
+ ? readiness.credentials
497
+ : { username: "", password: "" };
498
+ const fetched = await (0, aisleplanner_client_1.fetchAislePlannerRsvps)({
499
+ agent: command.agent,
500
+ weddingId: configResult.config.source.weddingId,
501
+ eventId: configResult.config.source.eventId,
502
+ credentials,
503
+ ...(deps.fetchImpl ? { fetchFn: deps.fetchImpl } : {}),
504
+ });
505
+ if (!fetched.ok) {
506
+ return {
507
+ ok: false,
508
+ command: command.kind,
509
+ sideEffect: false,
510
+ agent: command.agent,
511
+ mode: command.mode,
512
+ message: fetched.message,
513
+ result: fetched,
514
+ };
515
+ }
516
+ const previousSnapshot = readBaselineSnapshot(agentRoot);
517
+ const currentSnapshot = (0, snapshot_1.buildRsvpSnapshot)({
518
+ agent: command.agent,
519
+ fetchedAt: fetched.fetchedAt,
520
+ source: {
521
+ kind: "aisleplanner",
522
+ weddingId: configResult.config.source.weddingId,
523
+ eventId: configResult.config.source.eventId,
524
+ adapter: "aisleplanner-api-v1",
525
+ },
526
+ guests: fetched.guests,
527
+ allGuests: fetched.allGuests,
528
+ provenance: { kind: "live-fetch", fetchedBy: "ouro rsvp refresh" },
529
+ });
530
+ writeSnapshotFiles(agentRoot, currentSnapshot);
531
+ const delta = (0, diff_renderer_1.computeRsvpDelta)(previousSnapshot, currentSnapshot);
532
+ const reportText = (0, diff_renderer_1.renderRsvpReport)(delta);
533
+ const outboundDecision = (0, outbound_state_1.decideRsvpOutboundReport)({ agentRoot, currentSnapshot, reportText });
534
+ const wantsLiveSend = command.mode === "live" && command.allowSend === true && outboundDecision.action === "send";
535
+ if (wantsLiveSend) {
536
+ const cutover = await checkLiveSendCutover({
537
+ agent: command.agent,
538
+ config: configResult.config,
539
+ deps,
540
+ });
541
+ if (cutover?.sendAllowed !== true) {
542
+ return blockedLiveSendPayload(command, "RSVP live refresh send blocked by cutover gates", {
543
+ ...cutoverPayload(cutover),
544
+ refresh: {
545
+ snapshotId: currentSnapshot.snapshotId,
546
+ reportText,
547
+ outboundDecision: outboundDecision,
548
+ },
549
+ });
550
+ }
551
+ }
552
+ const sendAllowed = wantsLiveSend;
553
+ let delivery;
554
+ if (sendAllowed) {
555
+ const sent = await (0, client_1.createBlueBubblesClient)().sendText({
556
+ chat: blueBubblesChatFor(configResult.config),
557
+ text: reportText,
558
+ tempGuid: outboundDecision.idempotencyKey,
559
+ });
560
+ delivery = normalizeDelivery(sent);
561
+ (0, outbound_state_1.recordRsvpOutboundAttempt)({
562
+ agentRoot,
563
+ currentSnapshot,
564
+ reportText,
565
+ bluebubblesRecord: {
566
+ recordId: outboundDecision.idempotencyKey,
567
+ status: "accepted",
568
+ tempGuid: outboundDecision.idempotencyKey,
569
+ ...(delivery.guid ? { messageGuid: String(delivery.guid) } : {}),
570
+ },
571
+ recordedAt: new Date().toISOString(),
572
+ });
573
+ }
574
+ return basePayload(command, sendAllowed, "RSVP refresh completed", {
575
+ allowSend: sendAllowed,
576
+ sendAllowed,
577
+ refresh: {
578
+ snapshotId: currentSnapshot.snapshotId,
579
+ reportText,
580
+ outboundDecision: outboundDecision,
581
+ ...(delivery ? { delivery } : {}),
582
+ },
583
+ });
584
+ }
585
+ async function executeCompare(command) {
586
+ if (!fs.existsSync(command.nativePath) || !fs.existsSync(command.legacyPath)) {
587
+ return basePayload(command, false, "RSVP compare requires readable native and legacy snapshot files", {
588
+ requires: "readable snapshots",
589
+ inputs: { nativePath: command.nativePath, legacyPath: command.legacyPath },
590
+ });
591
+ }
592
+ const nativeSnapshot = parseSnapshotFromFile(command.nativePath);
593
+ const legacySnapshot = parseSnapshotFromFile(command.legacyPath);
594
+ const delta = (0, diff_renderer_1.computeRsvpDelta)(legacySnapshot, nativeSnapshot);
595
+ const reportText = (0, diff_renderer_1.renderRsvpReport)(delta);
596
+ return basePayload(command, false, "RSVP native/legacy comparison completed", {
597
+ compare: {
598
+ nativeSnapshotId: nativeSnapshot.snapshotId,
599
+ legacySnapshotId: legacySnapshot.snapshotId,
600
+ reportText,
601
+ delta: delta,
602
+ },
603
+ });
604
+ }
605
+ async function executeSmoke(command, deps) {
606
+ const agentRoot = maybeAgentRoot(command, deps);
607
+ if (!command.agent || !agentRoot) {
608
+ return {
609
+ ok: false,
610
+ command: command.kind,
611
+ sideEffect: false,
612
+ message: "RSVP smoke requires --agent <name>",
613
+ requires: "--agent",
614
+ };
615
+ }
616
+ const configResult = resolveRsvpConfig(agentRoot);
617
+ if (!configResult.ok) {
618
+ return basePayload(command, command.allowSend === true, "RSVP smoke requires native RSVP config before follow-up can run", {
619
+ allowSend: command.allowSend === true,
620
+ sendAllowed: false,
621
+ requires: "native RSVP config",
622
+ result: configResult,
623
+ });
624
+ }
625
+ const snapshotResult = resolveLatestSnapshot(agentRoot);
626
+ if (!snapshotResult.ok) {
627
+ return {
628
+ ...basePayload(command, false, "RSVP smoke requires latest RSVP snapshot before follow-up can run", {
629
+ allowSend: command.allowSend === true,
630
+ sendAllowed: false,
631
+ requires: "latest RSVP snapshot",
632
+ result: snapshotResult,
633
+ }),
634
+ ok: false,
635
+ };
636
+ }
637
+ const snapshot = snapshotResult.snapshot;
638
+ const question = command.question ?? "who is pending?";
639
+ const answer = (0, query_1.queryRsvpSnapshot)(snapshot, { query: question });
640
+ const wantsLiveSend = command.mode === "live" && command.allowSend === true;
641
+ if (wantsLiveSend) {
642
+ const cutover = await checkLiveSendCutover({
643
+ agent: command.agent,
644
+ config: configResult.config,
645
+ deps,
646
+ });
647
+ if (cutover?.sendAllowed !== true) {
648
+ const blocked = blockedLiveSendPayload(command, "RSVP live smoke send blocked by cutover gates", {
649
+ ...cutoverPayload(cutover),
650
+ answer: answer.text,
651
+ result: answer,
652
+ });
653
+ if (command.replayOutputPath)
654
+ writeJsonFile(command.replayOutputPath, blocked);
655
+ return blocked;
656
+ }
657
+ }
658
+ const sendAllowed = wantsLiveSend;
659
+ let delivery;
660
+ if (sendAllowed) {
661
+ const sent = await (0, client_1.createBlueBubblesClient)().sendText({
662
+ chat: blueBubblesChatFor(configResult.config),
663
+ text: answer.text,
664
+ });
665
+ delivery = normalizeDelivery(sent);
666
+ }
667
+ const payload = basePayload(command, sendAllowed, sendAllowed ? "RSVP live smoke completed" : "RSVP smoke preflight completed", {
668
+ allowSend: sendAllowed,
669
+ sendAllowed,
670
+ answer: answer.text,
671
+ result: answer,
672
+ ...(delivery ? { delivery } : {}),
673
+ });
674
+ if (command.replayOutputPath)
675
+ writeJsonFile(command.replayOutputPath, payload);
676
+ return payload;
677
+ }
678
+ function plannedPayload(command) {
679
+ throw new Error(`unsupported RSVP CLI command: ${String(command.kind)}`);
680
+ }
681
+ async function runRsvpCliCommand(command, deps) {
682
+ if (command.kind === "rsvp.incident")
683
+ return executeIncident(command, deps);
684
+ if (command.kind === "rsvp.legacy-render")
685
+ return executeLegacyRender(command, deps);
686
+ const payload = command.kind === "rsvp.config.import-legacy" || command.kind === "rsvp.import-legacy"
687
+ ? await executeImportLegacy(command, deps)
688
+ : command.kind === "rsvp.cutover"
689
+ ? await executeCutover(command, deps)
690
+ : command.kind === "rsvp.doctor"
691
+ ? await executeDoctor(command, deps)
692
+ : command.kind === "rsvp.replay"
693
+ ? await executeReplay(command)
694
+ : command.kind === "rsvp.habit.stage"
695
+ ? await executeHabitStage(command, deps)
696
+ : command.kind === "rsvp.refresh"
697
+ ? await executeRefresh(command, deps)
698
+ : command.kind === "rsvp.compare"
699
+ ? await executeCompare(command)
700
+ : command.kind === "rsvp.smoke"
701
+ ? await executeSmoke(command, deps)
702
+ : plannedPayload(command);
703
+ return writePayload(command, deps, payload);
704
+ }