@ouro.bot/cli 0.1.0-alpha.71 → 0.1.0-alpha.710

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 (505) hide show
  1. package/README.md +133 -23
  2. package/RepairGuide.ouro/agent.json +5 -0
  3. package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
  4. package/RepairGuide.ouro/psyche/SOUL.md +55 -0
  5. package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
  6. package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
  7. package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
  8. package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
  9. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
  10. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  12. package/changelog.json +4510 -14
  13. package/dist/a2a/card.js +57 -0
  14. package/dist/a2a/client.js +180 -0
  15. package/dist/a2a/config.js +50 -0
  16. package/dist/a2a/delegation-stores.js +56 -0
  17. package/dist/a2a/did-resolution.js +93 -0
  18. package/dist/a2a/identity.js +170 -0
  19. package/dist/a2a/inbound-share.js +107 -0
  20. package/dist/a2a/mission-result-wire.js +196 -0
  21. package/dist/a2a/onboarding.js +115 -0
  22. package/dist/a2a/pin-store.js +132 -0
  23. package/dist/a2a/seen-ledger.js +120 -0
  24. package/dist/a2a/server.js +604 -0
  25. package/dist/a2a/task-store.js +69 -0
  26. package/dist/a2a/transport.js +45 -0
  27. package/dist/a2a/types.js +3 -0
  28. package/dist/arc/attention-types.js +8 -0
  29. package/dist/arc/cares.js +144 -0
  30. package/dist/arc/episodes.js +118 -0
  31. package/dist/arc/evolution.js +490 -0
  32. package/dist/arc/flight-recorder.js +928 -0
  33. package/dist/arc/intentions.js +134 -0
  34. package/dist/arc/json-store.js +117 -0
  35. package/dist/arc/obligations.js +348 -0
  36. package/dist/arc/packets.js +336 -0
  37. package/dist/arc/presence.js +185 -0
  38. package/dist/arc/task-lifecycle.js +57 -0
  39. package/dist/commerce/store.js +755 -0
  40. package/dist/commerce/types.js +3 -0
  41. package/dist/heart/active-work.js +867 -43
  42. package/dist/heart/agent-entry.js +190 -3
  43. package/dist/heart/attachments/image-normalize.js +194 -0
  44. package/dist/heart/attachments/materialize.js +97 -0
  45. package/dist/heart/attachments/originals.js +88 -0
  46. package/dist/heart/attachments/render.js +29 -0
  47. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  48. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  49. package/dist/heart/attachments/sources/index.js +16 -0
  50. package/dist/heart/attachments/store.js +103 -0
  51. package/dist/heart/attachments/types.js +93 -0
  52. package/dist/heart/auth/auth-flow.js +479 -0
  53. package/dist/heart/autonomy-budget.js +434 -0
  54. package/dist/heart/awaiting/await-alert.js +146 -0
  55. package/dist/heart/awaiting/await-expiry.js +108 -0
  56. package/dist/heart/awaiting/await-loader.js +91 -0
  57. package/dist/heart/awaiting/await-parser.js +141 -0
  58. package/dist/heart/awaiting/await-runtime-state.js +100 -0
  59. package/dist/heart/awaiting/await-scheduler.js +378 -0
  60. package/dist/heart/background-operations.js +281 -0
  61. package/dist/heart/bridges/manager.js +137 -17
  62. package/dist/heart/bridges/store.js +14 -2
  63. package/dist/heart/bundle-state.js +168 -0
  64. package/dist/heart/commitments.js +135 -0
  65. package/dist/heart/config-registry.js +331 -0
  66. package/dist/heart/config.js +119 -127
  67. package/dist/heart/context-loss-gauntlet.js +354 -0
  68. package/dist/heart/context-loss-sentinel.js +1155 -0
  69. package/dist/heart/core.js +1306 -278
  70. package/dist/heart/cross-chat-delivery.js +8 -22
  71. package/dist/heart/daemon/agent-config-check.js +451 -0
  72. package/dist/heart/daemon/agent-discovery.js +185 -3
  73. package/dist/heart/daemon/agent-service.js +523 -0
  74. package/dist/heart/daemon/agentic-repair.js +547 -0
  75. package/dist/heart/daemon/await-private-wake.js +59 -0
  76. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  77. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  78. package/dist/heart/daemon/cadence.js +180 -0
  79. package/dist/heart/daemon/cli-defaults.js +825 -0
  80. package/dist/heart/daemon/cli-desk.js +322 -0
  81. package/dist/heart/daemon/cli-exec.js +8194 -0
  82. package/dist/heart/daemon/cli-help.js +678 -0
  83. package/dist/heart/daemon/cli-parse.js +2476 -0
  84. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  85. package/dist/heart/daemon/cli-render.js +770 -0
  86. package/dist/heart/daemon/cli-types.js +8 -0
  87. package/dist/heart/daemon/connect-bay.js +323 -0
  88. package/dist/heart/daemon/daemon-cli.js +29 -1943
  89. package/dist/heart/daemon/daemon-entry.js +842 -10
  90. package/dist/heart/daemon/daemon-health.js +176 -0
  91. package/dist/heart/daemon/daemon-rollup.js +57 -0
  92. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  93. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  94. package/dist/heart/daemon/daemon.js +1289 -84
  95. package/dist/heart/daemon/dns-workflow.js +394 -0
  96. package/dist/heart/daemon/doctor-types.js +8 -0
  97. package/dist/heart/daemon/doctor.js +1126 -0
  98. package/dist/heart/daemon/habit-private-wake.js +56 -0
  99. package/dist/heart/daemon/health-monitor.js +142 -11
  100. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  101. package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
  102. package/dist/heart/daemon/http-health-probe.js +80 -0
  103. package/dist/heart/daemon/human-command-screens.js +234 -0
  104. package/dist/heart/daemon/human-readiness.js +114 -0
  105. package/dist/heart/daemon/inner-status.js +78 -0
  106. package/dist/heart/daemon/interactive-repair.js +394 -0
  107. package/dist/heart/daemon/launchd.js +37 -8
  108. package/dist/heart/daemon/log-tailer.js +79 -10
  109. package/dist/heart/daemon/logs-prune.js +110 -0
  110. package/dist/heart/daemon/mcp-canary.js +297 -0
  111. package/dist/heart/daemon/message-router.js +45 -5
  112. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  113. package/dist/heart/daemon/os-cron-deps.js +135 -0
  114. package/dist/heart/daemon/os-cron.js +22 -14
  115. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  116. package/dist/heart/daemon/ouro-entry.js +3 -1
  117. package/dist/heart/daemon/plugin-cli.js +432 -0
  118. package/dist/heart/daemon/process-manager.js +519 -40
  119. package/dist/heart/daemon/provider-discovery.js +137 -0
  120. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  121. package/dist/heart/daemon/pulse.js +511 -0
  122. package/dist/heart/daemon/readiness-repair.js +365 -0
  123. package/dist/heart/daemon/run-hooks.js +2 -0
  124. package/dist/heart/daemon/runtime-logging.js +41 -14
  125. package/dist/heart/daemon/runtime-metadata.js +2 -30
  126. package/dist/heart/daemon/safe-mode.js +161 -0
  127. package/dist/heart/daemon/sense-manager.js +670 -48
  128. package/dist/heart/daemon/session-id-resolver.js +131 -0
  129. package/dist/heart/daemon/skill-management-installer.js +1 -1
  130. package/dist/heart/daemon/socket-client.js +171 -12
  131. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  132. package/dist/heart/daemon/startup-tui.js +338 -0
  133. package/dist/heart/daemon/task-scheduler.js +117 -39
  134. package/dist/heart/daemon/terminal-ui.js +499 -0
  135. package/dist/heart/daemon/thoughts.js +255 -43
  136. package/dist/heart/daemon/up-progress.js +366 -0
  137. package/dist/heart/daemon/vault-items.js +56 -0
  138. package/dist/heart/delegation.js +1 -4
  139. package/dist/heart/external-events/router.js +121 -0
  140. package/dist/heart/habits/habit-migration.js +189 -0
  141. package/dist/heart/habits/habit-parser.js +214 -0
  142. package/dist/heart/habits/habit-runtime-state.js +114 -0
  143. package/dist/heart/habits/habit-scheduler.js +431 -0
  144. package/dist/heart/habits/habit-session-summary.js +318 -0
  145. package/dist/heart/habits/habit-session.js +617 -0
  146. package/dist/heart/{daemon → hatch}/hatch-flow.js +51 -60
  147. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  148. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  149. package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
  150. package/dist/heart/identity.js +174 -59
  151. package/dist/heart/kept-notes.js +289 -0
  152. package/dist/heart/kicks.js +1 -1
  153. package/dist/heart/machine-identity.js +161 -0
  154. package/dist/heart/mail-import-discovery.js +353 -0
  155. package/dist/heart/mailbox/mailbox-http-hooks.js +96 -0
  156. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  157. package/dist/heart/mailbox/mailbox-http-routes.js +375 -0
  158. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  159. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  160. package/dist/heart/mailbox/mailbox-http.js +99 -0
  161. package/dist/heart/mailbox/mailbox-read.js +37 -0
  162. package/dist/heart/mailbox/mailbox-types.js +27 -0
  163. package/dist/heart/mailbox/mailbox-view.js +197 -0
  164. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  165. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  166. package/dist/heart/mailbox/readers/mail.js +375 -0
  167. package/dist/heart/mailbox/readers/runtime-readers.js +815 -0
  168. package/dist/heart/mailbox/readers/sessions.js +232 -0
  169. package/dist/heart/mailbox/readers/shared.js +111 -0
  170. package/dist/heart/mcp/mcp-server.js +696 -0
  171. package/dist/heart/migrate-config.js +100 -0
  172. package/dist/heart/model-capabilities.js +11 -0
  173. package/dist/heart/orientation-frame.js +217 -0
  174. package/dist/heart/platform.js +81 -0
  175. package/dist/heart/primitives.js +1 -1
  176. package/dist/heart/private-runtime/decision-renderer.js +156 -0
  177. package/dist/heart/private-runtime/index.js +18 -0
  178. package/dist/heart/private-runtime/ledger.js +218 -0
  179. package/dist/heart/private-runtime/policy.js +214 -0
  180. package/dist/heart/private-runtime/types.js +2 -0
  181. package/dist/heart/progress-story.js +1 -1
  182. package/dist/heart/provider-attempt.js +134 -0
  183. package/dist/heart/provider-binding-resolver.js +273 -0
  184. package/dist/heart/provider-credentials.js +441 -0
  185. package/dist/heart/provider-failover.js +311 -0
  186. package/dist/heart/provider-models.js +81 -0
  187. package/dist/heart/provider-ping.js +262 -0
  188. package/dist/heart/provider-readiness-cache.js +119 -0
  189. package/dist/heart/provider-visibility.js +188 -0
  190. package/dist/heart/providers/anthropic-token.js +131 -0
  191. package/dist/heart/providers/anthropic.js +139 -52
  192. package/dist/heart/providers/azure.js +23 -11
  193. package/dist/heart/providers/error-classification.js +127 -0
  194. package/dist/heart/providers/github-copilot.js +34 -38
  195. package/dist/heart/providers/minimax-vlm.js +189 -0
  196. package/dist/heart/providers/minimax.js +26 -8
  197. package/dist/heart/providers/openai-codex-token.js +349 -0
  198. package/dist/heart/providers/openai-codex.js +55 -40
  199. package/dist/heart/run-ledger.js +247 -0
  200. package/dist/heart/runtime-capability-check.js +170 -0
  201. package/dist/heart/runtime-credentials.js +398 -0
  202. package/dist/heart/runtime-cwd.js +87 -0
  203. package/dist/heart/sense-truth.js +20 -4
  204. package/dist/heart/session-activity.js +90 -24
  205. package/dist/heart/session-events.js +1133 -0
  206. package/dist/heart/session-playback-cli-main.js +5 -0
  207. package/dist/heart/session-playback-cli.js +36 -0
  208. package/dist/heart/session-playback.js +231 -0
  209. package/dist/heart/session-stats-cli-main.js +5 -0
  210. package/dist/heart/session-stats.js +182 -0
  211. package/dist/heart/session-transcript.js +133 -0
  212. package/dist/heart/start-of-turn-packet.js +365 -0
  213. package/dist/heart/streaming.js +44 -27
  214. package/dist/heart/structured-output.js +196 -0
  215. package/dist/heart/sync-classification.js +176 -0
  216. package/dist/heart/sync.js +449 -0
  217. package/dist/heart/target-resolution.js +11 -7
  218. package/dist/heart/tempo.js +93 -0
  219. package/dist/heart/temporal-view.js +41 -0
  220. package/dist/heart/timeouts.js +101 -0
  221. package/dist/heart/tool-activity-callbacks.js +59 -0
  222. package/dist/heart/tool-description.js +155 -0
  223. package/dist/heart/tool-friction.js +55 -0
  224. package/dist/heart/tool-loop.js +200 -0
  225. package/dist/heart/turn-context.js +472 -0
  226. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  227. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  228. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  229. package/dist/heart/versioning/ouro-version-manager.js +409 -0
  230. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  231. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  232. package/dist/heart/versioning/update-hooks.js +154 -0
  233. package/dist/heart/work-card.js +380 -0
  234. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  235. package/dist/mailbox-ui/assets/index-J8zDwHmE.js +1 -0
  236. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  237. package/dist/mailbox-ui/index.html +16 -0
  238. package/dist/mailroom/attention.js +167 -0
  239. package/dist/mailroom/autonomy.js +209 -0
  240. package/dist/mailroom/blob-store.js +715 -0
  241. package/dist/mailroom/body-cache.js +61 -0
  242. package/dist/mailroom/core.js +788 -0
  243. package/dist/mailroom/entry.js +160 -0
  244. package/dist/mailroom/file-store.js +568 -0
  245. package/dist/mailroom/mbox-import.js +393 -0
  246. package/dist/mailroom/migration.js +164 -0
  247. package/dist/mailroom/outbound.js +380 -0
  248. package/dist/mailroom/policy.js +263 -0
  249. package/dist/mailroom/reader.js +233 -0
  250. package/dist/mailroom/search-cache.js +334 -0
  251. package/dist/mailroom/search-relevance.js +319 -0
  252. package/dist/mailroom/smtp-ingress.js +176 -0
  253. package/dist/mailroom/source-state.js +176 -0
  254. package/dist/mailroom/thread.js +109 -0
  255. package/dist/mailroom/travel-extract.js +89 -0
  256. package/dist/mind/bundle-manifest.js +24 -2
  257. package/dist/mind/context.js +250 -101
  258. package/dist/mind/desk-section.js +362 -0
  259. package/dist/mind/diary-integrity.js +60 -0
  260. package/dist/mind/{memory.js → diary.js} +68 -77
  261. package/dist/mind/embedding-provider.js +60 -0
  262. package/dist/mind/file-state.js +179 -0
  263. package/dist/mind/{associative-recall.js → note-search.js} +47 -58
  264. package/dist/mind/obligation-steering.js +221 -0
  265. package/dist/mind/pending.js +13 -8
  266. package/dist/mind/prompt-budget.js +380 -0
  267. package/dist/mind/prompt-refresh.js +3 -2
  268. package/dist/mind/prompt.js +1028 -169
  269. package/dist/mind/provenance-trust.js +26 -0
  270. package/dist/mind/record-paths.js +312 -0
  271. package/dist/mind/scrutiny.js +173 -0
  272. package/dist/nerves/cli-logging.js +7 -1
  273. package/dist/nerves/coverage/audit-rules.js +15 -6
  274. package/dist/nerves/coverage/audit.js +28 -2
  275. package/dist/nerves/coverage/cli.js +1 -1
  276. package/dist/nerves/coverage/contract.js +5 -5
  277. package/dist/nerves/coverage/file-completeness.js +139 -5
  278. package/dist/nerves/event-buffer.js +111 -0
  279. package/dist/nerves/index.js +234 -4
  280. package/dist/nerves/observation.js +20 -0
  281. package/dist/nerves/redact.js +79 -0
  282. package/dist/nerves/review/cli-main.js +5 -0
  283. package/dist/nerves/review/cli.js +156 -0
  284. package/dist/nerves/review/core.js +152 -0
  285. package/dist/nerves/runtime.js +5 -1
  286. package/dist/repertoire/ado-client.js +15 -56
  287. package/dist/repertoire/ado-semantic.js +16 -10
  288. package/dist/repertoire/api-client.js +97 -0
  289. package/dist/repertoire/bitwarden-store.js +1021 -0
  290. package/dist/repertoire/bundle-templates.js +71 -0
  291. package/dist/repertoire/bw-installer.js +180 -0
  292. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  293. package/dist/repertoire/coding/context-pack.js +331 -0
  294. package/dist/repertoire/coding/feedback.js +218 -30
  295. package/dist/repertoire/coding/index.js +15 -3
  296. package/dist/repertoire/coding/manager.js +166 -10
  297. package/dist/repertoire/coding/spawner.js +58 -11
  298. package/dist/repertoire/coding/tools.js +242 -14
  299. package/dist/repertoire/coding/workbench-client.js +272 -0
  300. package/dist/repertoire/coding/workbench-manager.js +346 -0
  301. package/dist/repertoire/commerce-errors.js +109 -0
  302. package/dist/repertoire/commerce-self-test.js +156 -0
  303. package/dist/repertoire/credential-access.js +178 -0
  304. package/dist/repertoire/desk/classifier.js +362 -0
  305. package/dist/repertoire/duffel-client.js +185 -0
  306. package/dist/repertoire/github-client.js +14 -55
  307. package/dist/repertoire/graph-client.js +11 -52
  308. package/dist/repertoire/guardrails.js +156 -27
  309. package/dist/repertoire/mcp-client.js +44 -3
  310. package/dist/repertoire/mcp-manager.js +259 -20
  311. package/dist/repertoire/mcp-tools.js +83 -0
  312. package/dist/repertoire/plugin-mcp.js +175 -0
  313. package/dist/repertoire/plugins.js +253 -0
  314. package/dist/repertoire/shell-sessions.js +133 -0
  315. package/dist/repertoire/skills.js +48 -4
  316. package/dist/repertoire/stripe-client.js +131 -0
  317. package/dist/repertoire/tool-results.js +29 -0
  318. package/dist/repertoire/tools-a2a.js +699 -0
  319. package/dist/repertoire/tools-attachments.js +317 -0
  320. package/dist/repertoire/tools-awaiting.js +372 -0
  321. package/dist/repertoire/tools-base.js +65 -1095
  322. package/dist/repertoire/tools-bluebubbles.js +2 -0
  323. package/dist/repertoire/tools-bridge.js +144 -0
  324. package/dist/repertoire/tools-bundle.js +993 -0
  325. package/dist/repertoire/tools-commerce.js +253 -0
  326. package/dist/repertoire/tools-config.js +186 -0
  327. package/dist/repertoire/tools-continuity.js +252 -0
  328. package/dist/repertoire/tools-credential.js +383 -0
  329. package/dist/repertoire/tools-evolution.js +527 -0
  330. package/dist/repertoire/tools-files.js +344 -0
  331. package/dist/repertoire/tools-flight.js +290 -0
  332. package/dist/repertoire/tools-flow.js +119 -0
  333. package/dist/repertoire/tools-github.js +3 -8
  334. package/dist/repertoire/tools-mail.js +1975 -0
  335. package/dist/repertoire/tools-notes.js +459 -0
  336. package/dist/repertoire/tools-obligations.js +182 -0
  337. package/dist/repertoire/tools-orientation.js +31 -0
  338. package/dist/repertoire/tools-record.js +482 -0
  339. package/dist/repertoire/tools-rsvp.js +139 -0
  340. package/dist/repertoire/tools-runtime.js +150 -0
  341. package/dist/repertoire/tools-session.js +881 -0
  342. package/dist/repertoire/tools-shell.js +120 -0
  343. package/dist/repertoire/tools-stripe.js +224 -0
  344. package/dist/repertoire/tools-surface.js +355 -0
  345. package/dist/repertoire/tools-teams.js +12 -39
  346. package/dist/repertoire/tools-travel.js +125 -0
  347. package/dist/repertoire/tools-trip.js +982 -0
  348. package/dist/repertoire/tools-user-profile.js +146 -0
  349. package/dist/repertoire/tools-vault.js +40 -0
  350. package/dist/repertoire/tools-voice.js +145 -0
  351. package/dist/repertoire/tools.js +250 -80
  352. package/dist/repertoire/travel-api-client.js +360 -0
  353. package/dist/repertoire/user-profile.js +131 -0
  354. package/dist/repertoire/vault-setup.js +246 -0
  355. package/dist/repertoire/vault-unlock.js +594 -0
  356. package/dist/rsvp/aisleplanner-client.js +354 -0
  357. package/dist/rsvp/cli.js +758 -0
  358. package/dist/rsvp/config.js +327 -0
  359. package/dist/rsvp/cutover.js +433 -0
  360. package/dist/rsvp/diagnostics.js +222 -0
  361. package/dist/rsvp/diff-renderer.js +161 -0
  362. package/dist/rsvp/habit-policy.js +85 -0
  363. package/dist/rsvp/habit-stage.js +98 -0
  364. package/dist/rsvp/incident-bundle.js +97 -0
  365. package/dist/rsvp/migration.js +204 -0
  366. package/dist/rsvp/native-habit-runner.js +321 -0
  367. package/dist/rsvp/outbound-state.js +268 -0
  368. package/dist/rsvp/query.js +118 -0
  369. package/dist/rsvp/replay.js +233 -0
  370. package/dist/rsvp/snapshot.js +232 -0
  371. package/dist/rsvp/spend-ledger.js +175 -0
  372. package/dist/scripts/claude-code-hook.js +41 -0
  373. package/dist/scripts/claude-code-stop-hook.js +47 -0
  374. package/dist/senses/a2a-entry.js +115 -0
  375. package/dist/senses/attention-queue.js +186 -0
  376. package/dist/senses/await-turn-message.js +58 -0
  377. package/dist/senses/bluebubbles/active-turns.js +216 -0
  378. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  379. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  380. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +226 -19
  381. package/dist/senses/bluebubbles/context-packet.js +101 -0
  382. package/dist/senses/bluebubbles/context-smoke.js +144 -0
  383. package/dist/senses/bluebubbles/entry.js +77 -0
  384. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  385. package/dist/senses/bluebubbles/index.js +2881 -0
  386. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  387. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  388. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  389. package/dist/senses/bluebubbles/outbound-state.js +304 -0
  390. package/dist/senses/bluebubbles/processed-log.js +133 -0
  391. package/dist/senses/bluebubbles/replay.js +284 -0
  392. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  393. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  394. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  395. package/dist/senses/cli/bracketed-paste.js +82 -0
  396. package/dist/senses/cli/image-paste.js +287 -0
  397. package/dist/senses/cli/image-ref-navigation.js +75 -0
  398. package/dist/senses/cli/ink-app.js +156 -0
  399. package/dist/senses/cli/inline-diff.js +64 -0
  400. package/dist/senses/cli/input-keys.js +174 -0
  401. package/dist/senses/cli/kill-ring.js +86 -0
  402. package/dist/senses/cli/message-list.js +51 -0
  403. package/dist/senses/cli/ouro-tui.js +607 -0
  404. package/dist/senses/cli/spinner-imperative.js +135 -0
  405. package/dist/senses/cli/spinner.js +101 -0
  406. package/dist/senses/cli/status-line.js +60 -0
  407. package/dist/senses/cli/streaming-markdown.js +526 -0
  408. package/dist/senses/cli/tool-display.js +85 -0
  409. package/dist/senses/cli/tool-render.js +85 -0
  410. package/dist/senses/cli/tui-store.js +240 -0
  411. package/dist/senses/cli/virtual-list.js +35 -0
  412. package/dist/senses/cli-entry.js +60 -8
  413. package/dist/senses/cli-layout.js +100 -0
  414. package/dist/senses/cli.js +521 -214
  415. package/dist/senses/commands.js +66 -3
  416. package/dist/senses/context-packet-ledger.js +245 -0
  417. package/dist/senses/context-packets.js +154 -0
  418. package/dist/senses/habit-turn-message.js +160 -0
  419. package/dist/senses/mail-entry.js +66 -0
  420. package/dist/senses/mail.js +395 -0
  421. package/dist/senses/pipeline.js +952 -178
  422. package/dist/senses/private-runtime-worker.js +739 -0
  423. package/dist/senses/private-runtime.js +1157 -0
  424. package/dist/senses/proactive-content-guard.js +51 -0
  425. package/dist/senses/shared-turn.js +416 -0
  426. package/dist/senses/surface-tool.js +109 -0
  427. package/dist/senses/teams-entry.js +60 -8
  428. package/dist/senses/teams.js +397 -112
  429. package/dist/senses/trust-gate.js +104 -9
  430. package/dist/senses/voice/audio-playback.js +237 -0
  431. package/dist/senses/voice/audio-routing.js +119 -0
  432. package/dist/senses/voice/elevenlabs.js +202 -0
  433. package/dist/senses/voice/floor-control.js +431 -0
  434. package/dist/senses/voice/floor-controller.js +115 -0
  435. package/dist/senses/voice/golden-path.js +116 -0
  436. package/dist/senses/voice/index.js +29 -0
  437. package/dist/senses/voice/meeting.js +113 -0
  438. package/dist/senses/voice/outbound.js +190 -0
  439. package/dist/senses/voice/phone.js +33 -0
  440. package/dist/senses/voice/playback.js +139 -0
  441. package/dist/senses/voice/realtime-eval.js +496 -0
  442. package/dist/senses/voice/realtime-trace.js +531 -0
  443. package/dist/senses/voice/transcript.js +70 -0
  444. package/dist/senses/voice/turn.js +191 -0
  445. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  446. package/dist/senses/voice/twilio-phone.js +5081 -0
  447. package/dist/senses/voice/types.js +2 -0
  448. package/dist/senses/voice/whisper.js +161 -0
  449. package/dist/senses/voice-entry.js +81 -0
  450. package/dist/senses/voice-realtime-eval-command.js +99 -0
  451. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  452. package/dist/senses/voice-twilio-entry.js +87 -0
  453. package/dist/trips/core.js +138 -0
  454. package/dist/trips/store.js +265 -0
  455. package/dist/util/frontmatter.js +69 -0
  456. package/package.json +57 -12
  457. package/skills/agent-commerce.md +113 -0
  458. package/skills/browser-navigation.md +117 -0
  459. package/skills/commerce-setup-guide.md +116 -0
  460. package/skills/commerce-setup.md +84 -0
  461. package/skills/configure-dev-tools.md +99 -0
  462. package/skills/travel-planning.md +138 -0
  463. package/dist/heart/daemon/auth-flow.js +0 -409
  464. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  465. package/dist/heart/daemon/update-hooks.js +0 -138
  466. package/dist/heart/safe-workspace.js +0 -228
  467. package/dist/heart/session-recall.js +0 -116
  468. package/dist/mind/friends/channel.js +0 -84
  469. package/dist/mind/friends/group-context.js +0 -144
  470. package/dist/mind/friends/resolver.js +0 -84
  471. package/dist/mind/friends/store-file.js +0 -190
  472. package/dist/mind/friends/store.js +0 -4
  473. package/dist/mind/friends/tokens.js +0 -26
  474. package/dist/mind/friends/trust-explanation.js +0 -74
  475. package/dist/mind/friends/types.js +0 -29
  476. package/dist/repertoire/tasks/board.js +0 -134
  477. package/dist/repertoire/tasks/index.js +0 -224
  478. package/dist/repertoire/tasks/lifecycle.js +0 -80
  479. package/dist/repertoire/tasks/middleware.js +0 -65
  480. package/dist/repertoire/tasks/parser.js +0 -173
  481. package/dist/repertoire/tasks/scanner.js +0 -132
  482. package/dist/repertoire/tasks/transitions.js +0 -144
  483. package/dist/senses/bluebubbles-entry.js +0 -13
  484. package/dist/senses/bluebubbles.js +0 -1180
  485. package/dist/senses/debug-activity.js +0 -148
  486. package/dist/senses/inner-dialog-worker.js +0 -90
  487. package/dist/senses/inner-dialog.js +0 -480
  488. package/subagents/README.md +0 -7
  489. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  490. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  491. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  492. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  493. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  494. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  495. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  496. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  497. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  498. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  499. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  500. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  501. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  502. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  503. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  504. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  505. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,398 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MACHINE_RUNTIME_CONFIG_ITEM_PREFIX = exports.RUNTIME_CONFIG_ITEM_NAME = void 0;
