@ouro.bot/cli 0.1.0-alpha.66 → 0.1.0-alpha.660

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