oh-my-parallel-agent-opencode 0.1.0 → 0.2.0
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.
- package/LICENSE.md +82 -0
- package/README.ja.md +392 -0
- package/README.ko.md +397 -0
- package/README.md +375 -56
- package/README.zh-cn.md +402 -0
- package/bin/oh-my-parallel-agent-opencode.js +80 -0
- package/bin/platform.js +38 -0
- package/bin/platform.test.ts +148 -0
- package/dist/agents/atlas.d.ts +22 -0
- package/dist/agents/dynamic-agent-prompt-builder.d.ts +30 -0
- package/dist/agents/explore.d.ts +7 -0
- package/dist/agents/hephaestus.d.ts +6 -0
- package/dist/agents/index.d.ts +12 -0
- package/dist/agents/librarian.d.ts +7 -0
- package/dist/agents/metis.d.ts +21 -0
- package/dist/agents/momus.d.ts +21 -0
- package/dist/agents/momus.test.d.ts +1 -0
- package/dist/agents/multimodal-looker.d.ts +7 -0
- package/dist/agents/oracle.d.ts +7 -0
- package/dist/agents/prometheus/behavioral-summary.d.ts +6 -0
- package/dist/agents/prometheus/high-accuracy-mode.d.ts +6 -0
- package/dist/agents/prometheus/identity-constraints.d.ts +7 -0
- package/dist/agents/prometheus/index.d.ts +39 -0
- package/dist/agents/prometheus/interview-mode.d.ts +7 -0
- package/dist/agents/prometheus/plan-generation.d.ts +7 -0
- package/dist/agents/prometheus/plan-template.d.ts +7 -0
- package/dist/agents/prometheus-prompt.test.d.ts +1 -0
- package/dist/agents/sisyphus-junior.d.ts +10 -0
- package/dist/agents/sisyphus-junior.test.d.ts +1 -0
- package/dist/agents/sisyphus.d.ts +8 -0
- package/dist/agents/types.d.ts +63 -0
- package/dist/agents/utils.d.ts +16 -0
- package/dist/agents/utils.test.d.ts +1 -0
- package/dist/cli/config-manager.d.ts +162 -0
- package/dist/cli/config-manager.test.d.ts +1 -0
- package/dist/cli/doctor/checks/auth.d.ts +7 -0
- package/dist/cli/doctor/checks/auth.test.d.ts +1 -0
- package/dist/cli/doctor/checks/config.d.ts +8 -0
- package/dist/cli/doctor/checks/config.test.d.ts +1 -0
- package/dist/cli/doctor/checks/dependencies.d.ts +8 -0
- package/dist/cli/doctor/checks/dependencies.test.d.ts +1 -0
- package/dist/cli/doctor/checks/gh.d.ts +13 -0
- package/dist/cli/doctor/checks/gh.test.d.ts +1 -0
- package/dist/cli/doctor/checks/index.d.ts +13 -0
- package/dist/cli/doctor/checks/lsp.d.ts +8 -0
- package/dist/cli/doctor/checks/lsp.test.d.ts +1 -0
- package/dist/cli/doctor/checks/mcp-oauth.d.ts +15 -0
- package/dist/cli/doctor/checks/mcp-oauth.test.d.ts +1 -0
- package/dist/cli/doctor/checks/mcp.d.ts +6 -0
- package/dist/cli/doctor/checks/mcp.test.d.ts +1 -0
- package/dist/cli/doctor/checks/model-resolution.d.ts +33 -0
- package/dist/cli/doctor/checks/model-resolution.test.d.ts +1 -0
- package/dist/cli/doctor/checks/opencode.d.ts +19 -0
- package/dist/cli/doctor/checks/opencode.test.d.ts +1 -0
- package/dist/cli/doctor/checks/plugin.d.ts +4 -0
- package/dist/cli/doctor/checks/plugin.test.d.ts +1 -0
- package/dist/cli/doctor/checks/version.d.ts +4 -0
- package/dist/cli/doctor/checks/version.test.d.ts +1 -0
- package/dist/cli/doctor/constants.d.ts +42 -0
- package/dist/cli/doctor/formatter.d.ts +12 -0
- package/dist/cli/doctor/formatter.test.d.ts +1 -0
- package/dist/cli/doctor/index.d.ts +5 -0
- package/dist/cli/doctor/runner.d.ts +7 -0
- package/dist/cli/doctor/runner.test.d.ts +1 -0
- package/dist/cli/doctor/types.d.ts +91 -0
- package/dist/cli/get-local-version/formatter.d.ts +3 -0
- package/dist/cli/get-local-version/index.d.ts +3 -0
- package/dist/cli/get-local-version/types.d.ts +13 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +26903 -0
- package/dist/cli/index.test.d.ts +1 -0
- package/dist/cli/install.d.ts +2 -0
- package/dist/cli/install.test.d.ts +1 -0
- package/dist/cli/mcp-oauth/index.d.ts +6 -0
- package/dist/cli/mcp-oauth/index.test.d.ts +1 -0
- package/dist/cli/mcp-oauth/login.d.ts +6 -0
- package/dist/cli/mcp-oauth/login.test.d.ts +1 -0
- package/dist/cli/mcp-oauth/logout.d.ts +4 -0
- package/dist/cli/mcp-oauth/logout.test.d.ts +1 -0
- package/dist/cli/mcp-oauth/status.d.ts +1 -0
- package/dist/cli/mcp-oauth/status.test.d.ts +1 -0
- package/dist/cli/model-fallback.d.ts +18 -0
- package/dist/cli/model-fallback.test.d.ts +1 -0
- package/dist/cli/run/completion.d.ts +2 -0
- package/dist/cli/run/completion.test.d.ts +1 -0
- package/dist/cli/run/events.d.ts +14 -0
- package/dist/cli/run/events.test.d.ts +1 -0
- package/dist/cli/run/index.d.ts +2 -0
- package/dist/cli/run/runner.d.ts +2 -0
- package/dist/cli/run/types.d.ts +73 -0
- package/dist/cli/types.d.ts +39 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/schema.d.ts +2651 -0
- package/dist/config/schema.test.d.ts +1 -0
- package/dist/features/background-agent/concurrency.d.ts +27 -0
- package/dist/features/background-agent/concurrency.test.d.ts +1 -0
- package/dist/features/background-agent/constants.d.ts +44 -0
- package/dist/features/background-agent/index.d.ts +4 -0
- package/dist/features/background-agent/manager.d.ts +118 -0
- package/dist/features/background-agent/manager.test.d.ts +1 -0
- package/dist/features/background-agent/result-handler.d.ts +15 -0
- package/dist/features/background-agent/spawner.d.ts +14 -0
- package/dist/features/background-agent/state.d.ts +35 -0
- package/dist/features/background-agent/types.d.ts +79 -0
- package/dist/features/boulder-state/constants.d.ts +10 -0
- package/dist/features/boulder-state/index.d.ts +3 -0
- package/dist/features/boulder-state/storage.d.ts +28 -0
- package/dist/features/boulder-state/storage.test.d.ts +1 -0
- package/dist/features/boulder-state/types.d.ts +24 -0
- package/dist/features/builtin-commands/commands.d.ts +2 -0
- package/dist/features/builtin-commands/index.d.ts +2 -0
- package/dist/features/builtin-commands/templates/init-deep.d.ts +1 -0
- package/dist/features/builtin-commands/templates/ralph-loop.d.ts +2 -0
- package/dist/features/builtin-commands/templates/refactor.d.ts +1 -0
- package/dist/features/builtin-commands/templates/start-work.d.ts +1 -0
- package/dist/features/builtin-commands/templates/stop-continuation.d.ts +1 -0
- package/dist/features/builtin-commands/templates/stop-continuation.test.d.ts +1 -0
- package/dist/features/builtin-commands/types.d.ts +6 -0
- package/dist/features/builtin-skills/index.d.ts +2 -0
- package/dist/features/builtin-skills/skills/dev-browser.d.ts +2 -0
- package/dist/features/builtin-skills/skills/frontend-ui-ux.d.ts +2 -0
- package/dist/features/builtin-skills/skills/git-master.d.ts +2 -0
- package/dist/features/builtin-skills/skills/index.d.ts +4 -0
- package/dist/features/builtin-skills/skills/playwright.d.ts +3 -0
- package/dist/features/builtin-skills/skills.d.ts +6 -0
- package/dist/features/builtin-skills/skills.test.d.ts +1 -0
- package/dist/features/builtin-skills/types.d.ts +15 -0
- package/dist/features/claude-code-agent-loader/index.d.ts +2 -0
- package/dist/features/claude-code-agent-loader/loader.d.ts +3 -0
- package/dist/features/claude-code-agent-loader/types.d.ts +14 -0
- package/dist/features/claude-code-command-loader/index.d.ts +2 -0
- package/dist/features/claude-code-command-loader/loader.d.ts +6 -0
- package/dist/features/claude-code-command-loader/types.d.ts +42 -0
- package/dist/features/claude-code-mcp-loader/env-expander.d.ts +2 -0
- package/dist/features/claude-code-mcp-loader/index.d.ts +10 -0
- package/dist/features/claude-code-mcp-loader/loader.d.ts +4 -0
- package/dist/features/claude-code-mcp-loader/loader.test.d.ts +1 -0
- package/dist/features/claude-code-mcp-loader/transformer.d.ts +2 -0
- package/dist/features/claude-code-mcp-loader/types.d.ts +39 -0
- package/dist/features/claude-code-plugin-loader/index.d.ts +3 -0
- package/dist/features/claude-code-plugin-loader/loader.d.ts +20 -0
- package/dist/features/claude-code-plugin-loader/types.d.ts +186 -0
- package/dist/features/claude-code-session-state/index.d.ts +1 -0
- package/dist/features/claude-code-session-state/state.d.ts +9 -0
- package/dist/features/claude-code-session-state/state.test.d.ts +1 -0
- package/dist/features/context-injector/collector.d.ts +11 -0
- package/dist/features/context-injector/collector.test.d.ts +1 -0
- package/dist/features/context-injector/index.d.ts +3 -0
- package/dist/features/context-injector/injector.d.ts +39 -0
- package/dist/features/context-injector/injector.test.d.ts +1 -0
- package/dist/features/context-injector/types.d.ts +83 -0
- package/dist/features/hook-message-injector/constants.d.ts +3 -0
- package/dist/features/hook-message-injector/index.d.ts +4 -0
- package/dist/features/hook-message-injector/injector.d.ts +19 -0
- package/dist/features/hook-message-injector/types.d.ts +46 -0
- package/dist/features/mcp-oauth/callback-server.d.ts +11 -0
- package/dist/features/mcp-oauth/callback-server.test.d.ts +1 -0
- package/dist/features/mcp-oauth/dcr.d.ts +34 -0
- package/dist/features/mcp-oauth/dcr.test.d.ts +1 -0
- package/dist/features/mcp-oauth/discovery.d.ts +8 -0
- package/dist/features/mcp-oauth/discovery.test.d.ts +1 -0
- package/dist/features/mcp-oauth/index.d.ts +1 -0
- package/dist/features/mcp-oauth/provider.d.ts +41 -0
- package/dist/features/mcp-oauth/provider.test.d.ts +1 -0
- package/dist/features/mcp-oauth/resource-indicator.d.ts +2 -0
- package/dist/features/mcp-oauth/resource-indicator.test.d.ts +1 -0
- package/dist/features/mcp-oauth/schema.d.ts +6 -0
- package/dist/features/mcp-oauth/schema.test.d.ts +1 -0
- package/dist/features/mcp-oauth/step-up.d.ts +8 -0
- package/dist/features/mcp-oauth/step-up.test.d.ts +1 -0
- package/dist/features/mcp-oauth/storage.d.ts +17 -0
- package/dist/features/mcp-oauth/storage.test.d.ts +1 -0
- package/dist/features/opencode-skill-loader/async-loader.d.ts +6 -0
- package/dist/features/opencode-skill-loader/async-loader.test.d.ts +1 -0
- package/dist/features/opencode-skill-loader/blocking.d.ts +2 -0
- package/dist/features/opencode-skill-loader/blocking.test.d.ts +1 -0
- package/dist/features/opencode-skill-loader/discover-worker.d.ts +1 -0
- package/dist/features/opencode-skill-loader/index.d.ts +4 -0
- package/dist/features/opencode-skill-loader/loader.d.ts +16 -0
- package/dist/features/opencode-skill-loader/loader.test.d.ts +1 -0
- package/dist/features/opencode-skill-loader/merger.d.ts +7 -0
- package/dist/features/opencode-skill-loader/skill-content.d.ts +21 -0
- package/dist/features/opencode-skill-loader/skill-content.test.d.ts +1 -0
- package/dist/features/opencode-skill-loader/types.d.ts +34 -0
- package/dist/features/sisyphus-swarm/mailbox/types.d.ts +191 -0
- package/dist/features/sisyphus-swarm/mailbox/types.test.d.ts +1 -0
- package/dist/features/sisyphus-tasks/storage.d.ts +9 -0
- package/dist/features/sisyphus-tasks/storage.test.d.ts +1 -0
- package/dist/features/sisyphus-tasks/types.d.ts +47 -0
- package/dist/features/sisyphus-tasks/types.test.d.ts +1 -0
- package/dist/features/skill-mcp-manager/env-cleaner.d.ts +2 -0
- package/dist/features/skill-mcp-manager/env-cleaner.test.d.ts +1 -0
- package/dist/features/skill-mcp-manager/index.d.ts +2 -0
- package/dist/features/skill-mcp-manager/manager.d.ts +50 -0
- package/dist/features/skill-mcp-manager/manager.test.d.ts +1 -0
- package/dist/features/skill-mcp-manager/types.d.ts +11 -0
- package/dist/features/task-toast-manager/index.d.ts +2 -0
- package/dist/features/task-toast-manager/manager.d.ts +58 -0
- package/dist/features/task-toast-manager/manager.test.d.ts +1 -0
- package/dist/features/task-toast-manager/types.d.ts +24 -0
- package/dist/features/tmux-subagent/action-executor.d.ts +22 -0
- package/dist/features/tmux-subagent/decision-engine.d.ts +38 -0
- package/dist/features/tmux-subagent/decision-engine.test.d.ts +1 -0
- package/dist/features/tmux-subagent/index.d.ts +5 -0
- package/dist/features/tmux-subagent/manager.d.ts +59 -0
- package/dist/features/tmux-subagent/manager.test.d.ts +1 -0
- package/dist/features/tmux-subagent/pane-state-querier.d.ts +2 -0
- package/dist/features/tmux-subagent/types.d.ts +53 -0
- package/dist/hooks/agent-usage-reminder/constants.d.ts +5 -0
- package/dist/hooks/agent-usage-reminder/index.d.ts +22 -0
- package/dist/hooks/agent-usage-reminder/storage.d.ts +4 -0
- package/dist/hooks/agent-usage-reminder/types.d.ts +6 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/executor.d.ts +4 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/executor.test.d.ts +1 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/index.d.ts +16 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/parser.d.ts +2 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/pruning-deduplication.d.ts +7 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/pruning-deduplication.test.d.ts +1 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/pruning-types.d.ts +36 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/storage.d.ts +28 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/storage.test.d.ts +1 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/types.d.ts +37 -0
- package/dist/hooks/atlas/index.d.ts +35 -0
- package/dist/hooks/atlas/index.test.d.ts +1 -0
- package/dist/hooks/auto-slash-command/constants.d.ts +5 -0
- package/dist/hooks/auto-slash-command/detector.d.ts +9 -0
- package/dist/hooks/auto-slash-command/detector.test.d.ts +1 -0
- package/dist/hooks/auto-slash-command/executor.d.ts +11 -0
- package/dist/hooks/auto-slash-command/index.d.ts +12 -0
- package/dist/hooks/auto-slash-command/index.test.d.ts +1 -0
- package/dist/hooks/auto-slash-command/types.d.ts +27 -0
- package/dist/hooks/auto-update-checker/cache.d.ts +3 -0
- package/dist/hooks/auto-update-checker/checker.d.ts +20 -0
- package/dist/hooks/auto-update-checker/checker.test.d.ts +1 -0
- package/dist/hooks/auto-update-checker/constants.d.ts +10 -0
- package/dist/hooks/auto-update-checker/index.d.ts +17 -0
- package/dist/hooks/auto-update-checker/index.test.d.ts +1 -0
- package/dist/hooks/auto-update-checker/types.d.ts +25 -0
- package/dist/hooks/background-notification/index.d.ts +18 -0
- package/dist/hooks/background-notification/types.d.ts +4 -0
- package/dist/hooks/category-skill-reminder/index.d.ts +22 -0
- package/dist/hooks/category-skill-reminder/index.test.d.ts +1 -0
- package/dist/hooks/claude-code-hooks/config-loader.d.ts +13 -0
- package/dist/hooks/claude-code-hooks/config.d.ts +3 -0
- package/dist/hooks/claude-code-hooks/index.d.ts +48 -0
- package/dist/hooks/claude-code-hooks/plugin-config.d.ts +8 -0
- package/dist/hooks/claude-code-hooks/post-tool-use.d.ts +40 -0
- package/dist/hooks/claude-code-hooks/pre-compact.d.ts +16 -0
- package/dist/hooks/claude-code-hooks/pre-tool-use.d.ts +25 -0
- package/dist/hooks/claude-code-hooks/stop.d.ts +20 -0
- package/dist/hooks/claude-code-hooks/todo.d.ts +12 -0
- package/dist/hooks/claude-code-hooks/tool-input-cache.d.ts +5 -0
- package/dist/hooks/claude-code-hooks/transcript.d.ts +34 -0
- package/dist/hooks/claude-code-hooks/types.d.ts +183 -0
- package/dist/hooks/claude-code-hooks/user-prompt-submit.d.ts +22 -0
- package/dist/hooks/comment-checker/cli.d.ts +52 -0
- package/dist/hooks/comment-checker/cli.test.d.ts +1 -0
- package/dist/hooks/comment-checker/downloader.d.ts +25 -0
- package/dist/hooks/comment-checker/index.d.ts +19 -0
- package/dist/hooks/comment-checker/types.d.ts +31 -0
- package/dist/hooks/compaction-context-injector/index.d.ts +8 -0
- package/dist/hooks/compaction-context-injector/index.test.d.ts +1 -0
- package/dist/hooks/context-window-monitor.d.ts +18 -0
- package/dist/hooks/delegate-task-retry/index.d.ts +24 -0
- package/dist/hooks/delegate-task-retry/index.test.d.ts +1 -0
- package/dist/hooks/directory-agents-injector/constants.d.ts +3 -0
- package/dist/hooks/directory-agents-injector/index.d.ts +26 -0
- package/dist/hooks/directory-agents-injector/storage.d.ts +1 -0
- package/dist/hooks/directory-readme-injector/constants.d.ts +3 -0
- package/dist/hooks/directory-readme-injector/index.d.ts +26 -0
- package/dist/hooks/directory-readme-injector/storage.d.ts +1 -0
- package/dist/hooks/edit-error-recovery/index.d.ts +31 -0
- package/dist/hooks/edit-error-recovery/index.test.d.ts +1 -0
- package/dist/hooks/empty-task-response-detector.d.ts +12 -0
- package/dist/hooks/index.d.ts +35 -0
- package/dist/hooks/interactive-bash-session/constants.d.ts +4 -0
- package/dist/hooks/interactive-bash-session/index.d.ts +23 -0
- package/dist/hooks/interactive-bash-session/storage.d.ts +4 -0
- package/dist/hooks/interactive-bash-session/types.d.ts +10 -0
- package/dist/hooks/keyword-detector/analyze/default.d.ts +12 -0
- package/dist/hooks/keyword-detector/analyze/index.d.ts +1 -0
- package/dist/hooks/keyword-detector/constants.d.ts +10 -0
- package/dist/hooks/keyword-detector/detector.d.ts +11 -0
- package/dist/hooks/keyword-detector/index.d.ts +23 -0
- package/dist/hooks/keyword-detector/index.test.d.ts +1 -0
- package/dist/hooks/keyword-detector/search/default.d.ts +12 -0
- package/dist/hooks/keyword-detector/search/index.d.ts +1 -0
- package/dist/hooks/keyword-detector/types.d.ts +4 -0
- package/dist/hooks/keyword-detector/ultrawork/default.d.ts +10 -0
- package/dist/hooks/keyword-detector/ultrawork/gpt5.2.d.ts +16 -0
- package/dist/hooks/keyword-detector/ultrawork/index.d.ts +17 -0
- package/dist/hooks/keyword-detector/ultrawork/planner.d.ts +6 -0
- package/dist/hooks/keyword-detector/ultrawork/utils.d.ts +24 -0
- package/dist/hooks/non-interactive-env/constants.d.ts +34 -0
- package/dist/hooks/non-interactive-env/detector.d.ts +1 -0
- package/dist/hooks/non-interactive-env/index.d.ts +14 -0
- package/dist/hooks/non-interactive-env/index.test.d.ts +1 -0
- package/dist/hooks/non-interactive-env/types.d.ts +3 -0
- package/dist/hooks/prometheus-md-only/constants.d.ts +7 -0
- package/dist/hooks/prometheus-md-only/index.d.ts +12 -0
- package/dist/hooks/prometheus-md-only/index.test.d.ts +1 -0
- package/dist/hooks/question-label-truncator/index.d.ts +7 -0
- package/dist/hooks/question-label-truncator/index.test.d.ts +1 -0
- package/dist/hooks/ralph-loop/constants.d.ts +5 -0
- package/dist/hooks/ralph-loop/index.d.ts +21 -0
- package/dist/hooks/ralph-loop/index.test.d.ts +1 -0
- package/dist/hooks/ralph-loop/storage.d.ts +6 -0
- package/dist/hooks/ralph-loop/types.d.ts +17 -0
- package/dist/hooks/rules-injector/constants.d.ts +8 -0
- package/dist/hooks/rules-injector/finder.d.ts +33 -0
- package/dist/hooks/rules-injector/finder.test.d.ts +1 -0
- package/dist/hooks/rules-injector/index.d.ts +26 -0
- package/dist/hooks/rules-injector/matcher.d.ts +21 -0
- package/dist/hooks/rules-injector/output-path.d.ts +5 -0
- package/dist/hooks/rules-injector/output-path.test.d.ts +1 -0
- package/dist/hooks/rules-injector/parser.d.ts +18 -0
- package/dist/hooks/rules-injector/parser.test.d.ts +1 -0
- package/dist/hooks/rules-injector/storage.d.ts +9 -0
- package/dist/hooks/rules-injector/types.d.ts +54 -0
- package/dist/hooks/session-notification-utils.d.ts +9 -0
- package/dist/hooks/session-notification.d.ts +20 -0
- package/dist/hooks/session-notification.test.d.ts +1 -0
- package/dist/hooks/session-recovery/constants.d.ts +6 -0
- package/dist/hooks/session-recovery/index.d.ts +22 -0
- package/dist/hooks/session-recovery/index.test.d.ts +1 -0
- package/dist/hooks/session-recovery/storage.d.ts +19 -0
- package/dist/hooks/session-recovery/types.d.ts +90 -0
- package/dist/hooks/sisyphus-junior-notepad/constants.d.ts +2 -0
- package/dist/hooks/sisyphus-junior-notepad/index.d.ts +12 -0
- package/dist/hooks/start-work/index.d.ts +16 -0
- package/dist/hooks/start-work/index.test.d.ts +1 -0
- package/dist/hooks/stop-continuation-guard/index.d.ts +16 -0
- package/dist/hooks/stop-continuation-guard/index.test.d.ts +1 -0
- package/dist/hooks/subagent-question-blocker/index.d.ts +2 -0
- package/dist/hooks/subagent-question-blocker/index.test.d.ts +1 -0
- package/dist/hooks/task-resume-info/index.d.ts +11 -0
- package/dist/hooks/think-mode/detector.d.ts +5 -0
- package/dist/hooks/think-mode/index.d.ts +14 -0
- package/dist/hooks/think-mode/index.test.d.ts +1 -0
- package/dist/hooks/think-mode/switcher.d.ts +69 -0
- package/dist/hooks/think-mode/switcher.test.d.ts +1 -0
- package/dist/hooks/think-mode/types.d.ts +21 -0
- package/dist/hooks/thinking-block-validator/index.d.ts +30 -0
- package/dist/hooks/todo-continuation-enforcer.d.ts +19 -0
- package/dist/hooks/todo-continuation-enforcer.test.d.ts +1 -0
- package/dist/hooks/tool-output-truncator.d.ts +17 -0
- package/dist/hooks/tool-output-truncator.test.d.ts +1 -0
- package/dist/hooks/unstable-agent-babysitter/index.d.ts +50 -0
- package/dist/hooks/unstable-agent-babysitter/index.test.d.ts +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +76117 -0
- package/dist/index.test.d.ts +1 -0
- package/dist/mcp/context7.d.ts +9 -0
- package/dist/mcp/grep-app.d.ts +6 -0
- package/dist/mcp/index.d.ts +9 -0
- package/dist/mcp/index.test.d.ts +1 -0
- package/dist/mcp/types.d.ts +9 -0
- package/dist/mcp/websearch.d.ts +9 -0
- package/dist/oh-my-parallel-agent-opencode.schema.json +2182 -0
- package/dist/plugin-config.d.ts +4 -0
- package/dist/plugin-config.test.d.ts +1 -0
- package/dist/plugin-handlers/config-handler.d.ts +13 -0
- package/dist/plugin-handlers/config-handler.test.d.ts +1 -0
- package/dist/plugin-handlers/index.d.ts +1 -0
- package/dist/plugin-state.d.ts +6 -0
- package/dist/shared/agent-config-integration.test.d.ts +1 -0
- package/dist/shared/agent-display-names.d.ts +12 -0
- package/dist/shared/agent-display-names.test.d.ts +1 -0
- package/dist/shared/agent-tool-restrictions.d.ts +7 -0
- package/dist/shared/agent-variant.d.ts +9 -0
- package/dist/shared/agent-variant.test.d.ts +1 -0
- package/dist/shared/binary-downloader.d.ts +10 -0
- package/dist/shared/claude-config-dir.d.ts +1 -0
- package/dist/shared/claude-config-dir.test.d.ts +1 -0
- package/dist/shared/command-executor.d.ts +21 -0
- package/dist/shared/config-errors.d.ts +7 -0
- package/dist/shared/connected-providers-cache.d.ts +52 -0
- package/dist/shared/data-path.d.ts +30 -0
- package/dist/shared/deep-merge.d.ts +13 -0
- package/dist/shared/deep-merge.test.d.ts +1 -0
- package/dist/shared/dynamic-truncator.d.ts +27 -0
- package/dist/shared/external-plugin-detector.d.ts +18 -0
- package/dist/shared/external-plugin-detector.test.d.ts +1 -0
- package/dist/shared/file-reference-resolver.d.ts +1 -0
- package/dist/shared/file-utils.d.ts +7 -0
- package/dist/shared/first-message-variant.d.ts +11 -0
- package/dist/shared/first-message-variant.test.d.ts +1 -0
- package/dist/shared/frontmatter.d.ts +7 -0
- package/dist/shared/frontmatter.test.d.ts +1 -0
- package/dist/shared/hook-disabled.d.ts +2 -0
- package/dist/shared/index.d.ts +36 -0
- package/dist/shared/jsonc-parser.d.ts +15 -0
- package/dist/shared/jsonc-parser.test.d.ts +1 -0
- package/dist/shared/logger.d.ts +2 -0
- package/dist/shared/migration.d.ts +32 -0
- package/dist/shared/migration.test.d.ts +1 -0
- package/dist/shared/model-availability.d.ts +19 -0
- package/dist/shared/model-availability.test.d.ts +1 -0
- package/dist/shared/model-requirements.d.ts +13 -0
- package/dist/shared/model-requirements.test.d.ts +1 -0
- package/dist/shared/model-resolution-pipeline.d.ts +24 -0
- package/dist/shared/model-resolver.d.ts +22 -0
- package/dist/shared/model-resolver.test.d.ts +1 -0
- package/dist/shared/model-sanitizer.d.ts +3 -0
- package/dist/shared/model-suggestion-retry.d.ts +24 -0
- package/dist/shared/model-suggestion-retry.test.d.ts +1 -0
- package/dist/shared/ollama-ndjson-parser.d.ts +108 -0
- package/dist/shared/opencode-config-dir.d.ts +19 -0
- package/dist/shared/opencode-config-dir.test.d.ts +1 -0
- package/dist/shared/opencode-version.d.ts +19 -0
- package/dist/shared/opencode-version.test.d.ts +1 -0
- package/dist/shared/pattern-matcher.d.ts +3 -0
- package/dist/shared/permission-compat.d.ts +27 -0
- package/dist/shared/permission-compat.test.d.ts +1 -0
- package/dist/shared/session-cursor.d.ts +13 -0
- package/dist/shared/session-cursor.test.d.ts +1 -0
- package/dist/shared/session-injected-paths.d.ts +10 -0
- package/dist/shared/session-utils.d.ts +2 -0
- package/dist/shared/shell-env.d.ts +41 -0
- package/dist/shared/shell-env.test.d.ts +1 -0
- package/dist/shared/snake-case.d.ts +5 -0
- package/dist/shared/system-directive.d.ts +45 -0
- package/dist/shared/system-directive.test.d.ts +1 -0
- package/dist/shared/tmux/constants.d.ts +5 -0
- package/dist/shared/tmux/index.d.ts +3 -0
- package/dist/shared/tmux/tmux-utils.d.ts +17 -0
- package/dist/shared/tmux/tmux-utils.test.d.ts +1 -0
- package/dist/shared/tmux/types.d.ts +4 -0
- package/dist/shared/tool-name.d.ts +1 -0
- package/dist/shared/zip-extractor.d.ts +1 -0
- package/dist/tools/ast-grep/cli.d.ts +15 -0
- package/dist/tools/ast-grep/constants.d.ts +29 -0
- package/dist/tools/ast-grep/downloader.d.ts +5 -0
- package/dist/tools/ast-grep/index.d.ts +8 -0
- package/dist/tools/ast-grep/tools.d.ts +3 -0
- package/dist/tools/ast-grep/types.d.ts +58 -0
- package/dist/tools/ast-grep/utils.d.ts +5 -0
- package/dist/tools/background-task/constants.d.ts +3 -0
- package/dist/tools/background-task/index.d.ts +4 -0
- package/dist/tools/background-task/tools.d.ts +47 -0
- package/dist/tools/background-task/tools.test.d.ts +1 -0
- package/dist/tools/background-task/types.d.ts +20 -0
- package/dist/tools/call-omo-agent/constants.d.ts +2 -0
- package/dist/tools/call-omo-agent/index.d.ts +3 -0
- package/dist/tools/call-omo-agent/tools.d.ts +3 -0
- package/dist/tools/call-omo-agent/types.d.ts +24 -0
- package/dist/tools/delegate-task/categories.d.ts +17 -0
- package/dist/tools/delegate-task/constants.d.ts +30 -0
- package/dist/tools/delegate-task/executor.d.ts +75 -0
- package/dist/tools/delegate-task/helpers.d.ts +30 -0
- package/dist/tools/delegate-task/index.d.ts +4 -0
- package/dist/tools/delegate-task/prompt-builder.d.ts +6 -0
- package/dist/tools/delegate-task/timing.d.ts +11 -0
- package/dist/tools/delegate-task/tools.d.ts +6 -0
- package/dist/tools/delegate-task/tools.test.d.ts +1 -0
- package/dist/tools/delegate-task/types.d.ts +44 -0
- package/dist/tools/glob/cli.d.ts +11 -0
- package/dist/tools/glob/cli.test.d.ts +1 -0
- package/dist/tools/glob/constants.d.ts +6 -0
- package/dist/tools/glob/index.d.ts +2 -0
- package/dist/tools/glob/tools.d.ts +2 -0
- package/dist/tools/glob/types.d.ts +20 -0
- package/dist/tools/glob/utils.d.ts +2 -0
- package/dist/tools/grep/cli.d.ts +3 -0
- package/dist/tools/grep/constants.d.ts +17 -0
- package/dist/tools/grep/downloader.d.ts +3 -0
- package/dist/tools/grep/downloader.test.d.ts +1 -0
- package/dist/tools/grep/index.d.ts +2 -0
- package/dist/tools/grep/tools.d.ts +2 -0
- package/dist/tools/grep/types.d.ts +36 -0
- package/dist/tools/grep/utils.d.ts +3 -0
- package/dist/tools/index.d.ts +15 -0
- package/dist/tools/interactive-bash/constants.d.ts +3 -0
- package/dist/tools/interactive-bash/index.d.ts +3 -0
- package/dist/tools/interactive-bash/tools.d.ts +7 -0
- package/dist/tools/interactive-bash/utils.d.ts +3 -0
- package/dist/tools/look-at/constants.d.ts +2 -0
- package/dist/tools/look-at/index.d.ts +3 -0
- package/dist/tools/look-at/tools.d.ts +9 -0
- package/dist/tools/look-at/tools.test.d.ts +1 -0
- package/dist/tools/look-at/types.d.ts +4 -0
- package/dist/tools/lsp/client.d.ts +50 -0
- package/dist/tools/lsp/config.d.ts +17 -0
- package/dist/tools/lsp/config.test.d.ts +1 -0
- package/dist/tools/lsp/constants.d.ts +9 -0
- package/dist/tools/lsp/index.d.ts +6 -0
- package/dist/tools/lsp/tools.d.ts +7 -0
- package/dist/tools/lsp/types.d.ts +123 -0
- package/dist/tools/lsp/utils.d.ts +26 -0
- package/dist/tools/session-manager/constants.d.ts +12 -0
- package/dist/tools/session-manager/index.d.ts +3 -0
- package/dist/tools/session-manager/storage.d.ts +12 -0
- package/dist/tools/session-manager/storage.test.d.ts +1 -0
- package/dist/tools/session-manager/tools.d.ts +5 -0
- package/dist/tools/session-manager/tools.test.d.ts +1 -0
- package/dist/tools/session-manager/types.d.ts +89 -0
- package/dist/tools/session-manager/utils.d.ts +11 -0
- package/dist/tools/session-manager/utils.test.d.ts +1 -0
- package/dist/tools/skill/constants.d.ts +3 -0
- package/dist/tools/skill/index.d.ts +3 -0
- package/dist/tools/skill/tools.d.ts +4 -0
- package/dist/tools/skill/tools.test.d.ts +1 -0
- package/dist/tools/skill/types.d.ts +28 -0
- package/dist/tools/skill-mcp/constants.d.ts +2 -0
- package/dist/tools/skill-mcp/index.d.ts +3 -0
- package/dist/tools/skill-mcp/tools.d.ts +11 -0
- package/dist/tools/skill-mcp/tools.test.d.ts +1 -0
- package/dist/tools/skill-mcp/types.d.ts +8 -0
- package/dist/tools/slashcommand/index.d.ts +2 -0
- package/dist/tools/slashcommand/tools.d.ts +5 -0
- package/dist/tools/slashcommand/tools.test.d.ts +1 -0
- package/dist/tools/slashcommand/types.d.ts +24 -0
- package/package.json +77 -6
- package/postinstall.mjs +43 -0
- package/__tests__/agents.test.ts +0 -107
- package/__tests__/config-handler.test.ts +0 -198
- package/__tests__/dynamic-agent.test.ts +0 -68
- package/__tests__/schema.test.ts +0 -149
- package/__tests__/setup.test.ts +0 -16
- package/bun.lock +0 -29
- package/oh-my-parallel-agent-opencode.example.json +0 -7
- package/src/agents/explore.ts +0 -117
- package/src/agents/index.ts +0 -69
- package/src/agents/librarian.ts +0 -302
- package/src/agents/metis.ts +0 -341
- package/src/agents/momus.ts +0 -237
- package/src/agents/types.ts +0 -95
- package/src/config/schema.ts +0 -15
- package/src/index.ts +0 -116
- package/src/plugin-handlers/config-handler.ts +0 -129
- package/src/utils/dynamic-agent.ts +0 -37
- package/tsconfig.json +0 -19
package/__tests__/agents.test.ts
DELETED
|
@@ -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
|
-
});
|
package/__tests__/schema.test.ts
DELETED
|
@@ -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
|
-
});
|
package/__tests__/setup.test.ts
DELETED
|
@@ -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
|
-
}
|
package/src/agents/explore.ts
DELETED
|
@@ -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
|