@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
@@ -0,0 +1,66 @@
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
+ const agentArgIndex = process.argv.indexOf("--agent");
37
+ const agentName = agentArgIndex >= 0 ? process.argv[agentArgIndex + 1] : undefined;
38
+ if (!agentName) {
39
+ // eslint-disable-next-line no-console -- pre-boot guard: --agent check before imports
40
+ console.error("Missing required --agent <name> argument.\nUsage: node dist/senses/mail-entry.js --agent ouroboros");
41
+ process.exit(1);
42
+ }
43
+ const runtime_logging_1 = require("../heart/daemon/runtime-logging");
44
+ const runtime_1 = require("../nerves/runtime");
45
+ (0, runtime_logging_1.configureDaemonRuntimeLogger)("mail");
46
+ (0, runtime_1.emitNervesEvent)({
47
+ component: "senses",
48
+ event: "senses.entry_boot",
49
+ message: "booting Mail entrypoint",
50
+ meta: { entry: "mail", agentName },
51
+ });
52
+ Promise.resolve().then(() => __importStar(require("./mail"))).then(async ({ startMailSenseApp }) => {
53
+ await startMailSenseApp({ agentName });
54
+ })
55
+ .catch((error) => {
56
+ (0, runtime_1.emitNervesEvent)({
57
+ level: "error",
58
+ component: "senses",
59
+ event: "senses.entry_error",
60
+ message: "Mail entrypoint failed",
61
+ meta: { entry: "mail", agentName, error: error instanceof Error ? error.message : String(error) },
62
+ });
63
+ // eslint-disable-next-line no-console -- fatal startup guard for sense process
64
+ console.error(error instanceof Error ? error.message : String(error));
65
+ process.exit(1);
66
+ });
@@ -0,0 +1,379 @@
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.scanMailImportDiscoveryAttention = scanMailImportDiscoveryAttention;
37
+ exports.startMailSenseApp = startMailSenseApp;
38
+ const fs = __importStar(require("node:fs"));
39
+ const path = __importStar(require("node:path"));
40
+ const runtime_1 = require("../nerves/runtime");
41
+ const identity_1 = require("../heart/identity");
42
+ const runtime_credentials_1 = require("../heart/runtime-credentials");
43
+ const pending_1 = require("../mind/pending");
44
+ const socket_client_1 = require("../heart/daemon/socket-client");
45
+ const background_operations_1 = require("../heart/background-operations");
46
+ const mail_import_discovery_1 = require("../heart/mail-import-discovery");
47
+ const attention_1 = require("../mailroom/attention");
48
+ const reader_1 = require("../mailroom/reader");
49
+ const smtp_ingress_1 = require("../mailroom/smtp-ingress");
50
+ function readRegistry(registryPath) {
51
+ return JSON.parse(fs.readFileSync(registryPath, "utf-8"));
52
+ }
53
+ function validPort(value) {
54
+ return typeof value === "number" && Number.isInteger(value) && value >= 0 && value <= 65535 ? value : 0;
55
+ }
56
+ function serverAddress(server) {
57
+ const direct = server;
58
+ if (typeof direct.address === "function")
59
+ return direct.address();
60
+ const wrapped = server;
61
+ if (typeof wrapped.server?.address === "function")
62
+ return wrapped.server.address();
63
+ return null;
64
+ }
65
+ function serverPort(server) {
66
+ const address = serverAddress(server);
67
+ if (!address || typeof address !== "object")
68
+ return null;
69
+ return typeof address.port === "number" ? address.port : null;
70
+ }
71
+ function listeningServer(server) {
72
+ const wrapped = server;
73
+ if (typeof wrapped.server?.once === "function")
74
+ return wrapped.server;
75
+ const direct = server;
76
+ return typeof direct.once === "function" ? direct : null;
77
+ }
78
+ function waitForListening(server) {
79
+ if (serverAddress(server))
80
+ return Promise.resolve();
81
+ const listening = listeningServer(server);
82
+ if (!listening)
83
+ return new Promise((resolve) => setImmediate(resolve));
84
+ if (listening.listening)
85
+ return Promise.resolve();
86
+ return new Promise((resolve) => listening.once?.("listening", resolve));
87
+ }
88
+ function runtimeStatePath(agentName) {
89
+ return path.join((0, identity_1.getAgentRoot)(agentName), "state", "senses", "mail", "runtime.json");
90
+ }
91
+ function attentionStatePath(agentName) {
92
+ return path.join((0, identity_1.getAgentRoot)(agentName), "state", "senses", "mail", "attention.json");
93
+ }
94
+ function importDiscoveryStatePath(agentName) {
95
+ return path.join((0, identity_1.getAgentRoot)(agentName), "state", "senses", "mail", "import-discovery.json");
96
+ }
97
+ function writeRuntimeState(filePath, state) {
98
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
99
+ fs.writeFileSync(filePath, `${JSON.stringify(state, null, 2)}\n`, "utf-8");
100
+ (0, runtime_1.emitNervesEvent)({
101
+ component: "senses",
102
+ event: "senses.mail_sense_runtime_state_written",
103
+ message: "mail sense runtime state written",
104
+ meta: { agentName: state.agentName, status: state.status, lastQueuedCount: state.lastQueuedCount },
105
+ });
106
+ }
107
+ function emptyImportDiscoveryState(updatedAt) {
108
+ return {
109
+ schemaVersion: 1,
110
+ lastNotifiedFingerprint: null,
111
+ updatedAt,
112
+ };
113
+ }
114
+ function readImportDiscoveryState(filePath, updatedAt) {
115
+ try {
116
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
117
+ return {
118
+ schemaVersion: 1,
119
+ lastNotifiedFingerprint: typeof parsed.lastNotifiedFingerprint === "string" && parsed.lastNotifiedFingerprint.trim().length > 0
120
+ ? parsed.lastNotifiedFingerprint
121
+ : null,
122
+ updatedAt: typeof parsed.updatedAt === "string" ? parsed.updatedAt : updatedAt,
123
+ };
124
+ }
125
+ catch {
126
+ return emptyImportDiscoveryState(updatedAt);
127
+ }
128
+ }
129
+ function writeImportDiscoveryState(filePath, state) {
130
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
131
+ fs.writeFileSync(filePath, `${JSON.stringify(state, null, 2)}\n`, "utf-8");
132
+ }
133
+ function stringArray(value) {
134
+ if (!Array.isArray(value))
135
+ return [];
136
+ return value.filter((entry) => typeof entry === "string" && entry.trim().length > 0);
137
+ }
138
+ function candidateDescriptors(value) {
139
+ if (!Array.isArray(value))
140
+ return [];
141
+ return value
142
+ .filter((entry) => !!entry && typeof entry === "object" && !Array.isArray(entry))
143
+ .map((entry) => ({
144
+ path: typeof entry.path === "string" ? entry.path : "",
145
+ originKind: typeof entry.originKind === "string" ? entry.originKind : undefined,
146
+ originLabel: typeof entry.originLabel === "string" ? entry.originLabel : undefined,
147
+ }))
148
+ .filter((entry) => entry.path.trim().length > 0);
149
+ }
150
+ function renderImportDiscoveryContent(candidatePaths, descriptors) {
151
+ const renderedCandidates = descriptors.length > 0
152
+ ? descriptors.map((descriptor) => `- [${descriptor.originLabel ?? descriptor.originKind ?? "filesystem"}] ${descriptor.path}`)
153
+ : candidatePaths.map((candidatePath) => `- ${candidatePath}`);
154
+ return [
155
+ "[Mail Import Ready]",
156
+ "A local MBOX archive is ready for delegated-mail backfill.",
157
+ "This may live in a worktree-local Playwright sandbox rather than ~/Downloads.",
158
+ "",
159
+ "recent candidates:",
160
+ ...renderedCandidates,
161
+ "",
162
+ "If this matches an expected mailbox backfill, run `ouro mail import-mbox --discover --owner-email <email> --source hey --agent <agent>` first so Ouro can pick the matching archive or report ambiguity.",
163
+ ].join("\n");
164
+ }
165
+ async function scanMailImportDiscoveryAttention(input) {
166
+ const nowMs = input.now?.() ?? Date.now();
167
+ const updatedAt = new Date(nowMs).toISOString();
168
+ const statePath = input.statePath ?? importDiscoveryStatePath(input.agentName);
169
+ const pendingDir = input.pendingDir ?? (0, pending_1.getInnerDialogPendingDir)(input.agentName);
170
+ const state = readImportDiscoveryState(statePath, updatedAt);
171
+ const existingOperations = (0, background_operations_1.listBackgroundOperations)({
172
+ agentName: input.agentName,
173
+ agentRoot: (0, identity_1.getAgentRoot)(input.agentName),
174
+ limit: 10,
175
+ });
176
+ const discovered = (0, mail_import_discovery_1.listAmbientMailImportOperations)({
177
+ agentName: input.agentName,
178
+ agentRoot: (0, identity_1.getAgentRoot)(input.agentName),
179
+ existingOperations,
180
+ repoRoot: (0, identity_1.getRepoRoot)(),
181
+ homeDir: process.env.HOME,
182
+ nowMs,
183
+ })[0] ?? null;
184
+ const fingerprint = typeof discovered?.spec?.fingerprint === "string" && discovered.spec.fingerprint.trim().length > 0
185
+ ? discovered.spec.fingerprint
186
+ : null;
187
+ const candidatePaths = stringArray(discovered?.spec?.candidatePaths);
188
+ const descriptors = candidateDescriptors(discovered?.spec?.candidateDescriptors);
189
+ const shouldQueue = Boolean(discovered && fingerprint && fingerprint !== state.lastNotifiedFingerprint);
190
+ if (shouldQueue) {
191
+ (0, pending_1.queuePendingMessage)(pendingDir, {
192
+ from: "mailroom",
193
+ friendId: "self",
194
+ channel: "mail",
195
+ key: "import-ready",
196
+ content: renderImportDiscoveryContent(candidatePaths, descriptors),
197
+ timestamp: nowMs,
198
+ mode: "reflect",
199
+ });
200
+ await (0, socket_client_1.requestInnerWake)(input.agentName).catch(() => undefined);
201
+ }
202
+ writeImportDiscoveryState(statePath, {
203
+ schemaVersion: 1,
204
+ lastNotifiedFingerprint: shouldQueue ? fingerprint : state.lastNotifiedFingerprint,
205
+ updatedAt,
206
+ });
207
+ (0, runtime_1.emitNervesEvent)({
208
+ component: "senses",
209
+ event: "senses.mail_import_discovery_scanned",
210
+ message: "mail import discovery scanned",
211
+ meta: {
212
+ agentName: input.agentName,
213
+ queued: shouldQueue,
214
+ candidateCount: candidatePaths.length,
215
+ fingerprint,
216
+ },
217
+ });
218
+ return {
219
+ queued: shouldQueue,
220
+ fingerprint,
221
+ candidatePaths,
222
+ };
223
+ }
224
+ function closeServer(server) {
225
+ return new Promise((resolve) => {
226
+ server.close(resolve);
227
+ });
228
+ }
229
+ async function startMailSenseApp(options) {
230
+ const now = options.now ?? (() => Date.now());
231
+ /* v8 ignore next -- production wiring uses the default vault refresh; tests inject a deterministic refresh. @preserve */
232
+ const refreshRuntime = options.refreshRuntime ?? runtime_credentials_1.refreshRuntimeCredentialConfig;
233
+ await refreshRuntime(options.agentName, { preserveCachedOnFailure: true }).catch(() => undefined);
234
+ const resolved = options.resolveReader
235
+ ? options.resolveReader(options.agentName)
236
+ : (0, reader_1.resolveMailroomReader)(options.agentName);
237
+ if (!resolved.ok) {
238
+ throw new Error(resolved.error);
239
+ }
240
+ const hostedReaderOnly = resolved.storeKind === "azure-blob" && !resolved.config.registryPath;
241
+ if (!resolved.config.registryPath && !hostedReaderOnly) {
242
+ throw new Error(`missing mailroom.registryPath for ${options.agentName}; agent-runnable repair: 'ouro connect mail --agent ${options.agentName}'`);
243
+ }
244
+ const host = resolved.config.host ?? "127.0.0.1";
245
+ const ingress = hostedReaderOnly
246
+ ? null
247
+ : (options.startIngress ?? smtp_ingress_1.startMailroomIngress)({
248
+ registry: readRegistry(resolved.config.registryPath),
249
+ store: resolved.store,
250
+ smtpPort: validPort(resolved.config.smtpPort),
251
+ httpPort: validPort(resolved.config.httpPort),
252
+ host,
253
+ });
254
+ if (ingress) {
255
+ await Promise.all([
256
+ waitForListening(ingress.smtp),
257
+ waitForListening(ingress.health),
258
+ ]);
259
+ }
260
+ const activeSmtpPort = () => ingress ? serverPort(ingress.smtp) : null;
261
+ const activeHttpPort = () => ingress ? serverPort(ingress.health) : null;
262
+ const runtimePath = runtimeStatePath(options.agentName);
263
+ const attentionPath = attentionStatePath(options.agentName);
264
+ const importDiscoveryPath = importDiscoveryStatePath(options.agentName);
265
+ let lastScanAt = null;
266
+ let lastQueuedCount = 0;
267
+ const scan = async () => {
268
+ const scanStartedAt = new Date(now()).toISOString();
269
+ let queuedCount = 0;
270
+ try {
271
+ const screener = await (0, attention_1.scanMailScreenerAttention)({
272
+ agentName: options.agentName,
273
+ store: resolved.store,
274
+ pendingDir: (0, pending_1.getInnerDialogPendingDir)(options.agentName),
275
+ statePath: attentionPath,
276
+ now,
277
+ });
278
+ queuedCount += screener.queued.length;
279
+ }
280
+ catch (error) {
281
+ (0, runtime_1.emitNervesEvent)({
282
+ level: "error",
283
+ component: "senses",
284
+ event: "senses.mail_sense_scan_error",
285
+ message: "mail sense attention scan failed",
286
+ meta: { agentName: options.agentName, error: error instanceof Error ? error.message : String(error) },
287
+ });
288
+ }
289
+ try {
290
+ const importDiscovery = await scanMailImportDiscoveryAttention({
291
+ agentName: options.agentName,
292
+ pendingDir: (0, pending_1.getInnerDialogPendingDir)(options.agentName),
293
+ statePath: importDiscoveryPath,
294
+ now,
295
+ });
296
+ if (importDiscovery.queued) {
297
+ queuedCount += 1;
298
+ }
299
+ }
300
+ catch (error) {
301
+ (0, runtime_1.emitNervesEvent)({
302
+ level: "error",
303
+ component: "senses",
304
+ event: "senses.mail_import_discovery_scan_error",
305
+ message: "mail import discovery scan failed",
306
+ meta: { agentName: options.agentName, error: error instanceof Error ? error.message : String(error) },
307
+ });
308
+ }
309
+ lastScanAt = scanStartedAt;
310
+ lastQueuedCount = queuedCount;
311
+ writeRuntimeState(runtimePath, {
312
+ schemaVersion: 1,
313
+ agentName: options.agentName,
314
+ status: "running",
315
+ mailboxAddress: resolved.config.mailboxAddress,
316
+ smtpPort: activeSmtpPort(),
317
+ httpPort: activeHttpPort(),
318
+ host,
319
+ storeKind: resolved.storeKind,
320
+ storeLabel: resolved.storeLabel,
321
+ lastScanAt,
322
+ lastQueuedCount,
323
+ updatedAt: new Date(now()).toISOString(),
324
+ });
325
+ };
326
+ await scan();
327
+ const intervalMs = Math.max(5_000, resolved.config.attentionIntervalMs ?? 30_000);
328
+ const timer = (options.setIntervalFn ?? ((callback, ms) => setInterval(callback, ms)))(() => {
329
+ void scan();
330
+ }, intervalMs);
331
+ (0, runtime_1.emitNervesEvent)({
332
+ component: "senses",
333
+ event: "senses.mail_sense_started",
334
+ message: "mail sense started",
335
+ meta: {
336
+ agentName: options.agentName,
337
+ mailboxAddress: resolved.config.mailboxAddress,
338
+ smtpPort: activeSmtpPort(),
339
+ httpPort: activeHttpPort(),
340
+ intervalMs,
341
+ },
342
+ });
343
+ return {
344
+ runtimeStatePath: runtimePath,
345
+ attentionStatePath: attentionPath,
346
+ smtpPort: activeSmtpPort(),
347
+ httpPort: activeHttpPort(),
348
+ async stop() {
349
+ ;
350
+ (options.clearIntervalFn ?? ((activeTimer) => clearInterval(activeTimer)))(timer);
351
+ if (ingress) {
352
+ await Promise.all([
353
+ closeServer(ingress.smtp),
354
+ closeServer(ingress.health),
355
+ ]);
356
+ }
357
+ writeRuntimeState(runtimePath, {
358
+ schemaVersion: 1,
359
+ agentName: options.agentName,
360
+ status: "stopped",
361
+ mailboxAddress: resolved.config.mailboxAddress,
362
+ smtpPort: activeSmtpPort(),
363
+ httpPort: activeHttpPort(),
364
+ host,
365
+ storeKind: resolved.storeKind,
366
+ storeLabel: resolved.storeLabel,
367
+ lastScanAt,
368
+ lastQueuedCount,
369
+ updatedAt: new Date(now()).toISOString(),
370
+ });
371
+ (0, runtime_1.emitNervesEvent)({
372
+ component: "senses",
373
+ event: "senses.mail_sense_stopped",
374
+ message: "mail sense stopped",
375
+ meta: { agentName: options.agentName },
376
+ });
377
+ },
378
+ };
379
+ }