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

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 (392) 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 +3596 -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 +248 -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/elevenlabs.js +125 -0
  350. package/dist/senses/voice/index.js +22 -0
  351. package/dist/senses/voice/transcript.js +70 -0
  352. package/dist/senses/voice/turn.js +85 -0
  353. package/dist/senses/voice/types.js +2 -0
  354. package/dist/senses/voice/whisper.js +133 -0
  355. package/dist/senses/voice-entry.js +80 -0
  356. package/dist/trips/core.js +138 -0
  357. package/dist/trips/store.js +146 -0
  358. package/package.json +38 -7
  359. package/skills/agent-commerce.md +106 -0
  360. package/skills/browser-navigation.md +117 -0
  361. package/skills/commerce-setup-guide.md +116 -0
  362. package/skills/commerce-setup.md +84 -0
  363. package/skills/configure-dev-tools.md +101 -0
  364. package/skills/travel-planning.md +138 -0
  365. package/dist/heart/daemon/auth-flow.js +0 -351
  366. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  367. package/dist/heart/daemon/subagent-installer.js +0 -166
  368. package/dist/heart/session-recall.js +0 -116
  369. package/dist/mind/associative-recall.js +0 -209
  370. package/dist/senses/bluebubbles-entry.js +0 -13
  371. package/dist/senses/bluebubbles.js +0 -1177
  372. package/dist/senses/debug-activity.js +0 -148
  373. package/subagents/README.md +0 -86
  374. package/subagents/work-doer.md +0 -237
  375. package/subagents/work-merger.md +0 -618
  376. package/subagents/work-planner.md +0 -390
  377. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  378. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  379. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  380. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  381. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  382. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  383. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  384. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  385. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  386. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  387. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  388. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  389. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  390. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  391. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  392. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.getTaskRoot = getTaskRoot;
37
37
  exports.ensureTaskLayout = ensureTaskLayout;
38
+ exports.tryExtractFrontmatter = tryExtractFrontmatter;
38
39
  exports.clearTaskScanCache = clearTaskScanCache;
39
40
  exports.scanTasks = scanTasks;
40
41
  const fs = __importStar(require("fs"));
@@ -59,30 +60,57 @@ function ensureTaskLayout(root = getTaskRoot()) {
59
60
  fs.mkdirSync(dir, { recursive: true });
60
61
  }
61
62
  }
