@ouro.bot/cli 0.1.0-alpha.56 → 0.1.0-alpha.561

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 (396) hide show
  1. package/README.md +127 -23
  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/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
  10. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  12. package/changelog.json +3604 -0
  13. package/dist/arc/attention-types.js +8 -0
  14. package/dist/arc/cares.js +140 -0
  15. package/dist/arc/episodes.js +117 -0
  16. package/dist/arc/intentions.js +133 -0
  17. package/dist/arc/json-store.js +117 -0
  18. package/dist/arc/obligations.js +237 -0
  19. package/dist/arc/packets.js +193 -0
  20. package/dist/arc/presence.js +185 -0
  21. package/dist/arc/task-lifecycle.js +65 -0
  22. package/dist/heart/active-work.js +837 -26
  23. package/dist/heart/agent-entry.js +58 -3
  24. package/dist/heart/attachments/image-normalize.js +194 -0
  25. package/dist/heart/attachments/materialize.js +97 -0
  26. package/dist/heart/attachments/originals.js +88 -0
  27. package/dist/heart/attachments/render.js +29 -0
  28. package/dist/heart/attachments/sources/adapter.js +2 -0
  29. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  30. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  31. package/dist/heart/attachments/sources/index.js +16 -0
  32. package/dist/heart/attachments/store.js +103 -0
  33. package/dist/heart/attachments/types.js +93 -0
  34. package/dist/heart/auth/auth-flow.js +479 -0
  35. package/dist/heart/background-operations.js +281 -0
  36. package/dist/heart/bundle-state.js +168 -0
  37. package/dist/heart/commitments.js +111 -0
  38. package/dist/heart/config-registry.js +322 -0
  39. package/dist/heart/config.js +114 -118
  40. package/dist/heart/core.js +913 -246
  41. package/dist/heart/cross-chat-delivery.js +3 -18
  42. package/dist/heart/daemon/agent-config-check.js +419 -0
  43. package/dist/heart/daemon/agent-discovery.js +102 -3
  44. package/dist/heart/daemon/agent-service.js +522 -0
  45. package/dist/heart/daemon/agentic-repair.js +547 -0
  46. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  47. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  48. package/dist/heart/daemon/cadence.js +70 -0
  49. package/dist/heart/daemon/cli-defaults.js +776 -0
  50. package/dist/heart/daemon/cli-exec.js +7457 -0
  51. package/dist/heart/daemon/cli-help.js +498 -0
  52. package/dist/heart/daemon/cli-parse.js +1592 -0
  53. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  54. package/dist/heart/daemon/cli-render.js +763 -0
  55. package/dist/heart/daemon/cli-types.js +8 -0
  56. package/dist/heart/daemon/connect-bay.js +323 -0
  57. package/dist/heart/daemon/daemon-cli.js +29 -1698
  58. package/dist/heart/daemon/daemon-entry.js +387 -2
  59. package/dist/heart/daemon/daemon-health.js +176 -0
  60. package/dist/heart/daemon/daemon-rollup.js +57 -0
  61. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  62. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  63. package/dist/heart/daemon/daemon.js +796 -71
  64. package/dist/heart/daemon/dns-workflow.js +394 -0
  65. package/dist/heart/daemon/doctor-types.js +8 -0
  66. package/dist/heart/daemon/doctor.js +826 -0
  67. package/dist/heart/daemon/health-monitor.js +122 -1
  68. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  69. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  70. package/dist/heart/daemon/http-health-probe.js +80 -0
  71. package/dist/heart/daemon/human-command-screens.js +234 -0
  72. package/dist/heart/daemon/human-readiness.js +114 -0
  73. package/dist/heart/daemon/inner-status.js +89 -0
  74. package/dist/heart/daemon/interactive-repair.js +394 -0
  75. package/dist/heart/daemon/launchd.js +37 -8
  76. package/dist/heart/daemon/log-tailer.js +82 -12
  77. package/dist/heart/daemon/logs-prune.js +110 -0
  78. package/dist/heart/daemon/mcp-canary.js +297 -0
  79. package/dist/heart/daemon/message-router.js +2 -2
  80. package/dist/heart/daemon/os-cron-deps.js +135 -0
  81. package/dist/heart/daemon/os-cron.js +14 -12
  82. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  83. package/dist/heart/daemon/ouro-entry.js +3 -1
  84. package/dist/heart/daemon/process-manager.js +375 -33
  85. package/dist/heart/daemon/provider-discovery.js +137 -0
  86. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  87. package/dist/heart/daemon/pulse.js +475 -0
  88. package/dist/heart/daemon/readiness-repair.js +365 -0
  89. package/dist/heart/daemon/run-hooks.js +2 -0
  90. package/dist/heart/daemon/runtime-logging.js +67 -16
  91. package/dist/heart/daemon/runtime-metadata.js +3 -31
  92. package/dist/heart/daemon/safe-mode.js +161 -0
  93. package/dist/heart/daemon/sense-manager.js +389 -38
  94. package/dist/heart/daemon/session-id-resolver.js +131 -0
  95. package/dist/heart/daemon/skill-management-installer.js +94 -0
  96. package/dist/heart/daemon/socket-client.js +158 -11
  97. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  98. package/dist/heart/daemon/startup-tui.js +330 -0
  99. package/dist/heart/daemon/task-scheduler.js +3 -25
  100. package/dist/heart/daemon/terminal-ui.js +499 -0
  101. package/dist/heart/daemon/thoughts.js +162 -17
  102. package/dist/heart/daemon/up-progress.js +366 -0
  103. package/dist/heart/daemon/vault-items.js +56 -0
  104. package/dist/heart/delegation.js +1 -1
  105. package/dist/heart/habits/habit-migration.js +189 -0
  106. package/dist/heart/habits/habit-parser.js +140 -0
  107. package/dist/heart/habits/habit-runtime-state.js +100 -0
  108. package/dist/heart/habits/habit-scheduler.js +372 -0
  109. package/dist/heart/{daemon → hatch}/hatch-flow.js +32 -56
  110. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  111. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  112. package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
  113. package/dist/heart/identity.js +203 -57
  114. package/dist/heart/kept-notes.js +357 -0
  115. package/dist/heart/kicks.js +1 -1
  116. package/dist/heart/machine-identity.js +161 -0
  117. package/dist/heart/mail-import-discovery.js +353 -0
  118. package/dist/heart/mailbox/mailbox-http-hooks.js +66 -0
  119. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  120. package/dist/heart/mailbox/mailbox-http-routes.js +246 -0
  121. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  122. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  123. package/dist/heart/mailbox/mailbox-http.js +99 -0
  124. package/dist/heart/mailbox/mailbox-read.js +31 -0
  125. package/dist/heart/mailbox/mailbox-types.js +27 -0
  126. package/dist/heart/mailbox/mailbox-view.js +195 -0
  127. package/dist/heart/mailbox/readers/agent-machine.js +382 -0
  128. package/dist/heart/mailbox/readers/continuity-readers.js +338 -0
  129. package/dist/heart/mailbox/readers/mail.js +362 -0
  130. package/dist/heart/mailbox/readers/runtime-readers.js +651 -0
  131. package/dist/heart/mailbox/readers/sessions.js +232 -0
  132. package/dist/heart/mailbox/readers/shared.js +111 -0
  133. package/dist/heart/mcp/mcp-server.js +683 -0
  134. package/dist/heart/migrate-config.js +100 -0
  135. package/dist/heart/model-capabilities.js +19 -0
  136. package/dist/heart/platform.js +81 -0
  137. package/dist/heart/provider-attempt.js +134 -0
  138. package/dist/heart/provider-binding-resolver.js +267 -0
  139. package/dist/heart/provider-credentials.js +425 -0
  140. package/dist/heart/provider-failover.js +301 -0
  141. package/dist/heart/provider-models.js +81 -0
  142. package/dist/heart/provider-ping.js +262 -0
  143. package/dist/heart/provider-readiness-cache.js +40 -0
  144. package/dist/heart/provider-visibility.js +188 -0
  145. package/dist/heart/providers/anthropic-token.js +131 -0
  146. package/dist/heart/providers/anthropic.js +139 -52
  147. package/dist/heart/providers/azure.js +97 -13
  148. package/dist/heart/providers/error-classification.js +127 -0
  149. package/dist/heart/providers/github-copilot.js +145 -0
  150. package/dist/heart/providers/minimax-vlm.js +189 -0
  151. package/dist/heart/providers/minimax.js +26 -8
  152. package/dist/heart/providers/openai-codex.js +55 -40
  153. package/dist/heart/runtime-capability-check.js +170 -0
  154. package/dist/heart/runtime-credentials.js +367 -0
  155. package/dist/heart/runtime-cwd.js +87 -0
  156. package/dist/heart/sense-truth.js +13 -4
  157. package/dist/heart/session-activity.js +43 -22
  158. package/dist/heart/session-events.js +1149 -0
  159. package/dist/heart/session-playback-cli-main.js +5 -0
  160. package/dist/heart/session-playback-cli.js +36 -0
  161. package/dist/heart/session-playback.js +231 -0
  162. package/dist/heart/session-stats-cli-main.js +5 -0
  163. package/dist/heart/session-stats.js +182 -0
  164. package/dist/heart/session-transcript.js +243 -0
  165. package/dist/heart/start-of-turn-packet.js +345 -0
  166. package/dist/heart/streaming.js +44 -27
  167. package/dist/heart/sync-classification.js +176 -0
  168. package/dist/heart/sync.js +449 -0
  169. package/dist/heart/target-resolution.js +9 -5
  170. package/dist/heart/tempo.js +93 -0
  171. package/dist/heart/temporal-view.js +41 -0
  172. package/dist/heart/timeouts.js +101 -0
  173. package/dist/heart/tool-activity-callbacks.js +59 -0
  174. package/dist/heart/tool-description.js +139 -0
  175. package/dist/heart/tool-friction.js +55 -0
  176. package/dist/heart/tool-loop.js +200 -0
  177. package/dist/heart/turn-context.js +389 -0
  178. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  179. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  180. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  181. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  182. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  183. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  184. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  185. package/dist/mailbox-ui/assets/index-B-461hes.js +61 -0
  186. package/dist/mailbox-ui/assets/index-BPr5vNuM.css +1 -0
  187. package/dist/mailbox-ui/index.html +15 -0
  188. package/dist/mailroom/attention.js +167 -0
  189. package/dist/mailroom/autonomy.js +209 -0
  190. package/dist/mailroom/blob-store.js +674 -0
  191. package/dist/mailroom/body-cache.js +61 -0
  192. package/dist/mailroom/core.js +720 -0
  193. package/dist/mailroom/entry.js +160 -0
  194. package/dist/mailroom/file-store.js +430 -0
  195. package/dist/mailroom/mbox-import.js +383 -0
  196. package/dist/mailroom/outbound.js +380 -0
  197. package/dist/mailroom/policy.js +263 -0
  198. package/dist/mailroom/reader.js +233 -0
  199. package/dist/mailroom/search-cache.js +256 -0
  200. package/dist/mailroom/search-relevance.js +319 -0
  201. package/dist/mailroom/smtp-ingress.js +176 -0
  202. package/dist/mailroom/source-state.js +176 -0
  203. package/dist/mailroom/thread.js +109 -0
  204. package/dist/mailroom/travel-extract.js +89 -0
  205. package/dist/mind/bundle-manifest.js +7 -1
  206. package/dist/mind/context.js +165 -101
  207. package/dist/mind/diary-integrity.js +60 -0
  208. package/dist/mind/{memory.js → diary.js} +62 -75
  209. package/dist/mind/embedding-provider.js +60 -0
  210. package/dist/mind/file-state.js +179 -0
  211. package/dist/mind/friends/channel.js +39 -0
  212. package/dist/mind/friends/resolver.js +54 -2
  213. package/dist/mind/friends/store-file.js +39 -3
  214. package/dist/mind/friends/types.js +2 -2
  215. package/dist/mind/journal-index.js +161 -0
  216. package/dist/mind/note-search.js +268 -0
  217. package/dist/mind/obligation-steering.js +221 -0
  218. package/dist/mind/pending.js +4 -0
  219. package/dist/mind/prompt-refresh.js +3 -2
  220. package/dist/mind/prompt.js +1011 -123
  221. package/dist/mind/provenance-trust.js +26 -0
  222. package/dist/mind/scrutiny.js +173 -0
  223. package/dist/nerves/cli-logging.js +7 -1
  224. package/dist/nerves/coverage/audit-rules.js +15 -6
  225. package/dist/nerves/coverage/audit.js +28 -2
  226. package/dist/nerves/coverage/cli.js +1 -1
  227. package/dist/nerves/coverage/contract.js +5 -5
  228. package/dist/nerves/coverage/file-completeness.js +129 -5
  229. package/dist/nerves/coverage/run-artifacts.js +1 -1
  230. package/dist/nerves/event-buffer.js +111 -0
  231. package/dist/nerves/index.js +224 -4
  232. package/dist/nerves/observation.js +20 -0
  233. package/dist/nerves/redact.js +79 -0
  234. package/dist/nerves/review/cli-main.js +5 -0
  235. package/dist/nerves/review/cli.js +156 -0
  236. package/dist/nerves/review/core.js +152 -0
  237. package/dist/nerves/runtime.js +5 -1
  238. package/dist/repertoire/ado-client.js +15 -56
  239. package/dist/repertoire/ado-semantic.js +11 -10
  240. package/dist/repertoire/api-client.js +97 -0
  241. package/dist/repertoire/bitwarden-store.js +963 -0
  242. package/dist/repertoire/bundle-templates.js +72 -0
  243. package/dist/repertoire/bw-installer.js +180 -0
  244. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  245. package/dist/repertoire/coding/context-pack.js +330 -0
  246. package/dist/repertoire/coding/feedback.js +197 -30
  247. package/dist/repertoire/coding/manager.js +158 -9
  248. package/dist/repertoire/coding/spawner.js +55 -9
  249. package/dist/repertoire/coding/tools.js +170 -7
  250. package/dist/repertoire/commerce-errors.js +109 -0
  251. package/dist/repertoire/commerce-self-test.js +156 -0
  252. package/dist/repertoire/credential-access.js +178 -0
  253. package/dist/repertoire/duffel-client.js +185 -0
  254. package/dist/repertoire/github-client.js +14 -55
  255. package/dist/repertoire/graph-client.js +11 -52
  256. package/dist/repertoire/guardrails.js +396 -0
  257. package/dist/repertoire/mcp-client.js +295 -0
  258. package/dist/repertoire/mcp-manager.js +362 -0
  259. package/dist/repertoire/mcp-tools.js +63 -0
  260. package/dist/repertoire/shell-sessions.js +133 -0
  261. package/dist/repertoire/skills.js +15 -24
  262. package/dist/repertoire/stripe-client.js +131 -0
  263. package/dist/repertoire/tasks/board.js +31 -5
  264. package/dist/repertoire/tasks/fix.js +182 -0
  265. package/dist/repertoire/tasks/index.js +16 -4
  266. package/dist/repertoire/tasks/lifecycle.js +2 -2
  267. package/dist/repertoire/tasks/parser.js +3 -2
  268. package/dist/repertoire/tasks/scanner.js +194 -37
  269. package/dist/repertoire/tasks/transitions.js +16 -78
  270. package/dist/repertoire/tool-results.js +29 -0
  271. package/dist/repertoire/tools-attachments.js +317 -0
  272. package/dist/repertoire/tools-base.js +47 -1075
  273. package/dist/repertoire/tools-bluebubbles.js +1 -0
  274. package/dist/repertoire/tools-bridge.js +142 -0
  275. package/dist/repertoire/tools-bundle.js +984 -0
  276. package/dist/repertoire/tools-config.js +185 -0
  277. package/dist/repertoire/tools-continuity.js +248 -0
  278. package/dist/repertoire/tools-credential.js +381 -0
  279. package/dist/repertoire/tools-files.js +342 -0
  280. package/dist/repertoire/tools-flight.js +224 -0
  281. package/dist/repertoire/tools-flow.js +119 -0
  282. package/dist/repertoire/tools-github.js +1 -7
  283. package/dist/repertoire/tools-mail.js +1857 -0
  284. package/dist/repertoire/tools-notes.js +421 -0
  285. package/dist/repertoire/tools-session.js +750 -0
  286. package/dist/repertoire/tools-shell.js +120 -0
  287. package/dist/repertoire/tools-stripe.js +180 -0
  288. package/dist/repertoire/tools-surface.js +243 -0
  289. package/dist/repertoire/tools-teams.js +9 -39
  290. package/dist/repertoire/tools-travel.js +125 -0
  291. package/dist/repertoire/tools-trip.js +604 -0
  292. package/dist/repertoire/tools-user-profile.js +144 -0
  293. package/dist/repertoire/tools-vault.js +40 -0
  294. package/dist/repertoire/tools.js +108 -100
  295. package/dist/repertoire/travel-api-client.js +360 -0
  296. package/dist/repertoire/user-profile.js +131 -0
  297. package/dist/repertoire/vault-setup.js +246 -0
  298. package/dist/repertoire/vault-unlock.js +594 -0
  299. package/dist/scripts/claude-code-hook.js +41 -0
  300. package/dist/scripts/claude-code-stop-hook.js +47 -0
  301. package/dist/senses/attention-queue.js +116 -0
  302. package/dist/senses/bluebubbles/active-turns.js +216 -0
  303. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  304. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  305. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
  306. package/dist/senses/bluebubbles/entry.js +77 -0
  307. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  308. package/dist/senses/bluebubbles/index.js +2305 -0
  309. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
  310. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  311. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  312. package/dist/senses/bluebubbles/processed-log.js +133 -0
  313. package/dist/senses/bluebubbles/replay.js +137 -0
  314. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  315. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  316. package/dist/senses/cli/bracketed-paste.js +82 -0
  317. package/dist/senses/cli/image-paste.js +287 -0
  318. package/dist/senses/cli/image-ref-navigation.js +75 -0
  319. package/dist/senses/cli/ink-app.js +156 -0
  320. package/dist/senses/cli/inline-diff.js +64 -0
  321. package/dist/senses/cli/input-keys.js +174 -0
  322. package/dist/senses/cli/kill-ring.js +86 -0
  323. package/dist/senses/cli/message-list.js +51 -0
  324. package/dist/senses/cli/ouro-tui.js +607 -0
  325. package/dist/senses/cli/spinner-imperative.js +135 -0
  326. package/dist/senses/cli/spinner.js +101 -0
  327. package/dist/senses/cli/status-line.js +60 -0
  328. package/dist/senses/cli/streaming-markdown.js +526 -0
  329. package/dist/senses/cli/tool-display.js +85 -0
  330. package/dist/senses/cli/tool-render.js +85 -0
  331. package/dist/senses/cli/tui-store.js +240 -0
  332. package/dist/senses/cli/virtual-list.js +35 -0
  333. package/dist/senses/cli-entry.js +60 -8
  334. package/dist/senses/cli-layout.js +187 -0
  335. package/dist/senses/cli.js +520 -209
  336. package/dist/senses/commands.js +66 -3
  337. package/dist/senses/habit-turn-message.js +108 -0
  338. package/dist/senses/inner-dialog-worker.js +175 -21
  339. package/dist/senses/inner-dialog.js +330 -27
  340. package/dist/senses/mail-entry.js +66 -0
  341. package/dist/senses/mail.js +379 -0
  342. package/dist/senses/pipeline.js +549 -181
  343. package/dist/senses/proactive-content-guard.js +51 -0
  344. package/dist/senses/shared-turn.js +251 -0
  345. package/dist/senses/surface-tool.js +68 -0
  346. package/dist/senses/teams-entry.js +60 -8
  347. package/dist/senses/teams.js +387 -98
  348. package/dist/senses/trust-gate.js +100 -5
  349. package/dist/senses/voice/audio-routing.js +119 -0
  350. package/dist/senses/voice/elevenlabs.js +178 -0
  351. package/dist/senses/voice/golden-path.js +116 -0
  352. package/dist/senses/voice/index.js +26 -0
  353. package/dist/senses/voice/meeting.js +113 -0
  354. package/dist/senses/voice/playback.js +139 -0
  355. package/dist/senses/voice/transcript.js +70 -0
  356. package/dist/senses/voice/turn.js +85 -0
  357. package/dist/senses/voice/types.js +2 -0
  358. package/dist/senses/voice/whisper.js +161 -0
  359. package/dist/senses/voice-entry.js +80 -0
  360. package/dist/trips/core.js +138 -0
  361. package/dist/trips/store.js +146 -0
  362. package/package.json +38 -7
  363. package/skills/agent-commerce.md +106 -0
  364. package/skills/browser-navigation.md +117 -0
  365. package/skills/commerce-setup-guide.md +116 -0
  366. package/skills/commerce-setup.md +84 -0
  367. package/skills/configure-dev-tools.md +101 -0
  368. package/skills/travel-planning.md +138 -0
  369. package/dist/heart/daemon/auth-flow.js +0 -351
  370. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  371. package/dist/heart/daemon/subagent-installer.js +0 -166
  372. package/dist/heart/session-recall.js +0 -116
  373. package/dist/mind/associative-recall.js +0 -209
  374. package/dist/senses/bluebubbles-entry.js +0 -13
  375. package/dist/senses/bluebubbles.js +0 -1177
  376. package/dist/senses/debug-activity.js +0 -148
  377. package/subagents/README.md +0 -86
  378. package/subagents/work-doer.md +0 -237
  379. package/subagents/work-merger.md +0 -618
  380. package/subagents/work-planner.md +0 -390
  381. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  382. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  383. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  384. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  385. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  386. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  387. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  388. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  389. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  390. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  391. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  392. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  393. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  394. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  395. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  396. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,498 @@
