@ouro.bot/cli 0.1.0-alpha.48 → 0.1.0-alpha.480

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 (358) hide show
  1. package/README.md +132 -19
  2. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +3 -2
  3. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  4. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  5. package/changelog.json +3061 -0
  6. package/dist/arc/attention-types.js +8 -0
  7. package/dist/arc/cares.js +140 -0
  8. package/dist/arc/episodes.js +117 -0
  9. package/dist/arc/intentions.js +133 -0
  10. package/dist/arc/json-store.js +117 -0
  11. package/dist/arc/obligations.js +237 -0
  12. package/dist/arc/packets.js +193 -0
  13. package/dist/arc/presence.js +185 -0
  14. package/dist/arc/task-lifecycle.js +65 -0
  15. package/dist/heart/active-work.js +857 -0
  16. package/dist/heart/agent-entry.js +58 -3
  17. package/dist/heart/attachments/image-normalize.js +194 -0
  18. package/dist/heart/attachments/materialize.js +97 -0
  19. package/dist/heart/attachments/originals.js +88 -0
  20. package/dist/heart/attachments/render.js +29 -0
  21. package/dist/heart/attachments/sources/adapter.js +2 -0
  22. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  23. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  24. package/dist/heart/attachments/sources/index.js +16 -0
  25. package/dist/heart/attachments/store.js +103 -0
  26. package/dist/heart/attachments/types.js +93 -0
  27. package/dist/heart/auth/auth-flow.js +426 -0
  28. package/dist/heart/background-operations.js +234 -0
  29. package/dist/heart/bridges/manager.js +358 -0
  30. package/dist/heart/bridges/state-machine.js +135 -0
  31. package/dist/heart/bridges/store.js +123 -0
  32. package/dist/heart/bundle-state.js +168 -0
  33. package/dist/heart/commitments.js +111 -0
  34. package/dist/heart/config-registry.js +304 -0
  35. package/dist/heart/config.js +110 -128
  36. package/dist/heart/core.js +745 -227
  37. package/dist/heart/cross-chat-delivery.js +131 -0
  38. package/dist/heart/daemon/agent-config-check.js +490 -0
  39. package/dist/heart/daemon/agent-discovery.js +79 -3
  40. package/dist/heart/daemon/agent-service.js +360 -0
  41. package/dist/heart/daemon/agentic-repair.js +216 -0
  42. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  43. package/dist/heart/daemon/cadence.js +70 -0
  44. package/dist/heart/daemon/cli-defaults.js +640 -0
  45. package/dist/heart/daemon/cli-exec.js +6933 -0
  46. package/dist/heart/daemon/cli-help.js +487 -0
  47. package/dist/heart/daemon/cli-parse.js +1527 -0
  48. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  49. package/dist/heart/daemon/cli-render.js +561 -0
  50. package/dist/heart/daemon/cli-types.js +8 -0
  51. package/dist/heart/daemon/connect-bay.js +323 -0
  52. package/dist/heart/daemon/daemon-cli.js +29 -1616
  53. package/dist/heart/daemon/daemon-entry.js +345 -3
  54. package/dist/heart/daemon/daemon-health.js +141 -0
  55. package/dist/heart/daemon/daemon-runtime-sync.js +190 -12
  56. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  57. package/dist/heart/daemon/daemon.js +677 -58
  58. package/dist/heart/daemon/dns-workflow.js +394 -0
  59. package/dist/heart/daemon/doctor-types.js +8 -0
  60. package/dist/heart/daemon/doctor.js +486 -0
  61. package/dist/heart/daemon/health-monitor.js +92 -1
  62. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  63. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  64. package/dist/heart/daemon/http-health-probe.js +80 -0
  65. package/dist/heart/daemon/human-command-screens.js +234 -0
  66. package/dist/heart/daemon/human-readiness.js +114 -0
  67. package/dist/heart/daemon/inner-status.js +89 -0
  68. package/dist/heart/daemon/interactive-repair.js +394 -0
  69. package/dist/heart/daemon/launchd.js +25 -5
  70. package/dist/heart/daemon/log-tailer.js +82 -12
  71. package/dist/heart/daemon/logs-prune.js +110 -0
  72. package/dist/heart/daemon/message-router.js +2 -2
  73. package/dist/heart/daemon/os-cron-deps.js +134 -0
  74. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  75. package/dist/heart/daemon/ouro-entry.js +3 -1
  76. package/dist/heart/daemon/process-manager.js +214 -0
  77. package/dist/heart/daemon/provider-discovery.js +137 -0
  78. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  79. package/dist/heart/daemon/pulse.js +475 -0
  80. package/dist/heart/daemon/readiness-repair.js +365 -0
  81. package/dist/heart/daemon/run-hooks.js +2 -0
  82. package/dist/heart/daemon/runtime-logging.js +67 -16
  83. package/dist/heart/daemon/runtime-metadata.js +73 -0
  84. package/dist/heart/daemon/runtime-mode.js +67 -0
  85. package/dist/heart/daemon/safe-mode.js +161 -0
  86. package/dist/heart/daemon/sense-manager.js +178 -37
  87. package/dist/heart/daemon/session-id-resolver.js +131 -0
  88. package/dist/heart/daemon/skill-management-installer.js +94 -0
  89. package/dist/heart/daemon/socket-client.js +109 -4
  90. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  91. package/dist/heart/daemon/startup-tui.js +264 -0
  92. package/dist/heart/daemon/task-scheduler.js +3 -25
  93. package/dist/heart/daemon/terminal-ui.js +499 -0
  94. package/dist/heart/daemon/thoughts.js +149 -10
  95. package/dist/heart/daemon/up-progress.js +366 -0
  96. package/dist/heart/daemon/vault-items.js +56 -0
  97. package/dist/heart/delegation.js +62 -0
  98. package/dist/heart/habits/habit-migration.js +189 -0
  99. package/dist/heart/habits/habit-parser.js +140 -0
  100. package/dist/heart/habits/habit-runtime-state.js +100 -0
  101. package/dist/heart/habits/habit-scheduler.js +372 -0
  102. package/dist/heart/{daemon → hatch}/hatch-flow.js +52 -117
  103. package/dist/heart/{daemon → hatch}/hatch-specialist.js +3 -3
  104. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  105. package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
  106. package/dist/heart/identity.js +201 -66
  107. package/dist/heart/kept-notes.js +357 -0
  108. package/dist/heart/kicks.js +1 -1
  109. package/dist/heart/machine-identity.js +161 -0
  110. package/dist/heart/mcp/mcp-server.js +653 -0
  111. package/dist/heart/migrate-config.js +100 -0
  112. package/dist/heart/model-capabilities.js +59 -0
  113. package/dist/heart/outlook/outlook-http-hooks.js +66 -0
  114. package/dist/heart/outlook/outlook-http-response.js +7 -0
  115. package/dist/heart/outlook/outlook-http-routes.js +244 -0
  116. package/dist/heart/outlook/outlook-http-static.js +99 -0
  117. package/dist/heart/outlook/outlook-http-transport.js +116 -0
  118. package/dist/heart/outlook/outlook-http.js +99 -0
  119. package/dist/heart/outlook/outlook-read.js +31 -0
  120. package/dist/heart/outlook/outlook-types.js +27 -0
  121. package/dist/heart/outlook/outlook-view.js +195 -0
  122. package/dist/heart/outlook/readers/agent-machine.js +359 -0
  123. package/dist/heart/outlook/readers/continuity-readers.js +332 -0
  124. package/dist/heart/outlook/readers/mail.js +362 -0
  125. package/dist/heart/outlook/readers/runtime-readers.js +644 -0
  126. package/dist/heart/outlook/readers/sessions.js +232 -0
  127. package/dist/heart/outlook/readers/shared.js +111 -0
  128. package/dist/heart/platform.js +81 -0
  129. package/dist/heart/progress-story.js +42 -0
  130. package/dist/heart/provider-attempt.js +134 -0
  131. package/dist/heart/provider-binding-resolver.js +255 -0
  132. package/dist/heart/provider-credentials.js +424 -0
  133. package/dist/heart/provider-failover.js +266 -0
  134. package/dist/heart/provider-models.js +81 -0
  135. package/dist/heart/provider-ping.js +262 -0
  136. package/dist/heart/provider-state.js +216 -0
  137. package/dist/heart/provider-visibility.js +188 -0
  138. package/dist/heart/providers/anthropic-token.js +131 -0
  139. package/dist/heart/providers/anthropic.js +193 -55
  140. package/dist/heart/providers/azure.js +103 -12
  141. package/dist/heart/providers/error-classification.js +63 -0
  142. package/dist/heart/providers/github-copilot.js +145 -0
  143. package/dist/heart/providers/minimax-vlm.js +189 -0
  144. package/dist/heart/providers/minimax.js +29 -7
  145. package/dist/heart/providers/openai-codex.js +62 -38
  146. package/dist/heart/runtime-capability-check.js +170 -0
  147. package/dist/heart/runtime-credentials.js +260 -0
  148. package/dist/heart/sense-truth.js +11 -4
  149. package/dist/heart/session-activity.js +190 -0
  150. package/dist/heart/session-events.js +855 -0
  151. package/dist/heart/session-transcript.js +167 -0
  152. package/dist/heart/start-of-turn-packet.js +345 -0
  153. package/dist/heart/streaming.js +36 -27
  154. package/dist/heart/sync.js +332 -0
  155. package/dist/heart/target-resolution.js +127 -0
  156. package/dist/heart/tempo.js +93 -0
  157. package/dist/heart/temporal-view.js +41 -0
  158. package/dist/heart/tool-activity-callbacks.js +36 -0
  159. package/dist/heart/tool-description.js +135 -0
  160. package/dist/heart/tool-friction.js +55 -0
  161. package/dist/heart/tool-loop.js +200 -0
  162. package/dist/heart/turn-context.js +361 -0
  163. package/dist/heart/turn-coordinator.js +24 -1
  164. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +1 -1
  165. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  166. package/dist/heart/versioning/ouro-path-installer.js +425 -0
  167. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  168. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  169. package/dist/heart/{daemon → versioning}/update-checker.js +5 -1
  170. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  171. package/dist/mailroom/attention.js +167 -0
  172. package/dist/mailroom/autonomy.js +209 -0
  173. package/dist/mailroom/blob-store.js +558 -0
  174. package/dist/mailroom/core.js +658 -0
  175. package/dist/mailroom/entry.js +160 -0
  176. package/dist/mailroom/file-store.js +400 -0
  177. package/dist/mailroom/mbox-import.js +341 -0
  178. package/dist/mailroom/outbound.js +380 -0
  179. package/dist/mailroom/policy.js +263 -0
  180. package/dist/mailroom/reader.js +197 -0
  181. package/dist/mailroom/smtp-ingress.js +176 -0
  182. package/dist/mailroom/source-state.js +176 -0
  183. package/dist/mailroom/travel-extract.js +89 -0
  184. package/dist/mind/bundle-manifest.js +7 -1
  185. package/dist/mind/context.js +132 -93
  186. package/dist/mind/diary-integrity.js +60 -0
  187. package/dist/mind/{memory.js → diary.js} +74 -93
  188. package/dist/mind/embedding-provider.js +60 -0
  189. package/dist/mind/file-state.js +179 -0
  190. package/dist/mind/friends/channel.js +30 -0
  191. package/dist/mind/friends/group-context.js +144 -0
  192. package/dist/mind/friends/resolver.js +38 -1
  193. package/dist/mind/friends/store-file.js +39 -3
  194. package/dist/mind/friends/trust-explanation.js +74 -0
  195. package/dist/mind/friends/types.js +2 -2
  196. package/dist/mind/journal-index.js +161 -0
  197. package/dist/mind/note-search.js +268 -0
  198. package/dist/mind/obligation-steering.js +221 -0
  199. package/dist/mind/pending.js +66 -7
  200. package/dist/mind/prompt-refresh.js +3 -2
  201. package/dist/mind/prompt.js +978 -169
  202. package/dist/mind/provenance-trust.js +26 -0
  203. package/dist/mind/scrutiny.js +173 -0
  204. package/dist/nerves/cli-logging.js +7 -1
  205. package/dist/nerves/coverage/audit-rules.js +15 -6
  206. package/dist/nerves/coverage/audit.js +28 -2
  207. package/dist/nerves/coverage/cli.js +1 -1
  208. package/dist/nerves/coverage/contract.js +5 -5
  209. package/dist/nerves/coverage/file-completeness.js +84 -5
  210. package/dist/nerves/coverage/run-artifacts.js +1 -1
  211. package/dist/nerves/event-buffer.js +111 -0
  212. package/dist/nerves/index.js +224 -4
  213. package/dist/nerves/observation.js +20 -0
  214. package/dist/nerves/redact.js +79 -0
  215. package/dist/nerves/runtime.js +5 -1
  216. package/dist/outlook-ui/assets/index-BPr5vNuM.css +1 -0
  217. package/dist/outlook-ui/assets/index-CPfhbn13.js +61 -0
  218. package/dist/outlook-ui/index.html +15 -0
  219. package/dist/repertoire/ado-client.js +15 -56
  220. package/dist/repertoire/ado-semantic.js +11 -10
  221. package/dist/repertoire/api-client.js +97 -0
  222. package/dist/repertoire/bitwarden-store.js +774 -0
  223. package/dist/repertoire/bundle-templates.js +72 -0
  224. package/dist/repertoire/bw-installer.js +180 -0
  225. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  226. package/dist/repertoire/coding/context-pack.js +330 -0
  227. package/dist/repertoire/coding/feedback.js +197 -30
  228. package/dist/repertoire/coding/manager.js +158 -9
  229. package/dist/repertoire/coding/spawner.js +55 -9
  230. package/dist/repertoire/coding/tools.js +170 -7
  231. package/dist/repertoire/commerce-errors.js +109 -0
  232. package/dist/repertoire/commerce-self-test.js +156 -0
  233. package/dist/repertoire/credential-access.js +111 -0
  234. package/dist/repertoire/duffel-client.js +185 -0
  235. package/dist/repertoire/github-client.js +14 -55
  236. package/dist/repertoire/graph-client.js +11 -52
  237. package/dist/repertoire/guardrails.js +396 -0
  238. package/dist/repertoire/mcp-client.js +255 -0
  239. package/dist/repertoire/mcp-manager.js +305 -0
  240. package/dist/repertoire/mcp-tools.js +63 -0
  241. package/dist/repertoire/shell-sessions.js +133 -0
  242. package/dist/repertoire/skills.js +15 -24
  243. package/dist/repertoire/stripe-client.js +131 -0
  244. package/dist/repertoire/tasks/board.js +43 -5
  245. package/dist/repertoire/tasks/fix.js +182 -0
  246. package/dist/repertoire/tasks/index.js +37 -4
  247. package/dist/repertoire/tasks/lifecycle.js +2 -2
  248. package/dist/repertoire/tasks/parser.js +3 -2
  249. package/dist/repertoire/tasks/scanner.js +194 -37
  250. package/dist/repertoire/tasks/transitions.js +16 -78
  251. package/dist/repertoire/tool-results.js +29 -0
  252. package/dist/repertoire/tools-attachments.js +317 -0
  253. package/dist/repertoire/tools-base.js +44 -740
  254. package/dist/repertoire/tools-bluebubbles.js +1 -0
  255. package/dist/repertoire/tools-bridge.js +141 -0
  256. package/dist/repertoire/tools-bundle.js +984 -0
  257. package/dist/repertoire/tools-config.js +185 -0
  258. package/dist/repertoire/tools-continuity.js +248 -0
  259. package/dist/repertoire/tools-credential.js +381 -0
  260. package/dist/repertoire/tools-files.js +342 -0
  261. package/dist/repertoire/tools-flight.js +224 -0
  262. package/dist/repertoire/tools-flow.js +105 -0
  263. package/dist/repertoire/tools-github.js +1 -7
  264. package/dist/repertoire/tools-mail.js +896 -0
  265. package/dist/repertoire/tools-notes.js +376 -0
  266. package/dist/repertoire/tools-session.js +746 -0
  267. package/dist/repertoire/tools-shell.js +120 -0
  268. package/dist/repertoire/tools-stripe.js +180 -0
  269. package/dist/repertoire/tools-surface.js +243 -0
  270. package/dist/repertoire/tools-teams.js +9 -39
  271. package/dist/repertoire/tools-travel.js +125 -0
  272. package/dist/repertoire/tools-user-profile.js +144 -0
  273. package/dist/repertoire/tools-vault.js +40 -0
  274. package/dist/repertoire/tools.js +144 -113
  275. package/dist/repertoire/travel-api-client.js +360 -0
  276. package/dist/repertoire/user-profile.js +131 -0
  277. package/dist/repertoire/vault-setup.js +246 -0
  278. package/dist/repertoire/vault-unlock.js +561 -0
  279. package/dist/scripts/claude-code-hook.js +41 -0
  280. package/dist/scripts/claude-code-stop-hook.js +47 -0
  281. package/dist/senses/attention-queue.js +116 -0
  282. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  283. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  284. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
  285. package/dist/senses/bluebubbles/entry.js +73 -0
  286. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +7 -3
  287. package/dist/senses/{bluebubbles.js → bluebubbles/index.js} +705 -116
  288. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
  289. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  290. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  291. package/dist/senses/bluebubbles/replay.js +129 -0
  292. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +2 -2
  293. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  294. package/dist/senses/cli/bracketed-paste.js +82 -0
  295. package/dist/senses/cli/image-paste.js +287 -0
  296. package/dist/senses/cli/image-ref-navigation.js +75 -0
  297. package/dist/senses/cli/ink-app.js +156 -0
  298. package/dist/senses/cli/inline-diff.js +64 -0
  299. package/dist/senses/cli/input-keys.js +174 -0
  300. package/dist/senses/cli/kill-ring.js +86 -0
  301. package/dist/senses/cli/message-list.js +51 -0
  302. package/dist/senses/cli/ouro-tui.js +605 -0
  303. package/dist/senses/cli/spinner-imperative.js +135 -0
  304. package/dist/senses/cli/spinner.js +101 -0
  305. package/dist/senses/cli/status-line.js +60 -0
  306. package/dist/senses/cli/streaming-markdown.js +526 -0
  307. package/dist/senses/cli/tool-display.js +83 -0
  308. package/dist/senses/cli/tool-render.js +85 -0
  309. package/dist/senses/cli/tui-store.js +240 -0
  310. package/dist/senses/cli/virtual-list.js +35 -0
  311. package/dist/senses/cli-entry.js +60 -8
  312. package/dist/senses/cli-layout.js +187 -0
  313. package/dist/senses/cli.js +516 -211
  314. package/dist/senses/commands.js +66 -3
  315. package/dist/senses/habit-turn-message.js +108 -0
  316. package/dist/senses/inner-dialog-worker.js +97 -17
  317. package/dist/senses/inner-dialog.js +404 -14
  318. package/dist/senses/mail-entry.js +66 -0
  319. package/dist/senses/mail.js +232 -0
  320. package/dist/senses/pipeline.js +533 -72
  321. package/dist/senses/proactive-content-guard.js +51 -0
  322. package/dist/senses/shared-turn.js +205 -0
  323. package/dist/senses/surface-tool.js +68 -0
  324. package/dist/senses/teams-entry.js +60 -8
  325. package/dist/senses/teams.js +413 -163
  326. package/dist/senses/trust-gate.js +5 -5
  327. package/package.json +37 -7
  328. package/skills/agent-commerce.md +106 -0
  329. package/skills/browser-navigation.md +117 -0
  330. package/skills/commerce-setup-guide.md +116 -0
  331. package/skills/commerce-setup.md +84 -0
  332. package/skills/configure-dev-tools.md +101 -0
  333. package/skills/travel-planning.md +138 -0
  334. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  335. package/dist/heart/daemon/subagent-installer.js +0 -166
  336. package/dist/mind/associative-recall.js +0 -209
  337. package/dist/senses/bluebubbles-entry.js +0 -13
  338. package/dist/senses/debug-activity.js +0 -127
  339. package/subagents/README.md +0 -86
  340. package/subagents/work-doer.md +0 -237
  341. package/subagents/work-merger.md +0 -618
  342. package/subagents/work-planner.md +0 -390
  343. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  344. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  345. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  346. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  347. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  348. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  349. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  350. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  351. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  352. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  353. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  354. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  355. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  356. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  357. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  358. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -35,11 +35,14 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.loadConfig = loadConfig;
