@ouro.bot/cli 0.1.0-alpha.7 → 0.1.0-alpha.700

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 (514) hide show
  1. package/README.md +235 -183
  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/SerpentGuide.ouro/agent.json +83 -0
  10. package/SerpentGuide.ouro/psyche/SOUL.md +25 -0
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +2 -2
  12. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  13. package/assets/ouroboros.png +0 -0
  14. package/changelog.json +4827 -0
  15. package/dist/a2a/card.js +57 -0
  16. package/dist/a2a/client.js +180 -0
  17. package/dist/a2a/config.js +50 -0
  18. package/dist/a2a/delegation-stores.js +56 -0
  19. package/dist/a2a/did-resolution.js +93 -0
  20. package/dist/a2a/identity.js +170 -0
  21. package/dist/a2a/inbound-share.js +107 -0
  22. package/dist/a2a/mission-result-wire.js +196 -0
  23. package/dist/a2a/onboarding.js +115 -0
  24. package/dist/a2a/pin-store.js +132 -0
  25. package/dist/a2a/seen-ledger.js +120 -0
  26. package/dist/a2a/server.js +604 -0
  27. package/dist/a2a/task-store.js +69 -0
  28. package/dist/a2a/transport.js +45 -0
  29. package/dist/a2a/types.js +3 -0
  30. package/dist/arc/attention-types.js +8 -0
  31. package/dist/arc/cares.js +144 -0
  32. package/dist/arc/episodes.js +118 -0
  33. package/dist/arc/evolution.js +490 -0
  34. package/dist/arc/flight-recorder.js +928 -0
  35. package/dist/arc/intentions.js +134 -0
  36. package/dist/arc/json-store.js +117 -0
  37. package/dist/arc/obligations.js +348 -0
  38. package/dist/arc/packets.js +336 -0
  39. package/dist/arc/presence.js +185 -0
  40. package/dist/arc/task-lifecycle.js +57 -0
  41. package/dist/commerce/store.js +755 -0
  42. package/dist/commerce/types.js +3 -0
  43. package/dist/heart/active-work.js +1002 -0
  44. package/dist/heart/agent-entry.js +190 -3
  45. package/dist/heart/attachments/image-normalize.js +194 -0
  46. package/dist/heart/attachments/materialize.js +97 -0
  47. package/dist/heart/attachments/originals.js +88 -0
  48. package/dist/heart/attachments/render.js +29 -0
  49. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  50. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  51. package/dist/heart/attachments/sources/index.js +16 -0
  52. package/dist/heart/attachments/store.js +103 -0
  53. package/dist/heart/attachments/types.js +93 -0
  54. package/dist/heart/auth/auth-flow.js +479 -0
  55. package/dist/heart/autonomy-budget.js +434 -0
  56. package/dist/heart/awaiting/await-alert.js +146 -0
  57. package/dist/heart/awaiting/await-expiry.js +108 -0
  58. package/dist/heart/awaiting/await-loader.js +91 -0
  59. package/dist/heart/awaiting/await-parser.js +141 -0
  60. package/dist/heart/awaiting/await-runtime-state.js +100 -0
  61. package/dist/heart/awaiting/await-scheduler.js +378 -0
  62. package/dist/heart/background-operations.js +281 -0
  63. package/dist/heart/bridges/manager.js +478 -0
  64. package/dist/heart/bridges/state-machine.js +135 -0
  65. package/dist/heart/bridges/store.js +135 -0
  66. package/dist/heart/bundle-state.js +168 -0
  67. package/dist/heart/commitments.js +135 -0
  68. package/dist/heart/config-registry.js +331 -0
  69. package/dist/heart/config.js +172 -135
  70. package/dist/heart/context-loss-gauntlet.js +354 -0
  71. package/dist/heart/context-loss-sentinel.js +1155 -0
  72. package/dist/heart/core.js +1480 -262
  73. package/dist/heart/cross-chat-delivery.js +132 -0
  74. package/dist/heart/daemon/agent-config-check.js +451 -0
  75. package/dist/heart/daemon/agent-discovery.js +263 -0
  76. package/dist/heart/daemon/agent-service.js +523 -0
  77. package/dist/heart/daemon/agentic-repair.js +547 -0
  78. package/dist/heart/daemon/await-private-wake.js +59 -0
  79. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  80. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  81. package/dist/heart/daemon/cadence.js +180 -0
  82. package/dist/heart/daemon/cli-defaults.js +780 -0
  83. package/dist/heart/daemon/cli-desk.js +322 -0
  84. package/dist/heart/daemon/cli-exec.js +8142 -0
  85. package/dist/heart/daemon/cli-help.js +675 -0
  86. package/dist/heart/daemon/cli-parse.js +2461 -0
  87. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  88. package/dist/heart/daemon/cli-render.js +770 -0
  89. package/dist/heart/daemon/cli-types.js +8 -0
  90. package/dist/heart/daemon/connect-bay.js +323 -0
  91. package/dist/heart/daemon/daemon-cli.js +30 -784
  92. package/dist/heart/daemon/daemon-entry.js +874 -13
  93. package/dist/heart/daemon/daemon-health.js +176 -0
  94. package/dist/heart/daemon/daemon-rollup.js +57 -0
  95. package/dist/heart/daemon/daemon-runtime-sync.js +287 -0
  96. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  97. package/dist/heart/daemon/daemon.js +1412 -26
  98. package/dist/heart/daemon/dns-workflow.js +394 -0
  99. package/dist/heart/daemon/doctor-types.js +8 -0
  100. package/dist/heart/daemon/doctor.js +1126 -0
  101. package/dist/heart/daemon/habit-private-wake.js +56 -0
  102. package/dist/heart/daemon/health-monitor.js +142 -11
  103. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  104. package/dist/heart/daemon/hooks/bundle-meta.js +226 -0
  105. package/dist/heart/daemon/http-health-probe.js +80 -0
  106. package/dist/heart/daemon/human-command-screens.js +234 -0
  107. package/dist/heart/daemon/human-readiness.js +114 -0
  108. package/dist/heart/daemon/inner-status.js +78 -0
  109. package/dist/heart/daemon/interactive-repair.js +394 -0
  110. package/dist/heart/daemon/launchd.js +188 -0
  111. package/dist/heart/daemon/log-tailer.js +82 -12
  112. package/dist/heart/daemon/logs-prune.js +110 -0
  113. package/dist/heart/daemon/mcp-canary.js +297 -0
  114. package/dist/heart/daemon/message-router.js +60 -11
  115. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  116. package/dist/heart/daemon/os-cron-deps.js +135 -0
  117. package/dist/heart/daemon/os-cron.js +22 -14
  118. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  119. package/dist/heart/daemon/ouro-entry.js +3 -1
  120. package/dist/heart/daemon/plugin-cli.js +432 -0
  121. package/dist/heart/daemon/process-manager.js +525 -33
  122. package/dist/heart/daemon/provider-discovery.js +137 -0
  123. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  124. package/dist/heart/daemon/pulse.js +511 -0
  125. package/dist/heart/daemon/readiness-repair.js +365 -0
  126. package/dist/heart/daemon/run-hooks.js +39 -0
  127. package/dist/heart/daemon/runtime-logging.js +86 -16
  128. package/dist/heart/daemon/runtime-metadata.js +191 -0
  129. package/dist/{repertoire/tasks/lifecycle.js → heart/daemon/runtime-mode.js} +26 -39
  130. package/dist/heart/daemon/safe-mode.js +161 -0
  131. package/dist/heart/daemon/sense-manager.js +929 -0
  132. package/dist/heart/daemon/session-id-resolver.js +131 -0
  133. package/dist/heart/daemon/skill-management-installer.js +94 -0
  134. package/dist/heart/daemon/socket-client.js +361 -0
  135. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  136. package/dist/heart/daemon/startup-tui.js +338 -0
  137. package/dist/heart/daemon/task-scheduler.js +117 -39
  138. package/dist/heart/daemon/terminal-ui.js +499 -0
  139. package/dist/heart/daemon/thoughts.js +591 -0
  140. package/dist/heart/daemon/up-progress.js +366 -0
  141. package/dist/heart/daemon/vault-items.js +56 -0
  142. package/dist/heart/delegation.js +59 -0
  143. package/dist/heart/external-events/router.js +121 -0
  144. package/dist/heart/habits/habit-migration.js +189 -0
  145. package/dist/heart/habits/habit-parser.js +214 -0
  146. package/dist/heart/habits/habit-runtime-state.js +114 -0
  147. package/dist/heart/habits/habit-scheduler.js +431 -0
  148. package/dist/heart/habits/habit-session-summary.js +318 -0
  149. package/dist/heart/habits/habit-session.js +617 -0
  150. package/dist/heart/{daemon → hatch}/hatch-animation.js +10 -3
  151. package/dist/heart/{daemon → hatch}/hatch-flow.js +53 -137
  152. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  153. package/dist/heart/hatch/specialist-orchestrator.js +129 -0
  154. package/dist/heart/hatch/specialist-prompt.js +102 -0
  155. package/dist/heart/hatch/specialist-tools.js +318 -0
  156. package/dist/heart/identity.js +287 -67
  157. package/dist/heart/kept-notes.js +289 -0
  158. package/dist/heart/kicks.js +2 -20
  159. package/dist/heart/machine-identity.js +161 -0
  160. package/dist/heart/mail-import-discovery.js +353 -0
  161. package/dist/heart/mailbox/mailbox-http-hooks.js +96 -0
  162. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  163. package/dist/heart/mailbox/mailbox-http-routes.js +375 -0
  164. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  165. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  166. package/dist/heart/mailbox/mailbox-http.js +99 -0
  167. package/dist/heart/mailbox/mailbox-read.js +37 -0
  168. package/dist/heart/mailbox/mailbox-types.js +27 -0
  169. package/dist/heart/mailbox/mailbox-view.js +197 -0
  170. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  171. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  172. package/dist/heart/mailbox/readers/mail.js +375 -0
  173. package/dist/heart/mailbox/readers/runtime-readers.js +815 -0
  174. package/dist/heart/mailbox/readers/sessions.js +232 -0
  175. package/dist/heart/mailbox/readers/shared.js +111 -0
  176. package/dist/heart/mcp/mcp-server.js +696 -0
  177. package/dist/heart/migrate-config.js +100 -0
  178. package/dist/heart/model-capabilities.js +59 -0
  179. package/dist/heart/orientation-frame.js +217 -0
  180. package/dist/heart/platform.js +81 -0
  181. package/dist/heart/primitives.js +1 -1
  182. package/dist/heart/private-runtime/decision-renderer.js +156 -0
  183. package/dist/heart/private-runtime/index.js +18 -0
  184. package/dist/heart/private-runtime/ledger.js +218 -0
  185. package/dist/heart/private-runtime/policy.js +214 -0
  186. package/dist/heart/private-runtime/types.js +2 -0
  187. package/dist/heart/progress-story.js +42 -0
  188. package/dist/heart/provider-attempt.js +134 -0
  189. package/dist/heart/provider-binding-resolver.js +273 -0
  190. package/dist/heart/provider-credentials.js +441 -0
  191. package/dist/heart/provider-failover.js +311 -0
  192. package/dist/heart/provider-models.js +81 -0
  193. package/dist/heart/provider-ping.js +262 -0
  194. package/dist/heart/provider-readiness-cache.js +119 -0
  195. package/dist/heart/provider-visibility.js +188 -0
  196. package/dist/heart/providers/anthropic-token.js +131 -0
  197. package/dist/heart/providers/anthropic.js +202 -50
  198. package/dist/heart/providers/azure.js +104 -13
  199. package/dist/heart/providers/error-classification.js +127 -0
  200. package/dist/heart/providers/github-copilot.js +145 -0
  201. package/dist/heart/providers/minimax-vlm.js +189 -0
  202. package/dist/heart/providers/minimax.js +29 -7
  203. package/dist/heart/providers/openai-codex-token.js +349 -0
  204. package/dist/heart/providers/openai-codex.js +63 -39
  205. package/dist/heart/run-ledger.js +247 -0
  206. package/dist/heart/runtime-capability-check.js +170 -0
  207. package/dist/heart/runtime-credentials.js +398 -0
  208. package/dist/heart/runtime-cwd.js +87 -0
  209. package/dist/heart/sense-truth.js +77 -0
  210. package/dist/heart/session-activity.js +235 -0
  211. package/dist/heart/session-events.js +1133 -0
  212. package/dist/heart/session-playback-cli-main.js +5 -0
  213. package/dist/heart/session-playback-cli.js +36 -0
  214. package/dist/heart/session-playback.js +231 -0
  215. package/dist/heart/session-stats-cli-main.js +5 -0
  216. package/dist/heart/session-stats.js +182 -0
  217. package/dist/heart/session-transcript.js +133 -0
  218. package/dist/heart/start-of-turn-packet.js +365 -0
  219. package/dist/heart/streaming.js +129 -34
  220. package/dist/heart/structured-output.js +196 -0
  221. package/dist/heart/sync-classification.js +176 -0
  222. package/dist/heart/sync.js +449 -0
  223. package/dist/heart/target-resolution.js +127 -0
  224. package/dist/heart/tempo.js +93 -0
  225. package/dist/heart/temporal-view.js +41 -0
  226. package/dist/heart/timeouts.js +101 -0
  227. package/dist/heart/tool-activity-callbacks.js +59 -0
  228. package/dist/heart/tool-description.js +155 -0
  229. package/dist/heart/tool-friction.js +55 -0
  230. package/dist/heart/tool-loop.js +200 -0
  231. package/dist/heart/turn-context.js +472 -0
  232. package/dist/heart/turn-coordinator.js +28 -0
  233. package/dist/heart/versioning/ouro-bot-global-installer.js +129 -0
  234. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  235. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  236. package/dist/heart/{daemon → versioning}/ouro-uti.js +11 -2
  237. package/dist/heart/versioning/ouro-version-manager.js +409 -0
  238. package/dist/heart/versioning/staged-restart.js +146 -0
  239. package/dist/heart/versioning/update-checker.js +116 -0
  240. package/dist/heart/versioning/update-hooks.js +154 -0
  241. package/dist/heart/versioning/wrapper-publish-guard.js +86 -0
  242. package/dist/heart/work-card.js +380 -0
  243. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  244. package/dist/mailbox-ui/assets/index-J8zDwHmE.js +1 -0
  245. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  246. package/dist/mailbox-ui/index.html +16 -0
  247. package/dist/mailroom/attention.js +167 -0
  248. package/dist/mailroom/autonomy.js +209 -0
  249. package/dist/mailroom/blob-store.js +715 -0
  250. package/dist/mailroom/body-cache.js +61 -0
  251. package/dist/mailroom/core.js +788 -0
  252. package/dist/mailroom/entry.js +160 -0
  253. package/dist/mailroom/file-store.js +568 -0
  254. package/dist/mailroom/mbox-import.js +393 -0
  255. package/dist/mailroom/migration.js +164 -0
  256. package/dist/mailroom/outbound.js +380 -0
  257. package/dist/mailroom/policy.js +263 -0
  258. package/dist/mailroom/reader.js +233 -0
  259. package/dist/mailroom/search-cache.js +334 -0
  260. package/dist/mailroom/search-relevance.js +319 -0
  261. package/dist/mailroom/smtp-ingress.js +176 -0
  262. package/dist/mailroom/source-state.js +176 -0
  263. package/dist/mailroom/thread.js +109 -0
  264. package/dist/mailroom/travel-extract.js +89 -0
  265. package/dist/mind/bundle-manifest.js +93 -1
  266. package/dist/mind/context.js +259 -94
  267. package/dist/mind/desk-section.js +362 -0
  268. package/dist/mind/diary-integrity.js +60 -0
  269. package/dist/mind/{memory.js → diary.js} +90 -98
  270. package/dist/mind/embedding-provider.js +60 -0
  271. package/dist/mind/file-state.js +179 -0
  272. package/dist/mind/first-impressions.js +16 -2
  273. package/dist/mind/{associative-recall.js → note-search.js} +61 -60
  274. package/dist/mind/obligation-steering.js +221 -0
  275. package/dist/mind/pending.js +77 -9
  276. package/dist/mind/phrases.js +1 -0
  277. package/dist/mind/prompt-budget.js +380 -0
  278. package/dist/mind/prompt-refresh.js +3 -2
  279. package/dist/mind/prompt.js +1279 -139
  280. package/dist/mind/provenance-trust.js +26 -0
  281. package/dist/mind/record-paths.js +312 -0
  282. package/dist/mind/scrutiny.js +173 -0
  283. package/dist/mind/token-estimate.js +8 -12
  284. package/dist/nerves/cli-logging.js +22 -3
  285. package/dist/nerves/coverage/audit-rules.js +15 -6
  286. package/dist/nerves/coverage/audit.js +28 -2
  287. package/dist/nerves/coverage/cli.js +1 -1
  288. package/dist/nerves/coverage/contract.js +5 -5
  289. package/dist/nerves/coverage/file-completeness.js +139 -5
  290. package/dist/nerves/coverage/run-artifacts.js +1 -1
  291. package/dist/nerves/event-buffer.js +111 -0
  292. package/dist/nerves/index.js +234 -4
  293. package/dist/nerves/observation.js +20 -0
  294. package/dist/nerves/redact.js +79 -0
  295. package/dist/nerves/review/cli-main.js +5 -0
  296. package/dist/nerves/review/cli.js +156 -0
  297. package/dist/nerves/review/core.js +152 -0
  298. package/dist/nerves/runtime.js +5 -1
  299. package/dist/repertoire/ado-client.js +17 -56
  300. package/dist/repertoire/ado-semantic.js +16 -10
  301. package/dist/repertoire/api-client.js +97 -0
  302. package/dist/repertoire/bitwarden-store.js +1042 -0
  303. package/dist/repertoire/bundle-templates.js +71 -0
  304. package/dist/repertoire/bw-installer.js +180 -0
  305. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  306. package/dist/repertoire/coding/context-pack.js +331 -0
  307. package/dist/repertoire/coding/feedback.js +322 -0
  308. package/dist/repertoire/coding/index.js +18 -3
  309. package/dist/repertoire/coding/manager.js +228 -14
  310. package/dist/repertoire/coding/spawner.js +61 -14
  311. package/dist/repertoire/coding/tools.js +279 -12
  312. package/dist/repertoire/coding/workbench-client.js +272 -0
  313. package/dist/repertoire/coding/workbench-manager.js +346 -0
  314. package/dist/repertoire/commerce-errors.js +109 -0
  315. package/dist/repertoire/commerce-self-test.js +156 -0
  316. package/dist/repertoire/credential-access.js +178 -0
  317. package/dist/repertoire/data/ado-endpoints.json +188 -0
  318. package/dist/repertoire/desk/classifier.js +362 -0
  319. package/dist/repertoire/duffel-client.js +185 -0
  320. package/dist/repertoire/github-client.js +14 -55
  321. package/dist/repertoire/graph-client.js +11 -52
  322. package/dist/repertoire/guardrails.js +408 -0
  323. package/dist/repertoire/mcp-client.js +295 -0
  324. package/dist/repertoire/mcp-manager.js +434 -0
  325. package/dist/repertoire/mcp-tools.js +83 -0
  326. package/dist/repertoire/plugin-mcp.js +175 -0
  327. package/dist/repertoire/plugins.js +253 -0
  328. package/dist/repertoire/shell-sessions.js +133 -0
  329. package/dist/repertoire/skills.js +45 -24
  330. package/dist/repertoire/stripe-client.js +131 -0
  331. package/dist/repertoire/tool-results.js +29 -0
  332. package/dist/repertoire/tools-a2a.js +699 -0
  333. package/dist/repertoire/tools-attachments.js +317 -0
  334. package/dist/repertoire/tools-awaiting.js +372 -0
  335. package/dist/repertoire/tools-base.js +68 -707
  336. package/dist/repertoire/tools-bluebubbles.js +95 -0
  337. package/dist/repertoire/tools-bridge.js +144 -0
  338. package/dist/repertoire/tools-bundle.js +993 -0
  339. package/dist/repertoire/tools-commerce.js +253 -0
  340. package/dist/repertoire/tools-config.js +186 -0
  341. package/dist/repertoire/tools-continuity.js +252 -0
  342. package/dist/repertoire/tools-credential.js +383 -0
  343. package/dist/repertoire/tools-evolution.js +527 -0
  344. package/dist/repertoire/tools-files.js +344 -0
  345. package/dist/repertoire/tools-flight.js +290 -0
  346. package/dist/repertoire/tools-flow.js +119 -0
  347. package/dist/repertoire/tools-github.js +3 -8
  348. package/dist/repertoire/tools-mail.js +1975 -0
  349. package/dist/repertoire/tools-notes.js +459 -0
  350. package/dist/repertoire/tools-obligations.js +182 -0
  351. package/dist/repertoire/tools-orientation.js +31 -0
  352. package/dist/repertoire/tools-record.js +482 -0
  353. package/dist/repertoire/tools-rsvp.js +139 -0
  354. package/dist/repertoire/tools-runtime.js +150 -0
  355. package/dist/repertoire/tools-session.js +881 -0
  356. package/dist/repertoire/tools-shell.js +120 -0
  357. package/dist/repertoire/tools-stripe.js +224 -0
  358. package/dist/repertoire/tools-surface.js +355 -0
  359. package/dist/repertoire/tools-teams.js +67 -61
  360. package/dist/repertoire/tools-travel.js +125 -0
  361. package/dist/repertoire/tools-trip.js +982 -0
  362. package/dist/repertoire/tools-user-profile.js +146 -0
  363. package/dist/repertoire/tools-vault.js +40 -0
  364. package/dist/repertoire/tools-voice.js +145 -0
  365. package/dist/repertoire/tools.js +313 -102
  366. package/dist/repertoire/travel-api-client.js +360 -0
  367. package/dist/repertoire/user-profile.js +131 -0
  368. package/dist/repertoire/vault-setup.js +246 -0
  369. package/dist/repertoire/vault-unlock.js +594 -0
  370. package/dist/rsvp/aisleplanner-client.js +354 -0
  371. package/dist/rsvp/cli.js +704 -0
  372. package/dist/rsvp/config.js +327 -0
  373. package/dist/rsvp/cutover.js +431 -0
  374. package/dist/rsvp/diagnostics.js +222 -0
  375. package/dist/rsvp/diff-renderer.js +161 -0
  376. package/dist/rsvp/habit-policy.js +85 -0
  377. package/dist/rsvp/habit-stage.js +93 -0
  378. package/dist/rsvp/incident-bundle.js +97 -0
  379. package/dist/rsvp/migration.js +204 -0
  380. package/dist/rsvp/outbound-state.js +254 -0
  381. package/dist/rsvp/query.js +118 -0
  382. package/dist/rsvp/replay.js +233 -0
  383. package/dist/rsvp/snapshot.js +232 -0
  384. package/dist/scripts/claude-code-hook.js +41 -0
  385. package/dist/scripts/claude-code-stop-hook.js +47 -0
  386. package/dist/senses/a2a-entry.js +115 -0
  387. package/dist/senses/attention-queue.js +186 -0
  388. package/dist/senses/await-turn-message.js +58 -0
  389. package/dist/senses/bluebubbles/active-turns.js +216 -0
  390. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  391. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  392. package/dist/senses/bluebubbles/client.js +691 -0
  393. package/dist/senses/bluebubbles/entry.js +77 -0
  394. package/dist/senses/bluebubbles/inbound-log.js +126 -0
  395. package/dist/senses/bluebubbles/index.js +2937 -0
  396. package/dist/senses/bluebubbles/media.js +389 -0
  397. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +45 -16
  398. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +46 -6
  399. package/dist/senses/bluebubbles/outbound-state.js +304 -0
  400. package/dist/senses/bluebubbles/processed-log.js +133 -0
  401. package/dist/senses/bluebubbles/replay.js +284 -0
  402. package/dist/senses/bluebubbles/runtime-state.js +137 -0
  403. package/dist/senses/bluebubbles/session-cleanup.js +72 -0
  404. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  405. package/dist/senses/cli/bracketed-paste.js +82 -0
  406. package/dist/senses/cli/image-paste.js +287 -0
  407. package/dist/senses/cli/image-ref-navigation.js +75 -0
  408. package/dist/senses/cli/ink-app.js +156 -0
  409. package/dist/senses/cli/inline-diff.js +64 -0
  410. package/dist/senses/cli/input-keys.js +174 -0
  411. package/dist/senses/cli/kill-ring.js +86 -0
  412. package/dist/senses/cli/message-list.js +51 -0
  413. package/dist/senses/cli/ouro-tui.js +607 -0
  414. package/dist/senses/cli/spinner-imperative.js +135 -0
  415. package/dist/senses/cli/spinner.js +101 -0
  416. package/dist/senses/cli/status-line.js +60 -0
  417. package/dist/senses/cli/streaming-markdown.js +526 -0
  418. package/dist/senses/cli/tool-display.js +85 -0
  419. package/dist/senses/cli/tool-render.js +85 -0
  420. package/dist/senses/cli/tui-store.js +240 -0
  421. package/dist/senses/cli/virtual-list.js +35 -0
  422. package/dist/senses/cli-entry.js +60 -8
  423. package/dist/senses/cli-layout.js +187 -0
  424. package/dist/senses/cli.js +780 -269
  425. package/dist/senses/commands.js +66 -3
  426. package/dist/senses/context-packet-ledger.js +245 -0
  427. package/dist/senses/context-packets.js +154 -0
  428. package/dist/senses/continuity.js +94 -0
  429. package/dist/senses/habit-turn-message.js +160 -0
  430. package/dist/senses/mail-entry.js +66 -0
  431. package/dist/senses/mail.js +395 -0
  432. package/dist/senses/pipeline.js +1052 -0
  433. package/dist/senses/private-runtime-worker.js +723 -0
  434. package/dist/senses/private-runtime.js +1157 -0
  435. package/dist/senses/proactive-content-guard.js +51 -0
  436. package/dist/senses/shared-turn.js +416 -0
  437. package/dist/senses/surface-tool.js +109 -0
  438. package/dist/senses/teams-entry.js +60 -8
  439. package/dist/senses/teams.js +928 -199
  440. package/dist/senses/trust-gate.js +207 -2
  441. package/dist/senses/voice/audio-playback.js +237 -0
  442. package/dist/senses/voice/audio-routing.js +119 -0
  443. package/dist/senses/voice/elevenlabs.js +202 -0
  444. package/dist/senses/voice/floor-control.js +431 -0
  445. package/dist/senses/voice/floor-controller.js +115 -0
  446. package/dist/senses/voice/golden-path.js +116 -0
  447. package/dist/senses/voice/index.js +29 -0
  448. package/dist/senses/voice/meeting.js +113 -0
  449. package/dist/senses/voice/outbound.js +190 -0
  450. package/dist/senses/voice/phone.js +33 -0
  451. package/dist/senses/voice/playback.js +139 -0
  452. package/dist/senses/voice/realtime-eval.js +496 -0
  453. package/dist/senses/voice/realtime-trace.js +531 -0
  454. package/dist/senses/voice/transcript.js +70 -0
  455. package/dist/senses/voice/turn.js +191 -0
  456. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  457. package/dist/senses/voice/twilio-phone.js +5081 -0
  458. package/dist/senses/voice/types.js +2 -0
  459. package/dist/senses/voice/whisper.js +161 -0
  460. package/dist/senses/voice-entry.js +81 -0
  461. package/dist/senses/voice-realtime-eval-command.js +99 -0
  462. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  463. package/dist/senses/voice-twilio-entry.js +87 -0
  464. package/dist/trips/core.js +138 -0
  465. package/dist/trips/store.js +265 -0
  466. package/dist/util/frontmatter.js +69 -0
  467. package/package.json +67 -11
  468. package/skills/agent-commerce.md +113 -0
  469. package/skills/browser-navigation.md +117 -0
  470. package/skills/commerce-setup-guide.md +116 -0
  471. package/skills/commerce-setup.md +84 -0
  472. package/skills/configure-dev-tools.md +99 -0
  473. package/skills/travel-planning.md +138 -0
  474. package/AdoptionSpecialist.ouro/agent.json +0 -20
  475. package/AdoptionSpecialist.ouro/psyche/SOUL.md +0 -22
  476. package/dist/heart/daemon/specialist-orchestrator.js +0 -160
  477. package/dist/heart/daemon/specialist-prompt.js +0 -40
  478. package/dist/heart/daemon/specialist-session.js +0 -142
  479. package/dist/heart/daemon/specialist-tools.js +0 -128
  480. package/dist/heart/daemon/subagent-installer.js +0 -125
  481. package/dist/inner-worker-entry.js +0 -4
  482. package/dist/mind/friends/channel.js +0 -49
  483. package/dist/mind/friends/resolver.js +0 -84
  484. package/dist/mind/friends/store-file.js +0 -171
  485. package/dist/mind/friends/store.js +0 -4
  486. package/dist/mind/friends/tokens.js +0 -26
  487. package/dist/mind/friends/types.js +0 -21
  488. package/dist/repertoire/tasks/board.js +0 -122
  489. package/dist/repertoire/tasks/index.js +0 -210
  490. package/dist/repertoire/tasks/middleware.js +0 -65
  491. package/dist/repertoire/tasks/parser.js +0 -173
  492. package/dist/repertoire/tasks/scanner.js +0 -132
  493. package/dist/repertoire/tasks/transitions.js +0 -145
  494. package/dist/senses/bluebubbles-client.js +0 -279
  495. package/dist/senses/bluebubbles-entry.js +0 -11
  496. package/dist/senses/bluebubbles.js +0 -332
  497. package/dist/senses/inner-dialog-worker.js +0 -61
  498. package/dist/senses/inner-dialog.js +0 -231
  499. package/subagents/README.md +0 -73
  500. package/subagents/work-doer.md +0 -233
  501. package/subagents/work-merger.md +0 -624
  502. package/subagents/work-planner.md +0 -373
  503. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  504. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  505. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  506. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  507. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  508. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  509. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  510. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  511. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  512. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  513. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  514. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
