@ouro.bot/cli 0.1.0-alpha.90 → 0.1.0-alpha.901

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 (702) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -23
  3. package/RepairGuide.ouro/agent.json +5 -0
  4. package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
  5. package/RepairGuide.ouro/psyche/SOUL.md +55 -0
  6. package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
  7. package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
  8. package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
  9. package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
  10. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  12. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  13. package/assets/bluebubbles-host +264 -0
  14. package/assets/sanctuary-host-launcher.sh +16 -0
  15. package/changelog.json +5717 -16
  16. package/deploy/unraid/Dockerfile +58 -0
  17. package/deploy/unraid/README.txt +2997 -0
  18. package/deploy/unraid/audit-container-spec.sh +4 -0
  19. package/deploy/unraid/container-runtime.json +1 -0
  20. package/deploy/unraid/docker-man-template-transaction.mjs +711 -0
  21. package/deploy/unraid/docker-man-template-xml.cjs +105 -0
  22. package/deploy/unraid/migrate-sanctuary-bundle.mjs +60 -0
  23. package/deploy/unraid/ouro-events/bootstrap-spool.sh +92 -0
  24. package/deploy/unraid/ouro-events/emit-event.mjs +310 -0
  25. package/deploy/unraid/ouro-events/emit-usenet-event.sh +54 -0
  26. package/deploy/unraid/ouro-events/install-usenet-guard.sh +435 -0
  27. package/deploy/unraid/ouro-events/usenet-health.sh +176 -0
  28. package/deploy/unraid/sanctuary-acceptance-adapter.sh +43 -0
  29. package/deploy/unraid/sanctuary-acceptance-contract.json +198 -0
  30. package/deploy/unraid/sanctuary-acceptance-harness.sh +23 -0
  31. package/deploy/unraid/sanctuary-authority-installation.json +36 -0
  32. package/deploy/unraid/sanctuary-authority-service.sh +30 -0
  33. package/deploy/unraid/sanctuary-butler-upgrade.mjs +1254 -0
  34. package/deploy/unraid/sanctuary-deployment-target.mjs +710 -0
  35. package/deploy/unraid/sanctuary-replay-gate.mjs +1614 -0
  36. package/deploy/unraid/sanctuary-safe-rename.py +24 -0
  37. package/deploy/unraid/sanctuary-unit16-host-broker.mjs +2086 -0
  38. package/deploy/unraid/sanctuary-unit16-run.sh +560 -0
  39. package/deploy/unraid/sanctuary-unit18-target-audit.sh +27 -0
  40. package/deploy/unraid/sanctuary.ouro/agent.json +66 -0
  41. package/deploy/unraid/sanctuary.ouro/arc/README.md +3 -0
  42. package/deploy/unraid/sanctuary.ouro/awaiting/house-care-sweep.md +17 -0
  43. package/deploy/unraid/sanctuary.ouro/bundle-meta.json +5 -0
  44. package/deploy/unraid/sanctuary.ouro/habits/sanctuary-health.md +8 -0
  45. package/deploy/unraid/sanctuary.ouro/mcp/media-mcp.mjs +2231 -0
  46. package/deploy/unraid/sanctuary.ouro/provider-readiness.json +11 -0
  47. package/deploy/unraid/sanctuary.ouro/psyche/ASPIRATIONS.md +5 -0
  48. package/deploy/unraid/sanctuary.ouro/psyche/IDENTITY.md +5 -0
  49. package/deploy/unraid/sanctuary.ouro/psyche/LORE.md +27 -0
  50. package/deploy/unraid/sanctuary.ouro/psyche/SOUL.md +27 -0
  51. package/deploy/unraid/sanctuary.ouro/psyche/TACIT.md +22 -0
  52. package/deploy/unraid/sanctuary.ouro/state/policy/steward.json +7 -0
  53. package/deploy/unraid/sanctuary.ouro/tool-profiles.json +232 -0
  54. package/deploy/unraid/sanctuary.xml +30 -0
  55. package/dist/a2a/card.js +57 -0
  56. package/dist/a2a/client.js +250 -0
  57. package/dist/a2a/config.js +50 -0
  58. package/dist/a2a/delegated-command-grants.js +93 -0
  59. package/dist/a2a/delegated-command.js +197 -0
  60. package/dist/a2a/delegation-stores.js +56 -0
  61. package/dist/a2a/did-resolution.js +93 -0
  62. package/dist/a2a/escalation-grants.js +84 -0
  63. package/dist/a2a/escalation-wiring.js +60 -0
  64. package/dist/a2a/identity.js +258 -0
  65. package/dist/a2a/inbound-share.js +110 -0
  66. package/dist/a2a/mission-result-wire.js +196 -0
  67. package/dist/a2a/onboarding.js +133 -0
  68. package/dist/a2a/operator-trust.js +382 -0
  69. package/dist/a2a/outbox-client.js +57 -0
  70. package/dist/a2a/outbox-store.js +188 -0
  71. package/dist/a2a/outbox-wire.js +95 -0
  72. package/dist/a2a/pin-store.js +132 -0
  73. package/dist/a2a/replay-grant-holders.js +33 -0
  74. package/dist/a2a/replay-harness.js +188 -0
  75. package/dist/a2a/resolution-proof.js +53 -0
  76. package/dist/a2a/sealed-chat.js +113 -0
  77. package/dist/a2a/seen-ledger.js +120 -0
  78. package/dist/a2a/server.js +771 -0
  79. package/dist/a2a/task-store.js +69 -0
  80. package/dist/a2a/transport.js +45 -0
  81. package/dist/a2a/trust-commands.js +203 -0
  82. package/dist/a2a/trusted-files.js +185 -0
  83. package/dist/a2a/types.js +3 -0
  84. package/dist/arc/attention-types.js +8 -0
  85. package/dist/arc/cares.js +360 -0
  86. package/dist/arc/episodes.js +118 -0
  87. package/dist/arc/evolution.js +490 -0
  88. package/dist/arc/flight-recorder.js +1034 -0
  89. package/dist/arc/intentions.js +134 -0
  90. package/dist/arc/json-store.js +117 -0
  91. package/dist/arc/obligations.js +386 -0
  92. package/dist/arc/packets.js +336 -0
  93. package/dist/arc/presence.js +185 -0
  94. package/dist/arc/task-lifecycle.js +57 -0
  95. package/dist/commerce/store.js +755 -0
  96. package/dist/commerce/types.js +3 -0
  97. package/dist/heart/active-work.js +798 -40
  98. package/dist/heart/agent-entry.js +252 -3
  99. package/dist/heart/approval-files.js +113 -0
  100. package/dist/heart/approval-store.js +960 -0
  101. package/dist/heart/attachments/image-normalize.js +194 -0
  102. package/dist/heart/attachments/materialize.js +97 -0
  103. package/dist/heart/attachments/originals.js +88 -0
  104. package/dist/heart/attachments/render.js +29 -0
  105. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  106. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  107. package/dist/heart/attachments/sources/index.js +18 -0
  108. package/dist/heart/attachments/sources/telegram.js +71 -0
  109. package/dist/heart/attachments/store.js +132 -0
  110. package/dist/heart/attachments/types.js +93 -0
  111. package/dist/heart/auth/auth-flow.js +495 -0
  112. package/dist/heart/autonomy-budget.js +478 -0
  113. package/dist/heart/awaiting/a2a-await-delivery.js +109 -0
  114. package/dist/heart/awaiting/await-alert.js +152 -0
  115. package/dist/heart/awaiting/await-expiry.js +143 -0
  116. package/dist/heart/awaiting/await-loader.js +91 -0
  117. package/dist/heart/awaiting/await-parser.js +152 -0
  118. package/dist/heart/awaiting/await-runtime-state.js +111 -0
  119. package/dist/heart/awaiting/await-scheduler.js +391 -0
  120. package/dist/heart/background-operations.js +281 -0
  121. package/dist/heart/bridges/manager.js +137 -17
  122. package/dist/heart/bridges/store.js +14 -2
  123. package/dist/heart/bundle-state.js +168 -0
  124. package/dist/heart/commitments.js +44 -18
  125. package/dist/heart/config-registry.js +331 -0
  126. package/dist/heart/config.js +174 -131
  127. package/dist/heart/context-loss-gauntlet.js +387 -0
  128. package/dist/heart/context-loss-sentinel.js +1159 -0
  129. package/dist/heart/core.js +2319 -579
  130. package/dist/heart/cross-chat-delivery.js +9 -22
  131. package/dist/heart/daemon/agent-config-check.js +451 -0
  132. package/dist/heart/daemon/agent-discovery.js +283 -3
  133. package/dist/heart/daemon/agent-home.js +319 -0
  134. package/dist/heart/daemon/agent-service.js +542 -0
  135. package/dist/heart/daemon/agentic-repair.js +547 -0
  136. package/dist/heart/daemon/await-private-wake.js +59 -0
  137. package/dist/heart/daemon/bluebubbles-cli-integration.js +71 -0
  138. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  139. package/dist/heart/daemon/bluebubbles-host-protocol.js +433 -0
  140. package/dist/heart/daemon/bluebubbles-host.js +273 -0
  141. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  142. package/dist/heart/daemon/cadence.js +180 -0
  143. package/dist/heart/daemon/cli-defaults.js +859 -0
  144. package/dist/heart/daemon/cli-desk.js +322 -0
  145. package/dist/heart/daemon/cli-exec.js +9003 -0
  146. package/dist/heart/daemon/cli-help.js +729 -0
  147. package/dist/heart/daemon/cli-parse.js +3140 -0
  148. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  149. package/dist/heart/daemon/cli-render.js +819 -0
  150. package/dist/heart/daemon/cli-types.js +8 -0
  151. package/dist/heart/daemon/connect-bay.js +323 -0
  152. package/dist/heart/daemon/container-credential-bootstrap.js +273 -0
  153. package/dist/heart/daemon/container-healthcheck.js +112 -0
  154. package/dist/heart/daemon/container-runtime.js +97 -0
  155. package/dist/heart/daemon/container-spec-auditor-main.js +171 -0
  156. package/dist/heart/daemon/container-spec-auditor.js +235 -0
  157. package/dist/heart/daemon/daemon-bootstrap-startup.js +115 -0
  158. package/dist/heart/daemon/daemon-cli.js +29 -2349
  159. package/dist/heart/daemon/daemon-entry.js +953 -11
  160. package/dist/heart/daemon/daemon-health.js +186 -0
  161. package/dist/heart/daemon/daemon-rollup.js +57 -0
  162. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  163. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  164. package/dist/heart/daemon/daemon.js +2084 -105
  165. package/dist/heart/daemon/dns-workflow.js +394 -0
  166. package/dist/heart/daemon/doctor-types.js +8 -0
  167. package/dist/heart/daemon/doctor.js +1755 -0
  168. package/dist/heart/daemon/freshness.js +345 -0
  169. package/dist/heart/daemon/habit-private-wake.js +61 -0
  170. package/dist/heart/daemon/health-monitor.js +154 -11
  171. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  172. package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
  173. package/dist/heart/daemon/http-health-probe.js +80 -0
  174. package/dist/heart/daemon/human-command-screens.js +234 -0
  175. package/dist/heart/daemon/human-readiness.js +114 -0
  176. package/dist/heart/daemon/inner-status.js +78 -0
  177. package/dist/heart/daemon/interactive-repair.js +394 -0
  178. package/dist/heart/daemon/launchd.js +37 -8
  179. package/dist/heart/daemon/log-tailer.js +79 -10
  180. package/dist/heart/daemon/logs-prune.js +132 -0
  181. package/dist/heart/daemon/mcp-canary.js +524 -0
  182. package/dist/heart/daemon/message-router.js +65 -5
  183. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  184. package/dist/heart/daemon/os-cron-deps.js +135 -0
  185. package/dist/heart/daemon/os-cron.js +22 -14
  186. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  187. package/dist/heart/daemon/ouro-entry.js +3 -1
  188. package/dist/heart/daemon/plugin-cli.js +432 -0
  189. package/dist/heart/daemon/process-manager.js +760 -61
  190. package/dist/heart/daemon/provider-discovery.js +137 -0
  191. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  192. package/dist/heart/daemon/prunable-bundle.js +144 -0
  193. package/dist/heart/daemon/pulse.js +511 -0
  194. package/dist/heart/daemon/readiness-repair.js +365 -0
  195. package/dist/heart/daemon/run-hooks.js +2 -0
  196. package/dist/heart/daemon/runtime-logging.js +47 -14
  197. package/dist/heart/daemon/runtime-metadata.js +2 -30
  198. package/dist/heart/daemon/runtime-mode.js +13 -2
  199. package/dist/heart/daemon/safe-mode.js +161 -0
  200. package/dist/heart/daemon/sanctuary-acceptance-adapter.js +2654 -0
  201. package/dist/heart/daemon/sanctuary-acceptance-harness.js +1830 -0
  202. package/dist/heart/daemon/sanctuary-acceptance-marker.js +267 -0
  203. package/dist/heart/daemon/sanctuary-acceptance-scenarios.js +955 -0
  204. package/dist/heart/daemon/sanctuary-authority-codec.js +86 -0
  205. package/dist/heart/daemon/sanctuary-authority-epoch.js +281 -0
  206. package/dist/heart/daemon/sanctuary-authority-installation.js +161 -0
  207. package/dist/heart/daemon/sanctuary-authority-ledger.js +241 -0
  208. package/dist/heart/daemon/sanctuary-authority-root-lifecycle.js +1267 -0
  209. package/dist/heart/daemon/sanctuary-authority-vault-migration.js +79 -0
  210. package/dist/heart/daemon/sanctuary-bundle-migration.js +730 -0
  211. package/dist/heart/daemon/sanctuary-host-authority.js +1008 -0
  212. package/dist/heart/daemon/sanctuary-host-detached-supervisor.js +493 -0
  213. package/dist/heart/daemon/sanctuary-host-executor.js +670 -0
  214. package/dist/heart/daemon/sanctuary-host-linux-kernel.js +334 -0
  215. package/dist/heart/daemon/sanctuary-host-supervisor-entry.js +207 -0
  216. package/dist/heart/daemon/sanctuary-host-supervisor.js +95 -0
  217. package/dist/heart/daemon/sanctuary-package-management.js +103 -0
  218. package/dist/heart/daemon/sanctuary-scheduler-liveness.js +227 -0
  219. package/dist/heart/daemon/sanctuary-scheduler-origin.js +132 -0
  220. package/dist/heart/daemon/sanctuary-telegram-authority-entry.js +475 -0
  221. package/dist/heart/daemon/sanctuary-telegram-authority-gateway.js +585 -0
  222. package/dist/heart/daemon/sanctuary-telegram-authority-service.js +676 -0
  223. package/dist/heart/daemon/sense-manager.js +716 -48
  224. package/dist/heart/daemon/session-id-resolver.js +131 -0
  225. package/dist/heart/daemon/skill-management-installer.js +1 -1
  226. package/dist/heart/daemon/socket-client.js +180 -12
  227. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  228. package/dist/heart/daemon/startup-tui.js +339 -0
  229. package/dist/heart/daemon/supercronic-supervisor.js +282 -0
  230. package/dist/heart/daemon/task-scheduler.js +117 -39
  231. package/dist/heart/daemon/terminal-ui.js +499 -0
  232. package/dist/heart/daemon/thoughts.js +138 -54
  233. package/dist/heart/daemon/up-progress.js +366 -0
  234. package/dist/heart/daemon/vault-items.js +56 -0
  235. package/dist/heart/delegation.js +1 -4
  236. package/dist/heart/external-events/router.js +1516 -0
  237. package/dist/heart/failure-reports.js +335 -0
  238. package/dist/heart/file-lock.js +109 -0
  239. package/dist/heart/frontend-approval-runtime.js +506 -0
  240. package/dist/heart/frontend-journal.js +215 -0
  241. package/dist/heart/frontend-session-service.js +237 -0
  242. package/dist/heart/frontend-socket-client.js +164 -0
  243. package/dist/heart/frontend-socket.js +400 -0
  244. package/dist/heart/habits/habit-cancel.js +810 -0
  245. package/dist/heart/habits/habit-lifecycle.js +1327 -0
  246. package/dist/heart/habits/habit-migration.js +194 -0
  247. package/dist/heart/habits/habit-parser.js +278 -0
  248. package/dist/heart/habits/habit-runtime-state.js +93 -0
  249. package/dist/heart/habits/habit-scheduler.js +653 -0
  250. package/dist/heart/habits/habit-session-summary.js +318 -0
  251. package/dist/heart/habits/habit-session.js +636 -0
  252. package/dist/heart/{daemon → hatch}/hatch-flow.js +55 -62
  253. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  254. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  255. package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
  256. package/dist/heart/identity.js +199 -59
  257. package/dist/heart/kept-notes.js +289 -0
  258. package/dist/heart/kicks.js +1 -1
  259. package/dist/heart/machine-identity.js +175 -0
  260. package/dist/heart/mail-import-discovery.js +356 -0
  261. package/dist/heart/mailbox/mailbox-http-hooks.js +98 -0
  262. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  263. package/dist/heart/mailbox/mailbox-http-routes.js +398 -0
  264. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  265. package/dist/heart/mailbox/mailbox-http-transport.js +272 -0
  266. package/dist/heart/mailbox/mailbox-http.js +99 -0
  267. package/dist/heart/mailbox/mailbox-read.js +39 -0
  268. package/dist/heart/mailbox/mailbox-types.js +27 -0
  269. package/dist/heart/mailbox/mailbox-view.js +197 -0
  270. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  271. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  272. package/dist/heart/mailbox/readers/mail.js +375 -0
  273. package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
  274. package/dist/heart/mailbox/readers/sessions.js +231 -0
  275. package/dist/heart/mailbox/readers/shared.js +111 -0
  276. package/dist/heart/mcp/mcp-server.js +696 -0
  277. package/dist/heart/migrate-config.js +100 -0
  278. package/dist/heart/model-capabilities.js +11 -0
  279. package/dist/heart/orientation-frame.js +345 -0
  280. package/dist/heart/platform.js +81 -0
  281. package/dist/heart/primitives.js +1 -1
  282. package/dist/heart/private-runtime/decision-renderer.js +158 -0
  283. package/dist/heart/private-runtime/index.js +18 -0
  284. package/dist/heart/private-runtime/ledger.js +221 -0
  285. package/dist/heart/private-runtime/policy.js +260 -0
  286. package/dist/heart/private-runtime/types.js +2 -0
  287. package/dist/heart/progress-story.js +1 -1
  288. package/dist/heart/provider-attempt.js +137 -0
  289. package/dist/heart/provider-binding-resolver.js +273 -0
  290. package/dist/heart/provider-credentials.js +449 -0
  291. package/dist/heart/provider-failover.js +311 -0
  292. package/dist/heart/provider-models.js +96 -0
  293. package/dist/heart/provider-ping.js +265 -0
  294. package/dist/heart/provider-readiness-cache.js +119 -0
  295. package/dist/heart/provider-visibility.js +188 -0
  296. package/dist/heart/providers/anthropic-token.js +131 -0
  297. package/dist/heart/providers/anthropic.js +173 -60
  298. package/dist/heart/providers/azure.js +23 -11
  299. package/dist/heart/providers/error-classification.js +127 -0
  300. package/dist/heart/providers/github-copilot.js +34 -38
  301. package/dist/heart/providers/minimax-vlm.js +189 -0
  302. package/dist/heart/providers/minimax.js +26 -8
  303. package/dist/heart/providers/openai-codex-token.js +349 -0
  304. package/dist/heart/providers/openai-codex.js +55 -40
  305. package/dist/heart/providers/openai-compatible.js +177 -0
  306. package/dist/heart/reply-style.js +56 -0
  307. package/dist/heart/run-ledger.js +247 -0
  308. package/dist/heart/runtime-capability-check.js +170 -0
  309. package/dist/heart/runtime-credentials.js +607 -0
  310. package/dist/heart/runtime-cwd.js +87 -0
  311. package/dist/heart/sense-truth.js +24 -4
  312. package/dist/heart/session-activity.js +92 -24
  313. package/dist/heart/session-events.js +1504 -0
  314. package/dist/heart/session-playback-cli-main.js +5 -0
  315. package/dist/heart/session-playback-cli.js +36 -0
  316. package/dist/heart/session-playback.js +231 -0
  317. package/dist/heart/session-redaction-repair-cli-main.js +31 -0
  318. package/dist/heart/session-redaction-repair.js +552 -0
  319. package/dist/heart/session-stats-cli-main.js +5 -0
  320. package/dist/heart/session-stats.js +183 -0
  321. package/dist/heart/session-transcript.js +133 -0
  322. package/dist/heart/shepherd-config.js +113 -0
  323. package/dist/heart/source-grounding.js +283 -0
  324. package/dist/heart/start-of-turn-packet.js +372 -0
  325. package/dist/heart/steward-policy.js +656 -0
  326. package/dist/heart/streaming.js +604 -207
  327. package/dist/heart/structured-output.js +196 -0
  328. package/dist/heart/sync-classification.js +176 -0
  329. package/dist/heart/sync-health.js +152 -0
  330. package/dist/heart/sync.js +726 -0
  331. package/dist/heart/target-resolution.js +11 -7
  332. package/dist/heart/tempo.js +93 -0
  333. package/dist/heart/temporal-view.js +41 -0
  334. package/dist/heart/timeouts.js +101 -0
  335. package/dist/heart/tool-activity-callbacks.js +59 -0
  336. package/dist/heart/tool-approval.js +382 -0
  337. package/dist/heart/tool-description.js +155 -0
  338. package/dist/heart/tool-friction.js +55 -0
  339. package/dist/heart/tool-loop.js +206 -0
  340. package/dist/heart/turn-context.js +494 -0
  341. package/dist/heart/turn-execution-lease.js +30 -0
  342. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  343. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  344. package/dist/heart/versioning/ouro-path-installer.js +432 -0
  345. package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
  346. package/dist/heart/versioning/ouro-version-manager.js +409 -0
  347. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  348. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  349. package/dist/heart/versioning/update-hooks.js +154 -0
  350. package/dist/heart/versioning/version-intent.js +114 -0
  351. package/dist/heart/work-card.js +380 -0
  352. package/dist/mailbox-ui/assets/index-Cyv4mw3Y.js +1 -0
  353. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  354. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  355. package/dist/mailbox-ui/index.html +16 -0
  356. package/dist/mailroom/attention.js +167 -0
  357. package/dist/mailroom/autonomy.js +209 -0
  358. package/dist/mailroom/blob-store.js +889 -0
  359. package/dist/mailroom/body-cache.js +61 -0
  360. package/dist/mailroom/cache-sync-cli.js +58 -0
  361. package/dist/mailroom/core.js +803 -0
  362. package/dist/mailroom/entry.js +160 -0
  363. package/dist/mailroom/file-store.js +568 -0
  364. package/dist/mailroom/hosted-cache-sync.js +384 -0
  365. package/dist/mailroom/mbox-import.js +393 -0
  366. package/dist/mailroom/migration.js +164 -0
  367. package/dist/mailroom/outbound.js +380 -0
  368. package/dist/mailroom/policy.js +263 -0
  369. package/dist/mailroom/reader.js +292 -0
  370. package/dist/mailroom/search-cache.js +513 -0
  371. package/dist/mailroom/search-relevance.js +319 -0
  372. package/dist/mailroom/smtp-ingress.js +176 -0
  373. package/dist/mailroom/source-state.js +176 -0
  374. package/dist/mailroom/thread.js +109 -0
  375. package/dist/mailroom/travel-extract.js +89 -0
  376. package/dist/mind/bundle-manifest.js +24 -2
  377. package/dist/mind/context.js +307 -139
  378. package/dist/mind/desk-section.js +362 -0
  379. package/dist/mind/diary-integrity.js +60 -0
  380. package/dist/mind/{memory.js → diary.js} +68 -77
  381. package/dist/mind/embedding-provider.js +60 -0
  382. package/dist/mind/file-state.js +179 -0
  383. package/dist/mind/{associative-recall.js → note-search.js} +47 -58
  384. package/dist/mind/obligation-steering.js +199 -3
  385. package/dist/mind/pending.js +36 -10
  386. package/dist/mind/prompt-budget.js +479 -0
  387. package/dist/mind/prompt-refresh.js +3 -2
  388. package/dist/mind/prompt.js +1085 -198
  389. package/dist/mind/provenance-trust.js +26 -0
  390. package/dist/mind/record-paths.js +312 -0
  391. package/dist/mind/scrutiny.js +173 -0
  392. package/dist/mind/session-transaction.js +564 -0
  393. package/dist/nerves/cli-logging.js +7 -1
  394. package/dist/nerves/coverage/audit-rules.js +15 -6
  395. package/dist/nerves/coverage/audit.js +28 -2
  396. package/dist/nerves/coverage/cli.js +1 -1
  397. package/dist/nerves/coverage/contract.js +5 -5
  398. package/dist/nerves/coverage/file-completeness.js +139 -5
  399. package/dist/nerves/coverage/run-artifacts.js +55 -35
  400. package/dist/nerves/coverage/source-scanner.js +4 -4
  401. package/dist/nerves/event-buffer.js +111 -0
  402. package/dist/nerves/index.js +293 -9
  403. package/dist/nerves/observation.js +20 -0
  404. package/dist/nerves/redact.js +79 -0
  405. package/dist/nerves/review/cli-main.js +5 -0
  406. package/dist/nerves/review/cli.js +156 -0
  407. package/dist/nerves/review/core.js +159 -0
  408. package/dist/nerves/runtime.js +17 -1
  409. package/dist/repertoire/ado-client.js +15 -56
  410. package/dist/repertoire/ado-semantic.js +16 -10
  411. package/dist/repertoire/api-client.js +97 -0
  412. package/dist/repertoire/bitwarden-store.js +1191 -0
  413. package/dist/repertoire/bundle-templates.js +71 -0
  414. package/dist/repertoire/bw-installer.js +180 -0
  415. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  416. package/dist/repertoire/coding/context-pack.js +331 -0
  417. package/dist/repertoire/coding/feedback.js +174 -32
  418. package/dist/repertoire/coding/index.js +15 -3
  419. package/dist/repertoire/coding/manager.js +159 -10
  420. package/dist/repertoire/coding/spawner.js +40 -11
  421. package/dist/repertoire/coding/tools.js +182 -18
  422. package/dist/repertoire/coding/workbench-client.js +272 -0
  423. package/dist/repertoire/coding/workbench-manager.js +346 -0
  424. package/dist/repertoire/commerce-errors.js +109 -0
  425. package/dist/repertoire/commerce-self-test.js +156 -0
  426. package/dist/repertoire/credential-access.js +182 -0
  427. package/dist/repertoire/desk/classifier.js +362 -0
  428. package/dist/repertoire/duffel-client.js +185 -0
  429. package/dist/repertoire/github-client.js +14 -55
  430. package/dist/repertoire/graph-client.js +11 -52
  431. package/dist/repertoire/guardrails.js +961 -19
  432. package/dist/repertoire/house-sweep.js +469 -0
  433. package/dist/repertoire/mcp-client.js +58 -5
  434. package/dist/repertoire/mcp-manager.js +427 -139
  435. package/dist/repertoire/mcp-tools.js +132 -0
  436. package/dist/repertoire/mcp-write-guard.js +46 -0
  437. package/dist/repertoire/plugin-mcp.js +175 -0
  438. package/dist/repertoire/plugins.js +253 -0
  439. package/dist/repertoire/relationship-authorization.js +322 -0
  440. package/dist/repertoire/sanctuary-container-policy.js +46 -0
  441. package/dist/repertoire/shell-sessions.js +134 -0
  442. package/dist/repertoire/skills.js +48 -4
  443. package/dist/repertoire/stripe-client.js +131 -0
  444. package/dist/repertoire/tool-arguments.js +182 -0
  445. package/dist/repertoire/tool-results.js +29 -0
  446. package/dist/repertoire/tools-a2a.js +699 -0
  447. package/dist/repertoire/tools-attachments.js +322 -0
  448. package/dist/repertoire/tools-awaiting.js +870 -0
  449. package/dist/repertoire/tools-base.js +81 -1168
  450. package/dist/repertoire/tools-bluebubbles.js +2 -0
  451. package/dist/repertoire/tools-bridge.js +144 -0
  452. package/dist/repertoire/tools-bundle.js +995 -0
  453. package/dist/repertoire/tools-commerce.js +253 -0
  454. package/dist/repertoire/tools-config.js +186 -0
  455. package/dist/repertoire/tools-continuity.js +575 -0
  456. package/dist/repertoire/tools-credential.js +383 -0
  457. package/dist/repertoire/tools-escalation.js +84 -0
  458. package/dist/repertoire/tools-evolution.js +527 -0
  459. package/dist/repertoire/tools-files.js +344 -0
  460. package/dist/repertoire/tools-flight.js +290 -0
  461. package/dist/repertoire/tools-flow.js +119 -0
  462. package/dist/repertoire/tools-github.js +3 -8
  463. package/dist/repertoire/tools-habits.js +103 -0
  464. package/dist/repertoire/tools-house-care.js +174 -0
  465. package/dist/repertoire/tools-mail.js +1828 -0
  466. package/dist/repertoire/tools-notes.js +496 -0
  467. package/dist/repertoire/tools-obligations.js +182 -0
  468. package/dist/repertoire/tools-orientation.js +31 -0
  469. package/dist/repertoire/tools-record.js +482 -0
  470. package/dist/repertoire/tools-rsvp.js +139 -0
  471. package/dist/repertoire/tools-runtime.js +238 -0
  472. package/dist/repertoire/tools-sanctuary-host.js +202 -0
  473. package/dist/repertoire/tools-session.js +1133 -0
  474. package/dist/repertoire/tools-shell.js +149 -0
  475. package/dist/repertoire/tools-shepherd.js +180 -0
  476. package/dist/repertoire/tools-steward-policy.js +147 -0
  477. package/dist/repertoire/tools-stripe.js +224 -0
  478. package/dist/repertoire/tools-surface.js +369 -0
  479. package/dist/repertoire/tools-teams.js +12 -39
  480. package/dist/repertoire/tools-telegram-contacts.js +37 -0
  481. package/dist/repertoire/tools-travel.js +125 -0
  482. package/dist/repertoire/tools-trip.js +982 -0
  483. package/dist/repertoire/tools-unraid.js +556 -0
  484. package/dist/repertoire/tools-user-profile.js +146 -0
  485. package/dist/repertoire/tools-vault.js +40 -0
  486. package/dist/repertoire/tools-voice-local.js +198 -0
  487. package/dist/repertoire/tools-voice.js +145 -0
  488. package/dist/repertoire/tools.js +514 -156
  489. package/dist/repertoire/travel-api-client.js +360 -0
  490. package/dist/repertoire/unraid-client.js +155 -0
  491. package/dist/repertoire/unraid-restart.js +339 -0
  492. package/dist/repertoire/user-profile.js +131 -0
  493. package/dist/repertoire/vault-setup.js +246 -0
  494. package/dist/repertoire/vault-unlock.js +686 -0
  495. package/dist/rsvp/aisleplanner-client.js +354 -0
  496. package/dist/rsvp/cli.js +926 -0
  497. package/dist/rsvp/config.js +327 -0
  498. package/dist/rsvp/cutover.js +433 -0
  499. package/dist/rsvp/diagnostics.js +232 -0
  500. package/dist/rsvp/diff-renderer.js +176 -0
  501. package/dist/rsvp/habit-policy.js +110 -0
  502. package/dist/rsvp/habit-stage.js +123 -0
  503. package/dist/rsvp/incident-bundle.js +97 -0
  504. package/dist/rsvp/migration.js +204 -0
  505. package/dist/rsvp/native-habit-runner.js +630 -0
  506. package/dist/rsvp/outbound-state.js +628 -0
  507. package/dist/rsvp/query.js +118 -0
  508. package/dist/rsvp/replay.js +233 -0
  509. package/dist/rsvp/snapshot.js +232 -0
  510. package/dist/rsvp/spend-ledger.js +175 -0
  511. package/dist/scripts/claude-code-hook.js +41 -0
  512. package/dist/scripts/claude-code-stop-hook.js +47 -0
  513. package/dist/senses/a2a-entry.js +132 -0
  514. package/dist/senses/acp-server.js +386 -0
  515. package/dist/senses/attention-queue.js +186 -0
  516. package/dist/senses/await-turn-message.js +65 -0
  517. package/dist/senses/bluebubbles/active-turns.js +216 -0
  518. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  519. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  520. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +355 -40
  521. package/dist/senses/bluebubbles/context-packet.js +207 -0
  522. package/dist/senses/bluebubbles/context-smoke.js +144 -0
  523. package/dist/senses/bluebubbles/entry.js +90 -0
  524. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +21 -3
  525. package/dist/senses/bluebubbles/index.js +3841 -0
  526. package/dist/senses/bluebubbles/latest-turn.js +311 -0
  527. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  528. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +159 -28
  529. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +24 -13
  530. package/dist/senses/bluebubbles/outbound-state.js +308 -0
  531. package/dist/senses/bluebubbles/processed-log.js +133 -0
  532. package/dist/senses/bluebubbles/reaction-policy.js +47 -0
  533. package/dist/senses/bluebubbles/replay.js +284 -0
  534. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  535. package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
  536. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  537. package/dist/senses/bluebubbles/webhook-registration.js +228 -0
  538. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  539. package/dist/senses/cli/bracketed-paste.js +82 -0
  540. package/dist/senses/cli/image-paste.js +287 -0
  541. package/dist/senses/cli/image-ref-navigation.js +75 -0
  542. package/dist/senses/cli/ink-app.js +156 -0
  543. package/dist/senses/cli/inline-diff.js +64 -0
  544. package/dist/senses/cli/input-keys.js +174 -0
  545. package/dist/senses/cli/kill-ring.js +86 -0
  546. package/dist/senses/cli/message-list.js +51 -0
  547. package/dist/senses/cli/ouro-tui.js +607 -0
  548. package/dist/senses/cli/spinner-imperative.js +135 -0
  549. package/dist/senses/cli/spinner.js +101 -0
  550. package/dist/senses/cli/status-line.js +60 -0
  551. package/dist/senses/cli/streaming-markdown.js +526 -0
  552. package/dist/senses/cli/tool-display.js +85 -0
  553. package/dist/senses/cli/tool-render.js +85 -0
  554. package/dist/senses/cli/tui-store.js +241 -0
  555. package/dist/senses/cli/virtual-list.js +35 -0
  556. package/dist/senses/cli-entry.js +60 -8
  557. package/dist/senses/cli.js +601 -304
  558. package/dist/senses/commands.js +66 -3
  559. package/dist/senses/context-packet-ledger.js +371 -0
  560. package/dist/senses/context-packets.js +154 -0
  561. package/dist/senses/habit-lifecycle-guard.js +24 -0
  562. package/dist/senses/habit-turn-message.js +160 -0
  563. package/dist/senses/ingress-evidence.js +2 -0
  564. package/dist/senses/mail-entry.js +66 -0
  565. package/dist/senses/mail.js +524 -0
  566. package/dist/senses/pipeline.js +1136 -204
  567. package/dist/senses/private-runtime-worker.js +859 -0
  568. package/dist/senses/private-runtime.js +1627 -0
  569. package/dist/senses/proactive-content-guard.js +51 -0
  570. package/dist/senses/root-host-approval-port.js +345 -0
  571. package/dist/senses/root-host-approval-runtime.js +393 -0
  572. package/dist/senses/sanctuary-authority-resident.js +102 -0
  573. package/dist/senses/sanctuary-download-credit-presentation.js +31 -0
  574. package/dist/senses/sanctuary-full-visibility-contract.js +302 -0
  575. package/dist/senses/sanctuary-grounding.js +118 -0
  576. package/dist/senses/sanctuary-health-acceptance-probe-entry.js +12 -0
  577. package/dist/senses/sanctuary-health-acceptance-probe.js +774 -0
  578. package/dist/senses/sanctuary-health-runner.js +104 -0
  579. package/dist/senses/sanctuary-health.js +422 -0
  580. package/dist/senses/sanctuary-install-state-contract.js +169 -0
  581. package/dist/senses/sanctuary-interactive-control.js +410 -0
  582. package/dist/senses/sanctuary-media-catalog-contract.js +297 -0
  583. package/dist/senses/sanctuary-media-optimization.js +514 -0
  584. package/dist/senses/sanctuary-runtime.js +369 -0
  585. package/dist/senses/sanctuary-sab.js +85 -0
  586. package/dist/senses/sanctuary-storage-optimization-contract.js +32 -0
  587. package/dist/senses/shared-turn.js +793 -0
  588. package/dist/senses/shepherd/client.js +196 -0
  589. package/dist/senses/shepherd/cmux.js +332 -0
  590. package/dist/senses/shepherd/herdr.js +311 -0
  591. package/dist/senses/shepherd/host.js +14 -0
  592. package/dist/senses/shepherd/judge.js +98 -0
  593. package/dist/senses/shepherd/redact.js +37 -0
  594. package/dist/senses/shepherd/returns.js +79 -0
  595. package/dist/senses/shepherd/sense.js +288 -0
  596. package/dist/senses/shepherd-entry.js +78 -0
  597. package/dist/senses/surface-tool.js +109 -0
  598. package/dist/senses/teams-entry.js +60 -8
  599. package/dist/senses/teams.js +519 -218
  600. package/dist/senses/telegram-admission.js +718 -0
  601. package/dist/senses/telegram-approval-runtime.js +793 -0
  602. package/dist/senses/telegram-attachments.js +186 -0
  603. package/dist/senses/telegram-audit-ledger.js +220 -0
  604. package/dist/senses/telegram-authority-transport.js +231 -0
  605. package/dist/senses/telegram-client.js +1749 -0
  606. package/dist/senses/telegram-effect-adapter.js +900 -0
  607. package/dist/senses/telegram-entry.js +83 -0
  608. package/dist/senses/telegram.js +2351 -0
  609. package/dist/senses/trust-gate.js +104 -9
  610. package/dist/senses/voice/audio-playback.js +237 -0
  611. package/dist/senses/voice/audio-routing.js +119 -0
  612. package/dist/senses/voice/call-auth.js +250 -0
  613. package/dist/senses/voice/elevenlabs.js +202 -0
  614. package/dist/senses/voice/floor-control.js +431 -0
  615. package/dist/senses/voice/floor-controller.js +115 -0
  616. package/dist/senses/voice/golden-path.js +116 -0
  617. package/dist/senses/voice/index.js +29 -0
  618. package/dist/senses/voice/local-audio-control.js +344 -0
  619. package/dist/senses/voice/local-audio-devices.js +516 -0
  620. package/dist/senses/voice/local-audio-disclosure.js +174 -0
  621. package/dist/senses/voice/local-audio-identity.js +103 -0
  622. package/dist/senses/voice/local-audio-join.js +325 -0
  623. package/dist/senses/voice/local-audio-mute.js +199 -0
  624. package/dist/senses/voice/local-audio-notify.js +121 -0
  625. package/dist/senses/voice/local-audio-prompts.js +116 -0
  626. package/dist/senses/voice/local-audio-transport.js +427 -0
  627. package/dist/senses/voice/local-audio.js +281 -0
  628. package/dist/senses/voice/local-media-stream.js +145 -0
  629. package/dist/senses/voice/meeting.js +113 -0
  630. package/dist/senses/voice/outbound.js +190 -0
  631. package/dist/senses/voice/phone.js +33 -0
  632. package/dist/senses/voice/playback.js +139 -0
  633. package/dist/senses/voice/process-guards.js +51 -0
  634. package/dist/senses/voice/realtime-eval.js +496 -0
  635. package/dist/senses/voice/realtime-tool-schema.js +195 -0
  636. package/dist/senses/voice/realtime-trace.js +531 -0
  637. package/dist/senses/voice/transcript.js +70 -0
  638. package/dist/senses/voice/turn.js +191 -0
  639. package/dist/senses/voice/twilio-phone-runtime.js +836 -0
  640. package/dist/senses/voice/twilio-phone.js +5454 -0
  641. package/dist/senses/voice/types.js +2 -0
  642. package/dist/senses/voice/whisper.js +161 -0
  643. package/dist/senses/voice-entry.js +83 -0
  644. package/dist/senses/voice-realtime-eval-command.js +99 -0
  645. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  646. package/dist/senses/voice-twilio-entry.js +87 -0
  647. package/dist/trips/core.js +138 -0
  648. package/dist/trips/store.js +265 -0
  649. package/dist/util/frontmatter.js +69 -0
  650. package/npm-shrinkwrap.json +8100 -0
  651. package/package.json +73 -13
  652. package/skills/agent-commerce.md +113 -0
  653. package/skills/browser-navigation.md +117 -0
  654. package/skills/commerce-setup-guide.md +116 -0
  655. package/skills/commerce-setup.md +84 -0
  656. package/skills/configure-dev-tools.md +99 -0
  657. package/skills/travel-planning.md +138 -0
  658. package/dist/heart/daemon/auth-flow.js +0 -430
  659. package/dist/heart/daemon/ouro-path-installer.js +0 -260
  660. package/dist/heart/daemon/ouro-version-manager.js +0 -171
  661. package/dist/heart/daemon/update-hooks.js +0 -138
  662. package/dist/heart/obligations.js +0 -191
  663. package/dist/heart/safe-workspace.js +0 -362
  664. package/dist/heart/session-recall.js +0 -116
  665. package/dist/mind/friends/channel.js +0 -84
  666. package/dist/mind/friends/group-context.js +0 -144
  667. package/dist/mind/friends/resolver.js +0 -84
  668. package/dist/mind/friends/store-file.js +0 -190
  669. package/dist/mind/friends/store.js +0 -4
  670. package/dist/mind/friends/tokens.js +0 -26
  671. package/dist/mind/friends/trust-explanation.js +0 -74
  672. package/dist/mind/friends/types.js +0 -29
  673. package/dist/repertoire/tasks/board.js +0 -134
  674. package/dist/repertoire/tasks/index.js +0 -224
  675. package/dist/repertoire/tasks/lifecycle.js +0 -80
  676. package/dist/repertoire/tasks/middleware.js +0 -65
  677. package/dist/repertoire/tasks/parser.js +0 -173
  678. package/dist/repertoire/tasks/scanner.js +0 -132
  679. package/dist/repertoire/tasks/transitions.js +0 -144
  680. package/dist/senses/bluebubbles-entry.js +0 -13
  681. package/dist/senses/bluebubbles.js +0 -1181
  682. package/dist/senses/debug-activity.js +0 -154
  683. package/dist/senses/inner-dialog-worker.js +0 -90
  684. package/dist/senses/inner-dialog.js +0 -525
  685. package/subagents/README.md +0 -7
  686. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  687. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  688. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  689. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  690. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  691. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  692. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  693. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  694. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  695. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  696. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  697. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  698. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  699. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  700. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  701. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  702. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -33,13 +33,14 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.buildCodingPrompt = buildCodingPrompt;
