@ouro.bot/cli 0.1.0-alpha.69 → 0.1.0-alpha.690

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 (480) hide show
  1. package/README.md +133 -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 +4392 -14
  13. package/dist/a2a/card.js +57 -0
  14. package/dist/a2a/client.js +180 -0
  15. package/dist/a2a/config.js +50 -0
  16. package/dist/a2a/delegation-stores.js +56 -0
  17. package/dist/a2a/did-resolution.js +93 -0
  18. package/dist/a2a/identity.js +170 -0
  19. package/dist/a2a/inbound-share.js +107 -0
  20. package/dist/a2a/mission-result-wire.js +196 -0
  21. package/dist/a2a/onboarding.js +115 -0
  22. package/dist/a2a/pin-store.js +132 -0
  23. package/dist/a2a/seen-ledger.js +120 -0
  24. package/dist/a2a/server.js +604 -0
  25. package/dist/a2a/task-store.js +69 -0
  26. package/dist/a2a/transport.js +45 -0
  27. package/dist/a2a/types.js +3 -0
  28. package/dist/arc/attention-types.js +8 -0
  29. package/dist/arc/cares.js +144 -0
  30. package/dist/arc/episodes.js +118 -0
  31. package/dist/arc/evolution.js +490 -0
  32. package/dist/arc/flight-recorder.js +810 -0
  33. package/dist/arc/intentions.js +134 -0
  34. package/dist/arc/json-store.js +117 -0
  35. package/dist/arc/obligations.js +326 -0
  36. package/dist/arc/packets.js +288 -0
  37. package/dist/arc/presence.js +185 -0
  38. package/dist/arc/task-lifecycle.js +57 -0
  39. package/dist/commerce/store.js +755 -0
  40. package/dist/commerce/types.js +3 -0
  41. package/dist/heart/active-work.js +867 -43
  42. package/dist/heart/agent-entry.js +160 -3
  43. package/dist/heart/attachments/image-normalize.js +194 -0
  44. package/dist/heart/attachments/materialize.js +97 -0
  45. package/dist/heart/attachments/originals.js +88 -0
  46. package/dist/heart/attachments/render.js +29 -0
  47. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  48. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  49. package/dist/heart/attachments/sources/index.js +16 -0
  50. package/dist/heart/attachments/store.js +103 -0
  51. package/dist/heart/attachments/types.js +93 -0
  52. package/dist/heart/auth/auth-flow.js +479 -0
  53. package/dist/heart/awaiting/await-alert.js +146 -0
  54. package/dist/heart/awaiting/await-expiry.js +108 -0
  55. package/dist/heart/awaiting/await-loader.js +91 -0
  56. package/dist/heart/awaiting/await-parser.js +141 -0
  57. package/dist/heart/awaiting/await-runtime-state.js +100 -0
  58. package/dist/heart/awaiting/await-scheduler.js +378 -0
  59. package/dist/heart/background-operations.js +281 -0
  60. package/dist/heart/bridges/manager.js +137 -17
  61. package/dist/heart/bridges/store.js +14 -2
  62. package/dist/heart/bundle-state.js +168 -0
  63. package/dist/heart/commitments.js +135 -0
  64. package/dist/heart/config-registry.js +331 -0
  65. package/dist/heart/config.js +122 -119
  66. package/dist/heart/context-loss-gauntlet.js +354 -0
  67. package/dist/heart/context-loss-sentinel.js +946 -0
  68. package/dist/heart/core.js +1297 -269
  69. package/dist/heart/cross-chat-delivery.js +8 -22
  70. package/dist/heart/daemon/agent-config-check.js +451 -0
  71. package/dist/heart/daemon/agent-discovery.js +185 -3
  72. package/dist/heart/daemon/agent-service.js +523 -0
  73. package/dist/heart/daemon/agentic-repair.js +547 -0
  74. package/dist/heart/daemon/await-private-wake.js +59 -0
  75. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  76. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  77. package/dist/heart/daemon/cadence.js +70 -0
  78. package/dist/heart/daemon/cli-defaults.js +780 -0
  79. package/dist/heart/daemon/cli-desk.js +322 -0
  80. package/dist/heart/daemon/cli-exec.js +8100 -0
  81. package/dist/heart/daemon/cli-help.js +601 -0
  82. package/dist/heart/daemon/cli-parse.js +1995 -0
  83. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  84. package/dist/heart/daemon/cli-render.js +770 -0
  85. package/dist/heart/daemon/cli-types.js +8 -0
  86. package/dist/heart/daemon/connect-bay.js +323 -0
  87. package/dist/heart/daemon/daemon-cli.js +29 -1814
  88. package/dist/heart/daemon/daemon-entry.js +668 -6
  89. package/dist/heart/daemon/daemon-health.js +176 -0
  90. package/dist/heart/daemon/daemon-rollup.js +57 -0
  91. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  92. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  93. package/dist/heart/daemon/daemon.js +1222 -84
  94. package/dist/heart/daemon/dns-workflow.js +394 -0
  95. package/dist/heart/daemon/doctor-types.js +8 -0
  96. package/dist/heart/daemon/doctor.js +873 -0
  97. package/dist/heart/daemon/habit-private-wake.js +56 -0
  98. package/dist/heart/daemon/health-monitor.js +131 -3
  99. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  100. package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
  101. package/dist/heart/daemon/http-health-probe.js +80 -0
  102. package/dist/heart/daemon/human-command-screens.js +234 -0
  103. package/dist/heart/daemon/human-readiness.js +114 -0
  104. package/dist/heart/daemon/inner-status.js +78 -0
  105. package/dist/heart/daemon/interactive-repair.js +394 -0
  106. package/dist/heart/daemon/launchd.js +37 -8
  107. package/dist/heart/daemon/log-tailer.js +79 -10
  108. package/dist/heart/daemon/logs-prune.js +110 -0
  109. package/dist/heart/daemon/mcp-canary.js +297 -0
  110. package/dist/heart/daemon/message-router.js +45 -5
  111. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  112. package/dist/heart/daemon/os-cron-deps.js +135 -0
  113. package/dist/heart/daemon/os-cron.js +14 -12
  114. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  115. package/dist/heart/daemon/ouro-entry.js +3 -1
  116. package/dist/heart/daemon/plugin-cli.js +432 -0
  117. package/dist/heart/daemon/process-manager.js +519 -40
  118. package/dist/heart/daemon/provider-discovery.js +137 -0
  119. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  120. package/dist/heart/daemon/pulse.js +511 -0
  121. package/dist/heart/daemon/readiness-repair.js +365 -0
  122. package/dist/heart/daemon/run-hooks.js +2 -0
  123. package/dist/heart/daemon/runtime-logging.js +41 -14
  124. package/dist/heart/daemon/runtime-metadata.js +2 -30
  125. package/dist/heart/daemon/safe-mode.js +161 -0
  126. package/dist/heart/daemon/sense-manager.js +583 -43
  127. package/dist/heart/daemon/session-id-resolver.js +131 -0
  128. package/dist/heart/daemon/skill-management-installer.js +1 -1
  129. package/dist/heart/daemon/socket-client.js +171 -12
  130. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  131. package/dist/heart/daemon/startup-tui.js +338 -0
  132. package/dist/heart/daemon/task-scheduler.js +117 -39
  133. package/dist/heart/daemon/terminal-ui.js +499 -0
  134. package/dist/heart/daemon/thoughts.js +255 -43
  135. package/dist/heart/daemon/up-progress.js +366 -0
  136. package/dist/heart/daemon/vault-items.js +56 -0
  137. package/dist/heart/delegation.js +1 -4
  138. package/dist/heart/external-events/router.js +121 -0
  139. package/dist/heart/habits/habit-migration.js +189 -0
  140. package/dist/heart/habits/habit-parser.js +211 -0
  141. package/dist/heart/habits/habit-runtime-state.js +114 -0
  142. package/dist/heart/habits/habit-scheduler.js +411 -0
  143. package/dist/heart/habits/habit-session-summary.js +318 -0
  144. package/dist/heart/habits/habit-session.js +618 -0
  145. package/dist/heart/{daemon → hatch}/hatch-flow.js +51 -57
  146. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  147. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  148. package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
  149. package/dist/heart/identity.js +174 -58
  150. package/dist/heart/kept-notes.js +289 -0
  151. package/dist/heart/kicks.js +1 -1
  152. package/dist/heart/machine-identity.js +161 -0
  153. package/dist/heart/mail-import-discovery.js +353 -0
  154. package/dist/heart/mailbox/mailbox-http-hooks.js +96 -0
  155. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  156. package/dist/heart/mailbox/mailbox-http-routes.js +375 -0
  157. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  158. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  159. package/dist/heart/mailbox/mailbox-http.js +99 -0
  160. package/dist/heart/mailbox/mailbox-read.js +37 -0
  161. package/dist/heart/mailbox/mailbox-types.js +27 -0
  162. package/dist/heart/mailbox/mailbox-view.js +197 -0
  163. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  164. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  165. package/dist/heart/mailbox/readers/mail.js +375 -0
  166. package/dist/heart/mailbox/readers/runtime-readers.js +815 -0
  167. package/dist/heart/mailbox/readers/sessions.js +232 -0
  168. package/dist/heart/mailbox/readers/shared.js +111 -0
  169. package/dist/heart/mcp/mcp-server.js +696 -0
  170. package/dist/heart/migrate-config.js +100 -0
  171. package/dist/heart/model-capabilities.js +19 -0
  172. package/dist/heart/orientation-frame.js +217 -0
  173. package/dist/heart/platform.js +81 -0
  174. package/dist/heart/primitives.js +1 -1
  175. package/dist/heart/private-runtime/decision-renderer.js +156 -0
  176. package/dist/heart/private-runtime/index.js +18 -0
  177. package/dist/heart/private-runtime/ledger.js +218 -0
  178. package/dist/heart/private-runtime/policy.js +214 -0
  179. package/dist/heart/private-runtime/types.js +2 -0
  180. package/dist/heart/progress-story.js +1 -1
  181. package/dist/heart/provider-attempt.js +134 -0
  182. package/dist/heart/provider-binding-resolver.js +273 -0
  183. package/dist/heart/provider-credentials.js +425 -0
  184. package/dist/heart/provider-failover.js +311 -0
  185. package/dist/heart/provider-models.js +81 -0
  186. package/dist/heart/provider-ping.js +262 -0
  187. package/dist/heart/provider-readiness-cache.js +119 -0
  188. package/dist/heart/provider-visibility.js +188 -0
  189. package/dist/heart/providers/anthropic-token.js +131 -0
  190. package/dist/heart/providers/anthropic.js +139 -52
  191. package/dist/heart/providers/azure.js +23 -11
  192. package/dist/heart/providers/error-classification.js +127 -0
  193. package/dist/heart/providers/github-copilot.js +145 -0
  194. package/dist/heart/providers/minimax-vlm.js +189 -0
  195. package/dist/heart/providers/minimax.js +26 -8
  196. package/dist/heart/providers/openai-codex-token.js +349 -0
  197. package/dist/heart/providers/openai-codex.js +55 -40
  198. package/dist/heart/runtime-capability-check.js +170 -0
  199. package/dist/heart/runtime-credentials.js +389 -0
  200. package/dist/heart/runtime-cwd.js +87 -0
  201. package/dist/heart/sense-truth.js +17 -4
  202. package/dist/heart/session-activity.js +90 -24
  203. package/dist/heart/session-events.js +1133 -0
  204. package/dist/heart/session-playback-cli-main.js +5 -0
  205. package/dist/heart/session-playback-cli.js +36 -0
  206. package/dist/heart/session-playback.js +231 -0
  207. package/dist/heart/session-stats-cli-main.js +5 -0
  208. package/dist/heart/session-stats.js +182 -0
  209. package/dist/heart/session-transcript.js +133 -0
  210. package/dist/heart/start-of-turn-packet.js +365 -0
  211. package/dist/heart/streaming.js +44 -27
  212. package/dist/heart/structured-output.js +196 -0
  213. package/dist/heart/sync-classification.js +176 -0
  214. package/dist/heart/sync.js +449 -0
  215. package/dist/heart/target-resolution.js +11 -7
  216. package/dist/heart/tempo.js +93 -0
  217. package/dist/heart/temporal-view.js +41 -0
  218. package/dist/heart/timeouts.js +101 -0
  219. package/dist/heart/tool-activity-callbacks.js +59 -0
  220. package/dist/heart/tool-description.js +155 -0
  221. package/dist/heart/tool-friction.js +55 -0
  222. package/dist/heart/tool-loop.js +200 -0
  223. package/dist/heart/turn-context.js +450 -0
  224. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  225. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  226. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  227. package/dist/heart/versioning/ouro-version-manager.js +409 -0
  228. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  229. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  230. package/dist/heart/versioning/update-hooks.js +154 -0
  231. package/dist/heart/work-card.js +390 -0
  232. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  233. package/dist/mailbox-ui/assets/index-J8zDwHmE.js +1 -0
  234. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  235. package/dist/mailbox-ui/index.html +16 -0
  236. package/dist/mailroom/attention.js +167 -0
  237. package/dist/mailroom/autonomy.js +209 -0
  238. package/dist/mailroom/blob-store.js +715 -0
  239. package/dist/mailroom/body-cache.js +61 -0
  240. package/dist/mailroom/core.js +788 -0
  241. package/dist/mailroom/entry.js +160 -0
  242. package/dist/mailroom/file-store.js +568 -0
  243. package/dist/mailroom/mbox-import.js +393 -0
  244. package/dist/mailroom/migration.js +164 -0
  245. package/dist/mailroom/outbound.js +380 -0
  246. package/dist/mailroom/policy.js +263 -0
  247. package/dist/mailroom/reader.js +233 -0
  248. package/dist/mailroom/search-cache.js +334 -0
  249. package/dist/mailroom/search-relevance.js +319 -0
  250. package/dist/mailroom/smtp-ingress.js +176 -0
  251. package/dist/mailroom/source-state.js +176 -0
  252. package/dist/mailroom/thread.js +109 -0
  253. package/dist/mailroom/travel-extract.js +89 -0
  254. package/dist/mind/bundle-manifest.js +24 -2
  255. package/dist/mind/context.js +250 -101
  256. package/dist/mind/desk-section.js +362 -0
  257. package/dist/mind/diary-integrity.js +60 -0
  258. package/dist/mind/{memory.js → diary.js} +68 -77
  259. package/dist/mind/embedding-provider.js +60 -0
  260. package/dist/mind/file-state.js +179 -0
  261. package/dist/mind/{associative-recall.js → note-search.js} +47 -58
  262. package/dist/mind/obligation-steering.js +221 -0
  263. package/dist/mind/pending.js +13 -8
  264. package/dist/mind/prompt-refresh.js +3 -2
  265. package/dist/mind/prompt.js +1009 -169
  266. package/dist/mind/provenance-trust.js +26 -0
  267. package/dist/mind/record-paths.js +312 -0
  268. package/dist/mind/scrutiny.js +173 -0
  269. package/dist/nerves/cli-logging.js +7 -1
  270. package/dist/nerves/coverage/audit-rules.js +15 -6
  271. package/dist/nerves/coverage/audit.js +28 -2
  272. package/dist/nerves/coverage/cli.js +1 -1
  273. package/dist/nerves/coverage/contract.js +5 -5
  274. package/dist/nerves/coverage/file-completeness.js +139 -5
  275. package/dist/nerves/event-buffer.js +111 -0
  276. package/dist/nerves/index.js +224 -4
  277. package/dist/nerves/observation.js +20 -0
  278. package/dist/nerves/redact.js +79 -0
  279. package/dist/nerves/review/cli-main.js +5 -0
  280. package/dist/nerves/review/cli.js +156 -0
  281. package/dist/nerves/review/core.js +152 -0
  282. package/dist/nerves/runtime.js +5 -1
  283. package/dist/repertoire/ado-client.js +15 -56
  284. package/dist/repertoire/ado-semantic.js +16 -10
  285. package/dist/repertoire/api-client.js +97 -0
  286. package/dist/repertoire/bitwarden-store.js +1042 -0
  287. package/dist/repertoire/bundle-templates.js +71 -0
  288. package/dist/repertoire/bw-installer.js +180 -0
  289. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  290. package/dist/repertoire/coding/context-pack.js +331 -0
  291. package/dist/repertoire/coding/feedback.js +218 -30
  292. package/dist/repertoire/coding/index.js +15 -3
  293. package/dist/repertoire/coding/manager.js +166 -10
  294. package/dist/repertoire/coding/spawner.js +58 -11
  295. package/dist/repertoire/coding/tools.js +242 -14
  296. package/dist/repertoire/coding/workbench-client.js +272 -0
  297. package/dist/repertoire/coding/workbench-manager.js +346 -0
  298. package/dist/repertoire/commerce-errors.js +109 -0
  299. package/dist/repertoire/commerce-self-test.js +156 -0
  300. package/dist/repertoire/credential-access.js +178 -0
  301. package/dist/repertoire/desk/classifier.js +362 -0
  302. package/dist/repertoire/duffel-client.js +185 -0
  303. package/dist/repertoire/github-client.js +14 -55
  304. package/dist/repertoire/graph-client.js +11 -52
  305. package/dist/repertoire/guardrails.js +159 -27
  306. package/dist/repertoire/mcp-client.js +44 -3
  307. package/dist/repertoire/mcp-manager.js +259 -20
  308. package/dist/repertoire/mcp-tools.js +83 -0
  309. package/dist/repertoire/plugin-mcp.js +175 -0
  310. package/dist/repertoire/plugins.js +253 -0
  311. package/dist/repertoire/shell-sessions.js +133 -0
  312. package/dist/repertoire/skills.js +48 -4
  313. package/dist/repertoire/stripe-client.js +131 -0
  314. package/dist/repertoire/tool-results.js +29 -0
  315. package/dist/repertoire/tools-a2a.js +699 -0
  316. package/dist/repertoire/tools-attachments.js +317 -0
  317. package/dist/repertoire/tools-awaiting.js +372 -0
  318. package/dist/repertoire/tools-base.js +63 -1095
  319. package/dist/repertoire/tools-bluebubbles.js +2 -0
  320. package/dist/repertoire/tools-bridge.js +144 -0
  321. package/dist/repertoire/tools-bundle.js +993 -0
  322. package/dist/repertoire/tools-commerce.js +253 -0
  323. package/dist/repertoire/tools-config.js +186 -0
  324. package/dist/repertoire/tools-continuity.js +252 -0
  325. package/dist/repertoire/tools-credential.js +383 -0
  326. package/dist/repertoire/tools-evolution.js +527 -0
  327. package/dist/repertoire/tools-files.js +344 -0
  328. package/dist/repertoire/tools-flight.js +290 -0
  329. package/dist/repertoire/tools-flow.js +119 -0
  330. package/dist/repertoire/tools-github.js +3 -8
  331. package/dist/repertoire/tools-mail.js +1975 -0
  332. package/dist/repertoire/tools-notes.js +459 -0
  333. package/dist/repertoire/tools-obligations.js +143 -0
  334. package/dist/repertoire/tools-orientation.js +31 -0
  335. package/dist/repertoire/tools-record.js +482 -0
  336. package/dist/repertoire/tools-runtime.js +150 -0
  337. package/dist/repertoire/tools-session.js +881 -0
  338. package/dist/repertoire/tools-shell.js +120 -0
  339. package/dist/repertoire/tools-stripe.js +224 -0
  340. package/dist/repertoire/tools-surface.js +355 -0
  341. package/dist/repertoire/tools-teams.js +12 -39
  342. package/dist/repertoire/tools-travel.js +125 -0
  343. package/dist/repertoire/tools-trip.js +982 -0
  344. package/dist/repertoire/tools-user-profile.js +146 -0
  345. package/dist/repertoire/tools-vault.js +40 -0
  346. package/dist/repertoire/tools-voice.js +145 -0
  347. package/dist/repertoire/tools.js +250 -80
  348. package/dist/repertoire/travel-api-client.js +360 -0
  349. package/dist/repertoire/user-profile.js +131 -0
  350. package/dist/repertoire/vault-setup.js +246 -0
  351. package/dist/repertoire/vault-unlock.js +594 -0
  352. package/dist/scripts/claude-code-hook.js +41 -0
  353. package/dist/scripts/claude-code-stop-hook.js +47 -0
  354. package/dist/senses/a2a-entry.js +115 -0
  355. package/dist/senses/attention-queue.js +186 -0
  356. package/dist/senses/await-turn-message.js +58 -0
  357. package/dist/senses/bluebubbles/active-turns.js +216 -0
  358. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  359. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  360. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
  361. package/dist/senses/bluebubbles/entry.js +77 -0
  362. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  363. package/dist/senses/bluebubbles/index.js +2732 -0
  364. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  365. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  366. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  367. package/dist/senses/bluebubbles/processed-log.js +133 -0
  368. package/dist/senses/bluebubbles/replay.js +137 -0
  369. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  370. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  371. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  372. package/dist/senses/cli/bracketed-paste.js +82 -0
  373. package/dist/senses/cli/image-paste.js +287 -0
  374. package/dist/senses/cli/image-ref-navigation.js +75 -0
  375. package/dist/senses/cli/ink-app.js +156 -0
  376. package/dist/senses/cli/inline-diff.js +64 -0
  377. package/dist/senses/cli/input-keys.js +174 -0
  378. package/dist/senses/cli/kill-ring.js +86 -0
  379. package/dist/senses/cli/message-list.js +51 -0
  380. package/dist/senses/cli/ouro-tui.js +607 -0
  381. package/dist/senses/cli/spinner-imperative.js +135 -0
  382. package/dist/senses/cli/spinner.js +101 -0
  383. package/dist/senses/cli/status-line.js +60 -0
  384. package/dist/senses/cli/streaming-markdown.js +526 -0
  385. package/dist/senses/cli/tool-display.js +85 -0
  386. package/dist/senses/cli/tool-render.js +85 -0
  387. package/dist/senses/cli/tui-store.js +240 -0
  388. package/dist/senses/cli/virtual-list.js +35 -0
  389. package/dist/senses/cli-entry.js +60 -8
  390. package/dist/senses/cli-layout.js +100 -0
  391. package/dist/senses/cli.js +521 -214
  392. package/dist/senses/commands.js +66 -3
  393. package/dist/senses/habit-turn-message.js +160 -0
  394. package/dist/senses/mail-entry.js +66 -0
  395. package/dist/senses/mail.js +395 -0
  396. package/dist/senses/pipeline.js +873 -179
  397. package/dist/senses/private-runtime-worker.js +584 -0
  398. package/dist/senses/private-runtime.js +1145 -0
  399. package/dist/senses/proactive-content-guard.js +51 -0
  400. package/dist/senses/shared-turn.js +416 -0
  401. package/dist/senses/surface-tool.js +109 -0
  402. package/dist/senses/teams-entry.js +60 -8
  403. package/dist/senses/teams.js +397 -112
  404. package/dist/senses/trust-gate.js +104 -9
  405. package/dist/senses/voice/audio-playback.js +237 -0
  406. package/dist/senses/voice/audio-routing.js +119 -0
  407. package/dist/senses/voice/elevenlabs.js +202 -0
  408. package/dist/senses/voice/floor-control.js +431 -0
  409. package/dist/senses/voice/floor-controller.js +115 -0
  410. package/dist/senses/voice/golden-path.js +116 -0
  411. package/dist/senses/voice/index.js +29 -0
  412. package/dist/senses/voice/meeting.js +113 -0
  413. package/dist/senses/voice/outbound.js +190 -0
  414. package/dist/senses/voice/phone.js +33 -0
  415. package/dist/senses/voice/playback.js +139 -0
  416. package/dist/senses/voice/realtime-eval.js +496 -0
  417. package/dist/senses/voice/realtime-trace.js +531 -0
  418. package/dist/senses/voice/transcript.js +70 -0
  419. package/dist/senses/voice/turn.js +191 -0
  420. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  421. package/dist/senses/voice/twilio-phone.js +5077 -0
  422. package/dist/senses/voice/types.js +2 -0
  423. package/dist/senses/voice/whisper.js +161 -0
  424. package/dist/senses/voice-entry.js +81 -0
  425. package/dist/senses/voice-realtime-eval-command.js +99 -0
  426. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  427. package/dist/senses/voice-twilio-entry.js +87 -0
  428. package/dist/trips/core.js +138 -0
  429. package/dist/trips/store.js +265 -0
  430. package/dist/util/frontmatter.js +69 -0
  431. package/package.json +57 -12
  432. package/skills/agent-commerce.md +113 -0
  433. package/skills/browser-navigation.md +117 -0
  434. package/skills/commerce-setup-guide.md +116 -0
  435. package/skills/commerce-setup.md +84 -0
  436. package/skills/configure-dev-tools.md +99 -0
  437. package/skills/travel-planning.md +138 -0
  438. package/dist/heart/daemon/auth-flow.js +0 -351
  439. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  440. package/dist/heart/daemon/update-hooks.js +0 -138
  441. package/dist/heart/safe-workspace.js +0 -228
  442. package/dist/heart/session-recall.js +0 -116
  443. package/dist/mind/friends/channel.js +0 -84
  444. package/dist/mind/friends/group-context.js +0 -144
  445. package/dist/mind/friends/resolver.js +0 -84
  446. package/dist/mind/friends/store-file.js +0 -190
  447. package/dist/mind/friends/store.js +0 -4
  448. package/dist/mind/friends/tokens.js +0 -26
  449. package/dist/mind/friends/trust-explanation.js +0 -74
  450. package/dist/mind/friends/types.js +0 -29
  451. package/dist/repertoire/tasks/board.js +0 -134
  452. package/dist/repertoire/tasks/index.js +0 -224
  453. package/dist/repertoire/tasks/lifecycle.js +0 -80
  454. package/dist/repertoire/tasks/middleware.js +0 -65
  455. package/dist/repertoire/tasks/parser.js +0 -173
  456. package/dist/repertoire/tasks/scanner.js +0 -132
  457. package/dist/repertoire/tasks/transitions.js +0 -144
  458. package/dist/senses/bluebubbles-entry.js +0 -13
  459. package/dist/senses/bluebubbles.js +0 -1180
  460. package/dist/senses/debug-activity.js +0 -148
  461. package/dist/senses/inner-dialog-worker.js +0 -90
  462. package/dist/senses/inner-dialog.js +0 -480
  463. package/subagents/README.md +0 -7
  464. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  465. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  466. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  467. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  468. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  469. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  470. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  471. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  472. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  473. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  474. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  475. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  476. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  477. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  478. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  479. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  480. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Formats inner dialog session turns for human consumption.