37
+ exports.machineRuntimeConfigItemName = machineRuntimeConfigItemName;
38
+ exports.readRuntimeCredentialConfig = readRuntimeCredentialConfig;
39
+ exports.readMachineRuntimeCredentialConfig = readMachineRuntimeCredentialConfig;
40
+ exports.cacheRuntimeCredentialConfig = cacheRuntimeCredentialConfig;
41
+ exports.cacheMachineRuntimeCredentialConfig = cacheMachineRuntimeCredentialConfig;
42
+ exports.applyRuntimeCredentialBootstrapMessage = applyRuntimeCredentialBootstrapMessage;
43
+ exports.waitForRuntimeCredentialBootstrap = waitForRuntimeCredentialBootstrap;
44
+ exports.refreshRuntimeCredentialConfig = refreshRuntimeCredentialConfig;
45
+ exports.refreshMachineRuntimeCredentialConfig = refreshMachineRuntimeCredentialConfig;
46
+ exports.mergeRuntimeCredentialConfig = mergeRuntimeCredentialConfig;
47
+ exports.upsertRuntimeCredentialConfig = upsertRuntimeCredentialConfig;
48
+ exports.upsertMachineRuntimeCredentialConfig = upsertMachineRuntimeCredentialConfig;
49
+ exports.mergeMachineRuntimeCredentialConfig = mergeMachineRuntimeCredentialConfig;
50
+ exports.resetRuntimeCredentialConfigCache = resetRuntimeCredentialConfigCache;
51
+ const crypto = __importStar(require("node:crypto"));
52
+ const runtime_1 = require("../nerves/runtime");
53
+ const credential_access_1 = require("../repertoire/credential-access");
54
+ const identity_1 = require("./identity");
55
+ const provider_credentials_1 = require("./provider-credentials");
56
+ exports.RUNTIME_CONFIG_ITEM_NAME = "runtime/config";
57
+ exports.MACHINE_RUNTIME_CONFIG_ITEM_PREFIX = "runtime/machines";
58
+ let cachedRuntimeConfigs = new Map();
59
+ let cachedMachineRuntimeConfigs = new Map();
60
+ function isRecord(value) {
61
+ return !!value && typeof value === "object" && !Array.isArray(value);
62
+ }
63
+ function isCredentialValue(value) {
64
+ return typeof value === "string" || typeof value === "number";
65
+ }
66
+ function isCredentialRecord(value) {
67
+ if (!isRecord(value))
68
+ return false;
69
+ return Object.values(value).every(isCredentialValue);
70
+ }
71
+ function isProviderCredentialRecord(value) {
72
+ if (!isRecord(value))
73
+ return false;
74
+ if (typeof value.provider !== "string")
75
+ return false;
76
+ if (typeof value.revision !== "string" || value.revision.trim().length === 0)
77
+ return false;
78
+ if (typeof value.updatedAt !== "string" || value.updatedAt.trim().length === 0)
79
+ return false;
80
+ if (!isCredentialRecord(value.credentials))
81
+ return false;
82
+ if (!isCredentialRecord(value.config))
83
+ return false;
84
+ const provenance = value.provenance;
85
+ if (!isRecord(provenance))
86
+ return false;
87
+ if (provenance.source !== "auth-flow" && provenance.source !== "manual")
88
+ return false;
89
+ if (typeof provenance.updatedAt !== "string" || provenance.updatedAt.trim().length === 0)
90
+ return false;
91
+ return true;
92
+ }
93
+ function stableJson(value) {
94
+ if (Array.isArray(value))
95
+ return `[${value.map(stableJson).join(",")}]`;
96
+ if (isRecord(value)) {
97
+ return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`).join(",")}}`;
98
+ }
99
+ return JSON.stringify(value);
100
+ }
101
+ function runtimeConfigVaultPath(agentName, itemName = exports.RUNTIME_CONFIG_ITEM_NAME) {
102
+ return `vault:${agentName}:${itemName}`;
103
+ }
104
+ function machineRuntimeConfigItemName(machineId) {
105
+ const normalized = machineId.trim();
106
+ if (!normalized)
107
+ throw new Error("machineId must be non-empty");
108
+ return `${exports.MACHINE_RUNTIME_CONFIG_ITEM_PREFIX}/${normalized}/config`;
109
+ }
110
+ function runtimeConfigRevision(payload) {
111
+ return `runtime_${crypto
112
+ .createHash("sha256")
113
+ .update(stableJson(payload))
114
+ .digest("hex")
115
+ .slice(0, 16)}`;
116
+ }
117
+ function validateRuntimeCredentialPayload(value) {
118
+ if (!isRecord(value))
119
+ throw new Error("runtime credential payload must be an object");
120
+ if (value.schemaVersion !== 1)
121
+ throw new Error("runtime credential payload schemaVersion must be 1");
122
+ if (value.kind !== "runtime-config")
123
+ throw new Error("runtime credential payload kind must be runtime-config");
124
+ if (typeof value.updatedAt !== "string" || value.updatedAt.trim().length === 0) {
125
+ throw new Error("runtime credential payload updatedAt must be non-empty");
126
+ }
127
+ if (!isRecord(value.config))
128
+ throw new Error("runtime credential payload config must be an object");
129
+ return value;
130
+ }
131
+ function resultFromPayload(agentName, payload) {
132
+ return {
133
+ ok: true,
134
+ itemPath: runtimeConfigVaultPath(agentName),
135
+ config: { ...payload.config },
136
+ revision: runtimeConfigRevision(payload),
137
+ updatedAt: payload.updatedAt,
138
+ };
139
+ }
140
+ function resultFromPayloadForItem(agentName, itemName, payload) {
141
+ return {
142
+ ok: true,
143
+ itemPath: runtimeConfigVaultPath(agentName, itemName),
144
+ config: { ...payload.config },
145
+ revision: runtimeConfigRevision(payload),
146
+ updatedAt: payload.updatedAt,
147
+ };
148
+ }
149
+ function missingRuntimeConfig(agentName, itemName = exports.RUNTIME_CONFIG_ITEM_NAME) {
150
+ return {
151
+ ok: false,
152
+ reason: "missing",
153
+ itemPath: runtimeConfigVaultPath(agentName, itemName),
154
+ error: `no runtime credentials stored at ${runtimeConfigVaultPath(agentName, itemName)}`,
155
+ };
156
+ }
157
+ function cacheResult(agentName, result) {
158
+ cachedRuntimeConfigs.set(agentName, result);
159
+ return result;
160
+ }
161
+ function cacheMachineResult(agentName, result) {
162
+ cachedMachineRuntimeConfigs.set(agentName, result);
163
+ return result;
164
+ }
165
+ function missingMachineRuntimeConfig(agentName) {
166
+ return {
167
+ ok: false,
168
+ reason: "missing",
169
+ itemPath: `vault:${agentName}:${exports.MACHINE_RUNTIME_CONFIG_ITEM_PREFIX}/<this-machine>/config`,
170
+ error: `no machine runtime credentials loaded for ${agentName}`,
171
+ };
172
+ }
173
+ function readRuntimeCredentialConfig(agentName = (0, identity_1.getAgentName)()) {
174
+ return cachedRuntimeConfigs.get(agentName) ?? missingRuntimeConfig(agentName);
175
+ }
176
+ function readMachineRuntimeCredentialConfig(agentName = (0, identity_1.getAgentName)()) {
177
+ return cachedMachineRuntimeConfigs.get(agentName) ?? missingMachineRuntimeConfig(agentName);
178
+ }
179
+ function cacheRuntimeCredentialConfig(agentName, config, now = new Date()) {
180
+ const payload = {
181
+ schemaVersion: 1,
182
+ kind: "runtime-config",
183
+ updatedAt: now.toISOString(),
184
+ config: { ...config },
185
+ };
186
+ return cacheResult(agentName, resultFromPayload(agentName, payload));
187
+ }
188
+ function cacheMachineRuntimeCredentialConfig(agentName, config, now = new Date(), machineId = "<this-machine>") {
189
+ const payload = {
190
+ schemaVersion: 1,
191
+ kind: "runtime-config",
192
+ updatedAt: now.toISOString(),
193
+ config: { ...config },
194
+ };
195
+ return cacheMachineResult(agentName, resultFromPayloadForItem(agentName, machineRuntimeConfigItemName(machineId), payload));
196
+ }
197
+ function isRuntimeCredentialBootstrapMessage(value) {
198
+ if (!value || typeof value !== "object" || Array.isArray(value))
199
+ return false;
200
+ const record = value;
201
+ if (record.type !== "ouro.runtimeCredentialBootstrap")
202
+ return false;
203
+ if (typeof record.agentName !== "string" || record.agentName.trim().length === 0)
204
+ return false;
205
+ if (record.runtimeConfig !== undefined && !isRecord(record.runtimeConfig))
206
+ return false;
207
+ if (record.machineRuntimeConfig !== undefined && !isRecord(record.machineRuntimeConfig))
208
+ return false;
209
+ if (record.machineId !== undefined && (typeof record.machineId !== "string" || record.machineId.trim().length === 0))
210
+ return false;
211
+ if (record.providerCredentialRecords !== undefined
212
+ && (!Array.isArray(record.providerCredentialRecords)
213
+ || !record.providerCredentialRecords.every(isProviderCredentialRecord)))
214
+ return false;
215
+ return true;
216
+ }
217
+ function applyRuntimeCredentialBootstrapMessage(message) {
218
+ if (!isRuntimeCredentialBootstrapMessage(message))
219
+ return false;
220
+ const agentName = message.agentName.trim();
221
+ const now = new Date();
222
+ if (message.runtimeConfig) {
223
+ cacheRuntimeCredentialConfig(agentName, message.runtimeConfig, now);
224
+ }
225
+ if (message.machineRuntimeConfig) {
226
+ cacheMachineRuntimeCredentialConfig(agentName, message.machineRuntimeConfig, now, message.machineId ?? "<this-machine>");
227
+ }
228
+ if (message.providerCredentialRecords && message.providerCredentialRecords.length > 0) {
229
+ (0, provider_credentials_1.cacheProviderCredentialRecords)(agentName, message.providerCredentialRecords, now);
230
+ }
231
+ (0, runtime_1.emitNervesEvent)({
232
+ component: "config/identity",
233
+ event: "config.runtime_credentials_bootstrapped",
234
+ message: "loaded runtime credentials from daemon bootstrap",
235
+ meta: {
236
+ agentName,
237
+ runtimeConfig: !!message.runtimeConfig,
238
+ machineRuntimeConfig: !!message.machineRuntimeConfig,
239
+ providerCredentialRecords: message.providerCredentialRecords?.length ?? 0,
240
+ },
241
+ });
242
+ return true;
243
+ }
244
+ function waitForRuntimeCredentialBootstrap(agentName, options = {}) {
245
+ const timeoutMs = options.timeoutMs ?? 1_500;
246
+ return new Promise((resolve) => {
247
+ let settled = false;
248
+ let timer = null;
249
+ const finish = (value) => {
250
+ /* v8 ignore next -- defensive: listener cleanup and timer cleanup prevent double settlement @preserve */
251
+ if (settled)
252
+ return;
253
+ settled = true;
254
+ /* v8 ignore next -- defensive: timer is assigned immediately after listener registration @preserve */
255
+ if (timer)
256
+ clearTimeout(timer);
257
+ process.off?.("message", onMessage);
258
+ resolve(value);
259
+ };
260
+ const onMessage = (message) => {
261
+ if (!isRuntimeCredentialBootstrapMessage(message))
262
+ return;
263
+ if (message.agentName.trim() !== agentName.trim())
264
+ return;
265
+ finish(applyRuntimeCredentialBootstrapMessage(message));
266
+ };
267
+ process.on?.("message", onMessage);
268
+ timer = setTimeout(() => finish(false), timeoutMs);
269
+ });
270
+ }
271
+ async function refreshRuntimeCredentialConfigItem(agentName, itemName, cache, options = {}) {
272
+ try {
273
+ const store = (0, credential_access_1.getCredentialStore)(agentName);
274
+ const raw = await store.getRawSecret(itemName, "password");
275
+ const payload = validateRuntimeCredentialPayload(JSON.parse(raw));
276
+ const result = resultFromPayloadForItem(agentName, itemName, payload);
277
+ (0, runtime_1.emitNervesEvent)({
278
+ component: "config/identity",
279
+ event: "config.runtime_credentials_loaded",
280
+ message: "loaded runtime credentials from vault",
281
+ meta: { agentName, itemPath: result.itemPath, revision: result.revision },
282
+ });
283
+ return cache(agentName, result);
284
+ }
285
+ catch (error) {
286
+ const message = error instanceof Error ? error.message : String(error);
287
+ const existing = cache === cacheMachineResult
288
+ ? cachedMachineRuntimeConfigs.get(agentName)
289
+ : cachedRuntimeConfigs.get(agentName);
290
+ const reason = message.includes(`no credential found for domain "${itemName}"`)
291
+ ? "missing"
292
+ : message.includes("runtime credential payload")
293
+ ? "invalid"
294
+ : "unavailable";
295
+ const result = {
296
+ ok: false,
297
+ reason,
298
+ itemPath: runtimeConfigVaultPath(agentName, itemName),
299
+ error: reason === "missing" ? `no runtime credentials stored at ${runtimeConfigVaultPath(agentName, itemName)}` : message,
300
+ };
301
+ (0, runtime_1.emitNervesEvent)({
302
+ level: reason === "missing" ? "warn" : "error",
303
+ component: "config/identity",
304
+ event: "config.runtime_credentials_unavailable",
305
+ message: "runtime credentials unavailable",
306
+ meta: { agentName, reason, itemPath: result.itemPath },
307
+ });
308
+ if (options.preserveCachedOnFailure && existing?.ok)
309
+ return existing;
310
+ return cache(agentName, result);
311
+ }
312
+ }
313
+ async function refreshRuntimeCredentialConfig(agentName, options = {}) {
314
+ return refreshRuntimeCredentialConfigItem(agentName, exports.RUNTIME_CONFIG_ITEM_NAME, cacheResult, options);
315
+ }
316
+ async function refreshMachineRuntimeCredentialConfig(agentName, machineId, options = {}) {
317
+ return refreshRuntimeCredentialConfigItem(agentName, machineRuntimeConfigItemName(machineId), cacheMachineResult, options);
318
+ }
319
+ function mergeRuntimeCredentialConfigObjects(base, patch) {
320
+ const next = { ...base };
321
+ for (const key of Object.keys(patch)) {
322
+ const baseValue = next[key];
323
+ const patchValue = patch[key];
324
+ next[key] = isRecord(baseValue) && isRecord(patchValue)
325
+ ? mergeRuntimeCredentialConfigObjects(baseValue, patchValue)
326
+ : patchValue;
327
+ }
328
+ return next;
329
+ }
330
+ async function mergeRuntimeCredentialConfig(agentName, patch, now = new Date()) {
331
+ const current = await refreshRuntimeCredentialConfig(agentName);
332
+ if (!current.ok && current.reason !== "missing") {
333
+ throw new Error(`cannot merge runtime config at ${current.itemPath}: ${current.error}`);
334
+ }
335
+ const base = current.ok ? current.config : {};
336
+ return upsertRuntimeCredentialConfig(agentName, mergeRuntimeCredentialConfigObjects(base, patch), now);
337
+ }
338
+ async function upsertRuntimeCredentialConfig(agentName, config, now = new Date()) {
339
+ const payload = {
340
+ schemaVersion: 1,
341
+ kind: "runtime-config",
342
+ updatedAt: now.toISOString(),
343
+ config: { ...config },
344
+ };
345
+ const store = (0, credential_access_1.getCredentialStore)(agentName);
346
+ await store.store(exports.RUNTIME_CONFIG_ITEM_NAME, {
347
+ username: "runtime/config",
348
+ password: JSON.stringify(payload),
349
+ notes: "Ouro runtime credentials for senses and integrations. Provider credentials live in providers/* items.",
350
+ });
351
+ const result = resultFromPayload(agentName, payload);
352
+ (0, runtime_1.emitNervesEvent)({
353
+ component: "config/identity",
354
+ event: "config.runtime_credentials_upserted",
355
+ message: "upserted runtime credential config in vault",
356
+ meta: { agentName, itemPath: result.itemPath, revision: result.revision },
357
+ });
358
+ cacheResult(agentName, result);
359
+ return result;
360
+ }
361
+ async function upsertMachineRuntimeCredentialConfig(agentName, machineId, config, now = new Date()) {
362
+ const payload = {
363
+ schemaVersion: 1,
364
+ kind: "runtime-config",
365
+ updatedAt: now.toISOString(),
366
+ config: { ...config },
367
+ };
368
+ const itemName = machineRuntimeConfigItemName(machineId);
369
+ const store = (0, credential_access_1.getCredentialStore)(agentName);
370
+ await store.store(itemName, {
371
+ username: itemName,
372
+ password: JSON.stringify(payload),
373
+ notes: "Ouro machine-local runtime credentials for senses attached to one machine. Portable runtime credentials live in runtime/config.",
374
+ });
375
+ const result = resultFromPayloadForItem(agentName, itemName, payload);
376
+ (0, runtime_1.emitNervesEvent)({
377
+ component: "config/identity",
378
+ event: "config.runtime_credentials_upserted",
379
+ message: "upserted machine runtime credential config in vault",
380
+ meta: { agentName, itemPath: result.itemPath, revision: result.revision },
381
+ });
382
+ cacheMachineResult(agentName, result);
383
+ return result;
384
+ }
385
+ // Partial machine-runtime writers must use this helper, not raw upsert: one
386
+ // machine item carries multiple local attachments such as A2A, BlueBubbles, and Voice.
387
+ async function mergeMachineRuntimeCredentialConfig(agentName, machineId, patch, now = new Date()) {
388
+ const current = await refreshMachineRuntimeCredentialConfig(agentName, machineId);
389
+ if (!current.ok && current.reason !== "missing") {
390
+ throw new Error(`cannot merge machine runtime config at ${current.itemPath}: ${current.error}`);
391
+ }
392
+ const base = current.ok ? current.config : {};
393
+ return upsertMachineRuntimeCredentialConfig(agentName, machineId, mergeRuntimeCredentialConfigObjects(base, patch), now);
394
+ }
395
+ function resetRuntimeCredentialConfigCache() {
396
+ cachedRuntimeConfigs = new Map();
397
+ cachedMachineRuntimeConfigs = new Map();
398
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.recoverRuntimeCwd = recoverRuntimeCwd;
37
+ const fs = __importStar(require("node:fs"));
38
+ const path = __importStar(require("node:path"));
39
+ const runtime_1 = require("../nerves/runtime");
40
+ function defaultRuntimeRoot() {
41
+ return path.resolve(__dirname, "../..");
42
+ }
43
+ const defaultDeps = {
44
+ cwd: process.cwd.bind(process),
45
+ chdir: process.chdir.bind(process),
46
+ existsSync: fs.existsSync,
47
+ };
48
+ function recoverRuntimeCwd(fallback = defaultRuntimeRoot(), deps = defaultDeps) {
49
+ try {
50
+ return deps.cwd();
51
+ }
52
+ catch (error) {
53
+ const reason = error instanceof Error ? error.message : String(error);
54
+ let recovered = false;
55
+ let resolved = fallback;
56
+ let repairReason;
57
+ try {
58
+ if (deps.existsSync(fallback)) {
59
+ deps.chdir(fallback);
60
+ resolved = deps.cwd();
61
+ recovered = true;
62
+ }
63
+ else {
64
+ repairReason = "fallback cwd does not exist";
65
+ }
66
+ }
67
+ catch (repairError) {
68
+ repairReason = repairError instanceof Error ? repairError.message : String(repairError);
69
+ }
70
+ (0, runtime_1.emitNervesEvent)({
71
+ level: recovered ? "warn" : "error",
72
+ component: "heart",
73
+ event: "heart.cwd_recovery",
74
+ message: recovered
75
+ ? "recovered process cwd after the previous working directory disappeared"
76
+ : "process cwd disappeared and could not be repaired automatically",
77
+ meta: {
78
+ reason,
79
+ fallback,
80
+ resolved,
81
+ recovered,
82
+ ...(repairReason ? { repairReason } : {}),
83
+ },
84
+ });
85
+ return resolved;
86
+ }
87
+ }
@@ -7,12 +7,22 @@ const SENSES = [
7
7
  { sense: "cli", label: "CLI", daemonManaged: false },
8
8
  { sense: "teams", label: "Teams", daemonManaged: true },
9
9
  { sense: "bluebubbles", label: "BlueBubbles", daemonManaged: true },
10
+ { sense: "mail", label: "Mail", daemonManaged: true },
11
+ { sense: "voice", label: "Voice", daemonManaged: true },
12
+ { sense: "a2a", label: "A2A", daemonManaged: true },
13
+ { sense: "workbench", label: "Workbench", daemonManaged: false },
10
14
  ];
11
15
  function configuredSenses(senses) {
12
- return senses ?? {
13
- cli: { ...identity_1.DEFAULT_AGENT_SENSES.cli },
14
- teams: { ...identity_1.DEFAULT_AGENT_SENSES.teams },
15
- bluebubbles: { ...identity_1.DEFAULT_AGENT_SENSES.bluebubbles },
16
+ const configured = senses ?? {};
17
+ return {
18
+ ...configured,
19
+ cli: configured.cli ?? { ...identity_1.DEFAULT_AGENT_SENSES.cli },
20
+ teams: configured.teams ?? { ...identity_1.DEFAULT_AGENT_SENSES.teams },
21
+ bluebubbles: configured.bluebubbles ?? { ...identity_1.DEFAULT_AGENT_SENSES.bluebubbles },
22
+ mail: configured.mail ?? { ...identity_1.DEFAULT_AGENT_SENSES.mail },
23
+ voice: configured.voice ?? { ...identity_1.DEFAULT_AGENT_SENSES.voice },
24
+ a2a: configured.a2a ?? { ...identity_1.DEFAULT_AGENT_SENSES.a2a },
25
+ workbench: configured.workbench ?? { ...identity_1.DEFAULT_AGENT_SENSES.workbench },
16
26
  };
17
27
  }
18
28
  function resolveStatus(enabled, daemonManaged, runtimeInfo) {
@@ -20,6 +30,9 @@ function resolveStatus(enabled, daemonManaged, runtimeInfo) {
20
30
  return "disabled";
21
31
  }
22
32
  if (!daemonManaged) {
33
+ if (runtimeInfo?.configured === false) {
34
+ return "needs_config";
35
+ }
23
36
  return "interactive";
24
37
  }
25
38
  if (runtimeInfo?.runtime === "error") {
@@ -28,6 +41,9 @@ function resolveStatus(enabled, daemonManaged, runtimeInfo) {
28
41
  if (runtimeInfo?.runtime === "running") {
29
42
  return "running";
30
43
  }
44
+ if (runtimeInfo?.configured === false && runtimeInfo.optional) {
45
+ return "not_attached";
46
+ }
31
47
  if (runtimeInfo?.configured === false) {
32
48
  return "needs_config";
33
49
  }