@ouro.bot/cli 0.1.0-alpha.60 → 0.1.0-alpha.600

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 (420) hide show
  1. package/README.md +127 -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 +3857 -0
  13. package/dist/arc/attention-types.js +8 -0
  14. package/dist/arc/cares.js +140 -0
  15. package/dist/arc/episodes.js +117 -0
  16. package/dist/arc/intentions.js +133 -0
  17. package/dist/arc/json-store.js +117 -0
  18. package/dist/arc/obligations.js +254 -0
  19. package/dist/arc/packets.js +193 -0
  20. package/dist/arc/presence.js +185 -0
  21. package/dist/arc/task-lifecycle.js +65 -0
  22. package/dist/heart/active-work.js +837 -26
  23. package/dist/heart/agent-entry.js +69 -3
  24. package/dist/heart/attachments/image-normalize.js +194 -0
  25. package/dist/heart/attachments/materialize.js +97 -0
  26. package/dist/heart/attachments/originals.js +88 -0
  27. package/dist/heart/attachments/render.js +29 -0
  28. package/dist/heart/attachments/sources/adapter.js +2 -0
  29. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  30. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  31. package/dist/heart/attachments/sources/index.js +16 -0
  32. package/dist/heart/attachments/store.js +103 -0
  33. package/dist/heart/attachments/types.js +93 -0
  34. package/dist/heart/auth/auth-flow.js +479 -0
  35. package/dist/heart/awaiting/await-alert.js +146 -0
  36. package/dist/heart/awaiting/await-expiry.js +108 -0
  37. package/dist/heart/awaiting/await-loader.js +91 -0
  38. package/dist/heart/awaiting/await-parser.js +141 -0
  39. package/dist/heart/awaiting/await-runtime-state.js +97 -0
  40. package/dist/heart/awaiting/await-scheduler.js +377 -0
  41. package/dist/heart/background-operations.js +281 -0
  42. package/dist/heart/bundle-state.js +168 -0
  43. package/dist/heart/commitments.js +142 -0
  44. package/dist/heart/config-registry.js +322 -0
  45. package/dist/heart/config.js +114 -119
  46. package/dist/heart/core.js +909 -246
  47. package/dist/heart/cross-chat-delivery.js +3 -18
  48. package/dist/heart/daemon/agent-config-check.js +419 -0
  49. package/dist/heart/daemon/agent-discovery.js +102 -3
  50. package/dist/heart/daemon/agent-service.js +522 -0
  51. package/dist/heart/daemon/agentic-repair.js +547 -0
  52. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  53. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  54. package/dist/heart/daemon/cadence.js +70 -0
  55. package/dist/heart/daemon/cli-defaults.js +776 -0
  56. package/dist/heart/daemon/cli-exec.js +7571 -0
  57. package/dist/heart/daemon/cli-help.js +498 -0
  58. package/dist/heart/daemon/cli-parse.js +1599 -0
  59. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  60. package/dist/heart/daemon/cli-render.js +763 -0
  61. package/dist/heart/daemon/cli-types.js +8 -0
  62. package/dist/heart/daemon/connect-bay.js +323 -0
  63. package/dist/heart/daemon/daemon-cli.js +29 -1703
  64. package/dist/heart/daemon/daemon-entry.js +485 -2
  65. package/dist/heart/daemon/daemon-health.js +176 -0
  66. package/dist/heart/daemon/daemon-rollup.js +57 -0
  67. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  68. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  69. package/dist/heart/daemon/daemon.js +842 -69
  70. package/dist/heart/daemon/dns-workflow.js +394 -0
  71. package/dist/heart/daemon/doctor-types.js +8 -0
  72. package/dist/heart/daemon/doctor.js +873 -0
  73. package/dist/heart/daemon/health-monitor.js +122 -1
  74. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  75. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  76. package/dist/heart/daemon/http-health-probe.js +80 -0
  77. package/dist/heart/daemon/human-command-screens.js +234 -0
  78. package/dist/heart/daemon/human-readiness.js +114 -0
  79. package/dist/heart/daemon/inner-status.js +89 -0
  80. package/dist/heart/daemon/interactive-repair.js +394 -0
  81. package/dist/heart/daemon/launchd.js +37 -8
  82. package/dist/heart/daemon/log-tailer.js +78 -9
  83. package/dist/heart/daemon/logs-prune.js +110 -0
  84. package/dist/heart/daemon/mcp-canary.js +297 -0
  85. package/dist/heart/daemon/os-cron-deps.js +135 -0
  86. package/dist/heart/daemon/os-cron.js +14 -12
  87. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  88. package/dist/heart/daemon/ouro-entry.js +3 -1
  89. package/dist/heart/daemon/process-manager.js +375 -33
  90. package/dist/heart/daemon/provider-discovery.js +137 -0
  91. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  92. package/dist/heart/daemon/pulse.js +475 -0
  93. package/dist/heart/daemon/readiness-repair.js +365 -0
  94. package/dist/heart/daemon/run-hooks.js +2 -0
  95. package/dist/heart/daemon/runtime-logging.js +10 -2
  96. package/dist/heart/daemon/runtime-metadata.js +2 -30
  97. package/dist/heart/daemon/safe-mode.js +161 -0
  98. package/dist/heart/daemon/sense-manager.js +462 -38
  99. package/dist/heart/daemon/session-id-resolver.js +131 -0
  100. package/dist/heart/daemon/skill-management-installer.js +94 -0
  101. package/dist/heart/daemon/socket-client.js +158 -11
  102. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  103. package/dist/heart/daemon/startup-tui.js +330 -0
  104. package/dist/heart/daemon/task-scheduler.js +3 -25
  105. package/dist/heart/daemon/terminal-ui.js +499 -0
  106. package/dist/heart/daemon/thoughts.js +162 -17
  107. package/dist/heart/daemon/up-progress.js +366 -0
  108. package/dist/heart/daemon/vault-items.js +56 -0
  109. package/dist/heart/delegation.js +1 -1
  110. package/dist/heart/habits/habit-migration.js +189 -0
  111. package/dist/heart/habits/habit-parser.js +140 -0
  112. package/dist/heart/habits/habit-runtime-state.js +100 -0
  113. package/dist/heart/habits/habit-scheduler.js +372 -0
  114. package/dist/heart/{daemon → hatch}/hatch-flow.js +32 -56
  115. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  116. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  117. package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
  118. package/dist/heart/identity.js +166 -55
  119. package/dist/heart/kept-notes.js +357 -0
  120. package/dist/heart/kicks.js +1 -1
  121. package/dist/heart/machine-identity.js +161 -0
  122. package/dist/heart/mail-import-discovery.js +353 -0
  123. package/dist/heart/mailbox/mailbox-http-hooks.js +66 -0
  124. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  125. package/dist/heart/mailbox/mailbox-http-routes.js +246 -0
  126. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  127. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  128. package/dist/heart/mailbox/mailbox-http.js +99 -0
  129. package/dist/heart/mailbox/mailbox-read.js +31 -0
  130. package/dist/heart/mailbox/mailbox-types.js +27 -0
  131. package/dist/heart/mailbox/mailbox-view.js +195 -0
  132. package/dist/heart/mailbox/readers/agent-machine.js +382 -0
  133. package/dist/heart/mailbox/readers/continuity-readers.js +338 -0
  134. package/dist/heart/mailbox/readers/mail.js +367 -0
  135. package/dist/heart/mailbox/readers/runtime-readers.js +651 -0
  136. package/dist/heart/mailbox/readers/sessions.js +232 -0
  137. package/dist/heart/mailbox/readers/shared.js +111 -0
  138. package/dist/heart/mcp/mcp-server.js +656 -0
  139. package/dist/heart/migrate-config.js +100 -0
  140. package/dist/heart/model-capabilities.js +19 -0
  141. package/dist/heart/platform.js +81 -0
  142. package/dist/heart/provider-attempt.js +134 -0
  143. package/dist/heart/provider-binding-resolver.js +267 -0
  144. package/dist/heart/provider-credentials.js +425 -0
  145. package/dist/heart/provider-failover.js +301 -0
  146. package/dist/heart/provider-models.js +81 -0
  147. package/dist/heart/provider-ping.js +262 -0
  148. package/dist/heart/provider-readiness-cache.js +40 -0
  149. package/dist/heart/provider-visibility.js +188 -0
  150. package/dist/heart/providers/anthropic-token.js +131 -0
  151. package/dist/heart/providers/anthropic.js +139 -52
  152. package/dist/heart/providers/azure.js +23 -11
  153. package/dist/heart/providers/error-classification.js +127 -0
  154. package/dist/heart/providers/github-copilot.js +145 -0
  155. package/dist/heart/providers/minimax-vlm.js +189 -0
  156. package/dist/heart/providers/minimax.js +26 -8
  157. package/dist/heart/providers/openai-codex.js +55 -40
  158. package/dist/heart/runtime-capability-check.js +170 -0
  159. package/dist/heart/runtime-credentials.js +367 -0
  160. package/dist/heart/runtime-cwd.js +87 -0
  161. package/dist/heart/sense-truth.js +13 -4
  162. package/dist/heart/session-activity.js +43 -22
  163. package/dist/heart/session-events.js +1149 -0
  164. package/dist/heart/session-playback-cli-main.js +5 -0
  165. package/dist/heart/session-playback-cli.js +36 -0
  166. package/dist/heart/session-playback.js +231 -0
  167. package/dist/heart/session-stats-cli-main.js +5 -0
  168. package/dist/heart/session-stats.js +182 -0
  169. package/dist/heart/session-transcript.js +243 -0
  170. package/dist/heart/start-of-turn-packet.js +345 -0
  171. package/dist/heart/streaming.js +44 -27
  172. package/dist/heart/sync-classification.js +176 -0
  173. package/dist/heart/sync.js +449 -0
  174. package/dist/heart/target-resolution.js +9 -5
  175. package/dist/heart/tempo.js +93 -0
  176. package/dist/heart/temporal-view.js +41 -0
  177. package/dist/heart/timeouts.js +101 -0
  178. package/dist/heart/tool-activity-callbacks.js +59 -0
  179. package/dist/heart/tool-description.js +143 -0
  180. package/dist/heart/tool-friction.js +55 -0
  181. package/dist/heart/tool-loop.js +200 -0
  182. package/dist/heart/turn-context.js +421 -0
  183. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  184. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  185. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  186. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  187. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  188. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  189. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  190. package/dist/mailbox-ui/assets/index-B-461hes.js +61 -0
  191. package/dist/mailbox-ui/assets/index-BPr5vNuM.css +1 -0
  192. package/dist/mailbox-ui/index.html +15 -0
  193. package/dist/mailroom/attention.js +167 -0
  194. package/dist/mailroom/autonomy.js +209 -0
  195. package/dist/mailroom/blob-store.js +700 -0
  196. package/dist/mailroom/body-cache.js +61 -0
  197. package/dist/mailroom/core.js +788 -0
  198. package/dist/mailroom/entry.js +160 -0
  199. package/dist/mailroom/file-store.js +457 -0
  200. package/dist/mailroom/mbox-import.js +393 -0
  201. package/dist/mailroom/migration.js +164 -0
  202. package/dist/mailroom/outbound.js +380 -0
  203. package/dist/mailroom/policy.js +263 -0
  204. package/dist/mailroom/reader.js +233 -0
  205. package/dist/mailroom/search-cache.js +268 -0
  206. package/dist/mailroom/search-relevance.js +319 -0
  207. package/dist/mailroom/smtp-ingress.js +176 -0
  208. package/dist/mailroom/source-state.js +176 -0
  209. package/dist/mailroom/thread.js +109 -0
  210. package/dist/mailroom/travel-extract.js +89 -0
  211. package/dist/mind/bundle-manifest.js +7 -1
  212. package/dist/mind/context.js +165 -101
  213. package/dist/mind/diary-integrity.js +60 -0
  214. package/dist/mind/{memory.js → diary.js} +62 -75
  215. package/dist/mind/embedding-provider.js +60 -0
  216. package/dist/mind/file-state.js +179 -0
  217. package/dist/mind/friends/channel.js +39 -0
  218. package/dist/mind/friends/resolver.js +54 -2
  219. package/dist/mind/friends/store-file.js +39 -3
  220. package/dist/mind/friends/types.js +2 -2
  221. package/dist/mind/journal-index.js +161 -0
  222. package/dist/mind/note-search.js +268 -0
  223. package/dist/mind/obligation-steering.js +221 -0
  224. package/dist/mind/pending.js +4 -0
  225. package/dist/mind/prompt-refresh.js +3 -2
  226. package/dist/mind/prompt.js +1050 -135
  227. package/dist/mind/provenance-trust.js +26 -0
  228. package/dist/mind/scrutiny.js +173 -0
  229. package/dist/nerves/cli-logging.js +7 -1
  230. package/dist/nerves/coverage/audit-rules.js +15 -6
  231. package/dist/nerves/coverage/audit.js +28 -2
  232. package/dist/nerves/coverage/cli.js +1 -1
  233. package/dist/nerves/coverage/contract.js +5 -5
  234. package/dist/nerves/coverage/file-completeness.js +129 -5
  235. package/dist/nerves/event-buffer.js +111 -0
  236. package/dist/nerves/index.js +224 -4
  237. package/dist/nerves/observation.js +20 -0
  238. package/dist/nerves/redact.js +79 -0
  239. package/dist/nerves/review/cli-main.js +5 -0
  240. package/dist/nerves/review/cli.js +156 -0
  241. package/dist/nerves/review/core.js +152 -0
  242. package/dist/nerves/runtime.js +5 -1
  243. package/dist/repertoire/ado-client.js +15 -56
  244. package/dist/repertoire/ado-semantic.js +11 -10
  245. package/dist/repertoire/api-client.js +97 -0
  246. package/dist/repertoire/bitwarden-store.js +997 -0
  247. package/dist/repertoire/bundle-templates.js +72 -0
  248. package/dist/repertoire/bw-installer.js +180 -0
  249. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  250. package/dist/repertoire/coding/context-pack.js +330 -0
  251. package/dist/repertoire/coding/feedback.js +197 -30
  252. package/dist/repertoire/coding/manager.js +158 -9
  253. package/dist/repertoire/coding/spawner.js +55 -9
  254. package/dist/repertoire/coding/tools.js +170 -7
  255. package/dist/repertoire/commerce-errors.js +109 -0
  256. package/dist/repertoire/commerce-self-test.js +156 -0
  257. package/dist/repertoire/credential-access.js +178 -0
  258. package/dist/repertoire/duffel-client.js +185 -0
  259. package/dist/repertoire/github-client.js +14 -55
  260. package/dist/repertoire/graph-client.js +11 -52
  261. package/dist/repertoire/guardrails.js +396 -0
  262. package/dist/repertoire/mcp-client.js +295 -0
  263. package/dist/repertoire/mcp-manager.js +362 -0
  264. package/dist/repertoire/mcp-tools.js +63 -0
  265. package/dist/repertoire/shell-sessions.js +133 -0
  266. package/dist/repertoire/skills.js +15 -24
  267. package/dist/repertoire/stripe-client.js +131 -0
  268. package/dist/repertoire/tasks/board.js +31 -5
  269. package/dist/repertoire/tasks/fix.js +182 -0
  270. package/dist/repertoire/tasks/index.js +16 -4
  271. package/dist/repertoire/tasks/lifecycle.js +2 -2
  272. package/dist/repertoire/tasks/parser.js +3 -2
  273. package/dist/repertoire/tasks/scanner.js +194 -37
  274. package/dist/repertoire/tasks/transitions.js +16 -78
  275. package/dist/repertoire/tool-results.js +29 -0
  276. package/dist/repertoire/tools-attachments.js +317 -0
  277. package/dist/repertoire/tools-awaiting.js +360 -0
  278. package/dist/repertoire/tools-base.js +53 -1082
  279. package/dist/repertoire/tools-bluebubbles.js +1 -0
  280. package/dist/repertoire/tools-bridge.js +142 -0
  281. package/dist/repertoire/tools-bundle.js +984 -0
  282. package/dist/repertoire/tools-config.js +185 -0
  283. package/dist/repertoire/tools-continuity.js +248 -0
  284. package/dist/repertoire/tools-credential.js +381 -0
  285. package/dist/repertoire/tools-files.js +342 -0
  286. package/dist/repertoire/tools-flight.js +224 -0
  287. package/dist/repertoire/tools-flow.js +119 -0
  288. package/dist/repertoire/tools-github.js +1 -7
  289. package/dist/repertoire/tools-mail.js +1916 -0
  290. package/dist/repertoire/tools-notes.js +421 -0
  291. package/dist/repertoire/tools-obligations.js +142 -0
  292. package/dist/repertoire/tools-runtime.js +61 -0
  293. package/dist/repertoire/tools-session.js +809 -0
  294. package/dist/repertoire/tools-shell.js +120 -0
  295. package/dist/repertoire/tools-stripe.js +180 -0
  296. package/dist/repertoire/tools-surface.js +345 -0
  297. package/dist/repertoire/tools-teams.js +9 -39
  298. package/dist/repertoire/tools-travel.js +125 -0
  299. package/dist/repertoire/tools-trip.js +604 -0
  300. package/dist/repertoire/tools-user-profile.js +144 -0
  301. package/dist/repertoire/tools-vault.js +40 -0
  302. package/dist/repertoire/tools-voice.js +144 -0
  303. package/dist/repertoire/tools.js +115 -103
  304. package/dist/repertoire/travel-api-client.js +360 -0
  305. package/dist/repertoire/user-profile.js +131 -0
  306. package/dist/repertoire/vault-setup.js +246 -0
  307. package/dist/repertoire/vault-unlock.js +594 -0
  308. package/dist/scripts/claude-code-hook.js +41 -0
  309. package/dist/scripts/claude-code-stop-hook.js +47 -0
  310. package/dist/senses/attention-queue.js +116 -0
  311. package/dist/senses/await-turn-message.js +58 -0
  312. package/dist/senses/bluebubbles/active-turns.js +216 -0
  313. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  314. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  315. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
  316. package/dist/senses/bluebubbles/entry.js +77 -0
  317. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  318. package/dist/senses/bluebubbles/index.js +2548 -0
  319. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  320. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  321. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  322. package/dist/senses/bluebubbles/processed-log.js +133 -0
  323. package/dist/senses/bluebubbles/replay.js +137 -0
  324. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  325. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  326. package/dist/senses/bluebubbles-meta-guard.js +40 -0
  327. package/dist/senses/cli/bracketed-paste.js +82 -0
  328. package/dist/senses/cli/image-paste.js +287 -0
  329. package/dist/senses/cli/image-ref-navigation.js +75 -0
  330. package/dist/senses/cli/ink-app.js +156 -0
  331. package/dist/senses/cli/inline-diff.js +64 -0
  332. package/dist/senses/cli/input-keys.js +174 -0
  333. package/dist/senses/cli/kill-ring.js +86 -0
  334. package/dist/senses/cli/message-list.js +51 -0
  335. package/dist/senses/cli/ouro-tui.js +607 -0
  336. package/dist/senses/cli/spinner-imperative.js +135 -0
  337. package/dist/senses/cli/spinner.js +101 -0
  338. package/dist/senses/cli/status-line.js +60 -0
  339. package/dist/senses/cli/streaming-markdown.js +526 -0
  340. package/dist/senses/cli/tool-display.js +85 -0
  341. package/dist/senses/cli/tool-render.js +85 -0
  342. package/dist/senses/cli/tui-store.js +240 -0
  343. package/dist/senses/cli/virtual-list.js +35 -0
  344. package/dist/senses/cli-entry.js +60 -8
  345. package/dist/senses/cli-layout.js +100 -0
  346. package/dist/senses/cli.js +516 -204
  347. package/dist/senses/commands.js +66 -3
  348. package/dist/senses/habit-turn-message.js +108 -0
  349. package/dist/senses/inner-dialog-worker.js +185 -21
  350. package/dist/senses/inner-dialog.js +372 -27
  351. package/dist/senses/mail-entry.js +66 -0
  352. package/dist/senses/mail.js +379 -0
  353. package/dist/senses/pipeline.js +654 -181
  354. package/dist/senses/proactive-content-guard.js +51 -0
  355. package/dist/senses/shared-turn.js +392 -0
  356. package/dist/senses/surface-tool.js +70 -0
  357. package/dist/senses/teams-entry.js +60 -8
  358. package/dist/senses/teams.js +387 -98
  359. package/dist/senses/trust-gate.js +100 -5
  360. package/dist/senses/voice/audio-playback.js +237 -0
  361. package/dist/senses/voice/audio-routing.js +119 -0
  362. package/dist/senses/voice/elevenlabs.js +202 -0
  363. package/dist/senses/voice/floor-control.js +431 -0
  364. package/dist/senses/voice/floor-controller.js +115 -0
  365. package/dist/senses/voice/golden-path.js +116 -0
  366. package/dist/senses/voice/index.js +29 -0
  367. package/dist/senses/voice/meeting.js +113 -0
  368. package/dist/senses/voice/outbound.js +190 -0
  369. package/dist/senses/voice/phone.js +33 -0
  370. package/dist/senses/voice/playback.js +139 -0
  371. package/dist/senses/voice/realtime-eval.js +496 -0
  372. package/dist/senses/voice/realtime-trace.js +531 -0
  373. package/dist/senses/voice/transcript.js +70 -0
  374. package/dist/senses/voice/turn.js +191 -0
  375. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  376. package/dist/senses/voice/twilio-phone.js +5077 -0
  377. package/dist/senses/voice/types.js +2 -0
  378. package/dist/senses/voice/whisper.js +161 -0
  379. package/dist/senses/voice-entry.js +81 -0
  380. package/dist/senses/voice-realtime-eval-command.js +99 -0
  381. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  382. package/dist/senses/voice-twilio-entry.js +87 -0
  383. package/dist/trips/core.js +138 -0
  384. package/dist/trips/store.js +265 -0
  385. package/package.json +41 -7
  386. package/skills/agent-commerce.md +106 -0
  387. package/skills/browser-navigation.md +117 -0
  388. package/skills/commerce-setup-guide.md +116 -0
  389. package/skills/commerce-setup.md +84 -0
  390. package/skills/configure-dev-tools.md +99 -0
  391. package/skills/travel-planning.md +138 -0
  392. package/dist/heart/daemon/auth-flow.js +0 -351
  393. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  394. package/dist/heart/daemon/subagent-installer.js +0 -166
  395. package/dist/heart/safe-workspace.js +0 -228
  396. package/dist/heart/session-recall.js +0 -116
  397. package/dist/mind/associative-recall.js +0 -209
  398. package/dist/senses/bluebubbles-entry.js +0 -13
  399. package/dist/senses/bluebubbles.js +0 -1177
  400. package/dist/senses/debug-activity.js +0 -148
  401. package/subagents/README.md +0 -86
  402. package/subagents/work-doer.md +0 -237
  403. package/subagents/work-merger.md +0 -618
  404. package/subagents/work-planner.md +0 -390
  405. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  406. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  407. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  408. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  409. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  410. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  411. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  412. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  413. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  414. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  415. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  416. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  417. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  418. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  419. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  420. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,176 @@
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.HEALTH_TRACKED_EVENTS = exports.DaemonHealthWriter = void 0;
37
+ exports.isRollupStatus = isRollupStatus;
38
+ exports.isDaemonStatus = isDaemonStatus;
39
+ exports.getDefaultHealthPath = getDefaultHealthPath;
40
+ exports.createHealthNervesSink = createHealthNervesSink;
41
+ exports.readHealth = readHealth;
42
+ const fs = __importStar(require("fs"));
43
+ const os = __importStar(require("os"));
44
+ const path = __importStar(require("path"));
45
+ const runtime_1 = require("../../nerves/runtime");
46
+ /**
47
+ * Daemon-wide rollup vocabulary — locked layer-1 contract.
48
+ *
49
+ * - `RollupStatus` is what `computeDaemonRollup` returns (post-inventory,
50
+ * four-state). The function never returns `"down"` because by the time
51
+ * the rollup is reachable the daemon has already started, opened its
52
+ * socket, and read its agent inventory — pre-inventory failure is the
53
+ * caller's domain.
54
+ * - `DaemonStatus` is what `DaemonHealthState.status` accepts. The caller
55
+ * widens the rollup result with `"down"` along the daemon-entry failure
56
+ * path (e.g. when the daemon process can't read inventory at all).
57
+ *
58
+ * `isRollupStatus` and `isDaemonStatus` are runtime guards used both by
59
+ * `readHealth` (validating cached health files on disk) and by render-side
60
+ * consumers that want to narrow `unknown` JSON into the typed union before
61
+ * branching on it.
62
+ */
63
+ // Single source of truth — the literal lists below are the runtime
64
+ // projection of the type unions. A future literal added to RollupStatus
65
+ // MUST also be added to ROLLUP_STATUS_LITERALS or `satisfies` blows up
66
+ // at tsc. That tightens the Layer 1 contract: producer + consumer +
67
+ // guard all stay in lockstep.
68
+ const ROLLUP_STATUS_LITERALS = ["healthy", "partial", "degraded", "safe-mode"];
69
+ const DAEMON_STATUS_LITERALS = [...ROLLUP_STATUS_LITERALS, "down"];
70
+ const ROLLUP_STATUS_VALUES = new Set(ROLLUP_STATUS_LITERALS);
71
+ const DAEMON_STATUS_VALUES = new Set(DAEMON_STATUS_LITERALS);
72
+ function isRollupStatus(value) {
73
+ return typeof value === "string" && ROLLUP_STATUS_VALUES.has(value);
74
+ }
75
+ function isDaemonStatus(value) {
76
+ return typeof value === "string" && DAEMON_STATUS_VALUES.has(value);
77
+ }
78
+ class DaemonHealthWriter {
79
+ healthPath;
80
+ constructor(healthPath) {
81
+ this.healthPath = healthPath;
82
+ }
83
+ writeHealth(state) {
84
+ try {
85
+ const dir = path.dirname(this.healthPath);
86
+ fs.mkdirSync(dir, { recursive: true });
87
+ const tmpPath = `${this.healthPath}.tmp.${process.pid}`;
88
+ fs.writeFileSync(tmpPath, JSON.stringify(state, null, 2) + "\n", "utf-8");
89
+ fs.renameSync(tmpPath, this.healthPath);
90
+ (0, runtime_1.emitNervesEvent)({
91
+ component: "daemon",
92
+ event: "daemon.health_written",
93
+ message: "daemon health file written",
94
+ meta: { path: this.healthPath, status: state.status },
95
+ });
96
+ }
97
+ catch {
98
+ // Best-effort: if we can't write, don't crash the daemon.
99
+ }
100
+ }
101
+ }
102
+ exports.DaemonHealthWriter = DaemonHealthWriter;
103
+ function getDefaultHealthPath() {
104
+ return path.join(os.homedir(), ".ouro-cli", "daemon-health.json");
105
+ }
106
+ /** Events that trigger a debounced health file write */
107
+ exports.HEALTH_TRACKED_EVENTS = new Set([
108
+ "daemon.habit_cron_verification_failed",
109
+ "daemon.habit_fire",
110
+ "daemon.agent_exit",
111
+ "daemon.agent_started",
112
+ "daemon.agent_config_invalid",
113
+ "daemon.agent_config_failure",
114
+ "daemon.agent_entry_missing",
115
+ "daemon.agent_spawn_failed",
116
+ "daemon.agent_startup_stale_recovered",
117
+ "daemon.agent_restart_exhausted",
118
+ "daemon.agent_permanent_failure",
119
+ "daemon.agent_cooldown_recovery",
120
+ "daemon.bootstrap_degraded",
121
+ "daemon.safe_mode_entered",
122
+ "daemon.habit_scheduler_start",
123
+ ]);
124
+ /**
125
+ * Creates a nerves LogSink that triggers debounced health writes on relevant events.
126
+ * Components don't know about the health writer — they just emit events.
127
+ */
128
+ function createHealthNervesSink(writer, getState) {
129
+ let debounceTimer = null;
130
+ return (entry) => {
131
+ if (!exports.HEALTH_TRACKED_EVENTS.has(entry.event)) {
132
+ return;
133
+ }
134
+ // Debounce: max once per second
135
+ if (debounceTimer !== null) {
136
+ clearTimeout(debounceTimer);
137
+ }
138
+ debounceTimer = setTimeout(() => {
139
+ debounceTimer = null;
140
+ const state = getState();
141
+ writer.writeHealth(state);
142
+ }, 1000);
143
+ };
144
+ }
145
+ function readHealth(healthPath) {
146
+ try {
147
+ const raw = fs.readFileSync(healthPath, "utf-8");
148
+ const parsed = JSON.parse(raw);
149
+ if (!isDaemonStatus(parsed.status) ||
150
+ typeof parsed.mode !== "string" ||
151
+ typeof parsed.pid !== "number" ||
152
+ typeof parsed.startedAt !== "string" ||
153
+ typeof parsed.uptimeSeconds !== "number" ||
154
+ !Array.isArray(parsed.degraded) ||
155
+ typeof parsed.agents !== "object" ||
156
+ parsed.agents === null ||
157
+ typeof parsed.habits !== "object" ||
158
+ parsed.habits === null) {
159
+ return null;
160
+ }
161
+ return {
162
+ status: parsed.status,
163
+ mode: parsed.mode,
164
+ pid: parsed.pid,
165
+ startedAt: parsed.startedAt,
166
+ uptimeSeconds: parsed.uptimeSeconds,
167
+ safeMode: parsed.safeMode,
168
+ degraded: parsed.degraded,
169
+ agents: parsed.agents,
170
+ habits: parsed.habits,
171
+ };
172
+ }
173
+ catch {
174
+ return null;
175
+ }
176
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeDaemonRollup = computeDaemonRollup;
4
+ /**
5
+ * Pure rollup decision function — given the post-inventory daemon
6
+ * surface, returns the daemon-wide rollup state per the locked Layer 1
7
+ * vocabulary table:
8
+ *
9
+ * | rollup | when |
10
+ * | ---------- | --------------------------------------------------------- |
11
+ * | healthy | every enabled agent serving + no bootstrap-degraded + no safe-mode |
12
+ * | partial | (≥1 serving + ≥1 not serving) OR (all serving + ≥1 bootstrap-degraded) |
13
+ * | degraded | zero enabled agents serving (fresh install OR all unhealthy) |
14
+ * | safe-mode | `safeMode === true` overrides everything else |
15
+ *
16
+ * The function NEVER returns `"down"`. By the time `computeDaemonRollup`
17
+ * is reachable, the daemon process has started, opened its socket, and
18
+ * read its agent inventory — pre-inventory failure is the caller's
19
+ * domain. `daemon-entry.ts`'s startup-failure path assigns `"down"` to
20
+ * `DaemonHealthState.status` directly without consulting this function.
21
+ */
22
+ function computeDaemonRollup(input) {
23
+ // Safe mode wins, period. Crash-loop detection trumps everything —
24
+ // we want the human to see SAFE MODE, not a noisy partial/degraded.
25
+ if (input.safeMode) {
26
+ return "safe-mode";
27
+ }
28
+ // Count serving agents. "Serving" = "running" worker status.
29
+ // Anything else (crashed/stopped/starting/etc) is not serving.
30
+ let serving = 0;
31
+ let notServing = 0;
32
+ for (const agent of input.enabledAgents) {
33
+ if (agent.status === "running") {
34
+ serving++;
35
+ }
36
+ else {
37
+ notServing++;
38
+ }
39
+ }
40
+ // Zero-serving wins over bootstrap-degraded — we have no working
41
+ // agents to surface a "partially working" story about. This covers
42
+ // both fresh-install (`enabledAgents.length === 0`) and
43
+ // all-failed-live-check (`serving === 0` with `notServing > 0`).
44
+ // Render layer (cli-render.ts) splits the UX copy by inspecting the
45
+ // agents map; the rollup itself doesn't carry the distinction.
46
+ if (serving === 0) {
47
+ return "degraded";
48
+ }
49
+ // From here we have ≥1 serving agent. The remaining choice is
50
+ // healthy vs partial.
51
+ const hasUnhealthyAgent = notServing > 0;
52
+ const hasBootstrapDegraded = input.bootstrapDegraded.length > 0;
53
+ if (hasUnhealthyAgent || hasBootstrapDegraded) {
54
+ return "partial";
55
+ }
56
+ return "healthy";
57
+ }
@@ -2,6 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ensureCurrentDaemonRuntime = ensureCurrentDaemonRuntime;
4
4
  const runtime_1 = require("../../nerves/runtime");
5
+ /* v8 ignore start -- daemon liveness poll: real socket timing untestable in vitest @preserve */
6
+ async function verifyDaemonStarted(deps) {
7
+ if (!deps.checkSocketAlive)
8
+ return true;
9
+ const maxWaitMs = 10_000;
10
+ const pollIntervalMs = 500;
11
+ const deadline = Date.now() + maxWaitMs;
12
+ deps.onProgress?.("waiting for the replacement background service to answer");
13
+ while (Date.now() < deadline) {
14
+ await new Promise((r) => setTimeout(r, pollIntervalMs));
15
+ if (await deps.checkSocketAlive(deps.socketPath))
16
+ return true;
17
+ }
18
+ return false;
19
+ }
20
+ /* v8 ignore stop */
5
21
  function isKnownVersion(version) {
6
22
  return version !== "unknown" && version.trim().length > 0;
7
23
  }
@@ -17,6 +33,7 @@ function normalizeRuntimeIdentity(value) {
17
33
  lastUpdated: typeof value.lastUpdated === "string" ? value.lastUpdated : "unknown",
18
34
  repoRoot: typeof value.repoRoot === "string" ? value.repoRoot : "unknown",
19
35
  configFingerprint: typeof value.configFingerprint === "string" ? value.configFingerprint : "unknown",
36
+ managedAgents: typeof value.managedAgents === "string" ? value.managedAgents : "unknown",
20
37
  };
21
38
  }
