@ouro.bot/cli 0.1.0-alpha.54 → 0.1.0-alpha.540

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 (384) hide show
  1. package/README.md +133 -19
  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-bootstrap-drift.md +54 -0
  6. package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
  7. package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
  8. package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
  9. package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
  10. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  12. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  13. package/changelog.json +3494 -0
  14. package/dist/arc/attention-types.js +8 -0
  15. package/dist/arc/cares.js +140 -0
  16. package/dist/arc/episodes.js +117 -0
  17. package/dist/arc/intentions.js +133 -0
  18. package/dist/arc/json-store.js +117 -0
  19. package/dist/arc/obligations.js +237 -0
  20. package/dist/arc/packets.js +193 -0
  21. package/dist/arc/presence.js +185 -0
  22. package/dist/arc/task-lifecycle.js +65 -0
  23. package/dist/heart/active-work.js +837 -26
  24. package/dist/heart/agent-entry.js +58 -3
  25. package/dist/heart/attachments/image-normalize.js +194 -0
  26. package/dist/heart/attachments/materialize.js +97 -0
  27. package/dist/heart/attachments/originals.js +88 -0
  28. package/dist/heart/attachments/render.js +29 -0
  29. package/dist/heart/attachments/sources/adapter.js +2 -0
  30. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  31. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  32. package/dist/heart/attachments/sources/index.js +16 -0
  33. package/dist/heart/attachments/store.js +103 -0
  34. package/dist/heart/attachments/types.js +93 -0
  35. package/dist/heart/auth/auth-flow.js +427 -0
  36. package/dist/heart/background-operations.js +281 -0
  37. package/dist/heart/bundle-state.js +168 -0
  38. package/dist/heart/commitments.js +111 -0
  39. package/dist/heart/config-registry.js +304 -0
  40. package/dist/heart/config.js +114 -118
  41. package/dist/heart/core.js +925 -246
  42. package/dist/heart/cross-chat-delivery.js +3 -18
  43. package/dist/heart/daemon/agent-config-check.js +512 -0
  44. package/dist/heart/daemon/agent-discovery.js +102 -3
  45. package/dist/heart/daemon/agent-service.js +522 -0
  46. package/dist/heart/daemon/agentic-repair.js +554 -0
  47. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  48. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  49. package/dist/heart/daemon/cadence.js +70 -0
  50. package/dist/heart/daemon/cli-defaults.js +643 -0
  51. package/dist/heart/daemon/cli-exec.js +7567 -0
  52. package/dist/heart/daemon/cli-help.js +498 -0
  53. package/dist/heart/daemon/cli-parse.js +1590 -0
  54. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  55. package/dist/heart/daemon/cli-render.js +755 -0
  56. package/dist/heart/daemon/cli-types.js +8 -0
  57. package/dist/heart/daemon/connect-bay.js +323 -0
  58. package/dist/heart/daemon/daemon-cli.js +29 -1672
  59. package/dist/heart/daemon/daemon-entry.js +416 -2
  60. package/dist/heart/daemon/daemon-health.js +183 -0
  61. package/dist/heart/daemon/daemon-rollup.js +58 -0
  62. package/dist/heart/daemon/daemon-runtime-sync.js +69 -13
  63. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  64. package/dist/heart/daemon/daemon.js +758 -71
  65. package/dist/heart/daemon/dns-workflow.js +394 -0
  66. package/dist/heart/daemon/doctor-types.js +8 -0
  67. package/dist/heart/daemon/doctor.js +844 -0
  68. package/dist/heart/daemon/drift-detection.js +146 -0
  69. package/dist/heart/daemon/health-monitor.js +122 -1
  70. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  71. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  72. package/dist/heart/daemon/http-health-probe.js +80 -0
  73. package/dist/heart/daemon/human-command-screens.js +234 -0
  74. package/dist/heart/daemon/human-readiness.js +114 -0
  75. package/dist/heart/daemon/inner-status.js +102 -0
  76. package/dist/heart/daemon/interactive-repair.js +394 -0
  77. package/dist/heart/daemon/launchd.js +15 -3
  78. package/dist/heart/daemon/log-tailer.js +82 -12
  79. package/dist/heart/daemon/logs-prune.js +110 -0
  80. package/dist/heart/daemon/mcp-canary.js +288 -0
  81. package/dist/heart/daemon/message-router.js +2 -2
  82. package/dist/heart/daemon/os-cron-deps.js +134 -0
  83. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  84. package/dist/heart/daemon/ouro-entry.js +3 -1
  85. package/dist/heart/daemon/process-manager.js +375 -33
  86. package/dist/heart/daemon/provider-discovery.js +137 -0
  87. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  88. package/dist/heart/daemon/pulse.js +475 -0
  89. package/dist/heart/daemon/readiness-repair.js +365 -0
  90. package/dist/heart/daemon/run-hooks.js +2 -0
  91. package/dist/heart/daemon/runtime-logging.js +67 -16
  92. package/dist/heart/daemon/runtime-metadata.js +3 -31
  93. package/dist/heart/daemon/safe-mode.js +161 -0
  94. package/dist/heart/daemon/sense-manager.js +325 -38
  95. package/dist/heart/daemon/session-id-resolver.js +131 -0
  96. package/dist/heart/daemon/skill-management-installer.js +94 -0
  97. package/dist/heart/daemon/socket-client.js +158 -11
  98. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  99. package/dist/heart/daemon/startup-tui.js +330 -0
  100. package/dist/heart/daemon/task-scheduler.js +3 -25
  101. package/dist/heart/daemon/terminal-ui.js +499 -0
  102. package/dist/heart/daemon/thoughts.js +162 -17
  103. package/dist/heart/daemon/up-progress.js +366 -0
  104. package/dist/heart/daemon/vault-items.js +56 -0
  105. package/dist/heart/delegation.js +1 -1
  106. package/dist/heart/habits/habit-migration.js +189 -0
  107. package/dist/heart/habits/habit-parser.js +140 -0
  108. package/dist/heart/habits/habit-runtime-state.js +100 -0
  109. package/dist/heart/habits/habit-scheduler.js +372 -0
  110. package/dist/heart/{daemon → hatch}/hatch-flow.js +52 -117
  111. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  112. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  113. package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
  114. package/dist/heart/identity.js +200 -51
  115. package/dist/heart/kept-notes.js +357 -0
  116. package/dist/heart/kicks.js +1 -1
  117. package/dist/heart/machine-identity.js +161 -0
  118. package/dist/heart/mail-import-discovery.js +353 -0
  119. package/dist/heart/mailbox/mailbox-http-hooks.js +66 -0
  120. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  121. package/dist/heart/mailbox/mailbox-http-routes.js +246 -0
  122. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  123. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  124. package/dist/heart/mailbox/mailbox-http.js +99 -0
  125. package/dist/heart/mailbox/mailbox-read.js +31 -0
  126. package/dist/heart/mailbox/mailbox-types.js +27 -0
  127. package/dist/heart/mailbox/mailbox-view.js +195 -0
  128. package/dist/heart/mailbox/readers/agent-machine.js +382 -0
  129. package/dist/heart/mailbox/readers/continuity-readers.js +338 -0
  130. package/dist/heart/mailbox/readers/mail.js +362 -0
  131. package/dist/heart/mailbox/readers/runtime-readers.js +651 -0
  132. package/dist/heart/mailbox/readers/sessions.js +232 -0
  133. package/dist/heart/mailbox/readers/shared.js +111 -0
  134. package/dist/heart/mcp/mcp-server.js +683 -0
  135. package/dist/heart/migrate-config.js +100 -0
  136. package/dist/heart/model-capabilities.js +19 -0
  137. package/dist/heart/platform.js +81 -0
  138. package/dist/heart/provider-attempt.js +134 -0
  139. package/dist/heart/provider-binding-resolver.js +255 -0
  140. package/dist/heart/provider-credentials.js +425 -0
  141. package/dist/heart/provider-failover.js +301 -0
  142. package/dist/heart/provider-models.js +81 -0
  143. package/dist/heart/provider-ping.js +262 -0
  144. package/dist/heart/provider-state.js +216 -0
  145. package/dist/heart/provider-visibility.js +188 -0
  146. package/dist/heart/providers/anthropic-token.js +131 -0
  147. package/dist/heart/providers/anthropic.js +139 -52
  148. package/dist/heart/providers/azure.js +97 -13
  149. package/dist/heart/providers/error-classification.js +127 -0
  150. package/dist/heart/providers/github-copilot.js +145 -0
  151. package/dist/heart/providers/minimax-vlm.js +189 -0
  152. package/dist/heart/providers/minimax.js +26 -8
  153. package/dist/heart/providers/openai-codex.js +55 -40
  154. package/dist/heart/runtime-capability-check.js +170 -0
  155. package/dist/heart/runtime-credentials.js +367 -0
  156. package/dist/heart/runtime-cwd.js +87 -0
  157. package/dist/heart/sense-truth.js +11 -4
  158. package/dist/heart/session-activity.js +43 -22
  159. package/dist/heart/session-events.js +1149 -0
  160. package/dist/heart/session-playback-cli-main.js +5 -0
  161. package/dist/heart/session-playback-cli.js +36 -0
  162. package/dist/heart/session-playback.js +231 -0
  163. package/dist/heart/session-stats-cli-main.js +5 -0
  164. package/dist/heart/session-stats.js +182 -0
  165. package/dist/heart/session-transcript.js +243 -0
  166. package/dist/heart/start-of-turn-packet.js +345 -0
  167. package/dist/heart/streaming.js +44 -27
  168. package/dist/heart/sync-classification.js +176 -0
  169. package/dist/heart/sync.js +449 -0
  170. package/dist/heart/target-resolution.js +9 -5
  171. package/dist/heart/tempo.js +93 -0
  172. package/dist/heart/temporal-view.js +41 -0
  173. package/dist/heart/timeouts.js +101 -0
  174. package/dist/heart/tool-activity-callbacks.js +59 -0
  175. package/dist/heart/tool-description.js +139 -0
  176. package/dist/heart/tool-friction.js +55 -0
  177. package/dist/heart/tool-loop.js +200 -0
  178. package/dist/heart/turn-context.js +381 -0
  179. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  180. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  181. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  182. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  183. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  184. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  185. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  186. package/dist/mailbox-ui/assets/index-BPr5vNuM.css +1 -0
  187. package/dist/mailbox-ui/assets/index-Cm51CY9W.js +61 -0
  188. package/dist/mailbox-ui/index.html +15 -0
  189. package/dist/mailroom/attention.js +167 -0
  190. package/dist/mailroom/autonomy.js +209 -0
  191. package/dist/mailroom/blob-store.js +674 -0
  192. package/dist/mailroom/body-cache.js +61 -0
  193. package/dist/mailroom/core.js +720 -0
  194. package/dist/mailroom/entry.js +160 -0
  195. package/dist/mailroom/file-store.js +430 -0
  196. package/dist/mailroom/mbox-import.js +383 -0
  197. package/dist/mailroom/outbound.js +380 -0
  198. package/dist/mailroom/policy.js +263 -0
  199. package/dist/mailroom/reader.js +233 -0
  200. package/dist/mailroom/search-cache.js +256 -0
  201. package/dist/mailroom/search-relevance.js +319 -0
  202. package/dist/mailroom/smtp-ingress.js +176 -0
  203. package/dist/mailroom/source-state.js +176 -0
  204. package/dist/mailroom/thread.js +109 -0
  205. package/dist/mailroom/travel-extract.js +89 -0
  206. package/dist/mind/bundle-manifest.js +7 -1
  207. package/dist/mind/context.js +165 -101
  208. package/dist/mind/diary-integrity.js +60 -0
  209. package/dist/mind/{memory.js → diary.js} +74 -93
  210. package/dist/mind/embedding-provider.js +60 -0
  211. package/dist/mind/file-state.js +179 -0
  212. package/dist/mind/friends/channel.js +30 -0
  213. package/dist/mind/friends/resolver.js +54 -2
  214. package/dist/mind/friends/store-file.js +39 -3
  215. package/dist/mind/friends/types.js +2 -2
  216. package/dist/mind/journal-index.js +161 -0
  217. package/dist/mind/note-search.js +268 -0
  218. package/dist/mind/obligation-steering.js +221 -0
  219. package/dist/mind/pending.js +4 -0
  220. package/dist/mind/prompt-refresh.js +3 -2
  221. package/dist/mind/prompt.js +995 -123
  222. package/dist/mind/provenance-trust.js +26 -0
  223. package/dist/mind/scrutiny.js +173 -0
  224. package/dist/nerves/cli-logging.js +7 -1
  225. package/dist/nerves/coverage/audit-rules.js +15 -6
  226. package/dist/nerves/coverage/audit.js +28 -2
  227. package/dist/nerves/coverage/cli.js +1 -1
  228. package/dist/nerves/coverage/contract.js +5 -5
  229. package/dist/nerves/coverage/file-completeness.js +139 -5
  230. package/dist/nerves/coverage/run-artifacts.js +1 -1
  231. package/dist/nerves/event-buffer.js +111 -0
  232. package/dist/nerves/index.js +224 -4
  233. package/dist/nerves/observation.js +20 -0
  234. package/dist/nerves/redact.js +79 -0
  235. package/dist/nerves/review/cli-main.js +5 -0
  236. package/dist/nerves/review/cli.js +156 -0
  237. package/dist/nerves/review/core.js +152 -0
  238. package/dist/nerves/runtime.js +5 -1
  239. package/dist/repertoire/ado-client.js +15 -56
  240. package/dist/repertoire/ado-semantic.js +11 -10
  241. package/dist/repertoire/api-client.js +97 -0
  242. package/dist/repertoire/bitwarden-store.js +816 -0
  243. package/dist/repertoire/bundle-templates.js +72 -0
  244. package/dist/repertoire/bw-installer.js +180 -0
  245. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  246. package/dist/repertoire/coding/context-pack.js +330 -0
  247. package/dist/repertoire/coding/feedback.js +197 -30
  248. package/dist/repertoire/coding/manager.js +158 -9
  249. package/dist/repertoire/coding/spawner.js +55 -9
  250. package/dist/repertoire/coding/tools.js +170 -7
  251. package/dist/repertoire/commerce-errors.js +109 -0
  252. package/dist/repertoire/commerce-self-test.js +156 -0
  253. package/dist/repertoire/credential-access.js +111 -0
  254. package/dist/repertoire/duffel-client.js +185 -0
  255. package/dist/repertoire/github-client.js +14 -55
  256. package/dist/repertoire/graph-client.js +11 -52
  257. package/dist/repertoire/guardrails.js +396 -0
  258. package/dist/repertoire/mcp-client.js +295 -0
  259. package/dist/repertoire/mcp-manager.js +362 -0
  260. package/dist/repertoire/mcp-tools.js +63 -0
  261. package/dist/repertoire/shell-sessions.js +133 -0
  262. package/dist/repertoire/skills.js +15 -24
  263. package/dist/repertoire/stripe-client.js +131 -0
  264. package/dist/repertoire/tasks/board.js +31 -5
  265. package/dist/repertoire/tasks/fix.js +182 -0
  266. package/dist/repertoire/tasks/index.js +16 -4
  267. package/dist/repertoire/tasks/lifecycle.js +2 -2
  268. package/dist/repertoire/tasks/parser.js +3 -2
  269. package/dist/repertoire/tasks/scanner.js +194 -37
  270. package/dist/repertoire/tasks/transitions.js +16 -78
  271. package/dist/repertoire/tool-results.js +29 -0
  272. package/dist/repertoire/tools-attachments.js +317 -0
  273. package/dist/repertoire/tools-base.js +47 -1075
  274. package/dist/repertoire/tools-bluebubbles.js +1 -0
  275. package/dist/repertoire/tools-bridge.js +142 -0
  276. package/dist/repertoire/tools-bundle.js +984 -0
  277. package/dist/repertoire/tools-config.js +185 -0
  278. package/dist/repertoire/tools-continuity.js +248 -0
  279. package/dist/repertoire/tools-credential.js +381 -0
  280. package/dist/repertoire/tools-files.js +342 -0
  281. package/dist/repertoire/tools-flight.js +224 -0
  282. package/dist/repertoire/tools-flow.js +119 -0
  283. package/dist/repertoire/tools-github.js +1 -7
  284. package/dist/repertoire/tools-mail.js +1857 -0
  285. package/dist/repertoire/tools-notes.js +421 -0
  286. package/dist/repertoire/tools-session.js +750 -0
  287. package/dist/repertoire/tools-shell.js +120 -0
  288. package/dist/repertoire/tools-stripe.js +180 -0
  289. package/dist/repertoire/tools-surface.js +243 -0
  290. package/dist/repertoire/tools-teams.js +9 -39
  291. package/dist/repertoire/tools-travel.js +125 -0
  292. package/dist/repertoire/tools-trip.js +604 -0
  293. package/dist/repertoire/tools-user-profile.js +144 -0
  294. package/dist/repertoire/tools-vault.js +40 -0
  295. package/dist/repertoire/tools.js +108 -100
  296. package/dist/repertoire/travel-api-client.js +360 -0
  297. package/dist/repertoire/user-profile.js +131 -0
  298. package/dist/repertoire/vault-setup.js +246 -0
  299. package/dist/repertoire/vault-unlock.js +561 -0
  300. package/dist/scripts/claude-code-hook.js +41 -0
  301. package/dist/scripts/claude-code-stop-hook.js +47 -0
  302. package/dist/senses/attention-queue.js +116 -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 +2238 -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 +111 -0
  313. package/dist/senses/bluebubbles/replay.js +129 -0
  314. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +16 -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 +569 -182
  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/trips/core.js +138 -0
  350. package/dist/trips/store.js +146 -0
  351. package/package.json +38 -7
  352. package/skills/agent-commerce.md +106 -0
  353. package/skills/browser-navigation.md +117 -0
  354. package/skills/commerce-setup-guide.md +116 -0
  355. package/skills/commerce-setup.md +84 -0
  356. package/skills/configure-dev-tools.md +101 -0
  357. package/skills/travel-planning.md +138 -0
  358. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  359. package/dist/heart/daemon/subagent-installer.js +0 -166
  360. package/dist/heart/session-recall.js +0 -116
  361. package/dist/mind/associative-recall.js +0 -209
  362. package/dist/senses/bluebubbles-entry.js +0 -13
  363. package/dist/senses/bluebubbles.js +0 -1177
  364. package/dist/senses/debug-activity.js +0 -148
  365. package/subagents/README.md +0 -86
  366. package/subagents/work-doer.md +0 -237
  367. package/subagents/work-merger.md +0 -618
  368. package/subagents/work-planner.md +0 -390
  369. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  370. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  371. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  372. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  373. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  374. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.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
  381. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  382. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  383. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  384. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleKillToEnd = handleKillToEnd;
