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

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 +4516 -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 +1045 -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
@@ -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
+ }