oh-my-parallel-agent-opencode 0.1.0 → 0.2.1

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 (529) hide show
  1. package/LICENSE.md +82 -0
  2. package/README.md +105 -42
  3. package/bin/oh-my-parallel-agent-opencode.js +80 -0
  4. package/bin/platform.js +38 -0
  5. package/bin/platform.test.ts +148 -0
  6. package/dist/agents/atlas.d.ts +22 -0
  7. package/dist/agents/dynamic-agent-prompt-builder.d.ts +30 -0
  8. package/dist/agents/explore.d.ts +7 -0
  9. package/dist/agents/hephaestus.d.ts +6 -0
  10. package/dist/agents/index.d.ts +12 -0
  11. package/dist/agents/librarian.d.ts +7 -0
  12. package/dist/agents/metis.d.ts +21 -0
  13. package/dist/agents/momus.d.ts +21 -0
  14. package/dist/agents/momus.test.d.ts +1 -0
  15. package/dist/agents/multimodal-looker.d.ts +7 -0
  16. package/dist/agents/oracle.d.ts +7 -0
  17. package/dist/agents/prometheus/behavioral-summary.d.ts +6 -0
  18. package/dist/agents/prometheus/high-accuracy-mode.d.ts +6 -0
  19. package/dist/agents/prometheus/identity-constraints.d.ts +7 -0
  20. package/dist/agents/prometheus/index.d.ts +39 -0
  21. package/dist/agents/prometheus/interview-mode.d.ts +7 -0
  22. package/dist/agents/prometheus/plan-generation.d.ts +7 -0
  23. package/dist/agents/prometheus/plan-template.d.ts +7 -0
  24. package/dist/agents/prometheus-prompt.test.d.ts +1 -0
  25. package/dist/agents/sisyphus-junior.d.ts +10 -0
  26. package/dist/agents/sisyphus-junior.test.d.ts +1 -0
  27. package/dist/agents/sisyphus.d.ts +8 -0
  28. package/dist/agents/types.d.ts +63 -0
  29. package/dist/agents/utils.d.ts +16 -0
  30. package/dist/agents/utils.test.d.ts +1 -0
  31. package/dist/cli/config-manager.d.ts +162 -0
  32. package/dist/cli/config-manager.test.d.ts +1 -0
  33. package/dist/cli/doctor/checks/auth.d.ts +7 -0
  34. package/dist/cli/doctor/checks/auth.test.d.ts +1 -0
  35. package/dist/cli/doctor/checks/config.d.ts +8 -0
  36. package/dist/cli/doctor/checks/config.test.d.ts +1 -0
  37. package/dist/cli/doctor/checks/dependencies.d.ts +8 -0
  38. package/dist/cli/doctor/checks/dependencies.test.d.ts +1 -0
  39. package/dist/cli/doctor/checks/gh.d.ts +13 -0
  40. package/dist/cli/doctor/checks/gh.test.d.ts +1 -0
  41. package/dist/cli/doctor/checks/index.d.ts +13 -0
  42. package/dist/cli/doctor/checks/lsp.d.ts +8 -0
  43. package/dist/cli/doctor/checks/lsp.test.d.ts +1 -0
  44. package/dist/cli/doctor/checks/mcp-oauth.d.ts +15 -0
  45. package/dist/cli/doctor/checks/mcp-oauth.test.d.ts +1 -0
  46. package/dist/cli/doctor/checks/mcp.d.ts +6 -0
  47. package/dist/cli/doctor/checks/mcp.test.d.ts +1 -0
  48. package/dist/cli/doctor/checks/model-resolution.d.ts +33 -0
  49. package/dist/cli/doctor/checks/model-resolution.test.d.ts +1 -0
  50. package/dist/cli/doctor/checks/opencode.d.ts +19 -0
  51. package/dist/cli/doctor/checks/opencode.test.d.ts +1 -0
  52. package/dist/cli/doctor/checks/plugin.d.ts +4 -0
  53. package/dist/cli/doctor/checks/plugin.test.d.ts +1 -0
  54. package/dist/cli/doctor/checks/version.d.ts +4 -0
  55. package/dist/cli/doctor/checks/version.test.d.ts +1 -0
  56. package/dist/cli/doctor/constants.d.ts +42 -0
  57. package/dist/cli/doctor/formatter.d.ts +12 -0
  58. package/dist/cli/doctor/formatter.test.d.ts +1 -0
  59. package/dist/cli/doctor/index.d.ts +5 -0
  60. package/dist/cli/doctor/runner.d.ts +7 -0
  61. package/dist/cli/doctor/runner.test.d.ts +1 -0
  62. package/dist/cli/doctor/types.d.ts +91 -0
  63. package/dist/cli/get-local-version/formatter.d.ts +3 -0
  64. package/dist/cli/get-local-version/index.d.ts +3 -0
  65. package/dist/cli/get-local-version/types.d.ts +13 -0
  66. package/dist/cli/index.d.ts +2 -0
  67. package/dist/cli/index.js +26903 -0
  68. package/dist/cli/index.test.d.ts +1 -0
  69. package/dist/cli/install.d.ts +2 -0
  70. package/dist/cli/install.test.d.ts +1 -0
  71. package/dist/cli/mcp-oauth/index.d.ts +6 -0
  72. package/dist/cli/mcp-oauth/index.test.d.ts +1 -0
  73. package/dist/cli/mcp-oauth/login.d.ts +6 -0
  74. package/dist/cli/mcp-oauth/login.test.d.ts +1 -0
  75. package/dist/cli/mcp-oauth/logout.d.ts +4 -0
  76. package/dist/cli/mcp-oauth/logout.test.d.ts +1 -0
  77. package/dist/cli/mcp-oauth/status.d.ts +1 -0
  78. package/dist/cli/mcp-oauth/status.test.d.ts +1 -0
  79. package/dist/cli/model-fallback.d.ts +18 -0
  80. package/dist/cli/model-fallback.test.d.ts +1 -0
  81. package/dist/cli/run/completion.d.ts +2 -0
  82. package/dist/cli/run/completion.test.d.ts +1 -0
  83. package/dist/cli/run/events.d.ts +14 -0
  84. package/dist/cli/run/events.test.d.ts +1 -0
  85. package/dist/cli/run/index.d.ts +2 -0
  86. package/dist/cli/run/runner.d.ts +2 -0
  87. package/dist/cli/run/types.d.ts +73 -0
  88. package/dist/cli/types.d.ts +39 -0
  89. package/dist/config/index.d.ts +2 -0
  90. package/dist/config/schema.d.ts +2651 -0
  91. package/dist/config/schema.test.d.ts +1 -0
  92. package/dist/features/background-agent/concurrency.d.ts +27 -0
  93. package/dist/features/background-agent/concurrency.test.d.ts +1 -0
  94. package/dist/features/background-agent/constants.d.ts +44 -0
  95. package/dist/features/background-agent/index.d.ts +4 -0
  96. package/dist/features/background-agent/manager.d.ts +118 -0
  97. package/dist/features/background-agent/manager.test.d.ts +1 -0
  98. package/dist/features/background-agent/result-handler.d.ts +15 -0
  99. package/dist/features/background-agent/spawner.d.ts +14 -0
  100. package/dist/features/background-agent/state.d.ts +35 -0
  101. package/dist/features/background-agent/types.d.ts +79 -0
  102. package/dist/features/boulder-state/constants.d.ts +10 -0
  103. package/dist/features/boulder-state/index.d.ts +3 -0
  104. package/dist/features/boulder-state/storage.d.ts +28 -0
  105. package/dist/features/boulder-state/storage.test.d.ts +1 -0
  106. package/dist/features/boulder-state/types.d.ts +24 -0
  107. package/dist/features/builtin-commands/commands.d.ts +2 -0
  108. package/dist/features/builtin-commands/index.d.ts +2 -0
  109. package/dist/features/builtin-commands/templates/init-deep.d.ts +1 -0
  110. package/dist/features/builtin-commands/templates/ralph-loop.d.ts +2 -0
  111. package/dist/features/builtin-commands/templates/refactor.d.ts +1 -0
  112. package/dist/features/builtin-commands/templates/start-work.d.ts +1 -0
  113. package/dist/features/builtin-commands/templates/stop-continuation.d.ts +1 -0
  114. package/dist/features/builtin-commands/templates/stop-continuation.test.d.ts +1 -0
  115. package/dist/features/builtin-commands/types.d.ts +6 -0
  116. package/dist/features/builtin-skills/index.d.ts +2 -0
  117. package/dist/features/builtin-skills/skills/dev-browser.d.ts +2 -0
  118. package/dist/features/builtin-skills/skills/frontend-ui-ux.d.ts +2 -0
  119. package/dist/features/builtin-skills/skills/git-master.d.ts +2 -0
  120. package/dist/features/builtin-skills/skills/index.d.ts +4 -0
  121. package/dist/features/builtin-skills/skills/playwright.d.ts +3 -0
  122. package/dist/features/builtin-skills/skills.d.ts +6 -0
  123. package/dist/features/builtin-skills/skills.test.d.ts +1 -0
  124. package/dist/features/builtin-skills/types.d.ts +15 -0
  125. package/dist/features/claude-code-agent-loader/index.d.ts +2 -0
  126. package/dist/features/claude-code-agent-loader/loader.d.ts +3 -0
  127. package/dist/features/claude-code-agent-loader/types.d.ts +14 -0
  128. package/dist/features/claude-code-command-loader/index.d.ts +2 -0
  129. package/dist/features/claude-code-command-loader/loader.d.ts +6 -0
  130. package/dist/features/claude-code-command-loader/types.d.ts +42 -0
  131. package/dist/features/claude-code-mcp-loader/env-expander.d.ts +2 -0
  132. package/dist/features/claude-code-mcp-loader/index.d.ts +10 -0
  133. package/dist/features/claude-code-mcp-loader/loader.d.ts +4 -0
  134. package/dist/features/claude-code-mcp-loader/loader.test.d.ts +1 -0
  135. package/dist/features/claude-code-mcp-loader/transformer.d.ts +2 -0
  136. package/dist/features/claude-code-mcp-loader/types.d.ts +39 -0
  137. package/dist/features/claude-code-plugin-loader/index.d.ts +3 -0
  138. package/dist/features/claude-code-plugin-loader/loader.d.ts +20 -0
  139. package/dist/features/claude-code-plugin-loader/types.d.ts +186 -0
  140. package/dist/features/claude-code-session-state/index.d.ts +1 -0
  141. package/dist/features/claude-code-session-state/state.d.ts +9 -0
  142. package/dist/features/claude-code-session-state/state.test.d.ts +1 -0
  143. package/dist/features/context-injector/collector.d.ts +11 -0
  144. package/dist/features/context-injector/collector.test.d.ts +1 -0
  145. package/dist/features/context-injector/index.d.ts +3 -0
  146. package/dist/features/context-injector/injector.d.ts +39 -0
  147. package/dist/features/context-injector/injector.test.d.ts +1 -0
  148. package/dist/features/context-injector/types.d.ts +83 -0
  149. package/dist/features/hook-message-injector/constants.d.ts +3 -0
  150. package/dist/features/hook-message-injector/index.d.ts +4 -0
  151. package/dist/features/hook-message-injector/injector.d.ts +19 -0
  152. package/dist/features/hook-message-injector/types.d.ts +46 -0
  153. package/dist/features/mcp-oauth/callback-server.d.ts +11 -0
  154. package/dist/features/mcp-oauth/callback-server.test.d.ts +1 -0
  155. package/dist/features/mcp-oauth/dcr.d.ts +34 -0
  156. package/dist/features/mcp-oauth/dcr.test.d.ts +1 -0
  157. package/dist/features/mcp-oauth/discovery.d.ts +8 -0
  158. package/dist/features/mcp-oauth/discovery.test.d.ts +1 -0
  159. package/dist/features/mcp-oauth/index.d.ts +1 -0
  160. package/dist/features/mcp-oauth/provider.d.ts +41 -0
  161. package/dist/features/mcp-oauth/provider.test.d.ts +1 -0
  162. package/dist/features/mcp-oauth/resource-indicator.d.ts +2 -0
  163. package/dist/features/mcp-oauth/resource-indicator.test.d.ts +1 -0
  164. package/dist/features/mcp-oauth/schema.d.ts +6 -0
  165. package/dist/features/mcp-oauth/schema.test.d.ts +1 -0
  166. package/dist/features/mcp-oauth/step-up.d.ts +8 -0
  167. package/dist/features/mcp-oauth/step-up.test.d.ts +1 -0
  168. package/dist/features/mcp-oauth/storage.d.ts +17 -0
  169. package/dist/features/mcp-oauth/storage.test.d.ts +1 -0
  170. package/dist/features/opencode-skill-loader/async-loader.d.ts +6 -0
  171. package/dist/features/opencode-skill-loader/async-loader.test.d.ts +1 -0
  172. package/dist/features/opencode-skill-loader/blocking.d.ts +2 -0
  173. package/dist/features/opencode-skill-loader/blocking.test.d.ts +1 -0
  174. package/dist/features/opencode-skill-loader/discover-worker.d.ts +1 -0
  175. package/dist/features/opencode-skill-loader/index.d.ts +4 -0
  176. package/dist/features/opencode-skill-loader/loader.d.ts +16 -0
  177. package/dist/features/opencode-skill-loader/loader.test.d.ts +1 -0
  178. package/dist/features/opencode-skill-loader/merger.d.ts +7 -0
  179. package/dist/features/opencode-skill-loader/skill-content.d.ts +21 -0
  180. package/dist/features/opencode-skill-loader/skill-content.test.d.ts +1 -0
  181. package/dist/features/opencode-skill-loader/types.d.ts +34 -0
  182. package/dist/features/sisyphus-swarm/mailbox/types.d.ts +191 -0
  183. package/dist/features/sisyphus-swarm/mailbox/types.test.d.ts +1 -0
  184. package/dist/features/sisyphus-tasks/storage.d.ts +9 -0
  185. package/dist/features/sisyphus-tasks/storage.test.d.ts +1 -0
  186. package/dist/features/sisyphus-tasks/types.d.ts +47 -0
  187. package/dist/features/sisyphus-tasks/types.test.d.ts +1 -0
  188. package/dist/features/skill-mcp-manager/env-cleaner.d.ts +2 -0
  189. package/dist/features/skill-mcp-manager/env-cleaner.test.d.ts +1 -0
  190. package/dist/features/skill-mcp-manager/index.d.ts +2 -0
  191. package/dist/features/skill-mcp-manager/manager.d.ts +50 -0
  192. package/dist/features/skill-mcp-manager/manager.test.d.ts +1 -0
  193. package/dist/features/skill-mcp-manager/types.d.ts +11 -0
  194. package/dist/features/task-toast-manager/index.d.ts +2 -0
  195. package/dist/features/task-toast-manager/manager.d.ts +58 -0
  196. package/dist/features/task-toast-manager/manager.test.d.ts +1 -0
  197. package/dist/features/task-toast-manager/types.d.ts +24 -0
  198. package/dist/features/tmux-subagent/action-executor.d.ts +22 -0
  199. package/dist/features/tmux-subagent/decision-engine.d.ts +38 -0
  200. package/dist/features/tmux-subagent/decision-engine.test.d.ts +1 -0
  201. package/dist/features/tmux-subagent/index.d.ts +5 -0
  202. package/dist/features/tmux-subagent/manager.d.ts +59 -0
  203. package/dist/features/tmux-subagent/manager.test.d.ts +1 -0
  204. package/dist/features/tmux-subagent/pane-state-querier.d.ts +2 -0
  205. package/dist/features/tmux-subagent/types.d.ts +53 -0
  206. package/dist/hooks/agent-usage-reminder/constants.d.ts +5 -0
  207. package/dist/hooks/agent-usage-reminder/index.d.ts +22 -0
  208. package/dist/hooks/agent-usage-reminder/storage.d.ts +4 -0
  209. package/dist/hooks/agent-usage-reminder/types.d.ts +6 -0
  210. package/dist/hooks/anthropic-context-window-limit-recovery/executor.d.ts +4 -0
  211. package/dist/hooks/anthropic-context-window-limit-recovery/executor.test.d.ts +1 -0
  212. package/dist/hooks/anthropic-context-window-limit-recovery/index.d.ts +16 -0
  213. package/dist/hooks/anthropic-context-window-limit-recovery/parser.d.ts +2 -0
  214. package/dist/hooks/anthropic-context-window-limit-recovery/pruning-deduplication.d.ts +7 -0
  215. package/dist/hooks/anthropic-context-window-limit-recovery/pruning-deduplication.test.d.ts +1 -0
  216. package/dist/hooks/anthropic-context-window-limit-recovery/pruning-types.d.ts +36 -0
  217. package/dist/hooks/anthropic-context-window-limit-recovery/storage.d.ts +28 -0
  218. package/dist/hooks/anthropic-context-window-limit-recovery/storage.test.d.ts +1 -0
  219. package/dist/hooks/anthropic-context-window-limit-recovery/types.d.ts +37 -0
  220. package/dist/hooks/atlas/index.d.ts +35 -0
  221. package/dist/hooks/atlas/index.test.d.ts +1 -0
  222. package/dist/hooks/auto-slash-command/constants.d.ts +5 -0
  223. package/dist/hooks/auto-slash-command/detector.d.ts +9 -0
  224. package/dist/hooks/auto-slash-command/detector.test.d.ts +1 -0
  225. package/dist/hooks/auto-slash-command/executor.d.ts +11 -0
  226. package/dist/hooks/auto-slash-command/index.d.ts +12 -0
  227. package/dist/hooks/auto-slash-command/index.test.d.ts +1 -0
  228. package/dist/hooks/auto-slash-command/types.d.ts +27 -0
  229. package/dist/hooks/auto-update-checker/cache.d.ts +3 -0
  230. package/dist/hooks/auto-update-checker/checker.d.ts +20 -0
  231. package/dist/hooks/auto-update-checker/checker.test.d.ts +1 -0
  232. package/dist/hooks/auto-update-checker/constants.d.ts +10 -0
  233. package/dist/hooks/auto-update-checker/index.d.ts +17 -0
  234. package/dist/hooks/auto-update-checker/index.test.d.ts +1 -0
  235. package/dist/hooks/auto-update-checker/types.d.ts +25 -0
  236. package/dist/hooks/background-notification/index.d.ts +18 -0
  237. package/dist/hooks/background-notification/types.d.ts +4 -0
  238. package/dist/hooks/category-skill-reminder/index.d.ts +22 -0
  239. package/dist/hooks/category-skill-reminder/index.test.d.ts +1 -0
  240. package/dist/hooks/claude-code-hooks/config-loader.d.ts +13 -0
  241. package/dist/hooks/claude-code-hooks/config.d.ts +3 -0
  242. package/dist/hooks/claude-code-hooks/index.d.ts +48 -0
  243. package/dist/hooks/claude-code-hooks/plugin-config.d.ts +8 -0
  244. package/dist/hooks/claude-code-hooks/post-tool-use.d.ts +40 -0
  245. package/dist/hooks/claude-code-hooks/pre-compact.d.ts +16 -0
  246. package/dist/hooks/claude-code-hooks/pre-tool-use.d.ts +25 -0
  247. package/dist/hooks/claude-code-hooks/stop.d.ts +20 -0
  248. package/dist/hooks/claude-code-hooks/todo.d.ts +12 -0
  249. package/dist/hooks/claude-code-hooks/tool-input-cache.d.ts +5 -0
  250. package/dist/hooks/claude-code-hooks/transcript.d.ts +34 -0
  251. package/dist/hooks/claude-code-hooks/types.d.ts +183 -0
  252. package/dist/hooks/claude-code-hooks/user-prompt-submit.d.ts +22 -0
  253. package/dist/hooks/comment-checker/cli.d.ts +52 -0
  254. package/dist/hooks/comment-checker/cli.test.d.ts +1 -0
  255. package/dist/hooks/comment-checker/downloader.d.ts +25 -0
  256. package/dist/hooks/comment-checker/index.d.ts +19 -0
  257. package/dist/hooks/comment-checker/types.d.ts +31 -0
  258. package/dist/hooks/compaction-context-injector/index.d.ts +8 -0
  259. package/dist/hooks/compaction-context-injector/index.test.d.ts +1 -0
  260. package/dist/hooks/context-window-monitor.d.ts +18 -0
  261. package/dist/hooks/delegate-task-retry/index.d.ts +24 -0
  262. package/dist/hooks/delegate-task-retry/index.test.d.ts +1 -0
  263. package/dist/hooks/directory-agents-injector/constants.d.ts +3 -0
  264. package/dist/hooks/directory-agents-injector/index.d.ts +26 -0
  265. package/dist/hooks/directory-agents-injector/storage.d.ts +1 -0
  266. package/dist/hooks/directory-readme-injector/constants.d.ts +3 -0
  267. package/dist/hooks/directory-readme-injector/index.d.ts +26 -0
  268. package/dist/hooks/directory-readme-injector/storage.d.ts +1 -0
  269. package/dist/hooks/edit-error-recovery/index.d.ts +31 -0
  270. package/dist/hooks/edit-error-recovery/index.test.d.ts +1 -0
  271. package/dist/hooks/empty-task-response-detector.d.ts +12 -0
  272. package/dist/hooks/index.d.ts +35 -0
  273. package/dist/hooks/interactive-bash-session/constants.d.ts +4 -0
  274. package/dist/hooks/interactive-bash-session/index.d.ts +23 -0
  275. package/dist/hooks/interactive-bash-session/storage.d.ts +4 -0
  276. package/dist/hooks/interactive-bash-session/types.d.ts +10 -0
  277. package/dist/hooks/keyword-detector/analyze/default.d.ts +12 -0
  278. package/dist/hooks/keyword-detector/analyze/index.d.ts +1 -0
  279. package/dist/hooks/keyword-detector/constants.d.ts +10 -0
  280. package/dist/hooks/keyword-detector/detector.d.ts +11 -0
  281. package/dist/hooks/keyword-detector/index.d.ts +23 -0
  282. package/dist/hooks/keyword-detector/index.test.d.ts +1 -0
  283. package/dist/hooks/keyword-detector/search/default.d.ts +12 -0
  284. package/dist/hooks/keyword-detector/search/index.d.ts +1 -0
  285. package/dist/hooks/keyword-detector/types.d.ts +4 -0
  286. package/dist/hooks/keyword-detector/ultrawork/default.d.ts +10 -0
  287. package/dist/hooks/keyword-detector/ultrawork/gpt5.2.d.ts +16 -0
  288. package/dist/hooks/keyword-detector/ultrawork/index.d.ts +17 -0
  289. package/dist/hooks/keyword-detector/ultrawork/planner.d.ts +6 -0
  290. package/dist/hooks/keyword-detector/ultrawork/utils.d.ts +24 -0
  291. package/dist/hooks/non-interactive-env/constants.d.ts +34 -0
  292. package/dist/hooks/non-interactive-env/detector.d.ts +1 -0
  293. package/dist/hooks/non-interactive-env/index.d.ts +14 -0
  294. package/dist/hooks/non-interactive-env/index.test.d.ts +1 -0
  295. package/dist/hooks/non-interactive-env/types.d.ts +3 -0
  296. package/dist/hooks/prometheus-md-only/constants.d.ts +7 -0
  297. package/dist/hooks/prometheus-md-only/index.d.ts +12 -0
  298. package/dist/hooks/prometheus-md-only/index.test.d.ts +1 -0
  299. package/dist/hooks/question-label-truncator/index.d.ts +7 -0
  300. package/dist/hooks/question-label-truncator/index.test.d.ts +1 -0
  301. package/dist/hooks/ralph-loop/constants.d.ts +5 -0
  302. package/dist/hooks/ralph-loop/index.d.ts +21 -0
  303. package/dist/hooks/ralph-loop/index.test.d.ts +1 -0
  304. package/dist/hooks/ralph-loop/storage.d.ts +6 -0
  305. package/dist/hooks/ralph-loop/types.d.ts +17 -0
  306. package/dist/hooks/rules-injector/constants.d.ts +8 -0
  307. package/dist/hooks/rules-injector/finder.d.ts +33 -0
  308. package/dist/hooks/rules-injector/finder.test.d.ts +1 -0
  309. package/dist/hooks/rules-injector/index.d.ts +26 -0
  310. package/dist/hooks/rules-injector/matcher.d.ts +21 -0
  311. package/dist/hooks/rules-injector/output-path.d.ts +5 -0
  312. package/dist/hooks/rules-injector/output-path.test.d.ts +1 -0
  313. package/dist/hooks/rules-injector/parser.d.ts +18 -0
  314. package/dist/hooks/rules-injector/parser.test.d.ts +1 -0
  315. package/dist/hooks/rules-injector/storage.d.ts +9 -0
  316. package/dist/hooks/rules-injector/types.d.ts +54 -0
  317. package/dist/hooks/session-notification-utils.d.ts +9 -0
  318. package/dist/hooks/session-notification.d.ts +20 -0
  319. package/dist/hooks/session-notification.test.d.ts +1 -0
  320. package/dist/hooks/session-recovery/constants.d.ts +6 -0
  321. package/dist/hooks/session-recovery/index.d.ts +22 -0
  322. package/dist/hooks/session-recovery/index.test.d.ts +1 -0
  323. package/dist/hooks/session-recovery/storage.d.ts +19 -0
  324. package/dist/hooks/session-recovery/types.d.ts +90 -0
  325. package/dist/hooks/sisyphus-junior-notepad/constants.d.ts +2 -0
  326. package/dist/hooks/sisyphus-junior-notepad/index.d.ts +12 -0
  327. package/dist/hooks/start-work/index.d.ts +16 -0
  328. package/dist/hooks/start-work/index.test.d.ts +1 -0
  329. package/dist/hooks/stop-continuation-guard/index.d.ts +16 -0
  330. package/dist/hooks/stop-continuation-guard/index.test.d.ts +1 -0
  331. package/dist/hooks/subagent-question-blocker/index.d.ts +2 -0
  332. package/dist/hooks/subagent-question-blocker/index.test.d.ts +1 -0
  333. package/dist/hooks/task-resume-info/index.d.ts +11 -0
  334. package/dist/hooks/think-mode/detector.d.ts +5 -0
  335. package/dist/hooks/think-mode/index.d.ts +14 -0
  336. package/dist/hooks/think-mode/index.test.d.ts +1 -0
  337. package/dist/hooks/think-mode/switcher.d.ts +69 -0
  338. package/dist/hooks/think-mode/switcher.test.d.ts +1 -0
  339. package/dist/hooks/think-mode/types.d.ts +21 -0
  340. package/dist/hooks/thinking-block-validator/index.d.ts +30 -0
  341. package/dist/hooks/todo-continuation-enforcer.d.ts +19 -0
  342. package/dist/hooks/todo-continuation-enforcer.test.d.ts +1 -0
  343. package/dist/hooks/tool-output-truncator.d.ts +17 -0
  344. package/dist/hooks/tool-output-truncator.test.d.ts +1 -0
  345. package/dist/hooks/unstable-agent-babysitter/index.d.ts +50 -0
  346. package/dist/hooks/unstable-agent-babysitter/index.test.d.ts +1 -0
  347. package/dist/index.d.ts +5 -0
  348. package/dist/index.js +76117 -0
  349. package/dist/index.test.d.ts +1 -0
  350. package/dist/mcp/context7.d.ts +9 -0
  351. package/dist/mcp/grep-app.d.ts +6 -0
  352. package/dist/mcp/index.d.ts +9 -0
  353. package/dist/mcp/index.test.d.ts +1 -0
  354. package/dist/mcp/types.d.ts +9 -0
  355. package/dist/mcp/websearch.d.ts +9 -0
  356. package/dist/oh-my-parallel-agent-opencode.schema.json +2182 -0
  357. package/dist/plugin-config.d.ts +4 -0
  358. package/dist/plugin-config.test.d.ts +1 -0
  359. package/dist/plugin-handlers/config-handler.d.ts +13 -0
  360. package/dist/plugin-handlers/config-handler.test.d.ts +1 -0
  361. package/dist/plugin-handlers/index.d.ts +1 -0
  362. package/dist/plugin-state.d.ts +6 -0
  363. package/dist/shared/agent-config-integration.test.d.ts +1 -0
  364. package/dist/shared/agent-display-names.d.ts +12 -0
  365. package/dist/shared/agent-display-names.test.d.ts +1 -0
  366. package/dist/shared/agent-tool-restrictions.d.ts +7 -0
  367. package/dist/shared/agent-variant.d.ts +9 -0
  368. package/dist/shared/agent-variant.test.d.ts +1 -0
  369. package/dist/shared/binary-downloader.d.ts +10 -0
  370. package/dist/shared/claude-config-dir.d.ts +1 -0
  371. package/dist/shared/claude-config-dir.test.d.ts +1 -0
  372. package/dist/shared/command-executor.d.ts +21 -0
  373. package/dist/shared/config-errors.d.ts +7 -0
  374. package/dist/shared/connected-providers-cache.d.ts +52 -0
  375. package/dist/shared/data-path.d.ts +30 -0
  376. package/dist/shared/deep-merge.d.ts +13 -0
  377. package/dist/shared/deep-merge.test.d.ts +1 -0
  378. package/dist/shared/dynamic-truncator.d.ts +27 -0
  379. package/dist/shared/external-plugin-detector.d.ts +18 -0
  380. package/dist/shared/external-plugin-detector.test.d.ts +1 -0
  381. package/dist/shared/file-reference-resolver.d.ts +1 -0
  382. package/dist/shared/file-utils.d.ts +7 -0
  383. package/dist/shared/first-message-variant.d.ts +11 -0
  384. package/dist/shared/first-message-variant.test.d.ts +1 -0
  385. package/dist/shared/frontmatter.d.ts +7 -0
  386. package/dist/shared/frontmatter.test.d.ts +1 -0
  387. package/dist/shared/hook-disabled.d.ts +2 -0
  388. package/dist/shared/index.d.ts +36 -0
  389. package/dist/shared/jsonc-parser.d.ts +15 -0
  390. package/dist/shared/jsonc-parser.test.d.ts +1 -0
  391. package/dist/shared/logger.d.ts +2 -0
  392. package/dist/shared/migration.d.ts +32 -0
  393. package/dist/shared/migration.test.d.ts +1 -0
  394. package/dist/shared/model-availability.d.ts +19 -0
  395. package/dist/shared/model-availability.test.d.ts +1 -0
  396. package/dist/shared/model-requirements.d.ts +13 -0
  397. package/dist/shared/model-requirements.test.d.ts +1 -0
  398. package/dist/shared/model-resolution-pipeline.d.ts +24 -0
  399. package/dist/shared/model-resolver.d.ts +22 -0
  400. package/dist/shared/model-resolver.test.d.ts +1 -0
  401. package/dist/shared/model-sanitizer.d.ts +3 -0
  402. package/dist/shared/model-suggestion-retry.d.ts +24 -0
  403. package/dist/shared/model-suggestion-retry.test.d.ts +1 -0
  404. package/dist/shared/ollama-ndjson-parser.d.ts +108 -0
  405. package/dist/shared/opencode-config-dir.d.ts +19 -0
  406. package/dist/shared/opencode-config-dir.test.d.ts +1 -0
  407. package/dist/shared/opencode-version.d.ts +19 -0
  408. package/dist/shared/opencode-version.test.d.ts +1 -0
  409. package/dist/shared/pattern-matcher.d.ts +3 -0
  410. package/dist/shared/permission-compat.d.ts +27 -0
  411. package/dist/shared/permission-compat.test.d.ts +1 -0
  412. package/dist/shared/session-cursor.d.ts +13 -0
  413. package/dist/shared/session-cursor.test.d.ts +1 -0
  414. package/dist/shared/session-injected-paths.d.ts +10 -0
  415. package/dist/shared/session-utils.d.ts +2 -0
  416. package/dist/shared/shell-env.d.ts +41 -0
  417. package/dist/shared/shell-env.test.d.ts +1 -0
  418. package/dist/shared/snake-case.d.ts +5 -0
  419. package/dist/shared/system-directive.d.ts +45 -0
  420. package/dist/shared/system-directive.test.d.ts +1 -0
  421. package/dist/shared/tmux/constants.d.ts +5 -0
  422. package/dist/shared/tmux/index.d.ts +3 -0
  423. package/dist/shared/tmux/tmux-utils.d.ts +17 -0
  424. package/dist/shared/tmux/tmux-utils.test.d.ts +1 -0
  425. package/dist/shared/tmux/types.d.ts +4 -0
  426. package/dist/shared/tool-name.d.ts +1 -0
  427. package/dist/shared/zip-extractor.d.ts +1 -0
  428. package/dist/tools/ast-grep/cli.d.ts +15 -0
  429. package/dist/tools/ast-grep/constants.d.ts +29 -0
  430. package/dist/tools/ast-grep/downloader.d.ts +5 -0
  431. package/dist/tools/ast-grep/index.d.ts +8 -0
  432. package/dist/tools/ast-grep/tools.d.ts +3 -0
  433. package/dist/tools/ast-grep/types.d.ts +58 -0
  434. package/dist/tools/ast-grep/utils.d.ts +5 -0
  435. package/dist/tools/background-task/constants.d.ts +3 -0
  436. package/dist/tools/background-task/index.d.ts +4 -0
  437. package/dist/tools/background-task/tools.d.ts +47 -0
  438. package/dist/tools/background-task/tools.test.d.ts +1 -0
  439. package/dist/tools/background-task/types.d.ts +20 -0
  440. package/dist/tools/call-omo-agent/constants.d.ts +2 -0
  441. package/dist/tools/call-omo-agent/index.d.ts +3 -0
  442. package/dist/tools/call-omo-agent/tools.d.ts +3 -0
  443. package/dist/tools/call-omo-agent/types.d.ts +24 -0
  444. package/dist/tools/delegate-task/categories.d.ts +17 -0
  445. package/dist/tools/delegate-task/constants.d.ts +30 -0
  446. package/dist/tools/delegate-task/executor.d.ts +75 -0
  447. package/dist/tools/delegate-task/helpers.d.ts +30 -0
  448. package/dist/tools/delegate-task/index.d.ts +4 -0
  449. package/dist/tools/delegate-task/prompt-builder.d.ts +6 -0
  450. package/dist/tools/delegate-task/timing.d.ts +11 -0
  451. package/dist/tools/delegate-task/tools.d.ts +6 -0
  452. package/dist/tools/delegate-task/tools.test.d.ts +1 -0
  453. package/dist/tools/delegate-task/types.d.ts +44 -0
  454. package/dist/tools/glob/cli.d.ts +11 -0
  455. package/dist/tools/glob/cli.test.d.ts +1 -0
  456. package/dist/tools/glob/constants.d.ts +6 -0
  457. package/dist/tools/glob/index.d.ts +2 -0
  458. package/dist/tools/glob/tools.d.ts +2 -0
  459. package/dist/tools/glob/types.d.ts +20 -0
  460. package/dist/tools/glob/utils.d.ts +2 -0
  461. package/dist/tools/grep/cli.d.ts +3 -0
  462. package/dist/tools/grep/constants.d.ts +17 -0
  463. package/dist/tools/grep/downloader.d.ts +3 -0
  464. package/dist/tools/grep/downloader.test.d.ts +1 -0
  465. package/dist/tools/grep/index.d.ts +2 -0
  466. package/dist/tools/grep/tools.d.ts +2 -0
  467. package/dist/tools/grep/types.d.ts +36 -0
  468. package/dist/tools/grep/utils.d.ts +3 -0
  469. package/dist/tools/index.d.ts +15 -0
  470. package/dist/tools/interactive-bash/constants.d.ts +3 -0
  471. package/dist/tools/interactive-bash/index.d.ts +3 -0
  472. package/dist/tools/interactive-bash/tools.d.ts +7 -0
  473. package/dist/tools/interactive-bash/utils.d.ts +3 -0
  474. package/dist/tools/look-at/constants.d.ts +2 -0
  475. package/dist/tools/look-at/index.d.ts +3 -0
  476. package/dist/tools/look-at/tools.d.ts +9 -0
  477. package/dist/tools/look-at/tools.test.d.ts +1 -0
  478. package/dist/tools/look-at/types.d.ts +4 -0
  479. package/dist/tools/lsp/client.d.ts +50 -0
  480. package/dist/tools/lsp/config.d.ts +17 -0
  481. package/dist/tools/lsp/config.test.d.ts +1 -0
  482. package/dist/tools/lsp/constants.d.ts +9 -0
  483. package/dist/tools/lsp/index.d.ts +6 -0
  484. package/dist/tools/lsp/tools.d.ts +7 -0
  485. package/dist/tools/lsp/types.d.ts +123 -0
  486. package/dist/tools/lsp/utils.d.ts +26 -0
  487. package/dist/tools/session-manager/constants.d.ts +12 -0
  488. package/dist/tools/session-manager/index.d.ts +3 -0
  489. package/dist/tools/session-manager/storage.d.ts +12 -0
  490. package/dist/tools/session-manager/storage.test.d.ts +1 -0
  491. package/dist/tools/session-manager/tools.d.ts +5 -0
  492. package/dist/tools/session-manager/tools.test.d.ts +1 -0
  493. package/dist/tools/session-manager/types.d.ts +89 -0
  494. package/dist/tools/session-manager/utils.d.ts +11 -0
  495. package/dist/tools/session-manager/utils.test.d.ts +1 -0
  496. package/dist/tools/skill/constants.d.ts +3 -0
  497. package/dist/tools/skill/index.d.ts +3 -0
  498. package/dist/tools/skill/tools.d.ts +4 -0
  499. package/dist/tools/skill/tools.test.d.ts +1 -0
  500. package/dist/tools/skill/types.d.ts +28 -0
  501. package/dist/tools/skill-mcp/constants.d.ts +2 -0
  502. package/dist/tools/skill-mcp/index.d.ts +3 -0
  503. package/dist/tools/skill-mcp/tools.d.ts +11 -0
  504. package/dist/tools/skill-mcp/tools.test.d.ts +1 -0
  505. package/dist/tools/skill-mcp/types.d.ts +8 -0
  506. package/dist/tools/slashcommand/index.d.ts +2 -0
  507. package/dist/tools/slashcommand/tools.d.ts +5 -0
  508. package/dist/tools/slashcommand/tools.test.d.ts +1 -0
  509. package/dist/tools/slashcommand/types.d.ts +24 -0
  510. package/package.json +77 -6
  511. package/postinstall.mjs +43 -0
  512. package/__tests__/agents.test.ts +0 -107
  513. package/__tests__/config-handler.test.ts +0 -198
  514. package/__tests__/dynamic-agent.test.ts +0 -68
  515. package/__tests__/schema.test.ts +0 -149
  516. package/__tests__/setup.test.ts +0 -16
  517. package/bun.lock +0 -29
  518. package/oh-my-parallel-agent-opencode.example.json +0 -7
  519. package/src/agents/explore.ts +0 -117
  520. package/src/agents/index.ts +0 -69
  521. package/src/agents/librarian.ts +0 -302
  522. package/src/agents/metis.ts +0 -341
  523. package/src/agents/momus.ts +0 -237
  524. package/src/agents/types.ts +0 -95
  525. package/src/config/schema.ts +0 -15
  526. package/src/index.ts +0 -116
  527. package/src/plugin-handlers/config-handler.ts +0 -129
  528. package/src/utils/dynamic-agent.ts +0 -37
  529. package/tsconfig.json +0 -19
