@ouro.bot/cli 0.1.0-alpha.61 → 0.1.0-alpha.612

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