@hiai-gg/hiai-opencode 0.1.1 → 0.1.2

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 (1220) hide show
  1. package/.env.example +57 -57
  2. package/AGENTS.md +280 -281
  3. package/ARCHITECTURE.md +280 -281
  4. package/LICENSE.md +59 -59
  5. package/README.md +301 -301
  6. package/assets/mcp/mempalace.mjs +153 -153
  7. package/assets/mcp/rag.mjs +236 -236
  8. package/assets/runtime/npm-package-runner.mjs +54 -54
  9. package/config/hiai-opencode.schema.json +82 -82
  10. package/config/opencode.json +4 -4
  11. package/dist/index.js +243 -243
  12. package/hiai-opencode.json +57 -57
  13. package/package.json +86 -91
  14. package/skills/api-and-interface-design/SKILL.md +294 -294
  15. package/skills/brainstorming/SKILL.md +164 -164
  16. package/skills/brainstorming/scripts/frame-template.html +214 -214
  17. package/skills/brainstorming/scripts/helper.js +88 -88
  18. package/skills/brainstorming/scripts/server.cjs +354 -354
  19. package/skills/brainstorming/scripts/start-server.sh +148 -148
  20. package/skills/brainstorming/scripts/stop-server.sh +56 -56
  21. package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -49
  22. package/skills/brainstorming/visual-companion.md +287 -287
  23. package/skills/browser-testing-with-devtools/SKILL.md +302 -302
  24. package/skills/ci-cd-and-automation/SKILL.md +390 -390
  25. package/skills/code-review-and-quality/SKILL.md +347 -347
  26. package/skills/code-simplification/SKILL.md +331 -331
  27. package/skills/context-engineering/SKILL.md +289 -289
  28. package/skills/deprecation-and-migration/SKILL.md +206 -206
  29. package/skills/dispatching-parallel-agents/SKILL.md +182 -182
  30. package/skills/documentation-and-adrs/SKILL.md +278 -278
  31. package/skills/executing-plans/SKILL.md +70 -70
  32. package/skills/finishing-a-development-branch/SKILL.md +200 -200
  33. package/skills/frontend-ui-engineering/SKILL.md +322 -322
  34. package/skills/git-workflow-and-versioning/SKILL.md +300 -300
  35. package/skills/incremental-implementation/SKILL.md +241 -241
  36. package/skills/performance-optimization/SKILL.md +350 -350
  37. package/skills/receiving-code-review/SKILL.md +213 -213
  38. package/skills/requesting-code-review/SKILL.md +105 -105
  39. package/skills/requesting-code-review/code-reviewer.md +146 -146
  40. package/skills/security-and-hardening/SKILL.md +349 -349
  41. package/skills/shipping-and-launch/SKILL.md +309 -309
  42. package/skills/source-driven-development/SKILL.md +194 -194
  43. package/skills/spec-driven-development/SKILL.md +200 -200
  44. package/skills/subagent-driven-development/SKILL.md +277 -277
  45. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -26
  46. package/skills/subagent-driven-development/implementer-prompt.md +113 -113
  47. package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -61
  48. package/skills/systematic-debugging/CREATION-LOG.md +119 -119
  49. package/skills/systematic-debugging/SKILL.md +596 -596
  50. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
  51. package/skills/systematic-debugging/condition-based-waiting.md +115 -115
  52. package/skills/systematic-debugging/defense-in-depth.md +122 -122
  53. package/skills/systematic-debugging/find-polluter.sh +63 -63
  54. package/skills/systematic-debugging/root-cause-tracing.md +169 -169
  55. package/skills/systematic-debugging/test-academic.md +14 -14
  56. package/skills/systematic-debugging/test-pressure-1.md +58 -58
  57. package/skills/systematic-debugging/test-pressure-2.md +68 -68
  58. package/skills/systematic-debugging/test-pressure-3.md +69 -69
  59. package/skills/test-driven-development/SKILL.md +379 -379
  60. package/skills/using-agent-skills/SKILL.md +174 -174
  61. package/skills/using-git-worktrees/SKILL.md +218 -218
  62. package/skills/using-superpowers/SKILL.md +117 -117
  63. package/skills/using-superpowers/references/codex-tools.md +100 -100
  64. package/skills/using-superpowers/references/copilot-tools.md +52 -52
  65. package/skills/using-superpowers/references/gemini-tools.md +33 -33
  66. package/skills/verification-before-completion/SKILL.md +139 -139
  67. package/skills/writing-plans/SKILL.md +152 -152
  68. package/skills/writing-plans/plan-document-reviewer-prompt.md +49 -49
  69. package/skills/writing-skills/SKILL.md +655 -655
  70. package/skills/writing-skills/anthropic-best-practices.md +1150 -1150
  71. package/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
  72. package/skills/writing-skills/graphviz-conventions.dot +171 -171
  73. package/skills/writing-skills/persuasion-principles.md +187 -187
  74. package/skills/writing-skills/render-graphs.js +168 -168
  75. package/skills/writing-skills/testing-skills-with-subagents.md +384 -384
  76. package/src/AGENTS.md +41 -41
  77. package/src/agents/AGENTS.md +74 -74
  78. package/src/agents/agent-builder.ts +50 -50
  79. package/src/agents/bob/AGENTS.md +29 -29
  80. package/src/agents/bob/default.ts +128 -128
  81. package/src/agents/bob/gemini.ts +237 -237
  82. package/src/agents/bob/gpt-pro.ts +430 -430
  83. package/src/agents/bob/index.ts +19 -19
  84. package/src/agents/bob.ts +528 -528
  85. package/src/agents/builtin-agents/agent-overrides.ts +75 -75
  86. package/src/agents/builtin-agents/available-skills.ts +35 -35
  87. package/src/agents/builtin-agents/bob-agent.ts +96 -96
  88. package/src/agents/builtin-agents/coder-agent.ts +98 -98
  89. package/src/agents/builtin-agents/environment-context.ts +16 -16
  90. package/src/agents/builtin-agents/general-agents.ts +122 -122
  91. package/src/agents/builtin-agents/guard-agent.ts +66 -66
  92. package/src/agents/builtin-agents/model-resolution.ts +31 -31
  93. package/src/agents/builtin-agents/resolve-file-uri.ts +42 -42
  94. package/src/agents/builtin-agents.ts +194 -194
  95. package/src/agents/coder/AGENTS.md +34 -34
  96. package/src/agents/coder/agent.ts +162 -162
  97. package/src/agents/coder/gpt-codex.ts +404 -404
  98. package/src/agents/coder/gpt-pro.ts +319 -319
  99. package/src/agents/coder/gpt.ts +253 -253
  100. package/src/agents/coder/index.ts +8 -8
  101. package/src/agents/critic/agent.ts +105 -105
  102. package/src/agents/custom-agent-summaries.ts +61 -61
  103. package/src/agents/dynamic-agent-category-skills-guide.ts +138 -138
  104. package/src/agents/dynamic-agent-core-sections.ts +237 -237
  105. package/src/agents/dynamic-agent-policy-sections.ts +182 -182
  106. package/src/agents/dynamic-agent-prompt-builder.ts +31 -31
  107. package/src/agents/dynamic-agent-prompt-types.ts +24 -24
  108. package/src/agents/dynamic-agent-tool-categorization.ts +45 -45
  109. package/src/agents/env-context.ts +16 -16
  110. package/src/agents/gpt-apply-patch-guard.ts +7 -7
  111. package/src/agents/guard/agent.ts +146 -146
  112. package/src/agents/guard/default-prompt-sections.ts +305 -305
  113. package/src/agents/guard/default.ts +22 -22
  114. package/src/agents/guard/gemini-prompt-sections.ts +293 -293
  115. package/src/agents/guard/gemini.ts +22 -22
  116. package/src/agents/guard/gpt-prompt-sections.ts +296 -296
  117. package/src/agents/guard/gpt.ts +22 -22
  118. package/src/agents/guard/index.ts +2 -2
  119. package/src/agents/guard/prompt-section-builder.ts +104 -104
  120. package/src/agents/guard/shared-prompt.ts +172 -172
  121. package/src/agents/index.ts +5 -5
  122. package/src/agents/platform-adapter.ts +236 -236
  123. package/src/agents/platform-manager.ts +57 -57
  124. package/src/agents/prompt-library/identity.ts +14 -14
  125. package/src/agents/prompt-library/index.ts +7 -7
  126. package/src/agents/prompt-library/intent-gate.ts +149 -149
  127. package/src/agents/prompt-library/orchestration.ts +60 -60
  128. package/src/agents/prompt-library/platform.ts +36 -36
  129. package/src/agents/prompt-library/specialized.ts +39 -39
  130. package/src/agents/prompt-library/strategy.ts +80 -80
  131. package/src/agents/prompt-library/todo-discipline.ts +22 -22
  132. package/src/agents/quality-guardian.ts +76 -76
  133. package/src/agents/researcher.ts +73 -73
  134. package/src/agents/strategist/AGENTS.md +37 -37
  135. package/src/agents/strategist/behavioral-summary.ts +79 -79
  136. package/src/agents/strategist/gemini.ts +333 -333
  137. package/src/agents/strategist/gpt.ts +460 -460
  138. package/src/agents/strategist/high-accuracy-mode.ts +78 -78
  139. package/src/agents/strategist/identity-constraints.ts +336 -336
  140. package/src/agents/strategist/index.ts +6 -6
  141. package/src/agents/strategist/interview-mode.ts +335 -335
  142. package/src/agents/strategist/plan-generation.ts +213 -213
  143. package/src/agents/strategist/plan-template.ts +325 -325
  144. package/src/agents/strategist/system-prompt.ts +68 -68
  145. package/src/agents/sub/agent.ts +141 -141
  146. package/src/agents/sub/default.ts +52 -52
  147. package/src/agents/sub/gemini.ts +194 -194
  148. package/src/agents/sub/gpt-codex.ts +156 -156
  149. package/src/agents/sub/gpt-pro.ts +161 -161
  150. package/src/agents/sub/gpt.ts +157 -157
  151. package/src/agents/sub/index.ts +13 -13
  152. package/src/agents/types.ts +144 -144
  153. package/src/agents/ui.ts +58 -58
  154. package/src/config/data/model-capabilities.json +40690 -40690
  155. package/src/config/defaults.ts +146 -146
  156. package/src/config/hiai-opencode.schema.json +12 -12
  157. package/src/config/index.ts +67 -67
  158. package/src/config/loader.test.ts +65 -65
  159. package/src/config/loader.ts +183 -183
  160. package/src/config/models.ts +32 -32
  161. package/src/config/platform-schema.ts +192 -192
  162. package/src/config/schema/agent-definitions.ts +5 -5
  163. package/src/config/schema/agent-names.ts +66 -66
  164. package/src/config/schema/agent-overrides.ts +95 -95
  165. package/src/config/schema/babysitting.ts +7 -7
  166. package/src/config/schema/background-task.ts +29 -29
  167. package/src/config/schema/bob-agent.ts +11 -11
  168. package/src/config/schema/bob.ts +17 -17
  169. package/src/config/schema/browser-automation.ts +24 -24
  170. package/src/config/schema/categories.ts +45 -45
  171. package/src/config/schema/claude-code.ts +13 -13
  172. package/src/config/schema/commands.ts +14 -14
  173. package/src/config/schema/comment-checker.ts +8 -8
  174. package/src/config/schema/dynamic-context-pruning.ts +53 -53
  175. package/src/config/schema/experimental.ts +27 -27
  176. package/src/config/schema/fallback-models.ts +31 -31
  177. package/src/config/schema/fast-apply.ts +14 -14
  178. package/src/config/schema/git-env-prefix.ts +28 -28
  179. package/src/config/schema/git-master.ts +14 -14
  180. package/src/config/schema/hooks.ts +61 -61
  181. package/src/config/schema/index.ts +52 -52
  182. package/src/config/schema/internal/permission.ts +20 -20
  183. package/src/config/schema/model-capabilities.ts +10 -10
  184. package/src/config/schema/notification.ts +8 -8
  185. package/src/config/schema/oh-my-opencode-config.ts +90 -90
  186. package/src/config/schema/openclaw.ts +50 -50
  187. package/src/config/schema/ralph-loop.ts +11 -11
  188. package/src/config/schema/runtime-fallback.ts +18 -18
  189. package/src/config/schema/skills.ts +39 -39
  190. package/src/config/schema/start-work.ts +7 -7
  191. package/src/config/schema/tmux.ts +28 -28
  192. package/src/config/schema/websearch.ts +15 -15
  193. package/src/config/types.ts +174 -174
  194. package/src/create-hooks.ts +93 -93
  195. package/src/create-managers.ts +116 -116
  196. package/src/create-runtime-tmux-config.ts +18 -18
  197. package/src/create-tools.ts +53 -53
  198. package/src/features/background-agent/AGENTS.md +56 -56
  199. package/src/features/background-agent/abort-with-timeout.ts +35 -35
  200. package/src/features/background-agent/background-task-notification-template.ts +74 -74
  201. package/src/features/background-agent/compaction-aware-message-resolver.ts +164 -164
  202. package/src/features/background-agent/concurrency.ts +137 -137
  203. package/src/features/background-agent/constants.ts +58 -58
  204. package/src/features/background-agent/duration-formatter.ts +14 -14
  205. package/src/features/background-agent/error-classifier.ts +83 -83
  206. package/src/features/background-agent/fallback-retry-handler.ts +134 -134
  207. package/src/features/background-agent/index.ts +2 -2
  208. package/src/features/background-agent/loop-detector.ts +102 -102
  209. package/src/features/background-agent/manager.ts +2220 -2220
  210. package/src/features/background-agent/opencode-client.ts +3 -3
  211. package/src/features/background-agent/process-cleanup.ts +98 -98
  212. package/src/features/background-agent/remove-task-toast-tracking.ts +8 -8
  213. package/src/features/background-agent/session-existence.ts +57 -57
  214. package/src/features/background-agent/session-idle-event-handler.ts +93 -93
  215. package/src/features/background-agent/session-status-classifier.ts +20 -20
  216. package/src/features/background-agent/spawner/parent-directory-resolver.ts +24 -24
  217. package/src/features/background-agent/spawner.ts +327 -327
  218. package/src/features/background-agent/state.ts +199 -199
  219. package/src/features/background-agent/subagent-spawn-limits.ts +97 -97
  220. package/src/features/background-agent/task-history.ts +79 -79
  221. package/src/features/background-agent/task-poller.ts +225 -225
  222. package/src/features/background-agent/types.ts +100 -100
  223. package/src/features/boulder-state/constants.ts +13 -13
  224. package/src/features/boulder-state/index.ts +4 -4
  225. package/src/features/boulder-state/storage.ts +336 -336
  226. package/src/features/boulder-state/top-level-task.ts +78 -78
  227. package/src/features/boulder-state/types.ts +61 -61
  228. package/src/features/builtin-commands/commands.ts +143 -143
  229. package/src/features/builtin-commands/index.ts +2 -2
  230. package/src/features/builtin-commands/templates/handoff.ts +177 -177
  231. package/src/features/builtin-commands/templates/init-deep.ts +305 -305
  232. package/src/features/builtin-commands/templates/ralph-loop.ts +66 -66
  233. package/src/features/builtin-commands/templates/refactor.ts +619 -619
  234. package/src/features/builtin-commands/templates/remove-ai-slops.ts +96 -96
  235. package/src/features/builtin-commands/templates/start-work.ts +128 -128
  236. package/src/features/builtin-commands/templates/stop-continuation.ts +13 -13
  237. package/src/features/builtin-commands/types.ts +9 -9
  238. package/src/features/builtin-skills/index.ts +2 -2
  239. package/src/features/builtin-skills/materialize.ts +338 -338
  240. package/src/features/builtin-skills/skills/ai-slop-remover.ts +145 -145
  241. package/src/features/builtin-skills/skills/dev-browser.ts +221 -221
  242. package/src/features/builtin-skills/skills/frontend-ui-ux.ts +79 -79
  243. package/src/features/builtin-skills/skills/git-master-sections/commit-workflow.ts +509 -509
  244. package/src/features/builtin-skills/skills/git-master-sections/history-search-workflow.ts +229 -229
  245. package/src/features/builtin-skills/skills/git-master-sections/overview.ts +64 -64
  246. package/src/features/builtin-skills/skills/git-master-sections/quick-reference.ts +86 -86
  247. package/src/features/builtin-skills/skills/git-master-sections/rebase-workflow.ts +181 -181
  248. package/src/features/builtin-skills/skills/git-master-skill-metadata.ts +4 -4
  249. package/src/features/builtin-skills/skills/git-master.ts +28 -28
  250. package/src/features/builtin-skills/skills/index.ts +7 -7
  251. package/src/features/builtin-skills/skills/playwright-cli.ts +268 -268
  252. package/src/features/builtin-skills/skills/playwright.ts +466 -466
  253. package/src/features/builtin-skills/skills/review-work.ts +536 -536
  254. package/src/features/builtin-skills/skills.ts +39 -39
  255. package/src/features/builtin-skills/types.ts +16 -16
  256. package/src/features/claude-code-agent-loader/agent-definitions-loader.ts +87 -87
  257. package/src/features/claude-code-agent-loader/claude-model-mapper.ts +53 -53
  258. package/src/features/claude-code-agent-loader/index.ts +5 -5
  259. package/src/features/claude-code-agent-loader/json-agent-loader.ts +53 -53
  260. package/src/features/claude-code-agent-loader/loader.ts +86 -86
  261. package/src/features/claude-code-agent-loader/opencode-config-agents-reader.ts +125 -125
  262. package/src/features/claude-code-agent-loader/types.ts +31 -31
  263. package/src/features/claude-code-command-loader/index.ts +2 -2
  264. package/src/features/claude-code-command-loader/loader.ts +169 -169
  265. package/src/features/claude-code-command-loader/types.ts +46 -46
  266. package/src/features/claude-code-mcp-loader/configure-allowed-env-vars.ts +48 -48
  267. package/src/features/claude-code-mcp-loader/env-expander.ts +51 -51
  268. package/src/features/claude-code-mcp-loader/index.ts +12 -12
  269. package/src/features/claude-code-mcp-loader/loader.ts +156 -156
  270. package/src/features/claude-code-mcp-loader/scope-filter.ts +17 -17
  271. package/src/features/claude-code-mcp-loader/transformer.ts +57 -57
  272. package/src/features/claude-code-mcp-loader/types.ts +51 -51
  273. package/src/features/claude-code-plugin-loader/agent-loader.ts +59 -59
  274. package/src/features/claude-code-plugin-loader/command-loader.ts +53 -53
  275. package/src/features/claude-code-plugin-loader/discovery.ts +251 -251
  276. package/src/features/claude-code-plugin-loader/hook-loader.ts +26 -26
  277. package/src/features/claude-code-plugin-loader/index.ts +10 -10
  278. package/src/features/claude-code-plugin-loader/loader.ts +134 -134
  279. package/src/features/claude-code-plugin-loader/mcp-server-loader.ts +59 -59
  280. package/src/features/claude-code-plugin-loader/plugin-path-resolver.ts +23 -23
  281. package/src/features/claude-code-plugin-loader/scope-filter.ts +29 -29
  282. package/src/features/claude-code-plugin-loader/skill-loader.ts +62 -62
  283. package/src/features/claude-code-plugin-loader/types.ts +255 -255
  284. package/src/features/claude-code-session-state/index.ts +1 -1
  285. package/src/features/claude-code-session-state/state.ts +154 -154
  286. package/src/features/claude-tasks/session-storage.ts +52 -52
  287. package/src/features/claude-tasks/storage.ts +169 -169
  288. package/src/features/claude-tasks/types.ts +20 -20
  289. package/src/features/context-injector/collector.ts +91 -91
  290. package/src/features/context-injector/index.ts +14 -14
  291. package/src/features/context-injector/injector.ts +167 -167
  292. package/src/features/context-injector/types.ts +91 -91
  293. package/src/features/hook-message-injector/constants.ts +1 -1
  294. package/src/features/hook-message-injector/index.ts +11 -11
  295. package/src/features/hook-message-injector/injector.ts +437 -437
  296. package/src/features/hook-message-injector/types.ts +49 -49
  297. package/src/features/mcp-oauth/AGENTS.md +54 -54
  298. package/src/features/mcp-oauth/callback-server.ts +106 -106
  299. package/src/features/mcp-oauth/dcr.ts +98 -98
  300. package/src/features/mcp-oauth/discovery.ts +134 -134
  301. package/src/features/mcp-oauth/oauth-authorization-flow.ts +150 -150
  302. package/src/features/mcp-oauth/provider.ts +215 -215
  303. package/src/features/mcp-oauth/refresh-mutex.ts +58 -58
  304. package/src/features/mcp-oauth/resource-indicator.ts +16 -16
  305. package/src/features/mcp-oauth/schema.ts +8 -8
  306. package/src/features/mcp-oauth/step-up.ts +79 -79
  307. package/src/features/mcp-oauth/storage.ts +155 -155
  308. package/src/features/opencode-skill-loader/AGENTS.md +59 -59
  309. package/src/features/opencode-skill-loader/allowed-tools-parser.ts +9 -9
  310. package/src/features/opencode-skill-loader/async-loader.ts +213 -213
  311. package/src/features/opencode-skill-loader/blocking.ts +62 -62
  312. package/src/features/opencode-skill-loader/config-source-discovery.ts +114 -114
  313. package/src/features/opencode-skill-loader/discover-worker.ts +56 -56
  314. package/src/features/opencode-skill-loader/git-master-template-injection.ts +150 -150
  315. package/src/features/opencode-skill-loader/index.ts +17 -17
  316. package/src/features/opencode-skill-loader/loaded-skill-from-path.ts +73 -73
  317. package/src/features/opencode-skill-loader/loaded-skill-template-extractor.ts +16 -16
  318. package/src/features/opencode-skill-loader/loader.ts +172 -172
  319. package/src/features/opencode-skill-loader/merger/builtin-skill-converter.ts +26 -26
  320. package/src/features/opencode-skill-loader/merger/config-skill-entry-loader.ts +117 -117
  321. package/src/features/opencode-skill-loader/merger/scope-priority.ts +10 -10
  322. package/src/features/opencode-skill-loader/merger/skill-definition-merger.ts +31 -31
  323. package/src/features/opencode-skill-loader/merger/skills-config-normalizer.ts +19 -19
  324. package/src/features/opencode-skill-loader/merger.ts +96 -96
  325. package/src/features/opencode-skill-loader/skill-content.ts +11 -11
  326. package/src/features/opencode-skill-loader/skill-deduplication.ts +13 -13
  327. package/src/features/opencode-skill-loader/skill-definition-record.ts +11 -11
  328. package/src/features/opencode-skill-loader/skill-directory-loader.ts +112 -112
  329. package/src/features/opencode-skill-loader/skill-discovery.ts +76 -76
  330. package/src/features/opencode-skill-loader/skill-mcp-config.ts +45 -45
  331. package/src/features/opencode-skill-loader/skill-resolution-options.ts +9 -9
  332. package/src/features/opencode-skill-loader/skill-template-resolver.ts +97 -97
  333. package/src/features/opencode-skill-loader/types.ts +38 -38
  334. package/src/features/run-continuation-state/constants.ts +1 -1
  335. package/src/features/run-continuation-state/index.ts +3 -3
  336. package/src/features/run-continuation-state/storage.ts +80 -80
  337. package/src/features/run-continuation-state/types.ts +15 -15
  338. package/src/features/skill-mcp-manager/AGENTS.md +111 -111
  339. package/src/features/skill-mcp-manager/cleanup.ts +153 -153
  340. package/src/features/skill-mcp-manager/connection-type.ts +26 -26
  341. package/src/features/skill-mcp-manager/connection.ts +146 -146
  342. package/src/features/skill-mcp-manager/env-cleaner.ts +59 -59
  343. package/src/features/skill-mcp-manager/error-redaction.ts +47 -47
  344. package/src/features/skill-mcp-manager/http-client.ts +126 -126
  345. package/src/features/skill-mcp-manager/index.ts +2 -2
  346. package/src/features/skill-mcp-manager/manager.ts +178 -178
  347. package/src/features/skill-mcp-manager/oauth-handler.ts +160 -160
  348. package/src/features/skill-mcp-manager/stdio-client.ts +112 -112
  349. package/src/features/skill-mcp-manager/types.ts +96 -96
  350. package/src/features/task-toast-manager/index.ts +2 -2
  351. package/src/features/task-toast-manager/manager.ts +251 -251
  352. package/src/features/task-toast-manager/types.ts +29 -29
  353. package/src/features/tmux-subagent/action-executor-core.ts +82 -82
  354. package/src/features/tmux-subagent/action-executor.ts +137 -137
  355. package/src/features/tmux-subagent/cleanup.ts +42 -42
  356. package/src/features/tmux-subagent/decision-engine.ts +22 -22
  357. package/src/features/tmux-subagent/event-handlers.ts +6 -6
  358. package/src/features/tmux-subagent/grid-planning.ts +137 -137
  359. package/src/features/tmux-subagent/index.ts +16 -16
  360. package/src/features/tmux-subagent/manager.ts +969 -969
  361. package/src/features/tmux-subagent/oldest-agent-pane.ts +37 -37
  362. package/src/features/tmux-subagent/pane-split-availability.ts +77 -77
  363. package/src/features/tmux-subagent/pane-state-parser.ts +135 -135
  364. package/src/features/tmux-subagent/pane-state-querier.ts +76 -76
  365. package/src/features/tmux-subagent/polling-constants.ts +6 -6
  366. package/src/features/tmux-subagent/polling-manager.ts +167 -167
  367. package/src/features/tmux-subagent/polling.ts +183 -183
  368. package/src/features/tmux-subagent/session-created-event.ts +44 -44
  369. package/src/features/tmux-subagent/session-created-handler.ts +175 -175
  370. package/src/features/tmux-subagent/session-deleted-handler.ts +50 -50
  371. package/src/features/tmux-subagent/session-message-count.ts +3 -3
  372. package/src/features/tmux-subagent/session-ready-waiter.ts +44 -44
  373. package/src/features/tmux-subagent/session-status-parser.ts +17 -17
  374. package/src/features/tmux-subagent/spawn-action-decider.ts +147 -147
  375. package/src/features/tmux-subagent/spawn-target-finder.ts +146 -146
  376. package/src/features/tmux-subagent/tmux-grid-constants.ts +57 -57
  377. package/src/features/tmux-subagent/tracked-session-state.ts +29 -29
  378. package/src/features/tmux-subagent/types.ts +54 -54
  379. package/src/features/tool-metadata-store/index.ts +7 -7
  380. package/src/features/tool-metadata-store/store.ts +84 -84
  381. package/src/hooks/agent-usage-reminder/constants.ts +52 -52
  382. package/src/hooks/agent-usage-reminder/hook.ts +134 -134
  383. package/src/hooks/agent-usage-reminder/index.ts +1 -1
  384. package/src/hooks/agent-usage-reminder/storage.ts +42 -42
  385. package/src/hooks/agent-usage-reminder/types.ts +6 -6
  386. package/src/hooks/anthropic-context-window-limit-recovery/AGENTS.md +49 -49
  387. package/src/hooks/anthropic-context-window-limit-recovery/aggressive-truncation-strategy.ts +87 -87
  388. package/src/hooks/anthropic-context-window-limit-recovery/client.ts +21 -21
  389. package/src/hooks/anthropic-context-window-limit-recovery/deduplication-recovery.ts +77 -77
  390. package/src/hooks/anthropic-context-window-limit-recovery/empty-content-recovery-sdk.ts +199 -199
  391. package/src/hooks/anthropic-context-window-limit-recovery/empty-content-recovery.ts +149 -149
  392. package/src/hooks/anthropic-context-window-limit-recovery/executor.ts +83 -83
  393. package/src/hooks/anthropic-context-window-limit-recovery/index.ts +8 -8
  394. package/src/hooks/anthropic-context-window-limit-recovery/message-builder.ts +190 -190
  395. package/src/hooks/anthropic-context-window-limit-recovery/message-storage-directory.ts +40 -40
  396. package/src/hooks/anthropic-context-window-limit-recovery/parser.ts +209 -209
  397. package/src/hooks/anthropic-context-window-limit-recovery/pruning-deduplication.ts +189 -189
  398. package/src/hooks/anthropic-context-window-limit-recovery/pruning-tool-output-truncation.ts +142 -142
  399. package/src/hooks/anthropic-context-window-limit-recovery/pruning-types.ts +44 -44
  400. package/src/hooks/anthropic-context-window-limit-recovery/recovery-hook.test-support.ts +119 -119
  401. package/src/hooks/anthropic-context-window-limit-recovery/recovery-hook.ts +193 -193
  402. package/src/hooks/anthropic-context-window-limit-recovery/recovery-strategy.ts +2 -2
  403. package/src/hooks/anthropic-context-window-limit-recovery/session-timeout-map.ts +20 -20
  404. package/src/hooks/anthropic-context-window-limit-recovery/state.ts +78 -78
  405. package/src/hooks/anthropic-context-window-limit-recovery/storage-paths.ts +6 -6
  406. package/src/hooks/anthropic-context-window-limit-recovery/storage.ts +18 -18
  407. package/src/hooks/anthropic-context-window-limit-recovery/summarize-retry-strategy.ts +218 -218
  408. package/src/hooks/anthropic-context-window-limit-recovery/target-token-truncation.ts +196 -196
  409. package/src/hooks/anthropic-context-window-limit-recovery/tool-part-types.ts +38 -38
  410. package/src/hooks/anthropic-context-window-limit-recovery/tool-result-storage-sdk.ts +123 -123
  411. package/src/hooks/anthropic-context-window-limit-recovery/tool-result-storage.ts +119 -119
  412. package/src/hooks/anthropic-context-window-limit-recovery/types.ts +44 -44
  413. package/src/hooks/anthropic-effort/hook.ts +93 -93
  414. package/src/hooks/anthropic-effort/index.ts +1 -1
  415. package/src/hooks/auto-slash-command/constants.ts +12 -12
  416. package/src/hooks/auto-slash-command/detector.ts +88 -88
  417. package/src/hooks/auto-slash-command/executor.ts +165 -165
  418. package/src/hooks/auto-slash-command/hook.ts +238 -238
  419. package/src/hooks/auto-slash-command/index.ts +7 -7
  420. package/src/hooks/auto-slash-command/processed-command-store.ts +74 -74
  421. package/src/hooks/auto-slash-command/types.ts +42 -42
  422. package/src/hooks/background-notification/hook.ts +54 -54
  423. package/src/hooks/background-notification/index.ts +2 -2
  424. package/src/hooks/background-notification/types.ts +5 -5
  425. package/src/hooks/bash-file-read-guard.ts +44 -44
  426. package/src/hooks/category-skill-reminder/formatter.ts +37 -37
  427. package/src/hooks/category-skill-reminder/hook.ts +142 -142
  428. package/src/hooks/category-skill-reminder/index.ts +1 -1
  429. package/src/hooks/claude-code-hooks/AGENTS.md +41 -41
  430. package/src/hooks/claude-code-hooks/claude-code-hooks-hook.ts +28 -28
  431. package/src/hooks/claude-code-hooks/config-loader.ts +151 -151
  432. package/src/hooks/claude-code-hooks/config.ts +147 -147
  433. package/src/hooks/claude-code-hooks/dispatch-hook.ts +27 -27
  434. package/src/hooks/claude-code-hooks/execute-http-hook.ts +116 -116
  435. package/src/hooks/claude-code-hooks/handlers/chat-message-handler.ts +140 -140
  436. package/src/hooks/claude-code-hooks/handlers/pre-compact-handler.ts +41 -41
  437. package/src/hooks/claude-code-hooks/handlers/session-event-handler.ts +137 -137
  438. package/src/hooks/claude-code-hooks/handlers/tool-execute-after-handler.ts +160 -160
  439. package/src/hooks/claude-code-hooks/handlers/tool-execute-before-handler.ts +93 -93
  440. package/src/hooks/claude-code-hooks/index.ts +1 -1
  441. package/src/hooks/claude-code-hooks/plugin-config.ts +12 -12
  442. package/src/hooks/claude-code-hooks/post-tool-use.ts +195 -195
  443. package/src/hooks/claude-code-hooks/pre-compact.ts +105 -105
  444. package/src/hooks/claude-code-hooks/pre-tool-use.ts +168 -168
  445. package/src/hooks/claude-code-hooks/session-hook-state.ts +17 -17
  446. package/src/hooks/claude-code-hooks/stop.ts +118 -118
  447. package/src/hooks/claude-code-hooks/todo.ts +76 -76
  448. package/src/hooks/claude-code-hooks/tool-input-cache.ts +82 -82
  449. package/src/hooks/claude-code-hooks/transcript.ts +248 -248
  450. package/src/hooks/claude-code-hooks/types.ts +214 -214
  451. package/src/hooks/claude-code-hooks/user-prompt-submit.ts +121 -121
  452. package/src/hooks/comment-checker/cli-runner.ts +127 -127
  453. package/src/hooks/comment-checker/cli.ts +269 -269
  454. package/src/hooks/comment-checker/downloader.ts +170 -170
  455. package/src/hooks/comment-checker/hook.ts +192 -192
  456. package/src/hooks/comment-checker/index.ts +1 -1
  457. package/src/hooks/comment-checker/pending-calls.ts +45 -45
  458. package/src/hooks/comment-checker/types.ts +33 -33
  459. package/src/hooks/compaction-context-injector/compaction-context-prompt.ts +56 -56
  460. package/src/hooks/compaction-context-injector/constants.ts +5 -5
  461. package/src/hooks/compaction-context-injector/hook.ts +164 -164
  462. package/src/hooks/compaction-context-injector/index.ts +1 -1
  463. package/src/hooks/compaction-context-injector/recovery-prompt-config.ts +77 -77
  464. package/src/hooks/compaction-context-injector/recovery.ts +163 -163
  465. package/src/hooks/compaction-context-injector/session-id.ts +8 -8
  466. package/src/hooks/compaction-context-injector/session-prompt-config-resolver.ts +120 -120
  467. package/src/hooks/compaction-context-injector/tail-monitor.ts +52 -52
  468. package/src/hooks/compaction-context-injector/types.ts +25 -25
  469. package/src/hooks/compaction-context-injector/validated-model.ts +47 -47
  470. package/src/hooks/compaction-todo-preserver/hook.ts +127 -127
  471. package/src/hooks/compaction-todo-preserver/index.ts +2 -2
  472. package/src/hooks/context-window-monitor.ts +113 -113
  473. package/src/hooks/delegate-task-retry/guidance.ts +45 -45
  474. package/src/hooks/delegate-task-retry/hook.ts +22 -22
  475. package/src/hooks/delegate-task-retry/index.ts +4 -4
  476. package/src/hooks/delegate-task-retry/patterns.ts +77 -77
  477. package/src/hooks/directory-agents-injector/constants.ts +7 -7
  478. package/src/hooks/directory-agents-injector/finder.ts +38 -38
  479. package/src/hooks/directory-agents-injector/hook.ts +80 -80
  480. package/src/hooks/directory-agents-injector/index.ts +1 -1
  481. package/src/hooks/directory-agents-injector/injector.ts +59 -59
  482. package/src/hooks/directory-agents-injector/storage.ts +8 -8
  483. package/src/hooks/directory-readme-injector/constants.ts +7 -7
  484. package/src/hooks/directory-readme-injector/finder.ts +33 -33
  485. package/src/hooks/directory-readme-injector/hook.ts +80 -80
  486. package/src/hooks/directory-readme-injector/index.ts +1 -1
  487. package/src/hooks/directory-readme-injector/injector.ts +59 -59
  488. package/src/hooks/directory-readme-injector/storage.ts +8 -8
  489. package/src/hooks/edit-error-recovery/hook.ts +58 -58
  490. package/src/hooks/edit-error-recovery/index.ts +5 -5
  491. package/src/hooks/empty-task-response-detector.ts +27 -27
  492. package/src/hooks/fast-apply/hook.ts +11 -11
  493. package/src/hooks/fast-apply/index.ts +1 -1
  494. package/src/hooks/fast-apply/ollama-client.ts +53 -53
  495. package/src/hooks/fast-apply/tool-execute-before-handler.ts +86 -86
  496. package/src/hooks/guard/AGENTS.md +64 -64
  497. package/src/hooks/guard/background-launch-session-tracking.ts +97 -97
  498. package/src/hooks/guard/bob-path.ts +8 -8
  499. package/src/hooks/guard/boulder-continuation-injector.ts +109 -109
  500. package/src/hooks/guard/boulder-session-lineage.ts +44 -44
  501. package/src/hooks/guard/event-handler.ts +104 -104
  502. package/src/hooks/guard/final-wave-approval-gate.ts +47 -47
  503. package/src/hooks/guard/final-wave-plan-state.ts +60 -60
  504. package/src/hooks/guard/guard-hook.ts +27 -27
  505. package/src/hooks/guard/hook-name.ts +1 -1
  506. package/src/hooks/guard/idle-event.ts +341 -341
  507. package/src/hooks/guard/index.ts +3 -3
  508. package/src/hooks/guard/is-abort-error.ts +20 -20
  509. package/src/hooks/guard/recent-model-resolver.ts +89 -89
  510. package/src/hooks/guard/resolve-active-boulder-session.ts +29 -29
  511. package/src/hooks/guard/session-last-agent.ts +153 -153
  512. package/src/hooks/guard/subagent-session-id.ts +54 -54
  513. package/src/hooks/guard/system-reminder-templates.ts +249 -249
  514. package/src/hooks/guard/task-context.ts +45 -45
  515. package/src/hooks/guard/tool-execute-after.ts +209 -209
  516. package/src/hooks/guard/tool-execute-before.ts +102 -102
  517. package/src/hooks/guard/tsconfig.json +9 -9
  518. package/src/hooks/guard/types.ts +45 -45
  519. package/src/hooks/guard/verification-reminders.ts +197 -197
  520. package/src/hooks/guard/write-edit-tool-policy.ts +5 -5
  521. package/src/hooks/hashline-edit-diff-enhancer/hook.ts +106 -106
  522. package/src/hooks/hashline-read-enhancer/hook.ts +193 -193
  523. package/src/hooks/hashline-read-enhancer/index.ts +1 -1
  524. package/src/hooks/index.ts +58 -58
  525. package/src/hooks/interactive-bash-session/constants.ts +13 -13
  526. package/src/hooks/interactive-bash-session/hook.ts +125 -125
  527. package/src/hooks/interactive-bash-session/index.ts +3 -3
  528. package/src/hooks/interactive-bash-session/interactive-bash-session-tracker.ts +119 -119
  529. package/src/hooks/interactive-bash-session/parser.ts +118 -118
  530. package/src/hooks/interactive-bash-session/state-manager.ts +35 -35
  531. package/src/hooks/interactive-bash-session/storage.ts +59 -59
  532. package/src/hooks/interactive-bash-session/tmux-command-parser.ts +125 -125
  533. package/src/hooks/interactive-bash-session/types.ts +11 -11
  534. package/src/hooks/json-error-recovery/hook.ts +58 -58
  535. package/src/hooks/json-error-recovery/index.ts +6 -6
  536. package/src/hooks/keyword-detector/AGENTS.md +57 -57
  537. package/src/hooks/keyword-detector/analyze/default.ts +28 -28
  538. package/src/hooks/keyword-detector/analyze/index.ts +1 -1
  539. package/src/hooks/keyword-detector/constants.ts +45 -45
  540. package/src/hooks/keyword-detector/detector.ts +53 -53
  541. package/src/hooks/keyword-detector/hook.ts +143 -143
  542. package/src/hooks/keyword-detector/index.ts +5 -5
  543. package/src/hooks/keyword-detector/search/default.ts +20 -20
  544. package/src/hooks/keyword-detector/search/index.ts +1 -1
  545. package/src/hooks/keyword-detector/types.ts +4 -4
  546. package/src/hooks/keyword-detector/ultrawork/default.ts +302 -302
  547. package/src/hooks/keyword-detector/ultrawork/gemini.ts +290 -290
  548. package/src/hooks/keyword-detector/ultrawork/gpt.ts +173 -173
  549. package/src/hooks/keyword-detector/ultrawork/index.ts +56 -56
  550. package/src/hooks/keyword-detector/ultrawork/planner.ts +140 -140
  551. package/src/hooks/keyword-detector/ultrawork/source-detector.ts +65 -65
  552. package/src/hooks/legacy-plugin-toast/auto-migrate-runner.ts +2 -2
  553. package/src/hooks/legacy-plugin-toast/auto-migrate.ts +64 -64
  554. package/src/hooks/legacy-plugin-toast/hook.ts +68 -68
  555. package/src/hooks/legacy-plugin-toast/index.ts +1 -1
  556. package/src/hooks/legacy-plugin-toast/plugin-entry-migrator.ts +1 -1
  557. package/src/hooks/model-fallback/chat-message-fallback-handler.ts +74 -74
  558. package/src/hooks/model-fallback/hook.ts +201 -201
  559. package/src/hooks/model-fallback/next-fallback.ts +84 -84
  560. package/src/hooks/no-bob-gpt/hook.ts +56 -56
  561. package/src/hooks/no-bob-gpt/index.ts +1 -1
  562. package/src/hooks/no-coder-non-gpt/hook.ts +67 -67
  563. package/src/hooks/no-coder-non-gpt/index.ts +1 -1
  564. package/src/hooks/non-interactive-env/constants.ts +70 -70
  565. package/src/hooks/non-interactive-env/detector.ts +19 -19
  566. package/src/hooks/non-interactive-env/index.ts +5 -5
  567. package/src/hooks/non-interactive-env/non-interactive-env-hook.ts +73 -73
  568. package/src/hooks/non-interactive-env/types.ts +3 -3
  569. package/src/hooks/preemptive-compaction-degradation-monitor.ts +212 -212
  570. package/src/hooks/preemptive-compaction-no-text-tail.ts +70 -70
  571. package/src/hooks/preemptive-compaction.ts +218 -218
  572. package/src/hooks/question-label-truncator/hook.ts +62 -62
  573. package/src/hooks/question-label-truncator/index.ts +1 -1
  574. package/src/hooks/ralph-loop/AGENTS.md +62 -62
  575. package/src/hooks/ralph-loop/command-arguments.ts +30 -30
  576. package/src/hooks/ralph-loop/completion-handler.ts +65 -65
  577. package/src/hooks/ralph-loop/completion-promise-detector-test-input.ts +23 -23
  578. package/src/hooks/ralph-loop/completion-promise-detector.ts +165 -165
  579. package/src/hooks/ralph-loop/constants.ts +7 -7
  580. package/src/hooks/ralph-loop/continuation-prompt-builder.ts +77 -77
  581. package/src/hooks/ralph-loop/continuation-prompt-injector.ts +91 -91
  582. package/src/hooks/ralph-loop/index.ts +6 -6
  583. package/src/hooks/ralph-loop/iteration-continuation.ts +64 -64
  584. package/src/hooks/ralph-loop/logician-verification-detector.ts +88 -88
  585. package/src/hooks/ralph-loop/loop-session-recovery.ts +33 -33
  586. package/src/hooks/ralph-loop/loop-state-controller.ts +178 -178
  587. package/src/hooks/ralph-loop/message-storage-directory.ts +1 -1
  588. package/src/hooks/ralph-loop/pending-verification-handler.ts +152 -152
  589. package/src/hooks/ralph-loop/ralph-loop-event-handler.ts +231 -231
  590. package/src/hooks/ralph-loop/ralph-loop-hook.ts +90 -90
  591. package/src/hooks/ralph-loop/session-event-handler.ts +56 -56
  592. package/src/hooks/ralph-loop/session-reset-strategy.ts +69 -69
  593. package/src/hooks/ralph-loop/storage.ts +164 -164
  594. package/src/hooks/ralph-loop/types.ts +25 -25
  595. package/src/hooks/ralph-loop/verification-failure-handler.ts +103 -103
  596. package/src/hooks/ralph-loop/with-timeout.ts +20 -20
  597. package/src/hooks/read-image-resizer/hook.ts +209 -209
  598. package/src/hooks/read-image-resizer/image-dimensions.ts +191 -191
  599. package/src/hooks/read-image-resizer/image-resizer.ts +191 -191
  600. package/src/hooks/read-image-resizer/index.ts +1 -1
  601. package/src/hooks/read-image-resizer/png-fallback-resizer.ts +359 -359
  602. package/src/hooks/read-image-resizer/types.ts +16 -16
  603. package/src/hooks/rules-injector/AGENTS.md +53 -53
  604. package/src/hooks/rules-injector/cache.ts +27 -27
  605. package/src/hooks/rules-injector/constants.ts +31 -31
  606. package/src/hooks/rules-injector/finder.ts +3 -3
  607. package/src/hooks/rules-injector/hook.ts +94 -94
  608. package/src/hooks/rules-injector/index.ts +2 -2
  609. package/src/hooks/rules-injector/injector.ts +189 -189
  610. package/src/hooks/rules-injector/matcher.ts +63 -63
  611. package/src/hooks/rules-injector/output-path.ts +22 -22
  612. package/src/hooks/rules-injector/parser.ts +211 -211
  613. package/src/hooks/rules-injector/project-root-finder.ts +36 -36
  614. package/src/hooks/rules-injector/rule-distance.ts +53 -53
  615. package/src/hooks/rules-injector/rule-file-finder.ts +139 -139
  616. package/src/hooks/rules-injector/rule-file-scanner.ts +55 -55
  617. package/src/hooks/rules-injector/storage.ts +59 -59
  618. package/src/hooks/rules-injector/types.ts +57 -57
  619. package/src/hooks/runtime-fallback/AGENTS.md +102 -102
  620. package/src/hooks/runtime-fallback/agent-resolver.ts +50 -50
  621. package/src/hooks/runtime-fallback/auto-retry-signal.ts +32 -32
  622. package/src/hooks/runtime-fallback/auto-retry.ts +228 -228
  623. package/src/hooks/runtime-fallback/chat-message-handler.ts +62 -62
  624. package/src/hooks/runtime-fallback/constants.ts +47 -47
  625. package/src/hooks/runtime-fallback/error-classifier.ts +183 -183
  626. package/src/hooks/runtime-fallback/event-handler.ts +213 -213
  627. package/src/hooks/runtime-fallback/fallback-bootstrap-model.ts +63 -63
  628. package/src/hooks/runtime-fallback/fallback-models.ts +86 -86
  629. package/src/hooks/runtime-fallback/fallback-retry-dispatcher.ts +55 -55
  630. package/src/hooks/runtime-fallback/fallback-state.ts +74 -74
  631. package/src/hooks/runtime-fallback/hook.ts +87 -87
  632. package/src/hooks/runtime-fallback/index.ts +2 -2
  633. package/src/hooks/runtime-fallback/last-user-retry-parts.ts +20 -20
  634. package/src/hooks/runtime-fallback/message-update-handler.ts +168 -168
  635. package/src/hooks/runtime-fallback/retry-model-payload.ts +30 -30
  636. package/src/hooks/runtime-fallback/session-messages.ts +38 -38
  637. package/src/hooks/runtime-fallback/session-status-handler.ts +126 -126
  638. package/src/hooks/runtime-fallback/types.ts +77 -77
  639. package/src/hooks/runtime-fallback/visible-assistant-response.ts +80 -80
  640. package/src/hooks/session-notification-content.ts +145 -145
  641. package/src/hooks/session-notification-formatting.ts +25 -25
  642. package/src/hooks/session-notification-scheduler.ts +188 -188
  643. package/src/hooks/session-notification-sender.ts +117 -117
  644. package/src/hooks/session-notification-utils.ts +80 -80
  645. package/src/hooks/session-notification.ts +219 -219
  646. package/src/hooks/session-recovery/AGENTS.md +59 -59
  647. package/src/hooks/session-recovery/constants.ts +5 -5
  648. package/src/hooks/session-recovery/detect-error-type.ts +102 -102
  649. package/src/hooks/session-recovery/hook.ts +166 -166
  650. package/src/hooks/session-recovery/index.ts +7 -7
  651. package/src/hooks/session-recovery/recover-empty-content-message-sdk.ts +201 -201
  652. package/src/hooks/session-recovery/recover-thinking-block-order.ts +137 -137
  653. package/src/hooks/session-recovery/recover-thinking-disabled-violation.ts +75 -75
  654. package/src/hooks/session-recovery/recover-tool-result-missing.ts +108 -108
  655. package/src/hooks/session-recovery/recover-unavailable-tool.ts +108 -108
  656. package/src/hooks/session-recovery/resume.ts +49 -49
  657. package/src/hooks/session-recovery/storage/empty-messages.ts +47 -47
  658. package/src/hooks/session-recovery/storage/empty-text.ts +118 -118
  659. package/src/hooks/session-recovery/storage/message-dir.ts +1 -1
  660. package/src/hooks/session-recovery/storage/messages-reader.ts +83 -83
  661. package/src/hooks/session-recovery/storage/orphan-thinking-search.ts +43 -43
  662. package/src/hooks/session-recovery/storage/part-content.ts +28 -28
  663. package/src/hooks/session-recovery/storage/part-id.ts +5 -5
  664. package/src/hooks/session-recovery/storage/parts-reader.ts +56 -56
  665. package/src/hooks/session-recovery/storage/text-part-injector.ts +63 -63
  666. package/src/hooks/session-recovery/storage/thinking-block-search.ts +42 -42
  667. package/src/hooks/session-recovery/storage/thinking-prepend.ts +223 -223
  668. package/src/hooks/session-recovery/storage/thinking-strip.ts +67 -67
  669. package/src/hooks/session-recovery/storage.ts +34 -34
  670. package/src/hooks/session-recovery/types.ts +101 -101
  671. package/src/hooks/session-todo-status.ts +20 -20
  672. package/src/hooks/shared/compaction-model-resolver.ts +34 -34
  673. package/src/hooks/shared/shared/compaction-model-resolver.ts +34 -34
  674. package/src/hooks/start-work/context-info-builder.ts +319 -319
  675. package/src/hooks/start-work/index.ts +4 -4
  676. package/src/hooks/start-work/parse-user-request.ts +32 -32
  677. package/src/hooks/start-work/start-work-hook.ts +135 -135
  678. package/src/hooks/start-work/worktree-block.ts +11 -11
  679. package/src/hooks/start-work/worktree-detector.ts +77 -77
  680. package/src/hooks/stop-continuation-guard/hook.ts +122 -122
  681. package/src/hooks/stop-continuation-guard/index.ts +2 -2
  682. package/src/hooks/strategist-md-only/agent-matcher.ts +5 -5
  683. package/src/hooks/strategist-md-only/agent-resolution.ts +70 -70
  684. package/src/hooks/strategist-md-only/constants.ts +78 -78
  685. package/src/hooks/strategist-md-only/hook.ts +82 -82
  686. package/src/hooks/strategist-md-only/index.ts +2 -2
  687. package/src/hooks/strategist-md-only/path-policy.ts +41 -41
  688. package/src/hooks/sub-notepad/constants.ts +29 -29
  689. package/src/hooks/sub-notepad/hook.ts +44 -44
  690. package/src/hooks/sub-notepad/index.ts +3 -3
  691. package/src/hooks/task-reminder/hook.ts +59 -59
  692. package/src/hooks/task-reminder/index.ts +1 -1
  693. package/src/hooks/task-resume-info/hook.ts +39 -39
  694. package/src/hooks/task-resume-info/index.ts +1 -1
  695. package/src/hooks/tasks-todowrite-disabler/constants.ts +30 -30
  696. package/src/hooks/tasks-todowrite-disabler/hook.ts +34 -34
  697. package/src/hooks/tasks-todowrite-disabler/index.ts +2 -2
  698. package/src/hooks/think-mode/detector.ts +59 -59
  699. package/src/hooks/think-mode/hook.ts +76 -76
  700. package/src/hooks/think-mode/index.ts +5 -5
  701. package/src/hooks/think-mode/switcher.ts +100 -100
  702. package/src/hooks/think-mode/types.ts +16 -16
  703. package/src/hooks/thinking-block-validator/hook.ts +181 -181
  704. package/src/hooks/thinking-block-validator/index.ts +1 -1
  705. package/src/hooks/todo-continuation-enforcer/AGENTS.md +65 -65
  706. package/src/hooks/todo-continuation-enforcer/abort-detection.ts +17 -17
  707. package/src/hooks/todo-continuation-enforcer/compaction-guard.ts +39 -39
  708. package/src/hooks/todo-continuation-enforcer/constants.ts +25 -25
  709. package/src/hooks/todo-continuation-enforcer/continuation-injection.ts +222 -222
  710. package/src/hooks/todo-continuation-enforcer/countdown.ts +86 -86
  711. package/src/hooks/todo-continuation-enforcer/handler.ts +99 -99
  712. package/src/hooks/todo-continuation-enforcer/idle-event.ts +225 -225
  713. package/src/hooks/todo-continuation-enforcer/index.ts +59 -59
  714. package/src/hooks/todo-continuation-enforcer/message-directory.ts +1 -1
  715. package/src/hooks/todo-continuation-enforcer/non-idle-events.ts +107 -107
  716. package/src/hooks/todo-continuation-enforcer/pending-question-detection.ts +40 -40
  717. package/src/hooks/todo-continuation-enforcer/resolve-message-info.ts +48 -48
  718. package/src/hooks/todo-continuation-enforcer/session-state.ts +283 -283
  719. package/src/hooks/todo-continuation-enforcer/stagnation-detection.ts +36 -36
  720. package/src/hooks/todo-continuation-enforcer/todo.ts +11 -11
  721. package/src/hooks/todo-continuation-enforcer/token-limit-detection.ts +38 -38
  722. package/src/hooks/todo-continuation-enforcer/types.ts +74 -74
  723. package/src/hooks/todo-description-override/description.ts +28 -28
  724. package/src/hooks/todo-description-override/hook.ts +14 -14
  725. package/src/hooks/todo-description-override/index.ts +1 -1
  726. package/src/hooks/tool-output-truncator.ts +66 -66
  727. package/src/hooks/tool-pair-validator/hook.ts +184 -184
  728. package/src/hooks/tool-pair-validator/index.ts +1 -1
  729. package/src/hooks/unstable-agent-babysitter/index.ts +9 -9
  730. package/src/hooks/unstable-agent-babysitter/task-message-analyzer.ts +110 -110
  731. package/src/hooks/unstable-agent-babysitter/unstable-agent-babysitter-hook.ts +238 -238
  732. package/src/hooks/webfetch-redirect-guard/constants.ts +11 -11
  733. package/src/hooks/webfetch-redirect-guard/hook.ts +123 -123
  734. package/src/hooks/webfetch-redirect-guard/index.ts +1 -1
  735. package/src/hooks/webfetch-redirect-guard/redirect-resolution.ts +89 -89
  736. package/src/hooks/write-existing-file-guard/hook.ts +108 -108
  737. package/src/hooks/write-existing-file-guard/index.ts +1 -1
  738. package/src/hooks/write-existing-file-guard/session-read-permissions.ts +36 -36
  739. package/src/hooks/write-existing-file-guard/tool-execute-before-handler.ts +176 -176
  740. package/src/index.ts +284 -284
  741. package/src/internals/plugins/pty/LICENSE +21 -21
  742. package/src/internals/plugins/pty/constants.ts +7 -7
  743. package/src/internals/plugins/pty/plugin.ts +28 -28
  744. package/src/internals/plugins/pty/pty/buffer.ts +75 -75
  745. package/src/internals/plugins/pty/pty/formatters.ts +22 -22
  746. package/src/internals/plugins/pty/pty/manager.ts +175 -175
  747. package/src/internals/plugins/pty/pty/notification-manager.ts +75 -75
  748. package/src/internals/plugins/pty/pty/output-manager.ts +29 -29
  749. package/src/internals/plugins/pty/pty/permissions.ts +115 -115
  750. package/src/internals/plugins/pty/pty/session-lifecycle.ts +161 -161
  751. package/src/internals/plugins/pty/pty/tools/kill.ts +41 -41
  752. package/src/internals/plugins/pty/pty/tools/kill.txt +25 -25
  753. package/src/internals/plugins/pty/pty/tools/list.ts +25 -25
  754. package/src/internals/plugins/pty/pty/tools/list.txt +22 -22
  755. package/src/internals/plugins/pty/pty/tools/read.ts +234 -234
  756. package/src/internals/plugins/pty/pty/tools/read.txt +39 -39
  757. package/src/internals/plugins/pty/pty/tools/spawn.ts +71 -71
  758. package/src/internals/plugins/pty/pty/tools/spawn.txt +47 -47
  759. package/src/internals/plugins/pty/pty/tools/write.ts +96 -96
  760. package/src/internals/plugins/pty/pty/tools/write.txt +28 -28
  761. package/src/internals/plugins/pty/pty/types.ts +67 -67
  762. package/src/internals/plugins/pty/pty/utils.ts +21 -21
  763. package/src/internals/plugins/pty/pty/wildcard.ts +62 -62
  764. package/src/internals/plugins/pty/shared/constants.ts +7 -7
  765. package/src/internals/plugins/pty/types.ts +7 -7
  766. package/src/internals/plugins/subtask2/LICENSE +128 -128
  767. package/src/internals/plugins/subtask2/commands/index.ts +7 -7
  768. package/src/internals/plugins/subtask2/commands/loader.ts +39 -39
  769. package/src/internals/plugins/subtask2/commands/manifest.ts +64 -64
  770. package/src/internals/plugins/subtask2/commands/resolver.ts +28 -28
  771. package/src/internals/plugins/subtask2/core/plugin.ts +52 -52
  772. package/src/internals/plugins/subtask2/core/state.ts +764 -764
  773. package/src/internals/plugins/subtask2/features/auto.ts +57 -57
  774. package/src/internals/plugins/subtask2/features/index.ts +9 -9
  775. package/src/internals/plugins/subtask2/features/inline-subtasks.ts +205 -205
  776. package/src/internals/plugins/subtask2/features/parallel.ts +148 -148
  777. package/src/internals/plugins/subtask2/features/results.ts +48 -48
  778. package/src/internals/plugins/subtask2/features/returns.ts +273 -273
  779. package/src/internals/plugins/subtask2/features/turns.ts +190 -190
  780. package/src/internals/plugins/subtask2/hooks/command-hooks.ts +283 -283
  781. package/src/internals/plugins/subtask2/hooks/message-hooks.ts +603 -603
  782. package/src/internals/plugins/subtask2/hooks/session-idle-hook.ts +358 -358
  783. package/src/internals/plugins/subtask2/hooks/tool-hooks.ts +309 -309
  784. package/src/internals/plugins/subtask2/loop.ts +122 -122
  785. package/src/internals/plugins/subtask2/parsing/auto.ts +33 -33
  786. package/src/internals/plugins/subtask2/parsing/commands.ts +154 -154
  787. package/src/internals/plugins/subtask2/parsing/frontmatter.ts +20 -20
  788. package/src/internals/plugins/subtask2/parsing/index.ts +10 -10
  789. package/src/internals/plugins/subtask2/parsing/overrides.ts +68 -68
  790. package/src/internals/plugins/subtask2/parsing/parallel.ts +88 -88
  791. package/src/internals/plugins/subtask2/parsing/turns.ts +78 -78
  792. package/src/internals/plugins/subtask2/types.ts +41 -41
  793. package/src/internals/plugins/subtask2/utils/config.ts +100 -100
  794. package/src/internals/plugins/subtask2/utils/index.ts +7 -7
  795. package/src/internals/plugins/subtask2/utils/logger.ts +67 -67
  796. package/src/internals/plugins/subtask2/utils/prompts.ts +117 -117
  797. package/src/internals/plugins/websearch-cited/LICENSE +214 -214
  798. package/src/internals/plugins/websearch-cited/codex_prompt.txt +79 -79
  799. package/src/internals/plugins/websearch-cited/google.ts +749 -749
  800. package/src/internals/plugins/websearch-cited/index.ts +301 -301
  801. package/src/internals/plugins/websearch-cited/openai.ts +407 -407
  802. package/src/internals/plugins/websearch-cited/openrouter.ts +190 -190
  803. package/src/internals/plugins/websearch-cited/types.ts +7 -7
  804. package/src/lsp/index.ts +15 -15
  805. package/src/mcp/context7.ts +9 -9
  806. package/src/mcp/grep-app.ts +6 -6
  807. package/src/mcp/index.ts +87 -87
  808. package/src/mcp/omo-mcp-index.ts +35 -35
  809. package/src/mcp/types.ts +9 -9
  810. package/src/mcp/websearch.ts +44 -44
  811. package/src/permissions/index.ts +25 -25
  812. package/src/plugin/AGENTS.md +54 -54
  813. package/src/plugin/available-categories.ts +24 -24
  814. package/src/plugin/chat-headers.ts +141 -141
  815. package/src/plugin/chat-message.ts +309 -309
  816. package/src/plugin/chat-params.ts +182 -182
  817. package/src/plugin/command-execute-before.ts +80 -80
  818. package/src/plugin/event.ts +639 -639
  819. package/src/plugin/hooks/create-continuation-hooks.ts +128 -128
  820. package/src/plugin/hooks/create-core-hooks.ts +47 -47
  821. package/src/plugin/hooks/create-session-hooks.ts +286 -286
  822. package/src/plugin/hooks/create-skill-hooks.ts +50 -50
  823. package/src/plugin/hooks/create-tool-guard-hooks.ts +159 -159
  824. package/src/plugin/hooks/create-transform-hooks.ts +85 -85
  825. package/src/plugin/messages-transform.ts +28 -28
  826. package/src/plugin/normalize-tool-arg-schemas.ts +75 -75
  827. package/src/plugin/recent-synthetic-idles.ts +20 -20
  828. package/src/plugin/session-agent-resolver.ts +37 -37
  829. package/src/plugin/session-status-normalizer.ts +22 -22
  830. package/src/plugin/skill-context.ts +132 -132
  831. package/src/plugin/system-transform.ts +6 -6
  832. package/src/plugin/tool-execute-after.ts +178 -178
  833. package/src/plugin/tool-execute-before.ts +222 -222
  834. package/src/plugin/tool-registry.ts +282 -282
  835. package/src/plugin/types.ts +26 -26
  836. package/src/plugin/ultrawork-db-model-override.ts +142 -142
  837. package/src/plugin/ultrawork-model-override.ts +196 -196
  838. package/src/plugin/ultrawork-variant-availability.ts +51 -51
  839. package/src/plugin/unstable-agent-babysitter.ts +41 -41
  840. package/src/plugin-config.ts +314 -314
  841. package/src/plugin-dispose.ts +51 -51
  842. package/src/plugin-handlers/AGENTS.md +92 -92
  843. package/src/plugin-handlers/agent-config-handler.ts +502 -502
  844. package/src/plugin-handlers/agent-key-remapper.ts +39 -39
  845. package/src/plugin-handlers/agent-override-protection.ts +38 -38
  846. package/src/plugin-handlers/agent-priority-order.ts +63 -63
  847. package/src/plugin-handlers/category-config-resolver.ts +9 -9
  848. package/src/plugin-handlers/command-config-handler.ts +105 -105
  849. package/src/plugin-handlers/config-handler.ts +61 -61
  850. package/src/plugin-handlers/index.ts +10 -10
  851. package/src/plugin-handlers/mcp-config-handler.ts +205 -205
  852. package/src/plugin-handlers/plan-model-inheritance.ts +27 -27
  853. package/src/plugin-handlers/plugin-components-loader.ts +70 -70
  854. package/src/plugin-handlers/provider-config-handler.ts +73 -73
  855. package/src/plugin-handlers/strategist-agent-config-builder.ts +128 -128
  856. package/src/plugin-handlers/tool-config-handler.ts +193 -193
  857. package/src/plugin-interface.ts +83 -83
  858. package/src/plugin-state.ts +18 -18
  859. package/src/shared/AGENTS.md +54 -54
  860. package/src/shared/agent-display-names.ts +182 -182
  861. package/src/shared/agent-tool-restrictions.ts +80 -80
  862. package/src/shared/agent-variant.ts +101 -101
  863. package/src/shared/agents-config-dir.ts +23 -23
  864. package/src/shared/archive-entry-validator.ts +83 -83
  865. package/src/shared/background-output-consumption.ts +69 -69
  866. package/src/shared/binary-downloader.ts +127 -127
  867. package/src/shared/claude-config-dir.ts +16 -16
  868. package/src/shared/closure-protocol.ts +53 -53
  869. package/src/shared/command-executor/embedded-commands.ts +26 -26
  870. package/src/shared/command-executor/execute-command.ts +28 -28
  871. package/src/shared/command-executor/execute-hook-command.ts +129 -129
  872. package/src/shared/command-executor/home-directory.ts +5 -5
  873. package/src/shared/command-executor/resolve-commands-in-text.ts +49 -49
  874. package/src/shared/command-executor/shell-path.ts +27 -27
  875. package/src/shared/command-executor.ts +5 -5
  876. package/src/shared/compaction-agent-config-checkpoint.ts +42 -42
  877. package/src/shared/compaction-marker.ts +61 -61
  878. package/src/shared/config-errors.ts +18 -18
  879. package/src/shared/connected-providers-cache.ts +215 -215
  880. package/src/shared/contains-path.ts +50 -50
  881. package/src/shared/context-limit-resolver.ts +42 -42
  882. package/src/shared/data-path.ts +64 -64
  883. package/src/shared/deep-merge.ts +53 -53
  884. package/src/shared/disabled-tools.ts +19 -19
  885. package/src/shared/dynamic-truncator.ts +222 -222
  886. package/src/shared/external-plugin-detector.ts +139 -139
  887. package/src/shared/fallback-chain-from-models.ts +124 -124
  888. package/src/shared/fallback-model-availability.ts +102 -102
  889. package/src/shared/file-reference-resolver.ts +99 -99
  890. package/src/shared/file-utils.ts +34 -34
  891. package/src/shared/first-message-variant.ts +28 -28
  892. package/src/shared/frontmatter.ts +31 -31
  893. package/src/shared/git-worktree/collect-git-diff-stats.ts +56 -56
  894. package/src/shared/git-worktree/format-file-changes.ts +46 -46
  895. package/src/shared/git-worktree/index.ts +7 -7
  896. package/src/shared/git-worktree/parse-diff-numstat.ts +27 -27
  897. package/src/shared/git-worktree/parse-status-porcelain-line.ts +27 -27
  898. package/src/shared/git-worktree/parse-status-porcelain.ts +15 -15
  899. package/src/shared/git-worktree/types.ts +8 -8
  900. package/src/shared/hook-disabled.ts +22 -22
  901. package/src/shared/index.ts +80 -80
  902. package/src/shared/internal-initiator-marker.ts +18 -18
  903. package/src/shared/is-abort-error.ts +20 -20
  904. package/src/shared/json-file-cache-store.ts +98 -98
  905. package/src/shared/jsonc-parser.ts +98 -98
  906. package/src/shared/known-variants.ts +16 -16
  907. package/src/shared/legacy-plugin-warning.ts +68 -68
  908. package/src/shared/load-opencode-plugins.ts +60 -60
  909. package/src/shared/log-legacy-plugin-startup-warning.ts +46 -46
  910. package/src/shared/logger.ts +48 -48
  911. package/src/shared/merge-categories.ts +18 -18
  912. package/src/shared/migrate-legacy-config-file.ts +66 -66
  913. package/src/shared/migrate-legacy-plugin-entry.ts +75 -75
  914. package/src/shared/migration/agent-category.ts +60 -60
  915. package/src/shared/migration/agent-names.ts +100 -100
  916. package/src/shared/migration/config-migration.ts +210 -210
  917. package/src/shared/migration/hook-names.ts +40 -40
  918. package/src/shared/migration/migrations-sidecar.ts +92 -92
  919. package/src/shared/migration/model-versions.ts +50 -50
  920. package/src/shared/migration.ts +5 -5
  921. package/src/shared/model-availability.ts +294 -294
  922. package/src/shared/model-capabilities/bundled-snapshot.ts +15 -15
  923. package/src/shared/model-capabilities/get-model-capabilities.ts +140 -140
  924. package/src/shared/model-capabilities/index.ts +9 -9
  925. package/src/shared/model-capabilities/runtime-model-readers.ts +190 -190
  926. package/src/shared/model-capabilities/types.ts +80 -80
  927. package/src/shared/model-capabilities-cache.ts +213 -213
  928. package/src/shared/model-capability-aliases.ts +108 -108
  929. package/src/shared/model-capability-guardrails.ts +149 -149
  930. package/src/shared/model-capability-heuristics.ts +32 -32
  931. package/src/shared/model-error-classifier.ts +214 -214
  932. package/src/shared/model-format-normalizer.ts +20 -20
  933. package/src/shared/model-normalization.ts +8 -8
  934. package/src/shared/model-requirements.ts +26 -26
  935. package/src/shared/model-resolution-pipeline.ts +216 -216
  936. package/src/shared/model-resolution-types.ts +41 -41
  937. package/src/shared/model-resolver.ts +106 -106
  938. package/src/shared/model-sanitizer.ts +12 -12
  939. package/src/shared/model-settings-compatibility.ts +200 -200
  940. package/src/shared/model-suggestion-retry.ts +182 -182
  941. package/src/shared/normalize-sdk-response.ts +36 -36
  942. package/src/shared/opencode-command-dirs.ts +36 -36
  943. package/src/shared/opencode-config-dir-types.ts +15 -15
  944. package/src/shared/opencode-config-dir.ts +135 -135
  945. package/src/shared/opencode-http-api.ts +139 -139
  946. package/src/shared/opencode-message-dir.ts +29 -29
  947. package/src/shared/opencode-server-auth.ts +190 -190
  948. package/src/shared/opencode-storage-detection.ts +33 -33
  949. package/src/shared/opencode-storage-paths.ts +6 -6
  950. package/src/shared/opencode-version.ts +80 -80
  951. package/src/shared/parse-tools-config.ts +25 -25
  952. package/src/shared/pattern-matcher.ts +46 -46
  953. package/src/shared/permission-compat.ts +86 -86
  954. package/src/shared/plugin-command-discovery.ts +28 -28
  955. package/src/shared/plugin-entry-migrator.ts +21 -21
  956. package/src/shared/plugin-identity.ts +8 -8
  957. package/src/shared/port-utils.ts +48 -48
  958. package/src/shared/project-discovery-dirs.ts +101 -101
  959. package/src/shared/prompt-timeout-context.ts +49 -49
  960. package/src/shared/prompt-tools.ts +35 -35
  961. package/src/shared/provider-model-id-transform.ts +58 -58
  962. package/src/shared/question-denied-session-permission.ts +9 -9
  963. package/src/shared/record-type-guard.ts +3 -3
  964. package/src/shared/resolve-agent-definition-paths.ts +22 -22
  965. package/src/shared/retry-status-utils.ts +19 -19
  966. package/src/shared/runtime-plugin-config.ts +98 -98
  967. package/src/shared/safe-create-hook.ts +24 -24
  968. package/src/shared/session-category-registry.ts +27 -27
  969. package/src/shared/session-cursor.ts +108 -108
  970. package/src/shared/session-directory-resolver.ts +41 -41
  971. package/src/shared/session-injected-paths.ts +59 -59
  972. package/src/shared/session-model-state.ts +15 -15
  973. package/src/shared/session-prompt-params-helpers.ts +31 -31
  974. package/src/shared/session-prompt-params-state.ts +37 -37
  975. package/src/shared/session-tools-store.ts +18 -18
  976. package/src/shared/session-utils.ts +25 -25
  977. package/src/shared/shell-env.ts +175 -175
  978. package/src/shared/skill-path-resolver.ts +26 -26
  979. package/src/shared/snake-case.ts +44 -44
  980. package/src/shared/spawn-with-windows-hide.ts +84 -84
  981. package/src/shared/system-directive.ts +67 -67
  982. package/src/shared/task-system-enabled.ts +9 -9
  983. package/src/shared/tmux/constants.ts +12 -12
  984. package/src/shared/tmux/index.ts +3 -3
  985. package/src/shared/tmux/tmux-utils/environment.ts +13 -13
  986. package/src/shared/tmux/tmux-utils/layout.ts +96 -96
  987. package/src/shared/tmux/tmux-utils/pane-close.ts +48 -48
  988. package/src/shared/tmux/tmux-utils/pane-dimensions.ts +28 -28
  989. package/src/shared/tmux/tmux-utils/pane-replace.ts +73 -73
  990. package/src/shared/tmux/tmux-utils/pane-spawn.ts +94 -94
  991. package/src/shared/tmux/tmux-utils/server-health.ts +62 -62
  992. package/src/shared/tmux/tmux-utils/session-spawn.ts +145 -145
  993. package/src/shared/tmux/tmux-utils/window-spawn.ts +93 -93
  994. package/src/shared/tmux/tmux-utils.ts +15 -15
  995. package/src/shared/tmux/types.ts +4 -4
  996. package/src/shared/tool-name.ts +27 -27
  997. package/src/shared/truncate-description.ts +11 -11
  998. package/src/shared/vision-capable-models-cache.ts +17 -17
  999. package/src/shared/write-file-atomically.ts +31 -31
  1000. package/src/shared/zip-entry-listing/powershell-zip-entry-listing.ts +99 -99
  1001. package/src/shared/zip-entry-listing/python-zip-entry-listing.ts +55 -55
  1002. package/src/shared/zip-entry-listing/read-zip-symlink-target.ts +23 -23
  1003. package/src/shared/zip-entry-listing/tar-zip-entry-listing.ts +93 -93
  1004. package/src/shared/zip-entry-listing/zipinfo-zip-entry-listing.ts +72 -72
  1005. package/src/shared/zip-entry-listing.ts +13 -13
  1006. package/src/shared/zip-extractor.ts +118 -118
  1007. package/src/skills/index.ts +56 -56
  1008. package/src/testing/module-mock-lifecycle.ts +143 -143
  1009. package/src/tools/AGENTS.md +108 -108
  1010. package/src/tools/ast-grep/cli-binary-path-resolution.ts +60 -60
  1011. package/src/tools/ast-grep/cli.ts +177 -177
  1012. package/src/tools/ast-grep/constants.ts +5 -5
  1013. package/src/tools/ast-grep/downloader.ts +119 -119
  1014. package/src/tools/ast-grep/environment-check.ts +89 -89
  1015. package/src/tools/ast-grep/index.ts +5 -5
  1016. package/src/tools/ast-grep/language-support.ts +63 -63
  1017. package/src/tools/ast-grep/process-output-timeout.ts +28 -28
  1018. package/src/tools/ast-grep/result-formatter.ts +102 -102
  1019. package/src/tools/ast-grep/sg-cli-path.ts +102 -102
  1020. package/src/tools/ast-grep/sg-compact-json-output.ts +54 -54
  1021. package/src/tools/ast-grep/tools.ts +117 -117
  1022. package/src/tools/ast-grep/types.ts +61 -61
  1023. package/src/tools/background-task/AGENTS.md +53 -53
  1024. package/src/tools/background-task/clients.ts +32 -32
  1025. package/src/tools/background-task/constants.ts +9 -9
  1026. package/src/tools/background-task/create-background-cancel.ts +115 -115
  1027. package/src/tools/background-task/create-background-output.ts +159 -159
  1028. package/src/tools/background-task/create-background-task.ts +126 -126
  1029. package/src/tools/background-task/delay.ts +3 -3
  1030. package/src/tools/background-task/full-session-format.ts +148 -148
  1031. package/src/tools/background-task/index.ts +8 -8
  1032. package/src/tools/background-task/message-dir.ts +1 -1
  1033. package/src/tools/background-task/session-messages.ts +22 -22
  1034. package/src/tools/background-task/task-result-format.ts +113 -113
  1035. package/src/tools/background-task/task-status-format.ts +72 -72
  1036. package/src/tools/background-task/time-format.ts +30 -30
  1037. package/src/tools/background-task/tools.ts +11 -11
  1038. package/src/tools/background-task/truncate-text.ts +4 -4
  1039. package/src/tools/background-task/types.ts +72 -72
  1040. package/src/tools/call-omo-agent/AGENTS.md +51 -51
  1041. package/src/tools/call-omo-agent/agent-resolver.ts +64 -64
  1042. package/src/tools/call-omo-agent/background-agent-executor.ts +91 -91
  1043. package/src/tools/call-omo-agent/background-executor.ts +98 -98
  1044. package/src/tools/call-omo-agent/completion-poller.ts +65 -65
  1045. package/src/tools/call-omo-agent/constants.ts +23 -23
  1046. package/src/tools/call-omo-agent/index.ts +3 -3
  1047. package/src/tools/call-omo-agent/message-dir.ts +1 -1
  1048. package/src/tools/call-omo-agent/message-processor.ts +86 -86
  1049. package/src/tools/call-omo-agent/message-storage-directory.ts +1 -1
  1050. package/src/tools/call-omo-agent/session-creator.ts +70 -70
  1051. package/src/tools/call-omo-agent/subagent-session-creator.ts +74 -74
  1052. package/src/tools/call-omo-agent/sync-executor.ts +148 -148
  1053. package/src/tools/call-omo-agent/tool-context-with-metadata.ts +10 -10
  1054. package/src/tools/call-omo-agent/tools.ts +192 -192
  1055. package/src/tools/call-omo-agent/types.ts +34 -34
  1056. package/src/tools/delegate-task/AGENTS.md +58 -58
  1057. package/src/tools/delegate-task/anthropic-categories.ts +62 -62
  1058. package/src/tools/delegate-task/available-models.ts +64 -64
  1059. package/src/tools/delegate-task/background-continuation.ts +68 -68
  1060. package/src/tools/delegate-task/background-task.ts +165 -165
  1061. package/src/tools/delegate-task/builtin-categories.ts +33 -33
  1062. package/src/tools/delegate-task/builtin-category-definition.ts +8 -8
  1063. package/src/tools/delegate-task/cancel-unstable-agent-task.ts +19 -19
  1064. package/src/tools/delegate-task/categories.ts +77 -77
  1065. package/src/tools/delegate-task/category-resolver.ts +310 -310
  1066. package/src/tools/delegate-task/constants.ts +351 -351
  1067. package/src/tools/delegate-task/delegated-model-config.ts +20 -20
  1068. package/src/tools/delegate-task/error-formatting.ts +51 -51
  1069. package/src/tools/delegate-task/executor-types.ts +39 -39
  1070. package/src/tools/delegate-task/executor.ts +16 -16
  1071. package/src/tools/delegate-task/fallback-entry-resolution.ts +27 -27
  1072. package/src/tools/delegate-task/fallback-entry-settings.ts +20 -20
  1073. package/src/tools/delegate-task/google-categories.ts +130 -130
  1074. package/src/tools/delegate-task/index.ts +4 -4
  1075. package/src/tools/delegate-task/kimi-categories.ts +40 -40
  1076. package/src/tools/delegate-task/model-selection.ts +201 -201
  1077. package/src/tools/delegate-task/model-string-parser.ts +63 -63
  1078. package/src/tools/delegate-task/openai-categories.ts +128 -128
  1079. package/src/tools/delegate-task/parent-context-resolver.ts +47 -47
  1080. package/src/tools/delegate-task/prompt-builder.ts +107 -107
  1081. package/src/tools/delegate-task/resolve-call-id.ts +5 -5
  1082. package/src/tools/delegate-task/skill-resolver.ts +22 -22
  1083. package/src/tools/delegate-task/sub-agent.ts +70 -70
  1084. package/src/tools/delegate-task/subagent-discovery.ts +152 -152
  1085. package/src/tools/delegate-task/subagent-resolver.ts +225 -225
  1086. package/src/tools/delegate-task/sync-continuation-deps.ts +9 -9
  1087. package/src/tools/delegate-task/sync-continuation.ts +149 -149
  1088. package/src/tools/delegate-task/sync-prompt-sender.ts +137 -137
  1089. package/src/tools/delegate-task/sync-result-fetcher.ts +60 -60
  1090. package/src/tools/delegate-task/sync-session-creator.ts +29 -29
  1091. package/src/tools/delegate-task/sync-session-poller.ts +188 -188
  1092. package/src/tools/delegate-task/sync-task-deps.ts +13 -13
  1093. package/src/tools/delegate-task/sync-task-fallback.ts +68 -68
  1094. package/src/tools/delegate-task/sync-task.ts +243 -243
  1095. package/src/tools/delegate-task/time-formatter.ts +13 -13
  1096. package/src/tools/delegate-task/timing.ts +46 -46
  1097. package/src/tools/delegate-task/token-limiter.ts +123 -123
  1098. package/src/tools/delegate-task/tools.ts +259 -259
  1099. package/src/tools/delegate-task/types.ts +89 -89
  1100. package/src/tools/delegate-task/unstable-agent-task.ts +243 -243
  1101. package/src/tools/glob/cli.ts +206 -206
  1102. package/src/tools/glob/constants.ts +12 -12
  1103. package/src/tools/glob/index.ts +1 -1
  1104. package/src/tools/glob/result-formatter.ts +26 -26
  1105. package/src/tools/glob/tools.ts +49 -49
  1106. package/src/tools/glob/types.ts +23 -23
  1107. package/src/tools/grep/cli.ts +279 -279
  1108. package/src/tools/grep/constants.ts +141 -141
  1109. package/src/tools/grep/downloader.ts +128 -128
  1110. package/src/tools/grep/index.ts +1 -1
  1111. package/src/tools/grep/result-formatter.ts +60 -60
  1112. package/src/tools/grep/tools.ts +75 -75
  1113. package/src/tools/grep/types.ts +42 -42
  1114. package/src/tools/hashline-edit/AGENTS.md +92 -92
  1115. package/src/tools/hashline-edit/autocorrect-replacement-lines.ts +179 -179
  1116. package/src/tools/hashline-edit/constants.ts +10 -10
  1117. package/src/tools/hashline-edit/diff-utils.ts +53 -53
  1118. package/src/tools/hashline-edit/edit-deduplication.ts +43 -43
  1119. package/src/tools/hashline-edit/edit-operation-primitives.ts +126 -126
  1120. package/src/tools/hashline-edit/edit-operations.ts +103 -103
  1121. package/src/tools/hashline-edit/edit-ordering.ts +56 -56
  1122. package/src/tools/hashline-edit/edit-text-normalization.ts +111 -111
  1123. package/src/tools/hashline-edit/file-text-canonicalization.ts +44 -44
  1124. package/src/tools/hashline-edit/formatter-trigger.ts +132 -132
  1125. package/src/tools/hashline-edit/hash-computation.ts +154 -154
  1126. package/src/tools/hashline-edit/hashline-chunk-formatter.ts +52 -52
  1127. package/src/tools/hashline-edit/hashline-edit-diff.ts +31 -31
  1128. package/src/tools/hashline-edit/hashline-edit-executor.ts +197 -197
  1129. package/src/tools/hashline-edit/index.ts +20 -20
  1130. package/src/tools/hashline-edit/normalize-edits.ts +95 -95
  1131. package/src/tools/hashline-edit/tool-description.ts +95 -95
  1132. package/src/tools/hashline-edit/tools.ts +42 -42
  1133. package/src/tools/hashline-edit/types.ts +20 -20
  1134. package/src/tools/hashline-edit/validation.ts +181 -181
  1135. package/src/tools/index.ts +64 -64
  1136. package/src/tools/interactive-bash/constants.ts +18 -18
  1137. package/src/tools/interactive-bash/index.ts +4 -4
  1138. package/src/tools/interactive-bash/tmux-path-resolver.ts +71 -71
  1139. package/src/tools/interactive-bash/tools.ts +136 -136
  1140. package/src/tools/look-at/assistant-message-extractor.ts +67 -67
  1141. package/src/tools/look-at/constants.ts +3 -3
  1142. package/src/tools/look-at/image-converter.ts +164 -164
  1143. package/src/tools/look-at/index.ts +3 -3
  1144. package/src/tools/look-at/look-at-arguments.ts +34 -34
  1145. package/src/tools/look-at/mime-type-inference.ts +94 -94
  1146. package/src/tools/look-at/multimodal-agent-metadata.ts +166 -166
  1147. package/src/tools/look-at/multimodal-fallback-chain.ts +66 -66
  1148. package/src/tools/look-at/session-poller.ts +42 -42
  1149. package/src/tools/look-at/tools.ts +245 -245
  1150. package/src/tools/look-at/types.ts +5 -5
  1151. package/src/tools/lsp/AGENTS.md +70 -70
  1152. package/src/tools/lsp/client.ts +3 -3
  1153. package/src/tools/lsp/config.ts +3 -3
  1154. package/src/tools/lsp/constants.ts +7 -7
  1155. package/src/tools/lsp/diagnostics-tool.ts +75 -75
  1156. package/src/tools/lsp/directory-diagnostics.ts +163 -163
  1157. package/src/tools/lsp/find-references-tool.ts +43 -43
  1158. package/src/tools/lsp/goto-definition-tool.ts +42 -42
  1159. package/src/tools/lsp/index.ts +9 -9
  1160. package/src/tools/lsp/infer-extension.ts +65 -65
  1161. package/src/tools/lsp/language-config.ts +5 -5
  1162. package/src/tools/lsp/language-mappings.ts +171 -171
  1163. package/src/tools/lsp/lsp-client-connection.ts +66 -66
  1164. package/src/tools/lsp/lsp-client-transport.ts +210 -210
  1165. package/src/tools/lsp/lsp-client-wrapper.ts +116 -116
  1166. package/src/tools/lsp/lsp-client.ts +129 -129
  1167. package/src/tools/lsp/lsp-formatters.ts +193 -193
  1168. package/src/tools/lsp/lsp-manager-process-cleanup.ts +83 -83
  1169. package/src/tools/lsp/lsp-manager-temp-directory-cleanup.ts +29 -29
  1170. package/src/tools/lsp/lsp-process.ts +158 -158
  1171. package/src/tools/lsp/lsp-server.ts +217 -217
  1172. package/src/tools/lsp/rename-tools.ts +53 -53
  1173. package/src/tools/lsp/server-config-loader.ts +116 -116
  1174. package/src/tools/lsp/server-definitions.ts +91 -91
  1175. package/src/tools/lsp/server-installation.ts +58 -58
  1176. package/src/tools/lsp/server-path-bases.ts +16 -16
  1177. package/src/tools/lsp/server-resolution.ts +109 -109
  1178. package/src/tools/lsp/symbols-tool.ts +76 -76
  1179. package/src/tools/lsp/tools.ts +5 -5
  1180. package/src/tools/lsp/types.ts +124 -124
  1181. package/src/tools/lsp/workspace-edit.ts +121 -121
  1182. package/src/tools/session-manager/constants.ts +93 -93
  1183. package/src/tools/session-manager/file-storage.ts +203 -203
  1184. package/src/tools/session-manager/index.ts +3 -3
  1185. package/src/tools/session-manager/sdk-storage.ts +135 -135
  1186. package/src/tools/session-manager/sdk-unavailable.ts +43 -43
  1187. package/src/tools/session-manager/session-formatter.ts +199 -199
  1188. package/src/tools/session-manager/storage.ts +161 -161
  1189. package/src/tools/session-manager/tools.ts +197 -197
  1190. package/src/tools/session-manager/types.ts +99 -99
  1191. package/src/tools/shared/semaphore.ts +32 -32
  1192. package/src/tools/skill/constants.ts +14 -14
  1193. package/src/tools/skill/description-formatter.ts +61 -61
  1194. package/src/tools/skill/index.ts +3 -3
  1195. package/src/tools/skill/mcp-capability-formatter.ts +97 -97
  1196. package/src/tools/skill/native-skills.ts +62 -62
  1197. package/src/tools/skill/scope-priority.ts +17 -17
  1198. package/src/tools/skill/skill-body.ts +26 -26
  1199. package/src/tools/skill/skill-matcher.ts +40 -40
  1200. package/src/tools/skill/tools.ts +196 -196
  1201. package/src/tools/skill/types.ts +48 -48
  1202. package/src/tools/skill-mcp/constants.ts +9 -9
  1203. package/src/tools/skill-mcp/index.ts +3 -3
  1204. package/src/tools/skill-mcp/tools.ts +204 -204
  1205. package/src/tools/skill-mcp/types.ts +8 -8
  1206. package/src/tools/slashcommand/command-discovery.ts +161 -161
  1207. package/src/tools/slashcommand/command-output-formatter.ts +75 -75
  1208. package/src/tools/slashcommand/index.ts +2 -2
  1209. package/src/tools/slashcommand/types.ts +21 -21
  1210. package/src/tools/task/index.ts +7 -7
  1211. package/src/tools/task/task-create.ts +113 -113
  1212. package/src/tools/task/task-get.ts +47 -47
  1213. package/src/tools/task/task-list.ts +79 -79
  1214. package/src/tools/task/task-update.ts +152 -152
  1215. package/src/tools/task/todo-sync.ts +205 -205
  1216. package/src/tools/task/types.ts +77 -77
  1217. package/scripts/check_docs.ts +0 -129
  1218. package/scripts/doctor.ts +0 -522
  1219. package/scripts/measure_prompts.ts +0 -193
  1220. package/scripts/test_routing.ts +0 -294
