feat(aircoding): AirCoding V2 baseline — deterministic multi-agent architecture
Forked from OpenCode v1.17.4 with multi-agent system: - 5 agents: aircoding, scheduler, worker, architect, reviewer - Deterministic DAG scheduling engine (coordinator_tick) - Tool whitelists as hard enforcement - AirCoding validation plugin - V1 requirements: C4 docs, ADR, AGENTS.md, debug-log.md - Design documents in docs/
This commit is contained in:
74
packages/opencode/test/cli/mcp-add.test.ts
Normal file
74
packages/opencode/test/cli/mcp-add.test.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import { describe, expect } from "bun:test"
|
||||
import { Effect } from "effect"
|
||||
import path from "path"
|
||||
import { cliIt } from "../lib/cli-process"
|
||||
|
||||
describe("opencode mcp add (non-interactive subprocess)", () => {
|
||||
cliIt.concurrent(
|
||||
"adds a remote server with HTTP headers",
|
||||
({ home, opencode }) =>
|
||||
Effect.gen(function* () {
|
||||
const result = yield* opencode.spawn([
|
||||
"mcp",
|
||||
"add",
|
||||
"github",
|
||||
"--url",
|
||||
"https://example.com/mcp",
|
||||
"--header",
|
||||
"Authorization=Bearer {env:GITHUB_TOKEN}",
|
||||
"--header",
|
||||
"X-Option=one=two",
|
||||
])
|
||||
opencode.expectExit(result, 0)
|
||||
|
||||
const config = yield* Effect.promise(() =>
|
||||
Bun.file(path.join(home, ".config", "opencode", "opencode.json")).json(),
|
||||
)
|
||||
expect(config.mcp.github).toEqual({
|
||||
type: "remote",
|
||||
url: "https://example.com/mcp",
|
||||
headers: {
|
||||
Authorization: "Bearer {env:GITHUB_TOKEN}",
|
||||
"X-Option": "one=two",
|
||||
},
|
||||
})
|
||||
}),
|
||||
60_000,
|
||||
)
|
||||
|
||||
cliIt.concurrent(
|
||||
"adds a local server while preserving argv and environment values",
|
||||
({ home, opencode }) =>
|
||||
Effect.gen(function* () {
|
||||
const result = yield* opencode.spawn([
|
||||
"mcp",
|
||||
"add",
|
||||
"local",
|
||||
"--env",
|
||||
"API_KEY=secret",
|
||||
"--env",
|
||||
"VALUE=one=two",
|
||||
"--",
|
||||
"npx",
|
||||
"-y",
|
||||
"@example/server",
|
||||
"--label",
|
||||
"two words",
|
||||
])
|
||||
opencode.expectExit(result, 0)
|
||||
|
||||
const config = yield* Effect.promise(() =>
|
||||
Bun.file(path.join(home, ".config", "opencode", "opencode.json")).json(),
|
||||
)
|
||||
expect(config.mcp.local).toEqual({
|
||||
type: "local",
|
||||
command: ["npx", "-y", "@example/server", "--label", "two words"],
|
||||
environment: {
|
||||
API_KEY: "secret",
|
||||
VALUE: "one=two",
|
||||
},
|
||||
})
|
||||
}),
|
||||
60_000,
|
||||
)
|
||||
})
|
||||
Reference in New Issue
Block a user