@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,13 +1,49 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.formatBridgeStatus = formatBridgeStatus;
4
37
  exports.formatBridgeContext = formatBridgeContext;
5
38
  exports.createBridgeManager = createBridgeManager;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
6
41
  const runtime_1 = require("../../nerves/runtime");
42
+ const config_1 = require("../config");
43
+ const identity_1 = require("../identity");
7
44
  const state_machine_1 = require("./state-machine");
8
45
  const store_1 = require("./store");
9
46
  const turn_coordinator_1 = require("../turn-coordinator");
10
- const tasks_1 = require("../../repertoire/tasks");
11
47
  function defaultIdFactory() {
12
48
  return `bridge-${Date.now().toString(36)}`;
13
49
  }
@@ -81,23 +117,105 @@ function hasAttachedSessionActivity(bridge, sessionActivity) {
81
117
  return sessionActivity.some((activity) => activity.channel !== "inner"
82
118
  && bridge.attachedSessions.some((session) => sessionMatches(activity, session)));
83
119
  }
84
- function hasLiveTaskStatus(bridge, taskBoard) {
85
- const taskName = bridge.task?.taskName;
86
- if (!taskName)
87
- return false;
88
- return (taskBoard.byStatus.processing.includes(taskName)
89
- || taskBoard.byStatus.collaborating.includes(taskName)
90
- || taskBoard.byStatus.validating.includes(taskName));
91
- }
92
120
  function isCurrentSessionAttached(bridge, currentSession) {
93
121
  if (!currentSession)
94
122
  return false;
95
123
  return bridge.attachedSessions.some((session) => sessionMatches(session, currentSession));
96
124
  }
