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,84 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const TaskStatusSchema: z.ZodEnum<{
|
|
3
|
+
completed: "completed";
|
|
4
|
+
cancelled: "cancelled";
|
|
5
|
+
pending: "pending";
|
|
6
|
+
in_progress: "in_progress";
|
|
7
|
+
}>;
|
|
8
|
+
export type TaskStatus = z.infer<typeof TaskStatusSchema>;
|
|
9
|
+
export declare const TaskPrioritySchema: z.ZodEnum<{
|
|
10
|
+
high: "high";
|
|
11
|
+
medium: "medium";
|
|
12
|
+
low: "low";
|
|
13
|
+
}>;
|
|
14
|
+
export type TaskPriority = z.infer<typeof TaskPrioritySchema>;
|
|
15
|
+
export declare const TaskSchema: z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
subject: z.ZodString;
|
|
18
|
+
status: z.ZodEnum<{
|
|
19
|
+
completed: "completed";
|
|
20
|
+
cancelled: "cancelled";
|
|
21
|
+
pending: "pending";
|
|
22
|
+
in_progress: "in_progress";
|
|
23
|
+
}>;
|
|
24
|
+
priority: z.ZodEnum<{
|
|
25
|
+
high: "high";
|
|
26
|
+
medium: "medium";
|
|
27
|
+
low: "low";
|
|
28
|
+
}>;
|
|
29
|
+
content: z.ZodOptional<z.ZodString>;
|
|
30
|
+
createdAt: z.ZodNumber;
|
|
31
|
+
updatedAt: z.ZodNumber;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
export type Task = z.infer<typeof TaskSchema>;
|
|
34
|
+
export declare const TaskCreateInputSchema: z.ZodObject<{
|
|
35
|
+
subject: z.ZodString;
|
|
36
|
+
content: z.ZodOptional<z.ZodString>;
|
|
37
|
+
priority: z.ZodDefault<z.ZodEnum<{
|
|
38
|
+
high: "high";
|
|
39
|
+
medium: "medium";
|
|
40
|
+
low: "low";
|
|
41
|
+
}>>;
|
|
42
|
+
status: z.ZodDefault<z.ZodEnum<{
|
|
43
|
+
completed: "completed";
|
|
44
|
+
cancelled: "cancelled";
|
|
45
|
+
pending: "pending";
|
|
46
|
+
in_progress: "in_progress";
|
|
47
|
+
}>>;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
export type TaskCreateInput = z.infer<typeof TaskCreateInputSchema>;
|
|
50
|
+
export declare const TaskListInputSchema: z.ZodObject<{
|
|
51
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
52
|
+
completed: "completed";
|
|
53
|
+
cancelled: "cancelled";
|
|
54
|
+
pending: "pending";
|
|
55
|
+
in_progress: "in_progress";
|
|
56
|
+
}>>;
|
|
57
|
+
priority: z.ZodOptional<z.ZodEnum<{
|
|
58
|
+
high: "high";
|
|
59
|
+
medium: "medium";
|
|
60
|
+
low: "low";
|
|
61
|
+
}>>;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
export type TaskListInput = z.infer<typeof TaskListInputSchema>;
|
|
64
|
+
export declare const TaskGetInputSchema: z.ZodObject<{
|
|
65
|
+
id: z.ZodString;
|
|
66
|
+
}, z.core.$strip>;
|
|
67
|
+
export type TaskGetInput = z.infer<typeof TaskGetInputSchema>;
|
|
68
|
+
export declare const TaskUpdateInputSchema: z.ZodObject<{
|
|
69
|
+
id: z.ZodString;
|
|
70
|
+
subject: z.ZodOptional<z.ZodString>;
|
|
71
|
+
content: z.ZodOptional<z.ZodString>;
|
|
72
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
73
|
+
completed: "completed";
|
|
74
|
+
cancelled: "cancelled";
|
|
75
|
+
pending: "pending";
|
|
76
|
+
in_progress: "in_progress";
|
|
77
|
+
}>>;
|
|
78
|
+
priority: z.ZodOptional<z.ZodEnum<{
|
|
79
|
+
high: "high";
|
|
80
|
+
medium: "medium";
|
|
81
|
+
low: "low";
|
|
82
|
+
}>>;
|
|
83
|
+
}, z.core.$strip>;
|
|
84
|
+
export type TaskUpdateInput = z.infer<typeof TaskUpdateInputSchema>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const taskUpdatePlugin: import("../../../plugin-api").PluginDefinition;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ToolDefinition } from "@opencode-ai/plugin";
|
|
2
|
+
export type ToolBuilderInput<TArgs extends ToolDefinition["args"] = ToolDefinition["args"], TExecuteArgs = Record<string, unknown>> = {
|
|
3
|
+
description: string;
|
|
4
|
+
args: TArgs;
|
|
5
|
+
execute: (args: TExecuteArgs, context: Parameters<ToolDefinition["execute"]>[1]) => Promise<string>;
|
|
6
|
+
};
|
|
7
|
+
export declare function buildTool<TArgs extends ToolDefinition["args"] = ToolDefinition["args"], TExecuteArgs = Record<string, unknown>>(input: ToolBuilderInput<TArgs, TExecuteArgs>): ToolDefinition;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { AgentConfig } from "@opencode-ai/sdk";
|
|
2
|
+
/** Re-export for convenience. */
|
|
3
|
+
export type { AgentConfig };
|
|
4
|
+
/**
|
|
5
|
+
* Agent execution mode.
|
|
6
|
+
* - "primary": Respects the user-selected UI model.
|
|
7
|
+
* - "subagent": Uses its own fallback chain and ignores UI selection.
|
|
8
|
+
* - "all": Available in both contexts.
|
|
9
|
+
*/
|
|
10
|
+
export type AgentMode = "primary" | "subagent" | "all";
|
|
11
|
+
/**
|
|
12
|
+
* Factory function that creates an AgentConfig given a model string.
|
|
13
|
+
* Includes a static mode property for pre-instantiation access.
|
|
14
|
+
*/
|
|
15
|
+
export type AgentFactory = ((model: string) => AgentConfig) & {
|
|
16
|
+
readonly mode: AgentMode;
|
|
17
|
+
};
|
|
18
|
+
/** All built-in GoatCode agent names. */
|
|
19
|
+
export type BuiltinAgentName = "orchestrator" | "deep-worker" | "planner" | "advisor" | "researcher" | "explorer" | "worker";
|
|
20
|
+
/** Agent override config for user customization. */
|
|
21
|
+
export interface AgentOverrideConfig {
|
|
22
|
+
/** Override model identifier. */
|
|
23
|
+
model?: string;
|
|
24
|
+
/** Override model variant. */
|
|
25
|
+
variant?: string;
|
|
26
|
+
/** Override sampling temperature. */
|
|
27
|
+
temperature?: number;
|
|
28
|
+
/** Override nucleus sampling value. */
|
|
29
|
+
top_p?: number;
|
|
30
|
+
/** Additional prompt text appended to the system prompt. */
|
|
31
|
+
prompt_append?: string;
|
|
32
|
+
/** Tool names explicitly denied for this agent. */
|
|
33
|
+
denied_tools?: string[];
|
|
34
|
+
/** Whether this agent is disabled. */
|
|
35
|
+
disable?: boolean;
|
|
36
|
+
/** Custom fallback model chain. */
|
|
37
|
+
fallback_models?: string | string[];
|
|
38
|
+
}
|
|
39
|
+
/** Agent contribution from a micro-plugin. */
|
|
40
|
+
export type PluginAgentContribution = AgentConfig;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** All built-in GoatCode category names. */
|
|
2
|
+
export type BuiltinCategoryName = "visual-engineering" | "ultrabrain" | "deep" | "artistry" | "quick" | "unspecified-low" | "unspecified-high" | "writing";
|
|
3
|
+
/** Category configuration. */
|
|
4
|
+
export interface CategoryConfig {
|
|
5
|
+
/** Model to use for this category. */
|
|
6
|
+
model?: string;
|
|
7
|
+
/** Model variant (for example: high, max, xhigh). */
|
|
8
|
+
variant?: string;
|
|
9
|
+
/** Human-readable description. */
|
|
10
|
+
description?: string;
|
|
11
|
+
/** Additional system prompt text appended for this category. */
|
|
12
|
+
prompt_append?: string;
|
|
13
|
+
}
|
|
14
|
+
/** Available category with resolved metadata. */
|
|
15
|
+
export interface AvailableCategory {
|
|
16
|
+
/** Category name. */
|
|
17
|
+
name: string;
|
|
18
|
+
/** User-facing category description. */
|
|
19
|
+
description: string;
|
|
20
|
+
/** Resolved model for this category, if available. */
|
|
21
|
+
model?: string;
|
|
22
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AgentOverrideConfig, BuiltinAgentName } from "./agent";
|
|
2
|
+
import type { BuiltinCategoryName, CategoryConfig } from "./category";
|
|
3
|
+
/** Partial agent overrides where each built-in agent can be partially overridden. */
|
|
4
|
+
export type AgentOverrides = Partial<Record<BuiltinAgentName, AgentOverrideConfig>>;
|
|
5
|
+
/** Partial category overrides for built-in categories. */
|
|
6
|
+
export type CategoryOverrides = Partial<Record<BuiltinCategoryName, CategoryConfig>>;
|
|
7
|
+
/**
|
|
8
|
+
* Top-level GoatCode configuration shape.
|
|
9
|
+
* Runtime validation and defaults are handled by the config schema layer.
|
|
10
|
+
*/
|
|
11
|
+
export interface GoatCodeConfig {
|
|
12
|
+
agents?: AgentOverrides;
|
|
13
|
+
categories?: CategoryOverrides;
|
|
14
|
+
default_temperature?: number;
|
|
15
|
+
default_provider?: string;
|
|
16
|
+
provider_priority?: string[];
|
|
17
|
+
disabled_agents?: string[];
|
|
18
|
+
disabled_hooks?: string[];
|
|
19
|
+
disabled_tools?: string[];
|
|
20
|
+
disabled_skills?: string[];
|
|
21
|
+
auto_update?: boolean;
|
|
22
|
+
plugins?: string[];
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Plugin } from "@opencode-ai/plugin";
|
|
2
|
+
/** All OpenCode hook event names — single source of truth. */
|
|
3
|
+
export declare const HOOK_EVENT_NAMES: readonly ["tool", "config", "chat.message", "chat.params", "chat.headers", "event", "tool.execute.before", "tool.execute.after", "experimental.chat.messages.transform", "experimental.chat.system.transform", "tool.definition", "permission.ask", "command.execute.before", "shell.env", "experimental.session.compacting", "experimental.text.complete"];
|
|
4
|
+
/** All OpenCode hook event names. */
|
|
5
|
+
export type HookEventName = (typeof HOOK_EVENT_NAMES)[number];
|
|
6
|
+
/** Generic hook handler signature fallback. */
|
|
7
|
+
export type HookHandler = (input: unknown, output: unknown) => Promise<void> | void;
|
|
8
|
+
/** Raw plugin instance shape returned to OpenCode. */
|
|
9
|
+
type OpenCodePluginInstance = Awaited<ReturnType<Plugin>>;
|
|
10
|
+
/** Resolves the concrete OpenCode hook handler type for a hook name. */
|
|
11
|
+
type HookHandlerFor<Name extends HookEventName> = NonNullable<OpenCodePluginInstance[Name]> extends (...args: infer Args) => infer Return ? (...args: Args) => Return : HookHandler;
|
|
12
|
+
/** Hook contributions mapped by event name. */
|
|
13
|
+
export type PluginHookContributions = {
|
|
14
|
+
[Name in HookEventName]: HookHandlerFor<Name>;
|
|
15
|
+
};
|
|
16
|
+
/** Priority for hook execution ordering (lower values run first). */
|
|
17
|
+
export type HookPriority = number;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Agent types and configurations. */
|
|
2
|
+
export * from "./agent";
|
|
3
|
+
/** Category types and configurations. */
|
|
4
|
+
export * from "./category";
|
|
5
|
+
/** Configuration types for GoatCode. */
|
|
6
|
+
export * from "./config";
|
|
7
|
+
/** Hook types and contributions. */
|
|
8
|
+
export * from "./hook";
|
|
9
|
+
/** Plugin types and registry interfaces. */
|
|
10
|
+
export * from "./plugin";
|
|
11
|
+
/** Tool types and definitions. */
|
|
12
|
+
export * from "./tool";
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Plugin } from "@opencode-ai/plugin";
|
|
2
|
+
import type { PluginAgentContribution } from "./agent";
|
|
3
|
+
import type { PluginHookContributions } from "./hook";
|
|
4
|
+
import type { PluginToolContribution } from "./tool";
|
|
5
|
+
/** The raw context passed to the plugin by OpenCode. */
|
|
6
|
+
export type OpenCodeContext = Parameters<Plugin>[0];
|
|
7
|
+
/** The raw plugin instance returned to OpenCode. */
|
|
8
|
+
export type OpenCodePluginInstance = Awaited<ReturnType<Plugin>>;
|
|
9
|
+
/** Generic plugin hook handler fallback type. */
|
|
10
|
+
export type PluginHookHandler = (...args: unknown[]) => Promise<void> | void;
|
|
11
|
+
/**
|
|
12
|
+
* A GoatCode micro-plugin definition.
|
|
13
|
+
* This is the contract used by internal and external plugins.
|
|
14
|
+
*/
|
|
15
|
+
export interface PluginDefinition {
|
|
16
|
+
/** Unique plugin name (kebab-case). */
|
|
17
|
+
readonly name: string;
|
|
18
|
+
/** Semantic version string. */
|
|
19
|
+
readonly version?: string;
|
|
20
|
+
/** Plugin names this depends on (must be registered first). */
|
|
21
|
+
readonly dependencies?: readonly string[];
|
|
22
|
+
/** Hook contributions keyed by OpenCode hook event name. */
|
|
23
|
+
readonly hooks?: Partial<PluginHookContributions>;
|
|
24
|
+
/** Tool contributions keyed by tool name. */
|
|
25
|
+
readonly tools?: Record<string, PluginToolContribution>;
|
|
26
|
+
/** Agent contributions keyed by agent name. */
|
|
27
|
+
readonly agents?: Record<string, PluginAgentContribution>;
|
|
28
|
+
/** Optional setup executed during registry initialization. */
|
|
29
|
+
readonly setup?: (ctx: OpenCodeContext) => Promise<void> | void;
|
|
30
|
+
/** Optional teardown executed when plugin registry is disposed. */
|
|
31
|
+
readonly teardown?: () => Promise<void> | void;
|
|
32
|
+
}
|
|
33
|
+
/** Intermediate aggregated plugin output produced by the registry. */
|
|
34
|
+
export interface AggregatedPlugins {
|
|
35
|
+
/** All hook contributions keyed by hook name in execution order. */
|
|
36
|
+
hooks: Map<string, PluginHookHandler[]>;
|
|
37
|
+
/** All tool contributions merged into one record. */
|
|
38
|
+
tools: Record<string, PluginToolContribution>;
|
|
39
|
+
/** All agent contributions merged into one record. */
|
|
40
|
+
agents: Record<string, PluginAgentContribution>;
|
|
41
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ToolDefinition } from "@opencode-ai/plugin";
|
|
2
|
+
/** Re-export for convenience. */
|
|
3
|
+
export type { ToolDefinition };
|
|
4
|
+
/** A tool contribution from a micro-plugin. */
|
|
5
|
+
export type PluginToolContribution = ToolDefinition;
|
|
6
|
+
/** Record of tools keyed by name. */
|
|
7
|
+
export type ToolsRecord = Record<string, ToolDefinition>;
|
package/eval/README.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# GoatCode Evaluation Framework
|
|
2
|
+
|
|
3
|
+
This directory contains the evaluation framework for GoatCode, including A/B testing and ablation studies to measure the impact of the plugin on agent performance.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The evaluation framework provides two main evaluation modes:
|
|
8
|
+
|
|
9
|
+
1. **A/B Evaluation** (`test:eval`): Compares GoatCode-enabled agents against a baseline (no plugin) on identical tasks. This measures the overall impact of the plugin on task completion, tool accuracy, and planning quality.
|
|
10
|
+
|
|
11
|
+
2. **Ablation Study** (`test:ablation`): Disables specific hook groups (recovery, quality, context) to measure the individual impact of each hook category on agent performance.
|
|
12
|
+
|
|
13
|
+
## Prerequisites
|
|
14
|
+
|
|
15
|
+
- Node.js 20.20 or later
|
|
16
|
+
- `npx promptfoo` available (installed via `npm install -D promptfoo`)
|
|
17
|
+
- OpenCode server (optional; evals fall back to mock responses if unavailable)
|
|
18
|
+
|
|
19
|
+
## Running Evaluations
|
|
20
|
+
|
|
21
|
+
### A/B Evaluation
|
|
22
|
+
|
|
23
|
+
Run the A/B comparison between GoatCode-enabled and baseline agents:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
bun run test:eval
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
This runs the config in `promptfooconfig.yaml` and compares:
|
|
30
|
+
- **with-goatcode**: Agent with the GoatCode plugin enabled
|
|
31
|
+
- **baseline**: Agent without the plugin
|
|
32
|
+
|
|
33
|
+
### Ablation Study
|
|
34
|
+
|
|
35
|
+
Run the ablation study to measure hook group impact:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
bun run test:ablation
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
This runs the config in `ablation-config.yaml` and compares:
|
|
42
|
+
- **full**: All hooks enabled (baseline for ablation)
|
|
43
|
+
- **no-recovery-hooks**: Recovery hooks disabled (edit-error, json-error, session-recovery, context-window-limit, error-diagnostics)
|
|
44
|
+
- **no-quality-hooks**: Quality hooks disabled (comment-checker, write-file-guard, thinking-block-validator)
|
|
45
|
+
- **no-context-hooks**: Context hooks disabled (context-injector, compaction-context, phase-reminder)
|
|
46
|
+
|
|
47
|
+
### Direct Invocation
|
|
48
|
+
|
|
49
|
+
You can also run evals directly from the `eval/` directory:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
cd eval
|
|
53
|
+
npx promptfoo eval -c promptfooconfig.yaml
|
|
54
|
+
npx promptfoo eval -c ablation-config.yaml
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Interpreting Results
|
|
58
|
+
|
|
59
|
+
### Output Markers
|
|
60
|
+
|
|
61
|
+
- **[MOCK]**: The OpenCode server was not available, so the provider used mock responses. Results are informational only and do not reflect real agent behavior.
|
|
62
|
+
- **[PASS]**: The assertion passed (e.g., task completed, tool used correctly, plan generated).
|
|
63
|
+
- **[FAIL]**: The assertion failed (e.g., task incomplete, incorrect tool usage, no plan).
|
|
64
|
+
|
|
65
|
+
### Scores
|
|
66
|
+
|
|
67
|
+
Each test case is scored based on custom assertions:
|
|
68
|
+
|
|
69
|
+
- **task-completion.ts**: Measures whether the agent successfully completed the requested task.
|
|
70
|
+
- **tool-accuracy.ts**: Measures whether the agent used the correct tools and parameters.
|
|
71
|
+
- **ablation-scorer.ts**: Measures task completion and quality for ablation variants.
|
|
72
|
+
- **hook-impact.ts**: Measures the specific impact of disabled hook groups on code quality analysis.
|
|
73
|
+
|
|
74
|
+
Higher scores indicate better performance. Scores are aggregated across all test cases to produce an overall evaluation result.
|
|
75
|
+
|
|
76
|
+
### CI Behavior
|
|
77
|
+
|
|
78
|
+
These evaluations are **informational only** and do not block CI. They pass even when the OpenCode server is unavailable (falling back to mock responses). This allows evals to run in isolated CI environments without external dependencies.
|
|
79
|
+
|
|
80
|
+
## Adding New Scenarios
|
|
81
|
+
|
|
82
|
+
### Adding Test Cases to A/B Evaluation
|
|
83
|
+
|
|
84
|
+
Edit `promptfooconfig.yaml` and add a new test case under the `tests` section:
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
tests:
|
|
88
|
+
- vars:
|
|
89
|
+
task: "Your new task description here"
|
|
90
|
+
assert:
|
|
91
|
+
- type: javascript
|
|
92
|
+
value: "file://assertions/task-completion.ts"
|
|
93
|
+
threshold: 0.5
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The `task` variable is passed to both providers. You can reference custom assertions or use built-in assertion types like `contains`, `equals`, or `javascript`.
|
|
97
|
+
|
|
98
|
+
### Adding Test Cases to Ablation Study
|
|
99
|
+
|
|
100
|
+
Edit `ablation-config.yaml` and add a new test case under the `tests` section:
|
|
101
|
+
|
|
102
|
+
```yaml
|
|
103
|
+
tests:
|
|
104
|
+
- vars:
|
|
105
|
+
task: "Your new task description here"
|
|
106
|
+
assert:
|
|
107
|
+
- type: javascript
|
|
108
|
+
value: "file://assertions/ablation-scorer.ts"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The same task is run against all four provider variants (full, no-recovery-hooks, no-quality-hooks, no-context-hooks), allowing you to measure the impact of each hook group.
|
|
112
|
+
|
|
113
|
+
## Creating New Ablation Configs
|
|
114
|
+
|
|
115
|
+
To create a new ablation config that disables different hook groups:
|
|
116
|
+
|
|
117
|
+
1. Copy `ablation-config.yaml` to a new file (e.g., `ablation-custom-config.yaml`)
|
|
118
|
+
2. Modify the `disabledHooks` lists in each provider config:
|
|
119
|
+
|
|
120
|
+
```yaml
|
|
121
|
+
providers:
|
|
122
|
+
- id: file://providers/opencode-provider.ts
|
|
123
|
+
label: custom-variant
|
|
124
|
+
config:
|
|
125
|
+
enablePlugin: true
|
|
126
|
+
disabledHooks: ["hook-name-1", "hook-name-2"]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
3. Update the `test:ablation` script in `package.json` to point to your new config:
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
"test:ablation": "cd eval && npx promptfoo eval -c ablation-custom-config.yaml"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Available hooks are documented in the main [README.md](../README.md#hooks).
|
|
136
|
+
|
|
137
|
+
## File Structure
|
|
138
|
+
|
|
139
|
+
```text
|
|
140
|
+
eval/
|
|
141
|
+
├── promptfooconfig.yaml — A/B evaluation config (with-goatcode vs baseline)
|
|
142
|
+
├── ablation-config.yaml — Ablation study config (hook group impact)
|
|
143
|
+
├── README.md — This file
|
|
144
|
+
├── providers/
|
|
145
|
+
│ ├── opencode-provider.ts — Provider that calls the OpenCode server
|
|
146
|
+
│ └── opencode-baseline.ts — Baseline provider (no plugin)
|
|
147
|
+
├── assertions/
|
|
148
|
+
│ ├── task-completion.ts — Assertion: task completed successfully
|
|
149
|
+
│ ├── tool-accuracy.ts — Assertion: correct tool usage
|
|
150
|
+
│ ├── ablation-scorer.ts — Assertion: ablation study scoring
|
|
151
|
+
│ └── hook-impact.ts — Assertion: hook group impact measurement
|
|
152
|
+
└── spike/
|
|
153
|
+
└── config.yaml — Original feasibility spike (archived)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Notes
|
|
157
|
+
|
|
158
|
+
- All relative paths in YAML configs (e.g., `file://providers/...`) are resolved relative to the `eval/` directory. The `cd eval &&` prefix in the npm scripts ensures correct path resolution.
|
|
159
|
+
- Evals are designed to be environment-agnostic and work with or without a live OpenCode server.
|
|
160
|
+
- Results are stored in `.promptfoo/` (created by promptfoo) and can be viewed in the promptfoo UI.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
description: "GoatCode Ablation Study — Hook Group Impact Analysis"
|
|
2
|
+
|
|
3
|
+
providers:
|
|
4
|
+
- id: file://providers/opencode-provider.ts
|
|
5
|
+
label: full
|
|
6
|
+
config:
|
|
7
|
+
enablePlugin: true
|
|
8
|
+
disabledHooks: []
|
|
9
|
+
- id: file://providers/opencode-provider.ts
|
|
10
|
+
label: no-recovery-hooks
|
|
11
|
+
config:
|
|
12
|
+
enablePlugin: true
|
|
13
|
+
disabledHooks: ["edit-error", "json-error", "session-recovery", "context-window-limit", "error-diagnostics"]
|
|
14
|
+
- id: file://providers/opencode-provider.ts
|
|
15
|
+
label: no-quality-hooks
|
|
16
|
+
config:
|
|
17
|
+
enablePlugin: true
|
|
18
|
+
disabledHooks: ["comment-checker", "write-file-guard", "thinking-block-validator"]
|
|
19
|
+
- id: file://providers/opencode-provider.ts
|
|
20
|
+
label: no-context-hooks
|
|
21
|
+
config:
|
|
22
|
+
enablePlugin: true
|
|
23
|
+
disabledHooks: ["context-injector", "compaction-context", "phase-reminder"]
|
|
24
|
+
|
|
25
|
+
prompts:
|
|
26
|
+
- "{{task}}"
|
|
27
|
+
|
|
28
|
+
tests:
|
|
29
|
+
- vars:
|
|
30
|
+
task: "Find and fix the JSON parse error in the response handler"
|
|
31
|
+
assert:
|
|
32
|
+
- type: javascript
|
|
33
|
+
value: "file://assertions/ablation-scorer.ts"
|
|
34
|
+
- vars:
|
|
35
|
+
task: "Analyse code quality: check for empty catch blocks and unread files"
|
|
36
|
+
assert:
|
|
37
|
+
- type: javascript
|
|
38
|
+
value: "file://assertions/hook-impact.ts"
|
|
39
|
+
- vars:
|
|
40
|
+
task: "Summarise the current project phase using system context"
|
|
41
|
+
assert:
|
|
42
|
+
- type: javascript
|
|
43
|
+
value: "file://assertions/ablation-scorer.ts"
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// IMPORTANT: No bun:* imports — this file runs under Node.js via npx promptfoo eval
|
|
2
|
+
|
|
3
|
+
const QUALITY_INDICATORS = [
|
|
4
|
+
"fix",
|
|
5
|
+
"error",
|
|
6
|
+
"found",
|
|
7
|
+
"parse",
|
|
8
|
+
"json",
|
|
9
|
+
"handler",
|
|
10
|
+
"response",
|
|
11
|
+
"resolved",
|
|
12
|
+
"updated",
|
|
13
|
+
"corrected",
|
|
14
|
+
"phase",
|
|
15
|
+
"context",
|
|
16
|
+
"summary",
|
|
17
|
+
"project",
|
|
18
|
+
"current",
|
|
19
|
+
"plan",
|
|
20
|
+
"step",
|
|
21
|
+
"complete",
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
export default function assertAblationScore(
|
|
25
|
+
output: string,
|
|
26
|
+
context: {
|
|
27
|
+
prompt: string;
|
|
28
|
+
vars: Record<string, string>;
|
|
29
|
+
provider?: { id?: string; label?: string };
|
|
30
|
+
},
|
|
31
|
+
): { pass: boolean; score: number; reason: string; namedScores: { quality_score: number } } {
|
|
32
|
+
if (!output || output.trim().length === 0) {
|
|
33
|
+
return { pass: false, score: 0, reason: "Output is empty", namedScores: { quality_score: 0 } };
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (output.startsWith("[MOCK]")) {
|
|
37
|
+
return {
|
|
38
|
+
pass: true,
|
|
39
|
+
score: 0,
|
|
40
|
+
reason: `Mock/skipped — no live server. Provider: ${context.provider?.label ?? "unknown"}`,
|
|
41
|
+
namedScores: { quality_score: 0 },
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const lowerOutput = output.toLowerCase();
|
|
46
|
+
const providerLabel = context.provider?.label ?? "unknown";
|
|
47
|
+
|
|
48
|
+
const matchedIndicators = QUALITY_INDICATORS.filter((word) =>
|
|
49
|
+
lowerOutput.includes(word),
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const lengthScore = Math.min(output.length / 800, 1.0) * 0.25;
|
|
53
|
+
const indicatorScore =
|
|
54
|
+
Math.min(matchedIndicators.length / 5, 1.0) * 0.5;
|
|
55
|
+
|
|
56
|
+
const score = Number(
|
|
57
|
+
(lengthScore + indicatorScore).toFixed(2),
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
if (providerLabel === "full") {
|
|
61
|
+
const pass = score >= 0.3 && matchedIndicators.length >= 2;
|
|
62
|
+
return {
|
|
63
|
+
pass,
|
|
64
|
+
score,
|
|
65
|
+
reason: pass
|
|
66
|
+
? `Full provider quality OK (score: ${score}). Indicators: ${matchedIndicators.join(", ")}`
|
|
67
|
+
: `Full provider quality low (score: ${score}). Indicators found: ${matchedIndicators.length}`,
|
|
68
|
+
namedScores: { quality_score: score },
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const pass = matchedIndicators.length >= 1;
|
|
73
|
+
return {
|
|
74
|
+
pass,
|
|
75
|
+
score,
|
|
76
|
+
reason: pass
|
|
77
|
+
? `Ablated [${providerLabel}] quality measured (score: ${score}). Indicators: ${matchedIndicators.join(", ")}`
|
|
78
|
+
: `Ablated [${providerLabel}] produced minimal output (score: ${score}). Indicators found: ${matchedIndicators.length}`,
|
|
79
|
+
namedScores: { quality_score: score },
|
|
80
|
+
};
|
|
81
|
+
}
|