37
37
  exports.resetConfigCache = resetConfigCache;
38
+ exports.cacheRuntimeConfigForTests = cacheRuntimeConfigForTests;
39
+ exports.cacheMachineRuntimeConfigForTests = cacheMachineRuntimeConfigForTests;
38
40
  exports.patchRuntimeConfig = patchRuntimeConfig;
39
41
  exports.getAzureConfig = getAzureConfig;
40
42
  exports.getMinimaxConfig = getMinimaxConfig;
41
43
  exports.getAnthropicConfig = getAnthropicConfig;
42
44
  exports.getOpenAICodexConfig = getOpenAICodexConfig;
45
+ exports.getGithubCopilotConfig = getGithubCopilotConfig;
43
46
  exports.getTeamsConfig = getTeamsConfig;
44
47
  exports.getTeamsSecondaryConfig = getTeamsSecondaryConfig;
45
48
  exports.getContextConfig = getContextConfig;
@@ -49,6 +52,7 @@ exports.getTeamsChannelConfig = getTeamsChannelConfig;
49
52
  exports.getBlueBubblesConfig = getBlueBubblesConfig;
50
53
  exports.getBlueBubblesChannelConfig = getBlueBubblesChannelConfig;
51
54
  exports.getIntegrationsConfig = getIntegrationsConfig;