125
+ // ──────────────────────────────────────────────────────────────────────────────
126
+ // Desk task writer — bridge promotion durably writes a `task.md` under the
127
+ // bundle's `desk/bridges/<slug>/` track so the desk substrate (W6) owns the
128
+ // promoted task. This module deliberately does not depend on
129
+ // `src/repertoire/tasks/` — the task module is being retired in Unit 8c.
130
+ // ──────────────────────────────────────────────────────────────────────────────
131
+ function formatStemTimestamp(now = new Date()) {
132
+ const year = now.getFullYear();
133
+ const month = String(now.getMonth() + 1).padStart(2, "0");
134
+ const day = String(now.getDate()).padStart(2, "0");
135
+ const hours = String(now.getHours()).padStart(2, "0");
136
+ const minutes = String(now.getMinutes()).padStart(2, "0");
137
+ return `${year}-${month}-${day}-${hours}${minutes}`;
138
+ }
139
+ function formatDate(now = new Date()) {
140
+ return now.toISOString().slice(0, 10);
141
+ }
142
+ function formatFrontmatterValue(value) {
143
+ if (Array.isArray(value)) {
144
+ if (value.length === 0)
145
+ return ["[]"];
146
+ return ["", ...value.map((entry) => `- ${String(entry)}`)];
147
+ }
148
+ if (value === null)
149
+ return ["null"];
150
+ return [String(value)];
151
+ }
152
+ function renderTaskMarkdown(frontmatter, body) {
153
+ const lines = ["---"];
154
+ for (const key of Object.keys(frontmatter)) {
155
+ const rendered = formatFrontmatterValue(frontmatter[key]);
156
+ if (rendered.length === 1) {
157
+ lines.push(`${key}: ${rendered[0]}`);
158
+ }
159
+ else {
160
+ lines.push(`${key}:`);
161
+ for (const entry of rendered.slice(1)) {
162
+ lines.push(entry);
163
+ }
164
+ }
165
+ }
166
+ lines.push("---");
167
+ lines.push("");
168
+ lines.push(body.trim());
169
+ lines.push("");
170
+ return lines.join("\n");
171
+ }
172
+ /**
173
+ * Default desk-task writer — writes a `task.md` under
174
+ * `<agentRoot>/desk/bridges/<stem>/task.md` and returns the slug + path.
175
+ *
176
+ * The "bridges" track is the home for promoted bridge work; the slug is
177
+ * `<YYYY-MM-DD-HHMM>-<slugified-title>` to match the timestamped shape used
178
+ * elsewhere in desk.
179
+ */
180
+ function defaultWriteDeskTask(input) {
181
+ (0, runtime_1.emitNervesEvent)({
182
+ event: "engine.bridge_desk_task_write",
183
+ component: "engine",
184
+ message: "writing desk task for promoted bridge",
185
+ meta: { activeBridge: input.activeBridge },
186
+ });
187
+ const now = new Date();
188
+ const stem = `${formatStemTimestamp(now)}-${(0, config_1.slugify)(input.title).slice(0, 64) || "bridge"}`;
189
+ const trackDir = path.join((0, identity_1.getAgentRoot)(), "desk", "bridges", stem);
190
+ const taskPath = path.join(trackDir, "task.md");
191
+ const today = formatDate(now);
192
+ const frontmatter = {
193
+ kind: "task",
194
+ schema_version: 1,
195
+ type: "ongoing",
196
+ category: input.category || "coordination",
197
+ title: input.title,
198
+ status: "processing",
199
+ validator: null,
200
+ requester: "agent",
201
+ cadence: null,
202
+ scheduledAt: null,
203
+ lastRun: null,
204
+ created: today,
205
+ updated: today,
206
+ artifacts: [],
207
+ active_bridge: input.activeBridge,
208
+ bridge_sessions: input.bridgeSessions.filter((value) => typeof value === "string" && value.trim().length > 0),
209
+ };
210
+ fs.mkdirSync(trackDir, { recursive: true });
211
+ fs.writeFileSync(taskPath, renderTaskMarkdown(frontmatter, input.body), "utf-8");
212
+ return { taskName: stem, path: taskPath };
213
+ }
97
214
  function createBridgeManager(options = {}) {
98
215
  const store = options.store ?? (0, store_1.createBridgeStore)();
99
216
  const now = options.now ?? (() => new Date().toISOString());
100
217
  const idFactory = options.idFactory ?? defaultIdFactory;
218
+ const writeDeskTask = options.writeDeskTask ?? defaultWriteDeskTask;
101
219
  function requireBridge(bridgeId) {
102
220
  const bridge = store.get(bridgeId);
103
221
  if (!bridge) {
@@ -187,9 +305,14 @@ function createBridgeManager(options = {}) {
187
305
  },
188
306
  reconcileLifecycles(input) {
189
307
  return store.list().map((bridge) => {
308
+ // Unit 8a dropped the legacy task-board read from production callers,
309
+ // and Unit 8b drops it from the manager surface entirely. Bridges
310
+ // suspend when no attached session is active and the current session
311
+ // isn't attached — task-state cross-referencing is no longer part of
312
+ // the lifecycle reconciliation contract.
190
313
  const nextState = (0, state_machine_1.reconcileBridgeState)(bridge, {
191
314
  hasAttachedSessionActivity: hasAttachedSessionActivity(bridge, input.sessionActivity),
192
- hasLiveTask: hasLiveTaskStatus(bridge, input.taskBoard),
315
+ hasLiveTask: false,
193
316
  currentSessionAttached: isCurrentSessionAttached(bridge, input.currentSession),
194
317
  });
195
318
  if (nextState.lifecycle === bridge.lifecycle && nextState.runtime === bridge.runtime) {
@@ -207,21 +330,18 @@ function createBridgeManager(options = {}) {
207
330
  assertBridgeMutable(bridge, "promote");
208
331
  if (bridge.task)
209
332
  return bridge;
210
- const taskPath = (0, tasks_1.getTaskModule)().createTask({
333
+ const written = writeDeskTask({
211
334
  title: input.title?.trim() || bridge.objective,
212
- type: "ongoing",
213
335
  category: input.category?.trim() || "coordination",
214
- status: "processing",
215
336
  body: input.body?.trim() || defaultTaskBody(bridge),
216
337
  activeBridge: bridge.id,
217
338
  bridgeSessions: bridge.attachedSessions.map((session) => sessionIdentityKey(session)),
218
339
  });
219
- const taskName = taskPath.replace(/^.*\//, "").replace(/\.md$/, "");
220
340
  const updated = save({
221
341
  ...bridge,
222
342
  task: {
223
- taskName,
224
- path: taskPath,
343
+ taskName: written.taskName,
344
+ path: written.path,
225
345
  mode: "promoted",
226
346
  boundAt: now(),
227
347
  },
@@ -233,7 +353,7 @@ function createBridgeManager(options = {}) {
233
353
  message: "promoted bridge to task-backed work",
234
354
  meta: {
235
355
  bridgeId,
236
- taskName,
356
+ taskName: written.taskName,
237
357
  },
238
358
  });
239
359
  return updated;
@@ -38,6 +38,7 @@ exports.createBridgeStore = createBridgeStore;
38
38
  const fs = __importStar(require("fs"));
39
39
  const path = __importStar(require("path"));
40
40
  const identity_1 = require("../identity");
41
+ const session_events_1 = require("../session-events");
41
42
  const runtime_1 = require("../../nerves/runtime");
42
43
  function sessionIdentityMatches(session, candidate) {
43
44
  return (session.friendId === candidate.friendId
@@ -58,7 +59,18 @@ function createBridgeStore(options = {}) {
58
59
  return {
59
60
  save(bridge) {
60
61
  ensureRoot();
61
- fs.writeFileSync(bridgeFilePath(rootDir, bridge.id), JSON.stringify(bridge, null, 2), "utf-8");
62
+ const cappedBridge = {
63
+ ...bridge,
64
+ objective: (0, session_events_1.capStructuredRecordString)(bridge.objective),
65
+ summary: (0, session_events_1.capStructuredRecordString)(bridge.summary),
66
+ attachedSessions: bridge.attachedSessions.map((session) => ({
67
+ ...session,
68
+ snapshot: typeof session.snapshot === "string"
69
+ ? (0, session_events_1.capStructuredRecordString)(session.snapshot)
70
+ : session.snapshot,
71
+ })),
72
+ };
73
+ fs.writeFileSync(bridgeFilePath(rootDir, bridge.id), JSON.stringify(cappedBridge, null, 2), "utf-8");
62
74
  (0, runtime_1.emitNervesEvent)({
63
75
  component: "engine",
64
76
  event: "engine.bridge_store_save",
@@ -68,7 +80,7 @@ function createBridgeStore(options = {}) {
68
80
  rootDir,
69
81
  },
70
82
  });
71
- return bridge;
83
+ return cappedBridge;
72
84
  },
73
85
  get(id) {
74
86
  const filePath = bridgeFilePath(rootDir, id);
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.detectBundleState = detectBundleState;
37
+ exports.renderBundleStateHint = renderBundleStateHint;
38
+ /**
39
+ * Bundle state detection: inspects an agent bundle's git + pending-sync
40
+ * state and returns a structured list of issues the agent needs to remediate
41
+ * via its `bundle_*` tools.
42
+ *
43
+ * Previously the sync pipeline surfaced a single free-form `syncFailure`
44
+ * string that was good for humans but hard for the agent to act on. The
45
+ * new `BundleStateIssue` enum lets the agent pattern-match on discrete
46
+ * cases and pick the correct remediation tool (shipping in PR 6).
47
+ *
48
+ * Detection never throws: every git call is wrapped in try/catch so a
49
+ * broken bundle or a missing git binary degrades to an empty array or a
50
+ * `not_a_git_repo` signal rather than exploding the turn pipeline.
51
+ *
52
+ * The classification returned here is detected from bundle state +
53
+ * the `classification` field of `state/pending-sync.json` (written by
54
+ * `postTurnPush` in sync.ts when it writes the pending-sync record).
55
+ *
56
+ * - `not_a_git_repo`: `.git` directory missing.
57
+ * - `no_remote_configured`: `git remote` returns empty.
58
+ * - `first_commit_never_happened`: `.git` exists but `git rev-parse HEAD`
59
+ * fails (fresh `git init` with nothing committed).
60
+ * - `pending_sync_exists`: `state/pending-sync.json` exists — the agent
61
+ * should inspect it and clear the pending state.
62
+ * - `remote_push_failed`: pending-sync classified as `push_rejected` —
63
+ * the remote advanced and a simple retry won't work.
64
+ * - `pull_rebase_conflict`: pending-sync classified as
65
+ * `pull_rebase_conflict` — the rebase left conflicted files the agent
66
+ * has to walk the user through resolving.
67
+ */
68
+ const child_process_1 = require("child_process");
69
+ const fs = __importStar(require("fs"));
70
+ const path = __importStar(require("path"));
71
+ const runtime_1 = require("../nerves/runtime");
72
+ function detectBundleState(agentRoot, deps = {}) {
73
+ const exec = deps.execFileSync ?? child_process_1.execFileSync;
74
+ const exists = deps.existsSync ?? fs.existsSync;
75
+ const readFile = deps.readFileSync ?? ((p, enc) => fs.readFileSync(p, enc));
76
+ const issues = [];
77
+ (0, runtime_1.emitNervesEvent)({
78
+ component: "heart",
79
+ event: "heart.bundle_state_detect_start",
80
+ message: "detecting bundle state",
81
+ meta: { agentRoot },
82
+ });
83
+ const gitDir = path.join(agentRoot, ".git");
84
+ const isGitRepo = exists(gitDir);
85
+ if (!isGitRepo) {
86
+ issues.push("not_a_git_repo");
87
+ }
88
+ else {
89
+ // Check remote presence
90
+ try {
91
+ const remoteOutput = exec("git", ["remote"], {
92
+ cwd: agentRoot,
93
+ stdio: "pipe",
94
+ timeout: 5000,
95
+ }).toString().trim();
96
+ if (remoteOutput.length === 0) {
97
+ issues.push("no_remote_configured");
98
+ }
99
+ }
100
+ catch {
101
+ // Git missing or broken — treat as no_remote_configured so the
102
+ // agent surfaces a "fix git" signal rather than a silent pass.
103
+ issues.push("no_remote_configured");
104
+ }
105
+ // Check for initial commit
106
+ try {
107
+ exec("git", ["rev-parse", "HEAD"], {
108
+ cwd: agentRoot,
109
+ stdio: "pipe",
110
+ timeout: 5000,
111
+ });
112
+ }
113
+ catch {
114
+ issues.push("first_commit_never_happened");
115
+ }
116
+ }
117
+ // Pending-sync file — independent of git state (could exist on a bundle
118
+ // that was a repo and then had its .git deleted). When present, also
119
+ // inspect the classification field to surface the specific failure
120
+ // mode as an additional issue.
121
+ const pendingSyncPath = path.join(agentRoot, "state", "pending-sync.json");
122
+ if (exists(pendingSyncPath)) {
123
+ issues.push("pending_sync_exists");
124
+ try {
125
+ const raw = readFile(pendingSyncPath, "utf-8");
126
+ const parsed = JSON.parse(raw);
127
+ if (parsed.classification === "push_rejected") {
128
+ issues.push("remote_push_failed");
129
+ }
130
+ else if (parsed.classification === "pull_rebase_conflict") {
131
+ issues.push("pull_rebase_conflict");
132
+ }
133
+ }
134
+ catch {
135
+ // Malformed or unreadable pending-sync.json — pending_sync_exists
136
+ // alone is enough signal for the agent to investigate.
137
+ }
138
+ }
139
+ (0, runtime_1.emitNervesEvent)({
140
+ component: "heart",
141
+ event: "heart.bundle_state_detect_end",
142
+ message: `bundle state detected: ${issues.length} issue(s)`,
143
+ meta: { agentRoot, issues },
144
+ });
145
+ return issues;
146
+ }
147
+ /**
148
+ * First-person remediation hint text for the start-of-turn packet. Reads
149
+ * as the agent's own voice per the declarative first-person note rule.
150
+ * Returns empty string when there are no issues (so the packet renderer
151
+ * can skip the section entirely).
152
+ */
153
+ function renderBundleStateHint(issues) {
154
+ if (issues.length === 0)
155
+ return "";
156
+ const labels = {
157
+ not_a_git_repo: "not a git repo",
158
+ no_remote_configured: "no remote configured",
159
+ first_commit_never_happened: "first commit never happened",
160
+ pending_sync_exists: "pending sync from a prior turn",
161
+ remote_push_failed: "remote push rejected (remote advanced)",
162
+ pull_rebase_conflict: "pull-rebase left conflicts i need to walk the user through",
163
+ };
164
+ const list = issues.map((issue) => labels[issue]).join(", ");
165
+ return (`my bundle has unresolved git state: ${list}. ` +
166
+ `i have the bundle_* tools available to fix this — i should run ` +
167
+ `bundle_check_sync_status first, then use the appropriate remediation tool.`);
168
+ }
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.deriveCommitments = deriveCommitments;
4
4
  exports.formatCommitments = formatCommitments;
5
- const obligations_1 = require("./obligations");
5
+ const obligations_1 = require("../arc/obligations");
6
6
  const runtime_1 = require("../nerves/runtime");
7
7
  function describeActiveObligation(obligation) {
8
8
  if (obligation.status === "pending") {
@@ -15,14 +15,21 @@ function describeActiveObligation(obligation) {
15
15
  }
16
16
  return `i owe ${obligation.origin.friendId}: ${obligation.content} (${statusText})`;
17
17
  }
18
- function deriveCommitments(activeWorkFrame, innerJob, pendingObligations) {
18
+ function deriveCommitments(activeWorkFrame, innerJob, pendingObligations, pendingAwaits) {
19
19
  const committedTo = [];
20
20
  const completionCriteria = [];
21
21
  const safeToIgnore = [];
22
+ const awaiting = pendingAwaits ? [...pendingAwaits] : [];
22
23
  // Persistent obligations from the obligation store
24
+ // Sort by status priority: investigating/waiting/updating before pending
23
25
  if (pendingObligations && pendingObligations.length > 0) {
26
+ const sorted = [...pendingObligations].sort((a, b) => {
27
+ const advancedA = a.status !== "pending" && a.status !== "fulfilled" ? 0 : 1;
28
+ const advancedB = b.status !== "pending" && b.status !== "fulfilled" ? 0 : 1;
29
+ return advancedA - advancedB;
30
+ });
24
31
  let hasAdvancedObligation = false;
25
- for (const ob of pendingObligations) {
32
+ for (const ob of sorted) {
26
33
  if (!(0, obligations_1.isOpenObligationStatus)(ob.status))
27
34
  continue;
28
35
  committedTo.push(describeActiveObligation(ob));
@@ -34,10 +41,6 @@ function deriveCommitments(activeWorkFrame, innerJob, pendingObligations) {
34
41
  completionCriteria.push("close my active obligation loops");
35
42
  }
36
43
  }
37
- // Obligation (from current turn -- kept for backward compat)
38
- if (typeof activeWorkFrame.currentObligation === "string" && activeWorkFrame.currentObligation.trim().length > 0) {
39
- committedTo.push(`i told them i'd ${activeWorkFrame.currentObligation.trim()}`);
40
- }
41
44
  // Inner job
42
45
  if (innerJob.status === "queued" || innerJob.status === "running") {
43
46
  const contentSuffix = innerJob.content ? ` -- ${innerJob.content.slice(0, 60)}` : "";
@@ -58,10 +61,6 @@ function deriveCommitments(activeWorkFrame, innerJob, pendingObligations) {
58
61
  if (activeWorkFrame.bridges.length > 0) {
59
62
  completionCriteria.push("keep shared work aligned across sessions");
60
63
  }
61
- // Tasks
62
- for (const taskName of activeWorkFrame.taskPressure?.liveTaskNames ?? []) {
63
- committedTo.push(`i'm tracking: ${taskName}`);
64
- }
65
64
  // Obligation completion criteria
66
65
  if (innerJob.obligationStatus === "pending") {
67
66
  const name = innerJob.origin?.friendName ?? innerJob.origin?.friendId ?? "them";
@@ -73,23 +72,38 @@ function deriveCommitments(activeWorkFrame, innerJob, pendingObligations) {
73
72
  }
74
73
  // Safe to ignore
75
74
  if (innerJob.status === "idle" && !(activeWorkFrame.inner?.hasPending)) {
76
- safeToIgnore.push("no private thinking in progress");
75
+ safeToIgnore.push("no private-runtime work in progress");
77
76
  }
78
77
  if (activeWorkFrame.bridges.length === 0) {
79
78
  safeToIgnore.push("no shared work to coordinate");
80
79
  }
81
- if ((activeWorkFrame.taskPressure?.liveTaskNames ?? []).length === 0) {
82
- safeToIgnore.push("no active tasks to track");
83
- }
84
80
  (0, runtime_1.emitNervesEvent)({
85
81
  component: "engine",
86
82
  event: "engine.commitments_derive",
87
83
  message: "derived commitments frame",
88
- meta: { committedCount: committedTo.length, criteriaCount: completionCriteria.length },
84
+ meta: { committedCount: committedTo.length, criteriaCount: completionCriteria.length, awaitingCount: awaiting.length },
89
85
  });
90
- return { committedTo, completionCriteria, safeToIgnore };
86
+ return { committedTo, completionCriteria, safeToIgnore, awaiting };
87
+ }
88
+ function formatRelativeAge(lastCheckedAt, now) {
89
+ if (!lastCheckedAt)
90
+ return "never checked";
91
+ const lastMs = new Date(lastCheckedAt).getTime();
92
+ if (!Number.isFinite(lastMs))
93
+ return "never checked";
94
+ const elapsedMs = now().getTime() - lastMs;
95
+ if (elapsedMs < 60_000)
96
+ return "<1m ago";
97
+ const minutes = Math.floor(elapsedMs / 60_000);
98
+ if (minutes < 60)
99
+ return `${minutes}m ago`;
100
+ const hours = Math.floor(minutes / 60);
101
+ if (hours < 24)
102
+ return `${hours}h ago`;
103
+ const days = Math.floor(hours / 24);
104
+ return `${days}d ago`;
91
105
  }
92
- function formatCommitments(commitments) {
106
+ function formatCommitments(commitments, now = () => new Date()) {
93
107
  const sections = [];
94
108
  if (commitments.committedTo.length === 0) {
95
109
  sections.push("i'm not holding anything specific right now. i'm free to be present.");
@@ -105,5 +119,17 @@ function formatCommitments(commitments) {
105
119
  sections.push("");
106
120
  sections.push("## what i can let go of");
107
121
  sections.push(commitments.safeToIgnore.map((c) => `- ${c}`).join("\n"));
122
+ const awaiting = commitments.awaiting ?? [];
123
+ if (awaiting.length > 0) {
124
+ sections.push("");
125
+ sections.push("## what i'm waiting on");
126
+ for (const a of awaiting) {
127
+ sections.push(`- ${a.name}: ${a.condition}`);
128
+ const obs = a.lastObservation && a.lastObservation.trim().length > 0
129
+ ? `: "${a.lastObservation.trim()}"`
130
+ : "";
131
+ sections.push(` (checked ${a.checkedCount}x, last ${formatRelativeAge(a.lastCheckedAt, now)}${obs})`);
132
+ }
133
+ }
108
134
  return sections.join("\n");
109
135
  }