@ouro.bot/cli 0.1.0-alpha.5 → 0.1.0-alpha.500

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