@ouro.bot/cli 0.1.0-alpha.8 → 0.1.0-alpha.800

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 (624) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +249 -176
  3. package/RepairGuide.ouro/agent.json +5 -0
  4. package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
  5. package/RepairGuide.ouro/psyche/SOUL.md +55 -0
  6. package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
  7. package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
  8. package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
  9. package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
  10. package/SerpentGuide.ouro/agent.json +83 -0
  11. package/SerpentGuide.ouro/psyche/SOUL.md +25 -0
  12. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +2 -2
  13. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  14. package/assets/bluebubbles-host +264 -0
  15. package/assets/ouroboros.png +0 -0
  16. package/changelog.json +5563 -0
  17. package/deploy/unraid/Dockerfile +48 -0
  18. package/deploy/unraid/README.txt +3012 -0
  19. package/deploy/unraid/audit-container-spec.sh +4 -0
  20. package/deploy/unraid/container-runtime.json +1 -0
  21. package/deploy/unraid/docker-man-template-transaction.mjs +526 -0
  22. package/deploy/unraid/docker-man-template-xml.cjs +105 -0
  23. package/deploy/unraid/migrate-sanctuary-bundle.mjs +60 -0
  24. package/deploy/unraid/ouro-events/bootstrap-spool.sh +92 -0
  25. package/deploy/unraid/ouro-events/emit-event.mjs +310 -0
  26. package/deploy/unraid/ouro-events/emit-usenet-event.sh +54 -0
  27. package/deploy/unraid/ouro-events/install-usenet-guard.sh +435 -0
  28. package/deploy/unraid/ouro-events/usenet-health.sh +176 -0
  29. package/deploy/unraid/sanctuary-acceptance-adapter.sh +43 -0
  30. package/deploy/unraid/sanctuary-acceptance-contract.json +198 -0
  31. package/deploy/unraid/sanctuary-acceptance-harness.sh +23 -0
  32. package/deploy/unraid/sanctuary-deployment-target.mjs +709 -0
  33. package/deploy/unraid/sanctuary-safe-rename.py +24 -0
  34. package/deploy/unraid/sanctuary-unit16-host-broker.mjs +2030 -0
  35. package/deploy/unraid/sanctuary-unit16-run.sh +560 -0
  36. package/deploy/unraid/sanctuary-unit18-target-audit.sh +27 -0
  37. package/deploy/unraid/sanctuary.ouro/agent.json +24 -0
  38. package/deploy/unraid/sanctuary.ouro/arc/README.md +3 -0
  39. package/deploy/unraid/sanctuary.ouro/bundle-meta.json +5 -0
  40. package/deploy/unraid/sanctuary.ouro/habits/sanctuary-health.md +8 -0
  41. package/deploy/unraid/sanctuary.ouro/provider-readiness.json +11 -0
  42. package/deploy/unraid/sanctuary.ouro/psyche/ASPIRATIONS.md +5 -0
  43. package/deploy/unraid/sanctuary.ouro/psyche/IDENTITY.md +5 -0
  44. package/deploy/unraid/sanctuary.ouro/psyche/LORE.md +11 -0
  45. package/deploy/unraid/sanctuary.ouro/psyche/SOUL.md +25 -0
  46. package/deploy/unraid/sanctuary.ouro/psyche/TACIT.md +11 -0
  47. package/deploy/unraid/sanctuary.ouro/state/policy/steward.json +7 -0
  48. package/deploy/unraid/sanctuary.ouro/tool-profiles.json +23 -0
  49. package/deploy/unraid/sanctuary.xml +27 -0
  50. package/dist/a2a/card.js +57 -0
  51. package/dist/a2a/client.js +180 -0
  52. package/dist/a2a/config.js +50 -0
  53. package/dist/a2a/delegation-stores.js +56 -0
  54. package/dist/a2a/did-resolution.js +93 -0
  55. package/dist/a2a/identity.js +170 -0
  56. package/dist/a2a/inbound-share.js +107 -0
  57. package/dist/a2a/mission-result-wire.js +196 -0
  58. package/dist/a2a/onboarding.js +115 -0
  59. package/dist/a2a/pin-store.js +132 -0
  60. package/dist/a2a/seen-ledger.js +120 -0
  61. package/dist/a2a/server.js +604 -0
  62. package/dist/a2a/task-store.js +69 -0
  63. package/dist/a2a/transport.js +45 -0
  64. package/dist/a2a/types.js +3 -0
  65. package/dist/arc/attention-types.js +8 -0
  66. package/dist/arc/cares.js +360 -0
  67. package/dist/arc/episodes.js +118 -0
  68. package/dist/arc/evolution.js +490 -0
  69. package/dist/arc/flight-recorder.js +1034 -0
  70. package/dist/arc/intentions.js +134 -0
  71. package/dist/arc/json-store.js +117 -0
  72. package/dist/arc/obligations.js +386 -0
  73. package/dist/arc/packets.js +336 -0
  74. package/dist/arc/presence.js +185 -0
  75. package/dist/arc/task-lifecycle.js +57 -0
  76. package/dist/commerce/store.js +755 -0
  77. package/dist/commerce/types.js +3 -0
  78. package/dist/heart/active-work.js +1009 -0
  79. package/dist/heart/agent-entry.js +252 -3
  80. package/dist/heart/approval-files.js +113 -0
  81. package/dist/heart/approval-store.js +950 -0
  82. package/dist/heart/attachments/image-normalize.js +194 -0
  83. package/dist/heart/attachments/materialize.js +97 -0
  84. package/dist/heart/attachments/originals.js +88 -0
  85. package/dist/heart/attachments/render.js +29 -0
  86. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  87. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  88. package/dist/heart/attachments/sources/index.js +18 -0
  89. package/dist/heart/attachments/sources/telegram.js +71 -0
  90. package/dist/heart/attachments/store.js +132 -0
  91. package/dist/heart/attachments/types.js +93 -0
  92. package/dist/heart/auth/auth-flow.js +495 -0
  93. package/dist/heart/autonomy-budget.js +478 -0
  94. package/dist/heart/awaiting/await-alert.js +148 -0
  95. package/dist/heart/awaiting/await-expiry.js +143 -0
  96. package/dist/heart/awaiting/await-loader.js +91 -0
  97. package/dist/heart/awaiting/await-parser.js +149 -0
  98. package/dist/heart/awaiting/await-runtime-state.js +100 -0
  99. package/dist/heart/awaiting/await-scheduler.js +382 -0
  100. package/dist/heart/background-operations.js +281 -0
  101. package/dist/heart/bridges/manager.js +478 -0
  102. package/dist/heart/bridges/state-machine.js +135 -0
  103. package/dist/heart/bridges/store.js +135 -0
  104. package/dist/heart/bundle-state.js +168 -0
  105. package/dist/heart/commitments.js +135 -0
  106. package/dist/heart/config-registry.js +331 -0
  107. package/dist/heart/config.js +195 -137
  108. package/dist/heart/context-loss-gauntlet.js +387 -0
  109. package/dist/heart/context-loss-sentinel.js +1157 -0
  110. package/dist/heart/core.js +2257 -338
  111. package/dist/heart/cross-chat-delivery.js +133 -0
  112. package/dist/heart/daemon/agent-config-check.js +451 -0
  113. package/dist/heart/daemon/agent-discovery.js +263 -0
  114. package/dist/heart/daemon/agent-service.js +542 -0
  115. package/dist/heart/daemon/agentic-repair.js +547 -0
  116. package/dist/heart/daemon/await-private-wake.js +59 -0
  117. package/dist/heart/daemon/bluebubbles-cli-integration.js +71 -0
  118. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  119. package/dist/heart/daemon/bluebubbles-host-protocol.js +433 -0
  120. package/dist/heart/daemon/bluebubbles-host.js +273 -0
  121. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  122. package/dist/heart/daemon/cadence.js +180 -0
  123. package/dist/heart/daemon/cli-defaults.js +836 -0
  124. package/dist/heart/daemon/cli-desk.js +322 -0
  125. package/dist/heart/daemon/cli-exec.js +8730 -0
  126. package/dist/heart/daemon/cli-help.js +710 -0
  127. package/dist/heart/daemon/cli-parse.js +2719 -0
  128. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  129. package/dist/heart/daemon/cli-render.js +777 -0
  130. package/dist/heart/daemon/cli-types.js +8 -0
  131. package/dist/heart/daemon/connect-bay.js +323 -0
  132. package/dist/heart/daemon/container-credential-bootstrap.js +273 -0
  133. package/dist/heart/daemon/container-healthcheck.js +112 -0
  134. package/dist/heart/daemon/container-runtime.js +97 -0
  135. package/dist/heart/daemon/container-spec-auditor-main.js +170 -0
  136. package/dist/heart/daemon/container-spec-auditor.js +236 -0
  137. package/dist/heart/daemon/daemon-bootstrap-startup.js +107 -0
  138. package/dist/heart/daemon/daemon-cli.js +30 -786
  139. package/dist/heart/daemon/daemon-entry.js +971 -13
  140. package/dist/heart/daemon/daemon-health.js +186 -0
  141. package/dist/heart/daemon/daemon-rollup.js +57 -0
  142. package/dist/heart/daemon/daemon-runtime-sync.js +287 -0
  143. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  144. package/dist/heart/daemon/daemon.js +2156 -28
  145. package/dist/heart/daemon/dns-workflow.js +394 -0
  146. package/dist/heart/daemon/doctor-types.js +8 -0
  147. package/dist/heart/daemon/doctor.js +1755 -0
  148. package/dist/heart/daemon/freshness.js +345 -0
  149. package/dist/heart/daemon/habit-private-wake.js +61 -0
  150. package/dist/heart/daemon/health-monitor.js +142 -11
  151. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  152. package/dist/heart/daemon/hooks/bundle-meta.js +226 -0
  153. package/dist/heart/daemon/http-health-probe.js +80 -0
  154. package/dist/heart/daemon/human-command-screens.js +234 -0
  155. package/dist/heart/daemon/human-readiness.js +114 -0
  156. package/dist/heart/daemon/inner-status.js +78 -0
  157. package/dist/heart/daemon/interactive-repair.js +394 -0
  158. package/dist/heart/daemon/launchd.js +188 -0
  159. package/dist/heart/daemon/log-tailer.js +82 -12
  160. package/dist/heart/daemon/logs-prune.js +132 -0
  161. package/dist/heart/daemon/mcp-canary.js +524 -0
  162. package/dist/heart/daemon/message-router.js +80 -11
  163. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  164. package/dist/heart/daemon/os-cron-deps.js +135 -0
  165. package/dist/heart/daemon/os-cron.js +22 -14
  166. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  167. package/dist/heart/daemon/ouro-entry.js +3 -1
  168. package/dist/heart/daemon/plugin-cli.js +432 -0
  169. package/dist/heart/daemon/process-manager.js +739 -54
  170. package/dist/heart/daemon/provider-discovery.js +137 -0
  171. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  172. package/dist/heart/daemon/prunable-bundle.js +144 -0
  173. package/dist/heart/daemon/pulse.js +511 -0
  174. package/dist/heart/daemon/readiness-repair.js +365 -0
  175. package/dist/heart/daemon/run-hooks.js +39 -0
  176. package/dist/heart/daemon/runtime-logging.js +92 -16
  177. package/dist/heart/daemon/runtime-metadata.js +191 -0
  178. package/dist/{repertoire/tasks/lifecycle.js → heart/daemon/runtime-mode.js} +37 -39
  179. package/dist/heart/daemon/safe-mode.js +161 -0
  180. package/dist/heart/daemon/sanctuary-acceptance-adapter.js +2609 -0
  181. package/dist/heart/daemon/sanctuary-acceptance-harness.js +1866 -0
  182. package/dist/heart/daemon/sanctuary-acceptance-marker.js +267 -0
  183. package/dist/heart/daemon/sanctuary-acceptance-scenarios.js +976 -0
  184. package/dist/heart/daemon/sanctuary-bundle-migration.js +728 -0
  185. package/dist/heart/daemon/sanctuary-package-management.js +103 -0
  186. package/dist/heart/daemon/sanctuary-scheduler-liveness.js +227 -0
  187. package/dist/heart/daemon/sanctuary-scheduler-origin.js +132 -0
  188. package/dist/heart/daemon/sense-manager.js +948 -0
  189. package/dist/heart/daemon/session-id-resolver.js +131 -0
  190. package/dist/heart/daemon/skill-management-installer.js +94 -0
  191. package/dist/heart/daemon/socket-client.js +370 -0
  192. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  193. package/dist/heart/daemon/startup-tui.js +339 -0
  194. package/dist/heart/daemon/supercronic-supervisor.js +282 -0
  195. package/dist/heart/daemon/task-scheduler.js +117 -39
  196. package/dist/heart/daemon/terminal-ui.js +499 -0
  197. package/dist/heart/daemon/thoughts.js +591 -0
  198. package/dist/heart/daemon/up-progress.js +366 -0
  199. package/dist/heart/daemon/vault-items.js +56 -0
  200. package/dist/heart/delegation.js +59 -0
  201. package/dist/heart/external-events/router.js +1414 -0
  202. package/dist/heart/habits/habit-cancel.js +810 -0
  203. package/dist/heart/habits/habit-lifecycle.js +1327 -0
  204. package/dist/heart/habits/habit-migration.js +194 -0
  205. package/dist/heart/habits/habit-parser.js +278 -0
  206. package/dist/heart/habits/habit-runtime-state.js +93 -0
  207. package/dist/heart/habits/habit-scheduler.js +653 -0
  208. package/dist/heart/habits/habit-session-summary.js +318 -0
  209. package/dist/heart/habits/habit-session.js +636 -0
  210. package/dist/heart/{daemon → hatch}/hatch-animation.js +10 -3
  211. package/dist/heart/{daemon → hatch}/hatch-flow.js +57 -139
  212. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  213. package/dist/heart/hatch/specialist-orchestrator.js +129 -0
  214. package/dist/heart/hatch/specialist-prompt.js +102 -0
  215. package/dist/heart/hatch/specialist-tools.js +318 -0
  216. package/dist/heart/identity.js +297 -67
  217. package/dist/heart/kept-notes.js +289 -0
  218. package/dist/heart/kicks.js +2 -20
  219. package/dist/heart/machine-identity.js +161 -0
  220. package/dist/heart/mail-import-discovery.js +353 -0
  221. package/dist/heart/mailbox/mailbox-http-hooks.js +98 -0
  222. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  223. package/dist/heart/mailbox/mailbox-http-routes.js +398 -0
  224. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  225. package/dist/heart/mailbox/mailbox-http-transport.js +129 -0
  226. package/dist/heart/mailbox/mailbox-http.js +99 -0
  227. package/dist/heart/mailbox/mailbox-read.js +39 -0
  228. package/dist/heart/mailbox/mailbox-types.js +27 -0
  229. package/dist/heart/mailbox/mailbox-view.js +197 -0
  230. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  231. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  232. package/dist/heart/mailbox/readers/mail.js +375 -0
  233. package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
  234. package/dist/heart/mailbox/readers/sessions.js +232 -0
  235. package/dist/heart/mailbox/readers/shared.js +111 -0
  236. package/dist/heart/mcp/mcp-server.js +696 -0
  237. package/dist/heart/migrate-config.js +100 -0
  238. package/dist/heart/model-capabilities.js +59 -0
  239. package/dist/heart/orientation-frame.js +345 -0
  240. package/dist/heart/platform.js +81 -0
  241. package/dist/heart/primitives.js +1 -1
  242. package/dist/heart/private-runtime/decision-renderer.js +158 -0
  243. package/dist/heart/private-runtime/index.js +18 -0
  244. package/dist/heart/private-runtime/ledger.js +221 -0
  245. package/dist/heart/private-runtime/policy.js +252 -0
  246. package/dist/heart/private-runtime/types.js +2 -0
  247. package/dist/heart/progress-story.js +42 -0
  248. package/dist/heart/provider-attempt.js +137 -0
  249. package/dist/heart/provider-binding-resolver.js +273 -0
  250. package/dist/heart/provider-credentials.js +449 -0
  251. package/dist/heart/provider-failover.js +311 -0
  252. package/dist/heart/provider-models.js +96 -0
  253. package/dist/heart/provider-ping.js +265 -0
  254. package/dist/heart/provider-readiness-cache.js +119 -0
  255. package/dist/heart/provider-visibility.js +188 -0
  256. package/dist/heart/providers/anthropic-token.js +131 -0
  257. package/dist/heart/providers/anthropic.js +236 -58
  258. package/dist/heart/providers/azure.js +104 -13
  259. package/dist/heart/providers/error-classification.js +127 -0
  260. package/dist/heart/providers/github-copilot.js +145 -0
  261. package/dist/heart/providers/minimax-vlm.js +189 -0
  262. package/dist/heart/providers/minimax.js +29 -7
  263. package/dist/heart/providers/openai-codex-token.js +349 -0
  264. package/dist/heart/providers/openai-codex.js +63 -39
  265. package/dist/heart/providers/openai-compatible.js +177 -0
  266. package/dist/heart/run-ledger.js +247 -0
  267. package/dist/heart/runtime-capability-check.js +170 -0
  268. package/dist/heart/runtime-credentials.js +607 -0
  269. package/dist/heart/runtime-cwd.js +87 -0
  270. package/dist/heart/sense-truth.js +79 -0
  271. package/dist/heart/session-activity.js +235 -0
  272. package/dist/heart/session-events.js +1318 -0
  273. package/dist/heart/session-playback-cli-main.js +5 -0
  274. package/dist/heart/session-playback-cli.js +36 -0
  275. package/dist/heart/session-playback.js +231 -0
  276. package/dist/heart/session-stats-cli-main.js +5 -0
  277. package/dist/heart/session-stats.js +182 -0
  278. package/dist/heart/session-transcript.js +133 -0
  279. package/dist/heart/start-of-turn-packet.js +372 -0
  280. package/dist/heart/steward-policy.js +302 -0
  281. package/dist/heart/streaming.js +682 -207
  282. package/dist/heart/structured-output.js +196 -0
  283. package/dist/heart/sync-classification.js +176 -0
  284. package/dist/heart/sync.js +449 -0
  285. package/dist/heart/target-resolution.js +127 -0
  286. package/dist/heart/tempo.js +93 -0
  287. package/dist/heart/temporal-view.js +41 -0
  288. package/dist/heart/timeouts.js +101 -0
  289. package/dist/heart/tool-activity-callbacks.js +59 -0
  290. package/dist/heart/tool-approval.js +342 -0
  291. package/dist/heart/tool-description.js +155 -0
  292. package/dist/heart/tool-friction.js +55 -0
  293. package/dist/heart/tool-loop.js +200 -0
  294. package/dist/heart/turn-context.js +481 -0
  295. package/dist/heart/turn-coordinator.js +28 -0
  296. package/dist/heart/versioning/ouro-bot-global-installer.js +129 -0
  297. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  298. package/dist/heart/versioning/ouro-path-installer.js +432 -0
  299. package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
  300. package/dist/heart/{daemon → versioning}/ouro-uti.js +11 -2
  301. package/dist/heart/versioning/ouro-version-manager.js +409 -0
  302. package/dist/heart/versioning/staged-restart.js +146 -0
  303. package/dist/heart/versioning/update-checker.js +116 -0
  304. package/dist/heart/versioning/update-hooks.js +154 -0
  305. package/dist/heart/versioning/version-intent.js +114 -0
  306. package/dist/heart/versioning/wrapper-publish-guard.js +86 -0
  307. package/dist/heart/work-card.js +380 -0
  308. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  309. package/dist/mailbox-ui/assets/index-J8zDwHmE.js +1 -0
  310. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  311. package/dist/mailbox-ui/index.html +16 -0
  312. package/dist/mailroom/attention.js +167 -0
  313. package/dist/mailroom/autonomy.js +209 -0
  314. package/dist/mailroom/blob-store.js +889 -0
  315. package/dist/mailroom/body-cache.js +61 -0
  316. package/dist/mailroom/cache-sync-cli.js +58 -0
  317. package/dist/mailroom/core.js +803 -0
  318. package/dist/mailroom/entry.js +160 -0
  319. package/dist/mailroom/file-store.js +568 -0
  320. package/dist/mailroom/hosted-cache-sync.js +384 -0
  321. package/dist/mailroom/mbox-import.js +393 -0
  322. package/dist/mailroom/migration.js +164 -0
  323. package/dist/mailroom/outbound.js +380 -0
  324. package/dist/mailroom/policy.js +263 -0
  325. package/dist/mailroom/reader.js +292 -0
  326. package/dist/mailroom/search-cache.js +513 -0
  327. package/dist/mailroom/search-relevance.js +319 -0
  328. package/dist/mailroom/smtp-ingress.js +176 -0
  329. package/dist/mailroom/source-state.js +176 -0
  330. package/dist/mailroom/thread.js +109 -0
  331. package/dist/mailroom/travel-extract.js +89 -0
  332. package/dist/mind/bundle-manifest.js +93 -1
  333. package/dist/mind/context.js +287 -104
  334. package/dist/mind/desk-section.js +362 -0
  335. package/dist/mind/diary-integrity.js +60 -0
  336. package/dist/mind/{memory.js → diary.js} +90 -98
  337. package/dist/mind/embedding-provider.js +60 -0
  338. package/dist/mind/file-state.js +179 -0
  339. package/dist/mind/first-impressions.js +16 -2
  340. package/dist/mind/{associative-recall.js → note-search.js} +61 -60
  341. package/dist/mind/obligation-steering.js +227 -0
  342. package/dist/mind/pending.js +102 -9
  343. package/dist/mind/phrases.js +1 -0
  344. package/dist/mind/prompt-budget.js +479 -0
  345. package/dist/mind/prompt-refresh.js +3 -2
  346. package/dist/mind/prompt.js +1377 -140
  347. package/dist/mind/provenance-trust.js +26 -0
  348. package/dist/mind/record-paths.js +312 -0
  349. package/dist/mind/scrutiny.js +173 -0
  350. package/dist/mind/session-transaction.js +415 -0
  351. package/dist/mind/token-estimate.js +8 -12
  352. package/dist/nerves/cli-logging.js +22 -3
  353. package/dist/nerves/coverage/audit-rules.js +15 -6
  354. package/dist/nerves/coverage/audit.js +28 -2
  355. package/dist/nerves/coverage/cli.js +1 -1
  356. package/dist/nerves/coverage/contract.js +5 -5
  357. package/dist/nerves/coverage/file-completeness.js +139 -5
  358. package/dist/nerves/coverage/run-artifacts.js +56 -36
  359. package/dist/nerves/coverage/source-scanner.js +4 -4
  360. package/dist/nerves/event-buffer.js +111 -0
  361. package/dist/nerves/index.js +305 -9
  362. package/dist/nerves/observation.js +20 -0
  363. package/dist/nerves/redact.js +79 -0
  364. package/dist/nerves/review/cli-main.js +5 -0
  365. package/dist/nerves/review/cli.js +156 -0
  366. package/dist/nerves/review/core.js +159 -0
  367. package/dist/nerves/runtime.js +17 -1
  368. package/dist/repertoire/ado-client.js +17 -56
  369. package/dist/repertoire/ado-semantic.js +16 -10
  370. package/dist/repertoire/api-client.js +97 -0
  371. package/dist/repertoire/bitwarden-store.js +1045 -0
  372. package/dist/repertoire/bundle-templates.js +71 -0
  373. package/dist/repertoire/bw-installer.js +180 -0
  374. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  375. package/dist/repertoire/coding/context-pack.js +331 -0
  376. package/dist/repertoire/coding/feedback.js +322 -0
  377. package/dist/repertoire/coding/index.js +18 -3
  378. package/dist/repertoire/coding/manager.js +228 -14
  379. package/dist/repertoire/coding/spawner.js +61 -14
  380. package/dist/repertoire/coding/tools.js +279 -12
  381. package/dist/repertoire/coding/workbench-client.js +272 -0
  382. package/dist/repertoire/coding/workbench-manager.js +346 -0
  383. package/dist/repertoire/commerce-errors.js +109 -0
  384. package/dist/repertoire/commerce-self-test.js +156 -0
  385. package/dist/repertoire/credential-access.js +178 -0
  386. package/dist/repertoire/data/ado-endpoints.json +188 -0
  387. package/dist/repertoire/desk/classifier.js +362 -0
  388. package/dist/repertoire/duffel-client.js +185 -0
  389. package/dist/repertoire/github-client.js +14 -55
  390. package/dist/repertoire/graph-client.js +11 -52
  391. package/dist/repertoire/guardrails.js +1083 -0
  392. package/dist/repertoire/mcp-client.js +295 -0
  393. package/dist/repertoire/mcp-manager.js +434 -0
  394. package/dist/repertoire/mcp-tools.js +83 -0
  395. package/dist/repertoire/plugin-mcp.js +175 -0
  396. package/dist/repertoire/plugins.js +253 -0
  397. package/dist/repertoire/relationship-authorization.js +194 -0
  398. package/dist/repertoire/shell-sessions.js +133 -0
  399. package/dist/repertoire/skills.js +45 -24
  400. package/dist/repertoire/stripe-client.js +131 -0
  401. package/dist/repertoire/tool-arguments.js +148 -0
  402. package/dist/repertoire/tool-results.js +29 -0
  403. package/dist/repertoire/tools-a2a.js +699 -0
  404. package/dist/repertoire/tools-attachments.js +322 -0
  405. package/dist/repertoire/tools-awaiting.js +575 -0
  406. package/dist/repertoire/tools-base.js +85 -707
  407. package/dist/repertoire/tools-bluebubbles.js +95 -0
  408. package/dist/repertoire/tools-bridge.js +144 -0
  409. package/dist/repertoire/tools-bundle.js +993 -0
  410. package/dist/repertoire/tools-commerce.js +253 -0
  411. package/dist/repertoire/tools-config.js +186 -0
  412. package/dist/repertoire/tools-continuity.js +575 -0
  413. package/dist/repertoire/tools-credential.js +383 -0
  414. package/dist/repertoire/tools-evolution.js +527 -0
  415. package/dist/repertoire/tools-files.js +344 -0
  416. package/dist/repertoire/tools-flight.js +290 -0
  417. package/dist/repertoire/tools-flow.js +119 -0
  418. package/dist/repertoire/tools-github.js +3 -8
  419. package/dist/repertoire/tools-habits.js +103 -0
  420. package/dist/repertoire/tools-mail.js +1828 -0
  421. package/dist/repertoire/tools-notes.js +485 -0
  422. package/dist/repertoire/tools-obligations.js +182 -0
  423. package/dist/repertoire/tools-orientation.js +31 -0
  424. package/dist/repertoire/tools-record.js +482 -0
  425. package/dist/repertoire/tools-rsvp.js +139 -0
  426. package/dist/repertoire/tools-runtime.js +150 -0
  427. package/dist/repertoire/tools-session.js +1108 -0
  428. package/dist/repertoire/tools-shell.js +133 -0
  429. package/dist/repertoire/tools-steward-policy.js +95 -0
  430. package/dist/repertoire/tools-stripe.js +224 -0
  431. package/dist/repertoire/tools-surface.js +369 -0
  432. package/dist/repertoire/tools-teams.js +67 -61
  433. package/dist/repertoire/tools-telegram-contacts.js +37 -0
  434. package/dist/repertoire/tools-travel.js +125 -0
  435. package/dist/repertoire/tools-trip.js +982 -0
  436. package/dist/repertoire/tools-unraid.js +484 -0
  437. package/dist/repertoire/tools-user-profile.js +146 -0
  438. package/dist/repertoire/tools-vault.js +40 -0
  439. package/dist/repertoire/tools-voice.js +145 -0
  440. package/dist/repertoire/tools.js +441 -102
  441. package/dist/repertoire/travel-api-client.js +360 -0
  442. package/dist/repertoire/unraid-client.js +155 -0
  443. package/dist/repertoire/unraid-restart.js +212 -0
  444. package/dist/repertoire/user-profile.js +131 -0
  445. package/dist/repertoire/vault-setup.js +246 -0
  446. package/dist/repertoire/vault-unlock.js +628 -0
  447. package/dist/rsvp/aisleplanner-client.js +354 -0
  448. package/dist/rsvp/cli.js +926 -0
  449. package/dist/rsvp/config.js +327 -0
  450. package/dist/rsvp/cutover.js +433 -0
  451. package/dist/rsvp/diagnostics.js +232 -0
  452. package/dist/rsvp/diff-renderer.js +176 -0
  453. package/dist/rsvp/habit-policy.js +110 -0
  454. package/dist/rsvp/habit-stage.js +123 -0
  455. package/dist/rsvp/incident-bundle.js +97 -0
  456. package/dist/rsvp/migration.js +204 -0
  457. package/dist/rsvp/native-habit-runner.js +630 -0
  458. package/dist/rsvp/outbound-state.js +628 -0
  459. package/dist/rsvp/query.js +118 -0
  460. package/dist/rsvp/replay.js +233 -0
  461. package/dist/rsvp/snapshot.js +232 -0
  462. package/dist/rsvp/spend-ledger.js +175 -0
  463. package/dist/scripts/claude-code-hook.js +41 -0
  464. package/dist/scripts/claude-code-stop-hook.js +47 -0
  465. package/dist/senses/a2a-entry.js +115 -0
  466. package/dist/senses/attention-queue.js +186 -0
  467. package/dist/senses/await-turn-message.js +58 -0
  468. package/dist/senses/bluebubbles/active-turns.js +216 -0
  469. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  470. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  471. package/dist/senses/bluebubbles/client.js +799 -0
  472. package/dist/senses/bluebubbles/context-packet.js +207 -0
  473. package/dist/senses/bluebubbles/context-smoke.js +144 -0
  474. package/dist/senses/bluebubbles/entry.js +90 -0
  475. package/dist/senses/bluebubbles/inbound-log.js +127 -0
  476. package/dist/senses/bluebubbles/index.js +3839 -0
  477. package/dist/senses/bluebubbles/latest-turn.js +311 -0
  478. package/dist/senses/bluebubbles/media.js +389 -0
  479. package/dist/senses/bluebubbles/model.js +392 -0
  480. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +57 -6
  481. package/dist/senses/bluebubbles/outbound-state.js +308 -0
  482. package/dist/senses/bluebubbles/processed-log.js +133 -0
  483. package/dist/senses/bluebubbles/reaction-policy.js +47 -0
  484. package/dist/senses/bluebubbles/replay.js +284 -0
  485. package/dist/senses/bluebubbles/runtime-state.js +137 -0
  486. package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
  487. package/dist/senses/bluebubbles/session-cleanup.js +72 -0
  488. package/dist/senses/bluebubbles/webhook-registration.js +228 -0
  489. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  490. package/dist/senses/cli/bracketed-paste.js +82 -0
  491. package/dist/senses/cli/image-paste.js +287 -0
  492. package/dist/senses/cli/image-ref-navigation.js +75 -0
  493. package/dist/senses/cli/ink-app.js +156 -0
  494. package/dist/senses/cli/inline-diff.js +64 -0
  495. package/dist/senses/cli/input-keys.js +174 -0
  496. package/dist/senses/cli/kill-ring.js +86 -0
  497. package/dist/senses/cli/message-list.js +51 -0
  498. package/dist/senses/cli/ouro-tui.js +607 -0
  499. package/dist/senses/cli/spinner-imperative.js +135 -0
  500. package/dist/senses/cli/spinner.js +101 -0
  501. package/dist/senses/cli/status-line.js +60 -0
  502. package/dist/senses/cli/streaming-markdown.js +526 -0
  503. package/dist/senses/cli/tool-display.js +85 -0
  504. package/dist/senses/cli/tool-render.js +85 -0
  505. package/dist/senses/cli/tui-store.js +241 -0
  506. package/dist/senses/cli/virtual-list.js +35 -0
  507. package/dist/senses/cli-entry.js +60 -8
  508. package/dist/senses/cli-layout.js +187 -0
  509. package/dist/senses/cli.js +813 -281
  510. package/dist/senses/commands.js +66 -3
  511. package/dist/senses/context-packet-ledger.js +371 -0
  512. package/dist/senses/context-packets.js +154 -0
  513. package/dist/senses/continuity.js +94 -0
  514. package/dist/senses/habit-lifecycle-guard.js +24 -0
  515. package/dist/senses/habit-turn-message.js +160 -0
  516. package/dist/senses/ingress-evidence.js +2 -0
  517. package/dist/senses/mail-entry.js +66 -0
  518. package/dist/senses/mail.js +524 -0
  519. package/dist/senses/pipeline.js +1213 -0
  520. package/dist/senses/private-runtime-worker.js +859 -0
  521. package/dist/senses/private-runtime.js +1496 -0
  522. package/dist/senses/proactive-content-guard.js +51 -0
  523. package/dist/senses/sanctuary-download-credit-presentation.js +31 -0
  524. package/dist/senses/sanctuary-full-visibility-contract.js +302 -0
  525. package/dist/senses/sanctuary-grounding.js +118 -0
  526. package/dist/senses/sanctuary-health-acceptance-probe-entry.js +12 -0
  527. package/dist/senses/sanctuary-health-acceptance-probe.js +774 -0
  528. package/dist/senses/sanctuary-health-runner.js +101 -0
  529. package/dist/senses/sanctuary-health.js +408 -0
  530. package/dist/senses/sanctuary-interactive-control.js +306 -0
  531. package/dist/senses/sanctuary-media-catalog-contract.js +235 -0
  532. package/dist/senses/sanctuary-media-optimization.js +514 -0
  533. package/dist/senses/sanctuary-runtime.js +338 -0
  534. package/dist/senses/sanctuary-sab.js +85 -0
  535. package/dist/senses/sanctuary-storage-optimization-contract.js +32 -0
  536. package/dist/senses/shared-turn.js +571 -0
  537. package/dist/senses/surface-tool.js +109 -0
  538. package/dist/senses/teams-entry.js +60 -8
  539. package/dist/senses/teams.js +953 -211
  540. package/dist/senses/telegram-admission.js +711 -0
  541. package/dist/senses/telegram-approval-runtime.js +566 -0
  542. package/dist/senses/telegram-attachments.js +182 -0
  543. package/dist/senses/telegram-audit-ledger.js +220 -0
  544. package/dist/senses/telegram-client.js +1677 -0
  545. package/dist/senses/telegram-effect-adapter.js +859 -0
  546. package/dist/senses/telegram-entry.js +83 -0
  547. package/dist/senses/telegram.js +2026 -0
  548. package/dist/senses/trust-gate.js +207 -2
  549. package/dist/senses/voice/audio-playback.js +237 -0
  550. package/dist/senses/voice/audio-routing.js +119 -0
  551. package/dist/senses/voice/elevenlabs.js +202 -0
  552. package/dist/senses/voice/floor-control.js +431 -0
  553. package/dist/senses/voice/floor-controller.js +115 -0
  554. package/dist/senses/voice/golden-path.js +116 -0
  555. package/dist/senses/voice/index.js +29 -0
  556. package/dist/senses/voice/meeting.js +113 -0
  557. package/dist/senses/voice/outbound.js +190 -0
  558. package/dist/senses/voice/phone.js +33 -0
  559. package/dist/senses/voice/playback.js +139 -0
  560. package/dist/senses/voice/realtime-eval.js +496 -0
  561. package/dist/senses/voice/realtime-trace.js +531 -0
  562. package/dist/senses/voice/transcript.js +70 -0
  563. package/dist/senses/voice/turn.js +191 -0
  564. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  565. package/dist/senses/voice/twilio-phone.js +5081 -0
  566. package/dist/senses/voice/types.js +2 -0
  567. package/dist/senses/voice/whisper.js +161 -0
  568. package/dist/senses/voice-entry.js +81 -0
  569. package/dist/senses/voice-realtime-eval-command.js +99 -0
  570. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  571. package/dist/senses/voice-twilio-entry.js +87 -0
  572. package/dist/trips/core.js +138 -0
  573. package/dist/trips/store.js +265 -0
  574. package/dist/util/frontmatter.js +69 -0
  575. package/npm-shrinkwrap.json +8144 -0
  576. package/package.json +82 -12
  577. package/skills/agent-commerce.md +113 -0
  578. package/skills/browser-navigation.md +117 -0
  579. package/skills/commerce-setup-guide.md +116 -0
  580. package/skills/commerce-setup.md +84 -0
  581. package/skills/configure-dev-tools.md +99 -0
  582. package/skills/travel-planning.md +138 -0
  583. package/AdoptionSpecialist.ouro/agent.json +0 -20
  584. package/AdoptionSpecialist.ouro/psyche/SOUL.md +0 -22
  585. package/dist/heart/daemon/specialist-orchestrator.js +0 -160
  586. package/dist/heart/daemon/specialist-prompt.js +0 -47
  587. package/dist/heart/daemon/specialist-session.js +0 -142
  588. package/dist/heart/daemon/specialist-tools.js +0 -132
  589. package/dist/heart/daemon/subagent-installer.js +0 -125
  590. package/dist/inner-worker-entry.js +0 -4
  591. package/dist/mind/friends/channel.js +0 -49
  592. package/dist/mind/friends/resolver.js +0 -84
  593. package/dist/mind/friends/store-file.js +0 -171
  594. package/dist/mind/friends/store.js +0 -4
  595. package/dist/mind/friends/tokens.js +0 -26
  596. package/dist/mind/friends/types.js +0 -21
  597. package/dist/repertoire/tasks/board.js +0 -122
  598. package/dist/repertoire/tasks/index.js +0 -210
  599. package/dist/repertoire/tasks/middleware.js +0 -65
  600. package/dist/repertoire/tasks/parser.js +0 -173
  601. package/dist/repertoire/tasks/scanner.js +0 -132
  602. package/dist/repertoire/tasks/transitions.js +0 -145
  603. package/dist/senses/bluebubbles-client.js +0 -279
  604. package/dist/senses/bluebubbles-entry.js +0 -11
  605. package/dist/senses/bluebubbles-model.js +0 -253
  606. package/dist/senses/bluebubbles.js +0 -332
  607. package/dist/senses/inner-dialog-worker.js +0 -61
  608. package/dist/senses/inner-dialog.js +0 -231
  609. package/subagents/README.md +0 -73
  610. package/subagents/work-doer.md +0 -233
  611. package/subagents/work-merger.md +0 -624
  612. package/subagents/work-planner.md +0 -373
  613. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  614. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  615. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  616. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  617. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  618. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  619. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  620. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  621. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  622. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  623. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  624. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