@@ -35,61 +35,55 @@ 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.setTestConfig = setTestConfig;
38
+ exports.cacheRuntimeConfigForTests = cacheRuntimeConfigForTests;
39
+ exports.cacheMachineRuntimeConfigForTests = cacheMachineRuntimeConfigForTests;
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;
47
+ exports.getTeamsSecondaryConfig = getTeamsSecondaryConfig;
44
48
  exports.getContextConfig = getContextConfig;
45
49
  exports.getOAuthConfig = getOAuthConfig;
50
+ exports.resolveOAuthForTenant = resolveOAuthForTenant;
46
51
  exports.getTeamsChannelConfig = getTeamsChannelConfig;
47
52
  exports.getBlueBubblesConfig = getBlueBubblesConfig;
48
53
  exports.getBlueBubblesChannelConfig = getBlueBubblesChannelConfig;
49
54
  exports.getIntegrationsConfig = getIntegrationsConfig;
55
+ exports.getSyncConfig = getSyncConfig;
50
56
  exports.getOpenAIEmbeddingsApiKey = getOpenAIEmbeddingsApiKey;
51
57
  exports.getLogsDir = getLogsDir;
58
+ exports.sanitizeKey = sanitizeKey;
59
+ exports.slugify = slugify;
60
+ exports.resolveSessionPath = resolveSessionPath;
52
61
  exports.sessionPath = sessionPath;
