@ouro.bot/cli 0.1.0-alpha.71 → 0.1.0-alpha.710

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 (505) 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 +4510 -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 +825 -0
  80. package/dist/heart/daemon/cli-desk.js +322 -0
  81. package/dist/heart/daemon/cli-exec.js +8194 -0
  82. package/dist/heart/daemon/cli-help.js +678 -0
  83. package/dist/heart/daemon/cli-parse.js +2476 -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 -1943
  89. package/dist/heart/daemon/daemon-entry.js +842 -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 +1289 -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 +1021 -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 +758 -0
  358. package/dist/rsvp/config.js +327 -0
  359. package/dist/rsvp/cutover.js +433 -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 +98 -0
  364. package/dist/rsvp/incident-bundle.js +97 -0
  365. package/dist/rsvp/migration.js +204 -0
  366. package/dist/rsvp/native-habit-runner.js +321 -0
  367. package/dist/rsvp/outbound-state.js +268 -0
  368. package/dist/rsvp/query.js +118 -0
  369. package/dist/rsvp/replay.js +233 -0
  370. package/dist/rsvp/snapshot.js +232 -0
  371. package/dist/rsvp/spend-ledger.js +175 -0
  372. package/dist/scripts/claude-code-hook.js +41 -0
  373. package/dist/scripts/claude-code-stop-hook.js +47 -0
  374. package/dist/senses/a2a-entry.js +115 -0
  375. package/dist/senses/attention-queue.js +186 -0
  376. package/dist/senses/await-turn-message.js +58 -0
  377. package/dist/senses/bluebubbles/active-turns.js +216 -0
  378. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  379. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  380. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +226 -19
  381. package/dist/senses/bluebubbles/context-packet.js +101 -0
  382. package/dist/senses/bluebubbles/context-smoke.js +144 -0
  383. package/dist/senses/bluebubbles/entry.js +77 -0
  384. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  385. package/dist/senses/bluebubbles/index.js +2881 -0
  386. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  387. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  388. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  389. package/dist/senses/bluebubbles/outbound-state.js +304 -0
  390. package/dist/senses/bluebubbles/processed-log.js +133 -0
  391. package/dist/senses/bluebubbles/replay.js +284 -0
  392. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  393. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  394. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  395. package/dist/senses/cli/bracketed-paste.js +82 -0
  396. package/dist/senses/cli/image-paste.js +287 -0
  397. package/dist/senses/cli/image-ref-navigation.js +75 -0
  398. package/dist/senses/cli/ink-app.js +156 -0
  399. package/dist/senses/cli/inline-diff.js +64 -0
  400. package/dist/senses/cli/input-keys.js +174 -0
  401. package/dist/senses/cli/kill-ring.js +86 -0
  402. package/dist/senses/cli/message-list.js +51 -0
  403. package/dist/senses/cli/ouro-tui.js +607 -0
  404. package/dist/senses/cli/spinner-imperative.js +135 -0
  405. package/dist/senses/cli/spinner.js +101 -0
  406. package/dist/senses/cli/status-line.js +60 -0
  407. package/dist/senses/cli/streaming-markdown.js +526 -0
  408. package/dist/senses/cli/tool-display.js +85 -0
  409. package/dist/senses/cli/tool-render.js +85 -0
  410. package/dist/senses/cli/tui-store.js +240 -0
  411. package/dist/senses/cli/virtual-list.js +35 -0
  412. package/dist/senses/cli-entry.js +60 -8
  413. package/dist/senses/cli-layout.js +100 -0
  414. package/dist/senses/cli.js +521 -214
  415. package/dist/senses/commands.js +66 -3
  416. package/dist/senses/context-packet-ledger.js +245 -0
  417. package/dist/senses/context-packets.js +154 -0
  418. package/dist/senses/habit-turn-message.js +160 -0
  419. package/dist/senses/mail-entry.js +66 -0
  420. package/dist/senses/mail.js +395 -0
  421. package/dist/senses/pipeline.js +952 -178
  422. package/dist/senses/private-runtime-worker.js +739 -0
  423. package/dist/senses/private-runtime.js +1157 -0
  424. package/dist/senses/proactive-content-guard.js +51 -0
  425. package/dist/senses/shared-turn.js +416 -0
  426. package/dist/senses/surface-tool.js +109 -0
  427. package/dist/senses/teams-entry.js +60 -8
  428. package/dist/senses/teams.js +397 -112
  429. package/dist/senses/trust-gate.js +104 -9
  430. package/dist/senses/voice/audio-playback.js +237 -0
  431. package/dist/senses/voice/audio-routing.js +119 -0
  432. package/dist/senses/voice/elevenlabs.js +202 -0
  433. package/dist/senses/voice/floor-control.js +431 -0
  434. package/dist/senses/voice/floor-controller.js +115 -0
  435. package/dist/senses/voice/golden-path.js +116 -0
  436. package/dist/senses/voice/index.js +29 -0
  437. package/dist/senses/voice/meeting.js +113 -0
  438. package/dist/senses/voice/outbound.js +190 -0
  439. package/dist/senses/voice/phone.js +33 -0
  440. package/dist/senses/voice/playback.js +139 -0
  441. package/dist/senses/voice/realtime-eval.js +496 -0
  442. package/dist/senses/voice/realtime-trace.js +531 -0
  443. package/dist/senses/voice/transcript.js +70 -0
  444. package/dist/senses/voice/turn.js +191 -0
  445. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  446. package/dist/senses/voice/twilio-phone.js +5081 -0
  447. package/dist/senses/voice/types.js +2 -0
  448. package/dist/senses/voice/whisper.js +161 -0
  449. package/dist/senses/voice-entry.js +81 -0
  450. package/dist/senses/voice-realtime-eval-command.js +99 -0
  451. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  452. package/dist/senses/voice-twilio-entry.js +87 -0
  453. package/dist/trips/core.js +138 -0
  454. package/dist/trips/store.js +265 -0
  455. package/dist/util/frontmatter.js +69 -0
  456. package/package.json +57 -12
  457. package/skills/agent-commerce.md +113 -0
  458. package/skills/browser-navigation.md +117 -0
  459. package/skills/commerce-setup-guide.md +116 -0
  460. package/skills/commerce-setup.md +84 -0
  461. package/skills/configure-dev-tools.md +99 -0
  462. package/skills/travel-planning.md +138 -0
  463. package/dist/heart/daemon/auth-flow.js +0 -409
  464. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  465. package/dist/heart/daemon/update-hooks.js +0 -138
  466. package/dist/heart/safe-workspace.js +0 -228
  467. package/dist/heart/session-recall.js +0 -116
  468. package/dist/mind/friends/channel.js +0 -84
  469. package/dist/mind/friends/group-context.js +0 -144
  470. package/dist/mind/friends/resolver.js +0 -84
  471. package/dist/mind/friends/store-file.js +0 -190
  472. package/dist/mind/friends/store.js +0 -4
  473. package/dist/mind/friends/tokens.js +0 -26
  474. package/dist/mind/friends/trust-explanation.js +0 -74
  475. package/dist/mind/friends/types.js +0 -29
  476. package/dist/repertoire/tasks/board.js +0 -134
  477. package/dist/repertoire/tasks/index.js +0 -224
  478. package/dist/repertoire/tasks/lifecycle.js +0 -80
  479. package/dist/repertoire/tasks/middleware.js +0 -65
  480. package/dist/repertoire/tasks/parser.js +0 -173
  481. package/dist/repertoire/tasks/scanner.js +0 -132
  482. package/dist/repertoire/tasks/transitions.js +0 -144
  483. package/dist/senses/bluebubbles-entry.js +0 -13
  484. package/dist/senses/bluebubbles.js +0 -1180
  485. package/dist/senses/debug-activity.js +0 -148
  486. package/dist/senses/inner-dialog-worker.js +0 -90
  487. package/dist/senses/inner-dialog.js +0 -480
  488. package/subagents/README.md +0 -7
  489. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  490. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  491. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  492. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  493. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  494. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  495. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  496. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  497. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  498. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  499. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  500. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  501. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  502. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  503. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  504. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  505. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.deliverCrossChatMessage = deliverCrossChatMessage;