@@ -34,60 +34,43 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.cosineSimilarity = cosineSimilarity;
37
- exports.recallFactsForQuery = recallFactsForQuery;
38
- exports.injectAssociativeRecall = injectAssociativeRecall;
37
+ exports.searchDiaryFactsForQuery = searchDiaryFactsForQuery;
38
+ exports.injectNoteSearchContext = injectNoteSearchContext;
39
39
  const fs = __importStar(require("fs"));
40
40
  const path = __importStar(require("path"));
41
- const config_1 = require("../heart/config");
42
- const identity_1 = require("../heart/identity");
43
41
  const runtime_1 = require("../nerves/runtime");
44
- const DEFAULT_EMBEDDING_MODEL = "text-embedding-3-small";
42
+ const diary_1 = require("./diary");
43
+ const provenance_trust_1 = require("./provenance-trust");
44
+ const embedding_provider_1 = require("./embedding-provider");
45
45
  const DEFAULT_MIN_SCORE = 0.5;
46
46
  const DEFAULT_TOP_K = 3;
47
- class OpenAIEmbeddingProvider {
48
- apiKey;
49
- model;
50
- constructor(apiKey, model = DEFAULT_EMBEDDING_MODEL) {
51
- this.apiKey = apiKey;
52
- this.model = model;
53
- }
54
- async embed(texts) {
55
- const response = await fetch("https://api.openai.com/v1/embeddings", {
56
- method: "POST",
57
- headers: {
58
- Authorization: `Bearer ${this.apiKey}`,
59
- "Content-Type": "application/json",
60
- },
61
- body: JSON.stringify({
62
- model: this.model,
63
- input: texts,
64
- }),
65
- });
66
- if (!response.ok) {
67
- throw new Error(`embedding request failed: ${response.status} ${response.statusText}`);
68
- }
69
- const payload = (await response.json());
70
- if (!payload.data || payload.data.length !== texts.length) {
71
- throw new Error("embedding response missing expected vectors");
72
- }
73
- return payload.data.map((entry) => entry.embedding);
74
- }
75
- }
76
47
  function createDefaultProvider() {
77
- const apiKey = (0, config_1.getOpenAIEmbeddingsApiKey)();
78
- if (!apiKey) {
48
+ const provider = (0, embedding_provider_1.createDefaultEmbeddingProvider)();
49
+ if (!provider) {
79
50
  throw new Error("openaiEmbeddingsApiKey not configured");
80
51
  }
81
- return new OpenAIEmbeddingProvider(apiKey);
52
+ return provider;
82
53
  }
83
- function readFacts(memoryRoot) {
84
- const factsPath = path.join(memoryRoot, "facts.jsonl");
54
+ function readFacts(diaryRoot) {
55
+ const factsPath = path.join(diaryRoot, "facts.jsonl");
85
56
  if (!fs.existsSync(factsPath))
86
57
  return [];
87
58
  const raw = fs.readFileSync(factsPath, "utf8").trim();
88
59
  if (!raw)
89
60
  return [];
90
- return raw.split("\n").map((line) => JSON.parse(line));
61
+ const facts = [];
62
+ for (const line of raw.split("\n")) {
63
+ const trimmed = line.trim();
64
+ if (!trimmed)
65
+ continue;
66
+ try {
67
+ facts.push(JSON.parse(trimmed));
68
+ }
69
+ catch {
70
+ // Skip corrupt lines (e.g. partial write from a crash).
71
+ }
72
+ }
73
+ return facts;
91
74
  }
92
75
  function getLatestUserText(messages) {
93
76
  for (let i = messages.length - 1; i >= 0; i--) {
@@ -117,7 +100,7 @@ function cosineSimilarity(left, right) {
117
100
  return 0;
118
101
  return dot / (Math.sqrt(leftNorm) * Math.sqrt(rightNorm));
119
102
  }
120
- async function recallFactsForQuery(query, facts, provider, options) {
103
+ async function searchDiaryFactsForQuery(query, facts, provider, options) {
121
104
  const trimmed = query.trim();
122
105
  if (!trimmed)
123
106
  return [];
@@ -133,64 +116,82 @@ async function recallFactsForQuery(query, facts, provider, options) {
133
116
  .sort((left, right) => right.score - left.score)
134
117
  .slice(0, topK);
135
118
  }
136
- async function injectAssociativeRecall(messages, options) {
119
+ async function injectNoteSearchContext(messages, options) {
137
120
  try {
138
121
  if (messages[0]?.role !== "system" || typeof messages[0].content !== "string")
139
122
  return;
140
123
  const query = getLatestUserText(messages);
141
124
  if (!query)
142
125
  return;
143
- const memoryRoot = options?.memoryRoot ?? path.join((0, identity_1.getAgentRoot)(), "psyche", "memory");
144
- const facts = readFacts(memoryRoot);
126
+ const diaryRoot = options?.diaryRoot ?? (0, diary_1.resolveDiaryRoot)();
127
+ const facts = readFacts(diaryRoot);
145
128
  if (facts.length === 0)
146
129
  return;
147
- let recalled;
130
+ const resultLines = [];
131
+ let found;
148
132
  try {
149
133
  const provider = options?.provider ?? createDefaultProvider();
150
- recalled = await recallFactsForQuery(query, facts, provider, options);
134
+ found = await searchDiaryFactsForQuery(query, facts, provider, options);
151
135
  }
152
136
  catch {
153
137
  // Embeddings unavailable — fall back to substring matching
154
138
  const lowerQuery = query.toLowerCase();
155
139
  const topK = options?.topK ?? DEFAULT_TOP_K;
156
- recalled = facts
140
+ found = facts
157
141
  .filter((fact) => fact.text.toLowerCase().includes(lowerQuery))
158
142
  .slice(0, topK)
159
143
  .map((fact) => ({ ...fact, score: 1 }));
160
- if (recalled.length > 0) {
144
+ if (found.length > 0) {
161
145
  (0, runtime_1.emitNervesEvent)({
162
146
  level: "warn",
163
147
  component: "mind",
164
- event: "mind.associative_recall_fallback",
148
+ event: "mind.note_search_fallback",
165
149
  message: "embeddings unavailable, used substring fallback",
166
- meta: { matchCount: recalled.length },
150
+ meta: { matchCount: found.length },
167
151
  });
168
152
  }
169
153
  }
170
- if (recalled.length === 0)
154
+ for (const fact of found) {
155
+ let meta = `score=${fact.score.toFixed(3)} source=${fact.source}`;
156
+ if (fact.provenance) {
157
+ if (fact.provenance.channel)
158
+ meta += ` channel=${fact.provenance.channel}`;
159
+ if (fact.provenance.friendName)
160
+ meta += ` friend=${fact.provenance.friendName}`;
161
+ if (fact.provenance.trust)
162
+ meta += ` trust=${fact.provenance.trust}`;
163
+ }
164
+ const tag = (0, provenance_trust_1.classifyProvenanceTrust)(fact.provenance) === "external" ? "diary/external" : "diary";
165
+ resultLines.push({
166
+ text: `[${tag}] ${fact.text} [${meta}]`,
167
+ score: fact.score,
168
+ });
169
+ }
170
+ if (resultLines.length === 0)
171
171
  return;
172
- const recallSection = recalled
173
- .map((fact, index) => `${index + 1}. ${fact.text} [score=${fact.score.toFixed(3)} source=${fact.source}]`)
172
+ resultLines.sort((left, right) => right.score - left.score);
173
+ const noteSection = resultLines
174
+ .map((entry, index) => `${index + 1}. ${entry.text}`)
174
175
  .join("\n");
175
176
  messages[0] = {
176
177
  role: "system",
177
- content: `${messages[0].content}\n\n## recalled context\n${recallSection}`,
178
+ content: `${messages[0].content}\n\n## retrieved from my Desk record diary\n${noteSection}`,
178
179
  };
179
180
  (0, runtime_1.emitNervesEvent)({
180
181
  component: "mind",
181
- event: "mind.associative_recall",
182
- message: "associative recall injected",
183
- meta: { count: recalled.length },
182
+ event: "mind.note_search_context",
183
+ message: "note search injected",
184
+ meta: { count: resultLines.length },
184
185
  });
185
186
  }
186
187
  catch (error) {
187
188
  (0, runtime_1.emitNervesEvent)({
188
189
  level: "warn",
189
190
  component: "mind",
190
- event: "mind.associative_recall_error",
191
- message: "associative recall failed",
191
+ event: "mind.note_search_context_error",
192
+ message: "note search failed",
192
193
  meta: {
193
- reason: error instanceof Error ? error.message : String(error),
194
+ reason: error instanceof Error ? error.message : /* v8 ignore start -- defensive: non-Error catch branch @preserve */ String(error) /* v8 ignore stop */,
194
195
  },
195
196
  });
196
197
  }
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findActivePersistentObligation = findActivePersistentObligation;
4
+ exports.findStatusObligation = findStatusObligation;
5
+ exports.renderActiveObligationSteering = renderActiveObligationSteering;
6
+ exports.renderConcreteStatusGuidance = renderConcreteStatusGuidance;
7
+ exports.renderLiveThreadStatusShape = renderLiveThreadStatusShape;
8
+ exports.buildExactStatusReply = buildExactStatusReply;
9
+ exports.renderExactStatusReplyContract = renderExactStatusReplyContract;
10
+ const config_1 = require("../heart/config");
11
+ const active_work_1 = require("../heart/active-work");
12
+ const runtime_1 = require("../nerves/runtime");
13
+ const orientation_frame_1 = require("../heart/orientation-frame");
14
+ function labelSteeringSurface(surface, options) {
15
+ return typeof options?.resumePriorWork === "boolean"
16
+ ? (0, orientation_frame_1.labelPriorWorkSurface)(surface, options.resumePriorWork)
17
+ : surface;
18
+ }
19
+ function findActivePersistentObligation(frame) {
20
+ if (!frame)
21
+ return null;
22
+ return (frame.pendingObligations ?? []).find((ob) => ob.status !== "pending" && ob.status !== "fulfilled") ?? null;
23
+ }
24
+ function obligationTimestampMs(obligation) {
25
+ return Date.parse(obligation.updatedAt ?? obligation.createdAt);
26
+ }
27
+ function newestObligationFirst(left, right) {
28
+ return obligationTimestampMs(right) - obligationTimestampMs(left);
29
+ }
30
+ function matchesCurrentSession(frame, obligation) {
31
+ return matchesSessionOrigin(frame, obligation.origin);
32
+ }
33
+ function matchesSessionOrigin(frame, origin) {
34
+ return Boolean(frame.currentSession
35
+ && origin.friendId === frame.currentSession.friendId
36
+ && origin.channel === frame.currentSession.channel
37
+ && (0, config_1.sanitizeKey)(origin.key) === (0, config_1.sanitizeKey)(frame.currentSession.key));
38
+ }
39
+ function findStatusObligation(frame) {
40
+ if (!frame)
41
+ return null;
42
+ const openObligations = [...(frame.pendingObligations ?? [])]
43
+ .filter((obligation) => obligation.status !== "fulfilled")
44
+ .sort(newestObligationFirst);
45
+ const sameSession = openObligations.find((obligation) => matchesCurrentSession(frame, obligation));
46
+ if (sameSession)
47
+ return sameSession;
48
+ return openObligations[0] ?? null;
49
+ }
50
+ function findCurrentSessionStatusObligation(frame) {
51
+ const openObligations = [...(frame.pendingObligations ?? [])]
52
+ .filter((obligation) => obligation.status !== "fulfilled")
53
+ .sort(newestObligationFirst);
54
+ return openObligations.find((obligation) => matchesCurrentSession(frame, obligation)) ?? null;
55
+ }
56
+ function renderActiveObligationSteering(obligation, options) {
57
+ (0, runtime_1.emitNervesEvent)({
58
+ component: "mind",
59
+ event: "mind.obligation_steering_rendered",
60
+ message: "rendered active obligation steering",
61
+ meta: {
62
+ hasObligation: Boolean(obligation),
63
+ hasSurface: Boolean(obligation?.currentSurface?.label),
64
+ },
65
+ });
66
+ if (!obligation)
67
+ return "";
68
+ const name = obligation.origin.friendId;
69
+ const surfaceLine = obligation.currentSurface?.label
70
+ ? `\nright now that work is happening in ${obligation.currentSurface.label}.`
71
+ : "";
72
+ return labelSteeringSurface(`## where my attention is
73
+ i'm already working on something i owe ${name}.${surfaceLine}
74
+
75
+ i should close that loop before i act like this is a fresh blank turn.`, options);
76
+ }
77
+ function mergeArtifactFallback(obligation) {
78
+ const trimmed = obligation.content.trim();
79
+ if (!trimmed)
80
+ return "the fix";
81
+ const stripped = trimmed.replace(/^merge(?:\s+|$)/i, "").trim();
82
+ return stripped || "the fix";
83
+ }
84
+ function formatMergeArtifact(obligation) {
85
+ const currentArtifact = obligation.currentArtifact?.trim();
86
+ if (currentArtifact)
87
+ return currentArtifact;
88
+ if (obligation.currentSurface?.kind === "merge") {
89
+ const surfaceLabel = obligation.currentSurface.label.trim();
90
+ if (surfaceLabel)
91
+ return surfaceLabel;
92
+ }
93
+ return mergeArtifactFallback(obligation);
94
+ }
95
+ function formatActiveLane(frame, obligation) {
96
+ const liveCodingSession = frame.codingSessions?.[0];
97
+ if (liveCodingSession) {
98
+ const sameThread = frame.currentSession
99
+ && liveCodingSession.originSession
100
+ && liveCodingSession.originSession.friendId === frame.currentSession.friendId
101
+ && liveCodingSession.originSession.channel === frame.currentSession.channel
102
+ && liveCodingSession.originSession.key === frame.currentSession.key;
103
+ return sameThread
104
+ ? `${liveCodingSession.runner} ${liveCodingSession.id} for this same thread`
105
+ : liveCodingSession.originSession
106
+ ? `${liveCodingSession.runner} ${liveCodingSession.id} for ${liveCodingSession.originSession.channel}/${liveCodingSession.originSession.key}`
107
+ : `${liveCodingSession.runner} ${liveCodingSession.id}`;
108
+ }
109
+ return obligation.currentSurface?.label
110
+ || (matchesCurrentSession(frame, obligation) ? "this same thread" : "this live loop");
111
+ }
112
+ function formatCurrentArtifact(frame, obligation) {
113
+ if (obligation?.currentArtifact)
114
+ return obligation.currentArtifact;
115
+ if (obligation?.currentSurface?.kind === "merge")
116
+ return obligation.currentSurface.label;
117
+ if ((frame.codingSessions ?? []).length > 0)
118
+ return "no PR or merge artifact yet";
119
+ return obligation ? "no artifact yet" : "";
120
+ }
121
+ function formatNextAction(frame, obligation) {
122
+ const obligationHasConcreteArtifact = Boolean(obligation?.currentArtifact?.trim())
123
+ || obligation?.currentSurface?.kind === "merge";
124
+ if (obligation?.status === "waiting_for_merge") {
125
+ return obligation.nextAction?.trim() || `wait for checks, merge ${formatMergeArtifact(obligation)}, then update runtime`;
126
+ }
127
+ if (obligation?.status === "updating_runtime") {
128
+ return obligation.nextAction?.trim() || "update runtime, verify version/changelog, then re-observe";
129
+ }
130
+ if (obligationHasConcreteArtifact && obligation?.nextAction?.trim()) {
131
+ return obligation.nextAction.trim();
132
+ }
133
+ const liveCodingSession = frame.codingSessions?.[0];
134
+ if (liveCodingSession?.status === "waiting_input") {
135
+ return `answer ${liveCodingSession.runner} ${liveCodingSession.id} and continue`;
136
+ }
137
+ if (liveCodingSession?.status === "stalled") {
138
+ return `unstick ${liveCodingSession.runner} ${liveCodingSession.id} and continue`;
139
+ }
140
+ if (liveCodingSession) {
141
+ return "finish the coding pass and bring the result back here";
142
+ }
143
+ if (obligation?.nextAction?.trim())
144
+ return obligation.nextAction.trim();
145
+ if (obligation?.content?.trim()) {
146
+ return `work on "${obligation.content.trim()}" and bring back a concrete artifact`;
147
+ }
148
+ return obligation ? "continue the active loop and bring the result back here" : "";
149
+ }
150
+ function renderConcreteStatusGuidance(frame, obligation, options) {
151
+ const activeLane = obligation ? formatActiveLane(frame, obligation) : "";
152
+ const currentArtifact = formatCurrentArtifact(frame, obligation);
153
+ const nextAction = formatNextAction(frame, obligation);
154
+ const liveConversation = frame.currentSession
155
+ ? `${frame.currentSession.channel}/${frame.currentSession.key}`
156
+ : "";
157
+ if (!activeLane && !currentArtifact && !nextAction)
158
+ return "";
159
+ return labelSteeringSurface(`if someone asks what i'm doing or for status mid-task, i answer from these live facts instead of copying a canned block.
160
+ the live conversation is ${liveConversation || "not in a live conversation"}.
161
+ the active lane is ${activeLane}.
162
+ the current artifact is ${currentArtifact}.
163
+ if i just finished or verified something concrete in this live lane, i name that as the latest checkpoint.
164
+ the next action is ${nextAction}.
165
+
166
+ i answer naturally from those facts instead of forcing a canned status block.`, options);
167
+ }
168
+ function renderLiveThreadStatusShape(frame, options) {
169
+ if (!frame.currentSession)
170
+ return "";
171
+ return labelSteeringSurface(`if someone asks what i'm doing or for status mid-task in this live thread, i answer in these exact lines, in order, with no intro paragraph:
172
+ live conversation: ${frame.currentSession.channel}/${frame.currentSession.key}
173
+ active lane: this same thread
174
+ current artifact: <actual artifact or "no artifact yet">
175
+ latest checkpoint: <freshest concrete thing i just finished or verified>
176
+ next action: <smallest concrete next step i'm taking now>
177
+
178
+ no recap paragraph before those lines.
179
+ no option list.
180
+ present tense only.
181
+ if a finished step matters, i label it "just finished" instead of presenting it as current work.`, options);
182
+ }
183
+ function buildExactStatusReply(frame, obligation, latestCheckpoint, statusCheckScope) {
184
+ const headerObligation = statusCheckScope === "all-sessions-family"
185
+ ? findCurrentSessionStatusObligation(frame)
186
+ : obligation;
187
+ const liveConversation = frame.currentSession
188
+ ? `${frame.currentSession.channel}/${frame.currentSession.key}`
189
+ : "not in a live conversation";
190
+ const activeLane = headerObligation
191
+ ? formatActiveLane(frame, headerObligation)
192
+ : (frame.currentSession ? "this same thread" : "this live loop");
193
+ const currentArtifact = formatCurrentArtifact(frame, headerObligation) || "no artifact yet";
194
+ const nextAction = formatNextAction(frame, headerObligation) || "continue the active loop and bring the result back here";
195
+ const latest = latestCheckpoint.trim() || "<freshest concrete thing i just finished or verified>";
196
+ const lines = [
197
+ `live conversation: ${liveConversation}`,
198
+ `active lane: ${activeLane}`,
199
+ `current artifact: ${currentArtifact}`,
200
+ `latest checkpoint: ${latest}`,
201
+ `next action: ${nextAction}`,
202
+ ];
203
+ if (statusCheckScope === "all-sessions-family") {
204
+ lines.push("other active sessions:");
205
+ const summaries = (0, active_work_1.formatOtherActiveSessionSummaries)(frame);
206
+ lines.push(...(summaries.length > 0 ? summaries : ["- none"]));
207
+ }
208
+ return lines.join("\n");
209
+ }
210
+ function renderExactStatusReplyContract(frame, obligation, statusCheckScope) {
211
+ const headerObligation = statusCheckScope === "all-sessions-family"
212
+ ? findCurrentSessionStatusObligation(frame)
213
+ : obligation;
214
+ if (statusCheckScope === "all-sessions-family") {
215
+ return `reply using exactly this status shape and nothing else:
216
+ live conversation: ${frame.currentSession ? `${frame.currentSession.channel}/${frame.currentSession.key}` : "not in a live conversation"}
217
+ active lane: ${headerObligation ? formatActiveLane(frame, headerObligation) : (frame.currentSession ? "this same thread" : "this live loop")}
218
+ current artifact: ${formatCurrentArtifact(frame, headerObligation) || "no artifact yet"}
219
+ latest checkpoint: <freshest concrete thing i just finished or verified>
220
+ next action: ${formatNextAction(frame, headerObligation) || "continue the active loop and bring the result back here"}
221
+ other active sessions:
222
+ - <session label>: <what i'm doing there right now>`;
223
+ }
224
+ return `reply using exactly these five lines and nothing else:
225
+ ${buildExactStatusReply(frame, obligation, "<freshest concrete thing i just finished or verified>")}
226
+ `;
227
+ }
@@ -33,24 +33,86 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PRIVATE_RUNTIME_PENDING = void 0;
36
37
  exports.getPendingDir = getPendingDir;
38
+ exports.getDeferredReturnDir = getDeferredReturnDir;
39
+ exports.getPrivateRuntimePendingDir = getPrivateRuntimePendingDir;
40
+ exports.hasPendingMessages = hasPendingMessages;
41
+ exports.queuePendingMessage = queuePendingMessage;
42
+ exports.queuePendingMessageOnce = queuePendingMessageOnce;
43
+ exports.enqueueDeferredReturn = enqueueDeferredReturn;
44
+ exports.drainDeferredReturns = drainDeferredReturns;
37
45
  exports.drainPending = drainPending;
38
46
  const fs = __importStar(require("fs"));
39
47
  const path = __importStar(require("path"));
40
- const os = __importStar(require("os"));
48
+ const node_crypto_1 = require("node:crypto");
49
+ const identity_1 = require("../heart/identity");
50
+ const session_events_1 = require("../heart/session-events");
41
51
  const runtime_1 = require("../nerves/runtime");
42
52
  function getPendingDir(agentName, friendId, channel, key) {
43
- return path.join(os.homedir(), ".agentstate", agentName, "pending", friendId, channel, key);
53
+ return path.join((0, identity_1.getAgentRoot)(agentName), "state", "pending", friendId, channel, key);
44
54
  }
45
- function drainPending(pendingDir) {
55
+ function getDeferredReturnDir(agentName, friendId) {
56
+ return path.join((0, identity_1.getAgentRoot)(agentName), "state", "pending-returns", friendId);
57
+ }
58
+ /** Canonical private-runtime pending path segments. The path is historical durable state. */
59
+ exports.PRIVATE_RUNTIME_PENDING = { friendId: "self", channel: "inner", key: "dialog" };
60
+ /** Returns the pending dir for this agent's private runtime. */
61
+ function getPrivateRuntimePendingDir(agentName) {
62
+ return getPendingDir(agentName, exports.PRIVATE_RUNTIME_PENDING.friendId, exports.PRIVATE_RUNTIME_PENDING.channel, exports.PRIVATE_RUNTIME_PENDING.key);
63
+ }
64
+ function hasPendingMessages(pendingDir) {
46
65
  if (!fs.existsSync(pendingDir))
47
- return [];
66
+ return false;
67
+ try {
68
+ return fs.readdirSync(pendingDir).some((entry) => entry.endsWith(".json") || entry.endsWith(".json.processing"));
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ function writeQueueFile(queueDir, message) {
75
+ fs.mkdirSync(queueDir, { recursive: true });
76
+ const fileName = `${message.timestamp}-${Math.random().toString(36).slice(2, 10)}.json`;
77
+ const filePath = path.join(queueDir, fileName);
78
+ fs.writeFileSync(filePath, JSON.stringify({ ...message, content: (0, session_events_1.capStructuredRecordString)(message.content) }, null, 2));
79
+ return filePath;
80
+ }
81
+ function queuePendingMessage(pendingDir, message) {
82
+ writeQueueFile(pendingDir, message);
83
+ }
84
+ function queuePendingMessageOnce(pendingDir, message) {
85
+ fs.mkdirSync(pendingDir, { recursive: true });
86
+ const identity = (0, node_crypto_1.createHash)("sha256").update(message.packetId).digest("hex");
87
+ const filePath = path.join(pendingDir, `${message.timestamp}-${identity}.json`);
88
+ const temporary = `${filePath}.tmp-${process.pid}`;
89
+ const content = JSON.stringify({ ...message, content: (0, session_events_1.capStructuredRecordString)(message.content) }, null, 2);
90
+ try {
91
+ fs.writeFileSync(temporary, content, { encoding: "utf8", mode: 0o600, flag: "wx" });
92
+ try {
93
+ fs.renameSync(temporary, filePath);
94
+ }
95
+ catch (error) {
96
+ if (error.code !== "EEXIST")
97
+ throw error;
98
+ fs.unlinkSync(temporary);
99
+ }
100
+ }
101
+ catch (error) {
102
+ if (error.code !== "EEXIST")
103
+ throw error;
104
+ }
105
+ return filePath;
106
+ }
107
+ function drainQueue(queueDir) {
108
+ if (!fs.existsSync(queueDir))
109
+ return { messages: [], recovered: 0 };
48
110
  let entries;
49
111
  try {
50
- entries = fs.readdirSync(pendingDir);
112
+ entries = fs.readdirSync(queueDir);
51
113
  }
52
114
  catch {
53
- return [];
115
+ return { messages: [], recovered: 0 };
54
116
  }
55
117
  // Collect both .json (new) and .processing (crash recovery)
56
118
  const jsonFiles = entries.filter(f => f.endsWith(".json") && !f.endsWith(".processing"));
@@ -62,9 +124,9 @@ function drainPending(pendingDir) {
62
124
  ].sort((a, b) => a.file.localeCompare(b.file));
63
125
  const messages = [];
64
126
  for (const { file, needsRename } of allFiles) {
65
- const srcPath = path.join(pendingDir, file);
127
+ const srcPath = path.join(queueDir, file);
66
128
  const processingPath = needsRename
67
- ? path.join(pendingDir, file + ".processing")
129
+ ? path.join(queueDir, file + ".processing")
68
130
  : srcPath;
69
131
  try {
70
132
  if (needsRename) {
@@ -83,11 +145,42 @@ function drainPending(pendingDir) {
83
145
  catch { /* ignore */ }
84
146
  }
85
147
  }
148
+ return {
149
+ messages,
150
+ recovered: processingFiles.length,
151
+ };
152
+ }
153
+ function enqueueDeferredReturn(agentName, friendId, message) {
154
+ const queueDir = getDeferredReturnDir(agentName, friendId);
155
+ const filePath = writeQueueFile(queueDir, message);
156
+ (0, runtime_1.emitNervesEvent)({
157
+ event: "mind.deferred_return_enqueued",
158
+ component: "mind",
159
+ message: "deferred return queued for later friend delivery",
160
+ meta: { friendId, queueDir },
161
+ });
162
+ return filePath;
163
+ }
164
+ function drainDeferredReturns(agentName, friendId) {
165
+ const queueDir = getDeferredReturnDir(agentName, friendId);
166
+ const { messages } = drainQueue(queueDir);
167
+ (0, runtime_1.emitNervesEvent)({
168
+ event: "mind.deferred_returns_drained",
169
+ component: "mind",
170
+ message: "deferred friend returns drained",
171
+ meta: { friendId, queueDir, count: messages.length },
172
+ });
173
+ return messages;
174
+ }
175
+ function drainPending(pendingDir) {
176
+ if (!fs.existsSync(pendingDir))
177
+ return [];
178
+ const { messages, recovered } = drainQueue(pendingDir);
86
179
  (0, runtime_1.emitNervesEvent)({
87
180
  event: "mind.pending_drained",
88
181
  component: "mind",
89
182
  message: "pending queue drained",
90
- meta: { pendingDir, count: messages.length, recovered: processingFiles.length },
183
+ meta: { pendingDir, count: messages.length, recovered },
91
184
  });
92
185
  return messages;
93
186
  }
@@ -16,6 +16,7 @@ function getPhrases() {
16
16
  message: "loading phrase pools",
17
17
  meta: {},
18
18
  });
19
+ (0, identity_1.resetAgentConfigCache)();
19
20
  const phrases = (0, identity_1.loadAgentConfig)().phrases;
20
21
  (0, runtime_1.emitNervesEvent)({
21
22
  event: "repertoire.load_end",