@ouro.bot/cli 0.1.0-alpha.55 → 0.1.0-alpha.551

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 (386) hide show
  1. package/README.md +133 -19
  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-bootstrap-drift.md +54 -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/changelog.json +3561 -0
  14. package/dist/arc/attention-types.js +8 -0
  15. package/dist/arc/cares.js +140 -0
  16. package/dist/arc/episodes.js +117 -0
  17. package/dist/arc/intentions.js +133 -0
  18. package/dist/arc/json-store.js +117 -0
  19. package/dist/arc/obligations.js +237 -0
  20. package/dist/arc/packets.js +193 -0
  21. package/dist/arc/presence.js +185 -0
  22. package/dist/arc/task-lifecycle.js +65 -0
  23. package/dist/heart/active-work.js +837 -26
  24. package/dist/heart/agent-entry.js +58 -3
  25. package/dist/heart/attachments/image-normalize.js +194 -0
  26. package/dist/heart/attachments/materialize.js +97 -0
  27. package/dist/heart/attachments/originals.js +88 -0
  28. package/dist/heart/attachments/render.js +29 -0
  29. package/dist/heart/attachments/sources/adapter.js +2 -0
  30. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  31. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  32. package/dist/heart/attachments/sources/index.js +16 -0
  33. package/dist/heart/attachments/store.js +103 -0
  34. package/dist/heart/attachments/types.js +93 -0
  35. package/dist/heart/auth/auth-flow.js +479 -0
  36. package/dist/heart/background-operations.js +281 -0
  37. package/dist/heart/bundle-state.js +168 -0
  38. package/dist/heart/commitments.js +111 -0
  39. package/dist/heart/config-registry.js +304 -0
  40. package/dist/heart/config.js +114 -118
  41. package/dist/heart/core.js +925 -246
  42. package/dist/heart/cross-chat-delivery.js +3 -18
  43. package/dist/heart/daemon/agent-config-check.js +512 -0
  44. package/dist/heart/daemon/agent-discovery.js +102 -3
  45. package/dist/heart/daemon/agent-service.js +522 -0
  46. package/dist/heart/daemon/agentic-repair.js +554 -0
  47. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  48. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  49. package/dist/heart/daemon/cadence.js +70 -0
  50. package/dist/heart/daemon/cli-defaults.js +665 -0
  51. package/dist/heart/daemon/cli-exec.js +7565 -0
  52. package/dist/heart/daemon/cli-help.js +498 -0
  53. package/dist/heart/daemon/cli-parse.js +1590 -0
  54. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  55. package/dist/heart/daemon/cli-render.js +775 -0
  56. package/dist/heart/daemon/cli-types.js +8 -0
  57. package/dist/heart/daemon/connect-bay.js +323 -0
  58. package/dist/heart/daemon/daemon-cli.js +29 -1672
  59. package/dist/heart/daemon/daemon-entry.js +417 -2
  60. package/dist/heart/daemon/daemon-health.js +183 -0
  61. package/dist/heart/daemon/daemon-rollup.js +58 -0
  62. package/dist/heart/daemon/daemon-runtime-sync.js +87 -13
  63. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  64. package/dist/heart/daemon/daemon.js +796 -71
  65. package/dist/heart/daemon/dns-workflow.js +394 -0
  66. package/dist/heart/daemon/doctor-types.js +8 -0
  67. package/dist/heart/daemon/doctor.js +844 -0
  68. package/dist/heart/daemon/drift-detection.js +146 -0
  69. package/dist/heart/daemon/health-monitor.js +122 -1
  70. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  71. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  72. package/dist/heart/daemon/http-health-probe.js +80 -0
  73. package/dist/heart/daemon/human-command-screens.js +234 -0
  74. package/dist/heart/daemon/human-readiness.js +114 -0
  75. package/dist/heart/daemon/inner-status.js +102 -0
  76. package/dist/heart/daemon/interactive-repair.js +394 -0
  77. package/dist/heart/daemon/launchd.js +37 -8
  78. package/dist/heart/daemon/log-tailer.js +82 -12
  79. package/dist/heart/daemon/logs-prune.js +110 -0
  80. package/dist/heart/daemon/mcp-canary.js +297 -0
  81. package/dist/heart/daemon/message-router.js +2 -2
  82. package/dist/heart/daemon/os-cron-deps.js +135 -0
  83. package/dist/heart/daemon/os-cron.js +14 -12
  84. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  85. package/dist/heart/daemon/ouro-entry.js +3 -1
  86. package/dist/heart/daemon/process-manager.js +375 -33
  87. package/dist/heart/daemon/provider-discovery.js +137 -0
  88. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  89. package/dist/heart/daemon/pulse.js +475 -0
  90. package/dist/heart/daemon/readiness-repair.js +365 -0
  91. package/dist/heart/daemon/run-hooks.js +2 -0
  92. package/dist/heart/daemon/runtime-logging.js +67 -16
  93. package/dist/heart/daemon/runtime-metadata.js +3 -31
  94. package/dist/heart/daemon/safe-mode.js +161 -0
  95. package/dist/heart/daemon/sense-manager.js +353 -38
  96. package/dist/heart/daemon/session-id-resolver.js +131 -0
  97. package/dist/heart/daemon/skill-management-installer.js +94 -0
  98. package/dist/heart/daemon/socket-client.js +158 -11
  99. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  100. package/dist/heart/daemon/startup-tui.js +330 -0
  101. package/dist/heart/daemon/task-scheduler.js +3 -25
  102. package/dist/heart/daemon/terminal-ui.js +499 -0
  103. package/dist/heart/daemon/thoughts.js +162 -17
  104. package/dist/heart/daemon/up-progress.js +366 -0
  105. package/dist/heart/daemon/vault-items.js +56 -0
  106. package/dist/heart/delegation.js +1 -1
  107. package/dist/heart/habits/habit-migration.js +189 -0
  108. package/dist/heart/habits/habit-parser.js +140 -0
  109. package/dist/heart/habits/habit-runtime-state.js +100 -0
  110. package/dist/heart/habits/habit-scheduler.js +372 -0
  111. package/dist/heart/{daemon → hatch}/hatch-flow.js +52 -117
  112. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  113. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  114. package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
  115. package/dist/heart/identity.js +200 -51
  116. package/dist/heart/kept-notes.js +357 -0
  117. package/dist/heart/kicks.js +1 -1
  118. package/dist/heart/machine-identity.js +161 -0
  119. package/dist/heart/mail-import-discovery.js +353 -0
  120. package/dist/heart/mailbox/mailbox-http-hooks.js +66 -0
  121. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  122. package/dist/heart/mailbox/mailbox-http-routes.js +246 -0
  123. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  124. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  125. package/dist/heart/mailbox/mailbox-http.js +99 -0
  126. package/dist/heart/mailbox/mailbox-read.js +31 -0
  127. package/dist/heart/mailbox/mailbox-types.js +27 -0
  128. package/dist/heart/mailbox/mailbox-view.js +195 -0
  129. package/dist/heart/mailbox/readers/agent-machine.js +382 -0
  130. package/dist/heart/mailbox/readers/continuity-readers.js +338 -0
  131. package/dist/heart/mailbox/readers/mail.js +362 -0
  132. package/dist/heart/mailbox/readers/runtime-readers.js +651 -0
  133. package/dist/heart/mailbox/readers/sessions.js +232 -0
  134. package/dist/heart/mailbox/readers/shared.js +111 -0
  135. package/dist/heart/mcp/mcp-server.js +683 -0
  136. package/dist/heart/migrate-config.js +100 -0
  137. package/dist/heart/model-capabilities.js +19 -0
  138. package/dist/heart/platform.js +81 -0
  139. package/dist/heart/provider-attempt.js +134 -0
  140. package/dist/heart/provider-binding-resolver.js +255 -0
  141. package/dist/heart/provider-credentials.js +425 -0
  142. package/dist/heart/provider-failover.js +301 -0
  143. package/dist/heart/provider-models.js +81 -0
  144. package/dist/heart/provider-ping.js +262 -0
  145. package/dist/heart/provider-state.js +216 -0
  146. package/dist/heart/provider-visibility.js +188 -0
  147. package/dist/heart/providers/anthropic-token.js +131 -0
  148. package/dist/heart/providers/anthropic.js +139 -52
  149. package/dist/heart/providers/azure.js +97 -13
  150. package/dist/heart/providers/error-classification.js +127 -0
  151. package/dist/heart/providers/github-copilot.js +145 -0
  152. package/dist/heart/providers/minimax-vlm.js +189 -0
  153. package/dist/heart/providers/minimax.js +26 -8
  154. package/dist/heart/providers/openai-codex.js +55 -40
  155. package/dist/heart/runtime-capability-check.js +170 -0
  156. package/dist/heart/runtime-credentials.js +367 -0
  157. package/dist/heart/runtime-cwd.js +87 -0
  158. package/dist/heart/sense-truth.js +11 -4
  159. package/dist/heart/session-activity.js +43 -22
  160. package/dist/heart/session-events.js +1149 -0
  161. package/dist/heart/session-playback-cli-main.js +5 -0
  162. package/dist/heart/session-playback-cli.js +36 -0
  163. package/dist/heart/session-playback.js +231 -0
  164. package/dist/heart/session-stats-cli-main.js +5 -0
  165. package/dist/heart/session-stats.js +182 -0
  166. package/dist/heart/session-transcript.js +243 -0
  167. package/dist/heart/start-of-turn-packet.js +345 -0
  168. package/dist/heart/streaming.js +44 -27
  169. package/dist/heart/sync-classification.js +176 -0
  170. package/dist/heart/sync.js +449 -0
  171. package/dist/heart/target-resolution.js +9 -5
  172. package/dist/heart/tempo.js +93 -0
  173. package/dist/heart/temporal-view.js +41 -0
  174. package/dist/heart/timeouts.js +101 -0
  175. package/dist/heart/tool-activity-callbacks.js +59 -0
  176. package/dist/heart/tool-description.js +139 -0
  177. package/dist/heart/tool-friction.js +55 -0
  178. package/dist/heart/tool-loop.js +200 -0
  179. package/dist/heart/turn-context.js +381 -0
  180. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  181. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  182. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  183. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  184. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  185. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  186. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  187. package/dist/mailbox-ui/assets/index-BPr5vNuM.css +1 -0
  188. package/dist/mailbox-ui/assets/index-Cm51CY9W.js +61 -0
  189. package/dist/mailbox-ui/index.html +15 -0
  190. package/dist/mailroom/attention.js +167 -0
  191. package/dist/mailroom/autonomy.js +209 -0
  192. package/dist/mailroom/blob-store.js +674 -0
  193. package/dist/mailroom/body-cache.js +61 -0
  194. package/dist/mailroom/core.js +720 -0
  195. package/dist/mailroom/entry.js +160 -0
  196. package/dist/mailroom/file-store.js +430 -0
  197. package/dist/mailroom/mbox-import.js +383 -0
  198. package/dist/mailroom/outbound.js +380 -0
  199. package/dist/mailroom/policy.js +263 -0
  200. package/dist/mailroom/reader.js +233 -0
  201. package/dist/mailroom/search-cache.js +256 -0
  202. package/dist/mailroom/search-relevance.js +319 -0
  203. package/dist/mailroom/smtp-ingress.js +176 -0
  204. package/dist/mailroom/source-state.js +176 -0
  205. package/dist/mailroom/thread.js +109 -0
  206. package/dist/mailroom/travel-extract.js +89 -0
  207. package/dist/mind/bundle-manifest.js +7 -1
  208. package/dist/mind/context.js +165 -101
  209. package/dist/mind/diary-integrity.js +60 -0
  210. package/dist/mind/{memory.js → diary.js} +62 -75
  211. package/dist/mind/embedding-provider.js +60 -0
  212. package/dist/mind/file-state.js +179 -0
  213. package/dist/mind/friends/channel.js +30 -0
  214. package/dist/mind/friends/resolver.js +54 -2
  215. package/dist/mind/friends/store-file.js +39 -3
  216. package/dist/mind/friends/types.js +2 -2
  217. package/dist/mind/journal-index.js +161 -0
  218. package/dist/mind/note-search.js +268 -0
  219. package/dist/mind/obligation-steering.js +221 -0
  220. package/dist/mind/pending.js +4 -0
  221. package/dist/mind/prompt-refresh.js +3 -2
  222. package/dist/mind/prompt.js +995 -123
  223. package/dist/mind/provenance-trust.js +26 -0
  224. package/dist/mind/scrutiny.js +173 -0
  225. package/dist/nerves/cli-logging.js +7 -1
  226. package/dist/nerves/coverage/audit-rules.js +15 -6
  227. package/dist/nerves/coverage/audit.js +28 -2
  228. package/dist/nerves/coverage/cli.js +1 -1
  229. package/dist/nerves/coverage/contract.js +5 -5
  230. package/dist/nerves/coverage/file-completeness.js +139 -5
  231. package/dist/nerves/coverage/run-artifacts.js +1 -1
  232. package/dist/nerves/event-buffer.js +111 -0
  233. package/dist/nerves/index.js +224 -4
  234. package/dist/nerves/observation.js +20 -0
  235. package/dist/nerves/redact.js +79 -0
  236. package/dist/nerves/review/cli-main.js +5 -0
  237. package/dist/nerves/review/cli.js +156 -0
  238. package/dist/nerves/review/core.js +152 -0
  239. package/dist/nerves/runtime.js +5 -1
  240. package/dist/repertoire/ado-client.js +15 -56
  241. package/dist/repertoire/ado-semantic.js +11 -10
  242. package/dist/repertoire/api-client.js +97 -0
  243. package/dist/repertoire/bitwarden-store.js +816 -0
  244. package/dist/repertoire/bundle-templates.js +72 -0
  245. package/dist/repertoire/bw-installer.js +180 -0
  246. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  247. package/dist/repertoire/coding/context-pack.js +330 -0
  248. package/dist/repertoire/coding/feedback.js +197 -30
  249. package/dist/repertoire/coding/manager.js +158 -9
  250. package/dist/repertoire/coding/spawner.js +55 -9
  251. package/dist/repertoire/coding/tools.js +170 -7
  252. package/dist/repertoire/commerce-errors.js +109 -0
  253. package/dist/repertoire/commerce-self-test.js +156 -0
  254. package/dist/repertoire/credential-access.js +111 -0
  255. package/dist/repertoire/duffel-client.js +185 -0
  256. package/dist/repertoire/github-client.js +14 -55
  257. package/dist/repertoire/graph-client.js +11 -52
  258. package/dist/repertoire/guardrails.js +396 -0
  259. package/dist/repertoire/mcp-client.js +295 -0
  260. package/dist/repertoire/mcp-manager.js +362 -0
  261. package/dist/repertoire/mcp-tools.js +63 -0
  262. package/dist/repertoire/shell-sessions.js +133 -0
  263. package/dist/repertoire/skills.js +15 -24
  264. package/dist/repertoire/stripe-client.js +131 -0
  265. package/dist/repertoire/tasks/board.js +31 -5
  266. package/dist/repertoire/tasks/fix.js +182 -0
  267. package/dist/repertoire/tasks/index.js +16 -4
  268. package/dist/repertoire/tasks/lifecycle.js +2 -2
  269. package/dist/repertoire/tasks/parser.js +3 -2
  270. package/dist/repertoire/tasks/scanner.js +194 -37
  271. package/dist/repertoire/tasks/transitions.js +16 -78
  272. package/dist/repertoire/tool-results.js +29 -0
  273. package/dist/repertoire/tools-attachments.js +317 -0
  274. package/dist/repertoire/tools-base.js +47 -1075
  275. package/dist/repertoire/tools-bluebubbles.js +1 -0
  276. package/dist/repertoire/tools-bridge.js +142 -0
  277. package/dist/repertoire/tools-bundle.js +984 -0
  278. package/dist/repertoire/tools-config.js +185 -0
  279. package/dist/repertoire/tools-continuity.js +248 -0
  280. package/dist/repertoire/tools-credential.js +381 -0
  281. package/dist/repertoire/tools-files.js +342 -0
  282. package/dist/repertoire/tools-flight.js +224 -0
  283. package/dist/repertoire/tools-flow.js +119 -0
  284. package/dist/repertoire/tools-github.js +1 -7
  285. package/dist/repertoire/tools-mail.js +1857 -0
  286. package/dist/repertoire/tools-notes.js +421 -0
  287. package/dist/repertoire/tools-session.js +750 -0
  288. package/dist/repertoire/tools-shell.js +120 -0
  289. package/dist/repertoire/tools-stripe.js +180 -0
  290. package/dist/repertoire/tools-surface.js +243 -0
  291. package/dist/repertoire/tools-teams.js +9 -39
  292. package/dist/repertoire/tools-travel.js +125 -0
  293. package/dist/repertoire/tools-trip.js +604 -0
  294. package/dist/repertoire/tools-user-profile.js +144 -0
  295. package/dist/repertoire/tools-vault.js +40 -0
  296. package/dist/repertoire/tools.js +108 -100
  297. package/dist/repertoire/travel-api-client.js +360 -0
  298. package/dist/repertoire/user-profile.js +131 -0
  299. package/dist/repertoire/vault-setup.js +246 -0
  300. package/dist/repertoire/vault-unlock.js +561 -0
  301. package/dist/scripts/claude-code-hook.js +41 -0
  302. package/dist/scripts/claude-code-stop-hook.js +47 -0
  303. package/dist/senses/attention-queue.js +116 -0
  304. package/dist/senses/bluebubbles/active-turns.js +216 -0
  305. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  306. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  307. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
  308. package/dist/senses/bluebubbles/entry.js +77 -0
  309. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  310. package/dist/senses/bluebubbles/index.js +2305 -0
  311. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
  312. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  313. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  314. package/dist/senses/bluebubbles/processed-log.js +133 -0
  315. package/dist/senses/bluebubbles/replay.js +137 -0
  316. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  317. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  318. package/dist/senses/cli/bracketed-paste.js +82 -0
  319. package/dist/senses/cli/image-paste.js +287 -0
  320. package/dist/senses/cli/image-ref-navigation.js +75 -0
  321. package/dist/senses/cli/ink-app.js +156 -0
  322. package/dist/senses/cli/inline-diff.js +64 -0
  323. package/dist/senses/cli/input-keys.js +174 -0
  324. package/dist/senses/cli/kill-ring.js +86 -0
  325. package/dist/senses/cli/message-list.js +51 -0
  326. package/dist/senses/cli/ouro-tui.js +607 -0
  327. package/dist/senses/cli/spinner-imperative.js +135 -0
  328. package/dist/senses/cli/spinner.js +101 -0
  329. package/dist/senses/cli/status-line.js +60 -0
  330. package/dist/senses/cli/streaming-markdown.js +526 -0
  331. package/dist/senses/cli/tool-display.js +85 -0
  332. package/dist/senses/cli/tool-render.js +85 -0
  333. package/dist/senses/cli/tui-store.js +240 -0
  334. package/dist/senses/cli/virtual-list.js +35 -0
  335. package/dist/senses/cli-entry.js +60 -8
  336. package/dist/senses/cli-layout.js +187 -0
  337. package/dist/senses/cli.js +520 -209
  338. package/dist/senses/commands.js +66 -3
  339. package/dist/senses/habit-turn-message.js +108 -0
  340. package/dist/senses/inner-dialog-worker.js +175 -21
  341. package/dist/senses/inner-dialog.js +330 -27
  342. package/dist/senses/mail-entry.js +66 -0
  343. package/dist/senses/mail.js +379 -0
  344. package/dist/senses/pipeline.js +569 -182
  345. package/dist/senses/proactive-content-guard.js +51 -0
  346. package/dist/senses/shared-turn.js +248 -0
  347. package/dist/senses/surface-tool.js +68 -0
  348. package/dist/senses/teams-entry.js +60 -8
  349. package/dist/senses/teams.js +387 -98
  350. package/dist/senses/trust-gate.js +100 -5
  351. package/dist/trips/core.js +138 -0
  352. package/dist/trips/store.js +146 -0
  353. package/package.json +38 -7
  354. package/skills/agent-commerce.md +106 -0
  355. package/skills/browser-navigation.md +117 -0
  356. package/skills/commerce-setup-guide.md +116 -0
  357. package/skills/commerce-setup.md +84 -0
  358. package/skills/configure-dev-tools.md +101 -0
  359. package/skills/travel-planning.md +138 -0
  360. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  361. package/dist/heart/daemon/subagent-installer.js +0 -166
  362. package/dist/heart/session-recall.js +0 -116
  363. package/dist/mind/associative-recall.js +0 -209
  364. package/dist/senses/bluebubbles-entry.js +0 -13
  365. package/dist/senses/bluebubbles.js +0 -1177
  366. package/dist/senses/debug-activity.js +0 -148
  367. package/subagents/README.md +0 -86
  368. package/subagents/work-doer.md +0 -237
  369. package/subagents/work-merger.md +0 -618
  370. package/subagents/work-planner.md +0 -390
  371. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  372. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  373. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  374. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  375. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  376. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  377. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  378. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  379. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  380. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  381. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  382. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  383. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  384. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  385. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  386. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,365 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.vaultLockedIssue = vaultLockedIssue;