55
+ exports.getSyncConfig = getSyncConfig;
52
56
  exports.getOpenAIEmbeddingsApiKey = getOpenAIEmbeddingsApiKey;
53
57
  exports.getLogsDir = getLogsDir;
54
58
  exports.sanitizeKey = sanitizeKey;
@@ -59,31 +63,10 @@ exports.logPath = logPath;
59
63
  const fs = __importStar(require("fs"));
60
64
  const path = __importStar(require("path"));
61
65
  const identity_1 = require("./identity");
66
+ const provider_credentials_1 = require("./provider-credentials");
67
+ const runtime_credentials_1 = require("./runtime-credentials");
62
68
  const runtime_1 = require("../nerves/runtime");
63
- const DEFAULT_SECRETS_TEMPLATE = {
64
- providers: {
65
- // Keep provider field ordering consistent: model first, then auth credentials,
66
- // then provider-specific transport fields.
67
- azure: {
68
- modelName: "",
69
- apiKey: "",
70
- endpoint: "",
71
- deployment: "",
72
- apiVersion: "2025-04-01-preview",
73
- },
74
- minimax: {
75
- model: "",
76
- apiKey: "",
77
- },
78
- anthropic: {
79
- model: "claude-opus-4-6",
80
- setupToken: "",
81
- },
82
- "openai-codex": {
83
- model: "gpt-5.4",
84
- oauthAccessToken: "",
85
- },
86
- },
69
+ const DEFAULT_LOCAL_RUNTIME_CONFIG = {
87
70
  teams: {
88
71
  clientId: "",
89
72
  clientSecret: "",
@@ -115,6 +98,9 @@ const DEFAULT_SECRETS_TEMPLATE = {
115
98
  webhookPath: "/bluebubbles-webhook",
116
99
  requestTimeoutMs: 30000,
117
100
  },
101
+ vault: {
102
+ masterPassword: "",
103
+ },
118
104
  integrations: {
119
105
  perplexityApiKey: "",
120
106
  openaiEmbeddingsApiKey: "",
@@ -122,27 +108,20 @@ const DEFAULT_SECRETS_TEMPLATE = {
122
108
  };
123
109
  function defaultRuntimeConfig() {
124
110
  return {
125
- providers: {
126
- azure: { ...DEFAULT_SECRETS_TEMPLATE.providers.azure },
127
- minimax: { ...DEFAULT_SECRETS_TEMPLATE.providers.minimax },
128
- anthropic: { ...DEFAULT_SECRETS_TEMPLATE.providers.anthropic },
129
- "openai-codex": { ...DEFAULT_SECRETS_TEMPLATE.providers["openai-codex"] },
130
- },
131
- teams: { ...DEFAULT_SECRETS_TEMPLATE.teams },
132
- teamsSecondary: { ...DEFAULT_SECRETS_TEMPLATE.teamsSecondary },
133
- oauth: { ...DEFAULT_SECRETS_TEMPLATE.oauth },
111
+ teams: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.teams },
112
+ teamsSecondary: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.teamsSecondary },
113
+ oauth: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.oauth },
134
114
  context: { ...identity_1.DEFAULT_AGENT_CONTEXT },
135
- teamsChannel: { ...DEFAULT_SECRETS_TEMPLATE.teamsChannel },
136
- bluebubbles: { ...DEFAULT_SECRETS_TEMPLATE.bluebubbles },
137
- bluebubblesChannel: { ...DEFAULT_SECRETS_TEMPLATE.bluebubblesChannel },
138
- integrations: { ...DEFAULT_SECRETS_TEMPLATE.integrations },
115
+ teamsChannel: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.teamsChannel },
116
+ bluebubbles: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.bluebubbles },
117
+ bluebubblesChannel: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.bluebubblesChannel },
118
+ vault: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.vault },
119
+ integrations: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.integrations },
139
120
  };
