@ouro.bot/cli 0.1.0-alpha.94 → 0.1.0-alpha.940

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 (752) 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 +5966 -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 +474 -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 +881 -0
  146. package/dist/heart/daemon/cli-desk.js +322 -0
  147. package/dist/heart/daemon/cli-exec.js +9235 -0
  148. package/dist/heart/daemon/cli-help.js +742 -0
  149. package/dist/heart/daemon/cli-parse.js +3236 -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 -2360
  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 +2101 -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 +9 -3
  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 +786 -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 +99 -0
  265. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  266. package/dist/heart/mailbox/mailbox-http-routes.js +406 -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 +41 -0
  271. package/dist/heart/mailbox/mailbox-supervision.js +131 -0
  272. package/dist/heart/mailbox/mailbox-types.js +27 -0
  273. package/dist/heart/mailbox/mailbox-view.js +197 -0
  274. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  275. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  276. package/dist/heart/mailbox/readers/mail.js +375 -0
  277. package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
  278. package/dist/heart/mailbox/readers/sessions.js +231 -0
  279. package/dist/heart/mailbox/readers/shared.js +111 -0
  280. package/dist/heart/mcp/mcp-server.js +760 -0
  281. package/dist/heart/migrate-config.js +100 -0
  282. package/dist/heart/model-capabilities.js +83 -16
  283. package/dist/heart/orientation-frame.js +345 -0
  284. package/dist/heart/platform.js +81 -0
  285. package/dist/heart/primitives.js +1 -1
  286. package/dist/heart/private-runtime/decision-renderer.js +158 -0
  287. package/dist/heart/private-runtime/index.js +18 -0
  288. package/dist/heart/private-runtime/ledger.js +221 -0
  289. package/dist/heart/private-runtime/policy.js +260 -0
  290. package/dist/heart/private-runtime/types.js +2 -0
  291. package/dist/heart/progress-story.js +1 -1
  292. package/dist/heart/provider-attempt.js +137 -0
  293. package/dist/heart/provider-binding-resolver.js +273 -0
  294. package/dist/heart/provider-credentials.js +449 -0
  295. package/dist/heart/provider-failover.js +311 -0
  296. package/dist/heart/provider-models.js +96 -0
  297. package/dist/heart/provider-ping.js +265 -0
  298. package/dist/heart/provider-readiness-cache.js +119 -0
  299. package/dist/heart/provider-visibility.js +188 -0
  300. package/dist/heart/providers/anthropic-token.js +131 -0
  301. package/dist/heart/providers/anthropic.js +173 -60
  302. package/dist/heart/providers/azure.js +23 -11
  303. package/dist/heart/providers/error-classification.js +129 -0
  304. package/dist/heart/providers/github-copilot.js +38 -39
  305. package/dist/heart/providers/minimax-vlm.js +189 -0
  306. package/dist/heart/providers/minimax.js +26 -8
  307. package/dist/heart/providers/openai-codex-token.js +349 -0
  308. package/dist/heart/providers/openai-codex.js +55 -40
  309. package/dist/heart/providers/openai-compatible.js +177 -0
  310. package/dist/heart/reply-style.js +52 -0
  311. package/dist/heart/run-ledger.js +247 -0
  312. package/dist/heart/runtime-capability-check.js +170 -0
  313. package/dist/heart/runtime-credentials.js +607 -0
  314. package/dist/heart/runtime-cwd.js +87 -0
  315. package/dist/heart/sense-truth.js +24 -4
  316. package/dist/heart/session-activity.js +92 -24
  317. package/dist/heart/session-events.js +1504 -0
  318. package/dist/heart/session-playback-cli-main.js +5 -0
  319. package/dist/heart/session-playback-cli.js +36 -0
  320. package/dist/heart/session-playback.js +231 -0
  321. package/dist/heart/session-redaction-repair-cli-main.js +31 -0
  322. package/dist/heart/session-redaction-repair.js +552 -0
  323. package/dist/heart/session-stats-cli-main.js +5 -0
  324. package/dist/heart/session-stats.js +183 -0
  325. package/dist/heart/session-transcript.js +133 -0
  326. package/dist/heart/shelf-claims.js +78 -0
  327. package/dist/heart/shepherd/custody-types.js +2 -0
  328. package/dist/heart/shepherd/mandates.js +352 -0
  329. package/dist/heart/shepherd/operation-commands.js +19 -0
  330. package/dist/heart/shepherd/operations.js +135 -0
  331. package/dist/heart/shepherd/supervision.js +114 -0
  332. package/dist/heart/shepherd/types.js +2 -0
  333. package/dist/heart/shepherd-config.js +113 -0
  334. package/dist/heart/source-grounding.js +297 -0
  335. package/dist/heart/start-of-turn-packet.js +372 -0
  336. package/dist/heart/steward-policy.js +656 -0
  337. package/dist/heart/streaming.js +631 -207
  338. package/dist/heart/structured-output.js +196 -0
  339. package/dist/heart/sync-classification.js +176 -0
  340. package/dist/heart/sync-health.js +152 -0
  341. package/dist/heart/sync.js +726 -0
  342. package/dist/heart/target-resolution.js +11 -7
  343. package/dist/heart/tempo.js +93 -0
  344. package/dist/heart/temporal-view.js +41 -0
  345. package/dist/heart/timeouts.js +101 -0
  346. package/dist/heart/tool-activity-callbacks.js +59 -0
  347. package/dist/heart/tool-approval.js +382 -0
  348. package/dist/heart/tool-description.js +155 -0
  349. package/dist/heart/tool-friction.js +55 -0
  350. package/dist/heart/tool-loop.js +206 -0
  351. package/dist/heart/turn-context.js +496 -0
  352. package/dist/heart/turn-execution-lease.js +30 -0
  353. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  354. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +3 -2
  355. package/dist/heart/versioning/ouro-path-installer.js +432 -0
  356. package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
  357. package/dist/heart/versioning/ouro-version-manager.js +432 -0
  358. package/dist/heart/versioning/release-sources.js +173 -0
  359. package/dist/heart/versioning/self-update-defaults.js +294 -0
  360. package/dist/heart/versioning/self-update.js +196 -0
  361. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  362. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  363. package/dist/heart/versioning/update-hooks.js +154 -0
  364. package/dist/heart/versioning/update-state.js +126 -0
  365. package/dist/heart/versioning/updater-launchd.js +150 -0
  366. package/dist/heart/versioning/version-intent.js +114 -0
  367. package/dist/heart/work-card.js +380 -0
  368. package/dist/mailbox-ui/assets/index-Dbska1tZ.js +1 -0
  369. package/dist/mailbox-ui/assets/index-DsiKaPyH.css +1 -0
  370. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  371. package/dist/mailbox-ui/index.html +16 -0
  372. package/dist/mailroom/attention.js +167 -0
  373. package/dist/mailroom/autonomy.js +209 -0
  374. package/dist/mailroom/blob-store.js +889 -0
  375. package/dist/mailroom/body-cache.js +61 -0
  376. package/dist/mailroom/cache-sync-cli.js +58 -0
  377. package/dist/mailroom/core.js +803 -0
  378. package/dist/mailroom/entry.js +160 -0
  379. package/dist/mailroom/file-store.js +568 -0
  380. package/dist/mailroom/hosted-cache-sync.js +384 -0
  381. package/dist/mailroom/mbox-import.js +393 -0
  382. package/dist/mailroom/migration.js +164 -0
  383. package/dist/mailroom/outbound.js +380 -0
  384. package/dist/mailroom/policy.js +263 -0
  385. package/dist/mailroom/reader.js +292 -0
  386. package/dist/mailroom/search-cache.js +513 -0
  387. package/dist/mailroom/search-relevance.js +319 -0
  388. package/dist/mailroom/smtp-ingress.js +176 -0
  389. package/dist/mailroom/source-state.js +176 -0
  390. package/dist/mailroom/thread.js +109 -0
  391. package/dist/mailroom/travel-extract.js +89 -0
  392. package/dist/mind/bundle-manifest.js +24 -2
  393. package/dist/mind/context.js +307 -139
  394. package/dist/mind/desk-section.js +362 -0
  395. package/dist/mind/diary-integrity.js +60 -0
  396. package/dist/mind/{memory.js → diary.js} +68 -77
  397. package/dist/mind/embedding-provider.js +60 -0
  398. package/dist/mind/file-state.js +179 -0
  399. package/dist/mind/friend-link-codes.js +209 -0
  400. package/dist/mind/friend-merge.js +330 -0
  401. package/dist/mind/{associative-recall.js → note-search.js} +47 -58
  402. package/dist/mind/obligation-steering.js +199 -3
  403. package/dist/mind/pending.js +36 -10
  404. package/dist/mind/prompt-budget.js +479 -0
  405. package/dist/mind/prompt-refresh.js +3 -2
  406. package/dist/mind/prompt.js +1085 -198
  407. package/dist/mind/provenance-trust.js +26 -0
  408. package/dist/mind/record-paths.js +312 -0
  409. package/dist/mind/scrutiny.js +173 -0
  410. package/dist/mind/session-transaction.js +622 -0
  411. package/dist/nerves/cli-logging.js +7 -1
  412. package/dist/nerves/coverage/audit-rules.js +15 -6
  413. package/dist/nerves/coverage/audit.js +28 -2
  414. package/dist/nerves/coverage/cli.js +1 -1
  415. package/dist/nerves/coverage/contract.js +5 -5
  416. package/dist/nerves/coverage/file-completeness.js +143 -5
  417. package/dist/nerves/coverage/run-artifacts.js +55 -35
  418. package/dist/nerves/coverage/source-scanner.js +4 -4
  419. package/dist/nerves/event-buffer.js +111 -0
  420. package/dist/nerves/index.js +293 -9
  421. package/dist/nerves/observation.js +20 -0
  422. package/dist/nerves/redact.js +79 -0
  423. package/dist/nerves/review/cli-main.js +5 -0
  424. package/dist/nerves/review/cli.js +156 -0
  425. package/dist/nerves/review/core.js +159 -0
  426. package/dist/nerves/runtime.js +17 -1
  427. package/dist/repertoire/ado-client.js +15 -56
  428. package/dist/repertoire/ado-semantic.js +16 -10
  429. package/dist/repertoire/api-client.js +97 -0
  430. package/dist/repertoire/bitwarden-store.js +1201 -0
  431. package/dist/repertoire/bundle-templates.js +71 -0
  432. package/dist/repertoire/bw-installer.js +231 -0
  433. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  434. package/dist/repertoire/coding/context-pack.js +331 -0
  435. package/dist/repertoire/coding/feedback.js +174 -32
  436. package/dist/repertoire/coding/index.js +15 -3
  437. package/dist/repertoire/coding/manager.js +159 -10
  438. package/dist/repertoire/coding/spawner.js +40 -11
  439. package/dist/repertoire/coding/tools.js +182 -18
  440. package/dist/repertoire/coding/workbench-client.js +272 -0
  441. package/dist/repertoire/coding/workbench-manager.js +346 -0
  442. package/dist/repertoire/commerce-errors.js +109 -0
  443. package/dist/repertoire/commerce-self-test.js +156 -0
  444. package/dist/repertoire/credential-access.js +183 -0
  445. package/dist/repertoire/desk/classifier.js +362 -0
  446. package/dist/repertoire/duffel-client.js +185 -0
  447. package/dist/repertoire/github-client.js +14 -55
  448. package/dist/repertoire/graph-client.js +11 -52
  449. package/dist/repertoire/guardrails.js +971 -20
  450. package/dist/repertoire/house-sweep.js +469 -0
  451. package/dist/repertoire/mcp-client.js +58 -5
  452. package/dist/repertoire/mcp-manager.js +427 -139
  453. package/dist/repertoire/mcp-tools.js +132 -0
  454. package/dist/repertoire/mcp-write-guard.js +46 -0
  455. package/dist/repertoire/plugin-mcp.js +175 -0
  456. package/dist/repertoire/plugins.js +253 -0
  457. package/dist/repertoire/relationship-authorization.js +322 -0
  458. package/dist/repertoire/sanctuary-container-policy.js +46 -0
  459. package/dist/repertoire/shell-sessions.js +134 -0
  460. package/dist/repertoire/skills.js +48 -4
  461. package/dist/repertoire/stripe-client.js +131 -0
  462. package/dist/repertoire/tool-arguments.js +182 -0
  463. package/dist/repertoire/tool-results.js +29 -0
  464. package/dist/repertoire/tools-a2a.js +699 -0
  465. package/dist/repertoire/tools-attachments.js +322 -0
  466. package/dist/repertoire/tools-awaiting.js +872 -0
  467. package/dist/repertoire/tools-base.js +83 -1168
  468. package/dist/repertoire/tools-bluebubbles.js +2 -0
  469. package/dist/repertoire/tools-bridge.js +144 -0
  470. package/dist/repertoire/tools-bundle.js +995 -0
  471. package/dist/repertoire/tools-commerce.js +253 -0
  472. package/dist/repertoire/tools-config.js +186 -0
  473. package/dist/repertoire/tools-continuity.js +575 -0
  474. package/dist/repertoire/tools-credential.js +383 -0
  475. package/dist/repertoire/tools-escalation.js +84 -0
  476. package/dist/repertoire/tools-evolution.js +527 -0
  477. package/dist/repertoire/tools-files.js +344 -0
  478. package/dist/repertoire/tools-flight.js +290 -0
  479. package/dist/repertoire/tools-flow.js +119 -0
  480. package/dist/repertoire/tools-friend-link.js +57 -0
  481. package/dist/repertoire/tools-github.js +3 -8
  482. package/dist/repertoire/tools-habits.js +103 -0
  483. package/dist/repertoire/tools-house-care.js +174 -0
  484. package/dist/repertoire/tools-mail.js +1828 -0
  485. package/dist/repertoire/tools-notes.js +496 -0
  486. package/dist/repertoire/tools-obligations.js +182 -0
  487. package/dist/repertoire/tools-orientation.js +31 -0
  488. package/dist/repertoire/tools-record.js +482 -0
  489. package/dist/repertoire/tools-rsvp.js +139 -0
  490. package/dist/repertoire/tools-runtime.js +238 -0
  491. package/dist/repertoire/tools-sanctuary-host.js +202 -0
  492. package/dist/repertoire/tools-session.js +1133 -0
  493. package/dist/repertoire/tools-shell.js +154 -0
  494. package/dist/repertoire/tools-shepherd-guidance.js +171 -0
  495. package/dist/repertoire/tools-shepherd.js +296 -0
  496. package/dist/repertoire/tools-steward-policy.js +147 -0
  497. package/dist/repertoire/tools-stripe.js +224 -0
  498. package/dist/repertoire/tools-surface.js +369 -0
  499. package/dist/repertoire/tools-teams.js +50 -39
  500. package/dist/repertoire/tools-telegram-contacts.js +37 -0
  501. package/dist/repertoire/tools-travel.js +125 -0
  502. package/dist/repertoire/tools-trip.js +982 -0
  503. package/dist/repertoire/tools-unraid.js +556 -0
  504. package/dist/repertoire/tools-user-profile.js +146 -0
  505. package/dist/repertoire/tools-vault.js +40 -0
  506. package/dist/repertoire/tools-voice-local.js +198 -0
  507. package/dist/repertoire/tools-voice.js +145 -0
  508. package/dist/repertoire/tools.js +518 -156
  509. package/dist/repertoire/travel-api-client.js +360 -0
  510. package/dist/repertoire/unraid-client.js +155 -0
  511. package/dist/repertoire/unraid-restart.js +339 -0
  512. package/dist/repertoire/user-profile.js +131 -0
  513. package/dist/repertoire/vault-setup.js +246 -0
  514. package/dist/repertoire/vault-unlock.js +686 -0
  515. package/dist/rsvp/aisleplanner-client.js +354 -0
  516. package/dist/rsvp/cli.js +936 -0
  517. package/dist/rsvp/config.js +327 -0
  518. package/dist/rsvp/cutover.js +433 -0
  519. package/dist/rsvp/diagnostics.js +232 -0
  520. package/dist/rsvp/diff-renderer.js +176 -0
  521. package/dist/rsvp/habit-policy.js +110 -0
  522. package/dist/rsvp/habit-stage.js +123 -0
  523. package/dist/rsvp/incident-bundle.js +97 -0
  524. package/dist/rsvp/migration.js +204 -0
  525. package/dist/rsvp/native-habit-runner.js +630 -0
  526. package/dist/rsvp/outbound-state.js +628 -0
  527. package/dist/rsvp/query.js +118 -0
  528. package/dist/rsvp/replay.js +233 -0
  529. package/dist/rsvp/snapshot.js +232 -0
  530. package/dist/rsvp/spend-ledger.js +175 -0
  531. package/dist/scripts/claude-code-hook.js +41 -0
  532. package/dist/scripts/claude-code-stop-hook.js +47 -0
  533. package/dist/senses/a2a-entry.js +132 -0
  534. package/dist/senses/acp-server.js +386 -0
  535. package/dist/senses/attention-queue.js +186 -0
  536. package/dist/senses/await-turn-message.js +65 -0
  537. package/dist/senses/bluebubbles/active-turns.js +216 -0
  538. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  539. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  540. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +379 -41
  541. package/dist/senses/bluebubbles/context-packet.js +207 -0
  542. package/dist/senses/bluebubbles/context-smoke.js +144 -0
  543. package/dist/senses/bluebubbles/entry.js +90 -0
  544. package/dist/senses/bluebubbles/host-account-verifier.js +88 -0
  545. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +21 -3
  546. package/dist/senses/bluebubbles/index.js +3878 -0
  547. package/dist/senses/bluebubbles/latest-turn.js +311 -0
  548. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  549. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +159 -28
  550. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +24 -13
  551. package/dist/senses/bluebubbles/outbound-state.js +308 -0
  552. package/dist/senses/bluebubbles/processed-log.js +133 -0
  553. package/dist/senses/bluebubbles/reaction-policy.js +47 -0
  554. package/dist/senses/bluebubbles/replay.js +284 -0
  555. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  556. package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
  557. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  558. package/dist/senses/bluebubbles/webhook-registration.js +257 -0
  559. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  560. package/dist/senses/cli/bracketed-paste.js +82 -0
  561. package/dist/senses/cli/image-paste.js +287 -0
  562. package/dist/senses/cli/image-ref-navigation.js +75 -0
  563. package/dist/senses/cli/ink-app.js +156 -0
  564. package/dist/senses/cli/inline-diff.js +64 -0
  565. package/dist/senses/cli/input-keys.js +174 -0
  566. package/dist/senses/cli/kill-ring.js +86 -0
  567. package/dist/senses/cli/message-list.js +51 -0
  568. package/dist/senses/cli/ouro-tui.js +607 -0
  569. package/dist/senses/cli/spinner-imperative.js +135 -0
  570. package/dist/senses/cli/spinner.js +101 -0
  571. package/dist/senses/cli/status-line.js +60 -0
  572. package/dist/senses/cli/streaming-markdown.js +526 -0
  573. package/dist/senses/cli/tool-display.js +85 -0
  574. package/dist/senses/cli/tool-render.js +85 -0
  575. package/dist/senses/cli/tui-store.js +241 -0
  576. package/dist/senses/cli/virtual-list.js +35 -0
  577. package/dist/senses/cli-entry.js +60 -8
  578. package/dist/senses/cli.js +601 -304
  579. package/dist/senses/commands.js +66 -3
  580. package/dist/senses/context-packet-ledger.js +371 -0
  581. package/dist/senses/context-packets.js +154 -0
  582. package/dist/senses/habit-lifecycle-guard.js +24 -0
  583. package/dist/senses/habit-turn-message.js +160 -0
  584. package/dist/senses/ingress-evidence.js +2 -0
  585. package/dist/senses/mail-entry.js +66 -0
  586. package/dist/senses/mail.js +524 -0
  587. package/dist/senses/pipeline.js +1158 -204
  588. package/dist/senses/private-runtime-worker.js +859 -0
  589. package/dist/senses/private-runtime.js +1627 -0
  590. package/dist/senses/proactive-content-guard.js +51 -0
  591. package/dist/senses/root-host-approval-port.js +345 -0
  592. package/dist/senses/root-host-approval-runtime.js +393 -0
  593. package/dist/senses/sanctuary-authority-resident.js +102 -0
  594. package/dist/senses/sanctuary-download-credit-presentation.js +31 -0
  595. package/dist/senses/sanctuary-full-visibility-contract.js +302 -0
  596. package/dist/senses/sanctuary-grounding.js +118 -0
  597. package/dist/senses/sanctuary-health-acceptance-probe-entry.js +12 -0
  598. package/dist/senses/sanctuary-health-acceptance-probe.js +774 -0
  599. package/dist/senses/sanctuary-health-runner.js +104 -0
  600. package/dist/senses/sanctuary-health.js +422 -0
  601. package/dist/senses/sanctuary-install-state-contract.js +169 -0
  602. package/dist/senses/sanctuary-interactive-control.js +410 -0
  603. package/dist/senses/sanctuary-media-catalog-contract.js +259 -0
  604. package/dist/senses/sanctuary-media-optimization.js +514 -0
  605. package/dist/senses/sanctuary-runtime.js +369 -0
  606. package/dist/senses/sanctuary-sab.js +85 -0
  607. package/dist/senses/sanctuary-storage-optimization-contract.js +32 -0
  608. package/dist/senses/shared-turn.js +804 -0
  609. package/dist/senses/shepherd/agent-presentation.js +88 -0
  610. package/dist/senses/shepherd/attention-page.js +166 -0
  611. package/dist/senses/shepherd/attention-sidebar.js +76 -0
  612. package/dist/senses/shepherd/attention.js +295 -0
  613. package/dist/senses/shepherd/checkin-config.js +76 -0
  614. package/dist/senses/shepherd/checkin-store.js +386 -0
  615. package/dist/senses/shepherd/client.js +196 -0
  616. package/dist/senses/shepherd/cmux.js +483 -0
  617. package/dist/senses/shepherd/composer.js +336 -0
  618. package/dist/senses/shepherd/feedback-reply.js +108 -0
  619. package/dist/senses/shepherd/feedback-source.js +20 -0
  620. package/dist/senses/shepherd/feedback-store.js +331 -0
  621. package/dist/senses/shepherd/feedback-submit.js +182 -0
  622. package/dist/senses/shepherd/feedback-worker.js +207 -0
  623. package/dist/senses/shepherd/guidance.js +273 -0
  624. package/dist/senses/shepherd/herdr.js +427 -0
  625. package/dist/senses/shepherd/host.js +14 -0
  626. package/dist/senses/shepherd/judge-evaluation-command.js +183 -0
  627. package/dist/senses/shepherd/judge-evaluation-entry.js +13 -0
  628. package/dist/senses/shepherd/judge-evaluation.js +155 -0
  629. package/dist/senses/shepherd/judge.js +202 -0
  630. package/dist/senses/shepherd/notice-outbox.js +262 -0
  631. package/dist/senses/shepherd/observation-publisher.js +320 -0
  632. package/dist/senses/shepherd/operations-defaults.js +86 -0
  633. package/dist/senses/shepherd/operations.js +159 -0
  634. package/dist/senses/shepherd/owner-notice.js +379 -0
  635. package/dist/senses/shepherd/prompt-state.js +60 -0
  636. package/dist/senses/shepherd/recovery.js +543 -0
  637. package/dist/senses/shepherd/redact.js +66 -0
  638. package/dist/senses/shepherd/returns.js +79 -0
  639. package/dist/senses/shepherd/sense.js +814 -0
  640. package/dist/senses/shepherd/shepherd-judge-corpus-v1.json +167 -0
  641. package/dist/senses/shepherd/surface.js +123 -0
  642. package/dist/senses/shepherd/target-binding.js +13 -0
  643. package/dist/senses/shepherd/terminal-process.js +147 -0
  644. package/dist/senses/shepherd-entry.js +98 -0
  645. package/dist/senses/surface-tool.js +109 -0
  646. package/dist/senses/teams-entry.js +68 -8
  647. package/dist/senses/teams-image.js +119 -0
  648. package/dist/senses/teams.js +932 -337
  649. package/dist/senses/telegram-admission.js +718 -0
  650. package/dist/senses/telegram-approval-runtime.js +793 -0
  651. package/dist/senses/telegram-attachments.js +186 -0
  652. package/dist/senses/telegram-audit-ledger.js +220 -0
  653. package/dist/senses/telegram-authority-transport.js +231 -0
  654. package/dist/senses/telegram-client.js +1749 -0
  655. package/dist/senses/telegram-effect-adapter.js +900 -0
  656. package/dist/senses/telegram-entry.js +83 -0
  657. package/dist/senses/telegram-handoff.js +80 -0
  658. package/dist/senses/telegram.js +2405 -0
  659. package/dist/senses/trust-gate.js +104 -9
  660. package/dist/senses/voice/audio-playback.js +237 -0
  661. package/dist/senses/voice/audio-routing.js +119 -0
  662. package/dist/senses/voice/call-auth.js +250 -0
  663. package/dist/senses/voice/elevenlabs.js +202 -0
  664. package/dist/senses/voice/floor-control.js +431 -0
  665. package/dist/senses/voice/floor-controller.js +115 -0
  666. package/dist/senses/voice/golden-path.js +116 -0
  667. package/dist/senses/voice/index.js +29 -0
  668. package/dist/senses/voice/local-audio-control.js +344 -0
  669. package/dist/senses/voice/local-audio-devices.js +516 -0
  670. package/dist/senses/voice/local-audio-disclosure.js +174 -0
  671. package/dist/senses/voice/local-audio-identity.js +103 -0
  672. package/dist/senses/voice/local-audio-join.js +325 -0
  673. package/dist/senses/voice/local-audio-mute.js +199 -0
  674. package/dist/senses/voice/local-audio-notify.js +121 -0
  675. package/dist/senses/voice/local-audio-prompts.js +116 -0
  676. package/dist/senses/voice/local-audio-transport.js +427 -0
  677. package/dist/senses/voice/local-audio.js +281 -0
  678. package/dist/senses/voice/local-media-stream.js +145 -0
  679. package/dist/senses/voice/meeting.js +113 -0
  680. package/dist/senses/voice/outbound.js +190 -0
  681. package/dist/senses/voice/phone.js +33 -0
  682. package/dist/senses/voice/playback.js +139 -0
  683. package/dist/senses/voice/process-guards.js +51 -0
  684. package/dist/senses/voice/realtime-eval.js +496 -0
  685. package/dist/senses/voice/realtime-tool-schema.js +195 -0
  686. package/dist/senses/voice/realtime-trace.js +531 -0
  687. package/dist/senses/voice/transcript.js +70 -0
  688. package/dist/senses/voice/turn.js +191 -0
  689. package/dist/senses/voice/twilio-phone-runtime.js +836 -0
  690. package/dist/senses/voice/twilio-phone.js +5454 -0
  691. package/dist/senses/voice/types.js +2 -0
  692. package/dist/senses/voice/whisper.js +161 -0
  693. package/dist/senses/voice-entry.js +83 -0
  694. package/dist/senses/voice-realtime-eval-command.js +99 -0
  695. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  696. package/dist/senses/voice-twilio-entry.js +87 -0
  697. package/dist/trips/core.js +138 -0
  698. package/dist/trips/store.js +265 -0
  699. package/dist/util/frontmatter.js +69 -0
  700. package/npm-shrinkwrap.json +8034 -0
  701. package/package.json +75 -13
  702. package/skills/agent-commerce.md +113 -0
  703. package/skills/browser-navigation.md +117 -0
  704. package/skills/commerce-setup-guide.md +116 -0
  705. package/skills/commerce-setup.md +84 -0
  706. package/skills/configure-dev-tools.md +99 -0
  707. package/skills/travel-planning.md +138 -0
  708. package/dist/heart/daemon/auth-flow.js +0 -430
  709. package/dist/heart/daemon/ouro-path-installer.js +0 -260
  710. package/dist/heart/daemon/ouro-version-manager.js +0 -171
  711. package/dist/heart/daemon/update-hooks.js +0 -138
  712. package/dist/heart/obligations.js +0 -191
  713. package/dist/heart/safe-workspace.js +0 -362
  714. package/dist/heart/session-recall.js +0 -116
  715. package/dist/mind/friends/channel.js +0 -84
  716. package/dist/mind/friends/group-context.js +0 -144
  717. package/dist/mind/friends/resolver.js +0 -84
  718. package/dist/mind/friends/store-file.js +0 -190
  719. package/dist/mind/friends/store.js +0 -4
  720. package/dist/mind/friends/tokens.js +0 -26
  721. package/dist/mind/friends/trust-explanation.js +0 -74
  722. package/dist/mind/friends/types.js +0 -29
  723. package/dist/repertoire/tasks/board.js +0 -134
  724. package/dist/repertoire/tasks/index.js +0 -224
  725. package/dist/repertoire/tasks/lifecycle.js +0 -80
  726. package/dist/repertoire/tasks/middleware.js +0 -65
  727. package/dist/repertoire/tasks/parser.js +0 -173
  728. package/dist/repertoire/tasks/scanner.js +0 -132
  729. package/dist/repertoire/tasks/transitions.js +0 -144
  730. package/dist/senses/bluebubbles-entry.js +0 -13
  731. package/dist/senses/bluebubbles.js +0 -1181
  732. package/dist/senses/debug-activity.js +0 -154
  733. package/dist/senses/inner-dialog-worker.js +0 -90
  734. package/dist/senses/inner-dialog.js +0 -525
  735. package/subagents/README.md +0 -7
  736. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  737. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  738. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  739. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  740. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  741. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  742. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  743. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  744. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  745. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  746. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  747. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  748. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  749. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  750. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  751. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  752. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,369 @@
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.surfaceToolDefinition = exports.surfaceToolDef = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const crypto_1 = require("crypto");
39
+ const config_1 = require("../heart/config");
40
+ const identity_1 = require("../heart/identity");
41
+ const surface_tool_1 = require("../senses/surface-tool");
42
+ const obligations_1 = require("../arc/obligations");
43
+ const packets_1 = require("../arc/packets");
44
+ const session_activity_1 = require("../heart/session-activity");
45
+ const bluebubbles_meta_guard_1 = require("../senses/bluebubbles-meta-guard");
46
+ const runtime_1 = require("../nerves/runtime");
47
+ const path = __importStar(require("path"));
48
+ const outbound_1 = require("../senses/voice/outbound");
49
+ /* v8 ignore start -- surface voice delivery hints are covered at the outbound voice bridge; this adapter only normalizes optional tool args @preserve */
50
+ function normalizeSurfaceDeliveryChannel(value) {
51
+ if (typeof value !== "string")
52
+ return "auto";
53
+ const normalized = value.trim().toLowerCase();
54
+ return normalized === "voice" ? "voice" : "auto";
55
+ }
56
+ function parseSurfaceVoiceInitialAudio(args) {
57
+ const source = args.voiceAudioSource === "url" || args.voiceAudioSource === "file" || args.voiceAudioSource === "tone"
58
+ ? args.voiceAudioSource
59
+ : undefined;
60
+ const hasAudioHint = Boolean(source
61
+ || args.voiceAudioUrl?.trim()
62
+ || args.voiceAudioPath?.trim()
63
+ || args.voiceAudioLabel?.trim()
64
+ || args.voiceAudioToneHz?.trim()
65
+ || args.voiceAudioDurationMs?.trim());
66
+ if (!hasAudioHint)
67
+ return undefined;
68
+ const toneHz = args.voiceAudioToneHz?.trim() ? Number(args.voiceAudioToneHz) : undefined;
69
+ const durationMs = args.voiceAudioDurationMs?.trim() ? Number(args.voiceAudioDurationMs) : undefined;
70
+ return {
71
+ source: source ?? "tone",
72
+ ...(args.voiceAudioUrl?.trim() ? { url: args.voiceAudioUrl.trim() } : {}),
73
+ ...(args.voiceAudioPath?.trim() ? { path: args.voiceAudioPath.trim() } : {}),
74
+ ...(args.voiceAudioLabel?.trim() ? { label: args.voiceAudioLabel.trim() } : {}),
75
+ ...(Number.isFinite(toneHz) ? { toneHz } : {}),
76
+ ...(Number.isFinite(durationMs) ? { durationMs } : {}),
77
+ };
78
+ }
79
+ /* v8 ignore stop */
80
+ // Surface tool schema — canonical home. Handler lives in senses/surface-tool.ts.
81
+ exports.surfaceToolDef = {
82
+ type: "function",
83
+ function: {
84
+ name: "surface",
85
+ description: "return a ready thought to a friend or active session without publishing private-runtime work to BlueBubbles. pass delegationId to address a held thought (see your attention queue above), or friendId for spontaneous outreach. Surface delivers tool responses to the active session. BlueBubbles is a dedicated channel - use send_message with channel=\"bluebubbles\" for intentional iMessage delivery. set channel=voice only when you intentionally want a live phone call; content becomes the call reason/opening context. does not end your turn.",
86
+ parameters: {
87
+ type: "object",
88
+ properties: {
89
+ content: {
90
+ type: "string",
91
+ description: "the message to deliver",
92
+ },
93
+ delegationId: {
94
+ type: "string",
95
+ description: "ID from your attention queue — addresses a specific held thought",
96
+ },
97
+ friendId: {
98
+ type: "string",
99
+ description: "friend to reach out to spontaneously (when not addressing a held thought)",
100
+ },
101
+ channel: {
102
+ type: "string",
103
+ enum: ["auto", "voice"],
104
+ description: "optional delivery channel; use voice for a live phone call to a trusted friend, otherwise omit",
105
+ },
106
+ phoneNumber: {
107
+ type: "string",
108
+ description: "optional E.164 phone override for channel=voice when the trusted friend's record has no usable phone handle",
109
+ },
110
+ voiceAudioSource: {
111
+ type: "string",
112
+ enum: ["tone", "url", "file"],
113
+ description: "optional initial non-speech audio to play after the opening greeting when channel=voice",
114
+ },
115
+ voiceAudioUrl: {
116
+ type: "string",
117
+ description: "short audio URL for voiceAudioSource=url",
118
+ },
119
+ voiceAudioPath: {
120
+ type: "string",
121
+ description: "local audio file path for voiceAudioSource=file",
122
+ },
123
+ voiceAudioLabel: {
124
+ type: "string",
125
+ description: "short label for the initial voice audio",
126
+ },
127
+ voiceAudioToneHz: {
128
+ type: "number",
129
+ description: "tone frequency for voiceAudioSource=tone",
130
+ },
131
+ voiceAudioDurationMs: {
132
+ type: "number",
133
+ description: "initial audio duration in milliseconds",
134
+ },
135
+ },
136
+ required: ["content"],
137
+ },
138
+ },
139
+ };
140
+ // Surface tool handler: routes content to friend's freshest session
141
+ /* v8 ignore start -- surface handler wiring: core logic tested via surface-tool.test.ts; this wires identity/routing deps @preserve */
142
+ exports.surfaceToolDefinition = {
143
+ tool: exports.surfaceToolDef,
144
+ handler: async (args, ctx) => {
145
+ const rawContent = args.content ?? "";
146
+ const deliveryHint = {
147
+ channel: normalizeSurfaceDeliveryChannel(args.channel),
148
+ phoneNumber: typeof args.phoneNumber === "string" ? args.phoneNumber : undefined,
149
+ initialAudio: parseSurfaceVoiceInitialAudio(args),
150
+ };
151
+ if ((0, bluebubbles_meta_guard_1.containsInternalMetaMarkers)(rawContent)) {
152
+ (0, runtime_1.emitNervesEvent)({
153
+ level: "warn",
154
+ component: "repertoire",
155
+ event: "tools.surface_meta_blocked",
156
+ message: "surface tool blocked: internal meta markers in content",
157
+ meta: {
158
+ hasDelegationId: Boolean(args.delegationId),
159
+ hasFriendId: Boolean(args.friendId),
160
+ contentLength: rawContent.length,
161
+ },
162
+ });
163
+ return "failed — blocked: contains internal meta markers";
164
+ }
165
+ const queue = ctx?.delegatedOrigins ?? [];
166
+ const agentName = (() => { try {
167
+ return (0, identity_1.getAgentName)();
168
+ }
169
+ catch {
170
+ return "unknown";
171
+ } })();
172
+ const routeToFriend = async (friendId, content, queueItem, hint) => {
173
+ /* v8 ignore start -- routing: integration path tested via private-runtime routing tests @preserve */
174
+ try {
175
+ const agentRoot = (0, identity_1.getAgentRoot)();
176
+ const sessionsDir = path.join(agentRoot, "state", "sessions");
177
+ const friendsDir = path.join(agentRoot, "friends");
178
+ const queueToSession = async (target, detail) => {
179
+ const { queuePendingMessage, getPendingDir } = await Promise.resolve().then(() => __importStar(require("../mind/pending")));
180
+ const pendingDir = getPendingDir(agentName, target.friendId, target.channel, target.key);
181
+ queuePendingMessage(pendingDir, {
182
+ from: agentName,
183
+ friendId: target.friendId,
184
+ channel: target.channel,
185
+ key: target.key,
186
+ content,
187
+ timestamp: Date.now(),
188
+ });
189
+ return { status: "queued", detail };
190
+ };
191
+ const deliverTelegramOrQueue = async (target, detail) => {
192
+ const telegramKey = (0, config_1.canonicalizeTelegramSessionKey)(target.key);
193
+ const hash = (0, crypto_1.createHash)("sha256").update(`${target.friendId}\0${telegramKey}\0${content}`).digest("hex");
194
+ const requestId = queueItem?.obligationId ?? `surface:${hash}`;
195
+ const deliveryId = queueItem?.obligationId ? `surface:${queueItem.obligationId}:${hash}` : `surface:${hash}`;
196
+ const { sendTelegramAwaitFollowUp } = await Promise.resolve().then(() => __importStar(require("../senses/telegram")));
197
+ const delivered = await sendTelegramAwaitFollowUp(agentName, {
198
+ friendId: target.friendId,
199
+ channel: "telegram",
200
+ key: telegramKey,
201
+ content,
202
+ requestId,
203
+ deliveryId,
204
+ intent: "generic_outreach",
205
+ });
206
+ return delivered.status === "delivered_now"
207
+ ? { status: "delivered", detail: "sent to Telegram now" }
208
+ : queueToSession(target, detail);
209
+ };
210
+ // Resolve friend name → UUID if needed (agents may pass name instead of UUID)
211
+ let resolvedFriendId = friendId;
212
+ if (!fs.existsSync(path.join(sessionsDir, friendId))) {
213
+ try {
214
+ const friendFiles = fs.readdirSync(friendsDir).filter((f) => f.endsWith(".json"));
215
+ for (const file of friendFiles) {
216
+ const raw = fs.readFileSync(path.join(friendsDir, file), "utf-8");
217
+ const record = JSON.parse(raw);
218
+ if (record.name?.toLowerCase() === friendId.toLowerCase() && record.id) {
219
+ resolvedFriendId = record.id;
220
+ break;
221
+ }
222
+ }
223
+ }
224
+ catch { /* friends dir unreadable — continue with original friendId */ }
225
+ }
226
+ friendId = resolvedFriendId;
227
+ if (hint?.channel === "voice") {
228
+ const voiceResult = await (0, outbound_1.placeTrustedFriendVoiceOutboundCall)({
229
+ agentName,
230
+ agentRoot,
231
+ friendId,
232
+ reason: content,
233
+ phoneNumber: hint.phoneNumber,
234
+ ...(hint.initialAudio ? { initialAudio: hint.initialAudio } : {}),
235
+ });
236
+ return voiceResult.status === "placed"
237
+ ? { status: "delivered", detail: voiceResult.detail }
238
+ : { status: "failed", detail: voiceResult.detail };
239
+ }
240
+ // Priority 1: Bridge-preferred session (if queue item has a bridgeId)
241
+ if (queueItem?.bridgeId) {
242
+ const { createBridgeManager } = await Promise.resolve().then(() => __importStar(require("../heart/bridges/manager")));
243
+ const bridge = createBridgeManager().getBridge(queueItem.bridgeId);
244
+ if (bridge && bridge.lifecycle !== "completed" && bridge.lifecycle !== "cancelled") {
245
+ const allSessions = (0, session_activity_1.listSessionActivity)({ sessionsDir, friendsDir, agentName, activeThresholdMs: Number.MAX_SAFE_INTEGER });
246
+ const bridgeTarget = allSessions.find((activity) => activity.friendId === friendId
247
+ && activity.channel !== "inner"
248
+ && bridge.attachedSessions.some((s) => s.friendId === activity.friendId && s.channel === activity.channel && s.key === activity.key));
249
+ if (bridgeTarget) {
250
+ const detail = `for next interaction via ${bridgeTarget.channel}`;
251
+ return bridgeTarget.channel === "telegram"
252
+ ? deliverTelegramOrQueue(bridgeTarget, detail)
253
+ : queueToSession(bridgeTarget, detail);
254
+ }
255
+ }
256
+ }
257
+ // Priority 1.5: exact held-work origin.
258
+ // A delegated return has a concrete reply address. Preserve that
259
+ // address before considering fresher sessions for the same friend,
260
+ // especially MCP sessions where check_response drains this path.
261
+ if (queueItem?.channel && queueItem.key && queueItem.channel !== "inner") {
262
+ const target = { friendId, channel: queueItem.channel, key: queueItem.key };
263
+ const detail = `for originating ${queueItem.channel} session`;
264
+ return queueItem.channel === "telegram"
265
+ ? deliverTelegramOrQueue(target, detail)
266
+ : queueToSession(target, detail);
267
+ }
268
+ // Priority 2: Try proactive delivery first, then queue to freshest session
269
+ const allFriendSessions = (0, session_activity_1.listSessionActivity)({ sessionsDir, friendsDir, agentName, activeThresholdMs: Number.MAX_SAFE_INTEGER })
270
+ .filter((s) => s.friendId === friendId && s.channel !== "inner");
271
+ // Priority 2: Queue to freshest non-private-runtime session
272
+ const freshest = allFriendSessions[0];
273
+ if (freshest) {
274
+ const detail = `for next interaction via ${freshest.channel}`;
275
+ return freshest.channel === "telegram"
276
+ ? deliverTelegramOrQueue(freshest, detail)
277
+ : queueToSession(freshest, detail);
278
+ }
279
+ // Priority 3: Deferred — no active session found
280
+ const { getDeferredReturnDir } = await Promise.resolve().then(() => __importStar(require("../mind/pending")));
281
+ const { queuePendingMessage: queueDeferred } = await Promise.resolve().then(() => __importStar(require("../mind/pending")));
282
+ const deferredDir = getDeferredReturnDir(agentName, friendId);
283
+ queueDeferred(deferredDir, {
284
+ from: agentName,
285
+ friendId,
286
+ channel: "deferred",
287
+ key: "return",
288
+ content,
289
+ timestamp: Date.now(),
290
+ });
291
+ return { status: "deferred", detail: "they'll see it next time" };
292
+ }
293
+ catch {
294
+ return { status: "failed" };
295
+ }
296
+ /* v8 ignore stop */
297
+ };
298
+ return (0, surface_tool_1.handleSurface)({
299
+ content: args.content ?? "",
300
+ delegationId: args.delegationId,
301
+ friendId: args.friendId,
302
+ deliveryHint: deliveryHint.channel === "voice" || deliveryHint.phoneNumber ? deliveryHint : undefined,
303
+ queue,
304
+ routeToFriend,
305
+ advanceObligation: (obligationId, update) => {
306
+ /* v8 ignore start -- obligation advance: tested via attention-queue tests @preserve */
307
+ try {
308
+ const name = (() => { try {
309
+ return (0, identity_1.getAgentName)();
310
+ }
311
+ catch {
312
+ return "unknown";
313
+ } })();
314
+ (0, obligations_1.advanceReturnObligation)(name, obligationId, {
315
+ status: update.status,
316
+ ...(update.returnedAt !== undefined ? { returnedAt: update.returnedAt } : {}),
317
+ ...(update.returnTarget !== undefined ? { returnTarget: update.returnTarget } : {}),
318
+ });
319
+ }
320
+ catch {
321
+ // swallowed — obligation advance must never break surface delivery
322
+ }
323
+ /* v8 ignore stop */
324
+ },
325
+ completePonderPacket: (packetId) => {
326
+ /* v8 ignore start -- packet completion: tested via surface-tool and arc packet unit tests @preserve */
327
+ try {
328
+ (0, packets_1.completePonderPacket)((0, identity_1.getAgentRoot)(), packetId);
329
+ }
330
+ catch {
331
+ // swallowed — packet completion must never break surface delivery
332
+ }
333
+ /* v8 ignore stop */
334
+ },
335
+ fulfillHeartObligation: (origin) => {
336
+ /* v8 ignore start -- heart obligation fulfillment: tested via surface-tool.test.ts @preserve */
337
+ try {
338
+ const agentRoot = (0, identity_1.getAgentRoot)();
339
+ const heartObligation = (0, obligations_1.findPendingObligationForOrigin)(agentRoot, origin);
340
+ if (heartObligation) {
341
+ (0, obligations_1.fulfillObligation)(agentRoot, heartObligation.id);
342
+ }
343
+ }
344
+ catch {
345
+ // swallowed — heart obligation fulfillment must never break surface delivery
346
+ }
347
+ /* v8 ignore stop */
348
+ },
349
+ onRouteResult: ({ targetFriendId, queueItem, result }) => {
350
+ ctx?.habitSession?.recordSurfaceAttempt?.({
351
+ recipient: targetFriendId,
352
+ channel: queueItem?.channel ?? args.channel ?? "surface",
353
+ reason: result.status === "failed" ? "blocked" : "answer",
354
+ result: result.status,
355
+ rawStatus: result.status,
356
+ ...(queueItem ? { routeKind: "originator" } : {}),
357
+ ...(result.status === "failed" ? { error: result.detail ?? "surface route failed" } : {}),
358
+ });
359
+ },
360
+ });
361
+ },
362
+ summaryKeys: ["content", "delegationId", "friendId", "channel"],
363
+ riskProfile: {
364
+ mutates: ["durable_state_write", "external_side_effect"],
365
+ risk: "high",
366
+ reason: "queues or delivers surfaced responses and may fulfill obligations",
367
+ },
368
+ };
369
+ /* v8 ignore stop */
@@ -4,12 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.teamsToolDefinitions = void 0;
7
- exports.summarizeTeamsArgs = summarizeTeamsArgs;
8
7
  const graph_client_1 = require("./graph-client");