4
+ exports.vaultUnconfiguredIssue = vaultUnconfiguredIssue;
5
+ exports.providerCredentialMissingIssue = providerCredentialMissingIssue;
6
+ exports.providerLiveCheckFix = providerLiveCheckFix;
7
+ exports.preferredConnectRepairAction = preferredConnectRepairAction;
8
+ exports.providerLiveCheckFailedIssue = providerLiveCheckFailedIssue;
9
+ exports.genericReadinessIssue = genericReadinessIssue;
10
+ exports.isKnownReadinessIssue = isKnownReadinessIssue;
11
+ exports.renderReadinessIssue = renderReadinessIssue;
12
+ exports.renderReadinessIssueNextSteps = renderReadinessIssueNextSteps;
13
+ exports.runGuidedReadinessRepair = runGuidedReadinessRepair;
14
+ const runtime_1 = require("../../nerves/runtime");
15
+ const human_readiness_1 = require("./human-readiness");
16
+ const human_command_screens_1 = require("./human-command-screens");
17
+ function vaultLockedIssue(agentName) {
18
+ return {
19
+ kind: "vault-locked",
20
+ severity: "blocked",
21
+ actor: "human-required",
22
+ summary: `${agentName}: vault locked`,
23
+ detail: "Pick the path that matches what the human actually has. Ouro will not print or store the unlock secret as a portable file.",
24
+ actions: [
25
+ {
26
+ kind: "vault-unlock",
27
+ label: "Unlock with saved secret",
28
+ command: `ouro vault unlock --agent ${agentName}`,
29
+ actor: "human-required",
30
+ },
31
+ {
32
+ kind: "vault-replace",
33
+ label: "Create empty replacement vault",
34
+ command: `ouro vault replace --agent ${agentName}`,
35
+ actor: "human-required",
36
+ },
37
+ {
38
+ kind: "vault-recover",
39
+ label: "Recover from JSON export",
40
+ command: `ouro vault recover --agent ${agentName} --from <json>`,
41
+ actor: "human-required",
42
+ executable: false,
43
+ },
44
+ ],
45
+ };
46
+ }
47
+ function vaultUnconfiguredIssue(agentName) {
48
+ return {
49
+ kind: "vault-unconfigured",
50
+ severity: "blocked",
51
+ actor: "human-required",
52
+ summary: `${agentName}: vault not configured`,
53
+ detail: "This bundle does not have a vault locator in agent.json yet. Create the agent vault before authenticating providers.",
54
+ actions: [
55
+ {
56
+ kind: "vault-create",
57
+ label: "Create this agent's vault",
58
+ command: `ouro vault create --agent ${agentName}`,
59
+ actor: "human-required",
60
+ },
61
+ {
62
+ kind: "vault-recover",
63
+ label: "Recover from JSON export",
64
+ command: `ouro vault recover --agent ${agentName} --from <json>`,
65
+ actor: "human-required",
66
+ executable: false,
67
+ },
68
+ ],
69
+ };
70
+ }
71
+ function providerCredentialMissingIssue(input) {
72
+ return {
73
+ kind: "provider-credentials-missing",
74
+ severity: "blocked",
75
+ actor: "human-required",
76
+ summary: `${input.agentName}: missing ${input.provider} credentials (${input.lane}, ${input.model})`,
77
+ detail: `source: ${input.credentialPath}`,
78
+ actions: [
79
+ {
80
+ kind: "provider-auth",
81
+ label: `Authenticate ${input.provider}`,
82
+ command: `ouro auth --agent ${input.agentName} --provider ${input.provider}`,
83
+ actor: "human-required",
84
+ provider: input.provider,
85
+ },
86
+ {
87
+ kind: "provider-use",
88
+ label: "Choose another provider/model",
89
+ command: `ouro use --agent ${input.agentName} --lane ${input.lane} --provider <provider> --model <model>`,
90
+ actor: "human-choice",
91
+ executable: false,
92
+ lane: input.lane,
93
+ },
94
+ ],
95
+ };
96
+ }
97
+ function normalizeProviderLiveCheckClassification(classification) {
98
+ switch (classification) {
99
+ case "auth-failure":
100
+ case "usage-limit":
101
+ case "rate-limit":
102
+ case "server-error":
103
+ case "network-error":
104
+ case "unknown":
105
+ return classification;
106
+ default:
107
+ return "unknown";
108
+ }
109
+ }
110
+ function providerUseAction(input) {
111
+ return {
112
+ kind: "provider-use",
113
+ label: "Choose a different working provider/model",
114
+ command: `ouro use --agent ${input.agentName} --lane ${input.lane} --provider <provider> --model <model>`,
115
+ actor: "human-choice",
116
+ executable: false,
117
+ lane: input.lane,
118
+ };
119
+ }
120
+ function providerAuthAction(input) {
121
+ return {
122
+ kind: "provider-auth",
123
+ label: `Refresh ${input.provider} credentials`,
124
+ command: `ouro auth --agent ${input.agentName} --provider ${input.provider}`,
125
+ actor: "human-required",
126
+ provider: input.provider,
127
+ };
128
+ }
129
+ function providerRetryAction(input) {
130
+ return {
131
+ kind: "provider-retry",
132
+ label: input.label,
133
+ command: `ouro repair --agent ${input.agentName}`,
134
+ actor: "human-choice",
135
+ executable: false,
136
+ };
137
+ }
138
+ function providerLiveCheckFix(input) {
139
+ const classification = normalizeProviderLiveCheckClassification(input.classification);
140
+ const authCommand = `ouro auth --agent ${input.agentName} --provider ${input.provider}`;
141
+ const useCommand = `ouro use --agent ${input.agentName} --lane ${input.lane} --provider <provider> --model <model>`;
142
+ switch (classification) {
143
+ case "auth-failure":
144
+ return `Run '${authCommand}' to refresh credentials, or run '${useCommand}' to choose another provider/model for this lane.`;
145
+ case "usage-limit":
146
+ return `This usually means ${input.provider} hit a usage limit. Restore quota, then run 'ouro up' again. Or run '${useCommand}' to choose another provider/model for this lane.`;
147
+ case "rate-limit":
148
+ return `Run 'ouro up' again after a short wait. Or run '${useCommand}' to choose another provider/model for this lane.`;
149
+ case "server-error":
150
+ return `Run 'ouro up' again in a moment. If ${input.provider} keeps failing, run '${useCommand}' to choose another provider/model for this lane.`;
151
+ case "network-error":
152
+ return `Check the network or provider availability, then run 'ouro up' again. Or run '${useCommand}' to choose another provider/model for this lane.`;
153
+ case "unknown":
154
+ return `Run 'ouro up' again. If it keeps failing, run '${authCommand}' to refresh credentials or '${useCommand}' to choose another provider/model for this lane.`;
155
+ }
156
+ }
157
+ function providerLiveCheckActions(input) {
158
+ const classification = normalizeProviderLiveCheckClassification(input.classification);
159
+ const useAction = providerUseAction(input);
160
+ const authAction = providerAuthAction(input);
161
+ switch (classification) {
162
+ case "auth-failure":
163
+ return [authAction, useAction];
164
+ case "usage-limit":
165
+ return [
166
+ providerRetryAction({ agentName: input.agentName, label: "After restoring quota, check again" }),
167
+ useAction,
168
+ ];
169
+ case "rate-limit":
170
+ return [
171
+ providerRetryAction({ agentName: input.agentName, label: "Give it a minute, then check again" }),
172
+ useAction,
173
+ ];
174
+ case "server-error":
175
+ return [
176
+ providerRetryAction({ agentName: input.agentName, label: "Check again in a moment" }),
177
+ useAction,
178
+ ];
179
+ case "network-error":
180
+ return [
181
+ providerRetryAction({ agentName: input.agentName, label: "Check again after the network settles" }),
182
+ useAction,
183
+ authAction,
184
+ ];
185
+ case "unknown":
186
+ return [
187
+ providerRetryAction({ agentName: input.agentName, label: "Check again" }),
188
+ authAction,
189
+ useAction,
190
+ ];
191
+ }
192
+ }
193
+ function preferredConnectRepairAction(issue) {
194
+ if (!issue)
195
+ return undefined;
196
+ if (issue.kind === "provider-live-check-failed" && issue.actions[0]?.kind === "provider-retry") {
197
+ return issue.actions.find((action) => action.kind !== "provider-retry") ?? issue.actions[0];
198
+ }
199
+ return issue.actions[0];
200
+ }
201
+ function providerLiveCheckFailedIssue(input) {
202
+ return {
203
+ kind: "provider-live-check-failed",
204
+ severity: "blocked",
205
+ actor: "human-choice",
206
+ summary: `${input.agentName}: ${input.lane} provider ${input.provider} / ${input.model} failed live check`,
207
+ detail: input.message,
208
+ actions: providerLiveCheckActions(input),
209
+ };
210
+ }
211
+ function genericReadinessIssue(input) {
212
+ return {
213
+ kind: "generic",
214
+ severity: "degraded",
215
+ actor: "human-choice",
216
+ summary: input.summary,
217
+ ...(input.detail ? { detail: input.detail } : {}),
218
+ actions: input.fix
219
+ ? [{
220
+ kind: "provider-use",
221
+ label: "Follow the printed fix",
222
+ command: input.fix,
223
+ actor: "human-choice",
224
+ executable: false,
225
+ }]
226
+ : [],
227
+ };
228
+ }
229
+ function isKnownReadinessIssue(issue) {
230
+ return !!issue && issue.kind !== "generic";
231
+ }
232
+ function renderReadinessIssue(issue) {
233
+ const lines = [issue.summary];
234
+ if (issue.detail) {
235
+ lines.push(` ${issue.detail}`);
236
+ }
237
+ if (issue.actions.length > 0) {
238
+ lines.push("");
239
+ }
240
+ issue.actions.forEach((action, index) => {
241
+ if (index > 0)
242
+ lines.push("");
243
+ lines.push(`${index + 1}. ${action.label}`);
244
+ lines.push(` ${action.command}`);
245
+ });
246
+ if (issue.actions.length > 0) {
247
+ lines.push("");
248
+ }
249
+ lines.push(`${issue.actions.length + 1}. Skip for now`);
250
+ return lines.join("\n");
251
+ }
252
+ function renderReadinessIssueNextSteps(issue) {
253
+ const lines = [issue.summary];
254
+ if (issue.detail && issue.kind !== "vault-locked") {
255
+ lines.push(` ${issue.detail}`);
256
+ }
257
+ issue.actions.forEach((action, index) => {
258
+ lines.push(` ${index === 0 ? "next" : "or"}: ${action.command}`);
259
+ });
260
+ return lines;
261
+ }
262
+ function selectedActionFor(answer, issue) {
263
+ const selected = Number.parseInt(answer.trim(), 10);
264
+ if (!Number.isFinite(selected))
265
+ return null;
266
+ if (selected === issue.actions.length + 1)
267
+ return "skip";
268
+ if (selected < 1 || selected > issue.actions.length)
269
+ return null;
270
+ /* v8 ignore next -- defensive: bounds were checked above, but keep sparse arrays harmless @preserve */
271
+ return issue.actions[selected - 1] ?? null;
272
+ }
273
+ function isExecutableAction(action) {
274
+ if (action.executable === false)
275
+ return false;
276
+ return !action.command.includes("<");
277
+ }
278
+ async function runGuidedReadinessRepair(reports, deps) {
279
+ (0, runtime_1.emitNervesEvent)({
280
+ level: "info",
281
+ component: "daemon",
282
+ event: "daemon.readiness_repair_start",
283
+ message: "guided readiness repair started",
284
+ meta: { reportCount: reports.length },
285
+ });
286
+ let repairsAttempted = false;
287
+ for (const report of reports) {
288
+ if (report.ok || report.issues.length === 0)
289
+ continue;
290
+ for (const issue of report.issues) {
291
+ if (deps.isTTY) {
292
+ const snapshot = (0, human_readiness_1.buildHumanReadinessSnapshot)({
293
+ agent: report.agent,
294
+ title: `Repair ${report.agent}`,
295
+ items: [
296
+ (0, human_readiness_1.readinessItemFromIssue)(issue, {
297
+ key: `${report.agent}:${issue.kind}`,
298
+ title: issue.summary,
299
+ }),
300
+ ],
301
+ });
302
+ deps.writeStdout((0, human_command_screens_1.renderHumanReadinessBoard)({
303
+ agent: report.agent,
304
+ title: `Repair ${report.agent}`,
305
+ subtitle: "Choose the path that matches what the human actually has.",
306
+ snapshot,
307
+ isTTY: true,
308
+ columns: deps.stdoutColumns,
309
+ prompt: `Choose [1-${issue.actions.length + 1}]: `,
310
+ }).trimEnd());
311
+ }
312
+ else {
313
+ deps.writeStdout(renderReadinessIssue(issue));
314
+ }
315
+ if (!deps.promptInput) {
316
+ deps.writeStdout(`manual repair required for ${report.agent}; run one of the commands above.`);
317
+ continue;
318
+ }
319
+ const answer = await deps.promptInput(`Choose [1-${issue.actions.length + 1}]: `);
320
+ const action = selectedActionFor(answer, issue);
321
+ if (action === "skip") {
322
+ deps.writeStdout(`skipped ${report.agent} for now.`);
323
+ continue;
324
+ }
325
+ if (!action) {
326
+ deps.writeStdout(`invalid choice for ${report.agent}; no repair attempted.`);
327
+ continue;
328
+ }
329
+ if (!isExecutableAction(action)) {
330
+ deps.writeStdout(`manual step for ${report.agent}: ${action.command}`);
331
+ continue;
332
+ }
333
+ if (!deps.runRepairAction) {
334
+ deps.writeStdout(`repair runner unavailable for ${report.agent}; run \`${action.command}\` manually.`);
335
+ continue;
336
+ }
337
+ try {
338
+ deps.onActionAttempted?.(report.agent, action, issue);
339
+ await deps.runRepairAction(report.agent, action, issue);
340
+ repairsAttempted = true;
341
+ deps.writeStdout(`repair step finished for ${report.agent}.`);
342
+ }
343
+ catch (error) {
344
+ const message = error instanceof Error ? error.message : String(error);
345
+ repairsAttempted = true;
346
+ deps.writeStdout(`repair error for ${report.agent}: ${message}`);
347
+ (0, runtime_1.emitNervesEvent)({
348
+ level: "error",
349
+ component: "daemon",
350
+ event: "daemon.readiness_repair_error",
351
+ message: "guided readiness repair action failed",
352
+ meta: { agent: report.agent, issue: issue.kind, action: action.kind, error: message },
353
+ });
354
+ }
355
+ }
356
+ }
357
+ (0, runtime_1.emitNervesEvent)({
358
+ level: "info",
359
+ component: "daemon",
360
+ event: "daemon.readiness_repair_end",
361
+ message: "guided readiness repair completed",
362
+ meta: { repairsAttempted },
363
+ });
364
+ return { repairsAttempted };
365
+ }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.runHooks = runHooks;
4
4
  const runtime_1 = require("../../nerves/runtime");