53
62
  exports.logPath = logPath;
54
63
  const fs = __importStar(require("fs"));
55
64
  const path = __importStar(require("path"));
56
- const os = __importStar(require("os"));
57
65
  const identity_1 = require("./identity");
66
+ const provider_credentials_1 = require("./provider-credentials");
67
+ const runtime_credentials_1 = require("./runtime-credentials");
58
68
  const runtime_1 = require("../nerves/runtime");
59
- const DEFAULT_SECRETS_TEMPLATE = {
60
- providers: {
61
- // Keep provider field ordering consistent: model first, then auth credentials,
62
- // then provider-specific transport fields.
63
- azure: {
64
- modelName: "",
65
- apiKey: "",
66
- endpoint: "",
67
- deployment: "",
68
- apiVersion: "2025-04-01-preview",
69
- },
70
- minimax: {
71
- model: "",
72
- apiKey: "",
73
- },
74
- anthropic: {
75
- model: "claude-opus-4-6",
76
- setupToken: "",
77
- },
78
- "openai-codex": {
79
- model: "gpt-5.2",
80
- oauthAccessToken: "",
81
- },
82
- },
69
+ const DEFAULT_LOCAL_RUNTIME_CONFIG = {
83
70
  teams: {
84
71
  clientId: "",
85
72
  clientSecret: "",
86
73
  tenantId: "",
74
+ managedIdentityClientId: "",
87
75
  },
88
76
  oauth: {
89
77
  graphConnectionName: "graph",
90
78
  adoConnectionName: "ado",
91
79
  githubConnectionName: "",
92
80
  },
81
+ teamsSecondary: {
82
+ clientId: "",
83
+ clientSecret: "",
84
+ tenantId: "",
85
+ managedIdentityClientId: "",
86
+ },
93
87
  teamsChannel: {
94
88
  skipConfirmation: true,
95
89
  port: 3978,
@@ -98,39 +92,41 @@ const DEFAULT_SECRETS_TEMPLATE = {
98
92
  serverUrl: "",
99
93
  password: "",
100
94
  accountId: "default",
95
+ ownHandles: [],
101
96
  },
102
97
  bluebubblesChannel: {
103
98
  port: 18790,
104
99
  webhookPath: "/bluebubbles-webhook",
105
100
  requestTimeoutMs: 30000,
106
101
  },
102
+ vault: {
103
+ masterPassword: "",
104
+ },
107
105
  integrations: {
108
106
  perplexityApiKey: "",
109
107
  openaiEmbeddingsApiKey: "",
110
108
  },
109
+ features: {
110
+ workbenchCoding: false,
111
+ },
111
112
  };
112
113
  function defaultRuntimeConfig() {
113
114
  return {
114
- providers: {
115
- azure: { ...DEFAULT_SECRETS_TEMPLATE.providers.azure },
116
- minimax: { ...DEFAULT_SECRETS_TEMPLATE.providers.minimax },
117
- anthropic: { ...DEFAULT_SECRETS_TEMPLATE.providers.anthropic },
118
- "openai-codex": { ...DEFAULT_SECRETS_TEMPLATE.providers["openai-codex"] },
119
- },
120
- teams: { ...DEFAULT_SECRETS_TEMPLATE.teams },
121
- oauth: { ...DEFAULT_SECRETS_TEMPLATE.oauth },
115
+ teams: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.teams },
116
+ teamsSecondary: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.teamsSecondary },
117
+ oauth: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.oauth },
122
118
  context: { ...identity_1.DEFAULT_AGENT_CONTEXT },
123
- teamsChannel: { ...DEFAULT_SECRETS_TEMPLATE.teamsChannel },
124
- bluebubbles: { ...DEFAULT_SECRETS_TEMPLATE.bluebubbles },
125
- bluebubblesChannel: { ...DEFAULT_SECRETS_TEMPLATE.bluebubblesChannel },
126
- integrations: { ...DEFAULT_SECRETS_TEMPLATE.integrations },
119
+ teamsChannel: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.teamsChannel },
120
+ bluebubbles: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.bluebubbles },
121
+ bluebubblesChannel: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.bluebubblesChannel },
122
+ vault: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.vault },
123
+ integrations: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.integrations },
124
+ features: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.features },
127
125
  };
