@ouro.bot/cli 0.1.0-alpha.70 → 0.1.0-alpha.701

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 (501) hide show
  1. package/README.md +133 -23
  2. package/RepairGuide.ouro/agent.json +5 -0
  3. package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
  4. package/RepairGuide.ouro/psyche/SOUL.md +55 -0
  5. package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
  6. package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
  7. package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
  8. package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
  9. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
  10. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  12. package/changelog.json +4461 -14
  13. package/dist/a2a/card.js +57 -0
  14. package/dist/a2a/client.js +180 -0
  15. package/dist/a2a/config.js +50 -0
  16. package/dist/a2a/delegation-stores.js +56 -0
  17. package/dist/a2a/did-resolution.js +93 -0
  18. package/dist/a2a/identity.js +170 -0
  19. package/dist/a2a/inbound-share.js +107 -0
  20. package/dist/a2a/mission-result-wire.js +196 -0
  21. package/dist/a2a/onboarding.js +115 -0
  22. package/dist/a2a/pin-store.js +132 -0
  23. package/dist/a2a/seen-ledger.js +120 -0
  24. package/dist/a2a/server.js +604 -0
  25. package/dist/a2a/task-store.js +69 -0
  26. package/dist/a2a/transport.js +45 -0
  27. package/dist/a2a/types.js +3 -0
  28. package/dist/arc/attention-types.js +8 -0
  29. package/dist/arc/cares.js +144 -0
  30. package/dist/arc/episodes.js +118 -0
  31. package/dist/arc/evolution.js +490 -0
  32. package/dist/arc/flight-recorder.js +928 -0
  33. package/dist/arc/intentions.js +134 -0
  34. package/dist/arc/json-store.js +117 -0
  35. package/dist/arc/obligations.js +348 -0
  36. package/dist/arc/packets.js +336 -0
  37. package/dist/arc/presence.js +185 -0
  38. package/dist/arc/task-lifecycle.js +57 -0
  39. package/dist/commerce/store.js +755 -0
  40. package/dist/commerce/types.js +3 -0
  41. package/dist/heart/active-work.js +867 -43
  42. package/dist/heart/agent-entry.js +190 -3
  43. package/dist/heart/attachments/image-normalize.js +194 -0
  44. package/dist/heart/attachments/materialize.js +97 -0
  45. package/dist/heart/attachments/originals.js +88 -0
  46. package/dist/heart/attachments/render.js +29 -0
  47. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  48. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  49. package/dist/heart/attachments/sources/index.js +16 -0
  50. package/dist/heart/attachments/store.js +103 -0
  51. package/dist/heart/attachments/types.js +93 -0
  52. package/dist/heart/auth/auth-flow.js +479 -0
  53. package/dist/heart/autonomy-budget.js +434 -0
  54. package/dist/heart/awaiting/await-alert.js +146 -0
  55. package/dist/heart/awaiting/await-expiry.js +108 -0
  56. package/dist/heart/awaiting/await-loader.js +91 -0
  57. package/dist/heart/awaiting/await-parser.js +141 -0
  58. package/dist/heart/awaiting/await-runtime-state.js +100 -0
  59. package/dist/heart/awaiting/await-scheduler.js +378 -0
  60. package/dist/heart/background-operations.js +281 -0
  61. package/dist/heart/bridges/manager.js +137 -17
  62. package/dist/heart/bridges/store.js +14 -2
  63. package/dist/heart/bundle-state.js +168 -0
  64. package/dist/heart/commitments.js +135 -0
  65. package/dist/heart/config-registry.js +331 -0
  66. package/dist/heart/config.js +119 -127
  67. package/dist/heart/context-loss-gauntlet.js +354 -0
  68. package/dist/heart/context-loss-sentinel.js +1155 -0
  69. package/dist/heart/core.js +1306 -278
  70. package/dist/heart/cross-chat-delivery.js +8 -22
  71. package/dist/heart/daemon/agent-config-check.js +451 -0
  72. package/dist/heart/daemon/agent-discovery.js +185 -3
  73. package/dist/heart/daemon/agent-service.js +523 -0
  74. package/dist/heart/daemon/agentic-repair.js +547 -0
  75. package/dist/heart/daemon/await-private-wake.js +59 -0
  76. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  77. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  78. package/dist/heart/daemon/cadence.js +180 -0
  79. package/dist/heart/daemon/cli-defaults.js +825 -0
  80. package/dist/heart/daemon/cli-desk.js +322 -0
  81. package/dist/heart/daemon/cli-exec.js +8142 -0
  82. package/dist/heart/daemon/cli-help.js +675 -0
  83. package/dist/heart/daemon/cli-parse.js +2461 -0
  84. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  85. package/dist/heart/daemon/cli-render.js +770 -0
  86. package/dist/heart/daemon/cli-types.js +8 -0
  87. package/dist/heart/daemon/connect-bay.js +323 -0
  88. package/dist/heart/daemon/daemon-cli.js +29 -1930
  89. package/dist/heart/daemon/daemon-entry.js +822 -10
  90. package/dist/heart/daemon/daemon-health.js +176 -0
  91. package/dist/heart/daemon/daemon-rollup.js +57 -0
  92. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  93. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  94. package/dist/heart/daemon/daemon.js +1264 -84
  95. package/dist/heart/daemon/dns-workflow.js +394 -0
  96. package/dist/heart/daemon/doctor-types.js +8 -0
  97. package/dist/heart/daemon/doctor.js +1126 -0
  98. package/dist/heart/daemon/habit-private-wake.js +56 -0
  99. package/dist/heart/daemon/health-monitor.js +142 -11
  100. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  101. package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
  102. package/dist/heart/daemon/http-health-probe.js +80 -0
  103. package/dist/heart/daemon/human-command-screens.js +234 -0
  104. package/dist/heart/daemon/human-readiness.js +114 -0
  105. package/dist/heart/daemon/inner-status.js +78 -0
  106. package/dist/heart/daemon/interactive-repair.js +394 -0
  107. package/dist/heart/daemon/launchd.js +37 -8
  108. package/dist/heart/daemon/log-tailer.js +79 -10
  109. package/dist/heart/daemon/logs-prune.js +110 -0
  110. package/dist/heart/daemon/mcp-canary.js +297 -0
  111. package/dist/heart/daemon/message-router.js +45 -5
  112. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  113. package/dist/heart/daemon/os-cron-deps.js +135 -0
  114. package/dist/heart/daemon/os-cron.js +22 -14
  115. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  116. package/dist/heart/daemon/ouro-entry.js +3 -1
  117. package/dist/heart/daemon/plugin-cli.js +432 -0
  118. package/dist/heart/daemon/process-manager.js +519 -40
  119. package/dist/heart/daemon/provider-discovery.js +137 -0
  120. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  121. package/dist/heart/daemon/pulse.js +511 -0
  122. package/dist/heart/daemon/readiness-repair.js +365 -0
  123. package/dist/heart/daemon/run-hooks.js +2 -0
  124. package/dist/heart/daemon/runtime-logging.js +41 -14
  125. package/dist/heart/daemon/runtime-metadata.js +2 -30
  126. package/dist/heart/daemon/safe-mode.js +161 -0
  127. package/dist/heart/daemon/sense-manager.js +670 -48
  128. package/dist/heart/daemon/session-id-resolver.js +131 -0
  129. package/dist/heart/daemon/skill-management-installer.js +1 -1
  130. package/dist/heart/daemon/socket-client.js +171 -12
  131. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  132. package/dist/heart/daemon/startup-tui.js +338 -0
  133. package/dist/heart/daemon/task-scheduler.js +117 -39
  134. package/dist/heart/daemon/terminal-ui.js +499 -0
  135. package/dist/heart/daemon/thoughts.js +255 -43
  136. package/dist/heart/daemon/up-progress.js +366 -0
  137. package/dist/heart/daemon/vault-items.js +56 -0
  138. package/dist/heart/delegation.js +1 -4
  139. package/dist/heart/external-events/router.js +121 -0
  140. package/dist/heart/habits/habit-migration.js +189 -0
  141. package/dist/heart/habits/habit-parser.js +214 -0
  142. package/dist/heart/habits/habit-runtime-state.js +114 -0
  143. package/dist/heart/habits/habit-scheduler.js +431 -0
  144. package/dist/heart/habits/habit-session-summary.js +318 -0
  145. package/dist/heart/habits/habit-session.js +617 -0
  146. package/dist/heart/{daemon → hatch}/hatch-flow.js +51 -60
  147. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  148. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  149. package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
  150. package/dist/heart/identity.js +174 -59
  151. package/dist/heart/kept-notes.js +289 -0
  152. package/dist/heart/kicks.js +1 -1
  153. package/dist/heart/machine-identity.js +161 -0
  154. package/dist/heart/mail-import-discovery.js +353 -0
  155. package/dist/heart/mailbox/mailbox-http-hooks.js +96 -0
  156. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  157. package/dist/heart/mailbox/mailbox-http-routes.js +375 -0
  158. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  159. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  160. package/dist/heart/mailbox/mailbox-http.js +99 -0
  161. package/dist/heart/mailbox/mailbox-read.js +37 -0
  162. package/dist/heart/mailbox/mailbox-types.js +27 -0
  163. package/dist/heart/mailbox/mailbox-view.js +197 -0
  164. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  165. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  166. package/dist/heart/mailbox/readers/mail.js +375 -0
  167. package/dist/heart/mailbox/readers/runtime-readers.js +815 -0
  168. package/dist/heart/mailbox/readers/sessions.js +232 -0
  169. package/dist/heart/mailbox/readers/shared.js +111 -0
  170. package/dist/heart/mcp/mcp-server.js +696 -0
  171. package/dist/heart/migrate-config.js +100 -0
  172. package/dist/heart/model-capabilities.js +11 -0
  173. package/dist/heart/orientation-frame.js +217 -0
  174. package/dist/heart/platform.js +81 -0
  175. package/dist/heart/primitives.js +1 -1
  176. package/dist/heart/private-runtime/decision-renderer.js +156 -0
  177. package/dist/heart/private-runtime/index.js +18 -0
  178. package/dist/heart/private-runtime/ledger.js +218 -0
  179. package/dist/heart/private-runtime/policy.js +214 -0
  180. package/dist/heart/private-runtime/types.js +2 -0
  181. package/dist/heart/progress-story.js +1 -1
  182. package/dist/heart/provider-attempt.js +134 -0
  183. package/dist/heart/provider-binding-resolver.js +273 -0
  184. package/dist/heart/provider-credentials.js +441 -0
  185. package/dist/heart/provider-failover.js +311 -0
  186. package/dist/heart/provider-models.js +81 -0
  187. package/dist/heart/provider-ping.js +262 -0
  188. package/dist/heart/provider-readiness-cache.js +119 -0
  189. package/dist/heart/provider-visibility.js +188 -0
  190. package/dist/heart/providers/anthropic-token.js +131 -0
  191. package/dist/heart/providers/anthropic.js +139 -52
  192. package/dist/heart/providers/azure.js +23 -11
  193. package/dist/heart/providers/error-classification.js +127 -0
  194. package/dist/heart/providers/github-copilot.js +34 -38
  195. package/dist/heart/providers/minimax-vlm.js +189 -0
  196. package/dist/heart/providers/minimax.js +26 -8
  197. package/dist/heart/providers/openai-codex-token.js +349 -0
  198. package/dist/heart/providers/openai-codex.js +55 -40
  199. package/dist/heart/run-ledger.js +247 -0
  200. package/dist/heart/runtime-capability-check.js +170 -0
  201. package/dist/heart/runtime-credentials.js +398 -0
  202. package/dist/heart/runtime-cwd.js +87 -0
  203. package/dist/heart/sense-truth.js +20 -4
  204. package/dist/heart/session-activity.js +90 -24
  205. package/dist/heart/session-events.js +1133 -0
  206. package/dist/heart/session-playback-cli-main.js +5 -0
  207. package/dist/heart/session-playback-cli.js +36 -0
  208. package/dist/heart/session-playback.js +231 -0
  209. package/dist/heart/session-stats-cli-main.js +5 -0
  210. package/dist/heart/session-stats.js +182 -0
  211. package/dist/heart/session-transcript.js +133 -0
  212. package/dist/heart/start-of-turn-packet.js +365 -0
  213. package/dist/heart/streaming.js +44 -27
  214. package/dist/heart/structured-output.js +196 -0
  215. package/dist/heart/sync-classification.js +176 -0
  216. package/dist/heart/sync.js +449 -0
  217. package/dist/heart/target-resolution.js +11 -7
  218. package/dist/heart/tempo.js +93 -0
  219. package/dist/heart/temporal-view.js +41 -0
  220. package/dist/heart/timeouts.js +101 -0
  221. package/dist/heart/tool-activity-callbacks.js +59 -0
  222. package/dist/heart/tool-description.js +155 -0
  223. package/dist/heart/tool-friction.js +55 -0
  224. package/dist/heart/tool-loop.js +200 -0
  225. package/dist/heart/turn-context.js +472 -0
  226. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  227. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  228. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  229. package/dist/heart/versioning/ouro-version-manager.js +409 -0
  230. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  231. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  232. package/dist/heart/versioning/update-hooks.js +154 -0
  233. package/dist/heart/work-card.js +380 -0
  234. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  235. package/dist/mailbox-ui/assets/index-J8zDwHmE.js +1 -0
  236. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  237. package/dist/mailbox-ui/index.html +16 -0
  238. package/dist/mailroom/attention.js +167 -0
  239. package/dist/mailroom/autonomy.js +209 -0
  240. package/dist/mailroom/blob-store.js +715 -0
  241. package/dist/mailroom/body-cache.js +61 -0
  242. package/dist/mailroom/core.js +788 -0
  243. package/dist/mailroom/entry.js +160 -0
  244. package/dist/mailroom/file-store.js +568 -0
  245. package/dist/mailroom/mbox-import.js +393 -0
  246. package/dist/mailroom/migration.js +164 -0
  247. package/dist/mailroom/outbound.js +380 -0
  248. package/dist/mailroom/policy.js +263 -0
  249. package/dist/mailroom/reader.js +233 -0
  250. package/dist/mailroom/search-cache.js +334 -0
  251. package/dist/mailroom/search-relevance.js +319 -0
  252. package/dist/mailroom/smtp-ingress.js +176 -0
  253. package/dist/mailroom/source-state.js +176 -0
  254. package/dist/mailroom/thread.js +109 -0
  255. package/dist/mailroom/travel-extract.js +89 -0
  256. package/dist/mind/bundle-manifest.js +24 -2
  257. package/dist/mind/context.js +250 -101
  258. package/dist/mind/desk-section.js +362 -0
  259. package/dist/mind/diary-integrity.js +60 -0
  260. package/dist/mind/{memory.js → diary.js} +68 -77
  261. package/dist/mind/embedding-provider.js +60 -0
  262. package/dist/mind/file-state.js +179 -0
  263. package/dist/mind/{associative-recall.js → note-search.js} +47 -58
  264. package/dist/mind/obligation-steering.js +221 -0
  265. package/dist/mind/pending.js +13 -8
  266. package/dist/mind/prompt-budget.js +380 -0
  267. package/dist/mind/prompt-refresh.js +3 -2
  268. package/dist/mind/prompt.js +1028 -169
  269. package/dist/mind/provenance-trust.js +26 -0
  270. package/dist/mind/record-paths.js +312 -0
  271. package/dist/mind/scrutiny.js +173 -0
  272. package/dist/nerves/cli-logging.js +7 -1
  273. package/dist/nerves/coverage/audit-rules.js +15 -6
  274. package/dist/nerves/coverage/audit.js +28 -2
  275. package/dist/nerves/coverage/cli.js +1 -1
  276. package/dist/nerves/coverage/contract.js +5 -5
  277. package/dist/nerves/coverage/file-completeness.js +139 -5
  278. package/dist/nerves/event-buffer.js +111 -0
  279. package/dist/nerves/index.js +234 -4
  280. package/dist/nerves/observation.js +20 -0
  281. package/dist/nerves/redact.js +79 -0
  282. package/dist/nerves/review/cli-main.js +5 -0
  283. package/dist/nerves/review/cli.js +156 -0
  284. package/dist/nerves/review/core.js +152 -0
  285. package/dist/nerves/runtime.js +5 -1
  286. package/dist/repertoire/ado-client.js +15 -56
  287. package/dist/repertoire/ado-semantic.js +16 -10
  288. package/dist/repertoire/api-client.js +97 -0
  289. package/dist/repertoire/bitwarden-store.js +1042 -0
  290. package/dist/repertoire/bundle-templates.js +71 -0
  291. package/dist/repertoire/bw-installer.js +180 -0
  292. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  293. package/dist/repertoire/coding/context-pack.js +331 -0
  294. package/dist/repertoire/coding/feedback.js +218 -30
  295. package/dist/repertoire/coding/index.js +15 -3
  296. package/dist/repertoire/coding/manager.js +166 -10
  297. package/dist/repertoire/coding/spawner.js +58 -11
  298. package/dist/repertoire/coding/tools.js +242 -14
  299. package/dist/repertoire/coding/workbench-client.js +272 -0
  300. package/dist/repertoire/coding/workbench-manager.js +346 -0
  301. package/dist/repertoire/commerce-errors.js +109 -0
  302. package/dist/repertoire/commerce-self-test.js +156 -0
  303. package/dist/repertoire/credential-access.js +178 -0
  304. package/dist/repertoire/desk/classifier.js +362 -0
  305. package/dist/repertoire/duffel-client.js +185 -0
  306. package/dist/repertoire/github-client.js +14 -55
  307. package/dist/repertoire/graph-client.js +11 -52
  308. package/dist/repertoire/guardrails.js +156 -27
  309. package/dist/repertoire/mcp-client.js +44 -3
  310. package/dist/repertoire/mcp-manager.js +259 -20
  311. package/dist/repertoire/mcp-tools.js +83 -0
  312. package/dist/repertoire/plugin-mcp.js +175 -0
  313. package/dist/repertoire/plugins.js +253 -0
  314. package/dist/repertoire/shell-sessions.js +133 -0
  315. package/dist/repertoire/skills.js +48 -4
  316. package/dist/repertoire/stripe-client.js +131 -0
  317. package/dist/repertoire/tool-results.js +29 -0
  318. package/dist/repertoire/tools-a2a.js +699 -0
  319. package/dist/repertoire/tools-attachments.js +317 -0
  320. package/dist/repertoire/tools-awaiting.js +372 -0
  321. package/dist/repertoire/tools-base.js +65 -1095
  322. package/dist/repertoire/tools-bluebubbles.js +2 -0
  323. package/dist/repertoire/tools-bridge.js +144 -0
  324. package/dist/repertoire/tools-bundle.js +993 -0
  325. package/dist/repertoire/tools-commerce.js +253 -0
  326. package/dist/repertoire/tools-config.js +186 -0
  327. package/dist/repertoire/tools-continuity.js +252 -0
  328. package/dist/repertoire/tools-credential.js +383 -0
  329. package/dist/repertoire/tools-evolution.js +527 -0
  330. package/dist/repertoire/tools-files.js +344 -0
  331. package/dist/repertoire/tools-flight.js +290 -0
  332. package/dist/repertoire/tools-flow.js +119 -0
  333. package/dist/repertoire/tools-github.js +3 -8
  334. package/dist/repertoire/tools-mail.js +1975 -0
  335. package/dist/repertoire/tools-notes.js +459 -0
  336. package/dist/repertoire/tools-obligations.js +182 -0
  337. package/dist/repertoire/tools-orientation.js +31 -0
  338. package/dist/repertoire/tools-record.js +482 -0
  339. package/dist/repertoire/tools-rsvp.js +139 -0
  340. package/dist/repertoire/tools-runtime.js +150 -0
  341. package/dist/repertoire/tools-session.js +881 -0
  342. package/dist/repertoire/tools-shell.js +120 -0
  343. package/dist/repertoire/tools-stripe.js +224 -0
  344. package/dist/repertoire/tools-surface.js +355 -0
  345. package/dist/repertoire/tools-teams.js +12 -39
  346. package/dist/repertoire/tools-travel.js +125 -0
  347. package/dist/repertoire/tools-trip.js +982 -0
  348. package/dist/repertoire/tools-user-profile.js +146 -0
  349. package/dist/repertoire/tools-vault.js +40 -0
  350. package/dist/repertoire/tools-voice.js +145 -0
  351. package/dist/repertoire/tools.js +250 -80
  352. package/dist/repertoire/travel-api-client.js +360 -0
  353. package/dist/repertoire/user-profile.js +131 -0
  354. package/dist/repertoire/vault-setup.js +246 -0
  355. package/dist/repertoire/vault-unlock.js +594 -0
  356. package/dist/rsvp/aisleplanner-client.js +354 -0
  357. package/dist/rsvp/cli.js +704 -0
  358. package/dist/rsvp/config.js +327 -0
  359. package/dist/rsvp/cutover.js +431 -0
  360. package/dist/rsvp/diagnostics.js +222 -0
  361. package/dist/rsvp/diff-renderer.js +161 -0
  362. package/dist/rsvp/habit-policy.js +85 -0
  363. package/dist/rsvp/habit-stage.js +93 -0
  364. package/dist/rsvp/incident-bundle.js +97 -0
  365. package/dist/rsvp/migration.js +204 -0
  366. package/dist/rsvp/outbound-state.js +254 -0
  367. package/dist/rsvp/query.js +118 -0
  368. package/dist/rsvp/replay.js +233 -0
  369. package/dist/rsvp/snapshot.js +232 -0
  370. package/dist/scripts/claude-code-hook.js +41 -0
  371. package/dist/scripts/claude-code-stop-hook.js +47 -0
  372. package/dist/senses/a2a-entry.js +115 -0
  373. package/dist/senses/attention-queue.js +186 -0
  374. package/dist/senses/await-turn-message.js +58 -0
  375. package/dist/senses/bluebubbles/active-turns.js +216 -0
  376. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  377. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  378. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +226 -19
  379. package/dist/senses/bluebubbles/entry.js +77 -0
  380. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  381. package/dist/senses/bluebubbles/index.js +2937 -0
  382. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  383. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  384. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  385. package/dist/senses/bluebubbles/outbound-state.js +304 -0
  386. package/dist/senses/bluebubbles/processed-log.js +133 -0
  387. package/dist/senses/bluebubbles/replay.js +284 -0
  388. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  389. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  390. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  391. package/dist/senses/cli/bracketed-paste.js +82 -0
  392. package/dist/senses/cli/image-paste.js +287 -0
  393. package/dist/senses/cli/image-ref-navigation.js +75 -0
  394. package/dist/senses/cli/ink-app.js +156 -0
  395. package/dist/senses/cli/inline-diff.js +64 -0
  396. package/dist/senses/cli/input-keys.js +174 -0
  397. package/dist/senses/cli/kill-ring.js +86 -0
  398. package/dist/senses/cli/message-list.js +51 -0
  399. package/dist/senses/cli/ouro-tui.js +607 -0
  400. package/dist/senses/cli/spinner-imperative.js +135 -0
  401. package/dist/senses/cli/spinner.js +101 -0
  402. package/dist/senses/cli/status-line.js +60 -0
  403. package/dist/senses/cli/streaming-markdown.js +526 -0
  404. package/dist/senses/cli/tool-display.js +85 -0
  405. package/dist/senses/cli/tool-render.js +85 -0
  406. package/dist/senses/cli/tui-store.js +240 -0
  407. package/dist/senses/cli/virtual-list.js +35 -0
  408. package/dist/senses/cli-entry.js +60 -8
  409. package/dist/senses/cli-layout.js +100 -0
  410. package/dist/senses/cli.js +521 -214
  411. package/dist/senses/commands.js +66 -3
  412. package/dist/senses/context-packet-ledger.js +245 -0
  413. package/dist/senses/context-packets.js +154 -0
  414. package/dist/senses/habit-turn-message.js +160 -0
  415. package/dist/senses/mail-entry.js +66 -0
  416. package/dist/senses/mail.js +395 -0
  417. package/dist/senses/pipeline.js +952 -178
  418. package/dist/senses/private-runtime-worker.js +723 -0
  419. package/dist/senses/private-runtime.js +1157 -0
  420. package/dist/senses/proactive-content-guard.js +51 -0
  421. package/dist/senses/shared-turn.js +416 -0
  422. package/dist/senses/surface-tool.js +109 -0
  423. package/dist/senses/teams-entry.js +60 -8
  424. package/dist/senses/teams.js +397 -112
  425. package/dist/senses/trust-gate.js +104 -9
  426. package/dist/senses/voice/audio-playback.js +237 -0
  427. package/dist/senses/voice/audio-routing.js +119 -0
  428. package/dist/senses/voice/elevenlabs.js +202 -0
  429. package/dist/senses/voice/floor-control.js +431 -0
  430. package/dist/senses/voice/floor-controller.js +115 -0
  431. package/dist/senses/voice/golden-path.js +116 -0
  432. package/dist/senses/voice/index.js +29 -0
  433. package/dist/senses/voice/meeting.js +113 -0
  434. package/dist/senses/voice/outbound.js +190 -0
  435. package/dist/senses/voice/phone.js +33 -0
  436. package/dist/senses/voice/playback.js +139 -0
  437. package/dist/senses/voice/realtime-eval.js +496 -0
  438. package/dist/senses/voice/realtime-trace.js +531 -0
  439. package/dist/senses/voice/transcript.js +70 -0
  440. package/dist/senses/voice/turn.js +191 -0
  441. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  442. package/dist/senses/voice/twilio-phone.js +5081 -0
  443. package/dist/senses/voice/types.js +2 -0
  444. package/dist/senses/voice/whisper.js +161 -0
  445. package/dist/senses/voice-entry.js +81 -0
  446. package/dist/senses/voice-realtime-eval-command.js +99 -0
  447. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  448. package/dist/senses/voice-twilio-entry.js +87 -0
  449. package/dist/trips/core.js +138 -0
  450. package/dist/trips/store.js +265 -0
  451. package/dist/util/frontmatter.js +69 -0
  452. package/package.json +57 -12
  453. package/skills/agent-commerce.md +113 -0
  454. package/skills/browser-navigation.md +117 -0
  455. package/skills/commerce-setup-guide.md +116 -0
  456. package/skills/commerce-setup.md +84 -0
  457. package/skills/configure-dev-tools.md +99 -0
  458. package/skills/travel-planning.md +138 -0
  459. package/dist/heart/daemon/auth-flow.js +0 -409
  460. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  461. package/dist/heart/daemon/update-hooks.js +0 -138
  462. package/dist/heart/safe-workspace.js +0 -228
  463. package/dist/heart/session-recall.js +0 -116
  464. package/dist/mind/friends/channel.js +0 -84
  465. package/dist/mind/friends/group-context.js +0 -144
  466. package/dist/mind/friends/resolver.js +0 -84
  467. package/dist/mind/friends/store-file.js +0 -190
  468. package/dist/mind/friends/store.js +0 -4
  469. package/dist/mind/friends/tokens.js +0 -26
  470. package/dist/mind/friends/trust-explanation.js +0 -74
  471. package/dist/mind/friends/types.js +0 -29
  472. package/dist/repertoire/tasks/board.js +0 -134
  473. package/dist/repertoire/tasks/index.js +0 -224
  474. package/dist/repertoire/tasks/lifecycle.js +0 -80
  475. package/dist/repertoire/tasks/middleware.js +0 -65
  476. package/dist/repertoire/tasks/parser.js +0 -173
  477. package/dist/repertoire/tasks/scanner.js +0 -132
  478. package/dist/repertoire/tasks/transitions.js +0 -144
  479. package/dist/senses/bluebubbles-entry.js +0 -13
  480. package/dist/senses/bluebubbles.js +0 -1180
  481. package/dist/senses/debug-activity.js +0 -148
  482. package/dist/senses/inner-dialog-worker.js +0 -90
  483. package/dist/senses/inner-dialog.js +0 -480
  484. package/subagents/README.md +0 -7
  485. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  486. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  487. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  488. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  489. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  490. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  491. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  492. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  493. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  494. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  495. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  496. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  497. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  498. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  499. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  500. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  501. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.guestDisplayName = guestDisplayName;
