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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (647) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -23
  3. package/RepairGuide.ouro/agent.json +5 -0
  4. package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
  5. package/RepairGuide.ouro/psyche/SOUL.md +55 -0
  6. package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
  7. package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
  8. package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
  9. package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
  10. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  12. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  13. package/assets/bluebubbles-host +264 -0
  14. package/assets/sanctuary-host-launcher.sh +16 -0
  15. package/changelog.json +5308 -16
  16. package/deploy/unraid/Dockerfile +54 -0
  17. package/deploy/unraid/README.txt +2983 -0
  18. package/deploy/unraid/audit-container-spec.sh +4 -0
  19. package/deploy/unraid/container-runtime.json +1 -0
  20. package/deploy/unraid/docker-man-template-transaction.mjs +711 -0
  21. package/deploy/unraid/docker-man-template-xml.cjs +105 -0
  22. package/deploy/unraid/migrate-sanctuary-bundle.mjs +60 -0
  23. package/deploy/unraid/ouro-events/bootstrap-spool.sh +92 -0
  24. package/deploy/unraid/ouro-events/emit-event.mjs +310 -0
  25. package/deploy/unraid/ouro-events/emit-usenet-event.sh +54 -0
  26. package/deploy/unraid/ouro-events/install-usenet-guard.sh +435 -0
  27. package/deploy/unraid/ouro-events/usenet-health.sh +176 -0
  28. package/deploy/unraid/sanctuary-acceptance-adapter.sh +43 -0
  29. package/deploy/unraid/sanctuary-acceptance-contract.json +198 -0
  30. package/deploy/unraid/sanctuary-acceptance-harness.sh +23 -0
  31. package/deploy/unraid/sanctuary-authority-installation.json +36 -0
  32. package/deploy/unraid/sanctuary-authority-service.sh +30 -0
  33. package/deploy/unraid/sanctuary-deployment-target.mjs +710 -0
  34. package/deploy/unraid/sanctuary-safe-rename.py +24 -0
  35. package/deploy/unraid/sanctuary-unit16-host-broker.mjs +2084 -0
  36. package/deploy/unraid/sanctuary-unit16-run.sh +560 -0
  37. package/deploy/unraid/sanctuary-unit18-target-audit.sh +27 -0
  38. package/deploy/unraid/sanctuary.ouro/agent.json +66 -0
  39. package/deploy/unraid/sanctuary.ouro/arc/README.md +3 -0
  40. package/deploy/unraid/sanctuary.ouro/bundle-meta.json +5 -0
  41. package/deploy/unraid/sanctuary.ouro/habits/sanctuary-health.md +8 -0
  42. package/deploy/unraid/sanctuary.ouro/mcp/media-mcp.mjs +795 -0
  43. package/deploy/unraid/sanctuary.ouro/provider-readiness.json +11 -0
  44. package/deploy/unraid/sanctuary.ouro/psyche/ASPIRATIONS.md +5 -0
  45. package/deploy/unraid/sanctuary.ouro/psyche/IDENTITY.md +5 -0
  46. package/deploy/unraid/sanctuary.ouro/psyche/LORE.md +15 -0
  47. package/deploy/unraid/sanctuary.ouro/psyche/SOUL.md +25 -0
  48. package/deploy/unraid/sanctuary.ouro/psyche/TACIT.md +15 -0
  49. package/deploy/unraid/sanctuary.ouro/state/policy/steward.json +7 -0
  50. package/deploy/unraid/sanctuary.ouro/tool-profiles.json +135 -0
  51. package/deploy/unraid/sanctuary.xml +28 -0
  52. package/dist/a2a/card.js +57 -0
  53. package/dist/a2a/client.js +180 -0
  54. package/dist/a2a/config.js +50 -0
  55. package/dist/a2a/delegation-stores.js +56 -0
  56. package/dist/a2a/did-resolution.js +93 -0
  57. package/dist/a2a/identity.js +170 -0
  58. package/dist/a2a/inbound-share.js +107 -0
  59. package/dist/a2a/mission-result-wire.js +196 -0
  60. package/dist/a2a/onboarding.js +115 -0
  61. package/dist/a2a/pin-store.js +132 -0
  62. package/dist/a2a/seen-ledger.js +120 -0
  63. package/dist/a2a/server.js +604 -0
  64. package/dist/a2a/task-store.js +69 -0
  65. package/dist/a2a/transport.js +45 -0
  66. package/dist/a2a/types.js +3 -0
  67. package/dist/arc/attention-types.js +8 -0
  68. package/dist/arc/cares.js +360 -0
  69. package/dist/arc/episodes.js +118 -0
  70. package/dist/arc/evolution.js +490 -0
  71. package/dist/arc/flight-recorder.js +1034 -0
  72. package/dist/arc/intentions.js +134 -0
  73. package/dist/arc/json-store.js +117 -0
  74. package/dist/arc/obligations.js +386 -0
  75. package/dist/arc/packets.js +336 -0
  76. package/dist/arc/presence.js +185 -0
  77. package/dist/arc/task-lifecycle.js +57 -0
  78. package/dist/commerce/store.js +755 -0
  79. package/dist/commerce/types.js +3 -0
  80. package/dist/heart/active-work.js +798 -40
  81. package/dist/heart/agent-entry.js +252 -3
  82. package/dist/heart/approval-files.js +113 -0
  83. package/dist/heart/approval-store.js +960 -0
  84. package/dist/heart/attachments/image-normalize.js +194 -0
  85. package/dist/heart/attachments/materialize.js +97 -0
  86. package/dist/heart/attachments/originals.js +88 -0
  87. package/dist/heart/attachments/render.js +29 -0
  88. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  89. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  90. package/dist/heart/attachments/sources/index.js +18 -0
  91. package/dist/heart/attachments/sources/telegram.js +71 -0
  92. package/dist/heart/attachments/store.js +132 -0
  93. package/dist/heart/attachments/types.js +93 -0
  94. package/dist/heart/auth/auth-flow.js +495 -0
  95. package/dist/heart/autonomy-budget.js +478 -0
  96. package/dist/heart/awaiting/await-alert.js +148 -0
  97. package/dist/heart/awaiting/await-expiry.js +143 -0
  98. package/dist/heart/awaiting/await-loader.js +91 -0
  99. package/dist/heart/awaiting/await-parser.js +149 -0
  100. package/dist/heart/awaiting/await-runtime-state.js +111 -0
  101. package/dist/heart/awaiting/await-scheduler.js +382 -0
  102. package/dist/heart/background-operations.js +281 -0
  103. package/dist/heart/bridges/manager.js +137 -17
  104. package/dist/heart/bridges/store.js +14 -2
  105. package/dist/heart/bundle-state.js +168 -0
  106. package/dist/heart/commitments.js +44 -18
  107. package/dist/heart/config-registry.js +331 -0
  108. package/dist/heart/config.js +174 -131
  109. package/dist/heart/context-loss-gauntlet.js +387 -0
  110. package/dist/heart/context-loss-sentinel.js +1157 -0
  111. package/dist/heart/core.js +2169 -581
  112. package/dist/heart/cross-chat-delivery.js +9 -22
  113. package/dist/heart/daemon/agent-config-check.js +451 -0
  114. package/dist/heart/daemon/agent-discovery.js +185 -3
  115. package/dist/heart/daemon/agent-service.js +542 -0
  116. package/dist/heart/daemon/agentic-repair.js +547 -0
  117. package/dist/heart/daemon/await-private-wake.js +59 -0
  118. package/dist/heart/daemon/bluebubbles-cli-integration.js +71 -0
  119. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  120. package/dist/heart/daemon/bluebubbles-host-protocol.js +433 -0
  121. package/dist/heart/daemon/bluebubbles-host.js +273 -0
  122. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  123. package/dist/heart/daemon/cadence.js +180 -0
  124. package/dist/heart/daemon/cli-defaults.js +854 -0
  125. package/dist/heart/daemon/cli-desk.js +322 -0
  126. package/dist/heart/daemon/cli-exec.js +8822 -0
  127. package/dist/heart/daemon/cli-help.js +716 -0
  128. package/dist/heart/daemon/cli-parse.js +2771 -0
  129. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  130. package/dist/heart/daemon/cli-render.js +777 -0
  131. package/dist/heart/daemon/cli-types.js +8 -0
  132. package/dist/heart/daemon/connect-bay.js +323 -0
  133. package/dist/heart/daemon/container-credential-bootstrap.js +273 -0
  134. package/dist/heart/daemon/container-healthcheck.js +112 -0
  135. package/dist/heart/daemon/container-runtime.js +97 -0
  136. package/dist/heart/daemon/container-spec-auditor-main.js +171 -0
  137. package/dist/heart/daemon/container-spec-auditor.js +229 -0
  138. package/dist/heart/daemon/daemon-bootstrap-startup.js +115 -0
  139. package/dist/heart/daemon/daemon-cli.js +29 -2349
  140. package/dist/heart/daemon/daemon-entry.js +930 -11
  141. package/dist/heart/daemon/daemon-health.js +186 -0
  142. package/dist/heart/daemon/daemon-rollup.js +57 -0
  143. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  144. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  145. package/dist/heart/daemon/daemon.js +2084 -105
  146. package/dist/heart/daemon/dns-workflow.js +394 -0
  147. package/dist/heart/daemon/doctor-types.js +8 -0
  148. package/dist/heart/daemon/doctor.js +1755 -0
  149. package/dist/heart/daemon/freshness.js +345 -0
  150. package/dist/heart/daemon/habit-private-wake.js +61 -0
  151. package/dist/heart/daemon/health-monitor.js +142 -11
  152. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  153. package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
  154. package/dist/heart/daemon/http-health-probe.js +80 -0
  155. package/dist/heart/daemon/human-command-screens.js +234 -0
  156. package/dist/heart/daemon/human-readiness.js +114 -0
  157. package/dist/heart/daemon/inner-status.js +78 -0
  158. package/dist/heart/daemon/interactive-repair.js +394 -0
  159. package/dist/heart/daemon/launchd.js +37 -8
  160. package/dist/heart/daemon/log-tailer.js +79 -10
  161. package/dist/heart/daemon/logs-prune.js +132 -0
  162. package/dist/heart/daemon/mcp-canary.js +524 -0
  163. package/dist/heart/daemon/message-router.js +65 -5
  164. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  165. package/dist/heart/daemon/os-cron-deps.js +135 -0
  166. package/dist/heart/daemon/os-cron.js +22 -14
  167. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  168. package/dist/heart/daemon/ouro-entry.js +3 -1
  169. package/dist/heart/daemon/plugin-cli.js +432 -0
  170. package/dist/heart/daemon/process-manager.js +733 -61
  171. package/dist/heart/daemon/provider-discovery.js +137 -0
  172. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  173. package/dist/heart/daemon/prunable-bundle.js +144 -0
  174. package/dist/heart/daemon/pulse.js +511 -0
  175. package/dist/heart/daemon/readiness-repair.js +365 -0
  176. package/dist/heart/daemon/run-hooks.js +2 -0
  177. package/dist/heart/daemon/runtime-logging.js +47 -14
  178. package/dist/heart/daemon/runtime-metadata.js +2 -30
  179. package/dist/heart/daemon/runtime-mode.js +13 -2
  180. package/dist/heart/daemon/safe-mode.js +161 -0
  181. package/dist/heart/daemon/sanctuary-acceptance-adapter.js +2654 -0
  182. package/dist/heart/daemon/sanctuary-acceptance-harness.js +1830 -0
  183. package/dist/heart/daemon/sanctuary-acceptance-marker.js +267 -0
  184. package/dist/heart/daemon/sanctuary-acceptance-scenarios.js +955 -0
  185. package/dist/heart/daemon/sanctuary-authority-codec.js +86 -0
  186. package/dist/heart/daemon/sanctuary-authority-epoch.js +256 -0
  187. package/dist/heart/daemon/sanctuary-authority-installation.js +140 -0
  188. package/dist/heart/daemon/sanctuary-authority-ledger.js +241 -0
  189. package/dist/heart/daemon/sanctuary-authority-root-lifecycle.js +819 -0
  190. package/dist/heart/daemon/sanctuary-authority-vault-migration.js +79 -0
  191. package/dist/heart/daemon/sanctuary-bundle-migration.js +729 -0
  192. package/dist/heart/daemon/sanctuary-host-authority.js +1008 -0
  193. package/dist/heart/daemon/sanctuary-host-detached-supervisor.js +494 -0
  194. package/dist/heart/daemon/sanctuary-host-executor.js +670 -0
  195. package/dist/heart/daemon/sanctuary-host-linux-kernel.js +334 -0
  196. package/dist/heart/daemon/sanctuary-host-supervisor-entry.js +207 -0
  197. package/dist/heart/daemon/sanctuary-host-supervisor.js +95 -0
  198. package/dist/heart/daemon/sanctuary-package-management.js +103 -0
  199. package/dist/heart/daemon/sanctuary-scheduler-liveness.js +227 -0
  200. package/dist/heart/daemon/sanctuary-scheduler-origin.js +132 -0
  201. package/dist/heart/daemon/sanctuary-telegram-authority-entry.js +445 -0
  202. package/dist/heart/daemon/sanctuary-telegram-authority-gateway.js +585 -0
  203. package/dist/heart/daemon/sanctuary-telegram-authority-service.js +630 -0
  204. package/dist/heart/daemon/sense-manager.js +699 -48
  205. package/dist/heart/daemon/session-id-resolver.js +131 -0
  206. package/dist/heart/daemon/skill-management-installer.js +1 -1
  207. package/dist/heart/daemon/socket-client.js +180 -12
  208. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  209. package/dist/heart/daemon/startup-tui.js +339 -0
  210. package/dist/heart/daemon/supercronic-supervisor.js +282 -0
  211. package/dist/heart/daemon/task-scheduler.js +117 -39
  212. package/dist/heart/daemon/terminal-ui.js +499 -0
  213. package/dist/heart/daemon/thoughts.js +138 -54
  214. package/dist/heart/daemon/up-progress.js +366 -0
  215. package/dist/heart/daemon/vault-items.js +56 -0
  216. package/dist/heart/delegation.js +1 -4
  217. package/dist/heart/external-events/router.js +1430 -0
  218. package/dist/heart/frontend-approval-runtime.js +506 -0
  219. package/dist/heart/frontend-journal.js +215 -0
  220. package/dist/heart/frontend-session-service.js +237 -0
  221. package/dist/heart/frontend-socket-client.js +164 -0
  222. package/dist/heart/frontend-socket.js +400 -0
  223. package/dist/heart/habits/habit-cancel.js +810 -0
  224. package/dist/heart/habits/habit-lifecycle.js +1327 -0
  225. package/dist/heart/habits/habit-migration.js +194 -0
  226. package/dist/heart/habits/habit-parser.js +278 -0
  227. package/dist/heart/habits/habit-runtime-state.js +93 -0
  228. package/dist/heart/habits/habit-scheduler.js +653 -0
  229. package/dist/heart/habits/habit-session-summary.js +318 -0
  230. package/dist/heart/habits/habit-session.js +636 -0
  231. package/dist/heart/{daemon → hatch}/hatch-flow.js +55 -62
  232. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  233. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  234. package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
  235. package/dist/heart/identity.js +196 -59
  236. package/dist/heart/kept-notes.js +289 -0
  237. package/dist/heart/kicks.js +1 -1
  238. package/dist/heart/machine-identity.js +161 -0
  239. package/dist/heart/mail-import-discovery.js +356 -0
  240. package/dist/heart/mailbox/mailbox-http-hooks.js +98 -0
  241. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  242. package/dist/heart/mailbox/mailbox-http-routes.js +398 -0
  243. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  244. package/dist/heart/mailbox/mailbox-http-transport.js +129 -0
  245. package/dist/heart/mailbox/mailbox-http.js +99 -0
  246. package/dist/heart/mailbox/mailbox-read.js +39 -0
  247. package/dist/heart/mailbox/mailbox-types.js +27 -0
  248. package/dist/heart/mailbox/mailbox-view.js +197 -0
  249. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  250. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  251. package/dist/heart/mailbox/readers/mail.js +375 -0
  252. package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
  253. package/dist/heart/mailbox/readers/sessions.js +231 -0
  254. package/dist/heart/mailbox/readers/shared.js +111 -0
  255. package/dist/heart/mcp/mcp-server.js +696 -0
  256. package/dist/heart/migrate-config.js +100 -0
  257. package/dist/heart/model-capabilities.js +11 -0
  258. package/dist/heart/orientation-frame.js +345 -0
  259. package/dist/heart/platform.js +81 -0
  260. package/dist/heart/primitives.js +1 -1
  261. package/dist/heart/private-runtime/decision-renderer.js +158 -0
  262. package/dist/heart/private-runtime/index.js +18 -0
  263. package/dist/heart/private-runtime/ledger.js +221 -0
  264. package/dist/heart/private-runtime/policy.js +252 -0
  265. package/dist/heart/private-runtime/types.js +2 -0
  266. package/dist/heart/progress-story.js +1 -1
  267. package/dist/heart/provider-attempt.js +137 -0
  268. package/dist/heart/provider-binding-resolver.js +273 -0
  269. package/dist/heart/provider-credentials.js +449 -0
  270. package/dist/heart/provider-failover.js +311 -0
  271. package/dist/heart/provider-models.js +96 -0
  272. package/dist/heart/provider-ping.js +265 -0
  273. package/dist/heart/provider-readiness-cache.js +119 -0
  274. package/dist/heart/provider-visibility.js +188 -0
  275. package/dist/heart/providers/anthropic-token.js +131 -0
  276. package/dist/heart/providers/anthropic.js +173 -60
  277. package/dist/heart/providers/azure.js +23 -11
  278. package/dist/heart/providers/error-classification.js +127 -0
  279. package/dist/heart/providers/github-copilot.js +34 -38
  280. package/dist/heart/providers/minimax-vlm.js +189 -0
  281. package/dist/heart/providers/minimax.js +26 -8
  282. package/dist/heart/providers/openai-codex-token.js +349 -0
  283. package/dist/heart/providers/openai-codex.js +55 -40
  284. package/dist/heart/providers/openai-compatible.js +177 -0
  285. package/dist/heart/run-ledger.js +247 -0
  286. package/dist/heart/runtime-capability-check.js +170 -0
  287. package/dist/heart/runtime-credentials.js +607 -0
  288. package/dist/heart/runtime-cwd.js +87 -0
  289. package/dist/heart/sense-truth.js +22 -4
  290. package/dist/heart/session-activity.js +92 -24
  291. package/dist/heart/session-events.js +1504 -0
  292. package/dist/heart/session-playback-cli-main.js +5 -0
  293. package/dist/heart/session-playback-cli.js +36 -0
  294. package/dist/heart/session-playback.js +231 -0
  295. package/dist/heart/session-redaction-repair-cli-main.js +31 -0
  296. package/dist/heart/session-redaction-repair.js +552 -0
  297. package/dist/heart/session-stats-cli-main.js +5 -0
  298. package/dist/heart/session-stats.js +183 -0
  299. package/dist/heart/session-transcript.js +133 -0
  300. package/dist/heart/start-of-turn-packet.js +372 -0
  301. package/dist/heart/steward-policy.js +618 -0
  302. package/dist/heart/streaming.js +604 -207
  303. package/dist/heart/structured-output.js +196 -0
  304. package/dist/heart/sync-classification.js +176 -0
  305. package/dist/heart/sync.js +449 -0
  306. package/dist/heart/target-resolution.js +11 -7
  307. package/dist/heart/tempo.js +93 -0
  308. package/dist/heart/temporal-view.js +41 -0
  309. package/dist/heart/timeouts.js +101 -0
  310. package/dist/heart/tool-activity-callbacks.js +59 -0
  311. package/dist/heart/tool-approval.js +382 -0
  312. package/dist/heart/tool-description.js +155 -0
  313. package/dist/heart/tool-friction.js +55 -0
  314. package/dist/heart/tool-loop.js +200 -0
  315. package/dist/heart/turn-context.js +482 -0
  316. package/dist/heart/turn-execution-lease.js +30 -0
  317. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  318. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  319. package/dist/heart/versioning/ouro-path-installer.js +432 -0
  320. package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
  321. package/dist/heart/versioning/ouro-version-manager.js +409 -0
  322. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  323. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  324. package/dist/heart/versioning/update-hooks.js +154 -0
  325. package/dist/heart/versioning/version-intent.js +114 -0
  326. package/dist/heart/work-card.js +380 -0
  327. package/dist/mailbox-ui/assets/index-Cyv4mw3Y.js +1 -0
  328. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  329. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  330. package/dist/mailbox-ui/index.html +16 -0
  331. package/dist/mailroom/attention.js +167 -0
  332. package/dist/mailroom/autonomy.js +209 -0
  333. package/dist/mailroom/blob-store.js +889 -0
  334. package/dist/mailroom/body-cache.js +61 -0
  335. package/dist/mailroom/cache-sync-cli.js +58 -0
  336. package/dist/mailroom/core.js +803 -0
  337. package/dist/mailroom/entry.js +160 -0
  338. package/dist/mailroom/file-store.js +568 -0
  339. package/dist/mailroom/hosted-cache-sync.js +384 -0
  340. package/dist/mailroom/mbox-import.js +393 -0
  341. package/dist/mailroom/migration.js +164 -0
  342. package/dist/mailroom/outbound.js +380 -0
  343. package/dist/mailroom/policy.js +263 -0
  344. package/dist/mailroom/reader.js +292 -0
  345. package/dist/mailroom/search-cache.js +513 -0
  346. package/dist/mailroom/search-relevance.js +319 -0
  347. package/dist/mailroom/smtp-ingress.js +176 -0
  348. package/dist/mailroom/source-state.js +176 -0
  349. package/dist/mailroom/thread.js +109 -0
  350. package/dist/mailroom/travel-extract.js +89 -0
  351. package/dist/mind/bundle-manifest.js +24 -2
  352. package/dist/mind/context.js +309 -111
  353. package/dist/mind/desk-section.js +362 -0
  354. package/dist/mind/diary-integrity.js +60 -0
  355. package/dist/mind/{memory.js → diary.js} +68 -77
  356. package/dist/mind/embedding-provider.js +60 -0
  357. package/dist/mind/file-state.js +179 -0
  358. package/dist/mind/{associative-recall.js → note-search.js} +47 -58
  359. package/dist/mind/obligation-steering.js +199 -3
  360. package/dist/mind/pending.js +36 -10
  361. package/dist/mind/prompt-budget.js +479 -0
  362. package/dist/mind/prompt-refresh.js +3 -2
  363. package/dist/mind/prompt.js +1050 -189
  364. package/dist/mind/provenance-trust.js +26 -0
  365. package/dist/mind/record-paths.js +312 -0
  366. package/dist/mind/scrutiny.js +173 -0
  367. package/dist/mind/session-transaction.js +564 -0
  368. package/dist/nerves/cli-logging.js +7 -1
  369. package/dist/nerves/coverage/audit-rules.js +15 -6
  370. package/dist/nerves/coverage/audit.js +28 -2
  371. package/dist/nerves/coverage/cli.js +1 -1
  372. package/dist/nerves/coverage/contract.js +5 -5
  373. package/dist/nerves/coverage/file-completeness.js +139 -5
  374. package/dist/nerves/coverage/run-artifacts.js +55 -35
  375. package/dist/nerves/coverage/source-scanner.js +4 -4
  376. package/dist/nerves/event-buffer.js +111 -0
  377. package/dist/nerves/index.js +293 -9
  378. package/dist/nerves/observation.js +20 -0
  379. package/dist/nerves/redact.js +79 -0
  380. package/dist/nerves/review/cli-main.js +5 -0
  381. package/dist/nerves/review/cli.js +156 -0
  382. package/dist/nerves/review/core.js +159 -0
  383. package/dist/nerves/runtime.js +17 -1
  384. package/dist/repertoire/ado-client.js +15 -56
  385. package/dist/repertoire/ado-semantic.js +16 -10
  386. package/dist/repertoire/api-client.js +97 -0
  387. package/dist/repertoire/bitwarden-store.js +1045 -0
  388. package/dist/repertoire/bundle-templates.js +71 -0
  389. package/dist/repertoire/bw-installer.js +180 -0
  390. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  391. package/dist/repertoire/coding/context-pack.js +331 -0
  392. package/dist/repertoire/coding/feedback.js +174 -32
  393. package/dist/repertoire/coding/index.js +15 -3
  394. package/dist/repertoire/coding/manager.js +159 -10
  395. package/dist/repertoire/coding/spawner.js +58 -11
  396. package/dist/repertoire/coding/tools.js +221 -15
  397. package/dist/repertoire/coding/workbench-client.js +272 -0
  398. package/dist/repertoire/coding/workbench-manager.js +346 -0
  399. package/dist/repertoire/commerce-errors.js +109 -0
  400. package/dist/repertoire/commerce-self-test.js +156 -0
  401. package/dist/repertoire/credential-access.js +178 -0
  402. package/dist/repertoire/desk/classifier.js +362 -0
  403. package/dist/repertoire/duffel-client.js +185 -0
  404. package/dist/repertoire/github-client.js +14 -55
  405. package/dist/repertoire/graph-client.js +11 -52
  406. package/dist/repertoire/guardrails.js +811 -18
  407. package/dist/repertoire/mcp-client.js +44 -3
  408. package/dist/repertoire/mcp-manager.js +427 -139
  409. package/dist/repertoire/mcp-tools.js +124 -0
  410. package/dist/repertoire/plugin-mcp.js +175 -0
  411. package/dist/repertoire/plugins.js +253 -0
  412. package/dist/repertoire/relationship-authorization.js +322 -0
  413. package/dist/repertoire/shell-sessions.js +134 -0
  414. package/dist/repertoire/skills.js +48 -4
  415. package/dist/repertoire/stripe-client.js +131 -0
  416. package/dist/repertoire/tool-arguments.js +170 -0
  417. package/dist/repertoire/tool-results.js +29 -0
  418. package/dist/repertoire/tools-a2a.js +699 -0
  419. package/dist/repertoire/tools-attachments.js +322 -0
  420. package/dist/repertoire/tools-awaiting.js +575 -0
  421. package/dist/repertoire/tools-base.js +77 -1138
  422. package/dist/repertoire/tools-bluebubbles.js +2 -0
  423. package/dist/repertoire/tools-bridge.js +144 -0
  424. package/dist/repertoire/tools-bundle.js +993 -0
  425. package/dist/repertoire/tools-commerce.js +253 -0
  426. package/dist/repertoire/tools-config.js +186 -0
  427. package/dist/repertoire/tools-continuity.js +575 -0
  428. package/dist/repertoire/tools-credential.js +383 -0
  429. package/dist/repertoire/tools-evolution.js +527 -0
  430. package/dist/repertoire/tools-files.js +344 -0
  431. package/dist/repertoire/tools-flight.js +290 -0
  432. package/dist/repertoire/tools-flow.js +119 -0
  433. package/dist/repertoire/tools-github.js +3 -8
  434. package/dist/repertoire/tools-habits.js +103 -0
  435. package/dist/repertoire/tools-mail.js +1828 -0
  436. package/dist/repertoire/tools-notes.js +485 -0
  437. package/dist/repertoire/tools-obligations.js +182 -0
  438. package/dist/repertoire/tools-orientation.js +31 -0
  439. package/dist/repertoire/tools-record.js +482 -0
  440. package/dist/repertoire/tools-rsvp.js +139 -0
  441. package/dist/repertoire/tools-runtime.js +150 -0
  442. package/dist/repertoire/tools-sanctuary-host.js +202 -0
  443. package/dist/repertoire/tools-session.js +1133 -0
  444. package/dist/repertoire/tools-shell.js +149 -0
  445. package/dist/repertoire/tools-steward-policy.js +119 -0
  446. package/dist/repertoire/tools-stripe.js +224 -0
  447. package/dist/repertoire/tools-surface.js +369 -0
  448. package/dist/repertoire/tools-teams.js +12 -39
  449. package/dist/repertoire/tools-telegram-contacts.js +37 -0
  450. package/dist/repertoire/tools-travel.js +125 -0
  451. package/dist/repertoire/tools-trip.js +982 -0
  452. package/dist/repertoire/tools-unraid.js +531 -0
  453. package/dist/repertoire/tools-user-profile.js +146 -0
  454. package/dist/repertoire/tools-vault.js +40 -0
  455. package/dist/repertoire/tools-voice.js +145 -0
  456. package/dist/repertoire/tools.js +494 -148
  457. package/dist/repertoire/travel-api-client.js +360 -0
  458. package/dist/repertoire/unraid-client.js +155 -0
  459. package/dist/repertoire/unraid-restart.js +339 -0
  460. package/dist/repertoire/user-profile.js +131 -0
  461. package/dist/repertoire/vault-setup.js +246 -0
  462. package/dist/repertoire/vault-unlock.js +628 -0
  463. package/dist/rsvp/aisleplanner-client.js +354 -0
  464. package/dist/rsvp/cli.js +926 -0
  465. package/dist/rsvp/config.js +327 -0
  466. package/dist/rsvp/cutover.js +433 -0
  467. package/dist/rsvp/diagnostics.js +232 -0
  468. package/dist/rsvp/diff-renderer.js +176 -0
  469. package/dist/rsvp/habit-policy.js +110 -0
  470. package/dist/rsvp/habit-stage.js +123 -0
  471. package/dist/rsvp/incident-bundle.js +97 -0
  472. package/dist/rsvp/migration.js +204 -0
  473. package/dist/rsvp/native-habit-runner.js +630 -0
  474. package/dist/rsvp/outbound-state.js +628 -0
  475. package/dist/rsvp/query.js +118 -0
  476. package/dist/rsvp/replay.js +233 -0
  477. package/dist/rsvp/snapshot.js +232 -0
  478. package/dist/rsvp/spend-ledger.js +175 -0
  479. package/dist/scripts/claude-code-hook.js +41 -0
  480. package/dist/scripts/claude-code-stop-hook.js +47 -0
  481. package/dist/senses/a2a-entry.js +115 -0
  482. package/dist/senses/acp-server.js +386 -0
  483. package/dist/senses/attention-queue.js +186 -0
  484. package/dist/senses/await-turn-message.js +58 -0
  485. package/dist/senses/bluebubbles/active-turns.js +216 -0
  486. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  487. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  488. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +355 -40
  489. package/dist/senses/bluebubbles/context-packet.js +207 -0
  490. package/dist/senses/bluebubbles/context-smoke.js +144 -0
  491. package/dist/senses/bluebubbles/entry.js +90 -0
  492. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +21 -3
  493. package/dist/senses/bluebubbles/index.js +3841 -0
  494. package/dist/senses/bluebubbles/latest-turn.js +311 -0
  495. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
  496. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +159 -28
  497. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +24 -13
  498. package/dist/senses/bluebubbles/outbound-state.js +308 -0
  499. package/dist/senses/bluebubbles/processed-log.js +133 -0
  500. package/dist/senses/bluebubbles/reaction-policy.js +47 -0
  501. package/dist/senses/bluebubbles/replay.js +284 -0
  502. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  503. package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
  504. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  505. package/dist/senses/bluebubbles/webhook-registration.js +228 -0
  506. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  507. package/dist/senses/cli/bracketed-paste.js +82 -0
  508. package/dist/senses/cli/image-paste.js +287 -0
  509. package/dist/senses/cli/image-ref-navigation.js +75 -0
  510. package/dist/senses/cli/ink-app.js +156 -0
  511. package/dist/senses/cli/inline-diff.js +64 -0
  512. package/dist/senses/cli/input-keys.js +174 -0
  513. package/dist/senses/cli/kill-ring.js +86 -0
  514. package/dist/senses/cli/message-list.js +51 -0
  515. package/dist/senses/cli/ouro-tui.js +607 -0
  516. package/dist/senses/cli/spinner-imperative.js +135 -0
  517. package/dist/senses/cli/spinner.js +101 -0
  518. package/dist/senses/cli/status-line.js +60 -0
  519. package/dist/senses/cli/streaming-markdown.js +526 -0
  520. package/dist/senses/cli/tool-display.js +85 -0
  521. package/dist/senses/cli/tool-render.js +85 -0
  522. package/dist/senses/cli/tui-store.js +241 -0
  523. package/dist/senses/cli/virtual-list.js +35 -0
  524. package/dist/senses/cli-entry.js +60 -8
  525. package/dist/senses/cli.js +604 -320
  526. package/dist/senses/commands.js +66 -3
  527. package/dist/senses/context-packet-ledger.js +371 -0
  528. package/dist/senses/context-packets.js +154 -0
  529. package/dist/senses/habit-lifecycle-guard.js +24 -0
  530. package/dist/senses/habit-turn-message.js +160 -0
  531. package/dist/senses/ingress-evidence.js +2 -0
  532. package/dist/senses/mail-entry.js +66 -0
  533. package/dist/senses/mail.js +524 -0
  534. package/dist/senses/pipeline.js +1115 -204
  535. package/dist/senses/private-runtime-worker.js +859 -0
  536. package/dist/senses/private-runtime.js +1517 -0
  537. package/dist/senses/proactive-content-guard.js +51 -0
  538. package/dist/senses/root-host-approval-port.js +345 -0
  539. package/dist/senses/root-host-approval-runtime.js +393 -0
  540. package/dist/senses/sanctuary-authority-resident.js +102 -0
  541. package/dist/senses/sanctuary-download-credit-presentation.js +31 -0
  542. package/dist/senses/sanctuary-full-visibility-contract.js +302 -0
  543. package/dist/senses/sanctuary-grounding.js +118 -0
  544. package/dist/senses/sanctuary-health-acceptance-probe-entry.js +12 -0
  545. package/dist/senses/sanctuary-health-acceptance-probe.js +774 -0
  546. package/dist/senses/sanctuary-health-runner.js +100 -0
  547. package/dist/senses/sanctuary-health.js +408 -0
  548. package/dist/senses/sanctuary-install-state-contract.js +126 -0
  549. package/dist/senses/sanctuary-interactive-control.js +410 -0
  550. package/dist/senses/sanctuary-media-catalog-contract.js +297 -0
  551. package/dist/senses/sanctuary-media-optimization.js +514 -0
  552. package/dist/senses/sanctuary-runtime.js +340 -0
  553. package/dist/senses/sanctuary-sab.js +85 -0
  554. package/dist/senses/sanctuary-storage-optimization-contract.js +32 -0
  555. package/dist/senses/shared-turn.js +772 -0
  556. package/dist/senses/surface-tool.js +109 -0
  557. package/dist/senses/teams-entry.js +60 -8
  558. package/dist/senses/teams.js +519 -218
  559. package/dist/senses/telegram-admission.js +718 -0
  560. package/dist/senses/telegram-approval-runtime.js +793 -0
  561. package/dist/senses/telegram-attachments.js +186 -0
  562. package/dist/senses/telegram-audit-ledger.js +220 -0
  563. package/dist/senses/telegram-authority-transport.js +231 -0
  564. package/dist/senses/telegram-client.js +1749 -0
  565. package/dist/senses/telegram-effect-adapter.js +896 -0
  566. package/dist/senses/telegram-entry.js +83 -0
  567. package/dist/senses/telegram.js +2324 -0
  568. package/dist/senses/trust-gate.js +104 -9
  569. package/dist/senses/voice/audio-playback.js +237 -0
  570. package/dist/senses/voice/audio-routing.js +119 -0
  571. package/dist/senses/voice/elevenlabs.js +202 -0
  572. package/dist/senses/voice/floor-control.js +431 -0
  573. package/dist/senses/voice/floor-controller.js +115 -0
  574. package/dist/senses/voice/golden-path.js +116 -0
  575. package/dist/senses/voice/index.js +29 -0
  576. package/dist/senses/voice/meeting.js +113 -0
  577. package/dist/senses/voice/outbound.js +190 -0
  578. package/dist/senses/voice/phone.js +33 -0
  579. package/dist/senses/voice/playback.js +139 -0
  580. package/dist/senses/voice/realtime-eval.js +496 -0
  581. package/dist/senses/voice/realtime-trace.js +531 -0
  582. package/dist/senses/voice/transcript.js +70 -0
  583. package/dist/senses/voice/turn.js +191 -0
  584. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  585. package/dist/senses/voice/twilio-phone.js +5031 -0
  586. package/dist/senses/voice/types.js +2 -0
  587. package/dist/senses/voice/whisper.js +161 -0
  588. package/dist/senses/voice-entry.js +81 -0
  589. package/dist/senses/voice-realtime-eval-command.js +99 -0
  590. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  591. package/dist/senses/voice-twilio-entry.js +87 -0
  592. package/dist/trips/core.js +138 -0
  593. package/dist/trips/store.js +265 -0
  594. package/dist/util/frontmatter.js +69 -0
  595. package/npm-shrinkwrap.json +8138 -0
  596. package/package.json +72 -13
  597. package/skills/agent-commerce.md +113 -0
  598. package/skills/browser-navigation.md +117 -0
  599. package/skills/commerce-setup-guide.md +116 -0
  600. package/skills/commerce-setup.md +84 -0
  601. package/skills/configure-dev-tools.md +99 -0
  602. package/skills/travel-planning.md +138 -0
  603. package/dist/heart/daemon/auth-flow.js +0 -430
  604. package/dist/heart/daemon/ouro-path-installer.js +0 -260
  605. package/dist/heart/daemon/ouro-version-manager.js +0 -171
  606. package/dist/heart/daemon/update-hooks.js +0 -138
  607. package/dist/heart/obligations.js +0 -191
  608. package/dist/heart/safe-workspace.js +0 -228
  609. package/dist/heart/session-recall.js +0 -116
  610. package/dist/mind/friends/channel.js +0 -84
  611. package/dist/mind/friends/group-context.js +0 -144
  612. package/dist/mind/friends/resolver.js +0 -84
  613. package/dist/mind/friends/store-file.js +0 -190
  614. package/dist/mind/friends/store.js +0 -4
  615. package/dist/mind/friends/tokens.js +0 -26
  616. package/dist/mind/friends/trust-explanation.js +0 -74
  617. package/dist/mind/friends/types.js +0 -29
  618. package/dist/repertoire/tasks/board.js +0 -134
  619. package/dist/repertoire/tasks/index.js +0 -224
  620. package/dist/repertoire/tasks/lifecycle.js +0 -80
  621. package/dist/repertoire/tasks/middleware.js +0 -65
  622. package/dist/repertoire/tasks/parser.js +0 -173
  623. package/dist/repertoire/tasks/scanner.js +0 -132
  624. package/dist/repertoire/tasks/transitions.js +0 -144
  625. package/dist/senses/bluebubbles-entry.js +0 -13
  626. package/dist/senses/bluebubbles.js +0 -1181
  627. package/dist/senses/debug-activity.js +0 -154
  628. package/dist/senses/inner-dialog-worker.js +0 -90
  629. package/dist/senses/inner-dialog.js +0 -525
  630. package/subagents/README.md +0 -7
  631. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  632. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  633. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  634. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  635. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  636. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  637. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  638. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  639. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  640. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  641. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  642. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  643. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
  644. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  645. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  646. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  647. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -1,144 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.upsertGroupContextParticipants = upsertGroupContextParticipants;