22
39
  async function readRunningRuntimeIdentity(deps) {
@@ -55,23 +72,29 @@ function collectRuntimeDriftReasons(local, running) {
55
72
  running: running.configFingerprint,
56
73
  });
57
74
  }
58
- return reasons;
59
- }
60
- function formatRuntimeValue(reason) {
61
- if (reason.key === "configFingerprint") {
62
- return `${reason.running.slice(0, 12)} -> ${reason.local.slice(0, 12)}`;
75
+ if (isKnownRuntimeValue(local.managedAgents)
76
+ && isKnownRuntimeValue(running.managedAgents)
77
+ && local.managedAgents !== running.managedAgents) {
78
+ reasons.push({
79
+ key: "managedAgents",
80
+ label: "managed agents",
81
+ local: local.managedAgents,
82
+ running: running.managedAgents,
83
+ });
63
84
  }
64
- return `${reason.running} -> ${reason.local}`;
85
+ return reasons;
65
86
  }
66
- function formatRuntimeDriftSummary(reasons) {
67
- return reasons.map((reason) => `${reason.label} ${formatRuntimeValue(reason)}`).join("; ");
87
+ function formatRuntimeDriftPublicSummary(reasons) {
88
+ return reasons.map((reason) => reason.label).join(", ");
68
89
  }
69
90
  async function ensureCurrentDaemonRuntime(deps) {
91
+ deps.onProgress?.("checking whether an older background service is already running");
70
92
  const localRuntime = normalizeRuntimeIdentity({
71
93
  version: deps.localVersion,
72
94
  lastUpdated: deps.localLastUpdated,
73
95
  repoRoot: deps.localRepoRoot,
74
96
  configFingerprint: deps.localConfigFingerprint,
97
+ managedAgents: deps.localManagedAgents,
75
98
  });
76
99
  try {
77
100
  const runningRuntime = await readRunningRuntimeIdentity(deps);
@@ -80,17 +103,40 @@ async function ensureCurrentDaemonRuntime(deps) {
80
103
  let result;
81
104
  if (driftReasons.length > 0) {
82
105
  const includesVersionDrift = driftReasons.some((entry) => entry.key === "version");
83
- const driftSummary = formatRuntimeDriftSummary(driftReasons);
106
+ const publicDriftSummary = formatRuntimeDriftPublicSummary(driftReasons);
84
107
  try {
108
+ deps.onProgress?.("stopping the older background service");
85
109
  await deps.stopDaemon();
110
+ if (deps.prepareDaemonRuntimeReplacement) {
111
+ deps.onProgress?.("disabling daemon auto-restart during replacement");
112
+ try {
113
+ await Promise.resolve(deps.prepareDaemonRuntimeReplacement());
114
+ }
115
+ catch (error) {
116
+ (0, runtime_1.emitNervesEvent)({
117
+ level: "warn",
118
+ component: "daemon",
119
+ event: "daemon.runtime_sync_replacement_prepare_error",
120
+ message: "daemon runtime replacement preparation failed",
121
+ meta: {
122
+ socketPath: deps.socketPath,
123
+ reason: formatErrorReason(error),
124
+ },
125
+ });
126
+ }
127
+ }
86
128
  }
87
129
  catch (error) {
88
130
  const reason = formatErrorReason(error);
89
131
  result = {
132
+ ok: false,
90
133
  alreadyRunning: true,
91
134
  message: includesVersionDrift
92
- ? `daemon already running (${deps.socketPath}; could not replace stale daemon ${runningVersion} -> ${deps.localVersion}: ${reason})`
93
- : `daemon already running (${deps.socketPath}; could not replace drifted daemon ${driftSummary}: ${reason})`,
135
+ ? `daemon already running (${deps.socketPath}; could not replace the older background service ${runningVersion} -> ${deps.localVersion}: ${reason})`
136
+ : `daemon already running (${deps.socketPath}; could not replace the older background service after runtime drift ${publicDriftSummary}: ${reason})`,
137
+ startupFailureReason: includesVersionDrift
138
+ ? "could not replace the older background service"
139
+ : "could not replace the older background service after runtime drift",
94
140
  };
95
141
  (0, runtime_1.emitNervesEvent)({
96
142
  level: "warn",
@@ -103,10 +149,12 @@ async function ensureCurrentDaemonRuntime(deps) {
103
149
  localLastUpdated: localRuntime.lastUpdated,
104
150
  localRepoRoot: localRuntime.repoRoot,
105
151
  localConfigFingerprint: localRuntime.configFingerprint,
152
+ localManagedAgents: localRuntime.managedAgents,
106
153
  runningVersion,
107
154
  runningLastUpdated: runningRuntime.lastUpdated,
108
155
  runningRepoRoot: runningRuntime.repoRoot,
109
156
  runningConfigFingerprint: runningRuntime.configFingerprint,
157
+ runningManagedAgents: runningRuntime.managedAgents,
110
158
  action: "stale_replace_failed",
111
159
  driftKeys: driftReasons.map((entry) => entry.key),
112
160
  reason,
@@ -115,12 +163,27 @@ async function ensureCurrentDaemonRuntime(deps) {
115
163
  return result;
116
164
  }
117
165
  deps.cleanupStaleSocket(deps.socketPath);
166
+ deps.onProgress?.("starting the replacement background service");
167
+ const bootStartedAtMs = (deps.now ?? Date.now)();
118
168
  const started = await deps.startDaemonProcess(deps.socketPath);
169
+ const pid = started.pid ?? "unknown";
170
+ const startupCheck = deps.waitForDaemonStartup
171
+ ? await deps.waitForDaemonStartup({ pid: started.pid ?? null, bootStartedAtMs })
172
+ : { ok: await verifyDaemonStarted(deps) };
173
+ const verified = startupCheck.ok;
174
+ /* v8 ignore next -- daemon liveness failure: requires real daemon crash timing @preserve */
175
+ const suffix = verified
176
+ ? ""
177
+ : `\n${startupCheck.reason ?? "replacement background service did not answer in time"}; check logs with \`ouro logs\` or run \`ouro doctor\`.`;
119
178
  result = {
179
+ ok: verified,
120
180
  alreadyRunning: false,
121
181
  message: includesVersionDrift
122
- ? `restarted stale daemon from ${runningVersion} to ${deps.localVersion} (pid ${started.pid ?? "unknown"})`
123
- : `restarted drifted daemon (${driftSummary}) (pid ${started.pid ?? "unknown"})`,
182
+ ? `replaced an older background service ${runningVersion} -> ${deps.localVersion} (pid ${pid})${suffix}`
183
+ : `replaced an older background service after runtime drift: ${publicDriftSummary} (pid ${pid})${suffix}`,
184
+ verifyStartupStatus: verified,
185
+ startedPid: started.pid ?? null,
186
+ startupFailureReason: verified ? null : (startupCheck.reason ?? "replacement background service did not answer in time"),
124
187
  };
125
188
  (0, runtime_1.emitNervesEvent)({
126
189
  component: "daemon",
@@ -132,10 +195,12 @@ async function ensureCurrentDaemonRuntime(deps) {
132
195
  localLastUpdated: localRuntime.lastUpdated,
133
196
  localRepoRoot: localRuntime.repoRoot,
134
197
  localConfigFingerprint: localRuntime.configFingerprint,
198
+ localManagedAgents: localRuntime.managedAgents,
135
199
  runningVersion,
136
200
  runningLastUpdated: runningRuntime.lastUpdated,
137
201
  runningRepoRoot: runningRuntime.repoRoot,
138
202
  runningConfigFingerprint: runningRuntime.configFingerprint,
203
+ runningManagedAgents: runningRuntime.managedAgents,
139
204
  action: "stale_restarted",
140
205
  driftKeys: driftReasons.map((entry) => entry.key),
141
206
  pid: started.pid ?? null,
@@ -145,6 +210,7 @@ async function ensureCurrentDaemonRuntime(deps) {
145
210
  }
146
211
  if (!isKnownVersion(localRuntime.version) || !isKnownVersion(runningVersion)) {
147
212
  result = {
213
+ ok: true,
148
214
  alreadyRunning: true,
149
215
  message: `daemon already running (${deps.socketPath}; unable to verify version)`,
150
216
  };
@@ -158,10 +224,12 @@ async function ensureCurrentDaemonRuntime(deps) {
158
224
  localLastUpdated: localRuntime.lastUpdated,
159
225
  localRepoRoot: localRuntime.repoRoot,
160
226
  localConfigFingerprint: localRuntime.configFingerprint,
227
+ localManagedAgents: localRuntime.managedAgents,
161
228
  runningVersion,
162
229
  runningLastUpdated: runningRuntime.lastUpdated,
163
230
  runningRepoRoot: runningRuntime.repoRoot,
164
231
  runningConfigFingerprint: runningRuntime.configFingerprint,
232
+ runningManagedAgents: runningRuntime.managedAgents,
165
233
  action: "unknown_version",
166
234
  },
167
235
  });
@@ -171,6 +239,7 @@ async function ensureCurrentDaemonRuntime(deps) {
171
239
  catch (error) {
172
240
  const reason = formatErrorReason(error);
173
241
  const result = {
242
+ ok: true,
174
243
  alreadyRunning: true,
175
244
  message: `daemon already running (${deps.socketPath}; unable to verify version: ${reason})`,
176
245
  };
@@ -185,6 +254,7 @@ async function ensureCurrentDaemonRuntime(deps) {
185
254
  localLastUpdated: localRuntime.lastUpdated,
186
255
  localRepoRoot: localRuntime.repoRoot,
187
256
  localConfigFingerprint: localRuntime.configFingerprint,
257
+ localManagedAgents: localRuntime.managedAgents,
188
258
  action: "status_lookup_failed",
189
259
  reason,
190
260
  },
@@ -192,8 +262,12 @@ async function ensureCurrentDaemonRuntime(deps) {
192
262
  return result;
193
263
  }
194
264
  const result = {
265
+ ok: true,
195
266
  alreadyRunning: true,
196
267
  message: `daemon already running (${deps.socketPath})`,
268
+ verifyStartupStatus: true,
269
+ startedPid: null,
270
+ startupFailureReason: null,
197
271
  };
198
272
  (0, runtime_1.emitNervesEvent)({
199
273
  component: "daemon",
@@ -205,6 +279,7 @@ async function ensureCurrentDaemonRuntime(deps) {
205
279
  localLastUpdated: localRuntime.lastUpdated,
206
280
  localRepoRoot: localRuntime.repoRoot,
207
281
  localConfigFingerprint: localRuntime.configFingerprint,
282
+ localManagedAgents: localRuntime.managedAgents,
208
283
  action: "already_current",
209
284
  },
210
285
  });