140
121
  }
141
- let _cachedConfig = null;
122
+ let _runtimeConfigOverride = null;
142
123
  let _testContextOverride = null;
143
- function resolveConfigPath() {
144
- return (0, identity_1.getAgentSecretsPath)();
145
- }
124
+ let _providerConfigOverride = null;
146
125
  function deepMerge(defaults, partial) {
147
126
  const result = { ...defaults };
148
127
  for (const key of Object.keys(partial)) {
@@ -159,116 +138,106 @@ function deepMerge(defaults, partial) {
159
138
  }
160
139
  return result;
161
140
  }
141
+ function localRuntimeFields(config) {
142
+ const { providers: _providers, context: _context, ...localFields } = config;
143
+ return localFields;
144
+ }
162
145
  function loadConfig() {
163
- if (_cachedConfig) {
164
- (0, runtime_1.emitNervesEvent)({
165
- event: "config.load",
166
- component: "config/identity",
167
- message: "config loaded from cache",
168
- meta: { source: "cache" },
169
- });
170
- return _cachedConfig;
171
- }
172
- const configPath = resolveConfigPath();
173
- // Auto-create config directory if it doesn't exist
174
- const configDir = path.dirname(configPath);
175
- fs.mkdirSync(configDir, { recursive: true });
176
- let fileData = {};
177
- try {
178
- const raw = fs.readFileSync(configPath, "utf-8");
179
- fileData = JSON.parse(raw);
180
- }
181
- catch (error) {
182
- const errorCode = error &&
183
- typeof error === "object" &&
184
- "code" in error &&
185
- typeof error.code === "string"
186
- ? error.code
187
- : undefined;
188
- if (errorCode === "ENOENT") {
189
- try {
190
- fs.writeFileSync(configPath, JSON.stringify(DEFAULT_SECRETS_TEMPLATE, null, 2) + "\n", "utf-8");
191
- }
192
- catch (writeError) {
193
- (0, runtime_1.emitNervesEvent)({
194
- level: "warn",
195
- event: "config_identity.error",
196
- component: "config/identity",
197
- message: "failed writing default secrets config",
198
- meta: {
199
- phase: "loadConfig",
200
- path: configPath,
201
- reason: writeError instanceof Error ? writeError.message : String(writeError),
202
- },
203
- });
204
- }
205
- }
206
- (0, runtime_1.emitNervesEvent)({
207
- level: "warn",
208
- event: "config_identity.error",
209
- component: "config/identity",
210
- message: "config read failed; defaults applied",
211
- meta: {
212
- phase: "loadConfig",
213
- reason: error instanceof Error ? error.message : String(error),
214
- },
215
- });
216
- // ENOENT or parse error -- use defaults
217
- }
218
- const sanitizedFileData = { ...fileData };
219
- if ("context" in sanitizedFileData) {
220
- delete sanitizedFileData.context;
221
- (0, runtime_1.emitNervesEvent)({
222
- level: "warn",
223
- event: "config_identity.error",
224
- component: "config/identity",
225
- message: "ignored legacy context block in secrets config",
226
- meta: {
227
- phase: "loadConfig",
228
- path: configPath,
229
- },
230
- });
231
- }
232
- _cachedConfig = deepMerge(defaultRuntimeConfig(), sanitizedFileData);
146
+ const agentName = (0, identity_1.getAgentName)();
147
+ const runtimeResult = (0, runtime_credentials_1.readRuntimeCredentialConfig)(agentName);
148
+ const machineRuntimeResult = (0, runtime_credentials_1.readMachineRuntimeCredentialConfig)(agentName);
149
+ const vaultData = runtimeResult.ok ? localRuntimeFields(runtimeResult.config) : {};
150
+ const machineVaultData = machineRuntimeResult.ok ? localRuntimeFields(machineRuntimeResult.config) : {};
151
+ const mergedConfig = deepMerge(defaultRuntimeConfig(), vaultData);
152
+ const mergedWithMachineConfig = deepMerge(mergedConfig, machineVaultData);
153
+ const config = _runtimeConfigOverride
154
+ ? deepMerge(mergedWithMachineConfig, _runtimeConfigOverride)
155
+ : mergedWithMachineConfig;
233
156
  (0, runtime_1.emitNervesEvent)({
234
157
  event: "config.load",
235
158
  component: "config/identity",
236
- message: "config loaded from disk",
159
+ message: "config loaded from runtime credential cache",
237
160
  meta: {
238
- source: "disk",
239
- used_defaults_only: Object.keys(fileData).length === 0,
161
+ source: runtimeResult.ok ? "vault-cache" : "defaults",
162
+ used_defaults_only: !runtimeResult.ok,
163
+ machine_runtime_credentials: machineRuntimeResult.ok ? "available" : machineRuntimeResult.reason,
164
+ override_applied: _runtimeConfigOverride !== null,
165
+ runtime_credentials: runtimeResult.ok ? "available" : runtimeResult.reason,
240
166
  },
241
167
  });
242
- return _cachedConfig;
168
+ return config;
243
169
  }
244
170
  function resetConfigCache() {
245
- _cachedConfig = null;
171
+ _runtimeConfigOverride = null;
246
172
  _testContextOverride = null;
173
+ _providerConfigOverride = null;
174
+ (0, provider_credentials_1.resetProviderCredentialCache)();
175
+ (0, runtime_credentials_1.resetRuntimeCredentialConfigCache)();
176
+ }
177
+ function cacheRuntimeConfigForTests(agentName, config) {
178
+ (0, runtime_credentials_1.cacheRuntimeCredentialConfig)(agentName, config, new Date(0));
179
+ }
180
+ function cacheMachineRuntimeConfigForTests(agentName, config) {
181
+ (0, runtime_credentials_1.cacheMachineRuntimeCredentialConfig)(agentName, config, new Date(0), "machine_test");
182
+ }
183
+ function seedProviderCredentialCache(providers) {
184
+ if (!providers)
185
+ return;
186
+ _providerConfigOverride = deepMerge((_providerConfigOverride ?? {}), providers);
187
+ const records = Object.entries(_providerConfigOverride).map(([provider, rawConfig]) => {
188
+ const split = (0, provider_credentials_1.splitProviderCredentialFields)(provider, rawConfig);
189
+ return (0, provider_credentials_1.createProviderCredentialRecord)({
190
+ provider: provider,
191
+ credentials: split.credentials,
192
+ config: split.config,
193
+ provenance: { source: "manual" },
194
+ now: new Date(0),
195
+ });
196
+ });
197
+ (0, provider_credentials_1.cacheProviderCredentialRecords)((0, identity_1.getAgentName)(), records, new Date(0));
247
198
  }
248
199
  function patchRuntimeConfig(partial) {
249
- loadConfig(); // ensure _cachedConfig exists
200
+ const { providers, ...runtimePartial } = partial;
201
+ seedProviderCredentialCache(providers);
250
202
  const contextPatch = partial.context;
251
203
  if (contextPatch) {
252
204
  const base = _testContextOverride ?? identity_1.DEFAULT_AGENT_CONTEXT;
253
205
  _testContextOverride = deepMerge(base, contextPatch);
254
206
  }
255
- _cachedConfig = deepMerge(_cachedConfig, partial);
207
+ _runtimeConfigOverride = deepMerge((_runtimeConfigOverride ?? {}), runtimePartial);
208
+ }
209
+ function readProviderConfig(provider) {
210
+ const cached = (0, provider_credentials_1.readCachedProviderCredentialRecord)((0, identity_1.getAgentName)(), provider);
211
+ return cached.ok ? { ...cached.record.config, ...cached.record.credentials } : {};
256
212
  }
257
213
  function getAzureConfig() {
258
- const config = loadConfig();
259
- return { ...config.providers.azure };
214
+ const raw = readProviderConfig("azure");
215
+ return {
216
+ apiKey: typeof raw.apiKey === "string" ? raw.apiKey : "",
217
+ endpoint: typeof raw.endpoint === "string" ? raw.endpoint : "",
218
+ deployment: typeof raw.deployment === "string" ? raw.deployment : "",
219
+ apiVersion: typeof raw.apiVersion === "string" ? raw.apiVersion : "2025-04-01-preview",
220
+ managedIdentityClientId: typeof raw.managedIdentityClientId === "string" ? raw.managedIdentityClientId : "",
221
+ };
260
222
  }
261
223
  function getMinimaxConfig() {
262
- const config = loadConfig();
263
- return { ...config.providers.minimax };
224
+ const raw = readProviderConfig("minimax");
225
+ return { apiKey: typeof raw.apiKey === "string" ? raw.apiKey : "" };
264
226
  }
265
227
  function getAnthropicConfig() {
266
- const config = loadConfig();
267
- return { ...config.providers.anthropic };
228
+ const raw = readProviderConfig("anthropic");
229
+ return { setupToken: typeof raw.setupToken === "string" ? raw.setupToken : "" };
268
230
  }
269
231
  function getOpenAICodexConfig() {
270
- const config = loadConfig();
271
- return { ...config.providers["openai-codex"] };
232
+ const raw = readProviderConfig("openai-codex");
233
+ return { oauthAccessToken: typeof raw.oauthAccessToken === "string" ? raw.oauthAccessToken : "" };
234
+ }
235
+ function getGithubCopilotConfig() {
236
+ const raw = readProviderConfig("github-copilot");
237
+ return {
238
+ githubToken: typeof raw.githubToken === "string" ? raw.githubToken : "",
239
+ baseUrl: typeof raw.baseUrl === "string" ? raw.baseUrl : "",
240
+ };
272
241
  }
273
242
  function getTeamsConfig() {
274
243
  const config = loadConfig();
@@ -317,10 +286,10 @@ function getBlueBubblesConfig() {
317
286
  const config = loadConfig();
318
287
  const { serverUrl, password, accountId } = config.bluebubbles;
319
288
  if (!serverUrl.trim()) {
320
- throw new Error("bluebubbles.serverUrl is required in secrets.json to run the BlueBubbles sense.");
289
+ throw new Error("bluebubbles.serverUrl is required in this machine's agent-vault runtime config. Run `ouro connect bluebubbles --agent <agent>`.");
321
290
  }
322
291
  if (!password.trim()) {
323
- throw new Error("bluebubbles.password is required in secrets.json to run the BlueBubbles sense.");
292
+ throw new Error("bluebubbles.password is required in this machine's agent-vault runtime config. Run `ouro connect bluebubbles --agent <agent>`.");
324
293
  }
325
294
  return {
326
295
  serverUrl: serverUrl.trim(),
@@ -337,6 +306,19 @@ function getIntegrationsConfig() {
337
306
  const config = loadConfig();
338
307
  return { ...config.integrations };
339
308
  }
309
+ function getSyncConfig() {
310
+ try {
311
+ const agentConfig = (0, identity_1.loadAgentConfig)();
312
+ return {
313
+ enabled: agentConfig.sync?.enabled ?? false,
314
+ remote: agentConfig.sync?.remote ?? "origin",
315
+ };
316
+ }
317
+ catch {
318
+ /* v8 ignore next -- defensive: loadAgentConfig failure in test/bootstrap @preserve */
319
+ return { enabled: false, remote: "origin" };
320
+ }
321
+ }
340
322
  function getOpenAIEmbeddingsApiKey() {
341
323
  return getIntegrationsConfig().openaiEmbeddingsApiKey;
342
324
  }