4
- const types_1 = require("../mind/friends/types");
4
+ const friends_1 = require("@ouro.bot/friends");
5
5
  const runtime_1 = require("../nerves/runtime");
6
6
  function buildPendingEnvelope(request, agentName, now) {
7
7
  return {
@@ -13,17 +13,18 @@ function buildPendingEnvelope(request, agentName, now) {
13
13
  timestamp: now,
14
14
  };
15
15
  }
16
- function queueForLater(request, deps, detail) {
16
+ function queueForLater(request, deps, detail, rawStatus = "queued_for_later") {
17
17
  deps.queuePending(buildPendingEnvelope(request, deps.agentName, (deps.now ?? Date.now)()));
18
18
  return {
19
19
  status: "queued_for_later",
20
20
  detail,
21
+ ...(rawStatus !== "queued_for_later" ? { rawStatus } : {}),
21
22
  };
22
23
  }
23
24
  function isExplicitlyAuthorized(request) {
24
25
  return request.intent === "explicit_cross_chat"
25
26
  && Boolean(request.authorizingSession)
26
- && (0, types_1.isTrustedLevel)(request.authorizingSession?.trustLevel);
27
+ && (0, friends_1.isTrustedLevel)(request.authorizingSession?.trustLevel);
27
28
  }
28
29
  async function deliverCrossChatMessage(request, deps) {
29
30
  (0, runtime_1.emitNervesEvent)({
@@ -38,31 +39,16 @@ async function deliverCrossChatMessage(request, deps) {
38
39
  authorizingTrustLevel: request.authorizingSession?.trustLevel ?? null,
39
40
  },
40
41
  });
41
- if (request.intent === "generic_outreach") {
42
- const result = queueForLater(request, deps, "generic outreach stays queued until the target session is next active");
43
- (0, runtime_1.emitNervesEvent)({
44
- component: "engine",
45
- event: "engine.cross_chat_delivery_end",
46
- message: "queued generic outreach for later delivery",
47
- meta: {
48
- friendId: request.friendId,
49
- channel: request.channel,
50
- key: request.key,
51
- status: result.status,
52
- },
53
- });
54
- return result;
55
- }
56
- if (!isExplicitlyAuthorized(request)) {
42
+ if (!isExplicitlyAuthorized(request) && request.intent !== "generic_outreach") {
57
43
  const result = {
58
44
  status: "blocked",
59
- detail: "explicit cross-chat delivery requires a trusted asking session",
45
+ detail: "cross-chat delivery requires a trusted asking session or generic outreach intent",
60
46
  };
61
47
  (0, runtime_1.emitNervesEvent)({
62
48
  level: "warn",
63
49
  component: "engine",
64
50
  event: "engine.cross_chat_delivery_end",
65
- message: "blocked explicit cross-chat delivery",
51
+ message: "blocked cross-chat delivery",
66
52
  meta: {
67
53
  friendId: request.friendId,
68
54
  channel: request.channel,
@@ -109,7 +95,7 @@ async function deliverCrossChatMessage(request, deps) {
109
95
  });
110
96
  return result;
111
97
  }
112
- const result = queueForLater(request, deps, direct.detail.trim() || "live delivery unavailable right now; queued for the next active turn");
98
+ const result = queueForLater(request, deps, direct.detail.trim() || "live delivery unavailable right now; queued for the next active turn", direct.status);
113
99
  (0, runtime_1.emitNervesEvent)({
114
100
  component: "engine",
115
101
  event: "engine.cross_chat_delivery_end",
@@ -0,0 +1,451 @@
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.vaultUnlockOrRecoverFix = vaultUnlockOrRecoverFix;
37
+ exports.checkAgentConfig = checkAgentConfig;
38
+ exports.checkAgentConfigWithProviderHealth = checkAgentConfigWithProviderHealth;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const identity_1 = require("../identity");
42
+ const runtime_1 = require("../../nerves/runtime");
43
+ const provider_models_1 = require("../provider-models");
44
+ const provider_credentials_1 = require("../provider-credentials");
45
+ const provider_readiness_cache_1 = require("../provider-readiness-cache");
46
+ const vault_unlock_1 = require("../../repertoire/vault-unlock");
47
+ const readiness_repair_1 = require("./readiness-repair");
48
+ const provider_ping_progress_1 = require("./provider-ping-progress");
49
+ const LANES = [
50
+ { lane: "outward", facing: "humanFacing" },
51
+ { lane: "inner", facing: "agentFacing" },
52
+ ];
53
+ function isAgentProvider(value) {
54
+ return Object.prototype.hasOwnProperty.call(identity_1.PROVIDER_CREDENTIALS, value);
55
+ }
56
+ function agentRootFor(agentName, bundlesRoot) {
57
+ return path.join(bundlesRoot, `${agentName}.ouro`);
58
+ }
59
+ function configPathFor(agentName, bundlesRoot) {
60
+ return path.join(agentRootFor(agentName, bundlesRoot), "agent.json");
61
+ }
62
+ function laneForFacing(facing) {
63
+ return facing === "humanFacing" ? "outward" : "inner";
64
+ }
65
+ function resolveFacingProvider(parsed, facing, agentName, agentJsonPath) {
66
+ const raw = parsed[facing];
67
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
68
+ return {
69
+ ok: false,
70
+ result: {
71
+ ok: false,
72
+ error: `agent.json for '${agentName}' is missing ${facing}.provider`,
73
+ fix: `Add ${facing}: { provider, model } to ${agentJsonPath}. Valid providers: ${Object.keys(identity_1.PROVIDER_CREDENTIALS).join(", ")}`,
74
+ },
75
+ };
76
+ }
77
+ const provider = raw.provider;
78
+ if (typeof provider !== "string" || provider.length === 0) {
79
+ return {
80
+ ok: false,
81
+ result: {
82
+ ok: false,
83
+ error: `agent.json for '${agentName}' is missing ${facing}.provider`,
84
+ fix: `Set ${facing}.provider in ${agentJsonPath}. Valid providers: ${Object.keys(identity_1.PROVIDER_CREDENTIALS).join(", ")}`,
85
+ },
86
+ };
87
+ }
88
+ if (!isAgentProvider(provider)) {
89
+ return {
90
+ ok: false,
91
+ result: {
92
+ ok: false,
93
+ error: `Unknown provider '${provider}' in ${facing}.provider for '${agentName}'`,
94
+ fix: `Set ${facing}.provider to one of: ${Object.keys(identity_1.PROVIDER_CREDENTIALS).join(", ")}`,
95
+ },
96
+ };
97
+ }
98
+ const rawModel = raw.model;
99
+ const model = typeof rawModel === "string" && rawModel.trim().length > 0
100
+ ? rawModel.trim()
101
+ : (0, provider_models_1.getDefaultModelForProvider)(provider);
102
+ return { ok: true, selected: { facing, lane: laneForFacing(facing), provider, model } };
103
+ }
104
+ function validatePrivateRuntimeConfig(agentName, agentJsonPath, parsed) {
105
+ const privateRuntime = parsed.privateRuntime;
106
+ if (privateRuntime === undefined)
107
+ return null;
108
+ if (!privateRuntime || typeof privateRuntime !== "object" || Array.isArray(privateRuntime)) {
109
+ return {
110
+ ok: false,
111
+ error: `agent.json for '${agentName}' has invalid privateRuntime config; privateRuntime must be an object.`,
112
+ fix: `Use privateRuntime only for private-runtime policy such as { autoStart: false } in ${agentJsonPath}. Provider/model selection belongs to the inner lane: ouro use --agent ${agentName} --lane inner --provider <provider> --model <model>.`,
113
+ };
114
+ }
115
+ const privateRuntimeRecord = privateRuntime;
116
+ const forbidden = ["provider", "model"].filter((key) => Object.prototype.hasOwnProperty.call(privateRuntimeRecord, key));
117
+ if (forbidden.length === 0)
118
+ return null;
119
+ return {
120
+ ok: false,
121
+ error: `agent.json for '${agentName}' cannot set ${forbidden.map((key) => `privateRuntime.${key}`).join(" or ")}; privateRuntime cannot select providers or models.`,
122
+ fix: `Remove ${forbidden.map((key) => `privateRuntime.${key}`).join(" and ")} from ${agentJsonPath}. Provider/model selection belongs to the inner lane: ouro use --agent ${agentName} --lane inner --provider <provider> --model <model>.`,
123
+ };
124
+ }
125
+ function readAgentConfigForProviderCheck(agentName, bundlesRoot) {
126
+ const agentJsonPath = configPathFor(agentName, bundlesRoot);
127
+ let raw;
128
+ try {
129
+ raw = fs.readFileSync(agentJsonPath, "utf-8");
130
+ }
131
+ catch {
132
+ return {
133
+ ok: false,
134
+ result: {
135
+ ok: false,
136
+ error: `agent.json not found at ${agentJsonPath}`,
137
+ fix: `Run 'ouro hatch ${agentName}' to create the agent bundle, or verify that ${bundlesRoot}/${agentName}.ouro/ exists.`,
138
+ },
139
+ };
140
+ }
141
+ let parsed;
142
+ try {
143
+ parsed = JSON.parse(raw);
144
+ }
145
+ catch {
146
+ return {
147
+ ok: false,
148
+ result: {
149
+ ok: false,
150
+ error: `agent.json at ${agentJsonPath} contains invalid JSON`,
151
+ fix: `Open ${agentJsonPath} and fix the JSON syntax.`,
152
+ },
153
+ };
154
+ }
155
+ if (parsed.enabled === false) {
156
+ return { ok: true, disabled: true, agentJsonPath, parsed };
157
+ }
158
+ const privateRuntimeError = validatePrivateRuntimeConfig(agentName, agentJsonPath, parsed);
159
+ if (privateRuntimeError)
160
+ return { ok: false, result: privateRuntimeError };
161
+ return { ok: true, disabled: false, agentJsonPath, parsed };
162
+ }
163
+ function readProviderSelectionForCheck(agentName, bundlesRoot) {
164
+ const configResult = readAgentConfigForProviderCheck(agentName, bundlesRoot);
165
+ if (!configResult.ok)
166
+ return { ok: false, result: configResult.result };
167
+ if (configResult.disabled)
168
+ return { ok: true, disabled: true };
169
+ const bindings = {};
170
+ for (const { lane, facing } of LANES) {
171
+ const selected = resolveFacingProvider(configResult.parsed, facing, agentName, configResult.agentJsonPath);
172
+ if (!selected.ok)
173
+ return { ok: false, result: selected.result };
174
+ bindings[lane] = selected.selected;
175
+ }
176
+ return {
177
+ ok: true,
178
+ disabled: false,
179
+ agentRoot: agentRootFor(agentName, bundlesRoot),
180
+ bindings,
181
+ };
182
+ }
183
+ function providerCredentialConfig(record) {
184
+ return {
185
+ ...record.credentials,
186
+ ...record.config,
187
+ };
188
+ }
189
+ function pingAttemptCount(result) {
190
+ if (Array.isArray(result.attempts))
191
+ return result.attempts.length;
192
+ return undefined;
193
+ }
194
+ function missingCredentialResult(agentName, lane, provider, model, credentialPath) {
195
+ return {
196
+ ok: false,
197
+ error: `${lane} provider ${provider} model ${model} has no credentials in ${agentName}'s vault at ${credentialPath}`,
198
+ fix: `Run 'ouro auth --agent ${agentName} --provider ${provider}' to authenticate.`,
199
+ issue: (0, readiness_repair_1.providerCredentialMissingIssue)({
200
+ agentName,
201
+ lane,
202
+ provider,
203
+ model,
204
+ credentialPath,
205
+ }),
206
+ };
207
+ }
208
+ function isTransientVaultError(error) {
209
+ const normalized = error.toLowerCase();
210
+ return (normalized.includes("timed out") ||
211
+ normalized.includes("econnrefused") ||
212
+ normalized.includes("socket hang up") ||
213
+ normalized.includes("etimedout"));
214
+ }
215
+ function invalidPoolResult(agentName, lane, provider, model, pool) {
216
+ if (pool.reason === "unavailable" && isTransientVaultError(pool.error)) {
217
+ return {
218
+ ok: false,
219
+ error: `${lane} provider ${provider} model ${model} cannot read provider credentials from ${agentName}'s vault: ${pool.error}`,
220
+ fix: `Vault read timed out -- this usually resolves on retry. Run 'ouro up' again.`,
221
+ };
222
+ }
223
+ if (pool.reason === "unavailable" && isVaultLockedError(pool.error)) {
224
+ return {
225
+ ok: false,
226
+ error: `${lane} provider ${provider} model ${model} cannot read provider credentials because ${agentName}'s credential vault is locked on this machine.`,
227
+ fix: vaultUnlockOrRecoverFix(agentName),
228
+ issue: (0, readiness_repair_1.vaultLockedIssue)(agentName),
229
+ };
230
+ }
231
+ if (pool.reason === "unavailable" && (0, vault_unlock_1.isCredentialVaultNotConfiguredError)(pool.error)) {
232
+ return {
233
+ ok: false,
234
+ error: `${lane} provider ${provider} model ${model} cannot read provider credentials because ${agentName}'s credential vault is not configured in agent.json.`,
235
+ fix: (0, vault_unlock_1.vaultCreateRecoverFix)(agentName, `Then run 'ouro auth --agent ${agentName} --provider ${provider}' and rerun 'ouro up'.`),
236
+ issue: (0, readiness_repair_1.vaultUnconfiguredIssue)(agentName),
237
+ };
238
+ }
239
+ if (pool.reason === "invalid") {
240
+ return {
241
+ ok: false,
242
+ error: `${lane} provider ${provider} model ${model} cannot read provider credentials from ${agentName}'s vault at ${pool.poolPath}: ${pool.error}`,
243
+ fix: `Run 'ouro auth --agent ${agentName} --provider ${provider}' to rewrite this provider credential, then run 'ouro up' again.`,
244
+ };
245
+ }
246
+ return {
247
+ ok: false,
248
+ error: `${lane} provider ${provider} model ${model} cannot read provider credentials from ${agentName}'s vault at ${pool.poolPath}: ${pool.error}`,
249
+ fix: vaultUnlockOrRecoverFix(agentName, `Then run 'ouro up' again. If the credential is missing or stale after unlock or recovery, run 'ouro auth --agent ${agentName} --provider ${provider}'.`),
250
+ };
251
+ }
252
+ function isVaultLockedError(error) {
253
+ const normalized = error.toLowerCase();
254
+ return /(?:ouro )?credential vault is locked|vault(?: is)? locked/.test(normalized);
255
+ }
256
+ function vaultUnlockOrRecoverFix(agentName, nextStep = "Then run 'ouro up' again.") {
257
+ return (0, vault_unlock_1.vaultUnlockReplaceRecoverFix)(agentName, nextStep);
258
+ }
259
+ function failedPingResult(agentName, lane, provider, model, result) {
260
+ return {
261
+ ok: false,
262
+ error: `${lane} provider ${provider} model ${model} failed live check: ${result.message}`,
263
+ fix: (0, readiness_repair_1.providerLiveCheckFix)({
264
+ agentName,
265
+ lane,
266
+ provider,
267
+ classification: result.classification,
268
+ }),
269
+ issue: (0, readiness_repair_1.providerLiveCheckFailedIssue)({
270
+ agentName,
271
+ lane,
272
+ provider,
273
+ model,
274
+ classification: result.classification,
275
+ message: result.message,
276
+ }),
277
+ };
278
+ }
279
+ function credentialRecordForLane(pool, provider) {
280
+ return pool.providers[provider];
281
+ }
282
+ function laneAudienceLabel(lane) {
283
+ return lane === "outward" ? "chat" : "inner lane";
284
+ }
285
+ function bindingLabel(binding) {
286
+ return `${binding.provider} / ${binding.model}`;
287
+ }
288
+ function selectedProviderPlan(agentName, bindings) {
289
+ return [
290
+ `${agentName}: checking the providers in agent.json`,
291
+ ...LANES.map(({ lane }) => `- ${laneAudienceLabel(lane)}: ${bindingLabel(bindings[lane])}`),
292
+ ].join("\n");
293
+ }
294
+ function selectedProvidersForBindings(bindings) {
295
+ return [...new Set(LANES.map(({ lane }) => bindings[lane].provider))];
296
+ }
297
+ function mapVaultRefreshProgress(agentName, onProgress) {
298
+ return (message) => {
299
+ if (message.startsWith("reading vault items for ")) {
300
+ onProgress(`${agentName}: opening saved provider credentials in the vault`);
301
+ return;
302
+ }
303
+ const providerRead = message.match(/^reading ([a-z0-9-]+) credentials\.\.\.$/i);
304
+ if (providerRead) {
305
+ onProgress(`${agentName}: reading saved ${providerRead[1]} credentials`);
306
+ return;
307
+ }
308
+ if (message === "parsing provider credentials...") {
309
+ onProgress(`${agentName}: organizing saved provider credentials`);
310
+ }
311
+ };
312
+ }
313
+ function providerPingSubject(agentName, lanes) {
314
+ const laneList = lanes.map((lane) => laneAudienceLabel(lane)).join(" + ");
315
+ return `${agentName} (${laneList})`;
316
+ }
317
+ /**
318
+ * Structural validation only. Live provider credential validation belongs to
319
+ * checkAgentConfigWithProviderHealth(), which reads the agent vault and pings.
320
+ */
321
+ function checkAgentConfig(agentName, bundlesRoot) {
322
+ const selectionResult = readProviderSelectionForCheck(agentName, bundlesRoot);
323
+ if (!selectionResult.ok)
324
+ return selectionResult.result;
325
+ if (selectionResult.disabled)
326
+ return { ok: true };
327
+ (0, runtime_1.emitNervesEvent)({
328
+ component: "daemon",
329
+ event: "daemon.agent_config_valid",
330
+ message: "agent config validation passed",
331
+ meta: {
332
+ agent: agentName,
333
+ providers: selectedProvidersForBindings(selectionResult.bindings),
334
+ liveProviderCheck: false,
335
+ },
336
+ });
337
+ return { ok: true };
338
+ }
339
+ async function checkAgentConfigWithProviderHealth(agentName, bundlesRoot, deps = {}) {
340
+ const selectionResult = readProviderSelectionForCheck(agentName, bundlesRoot);
341
+ if (!selectionResult.ok)
342
+ return selectionResult.result;
343
+ if (selectionResult.disabled)
344
+ return { ok: true };
345
+ const agentRoot = agentRootFor(agentName, bundlesRoot);
346
+ const shouldRecordReadiness = deps.recordReadiness !== false;
347
+ deps.onProgress?.(selectedProviderPlan(agentName, selectionResult.bindings));
348
+ const ping = deps.pingProvider ?? (await Promise.resolve().then(() => __importStar(require("../provider-ping")))).pingProvider;
349
+ const providers = selectedProvidersForBindings(selectionResult.bindings);
350
+ const poolResult = await (0, provider_credentials_1.refreshProviderCredentialPool)(agentName, {
351
+ ...(deps.onProgress ? { onProgress: mapVaultRefreshProgress(agentName, deps.onProgress) } : {}),
352
+ providers,
353
+ preserveCachedOnFailure: true,
354
+ });
355
+ const pingGroups = new Map();
356
+ for (const { lane } of LANES) {
357
+ const binding = selectionResult.bindings[lane];
358
+ if (!poolResult.ok) {
359
+ if (poolResult.reason === "missing") {
360
+ return missingCredentialResult(agentName, lane, binding.provider, binding.model, poolResult.poolPath);
361
+ }
362
+ return invalidPoolResult(agentName, lane, binding.provider, binding.model, {
363
+ ...poolResult,
364
+ reason: poolResult.reason,
365
+ });
366
+ }
367
+ const record = credentialRecordForLane(poolResult.pool, binding.provider);
368
+ if (!record) {
369
+ return missingCredentialResult(agentName, lane, binding.provider, binding.model, poolResult.poolPath);
370
+ }
371
+ const key = `${binding.provider}\0${binding.model}\0${record.revision}`;
372
+ const group = pingGroups.get(key);
373
+ if (group) {
374
+ group.lanes.push(lane);
375
+ }
376
+ else {
377
+ pingGroups.set(key, {
378
+ provider: binding.provider,
379
+ model: binding.model,
380
+ record,
381
+ lanes: [lane],
382
+ });
383
+ }
384
+ }
385
+ const groups = [...pingGroups.values()];
386
+ const pingResults = await Promise.all(groups.map(async (group) => {
387
+ const result = await ping(group.provider, providerCredentialConfig(group.record), {
388
+ model: group.model,
389
+ ...(deps.providerPingOptions ?? {}),
390
+ ...(deps.onProgress
391
+ ? (0, provider_ping_progress_1.createProviderPingProgressReporter)({
392
+ provider: group.provider,
393
+ model: group.model,
394
+ subject: providerPingSubject(agentName, group.lanes),
395
+ }, deps.onProgress)
396
+ : {}),
397
+ });
398
+ return { group, result };
399
+ }));
400
+ let firstFailure = null;
401
+ for (const { group, result } of pingResults) {
402
+ if (!result.ok) {
403
+ for (const lane of group.lanes) {
404
+ if (shouldRecordReadiness) {
405
+ (0, provider_readiness_cache_1.recordProviderLaneReadiness)({
406
+ agentRoot,
407
+ agentName,
408
+ lane,
409
+ provider: group.provider,
410
+ model: group.model,
411
+ credentialRevision: group.record.revision,
412
+ status: "failed",
413
+ checkedAt: new Date().toISOString(),
414
+ error: result.message,
415
+ attempts: pingAttemptCount(result),
416
+ });
417
+ }
418
+ }
419
+ firstFailure ??= failedPingResult(agentName, group.lanes[0], group.provider, group.model, result);
420
+ continue;
421
+ }
422
+ for (const lane of group.lanes) {
423
+ if (shouldRecordReadiness) {
424
+ (0, provider_readiness_cache_1.recordProviderLaneReadiness)({
425
+ agentRoot,
426
+ agentName,
427
+ lane,
428
+ provider: group.provider,
429
+ model: group.model,
430
+ credentialRevision: group.record.revision,
431
+ status: "ready",
432
+ checkedAt: new Date().toISOString(),
433
+ attempts: pingAttemptCount(result),
434
+ });
435
+ }
436
+ }
437
+ }
438
+ if (firstFailure)
439
+ return firstFailure;
440
+ (0, runtime_1.emitNervesEvent)({
441
+ component: "daemon",
442
+ event: "daemon.agent_config_valid",
443
+ message: "agent config validation passed",
444
+ meta: {
445
+ agent: agentName,
446
+ providers: [...new Set([...pingGroups.values()].map((group) => group.provider))],
447
+ liveProviderCheck: true,
448
+ },
449
+ });
450
+ return { ok: true };
451
+ }