5
5
  const bundle_meta_1 = require("./hooks/bundle-meta");
6
+ const agent_config_v2_1 = require("./hooks/agent-config-v2");
6
7
  async function runHooks(deps) {
7
8
  (0, runtime_1.emitNervesEvent)({
8
9
  component: "daemon",
@@ -12,6 +13,7 @@ async function runHooks(deps) {
12
13
  });
13
14
  try {
14
15
  deps.registerUpdateHook(bundle_meta_1.bundleMetaHook);
16
+ deps.registerUpdateHook(agent_config_v2_1.agentConfigV2Hook);
15
17
  const currentVersion = deps.getPackageVersion();
16
18
  await deps.applyPendingUpdates(deps.bundlesRoot, currentVersion);
17
19
  (0, runtime_1.emitNervesEvent)({
@@ -35,53 +35,104 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.configureDaemonRuntimeLogger = configureDaemonRuntimeLogger;
37
37
  const fs = __importStar(require("fs"));
38
- const os = __importStar(require("os"));
39
38
  const path = __importStar(require("path"));
40
39
  const nerves_1 = require("../../nerves");
41
40
  const runtime_1 = require("../../nerves/runtime");
42
- const DEFAULT_RUNTIME_LOGGING = {
41
+ const identity_1 = require("../identity");
42
+ const LEGACY_SHARED_RUNTIME_LOGGING = {
43
43
  level: "info",
44
44
  sinks: ["terminal", "ndjson"],
45
45
  };
46
- function defaultLevelForProcess(processName) {
47
- return processName === "daemon" ? "info" : "warn";
46
+ function defaultLoggingForProcess(processName) {
47
+ if (processName === "ouro" || processName === "ouro-bot") {
48
+ return {
49
+ level: "info",
50
+ sinks: ["ndjson"],
51
+ };
52
+ }
53
+ if (processName === "bluebubbles" || processName === "mail") {
54
+ return {
55
+ level: "warn",
56
+ sinks: ["terminal", "ndjson"],
57
+ };
58
+ }
59
+ return { ...LEGACY_SHARED_RUNTIME_LOGGING };
48
60
  }
49
61
  function isLogLevel(value) {
50
62
  return value === "debug" || value === "info" || value === "warn" || value === "error";
51
63
  }
64
+ function normalizeSinks(value, fallback) {
65
+ if (!Array.isArray(value)) {
66
+ return [...fallback];
67
+ }
68
+ const sinks = value.filter((entry) => entry === "terminal" || entry === "ndjson");
69
+ return sinks.length > 0 ? [...new Set(sinks)] : [...fallback];
70
+ }
71
+ function isLegacySharedDefaultConfig(candidate, normalizedLevel, normalizedSinks) {
72
+ return normalizedLevel === LEGACY_SHARED_RUNTIME_LOGGING.level
73
+ && normalizedSinks.length === LEGACY_SHARED_RUNTIME_LOGGING.sinks.length
74
+ && LEGACY_SHARED_RUNTIME_LOGGING.sinks.every((sink) => normalizedSinks.includes(sink))
75
+ && Object.keys(candidate).every((key) => key === "level" || key === "sinks");
76
+ }
52
77
  function resolveRuntimeLoggingConfig(configPath, processName) {
53
- const defaultLevel = defaultLevelForProcess(processName);
78
+ const processDefault = defaultLoggingForProcess(processName);
54
79
  let parsed = null;
55
80
  try {
56
81
  const raw = fs.readFileSync(configPath, "utf-8");
57
82
  parsed = JSON.parse(raw);
58
83
  }
59
84
  catch {
60
- return { ...DEFAULT_RUNTIME_LOGGING, level: defaultLevel };
85
+ return { ...processDefault };
61
86
  }
62
87
  if (!parsed || typeof parsed !== "object") {
63
- return { ...DEFAULT_RUNTIME_LOGGING, level: defaultLevel };
88
+ return { ...processDefault };
64
89
  }
65
90
  const candidate = parsed;
66
- const level = isLogLevel(candidate.level) ? candidate.level : defaultLevel;
67
- const sinks = Array.isArray(candidate.sinks)
68
- ? candidate.sinks.filter((entry) => entry === "terminal" || entry === "ndjson")
69
- : DEFAULT_RUNTIME_LOGGING.sinks;
91
+ const level = isLogLevel(candidate.level) ? candidate.level : processDefault.level;
92
+ const sinks = normalizeSinks(candidate.sinks, processDefault.sinks);
93
+ if ((processName === "ouro" || processName === "ouro-bot")
94
+ && isLegacySharedDefaultConfig(candidate, level, sinks)) {
95
+ return { ...processDefault };
96
+ }
70
97
  return {
71
98
  level,
72
- sinks: sinks.length > 0 ? [...new Set(sinks)] : [...DEFAULT_RUNTIME_LOGGING.sinks],
99
+ sinks,
73
100
  };
74
101
  }
102
+ function resolveAgentNameForPaths(explicit) {
103
+ if (explicit && explicit.trim().length > 0)
104
+ return explicit.trim();
105
+ try {
106
+ return (0, identity_1.getAgentName)();
107
+ }
108
+ catch {
109
+ return "slugger";
110
+ }
111
+ }
75
112
  function configureDaemonRuntimeLogger(processName, options = {}) {
76
- const homeDir = options.homeDir ?? os.homedir();
77
- const configPath = options.configPath ?? path.join(homeDir, ".agentstate", "daemon", "logging.json");
113
+ const agentName = resolveAgentNameForPaths(options.agentName);
114
+ const configPath = options.configPath
115
+ ?? (options.homeDir
116
+ ? path.join(options.homeDir, "AgentBundles", `${agentName}.ouro`, "state", "daemon", "logging.json")
117
+ : (0, identity_1.getAgentDaemonLoggingConfigPath)(agentName));
78
118
  const config = resolveRuntimeLoggingConfig(configPath, processName);
119
+ const logsDir = options.homeDir
120
+ ? path.join(options.homeDir, "AgentBundles", `${agentName}.ouro`, "state", "daemon", "logs")
121
+ : (0, identity_1.getAgentDaemonLogsDir)(agentName);
122
+ // Rotation policy per daemon ndjson stream (Unit 1c):
123
+ // 25 MB threshold x 5 gzipped generations = ~30 MB peak per stream.
124
+ // Call sites previously relied on the implicit 50 MB default; we now pass
125
+ // the options object explicitly so the policy is visible at the call site.
79
126
  const sinks = config.sinks.map((sinkName) => {
80
127
  if (sinkName === "terminal") {
81
128
  return (0, nerves_1.createTerminalSink)();
82
129
  }
83
- const ndjsonPath = path.join(homeDir, ".agentstate", "daemon", "logs", `${processName}.ndjson`);
84
- return (0, nerves_1.createNdjsonFileSink)(ndjsonPath);
130
+ const ndjsonPath = path.join(logsDir, `${processName}.ndjson`);
131
+ return (0, nerves_1.createNdjsonFileSink)(ndjsonPath, {
132
+ maxSizeBytes: 25 * 1024 * 1024,
133
+ maxGenerations: 5,
134
+ compress: true,
135
+ });
85
136
  });
86
137
  const logger = (0, nerves_1.createLogger)({
87
138
  level: config.level,
@@ -36,7 +36,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.getRuntimeMetadata = getRuntimeMetadata;
37
37
  const crypto_1 = require("crypto");
38
38
  const fs = __importStar(require("fs"));
39
- const os = __importStar(require("os"));
40
39
  const path = __importStar(require("path"));
41
40
  const childProcess = __importStar(require("child_process"));
42
41
  const identity_1 = require("../identity");
@@ -87,19 +86,7 @@ function readLastUpdated(repoRoot, packageJsonPath, statSyncImpl, execFileSyncIm
87
86
  return { value: UNKNOWN_METADATA, source: "unknown" };
88
87
  }
89
88
  }
90
- function readHomeDir() {
91
- const homedirImpl = optionalFunction(os, "homedir");
92
- if (!homedirImpl) {
93
- return null;
94
- }
95
- try {
96
- return homedirImpl.call(os);
97
- }
98
- catch {
99
- return null;
100
- }
101
- }
102
- function listConfigTargets(bundlesRoot, secretsRoot, daemonLoggingPath, readdirSyncImpl) {
89
+ function listConfigTargets(bundlesRoot, daemonLoggingPath, readdirSyncImpl) {
103
90
  if (!readdirSyncImpl)
104
91
  return [];
105
92
  const targets = new Set();
@@ -117,19 +104,6 @@ function listConfigTargets(bundlesRoot, secretsRoot, daemonLoggingPath, readdirS
117
104
  catch {
118
105
  // ignore unreadable bundle roots
119
106
  }
120
- if (secretsRoot) {
121
- try {
122
- const secretEntries = readdirSyncImpl(secretsRoot, { withFileTypes: true });
123
- for (const entry of secretEntries) {
124
- if (!entry.isDirectory())
125
- continue;
126
- targets.add(path.join(secretsRoot, entry.name, "secrets.json"));
127
- }
128
- }
129
- catch {
130
- // ignore unreadable secrets roots
131
- }
132
- }
133
107
  return [...targets].sort();
134
108
  }
135
109
  function readConfigFingerprint(targets, readFileSyncImpl, existsSyncImpl) {
@@ -172,9 +146,7 @@ function readConfigFingerprint(targets, readFileSyncImpl, existsSyncImpl) {
172
146
  function getRuntimeMetadata(deps = {}) {
173
147
  const repoRoot = deps.repoRoot ?? (0, identity_1.getRepoRoot)();
174
148
  const bundlesRoot = deps.bundlesRoot ?? (0, identity_1.getAgentBundlesRoot)();
175
- const homeDir = readHomeDir();
176
- const secretsRoot = deps.secretsRoot ?? (homeDir ? path.join(homeDir, ".agentsecrets") : null);
177
- const daemonLoggingPath = deps.daemonLoggingPath ?? (homeDir ? path.join(homeDir, ".agentstate", "daemon", "logging.json") : null);
149
+ const daemonLoggingPath = deps.daemonLoggingPath ?? (0, identity_1.getAgentDaemonLoggingConfigPath)();
178
150
  const readFileSyncImpl = deps.readFileSync ?? optionalFunction(fs, "readFileSync")?.bind(fs) ?? null;
179
151
  const statSyncImpl = deps.statSync ?? optionalFunction(fs, "statSync")?.bind(fs) ?? null;
180
152
  const readdirSyncImpl = deps.readdirSync ?? optionalFunction(fs, "readdirSync")?.bind(fs) ?? null;
@@ -191,7 +163,7 @@ function getRuntimeMetadata(deps = {}) {
191
163
  throw new Error("git unavailable");
192
164
  }))
193
165
  : { value: UNKNOWN_METADATA, source: "unknown" };
194
- const configTargets = listConfigTargets(bundlesRoot, secretsRoot, daemonLoggingPath, readdirSyncImpl);
166
+ const configTargets = listConfigTargets(bundlesRoot, daemonLoggingPath, readdirSyncImpl);
195
167
  const configFingerprint = readConfigFingerprint(configTargets, readFileSyncImpl, existsSyncImpl);
196
168
  (0, runtime_1.emitNervesEvent)({
197
169
  component: "daemon",