@ouro.bot/cli 0.1.0-alpha.56 → 0.1.0-alpha.560

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 (392) hide show
  1. package/README.md +127 -23
  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/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
  10. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  12. package/changelog.json +3596 -0
  13. package/dist/arc/attention-types.js +8 -0
  14. package/dist/arc/cares.js +140 -0
  15. package/dist/arc/episodes.js +117 -0
  16. package/dist/arc/intentions.js +133 -0
  17. package/dist/arc/json-store.js +117 -0
  18. package/dist/arc/obligations.js +237 -0
  19. package/dist/arc/packets.js +193 -0
  20. package/dist/arc/presence.js +185 -0
  21. package/dist/arc/task-lifecycle.js +65 -0
  22. package/dist/heart/active-work.js +837 -26
  23. package/dist/heart/agent-entry.js +58 -3
  24. package/dist/heart/attachments/image-normalize.js +194 -0
  25. package/dist/heart/attachments/materialize.js +97 -0
  26. package/dist/heart/attachments/originals.js +88 -0
  27. package/dist/heart/attachments/render.js +29 -0
  28. package/dist/heart/attachments/sources/adapter.js +2 -0
  29. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  30. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  31. package/dist/heart/attachments/sources/index.js +16 -0
  32. package/dist/heart/attachments/store.js +103 -0
  33. package/dist/heart/attachments/types.js +93 -0
  34. package/dist/heart/auth/auth-flow.js +479 -0
  35. package/dist/heart/background-operations.js +281 -0
  36. package/dist/heart/bundle-state.js +168 -0
  37. package/dist/heart/commitments.js +111 -0
  38. package/dist/heart/config-registry.js +322 -0
  39. package/dist/heart/config.js +114 -118
  40. package/dist/heart/core.js +913 -246
  41. package/dist/heart/cross-chat-delivery.js +3 -18
  42. package/dist/heart/daemon/agent-config-check.js +419 -0
  43. package/dist/heart/daemon/agent-discovery.js +102 -3
  44. package/dist/heart/daemon/agent-service.js +522 -0
  45. package/dist/heart/daemon/agentic-repair.js +547 -0
  46. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  47. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  48. package/dist/heart/daemon/cadence.js +70 -0
  49. package/dist/heart/daemon/cli-defaults.js +776 -0
  50. package/dist/heart/daemon/cli-exec.js +7457 -0
  51. package/dist/heart/daemon/cli-help.js +498 -0
  52. package/dist/heart/daemon/cli-parse.js +1592 -0
  53. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  54. package/dist/heart/daemon/cli-render.js +763 -0
  55. package/dist/heart/daemon/cli-types.js +8 -0
  56. package/dist/heart/daemon/connect-bay.js +323 -0
  57. package/dist/heart/daemon/daemon-cli.js +29 -1698
  58. package/dist/heart/daemon/daemon-entry.js +387 -2
  59. package/dist/heart/daemon/daemon-health.js +176 -0
  60. package/dist/heart/daemon/daemon-rollup.js +57 -0
  61. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  62. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  63. package/dist/heart/daemon/daemon.js +796 -71
  64. package/dist/heart/daemon/dns-workflow.js +394 -0
  65. package/dist/heart/daemon/doctor-types.js +8 -0
  66. package/dist/heart/daemon/doctor.js +826 -0
  67. package/dist/heart/daemon/health-monitor.js +122 -1
  68. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  69. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  70. package/dist/heart/daemon/http-health-probe.js +80 -0
  71. package/dist/heart/daemon/human-command-screens.js +234 -0
  72. package/dist/heart/daemon/human-readiness.js +114 -0
  73. package/dist/heart/daemon/inner-status.js +89 -0
  74. package/dist/heart/daemon/interactive-repair.js +394 -0
  75. package/dist/heart/daemon/launchd.js +37 -8
  76. package/dist/heart/daemon/log-tailer.js +82 -12
  77. package/dist/heart/daemon/logs-prune.js +110 -0
  78. package/dist/heart/daemon/mcp-canary.js +297 -0
  79. package/dist/heart/daemon/message-router.js +2 -2
  80. package/dist/heart/daemon/os-cron-deps.js +135 -0
  81. package/dist/heart/daemon/os-cron.js +14 -12
  82. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  83. package/dist/heart/daemon/ouro-entry.js +3 -1
  84. package/dist/heart/daemon/process-manager.js +375 -33
  85. package/dist/heart/daemon/provider-discovery.js +137 -0
  86. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  87. package/dist/heart/daemon/pulse.js +475 -0
  88. package/dist/heart/daemon/readiness-repair.js +365 -0
  89. package/dist/heart/daemon/run-hooks.js +2 -0
  90. package/dist/heart/daemon/runtime-logging.js +67 -16
  91. package/dist/heart/daemon/runtime-metadata.js +3 -31
  92. package/dist/heart/daemon/safe-mode.js +161 -0
  93. package/dist/heart/daemon/sense-manager.js +389 -38
  94. package/dist/heart/daemon/session-id-resolver.js +131 -0
  95. package/dist/heart/daemon/skill-management-installer.js +94 -0
  96. package/dist/heart/daemon/socket-client.js +158 -11
  97. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  98. package/dist/heart/daemon/startup-tui.js +330 -0
  99. package/dist/heart/daemon/task-scheduler.js +3 -25
  100. package/dist/heart/daemon/terminal-ui.js +499 -0
  101. package/dist/heart/daemon/thoughts.js +162 -17
  102. package/dist/heart/daemon/up-progress.js +366 -0
  103. package/dist/heart/daemon/vault-items.js +56 -0
  104. package/dist/heart/delegation.js +1 -1
  105. package/dist/heart/habits/habit-migration.js +189 -0
  106. package/dist/heart/habits/habit-parser.js +140 -0
  107. package/dist/heart/habits/habit-runtime-state.js +100 -0
  108. package/dist/heart/habits/habit-scheduler.js +372 -0
  109. package/dist/heart/{daemon → hatch}/hatch-flow.js +32 -56
  110. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  111. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  112. package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
  113. package/dist/heart/identity.js +203 -57
  114. package/dist/heart/kept-notes.js +357 -0
  115. package/dist/heart/kicks.js +1 -1
  116. package/dist/heart/machine-identity.js +161 -0
  117. package/dist/heart/mail-import-discovery.js +353 -0
  118. package/dist/heart/mailbox/mailbox-http-hooks.js +66 -0
  119. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  120. package/dist/heart/mailbox/mailbox-http-routes.js +246 -0
  121. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  122. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  123. package/dist/heart/mailbox/mailbox-http.js +99 -0
  124. package/dist/heart/mailbox/mailbox-read.js +31 -0
  125. package/dist/heart/mailbox/mailbox-types.js +27 -0
  126. package/dist/heart/mailbox/mailbox-view.js +195 -0
  127. package/dist/heart/mailbox/readers/agent-machine.js +382 -0
  128. package/dist/heart/mailbox/readers/continuity-readers.js +338 -0
  129. package/dist/heart/mailbox/readers/mail.js +362 -0
  130. package/dist/heart/mailbox/readers/runtime-readers.js +651 -0
  131. package/dist/heart/mailbox/readers/sessions.js +232 -0
  132. package/dist/heart/mailbox/readers/shared.js +111 -0
  133. package/dist/heart/mcp/mcp-server.js +683 -0
  134. package/dist/heart/migrate-config.js +100 -0
  135. package/dist/heart/model-capabilities.js +19 -0
  136. package/dist/heart/platform.js +81 -0
  137. package/dist/heart/provider-attempt.js +134 -0
  138. package/dist/heart/provider-binding-resolver.js +267 -0
  139. package/dist/heart/provider-credentials.js +425 -0
  140. package/dist/heart/provider-failover.js +301 -0
  141. package/dist/heart/provider-models.js +81 -0
  142. package/dist/heart/provider-ping.js +262 -0
  143. package/dist/heart/provider-readiness-cache.js +40 -0
  144. package/dist/heart/provider-visibility.js +188 -0
  145. package/dist/heart/providers/anthropic-token.js +131 -0
  146. package/dist/heart/providers/anthropic.js +139 -52
  147. package/dist/heart/providers/azure.js +97 -13
  148. package/dist/heart/providers/error-classification.js +127 -0
  149. package/dist/heart/providers/github-copilot.js +145 -0
  150. package/dist/heart/providers/minimax-vlm.js +189 -0
  151. package/dist/heart/providers/minimax.js +26 -8
  152. package/dist/heart/providers/openai-codex.js +55 -40
  153. package/dist/heart/runtime-capability-check.js +170 -0
  154. package/dist/heart/runtime-credentials.js +367 -0
  155. package/dist/heart/runtime-cwd.js +87 -0
  156. package/dist/heart/sense-truth.js +13 -4
  157. package/dist/heart/session-activity.js +43 -22
  158. package/dist/heart/session-events.js +1149 -0
  159. package/dist/heart/session-playback-cli-main.js +5 -0
  160. package/dist/heart/session-playback-cli.js +36 -0
  161. package/dist/heart/session-playback.js +231 -0
  162. package/dist/heart/session-stats-cli-main.js +5 -0
  163. package/dist/heart/session-stats.js +182 -0
  164. package/dist/heart/session-transcript.js +243 -0
  165. package/dist/heart/start-of-turn-packet.js +345 -0
  166. package/dist/heart/streaming.js +44 -27
  167. package/dist/heart/sync-classification.js +176 -0
  168. package/dist/heart/sync.js +449 -0
  169. package/dist/heart/target-resolution.js +9 -5
  170. package/dist/heart/tempo.js +93 -0
  171. package/dist/heart/temporal-view.js +41 -0
  172. package/dist/heart/timeouts.js +101 -0
  173. package/dist/heart/tool-activity-callbacks.js +59 -0
  174. package/dist/heart/tool-description.js +139 -0
  175. package/dist/heart/tool-friction.js +55 -0
  176. package/dist/heart/tool-loop.js +200 -0
  177. package/dist/heart/turn-context.js +389 -0
  178. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  179. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  180. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  181. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  182. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  183. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  184. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  185. package/dist/mailbox-ui/assets/index-B-461hes.js +61 -0
  186. package/dist/mailbox-ui/assets/index-BPr5vNuM.css +1 -0
  187. package/dist/mailbox-ui/index.html +15 -0
  188. package/dist/mailroom/attention.js +167 -0
  189. package/dist/mailroom/autonomy.js +209 -0
  190. package/dist/mailroom/blob-store.js +674 -0
  191. package/dist/mailroom/body-cache.js +61 -0
  192. package/dist/mailroom/core.js +720 -0
  193. package/dist/mailroom/entry.js +160 -0
  194. package/dist/mailroom/file-store.js +430 -0
  195. package/dist/mailroom/mbox-import.js +383 -0
  196. package/dist/mailroom/outbound.js +380 -0
  197. package/dist/mailroom/policy.js +263 -0
  198. package/dist/mailroom/reader.js +233 -0
  199. package/dist/mailroom/search-cache.js +256 -0
  200. package/dist/mailroom/search-relevance.js +319 -0
  201. package/dist/mailroom/smtp-ingress.js +176 -0
  202. package/dist/mailroom/source-state.js +176 -0
  203. package/dist/mailroom/thread.js +109 -0
  204. package/dist/mailroom/travel-extract.js +89 -0
  205. package/dist/mind/bundle-manifest.js +7 -1
  206. package/dist/mind/context.js +165 -101
  207. package/dist/mind/diary-integrity.js +60 -0
  208. package/dist/mind/{memory.js → diary.js} +62 -75
  209. package/dist/mind/embedding-provider.js +60 -0
  210. package/dist/mind/file-state.js +179 -0
  211. package/dist/mind/friends/channel.js +39 -0
  212. package/dist/mind/friends/resolver.js +54 -2
  213. package/dist/mind/friends/store-file.js +39 -3
  214. package/dist/mind/friends/types.js +2 -2
  215. package/dist/mind/journal-index.js +161 -0
  216. package/dist/mind/note-search.js +268 -0
  217. package/dist/mind/obligation-steering.js +221 -0
  218. package/dist/mind/pending.js +4 -0
  219. package/dist/mind/prompt-refresh.js +3 -2
  220. package/dist/mind/prompt.js +1011 -123
  221. package/dist/mind/provenance-trust.js +26 -0
  222. package/dist/mind/scrutiny.js +173 -0
  223. package/dist/nerves/cli-logging.js +7 -1
  224. package/dist/nerves/coverage/audit-rules.js +15 -6
  225. package/dist/nerves/coverage/audit.js +28 -2
  226. package/dist/nerves/coverage/cli.js +1 -1
  227. package/dist/nerves/coverage/contract.js +5 -5
  228. package/dist/nerves/coverage/file-completeness.js +129 -5
  229. package/dist/nerves/coverage/run-artifacts.js +1 -1
  230. package/dist/nerves/event-buffer.js +111 -0
  231. package/dist/nerves/index.js +224 -4
  232. package/dist/nerves/observation.js +20 -0
  233. package/dist/nerves/redact.js +79 -0
  234. package/dist/nerves/review/cli-main.js +5 -0
  235. package/dist/nerves/review/cli.js +156 -0
  236. package/dist/nerves/review/core.js +152 -0
  237. package/dist/nerves/runtime.js +5 -1
  238. package/dist/repertoire/ado-client.js +15 -56
  239. package/dist/repertoire/ado-semantic.js +11 -10
  240. package/dist/repertoire/api-client.js +97 -0
  241. package/dist/repertoire/bitwarden-store.js +963 -0
  242. package/dist/repertoire/bundle-templates.js +72 -0
  243. package/dist/repertoire/bw-installer.js +180 -0
  244. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  245. package/dist/repertoire/coding/context-pack.js +330 -0
  246. package/dist/repertoire/coding/feedback.js +197 -30
  247. package/dist/repertoire/coding/manager.js +158 -9
  248. package/dist/repertoire/coding/spawner.js +55 -9
  249. package/dist/repertoire/coding/tools.js +170 -7
  250. package/dist/repertoire/commerce-errors.js +109 -0
  251. package/dist/repertoire/commerce-self-test.js +156 -0
  252. package/dist/repertoire/credential-access.js +178 -0
  253. package/dist/repertoire/duffel-client.js +185 -0
  254. package/dist/repertoire/github-client.js +14 -55
  255. package/dist/repertoire/graph-client.js +11 -52
  256. package/dist/repertoire/guardrails.js +396 -0
  257. package/dist/repertoire/mcp-client.js +295 -0
  258. package/dist/repertoire/mcp-manager.js +362 -0
  259. package/dist/repertoire/mcp-tools.js +63 -0
  260. package/dist/repertoire/shell-sessions.js +133 -0
  261. package/dist/repertoire/skills.js +15 -24
  262. package/dist/repertoire/stripe-client.js +131 -0
  263. package/dist/repertoire/tasks/board.js +31 -5
  264. package/dist/repertoire/tasks/fix.js +182 -0
  265. package/dist/repertoire/tasks/index.js +16 -4
  266. package/dist/repertoire/tasks/lifecycle.js +2 -2
  267. package/dist/repertoire/tasks/parser.js +3 -2
  268. package/dist/repertoire/tasks/scanner.js +194 -37
  269. package/dist/repertoire/tasks/transitions.js +16 -78
  270. package/dist/repertoire/tool-results.js +29 -0
  271. package/dist/repertoire/tools-attachments.js +317 -0
  272. package/dist/repertoire/tools-base.js +47 -1075
  273. package/dist/repertoire/tools-bluebubbles.js +1 -0
  274. package/dist/repertoire/tools-bridge.js +142 -0
  275. package/dist/repertoire/tools-bundle.js +984 -0
  276. package/dist/repertoire/tools-config.js +185 -0
  277. package/dist/repertoire/tools-continuity.js +248 -0
  278. package/dist/repertoire/tools-credential.js +381 -0
  279. package/dist/repertoire/tools-files.js +342 -0
  280. package/dist/repertoire/tools-flight.js +224 -0
  281. package/dist/repertoire/tools-flow.js +119 -0
  282. package/dist/repertoire/tools-github.js +1 -7
  283. package/dist/repertoire/tools-mail.js +1857 -0
  284. package/dist/repertoire/tools-notes.js +421 -0
  285. package/dist/repertoire/tools-session.js +750 -0
  286. package/dist/repertoire/tools-shell.js +120 -0
  287. package/dist/repertoire/tools-stripe.js +180 -0
  288. package/dist/repertoire/tools-surface.js +243 -0
  289. package/dist/repertoire/tools-teams.js +9 -39
  290. package/dist/repertoire/tools-travel.js +125 -0
  291. package/dist/repertoire/tools-trip.js +604 -0
  292. package/dist/repertoire/tools-user-profile.js +144 -0
  293. package/dist/repertoire/tools-vault.js +40 -0
  294. package/dist/repertoire/tools.js +108 -100
  295. package/dist/repertoire/travel-api-client.js +360 -0
  296. package/dist/repertoire/user-profile.js +131 -0
  297. package/dist/repertoire/vault-setup.js +246 -0
  298. package/dist/repertoire/vault-unlock.js +594 -0
  299. package/dist/scripts/claude-code-hook.js +41 -0
  300. package/dist/scripts/claude-code-stop-hook.js +47 -0
  301. package/dist/senses/attention-queue.js +116 -0
  302. package/dist/senses/bluebubbles/active-turns.js +216 -0
  303. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  304. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  305. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
  306. package/dist/senses/bluebubbles/entry.js +77 -0
  307. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  308. package/dist/senses/bluebubbles/index.js +2305 -0
  309. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
  310. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  311. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  312. package/dist/senses/bluebubbles/processed-log.js +133 -0
  313. package/dist/senses/bluebubbles/replay.js +137 -0
  314. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  315. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  316. package/dist/senses/cli/bracketed-paste.js +82 -0
  317. package/dist/senses/cli/image-paste.js +287 -0
  318. package/dist/senses/cli/image-ref-navigation.js +75 -0
  319. package/dist/senses/cli/ink-app.js +156 -0
  320. package/dist/senses/cli/inline-diff.js +64 -0
  321. package/dist/senses/cli/input-keys.js +174 -0
  322. package/dist/senses/cli/kill-ring.js +86 -0
  323. package/dist/senses/cli/message-list.js +51 -0
  324. package/dist/senses/cli/ouro-tui.js +607 -0
  325. package/dist/senses/cli/spinner-imperative.js +135 -0
  326. package/dist/senses/cli/spinner.js +101 -0
  327. package/dist/senses/cli/status-line.js +60 -0
  328. package/dist/senses/cli/streaming-markdown.js +526 -0
  329. package/dist/senses/cli/tool-display.js +85 -0
  330. package/dist/senses/cli/tool-render.js +85 -0
  331. package/dist/senses/cli/tui-store.js +240 -0
  332. package/dist/senses/cli/virtual-list.js +35 -0
  333. package/dist/senses/cli-entry.js +60 -8
  334. package/dist/senses/cli-layout.js +187 -0
  335. package/dist/senses/cli.js +520 -209
  336. package/dist/senses/commands.js +66 -3
  337. package/dist/senses/habit-turn-message.js +108 -0
  338. package/dist/senses/inner-dialog-worker.js +175 -21
  339. package/dist/senses/inner-dialog.js +330 -27
  340. package/dist/senses/mail-entry.js +66 -0
  341. package/dist/senses/mail.js +379 -0
  342. package/dist/senses/pipeline.js +549 -181
  343. package/dist/senses/proactive-content-guard.js +51 -0
  344. package/dist/senses/shared-turn.js +248 -0
  345. package/dist/senses/surface-tool.js +68 -0
  346. package/dist/senses/teams-entry.js +60 -8
  347. package/dist/senses/teams.js +387 -98
  348. package/dist/senses/trust-gate.js +100 -5
  349. package/dist/senses/voice/elevenlabs.js +125 -0
  350. package/dist/senses/voice/index.js +22 -0
  351. package/dist/senses/voice/transcript.js +70 -0
  352. package/dist/senses/voice/turn.js +85 -0
  353. package/dist/senses/voice/types.js +2 -0
  354. package/dist/senses/voice/whisper.js +133 -0
  355. package/dist/senses/voice-entry.js +80 -0
  356. package/dist/trips/core.js +138 -0
  357. package/dist/trips/store.js +146 -0
  358. package/package.json +38 -7
  359. package/skills/agent-commerce.md +106 -0
  360. package/skills/browser-navigation.md +117 -0
  361. package/skills/commerce-setup-guide.md +116 -0
  362. package/skills/commerce-setup.md +84 -0
  363. package/skills/configure-dev-tools.md +101 -0
  364. package/skills/travel-planning.md +138 -0
  365. package/dist/heart/daemon/auth-flow.js +0 -351
  366. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  367. package/dist/heart/daemon/subagent-installer.js +0 -166
  368. package/dist/heart/session-recall.js +0 -116
  369. package/dist/mind/associative-recall.js +0 -209
  370. package/dist/senses/bluebubbles-entry.js +0 -13
  371. package/dist/senses/bluebubbles.js +0 -1177
  372. package/dist/senses/debug-activity.js +0 -148
  373. package/subagents/README.md +0 -86
  374. package/subagents/work-doer.md +0 -237
  375. package/subagents/work-merger.md +0 -618
  376. package/subagents/work-planner.md +0 -390
  377. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  378. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  379. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  380. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  381. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  382. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  383. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  384. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  385. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  386. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  387. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  388. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  389. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  390. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  391. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  392. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,425 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PROVIDER_CREDENTIAL_POOL_NOT_LOADED_ERROR = void 0;
