@ouro.bot/cli 0.1.0-alpha.44 → 0.1.0-alpha.441

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 (339) hide show
  1. package/README.md +127 -19
  2. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +3 -2
  3. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  4. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  5. package/changelog.json +2789 -0
  6. package/dist/arc/attention-types.js +8 -0
  7. package/dist/arc/cares.js +140 -0
  8. package/dist/arc/episodes.js +117 -0
  9. package/dist/arc/intentions.js +133 -0
  10. package/dist/arc/json-store.js +117 -0
  11. package/dist/arc/obligations.js +237 -0
  12. package/dist/arc/packets.js +193 -0
  13. package/dist/arc/presence.js +185 -0
  14. package/dist/arc/task-lifecycle.js +65 -0
  15. package/dist/heart/active-work.js +832 -0
  16. package/dist/heart/agent-entry.js +58 -3
  17. package/dist/heart/attachments/image-normalize.js +194 -0
  18. package/dist/heart/attachments/materialize.js +97 -0
  19. package/dist/heart/attachments/originals.js +88 -0
  20. package/dist/heart/attachments/render.js +29 -0
  21. package/dist/heart/attachments/sources/adapter.js +2 -0
  22. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  23. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  24. package/dist/heart/attachments/sources/index.js +16 -0
  25. package/dist/heart/attachments/store.js +103 -0
  26. package/dist/heart/attachments/types.js +93 -0
  27. package/dist/heart/auth/auth-flow.js +426 -0
  28. package/dist/heart/bridges/manager.js +358 -0
  29. package/dist/heart/bridges/state-machine.js +135 -0
  30. package/dist/heart/bridges/store.js +123 -0
  31. package/dist/heart/bundle-state.js +168 -0
  32. package/dist/heart/commitments.js +111 -0
  33. package/dist/heart/config-registry.js +304 -0
  34. package/dist/heart/config.js +110 -128
  35. package/dist/heart/core.js +745 -227
  36. package/dist/heart/cross-chat-delivery.js +131 -0
  37. package/dist/heart/daemon/agent-config-check.js +439 -0
  38. package/dist/heart/daemon/agent-discovery.js +79 -3
  39. package/dist/heart/daemon/agent-service.js +360 -0
  40. package/dist/heart/daemon/agentic-repair.js +214 -0
  41. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  42. package/dist/heart/daemon/cadence.js +70 -0
  43. package/dist/heart/daemon/cli-defaults.js +626 -0
  44. package/dist/heart/daemon/cli-exec.js +5646 -0
  45. package/dist/heart/daemon/cli-help.js +428 -0
  46. package/dist/heart/daemon/cli-parse.js +1156 -0
  47. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  48. package/dist/heart/daemon/cli-render.js +561 -0
  49. package/dist/heart/daemon/cli-types.js +8 -0
  50. package/dist/heart/daemon/connect-bay.js +457 -0
  51. package/dist/heart/daemon/daemon-cli.js +28 -1582
  52. package/dist/heart/daemon/daemon-entry.js +356 -3
  53. package/dist/heart/daemon/daemon-health.js +141 -0
  54. package/dist/heart/daemon/daemon-runtime-sync.js +175 -12
  55. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  56. package/dist/heart/daemon/daemon.js +684 -58
  57. package/dist/heart/daemon/doctor-types.js +8 -0
  58. package/dist/heart/daemon/doctor.js +427 -0
  59. package/dist/heart/daemon/health-monitor.js +79 -1
  60. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  61. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  62. package/dist/heart/daemon/http-health-probe.js +80 -0
  63. package/dist/heart/daemon/human-command-screens.js +236 -0
  64. package/dist/heart/daemon/human-readiness.js +114 -0
  65. package/dist/heart/daemon/inner-status.js +89 -0
  66. package/dist/heart/daemon/interactive-repair.js +307 -0
  67. package/dist/heart/daemon/launchd.js +46 -9
  68. package/dist/heart/daemon/log-tailer.js +82 -12
  69. package/dist/heart/daemon/logs-prune.js +105 -0
  70. package/dist/heart/daemon/message-router.js +2 -2
  71. package/dist/heart/daemon/os-cron-deps.js +134 -0
  72. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  73. package/dist/heart/daemon/ouro-entry.js +3 -1
  74. package/dist/heart/daemon/process-manager.js +214 -0
  75. package/dist/heart/daemon/provider-discovery.js +137 -0
  76. package/dist/heart/daemon/provider-ping-progress.js +76 -0
  77. package/dist/heart/daemon/pulse.js +475 -0
  78. package/dist/heart/daemon/readiness-repair.js +365 -0
  79. package/dist/heart/daemon/run-hooks.js +2 -0
  80. package/dist/heart/daemon/runtime-logging.js +67 -16
  81. package/dist/heart/daemon/runtime-metadata.js +73 -0
  82. package/dist/heart/daemon/runtime-mode.js +67 -0
  83. package/dist/heart/daemon/safe-mode.js +161 -0
  84. package/dist/heart/daemon/sense-manager.js +145 -32
  85. package/dist/heart/daemon/session-id-resolver.js +131 -0
  86. package/dist/heart/daemon/skill-management-installer.js +94 -0
  87. package/dist/heart/daemon/socket-client.js +307 -0
  88. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  89. package/dist/heart/daemon/startup-tui.js +272 -0
  90. package/dist/heart/daemon/task-scheduler.js +3 -25
  91. package/dist/heart/daemon/terminal-ui.js +224 -0
  92. package/dist/heart/daemon/thoughts.js +510 -0
  93. package/dist/heart/daemon/up-progress.js +313 -0
  94. package/dist/heart/delegation.js +62 -0
  95. package/dist/heart/habits/habit-migration.js +189 -0
  96. package/dist/heart/habits/habit-parser.js +140 -0
  97. package/dist/heart/habits/habit-runtime-state.js +100 -0
  98. package/dist/heart/habits/habit-scheduler.js +372 -0
  99. package/dist/heart/{daemon → hatch}/hatch-flow.js +52 -117
  100. package/dist/heart/{daemon → hatch}/hatch-specialist.js +3 -3
  101. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  102. package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
  103. package/dist/heart/identity.js +197 -65
  104. package/dist/heart/kept-notes.js +357 -0
  105. package/dist/heart/kicks.js +1 -1
  106. package/dist/heart/machine-identity.js +161 -0
  107. package/dist/heart/mcp/mcp-server.js +653 -0
  108. package/dist/heart/migrate-config.js +100 -0
  109. package/dist/heart/model-capabilities.js +59 -0
  110. package/dist/heart/outlook/outlook-http-hooks.js +64 -0
  111. package/dist/heart/outlook/outlook-http-response.js +7 -0
  112. package/dist/heart/outlook/outlook-http-routes.js +232 -0
  113. package/dist/heart/outlook/outlook-http-static.js +99 -0
  114. package/dist/heart/outlook/outlook-http-transport.js +116 -0
  115. package/dist/heart/outlook/outlook-http.js +99 -0
  116. package/dist/heart/outlook/outlook-read.js +28 -0
  117. package/dist/heart/outlook/outlook-types.js +27 -0
  118. package/dist/heart/outlook/outlook-view.js +195 -0
  119. package/dist/heart/outlook/readers/agent-machine.js +359 -0
  120. package/dist/heart/outlook/readers/continuity-readers.js +332 -0
  121. package/dist/heart/outlook/readers/runtime-readers.js +644 -0
  122. package/dist/heart/outlook/readers/sessions.js +232 -0
  123. package/dist/heart/outlook/readers/shared.js +111 -0
  124. package/dist/heart/platform.js +81 -0
  125. package/dist/heart/progress-story.js +42 -0
  126. package/dist/heart/provider-attempt.js +134 -0
  127. package/dist/heart/provider-binding-resolver.js +239 -0
  128. package/dist/heart/provider-credentials.js +400 -0
  129. package/dist/heart/provider-failover.js +266 -0
  130. package/dist/heart/provider-models.js +81 -0
  131. package/dist/heart/provider-ping.js +239 -0
  132. package/dist/heart/provider-state.js +216 -0
  133. package/dist/heart/provider-visibility.js +186 -0
  134. package/dist/heart/providers/anthropic-token.js +131 -0
  135. package/dist/heart/providers/anthropic.js +193 -55
  136. package/dist/heart/providers/azure.js +103 -12
  137. package/dist/heart/providers/error-classification.js +63 -0
  138. package/dist/heart/providers/github-copilot.js +145 -0
  139. package/dist/heart/providers/minimax-vlm.js +189 -0
  140. package/dist/heart/providers/minimax.js +29 -7
  141. package/dist/heart/providers/openai-codex.js +62 -38
  142. package/dist/heart/runtime-capability-check.js +170 -0
  143. package/dist/heart/runtime-credentials.js +260 -0
  144. package/dist/heart/sense-truth.js +3 -0
  145. package/dist/heart/session-activity.js +190 -0
  146. package/dist/heart/session-events.js +855 -0
  147. package/dist/heart/session-transcript.js +167 -0
  148. package/dist/heart/start-of-turn-packet.js +345 -0
  149. package/dist/heart/streaming.js +36 -27
  150. package/dist/heart/sync.js +332 -0
  151. package/dist/heart/target-resolution.js +127 -0
  152. package/dist/heart/tempo.js +93 -0
  153. package/dist/heart/temporal-view.js +41 -0
  154. package/dist/heart/tool-activity-callbacks.js +36 -0
  155. package/dist/heart/tool-description.js +135 -0
  156. package/dist/heart/tool-friction.js +55 -0
  157. package/dist/heart/tool-loop.js +200 -0
  158. package/dist/heart/turn-context.js +351 -0
  159. package/dist/heart/turn-coordinator.js +28 -0
  160. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +1 -1
  161. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  162. package/dist/heart/versioning/ouro-path-installer.js +425 -0
  163. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  164. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  165. package/dist/heart/{daemon → versioning}/update-checker.js +5 -1
  166. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  167. package/dist/mind/bundle-manifest.js +7 -1
  168. package/dist/mind/context.js +132 -93
  169. package/dist/mind/diary-integrity.js +60 -0
  170. package/dist/mind/{memory.js → diary.js} +74 -93
  171. package/dist/mind/embedding-provider.js +60 -0
  172. package/dist/mind/file-state.js +179 -0
  173. package/dist/mind/friends/channel.js +21 -0
  174. package/dist/mind/friends/group-context.js +144 -0
  175. package/dist/mind/friends/resolver.js +38 -1
  176. package/dist/mind/friends/store-file.js +39 -3
  177. package/dist/mind/friends/trust-explanation.js +74 -0
  178. package/dist/mind/friends/types.js +1 -1
  179. package/dist/mind/journal-index.js +161 -0
  180. package/dist/mind/note-search.js +268 -0
  181. package/dist/mind/obligation-steering.js +221 -0
  182. package/dist/mind/pending.js +66 -7
  183. package/dist/mind/prompt-refresh.js +3 -2
  184. package/dist/mind/prompt.js +947 -165
  185. package/dist/mind/provenance-trust.js +26 -0
  186. package/dist/mind/scrutiny.js +173 -0
  187. package/dist/nerves/cli-logging.js +7 -1
  188. package/dist/nerves/coverage/audit-rules.js +15 -6
  189. package/dist/nerves/coverage/audit.js +28 -2
  190. package/dist/nerves/coverage/cli.js +1 -1
  191. package/dist/nerves/coverage/contract.js +5 -5
  192. package/dist/nerves/coverage/file-completeness.js +83 -5
  193. package/dist/nerves/coverage/run-artifacts.js +1 -1
  194. package/dist/nerves/event-buffer.js +111 -0
  195. package/dist/nerves/index.js +224 -4
  196. package/dist/nerves/observation.js +20 -0
  197. package/dist/nerves/redact.js +79 -0
  198. package/dist/nerves/runtime.js +5 -1
  199. package/dist/outlook-ui/assets/index-BAcU08c-.css +1 -0
  200. package/dist/outlook-ui/assets/index-D7l3l4vY.js +61 -0
  201. package/dist/outlook-ui/index.html +15 -0
  202. package/dist/repertoire/ado-client.js +15 -56
  203. package/dist/repertoire/ado-semantic.js +11 -10
  204. package/dist/repertoire/api-client.js +97 -0
  205. package/dist/repertoire/bitwarden-store.js +733 -0
  206. package/dist/repertoire/bundle-templates.js +72 -0
  207. package/dist/repertoire/bw-installer.js +180 -0
  208. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  209. package/dist/repertoire/coding/context-pack.js +330 -0
  210. package/dist/repertoire/coding/feedback.js +197 -30
  211. package/dist/repertoire/coding/manager.js +158 -9
  212. package/dist/repertoire/coding/spawner.js +55 -9
  213. package/dist/repertoire/coding/tools.js +170 -7
  214. package/dist/repertoire/commerce-errors.js +109 -0
  215. package/dist/repertoire/commerce-self-test.js +156 -0
  216. package/dist/repertoire/credential-access.js +111 -0
  217. package/dist/repertoire/duffel-client.js +185 -0
  218. package/dist/repertoire/github-client.js +14 -55
  219. package/dist/repertoire/graph-client.js +11 -52
  220. package/dist/repertoire/guardrails.js +371 -0
  221. package/dist/repertoire/mcp-client.js +255 -0
  222. package/dist/repertoire/mcp-manager.js +305 -0
  223. package/dist/repertoire/mcp-tools.js +63 -0
  224. package/dist/repertoire/shell-sessions.js +133 -0
  225. package/dist/repertoire/skills.js +15 -24
  226. package/dist/repertoire/stripe-client.js +131 -0
  227. package/dist/repertoire/tasks/board.js +43 -5
  228. package/dist/repertoire/tasks/fix.js +182 -0
  229. package/dist/repertoire/tasks/index.js +37 -4
  230. package/dist/repertoire/tasks/lifecycle.js +2 -2
  231. package/dist/repertoire/tasks/parser.js +3 -2
  232. package/dist/repertoire/tasks/scanner.js +194 -37
  233. package/dist/repertoire/tasks/transitions.js +16 -78
  234. package/dist/repertoire/tool-results.js +29 -0
  235. package/dist/repertoire/tools-attachments.js +317 -0
  236. package/dist/repertoire/tools-base.js +42 -690
  237. package/dist/repertoire/tools-bluebubbles.js +1 -0
  238. package/dist/repertoire/tools-bridge.js +141 -0
  239. package/dist/repertoire/tools-bundle.js +984 -0
  240. package/dist/repertoire/tools-config.js +185 -0
  241. package/dist/repertoire/tools-continuity.js +248 -0
  242. package/dist/repertoire/tools-credential.js +361 -0
  243. package/dist/repertoire/tools-files.js +342 -0
  244. package/dist/repertoire/tools-flight.js +224 -0
  245. package/dist/repertoire/tools-flow.js +105 -0
  246. package/dist/repertoire/tools-github.js +1 -7
  247. package/dist/repertoire/tools-notes.js +376 -0
  248. package/dist/repertoire/tools-session.js +739 -0
  249. package/dist/repertoire/tools-shell.js +120 -0
  250. package/dist/repertoire/tools-stripe.js +180 -0
  251. package/dist/repertoire/tools-surface.js +243 -0
  252. package/dist/repertoire/tools-teams.js +9 -39
  253. package/dist/repertoire/tools-travel.js +125 -0
  254. package/dist/repertoire/tools-user-profile.js +144 -0
  255. package/dist/repertoire/tools-vault.js +40 -0
  256. package/dist/repertoire/tools.js +144 -113
  257. package/dist/repertoire/travel-api-client.js +360 -0
  258. package/dist/repertoire/user-profile.js +131 -0
  259. package/dist/repertoire/vault-setup.js +246 -0
  260. package/dist/repertoire/vault-unlock.js +561 -0
  261. package/dist/scripts/claude-code-hook.js +41 -0
  262. package/dist/scripts/claude-code-stop-hook.js +47 -0
  263. package/dist/senses/attention-queue.js +116 -0
  264. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  265. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  266. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +260 -9
  267. package/dist/senses/bluebubbles/entry.js +73 -0
  268. package/dist/senses/bluebubbles/inbound-log.js +113 -0
  269. package/dist/senses/bluebubbles/index.js +1620 -0
  270. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
  271. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  272. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +45 -3
  273. package/dist/senses/bluebubbles/replay.js +129 -0
  274. package/dist/senses/bluebubbles/runtime-state.js +109 -0
  275. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  276. package/dist/senses/cli/bracketed-paste.js +82 -0
  277. package/dist/senses/cli/image-paste.js +287 -0
  278. package/dist/senses/cli/image-ref-navigation.js +75 -0
  279. package/dist/senses/cli/ink-app.js +156 -0
  280. package/dist/senses/cli/inline-diff.js +64 -0
  281. package/dist/senses/cli/input-keys.js +174 -0
  282. package/dist/senses/cli/kill-ring.js +86 -0
  283. package/dist/senses/cli/message-list.js +51 -0
  284. package/dist/senses/cli/ouro-tui.js +605 -0
  285. package/dist/senses/cli/spinner-imperative.js +135 -0
  286. package/dist/senses/cli/spinner.js +101 -0
  287. package/dist/senses/cli/status-line.js +60 -0
  288. package/dist/senses/cli/streaming-markdown.js +526 -0
  289. package/dist/senses/cli/tool-display.js +83 -0
  290. package/dist/senses/cli/tool-render.js +85 -0
  291. package/dist/senses/cli/tui-store.js +240 -0
  292. package/dist/senses/cli/virtual-list.js +35 -0
  293. package/dist/senses/cli-entry.js +60 -8
  294. package/dist/senses/cli-layout.js +187 -0
  295. package/dist/senses/cli.js +516 -211
  296. package/dist/senses/commands.js +66 -3
  297. package/dist/senses/habit-turn-message.js +108 -0
  298. package/dist/senses/inner-dialog-worker.js +102 -19
  299. package/dist/senses/inner-dialog.js +597 -95
  300. package/dist/senses/pipeline.js +533 -72
  301. package/dist/senses/proactive-content-guard.js +51 -0
  302. package/dist/senses/shared-turn.js +205 -0
  303. package/dist/senses/surface-tool.js +68 -0
  304. package/dist/senses/teams-entry.js +60 -8
  305. package/dist/senses/teams.js +413 -163
  306. package/dist/senses/trust-gate.js +5 -5
  307. package/package.json +32 -7
  308. package/skills/agent-commerce.md +106 -0
  309. package/skills/browser-navigation.md +117 -0
  310. package/skills/commerce-setup-guide.md +116 -0
  311. package/skills/commerce-setup.md +84 -0
  312. package/skills/configure-dev-tools.md +101 -0
  313. package/skills/travel-planning.md +138 -0
  314. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  315. package/dist/heart/daemon/subagent-installer.js +0 -166
  316. package/dist/mind/associative-recall.js +0 -209
  317. package/dist/senses/bluebubbles-entry.js +0 -11
  318. package/dist/senses/bluebubbles.js +0 -854
  319. package/dist/senses/debug-activity.js +0 -127
  320. package/subagents/README.md +0 -86
  321. package/subagents/work-doer.md +0 -235
  322. package/subagents/work-merger.md +0 -618
  323. package/subagents/work-planner.md +0 -382
  324. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  325. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  326. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  327. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  328. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  329. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  330. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  331. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  332. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  333. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  334. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  335. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  336. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  337. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  338. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  339. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -1,127 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createDebugActivityController = createDebugActivityController;
