@ouro.bot/cli 0.1.0-alpha.98 → 0.1.0-alpha.981

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 (763) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -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 +6195 -16
  16. package/deploy/unraid/Dockerfile +58 -0
  17. package/deploy/unraid/INSTALL.md +64 -0
  18. package/deploy/unraid/README.txt +2997 -0
  19. package/deploy/unraid/audit-container-spec.sh +4 -0
  20. package/deploy/unraid/container-runtime.json +1 -0
  21. package/deploy/unraid/credit-gateway.md +95 -0
  22. package/deploy/unraid/docker-man-template-transaction.mjs +727 -0
  23. package/deploy/unraid/docker-man-template-xml.cjs +105 -0
  24. package/deploy/unraid/install.sh +274 -0
  25. package/deploy/unraid/migrate-sanctuary-bundle.mjs +63 -0
  26. package/deploy/unraid/ouro-events/bootstrap-spool.sh +92 -0
  27. package/deploy/unraid/ouro-events/emit-event.mjs +310 -0
  28. package/deploy/unraid/ouro-events/emit-usenet-event.sh +54 -0
  29. package/deploy/unraid/ouro-events/install-usenet-guard.sh +435 -0
  30. package/deploy/unraid/ouro-events/usenet-health.sh +176 -0
  31. package/deploy/unraid/sanctuary-acceptance-adapter.sh +43 -0
  32. package/deploy/unraid/sanctuary-acceptance-contract.json +198 -0
  33. package/deploy/unraid/sanctuary-acceptance-harness.sh +23 -0
  34. package/deploy/unraid/sanctuary-authority-installation.json +36 -0
  35. package/deploy/unraid/sanctuary-authority-service.sh +30 -0
  36. package/deploy/unraid/sanctuary-butler-upgrade.mjs +1377 -0
  37. package/deploy/unraid/sanctuary-deployment-target.mjs +710 -0
  38. package/deploy/unraid/sanctuary-replay-gate.mjs +1776 -0
  39. package/deploy/unraid/sanctuary-safe-rename.py +24 -0
  40. package/deploy/unraid/sanctuary-unit16-host-broker.mjs +2088 -0
  41. package/deploy/unraid/sanctuary-unit16-run.sh +570 -0
  42. package/deploy/unraid/sanctuary-unit18-target-audit.sh +27 -0
  43. package/deploy/unraid/sanctuary.ouro/agent.json +66 -0
  44. package/deploy/unraid/sanctuary.ouro/arc/README.md +3 -0
  45. package/deploy/unraid/sanctuary.ouro/awaiting/house-care-sweep.md +17 -0
  46. package/deploy/unraid/sanctuary.ouro/bundle-meta.json +5 -0
  47. package/deploy/unraid/sanctuary.ouro/habits/sanctuary-health.md +8 -0
  48. package/deploy/unraid/sanctuary.ouro/mcp/media-mcp.mjs +2255 -0
  49. package/deploy/unraid/sanctuary.ouro/provider-readiness.json +11 -0
  50. package/deploy/unraid/sanctuary.ouro/psyche/ASPIRATIONS.md +5 -0
  51. package/deploy/unraid/sanctuary.ouro/psyche/IDENTITY.md +7 -0
  52. package/deploy/unraid/sanctuary.ouro/psyche/LORE.md +33 -0
  53. package/deploy/unraid/sanctuary.ouro/psyche/SOUL.md +27 -0
  54. package/deploy/unraid/sanctuary.ouro/psyche/TACIT.md +21 -0
  55. package/deploy/unraid/sanctuary.ouro/state/policy/steward.json +7 -0
  56. package/deploy/unraid/sanctuary.ouro/tool-profiles.json +232 -0
  57. package/deploy/unraid/sanctuary.xml +29 -0
  58. package/dist/a2a/card.js +57 -0
  59. package/dist/a2a/client.js +250 -0
  60. package/dist/a2a/config.js +50 -0
  61. package/dist/a2a/delegated-command-grants.js +93 -0
  62. package/dist/a2a/delegated-command.js +197 -0
  63. package/dist/a2a/delegation-stores.js +56 -0
  64. package/dist/a2a/did-resolution.js +93 -0
  65. package/dist/a2a/escalation-grants.js +84 -0
  66. package/dist/a2a/escalation-wiring.js +60 -0
  67. package/dist/a2a/identity.js +258 -0
  68. package/dist/a2a/inbound-share.js +110 -0
  69. package/dist/a2a/mission-result-wire.js +196 -0
  70. package/dist/a2a/onboarding.js +133 -0
  71. package/dist/a2a/operator-trust.js +399 -0
  72. package/dist/a2a/outbox-client.js +57 -0
  73. package/dist/a2a/outbox-store.js +188 -0
  74. package/dist/a2a/outbox-wire.js +95 -0
  75. package/dist/a2a/pin-store.js +132 -0
  76. package/dist/a2a/replay-grant-holders.js +33 -0
  77. package/dist/a2a/replay-harness.js +188 -0
  78. package/dist/a2a/resolution-proof.js +53 -0
  79. package/dist/a2a/sealed-chat.js +113 -0
  80. package/dist/a2a/seen-ledger.js +120 -0
  81. package/dist/a2a/server.js +771 -0
  82. package/dist/a2a/task-store.js +69 -0
  83. package/dist/a2a/transport.js +45 -0
  84. package/dist/a2a/trust-commands.js +203 -0
  85. package/dist/a2a/trusted-files.js +185 -0
  86. package/dist/a2a/types.js +3 -0
  87. package/dist/arc/attention-types.js +8 -0
  88. package/dist/arc/cares.js +360 -0
  89. package/dist/arc/episodes.js +118 -0
  90. package/dist/arc/evolution.js +490 -0
  91. package/dist/arc/flight-recorder.js +1034 -0
  92. package/dist/arc/intentions.js +134 -0
  93. package/dist/arc/json-store.js +117 -0
  94. package/dist/arc/obligations.js +386 -0
  95. package/dist/arc/packets.js +336 -0
  96. package/dist/arc/presence.js +185 -0
  97. package/dist/arc/task-lifecycle.js +57 -0
  98. package/dist/commerce/store.js +755 -0
  99. package/dist/commerce/types.js +3 -0
  100. package/dist/gateway/keys.js +117 -0
  101. package/dist/gateway/server.js +429 -0
  102. package/dist/heart/active-work.js +798 -40
  103. package/dist/heart/agent-entry.js +252 -3
  104. package/dist/heart/approval-files.js +113 -0
  105. package/dist/heart/approval-store.js +960 -0
  106. package/dist/heart/attachments/image-normalize.js +201 -0
  107. package/dist/heart/attachments/materialize.js +97 -0
  108. package/dist/heart/attachments/originals.js +88 -0
  109. package/dist/heart/attachments/render.js +29 -0
  110. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  111. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  112. package/dist/heart/attachments/sources/index.js +18 -0
  113. package/dist/heart/attachments/sources/telegram.js +71 -0
  114. package/dist/heart/attachments/store.js +132 -0
  115. package/dist/heart/attachments/types.js +93 -0
  116. package/dist/heart/auth/auth-flow.js +511 -0
  117. package/dist/heart/autonomy-budget.js +478 -0
  118. package/dist/heart/awaiting/a2a-await-delivery.js +109 -0
  119. package/dist/heart/awaiting/await-alert.js +152 -0
  120. package/dist/heart/awaiting/await-expiry.js +143 -0
  121. package/dist/heart/awaiting/await-loader.js +91 -0
  122. package/dist/heart/awaiting/await-parser.js +152 -0
  123. package/dist/heart/awaiting/await-runtime-state.js +130 -0
  124. package/dist/heart/awaiting/await-scheduler.js +391 -0
  125. package/dist/heart/background-operations.js +281 -0
  126. package/dist/heart/bluebubbles-host-account.js +78 -0
  127. package/dist/heart/bridges/manager.js +137 -17
  128. package/dist/heart/bridges/store.js +14 -2
  129. package/dist/heart/bundle-state.js +168 -0
  130. package/dist/heart/commitments.js +44 -18
  131. package/dist/heart/config-registry.js +331 -0
  132. package/dist/heart/config.js +178 -131
  133. package/dist/heart/context-loss-gauntlet.js +387 -0
  134. package/dist/heart/context-loss-sentinel.js +1204 -0
  135. package/dist/heart/core.js +2377 -586
  136. package/dist/heart/cross-chat-delivery.js +9 -22
  137. package/dist/heart/daemon/agent-config-check.js +474 -0
  138. package/dist/heart/daemon/agent-discovery.js +283 -3
  139. package/dist/heart/daemon/agent-home.js +319 -0
  140. package/dist/heart/daemon/agent-service.js +542 -0
  141. package/dist/heart/daemon/agentic-repair.js +547 -0
  142. package/dist/heart/daemon/await-private-wake.js +59 -0
  143. package/dist/heart/daemon/bluebubbles-cli-integration.js +71 -0
  144. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  145. package/dist/heart/daemon/bluebubbles-host-protocol.js +433 -0
  146. package/dist/heart/daemon/bluebubbles-host.js +273 -0
  147. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  148. package/dist/heart/daemon/cadence.js +180 -0
  149. package/dist/heart/daemon/cli-arg-redaction.js +26 -0
  150. package/dist/heart/daemon/cli-defaults.js +881 -0
  151. package/dist/heart/daemon/cli-desk.js +331 -0
  152. package/dist/heart/daemon/cli-exec.js +9272 -0
  153. package/dist/heart/daemon/cli-help.js +754 -0
  154. package/dist/heart/daemon/cli-parse.js +3329 -0
  155. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  156. package/dist/heart/daemon/cli-render.js +819 -0
  157. package/dist/heart/daemon/cli-types.js +8 -0
  158. package/dist/heart/daemon/connect-bay.js +323 -0
  159. package/dist/heart/daemon/container-credential-bootstrap.js +273 -0
  160. package/dist/heart/daemon/container-healthcheck.js +112 -0
  161. package/dist/heart/daemon/container-runtime.js +97 -0
  162. package/dist/heart/daemon/container-spec-auditor-main.js +171 -0
  163. package/dist/heart/daemon/container-spec-auditor.js +241 -0
  164. package/dist/heart/daemon/daemon-bootstrap-startup.js +115 -0
  165. package/dist/heart/daemon/daemon-cli.js +29 -2373
  166. package/dist/heart/daemon/daemon-entry.js +953 -11
  167. package/dist/heart/daemon/daemon-health.js +186 -0
  168. package/dist/heart/daemon/daemon-rollup.js +57 -0
  169. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  170. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  171. package/dist/heart/daemon/daemon.js +2110 -104
  172. package/dist/heart/daemon/desk-admin.js +420 -0
  173. package/dist/heart/daemon/dns-workflow.js +394 -0
  174. package/dist/heart/daemon/doctor-types.js +8 -0
  175. package/dist/heart/daemon/doctor.js +1766 -0
  176. package/dist/heart/daemon/freshness.js +345 -0
  177. package/dist/heart/daemon/habit-private-wake.js +61 -0
  178. package/dist/heart/daemon/health-monitor.js +154 -11
  179. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  180. package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
  181. package/dist/heart/daemon/http-health-probe.js +80 -0
  182. package/dist/heart/daemon/human-command-screens.js +234 -0
  183. package/dist/heart/daemon/human-readiness.js +114 -0
  184. package/dist/heart/daemon/inner-status.js +78 -0
  185. package/dist/heart/daemon/interactive-repair.js +394 -0
  186. package/dist/heart/daemon/launchd.js +37 -8
  187. package/dist/heart/daemon/log-tailer.js +79 -10
  188. package/dist/heart/daemon/logs-prune.js +132 -0
  189. package/dist/heart/daemon/mcp-canary.js +524 -0
  190. package/dist/heart/daemon/message-router.js +65 -5
  191. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  192. package/dist/heart/daemon/os-cron-deps.js +135 -0
  193. package/dist/heart/daemon/os-cron.js +22 -14
  194. package/dist/heart/daemon/ouro-bot-entry.js +6 -3
  195. package/dist/heart/daemon/ouro-entry.js +9 -3
  196. package/dist/heart/daemon/plugin-cli.js +432 -0
  197. package/dist/heart/daemon/process-manager.js +760 -61
  198. package/dist/heart/daemon/provider-discovery.js +137 -0
  199. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  200. package/dist/heart/daemon/prunable-bundle.js +144 -0
  201. package/dist/heart/daemon/pulse.js +511 -0
  202. package/dist/heart/daemon/readiness-repair.js +365 -0
  203. package/dist/heart/daemon/run-hooks.js +2 -0
  204. package/dist/heart/daemon/runtime-logging.js +47 -14
  205. package/dist/heart/daemon/runtime-metadata.js +2 -30
  206. package/dist/heart/daemon/runtime-mode.js +13 -2
  207. package/dist/heart/daemon/safe-mode.js +161 -0
  208. package/dist/heart/daemon/sanctuary-acceptance-adapter.js +2662 -0
  209. package/dist/heart/daemon/sanctuary-acceptance-harness.js +1832 -0
  210. package/dist/heart/daemon/sanctuary-acceptance-marker.js +267 -0
  211. package/dist/heart/daemon/sanctuary-acceptance-scenarios.js +956 -0
  212. package/dist/heart/daemon/sanctuary-authority-codec.js +86 -0
  213. package/dist/heart/daemon/sanctuary-authority-epoch.js +291 -0
  214. package/dist/heart/daemon/sanctuary-authority-installation.js +161 -0
  215. package/dist/heart/daemon/sanctuary-authority-ledger.js +241 -0
  216. package/dist/heart/daemon/sanctuary-authority-root-lifecycle.js +1326 -0
  217. package/dist/heart/daemon/sanctuary-authority-vault-migration.js +79 -0
  218. package/dist/heart/daemon/sanctuary-bundle-migration.js +851 -0
  219. package/dist/heart/daemon/sanctuary-host-authority.js +1008 -0
  220. package/dist/heart/daemon/sanctuary-host-detached-supervisor.js +493 -0
  221. package/dist/heart/daemon/sanctuary-host-executor.js +670 -0
  222. package/dist/heart/daemon/sanctuary-host-linux-kernel.js +334 -0
  223. package/dist/heart/daemon/sanctuary-host-supervisor-entry.js +207 -0
  224. package/dist/heart/daemon/sanctuary-host-supervisor.js +95 -0
  225. package/dist/heart/daemon/sanctuary-package-management.js +103 -0
  226. package/dist/heart/daemon/sanctuary-scheduler-liveness.js +227 -0
  227. package/dist/heart/daemon/sanctuary-scheduler-origin.js +132 -0
  228. package/dist/heart/daemon/sanctuary-telegram-authority-entry.js +475 -0
  229. package/dist/heart/daemon/sanctuary-telegram-authority-gateway.js +585 -0
  230. package/dist/heart/daemon/sanctuary-telegram-authority-service.js +676 -0
  231. package/dist/heart/daemon/sense-manager.js +786 -48
  232. package/dist/heart/daemon/session-id-resolver.js +131 -0
  233. package/dist/heart/daemon/skill-management-installer.js +1 -1
  234. package/dist/heart/daemon/socket-client.js +180 -12
  235. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  236. package/dist/heart/daemon/startup-tui.js +339 -0
  237. package/dist/heart/daemon/supercronic-supervisor.js +282 -0
  238. package/dist/heart/daemon/task-scheduler.js +117 -39
  239. package/dist/heart/daemon/terminal-ui.js +503 -0
  240. package/dist/heart/daemon/thoughts.js +138 -54
  241. package/dist/heart/daemon/up-progress.js +366 -0
  242. package/dist/heart/daemon/vault-items.js +56 -0
  243. package/dist/heart/delegation.js +1 -4
  244. package/dist/heart/external-events/router.js +1531 -0
  245. package/dist/heart/failure-reports.js +336 -0
  246. package/dist/heart/file-lock.js +109 -0
  247. package/dist/heart/frontend-approval-runtime.js +506 -0
  248. package/dist/heart/frontend-journal.js +215 -0
  249. package/dist/heart/frontend-session-service.js +271 -0
  250. package/dist/heart/frontend-socket-client.js +173 -0
  251. package/dist/heart/frontend-socket.js +434 -0
  252. package/dist/heart/frontend-turn-errors.js +20 -0
  253. package/dist/heart/habits/habit-cancel.js +810 -0
  254. package/dist/heart/habits/habit-lifecycle.js +1327 -0
  255. package/dist/heart/habits/habit-migration.js +194 -0
  256. package/dist/heart/habits/habit-parser.js +278 -0
  257. package/dist/heart/habits/habit-runtime-state.js +93 -0
  258. package/dist/heart/habits/habit-scheduler.js +653 -0
  259. package/dist/heart/habits/habit-session-summary.js +318 -0
  260. package/dist/heart/habits/habit-session.js +636 -0
  261. package/dist/heart/{daemon → hatch}/hatch-flow.js +55 -62
  262. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  263. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  264. package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
  265. package/dist/heart/identity.js +239 -59
  266. package/dist/heart/kept-notes.js +289 -0
  267. package/dist/heart/kicks.js +1 -1
  268. package/dist/heart/machine-identity.js +175 -0
  269. package/dist/heart/mail-import-discovery.js +356 -0
  270. package/dist/heart/mailbox/mailbox-http-hooks.js +99 -0
  271. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  272. package/dist/heart/mailbox/mailbox-http-routes.js +406 -0
  273. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  274. package/dist/heart/mailbox/mailbox-http-transport.js +272 -0
  275. package/dist/heart/mailbox/mailbox-http.js +99 -0
  276. package/dist/heart/mailbox/mailbox-read.js +41 -0
  277. package/dist/heart/mailbox/mailbox-supervision.js +131 -0
  278. package/dist/heart/mailbox/mailbox-types.js +27 -0
  279. package/dist/heart/mailbox/mailbox-view.js +197 -0
  280. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  281. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  282. package/dist/heart/mailbox/readers/mail.js +375 -0
  283. package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
  284. package/dist/heart/mailbox/readers/sessions.js +231 -0
  285. package/dist/heart/mailbox/readers/shared.js +111 -0
  286. package/dist/heart/mcp/mcp-server.js +760 -0
  287. package/dist/heart/migrate-config.js +100 -0
  288. package/dist/heart/model-capabilities.js +83 -16
  289. package/dist/heart/orientation-frame.js +376 -0
  290. package/dist/heart/platform.js +81 -0
  291. package/dist/heart/primitives.js +1 -1
  292. package/dist/heart/private-runtime/decision-renderer.js +158 -0
  293. package/dist/heart/private-runtime/index.js +18 -0
  294. package/dist/heart/private-runtime/ledger.js +221 -0
  295. package/dist/heart/private-runtime/policy.js +260 -0
  296. package/dist/heart/private-runtime/types.js +2 -0
  297. package/dist/heart/progress-story.js +1 -1
  298. package/dist/heart/provider-attempt.js +137 -0
  299. package/dist/heart/provider-binding-resolver.js +273 -0
  300. package/dist/heart/provider-credentials.js +449 -0
  301. package/dist/heart/provider-failover.js +311 -0
  302. package/dist/heart/provider-models.js +96 -0
  303. package/dist/heart/provider-ping.js +266 -0
  304. package/dist/heart/provider-readiness-cache.js +119 -0
  305. package/dist/heart/provider-visibility.js +188 -0
  306. package/dist/heart/providers/anthropic-token.js +131 -0
  307. package/dist/heart/providers/anthropic.js +248 -67
  308. package/dist/heart/providers/azure.js +23 -11
  309. package/dist/heart/providers/error-classification.js +129 -0
  310. package/dist/heart/providers/github-copilot.js +38 -39
  311. package/dist/heart/providers/minimax-vlm.js +189 -0
  312. package/dist/heart/providers/minimax.js +26 -8
  313. package/dist/heart/providers/openai-codex-token.js +349 -0
  314. package/dist/heart/providers/openai-codex.js +55 -40
  315. package/dist/heart/providers/openai-compatible.js +177 -0
  316. package/dist/heart/reach-channel.js +85 -0
  317. package/dist/heart/reply-style.js +52 -0
  318. package/dist/heart/run-ledger.js +247 -0
  319. package/dist/heart/runtime-capability-check.js +170 -0
  320. package/dist/heart/runtime-credentials.js +608 -0
  321. package/dist/heart/runtime-cwd.js +87 -0
  322. package/dist/heart/sense-truth.js +24 -4
  323. package/dist/heart/session-activity.js +94 -24
  324. package/dist/heart/session-events.js +1521 -0
  325. package/dist/heart/session-playback-cli-main.js +5 -0
  326. package/dist/heart/session-playback-cli.js +36 -0
  327. package/dist/heart/session-playback.js +231 -0
  328. package/dist/heart/session-redaction-repair-cli-main.js +31 -0
  329. package/dist/heart/session-redaction-repair.js +552 -0
  330. package/dist/heart/session-stats-cli-main.js +5 -0
  331. package/dist/heart/session-stats.js +183 -0
  332. package/dist/heart/session-transcript.js +133 -0
  333. package/dist/heart/shelf-claims.js +78 -0
  334. package/dist/heart/shepherd/custody-types.js +2 -0
  335. package/dist/heart/shepherd/mandates.js +352 -0
  336. package/dist/heart/shepherd/operation-commands.js +19 -0
  337. package/dist/heart/shepherd/operations.js +135 -0
  338. package/dist/heart/shepherd/supervision.js +114 -0
  339. package/dist/heart/shepherd/types.js +2 -0
  340. package/dist/heart/shepherd-config.js +123 -0
  341. package/dist/heart/source-grounding.js +313 -0
  342. package/dist/heart/start-of-turn-packet.js +372 -0
  343. package/dist/heart/steward-policy.js +656 -0
  344. package/dist/heart/streaming.js +631 -207
  345. package/dist/heart/structured-output.js +196 -0
  346. package/dist/heart/sync-classification.js +176 -0
  347. package/dist/heart/sync-health.js +152 -0
  348. package/dist/heart/sync.js +726 -0
  349. package/dist/heart/target-resolution.js +11 -7
  350. package/dist/heart/tempo.js +93 -0
  351. package/dist/heart/temporal-view.js +41 -0
  352. package/dist/heart/timeouts.js +101 -0
  353. package/dist/heart/tool-activity-callbacks.js +59 -0
  354. package/dist/heart/tool-approval.js +382 -0
  355. package/dist/heart/tool-description.js +155 -0
  356. package/dist/heart/tool-friction.js +55 -0
  357. package/dist/heart/tool-loop.js +206 -0
  358. package/dist/heart/turn-context.js +496 -0
  359. package/dist/heart/turn-execution-lease.js +30 -0
  360. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  361. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +3 -2
  362. package/dist/heart/versioning/ouro-path-installer.js +432 -0
  363. package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
  364. package/dist/heart/versioning/ouro-version-manager.js +432 -0
  365. package/dist/heart/versioning/release-sources.js +173 -0
  366. package/dist/heart/versioning/self-update-defaults.js +294 -0
  367. package/dist/heart/versioning/self-update.js +196 -0
  368. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  369. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  370. package/dist/heart/versioning/update-hooks.js +154 -0
  371. package/dist/heart/versioning/update-state.js +126 -0
  372. package/dist/heart/versioning/updater-launchd.js +150 -0
  373. package/dist/heart/versioning/version-intent.js +114 -0
  374. package/dist/heart/work-card.js +380 -0
  375. package/dist/mailbox-ui/assets/index-Dbska1tZ.js +1 -0
  376. package/dist/mailbox-ui/assets/index-DsiKaPyH.css +1 -0
  377. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  378. package/dist/mailbox-ui/index.html +16 -0
  379. package/dist/mailroom/attention.js +167 -0
  380. package/dist/mailroom/autonomy.js +209 -0
  381. package/dist/mailroom/blob-store.js +889 -0
  382. package/dist/mailroom/body-cache.js +61 -0
  383. package/dist/mailroom/cache-sync-cli.js +58 -0
  384. package/dist/mailroom/core.js +803 -0
  385. package/dist/mailroom/entry.js +160 -0
  386. package/dist/mailroom/file-store.js +568 -0
  387. package/dist/mailroom/hosted-cache-sync.js +384 -0
  388. package/dist/mailroom/mbox-import.js +393 -0
  389. package/dist/mailroom/migration.js +164 -0
  390. package/dist/mailroom/outbound.js +380 -0
  391. package/dist/mailroom/policy.js +263 -0
  392. package/dist/mailroom/reader.js +292 -0
  393. package/dist/mailroom/search-cache.js +513 -0
  394. package/dist/mailroom/search-relevance.js +319 -0
  395. package/dist/mailroom/smtp-ingress.js +176 -0
  396. package/dist/mailroom/source-state.js +176 -0
  397. package/dist/mailroom/thread.js +109 -0
  398. package/dist/mailroom/travel-extract.js +89 -0
  399. package/dist/mind/bundle-manifest.js +24 -2
  400. package/dist/mind/context.js +328 -139
  401. package/dist/mind/desk-section.js +362 -0
  402. package/dist/mind/diary-integrity.js +60 -0
  403. package/dist/mind/{memory.js → diary.js} +68 -77
  404. package/dist/mind/embedding-provider.js +60 -0
  405. package/dist/mind/file-state.js +179 -0
  406. package/dist/mind/friend-link-codes.js +209 -0
  407. package/dist/mind/friend-merge.js +336 -0
  408. package/dist/mind/{associative-recall.js → note-search.js} +47 -58
  409. package/dist/mind/obligation-steering.js +199 -3
  410. package/dist/mind/outbound-record.js +168 -0
  411. package/dist/mind/pending.js +36 -10
  412. package/dist/mind/prompt-budget.js +479 -0
  413. package/dist/mind/prompt-refresh.js +3 -2
  414. package/dist/mind/prompt.js +1166 -203
  415. package/dist/mind/provenance-trust.js +26 -0
  416. package/dist/mind/record-paths.js +312 -0
  417. package/dist/mind/scrutiny.js +173 -0
  418. package/dist/mind/session-transaction.js +622 -0
  419. package/dist/nerves/cli-logging.js +7 -1
  420. package/dist/nerves/coverage/audit-rules.js +15 -6
  421. package/dist/nerves/coverage/audit.js +28 -2
  422. package/dist/nerves/coverage/cli.js +1 -1
  423. package/dist/nerves/coverage/contract.js +5 -5
  424. package/dist/nerves/coverage/file-completeness.js +143 -5
  425. package/dist/nerves/coverage/run-artifacts.js +55 -35
  426. package/dist/nerves/coverage/source-scanner.js +4 -4
  427. package/dist/nerves/event-buffer.js +111 -0
  428. package/dist/nerves/index.js +293 -9
  429. package/dist/nerves/observation.js +20 -0
  430. package/dist/nerves/redact.js +79 -0
  431. package/dist/nerves/review/cli-main.js +5 -0
  432. package/dist/nerves/review/cli.js +156 -0
  433. package/dist/nerves/review/core.js +159 -0
  434. package/dist/nerves/runtime.js +17 -1
  435. package/dist/repertoire/ado-client.js +15 -56
  436. package/dist/repertoire/ado-semantic.js +16 -10
  437. package/dist/repertoire/api-client.js +97 -0
  438. package/dist/repertoire/bitwarden-store.js +1199 -0
  439. package/dist/repertoire/bundle-templates.js +71 -0
  440. package/dist/repertoire/bw-installer.js +231 -0
  441. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  442. package/dist/repertoire/coding/context-pack.js +331 -0
  443. package/dist/repertoire/coding/feedback.js +146 -34
  444. package/dist/repertoire/coding/index.js +15 -3
  445. package/dist/repertoire/coding/manager.js +159 -10
  446. package/dist/repertoire/coding/spawner.js +40 -11
  447. package/dist/repertoire/coding/tools.js +182 -18
  448. package/dist/repertoire/coding/workbench-client.js +272 -0
  449. package/dist/repertoire/coding/workbench-manager.js +346 -0
  450. package/dist/repertoire/commerce-errors.js +109 -0
  451. package/dist/repertoire/commerce-self-test.js +156 -0
  452. package/dist/repertoire/credential-access.js +183 -0
  453. package/dist/repertoire/desk/classifier.js +362 -0
  454. package/dist/repertoire/duffel-client.js +185 -0
  455. package/dist/repertoire/github-client.js +14 -55
  456. package/dist/repertoire/graph-client.js +11 -52
  457. package/dist/repertoire/guardrails.js +971 -20
  458. package/dist/repertoire/house-sweep.js +471 -0
  459. package/dist/repertoire/mcp-client.js +58 -5
  460. package/dist/repertoire/mcp-manager.js +427 -139
  461. package/dist/repertoire/mcp-tools.js +132 -0
  462. package/dist/repertoire/mcp-write-guard.js +46 -0
  463. package/dist/repertoire/plugin-mcp.js +175 -0
  464. package/dist/repertoire/plugins.js +253 -0
  465. package/dist/repertoire/relationship-authorization.js +322 -0
  466. package/dist/repertoire/sanctuary-container-policy.js +50 -0
  467. package/dist/repertoire/shell-sessions.js +134 -0
  468. package/dist/repertoire/skills.js +48 -4
  469. package/dist/repertoire/stripe-client.js +131 -0
  470. package/dist/repertoire/tool-arguments.js +182 -0
  471. package/dist/repertoire/tool-results.js +29 -0
  472. package/dist/repertoire/tools-a2a.js +699 -0
  473. package/dist/repertoire/tools-attachments.js +322 -0
  474. package/dist/repertoire/tools-awaiting.js +897 -0
  475. package/dist/repertoire/tools-base.js +83 -1168
  476. package/dist/repertoire/tools-bluebubbles.js +2 -0
  477. package/dist/repertoire/tools-bridge.js +144 -0
  478. package/dist/repertoire/tools-bundle.js +995 -0
  479. package/dist/repertoire/tools-commerce.js +253 -0
  480. package/dist/repertoire/tools-config.js +186 -0
  481. package/dist/repertoire/tools-continuity.js +588 -0
  482. package/dist/repertoire/tools-credential.js +383 -0
  483. package/dist/repertoire/tools-escalation.js +84 -0
  484. package/dist/repertoire/tools-evolution.js +527 -0
  485. package/dist/repertoire/tools-files.js +344 -0
  486. package/dist/repertoire/tools-flight.js +290 -0
  487. package/dist/repertoire/tools-flow.js +119 -0
  488. package/dist/repertoire/tools-friend-link.js +57 -0
  489. package/dist/repertoire/tools-github.js +3 -8
  490. package/dist/repertoire/tools-habits.js +103 -0
  491. package/dist/repertoire/tools-house-care.js +174 -0
  492. package/dist/repertoire/tools-mail.js +1828 -0
  493. package/dist/repertoire/tools-notes.js +501 -0
  494. package/dist/repertoire/tools-obligations.js +182 -0
  495. package/dist/repertoire/tools-orientation.js +31 -0
  496. package/dist/repertoire/tools-record.js +482 -0
  497. package/dist/repertoire/tools-rsvp.js +139 -0
  498. package/dist/repertoire/tools-runtime.js +238 -0
  499. package/dist/repertoire/tools-sanctuary-host.js +202 -0
  500. package/dist/repertoire/tools-session.js +1141 -0
  501. package/dist/repertoire/tools-shell.js +154 -0
  502. package/dist/repertoire/tools-shepherd-guidance.js +171 -0
  503. package/dist/repertoire/tools-shepherd.js +325 -0
  504. package/dist/repertoire/tools-steward-policy.js +147 -0
  505. package/dist/repertoire/tools-stripe.js +224 -0
  506. package/dist/repertoire/tools-surface.js +369 -0
  507. package/dist/repertoire/tools-teams.js +50 -39
  508. package/dist/repertoire/tools-telegram-contacts.js +37 -0
  509. package/dist/repertoire/tools-travel.js +125 -0
  510. package/dist/repertoire/tools-trip.js +982 -0
  511. package/dist/repertoire/tools-unraid.js +556 -0
  512. package/dist/repertoire/tools-user-profile.js +146 -0
  513. package/dist/repertoire/tools-vault.js +40 -0
  514. package/dist/repertoire/tools-voice-local.js +198 -0
  515. package/dist/repertoire/tools-voice.js +145 -0
  516. package/dist/repertoire/tools.js +518 -156
  517. package/dist/repertoire/travel-api-client.js +360 -0
  518. package/dist/repertoire/unraid-client.js +155 -0
  519. package/dist/repertoire/unraid-restart.js +339 -0
  520. package/dist/repertoire/user-profile.js +131 -0
  521. package/dist/repertoire/vault-setup.js +246 -0
  522. package/dist/repertoire/vault-unlock.js +686 -0
  523. package/dist/rsvp/aisleplanner-client.js +354 -0
  524. package/dist/rsvp/cli.js +936 -0
  525. package/dist/rsvp/config.js +327 -0
  526. package/dist/rsvp/cutover.js +453 -0
  527. package/dist/rsvp/diagnostics.js +232 -0
  528. package/dist/rsvp/diff-renderer.js +176 -0
  529. package/dist/rsvp/habit-policy.js +110 -0
  530. package/dist/rsvp/habit-stage.js +123 -0
  531. package/dist/rsvp/incident-bundle.js +97 -0
  532. package/dist/rsvp/migration.js +204 -0
  533. package/dist/rsvp/native-habit-runner.js +630 -0
  534. package/dist/rsvp/outbound-state.js +628 -0
  535. package/dist/rsvp/query.js +118 -0
  536. package/dist/rsvp/replay.js +233 -0
  537. package/dist/rsvp/snapshot.js +232 -0
  538. package/dist/rsvp/spend-ledger.js +175 -0
  539. package/dist/scripts/claude-code-hook.js +41 -0
  540. package/dist/scripts/claude-code-stop-hook.js +47 -0
  541. package/dist/senses/a2a-entry.js +132 -0
  542. package/dist/senses/acp-server.js +386 -0
  543. package/dist/senses/attention-queue.js +186 -0
  544. package/dist/senses/await-turn-message.js +65 -0
  545. package/dist/senses/bluebubbles/active-turns.js +216 -0
  546. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  547. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  548. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +393 -43
  549. package/dist/senses/bluebubbles/context-packet.js +207 -0
  550. package/dist/senses/bluebubbles/context-smoke.js +144 -0
  551. package/dist/senses/bluebubbles/entry.js +90 -0
  552. package/dist/senses/bluebubbles/host-account-verifier.js +88 -0
  553. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +21 -3
  554. package/dist/senses/bluebubbles/index.js +4054 -0
  555. package/dist/senses/bluebubbles/latest-turn.js +311 -0
  556. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  557. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +159 -28
  558. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +24 -13
  559. package/dist/senses/bluebubbles/outbound-state.js +335 -0
  560. package/dist/senses/bluebubbles/processed-log.js +133 -0
  561. package/dist/senses/bluebubbles/reaction-policy.js +47 -0
  562. package/dist/senses/bluebubbles/replay.js +284 -0
  563. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  564. package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
  565. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  566. package/dist/senses/bluebubbles/webhook-registration.js +257 -0
  567. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  568. package/dist/senses/cli/bracketed-paste.js +82 -0
  569. package/dist/senses/cli/image-paste.js +287 -0
  570. package/dist/senses/cli/image-ref-navigation.js +75 -0
  571. package/dist/senses/cli/ink-app.js +156 -0
  572. package/dist/senses/cli/inline-diff.js +64 -0
  573. package/dist/senses/cli/input-keys.js +174 -0
  574. package/dist/senses/cli/kill-ring.js +86 -0
  575. package/dist/senses/cli/message-list.js +51 -0
  576. package/dist/senses/cli/ouro-tui.js +607 -0
  577. package/dist/senses/cli/spinner-imperative.js +135 -0
  578. package/dist/senses/cli/spinner.js +101 -0
  579. package/dist/senses/cli/status-line.js +60 -0
  580. package/dist/senses/cli/streaming-markdown.js +526 -0
  581. package/dist/senses/cli/tool-display.js +85 -0
  582. package/dist/senses/cli/tool-render.js +85 -0
  583. package/dist/senses/cli/tui-store.js +241 -0
  584. package/dist/senses/cli/virtual-list.js +35 -0
  585. package/dist/senses/cli-entry.js +60 -8
  586. package/dist/senses/cli.js +570 -309
  587. package/dist/senses/commands.js +66 -3
  588. package/dist/senses/context-packet-ledger.js +371 -0
  589. package/dist/senses/context-packets.js +154 -0
  590. package/dist/senses/habit-lifecycle-guard.js +24 -0
  591. package/dist/senses/habit-turn-message.js +160 -0
  592. package/dist/senses/ingress-evidence.js +2 -0
  593. package/dist/senses/mail-entry.js +66 -0
  594. package/dist/senses/mail.js +524 -0
  595. package/dist/senses/pipeline.js +1158 -204
  596. package/dist/senses/private-runtime-worker.js +857 -0
  597. package/dist/senses/private-runtime.js +1627 -0
  598. package/dist/senses/proactive-content-guard.js +51 -0
  599. package/dist/senses/root-host-approval-port.js +345 -0
  600. package/dist/senses/root-host-approval-runtime.js +393 -0
  601. package/dist/senses/sanctuary-authority-resident.js +102 -0
  602. package/dist/senses/sanctuary-download-credit-presentation.js +31 -0
  603. package/dist/senses/sanctuary-full-visibility-contract.js +302 -0
  604. package/dist/senses/sanctuary-grounding.js +118 -0
  605. package/dist/senses/sanctuary-health-acceptance-probe-entry.js +12 -0
  606. package/dist/senses/sanctuary-health-acceptance-probe.js +786 -0
  607. package/dist/senses/sanctuary-health-runner.js +106 -0
  608. package/dist/senses/sanctuary-health.js +442 -0
  609. package/dist/senses/sanctuary-house.js +97 -0
  610. package/dist/senses/sanctuary-install-state-contract.js +169 -0
  611. package/dist/senses/sanctuary-interactive-control.js +410 -0
  612. package/dist/senses/sanctuary-media-catalog-contract.js +268 -0
  613. package/dist/senses/sanctuary-media-optimization.js +517 -0
  614. package/dist/senses/sanctuary-runtime.js +390 -0
  615. package/dist/senses/sanctuary-sab.js +85 -0
  616. package/dist/senses/sanctuary-storage-optimization-contract.js +32 -0
  617. package/dist/senses/shared-turn.js +832 -0
  618. package/dist/senses/shepherd/agent-presentation.js +88 -0
  619. package/dist/senses/shepherd/attention-page.js +166 -0
  620. package/dist/senses/shepherd/attention-sidebar.js +76 -0
  621. package/dist/senses/shepherd/attention.js +295 -0
  622. package/dist/senses/shepherd/checkin-config.js +76 -0
  623. package/dist/senses/shepherd/checkin-store.js +386 -0
  624. package/dist/senses/shepherd/client.js +196 -0
  625. package/dist/senses/shepherd/cmux.js +483 -0
  626. package/dist/senses/shepherd/composer.js +336 -0
  627. package/dist/senses/shepherd/copilot-app.js +648 -0
  628. package/dist/senses/shepherd/feedback-reply.js +108 -0
  629. package/dist/senses/shepherd/feedback-source.js +20 -0
  630. package/dist/senses/shepherd/feedback-store.js +331 -0
  631. package/dist/senses/shepherd/feedback-submit.js +182 -0
  632. package/dist/senses/shepherd/feedback-worker.js +208 -0
  633. package/dist/senses/shepherd/guidance.js +273 -0
  634. package/dist/senses/shepherd/herdr.js +427 -0
  635. package/dist/senses/shepherd/host.js +17 -0
  636. package/dist/senses/shepherd/human-decision-guard.js +29 -0
  637. package/dist/senses/shepherd/judge-evaluation-command.js +183 -0
  638. package/dist/senses/shepherd/judge-evaluation-entry.js +13 -0
  639. package/dist/senses/shepherd/judge-evaluation.js +155 -0
  640. package/dist/senses/shepherd/judge.js +210 -0
  641. package/dist/senses/shepherd/notice-outbox.js +262 -0
  642. package/dist/senses/shepherd/observation-publisher.js +320 -0
  643. package/dist/senses/shepherd/operations-defaults.js +86 -0
  644. package/dist/senses/shepherd/operations.js +159 -0
  645. package/dist/senses/shepherd/owner-notice.js +489 -0
  646. package/dist/senses/shepherd/prompt-state.js +60 -0
  647. package/dist/senses/shepherd/recovery.js +543 -0
  648. package/dist/senses/shepherd/redact.js +66 -0
  649. package/dist/senses/shepherd/returns.js +79 -0
  650. package/dist/senses/shepherd/sense.js +849 -0
  651. package/dist/senses/shepherd/shepherd-judge-corpus-v1.json +170 -0
  652. package/dist/senses/shepherd/surface.js +123 -0
  653. package/dist/senses/shepherd/target-binding.js +13 -0
  654. package/dist/senses/shepherd/terminal-process.js +147 -0
  655. package/dist/senses/shepherd-entry.js +98 -0
  656. package/dist/senses/surface-tool.js +109 -0
  657. package/dist/senses/teams-entry.js +68 -8
  658. package/dist/senses/teams-image.js +119 -0
  659. package/dist/senses/teams.js +998 -337
  660. package/dist/senses/telegram-admission.js +718 -0
  661. package/dist/senses/telegram-approval-runtime.js +793 -0
  662. package/dist/senses/telegram-attachments.js +186 -0
  663. package/dist/senses/telegram-audit-ledger.js +220 -0
  664. package/dist/senses/telegram-authority-transport.js +231 -0
  665. package/dist/senses/telegram-client.js +1755 -0
  666. package/dist/senses/telegram-effect-adapter.js +904 -0
  667. package/dist/senses/telegram-entry.js +83 -0
  668. package/dist/senses/telegram-handoff.js +154 -0
  669. package/dist/senses/telegram.js +2474 -0
  670. package/dist/senses/trust-gate.js +104 -9
  671. package/dist/senses/voice/audio-playback.js +237 -0
  672. package/dist/senses/voice/audio-routing.js +119 -0
  673. package/dist/senses/voice/call-auth.js +250 -0
  674. package/dist/senses/voice/elevenlabs.js +202 -0
  675. package/dist/senses/voice/floor-control.js +431 -0
  676. package/dist/senses/voice/floor-controller.js +115 -0
  677. package/dist/senses/voice/golden-path.js +116 -0
  678. package/dist/senses/voice/index.js +29 -0
  679. package/dist/senses/voice/local-audio-control.js +344 -0
  680. package/dist/senses/voice/local-audio-devices.js +516 -0
  681. package/dist/senses/voice/local-audio-disclosure.js +174 -0
  682. package/dist/senses/voice/local-audio-identity.js +103 -0
  683. package/dist/senses/voice/local-audio-join.js +325 -0
  684. package/dist/senses/voice/local-audio-mute.js +199 -0
  685. package/dist/senses/voice/local-audio-notify.js +124 -0
  686. package/dist/senses/voice/local-audio-prompts.js +116 -0
  687. package/dist/senses/voice/local-audio-transport.js +427 -0
  688. package/dist/senses/voice/local-audio.js +281 -0
  689. package/dist/senses/voice/local-media-stream.js +145 -0
  690. package/dist/senses/voice/meeting.js +113 -0
  691. package/dist/senses/voice/outbound.js +190 -0
  692. package/dist/senses/voice/phone.js +33 -0
  693. package/dist/senses/voice/playback.js +139 -0
  694. package/dist/senses/voice/process-guards.js +51 -0
  695. package/dist/senses/voice/realtime-eval.js +496 -0
  696. package/dist/senses/voice/realtime-tool-schema.js +195 -0
  697. package/dist/senses/voice/realtime-trace.js +531 -0
  698. package/dist/senses/voice/transcript.js +70 -0
  699. package/dist/senses/voice/turn.js +191 -0
  700. package/dist/senses/voice/twilio-phone-runtime.js +836 -0
  701. package/dist/senses/voice/twilio-phone.js +5454 -0
  702. package/dist/senses/voice/types.js +2 -0
  703. package/dist/senses/voice/whisper.js +161 -0
  704. package/dist/senses/voice-entry.js +83 -0
  705. package/dist/senses/voice-realtime-eval-command.js +99 -0
  706. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  707. package/dist/senses/voice-twilio-entry.js +87 -0
  708. package/dist/trips/core.js +138 -0
  709. package/dist/trips/store.js +265 -0
  710. package/dist/util/frontmatter.js +69 -0
  711. package/npm-shrinkwrap.json +8342 -0
  712. package/package.json +76 -13
  713. package/skills/agent-commerce.md +113 -0
  714. package/skills/browser-navigation.md +117 -0
  715. package/skills/commerce-setup-guide.md +116 -0
  716. package/skills/commerce-setup.md +84 -0
  717. package/skills/configure-dev-tools.md +99 -0
  718. package/skills/travel-planning.md +138 -0
  719. package/dist/heart/daemon/auth-flow.js +0 -430
  720. package/dist/heart/daemon/ouro-path-installer.js +0 -260
  721. package/dist/heart/daemon/ouro-version-manager.js +0 -171
  722. package/dist/heart/daemon/update-hooks.js +0 -138
  723. package/dist/heart/obligations.js +0 -191
  724. package/dist/heart/safe-workspace.js +0 -381
  725. package/dist/heart/session-recall.js +0 -116
  726. package/dist/mind/friends/channel.js +0 -84
  727. package/dist/mind/friends/group-context.js +0 -144
  728. package/dist/mind/friends/resolver.js +0 -84
  729. package/dist/mind/friends/store-file.js +0 -190
  730. package/dist/mind/friends/store.js +0 -4
  731. package/dist/mind/friends/tokens.js +0 -26
  732. package/dist/mind/friends/trust-explanation.js +0 -74
  733. package/dist/mind/friends/types.js +0 -29
  734. package/dist/repertoire/tasks/board.js +0 -134
  735. package/dist/repertoire/tasks/index.js +0 -224
  736. package/dist/repertoire/tasks/lifecycle.js +0 -80
  737. package/dist/repertoire/tasks/middleware.js +0 -65
  738. package/dist/repertoire/tasks/parser.js +0 -173
  739. package/dist/repertoire/tasks/scanner.js +0 -132
  740. package/dist/repertoire/tasks/transitions.js +0 -144
  741. package/dist/senses/bluebubbles-entry.js +0 -13
  742. package/dist/senses/bluebubbles.js +0 -1181
  743. package/dist/senses/debug-activity.js +0 -154
  744. package/dist/senses/inner-dialog-worker.js +0 -90
  745. package/dist/senses/inner-dialog.js +0 -525
  746. package/subagents/README.md +0 -7
  747. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  748. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  749. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  750. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  751. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  752. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  753. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  754. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  755. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  756. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  757. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  758. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  759. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  760. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  761. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  762. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  763. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,588 @@
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.continuityToolDefinitions = void 0;
37
+ const path = __importStar(require("node:path"));
38
+ const fs = __importStar(require("node:fs"));
39
+ const identity_1 = require("../heart/identity");
40
+ const router_1 = require("../heart/external-events/router");
41
+ const runtime_1 = require("../nerves/runtime");
42
+ const episodes_1 = require("../arc/episodes");
43
+ const cares_1 = require("../arc/cares");
44
+ const presence_1 = require("../arc/presence");
45
+ const intentions_1 = require("../arc/intentions");
46
+ const steward_policy_1 = require("../heart/steward-policy");
47
+ const await_parser_1 = require("../heart/awaiting/await-parser");
48
+ const externalEventDispositionProperties = {
49
+ recordPath: { type: "string", description: "Exact receipt path from the external-event message" },
50
+ expectedGeneration: { type: "number", description: "Exact generation shown in the external-event turn" },
51
+ classifiedRevision: { type: "string", description: "Exact observation revision investigated in this turn" },
52
+ classification: { type: "string", enum: ["expected", "needs_attention", "adopted", "snoozed", "dismissed_until_change", "resolved"] },
53
+ stewardPolicyKind: { type: "string", enum: ["current", "none"], description: "Use current with the exact live policy key/version when one applies; otherwise use none. Any event may be closed with none." },
54
+ stewardPolicyKey: { type: "string", description: "Exact current policy key used for this decision" },
55
+ stewardPolicyVersion: { type: "number", description: "Exact current policy version used for this decision" },
56
+ decision: { type: "string", enum: ["silent", "act", "ask", "report"] },
57
+ reason: { type: "string", description: "Internal audit note for the decision; never shown to the owner" },
58
+ owner_message: { type: "string", description: "Required for ask or report: the exact short plain message the owner reads, as you would text a friend. No ids, leases, generations, revisions or receipts." },
59
+ nextWake: { type: "string", enum: ["on_change", "on_escalation", "on_recovery", "at"], description: "Use on_change unless you already called await_condition for this exact event and are supplying its awaitId" },
60
+ wakeAt: { type: "string", description: "ISO time required only when nextWake=at" },
61
+ awaitId: { type: "string", description: "Existing await_condition receipt required when nextWake=at; never invent one" },
62
+ careId: { type: "string", description: "Existing Care adopted for this incident, if any" },
63
+ actionRefs: { type: "array", items: { type: "string" } },
64
+ verificationRefs: { type: "array", items: { type: "string" } },
65
+ };
66
+ const externalEventDispositionRequired = ["recordPath", "expectedGeneration", "classifiedRevision", "classification", "stewardPolicyKind", "decision", "reason", "nextWake"];
67
+ const externalEventDispositionBatchSchema = {
68
+ type: "array",
69
+ minItems: 1,
70
+ maxItems: 32,
71
+ description: "All exact leases from one coalesced external-event turn",
72
+ items: { type: "object", properties: externalEventDispositionProperties, required: externalEventDispositionRequired, additionalProperties: false },
73
+ };
74
+ // The owner reads owner_message verbatim, so internal bookkeeping words never reach them.
75
+ const OWNER_MESSAGE_FORBIDDEN = /\b(generation|lease|revision|receipt|disposition|claimOwner|recordPath)s?\b|[\u200b-\u200f\u202a-\u202e\u2060-\u206f\ufeff]/iu;
76
+ function prepareExternalEventDisposition(a, ctx) {
77
+ const agentName = (0, identity_1.getAgentName)();
78
+ const agentEventRoot = path.resolve((0, router_1.getExternalEventRoot)(), agentName);
79
+ const recordPath = path.resolve(String(a.recordPath ?? ""));
80
+ const relative = path.relative(agentEventRoot, recordPath);
81
+ if (!relative || relative.startsWith("..") || path.isAbsolute(relative) || !recordPath.endsWith(".json")) {
82
+ throw new Error("External event receipt does not belong to the current agent");
83
+ }
84
+ const record = (0, router_1.readExternalEventRecord)(recordPath);
85
+ if (record.agent !== agentName)
86
+ throw new Error("External event receipt does not belong to the current agent");
87
+ const turnContext = ctx?.currentExternalEvent;
88
+ const turnEvent = turnContext
89
+ ? [turnContext, ...(turnContext.relatedEvents ?? [])].find((event) => path.resolve(event.recordPath) === recordPath)
90
+ : undefined;
91
+ const expectedGeneration = Number(a.expectedGeneration);
92
+ const classifiedRevision = String(a.classifiedRevision ?? "");
93
+ if (!turnEvent || turnEvent.recordPath !== recordPath || turnEvent.agent !== agentName
94
+ || turnEvent.generation !== expectedGeneration || turnEvent.observationRevision !== classifiedRevision
95
+ || record.generation !== expectedGeneration || record.observationRevision !== classifiedRevision
96
+ || record.executionState !== "running" || record.claimOwner !== turnEvent.claimOwner) {
97
+ throw new Error("External event disposition is not authorized for this exact turn lease");
98
+ }
99
+ const classification = String(a.classification);
100
+ const decision = String(a.decision);
101
+ const nextWake = String(a.nextWake);
102
+ const policyVersion = Number(a.stewardPolicyVersion);
103
+ const policyKind = String(a.stewardPolicyKind ?? "");
104
+ const reason = String(a.reason ?? "").trim();
105
+ const ownerText = String(a.owner_message ?? "").trim();
106
+ if (!reason || (policyKind !== "none" && (!Number.isSafeInteger(policyVersion) || policyVersion < 1))
107
+ || !["current", "none"].includes(policyKind)
108
+ || !["expected", "needs_attention", "adopted", "snoozed", "dismissed_until_change", "resolved"].includes(classification)
109
+ || !["silent", "act", "ask", "report"].includes(decision)
110
+ || !["on_change", "on_escalation", "on_recovery", "at"].includes(nextWake)) {
111
+ throw new Error("External event disposition is invalid");
112
+ }
113
+ const wake = nextWake === "at" ? { kind: "at", at: String(a.wakeAt ?? "") } : { kind: nextWake };
114
+ const actionRefs = Array.isArray(a.actionRefs) ? a.actionRefs.map(String) : [];
115
+ const verificationRefs = Array.isArray(a.verificationRefs) ? a.verificationRefs.map(String) : [];
116
+ const agentRoot = (0, identity_1.getAgentRoot)();
117
+ const policy = (0, steward_policy_1.readStewardPolicy)(agentRoot);
118
+ let stewardPolicy;
119
+ if (policyKind === "none") {
120
+ stewardPolicy = { kind: "none" };
121
+ }
122
+ else {
123
+ const key = String(a.stewardPolicyKey ?? "").trim();
124
+ if (!key)
125
+ throw new Error("External event disposition is invalid");
126
+ if (policy.version !== policyVersion || (!policy.desiredStates[key] && !policy.routineActionGrants[key])) {
127
+ throw new Error("External event steward policy is not the exact current key/version");
128
+ }
129
+ stewardPolicy = { kind: "current", key, version: policyVersion };
130
+ }
131
+ if (typeof a.careId === "string" && a.careId) {
132
+ const care = (0, cares_1.readCares)(agentRoot).find((candidate) => candidate.id === a.careId);
133
+ const binding = care?.incidentBindings?.find((candidate) => candidate.source === record.source && candidate.incidentKey === record.eventId && candidate.classifiedRevision === classifiedRevision);
134
+ if (!care || !binding)
135
+ throw new Error("External event Care does not belong to this agent and incident revision");
136
+ }
137
+ if (classification === "adopted" && !(typeof a.careId === "string" && a.careId)) {
138
+ throw new Error("External event adopted disposition requires a Care");
139
+ }
140
+ if (nextWake === "at") {
141
+ const awaitId = typeof a.awaitId === "string" ? a.awaitId : "";
142
+ if (!/^[A-Za-z0-9_-]+$/u.test(awaitId))
143
+ throw new Error("External event timed disposition requires a current pending Await");
144
+ const awaitPath = path.join(agentRoot, "awaiting", `${awaitId}.md`);
145
+ let pendingAwait;
146
+ try {
147
+ const stat = fs.lstatSync(awaitPath);
148
+ if (!stat.isFile() || stat.isSymbolicLink())
149
+ throw new Error("unsafe Await");
150
+ pendingAwait = (0, await_parser_1.parseAwaitFile)(fs.readFileSync(awaitPath, "utf8"), awaitPath);
151
+ }
152
+ catch {
153
+ throw new Error("External event timed disposition requires a current pending Await");
154
+ }
155
+ const expectedOwnerId = ctx?.context?.friend.id;
156
+ if (pendingAwait.filed_from !== "external-event" || pendingAwait.filed_from_key !== record.recordPath
157
+ || (expectedOwnerId && pendingAwait.filed_for_friend_id !== expectedOwnerId)) {
158
+ throw new Error("External event timed disposition Await is not owned by this exact external event");
159
+ }
160
+ if (pendingAwait.status !== "pending" || pendingAwait.wake_at !== String(a.wakeAt)) {
161
+ throw new Error("External event timed disposition Await does not match the exact wake time");
162
+ }
163
+ }
164
+ const authority = ctx?.externalEventAuthority?.authorizeDisposition({
165
+ event: turnEvent,
166
+ classification,
167
+ decision,
168
+ stewardPolicy,
169
+ nextWake,
170
+ wakeAt: nextWake === "at" ? String(a.wakeAt) : null,
171
+ awaitId: typeof a.awaitId === "string" && a.awaitId ? a.awaitId : null,
172
+ careId: typeof a.careId === "string" && a.careId ? a.careId : null,
173
+ actionRefs,
174
+ verificationRefs,
175
+ });
176
+ if (!authority?.allowed)
177
+ throw new Error(`External event disposition authority denied: ${authority?.reason ?? "authority unavailable"}`);
178
+ return {
179
+ recordPath,
180
+ finish: async () => {
181
+ let ownerMessage;
182
+ if (decision === "ask" || decision === "report") {
183
+ if (!ownerText)
184
+ throw new Error("ask and report need owner_message: the short plain text the owner will read");
185
+ if (Buffer.byteLength(ownerText, "utf8") > 1_200)
186
+ throw new Error("External event owner message must be phone-sized");
187
+ if (OWNER_MESSAGE_FORBIDDEN.test(ownerText))
188
+ throw new Error("owner_message must be plain words for the owner, with no internal ids, leases, generations, revisions, receipts or hidden characters");
189
+ if (!ctx?.externalEventEffects)
190
+ throw new Error("External event owner delivery is unavailable");
191
+ // The whole dispatched batch shares one owner message; the delivery port settles later decisions as covered by it.
192
+ const relatedEvents = [turnContext, ...(turnContext.relatedEvents ?? [])]
193
+ .filter((event) => path.resolve(event.recordPath) !== recordPath)
194
+ .map((event) => ({ source: event.source, eventId: event.eventId, generation: event.generation }));
195
+ const delivered = await ctx.externalEventEffects.deliverOwnerDecision({ source: record.source, eventId: record.eventId, generation: record.generation, text: ownerText, relatedEvents });
196
+ ownerMessage = { status: delivered.status, effectKey: delivered.effectKey };
197
+ }
198
+ const handled = (0, router_1.commitExternalEventDisposition)(recordPath, {
199
+ owner: turnEvent.claimOwner,
200
+ expectedVersion: record.version,
201
+ expectedGeneration: record.generation,
202
+ disposition: {
203
+ classifiedRevision,
204
+ classification: classification,
205
+ stewardPolicy,
206
+ decision: decision,
207
+ reason,
208
+ nextWake: wake,
209
+ careId: typeof a.careId === "string" && a.careId ? a.careId : null,
210
+ awaitId: typeof a.awaitId === "string" && a.awaitId ? a.awaitId : null,
211
+ actionRefs,
212
+ verificationRefs,
213
+ ...(ownerMessage ? { ownerMessage } : {}),
214
+ },
215
+ });
216
+ ctx?.externalEventAuthority?.recordCommittedDisposition?.(turnEvent);
217
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.external_event_disposition", message: "external event disposition recorded", meta: { agentName, eventId: record.eventId, generation: record.generation, classification, decision, ...(ownerMessage ? { ownerMessage: ownerMessage.status } : {}) } });
218
+ return handled;
219
+ },
220
+ };
221
+ }
222
+ exports.continuityToolDefinitions = [
223
+ // ── Continuity tools ──────────────────────────────────────────────
224
+ {
225
+ tool: {
226
+ type: "function",
227
+ function: {
228
+ name: "external_event_disposition",
229
+ description: "Classify the exact external-event generation I just investigated. An ask or report is the sole owner-delivery path and sends owner_message once for this receipt; reason stays internal. silent and act only record the disposition. In a batch, only the first ask or report sends a message and the later ones are recorded as covered by it, so write that first owner_message to cover every listed incident.",
230
+ parameters: {
231
+ type: "object",
232
+ properties: {
233
+ ...externalEventDispositionProperties,
234
+ batch: externalEventDispositionBatchSchema,
235
+ },
236
+ oneOf: [
237
+ { type: "object", properties: externalEventDispositionProperties, required: externalEventDispositionRequired },
238
+ { type: "object", properties: { batch: externalEventDispositionBatchSchema }, required: ["batch"] },
239
+ ],
240
+ additionalProperties: false,
241
+ },
242
+ },
243
+ },
244
+ handler: (a, ctx) => {
245
+ const input = a;
246
+ if (input.batch !== undefined) {
247
+ if (Object.keys(input).some((key) => key !== "batch"))
248
+ throw new Error("External event disposition single and batch forms are mutually exclusive");
249
+ if (!Array.isArray(input.batch) || input.batch.length < 1 || input.batch.length > 32)
250
+ throw new Error("External event disposition batch must contain 1 to 32 items");
251
+ if (input.batch.some((item) => !item || typeof item !== "object" || Array.isArray(item)))
252
+ throw new Error("External event disposition batch item is invalid");
253
+ const recordPaths = input.batch.map((item) => path.resolve(String(item.recordPath ?? "")));
254
+ if (new Set(recordPaths).size !== recordPaths.length)
255
+ throw new Error("External event disposition batch contains a duplicate receipt");
256
+ const activeFrame = ctx?.currentExternalEvent
257
+ ? [ctx.currentExternalEvent, ...(ctx.currentExternalEvent.relatedEvents ?? [])]
258
+ : [];
259
+ const activeRecordPaths = new Set(activeFrame.map((event) => path.resolve(event.recordPath)));
260
+ if (activeRecordPaths.size !== recordPaths.length || recordPaths.some((recordPath) => !activeRecordPaths.has(recordPath))) {
261
+ throw new Error("External event disposition batch must contain every lease in the active turn frame");
262
+ }
263
+ const prepared = input.batch.map((item) => prepareExternalEventDisposition(item, ctx));
264
+ return (async () => {
265
+ const results = [];
266
+ for (const item of prepared) {
267
+ try {
268
+ results.push({ recordPath: item.recordPath, ok: true, record: await item.finish() });
269
+ }
270
+ catch (error) {
271
+ results.push({ recordPath: item.recordPath, ok: false, error: (error instanceof Error ? error.message : String(error)).slice(0, 500) });
272
+ }
273
+ }
274
+ return JSON.stringify({ results }, null, 2);
275
+ })();
276
+ }
277
+ const prepared = prepareExternalEventDisposition(input, ctx);
278
+ return prepared.finish().then((handled) => JSON.stringify(handled, null, 2));
279
+ },
280
+ riskProfile: { mutates: "durable_state_write", risk: "high", reason: "records the agent's classification on an existing external-event receipt" },
281
+ },
282
+ {
283
+ tool: {
284
+ type: "function",
285
+ function: {
286
+ name: "query_episodes",
287
+ description: "Query recent episodes from my continuity log. Returns timestamped records of significant events (obligation shifts, coding milestones, bridge events, care events, turning points).",
288
+ parameters: {
289
+ type: "object",
290
+ properties: {
291
+ limit: { type: "number", description: "Maximum episodes to return (default 20)" },
292
+ kind: { type: "string", description: "Filter by episode kind: obligation_shift, coding_milestone, bridge_event, care_event, tempo_shift, turning_point" },
293
+ since: { type: "string", description: "ISO timestamp — only return episodes after this time" },
294
+ },
295
+ },
296
+ },
297
+ },
298
+ handler: (a) => {
299
+ const agentRoot = (0, identity_1.getAgentRoot)();
300
+ const options = {};
301
+ if (a.limit)
302
+ options.limit = parseInt(a.limit, 10);
303
+ if (a.kind)
304
+ options.kinds = [a.kind];
305
+ if (a.since)
306
+ options.since = a.since;
307
+ const episodes = (0, episodes_1.readRecentEpisodes)(agentRoot, options);
308
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.query_episodes", message: `queried ${episodes.length} episodes`, meta: { count: episodes.length } });
309
+ return JSON.stringify(episodes, null, 2);
310
+ },
311
+ },
312
+ {
313
+ tool: {
314
+ type: "function",
315
+ function: {
316
+ name: "capture_episode",
317
+ description: "Record a turning point or significant moment. This is my tool for saying 'that was important — keep it.' Nearly frictionless: only summary and whyItMattered required.",
318
+ parameters: {
319
+ type: "object",
320
+ properties: {
321
+ summary: { type: "string", description: "What happened" },
322
+ whyItMattered: { type: "string", description: "Why this was significant" },
323
+ kind: { type: "string", description: "Episode kind (default: turning_point)" },
324
+ salience: { type: "string", description: "low, medium, high, or critical (default: medium)" },
325
+ },
326
+ required: ["summary", "whyItMattered"],
327
+ },
328
+ },
329
+ },
330
+ handler: (a) => {
331
+ const agentRoot = (0, identity_1.getAgentRoot)();
332
+ const episode = (0, episodes_1.emitEpisode)(agentRoot, {
333
+ kind: a.kind ?? "turning_point",
334
+ summary: a.summary,
335
+ whyItMattered: a.whyItMattered,
336
+ relatedEntities: [],
337
+ salience: a.salience ?? "medium",
338
+ });
339
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.capture_episode", message: `captured episode ${episode.id}`, meta: { id: episode.id } });
340
+ return JSON.stringify(episode, null, 2);
341
+ },
342
+ riskProfile: { mutates: "durable_state_write", risk: "high", reason: "writes continuity episode state" },
343
+ },
344
+ {
345
+ tool: {
346
+ type: "function",
347
+ function: {
348
+ name: "query_presence",
349
+ description: "Check who's around — my own availability/lane and known peer agents.",
350
+ parameters: { type: "object", properties: {} },
351
+ },
352
+ },
353
+ handler: () => {
354
+ const agentRoot = (0, identity_1.getAgentRoot)();
355
+ const agentName = (0, identity_1.getAgentName)();
356
+ const self = (0, presence_1.readPresence)(agentRoot, agentName);
357
+ const peers = (0, presence_1.readPeerPresence)(agentRoot);
358
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.query_presence", message: `presence: self + ${peers.length} peers`, meta: { peerCount: peers.length } });
359
+ return JSON.stringify({ self, peers }, null, 2);
360
+ },
361
+ },
362
+ {
363
+ tool: {
364
+ type: "function",
365
+ function: {
366
+ name: "query_cares",
367
+ description: "Query things I care about — ongoing concerns, watched situations, projects, people.",
368
+ parameters: {
369
+ type: "object",
370
+ properties: {
371
+ status: { type: "string", description: "Filter by status: 'active', 'watching', 'resolved', 'dormant', or 'all' (default: active cares only)" },
372
+ },
373
+ },
374
+ },
375
+ },
376
+ handler: (a) => {
377
+ const agentRoot = (0, identity_1.getAgentRoot)();
378
+ const now = Date.now();
379
+ const cares = (a.status === "all" ? (0, cares_1.readCares)(agentRoot) : (0, cares_1.readActiveCares)(agentRoot)).map((care) => (0, cares_1.projectCareEvidence)(care, now));
380
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.query_cares", message: `queried ${cares.length} cares`, meta: { count: cares.length } });
381
+ return JSON.stringify(cares, null, 2);
382
+ },
383
+ },
384
+ {
385
+ tool: {
386
+ type: "function",
387
+ function: {
388
+ name: "care_manage",
389
+ description: "Create, update, or resolve a care, or bind and resolve one machine incident within it. Cares are things I watch over — people, projects, missions, system health.",
390
+ parameters: {
391
+ type: "object",
392
+ properties: {
393
+ action: { type: "string", enum: ["create", "update", "resolve", "bind_incident", "resolve_incident", "upsert_incident"], description: "What to do" },
394
+ id: { type: "string", description: "Care ID (required for update/resolve)" },
395
+ label: { type: "string", description: "Short label for the care" },
396
+ why: { type: "string", description: "Why this matters" },
397
+ salience: { type: "string", description: "low, medium, high, or critical" },
398
+ kind: { type: "string", description: "person, agent, project, mission, or system" },
399
+ status: { type: "string", enum: ["active", "watching", "resolved", "dormant"], description: "active, watching, resolved, or dormant" },
400
+ stewardship: { type: "string", description: "mine, shared, or delegated" },
401
+ source: { type: "string", description: "Machine evidence source for an incident binding" },
402
+ incidentKey: { type: "string", description: "Stable incident key within the source" },
403
+ classifiedRevision: { type: "string", description: "Observation revision classified by the agent" },
404
+ correlationKey: { type: "string", description: "Optional key relating several incidents to one concern" },
405
+ expectedUpdatedAt: { type: "string", description: "The Care's current updatedAt, copied from the last care_manage result. Required for bind_incident and resolve_incident; optional for update." },
406
+ currentRisk: { type: "string", description: "Current material risk for this Care, or an empty string to clear it" },
407
+ nextCheckAt: { type: "string", description: "Exact ISO time of the next owned check" },
408
+ },
409
+ required: ["action"],
410
+ },
411
+ },
412
+ },
413
+ handler: (a) => {
414
+ const agentRoot = (0, identity_1.getAgentRoot)();
415
+ let result;
416
+ if (a.action === "create") {
417
+ result = (0, cares_1.createCare)(agentRoot, {
418
+ label: a.label ?? "untitled",
419
+ why: a.why ?? "",
420
+ kind: a.kind ?? "project",
421
+ status: a.status ?? "active",
422
+ salience: a.salience ?? "medium",
423
+ steward: a.stewardship ?? "mine",
424
+ relatedFriendIds: [],
425
+ relatedAgentIds: [],
426
+ relatedObligationIds: [],
427
+ relatedEpisodeIds: [],
428
+ currentRisk: a.currentRisk ? String(a.currentRisk) : null,
429
+ nextCheckAt: a.nextCheckAt ? String(a.nextCheckAt) : null,
430
+ });
431
+ }
432
+ else if (a.action === "update") {
433
+ const updates = {};
434
+ if (a.label)
435
+ updates.label = a.label;
436
+ if (a.why)
437
+ updates.why = a.why;
438
+ if (a.salience)
439
+ updates.salience = a.salience;
440
+ if (a.currentRisk !== undefined)
441
+ updates.currentRisk = a.currentRisk || null;
442
+ if (a.nextCheckAt !== undefined)
443
+ updates.nextCheckAt = a.nextCheckAt || null;
444
+ result = (0, cares_1.updateCare)(agentRoot, a.id, updates);
445
+ }
446
+ else if (a.action === "resolve") {
447
+ result = (0, cares_1.resolveCare)(agentRoot, a.id);
448
+ }
449
+ else if (a.action === "bind_incident") {
450
+ if (!a.expectedUpdatedAt)
451
+ throw new Error("bind_incident requires expectedUpdatedAt: copy the Care's current updatedAt from the last care_manage result");
452
+ result = (0, cares_1.bindCareIncident)(agentRoot, a.id, {
453
+ source: a.source,
454
+ incidentKey: a.incidentKey,
455
+ classifiedRevision: a.classifiedRevision,
456
+ ...(a.correlationKey ? { correlationKey: a.correlationKey } : {}),
457
+ }, { expectedUpdatedAt: a.expectedUpdatedAt });
458
+ }
459
+ else if (a.action === "resolve_incident") {
460
+ if (!a.expectedUpdatedAt)
461
+ throw new Error("resolve_incident requires expectedUpdatedAt: copy the Care's current updatedAt from the last care_manage result");
462
+ result = (0, cares_1.resolveCareIncident)(agentRoot, a.id, {
463
+ source: a.source,
464
+ incidentKey: a.incidentKey,
465
+ expectedUpdatedAt: a.expectedUpdatedAt,
466
+ ...((a.label !== undefined || a.why !== undefined || a.currentRisk !== undefined || a.nextCheckAt !== undefined) ? {
467
+ display: {
468
+ ...(a.label !== undefined ? { label: String(a.label) } : {}),
469
+ ...(a.why !== undefined ? { why: String(a.why) } : {}),
470
+ ...(a.currentRisk !== undefined ? { currentRisk: a.currentRisk ? String(a.currentRisk) : null } : {}),
471
+ ...(a.nextCheckAt !== undefined ? { nextCheckAt: a.nextCheckAt ? String(a.nextCheckAt) : null } : {}),
472
+ },
473
+ } : {}),
474
+ });
475
+ }
476
+ else if (a.action === "upsert_incident") {
477
+ result = (0, cares_1.upsertCareForIncident)(agentRoot, {
478
+ ...(a.id ? { id: String(a.id) } : {}),
479
+ ...(!a.id ? {
480
+ label: a.label ?? "untitled", why: a.why ?? "", kind: a.kind ?? "system", status: a.status ?? "active",
481
+ salience: a.salience ?? "medium", steward: a.stewardship ?? "mine",
482
+ } : {
483
+ ...(a.label !== undefined ? { label: String(a.label) } : {}), ...(a.why !== undefined ? { why: String(a.why) } : {}),
484
+ ...(a.kind !== undefined ? { kind: a.kind } : {}), ...(a.status !== undefined ? { status: a.status } : {}),
485
+ ...(a.salience !== undefined ? { salience: a.salience } : {}), ...(a.stewardship !== undefined ? { steward: a.stewardship } : {}),
486
+ }),
487
+ relatedFriendIds: [],
488
+ relatedAgentIds: [],
489
+ relatedObligationIds: [],
490
+ relatedEpisodeIds: [],
491
+ ...(!a.id || a.currentRisk !== undefined ? { currentRisk: a.currentRisk ? String(a.currentRisk) : null } : {}),
492
+ ...(!a.id || a.nextCheckAt !== undefined ? { nextCheckAt: a.nextCheckAt ? String(a.nextCheckAt) : null } : {}),
493
+ ...(a.expectedUpdatedAt ? { expectedUpdatedAt: String(a.expectedUpdatedAt) } : {}),
494
+ incident: {
495
+ source: a.source,
496
+ incidentKey: a.incidentKey,
497
+ classifiedRevision: a.classifiedRevision,
498
+ ...(a.correlationKey ? { correlationKey: a.correlationKey } : {}),
499
+ },
500
+ });
501
+ }
502
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.care_manage", message: `care ${a.action}`, meta: { action: a.action, id: a.id } });
503
+ return JSON.stringify(result, null, 2);
504
+ },
505
+ riskProfile: { mutates: "durable_state_write", risk: "high", reason: "creates or updates care state" },
506
+ },
507
+ {
508
+ tool: {
509
+ type: "function",
510
+ function: {
511
+ name: "query_relationships",
512
+ description: "Query known agent relationships — familiarity, trust, shared missions, interaction history.",
513
+ parameters: {
514
+ type: "object",
515
+ properties: {
516
+ agentName: { type: "string", description: "Specific agent name to query (omit for all)" },
517
+ },
518
+ },
519
+ },
520
+ },
521
+ handler: async (a, ctx) => {
522
+ const allFriends = ctx?.friendStore?.listAll ? await ctx.friendStore.listAll() : [];
523
+ let agents = allFriends.filter((f) => f.kind === "agent");
524
+ if (a.agentName) {
525
+ const needle = a.agentName.toLowerCase();
526
+ agents = agents.filter((f) => f.name?.toLowerCase() === needle);
527
+ }
528
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.query_relationships", message: `queried relationships`, meta: { agentName: a.agentName ?? "all" } });
529
+ return JSON.stringify(agents, null, 2);
530
+ },
531
+ },
532
+ {
533
+ tool: {
534
+ type: "function",
535
+ function: {
536
+ name: "intention_capture",
537
+ description: "File a lightweight mental note — something I want to do or check later, below the ceremony threshold of tasks or cares. Cheap to create, easy to close.",
538
+ parameters: {
539
+ type: "object",
540
+ properties: {
541
+ content: { type: "string", description: "What I want to keep track of" },
542
+ salience: { type: "string", description: "low, medium, or high (default: low)" },
543
+ nudgeAfter: { type: "string", description: "ISO timestamp — nudge me after this time" },
544
+ },
545
+ required: ["content"],
546
+ },
547
+ },
548
+ },
549
+ handler: (a) => {
550
+ const agentRoot = (0, identity_1.getAgentRoot)();
551
+ const intention = (0, intentions_1.captureIntention)(agentRoot, {
552
+ content: a.content,
553
+ salience: a.salience ?? "low",
554
+ source: "tool",
555
+ ...(a.nudgeAfter ? { nudgeAfter: a.nudgeAfter } : {}),
556
+ });
557
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.intention_capture", message: `captured intention ${intention.id}`, meta: { id: intention.id } });
558
+ return JSON.stringify(intention, null, 2);
559
+ },
560
+ riskProfile: { mutates: "durable_state_write", risk: "high", reason: "writes intention state" },
561
+ },
562
+ {
563
+ tool: {
564
+ type: "function",
565
+ function: {
566
+ name: "intention_manage",
567
+ description: "Resolve or dismiss an intention. Resolve = done. Dismiss = no longer relevant. Both remove it from active list.",
568
+ parameters: {
569
+ type: "object",
570
+ properties: {
571
+ action: { type: "string", enum: ["resolve", "dismiss"], description: "What to do" },
572
+ id: { type: "string", description: "Intention ID" },
573
+ },
574
+ required: ["action", "id"],
575
+ },
576
+ },
577
+ },
578
+ handler: (a) => {
579
+ const agentRoot = (0, identity_1.getAgentRoot)();
580
+ const result = a.action === "resolve"
581
+ ? (0, intentions_1.resolveIntention)(agentRoot, a.id)
582
+ : (0, intentions_1.dismissIntention)(agentRoot, a.id);
583
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.intention_manage", message: `intention ${a.action}: ${a.id}`, meta: { action: a.action, id: a.id } });
584
+ return JSON.stringify(result, null, 2);
585
+ },
586
+ riskProfile: { mutates: "durable_state_write", risk: "high", reason: "updates intention state" },
587
+ },
588
+ ];