@ouro.bot/cli 0.1.0-alpha.7 → 0.1.0-alpha.700

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 (514) hide show
  1. package/README.md +235 -183
  2. package/RepairGuide.ouro/agent.json +5 -0
  3. package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
  4. package/RepairGuide.ouro/psyche/SOUL.md +55 -0
  5. package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
  6. package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
  7. package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
  8. package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
  9. package/SerpentGuide.ouro/agent.json +83 -0
  10. package/SerpentGuide.ouro/psyche/SOUL.md +25 -0
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +2 -2
  12. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  13. package/assets/ouroboros.png +0 -0
  14. package/changelog.json +4827 -0
  15. package/dist/a2a/card.js +57 -0
  16. package/dist/a2a/client.js +180 -0
  17. package/dist/a2a/config.js +50 -0
  18. package/dist/a2a/delegation-stores.js +56 -0
  19. package/dist/a2a/did-resolution.js +93 -0
  20. package/dist/a2a/identity.js +170 -0
  21. package/dist/a2a/inbound-share.js +107 -0
  22. package/dist/a2a/mission-result-wire.js +196 -0
  23. package/dist/a2a/onboarding.js +115 -0
  24. package/dist/a2a/pin-store.js +132 -0
  25. package/dist/a2a/seen-ledger.js +120 -0
  26. package/dist/a2a/server.js +604 -0
  27. package/dist/a2a/task-store.js +69 -0
  28. package/dist/a2a/transport.js +45 -0
  29. package/dist/a2a/types.js +3 -0
  30. package/dist/arc/attention-types.js +8 -0
  31. package/dist/arc/cares.js +144 -0
  32. package/dist/arc/episodes.js +118 -0
  33. package/dist/arc/evolution.js +490 -0
  34. package/dist/arc/flight-recorder.js +928 -0
  35. package/dist/arc/intentions.js +134 -0
  36. package/dist/arc/json-store.js +117 -0
  37. package/dist/arc/obligations.js +348 -0
  38. package/dist/arc/packets.js +336 -0
  39. package/dist/arc/presence.js +185 -0
  40. package/dist/arc/task-lifecycle.js +57 -0
  41. package/dist/commerce/store.js +755 -0
  42. package/dist/commerce/types.js +3 -0
  43. package/dist/heart/active-work.js +1002 -0
  44. package/dist/heart/agent-entry.js +190 -3
  45. package/dist/heart/attachments/image-normalize.js +194 -0
  46. package/dist/heart/attachments/materialize.js +97 -0
  47. package/dist/heart/attachments/originals.js +88 -0
  48. package/dist/heart/attachments/render.js +29 -0
  49. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  50. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  51. package/dist/heart/attachments/sources/index.js +16 -0
  52. package/dist/heart/attachments/store.js +103 -0
  53. package/dist/heart/attachments/types.js +93 -0
  54. package/dist/heart/auth/auth-flow.js +479 -0
  55. package/dist/heart/autonomy-budget.js +434 -0
  56. package/dist/heart/awaiting/await-alert.js +146 -0
  57. package/dist/heart/awaiting/await-expiry.js +108 -0
  58. package/dist/heart/awaiting/await-loader.js +91 -0
  59. package/dist/heart/awaiting/await-parser.js +141 -0
  60. package/dist/heart/awaiting/await-runtime-state.js +100 -0
  61. package/dist/heart/awaiting/await-scheduler.js +378 -0
  62. package/dist/heart/background-operations.js +281 -0
  63. package/dist/heart/bridges/manager.js +478 -0
  64. package/dist/heart/bridges/state-machine.js +135 -0
  65. package/dist/heart/bridges/store.js +135 -0
  66. package/dist/heart/bundle-state.js +168 -0
  67. package/dist/heart/commitments.js +135 -0
  68. package/dist/heart/config-registry.js +331 -0
  69. package/dist/heart/config.js +172 -135
  70. package/dist/heart/context-loss-gauntlet.js +354 -0
  71. package/dist/heart/context-loss-sentinel.js +1155 -0
  72. package/dist/heart/core.js +1480 -262
  73. package/dist/heart/cross-chat-delivery.js +132 -0
  74. package/dist/heart/daemon/agent-config-check.js +451 -0
  75. package/dist/heart/daemon/agent-discovery.js +263 -0
  76. package/dist/heart/daemon/agent-service.js +523 -0
  77. package/dist/heart/daemon/agentic-repair.js +547 -0
  78. package/dist/heart/daemon/await-private-wake.js +59 -0
  79. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  80. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  81. package/dist/heart/daemon/cadence.js +180 -0
  82. package/dist/heart/daemon/cli-defaults.js +780 -0
  83. package/dist/heart/daemon/cli-desk.js +322 -0
  84. package/dist/heart/daemon/cli-exec.js +8142 -0
  85. package/dist/heart/daemon/cli-help.js +675 -0
  86. package/dist/heart/daemon/cli-parse.js +2461 -0
  87. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  88. package/dist/heart/daemon/cli-render.js +770 -0
  89. package/dist/heart/daemon/cli-types.js +8 -0
  90. package/dist/heart/daemon/connect-bay.js +323 -0
  91. package/dist/heart/daemon/daemon-cli.js +30 -784
  92. package/dist/heart/daemon/daemon-entry.js +874 -13
  93. package/dist/heart/daemon/daemon-health.js +176 -0
  94. package/dist/heart/daemon/daemon-rollup.js +57 -0
  95. package/dist/heart/daemon/daemon-runtime-sync.js +287 -0
  96. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  97. package/dist/heart/daemon/daemon.js +1412 -26
  98. package/dist/heart/daemon/dns-workflow.js +394 -0
  99. package/dist/heart/daemon/doctor-types.js +8 -0
  100. package/dist/heart/daemon/doctor.js +1126 -0
  101. package/dist/heart/daemon/habit-private-wake.js +56 -0
  102. package/dist/heart/daemon/health-monitor.js +142 -11
  103. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  104. package/dist/heart/daemon/hooks/bundle-meta.js +226 -0
  105. package/dist/heart/daemon/http-health-probe.js +80 -0
  106. package/dist/heart/daemon/human-command-screens.js +234 -0
  107. package/dist/heart/daemon/human-readiness.js +114 -0
  108. package/dist/heart/daemon/inner-status.js +78 -0
  109. package/dist/heart/daemon/interactive-repair.js +394 -0
  110. package/dist/heart/daemon/launchd.js +188 -0
  111. package/dist/heart/daemon/log-tailer.js +82 -12
  112. package/dist/heart/daemon/logs-prune.js +110 -0
  113. package/dist/heart/daemon/mcp-canary.js +297 -0
  114. package/dist/heart/daemon/message-router.js +60 -11
  115. package/dist/heart/daemon/migrate-to-desk.js +848 -0
  116. package/dist/heart/daemon/os-cron-deps.js +135 -0
  117. package/dist/heart/daemon/os-cron.js +22 -14
  118. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  119. package/dist/heart/daemon/ouro-entry.js +3 -1
  120. package/dist/heart/daemon/plugin-cli.js +432 -0
  121. package/dist/heart/daemon/process-manager.js +525 -33
  122. package/dist/heart/daemon/provider-discovery.js +137 -0
  123. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  124. package/dist/heart/daemon/pulse.js +511 -0
  125. package/dist/heart/daemon/readiness-repair.js +365 -0
  126. package/dist/heart/daemon/run-hooks.js +39 -0
  127. package/dist/heart/daemon/runtime-logging.js +86 -16
  128. package/dist/heart/daemon/runtime-metadata.js +191 -0
  129. package/dist/{repertoire/tasks/lifecycle.js → heart/daemon/runtime-mode.js} +26 -39
  130. package/dist/heart/daemon/safe-mode.js +161 -0
  131. package/dist/heart/daemon/sense-manager.js +929 -0
  132. package/dist/heart/daemon/session-id-resolver.js +131 -0
  133. package/dist/heart/daemon/skill-management-installer.js +94 -0
  134. package/dist/heart/daemon/socket-client.js +361 -0
  135. package/dist/heart/daemon/stale-bundle-prune.js +113 -0
  136. package/dist/heart/daemon/startup-tui.js +338 -0
  137. package/dist/heart/daemon/task-scheduler.js +117 -39
  138. package/dist/heart/daemon/terminal-ui.js +499 -0
  139. package/dist/heart/daemon/thoughts.js +591 -0
  140. package/dist/heart/daemon/up-progress.js +366 -0
  141. package/dist/heart/daemon/vault-items.js +56 -0
  142. package/dist/heart/delegation.js +59 -0
  143. package/dist/heart/external-events/router.js +121 -0
  144. package/dist/heart/habits/habit-migration.js +189 -0
  145. package/dist/heart/habits/habit-parser.js +214 -0
  146. package/dist/heart/habits/habit-runtime-state.js +114 -0
  147. package/dist/heart/habits/habit-scheduler.js +431 -0
  148. package/dist/heart/habits/habit-session-summary.js +318 -0
  149. package/dist/heart/habits/habit-session.js +617 -0
  150. package/dist/heart/{daemon → hatch}/hatch-animation.js +10 -3
  151. package/dist/heart/{daemon → hatch}/hatch-flow.js +53 -137
  152. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  153. package/dist/heart/hatch/specialist-orchestrator.js +129 -0
  154. package/dist/heart/hatch/specialist-prompt.js +102 -0
  155. package/dist/heart/hatch/specialist-tools.js +318 -0
  156. package/dist/heart/identity.js +287 -67
  157. package/dist/heart/kept-notes.js +289 -0
  158. package/dist/heart/kicks.js +2 -20
  159. package/dist/heart/machine-identity.js +161 -0
  160. package/dist/heart/mail-import-discovery.js +353 -0
  161. package/dist/heart/mailbox/mailbox-http-hooks.js +96 -0
  162. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  163. package/dist/heart/mailbox/mailbox-http-routes.js +375 -0
  164. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  165. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  166. package/dist/heart/mailbox/mailbox-http.js +99 -0
  167. package/dist/heart/mailbox/mailbox-read.js +37 -0
  168. package/dist/heart/mailbox/mailbox-types.js +27 -0
  169. package/dist/heart/mailbox/mailbox-view.js +197 -0
  170. package/dist/heart/mailbox/readers/agent-machine.js +428 -0
  171. package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
  172. package/dist/heart/mailbox/readers/mail.js +375 -0
  173. package/dist/heart/mailbox/readers/runtime-readers.js +815 -0
  174. package/dist/heart/mailbox/readers/sessions.js +232 -0
  175. package/dist/heart/mailbox/readers/shared.js +111 -0
  176. package/dist/heart/mcp/mcp-server.js +696 -0
  177. package/dist/heart/migrate-config.js +100 -0
  178. package/dist/heart/model-capabilities.js +59 -0
  179. package/dist/heart/orientation-frame.js +217 -0
  180. package/dist/heart/platform.js +81 -0
  181. package/dist/heart/primitives.js +1 -1
  182. package/dist/heart/private-runtime/decision-renderer.js +156 -0
  183. package/dist/heart/private-runtime/index.js +18 -0
  184. package/dist/heart/private-runtime/ledger.js +218 -0
  185. package/dist/heart/private-runtime/policy.js +214 -0
  186. package/dist/heart/private-runtime/types.js +2 -0
  187. package/dist/heart/progress-story.js +42 -0
  188. package/dist/heart/provider-attempt.js +134 -0
  189. package/dist/heart/provider-binding-resolver.js +273 -0
  190. package/dist/heart/provider-credentials.js +441 -0
  191. package/dist/heart/provider-failover.js +311 -0
  192. package/dist/heart/provider-models.js +81 -0
  193. package/dist/heart/provider-ping.js +262 -0
  194. package/dist/heart/provider-readiness-cache.js +119 -0
  195. package/dist/heart/provider-visibility.js +188 -0
  196. package/dist/heart/providers/anthropic-token.js +131 -0
  197. package/dist/heart/providers/anthropic.js +202 -50
  198. package/dist/heart/providers/azure.js +104 -13
  199. package/dist/heart/providers/error-classification.js +127 -0
  200. package/dist/heart/providers/github-copilot.js +145 -0
  201. package/dist/heart/providers/minimax-vlm.js +189 -0
  202. package/dist/heart/providers/minimax.js +29 -7
  203. package/dist/heart/providers/openai-codex-token.js +349 -0
  204. package/dist/heart/providers/openai-codex.js +63 -39
  205. package/dist/heart/run-ledger.js +247 -0
  206. package/dist/heart/runtime-capability-check.js +170 -0
  207. package/dist/heart/runtime-credentials.js +398 -0
  208. package/dist/heart/runtime-cwd.js +87 -0
  209. package/dist/heart/sense-truth.js +77 -0
  210. package/dist/heart/session-activity.js +235 -0
  211. package/dist/heart/session-events.js +1133 -0
  212. package/dist/heart/session-playback-cli-main.js +5 -0
  213. package/dist/heart/session-playback-cli.js +36 -0
  214. package/dist/heart/session-playback.js +231 -0
  215. package/dist/heart/session-stats-cli-main.js +5 -0
  216. package/dist/heart/session-stats.js +182 -0
  217. package/dist/heart/session-transcript.js +133 -0
  218. package/dist/heart/start-of-turn-packet.js +365 -0
  219. package/dist/heart/streaming.js +129 -34
  220. package/dist/heart/structured-output.js +196 -0
  221. package/dist/heart/sync-classification.js +176 -0
  222. package/dist/heart/sync.js +449 -0
  223. package/dist/heart/target-resolution.js +127 -0
  224. package/dist/heart/tempo.js +93 -0
  225. package/dist/heart/temporal-view.js +41 -0
  226. package/dist/heart/timeouts.js +101 -0
  227. package/dist/heart/tool-activity-callbacks.js +59 -0
  228. package/dist/heart/tool-description.js +155 -0
  229. package/dist/heart/tool-friction.js +55 -0
  230. package/dist/heart/tool-loop.js +200 -0
  231. package/dist/heart/turn-context.js +472 -0
  232. package/dist/heart/turn-coordinator.js +28 -0
  233. package/dist/heart/versioning/ouro-bot-global-installer.js +129 -0
  234. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  235. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  236. package/dist/heart/{daemon → versioning}/ouro-uti.js +11 -2
  237. package/dist/heart/versioning/ouro-version-manager.js +409 -0
  238. package/dist/heart/versioning/staged-restart.js +146 -0
  239. package/dist/heart/versioning/update-checker.js +116 -0
  240. package/dist/heart/versioning/update-hooks.js +154 -0
  241. package/dist/heart/versioning/wrapper-publish-guard.js +86 -0
  242. package/dist/heart/work-card.js +380 -0
  243. package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
  244. package/dist/mailbox-ui/assets/index-J8zDwHmE.js +1 -0
  245. package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
  246. package/dist/mailbox-ui/index.html +16 -0
  247. package/dist/mailroom/attention.js +167 -0
  248. package/dist/mailroom/autonomy.js +209 -0
  249. package/dist/mailroom/blob-store.js +715 -0
  250. package/dist/mailroom/body-cache.js +61 -0
  251. package/dist/mailroom/core.js +788 -0
  252. package/dist/mailroom/entry.js +160 -0
  253. package/dist/mailroom/file-store.js +568 -0
  254. package/dist/mailroom/mbox-import.js +393 -0
  255. package/dist/mailroom/migration.js +164 -0
  256. package/dist/mailroom/outbound.js +380 -0
  257. package/dist/mailroom/policy.js +263 -0
  258. package/dist/mailroom/reader.js +233 -0
  259. package/dist/mailroom/search-cache.js +334 -0
  260. package/dist/mailroom/search-relevance.js +319 -0
  261. package/dist/mailroom/smtp-ingress.js +176 -0
  262. package/dist/mailroom/source-state.js +176 -0
  263. package/dist/mailroom/thread.js +109 -0
  264. package/dist/mailroom/travel-extract.js +89 -0
  265. package/dist/mind/bundle-manifest.js +93 -1
  266. package/dist/mind/context.js +259 -94
  267. package/dist/mind/desk-section.js +362 -0
  268. package/dist/mind/diary-integrity.js +60 -0
  269. package/dist/mind/{memory.js → diary.js} +90 -98
  270. package/dist/mind/embedding-provider.js +60 -0
  271. package/dist/mind/file-state.js +179 -0
  272. package/dist/mind/first-impressions.js +16 -2
  273. package/dist/mind/{associative-recall.js → note-search.js} +61 -60
  274. package/dist/mind/obligation-steering.js +221 -0
  275. package/dist/mind/pending.js +77 -9
  276. package/dist/mind/phrases.js +1 -0
  277. package/dist/mind/prompt-budget.js +380 -0
  278. package/dist/mind/prompt-refresh.js +3 -2
  279. package/dist/mind/prompt.js +1279 -139
  280. package/dist/mind/provenance-trust.js +26 -0
  281. package/dist/mind/record-paths.js +312 -0
  282. package/dist/mind/scrutiny.js +173 -0
  283. package/dist/mind/token-estimate.js +8 -12
  284. package/dist/nerves/cli-logging.js +22 -3
  285. package/dist/nerves/coverage/audit-rules.js +15 -6
  286. package/dist/nerves/coverage/audit.js +28 -2
  287. package/dist/nerves/coverage/cli.js +1 -1
  288. package/dist/nerves/coverage/contract.js +5 -5
  289. package/dist/nerves/coverage/file-completeness.js +139 -5
  290. package/dist/nerves/coverage/run-artifacts.js +1 -1
  291. package/dist/nerves/event-buffer.js +111 -0
  292. package/dist/nerves/index.js +234 -4
  293. package/dist/nerves/observation.js +20 -0
  294. package/dist/nerves/redact.js +79 -0
  295. package/dist/nerves/review/cli-main.js +5 -0
  296. package/dist/nerves/review/cli.js +156 -0
  297. package/dist/nerves/review/core.js +152 -0
  298. package/dist/nerves/runtime.js +5 -1
  299. package/dist/repertoire/ado-client.js +17 -56
  300. package/dist/repertoire/ado-semantic.js +16 -10
  301. package/dist/repertoire/api-client.js +97 -0
  302. package/dist/repertoire/bitwarden-store.js +1042 -0
  303. package/dist/repertoire/bundle-templates.js +71 -0
  304. package/dist/repertoire/bw-installer.js +180 -0
  305. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  306. package/dist/repertoire/coding/context-pack.js +331 -0
  307. package/dist/repertoire/coding/feedback.js +322 -0
  308. package/dist/repertoire/coding/index.js +18 -3
  309. package/dist/repertoire/coding/manager.js +228 -14
  310. package/dist/repertoire/coding/spawner.js +61 -14
  311. package/dist/repertoire/coding/tools.js +279 -12
  312. package/dist/repertoire/coding/workbench-client.js +272 -0
  313. package/dist/repertoire/coding/workbench-manager.js +346 -0
  314. package/dist/repertoire/commerce-errors.js +109 -0
  315. package/dist/repertoire/commerce-self-test.js +156 -0
  316. package/dist/repertoire/credential-access.js +178 -0
  317. package/dist/repertoire/data/ado-endpoints.json +188 -0
  318. package/dist/repertoire/desk/classifier.js +362 -0
  319. package/dist/repertoire/duffel-client.js +185 -0
  320. package/dist/repertoire/github-client.js +14 -55
  321. package/dist/repertoire/graph-client.js +11 -52
  322. package/dist/repertoire/guardrails.js +408 -0
  323. package/dist/repertoire/mcp-client.js +295 -0
  324. package/dist/repertoire/mcp-manager.js +434 -0
  325. package/dist/repertoire/mcp-tools.js +83 -0
  326. package/dist/repertoire/plugin-mcp.js +175 -0
  327. package/dist/repertoire/plugins.js +253 -0
  328. package/dist/repertoire/shell-sessions.js +133 -0
  329. package/dist/repertoire/skills.js +45 -24
  330. package/dist/repertoire/stripe-client.js +131 -0
  331. package/dist/repertoire/tool-results.js +29 -0
  332. package/dist/repertoire/tools-a2a.js +699 -0
  333. package/dist/repertoire/tools-attachments.js +317 -0
  334. package/dist/repertoire/tools-awaiting.js +372 -0
  335. package/dist/repertoire/tools-base.js +68 -707
  336. package/dist/repertoire/tools-bluebubbles.js +95 -0
  337. package/dist/repertoire/tools-bridge.js +144 -0
  338. package/dist/repertoire/tools-bundle.js +993 -0
  339. package/dist/repertoire/tools-commerce.js +253 -0
  340. package/dist/repertoire/tools-config.js +186 -0
  341. package/dist/repertoire/tools-continuity.js +252 -0
  342. package/dist/repertoire/tools-credential.js +383 -0
  343. package/dist/repertoire/tools-evolution.js +527 -0
  344. package/dist/repertoire/tools-files.js +344 -0
  345. package/dist/repertoire/tools-flight.js +290 -0
  346. package/dist/repertoire/tools-flow.js +119 -0
  347. package/dist/repertoire/tools-github.js +3 -8
  348. package/dist/repertoire/tools-mail.js +1975 -0
  349. package/dist/repertoire/tools-notes.js +459 -0
  350. package/dist/repertoire/tools-obligations.js +182 -0
  351. package/dist/repertoire/tools-orientation.js +31 -0
  352. package/dist/repertoire/tools-record.js +482 -0
  353. package/dist/repertoire/tools-rsvp.js +139 -0
  354. package/dist/repertoire/tools-runtime.js +150 -0
  355. package/dist/repertoire/tools-session.js +881 -0
  356. package/dist/repertoire/tools-shell.js +120 -0
  357. package/dist/repertoire/tools-stripe.js +224 -0
  358. package/dist/repertoire/tools-surface.js +355 -0
  359. package/dist/repertoire/tools-teams.js +67 -61
  360. package/dist/repertoire/tools-travel.js +125 -0
  361. package/dist/repertoire/tools-trip.js +982 -0
  362. package/dist/repertoire/tools-user-profile.js +146 -0
  363. package/dist/repertoire/tools-vault.js +40 -0
  364. package/dist/repertoire/tools-voice.js +145 -0
  365. package/dist/repertoire/tools.js +313 -102
  366. package/dist/repertoire/travel-api-client.js +360 -0
  367. package/dist/repertoire/user-profile.js +131 -0
  368. package/dist/repertoire/vault-setup.js +246 -0
  369. package/dist/repertoire/vault-unlock.js +594 -0
  370. package/dist/rsvp/aisleplanner-client.js +354 -0
  371. package/dist/rsvp/cli.js +704 -0
  372. package/dist/rsvp/config.js +327 -0
  373. package/dist/rsvp/cutover.js +431 -0
  374. package/dist/rsvp/diagnostics.js +222 -0
  375. package/dist/rsvp/diff-renderer.js +161 -0
  376. package/dist/rsvp/habit-policy.js +85 -0
  377. package/dist/rsvp/habit-stage.js +93 -0
  378. package/dist/rsvp/incident-bundle.js +97 -0
  379. package/dist/rsvp/migration.js +204 -0
  380. package/dist/rsvp/outbound-state.js +254 -0
  381. package/dist/rsvp/query.js +118 -0
  382. package/dist/rsvp/replay.js +233 -0
  383. package/dist/rsvp/snapshot.js +232 -0
  384. package/dist/scripts/claude-code-hook.js +41 -0
  385. package/dist/scripts/claude-code-stop-hook.js +47 -0
  386. package/dist/senses/a2a-entry.js +115 -0
  387. package/dist/senses/attention-queue.js +186 -0
  388. package/dist/senses/await-turn-message.js +58 -0
  389. package/dist/senses/bluebubbles/active-turns.js +216 -0
  390. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  391. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  392. package/dist/senses/bluebubbles/client.js +691 -0
  393. package/dist/senses/bluebubbles/entry.js +77 -0
  394. package/dist/senses/bluebubbles/inbound-log.js +126 -0
  395. package/dist/senses/bluebubbles/index.js +2937 -0
  396. package/dist/senses/bluebubbles/media.js +389 -0
  397. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +45 -16
  398. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +46 -6
  399. package/dist/senses/bluebubbles/outbound-state.js +304 -0
  400. package/dist/senses/bluebubbles/processed-log.js +133 -0
  401. package/dist/senses/bluebubbles/replay.js +284 -0
  402. package/dist/senses/bluebubbles/runtime-state.js +137 -0
  403. package/dist/senses/bluebubbles/session-cleanup.js +72 -0
  404. package/dist/senses/bluebubbles-meta-guard.js +39 -0
  405. package/dist/senses/cli/bracketed-paste.js +82 -0
  406. package/dist/senses/cli/image-paste.js +287 -0
  407. package/dist/senses/cli/image-ref-navigation.js +75 -0
  408. package/dist/senses/cli/ink-app.js +156 -0
  409. package/dist/senses/cli/inline-diff.js +64 -0
  410. package/dist/senses/cli/input-keys.js +174 -0
  411. package/dist/senses/cli/kill-ring.js +86 -0
  412. package/dist/senses/cli/message-list.js +51 -0
  413. package/dist/senses/cli/ouro-tui.js +607 -0
  414. package/dist/senses/cli/spinner-imperative.js +135 -0
  415. package/dist/senses/cli/spinner.js +101 -0
  416. package/dist/senses/cli/status-line.js +60 -0
  417. package/dist/senses/cli/streaming-markdown.js +526 -0
  418. package/dist/senses/cli/tool-display.js +85 -0
  419. package/dist/senses/cli/tool-render.js +85 -0
  420. package/dist/senses/cli/tui-store.js +240 -0
  421. package/dist/senses/cli/virtual-list.js +35 -0
  422. package/dist/senses/cli-entry.js +60 -8
  423. package/dist/senses/cli-layout.js +187 -0
  424. package/dist/senses/cli.js +780 -269
  425. package/dist/senses/commands.js +66 -3
  426. package/dist/senses/context-packet-ledger.js +245 -0
  427. package/dist/senses/context-packets.js +154 -0
  428. package/dist/senses/continuity.js +94 -0
  429. package/dist/senses/habit-turn-message.js +160 -0
  430. package/dist/senses/mail-entry.js +66 -0
  431. package/dist/senses/mail.js +395 -0
  432. package/dist/senses/pipeline.js +1052 -0
  433. package/dist/senses/private-runtime-worker.js +723 -0
  434. package/dist/senses/private-runtime.js +1157 -0
  435. package/dist/senses/proactive-content-guard.js +51 -0
  436. package/dist/senses/shared-turn.js +416 -0
  437. package/dist/senses/surface-tool.js +109 -0
  438. package/dist/senses/teams-entry.js +60 -8
  439. package/dist/senses/teams.js +928 -199
  440. package/dist/senses/trust-gate.js +207 -2
  441. package/dist/senses/voice/audio-playback.js +237 -0
  442. package/dist/senses/voice/audio-routing.js +119 -0
  443. package/dist/senses/voice/elevenlabs.js +202 -0
  444. package/dist/senses/voice/floor-control.js +431 -0
  445. package/dist/senses/voice/floor-controller.js +115 -0
  446. package/dist/senses/voice/golden-path.js +116 -0
  447. package/dist/senses/voice/index.js +29 -0
  448. package/dist/senses/voice/meeting.js +113 -0
  449. package/dist/senses/voice/outbound.js +190 -0
  450. package/dist/senses/voice/phone.js +33 -0
  451. package/dist/senses/voice/playback.js +139 -0
  452. package/dist/senses/voice/realtime-eval.js +496 -0
  453. package/dist/senses/voice/realtime-trace.js +531 -0
  454. package/dist/senses/voice/transcript.js +70 -0
  455. package/dist/senses/voice/turn.js +191 -0
  456. package/dist/senses/voice/twilio-phone-runtime.js +807 -0
  457. package/dist/senses/voice/twilio-phone.js +5081 -0
  458. package/dist/senses/voice/types.js +2 -0
  459. package/dist/senses/voice/whisper.js +161 -0
  460. package/dist/senses/voice-entry.js +81 -0
  461. package/dist/senses/voice-realtime-eval-command.js +99 -0
  462. package/dist/senses/voice-realtime-eval-entry.js +21 -0
  463. package/dist/senses/voice-twilio-entry.js +87 -0
  464. package/dist/trips/core.js +138 -0
  465. package/dist/trips/store.js +265 -0
  466. package/dist/util/frontmatter.js +69 -0
  467. package/package.json +67 -11
  468. package/skills/agent-commerce.md +113 -0
  469. package/skills/browser-navigation.md +117 -0
  470. package/skills/commerce-setup-guide.md +116 -0
  471. package/skills/commerce-setup.md +84 -0
  472. package/skills/configure-dev-tools.md +99 -0
  473. package/skills/travel-planning.md +138 -0
  474. package/AdoptionSpecialist.ouro/agent.json +0 -20
  475. package/AdoptionSpecialist.ouro/psyche/SOUL.md +0 -22
  476. package/dist/heart/daemon/specialist-orchestrator.js +0 -160
  477. package/dist/heart/daemon/specialist-prompt.js +0 -40
  478. package/dist/heart/daemon/specialist-session.js +0 -142
  479. package/dist/heart/daemon/specialist-tools.js +0 -128
  480. package/dist/heart/daemon/subagent-installer.js +0 -125
  481. package/dist/inner-worker-entry.js +0 -4
  482. package/dist/mind/friends/channel.js +0 -49
  483. package/dist/mind/friends/resolver.js +0 -84
  484. package/dist/mind/friends/store-file.js +0 -171
  485. package/dist/mind/friends/store.js +0 -4
  486. package/dist/mind/friends/tokens.js +0 -26
  487. package/dist/mind/friends/types.js +0 -21
  488. package/dist/repertoire/tasks/board.js +0 -122
  489. package/dist/repertoire/tasks/index.js +0 -210
  490. package/dist/repertoire/tasks/middleware.js +0 -65
  491. package/dist/repertoire/tasks/parser.js +0 -173
  492. package/dist/repertoire/tasks/scanner.js +0 -132
  493. package/dist/repertoire/tasks/transitions.js +0 -145
  494. package/dist/senses/bluebubbles-client.js +0 -279
  495. package/dist/senses/bluebubbles-entry.js +0 -11
  496. package/dist/senses/bluebubbles.js +0 -332
  497. package/dist/senses/inner-dialog-worker.js +0 -61
  498. package/dist/senses/inner-dialog.js +0 -231
  499. package/subagents/README.md +0 -73
  500. package/subagents/work-doer.md +0 -233
  501. package/subagents/work-merger.md +0 -624
  502. package/subagents/work-planner.md +0 -373
  503. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  504. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  505. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  506. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  507. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  508. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  509. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  510. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  511. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  512. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  513. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  514. /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