package/src/agents/bob.ts CHANGED
@@ -1,528 +1,528 @@
1
- import type { AgentConfig } from "@opencode-ai/sdk";
2
- import type { AgentMode, AgentPromptMetadata } from "./types";
3
- import { isGptModel, isGeminiModel, isGptProModel } from "./types";
4
- import {
5
- buildGeminiToolMandate,
6
- buildGeminiDelegationOverride,
7
- buildGeminiVerificationOverride,
8
- buildGeminiIntentGateEnforcement,
9
- buildGeminiToolGuide,
10
- buildGeminiToolCallExamples,
11
- } from "./bob/gemini";
12
- import { buildGptProBobPrompt } from "./bob/gpt-pro";
13
- import { getGptApplyPatchPermission } from "./gpt-apply-patch-guard";
14
-
15
- const MODE: AgentMode = "primary";
16
- export const BOB_PROMPT_METADATA: AgentPromptMetadata = {
17
- category: "utility",
18
- cost: "EXPENSIVE",
19
- promptAlias: "Bob",
20
- triggers: [],
21
- };
22
- import type {
23
- AvailableAgent,
24
- AvailableTool,
25
- AvailableSkill,
26
- AvailableCategory,
27
- } from "./dynamic-agent-prompt-builder";
28
- import {
29
- buildAgentIdentitySection,
30
- buildKeyTriggersSection,
31
- buildToolSelectionTable,
32
- buildResearcherSection,
33
- buildDelegationTable,
34
- buildCategorySkillsDelegationGuide,
35
- buildStrategistAndCriticSection,
36
- buildHardRulesSection,
37
- buildParallelDelegationSection,
38
- buildAntiDuplicationSection,
39
- categorizeTools,
40
- } from "./dynamic-agent-prompt-builder";
41
- import { buildTodoDisciplineSection } from "./prompt-library/todo-discipline";
42
- import { buildIntentGate } from "./prompt-library/intent-gate";
43
-
44
- function buildDynamicBobPrompt(
45
- model: string,
46
- availableAgents: AvailableAgent[],
47
- availableTools: AvailableTool[] = [],
48
- availableSkills: AvailableSkill[] = [],
49
- availableCategories: AvailableCategory[] = [],
50
- useTaskSystem = false,
51
- ): string {
52
- const keyTriggers = buildKeyTriggersSection(availableAgents, availableSkills);
53
- const toolSelection = buildToolSelectionTable(
54
- availableAgents,
55
- availableTools,
56
- availableSkills,
57
- );
58
- const researcherSection = buildResearcherSection(availableAgents);
59
- const categorySkillsGuide = buildCategorySkillsDelegationGuide(
60
- availableCategories,
61
- availableSkills,
62
- );
63
- const delegationTable = buildDelegationTable(availableAgents);
64
- const strategistCriticSection = buildStrategistAndCriticSection(availableAgents);
65
- const hardRules = buildHardRulesSection();
66
- const parallelDelegationSection = buildParallelDelegationSection(model, availableCategories);
67
- const todoDisciplineSection = buildTodoDisciplineSection(useTaskSystem);
68
- const todoHookNote = useTaskSystem
69
- ? "YOUR TASK CREATION WOULD BE TRACKED BY HOOK([SYSTEM REMINDER - TASK CONTINUATION])"
70
- : "YOUR TODO CREATION WOULD BE TRACKED BY HOOK([SYSTEM REMINDER - TODO CONTINUATION])";
71
-
72
- const agentIdentity = buildAgentIdentitySection(
73
- "Bob",
74
- "Powerful AI Agent with orchestration capabilities from HiaiOpenCode",
75
- );
76
-
77
- return `${agentIdentity}
78
- <Role>
79
- You are "Bob" - Powerful AI Agent with orchestration capabilities from HiaiOpenCode.
80
-
81
- **Core Competencies**:
82
- - Parsing implicit requirements from explicit requests
83
- - Adapting to codebase maturity (disciplined vs chaotic)
84
- - Delegating specialized work to the right subagents
85
- - Parallel execution for maximum throughput
86
- - Follows user instructions. NEVER START IMPLEMENTING, UNLESS USER WANTS YOU TO IMPLEMENT SOMETHING EXPLICITLY.
87
- - KEEP IN MIND: ${todoHookNote}, BUT IF NOT USER REQUESTED YOU TO WORK, NEVER START WORK.
88
-
89
- **Operating Mode**: You NEVER work alone when specialists are available. Frontend work → delegate. Deep research → parallel background researcher agents. Complex architecture → consult Strategist. High-risk plan acceptance → escalate to Critic.
90
-
91
- </Role>
92
- <Behavior_Instructions>
93
-
94
- ## Phase 0 - Intent Gate (EVERY message)
95
-
96
- ${keyTriggers}
97
-
98
- ${buildIntentGate('router')}
99
-
100
- ### Step 1: Classify Request Type
101
-
102
- - **Trivial** (single file, known location, direct answer) → Direct tools only (UNLESS Key Trigger applies)
103
- - **Explicit** (specific file/line, clear command) → Execute directly
104
- - **Exploratory** ("How does X work?", "Find Y") → Fire researcher (1-3) + tools in parallel
105
- - **Open-ended** ("Improve", "Refactor", "Add feature") → Assess codebase first
106
- - **Ambiguous** (unclear scope, multiple interpretations) → Ask ONE clarifying question
107
-
108
- ### Step 1.5: Turn-Local Intent Reset
109
-
110
- - Reclassify intent from the CURRENT user message only. Never auto-carry "implementation mode" from prior turns.
111
- - If current message is a question/explanation/investigation request, answer/analyze only. Do NOT create todos or edit files.
112
- - If user is still giving context or constraints, gather/confirm context first. Do NOT start implementation yet.
113
-
114
- ### Step 2: Check for Ambiguity
115
-
116
- - Single valid interpretation → Proceed
117
- - Multiple interpretations, similar effort → Proceed with reasonable default, note assumption
118
- - Multiple interpretations, 2x+ effort difference → **MUST ask**
119
- - Missing critical info (file, error, context) → **MUST ask**
120
- - User's design seems flawed or suboptimal → **MUST raise concern** before implementing
121
-
122
- ### Step 2.5: Context-Completion Gate (BEFORE Implementation)
123
-
124
- You may implement only when ALL are true:
125
- 1. The current message contains an explicit implementation verb (implement/add/create/fix/change/write).
126
- 2. Scope/objective is sufficiently concrete to execute without guessing.
127
- 3. No blocking specialist result is pending that your implementation depends on (especially Strategist/Critic).
128
-
129
- If any condition fails, do research/clarification only, then wait.
130
-
131
- ### Step 3: Validate Before Acting
132
-
133
- **Assumptions Check:**
134
- - Do I have any implicit assumptions that might affect the outcome?
135
- - Is the search scope clear?
136
-
137
- **Delegation Check (before acting directly):**
138
- 1. Is there a specialized agent that perfectly matches this request?
139
- 2. If not, is there a \`task\` category best describes this task? (visual-engineering, ultrabrain, quick etc.) What skills are available to equip the agent with?
140
- - MUST FIND skills to use, for: \`task(load_skills=[{skill1}, ...])\` MUST PASS SKILL AS TASK PARAMETER.
141
- 3. Is this a bounded low-risk change that should still go through a bounded \`task(category="quick" | "writing" | "unspecified-low")\` route, which now executes on \`coder\`?
142
- 4. Can I do it myself for the best result, FOR SURE? REALLY, REALLY, THERE IS NO APPROPRIATE CATEGORIES TO WORK WITH?
143
-
144
- **Default Bias: DELEGATE. WORK YOURSELF ONLY WHEN IT IS SUPER SIMPLE.**
145
-
146
- ### When to Challenge the User
147
- If you observe:
148
- - A design decision that will cause obvious problems
149
- - An approach that contradicts established patterns in the codebase
150
- - A request that seems to misunderstand how the existing code works
151
-
152
- Then: Raise your concern concisely. Propose an alternative. Ask if they want to proceed anyway.
153
-
154
- \`\`\`
155
- I notice [observation]. This might cause [problem] because [reason].
156
- Alternative: [your suggestion].
157
- Should I proceed with your original request, or try the alternative?
158
- \`\`\`
159
-
160
- ---
161
-
162
- ## Phase 1 - Codebase Assessment (for Open-ended tasks)
163
-
164
- Before following existing patterns, assess whether they're worth following.
165
-
166
- ### Quick Assessment:
167
- 1. Check config files: linter, formatter, type config
168
- 2. Sample 2-3 similar files for consistency
169
- 3. Note project age signals (dependencies, patterns)
170
-
171
- ### State Classification:
172
-
173
- - **Disciplined** (consistent patterns, configs present, tests exist) → Follow existing style strictly
174
- - **Transitional** (mixed patterns, some structure) → Ask: "I see X and Y patterns. Which to follow?"
175
- - **Legacy/Chaotic** (no consistency, outdated patterns) → Propose: "No clear conventions. I suggest [X]. OK?"
176
- - **Greenfield** (new/empty project) → Apply modern best practices
177
-
178
- IMPORTANT: If codebase appears undisciplined, verify before assuming:
179
- - Different patterns may serve different purposes (intentional)
180
- - Migration might be in progress
181
- - You might be looking at the wrong reference files
182
-
183
- ---
184
-
185
- ## Phase 2A - Exploration & Research
186
-
187
- ${toolSelection}
188
-
189
- ${researcherSection}
190
-
191
- ### Parallel Execution (DEFAULT behavior)
192
-
193
- **Parallelize EVERYTHING. Independent reads, searches, and agents run SIMULTANEOUSLY.**
194
-
195
- <tool_usage_rules>
196
- - Parallelize independent tool calls: multiple file reads, grep searches, agent fires - all at once
197
- - Researcher = background grep. ALWAYS \`run_in_background=true\`, ALWAYS parallel
198
- - Fire 2-5 researcher agents in parallel for any non-trivial codebase question
199
- - Parallelize independent file reads - don't read files one at a time
200
- - After any write/edit tool call, briefly restate what changed, where, and what validation follows
201
- - Prefer tools over internal knowledge whenever you need specific data (files, configs, patterns)
202
- </tool_usage_rules>
203
-
204
- **Researcher = Grep, not consultants.
205
-
206
- \`\`\`typescript
207
- // CORRECT: Always background, always parallel
208
- // Prompt structure (each field should be substantive, not a single sentence):
209
- // [CONTEXT]: What task I'm working on, which files/modules are involved, and what approach I'm taking
210
- // [GOAL]: The specific outcome I need - what decision or action the results will unblock
211
- // [DOWNSTREAM]: How I will use the results - what I'll build/decide based on what's found
212
- // [REQUEST]: Concrete search instructions - what to find, what format to return, and what to SKIP
213
-
214
- // Contextual Grep (internal)
215
- task(subagent_type="researcher", run_in_background=true, load_skills=[], description="Find auth implementations", prompt="I'm implementing JWT auth for the REST API in src/api/routes/. I need to match existing auth conventions so my code fits seamlessly. I'll use this to decide middleware structure and token flow. Find: auth middleware, login/signup handlers, token generation, credential validation. Focus on src/ - skip tests. Return file paths with pattern descriptions.")
216
- task(subagent_type="researcher", run_in_background=true, load_skills=[], description="Find error handling patterns", prompt="I'm adding error handling to the auth flow and need to follow existing error conventions exactly. I'll use this to structure my error responses and pick the right base class. Find: custom Error subclasses, error response format (JSON shape), try/catch patterns in handlers, global error middleware. Skip test files. Return the error class hierarchy and response format.")
217
-
218
- // Reference Grep (external)
219
- task(subagent_type="researcher", run_in_background=true, load_skills=[], description="Find JWT security docs", prompt="I'm implementing JWT auth and need current security best practices to choose token storage (httpOnly cookies vs localStorage) and set expiration policy. Find: OWASP auth guidelines, recommended token lifetimes, refresh token rotation strategies, common JWT vulnerabilities. Skip 'what is JWT' tutorials - production security guidance only.")
220
- task(subagent_type="researcher", run_in_background=true, load_skills=[], description="Find Express auth patterns", prompt="I'm building Express auth middleware and need production-quality patterns to structure my middleware chain. Find how established Express apps (1000+ stars) handle: middleware ordering, token refresh, role-based access control, auth error propagation. Skip basic tutorials - I need battle-tested patterns with proper error handling.")
221
- // Continue only with non-overlapping work. If none exists, end your response and wait for completion.
222
- // WRONG: Sequential or blocking
223
- result = task(..., run_in_background=false) // Never wait synchronously for researcher
224
- \`\`\`
225
-
226
- ### Background Result Collection:
227
- 1. Launch parallel agents \u2192 receive task_ids
228
- 2. Continue only with non-overlapping work
229
- - If you have DIFFERENT independent work \u2192 do it now
230
- - Otherwise \u2192 **END YOUR RESPONSE.**
231
- 3. **STOP. END YOUR RESPONSE.** The system will send \`<system-reminder>\` when tasks complete.
232
- 4. On receiving \`<system-reminder>\` \u2192 collect results via \`background_output(task_id="...")\`
233
- 5. **NEVER call \`background_output\` before receiving \`<system-reminder>\`.** This is a blocking anti-pattern.
234
- 6. Cleanup: Cancel disposable tasks individually via \`background_cancel(taskId="...")\`
235
-
236
- ${buildAntiDuplicationSection()}
237
-
238
- ### Search Stop Conditions
239
-
240
- STOP searching when:
241
- - You have enough context to proceed confidently
242
- - Same information appearing across multiple sources
243
- - 2 search iterations yielded no new useful data
244
- - Direct answer found
245
-
246
- **DO NOT over-research. Time is precious.**
247
-
248
- ---
249
-
250
- ## Phase 2B - Implementation
251
-
252
- ### Pre-Implementation:
253
- 0. Find relevant skills that you can load, and load them IMMEDIATELY.
254
- 1. If task has 2+ steps → Create todo list IMMEDIATELY, IN SUPER DETAIL. No announcements-just create it.
255
- 2. Mark current task \`in_progress\` before starting
256
- 3. Mark \`completed\` as soon as done (don't batch) - OBSESSIVELY TRACK YOUR WORK USING TODO TOOLS
257
-
258
- ${categorySkillsGuide}
259
-
260
- ${parallelDelegationSection}
261
-
262
- ${delegationTable}
263
-
264
- ### Delegation Prompt Structure (ALL 6 sections):
265
-
266
- When delegating, your prompt MUST include:
267
-
268
- \`\`\`
269
- 1. TASK: Atomic, specific goal (one action per delegation)
270
- 2. EXPECTED OUTCOME: Concrete deliverables with success criteria
271
- 3. REQUIRED TOOLS: Explicit tool whitelist (prevents tool sprawl)
272
- 4. MUST DO: Exhaustive requirements - leave NOTHING implicit
273
- 5. MUST NOT DO: Forbidden actions - anticipate and block rogue behavior
274
- 6. CONTEXT: File paths, existing patterns, constraints
275
- \`\`\`
276
-
277
- AFTER THE WORK YOU DELEGATED SEEMS DONE, ALWAYS VERIFY THE RESULTS AS FOLLOWING:
278
- - DOES IT WORK AS EXPECTED?
279
- - DOES IT FOLLOWED THE EXISTING CODEBASE PATTERN?
280
- - EXPECTED RESULT CAME OUT?
281
- - DID THE AGENT FOLLOWED "MUST DO" AND "MUST NOT DO" REQUIREMENTS?
282
-
283
- **Vague prompts = rejected. Be exhaustive.**
284
-
285
- ### Session Continuity
286
-
287
- Every \`task()\` output includes a session_id. **USE IT.**
288
-
289
- **ALWAYS continue when:**
290
- - Task failed/incomplete → \`session_id=\"{session_id}\", prompt=\"Fix: {specific error}\"\`
291
- - Follow-up question on result → \`session_id=\"{session_id}\", prompt=\"Also: {question}\"\`
292
- - Multi-turn with same agent → \`session_id=\"{session_id}\"\` - NEVER start fresh
293
- - Verification failed → \`session_id=\"{session_id}\", prompt=\"Failed verification: {error}. Fix.\"\`
294
-
295
- **Why session_id is important:**
296
- - Subagent has FULL conversation context preserved
297
- - No repeated file reads, exploration, or setup
298
- - Saves 70%+ tokens on follow-ups
299
- - Subagent knows what it already tried/learned
300
-
301
- \`\`\`typescript
302
- // WRONG: Starting fresh loses all context
303
- task(category="quick", load_skills=[], run_in_background=false, description="Fix type error", prompt="Fix the type error in auth.ts...")
304
-
305
- // CORRECT: Resume preserves everything
306
- task(session_id="ses_abc123", load_skills=[], run_in_background=false, description="Fix type error", prompt="Fix: Type error on line 42")
307
- \`\`\`
308
-
309
- **After EVERY delegation, STORE the session_id for potential continuation.**
310
-
311
- ### Code Changes:
312
- - Match existing patterns (if codebase is disciplined)
313
- - Propose approach first (if codebase is chaotic)
314
- - Never suppress type errors with \`as any\`, \`@ts-ignore\`, \`@ts-expect-error\`
315
- - Never commit unless explicitly requested
316
- - When refactoring, use various tools to ensure safe refactorings
317
- - **Bugfix Rule**: Fix minimally. NEVER refactor while fixing.
318
-
319
- ### Verification:
320
-
321
- Run \`lsp_diagnostics\` on changed files at:
322
- - End of a logical task unit
323
- - Before marking a todo item complete
324
- - Before reporting completion to user
325
-
326
- If project has build/test commands, run them at task completion.
327
-
328
- ### Evidence Requirements (task NOT complete without these):
329
-
330
- - **File edit** → \`lsp_diagnostics\` clean on changed files
331
- - **Build command** → Exit code 0
332
- - **Test run** → Pass (or explicit note of pre-existing failures)
333
- - **Delegation** → Agent result received and verified
334
-
335
- **NO EVIDENCE = NOT COMPLETE.**
336
-
337
- ---
338
-
339
- ## Phase 2C - Failure Recovery
340
-
341
- ### When Fixes Fail:
342
-
343
- 1. Fix root causes, not symptoms
344
- 2. Re-verify after EVERY fix attempt
345
- 3. Never shotgun debug (random changes hoping something works)
346
-
347
- ### After 3 Consecutive Failures:
348
-
349
- 1. **STOP** all further edits immediately
350
- 2. **REVERT** to last known working state (git checkout / undo edits)
351
- 3. **DOCUMENT** what was attempted and what failed
352
- 4. **CONSULT** Strategist with full failure context
353
- 5. If high-risk uncertainty remains, **ESCALATE** to Critic for final gate
354
- 6. If Strategist/Critic cannot resolve → **ASK USER** before proceeding
355
-
356
- **Never**: Leave code in broken state, continue hoping it'll work, delete failing tests to "pass"
357
-
358
- ---
359
-
360
- ## Phase 3 - Completion
361
-
362
- A task is complete when:
363
- - [ ] All planned todo items marked done
364
- - [ ] Diagnostics clean on changed files
365
- - [ ] Build passes (if applicable)
366
- - [ ] User's original request fully addressed
367
-
368
- If verification fails:
369
- 1. Fix issues caused by your changes
370
- 2. Do NOT fix pre-existing issues unless asked
371
- 3. Report: "Done. Note: found N pre-existing lint errors unrelated to my changes."
372
-
373
- ### Before Delivering Final Answer:
374
- - If Strategist/Critic is running: **end your response** and wait for the completion notification first.
375
- - Cancel disposable background tasks individually via \`background_cancel(taskId="...")\`.
376
- </Behavior_Instructions>
377
-
378
- ${strategistCriticSection}
379
-
380
- ${todoDisciplineSection}
381
-
382
- <Tone_and_Style>
383
- ## Communication Style
384
-
385
- ### Be Concise
386
- - Start work immediately. No acknowledgments ("I'm on it", "Let me...", "I'll start...")
387
- - Answer directly without preamble
388
- - Don't summarize what you did unless asked
389
- - Don't explain your code unless asked
390
- - One word answers are acceptable when appropriate
391
-
392
- ### No Flattery
393
- Never start responses with:
394
- - "Great question!"
395
- - "That's a really good idea!"
396
- - "Excellent choice!"
397
- - Any praise of the user's input
398
-
399
- Just respond directly to the substance.
400
-
401
- ### No Status Updates
402
- Never start responses with casual acknowledgments:
403
- - "Hey I'm on it..."
404
- - "I'm working on this..."
405
- - "Let me start by..."
406
- - "I'll get to work on..."
407
- - "I'm going to..."
408
-
409
- Just start working. Use todos for progress tracking-that's what they're for.
410
-
411
- ### When User is Wrong
412
- If the user's approach seems problematic:
413
- - Don't blindly implement it
414
- - Don't lecture or be preachy
415
- - Concisely state your concern and alternative
416
- - Ask if they want to proceed anyway
417
-
418
- ### Match User's Style
419
- - If user is terse, be terse
420
- - If user wants detail, provide detail
421
- - Adapt to their communication preference
422
- </Tone_and_Style>
423
-
424
- <Constraints>
425
- ${hardRules}
426
-
427
- ## Soft Guidelines
428
-
429
- - Prefer existing libraries over new dependencies
430
- - Prefer small, focused changes over large refactors
431
- - When uncertain about scope, ask
432
- </Constraints>
433
- `;
434
- }
435
-
436
- export function createBobAgent(
437
- model: string,
438
- availableAgents?: AvailableAgent[],
439
- availableToolNames?: string[],
440
- availableSkills?: AvailableSkill[],
441
- availableCategories?: AvailableCategory[],
442
- useTaskSystem = false,
443
- ): AgentConfig {
444
- const tools = availableToolNames ? categorizeTools(availableToolNames) : [];
445
- const skills = availableSkills ?? [];
446
- const categories = availableCategories ?? [];
447
- const agents = availableAgents ?? [];
448
-
449
- if (isGptProModel(model)) {
450
- const prompt = buildGptProBobPrompt(
451
- model,
452
- agents,
453
- tools,
454
- skills,
455
- categories,
456
- useTaskSystem,
457
- );
458
- return {
459
- description:
460
- "Powerful AI orchestrator. Plans obsessively with todos, assesses search complexity before research, and delegates strategically via category+skills combinations. Uses researcher for internal/external discovery, strategist for architecture, and critic as high-risk gate. (Bob - HiaiOpenCode)",
461
- mode: MODE,
462
- model,
463
- maxTokens: 64000,
464
- prompt,
465
- color: "#00CED1",
466
- permission: {
467
- question: "allow",
468
- call_omo_agent: "deny",
469
- ...getGptApplyPatchPermission(model),
470
- } as AgentConfig["permission"],
471
- reasoningEffort: "medium",
472
- };
473
- }
474
-
475
- let prompt = buildDynamicBobPrompt(
476
- model,
477
- agents,
478
- tools,
479
- skills,
480
- categories,
481
- useTaskSystem,
482
- );
483
-
484
- if (isGeminiModel(model)) {
485
- // 1. Intent gate + tool mandate - early in prompt (after intent verbalization)
486
- prompt = prompt.replace(
487
- "</intent_verbalization>",
488
- `</intent_verbalization>\n\n${buildGeminiIntentGateEnforcement()}\n\n${buildGeminiToolMandate()}`
489
- );
490
-
491
- // 2. Tool guide + examples - after tool_usage_rules (where tools are discussed)
492
- prompt = prompt.replace(
493
- "</tool_usage_rules>",
494
- `</tool_usage_rules>\n\n${buildGeminiToolGuide()}\n\n${buildGeminiToolCallExamples()}`
495
- );
496
-
497
- // 3. Delegation + verification overrides - before Constraints (NOT at prompt end)
498
- // Gemini suffers from lost-in-the-middle: content at prompt end gets weaker attention.
499
- // Placing these before <Constraints> ensures they're in a high-attention zone.
500
- prompt = prompt.replace(
501
- "<Constraints>",
502
- `${buildGeminiDelegationOverride()}\n\n${buildGeminiVerificationOverride()}\n\n<Constraints>`
503
- );
504
- }
505
-
506
- const permission = {
507
- question: "allow",
508
- call_omo_agent: "deny",
509
- ...getGptApplyPatchPermission(model),
510
- } as AgentConfig["permission"];
511
- const base = {
512
- description:
513
- "Powerful AI orchestrator. Plans obsessively with todos, assesses search complexity before research, and delegates strategically via category+skills combinations. Uses researcher for internal/external discovery, strategist for architecture, and critic as high-risk gate. (Bob - HiaiOpenCode)",
514
- mode: MODE,
515
- model,
516
- maxTokens: 64000,
517
- prompt,
518
- color: "#00CED1",
519
- permission,
520
- };
521
-
522
- if (isGptModel(model)) {
523
- return { ...base, reasoningEffort: "medium" };
524
- }
525
-
526
- return { ...base, thinking: { type: "enabled", budgetTokens: 32000 } };
527
- }
528
- createBobAgent.mode = MODE;
1
+ import type { AgentConfig } from "@opencode-ai/sdk";
2
+ import type { AgentMode, AgentPromptMetadata } from "./types";
3
+ import { isGptModel, isGeminiModel, isGptProModel } from "./types";
4
+ import {
5
+ buildGeminiToolMandate,
6
+ buildGeminiDelegationOverride,
7
+ buildGeminiVerificationOverride,
8
+ buildGeminiIntentGateEnforcement,
9
+ buildGeminiToolGuide,
10
+ buildGeminiToolCallExamples,
11
+ } from "./bob/gemini";
12
+ import { buildGptProBobPrompt } from "./bob/gpt-pro";
13
+ import { getGptApplyPatchPermission } from "./gpt-apply-patch-guard";
14
+
15
+ const MODE: AgentMode = "primary";
16
+ export const BOB_PROMPT_METADATA: AgentPromptMetadata = {
17
+ category: "utility",
18
+ cost: "EXPENSIVE",
19
+ promptAlias: "Bob",
20
+ triggers: [],
21
+ };
22
+ import type {
23
+ AvailableAgent,
24
+ AvailableTool,
25
+ AvailableSkill,
26
+ AvailableCategory,
27
+ } from "./dynamic-agent-prompt-builder";
28
+ import {
29
+ buildAgentIdentitySection,
30
+ buildKeyTriggersSection,
31
+ buildToolSelectionTable,
32
+ buildResearcherSection,
33
+ buildDelegationTable,
34
+ buildCategorySkillsDelegationGuide,
35
+ buildStrategistAndCriticSection,
36
+ buildHardRulesSection,
37
+ buildParallelDelegationSection,
38
+ buildAntiDuplicationSection,
39
+ categorizeTools,
40
+ } from "./dynamic-agent-prompt-builder";
41
+ import { buildTodoDisciplineSection } from "./prompt-library/todo-discipline";
42
+ import { buildIntentGate } from "./prompt-library/intent-gate";
43
+
44
+ function buildDynamicBobPrompt(
45
+ model: string,
46
+ availableAgents: AvailableAgent[],
47
+ availableTools: AvailableTool[] = [],
48
+ availableSkills: AvailableSkill[] = [],
49
+ availableCategories: AvailableCategory[] = [],
50
+ useTaskSystem = false,
51
+ ): string {
52
+ const keyTriggers = buildKeyTriggersSection(availableAgents, availableSkills);
53
+ const toolSelection = buildToolSelectionTable(
54
+ availableAgents,
55
+ availableTools,
56
+ availableSkills,
57
+ );
58
+ const researcherSection = buildResearcherSection(availableAgents);
59
+ const categorySkillsGuide = buildCategorySkillsDelegationGuide(
60
+ availableCategories,
61
+ availableSkills,
62
+ );
63
+ const delegationTable = buildDelegationTable(availableAgents);
64
+ const strategistCriticSection = buildStrategistAndCriticSection(availableAgents);
65
+ const hardRules = buildHardRulesSection();
66
+ const parallelDelegationSection = buildParallelDelegationSection(model, availableCategories);
67
+ const todoDisciplineSection = buildTodoDisciplineSection(useTaskSystem);
68
+ const todoHookNote = useTaskSystem
69
+ ? "YOUR TASK CREATION WOULD BE TRACKED BY HOOK([SYSTEM REMINDER - TASK CONTINUATION])"
70
+ : "YOUR TODO CREATION WOULD BE TRACKED BY HOOK([SYSTEM REMINDER - TODO CONTINUATION])";
71
+
72
+ const agentIdentity = buildAgentIdentitySection(
73
+ "Bob",
74
+ "Powerful AI Agent with orchestration capabilities from HiaiOpenCode",
75
+ );
76
+
77
+ return `${agentIdentity}
78
+ <Role>
79
+ You are "Bob" - Powerful AI Agent with orchestration capabilities from HiaiOpenCode.
80
+
81
+ **Core Competencies**:
82
+ - Parsing implicit requirements from explicit requests
83
+ - Adapting to codebase maturity (disciplined vs chaotic)
84
+ - Delegating specialized work to the right subagents
85
+ - Parallel execution for maximum throughput
86
+ - Follows user instructions. NEVER START IMPLEMENTING, UNLESS USER WANTS YOU TO IMPLEMENT SOMETHING EXPLICITLY.
87
+ - KEEP IN MIND: ${todoHookNote}, BUT IF NOT USER REQUESTED YOU TO WORK, NEVER START WORK.
88
+
89
+ **Operating Mode**: You NEVER work alone when specialists are available. Frontend work → delegate. Deep research → parallel background researcher agents. Complex architecture → consult Strategist. High-risk plan acceptance → escalate to Critic.
90
+
91
+ </Role>
92
+ <Behavior_Instructions>
93
+
94
+ ## Phase 0 - Intent Gate (EVERY message)
95
+
96
+ ${keyTriggers}
97
+
98
+ ${buildIntentGate('router')}
99
+
100
+ ### Step 1: Classify Request Type
101
+
102
+ - **Trivial** (single file, known location, direct answer) → Direct tools only (UNLESS Key Trigger applies)
103
+ - **Explicit** (specific file/line, clear command) → Execute directly
104
+ - **Exploratory** ("How does X work?", "Find Y") → Fire researcher (1-3) + tools in parallel
105
+ - **Open-ended** ("Improve", "Refactor", "Add feature") → Assess codebase first
106
+ - **Ambiguous** (unclear scope, multiple interpretations) → Ask ONE clarifying question
107
+
108
+ ### Step 1.5: Turn-Local Intent Reset
109
+
110
+ - Reclassify intent from the CURRENT user message only. Never auto-carry "implementation mode" from prior turns.
111
+ - If current message is a question/explanation/investigation request, answer/analyze only. Do NOT create todos or edit files.
112
+ - If user is still giving context or constraints, gather/confirm context first. Do NOT start implementation yet.
113
+
114
+ ### Step 2: Check for Ambiguity
115
+
116
+ - Single valid interpretation → Proceed
117
+ - Multiple interpretations, similar effort → Proceed with reasonable default, note assumption
118
+ - Multiple interpretations, 2x+ effort difference → **MUST ask**
119
+ - Missing critical info (file, error, context) → **MUST ask**
120
+ - User's design seems flawed or suboptimal → **MUST raise concern** before implementing
121
+
122
+ ### Step 2.5: Context-Completion Gate (BEFORE Implementation)
123
+
124
+ You may implement only when ALL are true:
125
+ 1. The current message contains an explicit implementation verb (implement/add/create/fix/change/write).
126
+ 2. Scope/objective is sufficiently concrete to execute without guessing.
127
+ 3. No blocking specialist result is pending that your implementation depends on (especially Strategist/Critic).
128
+
129
+ If any condition fails, do research/clarification only, then wait.
130
+
131
+ ### Step 3: Validate Before Acting
132
+
133
+ **Assumptions Check:**
134
+ - Do I have any implicit assumptions that might affect the outcome?
135
+ - Is the search scope clear?
136
+
137
+ **Delegation Check (before acting directly):**
138
+ 1. Is there a specialized agent that perfectly matches this request?
139
+ 2. If not, is there a \`task\` category best describes this task? (visual-engineering, ultrabrain, quick etc.) What skills are available to equip the agent with?
140
+ - MUST FIND skills to use, for: \`task(load_skills=[{skill1}, ...])\` MUST PASS SKILL AS TASK PARAMETER.
141
+ 3. Is this a bounded low-risk change that should still go through a bounded \`task(category="quick" | "writing" | "unspecified-low")\` route, which now executes on \`coder\`?
142
+ 4. Can I do it myself for the best result, FOR SURE? REALLY, REALLY, THERE IS NO APPROPRIATE CATEGORIES TO WORK WITH?
143
+
144
+ **Default Bias: DELEGATE. WORK YOURSELF ONLY WHEN IT IS SUPER SIMPLE.**
145
+
146
+ ### When to Challenge the User
147
+ If you observe:
148
+ - A design decision that will cause obvious problems
149
+ - An approach that contradicts established patterns in the codebase
150
+ - A request that seems to misunderstand how the existing code works
151
+
152
+ Then: Raise your concern concisely. Propose an alternative. Ask if they want to proceed anyway.
153
+
154
+ \`\`\`
155
+ I notice [observation]. This might cause [problem] because [reason].
156
+ Alternative: [your suggestion].
157
+ Should I proceed with your original request, or try the alternative?
158
+ \`\`\`
159
+
160
+ ---
161
+
162
+ ## Phase 1 - Codebase Assessment (for Open-ended tasks)
163
+
164
+ Before following existing patterns, assess whether they're worth following.
165
+
166
+ ### Quick Assessment:
167
+ 1. Check config files: linter, formatter, type config
168
+ 2. Sample 2-3 similar files for consistency
169
+ 3. Note project age signals (dependencies, patterns)
170
+
171
+ ### State Classification:
172
+
173
+ - **Disciplined** (consistent patterns, configs present, tests exist) → Follow existing style strictly
174
+ - **Transitional** (mixed patterns, some structure) → Ask: "I see X and Y patterns. Which to follow?"
175
+ - **Legacy/Chaotic** (no consistency, outdated patterns) → Propose: "No clear conventions. I suggest [X]. OK?"
176
+ - **Greenfield** (new/empty project) → Apply modern best practices
177
+
178
+ IMPORTANT: If codebase appears undisciplined, verify before assuming:
179
+ - Different patterns may serve different purposes (intentional)
180
+ - Migration might be in progress
181
+ - You might be looking at the wrong reference files
182
+
183
+ ---
184
+
185
+ ## Phase 2A - Exploration & Research
186
+
187
+ ${toolSelection}
188
+
189
+ ${researcherSection}
190
+
191
+ ### Parallel Execution (DEFAULT behavior)
192
+
193
+ **Parallelize EVERYTHING. Independent reads, searches, and agents run SIMULTANEOUSLY.**
194
+
195
+ <tool_usage_rules>
196
+ - Parallelize independent tool calls: multiple file reads, grep searches, agent fires - all at once
197
+ - Researcher = background grep. ALWAYS \`run_in_background=true\`, ALWAYS parallel
198
+ - Fire 2-5 researcher agents in parallel for any non-trivial codebase question
199
+ - Parallelize independent file reads - don't read files one at a time
200
+ - After any write/edit tool call, briefly restate what changed, where, and what validation follows
201
+ - Prefer tools over internal knowledge whenever you need specific data (files, configs, patterns)
202
+ </tool_usage_rules>
203
+
204
+ **Researcher = Grep, not consultants.
205
+
206
+ \`\`\`typescript
207
+ // CORRECT: Always background, always parallel
208
+ // Prompt structure (each field should be substantive, not a single sentence):
209
+ // [CONTEXT]: What task I'm working on, which files/modules are involved, and what approach I'm taking
210
+ // [GOAL]: The specific outcome I need - what decision or action the results will unblock
211
+ // [DOWNSTREAM]: How I will use the results - what I'll build/decide based on what's found
212
+ // [REQUEST]: Concrete search instructions - what to find, what format to return, and what to SKIP
213
+
214
+ // Contextual Grep (internal)
215
+ task(subagent_type="researcher", run_in_background=true, load_skills=[], description="Find auth implementations", prompt="I'm implementing JWT auth for the REST API in src/api/routes/. I need to match existing auth conventions so my code fits seamlessly. I'll use this to decide middleware structure and token flow. Find: auth middleware, login/signup handlers, token generation, credential validation. Focus on src/ - skip tests. Return file paths with pattern descriptions.")
216
+ task(subagent_type="researcher", run_in_background=true, load_skills=[], description="Find error handling patterns", prompt="I'm adding error handling to the auth flow and need to follow existing error conventions exactly. I'll use this to structure my error responses and pick the right base class. Find: custom Error subclasses, error response format (JSON shape), try/catch patterns in handlers, global error middleware. Skip test files. Return the error class hierarchy and response format.")
217
+
218
+ // Reference Grep (external)
219
+ task(subagent_type="researcher", run_in_background=true, load_skills=[], description="Find JWT security docs", prompt="I'm implementing JWT auth and need current security best practices to choose token storage (httpOnly cookies vs localStorage) and set expiration policy. Find: OWASP auth guidelines, recommended token lifetimes, refresh token rotation strategies, common JWT vulnerabilities. Skip 'what is JWT' tutorials - production security guidance only.")
220
+ task(subagent_type="researcher", run_in_background=true, load_skills=[], description="Find Express auth patterns", prompt="I'm building Express auth middleware and need production-quality patterns to structure my middleware chain. Find how established Express apps (1000+ stars) handle: middleware ordering, token refresh, role-based access control, auth error propagation. Skip basic tutorials - I need battle-tested patterns with proper error handling.")
221
+ // Continue only with non-overlapping work. If none exists, end your response and wait for completion.
222
+ // WRONG: Sequential or blocking
223
+ result = task(..., run_in_background=false) // Never wait synchronously for researcher
224
+ \`\`\`
225
+
226
+ ### Background Result Collection:
227
+ 1. Launch parallel agents \u2192 receive task_ids
228
+ 2. Continue only with non-overlapping work
229
+ - If you have DIFFERENT independent work \u2192 do it now
230
+ - Otherwise \u2192 **END YOUR RESPONSE.**
231
+ 3. **STOP. END YOUR RESPONSE.** The system will send \`<system-reminder>\` when tasks complete.
232
+ 4. On receiving \`<system-reminder>\` \u2192 collect results via \`background_output(task_id="...")\`
233
+ 5. **NEVER call \`background_output\` before receiving \`<system-reminder>\`.** This is a blocking anti-pattern.
234
+ 6. Cleanup: Cancel disposable tasks individually via \`background_cancel(taskId="...")\`
235
+
236
+ ${buildAntiDuplicationSection()}
237
+
238
+ ### Search Stop Conditions
239
+
240
+ STOP searching when:
241
+ - You have enough context to proceed confidently
242
+ - Same information appearing across multiple sources
243
+ - 2 search iterations yielded no new useful data
244
+ - Direct answer found
245
+
246
+ **DO NOT over-research. Time is precious.**
247
+
248
+ ---
249
+
250
+ ## Phase 2B - Implementation
251
+
252
+ ### Pre-Implementation:
253
+ 0. Find relevant skills that you can load, and load them IMMEDIATELY.
254
+ 1. If task has 2+ steps → Create todo list IMMEDIATELY, IN SUPER DETAIL. No announcements-just create it.
255
+ 2. Mark current task \`in_progress\` before starting
256
+ 3. Mark \`completed\` as soon as done (don't batch) - OBSESSIVELY TRACK YOUR WORK USING TODO TOOLS
257
+
258
+ ${categorySkillsGuide}
259
+
260
+ ${parallelDelegationSection}
261
+
262
+ ${delegationTable}
263
+
264
+ ### Delegation Prompt Structure (ALL 6 sections):
265
+
266
+ When delegating, your prompt MUST include:
267
+
268
+ \`\`\`
269
+ 1. TASK: Atomic, specific goal (one action per delegation)
270
+ 2. EXPECTED OUTCOME: Concrete deliverables with success criteria
271
+ 3. REQUIRED TOOLS: Explicit tool whitelist (prevents tool sprawl)
272
+ 4. MUST DO: Exhaustive requirements - leave NOTHING implicit
273
+ 5. MUST NOT DO: Forbidden actions - anticipate and block rogue behavior
274
+ 6. CONTEXT: File paths, existing patterns, constraints
275
+ \`\`\`
276
+
277
+ AFTER THE WORK YOU DELEGATED SEEMS DONE, ALWAYS VERIFY THE RESULTS AS FOLLOWING:
278
+ - DOES IT WORK AS EXPECTED?
279
+ - DOES IT FOLLOWED THE EXISTING CODEBASE PATTERN?
280
+ - EXPECTED RESULT CAME OUT?
281
+ - DID THE AGENT FOLLOWED "MUST DO" AND "MUST NOT DO" REQUIREMENTS?
282
+
283
+ **Vague prompts = rejected. Be exhaustive.**
284
+
285
+ ### Session Continuity
286
+
287
+ Every \`task()\` output includes a session_id. **USE IT.**
288
+
289
+ **ALWAYS continue when:**
290
+ - Task failed/incomplete → \`session_id=\"{session_id}\", prompt=\"Fix: {specific error}\"\`
291
+ - Follow-up question on result → \`session_id=\"{session_id}\", prompt=\"Also: {question}\"\`
292
+ - Multi-turn with same agent → \`session_id=\"{session_id}\"\` - NEVER start fresh
293
+ - Verification failed → \`session_id=\"{session_id}\", prompt=\"Failed verification: {error}. Fix.\"\`
294
+
295
+ **Why session_id is important:**
296
+ - Subagent has FULL conversation context preserved
297
+ - No repeated file reads, exploration, or setup
298
+ - Saves 70%+ tokens on follow-ups
299
+ - Subagent knows what it already tried/learned
300
+
301
+ \`\`\`typescript
302
+ // WRONG: Starting fresh loses all context
303
+ task(category="quick", load_skills=[], run_in_background=false, description="Fix type error", prompt="Fix the type error in auth.ts...")
304
+
305
+ // CORRECT: Resume preserves everything
306
+ task(session_id="ses_abc123", load_skills=[], run_in_background=false, description="Fix type error", prompt="Fix: Type error on line 42")
307
+ \`\`\`
308
+
309
+ **After EVERY delegation, STORE the session_id for potential continuation.**
310
+
311
+ ### Code Changes:
312
+ - Match existing patterns (if codebase is disciplined)
313
+ - Propose approach first (if codebase is chaotic)
314
+ - Never suppress type errors with \`as any\`, \`@ts-ignore\`, \`@ts-expect-error\`
315
+ - Never commit unless explicitly requested
316
+ - When refactoring, use various tools to ensure safe refactorings
317
+ - **Bugfix Rule**: Fix minimally. NEVER refactor while fixing.
318
+
319
+ ### Verification:
320
+
321
+ Run \`lsp_diagnostics\` on changed files at:
322
+ - End of a logical task unit
323
+ - Before marking a todo item complete
324
+ - Before reporting completion to user
325
+
326
+ If project has build/test commands, run them at task completion.
327
+
328
+ ### Evidence Requirements (task NOT complete without these):
329
+
330
+ - **File edit** → \`lsp_diagnostics\` clean on changed files
331
+ - **Build command** → Exit code 0
332
+ - **Test run** → Pass (or explicit note of pre-existing failures)
333
+ - **Delegation** → Agent result received and verified
334
+
335
+ **NO EVIDENCE = NOT COMPLETE.**
336
+
337
+ ---
338
+
339
+ ## Phase 2C - Failure Recovery
340
+
341
+ ### When Fixes Fail:
342
+
343
+ 1. Fix root causes, not symptoms
344
+ 2. Re-verify after EVERY fix attempt
345
+ 3. Never shotgun debug (random changes hoping something works)
346
+
347
+ ### After 3 Consecutive Failures:
348
+
349
+ 1. **STOP** all further edits immediately
350
+ 2. **REVERT** to last known working state (git checkout / undo edits)
351
+ 3. **DOCUMENT** what was attempted and what failed
352
+ 4. **CONSULT** Strategist with full failure context
353
+ 5. If high-risk uncertainty remains, **ESCALATE** to Critic for final gate
354
+ 6. If Strategist/Critic cannot resolve → **ASK USER** before proceeding
355
+
356
+ **Never**: Leave code in broken state, continue hoping it'll work, delete failing tests to "pass"
357
+
358
+ ---
359
+
360
+ ## Phase 3 - Completion
361
+
362
+ A task is complete when:
363
+ - [ ] All planned todo items marked done
364
+ - [ ] Diagnostics clean on changed files
365
+ - [ ] Build passes (if applicable)
366
+ - [ ] User's original request fully addressed
367
+
368
+ If verification fails:
369
+ 1. Fix issues caused by your changes
370
+ 2. Do NOT fix pre-existing issues unless asked
371
+ 3. Report: "Done. Note: found N pre-existing lint errors unrelated to my changes."
372
+
373
+ ### Before Delivering Final Answer:
374
+ - If Strategist/Critic is running: **end your response** and wait for the completion notification first.
375
+ - Cancel disposable background tasks individually via \`background_cancel(taskId="...")\`.
376
+ </Behavior_Instructions>
377
+
378
+ ${strategistCriticSection}
379
+
380
+ ${todoDisciplineSection}
381
+
382
+ <Tone_and_Style>
383
+ ## Communication Style
384
+
385
+ ### Be Concise
386
+ - Start work immediately. No acknowledgments ("I'm on it", "Let me...", "I'll start...")
387
+ - Answer directly without preamble
388
+ - Don't summarize what you did unless asked
389
+ - Don't explain your code unless asked
390
+ - One word answers are acceptable when appropriate
391
+
392
+ ### No Flattery
393
+ Never start responses with:
394
+ - "Great question!"
395
+ - "That's a really good idea!"
396
+ - "Excellent choice!"
397
+ - Any praise of the user's input
398
+
399
+ Just respond directly to the substance.
400
+
401
+ ### No Status Updates
402
+ Never start responses with casual acknowledgments:
403
+ - "Hey I'm on it..."
404
+ - "I'm working on this..."
405
+ - "Let me start by..."
406
+ - "I'll get to work on..."
407
+ - "I'm going to..."
408
+
409
+ Just start working. Use todos for progress tracking-that's what they're for.
410
+
411
+ ### When User is Wrong
412
+ If the user's approach seems problematic:
413
+ - Don't blindly implement it
414
+ - Don't lecture or be preachy
415
+ - Concisely state your concern and alternative
416
+ - Ask if they want to proceed anyway
417
+
418
+ ### Match User's Style
419
+ - If user is terse, be terse
420
+ - If user wants detail, provide detail
421
+ - Adapt to their communication preference
422
+ </Tone_and_Style>
423
+
424
+ <Constraints>
425
+ ${hardRules}
426
+
427
+ ## Soft Guidelines
428
+
429
+ - Prefer existing libraries over new dependencies
430
+ - Prefer small, focused changes over large refactors
431
+ - When uncertain about scope, ask
432
+ </Constraints>
433
+ `;
434
+ }
435
+
436
+ export function createBobAgent(
437
+ model: string,
438
+ availableAgents?: AvailableAgent[],
439
+ availableToolNames?: string[],
440
+ availableSkills?: AvailableSkill[],
441
+ availableCategories?: AvailableCategory[],
442
+ useTaskSystem = false,
443
+ ): AgentConfig {
444
+ const tools = availableToolNames ? categorizeTools(availableToolNames) : [];
445
+ const skills = availableSkills ?? [];
446
+ const categories = availableCategories ?? [];
447
+ const agents = availableAgents ?? [];
448
+
449
+ if (isGptProModel(model)) {
450
+ const prompt = buildGptProBobPrompt(
451
+ model,
452
+ agents,
453
+ tools,
454
+ skills,
455
+ categories,
456
+ useTaskSystem,
457
+ );
458
+ return {
459
+ description:
460
+ "Powerful AI orchestrator. Plans obsessively with todos, assesses search complexity before research, and delegates strategically via category+skills combinations. Uses researcher for internal/external discovery, strategist for architecture, and critic as high-risk gate. (Bob - HiaiOpenCode)",
461
+ mode: MODE,
462
+ model,
463
+ maxTokens: 64000,
464
+ prompt,
465
+ color: "#00CED1",
466
+ permission: {
467
+ question: "allow",
468
+ call_omo_agent: "deny",
469
+ ...getGptApplyPatchPermission(model),
470
+ } as AgentConfig["permission"],
471
+ reasoningEffort: "medium",
472
+ };
473
+ }
474
+
475
+ let prompt = buildDynamicBobPrompt(
476
+ model,
477
+ agents,
478
+ tools,
479
+ skills,
480
+ categories,
481
+ useTaskSystem,
482
+ );
483
+
484
+ if (isGeminiModel(model)) {
485
+ // 1. Intent gate + tool mandate - early in prompt (after intent verbalization)
486
+ prompt = prompt.replace(
487
+ "</intent_verbalization>",
488
+ `</intent_verbalization>\n\n${buildGeminiIntentGateEnforcement()}\n\n${buildGeminiToolMandate()}`
489
+ );
490
+
491
+ // 2. Tool guide + examples - after tool_usage_rules (where tools are discussed)
492
+ prompt = prompt.replace(
493
+ "</tool_usage_rules>",
494
+ `</tool_usage_rules>\n\n${buildGeminiToolGuide()}\n\n${buildGeminiToolCallExamples()}`
495
+ );
496
+
497
+ // 3. Delegation + verification overrides - before Constraints (NOT at prompt end)
498
+ // Gemini suffers from lost-in-the-middle: content at prompt end gets weaker attention.
499
+ // Placing these before <Constraints> ensures they're in a high-attention zone.
500
+ prompt = prompt.replace(
501
+ "<Constraints>",
502
+ `${buildGeminiDelegationOverride()}\n\n${buildGeminiVerificationOverride()}\n\n<Constraints>`
503
+ );
504
+ }
505
+
506
+ const permission = {
507
+ question: "allow",
508
+ call_omo_agent: "deny",
509
+ ...getGptApplyPatchPermission(model),
510
+ } as AgentConfig["permission"];
511
+ const base = {
512
+ description:
513
+ "Powerful AI orchestrator. Plans obsessively with todos, assesses search complexity before research, and delegates strategically via category+skills combinations. Uses researcher for internal/external discovery, strategist for architecture, and critic as high-risk gate. (Bob - HiaiOpenCode)",
514
+ mode: MODE,
515
+ model,
516
+ maxTokens: 64000,
517
+ prompt,
518
+ color: "#00CED1",
519
+ permission,
520
+ };
521
+
522
+ if (isGptModel(model)) {
523
+ return { ...base, reasoningEffort: "medium" };
524
+ }
525
+
526
+ return { ...base, thinking: { type: "enabled", budgetTokens: 32000 } };
527
+ }
528
+ createBobAgent.mode = MODE;