4
+ exports.handleKillToStart = handleKillToStart;
5
+ exports.handleKillWordBack = handleKillWordBack;
6
+ exports.handleYank = handleYank;
7
+ exports.handleCursorLeft = handleCursorLeft;
8
+ exports.handleCursorRight = handleCursorRight;
9
+ exports.handleBackspace = handleBackspace;
10
+ exports.handleForwardDelete = handleForwardDelete;
11
+ exports.handleHome = handleHome;
12
+ exports.handleEnd = handleEnd;
13
+ exports.classifyEscapeSequence = classifyEscapeSequence;
14
+ exports.handleYankPop = handleYankPop;
15
+ exports.handleEmptyPaste = handleEmptyPaste;
16
+ const runtime_1 = require("../../nerves/runtime");
17
+ /**
18
+ * Ctrl+K: kill from cursor to end of line.
19
+ * Pushes killed text to ring with "append" direction.
20
+ */
21
+ function handleKillToEnd(text, cursorPos, ring) {
22
+ (0, runtime_1.emitNervesEvent)({ component: "senses", event: "senses.input_kill", message: "kill to end", meta: { direction: "end" } });
23
+ if (cursorPos >= text.length) {
24
+ return { text, cursorPos };
25
+ }
26
+ const killed = text.slice(cursorPos);
27
+ ring.push(killed, "append");
28
+ return { text: text.slice(0, cursorPos), cursorPos };
29
+ }
30
+ /**
31
+ * Ctrl+U: kill from start of line to cursor.
32
+ * Pushes killed text to ring with "prepend" direction.
33
+ */
34
+ function handleKillToStart(text, cursorPos, ring) {
35
+ if (cursorPos === 0) {
36
+ return { text, cursorPos };
37
+ }
38
+ const killed = text.slice(0, cursorPos);
39
+ ring.push(killed, "prepend");
40
+ return { text: text.slice(cursorPos), cursorPos: 0 };
41
+ }
42
+ /**
43
+ * Ctrl+W / Meta+Backspace: kill word before cursor.
44
+ * Pushes killed word to ring with "prepend" direction.
45
+ */
46
+ function handleKillWordBack(text, cursorPos, ring) {
47
+ if (cursorPos === 0) {
48
+ return { text, cursorPos };
49
+ }
50
+ const before = text.slice(0, cursorPos);
51
+ const after = text.slice(cursorPos);
52
+ const wordStart = before.replace(/\s*\S+\s*$/, "");
53
+ const killed = before.slice(wordStart.length);
54
+ ring.push(killed, "prepend");
55
+ return { text: wordStart + after, cursorPos: wordStart.length };
56
+ }
57
+ /**
58
+ * Ctrl+Y: yank (paste) from kill ring at cursor.
59
+ * Returns null if ring is empty.
60
+ */
61
+ function handleYank(text, cursorPos, ring) {
62
+ const yanked = ring.yank();
63
+ if (yanked === undefined)
64
+ return null;
65
+ const before = text.slice(0, cursorPos);
66
+ const after = text.slice(cursorPos);
67
+ return { text: before + yanked + after, cursorPos: cursorPos + yanked.length };
68
+ }
69
+ // ─── Emacs Cursor Navigation ─────────────────────────────────────
70
+ /** Ctrl+B: move cursor left by 1. Returns new cursor position. */
71
+ function handleCursorLeft(_text, cursorPos) {
72
+ return Math.max(0, cursorPos - 1);
73
+ }
74
+ /** Ctrl+F: move cursor right by 1. Returns new cursor position. */
75
+ function handleCursorRight(text, cursorPos) {
76
+ return Math.min(text.length, cursorPos + 1);
77
+ }
78
+ /** Ctrl+H: backspace (delete char before cursor). */
79
+ function handleBackspace(text, cursorPos) {
80
+ if (cursorPos === 0)
81
+ return { text, cursorPos };
82
+ const before = text.slice(0, cursorPos - 1);
83
+ const after = text.slice(cursorPos);
84
+ return { text: before + after, cursorPos: cursorPos - 1 };
85
+ }
86
+ /** Forward delete: delete char at cursor position. */
87
+ function handleForwardDelete(text, cursorPos) {
88
+ if (cursorPos >= text.length)
89
+ return { text, cursorPos };
90
+ const before = text.slice(0, cursorPos);
91
+ const after = text.slice(cursorPos + 1);
92
+ return { text: before + after, cursorPos };
93
+ }
94
+ // ─── Home / End ──────────────────────────────────────────────────
95
+ /** Home key: move cursor to position 0. Returns new cursor position. */
96
+ function handleHome(_text, _cursorPos) {
97
+ return 0;
98
+ }
99
+ /** End key: move cursor to end of text. Returns new cursor position. */
100
+ function handleEnd(text, _cursorPos) {
101
+ return text.length;
102
+ }
103
+ // ─── Escape Sequence Classification ──────────────────────────────
104
+ /**
105
+ * Classify raw escape sequences that Ink passes through as regular characters.
106
+ * Returns:
107
+ * "home" — Home key sequences
108
+ * "end" — End key sequences
109
+ * "ignore" — PageUp, PageDown, mouse wheel (should be suppressed)
110
+ * null — not a recognized escape sequence
111
+ */
112
+ function classifyEscapeSequence(inputChar) {
113
+ if (!inputChar.startsWith("\x1b["))
114
+ return null;
115
+ const seq = inputChar.slice(2); // after \x1b[
116
+ // Home: \x1b[H or \x1b[1~
117
+ if (seq === "H" || seq === "1~")
118
+ return "home";
119
+ // End: \x1b[F or \x1b[4~
120
+ if (seq === "F" || seq === "4~")
121
+ return "end";
122
+ // Option+Left: \x1b[1;3D (CSI modified arrow with Alt modifier)
123
+ if (seq === "1;3D")
124
+ return "word-left";
125
+ // Option+Right: \x1b[1;3C
126
+ if (seq === "1;3C")
127
+ return "word-right";
128
+ // PageUp: \x1b[5~, PageDown: \x1b[6~
129
+ if (seq === "5~" || seq === "6~")
130
+ return "ignore";
131
+ // SGR mouse wheel: \x1b[<64;... or \x1b[<65;...
132
+ if (seq.startsWith("<64;") || seq.startsWith("<65;"))
133
+ return "ignore";
134
+ return null;
135
+ }
136
+ /**
137
+ * Alt+Y: yank-pop -- replace previously yanked text with next ring entry.
138
+ * Returns null if not in yanking state or ring is empty.
139
+ */
140
+ function handleYankPop(text, cursorPos, ring) {
141
+ const lastYanked = ring.lastYankedText;
142
+ if (!ring.isYanking || lastYanked === undefined)
143
+ return null;
144
+ const popped = ring.yankPop();
145
+ if (popped === undefined)
146
+ return null;
147
+ // Find where the last yanked text ends (at current cursor position)
148
+ // and starts (cursorPos - lastYanked.length)
149
+ const yankStart = cursorPos - lastYanked.length;
150
+ const before = text.slice(0, yankStart);
151
+ const after = text.slice(cursorPos);
152
+ return { text: before + popped + after, cursorPos: yankStart + popped.length };
153
+ }
154
+ /**
155
+ * Handle an empty paste event by checking clipboard for images (macOS only).
156
+ * Returns null if no image found, not on macOS, or clipboard empty.
157
+ */
158
+ async function handleEmptyPaste(text, cursorPos, currentImageCount, platform, clipboardReader) {
159
+ if (platform !== "darwin")
160
+ return null;
161
+ const imageData = await clipboardReader();
162
+ if (!imageData)
163
+ return null;
164
+ const refNum = currentImageCount + 1;
165
+ const ref = `[Image #${refNum}]`;
166
+ const before = text.slice(0, cursorPos);
167
+ const after = text.slice(cursorPos);
168
+ return {
169
+ text: before + ref + after,
170
+ cursorPos: cursorPos + ref.length,
171
+ imageRef: refNum,
172
+ imageData,
173
+ };
174
+ }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KillRing = void 0;
4
+ /**
5
+ * Kill ring — emacs-style cut buffer with accumulation and yank-pop cycling.
6
+ *
7
+ * Stores up to MAX_SIZE killed text entries. Consecutive kills in the same
8
+ * direction accumulate into a single entry. Yank retrieves the most recent
9
+ * entry; yank-pop cycles backward through the ring.
10
+ */
11
+ const runtime_1 = require("../../nerves/runtime");
12
+ const MAX_SIZE = 10;
13
+ class KillRing {
14
+ entries = [];
15
+ accumulating = false;
16
+ yankIndex = -1;
17
+ _isYanking = false;
18
+ _lastYankedText = undefined;
19
+ /** Whether the ring is currently in yank-cycling mode. */
20
+ get isYanking() {
21
+ return this._isYanking;
22
+ }
23
+ /** The text that was last returned by yank() or yankPop(). */
24
+ get lastYankedText() {
25
+ return this._lastYankedText;
26
+ }
27
+ /**
28
+ * Push killed text onto the ring.
29
+ *
30
+ * If accumulating (consecutive kills without a reset), the text is merged
31
+ * with the top entry: "append" concatenates to the end, "prepend" prepends
32
+ * to the start. Otherwise a new entry is created, evicting the oldest if
33
+ * the ring is full.
34
+ */
35
+ push(text, direction) {
36
+ (0, runtime_1.emitNervesEvent)({ component: "senses", event: "senses.kill_ring_push", message: "killed text to ring", meta: { direction, length: text.length } });
37
+ if (this.accumulating && this.entries.length > 0) {
38
+ const top = this.entries[this.entries.length - 1];
39
+ this.entries[this.entries.length - 1] =
40
+ direction === "append" ? top + text : text + top;
41
+ }
42
+ else {
43
+ if (this.entries.length >= MAX_SIZE) {
44
+ this.entries.shift();
45
+ }
46
+ this.entries.push(text);
47
+ }
48
+ this.accumulating = true;
49
+ }
50
+ /**
51
+ * Return the most recent kill ring entry and enter yanking mode.
52
+ * Returns undefined if the ring is empty.
53
+ */
54
+ yank() {
55
+ if (this.entries.length === 0)
56
+ return undefined;
57
+ this.yankIndex = this.entries.length - 1;
58
+ this._isYanking = true;
59
+ this._lastYankedText = this.entries[this.yankIndex];
60
+ return this._lastYankedText;
61
+ }
62
+ /**
63
+ * Cycle to the next older entry in the ring (wrapping around).
64
+ * Must be called after yank(). Returns undefined if ring is empty
65
+ * or not in yanking state.
66
+ */
67
+ yankPop() {
68
+ if (!this._isYanking || this.entries.length === 0)
69
+ return undefined;
70
+ this.yankIndex =
71
+ (this.yankIndex - 1 + this.entries.length) % this.entries.length;
72
+ this._lastYankedText = this.entries[this.yankIndex];
73
+ return this._lastYankedText;
74
+ }
75
+ /** Stop consecutive-kill accumulation (called on non-kill keystrokes). */
76
+ resetAccumulation() {
77
+ this.accumulating = false;
78
+ }
79
+ /** Exit yank-cycling mode (called on non-yank keystrokes). */
80
+ resetYankState() {
81
+ this._isYanking = false;
82
+ this._lastYankedText = undefined;
83
+ this.yankIndex = -1;
84
+ }
85
+ }
86
+ exports.KillRing = KillRing;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScrollableMessageList = ScrollableMessageList;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const ink_1 = require("ink");
7
+ const streaming_markdown_1 = require("./streaming-markdown");
8
+ /**
9
+ * Scrollable message list with virtual rendering.
10
+ *
11
+ * Only renders messages within the viewport window. Supports:
12
+ * - Auto-scroll to bottom (pinned mode, default)
13
+ * - Scroll lock at a specific offset
14
+ * - "N below" indicator when scrolled up
15
+ *
16
+ * Ouroboros-themed: green serpent palette, no padding decoration.
17
+ */
18
+ // Ouroboros brand palette
19
+ const OURO_TEAL = "#4ec9b0";
20
+ const OURO_INDICATOR = "#2ecc40";
21
+ function MessageItem({ message }) {
22
+ if (message.role === "user" && message.content) {
23
+ return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { color: OURO_TEAL, bold: true, children: ") " }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: message.content })] }));
24
+ }
25
+ if (message.role === "assistant" && message.content) {
26
+ return (0, jsx_runtime_1.jsx)(streaming_markdown_1.StreamingMarkdown, { text: message.content });
27
+ }
28
+ // system or empty messages render nothing visible
29
+ return (0, jsx_runtime_1.jsx)(ink_1.Text, { children: "" });
30
+ }
31
+ function ScrollableMessageList({ messages, viewportHeight, scrollOffset, }) {
32
+ const { visibleMessages, belowCount } = (0, react_1.useMemo)(() => {
33
+ if (messages.length === 0) {
34
+ return { visibleMessages: [], belowCount: 0 };
35
+ }
36
+ let start;
37
+ if (scrollOffset !== undefined) {
38
+ start = Math.max(0, Math.min(scrollOffset, messages.length - 1));
39
+ }
40
+ else {
41
+ // Auto-scroll: pin to bottom
42
+ start = Math.max(0, messages.length - viewportHeight);
43
+ }
44
+ const end = Math.min(start + viewportHeight, messages.length);
45
+ return {
46
+ visibleMessages: messages.slice(start, end),
47
+ belowCount: messages.length - end,
48
+ };
49
+ }, [messages, viewportHeight, scrollOffset]);
50
+ return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", children: [visibleMessages.map((msg, i) => ((0, jsx_runtime_1.jsx)(MessageItem, { message: msg }, i))), belowCount > 0 ? ((0, jsx_runtime_1.jsx)(ink_1.Text, { color: OURO_INDICATOR, dimColor: true, children: `${belowCount} below` })) : null] }));
51
+ }