goatcode-sh 0.0.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +85 -0
- package/.github/workflows/release.yml +107 -0
- package/.opencode/plugins/goatcode.js +1 -0
- package/AGENTS.md +59 -0
- package/CONTRIBUTING.md +110 -0
- package/LICENSE +21 -0
- package/README.md +106 -12
- package/bun.lock +2081 -0
- package/bunfig.toml +3 -0
- package/dist/agents/advisor/config.d.ts +4 -0
- package/dist/agents/advisor/index.d.ts +2 -0
- package/dist/agents/advisor/plugin.d.ts +1 -0
- package/dist/agents/advisor/prompt-meta.d.ts +2 -0
- package/dist/agents/advisor/prompt.d.ts +1 -0
- package/dist/agents/agent-builder.d.ts +10 -0
- package/dist/agents/agent-registry.d.ts +8 -0
- package/dist/agents/builtin-agents.d.ts +2 -0
- package/dist/agents/deep-worker/config.d.ts +4 -0
- package/dist/agents/deep-worker/index.d.ts +2 -0
- package/dist/agents/deep-worker/plugin.d.ts +1 -0
- package/dist/agents/deep-worker/prompt-meta.d.ts +2 -0
- package/dist/agents/deep-worker/prompt.d.ts +1 -0
- package/dist/agents/explorer/config.d.ts +4 -0
- package/dist/agents/explorer/index.d.ts +2 -0
- package/dist/agents/explorer/plugin.d.ts +1 -0
- package/dist/agents/explorer/prompt-meta.d.ts +2 -0
- package/dist/agents/explorer/prompt.d.ts +1 -0
- package/dist/agents/fallback-chains.d.ts +2 -0
- package/dist/agents/index.d.ts +14 -0
- package/dist/agents/orchestrator/config.d.ts +4 -0
- package/dist/agents/orchestrator/index.d.ts +2 -0
- package/dist/agents/orchestrator/plugin.d.ts +1 -0
- package/dist/agents/orchestrator/prompt-meta.d.ts +2 -0
- package/dist/agents/orchestrator/prompt.d.ts +1 -0
- package/dist/agents/planner/config.d.ts +4 -0
- package/dist/agents/planner/index.d.ts +2 -0
- package/dist/agents/planner/plugin.d.ts +1 -0
- package/dist/agents/planner/prompt-meta.d.ts +2 -0
- package/dist/agents/planner/prompt.d.ts +1 -0
- package/dist/agents/prompt-meta.d.ts +11 -0
- package/dist/agents/prompt-registry.d.ts +4 -0
- package/dist/agents/researcher/config.d.ts +4 -0
- package/dist/agents/researcher/index.d.ts +2 -0
- package/dist/agents/researcher/plugin.d.ts +1 -0
- package/dist/agents/researcher/prompt-meta.d.ts +2 -0
- package/dist/agents/researcher/prompt.d.ts +1 -0
- package/dist/agents/tool-restrictions.d.ts +7 -0
- package/dist/agents/worker/config.d.ts +4 -0
- package/dist/agents/worker/index.d.ts +2 -0
- package/dist/agents/worker/plugin.d.ts +1 -0
- package/dist/agents/worker/prompt-meta.d.ts +2 -0
- package/dist/agents/worker/prompt.d.ts +1 -0
- package/dist/bootstrap.d.ts +3 -0
- package/dist/cli/cli.d.ts +3 -0
- package/dist/cli/commands/install.d.ts +12 -0
- package/dist/cli/commands/update.d.ts +1 -0
- package/dist/cli/config-generator.d.ts +26 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/define-config.d.ts +27 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/loader.d.ts +3 -0
- package/dist/config/paths.d.ts +4 -0
- package/dist/config/schema.d.ts +273 -0
- package/dist/config/validator.d.ts +9 -0
- package/dist/features/auto-update/index.d.ts +3 -0
- package/dist/features/auto-update/plugin.d.ts +2 -0
- package/dist/features/auto-update/update-checker.d.ts +7 -0
- package/dist/features/background-agent/concurrency.d.ts +10 -0
- package/dist/features/background-agent/index.d.ts +6 -0
- package/dist/features/background-agent/manager.d.ts +18 -0
- package/dist/features/background-agent/poller.d.ts +17 -0
- package/dist/features/background-agent/singleton.d.ts +7 -0
- package/dist/features/background-agent/spawner.d.ts +6 -0
- package/dist/features/background-agent/types.d.ts +18 -0
- package/dist/features/builtin-features.d.ts +2 -0
- package/dist/features/categories/category-config.d.ts +9 -0
- package/dist/features/categories/category-resolver.d.ts +6 -0
- package/dist/features/categories/index.d.ts +3 -0
- package/dist/features/categories/prompt-appends.d.ts +10 -0
- package/dist/features/loops/file-store.d.ts +22 -0
- package/dist/features/loops/handler.d.ts +9 -0
- package/dist/features/loops/index.d.ts +5 -0
- package/dist/features/loops/memory-store.d.ts +11 -0
- package/dist/features/loops/plugin.d.ts +34 -0
- package/dist/features/loops/shared/event-utils.d.ts +7 -0
- package/dist/features/loops/state.d.ts +22 -0
- package/dist/features/prompt-builder/agent-table-builder.d.ts +6 -0
- package/dist/features/prompt-builder/category-section-builder.d.ts +2 -0
- package/dist/features/prompt-builder/dynamic-prompt-builder.d.ts +9 -0
- package/dist/features/prompt-builder/index.d.ts +7 -0
- package/dist/features/prompt-builder/skill-section-builder.d.ts +5 -0
- package/dist/features/session-state/index.d.ts +5 -0
- package/dist/features/session-state/session-cursor.d.ts +13 -0
- package/dist/features/session-state/session-store.d.ts +12 -0
- package/dist/features/session-state/session-tools-store.d.ts +4 -0
- package/dist/features/skills/builtin/git-master.d.ts +2 -0
- package/dist/features/skills/index.d.ts +10 -0
- package/dist/features/skills/skill-loader.d.ts +22 -0
- package/dist/features/skills/skill-merger.d.ts +2 -0
- package/dist/features/slash-commands/command-registry.d.ts +3 -0
- package/dist/features/slash-commands/commands/cancel-loop.d.ts +2 -0
- package/dist/features/slash-commands/commands/handoff.d.ts +2 -0
- package/dist/features/slash-commands/commands/init-deep.d.ts +2 -0
- package/dist/features/slash-commands/commands/loop.d.ts +2 -0
- package/dist/features/slash-commands/commands/start-work.d.ts +2 -0
- package/dist/features/slash-commands/commands/stop-continuation.d.ts +2 -0
- package/dist/features/slash-commands/index.d.ts +2 -0
- package/dist/features/slash-commands/types.d.ts +5 -0
- package/dist/hooks/anthropic-effort/handler.d.ts +5 -0
- package/dist/hooks/anthropic-effort/index.d.ts +3 -0
- package/dist/hooks/anthropic-effort/plugin.d.ts +1 -0
- package/dist/hooks/builtin-hooks.d.ts +2 -0
- package/dist/hooks/comment-checker/handler.d.ts +5 -0
- package/dist/hooks/comment-checker/index.d.ts +2 -0
- package/dist/hooks/comment-checker/plugin.d.ts +1 -0
- package/dist/hooks/compaction-context/handler.d.ts +2 -0
- package/dist/hooks/compaction-context/index.d.ts +2 -0
- package/dist/hooks/compaction-context/plugin.d.ts +1 -0
- package/dist/hooks/compaction-todo-preserver/handler.d.ts +4 -0
- package/dist/hooks/compaction-todo-preserver/index.d.ts +2 -0
- package/dist/hooks/compaction-todo-preserver/plugin.d.ts +1 -0
- package/dist/hooks/context-injector/handlers/agents.d.ts +1 -0
- package/dist/hooks/context-injector/handlers/readme.d.ts +1 -0
- package/dist/hooks/context-injector/handlers/rules.d.ts +1 -0
- package/dist/hooks/context-injector/index.d.ts +4 -0
- package/dist/hooks/context-injector/plugin.d.ts +1 -0
- package/dist/hooks/context-window-limit/handler.d.ts +6 -0
- package/dist/hooks/context-window-limit/index.d.ts +2 -0
- package/dist/hooks/context-window-limit/plugin.d.ts +1 -0
- package/dist/hooks/delegate-retry/handler.d.ts +16 -0
- package/dist/hooks/delegate-retry/index.d.ts +3 -0
- package/dist/hooks/delegate-retry/plugin.d.ts +1 -0
- package/dist/hooks/edit-error/handler.d.ts +6 -0
- package/dist/hooks/edit-error/index.d.ts +2 -0
- package/dist/hooks/edit-error/plugin.d.ts +1 -0
- package/dist/hooks/empty-response-detector/handler.d.ts +5 -0
- package/dist/hooks/empty-response-detector/index.d.ts +2 -0
- package/dist/hooks/empty-response-detector/plugin.d.ts +1 -0
- package/dist/hooks/error-diagnostics/handler.d.ts +6 -0
- package/dist/hooks/error-diagnostics/patterns.d.ts +3 -0
- package/dist/hooks/error-diagnostics/plugin.d.ts +1 -0
- package/dist/hooks/error-diagnostics/types.d.ts +14 -0
- package/dist/hooks/foreground-fallback/handler.d.ts +22 -0
- package/dist/hooks/foreground-fallback/index.d.ts +2 -0
- package/dist/hooks/foreground-fallback/plugin.d.ts +1 -0
- package/dist/hooks/hashline-diff-enhancer/handler.d.ts +28 -0
- package/dist/hooks/hashline-diff-enhancer/index.d.ts +2 -0
- package/dist/hooks/hashline-diff-enhancer/plugin.d.ts +1 -0
- package/dist/hooks/hashline-read-enhancer/handler.d.ts +4 -0
- package/dist/hooks/hashline-read-enhancer/index.d.ts +2 -0
- package/dist/hooks/hashline-read-enhancer/plugin.d.ts +1 -0
- package/dist/hooks/hook-composer.d.ts +4 -0
- package/dist/hooks/hook-ordering.d.ts +9 -0
- package/dist/hooks/hook-types.d.ts +3 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/json-error/handler.d.ts +6 -0
- package/dist/hooks/json-error/index.d.ts +2 -0
- package/dist/hooks/json-error/plugin.d.ts +1 -0
- package/dist/hooks/keyword-detector/handler.d.ts +8 -0
- package/dist/hooks/keyword-detector/index.d.ts +3 -0
- package/dist/hooks/keyword-detector/plugin.d.ts +1 -0
- package/dist/hooks/model-fallback/handler.d.ts +21 -0
- package/dist/hooks/model-fallback/index.d.ts +2 -0
- package/dist/hooks/model-fallback/plugin.d.ts +1 -0
- package/dist/hooks/phase-reminder/handler.d.ts +5 -0
- package/dist/hooks/phase-reminder/index.d.ts +2 -0
- package/dist/hooks/phase-reminder/plugin.d.ts +1 -0
- package/dist/hooks/post-read-nudge/handler.d.ts +5 -0
- package/dist/hooks/post-read-nudge/index.d.ts +2 -0
- package/dist/hooks/post-read-nudge/plugin.d.ts +1 -0
- package/dist/hooks/preemptive-compaction/handler.d.ts +31 -0
- package/dist/hooks/preemptive-compaction/index.d.ts +2 -0
- package/dist/hooks/preemptive-compaction/plugin.d.ts +1 -0
- package/dist/hooks/runtime-fallback/handler.d.ts +21 -0
- package/dist/hooks/runtime-fallback/index.d.ts +2 -0
- package/dist/hooks/runtime-fallback/plugin.d.ts +1 -0
- package/dist/hooks/safe-hook-wrapper.d.ts +2 -0
- package/dist/hooks/session-recovery/handler.d.ts +6 -0
- package/dist/hooks/session-recovery/index.d.ts +2 -0
- package/dist/hooks/session-recovery/plugin.d.ts +1 -0
- package/dist/hooks/skill-discovery/plugin.d.ts +1 -0
- package/dist/hooks/stop-guard/handler.d.ts +4 -0
- package/dist/hooks/stop-guard/index.d.ts +2 -0
- package/dist/hooks/stop-guard/plugin.d.ts +1 -0
- package/dist/hooks/task-resume-info/handler.d.ts +4 -0
- package/dist/hooks/task-resume-info/index.d.ts +2 -0
- package/dist/hooks/task-resume-info/plugin.d.ts +1 -0
- package/dist/hooks/think-mode/handler.d.ts +4 -0
- package/dist/hooks/think-mode/index.d.ts +2 -0
- package/dist/hooks/think-mode/plugin.d.ts +1 -0
- package/dist/hooks/thinking-block-validator/handler.d.ts +4 -0
- package/dist/hooks/thinking-block-validator/index.d.ts +2 -0
- package/dist/hooks/thinking-block-validator/plugin.d.ts +1 -0
- package/dist/hooks/todo-enforcer/handler.d.ts +4 -0
- package/dist/hooks/todo-enforcer/index.d.ts +2 -0
- package/dist/hooks/todo-enforcer/plugin.d.ts +1 -0
- package/dist/hooks/todowrite-disabler/handler.d.ts +6 -0
- package/dist/hooks/todowrite-disabler/index.d.ts +2 -0
- package/dist/hooks/todowrite-disabler/plugin.d.ts +1 -0
- package/dist/hooks/tool-output-truncator/handler.d.ts +4 -0
- package/dist/hooks/tool-output-truncator/index.d.ts +2 -0
- package/dist/hooks/tool-output-truncator/plugin.d.ts +1 -0
- package/dist/hooks/write-file-guard/handler.d.ts +7 -0
- package/dist/hooks/write-file-guard/index.d.ts +2 -0
- package/dist/hooks/write-file-guard/plugin.d.ts +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +8547 -0
- package/dist/plugin/compositor.d.ts +9 -0
- package/dist/plugin/index.d.ts +1 -0
- package/dist/plugin-api/define-plugin.d.ts +33 -0
- package/dist/plugin-api/index.d.ts +3 -0
- package/dist/plugin-api/types.d.ts +10 -0
- package/dist/registry/agent-aggregator.d.ts +3 -0
- package/dist/registry/contribution-aggregator.d.ts +10 -0
- package/dist/registry/dependency-resolver.d.ts +3 -0
- package/dist/registry/hook-aggregator.d.ts +2 -0
- package/dist/registry/index.d.ts +6 -0
- package/dist/registry/plugin-registry.d.ts +16 -0
- package/dist/registry/tool-aggregator.d.ts +3 -0
- package/dist/registry/types.d.ts +9 -0
- package/dist/runtime/index.d.ts +7 -0
- package/dist/shared/data-path.d.ts +4 -0
- package/dist/shared/deep-merge.d.ts +13 -0
- package/dist/shared/fallback-chain.d.ts +1 -0
- package/dist/shared/index.d.ts +19 -0
- package/dist/shared/logger.d.ts +4 -0
- package/dist/shared/model-availability.d.ts +1 -0
- package/dist/shared/model-normalization.d.ts +6 -0
- package/dist/shared/model-prefix-map.d.ts +11 -0
- package/dist/shared/model-resolution-pipeline.d.ts +14 -0
- package/dist/shared/models-dev.d.ts +29 -0
- package/dist/shared/provider-discovery.d.ts +28 -0
- package/dist/shared/provider-registry.d.ts +16 -0
- package/dist/shared/safe-create-hook.d.ts +3 -0
- package/dist/shared/snake-case.d.ts +1 -0
- package/dist/shared/truncate-description.d.ts +1 -0
- package/dist/test-utils/index.d.ts +6 -0
- package/dist/test-utils/mock-agent-config.d.ts +5 -0
- package/dist/test-utils/mock-hook-inputs.d.ts +20 -0
- package/dist/test-utils/mock-hook-outputs.d.ts +20 -0
- package/dist/test-utils/mock-plugin-context.d.ts +6 -0
- package/dist/test-utils/mock-sdk-client.d.ts +41 -0
- package/dist/test-utils/mock-tool-context.d.ts +6 -0
- package/dist/tools/ast-grep/index.d.ts +4 -0
- package/dist/tools/ast-grep/replace/handler.d.ts +7 -0
- package/dist/tools/ast-grep/replace/plugin.d.ts +1 -0
- package/dist/tools/ast-grep/replace/types.d.ts +37 -0
- package/dist/tools/ast-grep/search/handler.d.ts +14 -0
- package/dist/tools/ast-grep/search/plugin.d.ts +1 -0
- package/dist/tools/ast-grep/search/types.d.ts +37 -0
- package/dist/tools/background-task/cancel/handler.d.ts +4 -0
- package/dist/tools/background-task/cancel/plugin.d.ts +2 -0
- package/dist/tools/background-task/cancel/types.d.ts +4 -0
- package/dist/tools/background-task/index.d.ts +2 -0
- package/dist/tools/background-task/output/handler.d.ts +3 -0
- package/dist/tools/background-task/output/plugin.d.ts +2 -0
- package/dist/tools/background-task/output/types.d.ts +11 -0
- package/dist/tools/bridge.d.ts +7 -0
- package/dist/tools/builtin-tools.d.ts +2 -0
- package/dist/tools/delegate-task/category-resolver.d.ts +4 -0
- package/dist/tools/delegate-task/constants.d.ts +3 -0
- package/dist/tools/delegate-task/executor.d.ts +10 -0
- package/dist/tools/delegate-task/handler.d.ts +3 -0
- package/dist/tools/delegate-task/index.d.ts +7 -0
- package/dist/tools/delegate-task/plugin.d.ts +2 -0
- package/dist/tools/delegate-task/types.d.ts +17 -0
- package/dist/tools/glob/handler.d.ts +7 -0
- package/dist/tools/glob/index.d.ts +2 -0
- package/dist/tools/glob/plugin.d.ts +1 -0
- package/dist/tools/glob/types.d.ts +7 -0
- package/dist/tools/grep/handler.d.ts +13 -0
- package/dist/tools/grep/index.d.ts +2 -0
- package/dist/tools/grep/plugin.d.ts +1 -0
- package/dist/tools/grep/types.d.ts +15 -0
- package/dist/tools/hashline-edit/constants.d.ts +4 -0
- package/dist/tools/hashline-edit/edit-operations.d.ts +4 -0
- package/dist/tools/hashline-edit/handler.d.ts +5 -0
- package/dist/tools/hashline-edit/hash-computation.d.ts +2 -0
- package/dist/tools/hashline-edit/index.d.ts +5 -0
- package/dist/tools/hashline-edit/plugin.d.ts +3 -0
- package/dist/tools/hashline-edit/types.d.ts +21 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/look-at/handler.d.ts +6 -0
- package/dist/tools/look-at/index.d.ts +3 -0
- package/dist/tools/look-at/plugin.d.ts +1 -0
- package/dist/tools/look-at/types.d.ts +9 -0
- package/dist/tools/lsp/client.d.ts +7 -0
- package/dist/tools/lsp/diagnostics/handler.d.ts +2 -0
- package/dist/tools/lsp/diagnostics/plugin.d.ts +1 -0
- package/dist/tools/lsp/diagnostics/types.d.ts +13 -0
- package/dist/tools/lsp/find-references/handler.d.ts +2 -0
- package/dist/tools/lsp/find-references/plugin.d.ts +1 -0
- package/dist/tools/lsp/find-references/types.d.ts +8 -0
- package/dist/tools/lsp/goto-definition/handler.d.ts +2 -0
- package/dist/tools/lsp/goto-definition/plugin.d.ts +1 -0
- package/dist/tools/lsp/goto-definition/types.d.ts +7 -0
- package/dist/tools/lsp/index.d.ts +6 -0
- package/dist/tools/lsp/prepare-rename/handler.d.ts +2 -0
- package/dist/tools/lsp/prepare-rename/plugin.d.ts +1 -0
- package/dist/tools/lsp/prepare-rename/types.d.ts +7 -0
- package/dist/tools/lsp/rename/handler.d.ts +2 -0
- package/dist/tools/lsp/rename/plugin.d.ts +1 -0
- package/dist/tools/lsp/rename/types.d.ts +8 -0
- package/dist/tools/lsp/symbols/handler.d.ts +2 -0
- package/dist/tools/lsp/symbols/plugin.d.ts +1 -0
- package/dist/tools/lsp/symbols/types.d.ts +11 -0
- package/dist/tools/session-manager/client-context.d.ts +3 -0
- package/dist/tools/session-manager/index.d.ts +5 -0
- package/dist/tools/session-manager/info/handler.d.ts +3 -0
- package/dist/tools/session-manager/info/plugin.d.ts +1 -0
- package/dist/tools/session-manager/info/types.d.ts +3 -0
- package/dist/tools/session-manager/list/handler.d.ts +3 -0
- package/dist/tools/session-manager/list/plugin.d.ts +1 -0
- package/dist/tools/session-manager/list/types.d.ts +6 -0
- package/dist/tools/session-manager/read/handler.d.ts +3 -0
- package/dist/tools/session-manager/read/plugin.d.ts +1 -0
- package/dist/tools/session-manager/read/types.d.ts +6 -0
- package/dist/tools/session-manager/search/handler.d.ts +3 -0
- package/dist/tools/session-manager/search/plugin.d.ts +1 -0
- package/dist/tools/session-manager/search/types.d.ts +6 -0
- package/dist/tools/session-manager/session-formatter.d.ts +29 -0
- package/dist/tools/session-manager/types.d.ts +36 -0
- package/dist/tools/shared/constants.d.ts +3 -0
- package/dist/tools/skill/handler.d.ts +4 -0
- package/dist/tools/skill/index.d.ts +3 -0
- package/dist/tools/skill/plugin.d.ts +1 -0
- package/dist/tools/skill/types.d.ts +12 -0
- package/dist/tools/skill-mcp/handler.d.ts +5 -0
- package/dist/tools/skill-mcp/index.d.ts +3 -0
- package/dist/tools/skill-mcp/plugin.d.ts +1 -0
- package/dist/tools/skill-mcp/types.d.ts +13 -0
- package/dist/tools/task/create/handler.d.ts +2 -0
- package/dist/tools/task/create/plugin.d.ts +1 -0
- package/dist/tools/task/format-task.d.ts +2 -0
- package/dist/tools/task/get/handler.d.ts +2 -0
- package/dist/tools/task/get/plugin.d.ts +1 -0
- package/dist/tools/task/index.d.ts +4 -0
- package/dist/tools/task/list/handler.d.ts +2 -0
- package/dist/tools/task/list/plugin.d.ts +1 -0
- package/dist/tools/task/storage.d.ts +7 -0
- package/dist/tools/task/types.d.ts +84 -0
- package/dist/tools/task/update/handler.d.ts +2 -0
- package/dist/tools/task/update/plugin.d.ts +1 -0
- package/dist/tools/tool-builder.d.ts +7 -0
- package/dist/tools/tool-registry-adapter.d.ts +3 -0
- package/dist/types/agent.d.ts +40 -0
- package/dist/types/category.d.ts +22 -0
- package/dist/types/config.d.ts +23 -0
- package/dist/types/hook.d.ts +18 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/plugin.d.ts +41 -0
- package/dist/types/tool.d.ts +7 -0
- package/eval/README.md +160 -0
- package/eval/ablation-config.yaml +43 -0
- package/eval/assertions/ablation-scorer.ts +81 -0
- package/eval/assertions/hook-impact.ts +152 -0
- package/eval/assertions/task-completion.ts +65 -0
- package/eval/assertions/tool-accuracy.ts +56 -0
- package/eval/promptfooconfig.yaml +42 -0
- package/eval/providers/opencode-baseline.ts +63 -0
- package/eval/providers/opencode-client.ts +112 -0
- package/eval/providers/opencode-provider.ts +66 -0
- package/eval/spike/config.yaml +13 -0
- package/eval/spike/provider.ts +15 -0
- package/npm-reserve/README.md +19 -0
- package/npm-reserve/package.json +24 -0
- package/opencode.json +6 -0
- package/package.json +47 -8
- package/src/agents/advisor/config.ts +6 -0
- package/src/agents/advisor/index.ts +2 -0
- package/src/agents/advisor/plugin.test.ts +48 -0
- package/src/agents/advisor/plugin.ts +17 -0
- package/src/agents/advisor/prompt-meta.ts +14 -0
- package/src/agents/advisor/prompt.ts +93 -0
- package/src/agents/agent-builder.test.ts +66 -0
- package/src/agents/agent-builder.ts +97 -0
- package/src/agents/agent-plugins.test.ts +98 -0
- package/src/agents/agent-registry.ts +25 -0
- package/src/agents/builtin-agents.ts +18 -0
- package/src/agents/deep-worker/config.ts +6 -0
- package/src/agents/deep-worker/index.ts +2 -0
- package/src/agents/deep-worker/plugin.test.ts +31 -0
- package/src/agents/deep-worker/plugin.ts +16 -0
- package/src/agents/deep-worker/prompt-meta.ts +14 -0
- package/src/agents/deep-worker/prompt.ts +121 -0
- package/src/agents/disabled/analyst/config.ts +6 -0
- package/src/agents/disabled/analyst/index.ts +2 -0
- package/src/agents/disabled/analyst/plugin.ts +16 -0
- package/src/agents/disabled/analyst/prompt.ts +1 -0
- package/src/agents/disabled/executor/config.ts +9 -0
- package/src/agents/disabled/executor/index.ts +2 -0
- package/src/agents/disabled/executor/plugin.ts +16 -0
- package/src/agents/disabled/executor/prompt.ts +1 -0
- package/src/agents/disabled/inspector/config.ts +6 -0
- package/src/agents/disabled/inspector/index.ts +2 -0
- package/src/agents/disabled/inspector/plugin.ts +18 -0
- package/src/agents/disabled/inspector/prompt.ts +1 -0
- package/src/agents/disabled/reviewer/config.ts +6 -0
- package/src/agents/disabled/reviewer/index.ts +2 -0
- package/src/agents/disabled/reviewer/plugin.ts +18 -0
- package/src/agents/disabled/reviewer/prompt.ts +1 -0
- package/src/agents/explorer/config.ts +6 -0
- package/src/agents/explorer/index.ts +2 -0
- package/src/agents/explorer/plugin.test.ts +36 -0
- package/src/agents/explorer/plugin.ts +15 -0
- package/src/agents/explorer/prompt-meta.ts +14 -0
- package/src/agents/explorer/prompt.ts +96 -0
- package/src/agents/fallback-chains.ts +13 -0
- package/src/agents/index.ts +18 -0
- package/src/agents/model-resolution.test.ts +79 -0
- package/src/agents/orchestrator/config.ts +10 -0
- package/src/agents/orchestrator/index.ts +2 -0
- package/src/agents/orchestrator/plugin.test.ts +31 -0
- package/src/agents/orchestrator/plugin.ts +16 -0
- package/src/agents/orchestrator/prompt-meta.ts +14 -0
- package/src/agents/orchestrator/prompt.ts +143 -0
- package/src/agents/planner/config.ts +6 -0
- package/src/agents/planner/index.ts +2 -0
- package/src/agents/planner/plugin.test.ts +31 -0
- package/src/agents/planner/plugin.ts +16 -0
- package/src/agents/planner/prompt-meta.ts +14 -0
- package/src/agents/planner/prompt.ts +138 -0
- package/src/agents/prompt-meta.ts +12 -0
- package/src/agents/prompt-registry.test.ts +98 -0
- package/src/agents/prompt-registry.ts +22 -0
- package/src/agents/researcher/config.ts +6 -0
- package/src/agents/researcher/index.ts +2 -0
- package/src/agents/researcher/plugin.test.ts +31 -0
- package/src/agents/researcher/plugin.ts +16 -0
- package/src/agents/researcher/prompt-meta.ts +14 -0
- package/src/agents/researcher/prompt.ts +116 -0
- package/src/agents/tool-restrictions.ts +87 -0
- package/src/agents/worker/config.ts +6 -0
- package/src/agents/worker/index.ts +2 -0
- package/src/agents/worker/plugin.test.ts +31 -0
- package/src/agents/worker/plugin.ts +15 -0
- package/src/agents/worker/prompt-meta.ts +14 -0
- package/src/agents/worker/prompt.ts +83 -0
- package/src/bootstrap.integration.test.ts +168 -0
- package/src/bootstrap.ts +171 -0
- package/src/cli/cli.ts +42 -0
- package/src/cli/commands/install.test.ts +40 -0
- package/src/cli/commands/install.ts +125 -0
- package/src/cli/commands/update.test.ts +84 -0
- package/src/cli/commands/update.ts +45 -0
- package/src/cli/config-generator.test.ts +178 -0
- package/src/cli/config-generator.ts +119 -0
- package/src/cli/index.test.ts +34 -0
- package/src/cli/index.ts +4 -0
- package/src/config/defaults.ts +24 -0
- package/src/config/define-config.ts +38 -0
- package/src/config/index.ts +6 -0
- package/src/config/loader.test.ts +218 -0
- package/src/config/loader.ts +89 -0
- package/src/config/paths.ts +30 -0
- package/src/config/schema.test.ts +69 -0
- package/src/config/schema.ts +57 -0
- package/src/config/validator.ts +24 -0
- package/src/features/auto-update/auto-update.test.ts +105 -0
- package/src/features/auto-update/index.ts +4 -0
- package/src/features/auto-update/plugin.ts +45 -0
- package/src/features/auto-update/update-checker.ts +66 -0
- package/src/features/background-agent/concurrency.test.ts +65 -0
- package/src/features/background-agent/concurrency.ts +44 -0
- package/src/features/background-agent/index.ts +12 -0
- package/src/features/background-agent/manager.ts +214 -0
- package/src/features/background-agent/poller.test.ts +33 -0
- package/src/features/background-agent/poller.ts +75 -0
- package/src/features/background-agent/singleton.ts +26 -0
- package/src/features/background-agent/spawner.ts +51 -0
- package/src/features/background-agent/types.ts +20 -0
- package/src/features/builtin-features.ts +5 -0
- package/src/features/categories/categories.test.ts +68 -0
- package/src/features/categories/category-config.ts +70 -0
- package/src/features/categories/category-resolver.ts +36 -0
- package/src/features/categories/index.ts +8 -0
- package/src/features/categories/prompt-appends.ts +38 -0
- package/src/features/loops/file-store.ts +151 -0
- package/src/features/loops/handler.ts +89 -0
- package/src/features/loops/index.ts +28 -0
- package/src/features/loops/loops.test.ts +175 -0
- package/src/features/loops/memory-store.ts +53 -0
- package/src/features/loops/plugin.ts +107 -0
- package/src/features/loops/shared/event-utils.ts +50 -0
- package/src/features/loops/state.ts +44 -0
- package/src/features/prompt-builder/agent-table-builder.ts +23 -0
- package/src/features/prompt-builder/category-section-builder.ts +21 -0
- package/src/features/prompt-builder/dynamic-prompt-builder.ts +42 -0
- package/src/features/prompt-builder/index.ts +7 -0
- package/src/features/prompt-builder/prompt-builder.test.ts +244 -0
- package/src/features/prompt-builder/skill-section-builder.ts +25 -0
- package/src/features/session-state/index.ts +17 -0
- package/src/features/session-state/session-cursor.test.ts +137 -0
- package/src/features/session-state/session-cursor.ts +80 -0
- package/src/features/session-state/session-store.test.ts +82 -0
- package/src/features/session-state/session-store.ts +37 -0
- package/src/features/session-state/session-tools-store.ts +18 -0
- package/src/features/skills/builtin/git-master.ts +109 -0
- package/src/features/skills/index.ts +97 -0
- package/src/features/skills/skill-loader.ts +133 -0
- package/src/features/skills/skill-merger.ts +15 -0
- package/src/features/skills/skills.test.ts +120 -0
- package/src/features/slash-commands/command-registry.ts +36 -0
- package/src/features/slash-commands/commands/cancel-loop.ts +17 -0
- package/src/features/slash-commands/commands/handoff.ts +59 -0
- package/src/features/slash-commands/commands/init-deep.ts +40 -0
- package/src/features/slash-commands/commands/loop.ts +39 -0
- package/src/features/slash-commands/commands/start-work.ts +39 -0
- package/src/features/slash-commands/commands/stop-continuation.ts +21 -0
- package/src/features/slash-commands/index.ts +2 -0
- package/src/features/slash-commands/slash-commands.test.ts +68 -0
- package/src/features/slash-commands/types.ts +5 -0
- package/src/hooks/anthropic-effort/handler.test.ts +156 -0
- package/src/hooks/anthropic-effort/handler.ts +64 -0
- package/src/hooks/anthropic-effort/index.ts +3 -0
- package/src/hooks/anthropic-effort/plugin.ts +17 -0
- package/src/hooks/builtin-hooks.ts +64 -0
- package/src/hooks/comment-checker/handler.test.ts +65 -0
- package/src/hooks/comment-checker/handler.ts +60 -0
- package/src/hooks/comment-checker/index.ts +2 -0
- package/src/hooks/comment-checker/plugin.ts +15 -0
- package/src/hooks/compaction-context/handler.test.ts +160 -0
- package/src/hooks/compaction-context/handler.ts +179 -0
- package/src/hooks/compaction-context/index.ts +5 -0
- package/src/hooks/compaction-context/plugin.ts +40 -0
- package/src/hooks/compaction-todo-preserver/handler.test.ts +155 -0
- package/src/hooks/compaction-todo-preserver/handler.ts +129 -0
- package/src/hooks/compaction-todo-preserver/index.ts +2 -0
- package/src/hooks/compaction-todo-preserver/plugin.ts +18 -0
- package/src/hooks/context-injection.test.ts +124 -0
- package/src/hooks/context-injector/handlers/agents.test.ts +90 -0
- package/src/hooks/context-injector/handlers/agents.ts +81 -0
- package/src/hooks/context-injector/handlers/readme.ts +55 -0
- package/src/hooks/context-injector/handlers/rules.ts +62 -0
- package/src/hooks/context-injector/index.ts +4 -0
- package/src/hooks/context-injector/plugin.ts +56 -0
- package/src/hooks/context-window-limit/handler.test.ts +103 -0
- package/src/hooks/context-window-limit/handler.ts +128 -0
- package/src/hooks/context-window-limit/index.ts +6 -0
- package/src/hooks/context-window-limit/plugin.ts +15 -0
- package/src/hooks/continuation.test.ts +103 -0
- package/src/hooks/delegate-retry/handler.test.ts +212 -0
- package/src/hooks/delegate-retry/handler.ts +137 -0
- package/src/hooks/delegate-retry/index.ts +8 -0
- package/src/hooks/delegate-retry/plugin.ts +15 -0
- package/src/hooks/edit-error/handler.test.ts +82 -0
- package/src/hooks/edit-error/handler.ts +50 -0
- package/src/hooks/edit-error/index.ts +6 -0
- package/src/hooks/edit-error/plugin.ts +15 -0
- package/src/hooks/empty-response-detector/handler.test.ts +133 -0
- package/src/hooks/empty-response-detector/handler.ts +62 -0
- package/src/hooks/empty-response-detector/index.ts +2 -0
- package/src/hooks/empty-response-detector/plugin.ts +18 -0
- package/src/hooks/error-diagnostics/error-diagnostics.test.ts +116 -0
- package/src/hooks/error-diagnostics/handler.test.ts +147 -0
- package/src/hooks/error-diagnostics/handler.ts +135 -0
- package/src/hooks/error-diagnostics/patterns.ts +93 -0
- package/src/hooks/error-diagnostics/plugin.ts +11 -0
- package/src/hooks/error-diagnostics/types.ts +26 -0
- package/src/hooks/error-recovery.test.ts +85 -0
- package/src/hooks/foreground-fallback/handler.test.ts +229 -0
- package/src/hooks/foreground-fallback/handler.ts +294 -0
- package/src/hooks/foreground-fallback/index.ts +2 -0
- package/src/hooks/foreground-fallback/plugin.ts +18 -0
- package/src/hooks/hashline-diff-enhancer/handler.test.ts +166 -0
- package/src/hooks/hashline-diff-enhancer/handler.ts +186 -0
- package/src/hooks/hashline-diff-enhancer/index.ts +6 -0
- package/src/hooks/hashline-diff-enhancer/plugin.ts +24 -0
- package/src/hooks/hashline-read-enhancer/handler.test.ts +121 -0
- package/src/hooks/hashline-read-enhancer/handler.ts +165 -0
- package/src/hooks/hashline-read-enhancer/index.ts +2 -0
- package/src/hooks/hashline-read-enhancer/plugin.ts +18 -0
- package/src/hooks/hook-composer.test.ts +52 -0
- package/src/hooks/hook-composer.ts +17 -0
- package/src/hooks/hook-composition.integration.test.ts +274 -0
- package/src/hooks/hook-ordering.ts +41 -0
- package/src/hooks/hook-types.ts +22 -0
- package/src/hooks/index.ts +6 -0
- package/src/hooks/json-error/handler.test.ts +95 -0
- package/src/hooks/json-error/handler.ts +82 -0
- package/src/hooks/json-error/index.ts +6 -0
- package/src/hooks/json-error/plugin.ts +15 -0
- package/src/hooks/keyword-detector/handler.test.ts +113 -0
- package/src/hooks/keyword-detector/handler.ts +73 -0
- package/src/hooks/keyword-detector/index.ts +8 -0
- package/src/hooks/keyword-detector/plugin.ts +24 -0
- package/src/hooks/model-fallback/handler.test.ts +163 -0
- package/src/hooks/model-fallback/handler.ts +178 -0
- package/src/hooks/model-fallback/index.ts +2 -0
- package/src/hooks/model-fallback/plugin.ts +11 -0
- package/src/hooks/model-management.test.ts +121 -0
- package/src/hooks/phase-reminder/handler.test.ts +105 -0
- package/src/hooks/phase-reminder/handler.ts +54 -0
- package/src/hooks/phase-reminder/index.ts +2 -0
- package/src/hooks/phase-reminder/plugin.ts +18 -0
- package/src/hooks/post-read-nudge/handler.test.ts +106 -0
- package/src/hooks/post-read-nudge/handler.ts +28 -0
- package/src/hooks/post-read-nudge/index.ts +2 -0
- package/src/hooks/post-read-nudge/plugin.ts +18 -0
- package/src/hooks/preemptive-compaction/handler.test.ts +130 -0
- package/src/hooks/preemptive-compaction/handler.ts +84 -0
- package/src/hooks/preemptive-compaction/index.ts +2 -0
- package/src/hooks/preemptive-compaction/plugin.ts +15 -0
- package/src/hooks/productivity.test.ts +332 -0
- package/src/hooks/quality.test.ts +330 -0
- package/src/hooks/runtime-fallback/handler.test.ts +142 -0
- package/src/hooks/runtime-fallback/handler.ts +171 -0
- package/src/hooks/runtime-fallback/index.ts +2 -0
- package/src/hooks/runtime-fallback/plugin.ts +13 -0
- package/src/hooks/safe-hook-wrapper.test.ts +35 -0
- package/src/hooks/safe-hook-wrapper.ts +12 -0
- package/src/hooks/session-recovery/handler.test.ts +88 -0
- package/src/hooks/session-recovery/handler.ts +87 -0
- package/src/hooks/session-recovery/index.ts +6 -0
- package/src/hooks/session-recovery/plugin.ts +15 -0
- package/src/hooks/skill-discovery/plugin.ts +45 -0
- package/src/hooks/stop-guard/handler.test.ts +147 -0
- package/src/hooks/stop-guard/handler.ts +127 -0
- package/src/hooks/stop-guard/index.ts +2 -0
- package/src/hooks/stop-guard/plugin.ts +15 -0
- package/src/hooks/task-hooks.test.ts +324 -0
- package/src/hooks/task-resume-info/handler.test.ts +180 -0
- package/src/hooks/task-resume-info/handler.ts +61 -0
- package/src/hooks/task-resume-info/index.ts +2 -0
- package/src/hooks/task-resume-info/plugin.ts +15 -0
- package/src/hooks/think-mode/handler.test.ts +139 -0
- package/src/hooks/think-mode/handler.ts +50 -0
- package/src/hooks/think-mode/index.ts +2 -0
- package/src/hooks/think-mode/plugin.ts +15 -0
- package/src/hooks/thinking-block-validator/handler.test.ts +79 -0
- package/src/hooks/thinking-block-validator/handler.ts +93 -0
- package/src/hooks/thinking-block-validator/index.ts +2 -0
- package/src/hooks/thinking-block-validator/plugin.ts +18 -0
- package/src/hooks/todo-enforcer/handler.test.ts +153 -0
- package/src/hooks/todo-enforcer/handler.ts +100 -0
- package/src/hooks/todo-enforcer/index.ts +2 -0
- package/src/hooks/todo-enforcer/plugin.ts +15 -0
- package/src/hooks/todowrite-disabler/handler.test.ts +119 -0
- package/src/hooks/todowrite-disabler/handler.ts +50 -0
- package/src/hooks/todowrite-disabler/index.ts +6 -0
- package/src/hooks/todowrite-disabler/plugin.ts +46 -0
- package/src/hooks/tool-output-truncator/handler.test.ts +113 -0
- package/src/hooks/tool-output-truncator/handler.ts +83 -0
- package/src/hooks/tool-output-truncator/index.ts +2 -0
- package/src/hooks/tool-output-truncator/plugin.ts +18 -0
- package/src/hooks/tool-output.test.ts +238 -0
- package/src/hooks/workflow-reminders.test.ts +187 -0
- package/src/hooks/write-file-guard/handler.test.ts +107 -0
- package/src/hooks/write-file-guard/handler.ts +166 -0
- package/src/hooks/write-file-guard/index.ts +2 -0
- package/src/hooks/write-file-guard/plugin.ts +23 -0
- package/src/index.ts +8 -0
- package/src/plugin/compositor.ts +99 -0
- package/src/plugin/index.ts +1 -0
- package/src/plugin-api/define-plugin.test.ts +66 -0
- package/src/plugin-api/define-plugin.ts +36 -0
- package/src/plugin-api/index.ts +26 -0
- package/src/plugin-api/types.ts +28 -0
- package/src/registry/agent-aggregator.ts +13 -0
- package/src/registry/contribution-aggregator.test.ts +62 -0
- package/src/registry/contribution-aggregator.ts +114 -0
- package/src/registry/contribution-conflicts.integration.test.ts +186 -0
- package/src/registry/dependency-resolver.test.ts +35 -0
- package/src/registry/dependency-resolver.ts +64 -0
- package/src/registry/hook-aggregator.test.ts +78 -0
- package/src/registry/hook-aggregator.ts +63 -0
- package/src/registry/index.ts +6 -0
- package/src/registry/plugin-lifecycle.integration.test.ts +94 -0
- package/src/registry/plugin-overrides.integration.test.ts +140 -0
- package/src/registry/plugin-registry.test.ts +56 -0
- package/src/registry/plugin-registry.ts +82 -0
- package/src/registry/tool-aggregator.ts +13 -0
- package/src/registry/types.ts +11 -0
- package/src/runtime/index.ts +43 -0
- package/src/shared/data-path.ts +18 -0
- package/src/shared/deep-merge.test.ts +36 -0
- package/src/shared/deep-merge.ts +61 -0
- package/src/shared/fallback-chain.ts +8 -0
- package/src/shared/index.ts +59 -0
- package/src/shared/logger.ts +54 -0
- package/src/shared/model-availability.ts +18 -0
- package/src/shared/model-normalization.test.ts +75 -0
- package/src/shared/model-normalization.ts +28 -0
- package/src/shared/model-prefix-map.test.ts +75 -0
- package/src/shared/model-prefix-map.ts +58 -0
- package/src/shared/model-resolution-pipeline.test.ts +111 -0
- package/src/shared/model-resolution-pipeline.ts +55 -0
- package/src/shared/models-dev.test.ts +277 -0
- package/src/shared/models-dev.ts +176 -0
- package/src/shared/provider-discovery.test.ts +97 -0
- package/src/shared/provider-discovery.ts +73 -0
- package/src/shared/provider-registry.test.ts +212 -0
- package/src/shared/provider-registry.ts +157 -0
- package/src/shared/safe-create-hook.ts +15 -0
- package/src/shared/snake-case.ts +7 -0
- package/src/shared/truncate-description.ts +6 -0
- package/src/test-utils/index.ts +6 -0
- package/src/test-utils/mock-agent-config.ts +13 -0
- package/src/test-utils/mock-hook-inputs.ts +148 -0
- package/src/test-utils/mock-hook-outputs.ts +153 -0
- package/src/test-utils/mock-plugin-context.test.ts +32 -0
- package/src/test-utils/mock-plugin-context.ts +21 -0
- package/src/test-utils/mock-sdk-client.ts +52 -0
- package/src/test-utils/mock-tool-context.ts +24 -0
- package/src/tools/ast-grep/index.ts +4 -0
- package/src/tools/ast-grep/replace/handler.test.ts +93 -0
- package/src/tools/ast-grep/replace/handler.ts +89 -0
- package/src/tools/ast-grep/replace/plugin.ts +10 -0
- package/src/tools/ast-grep/replace/types.ts +14 -0
- package/src/tools/ast-grep/search/handler.test.ts +94 -0
- package/src/tools/ast-grep/search/handler.ts +93 -0
- package/src/tools/ast-grep/search/plugin.ts +10 -0
- package/src/tools/ast-grep/search/types.ts +42 -0
- package/src/tools/background-task/background-task.test.ts +185 -0
- package/src/tools/background-task/cancel/handler.test.ts +141 -0
- package/src/tools/background-task/cancel/handler.ts +52 -0
- package/src/tools/background-task/cancel/plugin.ts +30 -0
- package/src/tools/background-task/cancel/types.ts +4 -0
- package/src/tools/background-task/index.ts +2 -0
- package/src/tools/background-task/output/handler.test.ts +142 -0
- package/src/tools/background-task/output/handler.ts +93 -0
- package/src/tools/background-task/output/plugin.ts +60 -0
- package/src/tools/background-task/output/types.ts +11 -0
- package/src/tools/bridge.test.ts +55 -0
- package/src/tools/bridge.ts +13 -0
- package/src/tools/builtin-tools.ts +54 -0
- package/src/tools/code-search.test.ts +203 -0
- package/src/tools/delegate-task/category-resolver.ts +18 -0
- package/src/tools/delegate-task/constants.ts +43 -0
- package/src/tools/delegate-task/delegate-task.test.ts +245 -0
- package/src/tools/delegate-task/executor.ts +157 -0
- package/src/tools/delegate-task/handler.ts +74 -0
- package/src/tools/delegate-task/index.ts +7 -0
- package/src/tools/delegate-task/plugin.ts +21 -0
- package/src/tools/delegate-task/types.ts +19 -0
- package/src/tools/glob/handler.test.ts +80 -0
- package/src/tools/glob/handler.ts +74 -0
- package/src/tools/glob/index.ts +2 -0
- package/src/tools/glob/plugin.ts +10 -0
- package/src/tools/glob/types.ts +14 -0
- package/src/tools/grep/handler.test.ts +79 -0
- package/src/tools/grep/handler.ts +104 -0
- package/src/tools/grep/index.ts +2 -0
- package/src/tools/grep/plugin.ts +10 -0
- package/src/tools/grep/types.ts +28 -0
- package/src/tools/hashline-edit/constants.ts +10 -0
- package/src/tools/hashline-edit/edit-operations.ts +115 -0
- package/src/tools/hashline-edit/handler.test.ts +105 -0
- package/src/tools/hashline-edit/handler.ts +33 -0
- package/src/tools/hashline-edit/hash-computation.ts +20 -0
- package/src/tools/hashline-edit/hashline-edit.test.ts +62 -0
- package/src/tools/hashline-edit/index.ts +5 -0
- package/src/tools/hashline-edit/plugin.ts +28 -0
- package/src/tools/hashline-edit/types.ts +42 -0
- package/src/tools/index.ts +4 -0
- package/src/tools/look-at/handler.test.ts +189 -0
- package/src/tools/look-at/handler.ts +232 -0
- package/src/tools/look-at/index.ts +3 -0
- package/src/tools/look-at/look-at.test.ts +200 -0
- package/src/tools/look-at/plugin.ts +10 -0
- package/src/tools/look-at/types.ts +17 -0
- package/src/tools/lsp/client.ts +145 -0
- package/src/tools/lsp/diagnostics/handler.test.ts +94 -0
- package/src/tools/lsp/diagnostics/handler.ts +39 -0
- package/src/tools/lsp/diagnostics/plugin.ts +10 -0
- package/src/tools/lsp/diagnostics/types.ts +15 -0
- package/src/tools/lsp/find-references/handler.test.ts +79 -0
- package/src/tools/lsp/find-references/handler.ts +38 -0
- package/src/tools/lsp/find-references/plugin.ts +10 -0
- package/src/tools/lsp/find-references/types.ts +10 -0
- package/src/tools/lsp/goto-definition/handler.test.ts +80 -0
- package/src/tools/lsp/goto-definition/handler.ts +38 -0
- package/src/tools/lsp/goto-definition/plugin.ts +10 -0
- package/src/tools/lsp/goto-definition/types.ts +9 -0
- package/src/tools/lsp/index.ts +6 -0
- package/src/tools/lsp/lsp-tools.test.ts +150 -0
- package/src/tools/lsp/prepare-rename/handler.test.ts +81 -0
- package/src/tools/lsp/prepare-rename/handler.ts +34 -0
- package/src/tools/lsp/prepare-rename/plugin.ts +10 -0
- package/src/tools/lsp/prepare-rename/types.ts +9 -0
- package/src/tools/lsp/rename/handler.test.ts +87 -0
- package/src/tools/lsp/rename/handler.ts +34 -0
- package/src/tools/lsp/rename/plugin.ts +10 -0
- package/src/tools/lsp/rename/types.ts +10 -0
- package/src/tools/lsp/symbols/handler.test.ts +108 -0
- package/src/tools/lsp/symbols/handler.ts +43 -0
- package/src/tools/lsp/symbols/plugin.ts +10 -0
- package/src/tools/lsp/symbols/types.ts +13 -0
- package/src/tools/session-manager/client-context.ts +16 -0
- package/src/tools/session-manager/index.ts +5 -0
- package/src/tools/session-manager/info/handler.test.ts +100 -0
- package/src/tools/session-manager/info/handler.ts +27 -0
- package/src/tools/session-manager/info/plugin.ts +40 -0
- package/src/tools/session-manager/info/types.ts +3 -0
- package/src/tools/session-manager/list/handler.test.ts +122 -0
- package/src/tools/session-manager/list/handler.ts +56 -0
- package/src/tools/session-manager/list/plugin.ts +52 -0
- package/src/tools/session-manager/list/types.ts +6 -0
- package/src/tools/session-manager/read/handler.test.ts +114 -0
- package/src/tools/session-manager/read/handler.ts +36 -0
- package/src/tools/session-manager/read/plugin.ts +57 -0
- package/src/tools/session-manager/read/types.ts +6 -0
- package/src/tools/session-manager/search/handler.test.ts +115 -0
- package/src/tools/session-manager/search/handler.ts +72 -0
- package/src/tools/session-manager/search/plugin.ts +57 -0
- package/src/tools/session-manager/search/types.ts +6 -0
- package/src/tools/session-manager/session-formatter.ts +315 -0
- package/src/tools/session-manager/session-manager.test.ts +254 -0
- package/src/tools/session-manager/types.ts +41 -0
- package/src/tools/shared/constants.ts +3 -0
- package/src/tools/skill/handler.test.ts +57 -0
- package/src/tools/skill/handler.ts +27 -0
- package/src/tools/skill/index.ts +3 -0
- package/src/tools/skill/plugin.ts +41 -0
- package/src/tools/skill/types.ts +14 -0
- package/src/tools/skill-mcp/handler.test.ts +68 -0
- package/src/tools/skill-mcp/handler.ts +84 -0
- package/src/tools/skill-mcp/index.ts +3 -0
- package/src/tools/skill-mcp/plugin.ts +37 -0
- package/src/tools/skill-mcp/types.ts +15 -0
- package/src/tools/skill-tools.test.ts +172 -0
- package/src/tools/task/create/handler.test.ts +64 -0
- package/src/tools/task/create/handler.ts +43 -0
- package/src/tools/task/create/plugin.ts +10 -0
- package/src/tools/task/format-task.test.ts +37 -0
- package/src/tools/task/format-task.ts +19 -0
- package/src/tools/task/get/handler.test.ts +76 -0
- package/src/tools/task/get/handler.ts +35 -0
- package/src/tools/task/get/plugin.ts +10 -0
- package/src/tools/task/index.ts +4 -0
- package/src/tools/task/list/handler.test.ts +70 -0
- package/src/tools/task/list/handler.ts +48 -0
- package/src/tools/task/list/plugin.ts +10 -0
- package/src/tools/task/storage.ts +14 -0
- package/src/tools/task/task.test.ts +165 -0
- package/src/tools/task/types.ts +51 -0
- package/src/tools/task/update/handler.test.ts +86 -0
- package/src/tools/task/update/handler.ts +54 -0
- package/src/tools/task/update/plugin.ts +10 -0
- package/src/tools/tool-builder.test.ts +32 -0
- package/src/tools/tool-builder.ts +24 -0
- package/src/tools/tool-registry-adapter.test.ts +51 -0
- package/src/tools/tool-registry-adapter.ts +19 -0
- package/src/types/agent.ts +53 -0
- package/src/types/category.ts +32 -0
- package/src/types/config.ts +26 -0
- package/src/types/hook.ts +44 -0
- package/src/types/index.ts +12 -0
- package/src/types/plugin.ts +47 -0
- package/src/types/tool.ts +10 -0
- package/test-setup.ts +8 -0
- package/tsconfig.json +20 -0
- /package/{index.js → npm-reserve/index.js} +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
export const ORCHESTRATOR_PROMPT = `# Role
|
|
2
|
+
You are GoatCode's primary orchestration brain.
|
|
3
|
+
Your job is to convert user intent into reliable outcomes by planning, routing, verifying, and closing loops.
|
|
4
|
+
|
|
5
|
+
You are not here to "do everything yourself." You are here to make the right work happen through the right agent at the right time.
|
|
6
|
+
|
|
7
|
+
## Core Mission
|
|
8
|
+
- Classify intent before action.
|
|
9
|
+
- Decompose requests into atomic tasks.
|
|
10
|
+
- Delegate specialist work when available.
|
|
11
|
+
- Run independent work in parallel.
|
|
12
|
+
- Prevent duplicate exploration.
|
|
13
|
+
- Verify evidence before completion claims.
|
|
14
|
+
|
|
15
|
+
## Interaction Contract
|
|
16
|
+
- Be direct, concise, and operational.
|
|
17
|
+
- No flattery, no filler, no unnecessary preamble.
|
|
18
|
+
- Match user tone and depth.
|
|
19
|
+
- Ask clarifying questions only when ambiguity materially changes cost/outcome.
|
|
20
|
+
|
|
21
|
+
# Intent Analysis Framework (Mandatory First Step)
|
|
22
|
+
Before acting, classify the request:
|
|
23
|
+
|
|
24
|
+
1) **Information / Explanation**
|
|
25
|
+
- User wants understanding, not code changes.
|
|
26
|
+
- Route: explorer/researcher and then synthesize.
|
|
27
|
+
|
|
28
|
+
2) **Implementation / Change**
|
|
29
|
+
- User wants code created/modified.
|
|
30
|
+
- Route: deep-worker or worker.
|
|
31
|
+
|
|
32
|
+
3) **Planning / Scoping**
|
|
33
|
+
- User needs strategy, sequence, trade-offs.
|
|
34
|
+
- Route: planner.
|
|
35
|
+
|
|
36
|
+
4) **Architecture / Debugging Advice**
|
|
37
|
+
- User needs expert judgment, not edits.
|
|
38
|
+
- Route: advisor.
|
|
39
|
+
|
|
40
|
+
5) **Investigation / Discovery**
|
|
41
|
+
- User asks where/how code currently works.
|
|
42
|
+
- Route: explorer (internal) and researcher (external if needed).
|
|
43
|
+
|
|
44
|
+
6) **Mixed Intent**
|
|
45
|
+
- Split into sub-tasks by intent type, then delegate independently.
|
|
46
|
+
|
|
47
|
+
# Delegation Rules
|
|
48
|
+
Default to specialist delegation when scope is non-trivial.
|
|
49
|
+
|
|
50
|
+
## Agent Routing Table
|
|
51
|
+
- **orchestrator**: coordination, decomposition, verification.
|
|
52
|
+
- **deep-worker**: end-to-end autonomous implementation.
|
|
53
|
+
- **planner**: interview-mode planning and acceptance criteria.
|
|
54
|
+
- **advisor**: read-only technical judgment.
|
|
55
|
+
- **researcher**: external documentation and evidence gathering.
|
|
56
|
+
- **explorer**: fast internal codebase discovery.
|
|
57
|
+
- **worker**: focused execution of assigned atomic task.
|
|
58
|
+
|
|
59
|
+
## When To Execute Directly
|
|
60
|
+
Execute directly only when all are true:
|
|
61
|
+
- Single-step task.
|
|
62
|
+
- No specialist advantage.
|
|
63
|
+
- No broad search needed.
|
|
64
|
+
- Risk of misrouting exceeds benefit.
|
|
65
|
+
|
|
66
|
+
# Parallel Execution Mandate
|
|
67
|
+
If tasks are independent, launch them simultaneously.
|
|
68
|
+
|
|
69
|
+
## Parallelism Rules
|
|
70
|
+
- Fire independent delegations in parallel.
|
|
71
|
+
- Fire independent tool calls in parallel.
|
|
72
|
+
- Do not serialize unrelated reads/searches.
|
|
73
|
+
- Gather results only when required by dependency.
|
|
74
|
+
|
|
75
|
+
## Dependency Rule
|
|
76
|
+
- If Task B depends on Task A output, run sequentially.
|
|
77
|
+
- Otherwise parallelize by default.
|
|
78
|
+
|
|
79
|
+
# Anti-Duplication Rules (Strict)
|
|
80
|
+
Once you delegate exploration, do not re-run the same search yourself.
|
|
81
|
+
|
|
82
|
+
## Forbidden
|
|
83
|
+
- Repeating delegated grep/glob/LSP discovery manually.
|
|
84
|
+
- Running "quick checks" on the same question already delegated.
|
|
85
|
+
- Contradicting pending delegated work with fresh duplicate searches.
|
|
86
|
+
|
|
87
|
+
## Allowed
|
|
88
|
+
- Independent implementation not requiring delegated findings.
|
|
89
|
+
- Preparation work with no overlap.
|
|
90
|
+
- Waiting for completion if dependent work is blocked.
|
|
91
|
+
|
|
92
|
+
# Session Continuity
|
|
93
|
+
For follow-ups, reuse delegated session context when available.
|
|
94
|
+
|
|
95
|
+
## Continuation Policy
|
|
96
|
+
- Same subproblem -> continue existing agent session.
|
|
97
|
+
- Failed attempt -> continue same session with corrective instruction.
|
|
98
|
+
- Related follow-up question -> continue same session.
|
|
99
|
+
- New unrelated problem -> start a new session.
|
|
100
|
+
|
|
101
|
+
# Planning and Task Discipline
|
|
102
|
+
If work has 2+ meaningful steps, maintain a structured todo list.
|
|
103
|
+
|
|
104
|
+
## Todo Rules
|
|
105
|
+
- Create atomic tasks.
|
|
106
|
+
- Keep exactly one task in_progress.
|
|
107
|
+
- Mark completed immediately after verification.
|
|
108
|
+
- Do not batch status updates.
|
|
109
|
+
|
|
110
|
+
# Verification Standard
|
|
111
|
+
Completion claims require evidence from tools/commands.
|
|
112
|
+
|
|
113
|
+
## Required Evidence
|
|
114
|
+
- Diagnostics clean for changed files.
|
|
115
|
+
- Build success when applicable.
|
|
116
|
+
- Tests pass when applicable.
|
|
117
|
+
- Delegated results are reviewed, not blindly trusted.
|
|
118
|
+
|
|
119
|
+
## Claim Policy
|
|
120
|
+
- Never assert success without fresh evidence.
|
|
121
|
+
- If evidence fails, report failure with root cause and next action.
|
|
122
|
+
|
|
123
|
+
# Hard Constraints
|
|
124
|
+
- Never suppress types with as any, @ts-ignore, or @ts-expect-error.
|
|
125
|
+
- Never commit or push unless user explicitly requests.
|
|
126
|
+
- Never edit files in read-only advisory workflows.
|
|
127
|
+
- Never expand scope with unrelated "bonus" work.
|
|
128
|
+
|
|
129
|
+
# Failure Handling
|
|
130
|
+
When blocked or failing repeatedly:
|
|
131
|
+
- Focus on root cause, not symptoms.
|
|
132
|
+
- Reduce change surface.
|
|
133
|
+
- Re-verify after each meaningful fix.
|
|
134
|
+
- Escalate with concise options when uncertainty remains high.
|
|
135
|
+
|
|
136
|
+
# Final Response Contract
|
|
137
|
+
When reporting back:
|
|
138
|
+
- State what was requested.
|
|
139
|
+
- State what was done.
|
|
140
|
+
- Provide verification evidence.
|
|
141
|
+
- Note any assumptions and unresolved risks.
|
|
142
|
+
- Offer next step only if it directly advances the current goal.
|
|
143
|
+
`;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentMode } from "../../types/agent";
|
|
2
|
+
import { DEFAULT_TEMPERATURE } from "../../config/defaults";
|
|
3
|
+
|
|
4
|
+
export const PLANNER_TEMPERATURE = DEFAULT_TEMPERATURE;
|
|
5
|
+
export const PLANNER_MODE: AgentMode = "all";
|
|
6
|
+
export const PLANNER_FALLBACK_MODELS = ["gpt-5.4", "gemini-3.1-pro-preview", "claude-sonnet-4-6"];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, it, expect } from "bun:test";
|
|
2
|
+
import { plannerPlugin } from "./plugin";
|
|
3
|
+
|
|
4
|
+
describe("plannerPlugin", () => {
|
|
5
|
+
describe("#given the planner plugin", () => {
|
|
6
|
+
describe("#when inspecting plugin metadata", () => {
|
|
7
|
+
it("#then has the correct plugin name", () => {
|
|
8
|
+
expect(plannerPlugin.name).toBe("planner");
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
describe("#when inspecting the agent config", () => {
|
|
13
|
+
it("#then mode is 'all'", () => {
|
|
14
|
+
const agent = plannerPlugin.agents!["planner"];
|
|
15
|
+
expect(agent.mode).toBe("all");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("#then has a temperature and non-empty prompt", () => {
|
|
19
|
+
const agent = plannerPlugin.agents!["planner"];
|
|
20
|
+
expect(typeof agent.temperature).toBe("number");
|
|
21
|
+
expect(typeof agent.prompt).toBe("string");
|
|
22
|
+
expect(agent.prompt!.length).toBeGreaterThan(0);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("#then does not define tool restrictions", () => {
|
|
26
|
+
const agent = plannerPlugin.agents!["planner"];
|
|
27
|
+
expect(agent.tools).toBeUndefined();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { definePlugin } from "../../plugin-api";
|
|
2
|
+
import { PLANNER_TEMPERATURE, PLANNER_MODE } from "./config";
|
|
3
|
+
import { PLANNER_PROMPT } from "./prompt";
|
|
4
|
+
|
|
5
|
+
export const plannerPlugin = definePlugin({
|
|
6
|
+
name: "planner",
|
|
7
|
+
version: "0.1.0",
|
|
8
|
+
agents: {
|
|
9
|
+
planner: {
|
|
10
|
+
temperature: PLANNER_TEMPERATURE,
|
|
11
|
+
mode: PLANNER_MODE,
|
|
12
|
+
prompt: PLANNER_PROMPT,
|
|
13
|
+
color: "#047857",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PromptMeta } from "../prompt-meta";
|
|
2
|
+
|
|
3
|
+
export const PLANNER_PROMPT_META: PromptMeta = {
|
|
4
|
+
version: "1.0.0",
|
|
5
|
+
date: "2025-03-28",
|
|
6
|
+
summary: "Builds actionable implementation plans from clarified requirements.",
|
|
7
|
+
changelog: [
|
|
8
|
+
{
|
|
9
|
+
version: "1.0.0",
|
|
10
|
+
date: "2025-03-28",
|
|
11
|
+
description: "Production-grade prompt with structured sections and quality gates",
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
export const PLANNER_PROMPT = `# Role
|
|
2
|
+
You are GoatCode's strategic planning specialist.
|
|
3
|
+
You do not implement. You produce executable plans that other agents can run with minimal interpretation.
|
|
4
|
+
|
|
5
|
+
# Planning Objective
|
|
6
|
+
Transform vague requests into:
|
|
7
|
+
- clear scope,
|
|
8
|
+
- explicit constraints,
|
|
9
|
+
- ordered execution steps,
|
|
10
|
+
- measurable acceptance criteria,
|
|
11
|
+
- and verification procedures.
|
|
12
|
+
|
|
13
|
+
# Interview Mode (Default)
|
|
14
|
+
Before writing a final plan, interrogate ambiguity.
|
|
15
|
+
|
|
16
|
+
## Interview Rules
|
|
17
|
+
- Ask concise, high-leverage clarifying questions.
|
|
18
|
+
- Prioritize questions that change architecture, effort, or risk.
|
|
19
|
+
- Avoid trivia that can be inferred from repository context.
|
|
20
|
+
- If uncertainty remains low-impact, make explicit assumptions and proceed.
|
|
21
|
+
|
|
22
|
+
## Required Clarification Areas
|
|
23
|
+
- Desired outcome and non-goals.
|
|
24
|
+
- Runtime/environment constraints.
|
|
25
|
+
- Backward compatibility requirements.
|
|
26
|
+
- Performance/security expectations.
|
|
27
|
+
- Delivery boundaries (what must ship now vs later).
|
|
28
|
+
|
|
29
|
+
# Intent Classification Framework
|
|
30
|
+
Classify every request into one primary type:
|
|
31
|
+
|
|
32
|
+
1) **Feature Delivery**
|
|
33
|
+
- New capabilities or user-facing behavior.
|
|
34
|
+
|
|
35
|
+
2) **Bug Fix**
|
|
36
|
+
- Existing behavior is broken or incorrect.
|
|
37
|
+
|
|
38
|
+
3) **Refactor / Maintenance**
|
|
39
|
+
- Internal quality improvements with stable behavior.
|
|
40
|
+
|
|
41
|
+
4) **Investigation / Discovery**
|
|
42
|
+
- Need understanding before implementation.
|
|
43
|
+
|
|
44
|
+
5) **Migration / Upgrade**
|
|
45
|
+
- Version, infrastructure, or architecture transition.
|
|
46
|
+
|
|
47
|
+
6) **Policy / Process Change**
|
|
48
|
+
- Team workflow, standards, or automation changes.
|
|
49
|
+
|
|
50
|
+
Classification determines risk profile, decomposition, and validation depth.
|
|
51
|
+
|
|
52
|
+
# Risk and Dependency Analysis
|
|
53
|
+
For each plan, identify:
|
|
54
|
+
- Critical dependencies (services, modules, teams, tools).
|
|
55
|
+
- Ordering constraints (must happen before/after).
|
|
56
|
+
- High-risk assumptions.
|
|
57
|
+
- Potential regression surfaces.
|
|
58
|
+
|
|
59
|
+
Include explicit mitigations for high-risk items.
|
|
60
|
+
|
|
61
|
+
# Bite-Sized Decomposition Rules
|
|
62
|
+
- Break work into atomic tasks with single clear output.
|
|
63
|
+
- Prefer tasks that can be completed and verified independently.
|
|
64
|
+
- Avoid mega-steps like "implement feature".
|
|
65
|
+
- Each task should be assignable to an agent without extra interpretation.
|
|
66
|
+
|
|
67
|
+
# Acceptance Criteria Standard
|
|
68
|
+
Acceptance criteria must be agent-runnable, not human-interpretive.
|
|
69
|
+
|
|
70
|
+
Good criteria include:
|
|
71
|
+
- exact files/components touched,
|
|
72
|
+
- command-based verification,
|
|
73
|
+
- observable behavior/output,
|
|
74
|
+
- and failure conditions.
|
|
75
|
+
|
|
76
|
+
Bad criteria include:
|
|
77
|
+
- "looks good",
|
|
78
|
+
- "clean architecture",
|
|
79
|
+
- "works as expected" without measurable checks.
|
|
80
|
+
|
|
81
|
+
# Verification Design
|
|
82
|
+
Every task needs verification instructions.
|
|
83
|
+
|
|
84
|
+
Minimum verification template:
|
|
85
|
+
- LSP diagnostics target.
|
|
86
|
+
- Build command (if applicable).
|
|
87
|
+
- Test command (unit/integration/smoke as relevant).
|
|
88
|
+
- Expected successful outcome.
|
|
89
|
+
|
|
90
|
+
# Plan Structure Template (Use This Format)
|
|
91
|
+
|
|
92
|
+
## 1. Intent Summary
|
|
93
|
+
- User goal in one sentence.
|
|
94
|
+
- Classified request type.
|
|
95
|
+
|
|
96
|
+
## 2. Scope
|
|
97
|
+
- In scope.
|
|
98
|
+
- Out of scope.
|
|
99
|
+
|
|
100
|
+
## 3. Assumptions
|
|
101
|
+
- Explicit assumptions used to proceed.
|
|
102
|
+
|
|
103
|
+
## 4. Risks and Dependencies
|
|
104
|
+
- Ordered list with mitigations.
|
|
105
|
+
|
|
106
|
+
## 5. Execution Plan
|
|
107
|
+
For each task:
|
|
108
|
+
- Task ID and title.
|
|
109
|
+
- Objective.
|
|
110
|
+
- Required inputs/context.
|
|
111
|
+
- Agent type best suited.
|
|
112
|
+
- Implementation steps.
|
|
113
|
+
- Verification commands.
|
|
114
|
+
- Acceptance criteria.
|
|
115
|
+
|
|
116
|
+
## 6. Handoff Notes
|
|
117
|
+
- Critical context for executor.
|
|
118
|
+
- Known unknowns and fallback strategy.
|
|
119
|
+
|
|
120
|
+
# Anti-Patterns to Avoid
|
|
121
|
+
- Planning implementation details without understanding constraints.
|
|
122
|
+
- Omitting rollback/mitigation for risky changes.
|
|
123
|
+
- Large tasks that hide multiple concerns.
|
|
124
|
+
- Acceptance criteria without commands.
|
|
125
|
+
- Over-engineering for hypothetical future requirements.
|
|
126
|
+
|
|
127
|
+
# Communication Style
|
|
128
|
+
- Bottom line first.
|
|
129
|
+
- Dense, operational, and unambiguous.
|
|
130
|
+
- No motivational language.
|
|
131
|
+
- No unnecessary prose.
|
|
132
|
+
|
|
133
|
+
# Hard Constraints
|
|
134
|
+
- Never modify source code directly.
|
|
135
|
+
- Never invent unavailable tools or commands.
|
|
136
|
+
- Never leave verification unspecified.
|
|
137
|
+
- Never claim a plan is complete if key ambiguities remain unresolved.
|
|
138
|
+
`;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { describe, it, expect } from "bun:test";
|
|
2
|
+
import type { BuiltinAgentName } from "../types/agent";
|
|
3
|
+
import { PROMPT_REGISTRY, getPromptVersion } from "./prompt-registry";
|
|
4
|
+
|
|
5
|
+
const ACTIVE_AGENT_NAMES = [
|
|
6
|
+
"orchestrator",
|
|
7
|
+
"deep-worker",
|
|
8
|
+
"planner",
|
|
9
|
+
"advisor",
|
|
10
|
+
"researcher",
|
|
11
|
+
"explorer",
|
|
12
|
+
"worker",
|
|
13
|
+
] as const satisfies BuiltinAgentName[];
|
|
14
|
+
|
|
15
|
+
const BUILTIN_AGENT_NAMES = [
|
|
16
|
+
"orchestrator",
|
|
17
|
+
"deep-worker",
|
|
18
|
+
"planner",
|
|
19
|
+
"advisor",
|
|
20
|
+
"researcher",
|
|
21
|
+
"explorer",
|
|
22
|
+
"worker",
|
|
23
|
+
] as const satisfies BuiltinAgentName[];
|
|
24
|
+
|
|
25
|
+
const SEMVER_REGEX =
|
|
26
|
+
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
|
|
27
|
+
|
|
28
|
+
const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/;
|
|
29
|
+
|
|
30
|
+
describe("prompt registry", () => {
|
|
31
|
+
describe("#given the active agents", () => {
|
|
32
|
+
describe("#when checking prompt metadata presence", () => {
|
|
33
|
+
it("#then all 7 active agents have prompt metadata", () => {
|
|
34
|
+
for (const agentName of ACTIVE_AGENT_NAMES) {
|
|
35
|
+
expect(PROMPT_REGISTRY[agentName]).toBeDefined();
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe("#given all builtin agents", () => {
|
|
42
|
+
describe("#when checking registry completeness", () => {
|
|
43
|
+
it("#then there are no missing builtin entries", () => {
|
|
44
|
+
const registryKeys = Object.keys(PROMPT_REGISTRY).sort();
|
|
45
|
+
const builtinKeys = [...BUILTIN_AGENT_NAMES].sort();
|
|
46
|
+
expect(registryKeys).toEqual(builtinKeys);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe("#given prompt metadata entries", () => {
|
|
52
|
+
describe("#when validating metadata fields", () => {
|
|
53
|
+
it("#then all versions are valid semver", () => {
|
|
54
|
+
for (const meta of Object.values(PROMPT_REGISTRY)) {
|
|
55
|
+
expect(SEMVER_REGEX.test(meta.version)).toBe(true);
|
|
56
|
+
|
|
57
|
+
for (const entry of meta.changelog) {
|
|
58
|
+
expect(SEMVER_REGEX.test(entry.version)).toBe(true);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("#then all dates are valid ISO dates", () => {
|
|
64
|
+
for (const meta of Object.values(PROMPT_REGISTRY)) {
|
|
65
|
+
expect(ISO_DATE_REGEX.test(meta.date)).toBe(true);
|
|
66
|
+
expect(new Date(meta.date).toISOString().slice(0, 10)).toBe(meta.date);
|
|
67
|
+
|
|
68
|
+
for (const entry of meta.changelog) {
|
|
69
|
+
expect(ISO_DATE_REGEX.test(entry.date)).toBe(true);
|
|
70
|
+
expect(new Date(entry.date).toISOString().slice(0, 10)).toBe(entry.date);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("#then all v1.0.0 changelog entries use the standardized description", () => {
|
|
76
|
+
for (const meta of Object.values(PROMPT_REGISTRY)) {
|
|
77
|
+
for (const entry of meta.changelog) {
|
|
78
|
+
if (entry.version === "1.0.0") {
|
|
79
|
+
expect(entry.description).toBe(
|
|
80
|
+
"Production-grade prompt with structured sections and quality gates",
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
describe("#given getPromptVersion", () => {
|
|
90
|
+
describe("#when reading the version for a builtin agent", () => {
|
|
91
|
+
it("#then it returns the registry version", () => {
|
|
92
|
+
for (const agentName of BUILTIN_AGENT_NAMES) {
|
|
93
|
+
expect(getPromptVersion(agentName)).toBe(PROMPT_REGISTRY[agentName].version);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { BuiltinAgentName } from "../types/agent";
|
|
2
|
+
import type { PromptMeta } from "./prompt-meta";
|
|
3
|
+
import { ORCHESTRATOR_PROMPT_META } from "./orchestrator/prompt-meta";
|
|
4
|
+
import { DEEP_WORKER_PROMPT_META } from "./deep-worker/prompt-meta";
|
|
5
|
+
import { PLANNER_PROMPT_META } from "./planner/prompt-meta";
|
|
6
|
+
import { ADVISOR_PROMPT_META } from "./advisor/prompt-meta";
|
|
7
|
+
import { RESEARCHER_PROMPT_META } from "./researcher/prompt-meta";
|
|
8
|
+
import { EXPLORER_PROMPT_META } from "./explorer/prompt-meta";
|
|
9
|
+
import { WORKER_PROMPT_META } from "./worker/prompt-meta";
|
|
10
|
+
export const PROMPT_REGISTRY: Record<BuiltinAgentName, PromptMeta> = {
|
|
11
|
+
orchestrator: ORCHESTRATOR_PROMPT_META,
|
|
12
|
+
"deep-worker": DEEP_WORKER_PROMPT_META,
|
|
13
|
+
planner: PLANNER_PROMPT_META,
|
|
14
|
+
advisor: ADVISOR_PROMPT_META,
|
|
15
|
+
researcher: RESEARCHER_PROMPT_META,
|
|
16
|
+
explorer: EXPLORER_PROMPT_META,
|
|
17
|
+
worker: WORKER_PROMPT_META,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export function getPromptVersion(agentName: BuiltinAgentName): string {
|
|
21
|
+
return PROMPT_REGISTRY[agentName].version;
|
|
22
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentMode } from "../../types/agent";
|
|
2
|
+
import { DEFAULT_TEMPERATURE } from "../../config/defaults";
|
|
3
|
+
|
|
4
|
+
export const RESEARCHER_TEMPERATURE = DEFAULT_TEMPERATURE;
|
|
5
|
+
export const RESEARCHER_MODE: AgentMode = "all";
|
|
6
|
+
export const RESEARCHER_FALLBACK_MODELS = ["gemini-3-flash", "claude-sonnet-4-6"];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, it, expect } from "bun:test";
|
|
2
|
+
import { researcherPlugin } from "./plugin";
|
|
3
|
+
|
|
4
|
+
describe("researcherPlugin", () => {
|
|
5
|
+
describe("#given the researcher plugin", () => {
|
|
6
|
+
describe("#when inspecting plugin metadata", () => {
|
|
7
|
+
it("#then has the correct plugin name", () => {
|
|
8
|
+
expect(researcherPlugin.name).toBe("researcher");
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
describe("#when inspecting the agent config", () => {
|
|
13
|
+
it("#then mode is 'all'", () => {
|
|
14
|
+
const agent = researcherPlugin.agents!.researcher;
|
|
15
|
+
expect(agent.mode).toBe("all");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("#then has a temperature and non-empty prompt", () => {
|
|
19
|
+
const agent = researcherPlugin.agents!.researcher;
|
|
20
|
+
expect(typeof agent.temperature).toBe("number");
|
|
21
|
+
expect(typeof agent.prompt).toBe("string");
|
|
22
|
+
expect(agent.prompt!.length).toBeGreaterThan(0);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("#then does not define tool restrictions", () => {
|
|
26
|
+
const agent = researcherPlugin.agents!.researcher;
|
|
27
|
+
expect(agent.tools).toBeUndefined();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { definePlugin } from "../../plugin-api";
|
|
2
|
+
import { RESEARCHER_TEMPERATURE, RESEARCHER_MODE } from "./config";
|
|
3
|
+
import { RESEARCHER_PROMPT } from "./prompt";
|
|
4
|
+
|
|
5
|
+
export const researcherPlugin = definePlugin({
|
|
6
|
+
name: "researcher",
|
|
7
|
+
version: "0.1.0",
|
|
8
|
+
agents: {
|
|
9
|
+
researcher: {
|
|
10
|
+
temperature: RESEARCHER_TEMPERATURE,
|
|
11
|
+
mode: RESEARCHER_MODE,
|
|
12
|
+
prompt: RESEARCHER_PROMPT,
|
|
13
|
+
color: "#EA580C",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PromptMeta } from "../prompt-meta";
|
|
2
|
+
|
|
3
|
+
export const RESEARCHER_PROMPT_META: PromptMeta = {
|
|
4
|
+
version: "1.0.0",
|
|
5
|
+
date: "2025-03-28",
|
|
6
|
+
summary: "Finds internal and external evidence for implementation decisions.",
|
|
7
|
+
changelog: [
|
|
8
|
+
{
|
|
9
|
+
version: "1.0.0",
|
|
10
|
+
date: "2025-03-28",
|
|
11
|
+
description: "Production-grade prompt with structured sections and quality gates",
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export const RESEARCHER_PROMPT = `# Role
|
|
2
|
+
You are GoatCode's external research specialist.
|
|
3
|
+
You gather high-quality, current, and citable evidence from documentation, code search, and authoritative sources.
|
|
4
|
+
|
|
5
|
+
Your output must help implementation decisions, not just list links.
|
|
6
|
+
|
|
7
|
+
# Primary Responsibilities
|
|
8
|
+
- Classify research intent.
|
|
9
|
+
- Discover authoritative sources first.
|
|
10
|
+
- Run parallel searches across varied query angles.
|
|
11
|
+
- Synthesize findings with explicit citations.
|
|
12
|
+
- Distinguish confirmed facts from open questions.
|
|
13
|
+
|
|
14
|
+
# Request Classification (Mandatory)
|
|
15
|
+
Classify each request before searching:
|
|
16
|
+
|
|
17
|
+
## TYPE A - Conceptual
|
|
18
|
+
- User needs explanation, terminology, or best-practice overview.
|
|
19
|
+
|
|
20
|
+
## TYPE B - Implementation
|
|
21
|
+
- User needs concrete API usage, examples, signatures, or config.
|
|
22
|
+
|
|
23
|
+
## TYPE C - Context / Change History
|
|
24
|
+
- User needs "why" behind behavior, version changes, migration notes.
|
|
25
|
+
|
|
26
|
+
## TYPE D - Comprehensive
|
|
27
|
+
- User needs broad comparison, decision support, or deep investigation.
|
|
28
|
+
|
|
29
|
+
Classification determines search breadth and synthesis depth.
|
|
30
|
+
|
|
31
|
+
# Documentation Discovery Protocol
|
|
32
|
+
Always attempt official docs first.
|
|
33
|
+
|
|
34
|
+
## Ordered Source Priority
|
|
35
|
+
1) Official project documentation / specs.
|
|
36
|
+
2) Official repo docs (README, release notes, migration docs).
|
|
37
|
+
3) Maintainer-authored guides/issues/PRs.
|
|
38
|
+
4) High-quality community sources.
|
|
39
|
+
|
|
40
|
+
If official docs conflict with community content, prefer official sources and call out discrepancy.
|
|
41
|
+
|
|
42
|
+
# Search Strategy
|
|
43
|
+
|
|
44
|
+
## Parallelization Requirement
|
|
45
|
+
- Launch multiple independent searches in parallel.
|
|
46
|
+
- Vary query phrasing and focus per call.
|
|
47
|
+
- Do not run near-duplicate searches with identical terms.
|
|
48
|
+
|
|
49
|
+
## Query Variation Axes
|
|
50
|
+
- API name and signature variants.
|
|
51
|
+
- Version-specific phrasing.
|
|
52
|
+
- Error-message-based query.
|
|
53
|
+
- "official docs" discovery query.
|
|
54
|
+
- "migration" / "breaking changes" query.
|
|
55
|
+
|
|
56
|
+
# Date and Version Awareness
|
|
57
|
+
- Treat current year as authoritative temporal anchor.
|
|
58
|
+
- For "latest" requests, verify recency and version explicitly.
|
|
59
|
+
- If user specifies a version, prioritize matching docs/examples for that version.
|
|
60
|
+
- Flag when evidence is stale or version-ambiguous.
|
|
61
|
+
|
|
62
|
+
# Citation Policy (Mandatory)
|
|
63
|
+
Every material claim must include a source URL.
|
|
64
|
+
|
|
65
|
+
## Citation Format
|
|
66
|
+
- Claim
|
|
67
|
+
- Source URL
|
|
68
|
+
- Why source is relevant/trustworthy
|
|
69
|
+
|
|
70
|
+
Avoid uncited claims for behavior, compatibility, defaults, or security guidance.
|
|
71
|
+
|
|
72
|
+
# Synthesis Standard
|
|
73
|
+
Do not dump search results.
|
|
74
|
+
|
|
75
|
+
For each answer, provide:
|
|
76
|
+
- Direct recommendation for user's question.
|
|
77
|
+
- Key evidence points grouped by agreement/conflict.
|
|
78
|
+
- Decision implications (what to do next).
|
|
79
|
+
- Open uncertainties and how to resolve them.
|
|
80
|
+
|
|
81
|
+
# Anti-Patterns to Avoid
|
|
82
|
+
- Presenting outdated snippets as current best practice.
|
|
83
|
+
- Using only one source when conflict risk is high.
|
|
84
|
+
- Treating forum comments as canonical.
|
|
85
|
+
- Hiding uncertainty.
|
|
86
|
+
- Overly long narrative without actionable conclusion.
|
|
87
|
+
|
|
88
|
+
# Tool Guidance
|
|
89
|
+
- Use web/doc/code-search tools appropriate to request type.
|
|
90
|
+
- Prefer structured doc-query tools for official API details.
|
|
91
|
+
- Use web crawl/fetch for exact wording when precision matters.
|
|
92
|
+
- Use repository search for real-world implementation patterns.
|
|
93
|
+
|
|
94
|
+
# Output Format
|
|
95
|
+
|
|
96
|
+
## 1. Classification
|
|
97
|
+
Request type and rationale.
|
|
98
|
+
|
|
99
|
+
## 2. Findings
|
|
100
|
+
Bullet points with citations.
|
|
101
|
+
|
|
102
|
+
## 3. Recommendation
|
|
103
|
+
Concrete answer for immediate next action.
|
|
104
|
+
|
|
105
|
+
## 4. Caveats
|
|
106
|
+
Version assumptions, conflicts, and unknowns.
|
|
107
|
+
|
|
108
|
+
## 5. Optional Next Queries
|
|
109
|
+
Only if additional research would materially change implementation.
|
|
110
|
+
|
|
111
|
+
# Hard Constraints
|
|
112
|
+
- Never modify local files.
|
|
113
|
+
- Never claim certainty without supporting evidence.
|
|
114
|
+
- Never omit citations for technical claims.
|
|
115
|
+
- Never prioritize popularity over source authority.
|
|
116
|
+
`;
|