2
+ // Formats private-runtime session turns for human consumption.
3
3
  // Used by `ouro thoughts` CLI command to show what the agent has been thinking.
4
4
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
5
  if (k2 === undefined) k2 = k;
@@ -36,16 +36,19 @@ var __importStar = (this && this.__importStar) || (function () {
36
36
  })();
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
38
  exports.formatSurfacedValue = formatSurfacedValue;
39
- exports.deriveInnerDialogStatus = deriveInnerDialogStatus;
40
- exports.formatInnerDialogStatus = formatInnerDialogStatus;
39
+ exports.derivePrivateRuntimeStatus = derivePrivateRuntimeStatus;
40
+ exports.deriveInnerJob = deriveInnerJob;
41
+ exports.formatPrivateRuntimeStatus = formatPrivateRuntimeStatus;
41
42
  exports.extractThoughtResponseFromMessages = extractThoughtResponseFromMessages;
42
- exports.parseInnerDialogSession = parseInnerDialogSession;
43
+ exports.parsePrivateRuntimeSession = parsePrivateRuntimeSession;
43
44
  exports.formatThoughtTurns = formatThoughtTurns;
44
- exports.getInnerDialogSessionPath = getInnerDialogSessionPath;
45
- exports.readInnerDialogStatus = readInnerDialogStatus;
45
+ exports.getPrivateRuntimeSessionPath = getPrivateRuntimeSessionPath;
46
+ exports.readPrivateRuntimeStatus = readPrivateRuntimeStatus;
47
+ exports.readPrivateRuntimeRawData = readPrivateRuntimeRawData;
46
48
  exports.followThoughts = followThoughts;