1
+ "use strict";
2
+ /**
3
+ * CLI help system — command registry, grouped help output, and per-command help.
4
+ *
5
+ * Pure data + formatting: no side effects, no daemon communication.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.COMMAND_REGISTRY = void 0;
9
+ exports.levenshteinDistance = levenshteinDistance;
10
+ exports.suggestCommand = suggestCommand;
11
+ exports.getGroupedHelp = getGroupedHelp;
12
+ exports.getCommandHelp = getCommandHelp;
13
+ // ── Registry ──
14
+ exports.COMMAND_REGISTRY = {
15
+ up: {
16
+ category: "Lifecycle",
17
+ description: "Start and check Ouro: bring up the background runtime, refresh what this machine needs, and show anything that still needs attention. In a human TTY, bare `ouro` opens the home screen instead; noninteractive shells still route bare `ouro` to `ouro up`.",
18
+ usage: "ouro [up] [--no-repair]",
19
+ example: "ouro up --no-repair",
20
+ },
21
+ stop: {
22
+ category: "Lifecycle",
23
+ description: "Stop the running daemon",
24
+ usage: "ouro stop",
25
+ example: "ouro stop",
26
+ },
27
+ down: {
28
+ category: "Lifecycle",
29
+ description: "Stop the running daemon (alias for stop)",
30
+ usage: "ouro down",
31
+ example: "ouro down",
32
+ },
33
+ status: {
34
+ category: "Lifecycle",
35
+ description: "Show Ouro status for this machine",
36
+ usage: "ouro status",
37
+ example: "ouro status",
38
+ },
39
+ logs: {
40
+ category: "Lifecycle",
41
+ description: "View or prune daemon logs",
42
+ usage: "ouro logs [prune]",
43
+ example: "ouro logs",
44
+ subcommands: ["prune"],
45
+ },
46
+ dev: {
47
+ category: "Lifecycle",
48
+ description: "Start daemon in development mode from a local repo",
49
+ usage: "ouro dev [--repo-path <path>] [--clone [--clone-path <path>]]",
50
+ example: "ouro dev --repo-path ~/code/ouroboros",
51
+ },
52
+ hatch: {
53
+ category: "Lifecycle",
54
+ description: "Create a new agent",
55
+ usage: "ouro hatch [--agent <name>] [--human <name>] [--provider <provider>]",
56
+ example: "ouro hatch --agent Sprout --human Ari --provider anthropic",
57
+ },
58
+ rollback: {
59
+ category: "Lifecycle",
60
+ description: "Roll back to a previous CLI version",
61
+ usage: "ouro rollback [<version>]",
62
+ example: "ouro rollback 0.1.0-alpha.250",
63
+ },
64
+ versions: {
65
+ category: "Lifecycle",
66
+ description: "List installed CLI versions",
67
+ usage: "ouro versions",
68
+ example: "ouro versions",
69
+ },
70
+ clone: {
71
+ category: "Lifecycle",
72
+ description: "Clone an existing agent bundle from a git remote onto this machine",
73
+ usage: "ouro clone <remote> [--agent <name>]",
74
+ example: "ouro clone https://github.com/user/myagent.ouro.git",
75
+ },
76
+ doctor: {
77
+ category: "Lifecycle",
78
+ description: "Run diagnostic checks on the ouro installation",
79
+ usage: "ouro doctor",
80
+ example: "ouro doctor",
81
+ },
82
+ mailbox: {
83
+ category: "Agents",
84
+ description: "Show the agent's current mailbox overview",
85
+ usage: "ouro mailbox [--json]",
86
+ example: "ouro mailbox --json",
87
+ },
88
+ outlook: {
89
+ category: "Agents",
90
+ description: "Deprecated alias for `ouro mailbox`",
91
+ usage: "ouro outlook [--json]",
92
+ example: "ouro outlook --json",
93
+ hidden: true,
94
+ },
95
+ whoami: {
96
+ category: "Agents",
97
+ description: "Show current agent identity info",
98
+ usage: "ouro whoami [--agent <name>]",
99
+ example: "ouro whoami",
100
+ },
101
+ config: {
102
+ category: "Agents",
103
+ description: "View or change agent configuration",
104
+ usage: "ouro config <subcommand> [--agent <name>]",
105
+ example: "ouro config models",
106
+ subcommands: ["model", "models"],
107
+ },
108
+ changelog: {
109
+ category: "Agents",
110
+ description: "View the agent changelog",
111
+ usage: "ouro changelog [--from <version>] [--agent <name>]",
112
+ example: "ouro changelog --from 0.1.0-alpha.250",
113
+ },
114
+ chat: {
115
+ category: "Chat",
116
+ description: "Open an interactive chat session with an agent",
117
+ usage: "ouro chat <agent>",
118
+ example: "ouro chat ouroboros",
119
+ },
120
+ msg: {
121
+ category: "Chat",
122
+ description: "Send a single message to an agent",
123
+ usage: "ouro msg --to <agent> [--session <id>] [--task <ref>] <message>",
124
+ example: "ouro msg --to ouroboros hello there",
125
+ },
126
+ task: {
127
+ category: "Tasks",
128
+ description: "Manage agent tasks",
129
+ usage: "ouro task <subcommand> [--agent <name>]",
130
+ example: "ouro task board",
131
+ subcommands: ["board", "create", "update", "show", "actionable", "deps", "sessions", "fix"],
132
+ },
133
+ poke: {
134
+ category: "Tasks",
135
+ description: "Poke an agent about a task or habit",
136
+ usage: "ouro poke <agent> --task <task-id> | --habit <name>",
137
+ example: "ouro poke ouroboros --task abc123",
138
+ },
139
+ reminder: {
140
+ category: "Tasks",
141
+ description: "Create reminders for an agent",
142
+ usage: "ouro reminder create <title> --body <body> [--at <iso>] [--cadence <interval>]",
143
+ example: "ouro reminder create standup --body 'daily standup' --cadence '1d'",
144
+ subcommands: ["create"],
145
+ },
146
+ habit: {
147
+ category: "Habits",
148
+ description: "Manage agent habits",
149
+ usage: "ouro habit <subcommand> [--agent <name>]",
150
+ example: "ouro habit list",
151
+ subcommands: ["list", "create", "poke"],
152
+ },
153
+ friend: {
154
+ category: "Friends",
155
+ description: "Manage agent friends and identity links",
156
+ usage: "ouro friend <subcommand> [--agent <name>]",
157
+ example: "ouro friend list",
158
+ subcommands: ["list", "show", "create", "update", "link", "unlink"],
159
+ },
160
+ link: {
161
+ category: "Friends",
162
+ description: "Link an external identity to an agent friend",
163
+ usage: "ouro link <agent> --friend <id> --provider <provider> --external-id <eid>",
164
+ example: "ouro link ouroboros --friend f1 --provider aad --external-id user@example.com",
165
+ },
166
+ auth: {
167
+ category: "Auth",
168
+ description: "Set up, verify, or switch agent credentials",
169
+ usage: "ouro auth [verify|switch] [--agent <name>] [--provider <provider>]",
170
+ example: "ouro auth",
171
+ subcommands: ["verify", "switch"],
172
+ },
173
+ account: {
174
+ category: "Auth",
175
+ description: "Ensure the agent's vault-backed work substrate account, including Mailroom setup",
176
+ usage: "ouro account ensure [--agent <name>]",
177
+ example: "ouro account ensure --agent slugger",
178
+ subcommands: ["ensure"],
179
+ },
180
+ connect: {
181
+ category: "Auth",
182
+ description: "Set up providers, portable integrations, and local senses from one guided screen",
183
+ usage: "ouro connect [providers|perplexity|embeddings|teams|bluebubbles|mail] [--agent <name>]",
184
+ example: "ouro connect",
185
+ subcommands: ["providers", "perplexity", "embeddings", "teams", "bluebubbles", "mail"],
186
+ },
187
+ mail: {
188
+ category: "Auth",
189
+ description: "Import delegated mail and repair hosted Mailroom mailbox indexes",
190
+ usage: "ouro mail <import-mbox|backfill-indexes> [--agent <name>]",
191
+ example: "ouro mail import-mbox --discover --owner-email ari@mendelow.me --source hey --agent slugger",
192
+ subcommands: ["import-mbox", "backfill-indexes"],
193
+ },
194
+ use: {
195
+ category: "Auth",
196
+ description: "Choose this machine's provider/model lane for an agent",
197
+ usage: "ouro use [--agent <name>] --lane outward|inner --provider <provider> --model <model> [--force]",
198
+ example: "ouro use --agent ouroboros --lane outward --provider minimax --model MiniMax-M2.5",
199
+ },
200
+ check: {
201
+ category: "Auth",
202
+ description: "Run a live check for this machine's selected provider/model lane",
203
+ usage: "ouro check [--agent <name>] --lane outward|inner",
204
+ example: "ouro check --agent ouroboros --lane outward",
205
+ },
206
+ repair: {
207
+ category: "Auth",
208
+ description: "Guide vault and provider readiness repair without invoking AI diagnosis for known issues",
209
+ usage: "ouro repair [--agent <name>]",
210
+ example: "ouro repair --agent ouroboros",
211
+ },
212
+ provider: {
213
+ category: "Auth",
214
+ description: "Refresh daemon provider credentials from an agent vault",
215
+ usage: "ouro provider refresh [--agent <name>]",
216
+ example: "ouro provider refresh --agent ouroboros",
217
+ subcommands: ["refresh"],
218
+ },
219
+ vault: {
220
+ category: "Auth",
221
+ description: "Create, replace, recover, unlock, inspect, and populate the agent credential vault",
222
+ usage: "ouro vault <create|replace|recover|unlock|status|config|item|ops> [--agent <name>]",
223
+ example: "ouro vault status",
224
+ subcommands: ["create", "replace", "recover", "unlock", "status", "config set", "config status", "vault item set", "vault item status", "vault item list", "vault ops porkbun set", "vault ops porkbun status"],
225
+ },
226
+ thoughts: {
227
+ category: "Internal",
228
+ description: "View agent inner dialog thoughts",
229
+ usage: "ouro thoughts [--last <n>] [--json] [--follow] [--agent <name>]",
230
+ example: "ouro thoughts --last 5 --follow",
231
+ },
232
+ inner: {
233
+ category: "Internal",
234
+ description: "Show inner dialog status",
235
+ usage: "ouro inner [--agent <name>]",
236
+ example: "ouro inner",
237
+ },
238
+ attention: {
239
+ category: "Internal",
240
+ description: "View agent attention items",
241
+ usage: "ouro attention [show <id>|history] [--agent <name>]",
242
+ example: "ouro attention history",
243
+ subcommands: ["show", "history"],
244
+ },
245
+ session: {
246
+ category: "Internal",
247
+ description: "Manage agent sessions",
248
+ usage: "ouro session list [--agent <name>]",
249
+ example: "ouro session list",
250
+ subcommands: ["list"],
251
+ },
252
+ mcp: {
253
+ category: "System",
254
+ description: "Interact with MCP servers",
255
+ usage: "ouro mcp <subcommand>",
256
+ example: "ouro mcp canary --agent ouroboros",
257
+ subcommands: ["list", "call", "canary"],
258
+ },
259
+ "mcp-serve": {
260
+ category: "System",
261
+ description: "Start an MCP server for dev tool integration",
262
+ usage: "ouro mcp-serve --agent <name> [--friend <id>]",
263
+ example: "ouro mcp-serve --agent ouroboros",
264
+ },
265
+ setup: {
266
+ category: "System",
267
+ description: "Register MCP server and hooks for a dev tool",
268
+ usage: "ouro setup --tool <claude-code|codex> [--agent <name>]",
269
+ example: "ouro setup --tool claude-code",
270
+ },
271
+ hook: {
272
+ category: "System",
273
+ description: "Fire a dev tool lifecycle hook",
274
+ usage: "ouro hook <event> --agent <name>",
275
+ example: "ouro hook session-start --agent ouroboros",
276
+ },
277
+ bluebubbles: {
278
+ category: "System",
279
+ description: "BlueBubbles integration commands",
280
+ usage: "ouro bluebubbles replay [--agent <name>] --message-guid <guid> [--event-type <type>] [--json]",
281
+ example: "ouro bluebubbles replay --message-guid abc123",
282
+ subcommands: ["replay"],
283
+ },
284
+ };
285
+ const SUBCOMMAND_HELP = {
286
+ "auth verify": {
287
+ description: "Verify agent provider credentials without changing provider/model lanes",
288
+ usage: "ouro auth verify [--agent <name>] [--provider <provider>]",
289
+ example: "ouro auth verify --provider openai-codex",
290
+ },
291
+ "auth switch": {
292
+ description: "Switch agent.json provider/model lanes after credentials are available",
293
+ usage: "ouro auth switch [--agent <name>] --provider <provider> [--facing human|agent]",
294
+ example: "ouro auth switch --provider minimax",
295
+ },
296
+ "connect perplexity": {
297
+ description: "Connect portable Perplexity search that travels with this agent",
298
+ usage: "ouro connect perplexity [--agent <name>]",
299
+ example: "ouro connect perplexity",
300
+ },
301
+ "connect providers": {
302
+ description: "Open provider setup from the connections screen without remembering the auth command",
303
+ usage: "ouro connect providers [--agent <name>]",
304
+ example: "ouro connect providers",
305
+ },
306
+ "connect embeddings": {
307
+ description: "Connect portable memory embeddings that travel with this agent",
308
+ usage: "ouro connect embeddings [--agent <name>]",
309
+ example: "ouro connect embeddings",
310
+ },
311
+ "connect teams": {
312
+ description: "Connect portable Microsoft Teams credentials and enable the Teams sense",
313
+ usage: "ouro connect teams [--agent <name>]",
314
+ example: "ouro connect teams",
315
+ },
316
+ "connect bluebubbles": {
317
+ description: "Attach BlueBubbles iMessage to this machine only; it does not travel with the agent",
318
+ usage: "ouro connect bluebubbles [--agent <name>]",
319
+ example: "ouro connect bluebubbles",
320
+ },
321
+ "connect mail": {
322
+ description: "Provision portable Agent Mail / Mailroom access and enable the Mail sense",
323
+ usage: "ouro connect mail [--agent <name>] [--owner-email <email> --source <label>|--no-delegated-source] [--rotate-missing-mail-keys]",
324
+ example: "ouro connect mail --agent slugger --owner-email ari@mendelow.me --source hey",
325
+ },
326
+ "account ensure": {
327
+ description: "Idempotently prepare an agent's vault-backed work substrate account and private Mailroom mailbox",
328
+ usage: "ouro account ensure [--agent <name>] [--owner-email <email> --source <label>|--no-delegated-source] [--rotate-missing-mail-keys]",
329
+ example: "ouro account ensure --agent slugger --owner-email ari@mendelow.me --source hey",
330
+ },
331
+ "mail import-mbox": {
332
+ description: "Import a HEY or other MBOX export into an existing delegated Mailroom source grant",
333
+ usage: "ouro mail import-mbox (--file <path>|--discover) [--owner-email <email>] [--source <label>] [--agent <name>] [--foreground]",
334
+ example: "ouro mail import-mbox --discover --owner-email ari@mendelow.me --source hey --agent slugger",
335
+ },
336
+ "mail backfill-indexes": {
337
+ description: "Rebuild hosted blob mailbox indexes for faster recent-mail reads after large legacy imports or drift repair.",
338
+ usage: "ouro mail backfill-indexes [--agent <name>] [--foreground]",
339
+ example: "ouro mail backfill-indexes --agent slugger",
340
+ },
341
+ "provider refresh": {
342
+ description: "Reload this agent's provider credentials from its vault into daemon memory",
343
+ usage: "ouro provider refresh [--agent <name>]",
344
+ example: "ouro provider refresh",
345
+ },
346
+ "vault create": {
347
+ description: "Create an agent credential vault and store local unlock material",
348
+ usage: "ouro vault create [--agent <name>] --email <email> [--server <url>] [--store <store>]",
349
+ example: "ouro vault create --email ouroboros@ouro.bot",
350
+ },
351
+ "vault replace": {
352
+ description: "Create an empty agent vault at the stable agent email when no unlock secret or JSON export exists",
353
+ usage: "ouro vault replace [--agent <name>] [--email <email>] [--server <url>] [--store <store>]",
354
+ example: "ouro vault replace",
355
+ },
356
+ "vault recover": {
357
+ description: "Create an agent vault at the stable agent email and import local JSON credential exports",
358
+ usage: "ouro vault recover [--agent <name>] --from <json> [--from <json> ...] [--email <email>] [--server <url>] [--store <store>]",
359
+ example: "ouro vault recover --from ./credentials.json",
360
+ },
361
+ "vault unlock": {
362
+ description: "Unlock an existing agent credential vault on this machine",
363
+ usage: "ouro vault unlock [--agent <name>] [--store <store>]",
364
+ example: "ouro vault unlock",
365
+ },
366
+ "vault status": {
367
+ description: "Show whether this machine can unlock an agent credential vault",
368
+ usage: "ouro vault status [--agent <name>] [--store <store>]",
369
+ example: "ouro vault status",
370
+ },
371
+ "vault config set": {
372
+ description: "Write runtime configuration into the agent credential vault without printing values",
373
+ usage: "ouro vault config set [--agent <name>] --key <path> [--value <value>] [--scope agent|machine]",
374
+ example: "ouro vault config set --key teams.clientSecret",
375
+ },
376
+ "vault config status": {
377
+ description: "List runtime configuration keys stored in the agent credential vault",
378
+ usage: "ouro vault config status [--agent <name>] [--scope agent|machine|all]",
379
+ example: "ouro vault config status --scope all",
380
+ },
381
+ "vault item set": {
382
+ description: "Store an ordinary vault item / credential with no assumed use. Prompts for hidden secret fields, stores optional public fields and notes, and secret values are not printed.",
383
+ usage: "ouro vault item set [--agent <name>] --item <path> (--secret-field <name>...|--template <template>) [--public-field <key=value>] [--note <text>]",
384
+ example: "ouro vault item set --agent slugger --item ops/porkbun/ari@mendelow.me --template porkbun-api",
385
+ },
386
+ "vault item status": {
387
+ description: "Show metadata for an ordinary vault item without printing secret values",
388
+ usage: "ouro vault item status [--agent <name>] --item <path>",
389
+ example: "ouro vault item status --agent slugger --item ops/porkbun/ari@mendelow.me",
390
+ },
391
+ "vault item list": {
392
+ description: "List ordinary vault item names and metadata without printing secret values",
393
+ usage: "ouro vault item list [--agent <name>] [--prefix <path-prefix>]",
394
+ example: "ouro vault item list --agent slugger --prefix ops/",
395
+ },
396
+ "vault ops porkbun set": {
397
+ description: "deprecated compatibility alias for `ouro vault item set --template porkbun-api`; stores an ordinary vault item, not a special credential kind",
398
+ usage: "ouro vault ops porkbun set [--agent <name>] --account <account>",
399
+ example: "ouro vault ops porkbun set --agent slugger --account ari@mendelow.me",
400
+ },
401
+ "vault ops porkbun status": {
402
+ description: "deprecated compatibility alias for checking the ordinary vault item used by the Porkbun API template",
403
+ usage: "ouro vault ops porkbun status [--agent <name>] [--account <account>]",
404
+ example: "ouro vault ops porkbun status --agent slugger --account ari@mendelow.me",
405
+ },
406
+ };
407
+ // ── Levenshtein distance ──
408
+ function levenshteinDistance(a, b) {
409
+ if (a.length === 0)
410
+ return b.length;
411
+ if (b.length === 0)
412
+ return a.length;
413
+ const matrix = [];
414
+ for (let i = 0; i <= a.length; i++) {
415
+ matrix[i] = [i];
416
+ }
417
+ for (let j = 0; j <= b.length; j++) {
418
+ matrix[0][j] = j;
419
+ }
420
+ for (let i = 1; i <= a.length; i++) {
421
+ for (let j = 1; j <= b.length; j++) {
422
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
423
+ matrix[i][j] = Math.min(matrix[i - 1][j] + 1, // deletion
424
+ matrix[i][j - 1] + 1, // insertion
425
+ matrix[i - 1][j - 1] + cost);
426
+ }
427
+ }
428
+ return matrix[a.length][b.length];
429
+ }
430
+ // ── Command suggestion ──
431
+ function suggestCommand(input) {
432
+ if (!input)
433
+ return null;
434
+ let bestMatch = null;
435
+ let bestDistance = Infinity;
436
+ for (const name of Object.keys(exports.COMMAND_REGISTRY)) {
437
+ if (exports.COMMAND_REGISTRY[name].hidden)
438
+ continue;
439
+ const distance = levenshteinDistance(input, name);
440
+ if (distance < bestDistance) {
441
+ bestDistance = distance;
442
+ bestMatch = name;
443
+ }
444
+ }
445
+ return bestDistance <= 2 ? bestMatch : null;
446
+ }
447
+ // ── Category display order ──
448
+ const CATEGORY_ORDER = [
449
+ "Lifecycle",
450
+ "Agents",
451
+ "Chat",
452
+ "Tasks",
453
+ "Habits",
454
+ "Friends",
455
+ "Auth",
456
+ "Internal",
457
+ "System",
458
+ ];
459
+ // ── Grouped help output ──
460
+ function getGroupedHelp() {
461
+ const lines = ["Usage: ouro <command> [options]", ""];
462
+ for (const category of CATEGORY_ORDER) {
463
+ lines.push(` ${category}:`);
464
+ for (const [name, entry] of Object.entries(exports.COMMAND_REGISTRY)) {
465
+ if (entry.hidden)
466
+ continue;
467
+ if (entry.category === category) {
468
+ lines.push(` ${name.padEnd(16)} ${entry.description}`);
469
+ }
470
+ }
471
+ lines.push("");
472
+ }
473
+ lines.push("Run 'ouro help <command>' for details on a specific command.");
474
+ return lines.join("\n");
475
+ }
476
+ // ── Per-command help ──
477
+ function getCommandHelp(name) {
478
+ const entry = SUBCOMMAND_HELP[name] ?? exports.COMMAND_REGISTRY[name];
479
+ if (!entry)
480
+ return null;
481
+ const lines = [
482
+ `${name} - ${entry.description}`,
483
+ "",
484
+ `Usage: ${entry.usage}`,
485
+ ];
486
+ if (entry.subcommands && entry.subcommands.length > 0) {
487
+ lines.push("");
488
+ lines.push("Subcommands:");
489
+ for (const sub of entry.subcommands) {
490
+ lines.push(` ${sub}`);
491
+ }
492
+ }
493
+ if (entry.example) {
494
+ lines.push("");
495
+ lines.push(`Example: ${entry.example}`);
496
+ }
497
+ return lines.join("\n");
498
+ }