@@ -1,107 +0,0 @@
1
- import { describe, it, expect } from "bun:test"
2
- import {
3
- createLibrarianAgent,
4
- createExploreAgent,
5
- createMetisAgent,
6
- createMomusAgent,
7
- createDynamicAgent,
8
- type SupportedAgentName,
9
- } from "../src/agents"
10
-
11
- describe("Agent Factories", () => {
12
- const testModel_var = "openai/gpt-5.2"
13
-
14
- it("should export createLibrarianAgent", () => {
15
- const agent_var = createLibrarianAgent(testModel_var)
16
- expect(agent_var).toBeDefined()
17
- expect(agent_var.model).toBe(testModel_var)
18
- expect(agent_var.description).toContain("Librarian")
19
- })
20
-
21
- it("should export createExploreAgent", () => {
22
- const agent_var = createExploreAgent(testModel_var)
23
- expect(agent_var).toBeDefined()
24
- expect(agent_var.model).toBe(testModel_var)
25
- expect(agent_var.description).toContain("Explore")
26
- })
27
-
28
- it("should export createMetisAgent", () => {
29
- const agent_var = createMetisAgent(testModel_var)
30
- expect(agent_var).toBeDefined()
31
- expect(agent_var.model).toBe(testModel_var)
32
- expect(agent_var.description).toContain("Metis")
33
- })
34
-
35
- it("should export createMomusAgent", () => {
36
- const agent_var = createMomusAgent(testModel_var)
37
- expect(agent_var).toBeDefined()
38
- expect(agent_var.model).toBe(testModel_var)
39
- expect(agent_var.description).toContain("Momus")
40
- })
41
- })
42
-
43
- describe("createDynamicAgent", () => {
44
- const testModel_var = "openai/gpt-5.2"
45
-
46
- it("should create agent with basic config", () => {
47
- const agent_var = createDynamicAgent("momus", testModel_var)
48
- expect(agent_var).toBeDefined()
49
- expect(agent_var.model).toBe(testModel_var)
50
- expect(agent_var.description).toContain("Momus")
51
- })
52
-
53
- it("should apply prompt_append to agent", () => {
54
- const appendText_var = "test append message"
55
- const agent_var = createDynamicAgent("momus", testModel_var, {
56
- prompt_append: appendText_var,
57
- })
58
-
59
- expect(agent_var.prompt).toContain(appendText_var)
60
- expect(agent_var.prompt?.endsWith(appendText_var)).toBe(true)
61
- })
62
-
63
- it("should override model in config", () => {
64
- const overrideModel_var = "anthropic/claude-3-opus"
65
- const agent_var = createDynamicAgent("explore", testModel_var, {
66
- model: overrideModel_var,
67
- })
68
-
69
- expect(agent_var.model).toBe(overrideModel_var)
70
- })
71
-
72
- it("should override temperature in config", () => {
73
- const agent_var = createDynamicAgent("librarian", testModel_var, {
74
- temperature: 0.5,
75
- })
76
-
77
- expect(agent_var.temperature).toBe(0.5)
78
- })
79
-
80
- it("should apply both prompt_append and model override", () => {
81
- const overrideModel_var = "anthropic/claude-sonnet-4"
82
- const appendText_var = "combined test"
83
- const agent_var = createDynamicAgent("metis", testModel_var, {
84
- model: overrideModel_var,
85
- prompt_append: appendText_var,
86
- })
87
-
88
- expect(agent_var.model).toBe(overrideModel_var)
89
- expect(agent_var.prompt).toContain(appendText_var)
90
- })
91
-
92
- it("should throw error for unknown agent name", () => {
93
- expect(() => {
94
- createDynamicAgent("unknown" as SupportedAgentName, testModel_var)
95
- }).toThrow("Unknown agent name")
96
- })
97
-
98
- it("should work with all supported agent names", () => {
99
- const agentNames_var: SupportedAgentName[] = ["librarian", "explore", "metis", "momus"]
100
-
101
- for (const name_var of agentNames_var) {
102
- const agent_var = createDynamicAgent(name_var, testModel_var)
103
- expect(agent_var).toBeDefined()
104
- expect(agent_var.model).toBe(testModel_var)
105
- }
106
- })
107
- })
@@ -1,198 +0,0 @@
1
- import { describe, expect, test, beforeEach, afterEach } from "bun:test"
2
- import { existsSync, mkdirSync, writeFileSync, rmSync } from "fs"
3
- import { join } from "path"
4
- import {
5
- findConfigPath,
6
- loadParallelAgentConfig,
7
- createParallelAgents,
8
- createParallelAgentsFromConfig,
9
- } from "../src/plugin-handlers/config-handler"
10
-
11
- const TEST_CONFIG_DIR = join(process.cwd(), "__test_config__")
12
- const TEST_CONFIG_FILE = join(TEST_CONFIG_DIR, "oh-my-parallel-agent-opencode.json")
13
-
14
- describe("findConfigPath", () => {
15
- beforeEach(() => {
16
- if (existsSync(TEST_CONFIG_DIR)) {
17
- rmSync(TEST_CONFIG_DIR, { recursive: true })
18
- }
19
- })
20
-
21
- afterEach(() => {
22
- if (existsSync(TEST_CONFIG_DIR)) {
23
- rmSync(TEST_CONFIG_DIR, { recursive: true })
24
- }
25
- })
26
-
27
- test("설정 파일이 없으면 null 반환", () => {
28
- const result_var = findConfigPath()
29
- expect(result_var).toBeNull()
30
- })
31
-
32
- test("프로젝트 레벨 설정 파일을 찾음", () => {
33
- const projectConfigDir = join(process.cwd(), ".opencode")
34
- const projectConfigFile = join(projectConfigDir, "oh-my-parallel-agent-opencode.json")
35
-
36
- mkdirSync(projectConfigDir, { recursive: true })
37
- writeFileSync(projectConfigFile, JSON.stringify({ agents: {} }))
38
-
39
- const result_var = findConfigPath()
40
- expect(result_var).toBe(projectConfigFile)
41
-
42
- rmSync(projectConfigDir, { recursive: true })
43
- })
44
- })
45
-
46
- describe("loadParallelAgentConfig", () => {
47
- beforeEach(() => {
48
- if (existsSync(TEST_CONFIG_DIR)) {
49
- rmSync(TEST_CONFIG_DIR, { recursive: true })
50
- }
51
- mkdirSync(TEST_CONFIG_DIR, { recursive: true })
52
- })
53
-
54
- afterEach(() => {
55
- if (existsSync(TEST_CONFIG_DIR)) {
56
- rmSync(TEST_CONFIG_DIR, { recursive: true })
57
- }
58
- })
59
-
60
- test("유효한 설정 파일을 로드함", () => {
61
- const validConfig = {
62
- agents: {
63
- "momus-1": { model: "openai/gpt-5.2" },
64
- "librarian-2": { model: "anthropic/claude-3-opus" },
65
- },
66
- }
67
-
68
- writeFileSync(TEST_CONFIG_FILE, JSON.stringify(validConfig))
69
-
70
- const result_var = loadParallelAgentConfig(TEST_CONFIG_FILE)
71
- expect(result_var).toEqual(validConfig)
72
- })
73
-
74
- test("잘못된 JSON 형식은 에러를 던짐", () => {
75
- writeFileSync(TEST_CONFIG_FILE, "{ invalid json")
76
-
77
- expect(() => loadParallelAgentConfig(TEST_CONFIG_FILE)).toThrow()
78
- })
79
-
80
- test("스키마에 맞지 않는 설정은 에러를 던짐", () => {
81
- const invalidConfig = {
82
- agents: {
83
- "momus-1": { invalidField: "should fail" },
84
- },
85
- }
86
-
87
- writeFileSync(TEST_CONFIG_FILE, JSON.stringify(invalidConfig))
88
-
89
- // Zod validation error should be thrown
90
- // Note: 이 테스트는 스키마 검증이 작동하는지 확인
91
- const result_var = loadParallelAgentConfig(TEST_CONFIG_FILE)
92
- expect(result_var).toBeDefined()
93
- })
94
-
95
- test("파일이 없으면 null 반환", () => {
96
- const result_var = loadParallelAgentConfig("/nonexistent/path.json")
97
- expect(result_var).toBeNull()
98
- })
99
- })
100
-
101
- describe("createParallelAgents", () => {
102
- test("지원되는 에이전트 생성", () => {
103
- const config_var = {
104
- agents: {
105
- "momus-1": { model: "openai/gpt-5.2" },
106
- "librarian-2": { model: "anthropic/claude-3-opus" },
107
- explore: {},
108
- },
109
- }
110
-
111
- const result_var = createParallelAgents(config_var)
112
-
113
- expect(result_var["momus-1"]).toBeDefined()
114
- expect(result_var["librarian-2"]).toBeDefined()
115
- expect(result_var.explore).toBeDefined()
116
-
117
- expect(result_var["momus-1"].model).toBe("openai/gpt-5.2")
118
- expect(result_var["librarian-2"].model).toBe("anthropic/claude-3-opus")
119
- })
120
-
121
- test("지원하지 않는 에이전트는 스킵", () => {
122
- const config_var = {
123
- agents: {
124
- "invalid-agent": { model: "openai/gpt-5.2" },
125
- "momus-1": { model: "openai/gpt-5.2" },
126
- },
127
- }
128
-
129
- const result_var = createParallelAgents(config_var)
130
-
131
- expect(result_var["invalid-agent"]).toBeUndefined()
132
- expect(result_var["momus-1"]).toBeDefined()
133
- })
134
-
135
- test("prompt_append가 적용됨", () => {
136
- const config_var = {
137
- agents: {
138
- "momus-1": {
139
- model: "openai/gpt-5.2",
140
- prompt_append: "추가 지시사항",
141
- },
142
- },
143
- }
144
-
145
- const result_var = createParallelAgents(config_var)
146
-
147
- expect(result_var["momus-1"].prompt).toContain("추가 지시사항")
148
- })
149
-
150
- test("variant가 variant 필드에 반영됨", () => {
151
- const config_var = {
152
- agents: {
153
- "momus-2": { variant: "custom-variant" },
154
- },
155
- }
156
-
157
- const result_var = createParallelAgents(config_var)
158
-
159
- expect(result_var["momus-2"].variant).toBe("custom-variant")
160
- })
161
- })
162
-
163
- describe("createParallelAgentsFromConfig", () => {
164
- beforeEach(() => {
165
- if (existsSync(TEST_CONFIG_DIR)) {
166
- rmSync(TEST_CONFIG_DIR, { recursive: true })
167
- }
168
- mkdirSync(TEST_CONFIG_DIR, { recursive: true })
169
- })
170
-
171
- afterEach(() => {
172
- if (existsSync(TEST_CONFIG_DIR)) {
173
- rmSync(TEST_CONFIG_DIR, { recursive: true })
174
- }
175
- })
176
-
177
- test("설정 파일로부터 에이전트 생성", () => {
178
- const config_var = {
179
- agents: {
180
- "momus-1": { model: "openai/gpt-5.2" },
181
- "explore-1": {},
182
- },
183
- }
184
-
185
- writeFileSync(TEST_CONFIG_FILE, JSON.stringify(config_var))
186
-
187
- const result_var = createParallelAgentsFromConfig(TEST_CONFIG_FILE)
188
-
189
- expect(result_var["momus-1"]).toBeDefined()
190
- expect(result_var["explore-1"]).toBeDefined()
191
- })
192
-
193
- test("설정 파일이 없으면 빈 객체 반환", () => {
194
- const result_var = createParallelAgentsFromConfig("/nonexistent/path.json")
195
-
196
- expect(result_var).toEqual({})
197
- })
198
- })
@@ -1,68 +0,0 @@
1
- import { describe, it, expect } from "bun:test";
2
- import { resolveBaseAgent, isDynamicAgentName } from "../src/utils/dynamic-agent";
3
-
4
- describe("resolveBaseAgent", () => {
5
- it("기본 에이전트 이름 해석", () => {
6
- expect(resolveBaseAgent("momus")).toEqual({ baseAgent: "momus" });
7
- expect(resolveBaseAgent("librarian")).toEqual({ baseAgent: "librarian" });
8
- expect(resolveBaseAgent("explore")).toEqual({ baseAgent: "explore" });
9
- expect(resolveBaseAgent("metis")).toEqual({ baseAgent: "metis" });
10
- });
11
-
12
- it("변형 숫자가 있는 에이전트 이름 해석", () => {
13
- expect(resolveBaseAgent("momus-1")).toEqual({
14
- baseAgent: "momus",
15
- variant: "1"
16
- });
17
- expect(resolveBaseAgent("librarian-42")).toEqual({
18
- baseAgent: "librarian",
19
- variant: "42"
20
- });
21
- expect(resolveBaseAgent("explore-999")).toEqual({
22
- baseAgent: "explore",
23
- variant: "999"
24
- });
25
- });
26
-
27
- it("지원하지 않는 에이전트 이름은 null 반환", () => {
28
- expect(resolveBaseAgent("oracle")).toBeNull();
29
- expect(resolveBaseAgent("sisyphus")).toBeNull();
30
- expect(resolveBaseAgent("prometheus")).toBeNull();
31
- expect(resolveBaseAgent("unknown")).toBeNull();
32
- });
33
-
34
- it("중첩 변형은 null 반환", () => {
35
- expect(resolveBaseAgent("momus-1-1")).toBeNull();
36
- expect(resolveBaseAgent("librarian-1-2-3")).toBeNull();
37
- });
38
-
39
- it("잘못된 형식은 null 반환", () => {
40
- expect(resolveBaseAgent("momus-")).toBeNull();
41
- expect(resolveBaseAgent("-1")).toBeNull();
42
- expect(resolveBaseAgent("momus-abc")).toBeNull();
43
- expect(resolveBaseAgent("")).toBeNull();
44
- });
45
- });
46
-
47
- describe("isDynamicAgentName", () => {
48
- it("유효한 동적 에이전트 이름 인식", () => {
49
- expect(isDynamicAgentName("momus")).toBe(true);
50
- expect(isDynamicAgentName("momus-1")).toBe(true);
51
- expect(isDynamicAgentName("librarian")).toBe(true);
52
- expect(isDynamicAgentName("librarian-42")).toBe(true);
53
- expect(isDynamicAgentName("explore")).toBe(true);
54
- expect(isDynamicAgentName("metis-123")).toBe(true);
55
- });
56
-
57
- it("지원하지 않는 에이전트 이름은 false 반환", () => {
58
- expect(isDynamicAgentName("oracle")).toBe(false);
59
- expect(isDynamicAgentName("sisyphus")).toBe(false);
60
- expect(isDynamicAgentName("unknown")).toBe(false);
61
- });
62
-
63
- it("잘못된 형식은 false 반환", () => {
64
- expect(isDynamicAgentName("momus-1-1")).toBe(false);
65
- expect(isDynamicAgentName("momus-abc")).toBe(false);
66
- expect(isDynamicAgentName("")).toBe(false);
67
- });
68
- });
@@ -1,149 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import { ParallelAgentConfigSchema, AgentOverrideConfigSchema } from "../src/config/schema";
3
-
4
- describe("AgentOverrideConfigSchema", () => {
5
- test("유효한 모델 설정을 파싱한다", () => {
6
- const valid_config_var = {
7
- model: "openai/gpt-5.2",
8
- };
9
-
10
- const result_var = AgentOverrideConfigSchema.safeParse(valid_config_var);
11
- expect(result_var.success).toBe(true);
12
- });
13
-
14
- test("유효한 variant 설정을 파싱한다", () => {
15
- const valid_config_var = {
16
- variant: "custom-variant",
17
- };
18
-
19
- const result_var = AgentOverrideConfigSchema.safeParse(valid_config_var);
20
- expect(result_var.success).toBe(true);
21
- });
22
-
23
- test("유효한 prompt_append 설정을 파싱한다", () => {
24
- const valid_config_var = {
25
- prompt_append: "추가 프롬프트 내용",
26
- };
27
-
28
- const result_var = AgentOverrideConfigSchema.safeParse(valid_config_var);
29
- expect(result_var.success).toBe(true);
30
- });
31
-
32
- test("유효한 temperature 범위를 파싱한다", () => {
33
- const valid_configs_var = [
34
- { temperature: 0 },
35
- { temperature: 1 },
36
- { temperature: 2 },
37
- { temperature: 0.7 },
38
- ];
39
-
40
- for (const config_var of valid_configs_var) {
41
- const result_var = AgentOverrideConfigSchema.safeParse(config_var);
42
- expect(result_var.success).toBe(true);
43
- }
44
- });
45
-
46
- test("잘못된 temperature 범위를 거부한다", () => {
47
- const invalid_configs_var = [
48
- { temperature: -0.1 },
49
- { temperature: 2.1 },
50
- { temperature: 100 },
51
- ];
52
-
53
- for (const config_var of invalid_configs_var) {
54
- const result_var = AgentOverrideConfigSchema.safeParse(config_var);
55
- expect(result_var.success).toBe(false);
56
- }
57
- });
58
-
59
- test("모든 필드가 선택적이다", () => {
60
- const empty_config_var = {};
61
-
62
- const result_var = AgentOverrideConfigSchema.safeParse(empty_config_var);
63
- expect(result_var.success).toBe(true);
64
- });
65
-
66
- test("여러 필드를 함께 파싱한다", () => {
67
- const valid_config_var = {
68
- model: "anthropic/claude-opus-4",
69
- variant: "thinking",
70
- prompt_append: "한글로 답변하세요",
71
- temperature: 0.8,
72
- };
73
-
74
- const result_var = AgentOverrideConfigSchema.safeParse(valid_config_var);
75
- expect(result_var.success).toBe(true);
76
- });
77
- });
78
-
79
- describe("ParallelAgentConfigSchema", () => {
80
- test("유효한 agents 설정을 파싱한다", () => {
81
- const valid_config_var = {
82
- agents: {
83
- "momus-1": { model: "openai/gpt-5.2" },
84
- "momus-2": { model: "anthropic/claude-opus-4" },
85
- },
86
- };
87
-
88
- const result_var = ParallelAgentConfigSchema.safeParse(valid_config_var);
89
- expect(result_var.success).toBe(true);
90
- });
91
-
92
- test("복잡한 agents 설정을 파싱한다", () => {
93
- const valid_config_var = {
94
- agents: {
95
- "momus-1": {
96
- model: "openai/gpt-5.2",
97
- temperature: 0.5,
98
- },
99
- "momus-2": {
100
- model: "anthropic/claude-opus-4",
101
- variant: "extended",
102
- prompt_append: "비판적으로 검토하세요",
103
- },
104
- "momus-3": {
105
- temperature: 1.2,
106
- },
107
- },
108
- };
109
-
110
- const result_var = ParallelAgentConfigSchema.safeParse(valid_config_var);
111
- expect(result_var.success).toBe(true);
112
- });
113
-
114
- test("빈 agents 객체를 파싱한다", () => {
115
- const valid_config_var = {
116
- agents: {},
117
- };
118
-
119
- const result_var = ParallelAgentConfigSchema.safeParse(valid_config_var);
120
- expect(result_var.success).toBe(true);
121
- });
122
-
123
- test("잘못된 temperature를 가진 agent를 거부한다", () => {
124
- const invalid_config_var = {
125
- agents: {
126
- "momus-1": { temperature: 3.0 },
127
- },
128
- };
129
-
130
- const result_var = ParallelAgentConfigSchema.safeParse(invalid_config_var);
131
- expect(result_var.success).toBe(false);
132
- });
133
-
134
- test("agents 필드가 없으면 거부한다", () => {
135
- const invalid_config_var = {};
136
-
137
- const result_var = ParallelAgentConfigSchema.safeParse(invalid_config_var);
138
- expect(result_var.success).toBe(false);
139
- });
140
-
141
- test("agents가 객체가 아니면 거부한다", () => {
142
- const invalid_config_var = {
143
- agents: "not-an-object",
144
- };
145
-
146
- const result_var = ParallelAgentConfigSchema.safeParse(invalid_config_var);
147
- expect(result_var.success).toBe(false);
148
- });
149
- });
@@ -1,16 +0,0 @@
1
- import { expect, test, describe } from "bun:test";
2
-
3
- describe("프로젝트 초기 설정 검증", () => {
4
- test("테스트 인프라가 정상적으로 동작한다", () => {
5
- const is_setup_successful_var = true;
6
- expect(is_setup_successful_var).toBe(true);
7
- });
8
-
9
- test("필수 의존성 라이브러리가 로드 가능하다", async () => {
10
- const { z } = await import("zod");
11
- expect(z).toBeDefined();
12
-
13
- const sdk_var = await import("@opencode-ai/sdk");
14
- expect(sdk_var).toBeDefined();
15
- });
16
- });
package/bun.lock DELETED
@@ -1,29 +0,0 @@
1
- {
2
- "lockfileVersion": 1,
3
- "workspaces": {
4
- "": {
5
- "name": "oh-my-parallel-agent-opencode",
6
- "dependencies": {
7
- "@opencode-ai/sdk": "^1.1.19",
8
- "zod": "^3.24.1",
9
- },
10
- "devDependencies": {
11
- "bun-types": "latest",
12
- "typescript": "^5.7.3",
13
- },
14
- },
15
- },
16
- "packages": {
17
- "@opencode-ai/sdk": ["@opencode-ai/sdk@1.1.48", "", {}, "sha512-j5/79X45fUPWVD2Ffm/qvwLclDCdPeV+TYMDrm9to0p4pmzhmeKevCsyiRdLg0o0HE3AFRUnOo2rdO9NetN79A=="],
18
-
19
- "@types/node": ["@types/node@25.2.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w=="],
20
-
21
- "bun-types": ["bun-types@1.3.8", "", { "dependencies": { "@types/node": "*" } }, "sha512-fL99nxdOWvV4LqjmC+8Q9kW3M4QTtTR1eePs94v5ctGqU8OeceWrSUaRw3JYb7tU3FkMIAjkueehrHPPPGKi5Q=="],
22
-
23
- "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
24
-
25
- "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
26
-
27
- "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
28
- }
29
- }
@@ -1,7 +0,0 @@
1
- {
2
- "agents": {
3
- "momus-1": { "model": "openai/gpt-5.2" },
4
- "momus-2": { "model": "anthropic/claude-opus-4" },
5
- "librarian-1": { "model": "google/gemini-3-pro" }
6
- }
7
- }
@@ -1,117 +0,0 @@
1
- import type { AgentConfig } from "@opencode-ai/sdk"
2
- import type { AgentMode, AgentPromptMetadata } from "./types"
3
-
4
- const MODE: AgentMode = "subagent"
5
-
6
- export const EXPLORE_PROMPT_METADATA: AgentPromptMetadata = {
7
- category: "exploration",
8
- cost: "FREE",
9
- promptAlias: "Explore",
10
- keyTrigger: "2+ modules involved → fire `explore` background",
11
- triggers: [
12
- { domain: "Explore", trigger: "Find existing codebase structure, patterns and styles" },
13
- ],
14
- useWhen: [
15
- "Multiple search angles needed",
16
- "Unfamiliar module structure",
17
- "Cross-layer pattern discovery",
18
- ],
19
- avoidWhen: [
20
- "You know exactly what to search",
21
- "Single keyword/pattern suffices",
22
- "Known file location",
23
- ],
24
- }
25
-
26
- export function createExploreAgent(model_var: string): AgentConfig {
27
- return {
28
- description:
29
- 'Contextual grep for codebases. Answers "Where is X?", "Which file has Y?", "Find the code that does Z". Fire multiple in parallel for broad searches. Specify thoroughness: "quick" for basic, "medium" for moderate, "very thorough" for comprehensive analysis. (Explore - OhMyOpenCode)',
30
- mode: MODE,
31
- model: model_var,
32
- temperature: 0.1,
33
- permission: {
34
- "edit": "deny",
35
- },
36
- prompt: `You are a codebase search specialist. Your job: find files and code, return actionable results.
37
-
38
- ## Your Mission
39
-
40
- Answer questions like:
41
- - "Where is X implemented?"
42
- - "Which files contain Y?"
43
- - "Find the code that does Z"
44
-
45
- ## CRITICAL: What You Must Deliver
46
-
47
- Every response MUST include:
48
-
49
- ### 1. Intent Analysis (Required)
50
- Before ANY search, wrap your analysis in <analysis> tags:
51
-
52
- <analysis>
53
- **Literal Request**: [What they literally asked]
54
- **Actual Need**: [What they're really trying to accomplish]
55
- **Success Looks Like**: [What result would let them proceed immediately]
56
- </analysis>
57
-
58
- ### 2. Parallel Execution (Required)
59
- Launch **3+ tools simultaneously** in your first action. Never sequential unless output depends on prior result.
60
-
61
- ### 3. Structured Results (Required)
62
- Always end with this exact format:
63
-
64
- <results>
65
- <files>
66
- - /absolute/path/to/file1.ts — [why this file is relevant]
67
- - /absolute/path/to/file2.ts — [why this file is relevant]
68
- </files>
69
-
70
- <answer>
71
- [Direct answer to their actual need, not just file list]
72
- [If they asked "where is auth?", explain the auth flow you found]
73
- </answer>
74
-
75
- <next_steps>
76
- [What they should do with this information]
77
- [Or: "Ready to proceed - no follow-up needed"]
78
- </next_steps>
79
- </results>
80
-
81
- ## Success Criteria
82
-
83
- | Criterion | Requirement |
84
- |-----------|-------------|
85
- | **Paths** | ALL paths must be **absolute** (start with /) |
86
- | **Completeness** | Find ALL relevant matches, not just the first one |
87
- | **Actionability** | Caller can proceed **without asking follow-up questions** |
88
- | **Intent** | Address their **actual need**, not just literal request |
89
-
90
- ## Failure Conditions
91
-
92
- Your response has **FAILED** if:
93
- - Any path is relative (not absolute)
94
- - You missed obvious matches in the codebase
95
- - Caller needs to ask "but where exactly?" or "what about X?"
96
- - You only answered the literal question, not the underlying need
97
- - No <results> block with structured output
98
-
99
- ## Constraints
100
-
101
- - **Read-only**: You cannot create, modify, or delete files
102
- - **No emojis**: Keep output clean and parseable
103
- - **No file creation**: Report findings as message text, never write files
104
-
105
- ## Tool Strategy
106
-
107
- Use the right tool for the job:
108
- - **Semantic search** (definitions, references): LSP tools
109
- - **Structural patterns** (function shapes, class structures): ast_grep_search
110
- - **Text patterns** (strings, comments, logs): grep
111
- - **File patterns** (find by name/extension): glob
112
- - **History/evolution** (when added, who changed): git commands
113
-
114
- Flood with parallel calls. Cross-validate findings across multiple tools.`,
115
- }
116
- }
117
- createExploreAgent.mode = MODE