@ouro.bot/cli 0.1.0-alpha.52 → 0.1.0-alpha.520

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 (375) hide show
  1. package/README.md +133 -19
  2. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -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 +3353 -0
  6. package/dist/arc/attention-types.js +8 -0
  7. package/dist/arc/cares.js +140 -0
  8. package/dist/arc/episodes.js +117 -0
  9. package/dist/arc/intentions.js +133 -0
  10. package/dist/arc/json-store.js +117 -0
  11. package/dist/arc/obligations.js +237 -0
  12. package/dist/arc/packets.js +193 -0
  13. package/dist/arc/presence.js +185 -0
  14. package/dist/arc/task-lifecycle.js +65 -0
  15. package/dist/heart/active-work.js +837 -26
  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 +427 -0
  28. package/dist/heart/background-operations.js +281 -0
  29. package/dist/heart/bundle-state.js +168 -0
  30. package/dist/heart/commitments.js +111 -0
  31. package/dist/heart/config-registry.js +304 -0
  32. package/dist/heart/config.js +119 -129
  33. package/dist/heart/core.js +948 -243
  34. package/dist/heart/cross-chat-delivery.js +3 -18
  35. package/dist/heart/daemon/agent-config-check.js +512 -0
  36. package/dist/heart/daemon/agent-discovery.js +102 -3
  37. package/dist/heart/daemon/agent-service.js +360 -0
  38. package/dist/heart/daemon/agentic-repair.js +554 -0
  39. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  40. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  41. package/dist/heart/daemon/cadence.js +70 -0
  42. package/dist/heart/daemon/cli-defaults.js +643 -0
  43. package/dist/heart/daemon/cli-exec.js +7476 -0
  44. package/dist/heart/daemon/cli-help.js +493 -0
  45. package/dist/heart/daemon/cli-parse.js +1557 -0
  46. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  47. package/dist/heart/daemon/cli-render.js +649 -0
  48. package/dist/heart/daemon/cli-types.js +8 -0
  49. package/dist/heart/daemon/connect-bay.js +323 -0
  50. package/dist/heart/daemon/daemon-cli.js +29 -1631
  51. package/dist/heart/daemon/daemon-entry.js +404 -3
  52. package/dist/heart/daemon/daemon-health.js +183 -0
  53. package/dist/heart/daemon/daemon-rollup.js +58 -0
  54. package/dist/heart/daemon/daemon-runtime-sync.js +190 -12
  55. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  56. package/dist/heart/daemon/daemon.js +758 -60
  57. package/dist/heart/daemon/dns-workflow.js +394 -0
  58. package/dist/heart/daemon/doctor-types.js +8 -0
  59. package/dist/heart/daemon/doctor.js +837 -0
  60. package/dist/heart/daemon/drift-detection.js +146 -0
  61. package/dist/heart/daemon/health-monitor.js +92 -1
  62. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  63. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  64. package/dist/heart/daemon/http-health-probe.js +80 -0
  65. package/dist/heart/daemon/human-command-screens.js +234 -0
  66. package/dist/heart/daemon/human-readiness.js +114 -0
  67. package/dist/heart/daemon/inner-status.js +102 -0
  68. package/dist/heart/daemon/interactive-repair.js +394 -0
  69. package/dist/heart/daemon/launchd.js +25 -5
  70. package/dist/heart/daemon/log-tailer.js +82 -12
  71. package/dist/heart/daemon/logs-prune.js +110 -0
  72. package/dist/heart/daemon/message-router.js +2 -2
  73. package/dist/heart/daemon/os-cron-deps.js +134 -0
  74. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  75. package/dist/heart/daemon/ouro-entry.js +3 -1
  76. package/dist/heart/daemon/process-manager.js +381 -26
  77. package/dist/heart/daemon/provider-discovery.js +137 -0
  78. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  79. package/dist/heart/daemon/pulse.js +475 -0
  80. package/dist/heart/daemon/readiness-repair.js +365 -0
  81. package/dist/heart/daemon/run-hooks.js +2 -0
  82. package/dist/heart/daemon/runtime-logging.js +67 -16
  83. package/dist/heart/daemon/runtime-metadata.js +73 -0
  84. package/dist/heart/daemon/runtime-mode.js +67 -0
  85. package/dist/heart/daemon/safe-mode.js +161 -0
  86. package/dist/heart/daemon/sense-manager.js +259 -37
  87. package/dist/heart/daemon/session-id-resolver.js +131 -0
  88. package/dist/heart/daemon/skill-management-installer.js +94 -0
  89. package/dist/heart/daemon/socket-client.js +109 -4
  90. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  91. package/dist/heart/daemon/startup-tui.js +330 -0
  92. package/dist/heart/daemon/task-scheduler.js +3 -25
  93. package/dist/heart/daemon/terminal-ui.js +499 -0
  94. package/dist/heart/daemon/thoughts.js +162 -17
  95. package/dist/heart/daemon/up-progress.js +366 -0
  96. package/dist/heart/daemon/vault-items.js +56 -0
  97. package/dist/heart/delegation.js +1 -1
  98. package/dist/heart/habits/habit-migration.js +189 -0
  99. package/dist/heart/habits/habit-parser.js +140 -0
  100. package/dist/heart/habits/habit-runtime-state.js +100 -0
  101. package/dist/heart/habits/habit-scheduler.js +372 -0
  102. package/dist/heart/{daemon → hatch}/hatch-flow.js +52 -117
  103. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  104. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  105. package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
  106. package/dist/heart/identity.js +205 -66
  107. package/dist/heart/kept-notes.js +357 -0
  108. package/dist/heart/kicks.js +1 -1
  109. package/dist/heart/machine-identity.js +161 -0
  110. package/dist/heart/mail-import-discovery.js +353 -0
  111. package/dist/heart/mcp/mcp-server.js +653 -0
  112. package/dist/heart/migrate-config.js +100 -0
  113. package/dist/heart/model-capabilities.js +19 -0
  114. package/dist/heart/outlook/outlook-http-hooks.js +66 -0
  115. package/dist/heart/outlook/outlook-http-response.js +7 -0
  116. package/dist/heart/outlook/outlook-http-routes.js +244 -0
  117. package/dist/heart/outlook/outlook-http-static.js +103 -0
  118. package/dist/heart/outlook/outlook-http-transport.js +116 -0
  119. package/dist/heart/outlook/outlook-http.js +99 -0
  120. package/dist/heart/outlook/outlook-read.js +31 -0
  121. package/dist/heart/outlook/outlook-types.js +27 -0
  122. package/dist/heart/outlook/outlook-view.js +195 -0
  123. package/dist/heart/outlook/readers/agent-machine.js +382 -0
  124. package/dist/heart/outlook/readers/continuity-readers.js +336 -0
  125. package/dist/heart/outlook/readers/mail.js +362 -0
  126. package/dist/heart/outlook/readers/runtime-readers.js +650 -0
  127. package/dist/heart/outlook/readers/sessions.js +232 -0
  128. package/dist/heart/outlook/readers/shared.js +111 -0
  129. package/dist/heart/platform.js +81 -0
  130. package/dist/heart/provider-attempt.js +134 -0
  131. package/dist/heart/provider-binding-resolver.js +255 -0
  132. package/dist/heart/provider-credentials.js +425 -0
  133. package/dist/heart/provider-failover.js +301 -0
  134. package/dist/heart/provider-models.js +81 -0
  135. package/dist/heart/provider-ping.js +262 -0
  136. package/dist/heart/provider-state.js +216 -0
  137. package/dist/heart/provider-visibility.js +188 -0
  138. package/dist/heart/providers/anthropic-token.js +131 -0
  139. package/dist/heart/providers/anthropic.js +139 -52
  140. package/dist/heart/providers/azure.js +97 -13
  141. package/dist/heart/providers/error-classification.js +127 -0
  142. package/dist/heart/providers/github-copilot.js +145 -0
  143. package/dist/heart/providers/minimax-vlm.js +189 -0
  144. package/dist/heart/providers/minimax.js +26 -8
  145. package/dist/heart/providers/openai-codex.js +55 -40
  146. package/dist/heart/runtime-capability-check.js +170 -0
  147. package/dist/heart/runtime-credentials.js +367 -0
  148. package/dist/heart/sense-truth.js +11 -4
  149. package/dist/heart/session-activity.js +43 -22
  150. package/dist/heart/session-events.js +1149 -0
  151. package/dist/heart/session-playback-cli-main.js +5 -0
  152. package/dist/heart/session-playback-cli.js +36 -0
  153. package/dist/heart/session-playback.js +231 -0
  154. package/dist/heart/session-stats-cli-main.js +5 -0
  155. package/dist/heart/session-stats.js +182 -0
  156. package/dist/heart/session-transcript.js +243 -0
  157. package/dist/heart/start-of-turn-packet.js +345 -0
  158. package/dist/heart/streaming.js +44 -27
  159. package/dist/heart/sync-classification.js +176 -0
  160. package/dist/heart/sync.js +449 -0
  161. package/dist/heart/target-resolution.js +9 -5
  162. package/dist/heart/tempo.js +93 -0
  163. package/dist/heart/temporal-view.js +41 -0
  164. package/dist/heart/timeouts.js +101 -0
  165. package/dist/heart/tool-activity-callbacks.js +36 -0
  166. package/dist/heart/tool-description.js +139 -0
  167. package/dist/heart/tool-friction.js +55 -0
  168. package/dist/heart/tool-loop.js +200 -0
  169. package/dist/heart/turn-context.js +381 -0
  170. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +1 -1
  171. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  172. package/dist/heart/versioning/ouro-path-installer.js +425 -0
  173. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  174. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  175. package/dist/heart/{daemon → versioning}/update-checker.js +5 -1
  176. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  177. package/dist/mailroom/attention.js +167 -0
  178. package/dist/mailroom/autonomy.js +209 -0
  179. package/dist/mailroom/blob-store.js +606 -0
  180. package/dist/mailroom/body-cache.js +61 -0
  181. package/dist/mailroom/core.js +672 -0
  182. package/dist/mailroom/entry.js +160 -0
  183. package/dist/mailroom/file-store.js +426 -0
  184. package/dist/mailroom/mbox-import.js +382 -0
  185. package/dist/mailroom/outbound.js +380 -0
  186. package/dist/mailroom/policy.js +263 -0
  187. package/dist/mailroom/reader.js +228 -0
  188. package/dist/mailroom/search-cache.js +182 -0
  189. package/dist/mailroom/search-relevance.js +319 -0
  190. package/dist/mailroom/smtp-ingress.js +176 -0
  191. package/dist/mailroom/source-state.js +176 -0
  192. package/dist/mailroom/thread.js +109 -0
  193. package/dist/mailroom/travel-extract.js +89 -0
  194. package/dist/mind/bundle-manifest.js +7 -1
  195. package/dist/mind/context.js +165 -101
  196. package/dist/mind/diary-integrity.js +60 -0
  197. package/dist/mind/{memory.js → diary.js} +74 -93
  198. package/dist/mind/embedding-provider.js +60 -0
  199. package/dist/mind/file-state.js +179 -0
  200. package/dist/mind/friends/channel.js +30 -0
  201. package/dist/mind/friends/resolver.js +54 -2
  202. package/dist/mind/friends/store-file.js +39 -3
  203. package/dist/mind/friends/types.js +2 -2
  204. package/dist/mind/journal-index.js +161 -0
  205. package/dist/mind/note-search.js +268 -0
  206. package/dist/mind/obligation-steering.js +221 -0
  207. package/dist/mind/pending.js +4 -0
  208. package/dist/mind/prompt-refresh.js +3 -2
  209. package/dist/mind/prompt.js +942 -122
  210. package/dist/mind/provenance-trust.js +26 -0
  211. package/dist/mind/scrutiny.js +173 -0
  212. package/dist/nerves/cli-logging.js +7 -1
  213. package/dist/nerves/coverage/audit-rules.js +15 -6
  214. package/dist/nerves/coverage/audit.js +28 -2
  215. package/dist/nerves/coverage/cli.js +1 -1
  216. package/dist/nerves/coverage/contract.js +5 -5
  217. package/dist/nerves/coverage/file-completeness.js +139 -5
  218. package/dist/nerves/coverage/run-artifacts.js +1 -1
  219. package/dist/nerves/event-buffer.js +111 -0
  220. package/dist/nerves/index.js +224 -4
  221. package/dist/nerves/observation.js +20 -0
  222. package/dist/nerves/redact.js +79 -0
  223. package/dist/nerves/review/cli-main.js +5 -0
  224. package/dist/nerves/review/cli.js +156 -0
  225. package/dist/nerves/review/core.js +152 -0
  226. package/dist/nerves/runtime.js +5 -1
  227. package/dist/outlook-ui/assets/index-BPr5vNuM.css +1 -0
  228. package/dist/outlook-ui/assets/index-Cm51CY9W.js +61 -0
  229. package/dist/outlook-ui/index.html +15 -0
  230. package/dist/repertoire/ado-client.js +15 -56
  231. package/dist/repertoire/ado-semantic.js +11 -10
  232. package/dist/repertoire/api-client.js +97 -0
  233. package/dist/repertoire/bitwarden-store.js +816 -0
  234. package/dist/repertoire/bundle-templates.js +72 -0
  235. package/dist/repertoire/bw-installer.js +180 -0
  236. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  237. package/dist/repertoire/coding/context-pack.js +330 -0
  238. package/dist/repertoire/coding/feedback.js +197 -30
  239. package/dist/repertoire/coding/manager.js +158 -9
  240. package/dist/repertoire/coding/spawner.js +55 -9
  241. package/dist/repertoire/coding/tools.js +170 -7
  242. package/dist/repertoire/commerce-errors.js +109 -0
  243. package/dist/repertoire/commerce-self-test.js +156 -0
  244. package/dist/repertoire/credential-access.js +111 -0
  245. package/dist/repertoire/duffel-client.js +185 -0
  246. package/dist/repertoire/github-client.js +14 -55
  247. package/dist/repertoire/graph-client.js +11 -52
  248. package/dist/repertoire/guardrails.js +396 -0
  249. package/dist/repertoire/mcp-client.js +255 -0
  250. package/dist/repertoire/mcp-manager.js +305 -0
  251. package/dist/repertoire/mcp-tools.js +63 -0
  252. package/dist/repertoire/shell-sessions.js +133 -0
  253. package/dist/repertoire/skills.js +15 -24
  254. package/dist/repertoire/stripe-client.js +131 -0
  255. package/dist/repertoire/tasks/board.js +31 -5
  256. package/dist/repertoire/tasks/fix.js +182 -0
  257. package/dist/repertoire/tasks/index.js +16 -4
  258. package/dist/repertoire/tasks/lifecycle.js +2 -2
  259. package/dist/repertoire/tasks/parser.js +3 -2
  260. package/dist/repertoire/tasks/scanner.js +194 -37
  261. package/dist/repertoire/tasks/transitions.js +16 -78
  262. package/dist/repertoire/tool-results.js +29 -0
  263. package/dist/repertoire/tools-attachments.js +317 -0
  264. package/dist/repertoire/tools-base.js +47 -1075
  265. package/dist/repertoire/tools-bluebubbles.js +1 -0
  266. package/dist/repertoire/tools-bridge.js +142 -0
  267. package/dist/repertoire/tools-bundle.js +984 -0
  268. package/dist/repertoire/tools-config.js +185 -0
  269. package/dist/repertoire/tools-continuity.js +248 -0
  270. package/dist/repertoire/tools-credential.js +381 -0
  271. package/dist/repertoire/tools-files.js +342 -0
  272. package/dist/repertoire/tools-flight.js +224 -0
  273. package/dist/repertoire/tools-flow.js +119 -0
  274. package/dist/repertoire/tools-github.js +1 -7
  275. package/dist/repertoire/tools-mail.js +1477 -0
  276. package/dist/repertoire/tools-notes.js +421 -0
  277. package/dist/repertoire/tools-session.js +750 -0
  278. package/dist/repertoire/tools-shell.js +120 -0
  279. package/dist/repertoire/tools-stripe.js +180 -0
  280. package/dist/repertoire/tools-surface.js +243 -0
  281. package/dist/repertoire/tools-teams.js +9 -39
  282. package/dist/repertoire/tools-travel.js +125 -0
  283. package/dist/repertoire/tools-trip.js +422 -0
  284. package/dist/repertoire/tools-user-profile.js +144 -0
  285. package/dist/repertoire/tools-vault.js +40 -0
  286. package/dist/repertoire/tools.js +108 -100
  287. package/dist/repertoire/travel-api-client.js +360 -0
  288. package/dist/repertoire/user-profile.js +131 -0
  289. package/dist/repertoire/vault-setup.js +246 -0
  290. package/dist/repertoire/vault-unlock.js +561 -0
  291. package/dist/scripts/claude-code-hook.js +41 -0
  292. package/dist/scripts/claude-code-stop-hook.js +47 -0
  293. package/dist/senses/attention-queue.js +116 -0
  294. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  295. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  296. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
  297. package/dist/senses/bluebubbles/entry.js +77 -0
  298. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  299. package/dist/senses/bluebubbles/index.js +1947 -0
  300. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
  301. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  302. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  303. package/dist/senses/bluebubbles/processed-log.js +111 -0
  304. package/dist/senses/bluebubbles/replay.js +129 -0
  305. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +2 -2
  306. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  307. package/dist/senses/cli/bracketed-paste.js +82 -0
  308. package/dist/senses/cli/image-paste.js +287 -0
  309. package/dist/senses/cli/image-ref-navigation.js +75 -0
  310. package/dist/senses/cli/ink-app.js +156 -0
  311. package/dist/senses/cli/inline-diff.js +64 -0
  312. package/dist/senses/cli/input-keys.js +174 -0
  313. package/dist/senses/cli/kill-ring.js +86 -0
  314. package/dist/senses/cli/message-list.js +51 -0
  315. package/dist/senses/cli/ouro-tui.js +607 -0
  316. package/dist/senses/cli/spinner-imperative.js +135 -0
  317. package/dist/senses/cli/spinner.js +101 -0
  318. package/dist/senses/cli/status-line.js +60 -0
  319. package/dist/senses/cli/streaming-markdown.js +526 -0
  320. package/dist/senses/cli/tool-display.js +85 -0
  321. package/dist/senses/cli/tool-render.js +85 -0
  322. package/dist/senses/cli/tui-store.js +240 -0
  323. package/dist/senses/cli/virtual-list.js +35 -0
  324. package/dist/senses/cli-entry.js +60 -8
  325. package/dist/senses/cli-layout.js +187 -0
  326. package/dist/senses/cli.js +520 -209
  327. package/dist/senses/commands.js +66 -3
  328. package/dist/senses/habit-turn-message.js +108 -0
  329. package/dist/senses/inner-dialog-worker.js +175 -21
  330. package/dist/senses/inner-dialog.js +330 -27
  331. package/dist/senses/mail-entry.js +66 -0
  332. package/dist/senses/mail.js +379 -0
  333. package/dist/senses/pipeline.js +569 -182
  334. package/dist/senses/proactive-content-guard.js +51 -0
  335. package/dist/senses/shared-turn.js +248 -0
  336. package/dist/senses/surface-tool.js +68 -0
  337. package/dist/senses/teams-entry.js +60 -8
  338. package/dist/senses/teams.js +387 -98
  339. package/dist/senses/trust-gate.js +100 -5
  340. package/dist/trips/core.js +138 -0
  341. package/dist/trips/store.js +146 -0
  342. package/package.json +37 -7
  343. package/skills/agent-commerce.md +106 -0
  344. package/skills/browser-navigation.md +117 -0
  345. package/skills/commerce-setup-guide.md +116 -0
  346. package/skills/commerce-setup.md +84 -0
  347. package/skills/configure-dev-tools.md +101 -0
  348. package/skills/travel-planning.md +138 -0
  349. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  350. package/dist/heart/daemon/subagent-installer.js +0 -166
  351. package/dist/heart/session-recall.js +0 -116
  352. package/dist/mind/associative-recall.js +0 -209
  353. package/dist/senses/bluebubbles-entry.js +0 -13
  354. package/dist/senses/bluebubbles.js +0 -1177
  355. package/dist/senses/debug-activity.js +0 -148
  356. package/subagents/README.md +0 -86
  357. package/subagents/work-doer.md +0 -237
  358. package/subagents/work-merger.md +0 -618
  359. package/subagents/work-planner.md +0 -390
  360. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  361. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  362. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  363. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  364. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  365. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  366. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  367. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  368. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  369. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  370. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  371. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  372. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  373. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  374. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  375. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ /**
3
+ * Vault setup module — Bitwarden/Vaultwarden account creation.
4
+ *
5
+ * Implements the Bitwarden registration protocol using Node.js crypto:
6
+ * - PBKDF2-SHA256 for master key derivation
7
+ * - HKDF-SHA256 for key stretching
8
+ * - AES-256-CBC for symmetric key protection
9
+ * - RSA-2048 keypair for asymmetric encryption
10
+ *
11
+ * All crypto follows the Bitwarden security whitepaper:
12
+ * https://bitwarden.com/help/bitwarden-security-white-paper/
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.deriveMasterKey = deriveMasterKey;
49
+ exports.deriveMasterPasswordHash = deriveMasterPasswordHash;
50
+ exports.deriveStretchedMasterKey = deriveStretchedMasterKey;
51
+ exports.makeProtectedSymmetricKey = makeProtectedSymmetricKey;
52
+ exports.createVaultAccount = createVaultAccount;
53
+ const crypto = __importStar(require("node:crypto"));
54
+ const runtime_1 = require("../nerves/runtime");
55
+ // ---------------------------------------------------------------------------
56
+ // Crypto primitives
57
+ // ---------------------------------------------------------------------------
58
+ /**
59
+ * Derive the master key from password and email using PBKDF2-SHA256.
60
+ * Email is lowercased and used as the salt per Bitwarden spec.
61
+ */
62
+ function deriveMasterKey(password, email, iterations) {
63
+ return new Promise((resolve, reject) => {
64
+ crypto.pbkdf2(password, email.toLowerCase(), iterations, 32, "sha256", (err, key) => {
65
+ /* v8 ignore next -- defensive: pbkdf2 rejects on invalid input @preserve */
66
+ if (err)
67
+ reject(err);
68
+ else
69
+ resolve(key);
70
+ });
71
+ });
72
+ }
73
+ /**
74
+ * Derive the master password hash: PBKDF2-SHA256(masterKey, password, 1 iteration).
75
+ * This hash is sent to the server for authentication — it never sees the master key.
76
+ */
77
+ function deriveMasterPasswordHash(masterKey, password) {
78
+ return new Promise((resolve, reject) => {
79
+ crypto.pbkdf2(masterKey, password, 1, 32, "sha256", (err, hash) => {
80
+ /* v8 ignore next -- defensive: pbkdf2 rejects on invalid input @preserve */
81
+ if (err)
82
+ reject(err);
83
+ else
84
+ resolve(hash.toString("base64"));
85
+ });
86
+ });
87
+ }
88
+ /**
89
+ * Stretch the master key using HKDF-Expand-only (RFC 5869 §2.3) to produce a 64-byte key.
90
+ * First 32 bytes = encryption key, last 32 bytes = MAC key.
91
+ *
92
+ * CRITICAL: Bitwarden uses HKDF-Expand ONLY (no Extract step).
93
+ * Node.js crypto.hkdfSync() does Extract+Expand which produces DIFFERENT output.
94
+ * Reference: https://github.com/bitwarden/sdk-internal/blob/main/crates/bitwarden-crypto/src/util.rs
95
+ * Bitwarden calls Hkdf::<Sha256>::from_prk(masterKey).expand(info, output) — Expand only.
96
+ */
97
+ function deriveStretchedMasterKey(masterKey) {
98
+ const encKey = hkdfExpandOnly(masterKey, "enc", 32);
99
+ const macKey = hkdfExpandOnly(masterKey, "mac", 32);
100
+ return Buffer.concat([encKey, macKey]);
101
+ }
102
+ /**
103
+ * HKDF-Expand only (RFC 5869 §2.3) — no Extract step.
104
+ * Matches Bitwarden's Hkdf::from_prk(prk).expand(info).
105
+ */
106
+ function hkdfExpandOnly(prk, info, length) {
107
+ const hashLen = 32; // SHA-256
108
+ const n = Math.ceil(length / hashLen);
109
+ let okm = Buffer.alloc(0);
110
+ let t = Buffer.alloc(0);
111
+ for (let i = 1; i <= n; i++) {
112
+ t = crypto.createHmac("sha256", prk)
113
+ .update(Buffer.concat([t, Buffer.from(info, "utf8"), Buffer.from([i])]))
114
+ .digest();
115
+ okm = Buffer.concat([okm, t]);
116
+ }
117
+ return okm.subarray(0, length);
118
+ }
119
+ /**
120
+ * Encrypt data with AES-256-CBC and HMAC-SHA256 MAC.
121
+ * Returns a Bitwarden "type 2" cipherstring: "2.<iv>|<ct>|<mac>"
122
+ */
123
+ function encryptWithStretchedKey(data, stretchedKey) {
124
+ const encKey = stretchedKey.subarray(0, 32);
125
+ const macKey = stretchedKey.subarray(32, 64);
126
+ const iv = crypto.randomBytes(16);
127
+ const cipher = crypto.createCipheriv("aes-256-cbc", encKey, iv);
128
+ const ct = Buffer.concat([cipher.update(data), cipher.final()]);
129
+ // MAC covers iv + ct
130
+ const mac = crypto.createHmac("sha256", macKey)
131
+ .update(iv)
132
+ .update(ct)
133
+ .digest();
134
+ return `2.${iv.toString("base64")}|${ct.toString("base64")}|${mac.toString("base64")}`;
135
+ }
136
+ /**
137
+ * Generate a 64-byte symmetric key, encrypt it with the stretched master key.
138
+ * Returns the "protected symmetric key" cipherstring.
139
+ */
140
+ function makeProtectedSymmetricKey(stretchedMasterKey) {
141
+ const symKey = crypto.randomBytes(64);
142
+ return encryptWithStretchedKey(symKey, stretchedMasterKey);
143
+ }
144
+ /**
145
+ * Generate an RSA-2048 keypair.
146
+ * Returns { publicKey: base64-DER, privateKeyDer: Buffer }.
147
+ */
148
+ function generateRsaKeypair() {
149
+ const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", {
150
+ modulusLength: 2048,
151
+ publicKeyEncoding: { type: "spki", format: "der" },
152
+ privateKeyEncoding: { type: "pkcs8", format: "der" },
153
+ });
154
+ return {
155
+ publicKeyB64: publicKey.toString("base64"),
156
+ privateKeyDer: privateKey,
157
+ };
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // Registration
161
+ // ---------------------------------------------------------------------------
162
+ const KDF_PBKDF2 = 0;
163
+ const KDF_ITERATIONS = 600000;
164
+ const REGISTER_ACCOUNT_PATH = "/identity/accounts/register";
165
+ /**
166
+ * Create a Bitwarden account on the configured Vaultwarden server.
167
+ * Uses the Bitwarden registration API with standard KDF implementation.
168
+ */
169
+ async function createVaultAccount(agentName, serverUrl, email, masterPassword) {
170
+ (0, runtime_1.emitNervesEvent)({
171
+ event: "repertoire.vault_setup_start",
172
+ component: "repertoire",
173
+ message: `creating vault account for ${agentName}`,
174
+ meta: { agentName, serverUrl, email },
175
+ });
176
+ try {
177
+ // Step 1: Derive keys
178
+ const masterKey = await deriveMasterKey(masterPassword, email, KDF_ITERATIONS);
179
+ const masterPasswordHash = await deriveMasterPasswordHash(masterKey, masterPassword);
180
+ const stretchedKey = deriveStretchedMasterKey(masterKey);
181
+ // Step 2: Generate symmetric key (64 bytes = 32 enc + 32 mac), encrypt with stretched key
182
+ const symKey = crypto.randomBytes(64);
183
+ const protectedSymKey = encryptWithStretchedKey(symKey, stretchedKey);
184
+ // Step 3: Generate RSA keypair, encrypt private key with the symmetric key
185
+ const { publicKeyB64, privateKeyDer } = generateRsaKeypair();
186
+ const encryptedPrivateKey = encryptWithStretchedKey(privateKeyDer, symKey);
187
+ // Step 4: POST registration
188
+ const registrationUrl = `${serverUrl}${REGISTER_ACCOUNT_PATH}`;
189
+ const res = await fetch(registrationUrl, {
190
+ method: "POST",
191
+ headers: { "Content-Type": "application/json" },
192
+ body: JSON.stringify({
193
+ name: agentName,
194
+ email,
195
+ masterPasswordHash,
196
+ masterPasswordHint: null,
197
+ key: protectedSymKey,
198
+ kdf: KDF_PBKDF2,
199
+ kdfIterations: KDF_ITERATIONS,
200
+ keys: {
201
+ publicKey: publicKeyB64,
202
+ encryptedPrivateKey,
203
+ },
204
+ }),
205
+ });
206
+ if (!res.ok) {
207
+ let errorDetail;
208
+ try {
209
+ const body = await res.json();
210
+ errorDetail = body.message ?? `HTTP ${res.status} ${res.statusText}`;
211
+ }
212
+ catch {
213
+ errorDetail = `HTTP ${res.status} ${res.statusText}`;
214
+ }
215
+ const endpointAwareError = `${errorDetail} from ${registrationUrl}. Check --server; Ouro expects a Bitwarden/Vaultwarden identity API.`;
216
+ (0, runtime_1.emitNervesEvent)({
217
+ level: "error",
218
+ event: "repertoire.vault_setup_error",
219
+ component: "repertoire",
220
+ message: `vault registration failed: ${endpointAwareError}`,
221
+ meta: { agentName, serverUrl, email, registrationUrl, reason: endpointAwareError },
222
+ });
223
+ return { success: false, email, serverUrl, error: endpointAwareError };
224
+ }
225
+ (0, runtime_1.emitNervesEvent)({
226
+ event: "repertoire.vault_setup_end",
227
+ component: "repertoire",
228
+ message: `vault account created for ${agentName}`,
229
+ meta: { agentName, serverUrl, email },
230
+ });
231
+ return { success: true, email, serverUrl };
232
+ }
233
+ catch (err) {
234
+ const reason = err instanceof Error ? err.message : String(err);
235
+ const registrationUrl = `${serverUrl}${REGISTER_ACCOUNT_PATH}`;
236
+ const endpointAwareError = `cannot reach vault registration endpoint ${registrationUrl}: ${reason}. Check network, DNS/TLS, and --server.`;
237
+ (0, runtime_1.emitNervesEvent)({
238
+ level: "error",
239
+ event: "repertoire.vault_setup_error",
240
+ component: "repertoire",
241
+ message: `vault setup failed: ${endpointAwareError}`,
242
+ meta: { agentName, serverUrl, email, registrationUrl, reason: endpointAwareError },
243
+ });
244
+ return { success: false, email, serverUrl, error: endpointAwareError };
245
+ }
246
+ }