36
37
  exports.spawnCodingProcess = spawnCodingProcess;
37
38
  const child_process_1 = require("child_process");
38
39
  const fs = __importStar(require("fs"));
39
40
  const os = __importStar(require("os"));
40
41
  const path = __importStar(require("path"));
41
42
  const runtime_1 = require("../../nerves/runtime");
42
- function buildCommandArgs(runner, workdir) {
43
+ function buildCommandArgs(runner, workdir, parentAgent) {
43
44
  if (runner === "claude") {
44
45
  return {
45
46
  command: "claude",
@@ -55,9 +56,25 @@ function buildCommandArgs(runner, workdir) {
55
56
  ],
56
57
  };
57
58
  }
59
+ const agent = parentAgent ?? "unknown";
60
+ // Use absolute path to ouro-entry.js so MCP works in both dev and installed mode
61
+ // __dirname at runtime is dist/repertoire/coding/ — go up 2 levels to dist/
62
+ const distRoot = path.resolve(__dirname, "..", "..");
63
+ const ouroEntryPath = path.join(distRoot, "heart", "daemon", "ouro-entry.js");
58
64
  return {
59
65
  command: "codex",
60
- args: ["exec", "--skip-git-repo-check", "--cd", workdir],
66
+ args: [
67
+ "exec",
68
+ "--skip-git-repo-check",
69
+ "--cd",
70
+ workdir,
71
+ "--ephemeral",
72
+ "--json",
73
+ "-c",
74
+ `mcp_servers.ouro.command=node`,
75
+ "-c",
76
+ `mcp_servers.ouro.args=["${ouroEntryPath}","mcp-serve","--agent","${agent}"]`,
77
+ ],
61
78
  };
62
79
  }
63
80
  function buildSpawnEnv(baseEnv, homeDir) {
@@ -72,20 +89,32 @@ function buildSpawnEnv(baseEnv, homeDir) {
72
89
  PATH: pathEntries.join(path.delimiter),
73
90
  };
74
91
  }
75
- function buildPrompt(request, deps) {
92
+ function appendFileSection(sections, label, filePath, deps) {
93
+ if (!filePath || !deps.existsSync(filePath))
94
+ return;
95
+ const content = deps.readFileSync(filePath, "utf-8").trim();
96
+ if (content.length === 0)
97
+ return;
98
+ sections.push(`${label} (${filePath}):\n${content}`);
99
+ }
100
+ function buildCodingPrompt(request, deps) {
76
101
  const sections = [];
102
+ sections.push([
103
+ "Execution contract:",
104
+ "- You are a subordinate coding session launched by a parent Ouro agent.",
105
+ "- Execute the concrete request in the supplied workdir directly.",
106
+ "- Do not switch into planning/doing workflows, approval gates, or repo-management rituals unless the request explicitly asks for them.",
107
+ "- Treat the request, scope file, and state file as the authoritative briefing for this session.",
108
+ "- Prefer direct execution and verification over narration.",
109
+ ].join("\n"));
77
110
  sections.push([
78
111
  "Coding session metadata:",
79
112
  `sessionId: ${request.sessionId ?? "pending"}`,
80
113
  `parentAgent: ${request.parentAgent ?? "unknown"}`,
81
114
  `taskRef: ${request.taskRef ?? "unassigned"}`,
82
115
  ].join("\n"));
83
- if (request.stateFile && deps.existsSync(request.stateFile)) {
84
- const stateContent = deps.readFileSync(request.stateFile, "utf-8").trim();
85
- if (stateContent.length > 0) {
86
- sections.push(`State file (${request.stateFile}):\n${stateContent}`);
87
- }
88
- }
116
+ appendFileSection(sections, "Scope file", request.scopeFile, deps);
117
+ appendFileSection(sections, "State file", request.stateFile, deps);
89
118
  sections.push(request.prompt);
90
119
  return sections.join("\n\n---\n\n");
91
120
  }
@@ -95,8 +124,8 @@ function spawnCodingProcess(request, deps = {}) {
95
124
  const readFileSync = deps.readFileSync ?? fs.readFileSync;
96
125
  const homeDir = deps.homeDir ?? os.homedir();
97
126
  const baseEnv = deps.baseEnv ?? process.env;
98
- const prompt = buildPrompt(request, { existsSync, readFileSync });
99
- const { command, args } = buildCommandArgs(request.runner, request.workdir);
127
+ const prompt = buildCodingPrompt(request, { existsSync, readFileSync });
128
+ const { command, args } = buildCommandArgs(request.runner, request.workdir, request.parentAgent);
100
129
  const env = buildSpawnEnv(baseEnv, homeDir);
101
130
  (0, runtime_1.emitNervesEvent)({
102
131
  component: "repertoire",
@@ -1,10 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.codingToolDefinitions = void 0;
4
+ exports.countFilesInSessionOutput = countFilesInSessionOutput;
4
5
  const index_1 = require("./index");
6
+ const context_pack_1 = require("./context-pack");
5
7
  const identity_1 = require("../../heart/identity");
6
- const obligations_1 = require("../../heart/obligations");
8
+ const obligations_1 = require("../../arc/obligations");
9
+ const evolution_1 = require("../../arc/evolution");
7
10
  const runtime_1 = require("../../nerves/runtime");
11
+ const scrutiny_1 = require("../../mind/scrutiny");
8
12
  const RUNNERS = ["claude", "codex"];
9
13
  function requireArg(args, key) {
10
14
  const value = args[key];
@@ -31,6 +35,50 @@ function emitCodingToolEvent(toolName) {
31
35
  meta: { toolName },
32
36
  });
33
37
  }
38
+ function isRefreshableCodingSessionManager(manager) {
39
+ return typeof manager.refreshSessions === "function"
40
+ && typeof manager.refreshSession === "function";
41
+ }
42
+ async function listCodingSessions(manager) {
43
+ return isRefreshableCodingSessionManager(manager) ? manager.refreshSessions() : manager.listSessions();
44
+ }
45
+ async function getCodingSession(manager, sessionId) {
46
+ return isRefreshableCodingSessionManager(manager) ? manager.refreshSession(sessionId) : manager.getSession(sessionId);
47
+ }
48
+ async function sendCodingInput(manager, sessionId, input) {
49
+ return manager.sendInput(sessionId, input);
50
+ }
51
+ async function killCodingSession(manager, sessionId) {
52
+ return manager.killSession(sessionId);
53
+ }
54
+ /**
55
+ * Count distinct file paths mentioned in a coding session's stdout output.
56
+ * Looks for path-like tokens (containing / and a file extension).
57
+ * Returns the count of unique paths found.
58
+ */
59
+ function countFilesInSessionOutput(session) {
60
+ const text = `${session.stdoutTail}\n${session.stderrTail}`;
61
+ // Match path-like tokens: contain at least one / and a file extension
62
+ const pathPattern = /(?:^|\s)((?:\/|\.\/|\.\.\/)?(?:[\w.@-]+\/)+[\w.-]+\.[\w]+)/gm;
63
+ const paths = new Set();
64
+ let match;
65
+ while ((match = pathPattern.exec(text)) !== null) {
66
+ paths.add(match[1]);
67
+ }
68
+ return paths.size;
69
+ }
70
+ /**
71
+ * If a coding session is completed, append scrutiny to the result.
72
+ * Returns the original result with scrutiny appended, or unchanged if
73
+ * the session is not completed or has no file changes.
74
+ */
75
+ function appendCompletionScrutiny(result, session) {
76
+ if (session.status !== "completed")
77
+ return result;
78
+ const fileCount = countFilesInSessionOutput(session);
79
+ const scrutiny = (0, scrutiny_1.getCodingCompletionScrutiny)(fileCount);
80
+ return scrutiny ? `${result}\n\n${scrutiny}` : result;
81
+ }
34
82
  function sameOriginSession(left, right) {
35
83
  if (!left && !right)
36
84
  return true;
@@ -42,11 +90,15 @@ function matchesReusableCodingSession(session, request) {
42
90
  if (session.status !== "spawning" && session.status !== "running" && session.status !== "waiting_input" && session.status !== "stalled") {
43
91
  return false;
44
92
  }
93
+ const scopeMatches = request.scopeFile ? session.scopeFile === request.scopeFile : true;
94
+ const stateMatches = request.stateFile ? session.stateFile === request.stateFile : true;
95
+ const evolutionCaseMatches = request.evolutionCaseId ? session.evolutionCaseId === request.evolutionCaseId : true;
45
96
  return (session.runner === request.runner &&
46
97
  session.workdir === request.workdir &&
47
98
  session.taskRef === request.taskRef &&
48
- session.scopeFile === request.scopeFile &&
49
- session.stateFile === request.stateFile &&
99
+ scopeMatches &&
100
+ stateMatches &&
101
+ evolutionCaseMatches &&
50
102
  session.obligationId === request.obligationId &&
51
103
  sameOriginSession(request.originSession, session.originSession));
52
104
  }
@@ -60,11 +112,75 @@ function findReusableCodingSession(sessions, request) {
60
112
  const matches = sessions.filter((session) => matchesReusableCodingSession(session, request)).sort(latestSessionFirst);
61
113
  return matches[0] ?? null;
62
114
  }
115
+ function isLiveCodingStatus(status) {
116
+ return status === "spawning" || status === "running" || status === "waiting_input" || status === "stalled";
117
+ }
118
+ function rankCodingStatusSession(session, currentSession) {
119
+ return sameOriginSession({
120
+ friendId: currentSession.friendId,
121
+ channel: currentSession.channel,
122
+ key: currentSession.key,
123
+ }, session.originSession)
124
+ ? 0
125
+ : 1;
126
+ }
127
+ function selectCodingStatusSessions(sessions, currentSession) {
128
+ if (sessions.length === 0)
129
+ return [];
130
+ if (!currentSession) {
131
+ return sessions;
132
+ }
133
+ const activeSessions = sessions.filter((session) => isLiveCodingStatus(session.status)).sort(latestSessionFirst);
134
+ if (activeSessions.length > 0) {
135
+ return activeSessions.sort((left, right) => {
136
+ const rankDelta = rankCodingStatusSession(left, currentSession) - rankCodingStatusSession(right, currentSession);
137
+ if (rankDelta !== 0)
138
+ return rankDelta;
139
+ return latestSessionFirst(left, right);
140
+ });
141
+ }
142
+ const matchingClosedSessions = sessions
143
+ .filter((session) => sameOriginSession({
144
+ friendId: currentSession.friendId,
145
+ channel: currentSession.channel,
146
+ key: currentSession.key,
147
+ }, session.originSession))
148
+ .sort(latestSessionFirst);
149
+ if (matchingClosedSessions.length > 0) {
150
+ return matchingClosedSessions;
151
+ }
152
+ return [...sessions].sort(latestSessionFirst);
153
+ }
154
+ function buildCodingObligationContent(taskRef) {
155
+ return `finish ${taskRef} and bring the result back`;
156
+ }
157
+ function blockedEvolutionSpawnResult(evolutionCaseId, decision) {
158
+ return JSON.stringify({
159
+ ok: false,
160
+ blocked: true,
161
+ action: "spawn_coding",
162
+ evolutionCaseId,
163
+ code: decision.code,
164
+ reason: decision.reason,
165
+ });
166
+ }
167
+ function recordBlockedEvolutionSpawn(agentRoot, evolutionCaseId, decision) {
168
+ if (decision.code === "case_not_found")
169
+ return;
170
+ try {
171
+ (0, evolution_1.consumeEvolutionBudget)(agentRoot, evolutionCaseId, "spawn_coding", {
172
+ reason: `coding_spawn blocked: ${decision.reason}`,
173
+ });
174
+ }
175
+ catch {
176
+ // consumeEvolutionBudget records the block before throwing.
177
+ }
178
+ }
63
179
  const codingSpawnTool = {
64
180
  type: "function",
65
181
  function: {
66
182
  name: "coding_spawn",
67
- description: "spawn a coding session using claude/codex and explicit task-threaded guidance",
183
+ description: "Spawn a coding session using claude or codex with task-threaded guidance. The coding session runs as a separate process with its own context. Give it a COMPLETE, SELF-CONTAINED task description -- it cannot see this conversation, doesn't know what you've tried, doesn't understand the broader context. Include: what to do, why, what files are involved, what 'done' looks like. Never delegate understanding -- don't write 'based on the conversation, fix the bug.' Write the specific file paths, line numbers, and what to change. Include any required verification steps or tests in the task description so the coding session knows how to prove the work is done.",
68
184
  parameters: {
69
185
  type: "object",
70
186
  properties: {
@@ -74,6 +190,7 @@ const codingSpawnTool = {
74
190
  taskRef: { type: "string" },
75
191
  scopeFile: { type: "string" },
76
192
  stateFile: { type: "string" },
193
+ evolutionCaseId: { type: "string" },
77
194
  },
78
195
  required: ["runner", "workdir", "prompt", "taskRef"],
79
196
  },
@@ -83,7 +200,7 @@ const codingStatusTool = {
83
200
  type: "function",
84
201
  function: {
85
202
  name: "coding_status",
86
- description: "inspect coding sessions; omit sessionId to list all active/known sessions",
203
+ description: "Inspect coding sessions. Omit sessionId to list all active/known sessions with their status. Use this to check progress before asking the human for a status update.",
87
204
  parameters: {
88
205
  type: "object",
89
206
  properties: {
@@ -96,7 +213,7 @@ const codingTailTool = {
96
213
  type: "function",
97
214
  function: {
98
215
  name: "coding_tail",
99
- description: "show recent stdout/stderr tail for a coding session in a readable format",
216
+ description: "Show recent stdout/stderr output from a coding session. Use this to understand what the session is doing or why it might be stuck. Read the actual output before reporting status -- don't guess.",
100
217
  parameters: {
101
218
  type: "object",
102
219
  properties: {
@@ -161,6 +278,9 @@ exports.codingToolDefinitions = [
161
278
  prompt,
162
279
  taskRef,
163
280
  };
281
+ const evolutionCaseId = optionalArg(args, "evolutionCaseId");
282
+ if (evolutionCaseId)
283
+ request.evolutionCaseId = evolutionCaseId;
164
284
  if (ctx?.currentSession && ctx.currentSession.channel !== "inner") {
165
285
  request.originSession = {
166
286
  friendId: ctx.currentSession.friendId,
@@ -179,7 +299,8 @@ exports.codingToolDefinitions = [
179
299
  if (stateFile)
180
300
  request.stateFile = stateFile;
181
301
  const manager = (0, index_1.getCodingSessionManager)();
182
- const existingSession = findReusableCodingSession(manager.listSessions(), request);
302
+ const existingSessions = await listCodingSessions(manager);
303
+ const existingSession = findReusableCodingSession(existingSessions, request);
183
304
  if (existingSession) {
184
305
  (0, runtime_1.emitNervesEvent)({
185
306
  component: "repertoire",
@@ -192,7 +313,38 @@ exports.codingToolDefinitions = [
192
313
  }
193
314
  return JSON.stringify({ ...existingSession, reused: true });
194
315
  }
316
+ if (request.evolutionCaseId) {
317
+ const decision = (0, evolution_1.evaluateEvolutionAction)((0, identity_1.getAgentRoot)(), request.evolutionCaseId, "spawn_coding");
318
+ if (!decision.allowed) {
319
+ recordBlockedEvolutionSpawn((0, identity_1.getAgentRoot)(), request.evolutionCaseId, decision);
320
+ return blockedEvolutionSpawnResult(request.evolutionCaseId, decision);
321
+ }
322
+ }
323
+ if (request.originSession && !request.obligationId) {
324
+ const created = (0, obligations_1.createObligation)((0, identity_1.getAgentRoot)(), {
325
+ origin: request.originSession,
326
+ content: buildCodingObligationContent(taskRef),
327
+ });
328
+ request.obligationId = created.id;
329
+ }
330
+ if (!request.scopeFile || !request.stateFile) {
331
+ const generated = (0, context_pack_1.prepareCodingContextPack)({
332
+ request: { ...request },
333
+ existingSessions,
334
+ activeWorkFrame: ctx?.activeWorkFrame,
335
+ });
336
+ if (!request.scopeFile)
337
+ request.scopeFile = generated.scopeFile;
338
+ if (!request.stateFile)
339
+ request.stateFile = generated.stateFile;
340
+ }
195
341
  const session = await manager.spawnSession(request);
342
+ if (request.evolutionCaseId) {
343
+ (0, evolution_1.consumeEvolutionBudget)((0, identity_1.getAgentRoot)(), request.evolutionCaseId, "spawn_coding", {
344
+ target: session.id,
345
+ reason: `coding session ${session.id} spawned`,
346
+ });
347
+ }
196
348
  if (session.obligationId) {
197
349
  (0, obligations_1.advanceObligation)((0, identity_1.getAgentRoot)(), session.obligationId, {
198
350
  status: "investigating",
@@ -215,38 +367,46 @@ exports.codingToolDefinitions = [
215
367
  }
216
368
  return JSON.stringify(session);
217
369
  },
370
+ summaryKeys: ["runner", "workdir", "taskRef"],
371
+ riskProfile: {
372
+ mutates: ["durable_state_write", "external_side_effect"],
373
+ risk: "high",
374
+ reason: "spawns a separate coding process and may create obligations",
375
+ },
218
376
  },
219
377
  {
220
378
  tool: codingStatusTool,
221
- handler: (args) => {
379
+ handler: async (args, ctx) => {
222
380
  emitCodingToolEvent("coding_status");
223
381
  const manager = (0, index_1.getCodingSessionManager)();
224
382
  const sessionId = requireArg(args, "sessionId");
225
383
  if (!sessionId) {
226
- return JSON.stringify(manager.listSessions());
384
+ return JSON.stringify(selectCodingStatusSessions(await listCodingSessions(manager), ctx?.currentSession));
227
385
  }
228
- const session = manager.getSession(sessionId);
386
+ const session = await getCodingSession(manager, sessionId);
229
387
  if (!session)
230
388
  return `session not found: ${sessionId}`;
231
- return JSON.stringify(session);
389
+ return appendCompletionScrutiny(JSON.stringify(session), session);
232
390
  },
391
+ summaryKeys: ["sessionId"],
233
392
  },
234
393
  {
235
394
  tool: codingTailTool,
236
- handler: (args) => {
395
+ handler: async (args) => {
237
396
  emitCodingToolEvent("coding_tail");
238
397
  const sessionId = requireArg(args, "sessionId");
239
398
  if (!sessionId)
240
399
  return "sessionId is required";
241
- const session = (0, index_1.getCodingSessionManager)().getSession(sessionId);
400
+ const session = await getCodingSession((0, index_1.getCodingSessionManager)(), sessionId);
242
401
  if (!session)
243
402
  return `session not found: ${sessionId}`;
244
- return (0, index_1.formatCodingTail)(session);
403
+ return appendCompletionScrutiny((0, index_1.formatCodingTail)(session), session);
245
404
  },
405
+ summaryKeys: ["sessionId"],
246
406
  },
247
407
  {
248
408
  tool: codingSendInputTool,
249
- handler: (args) => {
409
+ handler: async (args) => {
250
410
  emitCodingToolEvent("coding_send_input");
251
411
  const sessionId = requireArg(args, "sessionId");
252
412
  if (!sessionId)
@@ -254,17 +414,21 @@ exports.codingToolDefinitions = [
254
414
  const input = requireArg(args, "input");
255
415
  if (!input)
256
416
  return "input is required";
257
- return JSON.stringify((0, index_1.getCodingSessionManager)().sendInput(sessionId, input));
417
+ return JSON.stringify(await sendCodingInput((0, index_1.getCodingSessionManager)(), sessionId, input));
258
418
  },
419
+ summaryKeys: ["sessionId", "input"],
420
+ riskProfile: { mutates: "external_side_effect", risk: "high", reason: "sends input to a live coding process" },
259
421
  },
260
422
  {
261
423
  tool: codingKillTool,
262
- handler: (args) => {
424
+ handler: async (args) => {
263
425
  emitCodingToolEvent("coding_kill");
264
426
  const sessionId = requireArg(args, "sessionId");
265
427
  if (!sessionId)
266
428
  return "sessionId is required";
267
- return JSON.stringify((0, index_1.getCodingSessionManager)().killSession(sessionId));
429
+ return JSON.stringify(await killCodingSession((0, index_1.getCodingSessionManager)(), sessionId));
268
430
  },
431
+ summaryKeys: ["sessionId"],
432
+ riskProfile: { mutates: "external_side_effect", risk: "high", reason: "terminates a live coding process" },
269
433
  },
270
434
  ];