all-hands-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.allhands/README.md +75 -0
- package/.allhands/agents/compounder.yaml +15 -0
- package/.allhands/agents/coordinator.yaml +17 -0
- package/.allhands/agents/documentor.yaml +15 -0
- package/.allhands/agents/e2e-test-planner.yaml +17 -0
- package/.allhands/agents/emergent.yaml +22 -0
- package/.allhands/agents/executor.yaml +14 -0
- package/.allhands/agents/ideation.yaml +11 -0
- package/.allhands/agents/initiative-steering.yaml +19 -0
- package/.allhands/agents/judge.yaml +13 -0
- package/.allhands/agents/planner.yaml +19 -0
- package/.allhands/agents/pr-reviewer.yaml +15 -0
- package/.allhands/docs.json +5 -0
- package/.allhands/docs.local.json +26 -0
- package/.allhands/flows/COMPOUNDING.md +203 -0
- package/.allhands/flows/COORDINATION.md +89 -0
- package/.allhands/flows/CORE.md +87 -0
- package/.allhands/flows/DOCUMENTATION.md +218 -0
- package/.allhands/flows/E2E_TEST_PLAN_BUILDING.md +140 -0
- package/.allhands/flows/EMERGENT_PLANNING.md +57 -0
- package/.allhands/flows/IDEATION_SCOPING.md +154 -0
- package/.allhands/flows/INITIATIVE_STEERING.md +110 -0
- package/.allhands/flows/JUDGE_REVIEWING.md +79 -0
- package/.allhands/flows/PROMPT_TASK_EXECUTION.md +68 -0
- package/.allhands/flows/PR_REVIEWING.md +43 -0
- package/.allhands/flows/SPEC_PLANNING.md +216 -0
- package/.allhands/flows/harness/WRITING_HARNESS_FLOWS.md +27 -0
- package/.allhands/flows/harness/WRITING_HARNESS_KNOWLEDGE.md +27 -0
- package/.allhands/flows/harness/WRITING_HARNESS_ORCHESTRATION.md +27 -0
- package/.allhands/flows/harness/WRITING_HARNESS_SKILLS.md +27 -0
- package/.allhands/flows/harness/WRITING_HARNESS_TOOLS.md +27 -0
- package/.allhands/flows/harness/WRITING_HARNESS_VALIDATION_TOOLING.md +27 -0
- package/.allhands/flows/shared/CODEBASE_UNDERSTANDING.md +72 -0
- package/.allhands/flows/shared/CREATE_HARNESS_SPEC.md +48 -0
- package/.allhands/flows/shared/CREATE_SPEC.md +41 -0
- package/.allhands/flows/shared/CREATE_VALIDATION_TOOLING_SPEC.md +70 -0
- package/.allhands/flows/shared/DOCUMENTATION_DISCOVERY.md +123 -0
- package/.allhands/flows/shared/DOCUMENTATION_WRITER.md +101 -0
- package/.allhands/flows/shared/EMERGENT_REFINEMENT_ANALYSIS.md +76 -0
- package/.allhands/flows/shared/EXTERNAL_TECH_GUIDANCE.md +97 -0
- package/.allhands/flows/shared/IDEATION_CODEBASE_GROUNDING.md +49 -0
- package/.allhands/flows/shared/PLAN_DEEPENING.md +152 -0
- package/.allhands/flows/shared/PROMPT_TASKS_CURATION.md +113 -0
- package/.allhands/flows/shared/PROMPT_VALIDATION_REVIEW.MD +99 -0
- package/.allhands/flows/shared/QUICK_PREMORTEM.md +70 -0
- package/.allhands/flows/shared/RESEARCH_GUIDANCE.md +38 -0
- package/.allhands/flows/shared/REVIEW_OPTIONS_BREAKDOWN.md +68 -0
- package/.allhands/flows/shared/SKILL_EXTRACTION.md +84 -0
- package/.allhands/flows/shared/SPEC_FLOW_ANALYSIS.md +119 -0
- package/.allhands/flows/shared/TDD_WORKFLOW.md +109 -0
- package/.allhands/flows/shared/UTILIZE_VALIDATION_TOOLING.md +84 -0
- package/.allhands/flows/shared/WRITING_HARNESS_FLOWS.md +11 -0
- package/.allhands/flows/shared/WRITING_HARNESS_MCP_TOOLS.md +84 -0
- package/.allhands/flows/shared/jury/ARCHITECTURE_REVIEW.md +91 -0
- package/.allhands/flows/shared/jury/BEST_PRACTICES_REVIEW.md +80 -0
- package/.allhands/flows/shared/jury/CLAIM_VERIFICATION_REVIEW.md +101 -0
- package/.allhands/flows/shared/jury/EXPECTATIONS_FIT_REVIEW.md +78 -0
- package/.allhands/flows/shared/jury/MAINTAINABILITY_REVIEW.md +110 -0
- package/.allhands/flows/shared/jury/PROMPTS_EXPECTATIONS_FIT.md +74 -0
- package/.allhands/flows/shared/jury/PROMPTS_FLOW_ANALYSIS.md +92 -0
- package/.allhands/flows/shared/jury/PROMPTS_YAGNI.md +78 -0
- package/.allhands/flows/shared/jury/PROMPT_PREMORTEM.md +125 -0
- package/.allhands/flows/shared/jury/SECURITY_REVIEW.md +86 -0
- package/.allhands/flows/shared/jury/YAGNI_REVIEW.md +82 -0
- package/.allhands/flows/wip/DEBUG_INVESTIGATION.md +162 -0
- package/.allhands/flows/wip/MEMORY_RECALL.md +62 -0
- package/.allhands/harness/ah +131 -0
- package/.allhands/harness/package-lock.json +5292 -0
- package/.allhands/harness/package.json +52 -0
- package/.allhands/harness/src/__tests__/e2e/commands.test.ts +307 -0
- package/.allhands/harness/src/__tests__/e2e/event-loop.test.ts +539 -0
- package/.allhands/harness/src/__tests__/e2e/hooks.test.ts +427 -0
- package/.allhands/harness/src/__tests__/e2e/new-initiative-routing.test.ts +137 -0
- package/.allhands/harness/src/__tests__/e2e/run-e2e.ts +109 -0
- package/.allhands/harness/src/__tests__/e2e/specs-type.test.ts +210 -0
- package/.allhands/harness/src/__tests__/e2e/validation-hooks.test.ts +669 -0
- package/.allhands/harness/src/__tests__/e2e/validation-path-consistency.test.ts +354 -0
- package/.allhands/harness/src/__tests__/e2e/validation.test.ts +528 -0
- package/.allhands/harness/src/__tests__/harness/assertions.ts +318 -0
- package/.allhands/harness/src/__tests__/harness/cli-runner.ts +359 -0
- package/.allhands/harness/src/__tests__/harness/fixture.ts +384 -0
- package/.allhands/harness/src/__tests__/harness/hook-runner.ts +411 -0
- package/.allhands/harness/src/__tests__/harness/index.ts +122 -0
- package/.allhands/harness/src/cli.ts +36 -0
- package/.allhands/harness/src/commands/complexity.ts +177 -0
- package/.allhands/harness/src/commands/context7.ts +202 -0
- package/.allhands/harness/src/commands/docs.ts +557 -0
- package/.allhands/harness/src/commands/hooks.ts +24 -0
- package/.allhands/harness/src/commands/index.ts +51 -0
- package/.allhands/harness/src/commands/knowledge.ts +382 -0
- package/.allhands/harness/src/commands/memories.ts +302 -0
- package/.allhands/harness/src/commands/notify.ts +61 -0
- package/.allhands/harness/src/commands/oracle.ts +158 -0
- package/.allhands/harness/src/commands/perplexity.ts +220 -0
- package/.allhands/harness/src/commands/planning.ts +245 -0
- package/.allhands/harness/src/commands/schema.ts +73 -0
- package/.allhands/harness/src/commands/skills.ts +128 -0
- package/.allhands/harness/src/commands/solutions.ts +353 -0
- package/.allhands/harness/src/commands/spawn.ts +158 -0
- package/.allhands/harness/src/commands/specs.ts +532 -0
- package/.allhands/harness/src/commands/tavily.ts +226 -0
- package/.allhands/harness/src/commands/tools.ts +579 -0
- package/.allhands/harness/src/commands/trace.ts +327 -0
- package/.allhands/harness/src/commands/tui.ts +960 -0
- package/.allhands/harness/src/commands/validate.ts +143 -0
- package/.allhands/harness/src/commands/validation-tools.ts +108 -0
- package/.allhands/harness/src/hooks/context.ts +1442 -0
- package/.allhands/harness/src/hooks/enforcement.ts +170 -0
- package/.allhands/harness/src/hooks/index.ts +54 -0
- package/.allhands/harness/src/hooks/lifecycle.ts +229 -0
- package/.allhands/harness/src/hooks/notification.ts +104 -0
- package/.allhands/harness/src/hooks/observability.ts +551 -0
- package/.allhands/harness/src/hooks/session.ts +88 -0
- package/.allhands/harness/src/hooks/shared.ts +815 -0
- package/.allhands/harness/src/hooks/transcript-parser.ts +208 -0
- package/.allhands/harness/src/hooks/validation.ts +617 -0
- package/.allhands/harness/src/lib/__tests__/ctags.test.ts +244 -0
- package/.allhands/harness/src/lib/__tests__/docs-validation.test.ts +344 -0
- package/.allhands/harness/src/lib/__tests__/mcp-runtime.test.ts +190 -0
- package/.allhands/harness/src/lib/__tests__/schema.test.ts +861 -0
- package/.allhands/harness/src/lib/base-command.ts +198 -0
- package/.allhands/harness/src/lib/cli-daemon.ts +343 -0
- package/.allhands/harness/src/lib/compaction.ts +313 -0
- package/.allhands/harness/src/lib/ctags.ts +497 -0
- package/.allhands/harness/src/lib/docs-validation.ts +907 -0
- package/.allhands/harness/src/lib/event-loop.ts +662 -0
- package/.allhands/harness/src/lib/flows.ts +155 -0
- package/.allhands/harness/src/lib/git.ts +276 -0
- package/.allhands/harness/src/lib/knowledge-worker.ts +72 -0
- package/.allhands/harness/src/lib/knowledge.ts +810 -0
- package/.allhands/harness/src/lib/llm.ts +255 -0
- package/.allhands/harness/src/lib/mcp-client.ts +432 -0
- package/.allhands/harness/src/lib/mcp-daemon.ts +486 -0
- package/.allhands/harness/src/lib/mcp-runtime.ts +418 -0
- package/.allhands/harness/src/lib/notification.ts +115 -0
- package/.allhands/harness/src/lib/opencode/index.ts +70 -0
- package/.allhands/harness/src/lib/opencode/profiles.ts +300 -0
- package/.allhands/harness/src/lib/opencode/prompts/codesearch.md +98 -0
- package/.allhands/harness/src/lib/opencode/prompts/knowledge-aggregator.md +67 -0
- package/.allhands/harness/src/lib/opencode/runner.ts +281 -0
- package/.allhands/harness/src/lib/oracle.ts +926 -0
- package/.allhands/harness/src/lib/planning-utils.ts +150 -0
- package/.allhands/harness/src/lib/planning.ts +605 -0
- package/.allhands/harness/src/lib/pr-review.ts +225 -0
- package/.allhands/harness/src/lib/prompts.ts +522 -0
- package/.allhands/harness/src/lib/schema.ts +418 -0
- package/.allhands/harness/src/lib/schemas/agent-profile.ts +141 -0
- package/.allhands/harness/src/lib/schemas/template-vars.ts +138 -0
- package/.allhands/harness/src/lib/session.ts +164 -0
- package/.allhands/harness/src/lib/specs.ts +348 -0
- package/.allhands/harness/src/lib/tldr.ts +829 -0
- package/.allhands/harness/src/lib/tmux.ts +1051 -0
- package/.allhands/harness/src/lib/trace-store.ts +714 -0
- package/.allhands/harness/src/mcp/__tests__/index.test.ts +46 -0
- package/.allhands/harness/src/mcp/_template.ts +47 -0
- package/.allhands/harness/src/mcp/filesystem.ts +33 -0
- package/.allhands/harness/src/mcp/index.ts +69 -0
- package/.allhands/harness/src/mcp/playwright.ts +34 -0
- package/.allhands/harness/src/mcp/xcodebuild.ts +29 -0
- package/.allhands/harness/src/schemas/docs.schema.json +44 -0
- package/.allhands/harness/src/schemas/settings.schema.json +214 -0
- package/.allhands/harness/src/tui/actions.ts +227 -0
- package/.allhands/harness/src/tui/file-viewer-modal.ts +270 -0
- package/.allhands/harness/src/tui/index.ts +1574 -0
- package/.allhands/harness/src/tui/modal.ts +232 -0
- package/.allhands/harness/src/tui/prompts-pane.ts +186 -0
- package/.allhands/harness/src/tui/status-pane.ts +434 -0
- package/.allhands/harness/tsconfig.json +22 -0
- package/.allhands/harness/vitest.config.ts +13 -0
- package/.allhands/pillars.md +33 -0
- package/.allhands/principles.md +88 -0
- package/.allhands/schemas/alignment.yaml +51 -0
- package/.allhands/schemas/documentation.yaml +10 -0
- package/.allhands/schemas/prompt.yaml +92 -0
- package/.allhands/schemas/skill.yaml +34 -0
- package/.allhands/schemas/solution.yaml +131 -0
- package/.allhands/schemas/spec.yaml +67 -0
- package/.allhands/schemas/validation-suite.yaml +49 -0
- package/.allhands/schemas/workflow.yaml +51 -0
- package/.allhands/settings.json +57 -0
- package/.allhands/skills/claude-code-patterns/SKILL.md +60 -0
- package/.allhands/skills/claude-code-patterns/docs/context-hygiene.md +19 -0
- package/.allhands/skills/harness-maintenance/SKILL.md +449 -0
- package/.allhands/skills/harness-maintenance/references/core-architecture.md +187 -0
- package/.allhands/skills/harness-maintenance/references/harness-skills.md +87 -0
- package/.allhands/skills/harness-maintenance/references/knowledge-compounding.md +78 -0
- package/.allhands/skills/harness-maintenance/references/tools-commands-mcp-hooks.md +115 -0
- package/.allhands/skills/harness-maintenance/references/validation-tooling.md +77 -0
- package/.allhands/skills/harness-maintenance/references/writing-flows.md +84 -0
- package/.allhands/validation/browser-automation.md +109 -0
- package/.allhands/validation/xcode-automation.md +195 -0
- package/.allhands/workflows/documentation.md +86 -0
- package/.allhands/workflows/investigation.md +81 -0
- package/.allhands/workflows/milestone.md +91 -0
- package/.allhands/workflows/optimization.md +85 -0
- package/.allhands/workflows/refactor.md +99 -0
- package/.allhands/workflows/triage.md +81 -0
- package/.claude/README.md +1 -0
- package/.claude/agents/explorer.md +10 -0
- package/.claude/agents/researcher.md +11 -0
- package/.claude/agents/task-runner.md +8 -0
- package/.claude/settings.json +231 -0
- package/.env.ai.example +7 -0
- package/.github/workflows/npm-publish.yml +69 -0
- package/.internal.json +45 -0
- package/.tldr/config.json +11 -0
- package/.tldrignore +90 -0
- package/CLAUDE.md +6 -0
- package/README.md +98 -0
- package/bin/sync-cli.js +7552 -0
- package/concerns.md +7 -0
- package/docs/README.md +41 -0
- package/docs/agents/README.md +24 -0
- package/docs/agents/agent-configuration-system.md +86 -0
- package/docs/agents/execution-agents.md +50 -0
- package/docs/agents/knowledge-agents.md +61 -0
- package/docs/agents/orchestration-agent.md +57 -0
- package/docs/agents/planning-agents.md +84 -0
- package/docs/agents/quality-review-agents.md +67 -0
- package/docs/agents/workflow-agent-orchestration.md +69 -0
- package/docs/flows/README.md +44 -0
- package/docs/flows/compounding.md +126 -0
- package/docs/flows/coordination.md +72 -0
- package/docs/flows/core-harness-integration.md +63 -0
- package/docs/flows/documentation-orchestration.md +98 -0
- package/docs/flows/e2e-test-plan-building.md +83 -0
- package/docs/flows/emergent-refinement.md +104 -0
- package/docs/flows/flow-authoring-and-mcp-tools.md +89 -0
- package/docs/flows/judge-reviewing.md +112 -0
- package/docs/flows/plan-deepening-and-research.md +107 -0
- package/docs/flows/plan-review-jury.md +114 -0
- package/docs/flows/pr-reviewing.md +54 -0
- package/docs/flows/prompt-task-execution.md +119 -0
- package/docs/flows/spec-planning.md +162 -0
- package/docs/flows/type-specific-scoping-flows.md +49 -0
- package/docs/flows/validation-and-skills-integration.md +145 -0
- package/docs/flows/wip/wip-flows.md +102 -0
- package/docs/harness/README.md +23 -0
- package/docs/harness/agent-profiles.md +84 -0
- package/docs/harness/cli/README.md +24 -0
- package/docs/harness/cli/cli-entry-and-command-discovery.md +91 -0
- package/docs/harness/cli/docs-command.md +87 -0
- package/docs/harness/cli/knowledge-command.md +91 -0
- package/docs/harness/cli/minor-cli-commands.md +65 -0
- package/docs/harness/cli/oracle-command.md +113 -0
- package/docs/harness/cli/planning-command.md +95 -0
- package/docs/harness/cli/schema-and-validation-commands.md +154 -0
- package/docs/harness/cli/search-commands.md +97 -0
- package/docs/harness/cli/spawn-command.md +136 -0
- package/docs/harness/cli/specs-command.md +102 -0
- package/docs/harness/cli/tools-command.md +122 -0
- package/docs/harness/cli/trace-command.md +122 -0
- package/docs/harness/cli-daemon.md +92 -0
- package/docs/harness/event-loop.md +184 -0
- package/docs/harness/hooks/README.md +15 -0
- package/docs/harness/hooks/context-hooks.md +96 -0
- package/docs/harness/hooks/lifecycle-and-observability-hooks.md +135 -0
- package/docs/harness/hooks/validation-hooks.md +97 -0
- package/docs/harness/test-harness.md +149 -0
- package/docs/harness/tui.md +176 -0
- package/docs/memories.md +20 -0
- package/docs/solutions/agentic-issues/premature-agent-deletion-tui-action-dependency-20260130.md +49 -0
- package/docs/solutions/agentic-issues/ref-anchor-scope-mismatch-skill-references-20260131.md +55 -0
- package/docs/solutions/agentic-issues/tautological-tests-routing-20260131.md +52 -0
- package/docs/solutions/integration_issue/blocktool-output-format-mismatch-hook-runner-20260130.md +52 -0
- package/docs/solutions/integration_issue/dual-validation-path-divergence-schema-20260130.md +66 -0
- package/docs/solutions/security-issues/unsanitized-domain-path-join-20260131.md +52 -0
- package/docs/solutions/test-failures/event-loop-mock-ordering-checkAgentWindows-20260130.md +63 -0
- package/docs/sync-cli/README.md +19 -0
- package/docs/sync-cli/cli-entrypoint-and-commands.md +39 -0
- package/docs/sync-cli/commands/README.md +11 -0
- package/docs/sync-cli/commands/pull-manifest-command.md +36 -0
- package/docs/sync-cli/commands/push-command.md +84 -0
- package/docs/sync-cli/commands/sync-command.md +71 -0
- package/docs/sync-cli/systems/README.md +14 -0
- package/docs/sync-cli/systems/git-and-github-integration.md +49 -0
- package/docs/sync-cli/systems/interactive-ui.md +43 -0
- package/docs/sync-cli/systems/manifest-and-distribution.md +51 -0
- package/docs/sync-cli/systems/path-resolution.md +42 -0
- package/package.json +46 -0
- package/scripts/install-shim.sh +40 -0
- package/scripts/pre-pack.sh +25 -0
- package/specs/harness-maintenance-skill.spec.md +138 -0
- package/specs/roadmap/git-spec-lifecycle-management.spec.md +113 -0
- package/specs/sync-init-flag.spec.md +117 -0
- package/specs/unified-workflow-orchestration.spec.md +250 -0
- package/specs/validation-tooling-practice.spec.md +98 -0
- package/specs/workflow-domain-configuration.spec.md +265 -0
- package/src/commands/pull-manifest.ts +31 -0
- package/src/commands/push.ts +344 -0
- package/src/commands/sync.ts +289 -0
- package/src/lib/constants.ts +10 -0
- package/src/lib/dotfiles.ts +36 -0
- package/src/lib/fs-utils.ts +18 -0
- package/src/lib/gh.ts +40 -0
- package/src/lib/git.ts +63 -0
- package/src/lib/gitignore.ts +167 -0
- package/src/lib/manifest.ts +121 -0
- package/src/lib/marker-sync.ts +39 -0
- package/src/lib/paths.ts +38 -0
- package/src/lib/target-lines.ts +66 -0
- package/src/lib/ui.ts +78 -0
- package/src/sync-cli.ts +120 -0
- package/target-lines.json +23 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for MCP Server Registry
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { describe, expect, it } from 'vitest';
|
|
6
|
+
import { discoverServers, getServer, listServerNames } from '../index.js';
|
|
7
|
+
|
|
8
|
+
describe('MCP Server Registry', () => {
|
|
9
|
+
it('discovers servers from directory', async () => {
|
|
10
|
+
const servers = await discoverServers();
|
|
11
|
+
|
|
12
|
+
// Returns a Map (may be empty if no servers configured)
|
|
13
|
+
expect(servers).toBeInstanceOf(Map);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('getServer returns undefined for unknown name', async () => {
|
|
17
|
+
const config = await getServer('nonexistent-server');
|
|
18
|
+
expect(config).toBeUndefined();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('listServerNames returns array', async () => {
|
|
22
|
+
const names = await listServerNames();
|
|
23
|
+
|
|
24
|
+
expect(names).toBeInstanceOf(Array);
|
|
25
|
+
|
|
26
|
+
// If there are names, they should be sorted
|
|
27
|
+
if (names.length > 0) {
|
|
28
|
+
const sorted = [...names].sort();
|
|
29
|
+
expect(names).toEqual(sorted);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('server configs have required fields when present', async () => {
|
|
34
|
+
const servers = await discoverServers();
|
|
35
|
+
|
|
36
|
+
for (const [name, config] of servers) {
|
|
37
|
+
expect(config.name).toBe(name);
|
|
38
|
+
expect(config.description).toBeTruthy();
|
|
39
|
+
|
|
40
|
+
// Should have either command (stdio) or url (http/sse)
|
|
41
|
+
const hasCommand = config.command !== undefined;
|
|
42
|
+
const hasUrl = config.url !== undefined;
|
|
43
|
+
expect(hasCommand || hasUrl).toBe(true);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Template
|
|
3
|
+
*
|
|
4
|
+
* Copy this file to create a new MCP server integration:
|
|
5
|
+
* cp _template.ts my-server.ts
|
|
6
|
+
*
|
|
7
|
+
* Then edit the config to match your server's requirements.
|
|
8
|
+
* The server will be automatically discovered by `ah tools`.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { McpServerConfig } from '../lib/mcp-runtime.js';
|
|
12
|
+
|
|
13
|
+
export const config: McpServerConfig = {
|
|
14
|
+
// Unique name for this server (used in CLI: ah tools <name>:tool)
|
|
15
|
+
name: 'template',
|
|
16
|
+
|
|
17
|
+
// Human-readable description
|
|
18
|
+
description: 'Template MCP server - copy and customize',
|
|
19
|
+
|
|
20
|
+
// Transport type: 'stdio' (default), 'http', or 'sse'
|
|
21
|
+
type: 'stdio',
|
|
22
|
+
|
|
23
|
+
// For stdio transport: command to execute
|
|
24
|
+
command: 'npx',
|
|
25
|
+
args: ['-y', '@example/mcp-server'],
|
|
26
|
+
|
|
27
|
+
// Environment variables - use ${VAR_NAME} for values from .env.ai
|
|
28
|
+
env: {
|
|
29
|
+
// EXAMPLE_API_KEY: '${EXAMPLE_API_KEY}',
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
// For http/sse transport: URL endpoint (instead of command/args)
|
|
33
|
+
// url: 'https://api.example.com/mcp',
|
|
34
|
+
|
|
35
|
+
// HTTP headers for http/sse transport
|
|
36
|
+
// headers: {
|
|
37
|
+
// Authorization: 'Bearer ${API_TOKEN}',
|
|
38
|
+
// },
|
|
39
|
+
|
|
40
|
+
// Tools to hide from discovery (optional)
|
|
41
|
+
// hiddenTools: ['dangerous_tool', 'internal_tool'],
|
|
42
|
+
|
|
43
|
+
// Extra hints for specific tools (shown in --help)
|
|
44
|
+
// toolHints: {
|
|
45
|
+
// my_tool: 'Use this when you need to do X. Prefer Y for Z.',
|
|
46
|
+
// },
|
|
47
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem MCP Server - File system operations
|
|
3
|
+
*
|
|
4
|
+
* Provides file reading and directory listing capabilities.
|
|
5
|
+
* Stateless - each call is independent.
|
|
6
|
+
*
|
|
7
|
+
* Source: https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem
|
|
8
|
+
*
|
|
9
|
+
* No API key required.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { McpServerConfig } from '../lib/mcp-runtime.js';
|
|
13
|
+
|
|
14
|
+
export const config: McpServerConfig = {
|
|
15
|
+
name: 'filesystem',
|
|
16
|
+
|
|
17
|
+
description: 'File system operations - read files, list directories',
|
|
18
|
+
|
|
19
|
+
type: 'stdio',
|
|
20
|
+
|
|
21
|
+
command: 'npx',
|
|
22
|
+
// The path argument is the allowed directory - using current working directory
|
|
23
|
+
args: ['-y', '@modelcontextprotocol/server-filesystem', '.'],
|
|
24
|
+
|
|
25
|
+
// Stateless - no session persistence needed
|
|
26
|
+
stateful: false,
|
|
27
|
+
|
|
28
|
+
toolHints: {
|
|
29
|
+
read_file: 'Read the contents of a file at the given path.',
|
|
30
|
+
list_directory: 'List contents of a directory.',
|
|
31
|
+
write_file: 'Write content to a file.',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Registry
|
|
3
|
+
*
|
|
4
|
+
* Auto-discovers MCP server configs from this directory.
|
|
5
|
+
* Each .ts file (except index.ts and _template.ts) should export
|
|
6
|
+
* a `config` object of type McpServerConfig.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { readdirSync, statSync } from 'fs';
|
|
10
|
+
import { dirname, join } from 'path';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
import type { McpServerConfig } from '../lib/mcp-runtime.js';
|
|
13
|
+
|
|
14
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
|
|
16
|
+
export interface McpServerModule {
|
|
17
|
+
config: McpServerConfig;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Discover and load all MCP server configs.
|
|
22
|
+
*/
|
|
23
|
+
export async function discoverServers(): Promise<Map<string, McpServerConfig>> {
|
|
24
|
+
const servers = new Map<string, McpServerConfig>();
|
|
25
|
+
const entries = readdirSync(__dirname);
|
|
26
|
+
|
|
27
|
+
for (const entry of entries) {
|
|
28
|
+
// Skip index and template
|
|
29
|
+
if (entry === 'index.ts' || entry === '_template.ts') continue;
|
|
30
|
+
|
|
31
|
+
const entryPath = join(__dirname, entry);
|
|
32
|
+
const stat = statSync(entryPath);
|
|
33
|
+
|
|
34
|
+
// Only .ts files
|
|
35
|
+
if (stat.isDirectory()) continue;
|
|
36
|
+
if (!entry.endsWith('.ts')) continue;
|
|
37
|
+
|
|
38
|
+
const moduleName = entry.replace('.ts', '');
|
|
39
|
+
const importPath = `./${moduleName}.js`;
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
const module = (await import(importPath)) as McpServerModule;
|
|
43
|
+
if (module.config && typeof module.config === 'object') {
|
|
44
|
+
servers.set(module.config.name, module.config);
|
|
45
|
+
}
|
|
46
|
+
} catch (e) {
|
|
47
|
+
// Log but don't fail - allow partial discovery
|
|
48
|
+
console.error(`Warning: Could not load MCP server ${moduleName}: ${e}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return servers;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Get a specific server config by name.
|
|
57
|
+
*/
|
|
58
|
+
export async function getServer(name: string): Promise<McpServerConfig | undefined> {
|
|
59
|
+
const servers = await discoverServers();
|
|
60
|
+
return servers.get(name);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* List all available server names.
|
|
65
|
+
*/
|
|
66
|
+
export async function listServerNames(): Promise<string[]> {
|
|
67
|
+
const servers = await discoverServers();
|
|
68
|
+
return Array.from(servers.keys()).sort();
|
|
69
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playwright MCP Server - Browser automation via Microsoft Playwright
|
|
3
|
+
*
|
|
4
|
+
* Provides browser automation using Playwright's accessibility tree.
|
|
5
|
+
* LLM-friendly - operates on structured data, no vision models needed.
|
|
6
|
+
*
|
|
7
|
+
* Source: https://github.com/microsoft/playwright-mcp
|
|
8
|
+
*
|
|
9
|
+
* No API key required.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { McpServerConfig } from '../lib/mcp-runtime.js';
|
|
13
|
+
|
|
14
|
+
export const config: McpServerConfig = {
|
|
15
|
+
name: 'playwright',
|
|
16
|
+
|
|
17
|
+
description: 'Browser automation - navigate, click, fill forms, take screenshots',
|
|
18
|
+
|
|
19
|
+
type: 'stdio',
|
|
20
|
+
|
|
21
|
+
command: 'npx',
|
|
22
|
+
args: ['-y', '@playwright/mcp@latest'],
|
|
23
|
+
|
|
24
|
+
// Stateful - browser session persists between calls
|
|
25
|
+
stateful: true,
|
|
26
|
+
|
|
27
|
+
toolHints: {
|
|
28
|
+
browser_navigate: 'Navigate to a URL. First step for any browser interaction.',
|
|
29
|
+
browser_snapshot: 'Get accessibility snapshot of the page. Use to understand page structure.',
|
|
30
|
+
browser_click: 'Click an element by reference from snapshot.',
|
|
31
|
+
browser_type: 'Type text into a focused element.',
|
|
32
|
+
browser_screenshot: 'Take a screenshot. Returns base64 PNG.',
|
|
33
|
+
},
|
|
34
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { McpServerConfig } from '../lib/mcp-runtime.js';
|
|
2
|
+
|
|
3
|
+
export const config: McpServerConfig = {
|
|
4
|
+
name: 'xcodebuild',
|
|
5
|
+
description: 'Xcode build, test, deploy, UI automation, debugging, and simulator management',
|
|
6
|
+
type: 'stdio',
|
|
7
|
+
command: 'npx',
|
|
8
|
+
args: ['-y', 'xcodebuildmcp@latest'],
|
|
9
|
+
stateful: true,
|
|
10
|
+
stateful_session_timeout: 600000, // 10 min — builds are slow
|
|
11
|
+
toolHints: {
|
|
12
|
+
discover_projs: 'First step — find workspace/project files in a directory.',
|
|
13
|
+
list_schemes: 'List available build schemes for a project.',
|
|
14
|
+
'session-set-defaults': 'Set workspace, scheme, simulator for all subsequent calls. Use workspacePath for CocoaPods projects. Do this early.',
|
|
15
|
+
build_sim: 'Build for iOS simulator.',
|
|
16
|
+
build_run_sim: 'Build, install, and launch on simulator in one step.',
|
|
17
|
+
list_sims: 'List available simulators with UDIDs.',
|
|
18
|
+
boot_sim: 'Boot a simulator by name or UDID.',
|
|
19
|
+
describe_ui: 'Get view hierarchy with precise frame coordinates for all visible elements. Use before UI interactions.',
|
|
20
|
+
screenshot: 'Capture simulator screenshot as PNG.',
|
|
21
|
+
tap: 'Tap an element by coordinates from describe_ui.',
|
|
22
|
+
type_text: 'Type text into the focused element.',
|
|
23
|
+
start_sim_log_cap: 'Start capturing simulator logs. Requires bundleId.',
|
|
24
|
+
stop_sim_log_cap: 'Stop log capture and retrieve logs. Requires logSessionId.',
|
|
25
|
+
record_sim_video: 'Record simulator screen video.',
|
|
26
|
+
clean: 'Clean build products.',
|
|
27
|
+
doctor: 'Check environment health (Xcode, simulators, tools).',
|
|
28
|
+
},
|
|
29
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "Documentation Configuration",
|
|
4
|
+
"description": "Configuration for the documentation flow. If domains are not specified, the agent will infer them from codebase structure.",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"$schema": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "JSON Schema reference"
|
|
10
|
+
},
|
|
11
|
+
"domains": {
|
|
12
|
+
"type": "array",
|
|
13
|
+
"description": "Main domains to document. Each domain becomes a top-level folder in docs/. If empty or missing, agent will auto-detect and ask for confirmation.",
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"properties": {
|
|
17
|
+
"name": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"description": "Domain identifier used for docs folder naming"
|
|
20
|
+
},
|
|
21
|
+
"path": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Path to the source code for this domain"
|
|
24
|
+
},
|
|
25
|
+
"description": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "Brief description of what this domain contains"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"required": ["name", "path"],
|
|
31
|
+
"additionalProperties": false
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"exclude": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"description": "Glob patterns for files and directories to exclude from documentation. Matched relative to project root. Excluded paths are filtered out before discovery agents scan the codebase.",
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "Glob pattern (e.g., \"**/test/**\", \"src/generated/**\", \"**/*.spec.ts\")"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"additionalProperties": false
|
|
44
|
+
}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://allhands.dev/schemas/settings.schema.json",
|
|
4
|
+
"title": "All-Hands Project Settings",
|
|
5
|
+
"description": "Repository-specific configuration for the all-hands harness",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"$schema": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "JSON Schema reference"
|
|
11
|
+
},
|
|
12
|
+
"git": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"description": "Git-related settings",
|
|
15
|
+
"properties": {
|
|
16
|
+
"baseBranch": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"default": "main",
|
|
19
|
+
"description": "Base branch for diff comparisons (main, master, develop, etc.)"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"tldr": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"description": "TLDR semantic indexing settings",
|
|
26
|
+
"properties": {
|
|
27
|
+
"enableForHarness": {
|
|
28
|
+
"type": "boolean",
|
|
29
|
+
"default": false,
|
|
30
|
+
"description": "Index .allhands directory alongside the project root. Useful for harness development."
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"validation": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"description": "Validation and quality settings",
|
|
37
|
+
"properties": {
|
|
38
|
+
"format": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"description": "Auto-format configuration for edited files",
|
|
41
|
+
"properties": {
|
|
42
|
+
"enabled": {
|
|
43
|
+
"type": "boolean",
|
|
44
|
+
"default": false,
|
|
45
|
+
"description": "Enable auto-formatting after Write/Edit tool use"
|
|
46
|
+
},
|
|
47
|
+
"command": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"description": "Default format command (e.g., 'pnpm format', 'bun run format')"
|
|
50
|
+
},
|
|
51
|
+
"patterns": {
|
|
52
|
+
"type": "array",
|
|
53
|
+
"description": "File-specific format commands",
|
|
54
|
+
"items": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"properties": {
|
|
57
|
+
"match": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"description": "Glob pattern to match files (e.g., '*.py', 'src/**/*.ts')"
|
|
60
|
+
},
|
|
61
|
+
"command": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"description": "Format command for matched files"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"required": ["match", "command"]
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"knowledge": {
|
|
74
|
+
"type": "object",
|
|
75
|
+
"description": "Knowledge search and indexing settings",
|
|
76
|
+
"properties": {
|
|
77
|
+
"similarityThreshold": {
|
|
78
|
+
"type": "number",
|
|
79
|
+
"default": 0.65,
|
|
80
|
+
"description": "Minimum similarity score for knowledge search results (0.0-1.0)"
|
|
81
|
+
},
|
|
82
|
+
"fullContextSimilarityThreshold": {
|
|
83
|
+
"type": "number",
|
|
84
|
+
"default": 0.82,
|
|
85
|
+
"description": "Similarity threshold above which full file contents are included in results (0.0-1.0)"
|
|
86
|
+
},
|
|
87
|
+
"contextTokenLimit": {
|
|
88
|
+
"type": "integer",
|
|
89
|
+
"default": 5000,
|
|
90
|
+
"description": "Maximum cumulative token budget for search results"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"oracle": {
|
|
95
|
+
"type": "object",
|
|
96
|
+
"description": "Oracle inference settings",
|
|
97
|
+
"properties": {
|
|
98
|
+
"defaultProvider": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"enum": ["gemini", "openai"],
|
|
101
|
+
"default": "gemini",
|
|
102
|
+
"description": "Default LLM provider for oracle/inference calls"
|
|
103
|
+
},
|
|
104
|
+
"compactionProvider": {
|
|
105
|
+
"type": "string",
|
|
106
|
+
"enum": ["gemini", "openai"],
|
|
107
|
+
"default": "gemini",
|
|
108
|
+
"description": "LLM provider for compaction analysis (defaults to gemini for large context window)"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"opencodeSdk": {
|
|
113
|
+
"type": "object",
|
|
114
|
+
"description": "OpenCode SDK agent execution settings",
|
|
115
|
+
"properties": {
|
|
116
|
+
"model": {
|
|
117
|
+
"type": "string",
|
|
118
|
+
"description": "Model identifier for agent execution (e.g., 'opencode/grok-code')"
|
|
119
|
+
},
|
|
120
|
+
"codesearchToolBudget": {
|
|
121
|
+
"type": "integer",
|
|
122
|
+
"default": 12,
|
|
123
|
+
"description": "Soft tool budget hint for codesearch agent"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"spawn": {
|
|
128
|
+
"type": "object",
|
|
129
|
+
"description": "Agent spawn settings",
|
|
130
|
+
"properties": {
|
|
131
|
+
"maxParallelPrompts": {
|
|
132
|
+
"type": "integer",
|
|
133
|
+
"default": 3,
|
|
134
|
+
"minimum": 1,
|
|
135
|
+
"maximum": 10,
|
|
136
|
+
"description": "Maximum concurrent executor agents when parallel mode is enabled"
|
|
137
|
+
},
|
|
138
|
+
"promptScopedAutocompactAt": {
|
|
139
|
+
"type": "integer",
|
|
140
|
+
"default": 65,
|
|
141
|
+
"description": "Autocompact threshold percentage for prompt-scoped agents"
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"emergent": {
|
|
146
|
+
"type": "object",
|
|
147
|
+
"description": "Emergent work settings (default domain pool for emergent planner)",
|
|
148
|
+
"properties": {
|
|
149
|
+
"hypothesisDomains": {
|
|
150
|
+
"type": "array",
|
|
151
|
+
"items": { "type": "string" },
|
|
152
|
+
"description": "Default pool of hypothesis domains available to the emergent planner. Agents diversify across these to discover valuable improvements.",
|
|
153
|
+
"examples": [
|
|
154
|
+
["testing", "stability", "performance", "feature", "ux", "integration"],
|
|
155
|
+
["reproduction", "diagnosis", "stability", "testing"]
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"daemon": {
|
|
161
|
+
"type": "object",
|
|
162
|
+
"description": "Background daemon settings",
|
|
163
|
+
"properties": {
|
|
164
|
+
"enabled": {
|
|
165
|
+
"type": "boolean",
|
|
166
|
+
"default": true,
|
|
167
|
+
"description": "Enable the MCP daemon for background services"
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"eventLoop": {
|
|
172
|
+
"type": "object",
|
|
173
|
+
"description": "Event loop timing settings",
|
|
174
|
+
"properties": {
|
|
175
|
+
"tickIntervalMs": {
|
|
176
|
+
"type": "integer",
|
|
177
|
+
"default": 5000,
|
|
178
|
+
"minimum": 1000,
|
|
179
|
+
"description": "Main event loop tick interval in milliseconds"
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
"prReview": {
|
|
184
|
+
"type": "object",
|
|
185
|
+
"description": "PR review detection and triggering settings",
|
|
186
|
+
"properties": {
|
|
187
|
+
"reviewMatchPattern": {
|
|
188
|
+
"type": "string",
|
|
189
|
+
"default": "greptile",
|
|
190
|
+
"description": "Pattern to match against PR comment author name and body to detect a review (case-insensitive)"
|
|
191
|
+
},
|
|
192
|
+
"rerunComment": {
|
|
193
|
+
"type": "string",
|
|
194
|
+
"default": "@greptile",
|
|
195
|
+
"description": "Comment to post on PR to trigger a re-review"
|
|
196
|
+
},
|
|
197
|
+
"checkFrequency": {
|
|
198
|
+
"type": "integer",
|
|
199
|
+
"default": 3,
|
|
200
|
+
"minimum": 1,
|
|
201
|
+
"description": "Check for PR reviews every N event loop ticks"
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
"disabledHooks": {
|
|
206
|
+
"type": "array",
|
|
207
|
+
"items": {
|
|
208
|
+
"type": "string"
|
|
209
|
+
},
|
|
210
|
+
"default": [],
|
|
211
|
+
"description": "Hook names to disable (pass through without executing). Format: 'category hookname' e.g. 'context signature', 'enforcement research-fetch'."
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|