@ouro.bot/cli 0.1.0-alpha.73 → 0.1.0-alpha.731

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 (530) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -23
  3. package/RepairGuide.ouro/agent.json +5 -0
  4. package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
  5. package/RepairGuide.ouro/psyche/SOUL.md +55 -0
  6. package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
  7. package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
  8. package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
  9. package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
  10. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  12. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  13. package/assets/bluebubbles-host +264 -0
  14. package/changelog.json +4645 -14
  15. package/dist/a2a/card.js +57 -0
  16. package/dist/a2a/client.js +180 -0
  17. package/dist/a2a/config.js +50 -0
  18. package/dist/a2a/delegation-stores.js +56 -0
  19. package/dist/a2a/did-resolution.js +93 -0
  20. package/dist/a2a/identity.js +170 -0
  21. package/dist/a2a/inbound-share.js +107 -0
  22. package/dist/a2a/mission-result-wire.js +196 -0
  23. package/dist/a2a/onboarding.js +115 -0
  24. package/dist/a2a/pin-store.js +132 -0
  25. package/dist/a2a/seen-ledger.js +120 -0
  26. package/dist/a2a/server.js +604 -0
  27. package/dist/a2a/task-store.js +69 -0
  28. package/dist/a2a/transport.js +45 -0
  29. package/dist/a2a/types.js +3 -0
  30. package/dist/arc/attention-types.js +8 -0
  31. package/dist/arc/cares.js +144 -0
  32. package/dist/arc/episodes.js +118 -0
  33. package/dist/arc/evolution.js +490 -0
  34. package/dist/arc/flight-recorder.js +1034 -0
  35. package/dist/arc/intentions.js +134 -0
  36. package/dist/arc/json-store.js +117 -0
  37. package/dist/arc/obligations.js +348 -0
  38. package/dist/arc/packets.js +336 -0
  39. package/dist/arc/presence.js +185 -0
  40. package/dist/arc/task-lifecycle.js +57 -0
  41. package/dist/commerce/store.js +755 -0
  42. package/dist/commerce/types.js +3 -0
  43. package/dist/heart/active-work.js +874 -43
  44. package/dist/heart/agent-entry.js +190 -3
  45. package/dist/heart/approval-store.js +791 -0
  46. package/dist/heart/attachments/image-normalize.js +194 -0
  47. package/dist/heart/attachments/materialize.js +97 -0
  48. package/dist/heart/attachments/originals.js +88 -0
  49. package/dist/heart/attachments/render.js +29 -0
  50. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  51. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  52. package/dist/heart/attachments/sources/index.js +16 -0
  53. package/dist/heart/attachments/store.js +103 -0
  54. package/dist/heart/attachments/types.js +93 -0
  55. package/dist/heart/auth/auth-flow.js +479 -0
  56. package/dist/heart/autonomy-budget.js +434 -0
  57. package/dist/heart/awaiting/await-alert.js +146 -0
  58. package/dist/heart/awaiting/await-expiry.js +108 -0
  59. package/dist/heart/awaiting/await-loader.js +91 -0
  60. package/dist/heart/awaiting/await-parser.js +141 -0
  61. package/dist/heart/awaiting/await-runtime-state.js +100 -0
  62. package/dist/heart/awaiting/await-scheduler.js +378 -0
  63. package/dist/heart/background-operations.js +281 -0
  64. package/dist/heart/bridges/manager.js +137 -17
  65. package/dist/heart/bridges/store.js +14 -2
  66. package/dist/heart/bundle-state.js +168 -0
  67. package/dist/heart/commitments.js +135 -0
  68. package/dist/heart/config-registry.js +331 -0
  69. package/dist/heart/config.js +120 -129
  70. package/dist/heart/context-loss-gauntlet.js +354 -0
  71. package/dist/heart/context-loss-sentinel.js +1155 -0
  72. package/dist/heart/core.js +1763 -320
  73. package/dist/heart/cross-chat-delivery.js +8 -22
  74. package/dist/heart/daemon/agent-config-check.js +451 -0
  75. package/dist/heart/daemon/agent-discovery.js +185 -3
  76. package/dist/heart/daemon/agent-service.js +542 -0
  77. package/dist/heart/daemon/agentic-repair.js +547 -0
  78. package/dist/heart/daemon/await-private-wake.js +59 -0
  79. package/dist/heart/daemon/bluebubbles-cli-integration.js +71 -0
  80. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  81. package/dist/heart/daemon/bluebubbles-host-protocol.js +433 -0
  82. package/dist/heart/daemon/bluebubbles-host.js +273 -0
  83. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  84. package/dist/heart/daemon/cadence.js +180 -0
  85. package/dist/heart/daemon/cli-defaults.js +832 -0
  86. package/dist/heart/daemon/cli-desk.js +322 -0
  87. package/dist/heart/daemon/cli-exec.js +8620 -0
  88. package/dist/heart/daemon/cli-help.js +705 -0
  89. package/dist/heart/daemon/cli-parse.js +2712 -0
  90. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  91. package/dist/heart/daemon/cli-render.js +777 -0
  92. package/dist/heart/daemon/cli-types.js +8 -0
  93. package/dist/heart/daemon/connect-bay.js +323 -0
  94. package/dist/heart/daemon/daemon-cli.js +29 -2093
  95. package/dist/heart/daemon/daemon-entry.js +842 -10
  96. package/dist/heart/daemon/daemon-health.js +176 -0
  97. package/dist/heart/daemon/daemon-rollup.js +57 -0
  98. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  99. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  100. package/dist/heart/daemon/daemon.js +1610 -87
  101. package/dist/heart/daemon/dns-workflow.js +394 -0
  102. package/dist/heart/daemon/doctor-types.js +8 -0
  103. package/dist/heart/daemon/doctor.js +1689 -0
  104. package/dist/heart/daemon/freshness.js +345 -0
  105. package/dist/heart/daemon/habit-private-wake.js +61 -0
  106. package/dist/heart/daemon/health-monitor.js +142 -11
  107. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  108. package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
  109. package/dist/heart/daemon/http-health-probe.js +80 -0
  110. package/dist/heart/daemon/human-command-screens.js +234 -0
  111. package/dist/heart/daemon/human-readiness.js +114 -0
  112. package/dist/heart/daemon/inner-status.js +78 -0
  113. package/dist/heart/daemon/interactive-repair.js +394 -0
  114. package/dist/heart/daemon/launchd.js +37 -8
  115. package/dist/heart/daemon/log-tailer.js +79 -10
  116. package/dist/heart/daemon/logs-prune.js +132 -0
  117. package/dist/heart/daemon/mcp-canary.js +524 -0
  118. package/dist/heart/daemon/message-router.js +45 -5
  119. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  120. package/dist/heart/daemon/os-cron-deps.js +135 -0
  121. package/dist/heart/daemon/os-cron.js +22 -14
  122. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  123. package/dist/heart/daemon/ouro-entry.js +3 -1
  124. package/dist/heart/daemon/plugin-cli.js +432 -0
  125. package/dist/heart/daemon/process-manager.js +624 -61
  126. package/dist/heart/daemon/provider-discovery.js +137 -0
  127. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  128. package/dist/heart/daemon/prunable-bundle.js +144 -0
  129. package/dist/heart/daemon/pulse.js +511 -0
  130. package/dist/heart/daemon/readiness-repair.js +365 -0
  131. package/dist/heart/daemon/run-hooks.js +2 -0
  132. package/dist/heart/daemon/runtime-logging.js +41 -14
  133. package/dist/heart/daemon/runtime-metadata.js +2 -30
  134. package/dist/heart/daemon/safe-mode.js +161 -0
  135. package/dist/heart/daemon/sense-manager.js +670 -48
  136. package/dist/heart/daemon/session-id-resolver.js +131 -0
  137. package/dist/heart/daemon/skill-management-installer.js +1 -1
  138. package/dist/heart/daemon/socket-client.js +180 -12
  139. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  140. package/dist/heart/daemon/startup-tui.js +338 -0
  141. package/dist/heart/daemon/task-scheduler.js +117 -39
  142. package/dist/heart/daemon/terminal-ui.js +499 -0
  143. package/dist/heart/daemon/thoughts.js +255 -43
  144. package/dist/heart/daemon/up-progress.js +366 -0
  145. package/dist/heart/daemon/vault-items.js +56 -0
  146. package/dist/heart/delegation.js +1 -4
  147. package/dist/heart/external-events/router.js +121 -0
  148. package/dist/heart/habits/habit-cancel.js +810 -0
  149. package/dist/heart/habits/habit-lifecycle.js +1327 -0
  150. package/dist/heart/habits/habit-migration.js +194 -0
  151. package/dist/heart/habits/habit-parser.js +278 -0
  152. package/dist/heart/habits/habit-runtime-state.js +93 -0
  153. package/dist/heart/habits/habit-scheduler.js +649 -0
  154. package/dist/heart/habits/habit-session-summary.js +318 -0
  155. package/dist/heart/habits/habit-session.js +636 -0
  156. package/dist/heart/{daemon → hatch}/hatch-flow.js +55 -62
  157. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  158. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  159. package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
  160. package/dist/heart/identity.js +174 -59
  161. package/dist/heart/kept-notes.js +289 -0
  162. package/dist/heart/kicks.js +1 -1
  163. package/dist/heart/machine-identity.js +161 -0
  164. package/dist/heart/mail-import-discovery.js +353 -0
  165. package/dist/heart/mailbox/mailbox-http-hooks.js +98 -0
  166. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  167. package/dist/heart/mailbox/mailbox-http-routes.js +398 -0
  168. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  169. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  170. package/dist/heart/mailbox/mailbox-http.js +99 -0
  171. package/dist/heart/mailbox/mailbox-read.js +39 -0
  172. package/dist/heart/mailbox/mailbox-types.js +27 -0
  173. package/dist/heart/mailbox/mailbox-view.js +197 -0
  174. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  175. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  176. package/dist/heart/mailbox/readers/mail.js +375 -0
  177. package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
  178. package/dist/heart/mailbox/readers/sessions.js +232 -0
  179. package/dist/heart/mailbox/readers/shared.js +111 -0
  180. package/dist/heart/mcp/mcp-server.js +696 -0
  181. package/dist/heart/migrate-config.js +100 -0
  182. package/dist/heart/model-capabilities.js +11 -0
  183. package/dist/heart/orientation-frame.js +345 -0
  184. package/dist/heart/platform.js +81 -0
  185. package/dist/heart/primitives.js +1 -1
  186. package/dist/heart/private-runtime/decision-renderer.js +156 -0
  187. package/dist/heart/private-runtime/index.js +18 -0
  188. package/dist/heart/private-runtime/ledger.js +218 -0
  189. package/dist/heart/private-runtime/policy.js +214 -0
  190. package/dist/heart/private-runtime/types.js +2 -0
  191. package/dist/heart/progress-story.js +1 -1
  192. package/dist/heart/provider-attempt.js +137 -0
  193. package/dist/heart/provider-binding-resolver.js +273 -0
  194. package/dist/heart/provider-credentials.js +441 -0
  195. package/dist/heart/provider-failover.js +311 -0
  196. package/dist/heart/provider-models.js +81 -0
  197. package/dist/heart/provider-ping.js +262 -0
  198. package/dist/heart/provider-readiness-cache.js +119 -0
  199. package/dist/heart/provider-visibility.js +188 -0
  200. package/dist/heart/providers/anthropic-token.js +131 -0
  201. package/dist/heart/providers/anthropic.js +173 -60
  202. package/dist/heart/providers/azure.js +23 -11
  203. package/dist/heart/providers/error-classification.js +127 -0
  204. package/dist/heart/providers/github-copilot.js +34 -38
  205. package/dist/heart/providers/minimax-vlm.js +189 -0
  206. package/dist/heart/providers/minimax.js +26 -8
  207. package/dist/heart/providers/openai-codex-token.js +349 -0
  208. package/dist/heart/providers/openai-codex.js +55 -40
  209. package/dist/heart/run-ledger.js +247 -0
  210. package/dist/heart/runtime-capability-check.js +170 -0
  211. package/dist/heart/runtime-credentials.js +398 -0
  212. package/dist/heart/runtime-cwd.js +87 -0
  213. package/dist/heart/sense-truth.js +20 -4
  214. package/dist/heart/session-activity.js +90 -24
  215. package/dist/heart/session-events.js +1300 -0
  216. package/dist/heart/session-playback-cli-main.js +5 -0
  217. package/dist/heart/session-playback-cli.js +36 -0
  218. package/dist/heart/session-playback.js +231 -0
  219. package/dist/heart/session-stats-cli-main.js +5 -0
  220. package/dist/heart/session-stats.js +182 -0
  221. package/dist/heart/session-transcript.js +133 -0
  222. package/dist/heart/start-of-turn-packet.js +368 -0
  223. package/dist/heart/streaming.js +604 -207
  224. package/dist/heart/structured-output.js +196 -0
  225. package/dist/heart/sync-classification.js +176 -0
  226. package/dist/heart/sync.js +449 -0
  227. package/dist/heart/target-resolution.js +11 -7
  228. package/dist/heart/tempo.js +93 -0
  229. package/dist/heart/temporal-view.js +41 -0
  230. package/dist/heart/timeouts.js +101 -0
  231. package/dist/heart/tool-activity-callbacks.js +59 -0
  232. package/dist/heart/tool-approval.js +339 -0
  233. package/dist/heart/tool-description.js +155 -0
  234. package/dist/heart/tool-friction.js +55 -0
  235. package/dist/heart/tool-loop.js +200 -0
  236. package/dist/heart/turn-context.js +472 -0
  237. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  238. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  239. package/dist/heart/versioning/ouro-path-installer.js +432 -0
  240. package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
  241. package/dist/heart/versioning/ouro-version-manager.js +409 -0
  242. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  243. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  244. package/dist/heart/versioning/update-hooks.js +154 -0
  245. package/dist/heart/versioning/version-intent.js +114 -0
  246. package/dist/heart/work-card.js +380 -0
  247. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  248. package/dist/mailbox-ui/assets/index-J8zDwHmE.js +1 -0
  249. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  250. package/dist/mailbox-ui/index.html +16 -0
  251. package/dist/mailroom/attention.js +167 -0
  252. package/dist/mailroom/autonomy.js +209 -0
  253. package/dist/mailroom/blob-store.js +811 -0
  254. package/dist/mailroom/body-cache.js +61 -0
  255. package/dist/mailroom/cache-sync-cli.js +54 -0
  256. package/dist/mailroom/core.js +788 -0
  257. package/dist/mailroom/entry.js +160 -0
  258. package/dist/mailroom/file-store.js +568 -0
  259. package/dist/mailroom/hosted-cache-sync.js +249 -0
  260. package/dist/mailroom/mbox-import.js +393 -0
  261. package/dist/mailroom/migration.js +164 -0
  262. package/dist/mailroom/outbound.js +380 -0
  263. package/dist/mailroom/policy.js +263 -0
  264. package/dist/mailroom/reader.js +292 -0
  265. package/dist/mailroom/search-cache.js +404 -0
  266. package/dist/mailroom/search-relevance.js +319 -0
  267. package/dist/mailroom/smtp-ingress.js +176 -0
  268. package/dist/mailroom/source-state.js +176 -0
  269. package/dist/mailroom/thread.js +109 -0
  270. package/dist/mailroom/travel-extract.js +89 -0
  271. package/dist/mind/bundle-manifest.js +24 -2
  272. package/dist/mind/context.js +273 -111
  273. package/dist/mind/desk-section.js +362 -0
  274. package/dist/mind/diary-integrity.js +60 -0
  275. package/dist/mind/{memory.js → diary.js} +68 -77
  276. package/dist/mind/embedding-provider.js +60 -0
  277. package/dist/mind/file-state.js +179 -0
  278. package/dist/mind/{associative-recall.js → note-search.js} +47 -58
  279. package/dist/mind/obligation-steering.js +227 -0
  280. package/dist/mind/pending.js +13 -8
  281. package/dist/mind/prompt-budget.js +479 -0
  282. package/dist/mind/prompt-refresh.js +3 -2
  283. package/dist/mind/prompt.js +1058 -172
  284. package/dist/mind/provenance-trust.js +26 -0
  285. package/dist/mind/record-paths.js +312 -0
  286. package/dist/mind/scrutiny.js +173 -0
  287. package/dist/mind/session-transaction.js +379 -0
  288. package/dist/nerves/cli-logging.js +7 -1
  289. package/dist/nerves/coverage/audit-rules.js +15 -6
  290. package/dist/nerves/coverage/audit.js +28 -2
  291. package/dist/nerves/coverage/cli.js +1 -1
  292. package/dist/nerves/coverage/contract.js +5 -5
  293. package/dist/nerves/coverage/file-completeness.js +139 -5
  294. package/dist/nerves/coverage/run-artifacts.js +55 -35
  295. package/dist/nerves/event-buffer.js +111 -0
  296. package/dist/nerves/index.js +234 -4
  297. package/dist/nerves/observation.js +20 -0
  298. package/dist/nerves/redact.js +79 -0
  299. package/dist/nerves/review/cli-main.js +5 -0
  300. package/dist/nerves/review/cli.js +156 -0
  301. package/dist/nerves/review/core.js +159 -0
  302. package/dist/nerves/runtime.js +5 -1
  303. package/dist/repertoire/ado-client.js +15 -56
  304. package/dist/repertoire/ado-semantic.js +16 -10
  305. package/dist/repertoire/api-client.js +97 -0
  306. package/dist/repertoire/bitwarden-store.js +1045 -0
  307. package/dist/repertoire/bundle-templates.js +71 -0
  308. package/dist/repertoire/bw-installer.js +180 -0
  309. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  310. package/dist/repertoire/coding/context-pack.js +331 -0
  311. package/dist/repertoire/coding/feedback.js +218 -30
  312. package/dist/repertoire/coding/index.js +15 -3
  313. package/dist/repertoire/coding/manager.js +166 -10
  314. package/dist/repertoire/coding/spawner.js +58 -11
  315. package/dist/repertoire/coding/tools.js +242 -14
  316. package/dist/repertoire/coding/workbench-client.js +272 -0
  317. package/dist/repertoire/coding/workbench-manager.js +346 -0
  318. package/dist/repertoire/commerce-errors.js +109 -0
  319. package/dist/repertoire/commerce-self-test.js +156 -0
  320. package/dist/repertoire/credential-access.js +178 -0
  321. package/dist/repertoire/desk/classifier.js +362 -0
  322. package/dist/repertoire/duffel-client.js +185 -0
  323. package/dist/repertoire/github-client.js +14 -55
  324. package/dist/repertoire/graph-client.js +11 -52
  325. package/dist/repertoire/guardrails.js +812 -18
  326. package/dist/repertoire/mcp-client.js +44 -3
  327. package/dist/repertoire/mcp-manager.js +259 -20
  328. package/dist/repertoire/mcp-tools.js +83 -0
  329. package/dist/repertoire/plugin-mcp.js +175 -0
  330. package/dist/repertoire/plugins.js +253 -0
  331. package/dist/repertoire/shell-sessions.js +133 -0
  332. package/dist/repertoire/skills.js +48 -4
  333. package/dist/repertoire/stripe-client.js +131 -0
  334. package/dist/repertoire/tool-arguments.js +104 -0
  335. package/dist/repertoire/tool-results.js +29 -0
  336. package/dist/repertoire/tools-a2a.js +699 -0
  337. package/dist/repertoire/tools-attachments.js +317 -0
  338. package/dist/repertoire/tools-awaiting.js +372 -0
  339. package/dist/repertoire/tools-base.js +67 -1095
  340. package/dist/repertoire/tools-bluebubbles.js +2 -0
  341. package/dist/repertoire/tools-bridge.js +144 -0
  342. package/dist/repertoire/tools-bundle.js +993 -0
  343. package/dist/repertoire/tools-commerce.js +253 -0
  344. package/dist/repertoire/tools-config.js +186 -0
  345. package/dist/repertoire/tools-continuity.js +252 -0
  346. package/dist/repertoire/tools-credential.js +383 -0
  347. package/dist/repertoire/tools-evolution.js +527 -0
  348. package/dist/repertoire/tools-files.js +344 -0
  349. package/dist/repertoire/tools-flight.js +290 -0
  350. package/dist/repertoire/tools-flow.js +119 -0
  351. package/dist/repertoire/tools-github.js +3 -8
  352. package/dist/repertoire/tools-habits.js +103 -0
  353. package/dist/repertoire/tools-mail.js +1828 -0
  354. package/dist/repertoire/tools-notes.js +459 -0
  355. package/dist/repertoire/tools-obligations.js +182 -0
  356. package/dist/repertoire/tools-orientation.js +31 -0
  357. package/dist/repertoire/tools-record.js +482 -0
  358. package/dist/repertoire/tools-rsvp.js +139 -0
  359. package/dist/repertoire/tools-runtime.js +150 -0
  360. package/dist/repertoire/tools-session.js +881 -0
  361. package/dist/repertoire/tools-shell.js +133 -0
  362. package/dist/repertoire/tools-stripe.js +224 -0
  363. package/dist/repertoire/tools-surface.js +355 -0
  364. package/dist/repertoire/tools-teams.js +12 -39
  365. package/dist/repertoire/tools-travel.js +125 -0
  366. package/dist/repertoire/tools-trip.js +982 -0
  367. package/dist/repertoire/tools-user-profile.js +146 -0
  368. package/dist/repertoire/tools-vault.js +40 -0
  369. package/dist/repertoire/tools-voice.js +145 -0
  370. package/dist/repertoire/tools.js +258 -79
  371. package/dist/repertoire/travel-api-client.js +360 -0
  372. package/dist/repertoire/user-profile.js +131 -0
  373. package/dist/repertoire/vault-setup.js +246 -0
  374. package/dist/repertoire/vault-unlock.js +594 -0
  375. package/dist/rsvp/aisleplanner-client.js +354 -0
  376. package/dist/rsvp/cli.js +926 -0
  377. package/dist/rsvp/config.js +327 -0
  378. package/dist/rsvp/cutover.js +433 -0
  379. package/dist/rsvp/diagnostics.js +232 -0
  380. package/dist/rsvp/diff-renderer.js +176 -0
  381. package/dist/rsvp/habit-policy.js +110 -0
  382. package/dist/rsvp/habit-stage.js +123 -0
  383. package/dist/rsvp/incident-bundle.js +97 -0
  384. package/dist/rsvp/migration.js +204 -0
  385. package/dist/rsvp/native-habit-runner.js +630 -0
  386. package/dist/rsvp/outbound-state.js +628 -0
  387. package/dist/rsvp/query.js +118 -0
  388. package/dist/rsvp/replay.js +233 -0
  389. package/dist/rsvp/snapshot.js +232 -0
  390. package/dist/rsvp/spend-ledger.js +175 -0
  391. package/dist/scripts/claude-code-hook.js +41 -0
  392. package/dist/scripts/claude-code-stop-hook.js +47 -0
  393. package/dist/senses/a2a-entry.js +115 -0
  394. package/dist/senses/attention-queue.js +186 -0
  395. package/dist/senses/await-turn-message.js +58 -0
  396. package/dist/senses/bluebubbles/active-turns.js +216 -0
  397. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  398. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  399. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +355 -40
  400. package/dist/senses/bluebubbles/context-packet.js +207 -0
  401. package/dist/senses/bluebubbles/context-smoke.js +144 -0
  402. package/dist/senses/bluebubbles/entry.js +90 -0
  403. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +21 -3
  404. package/dist/senses/bluebubbles/index.js +3839 -0
  405. package/dist/senses/bluebubbles/latest-turn.js +311 -0
  406. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  407. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +159 -28
  408. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +24 -13
  409. package/dist/senses/bluebubbles/outbound-state.js +308 -0
  410. package/dist/senses/bluebubbles/processed-log.js +133 -0
  411. package/dist/senses/bluebubbles/reaction-policy.js +47 -0
  412. package/dist/senses/bluebubbles/replay.js +284 -0
  413. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  414. package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
  415. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  416. package/dist/senses/bluebubbles/webhook-registration.js +228 -0
  417. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  418. package/dist/senses/cli/bracketed-paste.js +82 -0
  419. package/dist/senses/cli/image-paste.js +287 -0
  420. package/dist/senses/cli/image-ref-navigation.js +75 -0
  421. package/dist/senses/cli/ink-app.js +156 -0
  422. package/dist/senses/cli/inline-diff.js +64 -0
  423. package/dist/senses/cli/input-keys.js +174 -0
  424. package/dist/senses/cli/kill-ring.js +86 -0
  425. package/dist/senses/cli/message-list.js +51 -0
  426. package/dist/senses/cli/ouro-tui.js +607 -0
  427. package/dist/senses/cli/spinner-imperative.js +135 -0
  428. package/dist/senses/cli/spinner.js +101 -0
  429. package/dist/senses/cli/status-line.js +60 -0
  430. package/dist/senses/cli/streaming-markdown.js +526 -0
  431. package/dist/senses/cli/tool-display.js +85 -0
  432. package/dist/senses/cli/tool-render.js +85 -0
  433. package/dist/senses/cli/tui-store.js +241 -0
  434. package/dist/senses/cli/virtual-list.js +35 -0
  435. package/dist/senses/cli-entry.js +60 -8
  436. package/dist/senses/cli-layout.js +100 -0
  437. package/dist/senses/cli.js +640 -312
  438. package/dist/senses/commands.js +66 -3
  439. package/dist/senses/context-packet-ledger.js +371 -0
  440. package/dist/senses/context-packets.js +154 -0
  441. package/dist/senses/habit-lifecycle-guard.js +24 -0
  442. package/dist/senses/habit-turn-message.js +160 -0
  443. package/dist/senses/ingress-evidence.js +2 -0
  444. package/dist/senses/mail-entry.js +66 -0
  445. package/dist/senses/mail.js +524 -0
  446. package/dist/senses/pipeline.js +1075 -176
  447. package/dist/senses/private-runtime-worker.js +740 -0
  448. package/dist/senses/private-runtime.js +1212 -0
  449. package/dist/senses/proactive-content-guard.js +51 -0
  450. package/dist/senses/shared-turn.js +424 -0
  451. package/dist/senses/surface-tool.js +109 -0
  452. package/dist/senses/teams-entry.js +60 -8
  453. package/dist/senses/teams.js +515 -217
  454. package/dist/senses/trust-gate.js +104 -9
  455. package/dist/senses/voice/audio-playback.js +237 -0
  456. package/dist/senses/voice/audio-routing.js +119 -0
  457. package/dist/senses/voice/elevenlabs.js +202 -0
  458. package/dist/senses/voice/floor-control.js +431 -0
  459. package/dist/senses/voice/floor-controller.js +115 -0
  460. package/dist/senses/voice/golden-path.js +116 -0
  461. package/dist/senses/voice/index.js +29 -0
  462. package/dist/senses/voice/meeting.js +113 -0
  463. package/dist/senses/voice/outbound.js +190 -0
  464. package/dist/senses/voice/phone.js +33 -0
  465. package/dist/senses/voice/playback.js +139 -0
  466. package/dist/senses/voice/realtime-eval.js +496 -0
  467. package/dist/senses/voice/realtime-trace.js +531 -0
  468. package/dist/senses/voice/transcript.js +70 -0
  469. package/dist/senses/voice/turn.js +191 -0
  470. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  471. package/dist/senses/voice/twilio-phone.js +5081 -0
  472. package/dist/senses/voice/types.js +2 -0
  473. package/dist/senses/voice/whisper.js +161 -0
  474. package/dist/senses/voice-entry.js +81 -0
  475. package/dist/senses/voice-realtime-eval-command.js +99 -0
  476. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  477. package/dist/senses/voice-twilio-entry.js +87 -0
  478. package/dist/trips/core.js +138 -0
  479. package/dist/trips/store.js +265 -0
  480. package/dist/util/frontmatter.js +69 -0
  481. package/package.json +65 -12
  482. package/skills/agent-commerce.md +113 -0
  483. package/skills/browser-navigation.md +117 -0
  484. package/skills/commerce-setup-guide.md +116 -0
  485. package/skills/commerce-setup.md +84 -0
  486. package/skills/configure-dev-tools.md +99 -0
  487. package/skills/travel-planning.md +138 -0
  488. package/dist/heart/daemon/auth-flow.js +0 -430
  489. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  490. package/dist/heart/daemon/update-hooks.js +0 -138
  491. package/dist/heart/safe-workspace.js +0 -228
  492. package/dist/heart/session-recall.js +0 -116
  493. package/dist/mind/friends/channel.js +0 -84
  494. package/dist/mind/friends/group-context.js +0 -144
  495. package/dist/mind/friends/resolver.js +0 -84
  496. package/dist/mind/friends/store-file.js +0 -190
  497. package/dist/mind/friends/store.js +0 -4
  498. package/dist/mind/friends/tokens.js +0 -26
  499. package/dist/mind/friends/trust-explanation.js +0 -74
  500. package/dist/mind/friends/types.js +0 -29
  501. package/dist/repertoire/tasks/board.js +0 -134
  502. package/dist/repertoire/tasks/index.js +0 -224
  503. package/dist/repertoire/tasks/lifecycle.js +0 -80
  504. package/dist/repertoire/tasks/middleware.js +0 -65
  505. package/dist/repertoire/tasks/parser.js +0 -173
  506. package/dist/repertoire/tasks/scanner.js +0 -132
  507. package/dist/repertoire/tasks/transitions.js +0 -144
  508. package/dist/senses/bluebubbles-entry.js +0 -13
  509. package/dist/senses/bluebubbles.js +0 -1180
  510. package/dist/senses/debug-activity.js +0 -148
  511. package/dist/senses/inner-dialog-worker.js +0 -90
  512. package/dist/senses/inner-dialog.js +0 -480
  513. package/subagents/README.md +0 -7
  514. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  515. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  516. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  517. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  518. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  519. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  520. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  521. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  522. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  523. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  524. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  525. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  526. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  527. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  528. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  529. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  530. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,441 @@
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.PROVIDER_CREDENTIAL_POOL_NOT_LOADED_ERROR = void 0;
37
+ exports.splitProviderCredentialFields = splitProviderCredentialFields;
38
+ exports.providerCredentialsVaultPath = providerCredentialsVaultPath;
39
+ exports.providerCredentialItemName = providerCredentialItemName;
40
+ exports.providerCredentialMachineHomeDir = providerCredentialMachineHomeDir;
41
+ exports.isProviderCredentialPoolNotLoaded = isProviderCredentialPoolNotLoaded;
42
+ exports.readProviderCredentialPool = readProviderCredentialPool;
43
+ exports.refreshProviderCredentialPool = refreshProviderCredentialPool;
44
+ exports.createProviderCredentialRecord = createProviderCredentialRecord;
45
+ exports.cacheProviderCredentialRecords = cacheProviderCredentialRecords;
46
+ exports.readCachedProviderCredentialRecord = readCachedProviderCredentialRecord;
47
+ exports.readProviderCredentialRecord = readProviderCredentialRecord;
48
+ exports.upsertProviderCredential = upsertProviderCredential;
49
+ exports.redactProviderCredentialPool = redactProviderCredentialPool;
50
+ exports.summarizeProviderCredentialPool = summarizeProviderCredentialPool;
51
+ exports.resetProviderCredentialCache = resetProviderCredentialCache;
52
+ const crypto = __importStar(require("node:crypto"));
53
+ const os = __importStar(require("node:os"));
54
+ const runtime_1 = require("../nerves/runtime");
55
+ const credential_access_1 = require("../repertoire/credential-access");
56
+ const VALID_PROVIDERS = ["azure", "minimax", "anthropic", "openai-codex", "github-copilot"];
57
+ const VALID_PROVENANCE_SOURCES = ["auth-flow", "manual"];
58
+ const VAULT_ITEM_PREFIX = "providers/";
59
+ exports.PROVIDER_CREDENTIAL_POOL_NOT_LOADED_ERROR = "provider credentials have not been loaded from vault";
60
+ const PROVIDER_FIELD_SPLITS = {
61
+ anthropic: {
62
+ credentials: ["setupToken", "refreshToken", "expiresAt"],
63
+ config: [],
64
+ },
65
+ "openai-codex": {
66
+ credentials: ["oauthAccessToken", "refreshToken", "expiresAt"],
67
+ config: [],
68
+ },
69
+ azure: {
70
+ credentials: ["apiKey"],
71
+ config: ["endpoint", "deployment", "apiVersion", "managedIdentityClientId"],
72
+ },
73
+ minimax: {
74
+ credentials: ["apiKey"],
75
+ config: [],
76
+ },
77
+ "github-copilot": {
78
+ credentials: ["githubToken"],
79
+ config: ["baseUrl"],
80
+ },
81
+ };
82
+ let cachedPools = new Map();
83
+ function isRecord(value) {
84
+ return !!value && typeof value === "object" && !Array.isArray(value);
85
+ }
86
+ function isAgentProvider(value) {
87
+ return VALID_PROVIDERS.includes(value);
88
+ }
89
+ function isProvenanceSource(value) {
90
+ return typeof value === "string" && VALID_PROVENANCE_SOURCES.includes(value);
91
+ }
92
+ function isCredentialValue(value) {
93
+ return typeof value === "string" || typeof value === "number";
94
+ }
95
+ function isPresentCredentialValue(value) {
96
+ if (!isCredentialValue(value))
97
+ return false;
98
+ if (typeof value === "string")
99
+ return value.trim().length > 0;
100
+ return Number.isFinite(value) && value !== 0;
101
+ }
102
+ function isMissingProviderCredentialError(message, itemName) {
103
+ const normalized = message.toLowerCase();
104
+ return normalized.includes(itemName.toLowerCase())
105
+ && (normalized.includes("no credential found") || normalized.includes("missing") || normalized.includes("not found"));
106
+ }
107
+ function copyKnownFields(source, fields) {
108
+ const result = {};
109
+ for (const field of fields) {
110
+ const value = source[field];
111
+ if (isPresentCredentialValue(value)) {
112
+ result[field] = value;
113
+ }
114
+ }
115
+ return result;
116
+ }
117
+ function splitProviderCredentialFields(provider, rawConfig) {
118
+ const fields = PROVIDER_FIELD_SPLITS[provider];
119
+ return {
120
+ credentials: copyKnownFields(rawConfig, fields.credentials),
121
+ config: copyKnownFields(rawConfig, fields.config),
122
+ };
123
+ }
124
+ function providerCredentialsVaultPath(agentName) {
125
+ return `vault:${agentName}:${VAULT_ITEM_PREFIX}*`;
126
+ }
127
+ function providerCredentialItemName(provider) {
128
+ return `${VAULT_ITEM_PREFIX}${provider}`;
129
+ }
130
+ function providerCredentialMachineHomeDir(homeDir) {
131
+ return homeDir ?? os.homedir();
132
+ }
133
+ function stableJson(value) {
134
+ if (Array.isArray(value))
135
+ return `[${value.map(stableJson).join(",")}]`;
136
+ if (isRecord(value)) {
137
+ return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`).join(",")}}`;
138
+ }
139
+ return JSON.stringify(value);
140
+ }
141
+ function makeRevision(payload) {
142
+ const hash = crypto
143
+ .createHash("sha256")
144
+ .update(stableJson({
145
+ provider: payload.provider,
146
+ credentials: payload.credentials,
147
+ config: payload.config,
148
+ provenance: payload.provenance,
149
+ updatedAt: payload.updatedAt,
150
+ }))
151
+ .digest("hex")
152
+ .slice(0, 16);
153
+ return `vault_${hash}`;
154
+ }
155
+ function validateProviderCredentialPayload(value, expectedProvider) {
156
+ if (!isRecord(value))
157
+ throw new Error("provider credential payload must be an object");
158
+ if (value.schemaVersion !== 1)
159
+ throw new Error("provider credential payload schemaVersion must be 1");
160
+ if (value.kind !== "provider-credential")
161
+ throw new Error("provider credential payload kind must be provider-credential");
162
+ if (typeof value.provider !== "string" || !isAgentProvider(value.provider)) {
163
+ throw new Error("provider credential payload provider must be valid");
164
+ }
165
+ if (expectedProvider && value.provider !== expectedProvider) {
166
+ throw new Error(`provider credential payload provider must be ${expectedProvider}`);
167
+ }
168
+ if (typeof value.updatedAt !== "string" || value.updatedAt.length === 0) {
169
+ throw new Error("provider credential payload updatedAt must be non-empty");
170
+ }
171
+ if (!isRecord(value.credentials))
172
+ throw new Error("provider credential payload credentials must be an object");
173
+ if (!isRecord(value.config))
174
+ throw new Error("provider credential payload config must be an object");
175
+ for (const [field, fieldValue] of Object.entries(value.credentials)) {
176
+ if (!isCredentialValue(fieldValue))
177
+ throw new Error(`credentials.${field} must be a string or number`);
178
+ }
179
+ for (const [field, fieldValue] of Object.entries(value.config)) {
180
+ if (!isCredentialValue(fieldValue))
181
+ throw new Error(`config.${field} must be a string or number`);
182
+ }
183
+ if (!isRecord(value.provenance))
184
+ throw new Error("provider credential payload provenance must be an object");
185
+ if (!isProvenanceSource(value.provenance.source)) {
186
+ throw new Error("provider credential payload provenance.source must be auth-flow or manual");
187
+ }
188
+ if (typeof value.provenance.updatedAt !== "string" || value.provenance.updatedAt.length === 0) {
189
+ throw new Error("provider credential payload provenance.updatedAt must be non-empty");
190
+ }
191
+ return value;
192
+ }
193
+ function recordFromPayload(payload) {
194
+ return {
195
+ provider: payload.provider,
196
+ revision: makeRevision(payload),
197
+ updatedAt: payload.updatedAt,
198
+ credentials: { ...payload.credentials },
199
+ config: { ...payload.config },
200
+ provenance: { ...payload.provenance },
201
+ };
202
+ }
203
+ function missingPool(agentName, error = exports.PROVIDER_CREDENTIAL_POOL_NOT_LOADED_ERROR) {
204
+ return {
205
+ ok: false,
206
+ reason: "missing",
207
+ poolPath: providerCredentialsVaultPath(agentName),
208
+ error,
209
+ };
210
+ }
211
+ function isProviderCredentialPoolNotLoaded(result) {
212
+ return !result.ok
213
+ && result.reason === "missing"
214
+ && result.error === exports.PROVIDER_CREDENTIAL_POOL_NOT_LOADED_ERROR;
215
+ }
216
+ function cacheResult(agentName, result) {
217
+ cachedPools.set(agentName, result);
218
+ return result;
219
+ }
220
+ function selectedProviders(providers) {
221
+ if (!providers || providers.length === 0)
222
+ return [...VALID_PROVIDERS];
223
+ return [...new Set(providers)];
224
+ }
225
+ function resultForProvider(poolResult, provider) {
226
+ if (!poolResult.ok)
227
+ return poolResult;
228
+ const record = poolResult.pool.providers[provider];
229
+ if (!record) {
230
+ return {
231
+ ok: false,
232
+ reason: "missing",
233
+ poolPath: poolResult.poolPath,
234
+ error: `${provider} credentials are missing from ${poolResult.poolPath}`,
235
+ };
236
+ }
237
+ return { ok: true, poolPath: poolResult.poolPath, record };
238
+ }
239
+ function readProviderCredentialPool(agentName) {
240
+ return cachedPools.get(agentName) ?? missingPool(agentName);
241
+ }
242
+ async function refreshProviderCredentialPool(agentName, options = {}) {
243
+ const providersToRead = selectedProviders(options.providers);
244
+ const requiresAllSelectedProviders = !!options.providers && options.providers.length > 0;
245
+ try {
246
+ const store = (0, credential_access_1.getCredentialStore)(agentName);
247
+ options.onProgress?.(`reading vault items for ${agentName}...`);
248
+ const providers = {};
249
+ let updatedAt = new Date(0).toISOString();
250
+ for (const provider of providersToRead) {
251
+ const itemName = providerCredentialItemName(provider);
252
+ options.onProgress?.(`reading ${provider} credentials...`);
253
+ let raw;
254
+ try {
255
+ raw = await store.getRawSecret(itemName, "password");
256
+ }
257
+ catch (error) {
258
+ const message = error instanceof Error ? error.message : String(error);
259
+ if (isMissingProviderCredentialError(message, itemName))
260
+ continue;
261
+ throw error;
262
+ }
263
+ const payload = validateProviderCredentialPayload(JSON.parse(raw), provider);
264
+ const record = recordFromPayload(payload);
265
+ providers[provider] = record;
266
+ if (record.updatedAt > updatedAt)
267
+ updatedAt = record.updatedAt;
268
+ }
269
+ options.onProgress?.("parsing provider credentials...");
270
+ const missingRequestedProviders = requiresAllSelectedProviders
271
+ ? providersToRead.filter((provider) => !providers[provider])
272
+ : [];
273
+ if (missingRequestedProviders.length > 0) {
274
+ const cached = cachedPools.get(agentName);
275
+ const result = {
276
+ ok: false,
277
+ reason: "missing",
278
+ poolPath: providerCredentialsVaultPath(agentName),
279
+ error: `requested provider credentials missing from ${providerCredentialsVaultPath(agentName)}: ${missingRequestedProviders.join(", ")}`,
280
+ };
281
+ if (options.preserveCachedOnFailure && cached?.ok)
282
+ return cached;
283
+ return options.skipCache ? result : cacheResult(agentName, result);
284
+ }
285
+ const pool = {
286
+ schemaVersion: 1,
287
+ updatedAt,
288
+ providers,
289
+ };
290
+ (0, runtime_1.emitNervesEvent)({
291
+ component: "config/identity",
292
+ event: "config.provider_credentials_loaded",
293
+ message: "loaded provider credentials from vault",
294
+ meta: {
295
+ agentName,
296
+ providerCount: Object.keys(providers).length,
297
+ requestedProviderCount: providersToRead.length,
298
+ cacheSkipped: options.skipCache === true,
299
+ },
300
+ });
301
+ const result = {
302
+ ok: true,
303
+ poolPath: providerCredentialsVaultPath(agentName),
304
+ pool,
305
+ };
306
+ return options.skipCache ? result : cacheResult(agentName, result);
307
+ }
308
+ catch (error) {
309
+ const cached = cachedPools.get(agentName);
310
+ const result = {
311
+ ok: false,
312
+ reason: "unavailable",
313
+ poolPath: providerCredentialsVaultPath(agentName),
314
+ error: error instanceof Error ? error.message : String(error),
315
+ };
316
+ (0, runtime_1.emitNervesEvent)({
317
+ level: "error",
318
+ component: "config/identity",
319
+ event: "config.provider_credentials_unavailable",
320
+ message: "provider credentials unavailable",
321
+ meta: { agentName, reason: result.reason, poolPath: result.poolPath },
322
+ });
323
+ if (options.preserveCachedOnFailure && cached?.ok)
324
+ return cached;
325
+ return options.skipCache ? result : cacheResult(agentName, result);
326
+ }
327
+ }
328
+ function createProviderCredentialRecord(input) {
329
+ const updatedAt = (input.now ?? new Date()).toISOString();
330
+ const payload = {
331
+ schemaVersion: 1,
332
+ kind: "provider-credential",
333
+ provider: input.provider,
334
+ updatedAt,
335
+ credentials: { ...input.credentials },
336
+ config: { ...input.config },
337
+ provenance: {
338
+ source: input.provenance.source,
339
+ updatedAt,
340
+ },
341
+ };
342
+ return recordFromPayload(payload);
343
+ }
344
+ function cacheProviderCredentialRecords(agentName, records, now = new Date()) {
345
+ const providers = {};
346
+ let updatedAt = now.toISOString();
347
+ for (const record of records) {
348
+ providers[record.provider] = record;
349
+ if (record.updatedAt > updatedAt)
350
+ updatedAt = record.updatedAt;
351
+ }
352
+ const pool = {
353
+ schemaVersion: 1,
354
+ updatedAt,
355
+ providers,
356
+ };
357
+ return cacheResult(agentName, { ok: true, poolPath: providerCredentialsVaultPath(agentName), pool });
358
+ }
359
+ function readCachedProviderCredentialRecord(agentName, provider) {
360
+ return resultForProvider(readProviderCredentialPool(agentName), provider);
361
+ }
362
+ async function readProviderCredentialRecord(agentName, provider, options = {}) {
363
+ const cached = readCachedProviderCredentialRecord(agentName, provider);
364
+ if (cached.ok || options.refreshIfMissing === false)
365
+ return cached;
366
+ return resultForProvider(await refreshProviderCredentialPool(agentName, { providers: [provider] }), provider);
367
+ }
368
+ async function upsertProviderCredential(input) {
369
+ const updatedAt = (input.now ?? new Date()).toISOString();
370
+ const payload = {
371
+ schemaVersion: 1,
372
+ kind: "provider-credential",
373
+ provider: input.provider,
374
+ updatedAt,
375
+ credentials: { ...input.credentials },
376
+ config: { ...input.config },
377
+ provenance: {
378
+ source: input.provenance.source,
379
+ updatedAt,
380
+ },
381
+ };
382
+ const record = recordFromPayload(payload);
383
+ input.onProgress?.(`opening ${input.agentName}'s vault session...`);
384
+ const store = (0, credential_access_1.getCredentialStore)(input.agentName);
385
+ input.onProgress?.(`storing ${input.provider} credentials in ${input.agentName}'s vault...`);
386
+ await store.store(providerCredentialItemName(input.provider), {
387
+ username: input.provider,
388
+ password: JSON.stringify(payload),
389
+ notes: "Ouro provider credentials. The vault item password is a versioned JSON payload.",
390
+ });
391
+ input.onProgress?.(`refreshing in-memory provider credential pool from ${input.agentName}'s vault...`);
392
+ const refreshResult = await refreshProviderCredentialPool(input.agentName, {
393
+ providers: [input.provider],
394
+ onProgress: input.onProgress,
395
+ });
396
+ if (!refreshResult.ok) {
397
+ throw new Error(`credential stored in vault, but the in-memory provider credential pool could not be refreshed: ${refreshResult.error}. ` +
398
+ `Run 'ouro provider refresh --agent ${input.agentName}' after fixing vault access, then run 'ouro auth verify --agent ${input.agentName}'.`);
399
+ }
400
+ (0, runtime_1.emitNervesEvent)({
401
+ component: "config/identity",
402
+ event: "config.provider_credential_upserted",
403
+ message: "upserted provider credential record in vault",
404
+ meta: { agentName: input.agentName, provider: input.provider, revision: record.revision, source: record.provenance.source },
405
+ });
406
+ return record;
407
+ }
408
+ function redactProviderCredentialPool(pool) {
409
+ const providers = {};
410
+ for (const [provider, record] of Object.entries(pool.providers)) {
411
+ const redactedCredentials = {};
412
+ for (const key of Object.keys(record.credentials)) {
413
+ redactedCredentials[key] = "[redacted]";
414
+ }
415
+ providers[provider] = {
416
+ ...record,
417
+ credentials: redactedCredentials,
418
+ config: { ...record.config },
419
+ provenance: { ...record.provenance },
420
+ };
421
+ }
422
+ return {
423
+ ...pool,
424
+ providers,
425
+ };
426
+ }
427
+ function summarizeProviderCredentialPool(pool) {
428
+ return {
429
+ providers: Object.entries(pool.providers).map(([, record]) => ({
430
+ provider: record.provider,
431
+ revision: record.revision,
432
+ source: record.provenance.source,
433
+ updatedAt: record.updatedAt,
434
+ credentialFields: Object.keys(record.credentials).sort(),
435
+ configFields: Object.keys(record.config).sort(),
436
+ })),
437
+ };
438
+ }
439
+ function resetProviderCredentialCache() {
440
+ cachedPools = new Map();
441
+ }