@ouro.bot/cli 0.1.0-alpha.93 → 0.1.0-alpha.931

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 (737) 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 +5898 -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 +1564 -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 +33 -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 +201 -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 +497 -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/bluebubbles-host-account.js +78 -0
  122. package/dist/heart/bridges/manager.js +137 -17
  123. package/dist/heart/bridges/store.js +14 -2
  124. package/dist/heart/bundle-state.js +168 -0
  125. package/dist/heart/commitments.js +44 -18
  126. package/dist/heart/config-registry.js +331 -0
  127. package/dist/heart/config.js +174 -131
  128. package/dist/heart/context-loss-gauntlet.js +387 -0
  129. package/dist/heart/context-loss-sentinel.js +1159 -0
  130. package/dist/heart/core.js +2356 -586
  131. package/dist/heart/cross-chat-delivery.js +9 -22
  132. package/dist/heart/daemon/agent-config-check.js +451 -0
  133. package/dist/heart/daemon/agent-discovery.js +283 -3
  134. package/dist/heart/daemon/agent-home.js +319 -0
  135. package/dist/heart/daemon/agent-service.js +542 -0
  136. package/dist/heart/daemon/agentic-repair.js +547 -0
  137. package/dist/heart/daemon/await-private-wake.js +59 -0
  138. package/dist/heart/daemon/bluebubbles-cli-integration.js +71 -0
  139. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  140. package/dist/heart/daemon/bluebubbles-host-protocol.js +433 -0
  141. package/dist/heart/daemon/bluebubbles-host.js +273 -0
  142. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  143. package/dist/heart/daemon/cadence.js +180 -0
  144. package/dist/heart/daemon/cli-arg-redaction.js +26 -0
  145. package/dist/heart/daemon/cli-defaults.js +876 -0
  146. package/dist/heart/daemon/cli-desk.js +322 -0
  147. package/dist/heart/daemon/cli-exec.js +9226 -0
  148. package/dist/heart/daemon/cli-help.js +742 -0
  149. package/dist/heart/daemon/cli-parse.js +3235 -0
  150. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  151. package/dist/heart/daemon/cli-render.js +819 -0
  152. package/dist/heart/daemon/cli-types.js +8 -0
  153. package/dist/heart/daemon/connect-bay.js +323 -0
  154. package/dist/heart/daemon/container-credential-bootstrap.js +273 -0
  155. package/dist/heart/daemon/container-healthcheck.js +112 -0
  156. package/dist/heart/daemon/container-runtime.js +97 -0
  157. package/dist/heart/daemon/container-spec-auditor-main.js +171 -0
  158. package/dist/heart/daemon/container-spec-auditor.js +235 -0
  159. package/dist/heart/daemon/daemon-bootstrap-startup.js +115 -0
  160. package/dist/heart/daemon/daemon-cli.js +29 -2350
  161. package/dist/heart/daemon/daemon-entry.js +953 -11
  162. package/dist/heart/daemon/daemon-health.js +186 -0
  163. package/dist/heart/daemon/daemon-rollup.js +57 -0
  164. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  165. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  166. package/dist/heart/daemon/daemon.js +2087 -105
  167. package/dist/heart/daemon/dns-workflow.js +394 -0
  168. package/dist/heart/daemon/doctor-types.js +8 -0
  169. package/dist/heart/daemon/doctor.js +1766 -0
  170. package/dist/heart/daemon/freshness.js +345 -0
  171. package/dist/heart/daemon/habit-private-wake.js +61 -0
  172. package/dist/heart/daemon/health-monitor.js +154 -11
  173. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  174. package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
  175. package/dist/heart/daemon/http-health-probe.js +80 -0
  176. package/dist/heart/daemon/human-command-screens.js +234 -0
  177. package/dist/heart/daemon/human-readiness.js +114 -0
  178. package/dist/heart/daemon/inner-status.js +78 -0
  179. package/dist/heart/daemon/interactive-repair.js +394 -0
  180. package/dist/heart/daemon/launchd.js +37 -8
  181. package/dist/heart/daemon/log-tailer.js +79 -10
  182. package/dist/heart/daemon/logs-prune.js +132 -0
  183. package/dist/heart/daemon/mcp-canary.js +524 -0
  184. package/dist/heart/daemon/message-router.js +65 -5
  185. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  186. package/dist/heart/daemon/os-cron-deps.js +135 -0
  187. package/dist/heart/daemon/os-cron.js +22 -14
  188. package/dist/heart/daemon/ouro-bot-entry.js +6 -3
  189. package/dist/heart/daemon/ouro-entry.js +5 -2
  190. package/dist/heart/daemon/plugin-cli.js +432 -0
  191. package/dist/heart/daemon/process-manager.js +760 -61
  192. package/dist/heart/daemon/provider-discovery.js +137 -0
  193. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  194. package/dist/heart/daemon/prunable-bundle.js +144 -0
  195. package/dist/heart/daemon/pulse.js +511 -0
  196. package/dist/heart/daemon/readiness-repair.js +365 -0
  197. package/dist/heart/daemon/run-hooks.js +2 -0
  198. package/dist/heart/daemon/runtime-logging.js +47 -14
  199. package/dist/heart/daemon/runtime-metadata.js +2 -30
  200. package/dist/heart/daemon/runtime-mode.js +13 -2
  201. package/dist/heart/daemon/safe-mode.js +161 -0
  202. package/dist/heart/daemon/sanctuary-acceptance-adapter.js +2654 -0
  203. package/dist/heart/daemon/sanctuary-acceptance-harness.js +1830 -0
  204. package/dist/heart/daemon/sanctuary-acceptance-marker.js +267 -0
  205. package/dist/heart/daemon/sanctuary-acceptance-scenarios.js +955 -0
  206. package/dist/heart/daemon/sanctuary-authority-codec.js +86 -0
  207. package/dist/heart/daemon/sanctuary-authority-epoch.js +281 -0
  208. package/dist/heart/daemon/sanctuary-authority-installation.js +161 -0
  209. package/dist/heart/daemon/sanctuary-authority-ledger.js +241 -0
  210. package/dist/heart/daemon/sanctuary-authority-root-lifecycle.js +1267 -0
  211. package/dist/heart/daemon/sanctuary-authority-vault-migration.js +79 -0
  212. package/dist/heart/daemon/sanctuary-bundle-migration.js +730 -0
  213. package/dist/heart/daemon/sanctuary-host-authority.js +1008 -0
  214. package/dist/heart/daemon/sanctuary-host-detached-supervisor.js +493 -0
  215. package/dist/heart/daemon/sanctuary-host-executor.js +670 -0
  216. package/dist/heart/daemon/sanctuary-host-linux-kernel.js +334 -0
  217. package/dist/heart/daemon/sanctuary-host-supervisor-entry.js +207 -0
  218. package/dist/heart/daemon/sanctuary-host-supervisor.js +95 -0
  219. package/dist/heart/daemon/sanctuary-package-management.js +103 -0
  220. package/dist/heart/daemon/sanctuary-scheduler-liveness.js +227 -0
  221. package/dist/heart/daemon/sanctuary-scheduler-origin.js +132 -0
  222. package/dist/heart/daemon/sanctuary-telegram-authority-entry.js +475 -0
  223. package/dist/heart/daemon/sanctuary-telegram-authority-gateway.js +585 -0
  224. package/dist/heart/daemon/sanctuary-telegram-authority-service.js +676 -0
  225. package/dist/heart/daemon/sense-manager.js +733 -48
  226. package/dist/heart/daemon/session-id-resolver.js +131 -0
  227. package/dist/heart/daemon/skill-management-installer.js +1 -1
  228. package/dist/heart/daemon/socket-client.js +180 -12
  229. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  230. package/dist/heart/daemon/startup-tui.js +339 -0
  231. package/dist/heart/daemon/supercronic-supervisor.js +282 -0
  232. package/dist/heart/daemon/task-scheduler.js +117 -39
  233. package/dist/heart/daemon/terminal-ui.js +503 -0
  234. package/dist/heart/daemon/thoughts.js +138 -54
  235. package/dist/heart/daemon/up-progress.js +366 -0
  236. package/dist/heart/daemon/vault-items.js +56 -0
  237. package/dist/heart/delegation.js +1 -4
  238. package/dist/heart/external-events/router.js +1516 -0
  239. package/dist/heart/failure-reports.js +336 -0
  240. package/dist/heart/file-lock.js +109 -0
  241. package/dist/heart/frontend-approval-runtime.js +506 -0
  242. package/dist/heart/frontend-journal.js +215 -0
  243. package/dist/heart/frontend-session-service.js +271 -0
  244. package/dist/heart/frontend-socket-client.js +173 -0
  245. package/dist/heart/frontend-socket.js +434 -0
  246. package/dist/heart/frontend-turn-errors.js +20 -0
  247. package/dist/heart/habits/habit-cancel.js +810 -0
  248. package/dist/heart/habits/habit-lifecycle.js +1327 -0
  249. package/dist/heart/habits/habit-migration.js +194 -0
  250. package/dist/heart/habits/habit-parser.js +278 -0
  251. package/dist/heart/habits/habit-runtime-state.js +93 -0
  252. package/dist/heart/habits/habit-scheduler.js +653 -0
  253. package/dist/heart/habits/habit-session-summary.js +318 -0
  254. package/dist/heart/habits/habit-session.js +636 -0
  255. package/dist/heart/{daemon → hatch}/hatch-flow.js +55 -62
  256. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  257. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  258. package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
  259. package/dist/heart/identity.js +239 -59
  260. package/dist/heart/kept-notes.js +289 -0
  261. package/dist/heart/kicks.js +1 -1
  262. package/dist/heart/machine-identity.js +175 -0
  263. package/dist/heart/mail-import-discovery.js +356 -0
  264. package/dist/heart/mailbox/mailbox-http-hooks.js +98 -0
  265. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  266. package/dist/heart/mailbox/mailbox-http-routes.js +398 -0
  267. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  268. package/dist/heart/mailbox/mailbox-http-transport.js +272 -0
  269. package/dist/heart/mailbox/mailbox-http.js +99 -0
  270. package/dist/heart/mailbox/mailbox-read.js +39 -0
  271. package/dist/heart/mailbox/mailbox-types.js +27 -0
  272. package/dist/heart/mailbox/mailbox-view.js +197 -0
  273. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  274. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  275. package/dist/heart/mailbox/readers/mail.js +375 -0
  276. package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
  277. package/dist/heart/mailbox/readers/sessions.js +231 -0
  278. package/dist/heart/mailbox/readers/shared.js +111 -0
  279. package/dist/heart/mcp/mcp-server.js +760 -0
  280. package/dist/heart/migrate-config.js +100 -0
  281. package/dist/heart/model-capabilities.js +83 -16
  282. package/dist/heart/orientation-frame.js +345 -0
  283. package/dist/heart/platform.js +81 -0
  284. package/dist/heart/primitives.js +1 -1
  285. package/dist/heart/private-runtime/decision-renderer.js +158 -0
  286. package/dist/heart/private-runtime/index.js +18 -0
  287. package/dist/heart/private-runtime/ledger.js +221 -0
  288. package/dist/heart/private-runtime/policy.js +260 -0
  289. package/dist/heart/private-runtime/types.js +2 -0
  290. package/dist/heart/progress-story.js +1 -1
  291. package/dist/heart/provider-attempt.js +137 -0
  292. package/dist/heart/provider-binding-resolver.js +273 -0
  293. package/dist/heart/provider-credentials.js +449 -0
  294. package/dist/heart/provider-failover.js +311 -0
  295. package/dist/heart/provider-models.js +96 -0
  296. package/dist/heart/provider-ping.js +265 -0
  297. package/dist/heart/provider-readiness-cache.js +119 -0
  298. package/dist/heart/provider-visibility.js +188 -0
  299. package/dist/heart/providers/anthropic-token.js +131 -0
  300. package/dist/heart/providers/anthropic.js +173 -60
  301. package/dist/heart/providers/azure.js +23 -11
  302. package/dist/heart/providers/error-classification.js +127 -0
  303. package/dist/heart/providers/github-copilot.js +38 -39
  304. package/dist/heart/providers/minimax-vlm.js +189 -0
  305. package/dist/heart/providers/minimax.js +26 -8
  306. package/dist/heart/providers/openai-codex-token.js +349 -0
  307. package/dist/heart/providers/openai-codex.js +55 -40
  308. package/dist/heart/providers/openai-compatible.js +177 -0
  309. package/dist/heart/reply-style.js +52 -0
  310. package/dist/heart/run-ledger.js +247 -0
  311. package/dist/heart/runtime-capability-check.js +170 -0
  312. package/dist/heart/runtime-credentials.js +607 -0
  313. package/dist/heart/runtime-cwd.js +87 -0
  314. package/dist/heart/sense-truth.js +24 -4
  315. package/dist/heart/session-activity.js +92 -24
  316. package/dist/heart/session-events.js +1504 -0
  317. package/dist/heart/session-playback-cli-main.js +5 -0
  318. package/dist/heart/session-playback-cli.js +36 -0
  319. package/dist/heart/session-playback.js +231 -0
  320. package/dist/heart/session-redaction-repair-cli-main.js +31 -0
  321. package/dist/heart/session-redaction-repair.js +552 -0
  322. package/dist/heart/session-stats-cli-main.js +5 -0
  323. package/dist/heart/session-stats.js +183 -0
  324. package/dist/heart/session-transcript.js +133 -0
  325. package/dist/heart/shelf-claims.js +78 -0
  326. package/dist/heart/shepherd-config.js +113 -0
  327. package/dist/heart/source-grounding.js +297 -0
  328. package/dist/heart/start-of-turn-packet.js +372 -0
  329. package/dist/heart/steward-policy.js +656 -0
  330. package/dist/heart/streaming.js +609 -207
  331. package/dist/heart/structured-output.js +196 -0
  332. package/dist/heart/sync-classification.js +176 -0
  333. package/dist/heart/sync-health.js +152 -0
  334. package/dist/heart/sync.js +726 -0
  335. package/dist/heart/target-resolution.js +11 -7
  336. package/dist/heart/tempo.js +93 -0
  337. package/dist/heart/temporal-view.js +41 -0
  338. package/dist/heart/timeouts.js +101 -0
  339. package/dist/heart/tool-activity-callbacks.js +59 -0
  340. package/dist/heart/tool-approval.js +382 -0
  341. package/dist/heart/tool-description.js +155 -0
  342. package/dist/heart/tool-friction.js +55 -0
  343. package/dist/heart/tool-loop.js +206 -0
  344. package/dist/heart/turn-context.js +496 -0
  345. package/dist/heart/turn-execution-lease.js +30 -0
  346. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  347. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +3 -2
  348. package/dist/heart/versioning/ouro-path-installer.js +432 -0
  349. package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
  350. package/dist/heart/versioning/ouro-version-manager.js +432 -0
  351. package/dist/heart/versioning/release-sources.js +173 -0
  352. package/dist/heart/versioning/self-update-defaults.js +294 -0
  353. package/dist/heart/versioning/self-update.js +196 -0
  354. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  355. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  356. package/dist/heart/versioning/update-hooks.js +154 -0
  357. package/dist/heart/versioning/update-state.js +126 -0
  358. package/dist/heart/versioning/updater-launchd.js +150 -0
  359. package/dist/heart/versioning/version-intent.js +114 -0
  360. package/dist/heart/work-card.js +380 -0
  361. package/dist/mailbox-ui/assets/index-Cyv4mw3Y.js +1 -0
  362. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  363. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  364. package/dist/mailbox-ui/index.html +16 -0
  365. package/dist/mailroom/attention.js +167 -0
  366. package/dist/mailroom/autonomy.js +209 -0
  367. package/dist/mailroom/blob-store.js +889 -0
  368. package/dist/mailroom/body-cache.js +61 -0
  369. package/dist/mailroom/cache-sync-cli.js +58 -0
  370. package/dist/mailroom/core.js +803 -0
  371. package/dist/mailroom/entry.js +160 -0
  372. package/dist/mailroom/file-store.js +568 -0
  373. package/dist/mailroom/hosted-cache-sync.js +384 -0
  374. package/dist/mailroom/mbox-import.js +393 -0
  375. package/dist/mailroom/migration.js +164 -0
  376. package/dist/mailroom/outbound.js +380 -0
  377. package/dist/mailroom/policy.js +263 -0
  378. package/dist/mailroom/reader.js +292 -0
  379. package/dist/mailroom/search-cache.js +513 -0
  380. package/dist/mailroom/search-relevance.js +319 -0
  381. package/dist/mailroom/smtp-ingress.js +176 -0
  382. package/dist/mailroom/source-state.js +176 -0
  383. package/dist/mailroom/thread.js +109 -0
  384. package/dist/mailroom/travel-extract.js +89 -0
  385. package/dist/mind/bundle-manifest.js +24 -2
  386. package/dist/mind/context.js +307 -139
  387. package/dist/mind/desk-section.js +362 -0
  388. package/dist/mind/diary-integrity.js +60 -0
  389. package/dist/mind/{memory.js → diary.js} +68 -77
  390. package/dist/mind/embedding-provider.js +60 -0
  391. package/dist/mind/file-state.js +179 -0
  392. package/dist/mind/friend-link-codes.js +209 -0
  393. package/dist/mind/friend-merge.js +330 -0
  394. package/dist/mind/{associative-recall.js → note-search.js} +47 -58
  395. package/dist/mind/obligation-steering.js +199 -3
  396. package/dist/mind/pending.js +36 -10
  397. package/dist/mind/prompt-budget.js +479 -0
  398. package/dist/mind/prompt-refresh.js +3 -2
  399. package/dist/mind/prompt.js +1085 -198
  400. package/dist/mind/provenance-trust.js +26 -0
  401. package/dist/mind/record-paths.js +312 -0
  402. package/dist/mind/scrutiny.js +173 -0
  403. package/dist/mind/session-transaction.js +564 -0
  404. package/dist/nerves/cli-logging.js +7 -1
  405. package/dist/nerves/coverage/audit-rules.js +15 -6
  406. package/dist/nerves/coverage/audit.js +28 -2
  407. package/dist/nerves/coverage/cli.js +1 -1
  408. package/dist/nerves/coverage/contract.js +5 -5
  409. package/dist/nerves/coverage/file-completeness.js +139 -5
  410. package/dist/nerves/coverage/run-artifacts.js +55 -35
  411. package/dist/nerves/coverage/source-scanner.js +4 -4
  412. package/dist/nerves/event-buffer.js +111 -0
  413. package/dist/nerves/index.js +293 -9
  414. package/dist/nerves/observation.js +20 -0
  415. package/dist/nerves/redact.js +79 -0
  416. package/dist/nerves/review/cli-main.js +5 -0
  417. package/dist/nerves/review/cli.js +156 -0
  418. package/dist/nerves/review/core.js +159 -0
  419. package/dist/nerves/runtime.js +17 -1
  420. package/dist/repertoire/ado-client.js +15 -56
  421. package/dist/repertoire/ado-semantic.js +16 -10
  422. package/dist/repertoire/api-client.js +97 -0
  423. package/dist/repertoire/bitwarden-store.js +1201 -0
  424. package/dist/repertoire/bundle-templates.js +71 -0
  425. package/dist/repertoire/bw-installer.js +231 -0
  426. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  427. package/dist/repertoire/coding/context-pack.js +331 -0
  428. package/dist/repertoire/coding/feedback.js +174 -32
  429. package/dist/repertoire/coding/index.js +15 -3
  430. package/dist/repertoire/coding/manager.js +159 -10
  431. package/dist/repertoire/coding/spawner.js +40 -11
  432. package/dist/repertoire/coding/tools.js +182 -18
  433. package/dist/repertoire/coding/workbench-client.js +272 -0
  434. package/dist/repertoire/coding/workbench-manager.js +346 -0
  435. package/dist/repertoire/commerce-errors.js +109 -0
  436. package/dist/repertoire/commerce-self-test.js +156 -0
  437. package/dist/repertoire/credential-access.js +183 -0
  438. package/dist/repertoire/desk/classifier.js +362 -0
  439. package/dist/repertoire/duffel-client.js +185 -0
  440. package/dist/repertoire/github-client.js +14 -55
  441. package/dist/repertoire/graph-client.js +11 -52
  442. package/dist/repertoire/guardrails.js +971 -20
  443. package/dist/repertoire/house-sweep.js +469 -0
  444. package/dist/repertoire/mcp-client.js +58 -5
  445. package/dist/repertoire/mcp-manager.js +427 -139
  446. package/dist/repertoire/mcp-tools.js +132 -0
  447. package/dist/repertoire/mcp-write-guard.js +46 -0
  448. package/dist/repertoire/plugin-mcp.js +175 -0
  449. package/dist/repertoire/plugins.js +253 -0
  450. package/dist/repertoire/relationship-authorization.js +322 -0
  451. package/dist/repertoire/sanctuary-container-policy.js +46 -0
  452. package/dist/repertoire/shell-sessions.js +134 -0
  453. package/dist/repertoire/skills.js +48 -4
  454. package/dist/repertoire/stripe-client.js +131 -0
  455. package/dist/repertoire/tool-arguments.js +182 -0
  456. package/dist/repertoire/tool-results.js +29 -0
  457. package/dist/repertoire/tools-a2a.js +699 -0
  458. package/dist/repertoire/tools-attachments.js +322 -0
  459. package/dist/repertoire/tools-awaiting.js +872 -0
  460. package/dist/repertoire/tools-base.js +83 -1168
  461. package/dist/repertoire/tools-bluebubbles.js +2 -0
  462. package/dist/repertoire/tools-bridge.js +144 -0
  463. package/dist/repertoire/tools-bundle.js +995 -0
  464. package/dist/repertoire/tools-commerce.js +253 -0
  465. package/dist/repertoire/tools-config.js +186 -0
  466. package/dist/repertoire/tools-continuity.js +575 -0
  467. package/dist/repertoire/tools-credential.js +383 -0
  468. package/dist/repertoire/tools-escalation.js +84 -0
  469. package/dist/repertoire/tools-evolution.js +527 -0
  470. package/dist/repertoire/tools-files.js +344 -0
  471. package/dist/repertoire/tools-flight.js +290 -0
  472. package/dist/repertoire/tools-flow.js +119 -0
  473. package/dist/repertoire/tools-friend-link.js +57 -0
  474. package/dist/repertoire/tools-github.js +3 -8
  475. package/dist/repertoire/tools-habits.js +103 -0
  476. package/dist/repertoire/tools-house-care.js +174 -0
  477. package/dist/repertoire/tools-mail.js +1828 -0
  478. package/dist/repertoire/tools-notes.js +496 -0
  479. package/dist/repertoire/tools-obligations.js +182 -0
  480. package/dist/repertoire/tools-orientation.js +31 -0
  481. package/dist/repertoire/tools-record.js +482 -0
  482. package/dist/repertoire/tools-rsvp.js +139 -0
  483. package/dist/repertoire/tools-runtime.js +238 -0
  484. package/dist/repertoire/tools-sanctuary-host.js +202 -0
  485. package/dist/repertoire/tools-session.js +1133 -0
  486. package/dist/repertoire/tools-shell.js +149 -0
  487. package/dist/repertoire/tools-shepherd-guidance.js +171 -0
  488. package/dist/repertoire/tools-shepherd.js +296 -0
  489. package/dist/repertoire/tools-steward-policy.js +147 -0
  490. package/dist/repertoire/tools-stripe.js +224 -0
  491. package/dist/repertoire/tools-surface.js +369 -0
  492. package/dist/repertoire/tools-teams.js +50 -39
  493. package/dist/repertoire/tools-telegram-contacts.js +37 -0
  494. package/dist/repertoire/tools-travel.js +125 -0
  495. package/dist/repertoire/tools-trip.js +982 -0
  496. package/dist/repertoire/tools-unraid.js +556 -0
  497. package/dist/repertoire/tools-user-profile.js +146 -0
  498. package/dist/repertoire/tools-vault.js +40 -0
  499. package/dist/repertoire/tools-voice-local.js +198 -0
  500. package/dist/repertoire/tools-voice.js +145 -0
  501. package/dist/repertoire/tools.js +518 -156
  502. package/dist/repertoire/travel-api-client.js +360 -0
  503. package/dist/repertoire/unraid-client.js +155 -0
  504. package/dist/repertoire/unraid-restart.js +339 -0
  505. package/dist/repertoire/user-profile.js +131 -0
  506. package/dist/repertoire/vault-setup.js +246 -0
  507. package/dist/repertoire/vault-unlock.js +686 -0
  508. package/dist/rsvp/aisleplanner-client.js +354 -0
  509. package/dist/rsvp/cli.js +936 -0
  510. package/dist/rsvp/config.js +327 -0
  511. package/dist/rsvp/cutover.js +433 -0
  512. package/dist/rsvp/diagnostics.js +232 -0
  513. package/dist/rsvp/diff-renderer.js +176 -0
  514. package/dist/rsvp/habit-policy.js +110 -0
  515. package/dist/rsvp/habit-stage.js +123 -0
  516. package/dist/rsvp/incident-bundle.js +97 -0
  517. package/dist/rsvp/migration.js +204 -0
  518. package/dist/rsvp/native-habit-runner.js +630 -0
  519. package/dist/rsvp/outbound-state.js +628 -0
  520. package/dist/rsvp/query.js +118 -0
  521. package/dist/rsvp/replay.js +233 -0
  522. package/dist/rsvp/snapshot.js +232 -0
  523. package/dist/rsvp/spend-ledger.js +175 -0
  524. package/dist/scripts/claude-code-hook.js +41 -0
  525. package/dist/scripts/claude-code-stop-hook.js +47 -0
  526. package/dist/senses/a2a-entry.js +132 -0
  527. package/dist/senses/acp-server.js +386 -0
  528. package/dist/senses/attention-queue.js +186 -0
  529. package/dist/senses/await-turn-message.js +65 -0
  530. package/dist/senses/bluebubbles/active-turns.js +216 -0
  531. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  532. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  533. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +379 -41
  534. package/dist/senses/bluebubbles/context-packet.js +207 -0
  535. package/dist/senses/bluebubbles/context-smoke.js +144 -0
  536. package/dist/senses/bluebubbles/entry.js +90 -0
  537. package/dist/senses/bluebubbles/host-account-verifier.js +88 -0
  538. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +21 -3
  539. package/dist/senses/bluebubbles/index.js +3878 -0
  540. package/dist/senses/bluebubbles/latest-turn.js +311 -0
  541. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  542. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +159 -28
  543. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +24 -13
  544. package/dist/senses/bluebubbles/outbound-state.js +308 -0
  545. package/dist/senses/bluebubbles/processed-log.js +133 -0
  546. package/dist/senses/bluebubbles/reaction-policy.js +47 -0
  547. package/dist/senses/bluebubbles/replay.js +284 -0
  548. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  549. package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
  550. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  551. package/dist/senses/bluebubbles/webhook-registration.js +257 -0
  552. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  553. package/dist/senses/cli/bracketed-paste.js +82 -0
  554. package/dist/senses/cli/image-paste.js +287 -0
  555. package/dist/senses/cli/image-ref-navigation.js +75 -0
  556. package/dist/senses/cli/ink-app.js +156 -0
  557. package/dist/senses/cli/inline-diff.js +64 -0
  558. package/dist/senses/cli/input-keys.js +174 -0
  559. package/dist/senses/cli/kill-ring.js +86 -0
  560. package/dist/senses/cli/message-list.js +51 -0
  561. package/dist/senses/cli/ouro-tui.js +607 -0
  562. package/dist/senses/cli/spinner-imperative.js +135 -0
  563. package/dist/senses/cli/spinner.js +101 -0
  564. package/dist/senses/cli/status-line.js +60 -0
  565. package/dist/senses/cli/streaming-markdown.js +526 -0
  566. package/dist/senses/cli/tool-display.js +85 -0
  567. package/dist/senses/cli/tool-render.js +85 -0
  568. package/dist/senses/cli/tui-store.js +241 -0
  569. package/dist/senses/cli/virtual-list.js +35 -0
  570. package/dist/senses/cli-entry.js +60 -8
  571. package/dist/senses/cli.js +601 -304
  572. package/dist/senses/commands.js +66 -3
  573. package/dist/senses/context-packet-ledger.js +371 -0
  574. package/dist/senses/context-packets.js +154 -0
  575. package/dist/senses/habit-lifecycle-guard.js +24 -0
  576. package/dist/senses/habit-turn-message.js +160 -0
  577. package/dist/senses/ingress-evidence.js +2 -0
  578. package/dist/senses/mail-entry.js +66 -0
  579. package/dist/senses/mail.js +524 -0
  580. package/dist/senses/pipeline.js +1158 -204
  581. package/dist/senses/private-runtime-worker.js +859 -0
  582. package/dist/senses/private-runtime.js +1627 -0
  583. package/dist/senses/proactive-content-guard.js +51 -0
  584. package/dist/senses/root-host-approval-port.js +345 -0
  585. package/dist/senses/root-host-approval-runtime.js +393 -0
  586. package/dist/senses/sanctuary-authority-resident.js +102 -0
  587. package/dist/senses/sanctuary-download-credit-presentation.js +31 -0
  588. package/dist/senses/sanctuary-full-visibility-contract.js +302 -0
  589. package/dist/senses/sanctuary-grounding.js +118 -0
  590. package/dist/senses/sanctuary-health-acceptance-probe-entry.js +12 -0
  591. package/dist/senses/sanctuary-health-acceptance-probe.js +774 -0
  592. package/dist/senses/sanctuary-health-runner.js +104 -0
  593. package/dist/senses/sanctuary-health.js +422 -0
  594. package/dist/senses/sanctuary-install-state-contract.js +169 -0
  595. package/dist/senses/sanctuary-interactive-control.js +410 -0
  596. package/dist/senses/sanctuary-media-catalog-contract.js +259 -0
  597. package/dist/senses/sanctuary-media-optimization.js +514 -0
  598. package/dist/senses/sanctuary-runtime.js +369 -0
  599. package/dist/senses/sanctuary-sab.js +85 -0
  600. package/dist/senses/sanctuary-storage-optimization-contract.js +32 -0
  601. package/dist/senses/shared-turn.js +804 -0
  602. package/dist/senses/shepherd/agent-presentation.js +88 -0
  603. package/dist/senses/shepherd/attention-page.js +166 -0
  604. package/dist/senses/shepherd/attention-sidebar.js +76 -0
  605. package/dist/senses/shepherd/attention.js +295 -0
  606. package/dist/senses/shepherd/checkin-config.js +76 -0
  607. package/dist/senses/shepherd/checkin-store.js +218 -0
  608. package/dist/senses/shepherd/client.js +196 -0
  609. package/dist/senses/shepherd/cmux.js +437 -0
  610. package/dist/senses/shepherd/composer.js +336 -0
  611. package/dist/senses/shepherd/feedback-reply.js +108 -0
  612. package/dist/senses/shepherd/feedback-source.js +20 -0
  613. package/dist/senses/shepherd/feedback-store.js +331 -0
  614. package/dist/senses/shepherd/feedback-submit.js +182 -0
  615. package/dist/senses/shepherd/feedback-worker.js +207 -0
  616. package/dist/senses/shepherd/guidance.js +270 -0
  617. package/dist/senses/shepherd/herdr.js +345 -0
  618. package/dist/senses/shepherd/host.js +14 -0
  619. package/dist/senses/shepherd/judge.js +160 -0
  620. package/dist/senses/shepherd/notice-outbox.js +262 -0
  621. package/dist/senses/shepherd/owner-notice.js +325 -0
  622. package/dist/senses/shepherd/prompt-state.js +60 -0
  623. package/dist/senses/shepherd/redact.js +66 -0
  624. package/dist/senses/shepherd/returns.js +79 -0
  625. package/dist/senses/shepherd/sense.js +654 -0
  626. package/dist/senses/shepherd/surface.js +123 -0
  627. package/dist/senses/shepherd/target-binding.js +13 -0
  628. package/dist/senses/shepherd/terminal-process.js +147 -0
  629. package/dist/senses/shepherd-entry.js +98 -0
  630. package/dist/senses/surface-tool.js +109 -0
  631. package/dist/senses/teams-entry.js +68 -8
  632. package/dist/senses/teams-image.js +119 -0
  633. package/dist/senses/teams.js +760 -308
  634. package/dist/senses/telegram-admission.js +718 -0
  635. package/dist/senses/telegram-approval-runtime.js +793 -0
  636. package/dist/senses/telegram-attachments.js +186 -0
  637. package/dist/senses/telegram-audit-ledger.js +220 -0
  638. package/dist/senses/telegram-authority-transport.js +231 -0
  639. package/dist/senses/telegram-client.js +1749 -0
  640. package/dist/senses/telegram-effect-adapter.js +900 -0
  641. package/dist/senses/telegram-entry.js +83 -0
  642. package/dist/senses/telegram-handoff.js +80 -0
  643. package/dist/senses/telegram.js +2405 -0
  644. package/dist/senses/trust-gate.js +104 -9
  645. package/dist/senses/voice/audio-playback.js +237 -0
  646. package/dist/senses/voice/audio-routing.js +119 -0
  647. package/dist/senses/voice/call-auth.js +250 -0
  648. package/dist/senses/voice/elevenlabs.js +202 -0
  649. package/dist/senses/voice/floor-control.js +431 -0
  650. package/dist/senses/voice/floor-controller.js +115 -0
  651. package/dist/senses/voice/golden-path.js +116 -0
  652. package/dist/senses/voice/index.js +29 -0
  653. package/dist/senses/voice/local-audio-control.js +344 -0
  654. package/dist/senses/voice/local-audio-devices.js +516 -0
  655. package/dist/senses/voice/local-audio-disclosure.js +174 -0
  656. package/dist/senses/voice/local-audio-identity.js +103 -0
  657. package/dist/senses/voice/local-audio-join.js +325 -0
  658. package/dist/senses/voice/local-audio-mute.js +199 -0
  659. package/dist/senses/voice/local-audio-notify.js +121 -0
  660. package/dist/senses/voice/local-audio-prompts.js +116 -0
  661. package/dist/senses/voice/local-audio-transport.js +427 -0
  662. package/dist/senses/voice/local-audio.js +281 -0
  663. package/dist/senses/voice/local-media-stream.js +145 -0
  664. package/dist/senses/voice/meeting.js +113 -0
  665. package/dist/senses/voice/outbound.js +190 -0
  666. package/dist/senses/voice/phone.js +33 -0
  667. package/dist/senses/voice/playback.js +139 -0
  668. package/dist/senses/voice/process-guards.js +51 -0
  669. package/dist/senses/voice/realtime-eval.js +496 -0
  670. package/dist/senses/voice/realtime-tool-schema.js +195 -0
  671. package/dist/senses/voice/realtime-trace.js +531 -0
  672. package/dist/senses/voice/transcript.js +70 -0
  673. package/dist/senses/voice/turn.js +191 -0
  674. package/dist/senses/voice/twilio-phone-runtime.js +836 -0
  675. package/dist/senses/voice/twilio-phone.js +5454 -0
  676. package/dist/senses/voice/types.js +2 -0
  677. package/dist/senses/voice/whisper.js +161 -0
  678. package/dist/senses/voice-entry.js +83 -0
  679. package/dist/senses/voice-realtime-eval-command.js +99 -0
  680. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  681. package/dist/senses/voice-twilio-entry.js +87 -0
  682. package/dist/trips/core.js +138 -0
  683. package/dist/trips/store.js +265 -0
  684. package/dist/util/frontmatter.js +69 -0
  685. package/npm-shrinkwrap.json +8100 -0
  686. package/package.json +74 -13
  687. package/skills/agent-commerce.md +113 -0
  688. package/skills/browser-navigation.md +117 -0
  689. package/skills/commerce-setup-guide.md +116 -0
  690. package/skills/commerce-setup.md +84 -0
  691. package/skills/configure-dev-tools.md +99 -0
  692. package/skills/travel-planning.md +138 -0
  693. package/dist/heart/daemon/auth-flow.js +0 -430
  694. package/dist/heart/daemon/ouro-path-installer.js +0 -260
  695. package/dist/heart/daemon/ouro-version-manager.js +0 -171
  696. package/dist/heart/daemon/update-hooks.js +0 -138
  697. package/dist/heart/obligations.js +0 -191
  698. package/dist/heart/safe-workspace.js +0 -362
  699. package/dist/heart/session-recall.js +0 -116
  700. package/dist/mind/friends/channel.js +0 -84
  701. package/dist/mind/friends/group-context.js +0 -144
  702. package/dist/mind/friends/resolver.js +0 -84
  703. package/dist/mind/friends/store-file.js +0 -190
  704. package/dist/mind/friends/store.js +0 -4
  705. package/dist/mind/friends/tokens.js +0 -26
  706. package/dist/mind/friends/trust-explanation.js +0 -74
  707. package/dist/mind/friends/types.js +0 -29
  708. package/dist/repertoire/tasks/board.js +0 -134
  709. package/dist/repertoire/tasks/index.js +0 -224
  710. package/dist/repertoire/tasks/lifecycle.js +0 -80
  711. package/dist/repertoire/tasks/middleware.js +0 -65
  712. package/dist/repertoire/tasks/parser.js +0 -173
  713. package/dist/repertoire/tasks/scanner.js +0 -132
  714. package/dist/repertoire/tasks/transitions.js +0 -144
  715. package/dist/senses/bluebubbles-entry.js +0 -13
  716. package/dist/senses/bluebubbles.js +0 -1181
  717. package/dist/senses/debug-activity.js +0 -154
  718. package/dist/senses/inner-dialog-worker.js +0 -90
  719. package/dist/senses/inner-dialog.js +0 -525
  720. package/subagents/README.md +0 -7
  721. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  722. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  723. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  724. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  725. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  726. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  727. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  728. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  729. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  730. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  731. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  732. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  733. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  734. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  735. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  736. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  737. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,123 @@
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.SHEPHERD_UUID = void 0;
37
+ exports.resolveExistingLocalOwner = resolveExistingLocalOwner;
38
+ exports.localShepherdFriendStore = localShepherdFriendStore;
39
+ exports.machineShepherdHost = machineShepherdHost;
40
+ exports.listShepherdTargets = listShepherdTargets;
41
+ exports.validateShepherdTarget = validateShepherdTarget;
42
+ exports.authorizedShepherdTargets = authorizedShepherdTargets;
43
+ const path = __importStar(require("node:path"));
44
+ const friends_1 = require("@ouro.bot/friends");
45
+ const identity_1 = require("../../heart/identity");
46
+ const runtime_credentials_1 = require("../../heart/runtime-credentials");
47
+ const shepherd_config_1 = require("../../heart/shepherd-config");
48
+ const tools_shepherd_1 = require("../../repertoire/tools-shepherd");
49
+ const host_1 = require("./host");
50
+ const runtime_1 = require("../../nerves/runtime");
51
+ exports.SHEPHERD_UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
52
+ /** Resolve the CLI's local identity, but forbid the resolver's first-encounter creation/promotion. */
53
+ async function resolveExistingLocalOwner(store, username = (0, friends_1.machineOwnerUsername)()) {
54
+ if (!username)
55
+ throw new Error("local machine owner identity is unavailable");
56
+ let existing = await store.findByExternalId("local", username);
57
+ if (!existing) {
58
+ const matches = (store.listAll ? await store.listAll() : []).filter(friend => friend.externalIds.some(identity => identity.provider === "local" && identity.externalId.startsWith(`${username}@`)));
59
+ if (matches.length > 1)
60
+ throw new Error("local-family linking is ambiguous; authorized owner setup is required");
61
+ existing = matches[0] ?? null;
62
+ }
63
+ if (!existing || existing.trustLevel !== "family" || existing.admissionState === "revoked") {
64
+ throw new Error(`existing local-family linking is missing for OS user ${username}; authorized owner setup is required`);
65
+ }
66
+ // Snapshot lookup prevents FriendResolver from creating on a transient search failure or
67
+ // migrating an identity as a side effect. The same resolver/channel path still produces context.
68
+ const snapshot = existing;
69
+ const readonlyLookup = Object.create(store);
70
+ readonlyLookup.findByExternalId = async () => snapshot;
71
+ return (await new friends_1.FriendResolver(readonlyLookup, {
72
+ provider: "local", externalId: username, displayName: username, channel: "cli",
73
+ }).resolve()).friend.id;
74
+ }
75
+ function localShepherdFriendStore(agent) {
76
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(agent))
77
+ throw new Error("Shepherd requires a safe agent name");
78
+ return new friends_1.FileFriendStore(path.join((0, identity_1.getAgentBundlesRoot)(), `${agent}.ouro`, "friends"));
79
+ }
80
+ function machineShepherdHost(agent) {
81
+ const root = path.join((0, identity_1.getAgentBundlesRoot)(), `${agent}.ouro`);
82
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(agent) || !(0, tools_shepherd_1.shepherdToolsEnabled)(root)) {
83
+ throw new Error("agent does not have Shepherd enabled");
84
+ }
85
+ const machine = (0, runtime_credentials_1.readMachineRuntimeCredentialConfig)(agent);
86
+ if (!machine.ok)
87
+ throw new Error("machine Shepherd connection configuration is unavailable");
88
+ const connection = (0, shepherd_config_1.resolveShepherdConnection)(agent, machine.config);
89
+ if (!connection.ok)
90
+ throw new Error(connection.error);
91
+ if (connection.connection.host !== "cmux")
92
+ throw new Error("the dedicated composer requires cmux stable surface UUIDs");
93
+ return (0, host_1.createShepherdHost)(connection.connection, { agentName: agent });
94
+ }
95
+ async function listShepherdTargets(host, composerTty) {
96
+ return (await host.list()).filter(session => session.agent && exports.SHEPHERD_UUID.test(session.id)
97
+ && (!composerTty || (session.tty && session.tty.replace(/^\/dev\//, "") !== composerTty.replace(/^\/dev\//, "")))).map(session => Object.freeze({
98
+ id: session.id,
99
+ host: "cmux",
100
+ label: [session.agent, session.cwd, session.workspaceTitle, session.title]
101
+ .filter(Boolean).map(part => part.replace(/[\x00-\x1f\x7f-\x9f]/g, "").slice(0, 160)).join(" / "),
102
+ displayLabel: [session.title, session.workspaceTitle, `${session.agent} session`, "Coding session"]
103
+ .map(part => (part ?? "").replace(/[\x00-\x1f\x7f-\x9f]/g, "").trim())
104
+ .find(part => part && !/[\\/]/.test(part) && !/[0-9a-f]{8}-[0-9a-f-]{27,}/i.test(part)).slice(0, 72),
105
+ selected: session.selected === true,
106
+ }));
107
+ }
108
+ async function validateShepherdTarget(host, id) {
109
+ if (!exports.SHEPHERD_UUID.test(id))
110
+ throw new Error("Shepherd session must be a stable UUID");
111
+ const matches = (await listShepherdTargets(host)).filter(target => target.id.toLowerCase() === id.toLowerCase());
112
+ if (matches.length !== 1)
113
+ throw new Error(`selected Shepherd terminal is unavailable: ${id}`);
114
+ return matches[0];
115
+ }
116
+ async function authorizedShepherdTargets(agent, friendId, composerTty) {
117
+ const owner = await resolveExistingLocalOwner(localShepherdFriendStore(agent));
118
+ if (owner !== friendId)
119
+ throw new Error("Shepherd composer requires this OS user's existing local-family identity");
120
+ const targets = await listShepherdTargets(machineShepherdHost(agent), composerTty);
121
+ (0, runtime_1.emitNervesEvent)({ component: "senses", event: "senses.shepherd_targets_resolved", message: "resolved authorized independent composer targets", meta: { agent, count: targets.length } });
122
+ return targets;
123
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertBoundShepherdTarget = assertBoundShepherdTarget;
4
+ const runtime_1 = require("../../nerves/runtime");
5
+ /** A composer locator is enforced at execution, not merely suggested to the model. */
6
+ function assertBoundShepherdTarget(bound, session, host) {
7
+ if (!bound)
8
+ return;
9
+ if (session !== bound.id || (host !== undefined && host !== bound.host)) {
10
+ (0, runtime_1.emitNervesEvent)({ level: "warn", component: "senses", event: "senses.shepherd_target_refused", message: "refused a terminal operation outside the fixed composer target", meta: { host: bound.host, session: bound.id } });
11
+ throw new Error(`this composer is bound to ${bound.host} UUID ${bound.id}; short refs and other targets are refused`);
12
+ }
13
+ }
@@ -0,0 +1,147 @@
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.identifyTerminalProcesses = identifyTerminalProcesses;
37
+ const path = __importStar(require("node:path"));
38
+ const node_util_1 = require("node:util");
39
+ const runtime_1 = require("../../nerves/runtime");
40
+ async function runCommand(command, args) {
41
+ const { execFile } = await Promise.resolve().then(() => __importStar(require("node:child_process")));
42
+ const exec = (0, node_util_1.promisify)(execFile);
43
+ const { stdout } = await exec(command, args, { timeout: 3_000, maxBuffer: 4 * 1024 * 1024 });
44
+ return stdout;
45
+ }
46
+ /** Batched process/cwd lookups; Node launchers need one additional argv snapshot, never a subprocess per surface. */
47
+ async function identifyTerminalProcesses(ttys, run = runCommand) {
48
+ const result = new Map();
49
+ if (ttys.length === 0)
50
+ return result;
51
+ const wanted = new Set(ttys.map((tty) => tty.replace(/^\/dev\//, "")));
52
+ const agents = new Map();
53
+ const snapshots = new Map();
54
+ const nodeLaunchers = new Map();
55
+ try {
56
+ for (const line of (await run("ps", ["-axo", "pid=,ppid=,pgid=,tpgid=,tty=,comm="])).split("\n")) {
57
+ const match = line.trim().match(/^(\d+)\s+(\d+)\s+(\d+)\s+(-?\d+)\s+(\S+)\s+(.+)$/);
58
+ if (!match)
59
+ continue;
60
+ const [, pid, parent, group, foreground, tty, command] = match;
61
+ if (!wanted.has(tty) || group !== foreground)
62
+ continue;
63
+ snapshots.set(Number(pid), `${pid} ${parent} ${group} ${foreground} ${tty} ${command}`);
64
+ const executable = path.basename(command);
65
+ if (executable === "node")
66
+ nodeLaunchers.set(Number(pid), { parent: Number(parent), tty: tty });
67
+ const agent = executable === "claude" ? "Claude Code" : executable === "copilot" ? "Copilot" : executable === "codex" ? "Codex" : null;
68
+ if (!agent)
69
+ continue;
70
+ const candidates = agents.get(tty) ?? [];
71
+ candidates.push({ pid: Number(pid), parent: Number(parent), agent });
72
+ agents.set(tty, candidates);
73
+ }
74
+ }
75
+ catch (error) {
76
+ (0, runtime_1.emitNervesEvent)({ level: "warn", component: "senses", event: "senses.shepherd_process_lookup_error", message: "could not identify terminal foreground agents", meta: { error: String(error) } });
77
+ return result;
78
+ }
79
+ if (nodeLaunchers.size > 0) {
80
+ try {
81
+ for (const line of (await run("ps", ["-p", [...nodeLaunchers.keys()].join(","), "-o", "pid=,args="])).split("\n")) {
82
+ const match = line.trim().match(/^(\d+)\s+\S+\s+(\S+)/);
83
+ if (!match)
84
+ continue;
85
+ const launcher = nodeLaunchers.get(Number(match[1]));
86
+ if (!launcher || !/(?:^|\/)copilot\/pkg\/[^/]+\/[^/]+\/cli-main\.js$/.test(match[2]))
87
+ continue;
88
+ const candidates = agents.get(launcher.tty) ?? [];
89
+ candidates.push({ pid: Number(match[1]), parent: launcher.parent, agent: "Copilot" });
90
+ agents.set(launcher.tty, candidates);
91
+ }
92
+ }
93
+ catch (error) {
94
+ (0, runtime_1.emitNervesEvent)({ level: "warn", component: "senses", event: "senses.shepherd_process_lookup_error", message: "could not identify Node-hosted terminal agents", meta: { error: String(error) } });
95
+ }
96
+ }
97
+ const selected = new Map();
98
+ for (const [tty, candidates] of agents) {
99
+ const roots = candidates.filter((candidate) => !candidates.some((parent) => parent.pid === candidate.parent));
100
+ const outer = roots[0] ?? candidates[0];
101
+ selected.set(tty, { ...outer, unique: roots.length === 1 });
102
+ result.set(tty, { agent: outer.agent, cwd: null });
103
+ }
104
+ if (selected.size === 0)
105
+ return result;
106
+ try {
107
+ const cwdByPid = new Map();
108
+ let pid = 0;
109
+ const output = await run("lsof", ["-a", "-p", [...selected.values()].map((agent) => agent.pid).join(","), "-d", "cwd", "-Fn"]);
110
+ for (const line of output.split("\n")) {
111
+ if (line.startsWith("p"))
112
+ pid = Number(line.slice(1));
113
+ else if (line.startsWith("n") && pid)
114
+ cwdByPid.set(pid, line.slice(1));
115
+ }
116
+ for (const [tty, agent] of selected)
117
+ result.set(tty, { agent: agent.agent, cwd: cwdByPid.get(agent.pid) ?? null });
118
+ }
119
+ catch (error) {
120
+ (0, runtime_1.emitNervesEvent)({ level: "warn", component: "senses", event: "senses.shepherd_cwd_lookup_error", message: "could not read foreground agent folders", meta: { error: String(error) } });
121
+ }
122
+ // A fresh batched snapshot verifies the same foreground process, not just a reusable PID.
123
+ // Unsupported ps variants and disappearing processes leave presentation intact but no authority.
124
+ try {
125
+ const starts = new Map();
126
+ for (const line of (await run("ps", ["-p", [...selected.values()].map(agent => agent.pid).join(","), "-o", "pid=,ppid=,pgid=,tpgid=,tty=,lstart=,comm="])).split("\n")) {
127
+ const match = line.trim().match(/^(\d+)\s+(\d+)\s+(\d+)\s+(-?\d+)\s+(\S+)\s+([A-Z][a-z]{2}\s+[A-Z][a-z]{2}\s+\d{1,2}\s+\d{2}:\d{2}:\d{2}\s+\d{4})\s+(.+)$/);
128
+ if (!match)
129
+ continue;
130
+ const [, pid, parent, group, foreground, tty, start, command] = match;
131
+ if (snapshots.get(Number(pid)) !== `${pid} ${parent} ${group} ${foreground} ${tty} ${command}`)
132
+ continue;
133
+ const values = starts.get(Number(pid)) ?? [];
134
+ values.push(start.replace(/\s+/g, " "));
135
+ starts.set(Number(pid), values);
136
+ }
137
+ for (const [tty, agent] of selected) {
138
+ const values = starts.get(agent.pid);
139
+ if (agent.unique && values?.length === 1)
140
+ result.get(tty).instance = `${agent.pid}:${values[0]}`;
141
+ }
142
+ }
143
+ catch (error) {
144
+ (0, runtime_1.emitNervesEvent)({ level: "warn", component: "senses", event: "senses.shepherd_process_lookup_error", message: "could not verify foreground process start identity", meta: { error: String(error) } });
145
+ }
146
+ return result;
147
+ }
@@ -0,0 +1,98 @@
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
+ const agentArgIndex = process.argv.indexOf("--agent");
37
+ const agentName = agentArgIndex >= 0 ? process.argv[agentArgIndex + 1] : undefined;
38
+ if (!agentName) {
39
+ // eslint-disable-next-line no-console -- pre-boot guard: --agent check before imports
40
+ console.error("Missing required --agent <name> argument.\nUsage: node dist/senses/shepherd-entry.js --agent ouroboros");
41
+ process.exit(1);
42
+ }
43
+ const runtime_logging_1 = require("../heart/daemon/runtime-logging");
44
+ const runtime_1 = require("../nerves/runtime");
45
+ (0, runtime_logging_1.configureDaemonRuntimeLogger)("shepherd");
46
+ (0, runtime_1.emitNervesEvent)({
47
+ component: "senses",
48
+ event: "senses.entry_boot",
49
+ message: "booting Shepherd entrypoint",
50
+ meta: { entry: "shepherd", agentName },
51
+ });
52
+ Promise.resolve().then(() => __importStar(require("../heart/runtime-credentials"))).then(async ({ readMachineRuntimeCredentialConfig, refreshMachineRuntimeCredentialConfig, waitForRuntimeCredentialBootstrap }) => {
53
+ await waitForRuntimeCredentialBootstrap(agentName);
54
+ if (!readMachineRuntimeCredentialConfig(agentName).ok) {
55
+ const { loadOrCreateMachineIdentity } = await Promise.resolve().then(() => __importStar(require("../heart/machine-identity")));
56
+ await refreshMachineRuntimeCredentialConfig(agentName, loadOrCreateMachineIdentity().machineId, { preserveCachedOnFailure: true }).catch(() => undefined);
57
+ }
58
+ const { startShepherdSenseApp } = await Promise.resolve().then(() => __importStar(require("./shepherd/sense")));
59
+ const app = await startShepherdSenseApp({ agentName: agentName });
60
+ let attention;
61
+ if (process.platform === "darwin") {
62
+ const { resolveShepherdConnection } = await Promise.resolve().then(() => __importStar(require("../heart/shepherd-config")));
63
+ const machine = readMachineRuntimeCredentialConfig(agentName);
64
+ const connection = machine.ok ? resolveShepherdConnection(agentName, machine.config) : null;
65
+ if (connection?.ok && connection.connection.host === "cmux") {
66
+ const { startManagedShepherdAttention } = await Promise.resolve().then(() => __importStar(require("./shepherd/attention")));
67
+ const { DEFAULT_DAEMON_SOCKET_PATH } = await Promise.resolve().then(() => __importStar(require("../heart/daemon/socket-client")));
68
+ const { frontendSocketPathForDaemon } = await Promise.resolve().then(() => __importStar(require("../heart/frontend-socket")));
69
+ try {
70
+ attention = await startManagedShepherdAttention({ agent: agentName, socketPath: frontendSocketPathForDaemon(DEFAULT_DAEMON_SOCKET_PATH), cmuxConnection: connection.connection });
71
+ }
72
+ catch (error) {
73
+ (0, runtime_1.emitNervesEvent)({ level: "warn", component: "senses", event: "senses.shepherd_attention_unavailable", message: "native session attention is unavailable; Shepherd supervision remains running", meta: { agentName, error: String(error) } });
74
+ }
75
+ }
76
+ }
77
+ const shutdown = () => {
78
+ app.stop();
79
+ void (attention?.close() ?? Promise.resolve()).then(() => process.exit(0), error => {
80
+ (0, runtime_1.emitNervesEvent)({ level: "error", component: "senses", event: "senses.shepherd_attention_shutdown_error", message: "could not close native session attention", meta: { error: String(error) } });
81
+ process.exit(1);
82
+ });
83
+ };
84
+ process.once("SIGTERM", shutdown);
85
+ process.once("SIGINT", shutdown);
86
+ })
87
+ .catch((error) => {
88
+ (0, runtime_1.emitNervesEvent)({
89
+ level: "error",
90
+ component: "senses",
91
+ event: "senses.entry_error",
92
+ message: "Shepherd entrypoint failed",
93
+ meta: { entry: "shepherd", agentName, error: error instanceof Error ? error.message : String(error) },
94
+ });
95
+ // eslint-disable-next-line no-console -- fatal startup guard for sense process
96
+ console.error(error instanceof Error ? error.message : String(error));
97
+ process.exit(1);
98
+ });
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleSurface = handleSurface;
4
+ const attention_queue_1 = require("./attention-queue");
5
+ const runtime_1 = require("../nerves/runtime");
6
+ async function handleSurface(input) {
7
+ const { content, delegationId, friendId, deliveryHint, queue, routeToFriend, advanceObligation, completePonderPacket, fulfillHeartObligation, onRouteResult, } = input;
8
+ // Resolve target friend
9
+ let targetFriendId;
10
+ let queueItem;
11
+ const matchesFriend = (item, target) => item.friendId === target || item.friendName.toLowerCase() === target.toLowerCase();
12
+ const inferQueueItem = (target) => {
13
+ if (queue.length === 0)
14
+ return undefined;
15
+ const candidates = target
16
+ ? queue.filter((item) => matchesFriend(item, target))
17
+ : queue;
18
+ if (candidates.length === 1)
19
+ return candidates[0];
20
+ if (candidates.length > 1) {
21
+ return `multiple held thoughts match ${target ?? "this surface call"} — use delegationId to choose one`;
22
+ }
23
+ return undefined;
24
+ };
25
+ if (delegationId) {
26
+ // Look up in attention queue
27
+ const found = queue.find((item) => item.id === delegationId);
28
+ if (!found) {
29
+ return `no delegation found with id ${delegationId} — check your attention queue`;
30
+ }
31
+ targetFriendId = found.friendId;
32
+ queueItem = found;
33
+ }
34
+ else if (friendId) {
35
+ const inferred = inferQueueItem(friendId);
36
+ if (typeof inferred === "string")
37
+ return inferred;
38
+ queueItem = inferred;
39
+ targetFriendId = queueItem?.friendId ?? friendId;
40
+ }
41
+ else {
42
+ const inferred = inferQueueItem();
43
+ if (typeof inferred === "string")
44
+ return inferred;
45
+ if (inferred) {
46
+ queueItem = inferred;
47
+ targetFriendId = inferred.friendId;
48
+ }
49
+ else {
50
+ return "specify who this thought is for — use delegationId to address a held thought, or friendId for spontaneous outreach";
51
+ }
52
+ }
53
+ if (queueItem?.packetId && !delegationId) {
54
+ return `held private return ${queueItem.id} is waiting — call surface with delegationId="${queueItem.id}" so the return is tied to the correct packet`;
55
+ }
56
+ // Route to target
57
+ const result = deliveryHint
58
+ ? await routeToFriend(targetFriendId, content, queueItem, deliveryHint)
59
+ : await routeToFriend(targetFriendId, content, queueItem);
60
+ (0, runtime_1.emitNervesEvent)({
61
+ event: "senses.surface_routed",
62
+ component: "senses",
63
+ message: `surface routed to ${targetFriendId}: ${result.status}`,
64
+ meta: {
65
+ targetFriendId,
66
+ status: result.status,
67
+ hasDelegationId: !!delegationId,
68
+ ...(result.detail ? { detail: result.detail } : {}),
69
+ },
70
+ });
71
+ onRouteResult?.({ targetFriendId, queueItem, result });
72
+ // On successful routing with delegationId:
73
+ // 1. Advance obligation to "returned" (disk FIRST — crash safety)
74
+ // 2. Dequeue from process-local queue (AFTER obligation advance)
75
+ if (queueItem && result.status !== "failed") {
76
+ if (queueItem.obligationId) {
77
+ advanceObligation(queueItem.obligationId, {
78
+ status: "returned",
79
+ returnedAt: Date.now(),
80
+ returnTarget: "surface",
81
+ });
82
+ }
83
+ if (completePonderPacket && queueItem.packetId) {
84
+ try {
85
+ completePonderPacket(queueItem.packetId);
86
+ }
87
+ catch {
88
+ // swallowed — packet completion must never break surface delivery
89
+ }
90
+ }
91
+ // Fulfill the heart obligation for this origin (separate from inner/mind obligation)
92
+ if (fulfillHeartObligation) {
93
+ try {
94
+ fulfillHeartObligation({
95
+ friendId: queueItem.friendId,
96
+ channel: queueItem.channel,
97
+ key: queueItem.key,
98
+ });
99
+ }
100
+ catch {
101
+ // swallowed — heart obligation fulfillment must never break surface delivery
102
+ }
103
+ }
104
+ (0, attention_queue_1.dequeueAttentionItem)(queue, queueItem.id);
105
+ }
106
+ // Return delivery status
107
+ const detail = result.detail ? ` — ${result.detail}` : "";
108
+ return `${result.status}${detail}`;
109
+ }
@@ -1,15 +1,75 @@
1
1
  "use strict";
2
- // Thin entrypoint for `npm run teams` / `node dist/senses/teams-entry.js --agent <name>`.
3
- // Separated from teams.ts so the Teams adapter is pure library code with clean
4
- // 100% test coverage -- entrypoints can't be covered by vitest since
5
- // require.main !== module in the test runner.
6
- // All config comes from the conventional ~/.agentsecrets/<agent>/secrets.json path.
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
+ })();
7
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ const runtime_logging_1 = require("../heart/daemon/runtime-logging");
37
+ const runtime_1 = require("../nerves/runtime");
8
38
  // Fail fast if --agent is missing (before any src/ code tries getAgentName())
9
- if (!process.argv.includes("--agent")) {
39
+ const agentArgIndex = process.argv.indexOf("--agent");
40
+ const agentName = agentArgIndex >= 0 ? process.argv[agentArgIndex + 1] : undefined;
41
+ if (!agentName) {
10
42
  // eslint-disable-next-line no-console -- pre-boot guard: --agent check before imports
11
43
  console.error("Missing required --agent <name> argument.\nUsage: node dist/senses/teams-entry.js --agent ouroboros");
12
44
  process.exit(1);
13
45
  }
14
- const teams_1 = require("./teams");
15
- (0, teams_1.startTeamsApp)();
46
+ // Without this the sense's events go to a console nobody reads: the daemon discards its output.
47
+ (0, runtime_logging_1.configureDaemonRuntimeLogger)("teams");
48
+ (0, runtime_1.emitNervesEvent)({
49
+ component: "senses",
50
+ event: "senses.entry_boot",
51
+ message: "booting Teams entrypoint",
52
+ meta: { entry: "teams", agentName },
53
+ });
54
+ Promise.resolve().then(() => __importStar(require("../heart/runtime-credentials"))).then(async ({ waitForRuntimeCredentialBootstrap, readRuntimeCredentialConfig, refreshRuntimeCredentialConfig }) => {
55
+ // The bot's credentials must be loaded before the listener starts: without them the Teams SDK
56
+ // validates no sender, and startTeamsApp refuses to start.
57
+ const bootstrapped = await waitForRuntimeCredentialBootstrap(agentName);
58
+ if (!bootstrapped && !readRuntimeCredentialConfig(agentName).ok) {
59
+ await refreshRuntimeCredentialConfig(agentName, { preserveCachedOnFailure: true }).catch(() => undefined);
60
+ }
61
+ const { startTeamsApp } = await Promise.resolve().then(() => __importStar(require("./teams")));
62
+ startTeamsApp();
63
+ })
64
+ .catch((error) => {
65
+ (0, runtime_1.emitNervesEvent)({
66
+ level: "error",
67
+ component: "senses",
68
+ event: "senses.entry_error",
69
+ message: "Teams entrypoint failed",
70
+ meta: { entry: "teams", agentName, error: error instanceof Error ? error.message : String(error) },
71
+ });
72
+ // eslint-disable-next-line no-console -- fatal startup guard for sense process
73
+ console.error(error instanceof Error ? error.message : String(error));
74
+ process.exit(1);
75
+ });