@@ -0,0 +1,318 @@
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.getSpecialistTools = getSpecialistTools;
37
+ exports.createSpecialistExecTool = createSpecialistExecTool;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const tools_base_1 = require("../../repertoire/tools-base");
41
+ const hatch_flow_1 = require("./hatch-flow");
42
+ const hatch_animation_1 = require("./hatch-animation");
43
+ const bundle_manifest_1 = require("../../mind/bundle-manifest");
44
+ const record_paths_1 = require("../../mind/record-paths");
45
+ const identity_1 = require("../identity");
46
+ const runtime_1 = require("../../nerves/runtime");
47
+ const vault_setup_1 = require("../../repertoire/vault-setup");
48
+ const vault_unlock_1 = require("../../repertoire/vault-unlock");
49
+ const completeAdoptionTool = {
50
+ type: "function",
51
+ function: {
52
+ name: "complete_adoption",
53
+ description: "finalize the agent bundle and hatch the new agent. call this only when you have written all 5 psyche files and agent.json to the temp directory, and the human has approved the bundle. tool execution asks the human for the hatchling vault unlock secret through a hidden terminal prompt; do not ask for or include vault unlock secrets in chat or tool args.",
54
+ parameters: {
55
+ type: "object",
56
+ properties: {
57
+ name: {
58
+ type: "string",
59
+ description: "the PascalCase name for the new agent (e.g. 'MyAgent')",
60
+ },
61
+ handoff_message: {
62
+ type: "string",
63
+ description: "a warm handoff message to display to the human after the agent is hatched",
64
+ },
65
+ phone: {
66
+ type: "string",
67
+ description: "the human's phone number (optional, for iMessage contact recognition)",
68
+ },
69
+ teams_handle: {
70
+ type: "string",
71
+ description: "the human's Teams email/handle (optional, for Teams contact recognition)",
72
+ },
73
+ },
74
+ required: ["name", "handoff_message"],
75
+ },
76
+ },
77
+ };
78
+ const readFileTool = tools_base_1.baseToolDefinitions.find((d) => d.tool.function.name === "read_file");
79
+ const writeFileTool = tools_base_1.baseToolDefinitions.find((d) => d.tool.function.name === "write_file");
80
+ const listDirToolSchema = {
81
+ type: "function",
82
+ function: {
83
+ name: "list_directory",
84
+ description: "list directory contents",
85
+ parameters: {
86
+ type: "object",
87
+ properties: { path: { type: "string" } },
88
+ required: ["path"],
89
+ },
90
+ },
91
+ };
92
+ /**
93
+ * Returns the specialist's tool schema array.
94
+ */
95
+ function getSpecialistTools() {
96
+ return [completeAdoptionTool, tools_base_1.settleTool, readFileTool.tool, writeFileTool.tool, listDirToolSchema];
97
+ }
98
+ const PSYCHE_FILES = ["SOUL.md", "IDENTITY.md", "LORE.md", "TACIT.md", "ASPIRATIONS.md"];
99
+ function isPascalCase(name) {
100
+ return /^[A-Z][a-zA-Z0-9]*$/.test(name);
101
+ }
102
+ function writeReadme(dir, purpose) {
103
+ fs.mkdirSync(dir, { recursive: true });
104
+ const readmePath = path.join(dir, "README.md");
105
+ /* v8 ignore next -- defensive: guard against re-scaffold on existing bundle @preserve */
106
+ if (!fs.existsSync(readmePath)) {
107
+ fs.writeFileSync(readmePath, `# ${path.basename(dir)}\n\n${purpose}\n`, "utf-8");
108
+ }
109
+ }
110
+ function scaffoldBundle(bundleRoot) {
111
+ writeReadme(path.join(bundleRoot, "arc"), "Live continuity, claims, obligations, and resume state.");
112
+ writeReadme(path.join(bundleRoot, "arc", "flight-recorder"), "Flight recorder resume and event receipts.");
113
+ writeReadme(path.join(bundleRoot, "desk"), "Durable work and maintained record.");
114
+ writeReadme(path.join(bundleRoot, "desk", "_record"), "Desk record: diary facts and maintained reference notes.");
115
+ writeReadme(path.join(bundleRoot, "friends"), "Known friend records.");
116
+ writeReadme(path.join(bundleRoot, "tasks"), "Task files.");
117
+ writeReadme(path.join(bundleRoot, "tasks", "one-shots"), "One-shot tasks.");
118
+ writeReadme(path.join(bundleRoot, "habits"), "Recurring habits and autonomous rhythms.");
119
+ writeReadme(path.join(bundleRoot, "tasks", "ongoing"), "Ongoing tasks.");
120
+ writeReadme(path.join(bundleRoot, "skills"), "Local skill files.");
121
+ writeReadme(path.join(bundleRoot, "senses"), "Sense-specific config.");
122
+ writeReadme(path.join(bundleRoot, "senses", "teams"), "Teams sense config.");
123
+ const recordPaths = (0, record_paths_1.resolveDeskRecordPaths)(bundleRoot);
124
+ fs.mkdirSync(recordPaths.diaryDailyDir, { recursive: true });
125
+ fs.mkdirSync(recordPaths.notesRoot, { recursive: true });
126
+ /* v8 ignore next -- defensive: guard against re-scaffold on existing bundle @preserve */
127
+ if (!fs.existsSync(recordPaths.factsPath))
128
+ fs.writeFileSync(recordPaths.factsPath, "", "utf-8");
129
+ /* v8 ignore next -- defensive: guard against re-scaffold on existing bundle @preserve */
130
+ if (!fs.existsSync(recordPaths.entitiesPath))
131
+ fs.writeFileSync(recordPaths.entitiesPath, "{}\n", "utf-8");
132
+ fs.mkdirSync(path.join(bundleRoot, "arc", "flight-recorder", "events"), { recursive: true });
133
+ fs.mkdirSync(path.join(bundleRoot, "arc", "flight-recorder", "habit-receipts"), { recursive: true });
134
+ fs.mkdirSync(path.join(bundleRoot, "arc", "claims"), { recursive: true });
135
+ // bundle-meta.json
136
+ const meta = (0, bundle_manifest_1.createBundleMeta)();
137
+ fs.writeFileSync(path.join(bundleRoot, "bundle-meta.json"), JSON.stringify(meta, null, 2) + "\n", "utf-8");
138
+ }
139
+ function moveDir(src, dest) {
140
+ try {
141
+ fs.renameSync(src, dest);
142
+ }
143
+ catch {
144
+ /* v8 ignore start -- cross-device fallback: only triggers on EXDEV (e.g. /tmp → different mount), untestable in CI @preserve */
145
+ fs.cpSync(src, dest, { recursive: true });
146
+ fs.rmSync(src, { recursive: true, force: true });
147
+ /* v8 ignore stop */
148
+ }
149
+ }
150
+ function updateAgentConfig(bundleRoot, updates) {
151
+ const agentJsonPath = path.join(bundleRoot, "agent.json");
152
+ const parsed = JSON.parse(fs.readFileSync(agentJsonPath, "utf-8"));
153
+ fs.writeFileSync(agentJsonPath, `${JSON.stringify({ ...parsed, ...updates }, null, 2)}\n`, "utf-8");
154
+ }
155
+ async function execCompleteAdoption(args, deps) {
156
+ const name = args.name;
157
+ const handoffMessage = args.handoff_message;
158
+ if (!name) {
159
+ return "error: missing required 'name' parameter";
160
+ }
161
+ if (!isPascalCase(name)) {
162
+ return `error: name '${name}' must be PascalCase (e.g. 'MyAgent', 'Hatchling')`;
163
+ }
164
+ // Validate psyche files exist
165
+ const psycheDir = path.join(deps.tempDir, "psyche");
166
+ const missingPsyche = PSYCHE_FILES.filter((f) => !fs.existsSync(path.join(psycheDir, f)));
167
+ if (missingPsyche.length > 0) {
168
+ return `error: missing psyche files in temp directory: ${missingPsyche.join(", ")}. write them first using write_file.`;
169
+ }
170
+ // Validate agent.json exists
171
+ const agentJsonPath = path.join(deps.tempDir, "agent.json");
172
+ if (!fs.existsSync(agentJsonPath)) {
173
+ return "error: agent.json not found in temp directory. write it first using write_file.";
174
+ }
175
+ // Validate target doesn't exist
176
+ const targetBundle = path.join(deps.bundlesRoot, `${name}.ouro`);
177
+ if (fs.existsSync(targetBundle)) {
178
+ return `error: bundle '${name}.ouro' already exists at ${deps.bundlesRoot}. choose a different name.`;
179
+ }
180
+ if (!deps.promptSecret) {
181
+ return "error: complete_adoption requires an interactive vault unlock secret prompt. Re-run `ouro hatch` in a terminal so the human can enter a hatchling vault unlock secret without echoing it.";
182
+ }
183
+ const vault = (0, identity_1.resolveVaultConfig)(name);
184
+ let vaultUnlockSecret;
185
+ try {
186
+ vaultUnlockSecret = await (0, vault_unlock_1.promptConfirmedVaultUnlockSecret)({
187
+ promptSecret: deps.promptSecret,
188
+ question: `Choose Ouro vault unlock secret for ${vault.email}: `,
189
+ confirmQuestion: `Confirm Ouro vault unlock secret for ${vault.email}: `,
190
+ emptyError: "hatchling vault creation requires an unlock secret. Re-run `ouro hatch` in an interactive terminal and enter a human-chosen unlock secret.",
191
+ });
192
+ }
193
+ catch (error) {
194
+ return `error: failed to read hatchling vault unlock secret: ${error instanceof Error ? error.message : /* v8 ignore next -- defensive: non-Error catch branch @preserve */ String(error)}`;
195
+ }
196
+ // Keep the bundle inert until vault/provider credentials are durably stored.
197
+ updateAgentConfig(deps.tempDir, { enabled: false, vault });
198
+ // Scaffold structural dirs into tempDir
199
+ scaffoldBundle(deps.tempDir);
200
+ // Move tempDir -> final bundle location
201
+ moveDir(deps.tempDir, targetBundle);
202
+ // Write secrets
203
+ try {
204
+ const vaultResult = await (0, vault_setup_1.createVaultAccount)(name, vault.serverUrl, vault.email, vaultUnlockSecret);
205
+ if (!vaultResult.success) {
206
+ throw new Error(`failed to create vault: ${vaultResult.error}`);
207
+ }
208
+ (0, vault_unlock_1.storeVaultUnlockSecret)({ agentName: name, email: vault.email, serverUrl: vault.serverUrl }, vaultUnlockSecret);
209
+ await (0, hatch_flow_1.storeHatchlingProviderCredentials)(name, deps.provider, deps.credentials);
210
+ }
211
+ catch (e) {
212
+ // Rollback: remove the moved bundle
213
+ try {
214
+ fs.rmSync(targetBundle, { recursive: true, force: true });
215
+ }
216
+ catch {
217
+ // Best effort cleanup
218
+ }
219
+ return `error: failed to write secrets: ${e instanceof Error ? e.message : /* v8 ignore next -- defensive: non-Error catch branch @preserve */ String(e)}`;
220
+ }
221
+ // Create initial friend record if contact info provided
222
+ const phone = args.phone;
223
+ const teamsHandle = args.teams_handle;
224
+ if (phone || teamsHandle) {
225
+ const friendId = crypto.randomUUID();
226
+ const now = new Date().toISOString();
227
+ const externalIds = [];
228
+ if (phone)
229
+ externalIds.push({ provider: "imessage-handle", externalId: phone, linkedAt: now });
230
+ if (teamsHandle)
231
+ externalIds.push({ provider: "aad", externalId: teamsHandle, linkedAt: now });
232
+ const friendRecord = {
233
+ id: friendId,
234
+ name: deps.humanName ?? "primary",
235
+ trustLevel: "family",
236
+ externalIds,
237
+ tenantMemberships: [],
238
+ toolPreferences: {},
239
+ notes: {},
240
+ createdAt: now,
241
+ updatedAt: now,
242
+ schemaVersion: 1,
243
+ };
244
+ const friendPath = path.join(targetBundle, "friends", `${friendId}.json`);
245
+ fs.writeFileSync(friendPath, JSON.stringify(friendRecord, null, 2), "utf-8");
246
+ }
247
+ updateAgentConfig(targetBundle, { enabled: true });
248
+ // Play hatch animation
249
+ await (0, hatch_animation_1.playHatchAnimation)(name, deps.animationWriter);
250
+ // Display handoff message
251
+ /* v8 ignore next -- UI-only: handoff message display, covered by integration @preserve */
252
+ if (handoffMessage && deps.animationWriter) {
253
+ deps.animationWriter(`\n${handoffMessage}\n`);
254
+ }
255
+ (0, runtime_1.emitNervesEvent)({
256
+ component: "daemon",
257
+ event: "daemon.adoption_complete",
258
+ message: "adoption completed successfully",
259
+ meta: { agentName: name, bundlePath: targetBundle },
260
+ });
261
+ return JSON.stringify({ success: true, agentName: name, bundlePath: targetBundle });
262
+ }
263
+ /**
264
+ * Create a specialist tool executor with the given dependencies captured in closure.
265
+ */
266
+ function createSpecialistExecTool(deps) {
267
+ (0, runtime_1.emitNervesEvent)({
268
+ component: "daemon",
269
+ event: "daemon.specialist_exec_tool_created",
270
+ message: "specialist exec tool created",
271
+ meta: { tempDir: deps.tempDir },
272
+ });
273
+ return async (name, args) => {
274
+ (0, runtime_1.emitNervesEvent)({
275
+ component: "daemon",
276
+ event: "daemon.specialist_tool_exec",
277
+ message: "executing specialist tool",
278
+ meta: { tool: name },
279
+ });
280
+ if (name === "complete_adoption") {
281
+ return execCompleteAdoption(args, deps);
282
+ }
283
+ if (name === "read_file") {
284
+ try {
285
+ return fs.readFileSync(args.path, "utf-8");
286
+ }
287
+ catch (e) {
288
+ return `error: ${e instanceof Error ? e.message : /* v8 ignore next -- defensive @preserve */ String(e)}`;
289
+ }
290
+ }
291
+ if (name === "write_file") {
292
+ try {
293
+ const dir = path.dirname(args.path);
294
+ fs.mkdirSync(dir, { recursive: true });
295
+ const content = typeof args.content === "string"
296
+ ? args.content
297
+ : JSON.stringify(args.content, null, 2);
298
+ fs.writeFileSync(args.path, content, "utf-8");
299
+ return `wrote ${args.path}`;
300
+ }
301
+ catch (e) {
302
+ return `error: ${e instanceof Error ? e.message : /* v8 ignore next -- defensive @preserve */ String(e)}`;
303
+ }
304
+ }
305
+ if (name === "list_directory") {
306
+ try {
307
+ return fs
308
+ .readdirSync(args.path, { withFileTypes: true })
309
+ .map((e) => `${e.isDirectory() ? "d" : "-"} ${e.name}`)
310
+ .join("\n");
311
+ }
312
+ catch (e) {
313
+ return `error: ${e instanceof Error ? e.message : /* v8 ignore next -- defensive @preserve */ String(e)}`;
314
+ }
315
+ }
316
+ return `error: unknown tool '${name}'`;
317
+ };
318
+ }