@ouro.bot/cli 0.1.0-alpha.60 → 0.1.0-alpha.600

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 (420) 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 +3857 -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 +254 -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 +69 -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/awaiting/await-alert.js +146 -0
  36. package/dist/heart/awaiting/await-expiry.js +108 -0
  37. package/dist/heart/awaiting/await-loader.js +91 -0
  38. package/dist/heart/awaiting/await-parser.js +141 -0
  39. package/dist/heart/awaiting/await-runtime-state.js +97 -0
  40. package/dist/heart/awaiting/await-scheduler.js +377 -0
  41. package/dist/heart/background-operations.js +281 -0
  42. package/dist/heart/bundle-state.js +168 -0
  43. package/dist/heart/commitments.js +142 -0
  44. package/dist/heart/config-registry.js +322 -0
  45. package/dist/heart/config.js +114 -119
  46. package/dist/heart/core.js +909 -246
  47. package/dist/heart/cross-chat-delivery.js +3 -18
  48. package/dist/heart/daemon/agent-config-check.js +419 -0
  49. package/dist/heart/daemon/agent-discovery.js +102 -3
  50. package/dist/heart/daemon/agent-service.js +522 -0
  51. package/dist/heart/daemon/agentic-repair.js +547 -0
  52. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  53. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  54. package/dist/heart/daemon/cadence.js +70 -0
  55. package/dist/heart/daemon/cli-defaults.js +776 -0
  56. package/dist/heart/daemon/cli-exec.js +7571 -0
  57. package/dist/heart/daemon/cli-help.js +498 -0
  58. package/dist/heart/daemon/cli-parse.js +1599 -0
  59. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  60. package/dist/heart/daemon/cli-render.js +763 -0
  61. package/dist/heart/daemon/cli-types.js +8 -0
  62. package/dist/heart/daemon/connect-bay.js +323 -0
  63. package/dist/heart/daemon/daemon-cli.js +29 -1703
  64. package/dist/heart/daemon/daemon-entry.js +485 -2
  65. package/dist/heart/daemon/daemon-health.js +176 -0
  66. package/dist/heart/daemon/daemon-rollup.js +57 -0
  67. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  68. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  69. package/dist/heart/daemon/daemon.js +842 -69
  70. package/dist/heart/daemon/dns-workflow.js +394 -0
  71. package/dist/heart/daemon/doctor-types.js +8 -0
  72. package/dist/heart/daemon/doctor.js +873 -0
  73. package/dist/heart/daemon/health-monitor.js +122 -1
  74. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  75. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  76. package/dist/heart/daemon/http-health-probe.js +80 -0
  77. package/dist/heart/daemon/human-command-screens.js +234 -0
  78. package/dist/heart/daemon/human-readiness.js +114 -0
  79. package/dist/heart/daemon/inner-status.js +89 -0
  80. package/dist/heart/daemon/interactive-repair.js +394 -0
  81. package/dist/heart/daemon/launchd.js +37 -8
  82. package/dist/heart/daemon/log-tailer.js +78 -9
  83. package/dist/heart/daemon/logs-prune.js +110 -0
  84. package/dist/heart/daemon/mcp-canary.js +297 -0
  85. package/dist/heart/daemon/os-cron-deps.js +135 -0
  86. package/dist/heart/daemon/os-cron.js +14 -12
  87. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  88. package/dist/heart/daemon/ouro-entry.js +3 -1
  89. package/dist/heart/daemon/process-manager.js +375 -33
  90. package/dist/heart/daemon/provider-discovery.js +137 -0
  91. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  92. package/dist/heart/daemon/pulse.js +475 -0
  93. package/dist/heart/daemon/readiness-repair.js +365 -0
  94. package/dist/heart/daemon/run-hooks.js +2 -0
  95. package/dist/heart/daemon/runtime-logging.js +10 -2
  96. package/dist/heart/daemon/runtime-metadata.js +2 -30
  97. package/dist/heart/daemon/safe-mode.js +161 -0
  98. package/dist/heart/daemon/sense-manager.js +462 -38
  99. package/dist/heart/daemon/session-id-resolver.js +131 -0
  100. package/dist/heart/daemon/skill-management-installer.js +94 -0
  101. package/dist/heart/daemon/socket-client.js +158 -11
  102. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  103. package/dist/heart/daemon/startup-tui.js +330 -0
  104. package/dist/heart/daemon/task-scheduler.js +3 -25
  105. package/dist/heart/daemon/terminal-ui.js +499 -0
  106. package/dist/heart/daemon/thoughts.js +162 -17
  107. package/dist/heart/daemon/up-progress.js +366 -0
  108. package/dist/heart/daemon/vault-items.js +56 -0
  109. package/dist/heart/delegation.js +1 -1
  110. package/dist/heart/habits/habit-migration.js +189 -0
  111. package/dist/heart/habits/habit-parser.js +140 -0
  112. package/dist/heart/habits/habit-runtime-state.js +100 -0
  113. package/dist/heart/habits/habit-scheduler.js +372 -0
  114. package/dist/heart/{daemon → hatch}/hatch-flow.js +32 -56
  115. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  116. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  117. package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
  118. package/dist/heart/identity.js +166 -55
  119. package/dist/heart/kept-notes.js +357 -0
  120. package/dist/heart/kicks.js +1 -1
  121. package/dist/heart/machine-identity.js +161 -0
  122. package/dist/heart/mail-import-discovery.js +353 -0
  123. package/dist/heart/mailbox/mailbox-http-hooks.js +66 -0
  124. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  125. package/dist/heart/mailbox/mailbox-http-routes.js +246 -0
  126. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  127. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  128. package/dist/heart/mailbox/mailbox-http.js +99 -0
  129. package/dist/heart/mailbox/mailbox-read.js +31 -0
  130. package/dist/heart/mailbox/mailbox-types.js +27 -0
  131. package/dist/heart/mailbox/mailbox-view.js +195 -0
  132. package/dist/heart/mailbox/readers/agent-machine.js +382 -0
  133. package/dist/heart/mailbox/readers/continuity-readers.js +338 -0
  134. package/dist/heart/mailbox/readers/mail.js +367 -0
  135. package/dist/heart/mailbox/readers/runtime-readers.js +651 -0
  136. package/dist/heart/mailbox/readers/sessions.js +232 -0
  137. package/dist/heart/mailbox/readers/shared.js +111 -0
  138. package/dist/heart/mcp/mcp-server.js +656 -0
  139. package/dist/heart/migrate-config.js +100 -0
  140. package/dist/heart/model-capabilities.js +19 -0
  141. package/dist/heart/platform.js +81 -0
  142. package/dist/heart/provider-attempt.js +134 -0
  143. package/dist/heart/provider-binding-resolver.js +267 -0
  144. package/dist/heart/provider-credentials.js +425 -0
  145. package/dist/heart/provider-failover.js +301 -0
  146. package/dist/heart/provider-models.js +81 -0
  147. package/dist/heart/provider-ping.js +262 -0
  148. package/dist/heart/provider-readiness-cache.js +40 -0
  149. package/dist/heart/provider-visibility.js +188 -0
  150. package/dist/heart/providers/anthropic-token.js +131 -0
  151. package/dist/heart/providers/anthropic.js +139 -52
  152. package/dist/heart/providers/azure.js +23 -11
  153. package/dist/heart/providers/error-classification.js +127 -0
  154. package/dist/heart/providers/github-copilot.js +145 -0
  155. package/dist/heart/providers/minimax-vlm.js +189 -0
  156. package/dist/heart/providers/minimax.js +26 -8
  157. package/dist/heart/providers/openai-codex.js +55 -40
  158. package/dist/heart/runtime-capability-check.js +170 -0
  159. package/dist/heart/runtime-credentials.js +367 -0
  160. package/dist/heart/runtime-cwd.js +87 -0
  161. package/dist/heart/sense-truth.js +13 -4
  162. package/dist/heart/session-activity.js +43 -22
  163. package/dist/heart/session-events.js +1149 -0
  164. package/dist/heart/session-playback-cli-main.js +5 -0
  165. package/dist/heart/session-playback-cli.js +36 -0
  166. package/dist/heart/session-playback.js +231 -0
  167. package/dist/heart/session-stats-cli-main.js +5 -0
  168. package/dist/heart/session-stats.js +182 -0
  169. package/dist/heart/session-transcript.js +243 -0
  170. package/dist/heart/start-of-turn-packet.js +345 -0
  171. package/dist/heart/streaming.js +44 -27
  172. package/dist/heart/sync-classification.js +176 -0
  173. package/dist/heart/sync.js +449 -0
  174. package/dist/heart/target-resolution.js +9 -5
  175. package/dist/heart/tempo.js +93 -0
  176. package/dist/heart/temporal-view.js +41 -0
  177. package/dist/heart/timeouts.js +101 -0
  178. package/dist/heart/tool-activity-callbacks.js +59 -0
  179. package/dist/heart/tool-description.js +143 -0
  180. package/dist/heart/tool-friction.js +55 -0
  181. package/dist/heart/tool-loop.js +200 -0
  182. package/dist/heart/turn-context.js +421 -0
  183. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  184. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  185. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  186. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  187. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  188. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  189. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  190. package/dist/mailbox-ui/assets/index-B-461hes.js +61 -0
  191. package/dist/mailbox-ui/assets/index-BPr5vNuM.css +1 -0
  192. package/dist/mailbox-ui/index.html +15 -0
  193. package/dist/mailroom/attention.js +167 -0
  194. package/dist/mailroom/autonomy.js +209 -0
  195. package/dist/mailroom/blob-store.js +700 -0
  196. package/dist/mailroom/body-cache.js +61 -0
  197. package/dist/mailroom/core.js +788 -0
  198. package/dist/mailroom/entry.js +160 -0
  199. package/dist/mailroom/file-store.js +457 -0
  200. package/dist/mailroom/mbox-import.js +393 -0
  201. package/dist/mailroom/migration.js +164 -0
  202. package/dist/mailroom/outbound.js +380 -0
  203. package/dist/mailroom/policy.js +263 -0
  204. package/dist/mailroom/reader.js +233 -0
  205. package/dist/mailroom/search-cache.js +268 -0
  206. package/dist/mailroom/search-relevance.js +319 -0
  207. package/dist/mailroom/smtp-ingress.js +176 -0
  208. package/dist/mailroom/source-state.js +176 -0
  209. package/dist/mailroom/thread.js +109 -0
  210. package/dist/mailroom/travel-extract.js +89 -0
  211. package/dist/mind/bundle-manifest.js +7 -1
  212. package/dist/mind/context.js +165 -101
  213. package/dist/mind/diary-integrity.js +60 -0
  214. package/dist/mind/{memory.js → diary.js} +62 -75
  215. package/dist/mind/embedding-provider.js +60 -0
  216. package/dist/mind/file-state.js +179 -0
  217. package/dist/mind/friends/channel.js +39 -0
  218. package/dist/mind/friends/resolver.js +54 -2
  219. package/dist/mind/friends/store-file.js +39 -3
  220. package/dist/mind/friends/types.js +2 -2
  221. package/dist/mind/journal-index.js +161 -0
  222. package/dist/mind/note-search.js +268 -0
  223. package/dist/mind/obligation-steering.js +221 -0
  224. package/dist/mind/pending.js +4 -0
  225. package/dist/mind/prompt-refresh.js +3 -2
  226. package/dist/mind/prompt.js +1050 -135
  227. package/dist/mind/provenance-trust.js +26 -0
  228. package/dist/mind/scrutiny.js +173 -0
  229. package/dist/nerves/cli-logging.js +7 -1
  230. package/dist/nerves/coverage/audit-rules.js +15 -6
  231. package/dist/nerves/coverage/audit.js +28 -2
  232. package/dist/nerves/coverage/cli.js +1 -1
  233. package/dist/nerves/coverage/contract.js +5 -5
  234. package/dist/nerves/coverage/file-completeness.js +129 -5
  235. package/dist/nerves/event-buffer.js +111 -0
  236. package/dist/nerves/index.js +224 -4
  237. package/dist/nerves/observation.js +20 -0
  238. package/dist/nerves/redact.js +79 -0
  239. package/dist/nerves/review/cli-main.js +5 -0
  240. package/dist/nerves/review/cli.js +156 -0
  241. package/dist/nerves/review/core.js +152 -0
  242. package/dist/nerves/runtime.js +5 -1
  243. package/dist/repertoire/ado-client.js +15 -56
  244. package/dist/repertoire/ado-semantic.js +11 -10
  245. package/dist/repertoire/api-client.js +97 -0
  246. package/dist/repertoire/bitwarden-store.js +997 -0
  247. package/dist/repertoire/bundle-templates.js +72 -0
  248. package/dist/repertoire/bw-installer.js +180 -0
  249. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  250. package/dist/repertoire/coding/context-pack.js +330 -0
  251. package/dist/repertoire/coding/feedback.js +197 -30
  252. package/dist/repertoire/coding/manager.js +158 -9
  253. package/dist/repertoire/coding/spawner.js +55 -9
  254. package/dist/repertoire/coding/tools.js +170 -7
  255. package/dist/repertoire/commerce-errors.js +109 -0
  256. package/dist/repertoire/commerce-self-test.js +156 -0
  257. package/dist/repertoire/credential-access.js +178 -0
  258. package/dist/repertoire/duffel-client.js +185 -0
  259. package/dist/repertoire/github-client.js +14 -55
  260. package/dist/repertoire/graph-client.js +11 -52
  261. package/dist/repertoire/guardrails.js +396 -0
  262. package/dist/repertoire/mcp-client.js +295 -0
  263. package/dist/repertoire/mcp-manager.js +362 -0
  264. package/dist/repertoire/mcp-tools.js +63 -0
  265. package/dist/repertoire/shell-sessions.js +133 -0
  266. package/dist/repertoire/skills.js +15 -24
  267. package/dist/repertoire/stripe-client.js +131 -0
  268. package/dist/repertoire/tasks/board.js +31 -5
  269. package/dist/repertoire/tasks/fix.js +182 -0
  270. package/dist/repertoire/tasks/index.js +16 -4
  271. package/dist/repertoire/tasks/lifecycle.js +2 -2
  272. package/dist/repertoire/tasks/parser.js +3 -2
  273. package/dist/repertoire/tasks/scanner.js +194 -37
  274. package/dist/repertoire/tasks/transitions.js +16 -78
  275. package/dist/repertoire/tool-results.js +29 -0
  276. package/dist/repertoire/tools-attachments.js +317 -0
  277. package/dist/repertoire/tools-awaiting.js +360 -0
  278. package/dist/repertoire/tools-base.js +53 -1082
  279. package/dist/repertoire/tools-bluebubbles.js +1 -0
  280. package/dist/repertoire/tools-bridge.js +142 -0
  281. package/dist/repertoire/tools-bundle.js +984 -0
  282. package/dist/repertoire/tools-config.js +185 -0
  283. package/dist/repertoire/tools-continuity.js +248 -0
  284. package/dist/repertoire/tools-credential.js +381 -0
  285. package/dist/repertoire/tools-files.js +342 -0
  286. package/dist/repertoire/tools-flight.js +224 -0
  287. package/dist/repertoire/tools-flow.js +119 -0
  288. package/dist/repertoire/tools-github.js +1 -7
  289. package/dist/repertoire/tools-mail.js +1916 -0
  290. package/dist/repertoire/tools-notes.js +421 -0
  291. package/dist/repertoire/tools-obligations.js +142 -0
  292. package/dist/repertoire/tools-runtime.js +61 -0
  293. package/dist/repertoire/tools-session.js +809 -0
  294. package/dist/repertoire/tools-shell.js +120 -0
  295. package/dist/repertoire/tools-stripe.js +180 -0
  296. package/dist/repertoire/tools-surface.js +345 -0
  297. package/dist/repertoire/tools-teams.js +9 -39
  298. package/dist/repertoire/tools-travel.js +125 -0
  299. package/dist/repertoire/tools-trip.js +604 -0
  300. package/dist/repertoire/tools-user-profile.js +144 -0
  301. package/dist/repertoire/tools-vault.js +40 -0
  302. package/dist/repertoire/tools-voice.js +144 -0
  303. package/dist/repertoire/tools.js +115 -103
  304. package/dist/repertoire/travel-api-client.js +360 -0
  305. package/dist/repertoire/user-profile.js +131 -0
  306. package/dist/repertoire/vault-setup.js +246 -0
  307. package/dist/repertoire/vault-unlock.js +594 -0
  308. package/dist/scripts/claude-code-hook.js +41 -0
  309. package/dist/scripts/claude-code-stop-hook.js +47 -0
  310. package/dist/senses/attention-queue.js +116 -0
  311. package/dist/senses/await-turn-message.js +58 -0
  312. package/dist/senses/bluebubbles/active-turns.js +216 -0
  313. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  314. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  315. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
  316. package/dist/senses/bluebubbles/entry.js +77 -0
  317. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  318. package/dist/senses/bluebubbles/index.js +2548 -0
  319. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  320. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  321. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  322. package/dist/senses/bluebubbles/processed-log.js +133 -0
  323. package/dist/senses/bluebubbles/replay.js +137 -0
  324. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  325. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  326. package/dist/senses/bluebubbles-meta-guard.js +40 -0
  327. package/dist/senses/cli/bracketed-paste.js +82 -0
  328. package/dist/senses/cli/image-paste.js +287 -0
  329. package/dist/senses/cli/image-ref-navigation.js +75 -0
  330. package/dist/senses/cli/ink-app.js +156 -0
  331. package/dist/senses/cli/inline-diff.js +64 -0
  332. package/dist/senses/cli/input-keys.js +174 -0
  333. package/dist/senses/cli/kill-ring.js +86 -0
  334. package/dist/senses/cli/message-list.js +51 -0
  335. package/dist/senses/cli/ouro-tui.js +607 -0
  336. package/dist/senses/cli/spinner-imperative.js +135 -0
  337. package/dist/senses/cli/spinner.js +101 -0
  338. package/dist/senses/cli/status-line.js +60 -0
  339. package/dist/senses/cli/streaming-markdown.js +526 -0
  340. package/dist/senses/cli/tool-display.js +85 -0
  341. package/dist/senses/cli/tool-render.js +85 -0
  342. package/dist/senses/cli/tui-store.js +240 -0
  343. package/dist/senses/cli/virtual-list.js +35 -0
  344. package/dist/senses/cli-entry.js +60 -8
  345. package/dist/senses/cli-layout.js +100 -0
  346. package/dist/senses/cli.js +516 -204
  347. package/dist/senses/commands.js +66 -3
  348. package/dist/senses/habit-turn-message.js +108 -0
  349. package/dist/senses/inner-dialog-worker.js +185 -21
  350. package/dist/senses/inner-dialog.js +372 -27
  351. package/dist/senses/mail-entry.js +66 -0
  352. package/dist/senses/mail.js +379 -0
  353. package/dist/senses/pipeline.js +654 -181
  354. package/dist/senses/proactive-content-guard.js +51 -0
  355. package/dist/senses/shared-turn.js +392 -0
  356. package/dist/senses/surface-tool.js +70 -0
  357. package/dist/senses/teams-entry.js +60 -8
  358. package/dist/senses/teams.js +387 -98
  359. package/dist/senses/trust-gate.js +100 -5
  360. package/dist/senses/voice/audio-playback.js +237 -0
  361. package/dist/senses/voice/audio-routing.js +119 -0
  362. package/dist/senses/voice/elevenlabs.js +202 -0
  363. package/dist/senses/voice/floor-control.js +431 -0
  364. package/dist/senses/voice/floor-controller.js +115 -0
  365. package/dist/senses/voice/golden-path.js +116 -0
  366. package/dist/senses/voice/index.js +29 -0
  367. package/dist/senses/voice/meeting.js +113 -0
  368. package/dist/senses/voice/outbound.js +190 -0
  369. package/dist/senses/voice/phone.js +33 -0
  370. package/dist/senses/voice/playback.js +139 -0
  371. package/dist/senses/voice/realtime-eval.js +496 -0
  372. package/dist/senses/voice/realtime-trace.js +531 -0
  373. package/dist/senses/voice/transcript.js +70 -0
  374. package/dist/senses/voice/turn.js +191 -0
  375. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  376. package/dist/senses/voice/twilio-phone.js +5077 -0
  377. package/dist/senses/voice/types.js +2 -0
  378. package/dist/senses/voice/whisper.js +161 -0
  379. package/dist/senses/voice-entry.js +81 -0
  380. package/dist/senses/voice-realtime-eval-command.js +99 -0
  381. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  382. package/dist/senses/voice-twilio-entry.js +87 -0
  383. package/dist/trips/core.js +138 -0
  384. package/dist/trips/store.js +265 -0
  385. package/package.json +41 -7
  386. package/skills/agent-commerce.md +106 -0
  387. package/skills/browser-navigation.md +117 -0
  388. package/skills/commerce-setup-guide.md +116 -0
  389. package/skills/commerce-setup.md +84 -0
  390. package/skills/configure-dev-tools.md +99 -0
  391. package/skills/travel-planning.md +138 -0
  392. package/dist/heart/daemon/auth-flow.js +0 -351
  393. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  394. package/dist/heart/daemon/subagent-installer.js +0 -166
  395. package/dist/heart/safe-workspace.js +0 -228
  396. package/dist/heart/session-recall.js +0 -116
  397. package/dist/mind/associative-recall.js +0 -209
  398. package/dist/senses/bluebubbles-entry.js +0 -13
  399. package/dist/senses/bluebubbles.js +0 -1177
  400. package/dist/senses/debug-activity.js +0 -148
  401. package/subagents/README.md +0 -86
  402. package/subagents/work-doer.md +0 -237
  403. package/subagents/work-merger.md +0 -618
  404. package/subagents/work-planner.md +0 -390
  405. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  406. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  407. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  408. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  409. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  410. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  411. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  412. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  413. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  414. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  415. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  416. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  417. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  418. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  419. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  420. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,254 @@
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.isOpenObligationStatus = isOpenObligationStatus;
37
+ exports.isOpenObligation = isOpenObligation;
38
+ exports.createObligation = createObligation;
39
+ exports.readObligations = readObligations;
40
+ exports.readPendingObligations = readPendingObligations;
41
+ exports.advanceObligation = advanceObligation;
42
+ exports.fulfillObligation = fulfillObligation;
43
+ exports.findPendingObligationForOrigin = findPendingObligationForOrigin;
44
+ exports.enrichObligation = enrichObligation;
45
+ exports.generateObligationId = generateObligationId;
46
+ exports.getReturnObligationsDir = getReturnObligationsDir;
47
+ exports.createReturnObligation = createReturnObligation;
48
+ exports.readReturnObligation = readReturnObligation;
49
+ exports.advanceReturnObligation = advanceReturnObligation;
50
+ exports.listActiveReturnObligations = listActiveReturnObligations;
51
+ const path = __importStar(require("path"));
52
+ const identity_1 = require("../heart/identity");
53
+ const runtime_1 = require("../nerves/runtime");
54
+ const json_store_1 = require("./json-store");
55
+ function obligationsDir(agentRoot) {
56
+ return path.join(agentRoot, "arc", "obligations");
57
+ }
58
+ function isOpenObligationStatus(status) {
59
+ return status !== "fulfilled";
60
+ }
61
+ function isOpenObligation(obligation) {
62
+ return isOpenObligationStatus(obligation.status);
63
+ }
64
+ function createObligation(agentRoot, input) {
65
+ const now = new Date().toISOString();
66
+ const id = (0, json_store_1.generateTimestampId)();
67
+ const obligation = {
68
+ id,
69
+ origin: input.origin,
70
+ ...(input.bridgeId ? { bridgeId: input.bridgeId } : {}),
71
+ content: input.content,
72
+ status: "pending",
73
+ createdAt: now,
74
+ updatedAt: now,
75
+ };
76
+ (0, json_store_1.writeJsonFile)(obligationsDir(agentRoot), id, obligation);
77
+ (0, runtime_1.emitNervesEvent)({
78
+ component: "engine",
79
+ event: "engine.obligation_created",
80
+ message: "obligation created",
81
+ meta: {
82
+ obligationId: id,
83
+ friendId: input.origin.friendId,
84
+ channel: input.origin.channel,
85
+ key: input.origin.key,
86
+ },
87
+ });
88
+ return obligation;
89
+ }
90
+ function readObligations(agentRoot) {
91
+ const all = (0, json_store_1.readJsonDir)(obligationsDir(agentRoot));
92
+ return all.filter((parsed) => typeof parsed.id === "string" && typeof parsed.content === "string");
93
+ }
94
+ function readPendingObligations(agentRoot) {
95
+ return readObligations(agentRoot).filter(isOpenObligation);
96
+ }
97
+ function advanceObligation(agentRoot, obligationId, update) {
98
+ const dir = obligationsDir(agentRoot);
99
+ const obligation = (0, json_store_1.readJsonFile)(dir, obligationId);
100
+ if (!obligation)
101
+ return;
102
+ const previousStatus = obligation.status;
103
+ if (update.status) {
104
+ obligation.status = update.status;
105
+ if (update.status === "fulfilled") {
106
+ obligation.fulfilledAt = new Date().toISOString();
107
+ }
108
+ }
109
+ if (update.currentSurface) {
110
+ obligation.currentSurface = update.currentSurface;
111
+ }
112
+ if (typeof update.currentArtifact === "string") {
113
+ obligation.currentArtifact = update.currentArtifact;
114
+ }
115
+ if (typeof update.nextAction === "string") {
116
+ obligation.nextAction = update.nextAction;
117
+ }
118
+ if (typeof update.latestNote === "string") {
119
+ obligation.latestNote = update.latestNote;
120
+ }
121
+ obligation.updatedAt = new Date().toISOString();
122
+ (0, json_store_1.writeJsonFile)(dir, obligationId, obligation);
123
+ (0, runtime_1.emitNervesEvent)({
124
+ component: "engine",
125
+ event: "engine.obligation_advanced",
126
+ message: "obligation advanced",
127
+ meta: {
128
+ obligationId,
129
+ previousStatus,
130
+ status: obligation.status,
131
+ friendId: obligation.origin.friendId,
132
+ channel: obligation.origin.channel,
133
+ key: obligation.origin.key,
134
+ surfaceKind: obligation.currentSurface?.kind ?? null,
135
+ surfaceLabel: obligation.currentSurface?.label ?? null,
136
+ },
137
+ });
138
+ }
139
+ function fulfillObligation(agentRoot, obligationId) {
140
+ advanceObligation(agentRoot, obligationId, { status: "fulfilled" });
141
+ const obligation = (0, json_store_1.readJsonFile)(obligationsDir(agentRoot), obligationId);
142
+ if (!obligation)
143
+ return;
144
+ (0, runtime_1.emitNervesEvent)({
145
+ component: "engine",
146
+ event: "engine.obligation_fulfilled",
147
+ message: "obligation fulfilled",
148
+ meta: {
149
+ obligationId,
150
+ friendId: obligation.origin.friendId,
151
+ channel: obligation.origin.channel,
152
+ key: obligation.origin.key,
153
+ },
154
+ });
155
+ }
156
+ function findPendingObligationForOrigin(agentRoot, origin) {
157
+ return readPendingObligations(agentRoot).find((ob) => ob.origin.friendId === origin.friendId
158
+ && ob.origin.channel === origin.channel
159
+ && ob.origin.key === origin.key);
160
+ }
161
+ function enrichObligation(agentRoot, id, meaning) {
162
+ const dir = obligationsDir(agentRoot);
163
+ const existing = (0, json_store_1.readJsonFile)(dir, id);
164
+ if (!existing) {
165
+ throw new Error(`Obligation not found: ${id}`);
166
+ }
167
+ const obligation = existing;
168
+ obligation.meaning = meaning;
169
+ obligation.updatedAt = new Date().toISOString();
170
+ (0, json_store_1.writeJsonFile)(dir, id, obligation);
171
+ (0, runtime_1.emitNervesEvent)({
172
+ component: "engine",
173
+ event: "engine.obligation_enriched",
174
+ message: "obligation enriched with meaning",
175
+ meta: {
176
+ obligationId: id,
177
+ salience: meaning.salience,
178
+ stalenessClass: meaning.stalenessClass,
179
+ },
180
+ });
181
+ return obligation;
182
+ }
183
+ function generateObligationId(timestamp) {
184
+ return `${timestamp}-${Math.random().toString(36).slice(2, 10)}`;
185
+ }
186
+ function getReturnObligationsDir(agentName) {
187
+ return path.join((0, identity_1.getAgentRoot)(agentName), "arc", "obligations", "inner");
188
+ }
189
+ function createReturnObligation(agentName, obligation) {
190
+ const dir = getReturnObligationsDir(agentName);
191
+ (0, json_store_1.writeJsonFile)(dir, obligation.id, obligation);
192
+ const filePath = path.join(dir, `${obligation.id}.json`);
193
+ (0, runtime_1.emitNervesEvent)({
194
+ event: "mind.obligation_created",
195
+ component: "mind",
196
+ message: "return obligation created",
197
+ meta: {
198
+ obligationId: obligation.id,
199
+ origin: `${obligation.origin.friendId}/${obligation.origin.channel}/${obligation.origin.key}`,
200
+ status: obligation.status,
201
+ },
202
+ });
203
+ return filePath;
204
+ }
205
+ function readReturnObligation(agentName, obligationId) {
206
+ return (0, json_store_1.readJsonFile)(getReturnObligationsDir(agentName), obligationId);
207
+ }
208
+ function advanceReturnObligation(agentName, obligationId, update) {
209
+ const existing = readReturnObligation(agentName, obligationId);
210
+ if (!existing)
211
+ return null;
212
+ const updated = {
213
+ ...existing,
214
+ status: update.status,
215
+ ...(update.startedAt !== undefined ? { startedAt: update.startedAt } : {}),
216
+ ...(update.returnedAt !== undefined ? { returnedAt: update.returnedAt } : {}),
217
+ ...(update.returnTarget !== undefined ? { returnTarget: update.returnTarget } : {}),
218
+ };
219
+ (0, json_store_1.writeJsonFile)(getReturnObligationsDir(agentName), obligationId, updated);
220
+ (0, runtime_1.emitNervesEvent)({
221
+ event: "mind.obligation_advanced",
222
+ component: "mind",
223
+ message: `obligation advanced to ${update.status}`,
224
+ meta: {
225
+ obligationId,
226
+ status: update.status,
227
+ ...(update.returnTarget ? { returnTarget: update.returnTarget } : {}),
228
+ },
229
+ });
230
+ return updated;
231
+ }
232
+ // Inner return obligations that have been sitting in queued/running state
233
+ // longer than this are auto-pruned from the "held work items" injection.
234
+ // Anything older is overwhelmingly noise: the agent has had many turns to
235
+ // resolve them and has not, and reinjecting them every turn just burns
236
+ // attention without producing progress. The file stays on disk and can
237
+ // still be inspected or surfaced explicitly; it just no longer gets
238
+ // re-piped into the active prompt.
239
+ const RETURN_OBLIGATION_INJECTION_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1000;
240
+ // Strict allow-list of statuses that should appear in the "held work items"
241
+ // section. Anything else (including legacy/migrated `"fulfilled"` values left
242
+ // over from before the ObligationStatus → ReturnObligationStatus split, plus
243
+ // any future invalid value that slips past the `as any` casts at the
244
+ // surface-tool boundary) is treated as terminal — i.e., we do not re-inject
245
+ // it. This is a read-time defense; the underlying file is left as-is.
246
+ const ACTIVE_RETURN_OBLIGATION_STATUSES = new Set(["queued", "running"]);
247
+ function listActiveReturnObligations(agentName, options = {}) {
248
+ const all = (0, json_store_1.readJsonDir)(getReturnObligationsDir(agentName));
249
+ const nowMs = (options.now ?? Date.now)();
250
+ return all
251
+ .filter((parsed) => ACTIVE_RETURN_OBLIGATION_STATUSES.has(parsed.status))
252
+ .filter((parsed) => nowMs - parsed.createdAt <= RETURN_OBLIGATION_INJECTION_MAX_AGE_MS)
253
+ .sort((a, b) => a.createdAt - b.createdAt);
254
+ }
@@ -0,0 +1,193 @@
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.getPonderPacketArtifactsDir = getPonderPacketArtifactsDir;
37
+ exports.listPonderPackets = listPonderPackets;
38
+ exports.readPonderPacket = readPonderPacket;
39
+ exports.createPonderPacket = createPonderPacket;
40
+ exports.revisePonderPacket = revisePonderPacket;
41
+ exports.advancePonderPacket = advancePonderPacket;
42
+ exports.findHarnessFrictionPacket = findHarnessFrictionPacket;
43
+ const path = __importStar(require("path"));
44
+ const runtime_1 = require("../nerves/runtime");
45
+ const task_lifecycle_1 = require("./task-lifecycle");
46
+ const json_store_1 = require("./json-store");
47
+ function packetsDir(agentRoot) {
48
+ return path.join(agentRoot, "arc", "packets");
49
+ }
50
+ function getPonderPacketArtifactsDir(agentRoot, packetId) {
51
+ return path.join(agentRoot, "state", "packets", packetId);
52
+ }
53
+ function packetSop(kind) {
54
+ switch (kind) {
55
+ case "harness_friction":
56
+ return "harness_friction_v1";
57
+ case "research":
58
+ return "research_v1";
59
+ case "reflection":
60
+ return "reflection_v1";
61
+ }
62
+ }
63
+ function isPacketKind(value) {
64
+ return value === "harness_friction" || value === "research" || value === "reflection";
65
+ }
66
+ function isPonderPacket(value) {
67
+ if (!value || typeof value !== "object")
68
+ return false;
69
+ const packet = value;
70
+ return typeof packet.id === "string"
71
+ && isPacketKind(packet.kind)
72
+ && typeof packet.objective === "string"
73
+ && typeof packet.summary === "string"
74
+ && Array.isArray(packet.successCriteria)
75
+ && (0, task_lifecycle_1.isTaskStatus)(packet.status)
76
+ && typeof packet.createdAt === "number"
77
+ && typeof packet.updatedAt === "number";
78
+ }
79
+ function listPonderPackets(agentRoot) {
80
+ return (0, json_store_1.readJsonDir)(packetsDir(agentRoot))
81
+ .filter(isPonderPacket)
82
+ .sort((left, right) => left.createdAt - right.createdAt);
83
+ }
84
+ function readPonderPacket(agentRoot, packetId) {
85
+ const packet = (0, json_store_1.readJsonFile)(packetsDir(agentRoot), packetId);
86
+ return isPonderPacket(packet) ? packet : null;
87
+ }
88
+ function createPonderPacket(agentRoot, input) {
89
+ const now = Date.now();
90
+ const packet = {
91
+ id: (0, json_store_1.generateTimestampId)("pkt"),
92
+ kind: input.kind,
93
+ sop: packetSop(input.kind),
94
+ status: "drafting",
95
+ objective: input.objective,
96
+ summary: input.summary,
97
+ successCriteria: input.successCriteria,
98
+ ...(input.origin ? { origin: input.origin } : {}),
99
+ ...(input.relatedObligationId ? { relatedObligationId: input.relatedObligationId } : {}),
100
+ ...(input.relatedReturnObligationId ? { relatedReturnObligationId: input.relatedReturnObligationId } : {}),
101
+ ...(input.followsPacketId ? { followsPacketId: input.followsPacketId } : {}),
102
+ payload: input.payload,
103
+ createdAt: now,
104
+ updatedAt: now,
105
+ };
106
+ (0, json_store_1.writeJsonFile)(packetsDir(agentRoot), packet.id, packet);
107
+ (0, runtime_1.emitNervesEvent)({
108
+ component: "mind",
109
+ event: "mind.packet_created",
110
+ message: "ponder packet created",
111
+ meta: { packetId: packet.id, kind: packet.kind, status: packet.status },
112
+ });
113
+ return packet;
114
+ }
115
+ function revisePonderPacket(agentRoot, packetId, input) {
116
+ const existing = readPonderPacket(agentRoot, packetId);
117
+ if (!existing) {
118
+ throw new Error(`packet not found: ${packetId}`);
119
+ }
120
+ if (existing.status !== "drafting") {
121
+ throw new Error("packet is no longer drafting; file a follow-up packet instead");
122
+ }
123
+ const revised = {
124
+ ...existing,
125
+ kind: input.kind,
126
+ sop: packetSop(input.kind),
127
+ objective: input.objective,
128
+ summary: input.summary,
129
+ successCriteria: input.successCriteria,
130
+ payload: input.payload,
131
+ updatedAt: Date.now(),
132
+ };
133
+ (0, json_store_1.writeJsonFile)(packetsDir(agentRoot), packetId, revised);
134
+ (0, runtime_1.emitNervesEvent)({
135
+ component: "mind",
136
+ event: "mind.packet_revised",
137
+ message: "ponder packet revised",
138
+ meta: { packetId, kind: revised.kind, status: revised.status },
139
+ });
140
+ return revised;
141
+ }
142
+ function advancePonderPacket(agentRoot, packetId, update) {
143
+ const existing = readPonderPacket(agentRoot, packetId);
144
+ if (!existing) {
145
+ throw new Error(`packet not found: ${packetId}`);
146
+ }
147
+ const nextStatus = update.status ?? existing.status;
148
+ if (update.status) {
149
+ const transition = (0, task_lifecycle_1.validateTransition)(existing.status, update.status);
150
+ if (!transition.ok) {
151
+ throw new Error(transition.reason);
152
+ }
153
+ }
154
+ const advanced = {
155
+ ...existing,
156
+ status: nextStatus,
157
+ ...(update.relatedObligationId ? { relatedObligationId: update.relatedObligationId } : {}),
158
+ ...(update.relatedReturnObligationId ? { relatedReturnObligationId: update.relatedReturnObligationId } : {}),
159
+ updatedAt: Date.now(),
160
+ };
161
+ (0, json_store_1.writeJsonFile)(packetsDir(agentRoot), packetId, advanced);
162
+ (0, runtime_1.emitNervesEvent)({
163
+ component: "mind",
164
+ event: "mind.packet_advanced",
165
+ message: "ponder packet advanced",
166
+ meta: { packetId, status: advanced.status },
167
+ });
168
+ return advanced;
169
+ }
170
+ function findHarnessFrictionPacket(agentRoot, origin, frictionSignature) {
171
+ const found = listPonderPackets(agentRoot).find((packet) => {
172
+ if (packet.kind !== "harness_friction")
173
+ return false;
174
+ if (!packet.origin)
175
+ return false;
176
+ return packet.origin.friendId === origin.friendId
177
+ && packet.origin.channel === origin.channel
178
+ && packet.origin.key === origin.key
179
+ && packet.payload.frictionSignature === frictionSignature;
180
+ }) ?? null;
181
+ (0, runtime_1.emitNervesEvent)({
182
+ component: "mind",
183
+ event: "mind.packet_lookup",
184
+ message: "ponder packet lookup completed",
185
+ meta: {
186
+ kind: "harness_friction",
187
+ found: found !== null,
188
+ origin: `${origin.friendId}/${origin.channel}/${origin.key}`,
189
+ frictionSignature,
190
+ },
191
+ });
192
+ return found;
193
+ }
@@ -0,0 +1,185 @@
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.derivePresence = derivePresence;
37
+ exports.writePresence = writePresence;
38
+ exports.readPresence = readPresence;
39
+ exports.readPeerPresence = readPeerPresence;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const runtime_1 = require("../nerves/runtime");
43
+ function presenceDir(agentRoot) {
44
+ return path.join(agentRoot, "state", "presence");
45
+ }
46
+ function deriveAvailability(inputs) {
47
+ if (inputs.currentTempo === "crisis")
48
+ return "dnd";
49
+ if (inputs.activeSessions > 0)
50
+ return "active";
51
+ if (inputs.openObligations > 0)
52
+ return "idle";
53
+ return "away";
54
+ }
55
+ function deriveLane(inputs) {
56
+ const hasCoding = inputs.codingLanes > 0;
57
+ const hasBridges = inputs.activeBridges > 0;
58
+ if (hasCoding && hasBridges)
59
+ return "mixed";
60
+ if (hasCoding)
61
+ return "coding";
62
+ if (hasBridges)
63
+ return "conversation";
64
+ return "idle";
65
+ }
66
+ function deriveMission(inputs) {
67
+ const parts = [];
68
+ if (inputs.openObligations > 0) {
69
+ parts.push(`${inputs.openObligations} open obligation${inputs.openObligations !== 1 ? "s" : ""}`);
70
+ }
71
+ if (inputs.activeBridges > 0) {
72
+ parts.push(`${inputs.activeBridges} active bridge${inputs.activeBridges !== 1 ? "s" : ""}`);
73
+ }
74
+ if (inputs.codingLanes > 0) {
75
+ parts.push(`${inputs.codingLanes} coding lane${inputs.codingLanes !== 1 ? "s" : ""}`);
76
+ }
77
+ if (parts.length === 0)
78
+ return "no active work";
79
+ return parts.join(", ");
80
+ }
81
+ function derivePresence(_agentRoot, agentName, inputs) {
82
+ const presence = {
83
+ agentName,
84
+ availability: deriveAvailability(inputs),
85
+ lane: deriveLane(inputs),
86
+ mission: deriveMission(inputs),
87
+ tempo: inputs.currentTempo,
88
+ updatedAt: new Date().toISOString(),
89
+ };
90
+ (0, runtime_1.emitNervesEvent)({
91
+ component: "heart",
92
+ event: "heart.presence_derived",
93
+ message: `presence derived: ${presence.availability}/${presence.lane}`,
94
+ meta: {
95
+ agentName,
96
+ availability: presence.availability,
97
+ lane: presence.lane,
98
+ tempo: presence.tempo,
99
+ },
100
+ });
101
+ return presence;
102
+ }
103
+ function writePresence(agentRoot, _agentName, presence) {
104
+ const dir = presenceDir(agentRoot);
105
+ fs.mkdirSync(dir, { recursive: true });
106
+ fs.writeFileSync(path.join(dir, "self.json"), JSON.stringify(presence, null, 2), "utf-8");
107
+ (0, runtime_1.emitNervesEvent)({
108
+ component: "heart",
109
+ event: "heart.presence_written",
110
+ message: `presence written for ${presence.agentName}`,
111
+ meta: { agentName: presence.agentName },
112
+ });
113
+ }
114
+ function readPresence(agentRoot, _agentName) {
115
+ const filePath = path.join(presenceDir(agentRoot), "self.json");
116
+ if (!fs.existsSync(filePath)) {
117
+ (0, runtime_1.emitNervesEvent)({
118
+ component: "heart",
119
+ event: "heart.presence_read",
120
+ message: "presence file not found",
121
+ meta: { found: false },
122
+ });
123
+ return null;
124
+ }
125
+ try {
126
+ const raw = fs.readFileSync(filePath, "utf-8");
127
+ const presence = JSON.parse(raw);
128
+ (0, runtime_1.emitNervesEvent)({
129
+ component: "heart",
130
+ event: "heart.presence_read",
131
+ message: `presence read: ${presence.availability}`,
132
+ meta: { agentName: presence.agentName, found: true },
133
+ });
134
+ return presence;
135
+ }
136
+ catch {
137
+ (0, runtime_1.emitNervesEvent)({
138
+ component: "heart",
139
+ event: "heart.presence_read_error",
140
+ message: "failed to read presence file",
141
+ meta: { error: "parse error" },
142
+ });
143
+ return null;
144
+ }
145
+ }
146
+ function readPeerPresence(agentRoot) {
147
+ const friendsDir = path.join(agentRoot, "friends");
148
+ if (!fs.existsSync(friendsDir)) {
149
+ (0, runtime_1.emitNervesEvent)({
150
+ component: "heart",
151
+ event: "heart.peer_presence_read",
152
+ message: "no friends directory, no peers",
153
+ meta: { peerCount: 0 },
154
+ });
155
+ return [];
156
+ }
157
+ const files = fs.readdirSync(friendsDir).filter((f) => f.endsWith(".json"));
158
+ const peers = [];
159
+ for (const file of files) {
160
+ try {
161
+ const raw = fs.readFileSync(path.join(friendsDir, file), "utf-8");
162
+ const friend = JSON.parse(raw);
163
+ if (friend.kind !== "agent")
164
+ continue;
165
+ peers.push({
166
+ agentName: friend.name ?? path.basename(file, ".json"),
167
+ availability: "idle",
168
+ lane: "idle",
169
+ mission: "",
170
+ tempo: "brief",
171
+ updatedAt: friend.updatedAt ?? new Date().toISOString(),
172
+ });
173
+ }
174
+ catch {
175
+ // Skip malformed or unreadable files
176
+ }
177
+ }
178
+ (0, runtime_1.emitNervesEvent)({
179
+ component: "heart",
180
+ event: "heart.peer_presence_read",
181
+ message: `read ${peers.length} agent peer records from friends`,
182
+ meta: { peerCount: peers.length },
183
+ });
184
+ return peers;
185
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TASK_STATUS_TRANSITIONS = exports.TASK_VALID_STATUSES = void 0;
4
+ exports.isTaskStatus = isTaskStatus;
5
+ exports.normalizeTaskStatus = normalizeTaskStatus;
6
+ exports.validateTransition = validateTransition;
7
+ exports.renderTaskTransitionLines = renderTaskTransitionLines;
8
+ const runtime_1 = require("../nerves/runtime");
9
+ exports.TASK_VALID_STATUSES = [
10
+ "drafting",
11
+ "processing",
12
+ "validating",
13
+ "collaborating",
14
+ "paused",
15
+ "blocked",
16
+ "done",
17
+ "cancelled",
18
+ ];
19
+ exports.TASK_STATUS_TRANSITIONS = {
20
+ drafting: ["processing", "collaborating", "cancelled"],
21
+ processing: ["validating", "paused", "blocked", "cancelled"],
22
+ validating: ["done", "processing", "collaborating", "cancelled"],
23
+ collaborating: ["processing", "validating", "paused", "cancelled"],
24
+ paused: ["processing", "blocked", "cancelled"],
25
+ blocked: ["processing", "paused", "cancelled"],
26
+ done: [],
27
+ cancelled: [],
28
+ };
29
+ function isTaskStatus(value) {
30
+ return exports.TASK_VALID_STATUSES.includes(value);
31
+ }
32
+ function normalizeTaskStatus(value) {
33
+ if (typeof value !== "string")
34
+ return null;
35
+ const normalized = value.trim().toLowerCase();
36
+ return isTaskStatus(normalized) ? normalized : null;
37
+ }
38
+ function validateTransition(from, to) {
39
+ (0, runtime_1.emitNervesEvent)({
40
+ event: "mind.step_start",
41
+ component: "mind",
42
+ message: "validating task status transition",
43
+ meta: { from, to },
44
+ });
45
+ if (from === to) {
46
+ return { ok: true, from, to };
47
+ }
48
+ const allowed = exports.TASK_STATUS_TRANSITIONS[from];
49
+ if (!allowed.includes(to)) {
50
+ return {
51
+ ok: false,
52
+ from,
53
+ to,
54
+ reason: `invalid transition: ${from} -> ${to}`,
55
+ };
56
+ }
57
+ return { ok: true, from, to };
58
+ }
59
+ function renderTaskTransitionLines() {
60
+ return exports.TASK_VALID_STATUSES.map((from) => {
61
+ const to = exports.TASK_STATUS_TRANSITIONS[from];
62
+ const rendered = to.length > 0 ? to.map((next) => `\`${next}\``).join(", ") : "(terminal)";
63
+ return `- \`${from}\` -> ${rendered}`;
64
+ });
65
+ }