@ouro.bot/cli 0.1.0-alpha.83 → 0.1.0-alpha.830

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 (647) 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 +5302 -16
  16. package/deploy/unraid/Dockerfile +54 -0
  17. package/deploy/unraid/README.txt +2983 -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-deployment-target.mjs +710 -0
  34. package/deploy/unraid/sanctuary-safe-rename.py +24 -0
  35. package/deploy/unraid/sanctuary-unit16-host-broker.mjs +2084 -0
  36. package/deploy/unraid/sanctuary-unit16-run.sh +560 -0
  37. package/deploy/unraid/sanctuary-unit18-target-audit.sh +27 -0
  38. package/deploy/unraid/sanctuary.ouro/agent.json +66 -0
  39. package/deploy/unraid/sanctuary.ouro/arc/README.md +3 -0
  40. package/deploy/unraid/sanctuary.ouro/bundle-meta.json +5 -0
  41. package/deploy/unraid/sanctuary.ouro/habits/sanctuary-health.md +8 -0
  42. package/deploy/unraid/sanctuary.ouro/mcp/media-mcp.mjs +795 -0
  43. package/deploy/unraid/sanctuary.ouro/provider-readiness.json +11 -0
  44. package/deploy/unraid/sanctuary.ouro/psyche/ASPIRATIONS.md +5 -0
  45. package/deploy/unraid/sanctuary.ouro/psyche/IDENTITY.md +5 -0
  46. package/deploy/unraid/sanctuary.ouro/psyche/LORE.md +15 -0
  47. package/deploy/unraid/sanctuary.ouro/psyche/SOUL.md +25 -0
  48. package/deploy/unraid/sanctuary.ouro/psyche/TACIT.md +15 -0
  49. package/deploy/unraid/sanctuary.ouro/state/policy/steward.json +7 -0
  50. package/deploy/unraid/sanctuary.ouro/tool-profiles.json +135 -0
  51. package/deploy/unraid/sanctuary.xml +28 -0
  52. package/dist/a2a/card.js +57 -0
  53. package/dist/a2a/client.js +180 -0
  54. package/dist/a2a/config.js +50 -0
  55. package/dist/a2a/delegation-stores.js +56 -0
  56. package/dist/a2a/did-resolution.js +93 -0
  57. package/dist/a2a/identity.js +170 -0
  58. package/dist/a2a/inbound-share.js +107 -0
  59. package/dist/a2a/mission-result-wire.js +196 -0
  60. package/dist/a2a/onboarding.js +115 -0
  61. package/dist/a2a/pin-store.js +132 -0
  62. package/dist/a2a/seen-ledger.js +120 -0
  63. package/dist/a2a/server.js +604 -0
  64. package/dist/a2a/task-store.js +69 -0
  65. package/dist/a2a/transport.js +45 -0
  66. package/dist/a2a/types.js +3 -0
  67. package/dist/arc/attention-types.js +8 -0
  68. package/dist/arc/cares.js +360 -0
  69. package/dist/arc/episodes.js +118 -0
  70. package/dist/arc/evolution.js +490 -0
  71. package/dist/arc/flight-recorder.js +1034 -0
  72. package/dist/arc/intentions.js +134 -0
  73. package/dist/arc/json-store.js +117 -0
  74. package/dist/arc/obligations.js +386 -0
  75. package/dist/arc/packets.js +336 -0
  76. package/dist/arc/presence.js +185 -0
  77. package/dist/arc/task-lifecycle.js +57 -0
  78. package/dist/commerce/store.js +755 -0
  79. package/dist/commerce/types.js +3 -0
  80. package/dist/heart/active-work.js +798 -40
  81. package/dist/heart/agent-entry.js +252 -3
  82. package/dist/heart/approval-files.js +113 -0
  83. package/dist/heart/approval-store.js +960 -0
  84. package/dist/heart/attachments/image-normalize.js +194 -0
  85. package/dist/heart/attachments/materialize.js +97 -0
  86. package/dist/heart/attachments/originals.js +88 -0
  87. package/dist/heart/attachments/render.js +29 -0
  88. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  89. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  90. package/dist/heart/attachments/sources/index.js +18 -0
  91. package/dist/heart/attachments/sources/telegram.js +71 -0
  92. package/dist/heart/attachments/store.js +132 -0
  93. package/dist/heart/attachments/types.js +93 -0
  94. package/dist/heart/auth/auth-flow.js +495 -0
  95. package/dist/heart/autonomy-budget.js +478 -0
  96. package/dist/heart/awaiting/await-alert.js +148 -0
  97. package/dist/heart/awaiting/await-expiry.js +143 -0
  98. package/dist/heart/awaiting/await-loader.js +91 -0
  99. package/dist/heart/awaiting/await-parser.js +149 -0
  100. package/dist/heart/awaiting/await-runtime-state.js +111 -0
  101. package/dist/heart/awaiting/await-scheduler.js +382 -0
  102. package/dist/heart/background-operations.js +281 -0
  103. package/dist/heart/bridges/manager.js +137 -17
  104. package/dist/heart/bridges/store.js +14 -2
  105. package/dist/heart/bundle-state.js +168 -0
  106. package/dist/heart/commitments.js +44 -18
  107. package/dist/heart/config-registry.js +331 -0
  108. package/dist/heart/config.js +174 -131
  109. package/dist/heart/context-loss-gauntlet.js +387 -0
  110. package/dist/heart/context-loss-sentinel.js +1157 -0
  111. package/dist/heart/core.js +2169 -581
  112. package/dist/heart/cross-chat-delivery.js +9 -22
  113. package/dist/heart/daemon/agent-config-check.js +451 -0
  114. package/dist/heart/daemon/agent-discovery.js +185 -3
  115. package/dist/heart/daemon/agent-service.js +542 -0
  116. package/dist/heart/daemon/agentic-repair.js +547 -0
  117. package/dist/heart/daemon/await-private-wake.js +59 -0
  118. package/dist/heart/daemon/bluebubbles-cli-integration.js +71 -0
  119. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  120. package/dist/heart/daemon/bluebubbles-host-protocol.js +433 -0
  121. package/dist/heart/daemon/bluebubbles-host.js +273 -0
  122. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  123. package/dist/heart/daemon/cadence.js +180 -0
  124. package/dist/heart/daemon/cli-defaults.js +854 -0
  125. package/dist/heart/daemon/cli-desk.js +322 -0
  126. package/dist/heart/daemon/cli-exec.js +8822 -0
  127. package/dist/heart/daemon/cli-help.js +716 -0
  128. package/dist/heart/daemon/cli-parse.js +2771 -0
  129. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  130. package/dist/heart/daemon/cli-render.js +777 -0
  131. package/dist/heart/daemon/cli-types.js +8 -0
  132. package/dist/heart/daemon/connect-bay.js +323 -0
  133. package/dist/heart/daemon/container-credential-bootstrap.js +273 -0
  134. package/dist/heart/daemon/container-healthcheck.js +112 -0
  135. package/dist/heart/daemon/container-runtime.js +97 -0
  136. package/dist/heart/daemon/container-spec-auditor-main.js +171 -0
  137. package/dist/heart/daemon/container-spec-auditor.js +229 -0
  138. package/dist/heart/daemon/daemon-bootstrap-startup.js +115 -0
  139. package/dist/heart/daemon/daemon-cli.js +29 -2349
  140. package/dist/heart/daemon/daemon-entry.js +930 -11
  141. package/dist/heart/daemon/daemon-health.js +186 -0
  142. package/dist/heart/daemon/daemon-rollup.js +57 -0
  143. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  144. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  145. package/dist/heart/daemon/daemon.js +2084 -105
  146. package/dist/heart/daemon/dns-workflow.js +394 -0
  147. package/dist/heart/daemon/doctor-types.js +8 -0
  148. package/dist/heart/daemon/doctor.js +1755 -0
  149. package/dist/heart/daemon/freshness.js +345 -0
  150. package/dist/heart/daemon/habit-private-wake.js +61 -0
  151. package/dist/heart/daemon/health-monitor.js +142 -11
  152. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  153. package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
  154. package/dist/heart/daemon/http-health-probe.js +80 -0
  155. package/dist/heart/daemon/human-command-screens.js +234 -0
  156. package/dist/heart/daemon/human-readiness.js +114 -0
  157. package/dist/heart/daemon/inner-status.js +78 -0
  158. package/dist/heart/daemon/interactive-repair.js +394 -0
  159. package/dist/heart/daemon/launchd.js +37 -8
  160. package/dist/heart/daemon/log-tailer.js +79 -10
  161. package/dist/heart/daemon/logs-prune.js +132 -0
  162. package/dist/heart/daemon/mcp-canary.js +524 -0
  163. package/dist/heart/daemon/message-router.js +65 -5
  164. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  165. package/dist/heart/daemon/os-cron-deps.js +135 -0
  166. package/dist/heart/daemon/os-cron.js +22 -14
  167. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  168. package/dist/heart/daemon/ouro-entry.js +3 -1
  169. package/dist/heart/daemon/plugin-cli.js +432 -0
  170. package/dist/heart/daemon/process-manager.js +733 -61
  171. package/dist/heart/daemon/provider-discovery.js +137 -0
  172. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  173. package/dist/heart/daemon/prunable-bundle.js +144 -0
  174. package/dist/heart/daemon/pulse.js +511 -0
  175. package/dist/heart/daemon/readiness-repair.js +365 -0
  176. package/dist/heart/daemon/run-hooks.js +2 -0
  177. package/dist/heart/daemon/runtime-logging.js +47 -14
  178. package/dist/heart/daemon/runtime-metadata.js +2 -30
  179. package/dist/heart/daemon/runtime-mode.js +13 -2
  180. package/dist/heart/daemon/safe-mode.js +161 -0
  181. package/dist/heart/daemon/sanctuary-acceptance-adapter.js +2654 -0
  182. package/dist/heart/daemon/sanctuary-acceptance-harness.js +1830 -0
  183. package/dist/heart/daemon/sanctuary-acceptance-marker.js +267 -0
  184. package/dist/heart/daemon/sanctuary-acceptance-scenarios.js +955 -0
  185. package/dist/heart/daemon/sanctuary-authority-codec.js +86 -0
  186. package/dist/heart/daemon/sanctuary-authority-epoch.js +256 -0
  187. package/dist/heart/daemon/sanctuary-authority-installation.js +140 -0
  188. package/dist/heart/daemon/sanctuary-authority-ledger.js +241 -0
  189. package/dist/heart/daemon/sanctuary-authority-root-lifecycle.js +819 -0
  190. package/dist/heart/daemon/sanctuary-authority-vault-migration.js +79 -0
  191. package/dist/heart/daemon/sanctuary-bundle-migration.js +729 -0
  192. package/dist/heart/daemon/sanctuary-host-authority.js +1008 -0
  193. package/dist/heart/daemon/sanctuary-host-detached-supervisor.js +494 -0
  194. package/dist/heart/daemon/sanctuary-host-executor.js +670 -0
  195. package/dist/heart/daemon/sanctuary-host-linux-kernel.js +334 -0
  196. package/dist/heart/daemon/sanctuary-host-supervisor-entry.js +207 -0
  197. package/dist/heart/daemon/sanctuary-host-supervisor.js +95 -0
  198. package/dist/heart/daemon/sanctuary-package-management.js +103 -0
  199. package/dist/heart/daemon/sanctuary-scheduler-liveness.js +227 -0
  200. package/dist/heart/daemon/sanctuary-scheduler-origin.js +132 -0
  201. package/dist/heart/daemon/sanctuary-telegram-authority-entry.js +445 -0
  202. package/dist/heart/daemon/sanctuary-telegram-authority-gateway.js +585 -0
  203. package/dist/heart/daemon/sanctuary-telegram-authority-service.js +630 -0
  204. package/dist/heart/daemon/sense-manager.js +699 -48
  205. package/dist/heart/daemon/session-id-resolver.js +131 -0
  206. package/dist/heart/daemon/skill-management-installer.js +1 -1
  207. package/dist/heart/daemon/socket-client.js +180 -12
  208. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  209. package/dist/heart/daemon/startup-tui.js +339 -0
  210. package/dist/heart/daemon/supercronic-supervisor.js +282 -0
  211. package/dist/heart/daemon/task-scheduler.js +117 -39
  212. package/dist/heart/daemon/terminal-ui.js +499 -0
  213. package/dist/heart/daemon/thoughts.js +138 -54
  214. package/dist/heart/daemon/up-progress.js +366 -0
  215. package/dist/heart/daemon/vault-items.js +56 -0
  216. package/dist/heart/delegation.js +1 -4
  217. package/dist/heart/external-events/router.js +1430 -0
  218. package/dist/heart/frontend-approval-runtime.js +506 -0
  219. package/dist/heart/frontend-journal.js +215 -0
  220. package/dist/heart/frontend-session-service.js +237 -0
  221. package/dist/heart/frontend-socket-client.js +154 -0
  222. package/dist/heart/frontend-socket.js +400 -0
  223. package/dist/heart/habits/habit-cancel.js +810 -0
  224. package/dist/heart/habits/habit-lifecycle.js +1327 -0
  225. package/dist/heart/habits/habit-migration.js +194 -0
  226. package/dist/heart/habits/habit-parser.js +278 -0
  227. package/dist/heart/habits/habit-runtime-state.js +93 -0
  228. package/dist/heart/habits/habit-scheduler.js +653 -0
  229. package/dist/heart/habits/habit-session-summary.js +318 -0
  230. package/dist/heart/habits/habit-session.js +636 -0
  231. package/dist/heart/{daemon → hatch}/hatch-flow.js +55 -62
  232. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  233. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  234. package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
  235. package/dist/heart/identity.js +196 -59
  236. package/dist/heart/kept-notes.js +289 -0
  237. package/dist/heart/kicks.js +1 -1
  238. package/dist/heart/machine-identity.js +161 -0
  239. package/dist/heart/mail-import-discovery.js +356 -0
  240. package/dist/heart/mailbox/mailbox-http-hooks.js +98 -0
  241. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  242. package/dist/heart/mailbox/mailbox-http-routes.js +398 -0
  243. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  244. package/dist/heart/mailbox/mailbox-http-transport.js +129 -0
  245. package/dist/heart/mailbox/mailbox-http.js +99 -0
  246. package/dist/heart/mailbox/mailbox-read.js +39 -0
  247. package/dist/heart/mailbox/mailbox-types.js +27 -0
  248. package/dist/heart/mailbox/mailbox-view.js +197 -0
  249. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  250. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  251. package/dist/heart/mailbox/readers/mail.js +375 -0
  252. package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
  253. package/dist/heart/mailbox/readers/sessions.js +231 -0
  254. package/dist/heart/mailbox/readers/shared.js +111 -0
  255. package/dist/heart/mcp/mcp-server.js +696 -0
  256. package/dist/heart/migrate-config.js +100 -0
  257. package/dist/heart/model-capabilities.js +11 -0
  258. package/dist/heart/orientation-frame.js +345 -0
  259. package/dist/heart/platform.js +81 -0
  260. package/dist/heart/primitives.js +1 -1
  261. package/dist/heart/private-runtime/decision-renderer.js +158 -0
  262. package/dist/heart/private-runtime/index.js +18 -0
  263. package/dist/heart/private-runtime/ledger.js +221 -0
  264. package/dist/heart/private-runtime/policy.js +252 -0
  265. package/dist/heart/private-runtime/types.js +2 -0
  266. package/dist/heart/progress-story.js +1 -1
  267. package/dist/heart/provider-attempt.js +137 -0
  268. package/dist/heart/provider-binding-resolver.js +273 -0
  269. package/dist/heart/provider-credentials.js +449 -0
  270. package/dist/heart/provider-failover.js +311 -0
  271. package/dist/heart/provider-models.js +96 -0
  272. package/dist/heart/provider-ping.js +265 -0
  273. package/dist/heart/provider-readiness-cache.js +119 -0
  274. package/dist/heart/provider-visibility.js +188 -0
  275. package/dist/heart/providers/anthropic-token.js +131 -0
  276. package/dist/heart/providers/anthropic.js +173 -60
  277. package/dist/heart/providers/azure.js +23 -11
  278. package/dist/heart/providers/error-classification.js +127 -0
  279. package/dist/heart/providers/github-copilot.js +34 -38
  280. package/dist/heart/providers/minimax-vlm.js +189 -0
  281. package/dist/heart/providers/minimax.js +26 -8
  282. package/dist/heart/providers/openai-codex-token.js +349 -0
  283. package/dist/heart/providers/openai-codex.js +55 -40
  284. package/dist/heart/providers/openai-compatible.js +177 -0
  285. package/dist/heart/run-ledger.js +247 -0
  286. package/dist/heart/runtime-capability-check.js +170 -0
  287. package/dist/heart/runtime-credentials.js +607 -0
  288. package/dist/heart/runtime-cwd.js +87 -0
  289. package/dist/heart/sense-truth.js +22 -4
  290. package/dist/heart/session-activity.js +92 -24
  291. package/dist/heart/session-events.js +1504 -0
  292. package/dist/heart/session-playback-cli-main.js +5 -0
  293. package/dist/heart/session-playback-cli.js +36 -0
  294. package/dist/heart/session-playback.js +231 -0
  295. package/dist/heart/session-redaction-repair-cli-main.js +31 -0
  296. package/dist/heart/session-redaction-repair.js +552 -0
  297. package/dist/heart/session-stats-cli-main.js +5 -0
  298. package/dist/heart/session-stats.js +183 -0
  299. package/dist/heart/session-transcript.js +133 -0
  300. package/dist/heart/start-of-turn-packet.js +372 -0
  301. package/dist/heart/steward-policy.js +618 -0
  302. package/dist/heart/streaming.js +604 -207
  303. package/dist/heart/structured-output.js +196 -0
  304. package/dist/heart/sync-classification.js +176 -0
  305. package/dist/heart/sync.js +449 -0
  306. package/dist/heart/target-resolution.js +11 -7
  307. package/dist/heart/tempo.js +93 -0
  308. package/dist/heart/temporal-view.js +41 -0
  309. package/dist/heart/timeouts.js +101 -0
  310. package/dist/heart/tool-activity-callbacks.js +59 -0
  311. package/dist/heart/tool-approval.js +382 -0
  312. package/dist/heart/tool-description.js +155 -0
  313. package/dist/heart/tool-friction.js +55 -0
  314. package/dist/heart/tool-loop.js +200 -0
  315. package/dist/heart/turn-context.js +482 -0
  316. package/dist/heart/turn-execution-lease.js +30 -0
  317. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  318. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  319. package/dist/heart/versioning/ouro-path-installer.js +432 -0
  320. package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
  321. package/dist/heart/versioning/ouro-version-manager.js +409 -0
  322. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  323. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  324. package/dist/heart/versioning/update-hooks.js +154 -0
  325. package/dist/heart/versioning/version-intent.js +114 -0
  326. package/dist/heart/work-card.js +380 -0
  327. package/dist/mailbox-ui/assets/index-Cyv4mw3Y.js +1 -0
  328. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  329. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  330. package/dist/mailbox-ui/index.html +16 -0
  331. package/dist/mailroom/attention.js +167 -0
  332. package/dist/mailroom/autonomy.js +209 -0
  333. package/dist/mailroom/blob-store.js +889 -0
  334. package/dist/mailroom/body-cache.js +61 -0
  335. package/dist/mailroom/cache-sync-cli.js +58 -0
  336. package/dist/mailroom/core.js +803 -0
  337. package/dist/mailroom/entry.js +160 -0
  338. package/dist/mailroom/file-store.js +568 -0
  339. package/dist/mailroom/hosted-cache-sync.js +384 -0
  340. package/dist/mailroom/mbox-import.js +393 -0
  341. package/dist/mailroom/migration.js +164 -0
  342. package/dist/mailroom/outbound.js +380 -0
  343. package/dist/mailroom/policy.js +263 -0
  344. package/dist/mailroom/reader.js +292 -0
  345. package/dist/mailroom/search-cache.js +513 -0
  346. package/dist/mailroom/search-relevance.js +319 -0
  347. package/dist/mailroom/smtp-ingress.js +176 -0
  348. package/dist/mailroom/source-state.js +176 -0
  349. package/dist/mailroom/thread.js +109 -0
  350. package/dist/mailroom/travel-extract.js +89 -0
  351. package/dist/mind/bundle-manifest.js +24 -2
  352. package/dist/mind/context.js +309 -111
  353. package/dist/mind/desk-section.js +362 -0
  354. package/dist/mind/diary-integrity.js +60 -0
  355. package/dist/mind/{memory.js → diary.js} +68 -77
  356. package/dist/mind/embedding-provider.js +60 -0
  357. package/dist/mind/file-state.js +179 -0
  358. package/dist/mind/{associative-recall.js → note-search.js} +47 -58
  359. package/dist/mind/obligation-steering.js +199 -3
  360. package/dist/mind/pending.js +36 -10
  361. package/dist/mind/prompt-budget.js +479 -0
  362. package/dist/mind/prompt-refresh.js +3 -2
  363. package/dist/mind/prompt.js +1050 -189
  364. package/dist/mind/provenance-trust.js +26 -0
  365. package/dist/mind/record-paths.js +312 -0
  366. package/dist/mind/scrutiny.js +173 -0
  367. package/dist/mind/session-transaction.js +564 -0
  368. package/dist/nerves/cli-logging.js +7 -1
  369. package/dist/nerves/coverage/audit-rules.js +15 -6
  370. package/dist/nerves/coverage/audit.js +28 -2
  371. package/dist/nerves/coverage/cli.js +1 -1
  372. package/dist/nerves/coverage/contract.js +5 -5
  373. package/dist/nerves/coverage/file-completeness.js +139 -5
  374. package/dist/nerves/coverage/run-artifacts.js +55 -35
  375. package/dist/nerves/coverage/source-scanner.js +4 -4
  376. package/dist/nerves/event-buffer.js +111 -0
  377. package/dist/nerves/index.js +293 -9
  378. package/dist/nerves/observation.js +20 -0
  379. package/dist/nerves/redact.js +79 -0
  380. package/dist/nerves/review/cli-main.js +5 -0
  381. package/dist/nerves/review/cli.js +156 -0
  382. package/dist/nerves/review/core.js +159 -0
  383. package/dist/nerves/runtime.js +17 -1
  384. package/dist/repertoire/ado-client.js +15 -56
  385. package/dist/repertoire/ado-semantic.js +16 -10
  386. package/dist/repertoire/api-client.js +97 -0
  387. package/dist/repertoire/bitwarden-store.js +1045 -0
  388. package/dist/repertoire/bundle-templates.js +71 -0
  389. package/dist/repertoire/bw-installer.js +180 -0
  390. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  391. package/dist/repertoire/coding/context-pack.js +331 -0
  392. package/dist/repertoire/coding/feedback.js +174 -32
  393. package/dist/repertoire/coding/index.js +15 -3
  394. package/dist/repertoire/coding/manager.js +159 -10
  395. package/dist/repertoire/coding/spawner.js +58 -11
  396. package/dist/repertoire/coding/tools.js +221 -15
  397. package/dist/repertoire/coding/workbench-client.js +272 -0
  398. package/dist/repertoire/coding/workbench-manager.js +346 -0
  399. package/dist/repertoire/commerce-errors.js +109 -0
  400. package/dist/repertoire/commerce-self-test.js +156 -0
  401. package/dist/repertoire/credential-access.js +178 -0
  402. package/dist/repertoire/desk/classifier.js +362 -0
  403. package/dist/repertoire/duffel-client.js +185 -0
  404. package/dist/repertoire/github-client.js +14 -55
  405. package/dist/repertoire/graph-client.js +11 -52
  406. package/dist/repertoire/guardrails.js +811 -18
  407. package/dist/repertoire/mcp-client.js +44 -3
  408. package/dist/repertoire/mcp-manager.js +427 -139
  409. package/dist/repertoire/mcp-tools.js +124 -0
  410. package/dist/repertoire/plugin-mcp.js +175 -0
  411. package/dist/repertoire/plugins.js +253 -0
  412. package/dist/repertoire/relationship-authorization.js +322 -0
  413. package/dist/repertoire/shell-sessions.js +134 -0
  414. package/dist/repertoire/skills.js +48 -4
  415. package/dist/repertoire/stripe-client.js +131 -0
  416. package/dist/repertoire/tool-arguments.js +170 -0
  417. package/dist/repertoire/tool-results.js +29 -0
  418. package/dist/repertoire/tools-a2a.js +699 -0
  419. package/dist/repertoire/tools-attachments.js +322 -0
  420. package/dist/repertoire/tools-awaiting.js +575 -0
  421. package/dist/repertoire/tools-base.js +77 -1138
  422. package/dist/repertoire/tools-bluebubbles.js +2 -0
  423. package/dist/repertoire/tools-bridge.js +144 -0
  424. package/dist/repertoire/tools-bundle.js +993 -0
  425. package/dist/repertoire/tools-commerce.js +253 -0
  426. package/dist/repertoire/tools-config.js +186 -0
  427. package/dist/repertoire/tools-continuity.js +575 -0
  428. package/dist/repertoire/tools-credential.js +383 -0
  429. package/dist/repertoire/tools-evolution.js +527 -0
  430. package/dist/repertoire/tools-files.js +344 -0
  431. package/dist/repertoire/tools-flight.js +290 -0
  432. package/dist/repertoire/tools-flow.js +119 -0
  433. package/dist/repertoire/tools-github.js +3 -8
  434. package/dist/repertoire/tools-habits.js +103 -0
  435. package/dist/repertoire/tools-mail.js +1828 -0
  436. package/dist/repertoire/tools-notes.js +485 -0
  437. package/dist/repertoire/tools-obligations.js +182 -0
  438. package/dist/repertoire/tools-orientation.js +31 -0
  439. package/dist/repertoire/tools-record.js +482 -0
  440. package/dist/repertoire/tools-rsvp.js +139 -0
  441. package/dist/repertoire/tools-runtime.js +150 -0
  442. package/dist/repertoire/tools-sanctuary-host.js +202 -0
  443. package/dist/repertoire/tools-session.js +1133 -0
  444. package/dist/repertoire/tools-shell.js +149 -0
  445. package/dist/repertoire/tools-steward-policy.js +119 -0
  446. package/dist/repertoire/tools-stripe.js +224 -0
  447. package/dist/repertoire/tools-surface.js +369 -0
  448. package/dist/repertoire/tools-teams.js +12 -39
  449. package/dist/repertoire/tools-telegram-contacts.js +37 -0
  450. package/dist/repertoire/tools-travel.js +125 -0
  451. package/dist/repertoire/tools-trip.js +982 -0
  452. package/dist/repertoire/tools-unraid.js +531 -0
  453. package/dist/repertoire/tools-user-profile.js +146 -0
  454. package/dist/repertoire/tools-vault.js +40 -0
  455. package/dist/repertoire/tools-voice.js +145 -0
  456. package/dist/repertoire/tools.js +494 -148
  457. package/dist/repertoire/travel-api-client.js +360 -0
  458. package/dist/repertoire/unraid-client.js +155 -0
  459. package/dist/repertoire/unraid-restart.js +339 -0
  460. package/dist/repertoire/user-profile.js +131 -0
  461. package/dist/repertoire/vault-setup.js +246 -0
  462. package/dist/repertoire/vault-unlock.js +628 -0
  463. package/dist/rsvp/aisleplanner-client.js +354 -0
  464. package/dist/rsvp/cli.js +926 -0
  465. package/dist/rsvp/config.js +327 -0
  466. package/dist/rsvp/cutover.js +433 -0
  467. package/dist/rsvp/diagnostics.js +232 -0
  468. package/dist/rsvp/diff-renderer.js +176 -0
  469. package/dist/rsvp/habit-policy.js +110 -0
  470. package/dist/rsvp/habit-stage.js +123 -0
  471. package/dist/rsvp/incident-bundle.js +97 -0
  472. package/dist/rsvp/migration.js +204 -0
  473. package/dist/rsvp/native-habit-runner.js +630 -0
  474. package/dist/rsvp/outbound-state.js +628 -0
  475. package/dist/rsvp/query.js +118 -0
  476. package/dist/rsvp/replay.js +233 -0
  477. package/dist/rsvp/snapshot.js +232 -0
  478. package/dist/rsvp/spend-ledger.js +175 -0
  479. package/dist/scripts/claude-code-hook.js +41 -0
  480. package/dist/scripts/claude-code-stop-hook.js +47 -0
  481. package/dist/senses/a2a-entry.js +115 -0
  482. package/dist/senses/acp-server.js +386 -0
  483. package/dist/senses/attention-queue.js +186 -0
  484. package/dist/senses/await-turn-message.js +58 -0
  485. package/dist/senses/bluebubbles/active-turns.js +216 -0
  486. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  487. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  488. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +355 -40
  489. package/dist/senses/bluebubbles/context-packet.js +207 -0
  490. package/dist/senses/bluebubbles/context-smoke.js +144 -0
  491. package/dist/senses/bluebubbles/entry.js +90 -0
  492. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +21 -3
  493. package/dist/senses/bluebubbles/index.js +3841 -0
  494. package/dist/senses/bluebubbles/latest-turn.js +311 -0
  495. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  496. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +159 -28
  497. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +24 -13
  498. package/dist/senses/bluebubbles/outbound-state.js +308 -0
  499. package/dist/senses/bluebubbles/processed-log.js +133 -0
  500. package/dist/senses/bluebubbles/reaction-policy.js +47 -0
  501. package/dist/senses/bluebubbles/replay.js +284 -0
  502. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  503. package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
  504. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  505. package/dist/senses/bluebubbles/webhook-registration.js +228 -0
  506. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  507. package/dist/senses/cli/bracketed-paste.js +82 -0
  508. package/dist/senses/cli/image-paste.js +287 -0
  509. package/dist/senses/cli/image-ref-navigation.js +75 -0
  510. package/dist/senses/cli/ink-app.js +156 -0
  511. package/dist/senses/cli/inline-diff.js +64 -0
  512. package/dist/senses/cli/input-keys.js +174 -0
  513. package/dist/senses/cli/kill-ring.js +86 -0
  514. package/dist/senses/cli/message-list.js +51 -0
  515. package/dist/senses/cli/ouro-tui.js +607 -0
  516. package/dist/senses/cli/spinner-imperative.js +135 -0
  517. package/dist/senses/cli/spinner.js +101 -0
  518. package/dist/senses/cli/status-line.js +60 -0
  519. package/dist/senses/cli/streaming-markdown.js +526 -0
  520. package/dist/senses/cli/tool-display.js +85 -0
  521. package/dist/senses/cli/tool-render.js +85 -0
  522. package/dist/senses/cli/tui-store.js +241 -0
  523. package/dist/senses/cli/virtual-list.js +35 -0
  524. package/dist/senses/cli-entry.js +60 -8
  525. package/dist/senses/cli.js +604 -320
  526. package/dist/senses/commands.js +66 -3
  527. package/dist/senses/context-packet-ledger.js +371 -0
  528. package/dist/senses/context-packets.js +154 -0
  529. package/dist/senses/habit-lifecycle-guard.js +24 -0
  530. package/dist/senses/habit-turn-message.js +160 -0
  531. package/dist/senses/ingress-evidence.js +2 -0
  532. package/dist/senses/mail-entry.js +66 -0
  533. package/dist/senses/mail.js +524 -0
  534. package/dist/senses/pipeline.js +1115 -204
  535. package/dist/senses/private-runtime-worker.js +859 -0
  536. package/dist/senses/private-runtime.js +1517 -0
  537. package/dist/senses/proactive-content-guard.js +51 -0
  538. package/dist/senses/root-host-approval-port.js +345 -0
  539. package/dist/senses/root-host-approval-runtime.js +393 -0
  540. package/dist/senses/sanctuary-authority-resident.js +102 -0
  541. package/dist/senses/sanctuary-download-credit-presentation.js +31 -0
  542. package/dist/senses/sanctuary-full-visibility-contract.js +302 -0
  543. package/dist/senses/sanctuary-grounding.js +118 -0
  544. package/dist/senses/sanctuary-health-acceptance-probe-entry.js +12 -0
  545. package/dist/senses/sanctuary-health-acceptance-probe.js +774 -0
  546. package/dist/senses/sanctuary-health-runner.js +100 -0
  547. package/dist/senses/sanctuary-health.js +408 -0
  548. package/dist/senses/sanctuary-install-state-contract.js +126 -0
  549. package/dist/senses/sanctuary-interactive-control.js +410 -0
  550. package/dist/senses/sanctuary-media-catalog-contract.js +297 -0
  551. package/dist/senses/sanctuary-media-optimization.js +514 -0
  552. package/dist/senses/sanctuary-runtime.js +340 -0
  553. package/dist/senses/sanctuary-sab.js +85 -0
  554. package/dist/senses/sanctuary-storage-optimization-contract.js +32 -0
  555. package/dist/senses/shared-turn.js +772 -0
  556. package/dist/senses/surface-tool.js +109 -0
  557. package/dist/senses/teams-entry.js +60 -8
  558. package/dist/senses/teams.js +519 -218
  559. package/dist/senses/telegram-admission.js +718 -0
  560. package/dist/senses/telegram-approval-runtime.js +793 -0
  561. package/dist/senses/telegram-attachments.js +186 -0
  562. package/dist/senses/telegram-audit-ledger.js +220 -0
  563. package/dist/senses/telegram-authority-transport.js +231 -0
  564. package/dist/senses/telegram-client.js +1717 -0
  565. package/dist/senses/telegram-effect-adapter.js +896 -0
  566. package/dist/senses/telegram-entry.js +83 -0
  567. package/dist/senses/telegram.js +2324 -0
  568. package/dist/senses/trust-gate.js +104 -9
  569. package/dist/senses/voice/audio-playback.js +237 -0
  570. package/dist/senses/voice/audio-routing.js +119 -0
  571. package/dist/senses/voice/elevenlabs.js +202 -0
  572. package/dist/senses/voice/floor-control.js +431 -0
  573. package/dist/senses/voice/floor-controller.js +115 -0
  574. package/dist/senses/voice/golden-path.js +116 -0
  575. package/dist/senses/voice/index.js +29 -0
  576. package/dist/senses/voice/meeting.js +113 -0
  577. package/dist/senses/voice/outbound.js +190 -0
  578. package/dist/senses/voice/phone.js +33 -0
  579. package/dist/senses/voice/playback.js +139 -0
  580. package/dist/senses/voice/realtime-eval.js +496 -0
  581. package/dist/senses/voice/realtime-trace.js +531 -0
  582. package/dist/senses/voice/transcript.js +70 -0
  583. package/dist/senses/voice/turn.js +191 -0
  584. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  585. package/dist/senses/voice/twilio-phone.js +5031 -0
  586. package/dist/senses/voice/types.js +2 -0
  587. package/dist/senses/voice/whisper.js +161 -0
  588. package/dist/senses/voice-entry.js +81 -0
  589. package/dist/senses/voice-realtime-eval-command.js +99 -0
  590. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  591. package/dist/senses/voice-twilio-entry.js +87 -0
  592. package/dist/trips/core.js +138 -0
  593. package/dist/trips/store.js +265 -0
  594. package/dist/util/frontmatter.js +69 -0
  595. package/npm-shrinkwrap.json +8138 -0
  596. package/package.json +72 -13
  597. package/skills/agent-commerce.md +113 -0
  598. package/skills/browser-navigation.md +117 -0
  599. package/skills/commerce-setup-guide.md +116 -0
  600. package/skills/commerce-setup.md +84 -0
  601. package/skills/configure-dev-tools.md +99 -0
  602. package/skills/travel-planning.md +138 -0
  603. package/dist/heart/daemon/auth-flow.js +0 -430
  604. package/dist/heart/daemon/ouro-path-installer.js +0 -260
  605. package/dist/heart/daemon/ouro-version-manager.js +0 -171
  606. package/dist/heart/daemon/update-hooks.js +0 -138
  607. package/dist/heart/obligations.js +0 -191
  608. package/dist/heart/safe-workspace.js +0 -228
  609. package/dist/heart/session-recall.js +0 -116
  610. package/dist/mind/friends/channel.js +0 -84
  611. package/dist/mind/friends/group-context.js +0 -144
  612. package/dist/mind/friends/resolver.js +0 -84
  613. package/dist/mind/friends/store-file.js +0 -190
  614. package/dist/mind/friends/store.js +0 -4
  615. package/dist/mind/friends/tokens.js +0 -26
  616. package/dist/mind/friends/trust-explanation.js +0 -74
  617. package/dist/mind/friends/types.js +0 -29
  618. package/dist/repertoire/tasks/board.js +0 -134
  619. package/dist/repertoire/tasks/index.js +0 -224
  620. package/dist/repertoire/tasks/lifecycle.js +0 -80
  621. package/dist/repertoire/tasks/middleware.js +0 -65
  622. package/dist/repertoire/tasks/parser.js +0 -173
  623. package/dist/repertoire/tasks/scanner.js +0 -132
  624. package/dist/repertoire/tasks/transitions.js +0 -144
  625. package/dist/senses/bluebubbles-entry.js +0 -13
  626. package/dist/senses/bluebubbles.js +0 -1181
  627. package/dist/senses/debug-activity.js +0 -154
  628. package/dist/senses/inner-dialog-worker.js +0 -90
  629. package/dist/senses/inner-dialog.js +0 -525
  630. package/subagents/README.md +0 -7
  631. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  632. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  633. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  634. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  635. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  636. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  637. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  638. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  639. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  640. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  641. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  642. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  643. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  644. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  645. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  646. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  647. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,630 @@
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.SocketSanctuaryTelegramAuthorityClient = exports.SanctuaryTelegramAuthorityService = void 0;
37
+ exports.createSanctuaryTelegramAuthorityServer = createSanctuaryTelegramAuthorityServer;
38
+ const fs = __importStar(require("node:fs"));
39
+ const net = __importStar(require("node:net"));
40
+ const path = __importStar(require("node:path"));
41
+ const telegram_effect_adapter_1 = require("../../senses/telegram-effect-adapter");
42
+ const frontend_socket_client_1 = require("../frontend-socket-client");
43
+ const sanctuary_authority_codec_1 = require("./sanctuary-authority-codec");
44
+ const runtime_1 = require("../../nerves/runtime");
45
+ const PROTOCOL_VERSION = 1;
46
+ const DEFAULT_MAX_REQUEST_BYTES = 256 * 1024;
47
+ const DEFAULT_CONNECTION_TIMEOUT_MS = 65_000;
48
+ const MAX_TELEGRAM_ATTACHMENT_BYTES = 20_000_000;
49
+ const SAFE_TELEGRAM_FILE_PATH = /^(?!\/)(?!.*(?:^|\/)\.\.(?:\/|$))[A-Za-z0-9._/-]{1,512}$/u;
50
+ function isObject(value) {
51
+ return typeof value === "object" && value !== null && !Array.isArray(value);
52
+ }
53
+ function exactKeys(value, keys) {
54
+ const actual = Object.keys(value).sort();
55
+ const expected = [...keys].sort();
56
+ return actual.length === expected.length && actual.every((key, index) => key === expected[index]);
57
+ }
58
+ function emptyParams(value) {
59
+ return isObject(value) && Object.keys(value).length === 0;
60
+ }
61
+ function exactBody(value, required, optional = []) {
62
+ if (!isObject(value))
63
+ return false;
64
+ const keys = Object.keys(value);
65
+ return required.every((key) => keys.includes(key))
66
+ && keys.every((key) => required.includes(key) || optional.includes(key));
67
+ }
68
+ function boundedText(value, maxLength) {
69
+ return typeof value === "string" && value.length > 0 && value.length <= maxLength;
70
+ }
71
+ class SanctuaryTelegramAuthorityService {
72
+ #api;
73
+ #gateway;
74
+ #downloadFile;
75
+ #hostAuthority;
76
+ #hostExecutor;
77
+ #allowedFilePaths = new Set();
78
+ #hostExecutions = new Map();
79
+ #hostExecutionFailures = new Map();
80
+ #hostMaintenanceFailures = new Map();
81
+ constructor(options) {
82
+ this.#api = {
83
+ request: (method, body) => options.api.request(method, body, AbortSignal.timeout(method === "getUpdates" ? 60_000 : 15_000)),
84
+ };
85
+ this.#gateway = options.gateway;
86
+ this.#hostAuthority = options.hostAuthority;
87
+ this.#hostExecutor = options.hostExecutor;
88
+ this.#downloadFile = options.downloadFile;
89
+ }
90
+ async drainHostExecutions() {
91
+ await Promise.allSettled(this.#hostExecutions.values());
92
+ }
93
+ #hostReady() {
94
+ return this.#hostExecutor !== undefined && (this.#hostExecutor.isHealthy?.() ?? true);
95
+ }
96
+ async dispatch(method, params) {
97
+ (0, runtime_1.emitNervesEvent)({ component: "daemon", event: "daemon.sanctuary_authority_request_received", message: "Sanctuary authority protocol request received; validation pending" });
98
+ if (this.#hostAuthority) {
99
+ for (const registrationId of this.#hostAuthority.expireRegistrations()) {
100
+ await this.#maintainHostCard(registrationId);
101
+ }
102
+ }
103
+ if (method === "telegram.poll") {
104
+ if (!emptyParams(params))
105
+ throw new Error("Sanctuary Telegram poll params are invalid");
106
+ const updates = await this.#api.request("getUpdates", {
107
+ offset: this.#gateway.cursor(),
108
+ timeout: 50,
109
+ allowed_updates: ["message", "callback_query"],
110
+ });
111
+ if (!Array.isArray(updates))
112
+ throw new Error("Sanctuary Telegram poll result must be an array");
113
+ this.#gateway.capture(updates);
114
+ const observation = this.#gateway.poll();
115
+ if (!observation)
116
+ return null;
117
+ const record = this.#gateway.record(observation.payload.updateId);
118
+ if (!record || record.disposition !== "dispatch") {
119
+ throw new Error("Sanctuary Telegram pending observation state is unavailable");
120
+ }
121
+ const callback = record.rawUpdate.callback_query;
122
+ let hostCallback = null;
123
+ if (callback && callback.message && this.#hostAuthority) {
124
+ hostCallback = this.#hostAuthority.claimCallback({
125
+ callbackQueryId: callback.id,
126
+ callbackData: callback.data ?? "",
127
+ telegramMessageId: callback.message.message_id,
128
+ userId: String(callback.from.id),
129
+ chatId: String(callback.message.chat.id),
130
+ callbackObservationDigest: (0, sanctuary_authority_codec_1.authorityArtifactDigest)(observation.domain, observation.payload),
131
+ decidedAt: observation.payload.observedAt,
132
+ });
133
+ if (hostCallback)
134
+ await this.#maintainHostCard(hostCallback.payload.registrationId);
135
+ }
136
+ return {
137
+ observation, update: record.deliveryUpdate ?? record.rawUpdate,
138
+ ...(hostCallback ? {
139
+ hostClaimed: true, hostCallback,
140
+ ...(hostCallback.payload.decision ? { hostDecision: hostCallback.payload.decision } : {}),
141
+ } : {}),
142
+ };
143
+ }
144
+ if (method === "telegram.settle") {
145
+ this.#gateway.settle(params);
146
+ return { settled: true, cursor: this.#gateway.cursor() };
147
+ }
148
+ if (method === "telegram.cursor") {
149
+ if (!emptyParams(params))
150
+ throw new Error("Sanctuary Telegram cursor params are invalid");
151
+ return { cursor: this.#gateway.cursor() };
152
+ }
153
+ if (method === "telegram.cursor.snapshot") {
154
+ if (!emptyParams(params))
155
+ throw new Error("Sanctuary Telegram cursor snapshot params are invalid");
156
+ return this.#gateway.cursorSnapshot();
157
+ }
158
+ if (method === "telegram.chat.admit") {
159
+ this.#gateway.admitChat(params);
160
+ return { admitted: true };
161
+ }
162
+ if (method === "telegram.chat.revoke") {
163
+ this.#gateway.revokeChat(params);
164
+ return { revoked: true };
165
+ }
166
+ if (method === "telegram.request") {
167
+ if ((!exactKeys(params, ["method", "body"]) && !exactKeys(params, ["method", "body", "observation"]))
168
+ || typeof params.method !== "string") {
169
+ throw new Error("Sanctuary Telegram request params are invalid");
170
+ }
171
+ const requestMethod = params.method;
172
+ const body = params.body;
173
+ const ownerChatId = this.#gateway.identity().ownerChatId;
174
+ if (requestMethod === "getMe") {
175
+ if (!emptyParams(body))
176
+ throw new Error("Sanctuary Telegram getMe body is invalid");
177
+ }
178
+ else if (requestMethod === "sendMessage") {
179
+ if (!exactBody(body, ["chat_id", "text"], ["parse_mode", "reply_markup"])) {
180
+ throw new Error("Sanctuary Telegram send body is invalid");
181
+ }
182
+ if (!boundedText(body.text, 4_096)
183
+ || (body.parse_mode !== undefined && body.parse_mode !== "HTML")
184
+ || (body.reply_markup !== undefined && !isObject(body.reply_markup))) {
185
+ throw new Error("Sanctuary Telegram send body is invalid");
186
+ }
187
+ const chatId = String(body.chat_id);
188
+ if (this.#hostAuthority?.ownsPrompt(body.text)
189
+ || (chatId === ownerChatId && body.reply_markup !== undefined && this.#hostAuthority?.ownerMutationFrozen())
190
+ || (body.reply_markup !== undefined && this.#replyMarkupContainsHostHandle(body.reply_markup))) {
191
+ throw new Error("Sanctuary Telegram host approval content is root-owned");
192
+ }
193
+ const observedStrangerAcknowledgement = body.text === telegram_effect_adapter_1.FIXED_ADMISSION_ACKNOWLEDGEMENT
194
+ && body.reply_markup === undefined
195
+ && isObject(params.observation)
196
+ && exactKeys(params.observation, ["updateId", "observationDigest"])
197
+ && this.#gateway.ownsCurrentObservation({
198
+ updateId: params.observation.updateId,
199
+ observationDigest: params.observation.observationDigest,
200
+ chatId,
201
+ });
202
+ if (chatId !== ownerChatId
203
+ && !observedStrangerAcknowledgement
204
+ && !this.#gateway.isAuthorizedChat(chatId)) {
205
+ throw new Error("Sanctuary Telegram send target is invalid");
206
+ }
207
+ }
208
+ else if (requestMethod === "editMessageText") {
209
+ if (!exactBody(body, ["chat_id", "message_id", "text"], ["parse_mode", "reply_markup"])
210
+ || String(body.chat_id) !== ownerChatId) {
211
+ throw new Error("Sanctuary Telegram edit target is invalid");
212
+ }
213
+ if (this.#hostAuthority?.ownsMessage(body.message_id)
214
+ || this.#hostAuthority?.ownerMutationFrozen()
215
+ || this.#hostAuthority?.ownsPrompt(body.text)
216
+ || (body.reply_markup !== undefined && this.#replyMarkupContainsHostHandle(body.reply_markup))) {
217
+ throw new Error("Sanctuary Telegram host approval message is root-owned");
218
+ }
219
+ if (!Number.isSafeInteger(body.message_id)
220
+ || body.message_id <= 0
221
+ || !boundedText(body.text, 4_096)
222
+ || (body.parse_mode !== undefined && body.parse_mode !== "HTML")
223
+ || (body.reply_markup !== undefined && !isObject(body.reply_markup))) {
224
+ throw new Error("Sanctuary Telegram edit body is invalid");
225
+ }
226
+ }
227
+ else if (requestMethod === "answerCallbackQuery") {
228
+ if (!exactBody(body, ["callback_query_id"], ["text", "show_alert"])) {
229
+ throw new Error("Sanctuary Telegram callback body is invalid");
230
+ }
231
+ if (!boundedText(body.callback_query_id, 256)
232
+ || !this.#gateway.ownsCallbackQuery(body.callback_query_id)) {
233
+ throw new Error("Sanctuary Telegram callback is not root-observed");
234
+ }
235
+ if ((body.text !== undefined && !boundedText(body.text, 200))
236
+ || (body.show_alert !== undefined && body.show_alert !== true)) {
237
+ throw new Error("Sanctuary Telegram callback body is invalid");
238
+ }
239
+ }
240
+ else if (requestMethod === "sendChatAction") {
241
+ // A typing indicator is ephemeral and carries no content, so it is admitted
242
+ // for chats the agent may already message — but only as "typing", and only
243
+ // with the two fields that action needs, so it cannot become a side channel.
244
+ if (!exactBody(body, ["chat_id", "action"])) {
245
+ throw new Error("Sanctuary Telegram chat action is invalid");
246
+ }
247
+ if (body.action !== "typing") {
248
+ throw new Error("Sanctuary Telegram chat action is invalid");
249
+ }
250
+ const actionChatId = String(body.chat_id);
251
+ if (actionChatId !== ownerChatId && !this.#gateway.isAuthorizedChat(actionChatId)) {
252
+ throw new Error("Sanctuary Telegram chat action target is invalid");
253
+ }
254
+ }
255
+ else if (requestMethod === "getFile") {
256
+ if (!exactBody(body, ["file_id"]) || !boundedText(body.file_id, 512)) {
257
+ throw new Error("Sanctuary Telegram file body is invalid");
258
+ }
259
+ if (!this.#gateway.ownsFileId(body.file_id)) {
260
+ throw new Error("Sanctuary Telegram file is not root-observed");
261
+ }
262
+ }
263
+ else {
264
+ throw new Error("Sanctuary Telegram request method is not available");
265
+ }
266
+ const result = await this.#api.request(requestMethod, body);
267
+ if (requestMethod === "getFile") {
268
+ if (!isObject(result)
269
+ || typeof result.file_path !== "string"
270
+ || !SAFE_TELEGRAM_FILE_PATH.test(result.file_path)
271
+ || (result.file_size !== undefined
272
+ && (!Number.isSafeInteger(result.file_size)
273
+ || result.file_size < 0
274
+ || result.file_size > MAX_TELEGRAM_ATTACHMENT_BYTES))) {
275
+ throw new Error("Sanctuary Telegram file metadata is invalid");
276
+ }
277
+ this.#allowedFilePaths.add(result.file_path);
278
+ }
279
+ return result;
280
+ }
281
+ if (method === "host.approval") {
282
+ if (!this.#hostAuthority || !this.#hostReady())
283
+ throw new Error("Sanctuary host authority is unavailable");
284
+ if (!exactKeys(params, ["proposal"]))
285
+ throw new Error("Sanctuary host approval params are invalid");
286
+ const prepared = this.#hostAuthority.prepare(params.proposal);
287
+ try {
288
+ const sent = await this.#api.request("sendMessage", {
289
+ chat_id: this.#gateway.identity().ownerChatId,
290
+ text: prepared.prompt,
291
+ parse_mode: "HTML",
292
+ reply_markup: prepared.replyMarkup,
293
+ });
294
+ if (!isObject(sent) || !Number.isSafeInteger(sent.message_id) || sent.message_id <= 0) {
295
+ throw new Error("Sanctuary host approval message result is invalid");
296
+ }
297
+ const registration = this.#hostAuthority.commit({
298
+ registrationId: prepared.registrationId,
299
+ telegramMessageId: sent.message_id,
300
+ });
301
+ return {
302
+ registration,
303
+ registrationId: prepared.registrationId,
304
+ telegramMessageId: sent.message_id,
305
+ expiresAt: prepared.expiresAt,
306
+ };
307
+ }
308
+ catch (error) {
309
+ this.#hostAuthority.reconcilePrepared();
310
+ throw error;
311
+ }
312
+ }
313
+ if (method === "host.status") {
314
+ if (!this.#hostAuthority)
315
+ throw new Error("Sanctuary host authority is unavailable");
316
+ if (!exactKeys(params, ["registrationId"]) || (params.registrationId !== null && typeof params.registrationId !== "string")) {
317
+ throw new Error("Sanctuary host status params are invalid");
318
+ }
319
+ if (params.registrationId === null) {
320
+ this.#gateway.cursorSnapshot();
321
+ const identity = await this.#api.request("getMe", {});
322
+ if (!isObject(identity) || String(identity.id) !== this.#gateway.identity().botId)
323
+ throw new Error("Sanctuary Telegram authority bot identity is invalid");
324
+ return { health: this.#hostAuthority.attestStatus(this.#hostReady() && !this.#hostAuthority.ownerMutationFrozen()) };
325
+ }
326
+ let status = this.#hostAuthority.status(params.registrationId);
327
+ if (!status)
328
+ return null;
329
+ if (status.state === "executed") {
330
+ try {
331
+ if (!isObject(status.receipt)
332
+ || status.receipt.schemaVersion !== 1
333
+ || typeof status.receipt.domain !== "string"
334
+ || typeof status.receipt.keyId !== "string"
335
+ || typeof status.receipt.signature !== "string"
336
+ || !isObject(status.receipt.payload)) {
337
+ throw new Error("Sanctuary host terminal receipt is invalid");
338
+ }
339
+ const terminalReceipt = {
340
+ schemaVersion: 1,
341
+ domain: status.receipt.domain,
342
+ keyId: status.receipt.keyId,
343
+ signature: status.receipt.signature,
344
+ payload: status.receipt.payload,
345
+ };
346
+ await this.#completeHostMaintenance(params.registrationId, terminalReceipt);
347
+ this.#hostMaintenanceFailures.delete(params.registrationId);
348
+ status = this.#hostAuthority.status(params.registrationId);
349
+ }
350
+ catch {
351
+ this.#hostMaintenanceFailures.set(params.registrationId, "Sanctuary host terminal cleanup is pending");
352
+ }
353
+ }
354
+ else {
355
+ await this.#maintainHostCard(params.registrationId);
356
+ status = this.#hostAuthority.status(params.registrationId);
357
+ }
358
+ const result = {
359
+ ...status,
360
+ execution: this.#hostExecutions.has(params.registrationId)
361
+ ? "running"
362
+ : this.#hostExecutionFailures.has(params.registrationId)
363
+ ? "reconciliation_required"
364
+ : status.state === "permitted"
365
+ ? "reconciliation_required"
366
+ : "terminal",
367
+ ...(this.#hostExecutionFailures.has(params.registrationId)
368
+ ? { executionError: this.#hostExecutionFailures.get(params.registrationId) }
369
+ : {}),
370
+ ...(this.#hostMaintenanceFailures.has(params.registrationId)
371
+ ? { maintenanceError: this.#hostMaintenanceFailures.get(params.registrationId) }
372
+ : {}),
373
+ };
374
+ return { ...result, authority: this.#hostAuthority.attestStatus(result) };
375
+ }
376
+ if (method === "host.execute") {
377
+ if (!this.#hostAuthority || !this.#hostReady())
378
+ throw new Error("Sanctuary host execution is unavailable");
379
+ if (!exactKeys(params, ["correlation"]) || !isObject(params.correlation)) {
380
+ throw new Error("Sanctuary host execution params are invalid");
381
+ }
382
+ const permit = this.#hostAuthority.issuePermit(params.correlation);
383
+ const registrationId = params.correlation.registrationId;
384
+ const execution = this.#completeHostExecution(registrationId, permit);
385
+ this.#hostExecutions.set(registrationId, execution);
386
+ void execution.finally(() => this.#hostExecutions.delete(registrationId)).catch(() => undefined);
387
+ return {
388
+ registrationId,
389
+ permitId: permit.payload.permitId,
390
+ state: "executing",
391
+ };
392
+ }
393
+ if (method === "telegram.file") {
394
+ if (!exactKeys(params, ["filePath"])
395
+ || typeof params.filePath !== "string"
396
+ || !SAFE_TELEGRAM_FILE_PATH.test(params.filePath)
397
+ || !this.#allowedFilePaths.has(params.filePath)) {
398
+ throw new Error("Sanctuary Telegram file path is not root-observed");
399
+ }
400
+ if (!this.#downloadFile)
401
+ throw new Error("Sanctuary Telegram file transport is unavailable");
402
+ const result = await this.#downloadFile(params.filePath);
403
+ if (!Buffer.isBuffer(result.body)
404
+ || result.body.length > MAX_TELEGRAM_ATTACHMENT_BYTES
405
+ || (result.contentType !== undefined && !boundedText(result.contentType, 256))) {
406
+ throw new Error("Sanctuary Telegram file response is invalid");
407
+ }
408
+ return {
409
+ bodyBase64: result.body.toString("base64"),
410
+ ...(result.contentType ? { contentType: result.contentType } : {}),
411
+ };
412
+ }
413
+ throw new Error("Sanctuary authority method is not available");
414
+ }
415
+ #replyMarkupContainsHostHandle(value) {
416
+ if (typeof value === "string")
417
+ return this.#hostAuthority?.ownsHandle(value) ?? false;
418
+ if (Array.isArray(value))
419
+ return value.some((entry) => this.#replyMarkupContainsHostHandle(entry));
420
+ if (!isObject(value))
421
+ return false;
422
+ return Object.values(value).some((entry) => this.#replyMarkupContainsHostHandle(entry));
423
+ }
424
+ async #flushHostCard(registrationId) {
425
+ const hostAuthority = this.#hostAuthority;
426
+ const pending = hostAuthority.pendingCardEdit(registrationId);
427
+ if (!pending)
428
+ return;
429
+ await this.#api.request("editMessageText", {
430
+ chat_id: this.#gateway.identity().ownerChatId,
431
+ message_id: pending.telegramMessageId,
432
+ text: pending.text,
433
+ parse_mode: "HTML",
434
+ reply_markup: { inline_keyboard: [] },
435
+ });
436
+ hostAuthority.markCardEdited(registrationId, pending.revision);
437
+ }
438
+ async #maintainHostCard(registrationId) {
439
+ try {
440
+ await this.#flushHostCard(registrationId);
441
+ this.#hostMaintenanceFailures.delete(registrationId);
442
+ }
443
+ catch {
444
+ this.#hostMaintenanceFailures.set(registrationId, "Sanctuary host terminal cleanup is pending");
445
+ }
446
+ }
447
+ async #completeHostExecution(registrationId, permit) {
448
+ let receipt;
449
+ try {
450
+ receipt = await this.#hostExecutor.execute(permit);
451
+ this.#hostAuthority.completeExecution(registrationId, receipt);
452
+ this.#hostExecutionFailures.delete(registrationId);
453
+ }
454
+ catch (error) {
455
+ this.#hostExecutionFailures.set(registrationId, "Sanctuary host execution failed");
456
+ throw error;
457
+ }
458
+ try {
459
+ await this.#completeHostMaintenance(registrationId, receipt);
460
+ this.#hostMaintenanceFailures.delete(registrationId);
461
+ }
462
+ catch {
463
+ this.#hostMaintenanceFailures.set(registrationId, "Sanctuary host terminal cleanup is pending");
464
+ }
465
+ }
466
+ async #completeHostMaintenance(registrationId, receipt) {
467
+ this.#hostExecutor.acknowledge?.(String(receipt.payload.permitId));
468
+ await this.#flushHostCard(registrationId);
469
+ }
470
+ }
471
+ exports.SanctuaryTelegramAuthorityService = SanctuaryTelegramAuthorityService;
472
+ function createSanctuaryTelegramAuthorityServer(options) {
473
+ if (!path.isAbsolute(options.socketPath))
474
+ throw new Error("Sanctuary authority socket path must be absolute");
475
+ const maxRequestBytes = options.maxRequestBytes ?? DEFAULT_MAX_REQUEST_BYTES;
476
+ if (!Number.isSafeInteger(maxRequestBytes) || maxRequestBytes < 128) {
477
+ throw new Error("Sanctuary authority request limit is invalid");
478
+ }
479
+ const connectionTimeoutMs = options.connectionTimeoutMs ?? DEFAULT_CONNECTION_TIMEOUT_MS;
480
+ if (!Number.isSafeInteger(connectionTimeoutMs) || connectionTimeoutMs < 1) {
481
+ throw new Error("Sanctuary authority connection timeout is invalid");
482
+ }
483
+ const connections = new Set();
484
+ let dispatchTail = Promise.resolve();
485
+ const server = net.createServer({ allowHalfOpen: true }, (connection) => {
486
+ connections.add(connection);
487
+ connection.setEncoding("utf8");
488
+ connection.setTimeout(connectionTimeoutMs, () => connection.destroy());
489
+ connection.once("close", () => connections.delete(connection));
490
+ let buffer = "";
491
+ connection.on("data", (chunk) => {
492
+ buffer += chunk;
493
+ if (Buffer.byteLength(buffer) > maxRequestBytes) {
494
+ connection.end(`${JSON.stringify({
495
+ protocolVersion: PROTOCOL_VERSION,
496
+ id: null,
497
+ ok: false,
498
+ error: { message: "Sanctuary authority request is too large" },
499
+ })}\n`);
500
+ return;
501
+ }
502
+ for (;;) {
503
+ const newline = buffer.indexOf("\n");
504
+ if (newline < 0)
505
+ break;
506
+ const line = buffer.slice(0, newline);
507
+ buffer = buffer.slice(newline + 1);
508
+ if (!line.trim())
509
+ continue;
510
+ let request;
511
+ try {
512
+ request = JSON.parse(line);
513
+ }
514
+ catch {
515
+ connection.end(`${JSON.stringify({
516
+ protocolVersion: PROTOCOL_VERSION,
517
+ id: null,
518
+ ok: false,
519
+ error: { message: "Sanctuary authority request failed" },
520
+ })}\n`);
521
+ return;
522
+ }
523
+ const frame = request;
524
+ if (!isObject(frame)
525
+ || !exactKeys(frame, ["protocolVersion", "id", "method", "params"])
526
+ || frame.protocolVersion !== PROTOCOL_VERSION
527
+ || typeof frame.id !== "string"
528
+ || frame.id.length === 0
529
+ || typeof frame.method !== "string"
530
+ || frame.method.length === 0
531
+ || !isObject(frame.params)) {
532
+ connection.end(`${JSON.stringify({
533
+ protocolVersion: PROTOCOL_VERSION,
534
+ id: isObject(frame) && typeof frame.id === "string" ? frame.id : null,
535
+ ok: false,
536
+ error: { message: "Sanctuary authority request failed" },
537
+ })}\n`);
538
+ return;
539
+ }
540
+ const response = dispatchTail.then(async () => {
541
+ try {
542
+ const result = await options.dispatch(frame.method, frame.params);
543
+ connection.write(`${JSON.stringify({
544
+ protocolVersion: PROTOCOL_VERSION,
545
+ id: frame.id,
546
+ ok: true,
547
+ result,
548
+ })}\n`);
549
+ }
550
+ catch {
551
+ connection.write(`${JSON.stringify({
552
+ protocolVersion: PROTOCOL_VERSION,
553
+ id: frame.id,
554
+ ok: false,
555
+ error: { message: "Sanctuary authority request failed" },
556
+ })}\n`);
557
+ }
558
+ });
559
+ dispatchTail = response;
560
+ }
561
+ });
562
+ });
563
+ return {
564
+ listen: () => new Promise((resolve, reject) => {
565
+ const directory = path.dirname(options.socketPath);
566
+ if (fs.existsSync(directory)) {
567
+ const directoryStat = fs.lstatSync(directory);
568
+ if (!directoryStat.isDirectory() || directoryStat.isSymbolicLink()) {
569
+ throw new Error("Sanctuary authority socket directory is unsafe");
570
+ }
571
+ }
572
+ else {
573
+ fs.mkdirSync(directory, { recursive: true, mode: 0o700 });
574
+ }
575
+ if (fs.existsSync(options.socketPath)) {
576
+ const socketStat = fs.lstatSync(options.socketPath);
577
+ /* v8 ignore next -- the valid stale-socket branch is exercised by the deployment restart fixture @preserve */
578
+ if (!socketStat.isSocket()) {
579
+ throw new Error("Sanctuary authority socket path is unsafe");
580
+ }
581
+ /* v8 ignore next -- stale Unix-socket inode cleanup is exercised by the deployment restart fixture @preserve */
582
+ fs.unlinkSync(options.socketPath);
583
+ }
584
+ server.once("error", reject);
585
+ server.listen(options.socketPath, () => {
586
+ server.removeListener("error", reject);
587
+ fs.chmodSync(options.socketPath, 0o660);
588
+ resolve();
589
+ });
590
+ }),
591
+ close: async () => {
592
+ for (const connection of connections)
593
+ connection.destroy();
594
+ await dispatchTail;
595
+ await new Promise((resolve, reject) => {
596
+ server.close((error) => error ? reject(error) : resolve());
597
+ });
598
+ /* v8 ignore start -- Node removes the bound Unix socket on ordinary close; changed-path cleanup is a live race defense @preserve */
599
+ if (fs.existsSync(options.socketPath)) {
600
+ const socketStat = fs.lstatSync(options.socketPath);
601
+ if (!socketStat.isSocket()) {
602
+ throw new Error("Sanctuary authority socket path changed before cleanup");
603
+ }
604
+ fs.unlinkSync(options.socketPath);
605
+ }
606
+ /* v8 ignore stop */
607
+ },
608
+ };
609
+ }
610
+ class SocketSanctuaryTelegramAuthorityClient {
611
+ #client;
612
+ constructor(socketPath) {
613
+ if (!path.isAbsolute(socketPath))
614
+ throw new Error("Sanctuary authority socket path must be absolute");
615
+ this.#client = new frontend_socket_client_1.SocketFrontendClient(socketPath);
616
+ }
617
+ request(method, params) {
618
+ if (typeof method !== "string" || method.length === 0) {
619
+ return Promise.reject(new Error("Sanctuary authority method is invalid"));
620
+ }
621
+ if (!isObject(params)) {
622
+ return Promise.reject(new Error("Sanctuary authority params are invalid"));
623
+ }
624
+ return this.#client.request(method, params);
625
+ }
626
+ close() {
627
+ this.#client.close();
628
+ }
629
+ }
630
+ exports.SocketSanctuaryTelegramAuthorityClient = SocketSanctuaryTelegramAuthorityClient;