@ouro.bot/cli 0.1.0-alpha.40 → 0.1.0-alpha.400

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