@ouro.bot/cli 0.1.0-alpha.46 → 0.1.0-alpha.461

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 (354) hide show
  1. package/README.md +127 -19
  2. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +3 -2
  3. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  4. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  5. package/changelog.json +2928 -0
  6. package/dist/arc/attention-types.js +8 -0
  7. package/dist/arc/cares.js +140 -0
  8. package/dist/arc/episodes.js +117 -0
  9. package/dist/arc/intentions.js +133 -0
  10. package/dist/arc/json-store.js +117 -0
  11. package/dist/arc/obligations.js +237 -0
  12. package/dist/arc/packets.js +193 -0
  13. package/dist/arc/presence.js +185 -0
  14. package/dist/arc/task-lifecycle.js +65 -0
  15. package/dist/heart/active-work.js +832 -0
  16. package/dist/heart/agent-entry.js +58 -3
  17. package/dist/heart/attachments/image-normalize.js +194 -0
  18. package/dist/heart/attachments/materialize.js +97 -0
  19. package/dist/heart/attachments/originals.js +88 -0
  20. package/dist/heart/attachments/render.js +29 -0
  21. package/dist/heart/attachments/sources/adapter.js +2 -0
  22. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  23. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  24. package/dist/heart/attachments/sources/index.js +16 -0
  25. package/dist/heart/attachments/store.js +103 -0
  26. package/dist/heart/attachments/types.js +93 -0
  27. package/dist/heart/auth/auth-flow.js +426 -0
  28. package/dist/heart/bridges/manager.js +358 -0
  29. package/dist/heart/bridges/state-machine.js +135 -0
  30. package/dist/heart/bridges/store.js +123 -0
  31. package/dist/heart/bundle-state.js +168 -0
  32. package/dist/heart/commitments.js +111 -0
  33. package/dist/heart/config-registry.js +304 -0
  34. package/dist/heart/config.js +110 -128
  35. package/dist/heart/core.js +745 -227
  36. package/dist/heart/cross-chat-delivery.js +131 -0
  37. package/dist/heart/daemon/agent-config-check.js +490 -0
  38. package/dist/heart/daemon/agent-discovery.js +79 -3
  39. package/dist/heart/daemon/agent-service.js +360 -0
  40. package/dist/heart/daemon/agentic-repair.js +216 -0
  41. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  42. package/dist/heart/daemon/cadence.js +70 -0
  43. package/dist/heart/daemon/cli-defaults.js +631 -0
  44. package/dist/heart/daemon/cli-exec.js +6158 -0
  45. package/dist/heart/daemon/cli-help.js +457 -0
  46. package/dist/heart/daemon/cli-parse.js +1273 -0
  47. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  48. package/dist/heart/daemon/cli-render.js +561 -0
  49. package/dist/heart/daemon/cli-types.js +8 -0
  50. package/dist/heart/daemon/connect-bay.js +323 -0
  51. package/dist/heart/daemon/daemon-cli.js +29 -1688
  52. package/dist/heart/daemon/daemon-entry.js +345 -3
  53. package/dist/heart/daemon/daemon-health.js +141 -0
  54. package/dist/heart/daemon/daemon-runtime-sync.js +190 -12
  55. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  56. package/dist/heart/daemon/daemon.js +684 -58
  57. package/dist/heart/daemon/doctor-types.js +8 -0
  58. package/dist/heart/daemon/doctor.js +435 -0
  59. package/dist/heart/daemon/health-monitor.js +92 -1
  60. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  61. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  62. package/dist/heart/daemon/http-health-probe.js +80 -0
  63. package/dist/heart/daemon/human-command-screens.js +234 -0
  64. package/dist/heart/daemon/human-readiness.js +114 -0
  65. package/dist/heart/daemon/inner-status.js +89 -0
  66. package/dist/heart/daemon/interactive-repair.js +394 -0
  67. package/dist/heart/daemon/launchd.js +25 -5
  68. package/dist/heart/daemon/log-tailer.js +82 -12
  69. package/dist/heart/daemon/logs-prune.js +110 -0
  70. package/dist/heart/daemon/message-router.js +2 -2
  71. package/dist/heart/daemon/os-cron-deps.js +134 -0
  72. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  73. package/dist/heart/daemon/ouro-entry.js +3 -1
  74. package/dist/heart/daemon/process-manager.js +214 -0
  75. package/dist/heart/daemon/provider-discovery.js +137 -0
  76. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  77. package/dist/heart/daemon/pulse.js +475 -0
  78. package/dist/heart/daemon/readiness-repair.js +365 -0
  79. package/dist/heart/daemon/run-hooks.js +2 -0
  80. package/dist/heart/daemon/runtime-logging.js +67 -16
  81. package/dist/heart/daemon/runtime-metadata.js +73 -0
  82. package/dist/heart/daemon/runtime-mode.js +67 -0
  83. package/dist/heart/daemon/safe-mode.js +161 -0
  84. package/dist/heart/daemon/sense-manager.js +178 -37
  85. package/dist/heart/daemon/session-id-resolver.js +131 -0
  86. package/dist/heart/daemon/skill-management-installer.js +94 -0
  87. package/dist/heart/daemon/socket-client.js +307 -0
  88. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  89. package/dist/heart/daemon/startup-tui.js +264 -0
  90. package/dist/heart/daemon/task-scheduler.js +3 -25
  91. package/dist/heart/daemon/terminal-ui.js +499 -0
  92. package/dist/heart/daemon/thoughts.js +298 -13
  93. package/dist/heart/daemon/up-progress.js +366 -0
  94. package/dist/heart/delegation.js +62 -0
  95. package/dist/heart/habits/habit-migration.js +189 -0
  96. package/dist/heart/habits/habit-parser.js +140 -0
  97. package/dist/heart/habits/habit-runtime-state.js +100 -0
  98. package/dist/heart/habits/habit-scheduler.js +372 -0
  99. package/dist/heart/{daemon → hatch}/hatch-flow.js +52 -117
  100. package/dist/heart/{daemon → hatch}/hatch-specialist.js +3 -3
  101. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  102. package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
  103. package/dist/heart/identity.js +201 -66
  104. package/dist/heart/kept-notes.js +357 -0
  105. package/dist/heart/kicks.js +1 -1
  106. package/dist/heart/machine-identity.js +161 -0
  107. package/dist/heart/mcp/mcp-server.js +653 -0
  108. package/dist/heart/migrate-config.js +100 -0
  109. package/dist/heart/model-capabilities.js +59 -0
  110. package/dist/heart/outlook/outlook-http-hooks.js +66 -0
  111. package/dist/heart/outlook/outlook-http-response.js +7 -0
  112. package/dist/heart/outlook/outlook-http-routes.js +244 -0
  113. package/dist/heart/outlook/outlook-http-static.js +99 -0
  114. package/dist/heart/outlook/outlook-http-transport.js +116 -0
  115. package/dist/heart/outlook/outlook-http.js +99 -0
  116. package/dist/heart/outlook/outlook-read.js +31 -0
  117. package/dist/heart/outlook/outlook-types.js +27 -0
  118. package/dist/heart/outlook/outlook-view.js +195 -0
  119. package/dist/heart/outlook/readers/agent-machine.js +359 -0
  120. package/dist/heart/outlook/readers/continuity-readers.js +332 -0
  121. package/dist/heart/outlook/readers/mail.js +273 -0
  122. package/dist/heart/outlook/readers/runtime-readers.js +644 -0
  123. package/dist/heart/outlook/readers/sessions.js +232 -0
  124. package/dist/heart/outlook/readers/shared.js +111 -0
  125. package/dist/heart/platform.js +81 -0
  126. package/dist/heart/progress-story.js +42 -0
  127. package/dist/heart/provider-attempt.js +134 -0
  128. package/dist/heart/provider-binding-resolver.js +255 -0
  129. package/dist/heart/provider-credentials.js +424 -0
  130. package/dist/heart/provider-failover.js +266 -0
  131. package/dist/heart/provider-models.js +81 -0
  132. package/dist/heart/provider-ping.js +262 -0
  133. package/dist/heart/provider-state.js +216 -0
  134. package/dist/heart/provider-visibility.js +188 -0
  135. package/dist/heart/providers/anthropic-token.js +131 -0
  136. package/dist/heart/providers/anthropic.js +193 -55
  137. package/dist/heart/providers/azure.js +103 -12
  138. package/dist/heart/providers/error-classification.js +63 -0
  139. package/dist/heart/providers/github-copilot.js +145 -0
  140. package/dist/heart/providers/minimax-vlm.js +189 -0
  141. package/dist/heart/providers/minimax.js +29 -7
  142. package/dist/heart/providers/openai-codex.js +62 -38
  143. package/dist/heart/runtime-capability-check.js +170 -0
  144. package/dist/heart/runtime-credentials.js +260 -0
  145. package/dist/heart/sense-truth.js +11 -4
  146. package/dist/heart/session-activity.js +190 -0
  147. package/dist/heart/session-events.js +855 -0
  148. package/dist/heart/session-transcript.js +167 -0
  149. package/dist/heart/start-of-turn-packet.js +345 -0
  150. package/dist/heart/streaming.js +36 -27
  151. package/dist/heart/sync.js +332 -0
  152. package/dist/heart/target-resolution.js +127 -0
  153. package/dist/heart/tempo.js +93 -0
  154. package/dist/heart/temporal-view.js +41 -0
  155. package/dist/heart/tool-activity-callbacks.js +36 -0
  156. package/dist/heart/tool-description.js +135 -0
  157. package/dist/heart/tool-friction.js +55 -0
  158. package/dist/heart/tool-loop.js +200 -0
  159. package/dist/heart/turn-context.js +361 -0
  160. package/dist/heart/turn-coordinator.js +28 -0
  161. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +1 -1
  162. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  163. package/dist/heart/versioning/ouro-path-installer.js +425 -0
  164. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  165. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  166. package/dist/heart/{daemon → versioning}/update-checker.js +5 -1
  167. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  168. package/dist/mailroom/attention.js +154 -0
  169. package/dist/mailroom/blob-store.js +302 -0
  170. package/dist/mailroom/core.js +538 -0
  171. package/dist/mailroom/entry.js +160 -0
  172. package/dist/mailroom/file-store.js +392 -0
  173. package/dist/mailroom/mbox-import.js +105 -0
  174. package/dist/mailroom/outbound.js +177 -0
  175. package/dist/mailroom/policy.js +263 -0
  176. package/dist/mailroom/reader.js +166 -0
  177. package/dist/mailroom/smtp-ingress.js +176 -0
  178. package/dist/mailroom/travel-extract.js +89 -0
  179. package/dist/mind/bundle-manifest.js +7 -1
  180. package/dist/mind/context.js +132 -93
  181. package/dist/mind/diary-integrity.js +60 -0
  182. package/dist/mind/{memory.js → diary.js} +74 -93
  183. package/dist/mind/embedding-provider.js +60 -0
  184. package/dist/mind/file-state.js +179 -0
  185. package/dist/mind/friends/channel.js +30 -0
  186. package/dist/mind/friends/group-context.js +144 -0
  187. package/dist/mind/friends/resolver.js +38 -1
  188. package/dist/mind/friends/store-file.js +39 -3
  189. package/dist/mind/friends/trust-explanation.js +74 -0
  190. package/dist/mind/friends/types.js +2 -2
  191. package/dist/mind/journal-index.js +161 -0
  192. package/dist/mind/note-search.js +268 -0
  193. package/dist/mind/obligation-steering.js +221 -0
  194. package/dist/mind/pending.js +66 -7
  195. package/dist/mind/prompt-refresh.js +3 -2
  196. package/dist/mind/prompt.js +976 -169
  197. package/dist/mind/provenance-trust.js +26 -0
  198. package/dist/mind/scrutiny.js +173 -0
  199. package/dist/nerves/cli-logging.js +7 -1
  200. package/dist/nerves/coverage/audit-rules.js +15 -6
  201. package/dist/nerves/coverage/audit.js +28 -2
  202. package/dist/nerves/coverage/cli.js +1 -1
  203. package/dist/nerves/coverage/contract.js +5 -5
  204. package/dist/nerves/coverage/file-completeness.js +83 -5
  205. package/dist/nerves/coverage/run-artifacts.js +1 -1
  206. package/dist/nerves/event-buffer.js +111 -0
  207. package/dist/nerves/index.js +224 -4
  208. package/dist/nerves/observation.js +20 -0
  209. package/dist/nerves/redact.js +79 -0
  210. package/dist/nerves/runtime.js +5 -1
  211. package/dist/outlook-ui/assets/index-BBM5EysT.js +61 -0
  212. package/dist/outlook-ui/assets/index-BPr5vNuM.css +1 -0
  213. package/dist/outlook-ui/index.html +15 -0
  214. package/dist/repertoire/ado-client.js +15 -56
  215. package/dist/repertoire/ado-semantic.js +11 -10
  216. package/dist/repertoire/api-client.js +97 -0
  217. package/dist/repertoire/bitwarden-store.js +774 -0
  218. package/dist/repertoire/bundle-templates.js +72 -0
  219. package/dist/repertoire/bw-installer.js +180 -0
  220. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  221. package/dist/repertoire/coding/context-pack.js +330 -0
  222. package/dist/repertoire/coding/feedback.js +197 -30
  223. package/dist/repertoire/coding/manager.js +158 -9
  224. package/dist/repertoire/coding/spawner.js +55 -9
  225. package/dist/repertoire/coding/tools.js +170 -7
  226. package/dist/repertoire/commerce-errors.js +109 -0
  227. package/dist/repertoire/commerce-self-test.js +156 -0
  228. package/dist/repertoire/credential-access.js +111 -0
  229. package/dist/repertoire/duffel-client.js +185 -0
  230. package/dist/repertoire/github-client.js +14 -55
  231. package/dist/repertoire/graph-client.js +11 -52
  232. package/dist/repertoire/guardrails.js +396 -0
  233. package/dist/repertoire/mcp-client.js +255 -0
  234. package/dist/repertoire/mcp-manager.js +305 -0
  235. package/dist/repertoire/mcp-tools.js +63 -0
  236. package/dist/repertoire/shell-sessions.js +133 -0
  237. package/dist/repertoire/skills.js +15 -24
  238. package/dist/repertoire/stripe-client.js +131 -0
  239. package/dist/repertoire/tasks/board.js +43 -5
  240. package/dist/repertoire/tasks/fix.js +182 -0
  241. package/dist/repertoire/tasks/index.js +37 -4
  242. package/dist/repertoire/tasks/lifecycle.js +2 -2
  243. package/dist/repertoire/tasks/parser.js +3 -2
  244. package/dist/repertoire/tasks/scanner.js +194 -37
  245. package/dist/repertoire/tasks/transitions.js +16 -78
  246. package/dist/repertoire/tool-results.js +29 -0
  247. package/dist/repertoire/tools-attachments.js +317 -0
  248. package/dist/repertoire/tools-base.js +44 -690
  249. package/dist/repertoire/tools-bluebubbles.js +1 -0
  250. package/dist/repertoire/tools-bridge.js +141 -0
  251. package/dist/repertoire/tools-bundle.js +984 -0
  252. package/dist/repertoire/tools-config.js +185 -0
  253. package/dist/repertoire/tools-continuity.js +248 -0
  254. package/dist/repertoire/tools-credential.js +361 -0
  255. package/dist/repertoire/tools-files.js +342 -0
  256. package/dist/repertoire/tools-flight.js +224 -0
  257. package/dist/repertoire/tools-flow.js +105 -0
  258. package/dist/repertoire/tools-github.js +1 -7
  259. package/dist/repertoire/tools-mail.js +762 -0
  260. package/dist/repertoire/tools-notes.js +376 -0
  261. package/dist/repertoire/tools-session.js +739 -0
  262. package/dist/repertoire/tools-shell.js +120 -0
  263. package/dist/repertoire/tools-stripe.js +180 -0
  264. package/dist/repertoire/tools-surface.js +243 -0
  265. package/dist/repertoire/tools-teams.js +9 -39
  266. package/dist/repertoire/tools-travel.js +125 -0
  267. package/dist/repertoire/tools-user-profile.js +144 -0
  268. package/dist/repertoire/tools-vault.js +40 -0
  269. package/dist/repertoire/tools.js +144 -113
  270. package/dist/repertoire/travel-api-client.js +360 -0
  271. package/dist/repertoire/user-profile.js +131 -0
  272. package/dist/repertoire/vault-setup.js +246 -0
  273. package/dist/repertoire/vault-unlock.js +561 -0
  274. package/dist/scripts/claude-code-hook.js +41 -0
  275. package/dist/scripts/claude-code-stop-hook.js +47 -0
  276. package/dist/senses/attention-queue.js +116 -0
  277. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  278. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  279. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
  280. package/dist/senses/bluebubbles/entry.js +73 -0
  281. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +7 -3
  282. package/dist/senses/bluebubbles/index.js +1620 -0
  283. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
  284. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  285. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  286. package/dist/senses/bluebubbles/replay.js +129 -0
  287. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +2 -2
  288. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  289. package/dist/senses/cli/bracketed-paste.js +82 -0
  290. package/dist/senses/cli/image-paste.js +287 -0
  291. package/dist/senses/cli/image-ref-navigation.js +75 -0
  292. package/dist/senses/cli/ink-app.js +156 -0
  293. package/dist/senses/cli/inline-diff.js +64 -0
  294. package/dist/senses/cli/input-keys.js +174 -0
  295. package/dist/senses/cli/kill-ring.js +86 -0
  296. package/dist/senses/cli/message-list.js +51 -0
  297. package/dist/senses/cli/ouro-tui.js +605 -0
  298. package/dist/senses/cli/spinner-imperative.js +135 -0
  299. package/dist/senses/cli/spinner.js +101 -0
  300. package/dist/senses/cli/status-line.js +60 -0
  301. package/dist/senses/cli/streaming-markdown.js +526 -0
  302. package/dist/senses/cli/tool-display.js +83 -0
  303. package/dist/senses/cli/tool-render.js +85 -0
  304. package/dist/senses/cli/tui-store.js +240 -0
  305. package/dist/senses/cli/virtual-list.js +35 -0
  306. package/dist/senses/cli-entry.js +60 -8
  307. package/dist/senses/cli-layout.js +187 -0
  308. package/dist/senses/cli.js +516 -211
  309. package/dist/senses/commands.js +66 -3
  310. package/dist/senses/habit-turn-message.js +108 -0
  311. package/dist/senses/inner-dialog-worker.js +97 -17
  312. package/dist/senses/inner-dialog.js +534 -106
  313. package/dist/senses/mail-entry.js +66 -0
  314. package/dist/senses/mail.js +224 -0
  315. package/dist/senses/pipeline.js +533 -72
  316. package/dist/senses/proactive-content-guard.js +51 -0
  317. package/dist/senses/shared-turn.js +205 -0
  318. package/dist/senses/surface-tool.js +68 -0
  319. package/dist/senses/teams-entry.js +60 -8
  320. package/dist/senses/teams.js +413 -163
  321. package/dist/senses/trust-gate.js +5 -5
  322. package/package.json +37 -7
  323. package/skills/agent-commerce.md +106 -0
  324. package/skills/browser-navigation.md +117 -0
  325. package/skills/commerce-setup-guide.md +116 -0
  326. package/skills/commerce-setup.md +84 -0
  327. package/skills/configure-dev-tools.md +101 -0
  328. package/skills/travel-planning.md +138 -0
  329. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  330. package/dist/heart/daemon/subagent-installer.js +0 -166
  331. package/dist/mind/associative-recall.js +0 -209
  332. package/dist/senses/bluebubbles-entry.js +0 -13
  333. package/dist/senses/bluebubbles.js +0 -1028
  334. package/dist/senses/debug-activity.js +0 -127
  335. package/subagents/README.md +0 -86
  336. package/subagents/work-doer.md +0 -237
  337. package/subagents/work-merger.md +0 -618
  338. package/subagents/work-planner.md +0 -390
  339. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  340. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  341. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  342. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  343. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  344. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  345. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  346. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  347. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  348. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  349. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  350. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  351. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  352. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  353. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  354. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -35,9 +35,16 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  };
