@ouro.bot/cli 0.1.0-alpha.62 → 0.1.0-alpha.637

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 (432) hide show
  1. package/README.md +127 -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 +4087 -13
  13. package/dist/arc/attention-types.js +8 -0
  14. package/dist/arc/cares.js +144 -0
  15. package/dist/arc/episodes.js +118 -0
  16. package/dist/arc/evolution.js +487 -0
  17. package/dist/arc/intentions.js +134 -0
  18. package/dist/arc/json-store.js +117 -0
  19. package/dist/arc/obligations.js +270 -0
  20. package/dist/arc/packets.js +288 -0
  21. package/dist/arc/presence.js +185 -0
  22. package/dist/arc/task-lifecycle.js +57 -0
  23. package/dist/heart/active-work.js +860 -43
  24. package/dist/heart/agent-entry.js +69 -3
  25. package/dist/heart/attachments/image-normalize.js +194 -0
  26. package/dist/heart/attachments/materialize.js +97 -0
  27. package/dist/heart/attachments/originals.js +88 -0
  28. package/dist/heart/attachments/render.js +29 -0
  29. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  30. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  31. package/dist/heart/attachments/sources/index.js +16 -0
  32. package/dist/heart/attachments/store.js +103 -0
  33. package/dist/heart/attachments/types.js +93 -0
  34. package/dist/heart/auth/auth-flow.js +479 -0
  35. package/dist/heart/awaiting/await-alert.js +146 -0
  36. package/dist/heart/awaiting/await-expiry.js +108 -0
  37. package/dist/heart/awaiting/await-loader.js +91 -0
  38. package/dist/heart/awaiting/await-parser.js +141 -0
  39. package/dist/heart/awaiting/await-runtime-state.js +100 -0
  40. package/dist/heart/awaiting/await-scheduler.js +377 -0
  41. package/dist/heart/background-operations.js +281 -0
  42. package/dist/heart/bridges/manager.js +137 -17
  43. package/dist/heart/bridges/store.js +14 -2
  44. package/dist/heart/bundle-state.js +168 -0
  45. package/dist/heart/commitments.js +135 -0
  46. package/dist/heart/config-registry.js +322 -0
  47. package/dist/heart/config.js +114 -119
  48. package/dist/heart/core.js +1028 -248
  49. package/dist/heart/cross-chat-delivery.js +3 -18
  50. package/dist/heart/daemon/agent-config-check.js +419 -0
  51. package/dist/heart/daemon/agent-discovery.js +102 -3
  52. package/dist/heart/daemon/agent-service.js +522 -0
  53. package/dist/heart/daemon/agentic-repair.js +547 -0
  54. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  55. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  56. package/dist/heart/daemon/cadence.js +70 -0
  57. package/dist/heart/daemon/cli-defaults.js +776 -0
  58. package/dist/heart/daemon/cli-desk.js +322 -0
  59. package/dist/heart/daemon/cli-exec.js +7468 -0
  60. package/dist/heart/daemon/cli-help.js +505 -0
  61. package/dist/heart/daemon/cli-parse.js +1554 -0
  62. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  63. package/dist/heart/daemon/cli-render.js +763 -0
  64. package/dist/heart/daemon/cli-types.js +8 -0
  65. package/dist/heart/daemon/connect-bay.js +323 -0
  66. package/dist/heart/daemon/daemon-cli.js +29 -1700
  67. package/dist/heart/daemon/daemon-entry.js +485 -2
  68. package/dist/heart/daemon/daemon-health.js +176 -0
  69. package/dist/heart/daemon/daemon-rollup.js +57 -0
  70. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  71. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  72. package/dist/heart/daemon/daemon.js +906 -71
  73. package/dist/heart/daemon/dns-workflow.js +394 -0
  74. package/dist/heart/daemon/doctor-types.js +8 -0
  75. package/dist/heart/daemon/doctor.js +873 -0
  76. package/dist/heart/daemon/health-monitor.js +122 -1
  77. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  78. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  79. package/dist/heart/daemon/http-health-probe.js +80 -0
  80. package/dist/heart/daemon/human-command-screens.js +234 -0
  81. package/dist/heart/daemon/human-readiness.js +114 -0
  82. package/dist/heart/daemon/inner-status.js +89 -0
  83. package/dist/heart/daemon/interactive-repair.js +394 -0
  84. package/dist/heart/daemon/launchd.js +37 -8
  85. package/dist/heart/daemon/log-tailer.js +79 -10
  86. package/dist/heart/daemon/logs-prune.js +110 -0
  87. package/dist/heart/daemon/mcp-canary.js +297 -0
  88. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  89. package/dist/heart/daemon/os-cron-deps.js +135 -0
  90. package/dist/heart/daemon/os-cron.js +14 -12
  91. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  92. package/dist/heart/daemon/ouro-entry.js +3 -1
  93. package/dist/heart/daemon/plugin-cli.js +432 -0
  94. package/dist/heart/daemon/process-manager.js +501 -35
  95. package/dist/heart/daemon/provider-discovery.js +137 -0
  96. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  97. package/dist/heart/daemon/pulse.js +475 -0
  98. package/dist/heart/daemon/readiness-repair.js +365 -0
  99. package/dist/heart/daemon/run-hooks.js +2 -0
  100. package/dist/heart/daemon/runtime-logging.js +11 -3
  101. package/dist/heart/daemon/runtime-metadata.js +2 -30
  102. package/dist/heart/daemon/safe-mode.js +161 -0
  103. package/dist/heart/daemon/sense-manager.js +493 -38
  104. package/dist/heart/daemon/session-id-resolver.js +131 -0
  105. package/dist/heart/daemon/skill-management-installer.js +22 -9
  106. package/dist/heart/daemon/socket-client.js +158 -11
  107. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  108. package/dist/heart/daemon/startup-tui.js +330 -0
  109. package/dist/heart/daemon/task-scheduler.js +117 -39
  110. package/dist/heart/daemon/terminal-ui.js +499 -0
  111. package/dist/heart/daemon/thoughts.js +229 -17
  112. package/dist/heart/daemon/up-progress.js +366 -0
  113. package/dist/heart/daemon/vault-items.js +56 -0
  114. package/dist/heart/delegation.js +1 -4
  115. package/dist/heart/habits/habit-migration.js +189 -0
  116. package/dist/heart/habits/habit-parser.js +140 -0
  117. package/dist/heart/habits/habit-runtime-state.js +100 -0
  118. package/dist/heart/habits/habit-scheduler.js +372 -0
  119. package/dist/heart/{daemon → hatch}/hatch-flow.js +32 -56
  120. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  121. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  122. package/dist/heart/{daemon → hatch}/specialist-tools.js +37 -14
  123. package/dist/heart/identity.js +168 -57
  124. package/dist/heart/kept-notes.js +357 -0
  125. package/dist/heart/kicks.js +1 -1
  126. package/dist/heart/machine-identity.js +161 -0
  127. package/dist/heart/mail-import-discovery.js +353 -0
  128. package/dist/heart/mailbox/mailbox-http-hooks.js +66 -0
  129. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  130. package/dist/heart/mailbox/mailbox-http-routes.js +246 -0
  131. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  132. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  133. package/dist/heart/mailbox/mailbox-http.js +99 -0
  134. package/dist/heart/mailbox/mailbox-read.js +31 -0
  135. package/dist/heart/mailbox/mailbox-types.js +27 -0
  136. package/dist/heart/mailbox/mailbox-view.js +197 -0
  137. package/dist/heart/mailbox/readers/agent-machine.js +418 -0
  138. package/dist/heart/mailbox/readers/continuity-readers.js +319 -0
  139. package/dist/heart/mailbox/readers/mail.js +375 -0
  140. package/dist/heart/mailbox/readers/runtime-readers.js +756 -0
  141. package/dist/heart/mailbox/readers/sessions.js +232 -0
  142. package/dist/heart/mailbox/readers/shared.js +111 -0
  143. package/dist/heart/mcp/mcp-server.js +692 -0
  144. package/dist/heart/migrate-config.js +100 -0
  145. package/dist/heart/model-capabilities.js +19 -0
  146. package/dist/heart/orientation-frame.js +217 -0
  147. package/dist/heart/platform.js +81 -0
  148. package/dist/heart/provider-attempt.js +134 -0
  149. package/dist/heart/provider-binding-resolver.js +272 -0
  150. package/dist/heart/provider-credentials.js +425 -0
  151. package/dist/heart/provider-failover.js +301 -0
  152. package/dist/heart/provider-models.js +81 -0
  153. package/dist/heart/provider-ping.js +262 -0
  154. package/dist/heart/provider-readiness-cache.js +40 -0
  155. package/dist/heart/provider-visibility.js +188 -0
  156. package/dist/heart/providers/anthropic-token.js +131 -0
  157. package/dist/heart/providers/anthropic.js +139 -52
  158. package/dist/heart/providers/azure.js +23 -11
  159. package/dist/heart/providers/error-classification.js +127 -0
  160. package/dist/heart/providers/github-copilot.js +145 -0
  161. package/dist/heart/providers/minimax-vlm.js +189 -0
  162. package/dist/heart/providers/minimax.js +26 -8
  163. package/dist/heart/providers/openai-codex.js +55 -40
  164. package/dist/heart/runtime-capability-check.js +170 -0
  165. package/dist/heart/runtime-credentials.js +367 -0
  166. package/dist/heart/runtime-cwd.js +87 -0
  167. package/dist/heart/sense-truth.js +13 -4
  168. package/dist/heart/session-activity.js +48 -24
  169. package/dist/heart/session-events.js +1163 -0
  170. package/dist/heart/session-playback-cli-main.js +5 -0
  171. package/dist/heart/session-playback-cli.js +36 -0
  172. package/dist/heart/session-playback.js +231 -0
  173. package/dist/heart/session-stats-cli-main.js +5 -0
  174. package/dist/heart/session-stats.js +182 -0
  175. package/dist/heart/session-transcript.js +133 -0
  176. package/dist/heart/start-of-turn-packet.js +345 -0
  177. package/dist/heart/streaming.js +44 -27
  178. package/dist/heart/structured-output.js +196 -0
  179. package/dist/heart/sync-classification.js +176 -0
  180. package/dist/heart/sync.js +449 -0
  181. package/dist/heart/target-resolution.js +9 -5
  182. package/dist/heart/tempo.js +93 -0
  183. package/dist/heart/temporal-view.js +41 -0
  184. package/dist/heart/timeouts.js +101 -0
  185. package/dist/heart/tool-activity-callbacks.js +59 -0
  186. package/dist/heart/tool-description.js +143 -0
  187. package/dist/heart/tool-friction.js +55 -0
  188. package/dist/heart/tool-loop.js +200 -0
  189. package/dist/heart/turn-context.js +389 -0
  190. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  191. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  192. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  193. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  194. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  195. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  196. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  197. package/dist/mailbox-ui/assets/index-9-AxCxuB.js +61 -0
  198. package/dist/mailbox-ui/assets/index-CWzt267f.css +1 -0
  199. package/dist/mailbox-ui/index.html +15 -0
  200. package/dist/mailroom/attention.js +167 -0
  201. package/dist/mailroom/autonomy.js +209 -0
  202. package/dist/mailroom/blob-store.js +715 -0
  203. package/dist/mailroom/body-cache.js +61 -0
  204. package/dist/mailroom/core.js +788 -0
  205. package/dist/mailroom/entry.js +160 -0
  206. package/dist/mailroom/file-store.js +568 -0
  207. package/dist/mailroom/mbox-import.js +393 -0
  208. package/dist/mailroom/migration.js +164 -0
  209. package/dist/mailroom/outbound.js +380 -0
  210. package/dist/mailroom/policy.js +263 -0
  211. package/dist/mailroom/reader.js +233 -0
  212. package/dist/mailroom/search-cache.js +334 -0
  213. package/dist/mailroom/search-relevance.js +319 -0
  214. package/dist/mailroom/smtp-ingress.js +176 -0
  215. package/dist/mailroom/source-state.js +176 -0
  216. package/dist/mailroom/thread.js +109 -0
  217. package/dist/mailroom/travel-extract.js +89 -0
  218. package/dist/mind/bundle-manifest.js +14 -1
  219. package/dist/mind/context.js +251 -101
  220. package/dist/mind/desk-section.js +310 -0
  221. package/dist/mind/diary-integrity.js +60 -0
  222. package/dist/mind/{memory.js → diary.js} +68 -76
  223. package/dist/mind/embedding-provider.js +60 -0
  224. package/dist/mind/file-state.js +179 -0
  225. package/dist/mind/friends/channel.js +39 -0
  226. package/dist/mind/friends/resolver.js +54 -2
  227. package/dist/mind/friends/store-file.js +48 -4
  228. package/dist/mind/friends/types.js +2 -2
  229. package/dist/mind/journal-index.js +162 -0
  230. package/dist/mind/note-search.js +268 -0
  231. package/dist/mind/obligation-steering.js +221 -0
  232. package/dist/mind/pending.js +6 -1
  233. package/dist/mind/prompt-refresh.js +3 -2
  234. package/dist/mind/prompt.js +1075 -146
  235. package/dist/mind/provenance-trust.js +26 -0
  236. package/dist/mind/scrutiny.js +173 -0
  237. package/dist/nerves/cli-logging.js +7 -1
  238. package/dist/nerves/coverage/audit-rules.js +15 -6
  239. package/dist/nerves/coverage/audit.js +28 -2
  240. package/dist/nerves/coverage/cli.js +1 -1
  241. package/dist/nerves/coverage/contract.js +5 -5
  242. package/dist/nerves/coverage/file-completeness.js +139 -5
  243. package/dist/nerves/event-buffer.js +111 -0
  244. package/dist/nerves/index.js +224 -4
  245. package/dist/nerves/observation.js +20 -0
  246. package/dist/nerves/redact.js +79 -0
  247. package/dist/nerves/review/cli-main.js +5 -0
  248. package/dist/nerves/review/cli.js +156 -0
  249. package/dist/nerves/review/core.js +152 -0
  250. package/dist/nerves/runtime.js +5 -1
  251. package/dist/repertoire/ado-client.js +15 -56
  252. package/dist/repertoire/ado-semantic.js +16 -10
  253. package/dist/repertoire/api-client.js +97 -0
  254. package/dist/repertoire/bitwarden-store.js +1040 -0
  255. package/dist/repertoire/bundle-templates.js +72 -0
  256. package/dist/repertoire/bw-installer.js +180 -0
  257. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  258. package/dist/repertoire/coding/context-pack.js +331 -0
  259. package/dist/repertoire/coding/feedback.js +197 -30
  260. package/dist/repertoire/coding/manager.js +166 -10
  261. package/dist/repertoire/coding/spawner.js +55 -9
  262. package/dist/repertoire/coding/tools.js +219 -7
  263. package/dist/repertoire/commerce-errors.js +109 -0
  264. package/dist/repertoire/commerce-self-test.js +156 -0
  265. package/dist/repertoire/credential-access.js +178 -0
  266. package/dist/repertoire/desk/classifier.js +362 -0
  267. package/dist/repertoire/duffel-client.js +185 -0
  268. package/dist/repertoire/github-client.js +14 -55
  269. package/dist/repertoire/graph-client.js +11 -52
  270. package/dist/repertoire/guardrails.js +385 -0
  271. package/dist/repertoire/mcp-client.js +295 -0
  272. package/dist/repertoire/mcp-manager.js +403 -0
  273. package/dist/repertoire/mcp-tools.js +83 -0
  274. package/dist/repertoire/plugin-mcp.js +175 -0
  275. package/dist/repertoire/plugins.js +253 -0
  276. package/dist/repertoire/shell-sessions.js +133 -0
  277. package/dist/repertoire/skills.js +48 -4
  278. package/dist/repertoire/stripe-client.js +131 -0
  279. package/dist/repertoire/tool-results.js +29 -0
  280. package/dist/repertoire/tools-attachments.js +317 -0
  281. package/dist/repertoire/tools-awaiting.js +372 -0
  282. package/dist/repertoire/tools-base.js +59 -1082
  283. package/dist/repertoire/tools-bluebubbles.js +2 -0
  284. package/dist/repertoire/tools-bridge.js +144 -0
  285. package/dist/repertoire/tools-bundle.js +993 -0
  286. package/dist/repertoire/tools-config.js +186 -0
  287. package/dist/repertoire/tools-continuity.js +252 -0
  288. package/dist/repertoire/tools-credential.js +383 -0
  289. package/dist/repertoire/tools-evolution.js +527 -0
  290. package/dist/repertoire/tools-files.js +344 -0
  291. package/dist/repertoire/tools-flight.js +227 -0
  292. package/dist/repertoire/tools-flow.js +119 -0
  293. package/dist/repertoire/tools-github.js +3 -8
  294. package/dist/repertoire/tools-mail.js +1975 -0
  295. package/dist/repertoire/tools-notes.js +438 -0
  296. package/dist/repertoire/tools-obligations.js +143 -0
  297. package/dist/repertoire/tools-orientation.js +31 -0
  298. package/dist/repertoire/tools-record.js +464 -0
  299. package/dist/repertoire/tools-runtime.js +150 -0
  300. package/dist/repertoire/tools-session.js +766 -0
  301. package/dist/repertoire/tools-shell.js +120 -0
  302. package/dist/repertoire/tools-stripe.js +182 -0
  303. package/dist/repertoire/tools-surface.js +344 -0
  304. package/dist/repertoire/tools-teams.js +12 -39
  305. package/dist/repertoire/tools-travel.js +125 -0
  306. package/dist/repertoire/tools-trip.js +982 -0
  307. package/dist/repertoire/tools-user-profile.js +146 -0
  308. package/dist/repertoire/tools-vault.js +40 -0
  309. package/dist/repertoire/tools-voice.js +145 -0
  310. package/dist/repertoire/tools.js +215 -103
  311. package/dist/repertoire/travel-api-client.js +360 -0
  312. package/dist/repertoire/user-profile.js +131 -0
  313. package/dist/repertoire/vault-setup.js +246 -0
  314. package/dist/repertoire/vault-unlock.js +594 -0
  315. package/dist/scripts/claude-code-hook.js +41 -0
  316. package/dist/scripts/claude-code-stop-hook.js +47 -0
  317. package/dist/senses/attention-queue.js +186 -0
  318. package/dist/senses/await-turn-message.js +58 -0
  319. package/dist/senses/bluebubbles/active-turns.js +216 -0
  320. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  321. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  322. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
  323. package/dist/senses/bluebubbles/entry.js +77 -0
  324. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  325. package/dist/senses/bluebubbles/index.js +2737 -0
  326. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  327. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  328. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  329. package/dist/senses/bluebubbles/processed-log.js +133 -0
  330. package/dist/senses/bluebubbles/replay.js +137 -0
  331. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  332. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  333. package/dist/senses/bluebubbles-meta-guard.js +40 -0
  334. package/dist/senses/cli/bracketed-paste.js +82 -0
  335. package/dist/senses/cli/image-paste.js +287 -0
  336. package/dist/senses/cli/image-ref-navigation.js +75 -0
  337. package/dist/senses/cli/ink-app.js +156 -0
  338. package/dist/senses/cli/inline-diff.js +64 -0
  339. package/dist/senses/cli/input-keys.js +174 -0
  340. package/dist/senses/cli/kill-ring.js +86 -0
  341. package/dist/senses/cli/message-list.js +51 -0
  342. package/dist/senses/cli/ouro-tui.js +607 -0
  343. package/dist/senses/cli/spinner-imperative.js +135 -0
  344. package/dist/senses/cli/spinner.js +101 -0
  345. package/dist/senses/cli/status-line.js +60 -0
  346. package/dist/senses/cli/streaming-markdown.js +526 -0
  347. package/dist/senses/cli/tool-display.js +85 -0
  348. package/dist/senses/cli/tool-render.js +85 -0
  349. package/dist/senses/cli/tui-store.js +240 -0
  350. package/dist/senses/cli/virtual-list.js +35 -0
  351. package/dist/senses/cli-entry.js +60 -8
  352. package/dist/senses/cli-layout.js +100 -0
  353. package/dist/senses/cli.js +517 -204
  354. package/dist/senses/commands.js +66 -3
  355. package/dist/senses/habit-turn-message.js +108 -0
  356. package/dist/senses/inner-dialog-worker.js +254 -22
  357. package/dist/senses/inner-dialog.js +505 -40
  358. package/dist/senses/mail-entry.js +66 -0
  359. package/dist/senses/mail.js +379 -0
  360. package/dist/senses/pipeline.js +666 -181
  361. package/dist/senses/proactive-content-guard.js +51 -0
  362. package/dist/senses/shared-turn.js +393 -0
  363. package/dist/senses/surface-tool.js +108 -0
  364. package/dist/senses/teams-entry.js +60 -8
  365. package/dist/senses/teams.js +388 -98
  366. package/dist/senses/trust-gate.js +100 -5
  367. package/dist/senses/voice/audio-playback.js +237 -0
  368. package/dist/senses/voice/audio-routing.js +119 -0
  369. package/dist/senses/voice/elevenlabs.js +202 -0
  370. package/dist/senses/voice/floor-control.js +431 -0
  371. package/dist/senses/voice/floor-controller.js +115 -0
  372. package/dist/senses/voice/golden-path.js +116 -0
  373. package/dist/senses/voice/index.js +29 -0
  374. package/dist/senses/voice/meeting.js +113 -0
  375. package/dist/senses/voice/outbound.js +190 -0
  376. package/dist/senses/voice/phone.js +33 -0
  377. package/dist/senses/voice/playback.js +139 -0
  378. package/dist/senses/voice/realtime-eval.js +496 -0
  379. package/dist/senses/voice/realtime-trace.js +531 -0
  380. package/dist/senses/voice/transcript.js +70 -0
  381. package/dist/senses/voice/turn.js +191 -0
  382. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  383. package/dist/senses/voice/twilio-phone.js +5079 -0
  384. package/dist/senses/voice/types.js +2 -0
  385. package/dist/senses/voice/whisper.js +161 -0
  386. package/dist/senses/voice-entry.js +81 -0
  387. package/dist/senses/voice-realtime-eval-command.js +99 -0
  388. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  389. package/dist/senses/voice-twilio-entry.js +87 -0
  390. package/dist/trips/core.js +138 -0
  391. package/dist/trips/store.js +265 -0
  392. package/dist/util/frontmatter.js +53 -0
  393. package/package.json +48 -8
  394. package/skills/agent-commerce.md +106 -0
  395. package/skills/browser-navigation.md +117 -0
  396. package/skills/commerce-setup-guide.md +116 -0
  397. package/skills/commerce-setup.md +84 -0
  398. package/skills/configure-dev-tools.md +99 -0
  399. package/skills/travel-planning.md +138 -0
  400. package/dist/heart/daemon/auth-flow.js +0 -351
  401. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  402. package/dist/heart/safe-workspace.js +0 -228
  403. package/dist/heart/session-recall.js +0 -116
  404. package/dist/mind/associative-recall.js +0 -209
  405. package/dist/repertoire/tasks/board.js +0 -134
  406. package/dist/repertoire/tasks/index.js +0 -224
  407. package/dist/repertoire/tasks/lifecycle.js +0 -80
  408. package/dist/repertoire/tasks/middleware.js +0 -65
  409. package/dist/repertoire/tasks/parser.js +0 -173
  410. package/dist/repertoire/tasks/scanner.js +0 -132
  411. package/dist/repertoire/tasks/transitions.js +0 -144
  412. package/dist/senses/bluebubbles-entry.js +0 -13
  413. package/dist/senses/bluebubbles.js +0 -1177
  414. package/dist/senses/debug-activity.js +0 -148
  415. package/subagents/README.md +0 -7
  416. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  417. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  418. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  419. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  420. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  421. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  422. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  423. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  424. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  425. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  426. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  427. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  428. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  429. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  430. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  431. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  432. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * Shared JSON file store helpers for arc/ modules.