62
- function walkMarkdownFiles(dir, acc) {
63
- if (!fs.existsSync(dir))
64
- return;
65
- const entries = fs.readdirSync(dir, { withFileTypes: true });
66
- for (const entry of entries) {
67
- if (entry.isDirectory()) {
68
- if (transitions_1.TASK_RESERVED_DIRECTORIES.includes(entry.name)) {
63
+ /**
64
+ * Attempt to extract frontmatter from markdown content.
65
+ * Returns parsed frontmatter dict or null. Never throws.
66
+ */
67
+ function tryExtractFrontmatter(content) {
68
+ (0, runtime_1.emitNervesEvent)({
69
+ event: "repertoire.frontmatter_extract_start",
70
+ component: "repertoire",
71
+ message: "attempting frontmatter extraction",
72
+ });
73
+ const lines = content.split(/\r?\n/);
74
+ if (lines[0]?.trim() !== "---") {
75
+ return null;
76
+ }
77
+ const closing = lines.findIndex((line, index) => index > 0 && line.trim() === "---");
78
+ if (closing === -1) {
79
+ return null;
80
+ }
81
+ const rawFrontmatter = lines.slice(1, closing).join("\n");
82
+ return (0, parser_1.parseFrontmatter)(rawFrontmatter);
83
+ }
84
+ const LEGACY_TASK_TYPES = ["one-shot", "ongoing", "habit"];
85
+ function buildFingerprint(root) {
86
+ (0, runtime_1.emitNervesEvent)({
87
+ event: "repertoire.fingerprint_build_start",
88
+ component: "repertoire",
89
+ message: "building scan fingerprint",
90
+ meta: { root },
91
+ });
92
+ const segments = [];
93
+ for (const collection of transitions_1.TASK_CANONICAL_COLLECTIONS) {
94
+ const collDir = path.join(root, collection);
95
+ const entries = fs.readdirSync(collDir, { withFileTypes: true });
96
+ for (const entry of entries) {
97
+ if (!entry.isFile() || !entry.name.endsWith(".md"))
69
98
  continue;
70
- }
71
- walkMarkdownFiles(path.join(dir, entry.name), acc);
72
- continue;
73
- }
74
- if (entry.name.endsWith(".md")) {
75
- acc.push(path.join(dir, entry.name));
99
+ const filePath = path.join(collDir, entry.name);
100
+ const stat = fs.statSync(filePath);
101
+ segments.push(`${filePath}:${stat.mtimeMs}:${stat.size}`);
76
102
  }
77
103
  }
78
- }
79
- function buildFingerprint(paths) {
80
- const segments = paths
81
- .map((filePath) => {
104
+ // Also include root-level md files for orphan detection fingerprinting
105
+ const rootEntries = fs.readdirSync(root, { withFileTypes: true });
106
+ for (const entry of rootEntries) {
107
+ if (!entry.isFile() || !entry.name.endsWith(".md"))
108
+ continue;
109
+ const filePath = path.join(root, entry.name);
82
110
  const stat = fs.statSync(filePath);
83
- return `${filePath}:${stat.mtimeMs}:${stat.size}`;
84
- })
85
- .sort();
111
+ segments.push(`${filePath}:${stat.mtimeMs}:${stat.size}`);
112
+ }
113
+ segments.sort();
86
114
  return segments.join("|");
87
115
  }
88
116
  function clearTaskScanCache() {
@@ -96,35 +124,164 @@ function scanTasks(root = getTaskRoot()) {
96
124
  meta: { root },
97
125
  });
98
126
  ensureTaskLayout(root);
99
- const files = [];
100
- for (const collection of transitions_1.TASK_CANONICAL_COLLECTIONS) {
101
- walkMarkdownFiles(path.join(root, collection), files);
102
- }
103
- const fingerprint = buildFingerprint(files);
127
+ const fingerprint = buildFingerprint(root);
104
128
  if (scanCache && scanCache.fingerprint === fingerprint) {
105
129
  return scanCache.index;
106
130
  }
107
131
  const tasks = [];
108
- const parseErrors = [];
109
- const invalidFilenames = [];
110
- for (const filePath of files) {
111
- const base = path.basename(filePath);
112
- if (!(0, transitions_1.isCanonicalTaskFilename)(base)) {
113
- invalidFilenames.push(filePath);
132
+ const issues = [];
133
+ // Scan each collection with flat directory reads (no recursion)
134
+ for (const collection of transitions_1.TASK_CANONICAL_COLLECTIONS) {
135
+ const collDir = path.join(root, collection);
136
+ const entries = fs.readdirSync(collDir, { withFileTypes: true });
137
+ const dirNames = new Set();
138
+ // Collect directory names for work dir detection
139
+ for (const entry of entries) {
140
+ if (entry.isDirectory()) {
141
+ dirNames.add(entry.name);
142
+ }
114
143
  }
115
- try {
144
+ // Process only .md files at collection root (flat, no recursion)
145
+ let supportDocCount = 0;
146
+ for (const entry of entries) {
147
+ if (!entry.isFile() || !entry.name.endsWith(".md"))
148
+ continue;
149
+ const filePath = path.join(collDir, entry.name);
116
150
  const content = fs.readFileSync(filePath, "utf-8");
117
- tasks.push((0, parser_1.parseTaskFile)(content, filePath));
151
+ // Step 1: Try to extract frontmatter
152
+ const frontmatter = tryExtractFrontmatter(content);
153
+ if (!frontmatter) {
154
+ // No frontmatter — not a task, count as support doc clutter
155
+ supportDocCount += 1;
156
+ continue;
157
+ }
158
+ // Step 2: Check kind: task
159
+ const isKindTask = frontmatter.kind === "task";
160
+ const fmType = typeof frontmatter.type === "string" ? frontmatter.type.trim().toLowerCase() : "";
161
+ const isLegacyTask = !isKindTask && LEGACY_TASK_TYPES.includes(fmType);
162
+ if (!isKindTask && !isLegacyTask) {
163
+ // Has frontmatter but not a task — skip silently
164
+ continue;
165
+ }
166
+ // Step 3: Emit migration issue for legacy task
167
+ if (isLegacyTask) {
168
+ const relPath = path.relative(root, filePath);
169
+ issues.push({
170
+ target: relPath,
171
+ code: "schema-missing-kind",
172
+ description: "Task card missing kind: task field",
173
+ fix: "Add kind: task to frontmatter",
174
+ confidence: "safe",
175
+ category: "migration",
176
+ });
177
+ }
178
+ // Step 4: Parse the task file
179
+ try {
180
+ const task = (0, parser_1.parseTaskFile)(content, filePath);
181
+ // Check filename canonicality
182
+ const base = path.basename(filePath);
183
+ if (!(0, transitions_1.isCanonicalTaskFilename)(base)) {
184
+ const relPath = path.relative(root, filePath);
185
+ issues.push({
186
+ target: relPath,
187
+ code: "filename-not-canonical",
188
+ description: `Non-canonical filename: ${base}`,
189
+ fix: `Rename to canonical format (YYYY-MM-DD-HHMM-slug.md)`,
190
+ confidence: "safe",
191
+ category: "migration",
192
+ });
193
+ }
194
+ // Work dir detection
195
+ const stem = base.replace(/\.md$/i, "");
196
+ if (dirNames.has(stem)) {
197
+ task.hasWorkDir = true;
198
+ const workDirPath = path.join(collDir, stem);
199
+ task.workDirFiles = fs.readdirSync(workDirPath).sort();
200
+ }
201
+ tasks.push(task);
202
+ }
203
+ catch (error) {
204
+ // Parse error on a file we identified as a task — real issue
205
+ const relPath = path.relative(root, filePath);
206
+ issues.push({
207
+ target: relPath,
208
+ code: "schema-invalid",
209
+ description: `Parse error: ${error instanceof Error ? error.message : String(error)}`,
210
+ fix: "Fix the task card schema (ensure required fields: type, status, etc.)",
211
+ confidence: "needs_review",
212
+ category: "live",
213
+ });
214
+ }
215
+ }
216
+ // Summarize non-task support docs at collection root as one migration issue
217
+ if (supportDocCount > 0) {
218
+ (0, runtime_1.emitNervesEvent)({
219
+ event: "repertoire.support_docs_detected",
220
+ component: "repertoire",
221
+ message: "non-task support documents at collection root",
222
+ meta: { collection, count: supportDocCount },
223
+ });
224
+ issues.push({
225
+ target: collection,
226
+ code: "org-collection-root-clutter",
227
+ description: `${supportDocCount} non-task file${supportDocCount === 1 ? "" : "s"} at ${collection}/ root (doing docs, planning docs, etc.)`,
228
+ fix: "Move support docs into same-stem work directories for their parent tasks",
229
+ confidence: "needs_review",
230
+ category: "migration",
231
+ });
232
+ }
233
+ }
234
+ // Orphan detection: root-level .md files outside any canonical collection
235
+ const rootEntries = fs.readdirSync(root, { withFileTypes: true });
236
+ const collectionSet = new Set(transitions_1.TASK_CANONICAL_COLLECTIONS);
237
+ for (const entry of rootEntries) {
238
+ if (!entry.isFile() || !entry.name.endsWith(".md"))
239
+ continue;
240
+ const filePath = path.join(root, entry.name);
241
+ const content = fs.readFileSync(filePath, "utf-8");
242
+ const frontmatter = tryExtractFrontmatter(content);
243
+ // Only flag as orphan if it has task-like frontmatter
244
+ if (!frontmatter)
245
+ continue;
246
+ const fmType = typeof frontmatter.type === "string" ? frontmatter.type.trim().toLowerCase() : "";
247
+ const hasTaskLikeContent = frontmatter.kind === "task" ||
248
+ LEGACY_TASK_TYPES.includes(fmType) ||
249
+ (typeof frontmatter.status === "string" && typeof frontmatter.title === "string");
250
+ if (hasTaskLikeContent) {
251
+ (0, runtime_1.emitNervesEvent)({
252
+ event: "repertoire.orphan_detected",
253
+ component: "repertoire",
254
+ message: "root-level orphan document detected",
255
+ meta: { filePath },
256
+ });
257
+ issues.push({
258
+ target: entry.name,
259
+ code: "org-root-level-doc",
260
+ description: `Root-level document outside any collection: ${entry.name}`,
261
+ fix: `Move to appropriate collection directory (${[...collectionSet].join(", ")})`,
262
+ confidence: "needs_review",
263
+ category: "migration",
264
+ });
118
265
  }
119
- catch (error) {
120
- parseErrors.push(`${filePath}: ${error instanceof Error ? error.message : String(error)}`);
266
+ }
267
+ // Populate derivedChildren from parent_task links
268
+ const stemToTask = new Map();
269
+ for (const task of tasks) {
270
+ stemToTask.set(task.stem, task);
271
+ }
272
+ for (const task of tasks) {
273
+ const parentStem = typeof task.frontmatter.parent_task === "string"
274
+ ? task.frontmatter.parent_task.trim()
275
+ : "";
276
+ if (parentStem && stemToTask.has(parentStem)) {
277
+ const parent = stemToTask.get(parentStem);
278
+ parent.derivedChildren.push(task.stem);
121
279
  }
122
280
  }
123
281
  const index = {
124
282
  root,
125
283
  tasks,
126
- invalidFilenames,
127
- parseErrors,
284
+ issues,
128
285
  fingerprint,
129
286
  };
130
287
  scanCache = { fingerprint, index };
@@ -1,50 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TASK_REQUIRED_TEMPLATE_FIELDS = exports.TASK_FILENAME_PATTERN = exports.TASK_RESERVED_DIRECTORIES = exports.TASK_TYPE_TO_COLLECTION = exports.TASK_CANONICAL_COLLECTIONS = exports.TASK_CANONICAL_TYPES = exports.TASK_STATUS_TRANSITIONS = exports.TASK_VALID_STATUSES = void 0;
3
+ exports.TASK_REQUIRED_TEMPLATE_FIELDS = exports.TASK_FILENAME_PATTERN = exports.TASK_RESERVED_DIRECTORIES = exports.TASK_TYPE_TO_COLLECTION = exports.TASK_CANONICAL_COLLECTIONS = exports.TASK_CANONICAL_TYPES = exports.validateTransition = exports.renderTaskTransitionLines = exports.normalizeTaskStatus = exports.isTaskStatus = exports.TASK_VALID_STATUSES = exports.TASK_STATUS_TRANSITIONS = void 0;
4
4
  exports.canonicalCollectionForTaskType = canonicalCollectionForTaskType;
5
5
  exports.normalizeTaskType = normalizeTaskType;
6
- exports.normalizeTaskStatus = normalizeTaskStatus;
7
6
  exports.isCanonicalTaskFilename = isCanonicalTaskFilename;
8
- exports.validateTransition = validateTransition;
9
- exports.renderTaskTransitionLines = renderTaskTransitionLines;
10
7
  const runtime_1 = require("../../nerves/runtime");
11
- exports.TASK_VALID_STATUSES = [
12
- "drafting",
13
- "processing",
14
- "validating",
15
- "collaborating",
16
- "paused",
17
- "blocked",
18
- "done",
19
- ];
20
- exports.TASK_STATUS_TRANSITIONS = {
21
- drafting: ["processing", "collaborating"],
22
- processing: ["validating", "paused", "blocked"],
23
- validating: ["done", "processing", "collaborating"],
24
- collaborating: ["processing", "validating", "paused"],
25
- paused: ["processing", "blocked"],
26
- blocked: ["processing", "paused"],
27
- done: [],
28
- };
8
+ var task_lifecycle_1 = require("../../arc/task-lifecycle");
9
+ Object.defineProperty(exports, "TASK_STATUS_TRANSITIONS", { enumerable: true, get: function () { return task_lifecycle_1.TASK_STATUS_TRANSITIONS; } });
10
+ Object.defineProperty(exports, "TASK_VALID_STATUSES", { enumerable: true, get: function () { return task_lifecycle_1.TASK_VALID_STATUSES; } });
11
+ Object.defineProperty(exports, "isTaskStatus", { enumerable: true, get: function () { return task_lifecycle_1.isTaskStatus; } });
12
+ Object.defineProperty(exports, "normalizeTaskStatus", { enumerable: true, get: function () { return task_lifecycle_1.normalizeTaskStatus; } });
13
+ Object.defineProperty(exports, "renderTaskTransitionLines", { enumerable: true, get: function () { return task_lifecycle_1.renderTaskTransitionLines; } });
14
+ Object.defineProperty(exports, "validateTransition", { enumerable: true, get: function () { return task_lifecycle_1.validateTransition; } });
29
15
  exports.TASK_CANONICAL_TYPES = [
30
16
  "one-shot",
31
17
  "ongoing",
32
- "habit",
33
18
  ];
34
19
  exports.TASK_CANONICAL_COLLECTIONS = [
35
20
  "one-shots",
36
21
  "ongoing",
37
- "habits",
38
22
  ];
39
23
  exports.TASK_TYPE_TO_COLLECTION = {
40
24
  "one-shot": "one-shots",
41
25
  ongoing: "ongoing",
42
- habit: "habits",
43
26
  };
44
27
  exports.TASK_RESERVED_DIRECTORIES = ["templates", ".trash", "archive"];
45
28
  exports.TASK_FILENAME_PATTERN = /^\d{4}-\d{2}-\d{2}-\d{4}-[a-z0-9][a-z0-9-]*\.md$/;
46
29
  exports.TASK_REQUIRED_TEMPLATE_FIELDS = {
47
30
  "one-shot": [
31
+ "kind",
48
32
  "type",
49
33
  "category",
50
34
  "title",
@@ -58,10 +42,10 @@ exports.TASK_REQUIRED_TEMPLATE_FIELDS = {
58
42
  "updated",
59
43
  "parent_task",
60
44
  "depends_on",
61
- "child_tasks",
62
45
  "artifacts",
63
46
  ],
64
47
  ongoing: [
48
+ "kind",
65
49
  "type",
66
50
  "category",
67
51
  "title",
@@ -73,22 +57,6 @@ exports.TASK_REQUIRED_TEMPLATE_FIELDS = {
73
57
  "lastRun",
74
58
  "created",
75
59
  "updated",
76
- "child_tasks",
77
- "artifacts",
78
- ],
79
- habit: [
80
- "type",
81
- "category",
82
- "title",
83
- "status",
84
- "validator",
85
- "requester",
86
- "cadence",
87
- "scheduledAt",
88
- "lastRun",
89
- "created",
90
- "updated",
91
- "child_tasks",
92
60
  "artifacts",
93
61
  ],
94
62
  };
@@ -96,6 +64,12 @@ function canonicalCollectionForTaskType(type) {
96
64
  return exports.TASK_TYPE_TO_COLLECTION[type];
97
65
  }
98
66
  function normalizeTaskType(value) {
67
+ (0, runtime_1.emitNervesEvent)({
68
+ event: "repertoire.task_type_normalize",
69
+ component: "repertoire",
70
+ message: "normalizing task type",
71
+ meta: { input: value ?? null },
72
+ });
99
73
  if (typeof value !== "string")
100
74
  return null;
101
75
  const normalized = value.trim().toLowerCase();
@@ -103,42 +77,6 @@ function normalizeTaskType(value) {
103
77
  ? normalized
104
78
  : null;
105
79
  }
106
- function normalizeTaskStatus(value) {
107
- if (typeof value !== "string")
108
- return null;
109
- const normalized = value.trim().toLowerCase();
110
- return exports.TASK_VALID_STATUSES.includes(normalized)
111
- ? normalized
112
- : null;
113
- }
114
80
  function isCanonicalTaskFilename(value) {
115
81
  return typeof value === "string" && exports.TASK_FILENAME_PATTERN.test(value);
116
82
  }
117
- function validateTransition(from, to) {
118
- (0, runtime_1.emitNervesEvent)({
119
- event: "mind.step_start",
120
- component: "mind",
121
- message: "validating task status transition",
122
- meta: { from, to },
123
- });
124
- if (from === to) {
125
- return { ok: true, from, to };
126
- }
127
- const allowed = exports.TASK_STATUS_TRANSITIONS[from];
128
- if (!allowed.includes(to)) {
129
- return {
130
- ok: false,
131
- from,
132
- to,
133
- reason: `invalid transition: ${from} -> ${to}`,
134
- };
135
- }
136
- return { ok: true, from, to };
137
- }
138
- function renderTaskTransitionLines() {
139
- return exports.TASK_VALID_STATUSES.map((from) => {
140
- const to = exports.TASK_STATUS_TRANSITIONS[from];
141
- const rendered = to.length > 0 ? to.map((next) => `\`${next}\``).join(", ") : "(terminal)";
142
- return `- \`${from}\` -> ${rendered}`;
143
- });
144
- }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.okToolResult = okToolResult;
4
+ exports.frictionToolResult = frictionToolResult;
5
+ const runtime_1 = require("../nerves/runtime");
6
+ function okToolResult(tool, data) {
7
+ (0, runtime_1.emitNervesEvent)({
8
+ component: "tools",
9
+ event: "tool.structured_ok",
10
+ message: "tool returned structured result",
11
+ meta: { tool },
12
+ });
13
+ return JSON.stringify({ ok: true, tool, data }, null, 2);
14
+ }
15
+ function frictionToolResult(tool, friction) {
16
+ (0, runtime_1.emitNervesEvent)({
17
+ level: "warn",
18
+ component: "tools",
19
+ event: "tool.structured_friction",
20
+ message: "tool returned structured result",
21
+ meta: {
22
+ tool,
23
+ kind: friction.kind,
24
+ recoverability: friction.recoverability,
25
+ signature: friction.signature,
26
+ },
27
+ });
28
+ return JSON.stringify({ ok: false, tool, friction }, null, 2);
29
+ }