9
8
  const ado_client_1 = require("./ado-client");
10
9
  const graph_endpoints_json_1 = __importDefault(require("./data/graph-endpoints.json"));
11
10
  const ado_endpoints_json_1 = __importDefault(require("./data/ado-endpoints.json"));
12
11
  const runtime_1 = require("../nerves/runtime");
12
+ const teams_image_1 = require("../senses/teams-image");
13
13
  const MUTATE_METHODS = ["POST", "PATCH", "DELETE"];
14
14
  const DEFAULT_ADO_QUERY = "SELECT [System.Id], [System.Title], [System.State], [System.AssignedTo] FROM WorkItems WHERE [System.AssignedTo] = @Me AND [System.State] <> 'Closed' ORDER BY [System.ChangedDate] DESC";
15
15
  exports.teamsToolDefinitions = [
@@ -36,6 +36,7 @@ exports.teamsToolDefinitions = [
36
36
  return (0, graph_client_1.graphRequest)(ctx.graphToken, "GET", args.path);
37
37
  },
38
38
  integration: "graph",
39
+ summaryKeys: ["path"],
39
40
  },
40
41
  {
41
42
  tool: {
@@ -64,7 +65,8 @@ exports.teamsToolDefinitions = [
64
65
  return (0, graph_client_1.graphRequest)(ctx.graphToken, args.method, args.path, args.body);
65
66
  },
66
67
  integration: "graph",
67
- confirmationRequired: true,
68
+ summaryKeys: ["method", "path"],
69
+ riskProfile: { mutates: "external_side_effect", risk: "high", reason: "mutates Microsoft Graph resources" },
68
70
  },
69
71
  // -- Generic ADO tools --
70
72
  {
@@ -94,6 +96,7 @@ exports.teamsToolDefinitions = [
94
96
  return (0, ado_client_1.adoRequest)(ctx.adoToken, method, args.organization, args.path, args.body, args.host);
95
97
  },
96
98
  integration: "ado",
99
+ summaryKeys: ["method", "organization", "path"],
97
100
  },
98
101
  {
99
102
  tool: {
@@ -124,7 +127,8 @@ exports.teamsToolDefinitions = [
124
127
  return (0, ado_client_1.adoRequest)(ctx.adoToken, args.method, args.organization, args.path, args.body, args.host);
125
128
  },
126
129
  integration: "ado",
127
- confirmationRequired: true,
130
+ summaryKeys: ["method", "organization", "path"],
131
+ riskProfile: { mutates: "external_side_effect", risk: "high", reason: "mutates Azure DevOps resources" },
128
132
  },
129
133
  // -- Convenience aliases (backward compat) --
130
134
  {
@@ -143,6 +147,7 @@ exports.teamsToolDefinitions = [
143
147
  return (0, graph_client_1.getProfile)(ctx.graphToken);
144
148
  },
145
149
  integration: "graph",
150
+ summaryKeys: [],
146
151
  },
147
152
  {
148
153
  tool: {
@@ -186,6 +191,7 @@ exports.teamsToolDefinitions = [
186
191
  return (0, ado_client_1.queryWorkItems)(ctx.adoToken, org, query);
187
192
  },
188
193
  integration: "ado",
194
+ summaryKeys: ["organization", "query"],
189
195
  },
190
196
  // -- Proactive messaging --
191
197
  {
@@ -232,7 +238,8 @@ exports.teamsToolDefinitions = [
232
238
  }
233
239
  },
234
240
  /* v8 ignore stop */
235
- confirmationRequired: true,
241
+ summaryKeys: ["user_name", "user_id"],
242
+ riskProfile: { mutates: "external_side_effect", risk: "high", reason: "sends a proactive Teams message" },
236
243
  },
237
244
  // -- Documentation tools --
238
245
  {
@@ -254,6 +261,7 @@ exports.teamsToolDefinitions = [
254
261
  return searchEndpoints(graph_endpoints_json_1.default, args.query || "");
255
262
  },
256
263
  integration: "graph",
264
+ summaryKeys: ["query"],
257
265
  },
258
266
  {
259
267
  tool: {
@@ -274,6 +282,44 @@ exports.teamsToolDefinitions = [
274
282
  return searchEndpoints(ado_endpoints_json_1.default, args.query || "");
275
283
  },
276
284
  integration: "ado",
285
+ summaryKeys: ["query"],
286
+ },
287
+ {
288
+ tool: {
289
+ type: "function",
290
+ function: {
291
+ name: "teams_send_image",
292
+ description: "Send a local PNG or JPEG image into the current Teams conversation, without publishing it or using OneDrive. Requires family trust. Images are resized/compressed for inline delivery. An activity receipt confirms Teams acceptance, not client rendering.",
293
+ parameters: {
294
+ type: "object",
295
+ properties: {
296
+ path: { type: "string", description: "Absolute path to a local PNG or JPEG image" },
297
+ caption: { type: "string", maxLength: teams_image_1.MAX_TEAMS_IMAGE_CAPTION_LENGTH, description: "Optional short caption (up to 1024 characters)" },
298
+ },
299
+ required: ["path"],
300
+ additionalProperties: false,
301
+ },
302
+ },
303
+ },
304
+ handler: async (args, ctx) => {
305
+ if (ctx?.noSend || ctx?.habitSession || ctx?.autonomousTurnKind) {
306
+ throw new Error("Teams image sending is unavailable in no-send or autonomous turns");
307
+ }
308
+ if (ctx?.context?.friend.trustLevel !== "family" || ctx.context.channel.channel !== "teams") {
309
+ throw new Error("Sending local images in Teams requires a family-trusted Teams conversation");
310
+ }
311
+ if (!ctx.teamsSendImage || !ctx.agentName || !ctx.agentRoot) {
312
+ throw new Error("Teams image sending requires an authenticated current-conversation sender and agent owner");
313
+ }
314
+ const caption = args.caption ?? "";
315
+ if (caption.length > teams_image_1.MAX_TEAMS_IMAGE_CAPTION_LENGTH)
316
+ throw new Error("Teams image caption exceeds 1024 characters");
317
+ const attachment = await (0, teams_image_1.prepareTeamsImage)({ path: args.path, agentName: ctx.agentName, agentRoot: ctx.agentRoot });
318
+ const activityId = await ctx.teamsSendImage(attachment, caption);
319
+ return `image accepted by Teams in the current conversation (activity ${activityId}); client rendering is not verified`;
320
+ },
321
+ summaryKeys: ["path"],
322
+ riskProfile: { mutates: "external_side_effect", risk: "high", reason: "sends local image bytes to the current Teams conversation" },
277
323
  },
278
324
  ];
279
325
  function searchEndpoints(entries, query) {
@@ -304,38 +350,3 @@ function searchEndpoints(entries, query) {
304
350
  return lines.join("\n");
305
351
  }).join("\n\n");
306
352
  }
307
- function summarizeTeamsArgs(name, args) {
308
- function summarizeKeyValues(keys) {
309
- const parts = [];
310
- for (const key of keys) {
311
- const raw = args[key];
312
- if (raw === undefined || raw === null)
313
- continue;
314
- const compact = String(raw).replace(/\s+/g, " ").trim();
315
- if (!compact)
316
- continue;
317
- const clipped = compact.length > 60 ? compact.slice(0, 60) + "..." : compact;
318
- parts.push(`${key}=${clipped}`);
319
- }
320
- return parts.join(" ");
321
- }
322
- if (name === "graph_profile")
323
- return "";
324
- if (name === "ado_work_items")
325
- return summarizeKeyValues(["organization", "query"]);
326
- if (name === "graph_query")
327
- return summarizeKeyValues(["path"]);
328
- if (name === "graph_mutate")
329
- return summarizeKeyValues(["method", "path"]);
330
- if (name === "ado_query")
331
- return summarizeKeyValues(["method", "organization", "path"]);
332
- if (name === "ado_mutate")
333
- return summarizeKeyValues(["method", "organization", "path"]);
334
- if (name === "graph_docs")
335
- return summarizeKeyValues(["query"]);
336
- if (name === "ado_docs")
337
- return summarizeKeyValues(["query"]);
338
- if (name === "teams_send_message")
339
- return summarizeKeyValues(["user_name", "user_id"]);
340
- return undefined;
341
- }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.telegramContactToolDefinition = void 0;
4
+ const runtime_1 = require("../nerves/runtime");
5
+ exports.telegramContactToolDefinition = {
6
+ tool: { type: "function", function: {
7
+ name: "telegram_contact_manage",
8
+ description: "List household Telegram contacts, revoke one exact approved contact, or release one exact blocked contact request. Owner only; quarantined message text is never returned.",
9
+ parameters: { type: "object", properties: {
10
+ action: { type: "string", enum: ["list", "revoke", "unblock"] },
11
+ friendId: { type: "string", description: "Exact Friend ID from list; required for revoke." },
12
+ admissionId: { type: "string", description: "Exact blocked admission ID from list; required for unblock." },
13
+ }, required: ["action"], additionalProperties: false },
14
+ } },
15
+ handler: async (args, ctx) => {
16
+ const actor = ctx?.relationshipAuthorization?.actor;
17
+ const manager = ctx?.telegramContactManager;
18
+ if (!actor || actor.trustLevel !== "family" || !manager)
19
+ return JSON.stringify({ ok: false, error: "Telegram contact management requires the live owner relationship" });
20
+ const action = String(args.action ?? "");
21
+ if (action === "list")
22
+ return JSON.stringify({ ok: true, ...(await manager.list({ actorFriendId: actor.friendId })) });
23
+ if (action === "revoke" && typeof args.friendId === "string" && args.friendId.trim())
24
+ return JSON.stringify({ ok: true, ...(await manager.revoke({ actorFriendId: actor.friendId, friendId: args.friendId })) });
25
+ if (action === "unblock" && typeof args.admissionId === "string" && args.admissionId.trim())
26
+ return JSON.stringify({ ok: true, ...(await manager.unblock({ actorFriendId: actor.friendId, admissionId: args.admissionId })) });
27
+ return JSON.stringify({ ok: false, error: "Telegram contact management arguments are invalid" });
28
+ },
29
+ riskProfile: (args) => String(args.action) === "list" ? { mutates: "none", risk: "low" } : { mutates: "durable_state_write", risk: "high", reason: "changes one exact household Telegram admission" },
30
+ approvalPolicy: () => ({ kind: "not_required" }),
31
+ };
32
+ (0, runtime_1.emitNervesEvent)({
33
+ component: "repertoire",
34
+ event: "repertoire.telegram_contact_tool_loaded",
35
+ message: "Telegram contact management tool loaded",
36
+ meta: { operations: 3 },
37
+ });