37
+ exports.splitProviderCredentialFields = splitProviderCredentialFields;
38
+ exports.providerCredentialsVaultPath = providerCredentialsVaultPath;
39
+ exports.providerCredentialItemName = providerCredentialItemName;
40
+ exports.providerCredentialMachineHomeDir = providerCredentialMachineHomeDir;
41
+ exports.isProviderCredentialPoolNotLoaded = isProviderCredentialPoolNotLoaded;
42
+ exports.readProviderCredentialPool = readProviderCredentialPool;
43
+ exports.refreshProviderCredentialPool = refreshProviderCredentialPool;
44
+ exports.createProviderCredentialRecord = createProviderCredentialRecord;
45
+ exports.cacheProviderCredentialRecords = cacheProviderCredentialRecords;
46
+ exports.readCachedProviderCredentialRecord = readCachedProviderCredentialRecord;
47
+ exports.readProviderCredentialRecord = readProviderCredentialRecord;
48
+ exports.upsertProviderCredential = upsertProviderCredential;
49
+ exports.redactProviderCredentialPool = redactProviderCredentialPool;
50
+ exports.summarizeProviderCredentialPool = summarizeProviderCredentialPool;
51
+ exports.resetProviderCredentialCache = resetProviderCredentialCache;
52
+ const crypto = __importStar(require("node:crypto"));
53
+ const os = __importStar(require("node:os"));
54
+ const runtime_1 = require("../nerves/runtime");
55
+ const credential_access_1 = require("../repertoire/credential-access");
56
+ const VALID_PROVIDERS = ["azure", "minimax", "anthropic", "openai-codex", "github-copilot"];
57
+ const VALID_PROVENANCE_SOURCES = ["auth-flow", "manual"];
58
+ const VAULT_ITEM_PREFIX = "providers/";
59
+ exports.PROVIDER_CREDENTIAL_POOL_NOT_LOADED_ERROR = "provider credentials have not been loaded from vault";
60
+ const PROVIDER_FIELD_SPLITS = {
61
+ anthropic: {
62
+ credentials: ["setupToken", "refreshToken", "expiresAt"],
63
+ config: [],
64
+ },
65
+ "openai-codex": {
66
+ credentials: ["oauthAccessToken", "refreshToken", "expiresAt"],
67
+ config: [],
68
+ },
69
+ azure: {
70
+ credentials: ["apiKey"],
71
+ config: ["endpoint", "deployment", "apiVersion", "managedIdentityClientId"],
72
+ },
73
+ minimax: {
74
+ credentials: ["apiKey"],
75
+ config: [],
76
+ },
77
+ "github-copilot": {
78
+ credentials: ["githubToken"],
79
+ config: ["baseUrl"],
80
+ },
81
+ };
82
+ let cachedPools = new Map();
83
+ function isRecord(value) {
84
+ return !!value && typeof value === "object" && !Array.isArray(value);
85
+ }
86
+ function isAgentProvider(value) {
87
+ return VALID_PROVIDERS.includes(value);
88
+ }
89
+ function isProvenanceSource(value) {
90
+ return typeof value === "string" && VALID_PROVENANCE_SOURCES.includes(value);
91
+ }
92
+ function isCredentialValue(value) {
93
+ return typeof value === "string" || typeof value === "number";
94
+ }
95
+ function isPresentCredentialValue(value) {
96
+ if (!isCredentialValue(value))
97
+ return false;
98
+ if (typeof value === "string")
99
+ return value.trim().length > 0;
100
+ return Number.isFinite(value) && value !== 0;
101
+ }
102
+ function isMissingProviderCredentialError(message, itemName) {
103
+ const normalized = message.toLowerCase();
104
+ return normalized.includes(itemName.toLowerCase())
105
+ && (normalized.includes("no credential found") || normalized.includes("missing") || normalized.includes("not found"));
106
+ }
107
+ function copyKnownFields(source, fields) {
108
+ const result = {};
109
+ for (const field of fields) {
110
+ const value = source[field];
111
+ if (isPresentCredentialValue(value)) {
112
+ result[field] = value;
113
+ }
114
+ }
115
+ return result;
116
+ }
117
+ function splitProviderCredentialFields(provider, rawConfig) {
118
+ const fields = PROVIDER_FIELD_SPLITS[provider];
119
+ return {
120
+ credentials: copyKnownFields(rawConfig, fields.credentials),
121
+ config: copyKnownFields(rawConfig, fields.config),
122
+ };
123
+ }
124
+ function providerCredentialsVaultPath(agentName) {
125
+ return `vault:${agentName}:${VAULT_ITEM_PREFIX}*`;
126
+ }
127
+ function providerCredentialItemName(provider) {
128
+ return `${VAULT_ITEM_PREFIX}${provider}`;
129
+ }
130
+ function providerCredentialMachineHomeDir(homeDir) {
131
+ return homeDir ?? os.homedir();
132
+ }
133
+ function stableJson(value) {
134
+ if (Array.isArray(value))
135
+ return `[${value.map(stableJson).join(",")}]`;
136
+ if (isRecord(value)) {
137
+ return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`).join(",")}}`;
138
+ }
139
+ return JSON.stringify(value);
140
+ }
141
+ function makeRevision(payload) {
142
+ const hash = crypto
143
+ .createHash("sha256")
144
+ .update(stableJson({
145
+ provider: payload.provider,
146
+ credentials: payload.credentials,
147
+ config: payload.config,
148
+ provenance: payload.provenance,
149
+ updatedAt: payload.updatedAt,
150
+ }))
151
+ .digest("hex")
152
+ .slice(0, 16);
153
+ return `vault_${hash}`;
154
+ }
155
+ function validateProviderCredentialPayload(value, expectedProvider) {
156
+ if (!isRecord(value))
157
+ throw new Error("provider credential payload must be an object");
158
+ if (value.schemaVersion !== 1)
159
+ throw new Error("provider credential payload schemaVersion must be 1");
160
+ if (value.kind !== "provider-credential")
161
+ throw new Error("provider credential payload kind must be provider-credential");
162
+ if (typeof value.provider !== "string" || !isAgentProvider(value.provider)) {
163
+ throw new Error("provider credential payload provider must be valid");
164
+ }
165
+ if (expectedProvider && value.provider !== expectedProvider) {
166
+ throw new Error(`provider credential payload provider must be ${expectedProvider}`);
167
+ }
168
+ if (typeof value.updatedAt !== "string" || value.updatedAt.length === 0) {
169
+ throw new Error("provider credential payload updatedAt must be non-empty");
170
+ }
171
+ if (!isRecord(value.credentials))
172
+ throw new Error("provider credential payload credentials must be an object");
173
+ if (!isRecord(value.config))
174
+ throw new Error("provider credential payload config must be an object");
175
+ for (const [field, fieldValue] of Object.entries(value.credentials)) {
176
+ if (!isCredentialValue(fieldValue))
177
+ throw new Error(`credentials.${field} must be a string or number`);
178
+ }
179
+ for (const [field, fieldValue] of Object.entries(value.config)) {
180
+ if (!isCredentialValue(fieldValue))
181
+ throw new Error(`config.${field} must be a string or number`);
182
+ }
183
+ if (!isRecord(value.provenance))
184
+ throw new Error("provider credential payload provenance must be an object");
185
+ if (!isProvenanceSource(value.provenance.source)) {
186
+ throw new Error("provider credential payload provenance.source must be auth-flow or manual");
187
+ }
188
+ if (typeof value.provenance.updatedAt !== "string" || value.provenance.updatedAt.length === 0) {
189
+ throw new Error("provider credential payload provenance.updatedAt must be non-empty");
190
+ }
191
+ return value;
192
+ }
193
+ function recordFromPayload(payload) {
194
+ return {
195
+ provider: payload.provider,
196
+ revision: makeRevision(payload),
197
+ updatedAt: payload.updatedAt,
198
+ credentials: { ...payload.credentials },
199
+ config: { ...payload.config },
200
+ provenance: { ...payload.provenance },
201
+ };
202
+ }
203
+ function missingPool(agentName, error = exports.PROVIDER_CREDENTIAL_POOL_NOT_LOADED_ERROR) {
204
+ return {
205
+ ok: false,
206
+ reason: "missing",
207
+ poolPath: providerCredentialsVaultPath(agentName),
208
+ error,
209
+ };
210
+ }
211
+ function isProviderCredentialPoolNotLoaded(result) {
212
+ return !result.ok
213
+ && result.reason === "missing"
214
+ && result.error === exports.PROVIDER_CREDENTIAL_POOL_NOT_LOADED_ERROR;
215
+ }
216
+ function cacheResult(agentName, result) {
217
+ cachedPools.set(agentName, result);
218
+ return result;
219
+ }
220
+ function selectedProviders(providers) {
221
+ if (!providers || providers.length === 0)
222
+ return [...VALID_PROVIDERS];
223
+ return [...new Set(providers)];
224
+ }
225
+ function resultForProvider(poolResult, provider) {
226
+ if (!poolResult.ok)
227
+ return poolResult;
228
+ const record = poolResult.pool.providers[provider];
229
+ if (!record) {
230
+ return {
231
+ ok: false,
232
+ reason: "missing",
233
+ poolPath: poolResult.poolPath,
234
+ error: `${provider} credentials are missing from ${poolResult.poolPath}`,
235
+ };
236
+ }
237
+ return { ok: true, poolPath: poolResult.poolPath, record };
238
+ }
239
+ function readProviderCredentialPool(agentName) {
240
+ return cachedPools.get(agentName) ?? missingPool(agentName);
241
+ }
242
+ async function refreshProviderCredentialPool(agentName, options = {}) {
243
+ const providersToRead = selectedProviders(options.providers);
244
+ try {
245
+ const store = (0, credential_access_1.getCredentialStore)(agentName);
246
+ options.onProgress?.(`reading vault items for ${agentName}...`);
247
+ const providers = {};
248
+ let updatedAt = new Date(0).toISOString();
249
+ for (const provider of providersToRead) {
250
+ const itemName = providerCredentialItemName(provider);
251
+ options.onProgress?.(`reading ${provider} credentials...`);
252
+ let raw;
253
+ try {
254
+ raw = await store.getRawSecret(itemName, "password");
255
+ }
256
+ catch (error) {
257
+ const message = error instanceof Error ? error.message : String(error);
258
+ if (isMissingProviderCredentialError(message, itemName))
259
+ continue;
260
+ throw error;
261
+ }
262
+ const payload = validateProviderCredentialPayload(JSON.parse(raw), provider);
263
+ const record = recordFromPayload(payload);
264
+ providers[provider] = record;
265
+ if (record.updatedAt > updatedAt)
266
+ updatedAt = record.updatedAt;
267
+ }
268
+ options.onProgress?.("parsing provider credentials...");
269
+ const pool = {
270
+ schemaVersion: 1,
271
+ updatedAt,
272
+ providers,
273
+ };
274
+ (0, runtime_1.emitNervesEvent)({
275
+ component: "config/identity",
276
+ event: "config.provider_credentials_loaded",
277
+ message: "loaded provider credentials from vault",
278
+ meta: {
279
+ agentName,
280
+ providerCount: Object.keys(providers).length,
281
+ requestedProviderCount: providersToRead.length,
282
+ cacheSkipped: options.skipCache === true,
283
+ },
284
+ });
285
+ const result = {
286
+ ok: true,
287
+ poolPath: providerCredentialsVaultPath(agentName),
288
+ pool,
289
+ };
290
+ return options.skipCache ? result : cacheResult(agentName, result);
291
+ }
292
+ catch (error) {
293
+ const cached = cachedPools.get(agentName);
294
+ const result = {
295
+ ok: false,
296
+ reason: "unavailable",
297
+ poolPath: providerCredentialsVaultPath(agentName),
298
+ error: error instanceof Error ? error.message : String(error),
299
+ };
300
+ (0, runtime_1.emitNervesEvent)({
301
+ level: "error",
302
+ component: "config/identity",
303
+ event: "config.provider_credentials_unavailable",
304
+ message: "provider credentials unavailable",
305
+ meta: { agentName, reason: result.reason, poolPath: result.poolPath },
306
+ });
307
+ if (options.preserveCachedOnFailure && cached?.ok)
308
+ return cached;
309
+ return options.skipCache ? result : cacheResult(agentName, result);
310
+ }
311
+ }
312
+ function createProviderCredentialRecord(input) {
313
+ const updatedAt = (input.now ?? new Date()).toISOString();
314
+ const payload = {
315
+ schemaVersion: 1,
316
+ kind: "provider-credential",
317
+ provider: input.provider,
318
+ updatedAt,
319
+ credentials: { ...input.credentials },
320
+ config: { ...input.config },
321
+ provenance: {
322
+ source: input.provenance.source,
323
+ updatedAt,
324
+ },
325
+ };
326
+ return recordFromPayload(payload);
327
+ }
328
+ function cacheProviderCredentialRecords(agentName, records, now = new Date()) {
329
+ const providers = {};
330
+ let updatedAt = now.toISOString();
331
+ for (const record of records) {
332
+ providers[record.provider] = record;
333
+ if (record.updatedAt > updatedAt)
334
+ updatedAt = record.updatedAt;
335
+ }
336
+ const pool = {
337
+ schemaVersion: 1,
338
+ updatedAt,
339
+ providers,
340
+ };
341
+ return cacheResult(agentName, { ok: true, poolPath: providerCredentialsVaultPath(agentName), pool });
342
+ }
343
+ function readCachedProviderCredentialRecord(agentName, provider) {
344
+ return resultForProvider(readProviderCredentialPool(agentName), provider);
345
+ }
346
+ async function readProviderCredentialRecord(agentName, provider, options = {}) {
347
+ const cached = readCachedProviderCredentialRecord(agentName, provider);
348
+ if (cached.ok || options.refreshIfMissing === false)
349
+ return cached;
350
+ return resultForProvider(await refreshProviderCredentialPool(agentName, { providers: [provider] }), provider);
351
+ }
352
+ async function upsertProviderCredential(input) {
353
+ const updatedAt = (input.now ?? new Date()).toISOString();
354
+ const payload = {
355
+ schemaVersion: 1,
356
+ kind: "provider-credential",
357
+ provider: input.provider,
358
+ updatedAt,
359
+ credentials: { ...input.credentials },
360
+ config: { ...input.config },
361
+ provenance: {
362
+ source: input.provenance.source,
363
+ updatedAt,
364
+ },
365
+ };
366
+ const record = recordFromPayload(payload);
367
+ input.onProgress?.(`opening ${input.agentName}'s vault session...`);
368
+ const store = (0, credential_access_1.getCredentialStore)(input.agentName);
369
+ input.onProgress?.(`storing ${input.provider} credentials in ${input.agentName}'s vault...`);
370
+ await store.store(providerCredentialItemName(input.provider), {
371
+ username: input.provider,
372
+ password: JSON.stringify(payload),
373
+ notes: "Ouro provider credentials. The vault item password is a versioned JSON payload.",
374
+ });
375
+ input.onProgress?.(`refreshing in-memory provider credential pool from ${input.agentName}'s vault...`);
376
+ const refreshResult = await refreshProviderCredentialPool(input.agentName, {
377
+ providers: [input.provider],
378
+ onProgress: input.onProgress,
379
+ });
380
+ if (!refreshResult.ok) {
381
+ throw new Error(`credential stored in vault, but the in-memory provider credential pool could not be refreshed: ${refreshResult.error}. ` +
382
+ `Run 'ouro provider refresh --agent ${input.agentName}' after fixing vault access, then run 'ouro auth verify --agent ${input.agentName}'.`);
383
+ }
384
+ (0, runtime_1.emitNervesEvent)({
385
+ component: "config/identity",
386
+ event: "config.provider_credential_upserted",
387
+ message: "upserted provider credential record in vault",
388
+ meta: { agentName: input.agentName, provider: input.provider, revision: record.revision, source: record.provenance.source },
389
+ });
390
+ return record;
391
+ }
392
+ function redactProviderCredentialPool(pool) {
393
+ const providers = {};
394
+ for (const [provider, record] of Object.entries(pool.providers)) {
395
+ const redactedCredentials = {};
396
+ for (const key of Object.keys(record.credentials)) {
397
+ redactedCredentials[key] = "[redacted]";
398
+ }
399
+ providers[provider] = {
400
+ ...record,
401
+ credentials: redactedCredentials,
402
+ config: { ...record.config },
403
+ provenance: { ...record.provenance },
404
+ };
405
+ }
406
+ return {
407
+ ...pool,
408
+ providers,
409
+ };
410
+ }
411
+ function summarizeProviderCredentialPool(pool) {
412
+ return {
413
+ providers: Object.entries(pool.providers).map(([, record]) => ({
414
+ provider: record.provider,
415
+ revision: record.revision,
416
+ source: record.provenance.source,
417
+ updatedAt: record.updatedAt,
418
+ credentialFields: Object.keys(record.credentials).sort(),
419
+ configFields: Object.keys(record.config).sort(),
420
+ })),
421
+ };
422
+ }
423
+ function resetProviderCredentialCache() {
424
+ cachedPools = new Map();
425
+ }