4
+ exports.computeRsvpDelta = computeRsvpDelta;
5
+ exports.renderRsvpReport = renderRsvpReport;
6
+ const runtime_1 = require("../nerves/runtime");
7
+ const RSVP_REPORT_FOOTER = "🤖 Beep boop! Automated RSVP update from Slugger — no need to reply here!";
8
+ function byId(left, right) {
9
+ return left.id.localeCompare(right.id);
10
+ }
11
+ function sameGroup(left, right) {
12
+ return left !== null && right !== null && String(left) === String(right);
13
+ }
14
+ function guestDisplayName(guest, peers) {
15
+ if (guest.displayName !== "Unnamed guest")
16
+ return guest.displayName;
17
+ const primary = peers
18
+ .filter((candidate) => candidate.id !== guest.id && candidate.displayName !== "Unnamed guest" && sameGroup(candidate.groupId, guest.groupId))
19
+ .sort(byId)[0];
20
+ return primary ? `Unnamed guest (via ${primary.displayName})` : "Unnamed guest";
21
+ }
22
+ function guestBase(guest, peers) {
23
+ return {
24
+ id: guest.id,
25
+ displayName: guest.displayName,
26
+ contextualDisplayName: guestDisplayName(guest, peers),
27
+ groupId: guest.groupId,
28
+ };
29
+ }
30
+ function mapById(snapshot) {
31
+ return new Map(snapshot.guests.map((guest) => [guest.id, guest]));
32
+ }
33
+ function statusLabel(status) {
34
+ return status;
35
+ }
36
+ function reportName(guest) {
37
+ return guest.contextualDisplayName;
38
+ }
39
+ function summaryLine(summary) {
40
+ const base = `${summary.attending} attending / ${summary.declined} declined / ${summary.pending} pending`;
41
+ return summary.unknown > 0 ? `${base} / ${summary.unknown} unknown` : base;
42
+ }
43
+ function computeRsvpDelta(previous, current) {
44
+ const previousGuests = previous ? mapById(previous) : new Map();
45
+ const currentGuests = mapById(current);
46
+ const newRsvps = [];
47
+ const statusChanges = [];
48
+ const newGuests = [];
49
+ const removedGuests = [];
50
+ for (const currentGuest of current.guests) {
51
+ const previousGuest = previousGuests.get(currentGuest.id);
52
+ if (!previousGuest) {
53
+ newGuests.push({ ...guestBase(currentGuest, current.guests), status: currentGuest.status });
54
+ continue;
55
+ }
56
+ if (previousGuest.status === currentGuest.status)
57
+ continue;
58
+ const changed = {
59
+ ...guestBase(currentGuest, current.guests),
60
+ oldStatus: previousGuest.status,
61
+ newStatus: currentGuest.status,
62
+ };
63
+ if (previousGuest.status === "pending" && (currentGuest.status === "attending" || currentGuest.status === "declined")) {
64
+ newRsvps.push(changed);
65
+ }
66
+ else {
67
+ statusChanges.push(changed);
68
+ }
69
+ }
70
+ if (previous) {
71
+ for (const previousGuest of previous.guests) {
72
+ if (currentGuests.has(previousGuest.id))
73
+ continue;
74
+ removedGuests.push({ ...guestBase(previousGuest, previous.guests), status: previousGuest.status });
75
+ }
76
+ }
77
+ const delta = {
78
+ previousSnapshotId: previous?.snapshotId ?? null,
79
+ currentSnapshotId: current.snapshotId,
80
+ isFirstRun: previous === null,
81
+ newRsvps: newRsvps.sort(byId),
82
+ statusChanges: statusChanges.sort(byId),
83
+ newGuests: newGuests.sort(byId),
84
+ removedGuests: removedGuests.sort(byId),
85
+ summary: current.summary,
86
+ };
87
+ (0, runtime_1.emitNervesEvent)({
88
+ component: "rsvp",
89
+ event: "rsvp.delta_computed",
90
+ message: "computed RSVP snapshot delta",
91
+ meta: {
92
+ currentSnapshotId: current.snapshotId,
93
+ previousSnapshotId: previous?.snapshotId ?? null,
94
+ isFirstRun: previous === null,
95
+ newRsvps: delta.newRsvps.length,
96
+ statusChanges: delta.statusChanges.length,
97
+ newGuests: delta.newGuests.length,
98
+ removedGuests: delta.removedGuests.length,
99
+ },
100
+ });
101
+ return delta;
102
+ }
103
+ function hasChanges(delta) {
104
+ return delta.newRsvps.length > 0
105
+ || delta.statusChanges.length > 0
106
+ || delta.newGuests.length > 0
107
+ || delta.removedGuests.length > 0;
108
+ }
109
+ function renderRsvpReport(delta) {
110
+ const lines = ["RSVP Update — Ari & Rachel", ""];
111
+ if (delta.isFirstRun) {
112
+ lines.push("First check — here's the current summary:", "");
113
+ }
114
+ else if (!hasChanges(delta)) {
115
+ lines.push("No changes since last check.", "");
116
+ }
117
+ else {
118
+ if (delta.newRsvps.length > 0) {
119
+ lines.push("New RSVPs:");
120
+ for (const guest of delta.newRsvps) {
121
+ lines.push(` • ${reportName(guest)} — ${statusLabel(guest.newStatus)}`);
122
+ }
123
+ lines.push("");
124
+ }
125
+ if (delta.statusChanges.length > 0) {
126
+ lines.push("Status changes:");
127
+ for (const guest of delta.statusChanges) {
128
+ lines.push(` • ${reportName(guest)}: ${statusLabel(guest.oldStatus)} → ${statusLabel(guest.newStatus)}`);
129
+ }
130
+ lines.push("");
131
+ }
132
+ if (delta.newGuests.length > 0) {
133
+ lines.push("New guests added:");
134
+ for (const guest of delta.newGuests) {
135
+ lines.push(` • ${reportName(guest)} (${statusLabel(guest.status)})`);
136
+ }
137
+ lines.push("");
138
+ }
139
+ if (delta.removedGuests.length > 0) {
140
+ lines.push("Guests removed:");
141
+ for (const guest of delta.removedGuests) {
142
+ lines.push(` • ${reportName(guest)}`);
143
+ }
144
+ lines.push("");
145
+ }
146
+ }
147
+ lines.push(summaryLine(delta.summary));
148
+ lines.push("", RSVP_REPORT_FOOTER);
149
+ const report = lines.join("\n");
150
+ (0, runtime_1.emitNervesEvent)({
151
+ component: "rsvp",
152
+ event: "rsvp.report_rendered",
153
+ message: "rendered RSVP report",
154
+ meta: {
155
+ currentSnapshotId: delta.currentSnapshotId,
156
+ isFirstRun: delta.isFirstRun,
157
+ characters: report.length,
158
+ },
159
+ });
160
+ return report;
161
+ }
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RSVP_HABIT_ALLOWED_TOOLS = exports.RSVP_HABIT_NAME = exports.RSVP_HABIT_POLICY_VERSION = void 0;
4
+ exports.isRsvpHabitName = isRsvpHabitName;
5
+ exports.parseRsvpHabitMetadata = parseRsvpHabitMetadata;
6
+ exports.rsvpHabitRuntimePolicy = rsvpHabitRuntimePolicy;
7
+ const runtime_1 = require("../nerves/runtime");
8
+ exports.RSVP_HABIT_POLICY_VERSION = "rsvp-habit/v1";
9
+ exports.RSVP_HABIT_NAME = "rsvp-ari-rachel";
10
+ exports.RSVP_HABIT_ALLOWED_TOOLS = ["rsvp_query", "rsvp_summary"];
11
+ function isRecord(value) {
12
+ return !!value && typeof value === "object" && !Array.isArray(value);
13
+ }
14
+ function requiredString(record, key) {
15
+ const value = record[key];
16
+ if (typeof value !== "string" || value.trim().length === 0) {
17
+ throw new Error(`RSVP habit metadata requires ${key}`);
18
+ }
19
+ return value.trim();
20
+ }
21
+ function requiredBoolean(record, key) {
22
+ const value = record[key];
23
+ if (typeof value === "boolean")
24
+ return value;
25
+ if (value === "true")
26
+ return true;
27
+ if (value === "false")
28
+ return false;
29
+ throw new Error(`RSVP habit metadata requires boolean ${key}`);
30
+ }
31
+ function isRsvpHabitName(name) {
32
+ return name === exports.RSVP_HABIT_NAME || name.startsWith("rsvp-");
33
+ }
34
+ function parseRsvpHabitMetadata(raw) {
35
+ if (raw === undefined || raw === null)
36
+ return null;
37
+ if (!isRecord(raw))
38
+ throw new Error("RSVP habit metadata must be an object");
39
+ if (raw.channel !== undefined) {
40
+ throw new Error("RSVP habit metadata requires sense, not channel");
41
+ }
42
+ const policyVersion = requiredString(raw, "policyVersion");
43
+ if (policyVersion !== exports.RSVP_HABIT_POLICY_VERSION)
44
+ throw new Error("RSVP habit metadata has unsupported policyVersion");
45
+ const mode = requiredString(raw, "mode");
46
+ if (mode !== "shadow" && mode !== "live")
47
+ throw new Error("RSVP habit metadata mode must be shadow or live");
48
+ const sense = requiredString(raw, "sense");
49
+ if (sense !== "bluebubbles")
50
+ throw new Error("RSVP habit metadata sense must be bluebubbles");
51
+ const source = requiredString(raw, "source");
52
+ if (source !== "aisleplanner")
53
+ throw new Error("RSVP habit metadata source must be aisleplanner");
54
+ return {
55
+ policyVersion: exports.RSVP_HABIT_POLICY_VERSION,
56
+ mode,
57
+ sense,
58
+ source,
59
+ routeRef: requiredString(raw, "routeRef"),
60
+ snapshotRef: requiredString(raw, "snapshotRef"),
61
+ outboundStateRef: requiredString(raw, "outboundStateRef"),
62
+ budgetRef: requiredString(raw, "budgetRef"),
63
+ idempotencyRef: requiredString(raw, "idempotencyRef"),
64
+ liveSendEligible: requiredBoolean(raw, "liveSendEligible"),
65
+ };
66
+ }
67
+ function rsvpHabitRuntimePolicy(metadata) {
68
+ const policy = {
69
+ ...metadata,
70
+ sendAllowed: metadata.mode === "live" && metadata.liveSendEligible,
71
+ };
72
+ (0, runtime_1.emitNervesEvent)({
73
+ component: "rsvp",
74
+ event: "rsvp.habit_policy_resolved",
75
+ message: "resolved RSVP habit runtime policy",
76
+ meta: {
77
+ mode: metadata.mode,
78
+ sense: metadata.sense,
79
+ source: metadata.source,
80
+ sendAllowed: policy.sendAllowed,
81
+ liveSendEligible: metadata.liveSendEligible,
82
+ },
83
+ });
84
+ return policy;
85
+ }
@@ -0,0 +1,93 @@
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.stageRsvpHabit = stageRsvpHabit;
37
+ const fs = __importStar(require("node:fs"));
38
+ const path = __importStar(require("node:path"));
39
+ const habit_parser_1 = require("../heart/habits/habit-parser");
40
+ const runtime_1 = require("../nerves/runtime");
41
+ const habit_policy_1 = require("./habit-policy");
42
+ function defaultRsvpHabitMetadata(mode) {
43
+ return {
44
+ policyVersion: habit_policy_1.RSVP_HABIT_POLICY_VERSION,
45
+ mode,
46
+ sense: "bluebubbles",
47
+ source: "aisleplanner",
48
+ routeRef: "rsvp/config.json#bluebubblesRoute",
49
+ snapshotRef: "state/rsvp/snapshots/latest.json",
50
+ outboundStateRef: "state/rsvp/outbound-state.json",
51
+ budgetRef: "state/rsvp/spend-ledger.json",
52
+ idempotencyRef: "state/rsvp/outbound-state.json",
53
+ liveSendEligible: false,
54
+ };
55
+ }
56
+ function stagedHabitBody() {
57
+ return [
58
+ "Refresh AislePlanner RSVP state through the native RSVP workflow.",
59
+ "Use the latest native snapshot to answer follow-up questions, and only surface RSVP updates through the guarded outbound policy.",
60
+ ].join("\n\n");
61
+ }
62
+ function stageRsvpHabit(input) {
63
+ const habitPath = path.join(input.agentRoot, "habits", `${habit_policy_1.RSVP_HABIT_NAME}.md`);
64
+ const rsvp = defaultRsvpHabitMetadata(input.mode);
65
+ const content = (0, habit_parser_1.renderHabitFile)({
66
+ title: "RSVP Ari & Rachel",
67
+ status: "active",
68
+ cadence: input.cadence,
69
+ created: (input.now ?? new Date()).toISOString(),
70
+ tools: [...habit_policy_1.RSVP_HABIT_ALLOWED_TOOLS],
71
+ continuity: { mode: "stateful" },
72
+ rsvp,
73
+ }, stagedHabitBody());
74
+ fs.mkdirSync(path.dirname(habitPath), { recursive: true });
75
+ fs.writeFileSync(habitPath, content, "utf-8");
76
+ (0, runtime_1.emitNervesEvent)({
77
+ component: "rsvp",
78
+ event: "rsvp.habit_staged",
79
+ message: "staged native RSVP habit",
80
+ meta: { agent: input.agent, habitName: habit_policy_1.RSVP_HABIT_NAME, mode: input.mode, cadence: input.cadence },
81
+ });
82
+ return {
83
+ ok: true,
84
+ sideEffect: true,
85
+ agent: input.agent,
86
+ name: habit_policy_1.RSVP_HABIT_NAME,
87
+ habitName: habit_policy_1.RSVP_HABIT_NAME,
88
+ habitPath,
89
+ mode: input.mode,
90
+ cadence: input.cadence,
91
+ rsvp,
92
+ };
93
+ }
@@ -0,0 +1,97 @@
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.buildRsvpIncidentBundle = buildRsvpIncidentBundle;
37
+ exports.writeRsvpIncidentBundle = writeRsvpIncidentBundle;
38
+ const fs = __importStar(require("node:fs"));
39
+ const path = __importStar(require("node:path"));
40
+ const doctor_1 = require("../heart/daemon/doctor");
41
+ const runtime_1 = require("../nerves/runtime");
42
+ const diagnostics_1 = require("./diagnostics");
43
+ function nowIso(deps) {
44
+ return (deps.now?.() ?? new Date()).toISOString();
45
+ }
46
+ async function doctorResult(input) {
47
+ if (input.deps.runDoctorChecks)
48
+ return input.deps.runDoctorChecks();
49
+ const bundleRoot = path.dirname(input.agentRoot);
50
+ return (0, doctor_1.runDoctorChecks)({
51
+ existsSync: input.deps.existsSync,
52
+ readFileSync: input.deps.readFileSync,
53
+ readdirSync: input.deps.readdirSync,
54
+ statSync: input.deps.statSync,
55
+ checkSocketAlive: input.deps.checkSocketAlive,
56
+ socketPath: "",
57
+ bundlesRoot: bundleRoot,
58
+ homedir: path.dirname(bundleRoot),
59
+ envPath: "",
60
+ platform: process.platform,
61
+ }, { category: "RSVP" });
62
+ }
63
+ async function buildRsvpIncidentBundle(input) {
64
+ const diagnostics = (0, diagnostics_1.collectRsvpDiagnostics)(input.agentRoot, input.deps);
65
+ const bundle = {
66
+ schemaVersion: 1,
67
+ agent: input.agent,
68
+ generatedAt: nowIso(input.deps),
69
+ sideEffect: false,
70
+ doctor: await doctorResult(input),
71
+ ...diagnostics,
72
+ };
73
+ (0, runtime_1.emitNervesEvent)({
74
+ component: "rsvp",
75
+ event: "rsvp.incident_bundle_built",
76
+ message: "built RSVP incident bundle",
77
+ meta: {
78
+ agent: input.agent,
79
+ doctorFailed: bundle.doctor.summary.failed,
80
+ contextPacketLedger: bundle.contextPacketLedger.status,
81
+ latestFetch: bundle.latestFetch.status,
82
+ },
83
+ });
84
+ return bundle;
85
+ }
86
+ async function writeRsvpIncidentBundle(input) {
87
+ const bundle = await buildRsvpIncidentBundle(input);
88
+ fs.mkdirSync(path.dirname(input.outputPath), { recursive: true });
89
+ fs.writeFileSync(input.outputPath, `${JSON.stringify(bundle, null, 2)}\n`, "utf-8");
90
+ (0, runtime_1.emitNervesEvent)({
91
+ component: "rsvp",
92
+ event: "rsvp.incident_bundle_written",
93
+ message: "wrote RSVP incident bundle",
94
+ meta: { agent: input.agent, outputPath: input.outputPath },
95
+ });
96
+ return { outputPath: input.outputPath, bundle };
97
+ }
@@ -0,0 +1,204 @@
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.RSVP_MIGRATION_POLICY_VERSION = void 0;
37
+ exports.readRsvpBaselineState = readRsvpBaselineState;
38
+ exports.importLegacyRsvpState = importLegacyRsvpState;
39
+ const fs = __importStar(require("node:fs"));
40
+ const path = __importStar(require("node:path"));
41
+ const node_crypto_1 = require("node:crypto");
42
+ const runtime_1 = require("../nerves/runtime");
43
+ const snapshot_1 = require("./snapshot");
44
+ exports.RSVP_MIGRATION_POLICY_VERSION = "rsvp-migration/v1";
45
+ function rsvpRoot(agentRoot) {
46
+ return path.join(agentRoot, "state", "rsvp");
47
+ }
48
+ function snapshotsDir(agentRoot) {
49
+ return path.join(rsvpRoot(agentRoot), "snapshots");
50
+ }
51
+ function baselineStatePath(agentRoot) {
52
+ return path.join(rsvpRoot(agentRoot), "baseline.json");
53
+ }
54
+ function hashBytes(bytes) {
55
+ return `sha256:${(0, node_crypto_1.createHash)("sha256").update(bytes).digest("hex")}`;
56
+ }
57
+ function hashFile(filePath) {
58
+ return hashBytes(fs.readFileSync(filePath));
59
+ }
60
+ function writeJson(filePath, value) {
61
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
62
+ fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, "utf-8");
63
+ }
64
+ function fail(reason, message) {
65
+ return { ok: false, reason, actor: "agent-runnable", message };
66
+ }
67
+ function readJsonFile(filePath) {
68
+ try {
69
+ return JSON.parse(fs.readFileSync(filePath, "utf-8"));
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ }
75
+ function normalizeRelative(root, filePath) {
76
+ const relative = path.relative(path.resolve(root), path.resolve(filePath));
77
+ if (relative.startsWith(".."))
78
+ return null;
79
+ return relative.split(path.sep).join("/");
80
+ }
81
+ function listLegacySnapshotFiles(legacyRoot) {
82
+ const dataDir = path.join(legacyRoot, "data");
83
+ return fs.readdirSync(dataDir)
84
+ .filter((name) => /^snapshot_.*\.json$/.test(name))
85
+ .sort()
86
+ .map((name) => path.join(dataDir, name));
87
+ }
88
+ function readLegacySnapshot(filePath) {
89
+ const parsed = readJsonFile(filePath);
90
+ if (!parsed || !parsed.guests || typeof parsed.guests !== "object" || Array.isArray(parsed.guests))
91
+ return null;
92
+ const allGuests = parsed.all_guests && typeof parsed.all_guests === "object" && !Array.isArray(parsed.all_guests)
93
+ ? parsed.all_guests
94
+ : {};
95
+ return {
96
+ guests: parsed.guests,
97
+ all_guests: allGuests,
98
+ };
99
+ }
100
+ function fetchedAtFromLegacyName(filePath) {
101
+ const basename = path.basename(filePath);
102
+ const match = basename.match(/^snapshot_(\d{4}-\d{2}-\d{2})_(\d{2})(\d{2})(\d{2})\.json$/);
103
+ if (!match)
104
+ return new Date(0).toISOString();
105
+ return `${match[1]}T${match[2]}:${match[3]}:${match[4]}.000Z`;
106
+ }
107
+ function snapshotPath(agentRoot, snapshot) {
108
+ return path.join(snapshotsDir(agentRoot), `${snapshot.snapshotId}.json`);
109
+ }
110
+ function writeSnapshot(agentRoot, snapshot) {
111
+ const filePath = snapshotPath(agentRoot, snapshot);
112
+ writeJson(filePath, snapshot);
113
+ return filePath;
114
+ }
115
+ function buildImportedSnapshot(input, filePath, sentStateHash) {
116
+ const legacy = readLegacySnapshot(filePath);
117
+ const relativePath = normalizeRelative(input.legacyRoot, filePath);
118
+ if (!legacy || !relativePath)
119
+ return null;
120
+ return (0, snapshot_1.buildRsvpSnapshot)({
121
+ agent: input.agent,
122
+ fetchedAt: fetchedAtFromLegacyName(filePath),
123
+ source: {
124
+ kind: "aisleplanner",
125
+ weddingId: input.weddingId,
126
+ eventId: input.eventId,
127
+ adapter: "aisleplanner-api-v1",
128
+ },
129
+ guests: legacy.guests,
130
+ allGuests: legacy.all_guests,
131
+ provenance: {
132
+ kind: "legacy-import",
133
+ importedAt: input.importedAt,
134
+ legacySnapshotRelativePath: relativePath,
135
+ legacySnapshotHash: hashFile(filePath),
136
+ ...(sentStateHash ? { sentStateHash } : {}),
137
+ },
138
+ });
139
+ }
140
+ function readRsvpBaselineState(agentRoot) {
141
+ return readJsonFile(baselineStatePath(agentRoot));
142
+ }
143
+ function importLegacyRsvpState(input) {
144
+ const dataDir = path.join(input.legacyRoot, "data");
145
+ if (!fs.existsSync(dataDir))
146
+ return fail("missing_legacy_data", "legacy RSVP data directory is missing");
147
+ const sentStatePath = path.join(dataDir, "sent_state.json");
148
+ if (!fs.existsSync(sentStatePath))
149
+ return fail("missing_sent_state", "legacy sent_state.json is missing; refusing to bootstrap baseline");
150
+ const sentStateRaw = fs.readFileSync(sentStatePath, "utf-8");
151
+ const sentState = readJsonFile(sentStatePath);
152
+ if (!sentState || typeof sentState.snapshot_path !== "string") {
153
+ return fail("malformed_sent_state", "legacy sent_state.json is malformed; refusing to bootstrap baseline");
154
+ }
155
+ const baselineLegacyPath = path.resolve(sentState.snapshot_path);
156
+ const baselineRelativePath = normalizeRelative(input.legacyRoot, baselineLegacyPath);
157
+ if (!baselineRelativePath)
158
+ return fail("baseline_outside_legacy_root", "legacy sent baseline points outside the legacy root");
159
+ if (!fs.existsSync(baselineLegacyPath))
160
+ return fail("missing_baseline_snapshot", "legacy sent baseline snapshot is missing");
161
+ const legacySnapshots = listLegacySnapshotFiles(input.legacyRoot);
162
+ const latestLegacyPath = legacySnapshots.at(-1);
163
+ if (!latestLegacyPath)
164
+ return fail("missing_legacy_snapshot", "no legacy snapshot_*.json files found");
165
+ const sentStateHash = hashBytes(sentStateRaw);
166
+ const baselineSnapshot = buildImportedSnapshot(input, baselineLegacyPath, sentStateHash);
167
+ const latestSnapshot = buildImportedSnapshot(input, latestLegacyPath);
168
+ if (!baselineSnapshot || !latestSnapshot)
169
+ return fail("malformed_legacy_snapshot", "legacy snapshot file is malformed");
170
+ const baselineSnapshotPath = writeSnapshot(input.agentRoot, baselineSnapshot);
171
+ const latestSnapshotPath = writeSnapshot(input.agentRoot, latestSnapshot);
172
+ const baselineState = {
173
+ schemaVersion: 1,
174
+ policyVersion: exports.RSVP_MIGRATION_POLICY_VERSION,
175
+ agent: input.agent,
176
+ importedAt: input.importedAt,
177
+ baselineSource: typeof sentState.source === "string" ? sentState.source : "sent",
178
+ legacySnapshotRelativePath: baselineRelativePath,
179
+ legacySnapshotHash: hashFile(baselineLegacyPath),
180
+ sentStateHash,
181
+ nativeSnapshotId: baselineSnapshot.snapshotId,
182
+ nativeSnapshotRelativePath: normalizeRelative(input.agentRoot, baselineSnapshotPath),
183
+ };
184
+ writeJson(baselineStatePath(input.agentRoot), baselineState);
185
+ (0, runtime_1.emitNervesEvent)({
186
+ component: "rsvp",
187
+ event: "rsvp.legacy_state_imported",
188
+ message: "imported legacy RSVP snapshots into native state",
189
+ meta: {
190
+ agent: input.agent,
191
+ latestSnapshotId: latestSnapshot.snapshotId,
192
+ baselineSnapshotId: baselineSnapshot.snapshotId,
193
+ baselineSource: baselineState.baselineSource,
194
+ },
195
+ });
196
+ return {
197
+ ok: true,
198
+ latestSnapshotId: latestSnapshot.snapshotId,
199
+ baselineSnapshotId: baselineSnapshot.snapshotId,
200
+ latestSnapshotPath,
201
+ baselineSnapshotPath,
202
+ baselineSource: baselineState.baselineSource,
203
+ };
204
+ }