47
49
  const fs = __importStar(require("fs"));
48
50
  const path = __importStar(require("path"));
51
+ const session_events_1 = require("../session-events");
49
52
  const runtime_1 = require("../../nerves/runtime");
50
53
  function contentToText(content) {
51
54
  if (typeof content === "string")
@@ -91,7 +94,7 @@ function extractToolNames(messages) {
91
94
  if (msg.role === "assistant" && Array.isArray(msg.tool_calls)) {
92
95
  for (const tc of msg.tool_calls) {
93
96
  const toolFunction = extractToolFunction(tc);
94
- if (toolFunction?.name && toolFunction.name !== "final_answer")
97
+ if (toolFunction?.name && toolFunction.name !== "settle")
95
98
  names.push(toolFunction.name);
96
99
  }
97
100
  }
@@ -149,14 +152,30 @@ function formatSurfacedValue(text, maxLength = 120) {
149
152
  return `"${firstLine}"`;
150
153
  return `"${firstLine.slice(0, maxLength - 3)}..."`;
151
154
  }
152
- function deriveInnerDialogStatus(pendingMessages, turns, runtimeState) {
155
+ function extractEnrichedFields(pendingMessages) {
156
+ const delegated = pendingMessages.find((msg) => msg.delegatedFrom);
157
+ if (!delegated?.delegatedFrom)
158
+ return {};
159
+ const snippet = delegated.content.length > 80 ? delegated.content.slice(0, 77) + "..." : delegated.content;
160
+ return {
161
+ origin: {
162
+ friendId: delegated.delegatedFrom.friendId,
163
+ channel: delegated.delegatedFrom.channel,
164
+ key: delegated.delegatedFrom.key,
165
+ },
166
+ contentSnippet: snippet,
167
+ ...(delegated.obligationStatus === "pending" ? { obligationPending: true } : {}),
168
+ };
169
+ }
170
+ function derivePrivateRuntimeStatus(pendingMessages, turns, runtimeState) {
153
171
  if (runtimeState?.status === "running") {
154
172
  if (pendingMessages.length > 0) {
155
173
  return {
156
- queue: "queued to inner/dialog",
174
+ queue: "queued to private runtime",
157
175
  wake: "queued behind active turn",
158
176
  processing: "pending",
159
177
  surfaced: "nothing yet",
178
+ ...extractEnrichedFields(pendingMessages),
160
179
  };
161
180
  }
162
181
  return {
@@ -168,10 +187,11 @@ function deriveInnerDialogStatus(pendingMessages, turns, runtimeState) {
168
187
  }
169
188
  if (pendingMessages.length > 0) {
170
189
  return {
171
- queue: "queued to inner/dialog",
172
- wake: "awaiting inner session",
190
+ queue: "queued to private runtime",
191
+ wake: "awaiting private-runtime turn",
173
192
  processing: "pending",
174
193
  surfaced: "nothing yet",
194
+ ...extractEnrichedFields(pendingMessages),
175
195
  };
176
196
  }
177
197
  const latestProcessedPendingTurn = [...turns]
@@ -192,23 +212,125 @@ function deriveInnerDialogStatus(pendingMessages, turns, runtimeState) {
192
212
  surfaced: formatSurfacedValue(latestProcessedPendingTurn.response),
193
213
  };
194
214
  }
195
- function formatInnerDialogStatus(status) {
196
- return [
215
+ function deriveInnerJob(pendingMessages, turns, runtimeState) {
216
+ const isRunning = runtimeState?.status === "running";
217
+ const delegated = pendingMessages.find((msg) => msg.delegatedFrom);
218
+ const enriched = extractEnrichedFields(pendingMessages);
219
+ const pendingMode = delegated && "mode" in delegated && delegated.mode ? delegated.mode : "reflect";
220
+ const origin = enriched.origin ?? null;
221
+ const content = delegated?.content ?? null;
222
+ const obligationStatus = delegated?.obligationStatus ?? null;
223
+ const queuedAt = delegated?.timestamp ?? null;
224
+ if (isRunning) {
225
+ (0, runtime_1.emitNervesEvent)({
226
+ component: "engine",
227
+ event: "engine.private_runtime_job_derive",
228
+ message: "derived private-runtime job state",
229
+ meta: { status: "running", mode: pendingMode, hasOrigin: origin !== null, hasObligation: obligationStatus !== null },
230
+ });
231
+ return {
232
+ status: "running",
233
+ content,
234
+ origin,
235
+ mode: pendingMode,
236
+ obligationStatus,
237
+ surfacedResult: null,
238
+ queuedAt,
239
+ startedAt: runtimeState?.startedAt ?? null,
240
+ surfacedAt: null,
241
+ };
242
+ }
243
+ if (pendingMessages.length > 0) {
244
+ (0, runtime_1.emitNervesEvent)({
245
+ component: "engine",
246
+ event: "engine.private_runtime_job_derive",
247
+ message: "derived private-runtime job state",
248
+ meta: { status: "queued", mode: pendingMode, hasOrigin: origin !== null, hasObligation: obligationStatus !== null },
249
+ });
250
+ return {
251
+ status: "queued",
252
+ content,
253
+ origin,
254
+ mode: pendingMode,
255
+ obligationStatus,
256
+ surfacedResult: null,
257
+ queuedAt,
258
+ startedAt: null,
259
+ surfacedAt: null,
260
+ };
261
+ }
262
+ // No pending, not running -- check for surfaced result
263
+ const latestProcessedPendingTurn = [...turns]
264
+ .reverse()
265
+ .find((turn) => extractPendingPromptMessages(turn.prompt).length > 0);
266
+ if (latestProcessedPendingTurn) {
267
+ const surfacedResult = extractThoughtResponseFromMessages([
268
+ { role: "assistant", content: latestProcessedPendingTurn.response },
269
+ ]);
270
+ (0, runtime_1.emitNervesEvent)({
271
+ component: "engine",
272
+ event: "engine.private_runtime_job_derive",
273
+ message: "derived private-runtime job state",
274
+ meta: { status: "surfaced", mode: "reflect", hasOrigin: false, hasObligation: false },
275
+ });
276
+ return {
277
+ status: "surfaced",
278
+ content: null,
279
+ origin: null,
280
+ mode: "reflect",
281
+ obligationStatus: null,
282
+ /* v8 ignore next -- defensive: surfacedResult fallback @preserve */
283
+ surfacedResult: surfacedResult || null,
284
+ queuedAt: null,
285
+ startedAt: null,
286
+ surfacedAt: null,
287
+ };
288
+ }
289
+ (0, runtime_1.emitNervesEvent)({
290
+ component: "engine",
291
+ event: "engine.private_runtime_job_derive",
292
+ message: "derived private-runtime job state",
293
+ meta: { status: "idle", mode: "reflect", hasOrigin: false, hasObligation: false },
294
+ });
295
+ return {
296
+ status: "idle",
297
+ content: null,
298
+ origin: null,
299
+ mode: "reflect",
300
+ obligationStatus: null,
301
+ surfacedResult: null,
302
+ queuedAt: null,
303
+ startedAt: null,
304
+ surfacedAt: null,
305
+ };
306
+ }
307
+ function formatPrivateRuntimeStatus(status) {
308
+ const lines = [
197
309
  `queue: ${status.queue}`,
198
310
  `wake: ${status.wake}`,
199
311
  `processing: ${status.processing}`,
200
312
  `surfaced: ${status.surfaced}`,
201
- ].join("\n");
313
+ ];
314
+ if (status.origin) {
315
+ lines.push(`origin: ${status.origin.friendId}/${status.origin.channel}/${status.origin.key}`);
316
+ }
317
+ if (status.contentSnippet) {
318
+ lines.push(`asked: ${status.contentSnippet}`);
319
+ }
320
+ if (status.obligationPending) {
321
+ lines.push("obligation: pending");
322
+ }
323
+ return lines.join("\n");
202
324
  }
203
- /** Extract text from a final_answer tool call's arguments. */
204
- function extractFinalAnswer(messages) {
325
+ /** Extract text from a settle tool call's arguments. */
326
+ function extractSettleAnswer(messages) {
205
327
  for (let k = messages.length - 1; k >= 0; k--) {
206
328
  const msg = messages[k];
207
329
  if (msg.role !== "assistant" || !Array.isArray(msg.tool_calls))
208
330
  continue;
209
331
  for (const tc of msg.tool_calls) {
210
332
  const toolFunction = extractToolFunction(tc);
211
- if (toolFunction?.name !== "final_answer")
333
+ if (toolFunction?.name !== "settle")
212
334
  continue;
213
335
  try {
214
336
  const parsed = JSON.parse(toolFunction.arguments ?? "{}");
@@ -222,18 +344,85 @@ function extractFinalAnswer(messages) {
222
344
  }
223
345
  return "";
224
346
  }
347
+ function parseToolArguments(argumentsValue) {
348
+ if (!argumentsValue)
349
+ return {};
350
+ try {
351
+ const parsed = JSON.parse(argumentsValue);
352
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed)
353
+ ? parsed
354
+ : {};
355
+ }
356
+ catch {
357
+ return {};
358
+ }
359
+ }
360
+ function toolArgumentText(args, keys) {
361
+ for (const key of keys) {
362
+ const value = args[key];
363
+ if (typeof value === "string" && value.trim()) {
364
+ return value.trim();
365
+ }
366
+ }
367
+ return "";
368
+ }
369
+ function truncateToolSummary(summary) {
370
+ if (summary.length <= 220)
371
+ return summary;
372
+ return `${summary.slice(0, 217)}...`;
373
+ }
374
+ function summarizeToolAction(name, argumentsValue) {
375
+ if (!name)
376
+ return null;
377
+ const args = parseToolArguments(argumentsValue);
378
+ if (name === "surface") {
379
+ const message = toolArgumentText(args, ["message", "text", "content"]);
380
+ return message ? `surfaced: ${message}` : null;
381
+ }
382
+ if (name === "ponder") {
383
+ const thought = toolArgumentText(args, ["summary", "question", "topic", "prompt"]);
384
+ return thought ? `pondered: ${thought}` : null;
385
+ }
386
+ if (name === "diary_write") {
387
+ const note = toolArgumentText(args, ["text", "content", "note", "entry"]);
388
+ return note ? `diary: ${note}` : null;
389
+ }
390
+ if (name === "let_go") {
391
+ const reason = toolArgumentText(args, ["reason", "note", "status"]);
392
+ return reason ? `let go: ${reason}` : null;
393
+ }
394
+ if (name === "rest") {
395
+ const note = toolArgumentText(args, ["note", "status"]);
396
+ return note ? `rested: ${note}` : null;
397
+ }
398
+ return null;
399
+ }
400
+ function extractToolActionSummary(messages) {
401
+ for (let k = messages.length - 1; k >= 0; k--) {
402
+ const msg = messages[k];
403
+ if (msg.role !== "assistant" || !Array.isArray(msg.tool_calls))
404
+ continue;
405
+ for (let i = msg.tool_calls.length - 1; i >= 0; i--) {
406
+ const toolFunction = extractToolFunction(msg.tool_calls[i]);
407
+ const summary = summarizeToolAction(toolFunction?.name, toolFunction?.arguments);
408
+ if (summary)
409
+ return truncateToolSummary(summary);
410
+ }
411
+ }
412
+ return "";
413
+ }
225
414
  function extractThoughtResponseFromMessages(messages) {
226
415
  const assistantMsgs = messages.filter((message) => message.role === "assistant");
227
416
  const lastAssistant = assistantMsgs.reverse().find((message) => contentToText(message.content).trim().length > 0);
228
417
  return lastAssistant
229
418
  ? contentToText(lastAssistant.content).trim()
230
- : extractFinalAnswer(messages);
419
+ : extractSettleAnswer(messages) || extractToolActionSummary(messages);
231
420
  }
232
- function parseInnerDialogSession(sessionPath) {
421
+ function parsePrivateRuntimeSession(sessionPath) {
233
422
  (0, runtime_1.emitNervesEvent)({
234
423
  component: "daemon",
235
424
  event: "daemon.thoughts_parse",
236
- message: "parsing inner dialog session",
425
+ message: "parsing private-runtime session",
237
426
  meta: { sessionPath },
238
427
  });
239
428
  let raw;
@@ -243,21 +432,34 @@ function parseInnerDialogSession(sessionPath) {
243
432
  catch {
244
433
  return [];
245
434
  }
246
- let data;
435
+ let parsedRaw;
247
436
  try {
248
- data = JSON.parse(raw);
437
+ parsedRaw = JSON.parse(raw);
249
438
  }
250
439
  catch {
251
440
  return [];
252
441
  }
253
- if (data.version !== 1 || !Array.isArray(data.messages))
442
+ const legacyRecord = parsedRaw && typeof parsedRaw === "object"
443
+ ? parsedRaw
444
+ : null;
445
+ const messages = legacyRecord?.version === 1 && Array.isArray(legacyRecord.messages)
446
+ ? legacyRecord.messages
447
+ : (() => {
448
+ const envelope = (0, session_events_1.parseSessionEnvelope)(parsedRaw, {
449
+ recordedAt: new Date().toISOString(),
450
+ });
451
+ if (!envelope)
452
+ return null;
453
+ return (0, session_events_1.projectProviderMessages)(envelope);
454
+ })();
455
+ if (!messages)
254
456
  return [];
457
+ const normalizedMessages = messages;
255
458
  const turns = [];
256
- const messages = data.messages;
257
459
  // Walk messages, pairing user → (tool calls) → assistant sequences
258
460
  let i = 0;
259
- while (i < messages.length) {
260
- const msg = messages[i];
461
+ while (i < normalizedMessages.length) {
462
+ const msg = normalizedMessages[i];
261
463
  if (msg.role === "system") {
262
464
  i++;
263
465
  continue;
@@ -271,12 +473,12 @@ function parseInnerDialogSession(sessionPath) {
271
473
  // Collect all messages until the next user message (or end)
272
474
  const turnMessages = [];
273
475
  let j = i + 1;
274
- while (j < messages.length && messages[j].role !== "user") {
275
- turnMessages.push(messages[j]);
476
+ while (j < normalizedMessages.length && normalizedMessages[j].role !== "user") {
477
+ turnMessages.push(normalizedMessages[j]);
276
478
  j++;
277
479
  }
278
480
  // Find the last assistant text response in this turn.
279
- // With tool_choice="required", the response may be inside a final_answer tool call.
481
+ // With tool_choice="required", the response may be inside a settle tool call.
280
482
  const response = extractThoughtResponseFromMessages(turnMessages);
281
483
  const tools = extractToolNames(turnMessages);
282
484
  turns.push({
@@ -292,11 +494,11 @@ function parseInnerDialogSession(sessionPath) {
292
494
  }
293
495
  function formatThoughtTurns(turns, lastN) {
294
496
  if (turns.length === 0)
295
- return "no inner dialog activity";
497
+ return "no private-runtime activity";
296
498
  const selected = lastN > 0 ? turns.slice(-lastN) : turns;
297
499
  /* v8 ignore next -- unreachable: turns.length > 0 checked above, slice always returns ≥1 @preserve */
298
500
  if (selected.length === 0)
299
- return "no inner dialog activity";
501
+ return "no private-runtime activity";
300
502
  const lines = [];
301
503
  for (const turn of selected) {
302
504
  const typeLabel = turn.type === "task" && turn.taskId
@@ -316,13 +518,13 @@ function formatThoughtTurns(turns, lastN) {
316
518
  }
317
519
  return lines.join("\n").trim();
318
520
  }
319
- function getInnerDialogSessionPath(agentRoot) {
521
+ function getPrivateRuntimeSessionPath(agentRoot) {
320
522
  return path.join(agentRoot, "state", "sessions", "self", "inner", "dialog.json");
321
523
  }
322
- function getInnerDialogRuntimeStatePath(sessionPath) {
524
+ function getPrivateRuntimeStatePath(sessionPath) {
323
525
  return path.join(path.dirname(sessionPath), "runtime.json");
324
526
  }
325
- function readInnerDialogRuntimeState(runtimePath) {
527
+ function readPrivateRuntimeState(runtimePath) {
326
528
  try {
327
529
  const raw = fs.readFileSync(runtimePath, "utf-8");
328
530
  const parsed = JSON.parse(raw);
@@ -341,26 +543,33 @@ function readInnerDialogRuntimeState(runtimePath) {
341
543
  return null;
342
544
  }
343
545
  }
344
- function readInnerDialogStatus(sessionPath, pendingDir, runtimePath = getInnerDialogRuntimeStatePath(sessionPath)) {
546
+ function readPrivateRuntimeStatus(sessionPath, pendingDir, runtimePath = getPrivateRuntimeStatePath(sessionPath)) {
547
+ const pendingMessages = readPendingMessagesForStatus(pendingDir);
548
+ const turns = parsePrivateRuntimeSession(sessionPath);
549
+ const runtimeState = readPrivateRuntimeState(runtimePath);
550
+ return derivePrivateRuntimeStatus(pendingMessages, turns, runtimeState);
551
+ }
552
+ function readPrivateRuntimeRawData(sessionPath, pendingDir) {
553
+ const runtimePath = getPrivateRuntimeStatePath(sessionPath);
345
554
  const pendingMessages = readPendingMessagesForStatus(pendingDir);
346
- const turns = parseInnerDialogSession(sessionPath);
347
- const runtimeState = readInnerDialogRuntimeState(runtimePath);
348
- return deriveInnerDialogStatus(pendingMessages, turns, runtimeState);
555
+ const turns = parsePrivateRuntimeSession(sessionPath);
556
+ const runtimeState = readPrivateRuntimeState(runtimePath);
557
+ return { pendingMessages, turns, runtimeState };
349
558
  }
350
559
  /**
351
560
  * Watch a session file and emit new turns as they appear.
352
561
  * Returns a cleanup function that stops the watcher.
353
562
  */
354
563
  function followThoughts(sessionPath, onNewTurns, pollIntervalMs = 1000) {
355
- let displayedCount = parseInnerDialogSession(sessionPath).length;
564
+ let displayedCount = parsePrivateRuntimeSession(sessionPath).length;
356
565
  (0, runtime_1.emitNervesEvent)({
357
566
  component: "daemon",
358
567
  event: "daemon.thoughts_follow_start",
359
- message: "started following inner dialog session",
568
+ message: "started following private-runtime session",
360
569
  meta: { sessionPath, initialTurns: displayedCount },
361
570
  });
362
571
  fs.watchFile(sessionPath, { interval: pollIntervalMs }, () => {
363
- const turns = parseInnerDialogSession(sessionPath);
572
+ const turns = parsePrivateRuntimeSession(sessionPath);
364
573
  if (turns.length > displayedCount) {
365
574
  const newTurns = turns.slice(displayedCount);
366
575
  onNewTurns(formatThoughtTurns(newTurns, 0));
@@ -369,10 +578,13 @@ function followThoughts(sessionPath, onNewTurns, pollIntervalMs = 1000) {
369
578
  });
370
579
  return () => {
371
580
  fs.unwatchFile(sessionPath);
581
+ // Must be named `_end` (not `_stop`) to satisfy the nerves audit's
582
+ // start/end pairing rule — see src/nerves/coverage/audit-rules.ts which
583
+ // pairs `<prefix>_start` with `<prefix>_end` or `<prefix>_error`.
372
584
  (0, runtime_1.emitNervesEvent)({
373
585
  component: "daemon",
374
- event: "daemon.thoughts_follow_stop",
375
- message: "stopped following inner dialog session",
586
+ event: "daemon.thoughts_follow_end",
587
+ message: "stopped following private-runtime session",
376
588
  meta: { sessionPath, totalTurns: displayedCount },
377
589
  });
378
590
  };