goatcode-sh 0.0.1 → 0.1.3
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 +6 -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 +8623 -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 +4 -0
- package/dist/tools/delegate-task/index.d.ts +7 -0
- package/dist/tools/delegate-task/plugin.d.ts +4 -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 +166 -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 +140 -0
- package/src/hooks/context-injector/handlers/agents.ts +101 -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 +159 -0
- package/src/hooks/post-read-nudge/handler.ts +64 -0
- package/src/hooks/post-read-nudge/index.ts +6 -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 +107 -0
- package/src/tools/delegate-task/index.ts +7 -0
- package/src/tools/delegate-task/plugin.ts +30 -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,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
|
+
`;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export type ToolRestriction = {
|
|
2
|
+
denied?: string[];
|
|
3
|
+
allowed?: string[];
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
const ALL_KNOWN_TOOLS = [
|
|
7
|
+
// Core file operations (OpenCode built-ins)
|
|
8
|
+
"read",
|
|
9
|
+
"write",
|
|
10
|
+
"edit",
|
|
11
|
+
"bash",
|
|
12
|
+
"glob",
|
|
13
|
+
"grep",
|
|
14
|
+
"task",
|
|
15
|
+
"todowrite",
|
|
16
|
+
// LSP tools
|
|
17
|
+
"lsp_goto_definition",
|
|
18
|
+
"lsp_find_references",
|
|
19
|
+
"lsp_symbols",
|
|
20
|
+
"lsp_diagnostics",
|
|
21
|
+
"lsp_prepare_rename",
|
|
22
|
+
"lsp_rename",
|
|
23
|
+
// AST tools
|
|
24
|
+
"ast_grep_search",
|
|
25
|
+
"ast_grep_replace",
|
|
26
|
+
// Web tools
|
|
27
|
+
"webfetch",
|
|
28
|
+
"websearch",
|
|
29
|
+
"codesearch",
|
|
30
|
+
// GoatCode custom tools
|
|
31
|
+
"hashline_edit",
|
|
32
|
+
"interactive_bash",
|
|
33
|
+
"look_at",
|
|
34
|
+
"delegate_task",
|
|
35
|
+
"background_output",
|
|
36
|
+
"background_cancel",
|
|
37
|
+
"session_list",
|
|
38
|
+
"session_read",
|
|
39
|
+
"session_search",
|
|
40
|
+
"session_info",
|
|
41
|
+
"skill",
|
|
42
|
+
"skill_mcp",
|
|
43
|
+
"task_create",
|
|
44
|
+
"task_list",
|
|
45
|
+
"task_get",
|
|
46
|
+
"task_update",
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
export const AGENT_TOOL_RESTRICTIONS: Record<string, ToolRestriction> = {
|
|
50
|
+
advisor: {
|
|
51
|
+
denied: [
|
|
52
|
+
"write",
|
|
53
|
+
"edit",
|
|
54
|
+
"bash",
|
|
55
|
+
"interactive_bash",
|
|
56
|
+
"delegate_task",
|
|
57
|
+
"task_create",
|
|
58
|
+
"task_update",
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export function getToolRestrictions(agentName: string): ToolRestriction {
|
|
64
|
+
return AGENT_TOOL_RESTRICTIONS[agentName] ?? { denied: [] };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function buildToolsMap(agentName: string): Record<string, boolean> | undefined {
|
|
68
|
+
const restriction = AGENT_TOOL_RESTRICTIONS[agentName];
|
|
69
|
+
if (!restriction) return undefined;
|
|
70
|
+
|
|
71
|
+
const tools: Record<string, boolean> = {};
|
|
72
|
+
|
|
73
|
+
if (restriction.allowed) {
|
|
74
|
+
for (const tool of ALL_KNOWN_TOOLS) {
|
|
75
|
+
tools[tool] = false;
|
|
76
|
+
}
|
|
77
|
+
for (const tool of restriction.allowed) {
|
|
78
|
+
tools[tool] = true;
|
|
79
|
+
}
|
|
80
|
+
} else if (restriction.denied) {
|
|
81
|
+
for (const tool of restriction.denied) {
|
|
82
|
+
tools[tool] = false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return Object.keys(tools).length > 0 ? tools : undefined;
|
|
87
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentMode } from "../../types/agent";
|
|
2
|
+
import { DEFAULT_TEMPERATURE } from "../../config/defaults";
|
|
3
|
+
|
|
4
|
+
export const WORKER_TEMPERATURE = DEFAULT_TEMPERATURE;
|
|
5
|
+
export const WORKER_MODE: AgentMode = "subagent";
|
|
6
|
+
export const WORKER_FALLBACK_MODELS = ["gpt-5.3-codex"];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, it, expect } from "bun:test";
|
|
2
|
+
import { workerPlugin } from "./plugin";
|
|
3
|
+
|
|
4
|
+
describe("workerPlugin", () => {
|
|
5
|
+
describe("#given the worker plugin", () => {
|
|
6
|
+
describe("#when inspecting plugin metadata", () => {
|
|
7
|
+
it("#then has the correct plugin name", () => {
|
|
8
|
+
expect(workerPlugin.name).toBe("worker");
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
describe("#when inspecting the agent config", () => {
|
|
13
|
+
it("#then mode is 'subagent'", () => {
|
|
14
|
+
const agent = workerPlugin.agents!.worker;
|
|
15
|
+
expect(agent.mode).toBe("subagent");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("#then has a temperature and non-empty prompt", () => {
|
|
19
|
+
const agent = workerPlugin.agents!.worker;
|
|
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 = workerPlugin.agents!.worker;
|
|
27
|
+
expect(agent.tools).toBeUndefined();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { definePlugin } from "../../plugin-api";
|
|
2
|
+
import { WORKER_TEMPERATURE, WORKER_MODE } from "./config";
|
|
3
|
+
import { WORKER_PROMPT } from "./prompt";
|
|
4
|
+
|
|
5
|
+
export const workerPlugin = definePlugin({
|
|
6
|
+
name: "worker",
|
|
7
|
+
version: "0.1.0",
|
|
8
|
+
agents: {
|
|
9
|
+
worker: {
|
|
10
|
+
temperature: WORKER_TEMPERATURE,
|
|
11
|
+
mode: WORKER_MODE,
|
|
12
|
+
prompt: WORKER_PROMPT,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PromptMeta } from "../prompt-meta";
|
|
2
|
+
|
|
3
|
+
export const WORKER_PROMPT_META: PromptMeta = {
|
|
4
|
+
version: "1.0.0",
|
|
5
|
+
date: "2025-03-28",
|
|
6
|
+
summary: "Executes assigned atomic tasks with concrete completion evidence.",
|
|
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,83 @@
|
|
|
1
|
+
export const WORKER_PROMPT = `# Role
|
|
2
|
+
You are GoatCode's focused execution worker.
|
|
3
|
+
You are assigned one bounded task. Complete it fully, verify it, and report evidence.
|
|
4
|
+
|
|
5
|
+
You do not broaden scope.
|
|
6
|
+
|
|
7
|
+
# Execution Contract
|
|
8
|
+
- Deliver exactly the assigned outcome.
|
|
9
|
+
- Follow the assigned category/domain conventions.
|
|
10
|
+
- Keep changes minimal and targeted.
|
|
11
|
+
- Verify before claiming completion.
|
|
12
|
+
|
|
13
|
+
# Working Method
|
|
14
|
+
|
|
15
|
+
## 1) Parse Assignment
|
|
16
|
+
- Extract explicit requirements.
|
|
17
|
+
- Extract implicit constraints from context.
|
|
18
|
+
- Identify acceptance checks before editing.
|
|
19
|
+
|
|
20
|
+
## 2) Execute Precisely
|
|
21
|
+
- Edit only relevant files.
|
|
22
|
+
- Match existing style and architecture.
|
|
23
|
+
- Avoid incidental refactors.
|
|
24
|
+
|
|
25
|
+
## 3) Verify Rigorously
|
|
26
|
+
- Run diagnostics for changed files.
|
|
27
|
+
- Run build/test commands required by task.
|
|
28
|
+
- Confirm outputs, not assumptions.
|
|
29
|
+
|
|
30
|
+
## 4) Report
|
|
31
|
+
- What was changed.
|
|
32
|
+
- Why it satisfies requirements.
|
|
33
|
+
- Verification evidence.
|
|
34
|
+
- Any unresolved blockers.
|
|
35
|
+
|
|
36
|
+
# Category Alignment
|
|
37
|
+
Respect category intent (e.g., quick fix, deep logic, visual work).
|
|
38
|
+
If category guidance and assignment conflict, prioritize explicit assignment and note the conflict.
|
|
39
|
+
|
|
40
|
+
# Scope Discipline
|
|
41
|
+
- Do not pick up adjacent tasks.
|
|
42
|
+
- Do not add "nice to have" enhancements.
|
|
43
|
+
- Do not redesign architecture unless explicitly required.
|
|
44
|
+
|
|
45
|
+
# Evidence Standard
|
|
46
|
+
No completion claim without command evidence.
|
|
47
|
+
|
|
48
|
+
Evidence examples:
|
|
49
|
+
- LSP diagnostics output (clean).
|
|
50
|
+
- Build command exit code 0.
|
|
51
|
+
- Test command pass output.
|
|
52
|
+
|
|
53
|
+
If verification fails:
|
|
54
|
+
- Report failure honestly.
|
|
55
|
+
- Include failure details.
|
|
56
|
+
- Provide next corrective action.
|
|
57
|
+
|
|
58
|
+
# Anti-Patterns to Avoid
|
|
59
|
+
- Assuming correctness without running checks.
|
|
60
|
+
- Touching unrelated files "while here".
|
|
61
|
+
- Hiding uncertainty.
|
|
62
|
+
- Excessive rewrites for small tasks.
|
|
63
|
+
- Type safety bypasses as shortcut fixes.
|
|
64
|
+
|
|
65
|
+
# Tool Usage Guidance
|
|
66
|
+
- Use search/read tools to localize changes fast.
|
|
67
|
+
- Use edit tools surgically.
|
|
68
|
+
- Use bash for reproducible verification commands.
|
|
69
|
+
- Use diagnostics before final response.
|
|
70
|
+
|
|
71
|
+
# Hard Constraints
|
|
72
|
+
- No delegation: execute task yourself.
|
|
73
|
+
- No as any, @ts-ignore, @ts-expect-error.
|
|
74
|
+
- No commits/pushes unless user explicitly requests.
|
|
75
|
+
- No task expansion beyond assigned objective.
|
|
76
|
+
|
|
77
|
+
# Completion Checklist
|
|
78
|
+
- Assigned objective fully met.
|
|
79
|
+
- Only relevant files changed.
|
|
80
|
+
- Diagnostics clean on changed files.
|
|
81
|
+
- Build/test checks passed as required.
|
|
82
|
+
- Final response includes concrete evidence.
|
|
83
|
+
`;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, mock } from "bun:test";
|
|
2
|
+
|
|
3
|
+
const BOOTSTRAP_TEST_DIRECTORY = "/tmp/bootstrap-integration-test-project";
|
|
4
|
+
|
|
5
|
+
let loadConfigImpl: (projectDir: string) => Promise<unknown> = async () => undefined;
|
|
6
|
+
let realLoadConfig: ((projectDir: string) => Promise<unknown>) | null = null;
|
|
7
|
+
const originalStructuredClone = globalThis.structuredClone;
|
|
8
|
+
|
|
9
|
+
const passthroughStructuredClone = ((value: unknown) => value) as typeof structuredClone;
|
|
10
|
+
|
|
11
|
+
mock.module("./config/loader", () => ({
|
|
12
|
+
loadConfig: (projectDir: string) => {
|
|
13
|
+
if (projectDir === BOOTSTRAP_TEST_DIRECTORY) {
|
|
14
|
+
return loadConfigImpl(projectDir);
|
|
15
|
+
}
|
|
16
|
+
if (!realLoadConfig) {
|
|
17
|
+
throw new Error("real loadConfig is not initialized");
|
|
18
|
+
}
|
|
19
|
+
return realLoadConfig(projectDir);
|
|
20
|
+
},
|
|
21
|
+
}));
|
|
22
|
+
|
|
23
|
+
import { bootstrap } from "./bootstrap";
|
|
24
|
+
import { createMockPluginContext } from "./test-utils/mock-plugin-context";
|
|
25
|
+
|
|
26
|
+
const unmockedLoaderModule = (await import(`./config/loader.ts?unmocked=${Date.now()}`)) as {
|
|
27
|
+
loadConfig: (projectDir: string) => Promise<unknown>;
|
|
28
|
+
};
|
|
29
|
+
realLoadConfig = unmockedLoaderModule.loadConfig;
|
|
30
|
+
|
|
31
|
+
function createBootstrapContext() {
|
|
32
|
+
return createMockPluginContext({ directory: BOOTSTRAP_TEST_DIRECTORY });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const EXPECTED_TOOL_NAMES = [
|
|
36
|
+
"grep",
|
|
37
|
+
"glob",
|
|
38
|
+
"hashline_edit",
|
|
39
|
+
"look_at",
|
|
40
|
+
"skill",
|
|
41
|
+
"task",
|
|
42
|
+
"lsp_goto_definition",
|
|
43
|
+
"lsp_find_references",
|
|
44
|
+
"lsp_symbols",
|
|
45
|
+
"lsp_diagnostics",
|
|
46
|
+
"lsp_prepare_rename",
|
|
47
|
+
"lsp_rename",
|
|
48
|
+
"ast_grep_search",
|
|
49
|
+
"ast_grep_replace",
|
|
50
|
+
"background_output",
|
|
51
|
+
"background_cancel",
|
|
52
|
+
"session_list",
|
|
53
|
+
"session_read",
|
|
54
|
+
"session_search",
|
|
55
|
+
"session_info",
|
|
56
|
+
"task_create",
|
|
57
|
+
"task_list",
|
|
58
|
+
"task_get",
|
|
59
|
+
"task_update",
|
|
60
|
+
] as const;
|
|
61
|
+
|
|
62
|
+
const EXPECTED_AGENT_NAMES = [
|
|
63
|
+
"orchestrator",
|
|
64
|
+
"deep-worker",
|
|
65
|
+
"planner",
|
|
66
|
+
"advisor",
|
|
67
|
+
"researcher",
|
|
68
|
+
"explorer",
|
|
69
|
+
"worker",
|
|
70
|
+
] as const;
|
|
71
|
+
|
|
72
|
+
describe("bootstrap", () => {
|
|
73
|
+
afterEach(() => {
|
|
74
|
+
loadConfigImpl = async () => undefined;
|
|
75
|
+
globalThis.structuredClone = originalStructuredClone;
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
describe("#given default config", () => {
|
|
79
|
+
describe("#when bootstrap is executed", () => {
|
|
80
|
+
it("#then registers all built-in GoatCode tools in hooks.tool", async () => {
|
|
81
|
+
globalThis.structuredClone = passthroughStructuredClone;
|
|
82
|
+
const hooks = await bootstrap(createBootstrapContext());
|
|
83
|
+
|
|
84
|
+
expect(hooks.tool).toBeDefined();
|
|
85
|
+
for (const name of EXPECTED_TOOL_NAMES) {
|
|
86
|
+
expect(hooks.tool?.[name]).toBeDefined();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("#then registers all built-in GoatCode agents through the config hook", async () => {
|
|
91
|
+
globalThis.structuredClone = passthroughStructuredClone;
|
|
92
|
+
const hooks = await bootstrap(createBootstrapContext());
|
|
93
|
+
expect(hooks.config).toBeDefined();
|
|
94
|
+
|
|
95
|
+
if (!hooks.config) {
|
|
96
|
+
throw new Error("Expected hooks.config to be defined");
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
type ConfigInput = Parameters<NonNullable<typeof hooks.config>>[0];
|
|
100
|
+
const input = { agent: {} } as ConfigInput;
|
|
101
|
+
|
|
102
|
+
await hooks.config(input);
|
|
103
|
+
|
|
104
|
+
const configuredAgents = input.agent ?? {};
|
|
105
|
+
for (const name of EXPECTED_AGENT_NAMES) {
|
|
106
|
+
expect(configuredAgents[name]).toBeDefined();
|
|
107
|
+
}
|
|
108
|
+
const configuredAgentNames = Object.keys(configuredAgents);
|
|
109
|
+
const allowedExtraAgents = new Set(["build", "plan"]);
|
|
110
|
+
const unexpectedAgents = configuredAgentNames.filter(
|
|
111
|
+
(name) =>
|
|
112
|
+
!EXPECTED_AGENT_NAMES.includes(name as (typeof EXPECTED_AGENT_NAMES)[number]) &&
|
|
113
|
+
!allowedExtraAgents.has(name),
|
|
114
|
+
);
|
|
115
|
+
expect(unexpectedAgents).toEqual([]);
|
|
116
|
+
expect(configuredAgentNames.length).toBeGreaterThanOrEqual(EXPECTED_AGENT_NAMES.length);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it("#then exposes key hook event slots as callable functions", async () => {
|
|
120
|
+
globalThis.structuredClone = passthroughStructuredClone;
|
|
121
|
+
const hooks = await bootstrap(createBootstrapContext());
|
|
122
|
+
|
|
123
|
+
expect(typeof hooks["tool.execute.before"]).toBe("function");
|
|
124
|
+
expect(typeof hooks["tool.execute.after"]).toBe("function");
|
|
125
|
+
expect(typeof hooks["chat.params"]).toBe("function");
|
|
126
|
+
expect(typeof hooks["tool.definition"]).toBe("function");
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
describe("#given invalid raw config from loader", () => {
|
|
132
|
+
describe("#when bootstrap is executed", () => {
|
|
133
|
+
it("#then falls back to defaults, returns hooks, and warns to stderr", async () => {
|
|
134
|
+
loadConfigImpl = async () => ({ agents: "invalid" });
|
|
135
|
+
globalThis.structuredClone = passthroughStructuredClone;
|
|
136
|
+
|
|
137
|
+
const originalStderrWrite = process.stderr.write;
|
|
138
|
+
const stderrWriteSpy = mock((..._args: unknown[]) => true);
|
|
139
|
+
process.stderr.write = stderrWriteSpy as typeof process.stderr.write;
|
|
140
|
+
|
|
141
|
+
try {
|
|
142
|
+
const hooks = await bootstrap(createBootstrapContext());
|
|
143
|
+
|
|
144
|
+
expect(hooks.tool).toBeDefined();
|
|
145
|
+
expect(hooks.tool?.grep).toBeDefined();
|
|
146
|
+
expect(stderrWriteSpy).toHaveBeenCalled();
|
|
147
|
+
expect(stderrWriteSpy.mock.calls[0]?.[0]).toContain("validation errors");
|
|
148
|
+
} finally {
|
|
149
|
+
process.stderr.write = originalStderrWrite;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
describe("#given disabled_tools config", () => {
|
|
156
|
+
describe("#when bootstrap is executed", () => {
|
|
157
|
+
it("#then excludes disabled tools from hooks.tool", async () => {
|
|
158
|
+
loadConfigImpl = async () => ({ disabled_tools: ["grep"] });
|
|
159
|
+
globalThis.structuredClone = passthroughStructuredClone;
|
|
160
|
+
|
|
161
|
+
const hooks = await bootstrap(createBootstrapContext());
|
|
162
|
+
|
|
163
|
+
expect(hooks.tool?.grep).toBeUndefined();
|
|
164
|
+
expect(hooks.tool?.glob).toBeDefined();
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
});
|