128
126
  }
129
- let _cachedConfig = null;
127
+ let _runtimeConfigOverride = null;
130
128
  let _testContextOverride = null;
131
- function resolveConfigPath() {
132
- return (0, identity_1.getAgentSecretsPath)();
133
- }
129
+ let _providerConfigOverride = null;
134
130
  function deepMerge(defaults, partial) {
135
131
  const result = { ...defaults };
136
132
  for (const key of Object.keys(partial)) {
@@ -147,121 +143,119 @@ function deepMerge(defaults, partial) {
147
143
  }
148
144
  return result;
149
145
  }
146
+ function localRuntimeFields(config) {
147
+ const { providers: _providers, context: _context, ...localFields } = config;
148
+ return localFields;
149
+ }
150
150
  function loadConfig() {
151
- if (_cachedConfig) {
152
- (0, runtime_1.emitNervesEvent)({
153
- event: "config.load",
154
- component: "config/identity",
155
- message: "config loaded from cache",
156
- meta: { source: "cache" },
157
- });
158
- return _cachedConfig;
159
- }
160
- const configPath = resolveConfigPath();
161
- // Auto-create config directory if it doesn't exist
162
- const configDir = path.dirname(configPath);
163
- fs.mkdirSync(configDir, { recursive: true });
164
- let fileData = {};
165
- try {
166
- const raw = fs.readFileSync(configPath, "utf-8");
167
- fileData = JSON.parse(raw);
168
- }
169
- catch (error) {
170
- const errorCode = error &&
171
- typeof error === "object" &&
172
- "code" in error &&
173
- typeof error.code === "string"
174
- ? error.code
175
- : undefined;
176
- if (errorCode === "ENOENT") {
177
- try {
178
- fs.writeFileSync(configPath, JSON.stringify(DEFAULT_SECRETS_TEMPLATE, null, 2) + "\n", "utf-8");
179
- }
180
- catch (writeError) {
181
- (0, runtime_1.emitNervesEvent)({
182
- level: "warn",
183
- event: "config_identity.error",
184
- component: "config/identity",
185
- message: "failed writing default secrets config",
186
- meta: {
187
- phase: "loadConfig",
188
- path: configPath,
189
- reason: writeError instanceof Error ? writeError.message : String(writeError),
190
- },
191
- });
192
- }
193
- }
194
- (0, runtime_1.emitNervesEvent)({
195
- level: "warn",
196
- event: "config_identity.error",
197
- component: "config/identity",
198
- message: "config read failed; defaults applied",
199
- meta: {
200
- phase: "loadConfig",
201
- reason: error instanceof Error ? error.message : String(error),
202
- },
203
- });
204
- // ENOENT or parse error -- use defaults
205
- }
206
- const sanitizedFileData = { ...fileData };
207
- if ("context" in sanitizedFileData) {
208
- delete sanitizedFileData.context;
209
- (0, runtime_1.emitNervesEvent)({
210
- level: "warn",
211
- event: "config_identity.error",
212
- component: "config/identity",
213
- message: "ignored legacy context block in secrets config",
214
- meta: {
215
- phase: "loadConfig",
216
- path: configPath,
217
- },
218
- });
219
- }
220
- _cachedConfig = deepMerge(defaultRuntimeConfig(), sanitizedFileData);
151
+ const agentName = (0, identity_1.getAgentName)();
152
+ const runtimeResult = (0, runtime_credentials_1.readRuntimeCredentialConfig)(agentName);
153
+ const machineRuntimeResult = (0, runtime_credentials_1.readMachineRuntimeCredentialConfig)(agentName);
154
+ const vaultData = runtimeResult.ok ? localRuntimeFields(runtimeResult.config) : {};
155
+ const machineVaultData = machineRuntimeResult.ok ? localRuntimeFields(machineRuntimeResult.config) : {};
156
+ const mergedConfig = deepMerge(defaultRuntimeConfig(), vaultData);
157
+ const mergedWithMachineConfig = deepMerge(mergedConfig, machineVaultData);
158
+ const config = _runtimeConfigOverride
159
+ ? deepMerge(mergedWithMachineConfig, _runtimeConfigOverride)
160
+ : mergedWithMachineConfig;
221
161
  (0, runtime_1.emitNervesEvent)({
222
162
  event: "config.load",
223
163
  component: "config/identity",
224
- message: "config loaded from disk",
164
+ message: "config loaded from runtime credential cache",
225
165
  meta: {
226
- source: "disk",
227
- used_defaults_only: Object.keys(fileData).length === 0,
166
+ source: runtimeResult.ok ? "vault-cache" : "defaults",
167
+ used_defaults_only: !runtimeResult.ok,
168
+ machine_runtime_credentials: machineRuntimeResult.ok ? "available" : machineRuntimeResult.reason,
169
+ override_applied: _runtimeConfigOverride !== null,
170
+ runtime_credentials: runtimeResult.ok ? "available" : runtimeResult.reason,
228
171
  },
229
172
  });
230
- return _cachedConfig;
173
+ return config;
231
174
  }
232
175
  function resetConfigCache() {
233
- _cachedConfig = null;
176
+ _runtimeConfigOverride = null;
234
177
  _testContextOverride = null;
178
+ _providerConfigOverride = null;
179
+ (0, provider_credentials_1.resetProviderCredentialCache)();
180
+ (0, runtime_credentials_1.resetRuntimeCredentialConfigCache)();
181
+ }
182
+ function cacheRuntimeConfigForTests(agentName, config) {
183
+ (0, runtime_credentials_1.cacheRuntimeCredentialConfig)(agentName, config, new Date(0));
184
+ }
185
+ function cacheMachineRuntimeConfigForTests(agentName, config) {
186
+ (0, runtime_credentials_1.cacheMachineRuntimeCredentialConfig)(agentName, config, new Date(0), "machine_test");
187
+ }
188
+ function seedProviderCredentialCache(providers) {
189
+ if (!providers)
190
+ return;
191
+ _providerConfigOverride = deepMerge((_providerConfigOverride ?? {}), providers);
192
+ const records = Object.entries(_providerConfigOverride).map(([provider, rawConfig]) => {
193
+ const split = (0, provider_credentials_1.splitProviderCredentialFields)(provider, rawConfig);
194
+ return (0, provider_credentials_1.createProviderCredentialRecord)({
195
+ provider: provider,
196
+ credentials: split.credentials,
197
+ config: split.config,
198
+ provenance: { source: "manual" },
199
+ now: new Date(0),
200
+ });
201
+ });
202
+ (0, provider_credentials_1.cacheProviderCredentialRecords)((0, identity_1.getAgentName)(), records, new Date(0));
235
203
  }
236
- function setTestConfig(partial) {
237
- loadConfig(); // ensure _cachedConfig exists
204
+ function patchRuntimeConfig(partial) {
205
+ const { providers, ...runtimePartial } = partial;
206
+ seedProviderCredentialCache(providers);
238
207
  const contextPatch = partial.context;
239
208
  if (contextPatch) {
240
209
  const base = _testContextOverride ?? identity_1.DEFAULT_AGENT_CONTEXT;
241
210
  _testContextOverride = deepMerge(base, contextPatch);
242
211
  }
243
- _cachedConfig = deepMerge(_cachedConfig, partial);
212
+ _runtimeConfigOverride = deepMerge((_runtimeConfigOverride ?? {}), runtimePartial);
213
+ }
214
+ function readProviderConfig(provider) {
215
+ const cached = (0, provider_credentials_1.readCachedProviderCredentialRecord)((0, identity_1.getAgentName)(), provider);
216
+ return cached.ok ? { ...cached.record.config, ...cached.record.credentials } : {};
244
217
  }
245
218
  function getAzureConfig() {
246
- const config = loadConfig();
247
- return { ...config.providers.azure };
219
+ const raw = readProviderConfig("azure");
220
+ return {
221
+ apiKey: typeof raw.apiKey === "string" ? raw.apiKey : "",
222
+ endpoint: typeof raw.endpoint === "string" ? raw.endpoint : "",
223
+ deployment: typeof raw.deployment === "string" ? raw.deployment : "",
224
+ apiVersion: typeof raw.apiVersion === "string" ? raw.apiVersion : "2025-04-01-preview",
225
+ managedIdentityClientId: typeof raw.managedIdentityClientId === "string" ? raw.managedIdentityClientId : "",
226
+ };
248
227
  }
249
228
  function getMinimaxConfig() {
250
- const config = loadConfig();
251
- return { ...config.providers.minimax };
229
+ const raw = readProviderConfig("minimax");
230
+ return { apiKey: typeof raw.apiKey === "string" ? raw.apiKey : "" };
252
231
  }
253
232
  function getAnthropicConfig() {
254
- const config = loadConfig();
255
- return { ...config.providers.anthropic };
233
+ const raw = readProviderConfig("anthropic");
234
+ return { setupToken: typeof raw.setupToken === "string" ? raw.setupToken : "" };
256
235
  }
257
236
  function getOpenAICodexConfig() {
258
- const config = loadConfig();
259
- return { ...config.providers["openai-codex"] };
237
+ const raw = readProviderConfig("openai-codex");
238
+ return {
239
+ oauthAccessToken: typeof raw.oauthAccessToken === "string" ? raw.oauthAccessToken : "",
240
+ ...(typeof raw.refreshToken === "string" ? { refreshToken: raw.refreshToken } : {}),
241
+ ...(typeof raw.expiresAt === "number" ? { expiresAt: raw.expiresAt } : {}),
242
+ };
243
+ }
244
+ function getGithubCopilotConfig() {
245
+ const raw = readProviderConfig("github-copilot");
246
+ return {
247
+ githubToken: typeof raw.githubToken === "string" ? raw.githubToken : "",
248
+ baseUrl: typeof raw.baseUrl === "string" ? raw.baseUrl : "",
249
+ };
260
250
  }
261
251
  function getTeamsConfig() {
262
252
  const config = loadConfig();
263
253
  return { ...config.teams };
264
254
  }
255
+ function getTeamsSecondaryConfig() {
256
+ const config = loadConfig();
257
+ return { ...config.teamsSecondary };
258
+ }
265
259
  function getContextConfig() {
266
260
  if (_testContextOverride) {
267
261
  return { ..._testContextOverride };
@@ -282,6 +276,16 @@ function getOAuthConfig() {
282
276
  const config = loadConfig();
283
277
  return { ...config.oauth };
284
278
  }
279
+ /** Resolve OAuth connection names for a specific tenant, falling back to defaults. */
280
+ function resolveOAuthForTenant(tenantId) {
281
+ const base = getOAuthConfig();
282
+ const overrides = tenantId ? base.tenantOverrides?.[tenantId] : undefined;
283
+ return {
284
+ graphConnectionName: overrides?.graphConnectionName ?? base.graphConnectionName,
285
+ adoConnectionName: overrides?.adoConnectionName ?? base.adoConnectionName,
286
+ githubConnectionName: overrides?.githubConnectionName ?? base.githubConnectionName,
287
+ };
288
+ }
285
289
  function getTeamsChannelConfig() {
286
290
  const config = loadConfig();
287
291
  const { skipConfirmation, flushIntervalMs, port } = config.teamsChannel;
@@ -289,17 +293,24 @@ function getTeamsChannelConfig() {
289
293
  }
290
294
  function getBlueBubblesConfig() {
291
295
  const config = loadConfig();
292
- const { serverUrl, password, accountId } = config.bluebubbles;
296
+ const { serverUrl, password, accountId, ownHandles } = config.bluebubbles;
293
297
  if (!serverUrl.trim()) {
294
- throw new Error("bluebubbles.serverUrl is required in secrets.json to run the BlueBubbles sense.");
298
+ throw new Error("bluebubbles.serverUrl is required in this machine's agent-vault runtime config. Run `ouro connect bluebubbles --agent <agent>`.");
295
299
  }
296
300
  if (!password.trim()) {
297
- throw new Error("bluebubbles.password is required in secrets.json to run the BlueBubbles sense.");
301
+ throw new Error("bluebubbles.password is required in this machine's agent-vault runtime config. Run `ouro connect bluebubbles --agent <agent>`.");
302
+ }
303
+ const normalizedHandles = [];
304
+ for (const handle of ownHandles) {
305
+ const trimmed = handle.trim();
306
+ if (trimmed.length > 0)
307
+ normalizedHandles.push(trimmed);
298
308
  }
299
309
  return {
300
310
  serverUrl: serverUrl.trim(),
301
311
  password: password.trim(),
302
312
  accountId: accountId.trim() || "default",
313
+ ownHandles: normalizedHandles,
303
314
  };
304
315
  }
305
316
  function getBlueBubblesChannelConfig() {
@@ -311,20 +322,46 @@ function getIntegrationsConfig() {
311
322
  const config = loadConfig();
312
323
  return { ...config.integrations };
313
324
  }
325
+ function getSyncConfig() {
326
+ try {
327
+ const agentConfig = (0, identity_1.loadAgentConfig)();
328
+ return {
329
+ enabled: agentConfig.sync?.enabled ?? false,
330
+ remote: agentConfig.sync?.remote ?? "origin",
331
+ };
332
+ }
333
+ catch {
334
+ /* v8 ignore next -- defensive: loadAgentConfig failure in test/bootstrap @preserve */
335
+ return { enabled: false, remote: "origin" };
336
+ }
337
+ }
314
338
  function getOpenAIEmbeddingsApiKey() {
315
339
  return getIntegrationsConfig().openaiEmbeddingsApiKey;
316
340
  }
317
341
  function getLogsDir() {
318
- return path.join(os.homedir(), ".agentstate", (0, identity_1.getAgentName)(), "logs");
342
+ return path.join((0, identity_1.getAgentRoot)(), "state", "logs");
319
343
  }
320
344
  function sanitizeKey(key) {
321
345
  return key.replace(/[/:]/g, "_");
322
346
  }
323
- function sessionPath(friendId, channel, key) {
324
- const dir = path.join(os.homedir(), ".agentstate", (0, identity_1.getAgentName)(), "sessions", friendId, channel);
325
- fs.mkdirSync(dir, { recursive: true });
347
+ function slugify(value) {
348
+ return value
349
+ .trim()
350
+ .toLowerCase()
351
+ .replace(/[^a-z0-9]+/g, "-")
352
+ .replace(/^-+/, "")
353
+ .replace(/-+$/, "");
354
+ }
355
+ function resolveSessionPath(friendId, channel, key, options) {
356
+ const dir = path.join((0, identity_1.getAgentRoot)(), "state", "sessions", friendId, channel);
357
+ if (options?.ensureDir) {
358
+ fs.mkdirSync(dir, { recursive: true });
359
+ }
326
360
  return path.join(dir, sanitizeKey(key) + ".json");
327
361
  }
362
+ function sessionPath(friendId, channel, key) {
363
+ return resolveSessionPath(friendId, channel, key, { ensureDir: true });
364
+ }
328
365
  function logPath(channel, key) {
329
366
  return path.join(getLogsDir(), channel, sanitizeKey(key) + ".ndjson");
330
367
  }