4
- const format_1 = require("../mind/format");
5
- const phrases_1 = require("../mind/phrases");
6
- const runtime_1 = require("../nerves/runtime");
7
- function createDebugActivityController(options) {
8
- let queue = Promise.resolve();
9
- let statusMessageGuid;
10
- let typingActive = false;
11
- let hadToolRun = false;
12
- let followupShown = false;
13
- let lastPhrase = "";
14
- function reportTransportError(operation, error) {
15
- (0, runtime_1.emitNervesEvent)({
16
- level: "warn",
17
- component: "senses",
18
- event: "senses.debug_activity_transport_error",
19
- message: "debug activity transport failed",
20
- meta: {
21
- operation,
22
- reason: error instanceof Error ? error.message : String(error),
23
- },
24
- });
25
- options.onTransportError?.(operation, error);
26
- }
27
- function enqueue(operation, task) {
28
- queue = queue
29
- .then(task)
30
- .catch((error) => {
31
- reportTransportError(operation, error);
32
- });
33
- }
34
- function nextPhrase(pool) {
35
- const phrase = (0, phrases_1.pickPhrase)(pool, lastPhrase);
36
- lastPhrase = phrase;
37
- return phrase;
38
- }
39
- function startTypingNow() {
40
- if (typingActive) {
41
- return;
42
- }
43
- typingActive = true;
44
- enqueue("typing_start", async () => {
45
- await options.transport.setTyping(true);
46
- });
47
- }
48
- function setStatus(text) {
49
- (0, runtime_1.emitNervesEvent)({
50
- component: "senses",
51
- event: "senses.debug_activity_update",
52
- message: "debug activity status updated",
53
- meta: {
54
- hasStatusGuid: Boolean(statusMessageGuid),
55
- textLength: text.length,
56
- },
57
- });
58
- const shouldStartTyping = !typingActive;
59
- if (shouldStartTyping) {
60
- typingActive = true;
61
- }
62
- enqueue("status_update", async () => {
63
- if (statusMessageGuid) {
64
- await options.transport.editStatus(statusMessageGuid, text);
65
- }
66
- else {
67
- statusMessageGuid = await options.transport.sendStatus(text);
68
- }
69
- if (shouldStartTyping) {
70
- await options.transport.setTyping(true);
71
- }
72
- });
73
- }
74
- return {
75
- onModelStart() {
76
- const pool = hadToolRun ? options.followupPhrases : options.thinkingPhrases;
77
- if (options.startTypingOnModelStart) {
78
- startTypingNow();
79
- }
80
- if (options.suppressInitialModelStatus && !statusMessageGuid && !hadToolRun) {
81
- nextPhrase(pool);
82
- return;
83
- }
84
- setStatus(`${nextPhrase(pool)}...`);
85
- },
86
- onToolStart(name, args) {
87
- hadToolRun = true;
88
- followupShown = false;
89
- const argSummary = Object.values(args).join(", ");
90
- const detail = argSummary ? ` (${argSummary})` : "";
91
- setStatus(`running ${name}${detail}...`);
92
- },
93
- onToolEnd(name, summary, success) {
94
- hadToolRun = true;
95
- followupShown = false;
96
- setStatus((0, format_1.formatToolResult)(name, summary, success));
97
- },
98
- onTextChunk(text) {
99
- if (!text || !hadToolRun || followupShown) {
100
- return;
101
- }
102
- followupShown = true;
103
- if (options.suppressFollowupPhraseStatus) {
104
- return;
105
- }
106
- setStatus(`${nextPhrase(options.followupPhrases)}...`);
107
- },
108
- onError(error) {
109
- setStatus((0, format_1.formatError)(error));
110
- this.finish();
111
- },
112
- async drain() {
113
- await queue;
114
- },
115
- async finish() {
116
- if (!typingActive) {
117
- await queue;
118
- return;
119
- }
120
- typingActive = false;
121
- enqueue("typing_stop", async () => {
122
- await options.transport.setTyping(false);
123
- });
124
- await queue;
125
- },
126
- };
127
- }
@@ -1,86 +0,0 @@
1
- # Workflow Helpers
2
-
3
- These files are the source-of-truth workflow helpers for:
4
-
5
- - `work-planner`
6
- - `work-doer`
7
- - `work-merger`
8
-
9
- They are written to stay generic enough for different agent shells, while following this repo’s local rules through `AGENTS.md`.
10
-
11
- ## What They Do
12
-
13
- - `work-planner.md`
14
- Creates and refines planning docs, then converts approved plans into doing docs.
15
- - `work-doer.md`
16
- Executes approved doing docs unit by unit with strict validation discipline.
17
- - `work-merger.md`
18
- Syncs with `main`, resolves conflicts, creates the PR, handles CI, and merges.
19
-
20
- ## Important Repo-Specific Truth
21
-
22
- These helpers do not hardcode task-doc paths. They are expected to read project instructions to discover them.
23
-
24
- In this repo, that means:
25
-
26
- - task docs live in `~/AgentBundles/<agent>.ouro/tasks/one-shots/`
27
- - not inside the repo
28
-
29
- ## Installing For Claude Code
30
-
31
- ```bash
32
- mkdir -p ~/.claude/agents
33
- cp subagents/*.md ~/.claude/agents/
34
- ```
35
-
36
- ## Installing For Codex-Style Skills
37
-
38
- ```bash
39
- mkdir -p ~/.agents/skills/work-planner ~/.agents/skills/work-doer ~/.agents/skills/work-merger
40
-
41
- # Hard-link to keep one source of truth
42
- ln -f "$(pwd)/subagents/work-planner.md" ~/.agents/skills/work-planner/SKILL.md
43
- ln -f "$(pwd)/subagents/work-doer.md" ~/.agents/skills/work-doer/SKILL.md
44
- ln -f "$(pwd)/subagents/work-merger.md" ~/.agents/skills/work-merger/SKILL.md
45
- ```
46
-
47
- **Important:** For Codex/OpenAI skill installs, use the generic `~/.agents/skills` root and use hard links (`ln`, not `ln -s`). Installing the same skill into both `~/.agents/skills` and `~/.codex/skills` can produce duplicate entries in Codex. Symlinked `SKILL.md` files may load but are not advertised reliably by Codex surfaces. Hard-links break when editors save by replacing the file (new inode). After editing any `subagents/*.md` file, re-run the `ln -f` command for that file to restore the link. You can verify with `stat -f '%i'` — both files should share the same inode.
48
-
49
- Optional UI metadata:
50
-
51
- ```bash
52
- mkdir -p ~/.agents/skills/work-planner/agents ~/.agents/skills/work-doer/agents ~/.agents/skills/work-merger/agents
53
- cat > ~/.agents/skills/work-planner/agents/openai.yaml << 'EOF'
54
- interface:
55
- display_name: "Work Planner"
56
- short_description: "Create and gate planning/doing task docs"
57
- default_prompt: "Use $work-planner to create or update a planning doc, then stop at NEEDS_REVIEW."
58
- EOF
59
- cat > ~/.agents/skills/work-doer/agents/openai.yaml << 'EOF'
60
- interface:
61
- display_name: "Work Doer"
62
- short_description: "Execute approved doing docs with strict TDD"
63
- default_prompt: "Use $work-doer to execute an approved doing doc unit by unit."
64
- EOF
65
- cat > ~/.agents/skills/work-merger/agents/openai.yaml << 'EOF'
66
- interface:
67
- display_name: "Work Merger"
68
- short_description: "Merge feature branch into main via PR after work-doer completes"
69
- default_prompt: "Use $work-merger to merge the current feature branch into main."
70
- EOF
71
- ```
72
-
73
- ## Keeping Local Skill Copies Fresh
74
-
75
- After editing any `subagents/*.md` file, resync your local installed copies.
76
-
77
- The repo workflow usually checks this with diffs like:
78
-
79
- ```bash
80
- diff -q ~/.agents/skills/work-planner/SKILL.md subagents/work-planner.md
81
- diff -q ~/.agents/skills/work-doer/SKILL.md subagents/work-doer.md
82
- ```
83
-
84
- ## Restart Behavior
85
-
86
- Some tools only discover new skills on startup. If a shell/app does not see updates immediately, restart that shell/app after syncing.
@@ -1,235 +0,0 @@
1
- ---
2
- name: work-doer
3
- description: Executes doing.md units sequentially with strict TDD. Reads the doing doc, works through each unit, commits after each. Use after planning is complete and doing.md exists.
4
- model: opus
5
- ---
6
-
7
- You are a task executor. Read a doing.md file and execute all units sequentially until complete or blocked.
8
-
9
- ## On Startup
10
-
11
- 1. **Find task-doc directory**: Read project instructions (for example `AGENTS.md`) to determine where planning/doing docs live for this repo
12
- 2. **Find doing doc**: Look for `YYYY-MM-DD-HHMM-doing-*.md` in that project-defined task-doc directory
13
- 3. If multiple found, ask which one
14
- 4. If none found, ask user for location
15
- 5. **Check execution_mode**: Read the doing doc's `Execution Mode` field
16
- 6. **Verify artifacts directory exists**: `{task-name}/` next to `{task-name}.md`
17
- - If missing, create it: `mkdir {task-name}`
18
- 7. **Detect resume vs fresh start:**
19
- - Count completed units (✅) vs total units
20
- - Check git status for uncommitted changes
21
-
22
- 8. **Announce status clearly:**
23
-
24
- **If fresh start (0 units complete):**
25
- ```
26
- found: YYYY-MM-DD-HHMM-doing-{name}.md
27
- execution_mode: [pending|spawn|direct]
28
- artifacts: ./{task-name}/
29
- status: fresh start
30
- units: 0/X complete
31
- starting Unit 0...
32
- ```
33
-
34
- **If resuming (some units complete):**
35
- ```
36
- found: YYYY-MM-DD-HHMM-doing-{name}.md
37
- execution_mode: [pending|spawn|direct]
38
- status: RESUMING
39
- units: Y/X complete (✅ Unit 0, 1a, 1b...)
40
- uncommitted changes: [yes/no]
41
- resuming from Unit Z...
42
- ```
43
-
44
- **If uncommitted changes detected:**
45
- ```
46
- ⚠️ uncommitted changes found
47
- recommend: commit or stash before continuing
48
- proceed anyway? (y/n)
49
- ```
50
-
51
- ---
52
-
53
- ## Timestamp & Commit Pattern
54
-
55
- **All timestamps come from git commits for audit trail.**
56
-
57
- To get timestamp for progress log entries:
58
- ```bash
59
- git log -1 --format="%Y-%m-%d %H:%M"
60
- ```
61
-
62
- After any edit to doing doc:
63
- 1. Stage: `git add doing-*.md`
64
- 2. Commit: `git commit -m "docs(doing): <what changed>"`
65
- 3. Get timestamp from git log
66
- 4. Use that timestamp in progress log entry
67
-
68
- ---
69
-
70
- ## Execution Loop
71
-
72
- For each unit in order:
73
-
74
- ### 1. Announce
75
- ```
76
- starting Unit Xa: [name]
77
- ```
78
-
79
- ### 2. Execute (TDD strictly enforced)
80
-
81
- **General execution rules:**
82
- - Save all outputs, logs, and data to `{task-name}/` artifacts directory
83
- - If execution_mode is `pending`, wait for user approval before starting each unit
84
- - If execution_mode is `spawn`, spawn a sub-agent for each unit
85
- - If execution_mode is `direct`, proceed immediately
86
-
87
- **For test units (Xa):**
88
- 1. Write failing tests for the feature
89
- 2. Run tests — **must FAIL (red)**
90
- 3. If tests pass immediately, something is wrong — investigate
91
- 4. Commit: `git commit -m "test(scope): Unit Xa - [description]"`
92
- 5. Push
93
-
94
- **For implementation units (Xb):**
95
- 1. Write minimal code to make tests pass
96
- 2. **Do NOT modify tests** — implementation must satisfy existing tests
97
- 3. Run tests — **must PASS (green)**
98
- 4. **Run the build** (e.g. `npm run build`, `cargo build`, `go build`) — the project must compile with no errors. Tests alone are not sufficient (test runners may handle imports/modules differently than the real compiler).
99
- 5. No warnings allowed
100
- 6. Commit: `git commit -m "feat(scope): Unit Xb - [description]"`
101
- 7. Push
102
-
103
- **For verify/refactor units (Xc):**
104
- 1. Run coverage report
105
- 2. **Must be 100% on new code** — if not, add tests
106
- 3. Check edge cases: null, empty, boundary values
107
- 4. Check all error paths tested
108
- 5. Refactor if needed, keep tests green
109
- 6. **Run the build** — verify the project compiles clean
110
- 7. Commit: `git commit -m "refactor(scope): Unit Xc - [description]"` (if changes made)
111
- 8. Push
112
-
113
- **For non-coding units:**
114
- 1. Complete work as described
115
- 2. Produce specified output
116
- 3. Verify acceptance criteria
117
- 4. Commit relevant files
118
- 5. Push
119
-
120
- ### 3. Update doing.md
121
- - Change unit status: `⬜` → `✅`
122
- - Update `Completion Criteria` checkboxes that are now satisfied by this unit's evidence
123
- - Commit: `git commit -m "docs(doing): complete Unit Xa"`
124
- - Get timestamp: `git log -1 --format="%Y-%m-%d %H:%M"`
125
- - Add progress log entry with that timestamp:
126
- ```
127
- - 2026-02-03 14:25 Unit Xa complete: [brief summary]
128
- ```
129
-
130
- ### 4. Context management
131
- - Run `/compact` between units if context growing large
132
- - Each unit should be independent
133
- - Re-read files if you need prior context
134
-
135
- ### 5. Continue to next unit
136
-
137
- ---
138
-
139
- ## Code Coverage Requirements
140
-
141
- **MANDATORY: 100% coverage on all new code.**
142
-
143
- Before marking any implementation unit complete:
144
- 1. Run coverage report
145
- 2. Verify 100% on new/modified files
146
- 3. No `[ExcludeFromCodeCoverage]` or equivalent on new code
147
- 4. All branches covered (if/else, switch, try/catch)
148
- 5. All error paths have tests
149
- 6. If coverage < 100%, add tests before proceeding
150
-
151
- ---
152
-
153
- ## TDD Requirements
154
-
155
- **Strict TDD — no exceptions:**
156
-
157
- 1. **Tests first**: Write failing tests BEFORE any implementation
158
- 2. **Red**: Run tests, confirm they FAIL
159
- 3. **Green**: Write minimal code to pass
160
- 4. **Refactor**: Clean up, tests stay green
161
- 5. **Never skip**: No implementation without failing test first
162
- 6. **Never modify tests to pass**: Implementation satisfies tests, not vice versa
163
-
164
- ---
165
-
166
- ## Blocker Handling
167
-
168
- **For simple fixes or test failures:**
169
- 1. **Spawn sub-agent immediately** — don't ask, just do it
170
- 2. Sub-agent analyzes error, fixes issue, commits, pushes
171
- 3. Sub-agent reports back when done
172
- 4. Continue with next unit
173
-
174
- **For actual blockers (requirements unclear, external dependency, design decision needed):**
175
- 1. Mark unit as `❌ Blocked` in doing.md
176
- 2. Commit: `git commit -m "docs(doing): Unit Xa blocked"`
177
- 3. Get timestamp from git
178
- 4. Add progress log entry with error details
179
- 5. Output:
180
- ```
181
- ❌ blocked on Unit Xa
182
- error: [description]
183
- tried: [what you attempted]
184
- need: [what would help]
185
- ```
186
- 6. **STOP** — do not proceed until user resolves
187
-
188
- **Rule of thumb:**
189
- - Code error / test failure → spawn sub-agent
190
- - Requirement unclear / need user input → mark blocked and stop
191
-
192
- ---
193
-
194
- ## Completion
195
-
196
- When all units are `✅`:
197
- 1. Run full test suite one final time
198
- 2. Verify all tests pass, no warnings
199
- 3. Mark all satisfied `Completion Criteria` checkboxes in doing doc as `[x]`
200
- 4. If `Planning:` doc path exists, sync its `Completion Criteria` checkboxes to `[x]` based on final evidence
201
- 5. Update doing.md Status to `done`
202
- 6. Commit: `git commit -m "docs(doing): all units complete"`
203
- 7. Get timestamp from git
204
- 8. Add final progress log entry
205
- 9. Output:
206
- ```
207
- ✅ all units complete
208
- tests: [X passing]
209
- coverage: [X%]
210
- status: done
211
- ```
212
-
213
- ---
214
-
215
- ## Rules
216
-
217
- 1. **File naming**: Expect `YYYY-MM-DD-HHMM-doing-{name}.md` format
218
- 2. **Location**: Read and update doing docs in the project-defined task-doc directory, which may live outside the repo
219
- 3. **Artifacts directory**: Use `{task-name}/` for all outputs, logs, data
220
- 4. **Execution mode**: Honor `pending | spawn | direct` from doing doc
221
- 5. **TDD strictly enforced** — tests before implementation, always
222
- 6. **100% coverage** — no exceptions, no exclude attributes
223
- 7. **Atomic commits** — one logical unit per commit, push after each
224
- 8. **Timestamps from git** — `git log -1 --format="%Y-%m-%d %H:%M"`
225
- 9. **Push after each unit phase complete**
226
- 10. **Update doing.md after each unit** — status and progress log
227
- 11. **Spawn sub-agents for fixes** — don't ask, just do it
228
- 12. **Update docs immediately** — when decisions made, commit right away
229
- 13. **Stop on actual blocker** — unclear requirements or need user input
230
- 14. **/compact proactively** — preserve context between units
231
- 15. **No warnings** — treat warnings as errors
232
- 16. **Run full test suite** — before marking unit complete, not just new tests
233
- 17. **Always compile** — run the project's build command after every implementation/refactor unit. Tests passing is necessary but not sufficient.
234
- 18. **Checklist hygiene is mandatory** — keep doing/planning `Completion Criteria` checklists synchronized with verified completion evidence.
235
- 19. **Verify APIs before importing** — before writing `import { Foo } from './bar'`, use `grep` or `read_file` to confirm `Foo` is actually exported from that module. Never assume an export exists — always check the source first. This prevents wasted cycles on "module has no exported member" errors.