36
36
  })();
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.formatSurfacedValue = formatSurfacedValue;
39
+ exports.deriveInnerDialogStatus = deriveInnerDialogStatus;
40
+ exports.deriveInnerJob = deriveInnerJob;
41
+ exports.formatInnerDialogStatus = formatInnerDialogStatus;
42
+ exports.extractThoughtResponseFromMessages = extractThoughtResponseFromMessages;
38
43
  exports.parseInnerDialogSession = parseInnerDialogSession;
39
44
  exports.formatThoughtTurns = formatThoughtTurns;
40
45
  exports.getInnerDialogSessionPath = getInnerDialogSessionPath;
46
+ exports.readInnerDialogStatus = readInnerDialogStatus;
47
+ exports.readInnerDialogRawData = readInnerDialogRawData;
41
48
  exports.followThoughts = followThoughts;
42
49
  const fs = __importStar(require("fs"));
43
50
  const path = __importStar(require("path"));
@@ -58,6 +65,20 @@ function contentToText(content) {
58
65
  })
59
66
  .join("\n");
60
67
  }
68
+ function extractToolFunction(toolCall) {
69
+ if (!toolCall || typeof toolCall !== "object" || !("function" in toolCall))
70
+ return null;
71
+ const maybeFunction = toolCall.function;
72
+ if (!maybeFunction || typeof maybeFunction !== "object")
73
+ return null;
74
+ const name = "name" in maybeFunction && typeof maybeFunction.name === "string"
75
+ ? maybeFunction.name
76
+ : undefined;
77
+ const argumentsValue = "arguments" in maybeFunction && typeof maybeFunction.arguments === "string"
78
+ ? maybeFunction.arguments
79
+ : undefined;
80
+ return { name, arguments: argumentsValue };
81
+ }
61
82
  function classifyTurn(userText) {
62
83
  if (userText.includes("waking up."))
63
84
  return { type: "boot" };
@@ -71,24 +92,247 @@ function extractToolNames(messages) {
71
92
  for (const msg of messages) {
72
93
  if (msg.role === "assistant" && Array.isArray(msg.tool_calls)) {
73
94
  for (const tc of msg.tool_calls) {
74
- if (tc.function?.name && tc.function.name !== "final_answer")
75
- names.push(tc.function.name);
95
+ const toolFunction = extractToolFunction(tc);
96
+ if (toolFunction?.name && toolFunction.name !== "settle")
97
+ names.push(toolFunction.name);
76
98
  }
77
99
  }
78
100
  }
79
101
  return names;
80
102
  }
81
- /** Extract text from a final_answer tool call's arguments. */
82
- function extractFinalAnswer(messages) {
103
+ function extractPendingPromptMessages(prompt) {
104
+ return prompt
105
+ .split("\n")
106
+ .map((line) => line.trim())
107
+ .filter((line) => line.startsWith("[pending from "))
108
+ .map((line) => {
109
+ const separator = line.indexOf("]: ");
110
+ return separator >= 0 ? line.slice(separator + 3).trim() : "";
111
+ })
112
+ .filter((line) => line.length > 0);
113
+ }
114
+ function readPendingMessagesForStatus(pendingDir) {
115
+ if (!fs.existsSync(pendingDir))
116
+ return [];
117
+ let entries;
118
+ try {
119
+ entries = fs.readdirSync(pendingDir);
120
+ }
121
+ catch {
122
+ return [];
123
+ }
124
+ const files = [
125
+ ...entries.filter((entry) => entry.endsWith(".json.processing")),
126
+ ...entries.filter((entry) => entry.endsWith(".json") && !entry.endsWith(".json.processing")),
127
+ ].sort((a, b) => a.localeCompare(b));
128
+ const messages = [];
129
+ for (const file of files) {
130
+ try {
131
+ const raw = fs.readFileSync(path.join(pendingDir, file), "utf-8");
132
+ const parsed = JSON.parse(raw);
133
+ if (typeof parsed.content === "string") {
134
+ messages.push(parsed);
135
+ }
136
+ }
137
+ catch {
138
+ // unreadable pending files should not break status queries
139
+ }
140
+ }
141
+ return messages;
142
+ }
143
+ function formatSurfacedValue(text, maxLength = 120) {
144
+ const firstLine = text
145
+ .split("\n")
146
+ .map((line) => line.trim())
147
+ .find((line) => line.length > 0);
148
+ if (!firstLine)
149
+ return "no outward result";
150
+ if (firstLine.length <= maxLength)
151
+ return `"${firstLine}"`;
152
+ return `"${firstLine.slice(0, maxLength - 3)}..."`;
153
+ }
154
+ function extractEnrichedFields(pendingMessages) {
155
+ const delegated = pendingMessages.find((msg) => msg.delegatedFrom);
156
+ if (!delegated?.delegatedFrom)
157
+ return {};
158
+ const snippet = delegated.content.length > 80 ? delegated.content.slice(0, 77) + "..." : delegated.content;
159
+ return {
160
+ origin: {
161
+ friendId: delegated.delegatedFrom.friendId,
162
+ channel: delegated.delegatedFrom.channel,
163
+ key: delegated.delegatedFrom.key,
164
+ },
165
+ contentSnippet: snippet,
166
+ ...(delegated.obligationStatus === "pending" ? { obligationPending: true } : {}),
167
+ };
168
+ }
169
+ function deriveInnerDialogStatus(pendingMessages, turns, runtimeState) {
170
+ if (runtimeState?.status === "running") {
171
+ if (pendingMessages.length > 0) {
172
+ return {
173
+ queue: "queued to inner/dialog",
174
+ wake: "queued behind active turn",
175
+ processing: "pending",
176
+ surfaced: "nothing yet",
177
+ ...extractEnrichedFields(pendingMessages),
178
+ };
179
+ }
180
+ return {
181
+ queue: "clear",
182
+ wake: "in progress",
183
+ processing: "started",
184
+ surfaced: "nothing yet",
185
+ };
186
+ }
187
+ if (pendingMessages.length > 0) {
188
+ return {
189
+ queue: "queued to inner/dialog",
190
+ wake: "awaiting inner session",
191
+ processing: "pending",
192
+ surfaced: "nothing yet",
193
+ ...extractEnrichedFields(pendingMessages),
194
+ };
195
+ }
196
+ const latestProcessedPendingTurn = [...turns]
197
+ .reverse()
198
+ .find((turn) => extractPendingPromptMessages(turn.prompt).length > 0);
199
+ if (!latestProcessedPendingTurn) {
200
+ return {
201
+ queue: "clear",
202
+ wake: "idle",
203
+ processing: "idle",
204
+ surfaced: "nothing recent",
205
+ };
206
+ }
207
+ return {
208
+ queue: "clear",
209
+ wake: "completed",
210
+ processing: "processed",
211
+ surfaced: formatSurfacedValue(latestProcessedPendingTurn.response),
212
+ };
213
+ }
214
+ function deriveInnerJob(pendingMessages, turns, runtimeState) {
215
+ const isRunning = runtimeState?.status === "running";
216
+ const delegated = pendingMessages.find((msg) => msg.delegatedFrom);
217
+ const enriched = extractEnrichedFields(pendingMessages);
218
+ const pendingMode = delegated && "mode" in delegated && delegated.mode ? delegated.mode : "reflect";
219
+ const origin = enriched.origin ?? null;
220
+ const content = delegated?.content ?? null;
221
+ const obligationStatus = delegated?.obligationStatus ?? null;
222
+ const queuedAt = delegated?.timestamp ?? null;
223
+ if (isRunning) {
224
+ (0, runtime_1.emitNervesEvent)({
225
+ component: "engine",
226
+ event: "engine.inner_job_derive",
227
+ message: "derived inner job state",
228
+ meta: { status: "running", mode: pendingMode, hasOrigin: origin !== null, hasObligation: obligationStatus !== null },
229
+ });
230
+ return {
231
+ status: "running",
232
+ content,
233
+ origin,
234
+ mode: pendingMode,
235
+ obligationStatus,
236
+ surfacedResult: null,
237
+ queuedAt,
238
+ startedAt: runtimeState?.startedAt ?? null,
239
+ surfacedAt: null,
240
+ };
241
+ }
242
+ if (pendingMessages.length > 0) {
243
+ (0, runtime_1.emitNervesEvent)({
244
+ component: "engine",
245
+ event: "engine.inner_job_derive",
246
+ message: "derived inner job state",
247
+ meta: { status: "queued", mode: pendingMode, hasOrigin: origin !== null, hasObligation: obligationStatus !== null },
248
+ });
249
+ return {
250
+ status: "queued",
251
+ content,
252
+ origin,
253
+ mode: pendingMode,
254
+ obligationStatus,
255
+ surfacedResult: null,
256
+ queuedAt,
257
+ startedAt: null,
258
+ surfacedAt: null,
259
+ };
260
+ }
261
+ // No pending, not running -- check for surfaced result
262
+ const latestProcessedPendingTurn = [...turns]
263
+ .reverse()
264
+ .find((turn) => extractPendingPromptMessages(turn.prompt).length > 0);
265
+ if (latestProcessedPendingTurn) {
266
+ const surfacedResult = extractThoughtResponseFromMessages([
267
+ { role: "assistant", content: latestProcessedPendingTurn.response },
268
+ ]);
269
+ (0, runtime_1.emitNervesEvent)({
270
+ component: "engine",
271
+ event: "engine.inner_job_derive",
272
+ message: "derived inner job state",
273
+ meta: { status: "surfaced", mode: "reflect", hasOrigin: false, hasObligation: false },
274
+ });
275
+ return {
276
+ status: "surfaced",
277
+ content: null,
278
+ origin: null,
279
+ mode: "reflect",
280
+ obligationStatus: null,
281
+ /* v8 ignore next -- defensive: surfacedResult fallback @preserve */
282
+ surfacedResult: surfacedResult || null,
283
+ queuedAt: null,
284
+ startedAt: null,
285
+ surfacedAt: null,
286
+ };
287
+ }
288
+ (0, runtime_1.emitNervesEvent)({
289
+ component: "engine",
290
+ event: "engine.inner_job_derive",
291
+ message: "derived inner job state",
292
+ meta: { status: "idle", mode: "reflect", hasOrigin: false, hasObligation: false },
293
+ });
294
+ return {
295
+ status: "idle",
296
+ content: null,
297
+ origin: null,
298
+ mode: "reflect",
299
+ obligationStatus: null,
300
+ surfacedResult: null,
301
+ queuedAt: null,
302
+ startedAt: null,
303
+ surfacedAt: null,
304
+ };
305
+ }
306
+ function formatInnerDialogStatus(status) {
307
+ const lines = [
308
+ `queue: ${status.queue}`,
309
+ `wake: ${status.wake}`,
310
+ `processing: ${status.processing}`,
311
+ `surfaced: ${status.surfaced}`,
312
+ ];
313
+ if (status.origin) {
314
+ lines.push(`origin: ${status.origin.friendId}/${status.origin.channel}/${status.origin.key}`);
315
+ }
316
+ if (status.contentSnippet) {
317
+ lines.push(`asked: ${status.contentSnippet}`);
318
+ }
319
+ if (status.obligationPending) {
320
+ lines.push("obligation: pending");
321
+ }
322
+ return lines.join("\n");
323
+ }
324
+ /** Extract text from a settle tool call's arguments. */
325
+ function extractSettleAnswer(messages) {
83
326
  for (let k = messages.length - 1; k >= 0; k--) {
84
327
  const msg = messages[k];
85
328
  if (msg.role !== "assistant" || !Array.isArray(msg.tool_calls))
86
329
  continue;
87
330
  for (const tc of msg.tool_calls) {
88
- if (tc.function?.name !== "final_answer")
331
+ const toolFunction = extractToolFunction(tc);
332
+ if (toolFunction?.name !== "settle")
89
333
  continue;
90
334
  try {
91
- const parsed = JSON.parse(tc.function.arguments ?? "{}");
335
+ const parsed = JSON.parse(toolFunction.arguments ?? "{}");
92
336
  if (typeof parsed.answer === "string" && parsed.answer.trim())
93
337
  return parsed.answer.trim();
94
338
  }
@@ -99,6 +343,13 @@ function extractFinalAnswer(messages) {
99
343
  }
100
344
  return "";
101
345
  }
346
+ function extractThoughtResponseFromMessages(messages) {
347
+ const assistantMsgs = messages.filter((message) => message.role === "assistant");
348
+ const lastAssistant = assistantMsgs.reverse().find((message) => contentToText(message.content).trim().length > 0);
349
+ return lastAssistant
350
+ ? contentToText(lastAssistant.content).trim()
351
+ : extractSettleAnswer(messages);
352
+ }
102
353
  function parseInnerDialogSession(sessionPath) {
103
354
  (0, runtime_1.emitNervesEvent)({
104
355
  component: "daemon",
@@ -146,12 +397,8 @@ function parseInnerDialogSession(sessionPath) {
146
397
  j++;
147
398
  }
148
399
  // Find the last assistant text response in this turn.
149
- // With tool_choice="required", the response may be inside a final_answer tool call.
150
- const assistantMsgs = turnMessages.filter((m) => m.role === "assistant");
151
- const lastAssistant = assistantMsgs.reverse().find((m) => contentToText(m.content).trim().length > 0);
152
- const response = lastAssistant
153
- ? contentToText(lastAssistant.content).trim()
154
- : extractFinalAnswer(turnMessages);
400
+ // With tool_choice="required", the response may be inside a settle tool call.
401
+ const response = extractThoughtResponseFromMessages(turnMessages);
155
402
  const tools = extractToolNames(turnMessages);
156
403
  turns.push({
157
404
  type: classification.type,
@@ -193,6 +440,41 @@ function formatThoughtTurns(turns, lastN) {
193
440
  function getInnerDialogSessionPath(agentRoot) {
194
441
  return path.join(agentRoot, "state", "sessions", "self", "inner", "dialog.json");
195
442
  }
443
+ function getInnerDialogRuntimeStatePath(sessionPath) {
444
+ return path.join(path.dirname(sessionPath), "runtime.json");
445
+ }
446
+ function readInnerDialogRuntimeState(runtimePath) {
447
+ try {
448
+ const raw = fs.readFileSync(runtimePath, "utf-8");
449
+ const parsed = JSON.parse(raw);
450
+ if (parsed.status !== "running" && parsed.status !== "idle")
451
+ return null;
452
+ return {
453
+ status: parsed.status,
454
+ reason: parsed.reason === "boot" || parsed.reason === "heartbeat" || parsed.reason === "instinct"
455
+ ? parsed.reason
456
+ : undefined,
457
+ startedAt: typeof parsed.startedAt === "string" ? parsed.startedAt : undefined,
458
+ lastCompletedAt: typeof parsed.lastCompletedAt === "string" ? parsed.lastCompletedAt : undefined,
459
+ };
460
+ }
461
+ catch {
462
+ return null;
463
+ }
464
+ }
465
+ function readInnerDialogStatus(sessionPath, pendingDir, runtimePath = getInnerDialogRuntimeStatePath(sessionPath)) {
466
+ const pendingMessages = readPendingMessagesForStatus(pendingDir);
467
+ const turns = parseInnerDialogSession(sessionPath);
468
+ const runtimeState = readInnerDialogRuntimeState(runtimePath);
469
+ return deriveInnerDialogStatus(pendingMessages, turns, runtimeState);
470
+ }
471
+ function readInnerDialogRawData(sessionPath, pendingDir) {
472
+ const runtimePath = getInnerDialogRuntimeStatePath(sessionPath);
473
+ const pendingMessages = readPendingMessagesForStatus(pendingDir);
474
+ const turns = parseInnerDialogSession(sessionPath);
475
+ const runtimeState = readInnerDialogRuntimeState(runtimePath);
476
+ return { pendingMessages, turns, runtimeState };
477
+ }
196
478
  /**
197
479
  * Watch a session file and emit new turns as they appear.
198
480
  * Returns a cleanup function that stops the watcher.
@@ -215,9 +497,12 @@ function followThoughts(sessionPath, onNewTurns, pollIntervalMs = 1000) {
215
497
  });
216
498
  return () => {
217
499
  fs.unwatchFile(sessionPath);
500
+ // Must be named `_end` (not `_stop`) to satisfy the nerves audit's
501
+ // start/end pairing rule — see src/nerves/coverage/audit-rules.ts which
502
+ // pairs `<prefix>_start` with `<prefix>_end` or `<prefix>_error`.
218
503
  (0, runtime_1.emitNervesEvent)({
219
504
  component: "daemon",
220
- event: "daemon.thoughts_follow_stop",
505
+ event: "daemon.thoughts_follow_end",
221
506
  message: "stopped following inner dialog session",
222
507
  meta: { sessionPath, totalTurns: displayedCount },
223
508
  });