4
- const node_crypto_1 = require("node:crypto");
5
- const runtime_1 = require("../../nerves/runtime");
6
- const CURRENT_SCHEMA_VERSION = 1;
7
- function normalizeDisplayName(externalId, displayName) {
8
- const trimmed = displayName?.trim();
9
- return trimmed && trimmed.length > 0 ? trimmed : externalId;
10
- }
11
- function buildNameNotes(name, now) {
12
- return name !== "Unknown"
13
- ? { name: { value: name, savedAt: now } }
14
- : {};
15
- }
16
- function dedupeParticipants(participants) {
17
- const deduped = new Map();
18
- for (const participant of participants) {
19
- const externalId = participant.externalId.trim();
20
- if (!externalId)
21
- continue;
22
- const key = `${participant.provider}:${externalId}`;
23
- if (!deduped.has(key)) {
24
- deduped.set(key, {
25
- ...participant,
26
- externalId,
27
- displayName: participant.displayName?.trim() || undefined,
28
- });
29
- }
30
- }
31
- return Array.from(deduped.values());
32
- }
33
- function createGroupExternalId(provider, groupExternalId, linkedAt) {
34
- return {
35
- provider,
36
- externalId: groupExternalId,
37
- linkedAt,
38
- };
39
- }
40
- function shouldPromoteToAcquaintance(friend) {
41
- return (friend.trustLevel ?? "stranger") === "stranger";
42
- }
43
- function createAcquaintanceRecord(participant, groupExternalId, linkedAt) {
44
- const name = normalizeDisplayName(participant.externalId, participant.displayName);
45
- return {
46
- id: (0, node_crypto_1.randomUUID)(),
47
- name,
48
- role: "acquaintance",
49
- trustLevel: "acquaintance",
50
- connections: [],
51
- externalIds: [
52
- {
53
- provider: participant.provider,
54
- externalId: participant.externalId,
55
- linkedAt,
56
- },
57
- createGroupExternalId(participant.provider, groupExternalId, linkedAt),
58
- ],
59
- tenantMemberships: [],
60
- toolPreferences: {},
61
- notes: buildNameNotes(name, linkedAt),
62
- totalTokens: 0,
63
- createdAt: linkedAt,
64
- updatedAt: linkedAt,
65
- schemaVersion: CURRENT_SCHEMA_VERSION,
66
- };
67
- }
68
- async function upsertGroupContextParticipants(input) {
69
- (0, runtime_1.emitNervesEvent)({
70
- component: "friends",
71
- event: "friends.group_context_upsert_start",
72
- message: "upserting shared-group participant context",
73
- meta: {
74
- participantCount: input.participants.length,
75
- hasGroupExternalId: input.groupExternalId.trim().length > 0,
76
- },
77
- });
78
- const groupExternalId = input.groupExternalId.trim();
79
- if (!groupExternalId) {
80
- return [];
81
- }
82
- const now = input.now ?? (() => new Date().toISOString());
83
- const participants = dedupeParticipants(input.participants);
84
- const results = [];
85
- for (const participant of participants) {
86
- const linkedAt = now();
87
- const existing = await input.store.findByExternalId(participant.provider, participant.externalId);
88
- if (!existing) {
89
- const created = createAcquaintanceRecord(participant, groupExternalId, linkedAt);
90
- await input.store.put(created.id, created);
91
- results.push({
92
- friendId: created.id,
93
- name: created.name,
94
- trustLevel: "acquaintance",
95
- created: true,
96
- updated: false,
97
- addedGroupExternalId: true,
98
- });
99
- continue;
100
- }
101
- const hasGroupExternalId = existing.externalIds.some((externalId) => externalId.externalId === groupExternalId);
102
- const promoteToAcquaintance = shouldPromoteToAcquaintance(existing);
103
- const trustLevel = promoteToAcquaintance
104
- ? "acquaintance"
105
- : existing.trustLevel;
106
- const role = promoteToAcquaintance
107
- ? "acquaintance"
108
- : existing.role;
109
- const updatedExternalIds = hasGroupExternalId
110
- ? existing.externalIds
111
- : [...existing.externalIds, createGroupExternalId(participant.provider, groupExternalId, linkedAt)];
112
- const updated = promoteToAcquaintance || !hasGroupExternalId;
113
- const record = updated
114
- ? {
115
- ...existing,
116
- role,
117
- trustLevel,
118
- externalIds: updatedExternalIds,
119
- updatedAt: linkedAt,
120
- }
121
- : existing;
122
- if (updated) {
123
- await input.store.put(record.id, record);
124
- }
125
- results.push({
126
- friendId: record.id,
127
- name: record.name,
128
- trustLevel,
129
- created: false,
130
- updated,
131
- addedGroupExternalId: !hasGroupExternalId,
132
- });
133
- }
134
- (0, runtime_1.emitNervesEvent)({
135
- component: "friends",
136
- event: "friends.group_context_upsert_end",
137
- message: "upserted shared-group participant context",
138
- meta: {
139
- participantCount: participants.length,
140
- updatedCount: results.filter((result) => result.created || result.updated).length,
141
- },
142
- });
143
- return results;
144
- }
@@ -1,84 +0,0 @@
1
- "use strict";
2
- // FriendResolver -- resolves external identity into a FriendRecord + channel capabilities.
3
- // Created per-request (per-incoming-message), per-friend.
4
- // Replaces the old ContextResolver: no authority checker, no separate memory resolution.
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.FriendResolver = void 0;
7
- const crypto_1 = require("crypto");
8
- const channel_1 = require("./channel");
9
- const runtime_1 = require("../../nerves/runtime");
10
- const CURRENT_SCHEMA_VERSION = 1;
11
- class FriendResolver {
12
- store;
13
- params;
14
- constructor(store, params) {
15
- this.store = store;
16
- this.params = params;
17
- }
18
- async resolve() {
19
- const friend = await this.resolveOrCreate();
20
- const channel = (0, channel_1.getChannelCapabilities)(this.params.channel);
21
- return { friend, channel };
22
- }
23
- async resolveOrCreate() {
24
- // Try to find existing friend by external ID
25
- let existing = null;
26
- try {
27
- existing = await this.store.findByExternalId(this.params.provider, this.params.externalId, this.params.tenantId);
28
- }
29
- catch {
30
- // Store search failure -- fall through to create new (D16)
31
- }
32
- if (existing)
33
- return existing;
34
- // First encounter -- create new FriendRecord
35
- const now = new Date().toISOString();
36
- const externalId = {
37
- provider: this.params.provider,
38
- externalId: this.params.externalId,
39
- linkedAt: now,
40
- ...(this.params.tenantId !== undefined ? { tenantId: this.params.tenantId } : {}),
41
- };
42
- const tenantMemberships = this.params.tenantId ? [this.params.tenantId] : [];
43
- let hasAnyFriends = false;
44
- try {
45
- if (typeof this.store.hasAnyFriends === "function") {
46
- hasAnyFriends = await this.store.hasAnyFriends();
47
- }
48
- }
49
- catch {
50
- hasAnyFriends = false;
51
- }
52
- const isFirstImprint = !hasAnyFriends;
53
- const friend = {
54
- id: (0, crypto_1.randomUUID)(),
55
- name: this.params.displayName,
56
- role: isFirstImprint ? "primary" : "stranger",
57
- trustLevel: isFirstImprint ? "family" : "stranger",
58
- connections: [],
59
- externalIds: [externalId],
60
- tenantMemberships,
61
- toolPreferences: {},
62
- notes: this.params.displayName !== "Unknown" ? { name: { value: this.params.displayName, savedAt: now } } : {},
63
- totalTokens: 0,
64
- createdAt: now,
65
- updatedAt: now,
66
- schemaVersion: CURRENT_SCHEMA_VERSION,
67
- };
68
- // Persist -- log and continue on failure (D16)
69
- try {
70
- await this.store.put(friend.id, friend);
71
- }
72
- catch (err) {
73
- (0, runtime_1.emitNervesEvent)({
74
- level: "error",
75
- event: "friends.persist_error",
76
- component: "friends",
77
- message: "failed to persist friend record",
78
- meta: { reason: err instanceof Error ? err.message : String(err) },
79
- });
80
- }
81
- return friend;
82
- }
83
- }
84
- exports.FriendResolver = FriendResolver;
@@ -1,190 +0,0 @@
1
- "use strict";
2
- // FileFriendStore -- filesystem adapter for FriendStore.
3
- // Stores each friend as one unified JSON file in bundle `friends/`.
4
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
- if (k2 === undefined) k2 = k;
6
- var desc = Object.getOwnPropertyDescriptor(m, k);
7
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
- desc = { enumerable: true, get: function() { return m[k]; } };
9
- }
10
- Object.defineProperty(o, k2, desc);
11
- }) : (function(o, m, k, k2) {
12
- if (k2 === undefined) k2 = k;
13
- o[k2] = m[k];
14
- }));
15
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
- Object.defineProperty(o, "default", { enumerable: true, value: v });
17
- }) : function(o, v) {
18
- o["default"] = v;
19
- });
20
- var __importStar = (this && this.__importStar) || (function () {
21
- var ownKeys = function(o) {
22
- ownKeys = Object.getOwnPropertyNames || function (o) {
23
- var ar = [];
24
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
- return ar;
26
- };
27
- return ownKeys(o);
28
- };
29
- return function (mod) {
30
- if (mod && mod.__esModule) return mod;
31
- var result = {};
32
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
- __setModuleDefault(result, mod);
34
- return result;
35
- };
36
- })();
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.FileFriendStore = void 0;
39
- const fs = __importStar(require("fs"));
40
- const fsPromises = __importStar(require("fs/promises"));
41
- const path = __importStar(require("path"));
42
- const runtime_1 = require("../../nerves/runtime");
43
- const DEFAULT_ROLE = "friend";
44
- const DEFAULT_TRUST_LEVEL = "friend";
45
- class FileFriendStore {
46
- friendsPath;
47
- constructor(friendsPath) {
48
- this.friendsPath = friendsPath;
49
- fs.mkdirSync(friendsPath, { recursive: true });
50
- (0, runtime_1.emitNervesEvent)({
51
- component: "friends",
52
- event: "friends.store_init",
53
- message: "file friend store initialized",
54
- meta: {},
55
- });
56
- }
57
- async get(id) {
58
- const record = await this.readJson(path.join(this.friendsPath, `${id}.json`));
59
- if (!record)
60
- return null;
61
- return this.normalize(record);
62
- }
63
- async put(id, record) {
64
- await this.writeJson(path.join(this.friendsPath, `${id}.json`), this.normalize(record));
65
- }
66
- async delete(id) {
67
- await this.removeFile(path.join(this.friendsPath, `${id}.json`));
68
- }
69
- async findByExternalId(provider, externalId, tenantId) {
70
- let entries;
71
- try {
72
- entries = await fsPromises.readdir(this.friendsPath);
73
- }
74
- catch {
75
- return null;
76
- }
77
- for (const entry of entries) {
78
- if (!entry.endsWith(".json"))
79
- continue;
80
- const raw = await this.readJson(path.join(this.friendsPath, entry));
81
- if (!raw)
82
- continue;
83
- const record = this.normalize(raw);
84
- const match = record.externalIds.some((ext) => ext.provider === provider &&
85
- ext.externalId === externalId &&
86
- (tenantId === undefined || ext.tenantId === tenantId));
87
- if (match) {
88
- return record;
89
- }
90
- }
91
- return null;
92
- }
93
- async hasAnyFriends() {
94
- let entries;
95
- try {
96
- entries = await fsPromises.readdir(this.friendsPath);
97
- }
98
- catch {
99
- return false;
100
- }
101
- return entries.some((entry) => entry.endsWith(".json"));
102
- }
103
- async listAll() {
104
- let entries;
105
- try {
106
- entries = await fsPromises.readdir(this.friendsPath);
107
- }
108
- catch {
109
- return [];
110
- }
111
- const records = [];
112
- for (const entry of entries) {
113
- if (!entry.endsWith(".json"))
114
- continue;
115
- const raw = await this.readJson(path.join(this.friendsPath, entry));
116
- if (!raw)
117
- continue;
118
- records.push(this.normalize(raw));
119
- }
120
- return records;
121
- }
122
- normalize(raw) {
123
- const trustLevel = raw.trustLevel;
124
- const normalizedTrustLevel = trustLevel === "family" ||
125
- trustLevel === "friend" ||
126
- trustLevel === "acquaintance" ||
127
- trustLevel === "stranger"
128
- ? trustLevel
129
- : DEFAULT_TRUST_LEVEL;
130
- return {
131
- id: raw.id,
132
- name: raw.name,
133
- role: typeof raw.role === "string" && raw.role.trim() ? raw.role : DEFAULT_ROLE,
134
- trustLevel: normalizedTrustLevel,
135
- connections: Array.isArray(raw.connections)
136
- ? raw.connections
137
- .filter((connection) => (typeof connection === "object" &&
138
- connection !== null &&
139
- typeof connection.name === "string" &&
140
- typeof connection.relationship === "string"))
141
- .map((connection) => ({
142
- name: connection.name,
143
- relationship: connection.relationship,
144
- }))
145
- : [],
146
- externalIds: Array.isArray(raw.externalIds) ? raw.externalIds : [],
147
- tenantMemberships: Array.isArray(raw.tenantMemberships) ? raw.tenantMemberships : [],
148
- toolPreferences: raw.toolPreferences && typeof raw.toolPreferences === "object"
149
- ? raw.toolPreferences
150
- : {},
151
- notes: raw.notes && typeof raw.notes === "object" ? raw.notes : {},
152
- totalTokens: typeof raw.totalTokens === "number" ? raw.totalTokens : 0,
153
- createdAt: typeof raw.createdAt === "string" ? raw.createdAt : new Date().toISOString(),
154
- updatedAt: typeof raw.updatedAt === "string" ? raw.updatedAt : new Date().toISOString(),
155
- schemaVersion: typeof raw.schemaVersion === "number" ? raw.schemaVersion : 1,
156
- };
157
- }
158
- async readJson(filePath) {
159
- try {
160
- const raw = await fsPromises.readFile(filePath, "utf-8");
161
- try {
162
- const parsed = JSON.parse(raw);
163
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
164
- return null;
165
- }
166
- return parsed;
167
- }
168
- catch {
169
- return null;
170
- }
171
- }
172
- catch {
173
- return null;
174
- }
175
- }
176
- async writeJson(filePath, data) {
177
- await fsPromises.writeFile(filePath, JSON.stringify(data, null, 2), "utf-8");
178
- }
179
- async removeFile(filePath) {
180
- try {
181
- await fsPromises.unlink(filePath);
182
- }
183
- catch (err) {
184
- if (err?.code === "ENOENT")
185
- return;
186
- throw err;
187
- }
188
- }
189
- }
190
- exports.FileFriendStore = FileFriendStore;
@@ -1,4 +0,0 @@
1
- "use strict";
2
- // Friend store abstraction.
3
- // All friend persistence goes through FriendStore -- no friend module imports `fs` directly.
4
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,26 +0,0 @@
1
- "use strict";
2
- // Token accumulation helper.
3
- // Tracks cumulative token usage per friend across turns.
4
- // Called from both CLI and Teams adapters after each agent turn.
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.accumulateFriendTokens = accumulateFriendTokens;
7
- const runtime_1 = require("../../nerves/runtime");
8
- async function accumulateFriendTokens(store, friendId, usage) {
9
- if (!usage?.output_tokens)
10
- return;
11
- const record = await store.get(friendId);
12
- if (!record)
13
- return;
14
- // Only count output tokens (what the model generated for this friend).
15
- // Input tokens are mostly system prompt re-sent every turn -- counting them
16
- // would inflate the total and make the onboarding threshold meaningless.
17
- record.totalTokens = (record.totalTokens ?? 0) + usage.output_tokens;
18
- record.updatedAt = new Date().toISOString();
19
- await store.put(record.id, record);
20
- (0, runtime_1.emitNervesEvent)({
21
- component: "friends",
22
- event: "friends.tokens_accumulated",
23
- message: "tokens accumulated for friend",
24
- meta: { friendId, outputTokens: usage.output_tokens },
25
- });
26
- }
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.describeTrustContext = describeTrustContext;
4
- const runtime_1 = require("../../nerves/runtime");
5
- function findRelatedGroupId(friend) {
6
- return friend.externalIds.find((externalId) => externalId.externalId.startsWith("group:"))?.externalId;
7
- }
8
- function resolveLevel(friend) {
9
- return friend.trustLevel ?? "stranger";
10
- }
11
- function describeTrustContext(input) {
12
- const level = resolveLevel(input.friend);
13
- const relatedGroupId = findRelatedGroupId(input.friend);
14
- const explanation = level === "family" || level === "friend"
15
- ? {
16
- level,
17
- basis: "direct",
18
- summary: level === "family"
19
- ? "direct family trust"
20
- : "direct trusted relationship",
21
- why: "this relationship is directly trusted rather than inferred through a shared group or cold first contact.",
22
- permits: [
23
- "local operations when appropriate",
24
- "proactive follow-through",
25
- "full collaborative problem solving",
26
- ],
27
- constraints: [],
28
- }
29
- : level === "acquaintance"
30
- ? {
31
- level,
32
- basis: "shared_group",
33
- summary: relatedGroupId
34
- ? "known through the shared project group"
35
- : "known through a shared group context",
36
- why: relatedGroupId
37
- ? `this trust comes from the shared group context ${relatedGroupId}, not from direct endorsement.`
38
- : "this trust comes from shared group context rather than direct endorsement.",
39
- permits: [
40
- "group-safe coordination",
41
- "normal conversation inside the shared context",
42
- ],
43
- constraints: [
44
- "guarded local actions",
45
- "do not assume broad private authority",
46
- ],
47
- relatedGroupId,
48
- }
49
- : {
50
- level,
51
- basis: "unknown",
52
- summary: "truly unknown first-contact context",
53
- why: "this person is not known through direct trust or a shared group context.",
54
- permits: [
55
- "safe first-contact orientation only",
56
- ],
57
- constraints: [
58
- "first contact does not reach the full model on open channels",
59
- "no local or privileged actions",
60
- ],
61
- };
62
- (0, runtime_1.emitNervesEvent)({
63
- component: "friends",
64
- event: "friends.trust_explained",
65
- message: "built explicit trust explanation",
66
- meta: {
67
- channel: input.channel,
68
- level: explanation.level,
69
- basis: explanation.basis,
70
- hasRelatedGroup: Boolean(explanation.relatedGroupId),
71
- },
72
- });
73
- return explanation;
74
- }
@@ -1,29 +0,0 @@
1
- "use strict";
2
- // Context kernel type definitions.
3
- // FriendRecord (merged identity + memory), channel capabilities, and resolved context.
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.TRUSTED_LEVELS = void 0;
6
- exports.isIdentityProvider = isIdentityProvider;
7
- exports.isIntegration = isIntegration;
8
- exports.isTrustedLevel = isTrustedLevel;
9
- const runtime_1 = require("../../nerves/runtime");
10
- const IDENTITY_PROVIDERS = new Set(["aad", "local", "teams-conversation", "imessage-handle"]);
11
- function isIdentityProvider(value) {
12
- (0, runtime_1.emitNervesEvent)({
13
- component: "friends",
14
- event: "friends.identity_provider_check",
15
- message: "identity provider validation",
16
- meta: {},
17
- });
18
- return typeof value === "string" && IDENTITY_PROVIDERS.has(value);
19
- }
20
- const INTEGRATIONS = new Set(["ado", "github", "graph"]);
21
- function isIntegration(value) {
22
- return typeof value === "string" && INTEGRATIONS.has(value);
23
- }
24
- /** Trust levels that grant full tool access and proactive send capability. */
25
- exports.TRUSTED_LEVELS = new Set(["family", "friend"]);
26
- /** Whether a trust level grants full access (family or friend). Defaults to "friend" for legacy records. */
27
- function isTrustedLevel(trustLevel) {
28
- return exports.TRUSTED_LEVELS.has(trustLevel ?? "friend");
29
- }
@@ -1,134 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildTaskBoard = buildTaskBoard;
4
- exports.boardStatus = boardStatus;
5
- exports.boardAction = boardAction;
6
- exports.boardDeps = boardDeps;
7
- exports.boardSessions = boardSessions;
8
- const runtime_1 = require("../../nerves/runtime");
9
- const transitions_1 = require("./transitions");
10
- const BOARD_STATUS_ORDER = [
11
- "blocked",
12
- "processing",
13
- "collaborating",
14
- "drafting",
15
- "validating",
16
- "paused",
17
- "done",
18
- ];
19
- function compactName(task) {
20
- const suffix = task.stem.replace(/^\d{4}-\d{2}-\d{2}-\d{4}-/, "");
21
- return suffix.length > 0 ? suffix : task.stem;
22
- }
23
- function groupByStatus(tasks) {
24
- const grouped = {
25
- drafting: [],
26
- processing: [],
27
- validating: [],
28
- collaborating: [],
29
- paused: [],
30
- blocked: [],
31
- done: [],
32
- };
33
- for (const task of tasks) {
34
- grouped[task.status].push(compactName(task));
35
- }
36
- for (const status of transitions_1.TASK_VALID_STATUSES) {
37
- grouped[status].sort();
38
- }
39
- return grouped;
40
- }
41
- function unresolvedDependencies(index) {
42
- const stems = new Set(index.tasks.map((task) => task.stem));
43
- const unresolved = [];
44
- for (const task of index.tasks) {
45
- const deps = Array.isArray(task.frontmatter.depends_on) ? task.frontmatter.depends_on : [];
46
- for (const dep of deps) {
47
- if (typeof dep === "string" && dep.trim() && !stems.has(dep)) {
48
- unresolved.push(`${task.stem} -> missing ${dep}`);
49
- }
50
- }
51
- }
52
- return unresolved.sort();
53
- }
54
- function activeSessionLines(tasks) {
55
- const active = tasks.filter((task) => {
56
- const session = task.frontmatter.active_session;
57
- const codingSession = task.frontmatter.coding_session;
58
- return Boolean(session) || Boolean(codingSession);
59
- });
60
- return active.map((task) => task.stem).sort();
61
- }
62
- function activeBridgeLines(tasks) {
63
- return tasks
64
- .filter((task) => typeof task.frontmatter.active_bridge === "string" && String(task.frontmatter.active_bridge).trim())
65
- .map((task) => `${task.stem} -> ${String(task.frontmatter.active_bridge).trim()}`)
66
- .sort();
67
- }
68
- function actionRequired(index, byStatus) {
69
- const actions = [...index.parseErrors, ...index.invalidFilenames.map((filePath) => `bad filename: ${filePath}`)];
70
- if (byStatus.blocked.length > 0) {
71
- actions.push(`blocked tasks: ${byStatus.blocked.join(", ")}`);
72
- }
73
- const missingCategory = index.tasks
74
- .filter((task) => !task.category || !task.category.trim())
75
- .map((task) => `missing category: ${task.stem}`);
76
- return [...actions, ...missingCategory];
77
- }
78
- function buildTaskBoard(index) {
79
- (0, runtime_1.emitNervesEvent)({
80
- event: "mind.step_start",
81
- component: "mind",
82
- message: "building task board",
83
- meta: { taskCount: index.tasks.length },
84
- });
85
- const byStatus = groupByStatus(index.tasks);
86
- const counts = transitions_1.TASK_VALID_STATUSES.map((status) => `${status}:${byStatus[status].length}`).join(" ");
87
- const processing = byStatus.processing.length > 0 ? `\n processing: ${byStatus.processing.join(", ")}` : "";
88
- const blocked = byStatus.blocked.length > 0 ? `\n blocked: ${byStatus.blocked.join(", ")}` : "";
89
- const compact = `[Tasks] ${counts}${processing}${blocked}`;
90
- const fullLines = [];
91
- for (const status of BOARD_STATUS_ORDER) {
92
- const names = byStatus[status];
93
- if (status === "done" && names.length === 0)
94
- continue;
95
- fullLines.push(`## ${status}`);
96
- fullLines.push(names.length > 0 ? names.map((name) => `- ${name}`).join("\n") : "- (none)");
97
- }
98
- const unresolved = unresolvedDependencies(index);
99
- if (unresolved.length > 0) {
100
- fullLines.push("## dependencies");
101
- fullLines.push(unresolved.map((line) => `- ${line}`).join("\n"));
102
- }
103
- const active = activeSessionLines(index.tasks);
104
- if (active.length > 0) {
105
- fullLines.push("## active sessions");
106
- fullLines.push(active.map((line) => `- ${line}`).join("\n"));
107
- }
108
- const activeBridges = activeBridgeLines(index.tasks);
109
- if (activeBridges.length > 0) {
110
- fullLines.push("## active bridges");
111
- fullLines.push(activeBridges.map((line) => `- ${line}`).join("\n"));
112
- }
113
- return {
114
- compact,
115
- full: fullLines.join("\n\n"),
116
- byStatus,
117
- actionRequired: actionRequired(index, byStatus),
118
- unresolvedDependencies: unresolved,
119
- activeSessions: active,
120
- activeBridges,
121
- };
122
- }
123
- function boardStatus(board, status) {
124
- return board.byStatus[status] ?? [];
125
- }
126
- function boardAction(board) {
127
- return board.actionRequired;
128
- }
129
- function boardDeps(board) {
130
- return board.unresolvedDependencies;
131
- }
132
- function boardSessions(board) {
133
- return board.activeSessions;
134
- }