4
+ *
5
+ * obligations.ts, cares.ts, and intentions.ts all use the same pattern:
6
+ * individual JSON files in a directory, with read-all / read-one / write-one
7
+ * operations. This module extracts those patterns.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.generateTimestampId = generateTimestampId;
44
+ exports.readJsonDir = readJsonDir;
45
+ exports.readJsonFile = readJsonFile;
46
+ exports.readJsonFileOrThrow = readJsonFileOrThrow;
47
+ exports.writeJsonFile = writeJsonFile;
48
+ const fs = __importStar(require("fs"));
49
+ const path = __importStar(require("path"));
50
+ /**
51
+ * Generate a timestamped random ID.
52
+ * @param prefix Optional prefix (e.g. "care", "int"). Omit for plain timestamp IDs.
53
+ */
54
+ function generateTimestampId(prefix) {
55
+ const timestamp = Date.now();
56
+ const random = Math.random().toString(36).slice(2, 10);
57
+ return prefix ? `${prefix}-${timestamp}-${random}` : `${timestamp}-${random}`;
58
+ }
59
+ /**
60
+ * Read all JSON files from a directory, parse each, and return an array.
61
+ * Silently skips malformed files. Returns empty array if directory is missing.
62
+ */
63
+ function readJsonDir(dir) {
64
+ if (!fs.existsSync(dir))
65
+ return [];
66
+ let entries;
67
+ try {
68
+ entries = fs.readdirSync(dir);
69
+ }
70
+ catch {
71
+ /* v8 ignore next -- defensive: readdirSync race after existsSync @preserve */
72
+ return [];
73
+ }
74
+ const jsonFiles = entries.filter((entry) => entry.endsWith(".json")).sort();
75
+ const records = [];
76
+ for (const file of jsonFiles) {
77
+ try {
78
+ const raw = fs.readFileSync(path.join(dir, file), "utf-8");
79
+ records.push(JSON.parse(raw));
80
+ }
81
+ catch {
82
+ // Skip malformed JSON files
83
+ }
84
+ }
85
+ return records;
86
+ }
87
+ /**
88
+ * Read a single JSON file by ID from a directory.
89
+ * Returns null if the file doesn't exist or is unparseable.
90
+ */
91
+ function readJsonFile(dir, id) {
92
+ try {
93
+ const raw = fs.readFileSync(path.join(dir, `${id}.json`), "utf-8");
94
+ return JSON.parse(raw);
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ /**
101
+ * Read a single JSON file by ID, throwing if not found.
102
+ */
103
+ function readJsonFileOrThrow(dir, id, label) {
104
+ const filePath = path.join(dir, `${id}.json`);
105
+ if (!fs.existsSync(filePath)) {
106
+ throw new Error(`${label} not found: ${id}`);
107
+ }
108
+ return JSON.parse(fs.readFileSync(filePath, "utf-8"));
109
+ }
110
+ /**
111
+ * Write a record to a JSON file, creating the directory if needed.
112
+ */
113
+ function writeJsonFile(dir, id, record) {
114
+ fs.mkdirSync(dir, { recursive: true });
115
+ const filePath = path.join(dir, `${id}.json`);
116
+ fs.writeFileSync(filePath, JSON.stringify(record, null, 2), "utf-8");
117
+ }
@@ -0,0 +1,270 @@
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.isOpenObligationStatus = isOpenObligationStatus;
37
+ exports.isOpenObligation = isOpenObligation;
38
+ exports.createObligation = createObligation;
39
+ exports.readObligations = readObligations;
40
+ exports.readPendingObligations = readPendingObligations;
41
+ exports.advanceObligation = advanceObligation;
42
+ exports.fulfillObligation = fulfillObligation;
43
+ exports.findPendingObligationForOrigin = findPendingObligationForOrigin;
44
+ exports.enrichObligation = enrichObligation;
45
+ exports.generateObligationId = generateObligationId;
46
+ exports.getReturnObligationsDir = getReturnObligationsDir;
47
+ exports.createReturnObligation = createReturnObligation;
48
+ exports.readReturnObligation = readReturnObligation;
49
+ exports.advanceReturnObligation = advanceReturnObligation;
50
+ exports.listActiveReturnObligations = listActiveReturnObligations;
51
+ const path = __importStar(require("path"));
52
+ const identity_1 = require("../heart/identity");
53
+ const session_events_1 = require("../heart/session-events");
54
+ const runtime_1 = require("../nerves/runtime");
55
+ const json_store_1 = require("./json-store");
56
+ function obligationsDir(agentRoot) {
57
+ return path.join(agentRoot, "arc", "obligations");
58
+ }
59
+ function isOpenObligationStatus(status) {
60
+ return status !== "fulfilled";
61
+ }
62
+ function isOpenObligation(obligation) {
63
+ return isOpenObligationStatus(obligation.status);
64
+ }
65
+ function createObligation(agentRoot, input) {
66
+ const now = new Date().toISOString();
67
+ const id = (0, json_store_1.generateTimestampId)();
68
+ const obligation = {
69
+ id,
70
+ origin: input.origin,
71
+ ...(input.bridgeId ? { bridgeId: input.bridgeId } : {}),
72
+ content: (0, session_events_1.capStructuredRecordString)(input.content),
73
+ status: "pending",
74
+ createdAt: now,
75
+ updatedAt: now,
76
+ };
77
+ (0, json_store_1.writeJsonFile)(obligationsDir(agentRoot), id, obligation);
78
+ (0, runtime_1.emitNervesEvent)({
79
+ component: "engine",
80
+ event: "engine.obligation_created",
81
+ message: "obligation created",
82
+ meta: {
83
+ obligationId: id,
84
+ friendId: input.origin.friendId,
85
+ channel: input.origin.channel,
86
+ key: input.origin.key,
87
+ },
88
+ });
89
+ return obligation;
90
+ }
91
+ function readObligations(agentRoot) {
92
+ const all = (0, json_store_1.readJsonDir)(obligationsDir(agentRoot));
93
+ return all.filter((parsed) => typeof parsed.id === "string" && typeof parsed.content === "string");
94
+ }
95
+ function readPendingObligations(agentRoot) {
96
+ return readObligations(agentRoot).filter(isOpenObligation);
97
+ }
98
+ function advanceObligation(agentRoot, obligationId, update) {
99
+ const dir = obligationsDir(agentRoot);
100
+ const obligation = (0, json_store_1.readJsonFile)(dir, obligationId);
101
+ if (!obligation)
102
+ return;
103
+ const previousStatus = obligation.status;
104
+ if (update.status) {
105
+ obligation.status = update.status;
106
+ if (update.status === "fulfilled") {
107
+ obligation.fulfilledAt = new Date().toISOString();
108
+ }
109
+ }
110
+ if (update.currentSurface) {
111
+ obligation.currentSurface = update.currentSurface;
112
+ }
113
+ if (typeof update.currentArtifact === "string") {
114
+ obligation.currentArtifact = (0, session_events_1.capStructuredRecordString)(update.currentArtifact);
115
+ }
116
+ if (typeof update.nextAction === "string") {
117
+ obligation.nextAction = (0, session_events_1.capStructuredRecordString)(update.nextAction);
118
+ }
119
+ if (typeof update.latestNote === "string") {
120
+ obligation.latestNote = (0, session_events_1.capStructuredRecordString)(update.latestNote);
121
+ }
122
+ obligation.updatedAt = new Date().toISOString();
123
+ (0, json_store_1.writeJsonFile)(dir, obligationId, obligation);
124
+ (0, runtime_1.emitNervesEvent)({
125
+ component: "engine",
126
+ event: "engine.obligation_advanced",
127
+ message: "obligation advanced",
128
+ meta: {
129
+ obligationId,
130
+ previousStatus,
131
+ status: obligation.status,
132
+ friendId: obligation.origin.friendId,
133
+ channel: obligation.origin.channel,
134
+ key: obligation.origin.key,
135
+ surfaceKind: obligation.currentSurface?.kind ?? null,
136
+ surfaceLabel: obligation.currentSurface?.label ?? null,
137
+ },
138
+ });
139
+ }
140
+ function fulfillObligation(agentRoot, obligationId) {
141
+ advanceObligation(agentRoot, obligationId, { status: "fulfilled" });
142
+ const obligation = (0, json_store_1.readJsonFile)(obligationsDir(agentRoot), obligationId);
143
+ if (!obligation)
144
+ return;
145
+ (0, runtime_1.emitNervesEvent)({
146
+ component: "engine",
147
+ event: "engine.obligation_fulfilled",
148
+ message: "obligation fulfilled",
149
+ meta: {
150
+ obligationId,
151
+ friendId: obligation.origin.friendId,
152
+ channel: obligation.origin.channel,
153
+ key: obligation.origin.key,
154
+ },
155
+ });
156
+ }
157
+ function findPendingObligationForOrigin(agentRoot, origin) {
158
+ return readPendingObligations(agentRoot).find((ob) => ob.origin.friendId === origin.friendId
159
+ && ob.origin.channel === origin.channel
160
+ && ob.origin.key === origin.key);
161
+ }
162
+ function enrichObligation(agentRoot, id, meaning) {
163
+ const dir = obligationsDir(agentRoot);
164
+ const existing = (0, json_store_1.readJsonFile)(dir, id);
165
+ if (!existing) {
166
+ throw new Error(`Obligation not found: ${id}`);
167
+ }
168
+ const obligation = existing;
169
+ obligation.meaning = {
170
+ ...meaning,
171
+ ...(typeof meaning.careReason === "string" ? { careReason: (0, session_events_1.capStructuredRecordString)(meaning.careReason) } : {}),
172
+ ...(typeof meaning.resumeHint === "string" ? { resumeHint: (0, session_events_1.capStructuredRecordString)(meaning.resumeHint) } : {}),
173
+ ...(meaning.waitingOn
174
+ ? { waitingOn: { ...meaning.waitingOn, detail: (0, session_events_1.capStructuredRecordString)(meaning.waitingOn.detail) } }
175
+ : {}),
176
+ };
177
+ obligation.updatedAt = new Date().toISOString();
178
+ (0, json_store_1.writeJsonFile)(dir, id, obligation);
179
+ (0, runtime_1.emitNervesEvent)({
180
+ component: "engine",
181
+ event: "engine.obligation_enriched",
182
+ message: "obligation enriched with meaning",
183
+ meta: {
184
+ obligationId: id,
185
+ salience: meaning.salience,
186
+ stalenessClass: meaning.stalenessClass,
187
+ },
188
+ });
189
+ return obligation;
190
+ }
191
+ function generateObligationId(timestamp) {
192
+ return `${timestamp}-${Math.random().toString(36).slice(2, 10)}`;
193
+ }
194
+ function getReturnObligationsDir(agentName) {
195
+ return path.join((0, identity_1.getAgentRoot)(agentName), "arc", "obligations", "inner");
196
+ }
197
+ function createReturnObligation(agentName, obligation) {
198
+ const dir = getReturnObligationsDir(agentName);
199
+ const cappedObligation = {
200
+ ...obligation,
201
+ delegatedContent: (0, session_events_1.capStructuredRecordString)(obligation.delegatedContent),
202
+ };
203
+ (0, json_store_1.writeJsonFile)(dir, obligation.id, cappedObligation);
204
+ const filePath = path.join(dir, `${obligation.id}.json`);
205
+ (0, runtime_1.emitNervesEvent)({
206
+ event: "mind.obligation_created",
207
+ component: "mind",
208
+ message: "return obligation created",
209
+ meta: {
210
+ obligationId: obligation.id,
211
+ origin: `${obligation.origin.friendId}/${obligation.origin.channel}/${obligation.origin.key}`,
212
+ status: obligation.status,
213
+ },
214
+ });
215
+ return filePath;
216
+ }
217
+ function readReturnObligation(agentName, obligationId) {
218
+ return (0, json_store_1.readJsonFile)(getReturnObligationsDir(agentName), obligationId);
219
+ }
220
+ function advanceReturnObligation(agentName, obligationId, update) {
221
+ const existing = readReturnObligation(agentName, obligationId);
222
+ if (!existing)
223
+ return null;
224
+ const updated = {
225
+ ...existing,
226
+ status: update.status,
227
+ ...(update.startedAt !== undefined ? { startedAt: update.startedAt } : {}),
228
+ ...(update.returnedAt !== undefined ? { returnedAt: update.returnedAt } : {}),
229
+ ...(update.returnTarget !== undefined ? { returnTarget: update.returnTarget } : {}),
230
+ };
231
+ (0, json_store_1.writeJsonFile)(getReturnObligationsDir(agentName), obligationId, updated);
232
+ (0, runtime_1.emitNervesEvent)({
233
+ event: "mind.obligation_advanced",
234
+ component: "mind",
235
+ message: `obligation advanced to ${update.status}`,
236
+ meta: {
237
+ obligationId,
238
+ status: update.status,
239
+ ...(update.returnTarget ? { returnTarget: update.returnTarget } : {}),
240
+ },
241
+ });
242
+ return updated;
243
+ }
244
+ // Inner return obligations that have been sitting in queued/running state
245
+ // longer than this are auto-pruned from the "held work items" injection.
246
+ // Anything older is overwhelmingly noise: the agent has had many turns to
247
+ // resolve them and has not, and reinjecting them every turn just burns
248
+ // attention without producing progress. The file stays on disk and can
249
+ // still be inspected or surfaced explicitly; it just no longer gets
250
+ // re-piped into the active prompt.
251
+ const RETURN_OBLIGATION_INJECTION_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1000;
252
+ // Strict allow-list of statuses that should appear in the "held work items"
253
+ // section. Anything else (including legacy/migrated `"fulfilled"` values left
254
+ // over from before the ObligationStatus → ReturnObligationStatus split, plus
255
+ // any future invalid value that slips past the `as any` casts at the
256
+ // surface-tool boundary) is treated as terminal — i.e., we do not re-inject
257
+ // it. This is a read-time defense; the underlying file is left as-is.
258
+ const ACTIVE_RETURN_OBLIGATION_STATUSES = new Set(["queued", "running"]);
259
+ function isSelfInnerReturnObligation(obligation) {
260
+ return obligation.origin.friendId === "self" && obligation.origin.channel === "inner";
261
+ }
262
+ function listActiveReturnObligations(agentName, options = {}) {
263
+ const all = (0, json_store_1.readJsonDir)(getReturnObligationsDir(agentName));
264
+ const nowMs = (options.now ?? Date.now)();
265
+ return all
266
+ .filter((parsed) => ACTIVE_RETURN_OBLIGATION_STATUSES.has(parsed.status))
267
+ .filter((parsed) => !isSelfInnerReturnObligation(parsed))
268
+ .filter((parsed) => nowMs - parsed.createdAt <= RETURN_OBLIGATION_INJECTION_MAX_AGE_MS)
269
+ .sort((a, b) => a.createdAt - b.createdAt);
270
+ }
@@ -0,0 +1,288 @@
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.getPonderPacketArtifactsDir = getPonderPacketArtifactsDir;
37
+ exports.listPonderPackets = listPonderPackets;
38
+ exports.readPonderPacket = readPonderPacket;
39
+ exports.createPonderPacket = createPonderPacket;
40
+ exports.revisePonderPacket = revisePonderPacket;
41
+ exports.advancePonderPacket = advancePonderPacket;
42
+ exports.completePonderPacket = completePonderPacket;
43
+ exports.findHarnessFrictionPacket = findHarnessFrictionPacket;
44
+ const path = __importStar(require("path"));
45
+ const session_events_1 = require("../heart/session-events");
46
+ const runtime_1 = require("../nerves/runtime");
47
+ const task_lifecycle_1 = require("./task-lifecycle");
48
+ const json_store_1 = require("./json-store");
49
+ const evolution_1 = require("./evolution");
50
+ function packetsDir(agentRoot) {
51
+ return path.join(agentRoot, "arc", "packets");
52
+ }
53
+ function getPonderPacketArtifactsDir(agentRoot, packetId) {
54
+ return path.join(agentRoot, "state", "packets", packetId);
55
+ }
56
+ function packetLocator(packetId) {
57
+ return `arc/packets/${packetId}.json`;
58
+ }
59
+ function packetSop(kind) {
60
+ switch (kind) {
61
+ case "harness_friction":
62
+ return "harness_friction_v1";
63
+ case "research":
64
+ return "research_v1";
65
+ case "reflection":
66
+ return "reflection_v1";
67
+ }
68
+ }
69
+ function isPacketKind(value) {
70
+ return value === "harness_friction" || value === "research" || value === "reflection";
71
+ }
72
+ function isPonderPacket(value) {
73
+ if (!value || typeof value !== "object")
74
+ return false;
75
+ const packet = value;
76
+ return typeof packet.id === "string"
77
+ && isPacketKind(packet.kind)
78
+ && typeof packet.objective === "string"
79
+ && typeof packet.summary === "string"
80
+ && Array.isArray(packet.successCriteria)
81
+ && (0, task_lifecycle_1.isTaskStatus)(packet.status)
82
+ && typeof packet.createdAt === "number"
83
+ && typeof packet.updatedAt === "number";
84
+ }
85
+ function payloadString(payload, key) {
86
+ const value = payload[key];
87
+ return typeof value === "string" && value.trim().length > 0 ? value : null;
88
+ }
89
+ function evolutionOriginForPacket(packet) {
90
+ if (packet.origin) {
91
+ return {
92
+ kind: "session",
93
+ label: `${packet.origin.friendId}/${packet.origin.channel}/${packet.origin.key}`,
94
+ locator: packetLocator(packet.id),
95
+ };
96
+ }
97
+ return {
98
+ kind: "runtime",
99
+ label: "ponder packet",
100
+ locator: packetLocator(packet.id),
101
+ };
102
+ }
103
+ function desiredBehaviorForPacket(packet) {
104
+ return packet.successCriteria.length > 0
105
+ ? packet.successCriteria.join("; ")
106
+ : "Resolve the captured harness friction.";
107
+ }
108
+ function evidenceForPacket(packet, reason) {
109
+ return {
110
+ kind: "ponder_packet",
111
+ locator: packetLocator(packet.id),
112
+ capturedAt: new Date(packet.createdAt).toISOString(),
113
+ redaction: "summary",
114
+ reason,
115
+ };
116
+ }
117
+ function bindHarnessFrictionEvolutionCase(agentRoot, packet) {
118
+ if (packet.kind !== "harness_friction")
119
+ return packet;
120
+ const frictionSignature = payloadString(packet.payload, "frictionSignature");
121
+ if (!frictionSignature)
122
+ return packet;
123
+ const existing = (0, evolution_1.findOpenEvolutionCaseByFrictionSignature)(agentRoot, frictionSignature);
124
+ const evidenceReason = existing
125
+ ? "Harness-friction ponder packet added evidence to this evolution case"
126
+ : "Harness-friction ponder packet created this evolution case";
127
+ const evidence = evidenceForPacket(packet, evidenceReason);
128
+ const evolutionCase = existing
129
+ ? (0, evolution_1.addEvolutionEvidence)(agentRoot, existing.id, evidence)
130
+ : (0, evolution_1.createEvolutionCase)(agentRoot, {
131
+ title: packet.objective,
132
+ problemStatement: packet.summary,
133
+ desiredBehavior: desiredBehaviorForPacket(packet),
134
+ origin: evolutionOriginForPacket(packet),
135
+ evidenceRefs: [evidence],
136
+ frictionSignature,
137
+ packetId: packet.id,
138
+ });
139
+ if (!existing) {
140
+ (0, evolution_1.appendEvolutionTraceEvent)(agentRoot, evolutionCase.id, {
141
+ type: "evidence_added",
142
+ reason: evidence.reason,
143
+ evidenceRefs: [evidence.locator],
144
+ });
145
+ }
146
+ return {
147
+ ...packet,
148
+ payload: {
149
+ ...packet.payload,
150
+ evolutionCaseId: evolutionCase.id,
151
+ },
152
+ };
153
+ }
154
+ function listPonderPackets(agentRoot) {
155
+ return (0, json_store_1.readJsonDir)(packetsDir(agentRoot))
156
+ .filter(isPonderPacket)
157
+ .sort((left, right) => left.createdAt - right.createdAt);
158
+ }
159
+ function readPonderPacket(agentRoot, packetId) {
160
+ const packet = (0, json_store_1.readJsonFile)(packetsDir(agentRoot), packetId);
161
+ return isPonderPacket(packet) ? packet : null;
162
+ }
163
+ function createPonderPacket(agentRoot, input) {
164
+ const now = Date.now();
165
+ const packet = bindHarnessFrictionEvolutionCase(agentRoot, {
166
+ id: (0, json_store_1.generateTimestampId)("pkt"),
167
+ kind: input.kind,
168
+ sop: packetSop(input.kind),
169
+ status: "drafting",
170
+ objective: (0, session_events_1.capStructuredRecordString)(input.objective),
171
+ summary: (0, session_events_1.capStructuredRecordString)(input.summary),
172
+ successCriteria: (0, session_events_1.capStructuredRecordStringArray)(input.successCriteria),
173
+ ...(input.origin ? { origin: input.origin } : {}),
174
+ ...(input.relatedObligationId ? { relatedObligationId: input.relatedObligationId } : {}),
175
+ ...(input.relatedReturnObligationId ? { relatedReturnObligationId: input.relatedReturnObligationId } : {}),
176
+ ...(input.followsPacketId ? { followsPacketId: input.followsPacketId } : {}),
177
+ payload: (0, session_events_1.capStructuredRecordStringLeaves)(input.payload),
178
+ createdAt: now,
179
+ updatedAt: now,
180
+ });
181
+ (0, json_store_1.writeJsonFile)(packetsDir(agentRoot), packet.id, packet);
182
+ (0, runtime_1.emitNervesEvent)({
183
+ component: "mind",
184
+ event: "mind.packet_created",
185
+ message: "ponder packet created",
186
+ meta: { packetId: packet.id, kind: packet.kind, status: packet.status },
187
+ });
188
+ return packet;
189
+ }
190
+ function revisePonderPacket(agentRoot, packetId, input) {
191
+ const existing = readPonderPacket(agentRoot, packetId);
192
+ if (!existing) {
193
+ throw new Error(`packet not found: ${packetId}`);
194
+ }
195
+ if (existing.status !== "drafting") {
196
+ throw new Error("packet is no longer drafting; file a follow-up packet instead");
197
+ }
198
+ const revised = {
199
+ ...existing,
200
+ kind: input.kind,
201
+ sop: packetSop(input.kind),
202
+ objective: (0, session_events_1.capStructuredRecordString)(input.objective),
203
+ summary: (0, session_events_1.capStructuredRecordString)(input.summary),
204
+ successCriteria: (0, session_events_1.capStructuredRecordStringArray)(input.successCriteria),
205
+ payload: (0, session_events_1.capStructuredRecordStringLeaves)(input.payload),
206
+ updatedAt: Date.now(),
207
+ };
208
+ (0, json_store_1.writeJsonFile)(packetsDir(agentRoot), packetId, revised);
209
+ (0, runtime_1.emitNervesEvent)({
210
+ component: "mind",
211
+ event: "mind.packet_revised",
212
+ message: "ponder packet revised",
213
+ meta: { packetId, kind: revised.kind, status: revised.status },
214
+ });
215
+ return revised;
216
+ }
217
+ function advancePonderPacket(agentRoot, packetId, update) {
218
+ const existing = readPonderPacket(agentRoot, packetId);
219
+ if (!existing) {
220
+ throw new Error(`packet not found: ${packetId}`);
221
+ }
222
+ const nextStatus = update.status ?? existing.status;
223
+ if (update.status) {
224
+ const transition = (0, task_lifecycle_1.validateTransition)(existing.status, update.status);
225
+ if (!transition.ok) {
226
+ throw new Error(transition.reason);
227
+ }
228
+ }
229
+ const advanced = {
230
+ ...existing,
231
+ status: nextStatus,
232
+ ...(update.relatedObligationId ? { relatedObligationId: update.relatedObligationId } : {}),
233
+ ...(update.relatedReturnObligationId ? { relatedReturnObligationId: update.relatedReturnObligationId } : {}),
234
+ updatedAt: Date.now(),
235
+ };
236
+ (0, json_store_1.writeJsonFile)(packetsDir(agentRoot), packetId, advanced);
237
+ (0, runtime_1.emitNervesEvent)({
238
+ component: "mind",
239
+ event: "mind.packet_advanced",
240
+ message: "ponder packet advanced",
241
+ meta: { packetId, status: advanced.status },
242
+ });
243
+ return advanced;
244
+ }
245
+ const PONDER_PACKET_COMPLETION_PATH = {
246
+ drafting: ["processing", "validating", "done"],
247
+ processing: ["validating", "done"],
248
+ validating: ["done"],
249
+ collaborating: ["validating", "done"],
250
+ paused: ["processing", "validating", "done"],
251
+ blocked: ["processing", "validating", "done"],
252
+ done: [],
253
+ cancelled: [],
254
+ };
255
+ function completePonderPacket(agentRoot, packetId) {
256
+ let packet = readPonderPacket(agentRoot, packetId);
257
+ if (!packet) {
258
+ throw new Error(`packet not found: ${packetId}`);
259
+ }
260
+ for (const status of PONDER_PACKET_COMPLETION_PATH[packet.status]) {
261
+ packet = advancePonderPacket(agentRoot, packet.id, { status });
262
+ }
263
+ return packet;
264
+ }
265
+ function findHarnessFrictionPacket(agentRoot, origin, frictionSignature) {
266
+ const found = listPonderPackets(agentRoot).find((packet) => {
267
+ if (packet.kind !== "harness_friction")
268
+ return false;
269
+ if (!packet.origin)
270
+ return false;
271
+ return packet.origin.friendId === origin.friendId
272
+ && packet.origin.channel === origin.channel
273
+ && packet.origin.key === origin.key
274
+ && packet.payload.frictionSignature === frictionSignature;
275
+ }) ?? null;
276
+ (0, runtime_1.emitNervesEvent)({
277
+ component: "mind",
278
+ event: "mind.packet_lookup",
279
+ message: "ponder packet lookup completed",
280
+ meta: {
281
+ kind: "harness_friction",
282
+ found: found !== null,
283
+ origin: `${origin.friendId}/${origin.channel}/${origin.key}`,
284
+ frictionSignature,
285
+ },
286
+ });
287
+ return found;
288
+ }