From e65e2aec72416b2dbc1721118bfa5bff3f4ef0ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E6=9C=88?= Date: Tue, 2 Jun 2026 18:55:17 +0800 Subject: [PATCH] refactor: migrate test runner from vitest to bun:test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace vitest with bun:test across all 8 packages (47 test files) - vi.spyOn → spyOn, vi.restoreAllMocks() → mock.restore() (3 files) - toHaveBeenCalledOnce → toHaveBeenCalledTimes(1) (bun:test compat) - Delete all vitest.config.ts files - Remove vitest from devDependencies - Add preload.ts for process.exit mock (cli-workflow) - Fix import ordering (biome check --write) All tests pass. Closes #601 --- package.json | 1 - packages/cli-workflow/package.json | 7 ++-- .../__tests__/adapter-json-roundtrip.test.ts | 2 +- .../src/__tests__/cas-exit-code.test.ts | 2 +- .../cli-workflow/src/__tests__/cas.test.ts | 2 +- .../cli-workflow/src/__tests__/config.test.ts | 2 +- .../src/__tests__/current-role.test.ts | 2 +- .../src/__tests__/include-tag.test.ts | 2 +- .../cli-workflow/src/__tests__/log.test.ts | 2 +- .../src/__tests__/moderator-evaluate.test.ts | 2 +- .../cli-workflow/src/__tests__/preload.ts | 7 ++++ .../cli-workflow/src/__tests__/prompt.test.ts | 2 +- .../src/__tests__/resolve-head-hash.test.ts | 2 +- .../__tests__/setup-agent-discovery.test.ts | 36 +++++++------------ .../src/__tests__/setup-complexity.test.ts | 26 +++++++------- .../src/__tests__/setup-validate.test.ts | 34 +++++++++--------- .../solve-issue-tea-worktree.test.ts | 2 +- .../src/__tests__/spawn-agent-json.test.ts | 2 +- .../src/__tests__/step-read.test.ts | 2 +- .../src/__tests__/step-show-json.test.ts | 2 +- .../src/__tests__/step-timing.test.ts | 2 +- .../src/__tests__/store-global-cas.test.ts | 2 +- .../__tests__/thread-cancel-status.test.ts | 2 +- .../src/__tests__/thread-list-filters.test.ts | 2 +- .../src/__tests__/thread-location.test.ts | 4 +-- .../src/__tests__/thread-read-quota.test.ts | 2 +- .../__tests__/thread-read-xml-tags.test.ts | 2 +- .../src/__tests__/thread-resume.test.ts | 2 +- .../src/__tests__/thread-show-status.test.ts | 2 +- .../__tests__/thread-start-cwd-cli.test.ts | 6 ++-- .../src/__tests__/thread-step-count.test.ts | 2 +- .../src/__tests__/thread-suspend-step.test.ts | 2 +- .../thread-suspended-display.test.ts | 2 +- .../cli-workflow/src/__tests__/thread.test.ts | 2 +- .../src/__tests__/validate-semantic.test.ts | 2 +- .../src/__tests__/workflow-resolution.test.ts | 2 +- .../src/moderator/__tests__/evaluate.test.ts | 2 +- packages/cli-workflow/vitest.config.ts | 8 ----- packages/workflow-agent-builtin/package.json | 4 +-- .../workflow-agent-builtin/vitest.config.ts | 8 ----- .../workflow-agent-claude-code/package.json | 4 +-- .../vitest.config.ts | 8 ----- packages/workflow-agent-hermes/package.json | 4 +-- .../workflow-agent-hermes/vitest.config.ts | 8 ----- packages/workflow-dashboard/package.json | 8 ++--- .../editor/layout/__tests__/layout.test.ts | 2 +- .../editor/trans/__tests__/trans-in.test.ts | 2 +- .../editor/trans/__tests__/validate.test.ts | 2 +- packages/workflow-dashboard/vitest.config.ts | 14 -------- packages/workflow-protocol/package.json | 4 +-- .../src/__tests__/thread-index.test.ts | 2 +- .../src/__tests__/types.test.ts | 2 +- packages/workflow-protocol/vitest.config.ts | 8 ----- .../__tests__/adapter-retry.test.ts | 2 +- .../__tests__/adapter-stdout.test.ts | 2 +- .../build-continuation-prompt.test.ts | 2 +- .../build-output-format-instruction.test.ts | 2 +- .../__tests__/build-role-prompt.test.ts | 2 +- .../__tests__/context.test.ts | 2 +- .../__tests__/frontmatter-fast-path.test.ts | 2 +- .../__tests__/session-cache.test.ts | 2 +- packages/workflow-util-agent/package.json | 4 +-- .../src/__tests__/parseArgv.test.ts | 2 +- packages/workflow-util-agent/vitest.config.ts | 8 ----- .../__tests__/frontmatter-markdown.test.ts | 2 +- packages/workflow-util/package.json | 4 +-- .../src/__tests__/ulid-timestamp.test.ts | 2 +- packages/workflow-util/vitest.config.ts | 8 ----- 68 files changed, 116 insertions(+), 197 deletions(-) create mode 100644 packages/cli-workflow/src/__tests__/preload.ts delete mode 100644 packages/cli-workflow/vitest.config.ts delete mode 100644 packages/workflow-agent-builtin/vitest.config.ts delete mode 100644 packages/workflow-agent-claude-code/vitest.config.ts delete mode 100644 packages/workflow-agent-hermes/vitest.config.ts delete mode 100644 packages/workflow-dashboard/vitest.config.ts delete mode 100644 packages/workflow-protocol/vitest.config.ts delete mode 100644 packages/workflow-util-agent/vitest.config.ts delete mode 100644 packages/workflow-util/vitest.config.ts diff --git a/package.json b/package.json index d316662..3342973 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "@uncaged/workflow-agent-hermes": "workspace:*", "bun-types": "^1.3.13", "typescript": "^5.8.3", - "vitest": "^4.1.7", "yaml": "^2.9.0" }, "repository": { diff --git a/packages/cli-workflow/package.json b/packages/cli-workflow/package.json index c6d693c..5fea8a6 100644 --- a/packages/cli-workflow/package.json +++ b/packages/cli-workflow/package.json @@ -23,15 +23,14 @@ }, "scripts": { "prepublishOnly": "echo 'Use bun run release from repo root' && exit 1", - "test": "vitest run", - "test:ci": "vitest run" + "test": "bun test src/", + "test:ci": "bun test src/" }, "publishConfig": { "access": "public" }, "devDependencies": { - "@types/mustache": "^4.2.6", - "vitest": "^4.1.6" + "@types/mustache": "^4.2.6" }, "repository": { "type": "git", diff --git a/packages/cli-workflow/src/__tests__/adapter-json-roundtrip.test.ts b/packages/cli-workflow/src/__tests__/adapter-json-roundtrip.test.ts index 23538af..16b3fdb 100644 --- a/packages/cli-workflow/src/__tests__/adapter-json-roundtrip.test.ts +++ b/packages/cli-workflow/src/__tests__/adapter-json-roundtrip.test.ts @@ -1,3 +1,4 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { execFileSync } from "node:child_process"; import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; @@ -5,7 +6,6 @@ import { join } from "node:path"; import { putSchema } from "@ocas/core"; import { createFsStore } from "@ocas/fs"; import type { CasRef, StepNodePayload, ThreadId } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { registerUwfSchemas } from "../schemas.js"; import { saveThreadsIndex } from "../store.js"; diff --git a/packages/cli-workflow/src/__tests__/cas-exit-code.test.ts b/packages/cli-workflow/src/__tests__/cas-exit-code.test.ts index 065eb7c..3a65a4c 100644 --- a/packages/cli-workflow/src/__tests__/cas-exit-code.test.ts +++ b/packages/cli-workflow/src/__tests__/cas-exit-code.test.ts @@ -1,8 +1,8 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { execSync } from "node:child_process"; import { mkdir, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdCasPutText } from "../commands/cas.js"; let storageRoot: string; diff --git a/packages/cli-workflow/src/__tests__/cas.test.ts b/packages/cli-workflow/src/__tests__/cas.test.ts index a56e3ec..4afff5a 100644 --- a/packages/cli-workflow/src/__tests__/cas.test.ts +++ b/packages/cli-workflow/src/__tests__/cas.test.ts @@ -1,7 +1,7 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdCasHas, cmdCasPutText } from "../commands/cas.js"; let storageRoot: string; diff --git a/packages/cli-workflow/src/__tests__/config.test.ts b/packages/cli-workflow/src/__tests__/config.test.ts index 6303aeb..9604c0a 100644 --- a/packages/cli-workflow/src/__tests__/config.test.ts +++ b/packages/cli-workflow/src/__tests__/config.test.ts @@ -1,7 +1,7 @@ +import { describe, expect, test } from "bun:test"; import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { describe, expect, test } from "vitest"; import { cmdConfigGet, cmdConfigList, diff --git a/packages/cli-workflow/src/__tests__/current-role.test.ts b/packages/cli-workflow/src/__tests__/current-role.test.ts index 23e941f..63f0d5d 100644 --- a/packages/cli-workflow/src/__tests__/current-role.test.ts +++ b/packages/cli-workflow/src/__tests__/current-role.test.ts @@ -1,9 +1,9 @@ +import { describe, expect, test } from "bun:test"; import { mkdir, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { putSchema } from "@ocas/core"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; -import { describe, expect, test } from "vitest"; import { createMarker, deleteMarker } from "../background/index.js"; import { cmdThreadList, cmdThreadShow, cmdThreadStart } from "../commands/thread.js"; import { diff --git a/packages/cli-workflow/src/__tests__/include-tag.test.ts b/packages/cli-workflow/src/__tests__/include-tag.test.ts index a061c06..f451ebd 100644 --- a/packages/cli-workflow/src/__tests__/include-tag.test.ts +++ b/packages/cli-workflow/src/__tests__/include-tag.test.ts @@ -1,7 +1,7 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { parse } from "yaml"; import { createIncludeTag } from "../include.js"; diff --git a/packages/cli-workflow/src/__tests__/log.test.ts b/packages/cli-workflow/src/__tests__/log.test.ts index 48dbbe5..b9ba793 100644 --- a/packages/cli-workflow/src/__tests__/log.test.ts +++ b/packages/cli-workflow/src/__tests__/log.test.ts @@ -1,7 +1,7 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, readdir, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdLogClean, cmdLogList, cmdLogShow } from "../commands/log.js"; let storageRoot: string; diff --git a/packages/cli-workflow/src/__tests__/moderator-evaluate.test.ts b/packages/cli-workflow/src/__tests__/moderator-evaluate.test.ts index 97e414e..b1c50c3 100644 --- a/packages/cli-workflow/src/__tests__/moderator-evaluate.test.ts +++ b/packages/cli-workflow/src/__tests__/moderator-evaluate.test.ts @@ -1,5 +1,5 @@ +import { describe, expect, test } from "bun:test"; import type { Target, WorkflowPayload } from "@uncaged/workflow-protocol"; -import { describe, expect, test } from "vitest"; import { evaluate } from "../moderator/evaluate.js"; diff --git a/packages/cli-workflow/src/__tests__/preload.ts b/packages/cli-workflow/src/__tests__/preload.ts new file mode 100644 index 0000000..b2288a8 --- /dev/null +++ b/packages/cli-workflow/src/__tests__/preload.ts @@ -0,0 +1,7 @@ +const originalExit = process.exit; + +process.exit = ((code?: number) => { + throw new Error(`process.exit(${code ?? 1})`); +}) as typeof process.exit; + +export { originalExit }; diff --git a/packages/cli-workflow/src/__tests__/prompt.test.ts b/packages/cli-workflow/src/__tests__/prompt.test.ts index b2b908e..5e45bba 100644 --- a/packages/cli-workflow/src/__tests__/prompt.test.ts +++ b/packages/cli-workflow/src/__tests__/prompt.test.ts @@ -1,7 +1,7 @@ +import { describe, expect, test } from "bun:test"; import { execFileSync } from "node:child_process"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; -import { describe, expect, test } from "vitest"; const __dirname = dirname(fileURLToPath(import.meta.url)); diff --git a/packages/cli-workflow/src/__tests__/resolve-head-hash.test.ts b/packages/cli-workflow/src/__tests__/resolve-head-hash.test.ts index a3e7dd9..425e789 100644 --- a/packages/cli-workflow/src/__tests__/resolve-head-hash.test.ts +++ b/packages/cli-workflow/src/__tests__/resolve-head-hash.test.ts @@ -1,8 +1,8 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { resolveHeadHash } from "../commands/shared.js"; import { appendThreadHistory, saveThreadsIndex } from "../store.js"; diff --git a/packages/cli-workflow/src/__tests__/setup-agent-discovery.test.ts b/packages/cli-workflow/src/__tests__/setup-agent-discovery.test.ts index bb74a3d..43710a1 100644 --- a/packages/cli-workflow/src/__tests__/setup-agent-discovery.test.ts +++ b/packages/cli-workflow/src/__tests__/setup-agent-discovery.test.ts @@ -1,8 +1,8 @@ +import { afterEach, beforeEach, describe, expect, mock, spyOn, test } from "bun:test"; import { readFileSync } from "node:fs"; import { mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { afterEach, beforeEach, describe, expect, test, vi } from "vitest"; import { parse } from "yaml"; import { _agentNameFromBinary, _printAgentMenu, cmdSetup } from "../commands/setup.js"; @@ -31,7 +31,7 @@ describe("_agentNameFromBinary", () => { describe("_printAgentMenu", () => { test("prints known agents with labels", () => { const logs: string[] = []; - vi.spyOn(console, "log").mockImplementation((...args: unknown[]) => { + spyOn(console, "log").mockImplementation((...args: unknown[]) => { logs.push(args.join(" ")); }); @@ -40,12 +40,12 @@ describe("_printAgentMenu", () => { expect(logs.some((l) => l.includes("Hermes"))).toBe(true); expect(logs.some((l) => l.includes("Claude Code"))).toBe(true); - vi.restoreAllMocks(); + mock.restore(); }); test("prints unknown agents with binary name as label", () => { const logs: string[] = []; - vi.spyOn(console, "log").mockImplementation((...args: unknown[]) => { + spyOn(console, "log").mockImplementation((...args: unknown[]) => { logs.push(args.join(" ")); }); @@ -53,7 +53,7 @@ describe("_printAgentMenu", () => { expect(logs.some((l) => l.includes("uwf-custom-agent"))).toBe(true); - vi.restoreAllMocks(); + mock.restore(); }); }); @@ -67,7 +67,7 @@ describe("cmdSetup agent configuration", () => { }); afterEach(async () => { - vi.restoreAllMocks(); + mock.restore(); await rm(storageRoot, { recursive: true, force: true }); }); @@ -80,9 +80,7 @@ describe("cmdSetup agent configuration", () => { }); test("defaults to hermes agent when no agent specified", async () => { - vi.spyOn(globalThis, "fetch").mockResolvedValue( - new Response(JSON.stringify({}), { status: 200 }), - ); + spyOn(globalThis, "fetch").mockResolvedValue(new Response(JSON.stringify({}), { status: 200 })); const result = await cmdSetup(baseArgs()); @@ -93,9 +91,7 @@ describe("cmdSetup agent configuration", () => { }); test("writes specified agent as default", async () => { - vi.spyOn(globalThis, "fetch").mockResolvedValue( - new Response(JSON.stringify({}), { status: 200 }), - ); + spyOn(globalThis, "fetch").mockResolvedValue(new Response(JSON.stringify({}), { status: 200 })); const result = await cmdSetup({ ...baseArgs(), agent: "claude-code" }); @@ -106,9 +102,7 @@ describe("cmdSetup agent configuration", () => { }); test("preserves existing agents when adding new one", async () => { - vi.spyOn(globalThis, "fetch").mockResolvedValue( - new Response(JSON.stringify({}), { status: 200 }), - ); + spyOn(globalThis, "fetch").mockResolvedValue(new Response(JSON.stringify({}), { status: 200 })); // First setup with hermes await cmdSetup(baseArgs()); @@ -122,9 +116,7 @@ describe("cmdSetup agent configuration", () => { }); test("updates defaultAgent on re-run with different agent", async () => { - vi.spyOn(globalThis, "fetch").mockResolvedValue( - new Response(JSON.stringify({}), { status: 200 }), - ); + spyOn(globalThis, "fetch").mockResolvedValue(new Response(JSON.stringify({}), { status: 200 })); await cmdSetup(baseArgs()); const config1 = parse(readFileSync(join(storageRoot, "config.yaml"), "utf8")); @@ -136,9 +128,7 @@ describe("cmdSetup agent configuration", () => { }); test("normalizes agent name with uwf- prefix to bare name", async () => { - vi.spyOn(globalThis, "fetch").mockResolvedValue( - new Response(JSON.stringify({}), { status: 200 }), - ); + spyOn(globalThis, "fetch").mockResolvedValue(new Response(JSON.stringify({}), { status: 200 })); const result = await cmdSetup({ ...baseArgs(), agent: "uwf-hermes" }); @@ -151,9 +141,7 @@ describe("cmdSetup agent configuration", () => { }); test("normalizes uwf-claude-code to claude-code", async () => { - vi.spyOn(globalThis, "fetch").mockResolvedValue( - new Response(JSON.stringify({}), { status: 200 }), - ); + spyOn(globalThis, "fetch").mockResolvedValue(new Response(JSON.stringify({}), { status: 200 })); const result = await cmdSetup({ ...baseArgs(), agent: "uwf-claude-code" }); diff --git a/packages/cli-workflow/src/__tests__/setup-complexity.test.ts b/packages/cli-workflow/src/__tests__/setup-complexity.test.ts index 06f111d..9904cff 100644 --- a/packages/cli-workflow/src/__tests__/setup-complexity.test.ts +++ b/packages/cli-workflow/src/__tests__/setup-complexity.test.ts @@ -1,7 +1,7 @@ +import { afterEach, describe, expect, mock, spyOn, test } from "bun:test"; import { mkdirSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { afterEach, describe, expect, test, vi } from "vitest"; import { _discoverAgents, _isBackspace, @@ -178,7 +178,7 @@ describe("_isBackspace", () => { describe("_printProviderMenu", () => { afterEach(() => { - vi.restoreAllMocks(); + mock.restore(); }); const providers = [ @@ -188,7 +188,7 @@ describe("_printProviderMenu", () => { test("prints correct number of lines (one per provider + custom)", () => { const lines: string[] = []; - vi.spyOn(console, "log").mockImplementation((msg: string) => { + spyOn(console, "log").mockImplementation((msg: string) => { lines.push(msg); }); _printProviderMenu(providers); @@ -198,7 +198,7 @@ describe("_printProviderMenu", () => { test("custom option number = providers.length + 1", () => { const lines: string[] = []; - vi.spyOn(console, "log").mockImplementation((msg: string) => { + spyOn(console, "log").mockImplementation((msg: string) => { lines.push(msg); }); _printProviderMenu(providers); @@ -208,7 +208,7 @@ describe("_printProviderMenu", () => { test("each provider line contains its label and baseUrl", () => { const lines: string[] = []; - vi.spyOn(console, "log").mockImplementation((msg: string) => { + spyOn(console, "log").mockImplementation((msg: string) => { lines.push(msg); }); _printProviderMenu(providers); @@ -294,12 +294,12 @@ describe("_resolveModelChoice", () => { describe("_printModelMenu", () => { afterEach(() => { - vi.restoreAllMocks(); + mock.restore(); }); test("prints all models — each model name appears in output", () => { const output: string[] = []; - vi.spyOn(console, "log").mockImplementation((msg: string) => { + spyOn(console, "log").mockImplementation((msg: string) => { output.push(msg); }); const models = ["model-a", "model-b", "model-c"]; @@ -312,7 +312,7 @@ describe("_printModelMenu", () => { test("single column when termCols is very small", () => { const output: string[] = []; - vi.spyOn(console, "log").mockImplementation((msg: string) => { + spyOn(console, "log").mockImplementation((msg: string) => { output.push(msg); }); _printModelMenu(["a", "b", "c"], 1); @@ -322,7 +322,7 @@ describe("_printModelMenu", () => { test("wide terminal fits multiple columns", () => { const output: string[] = []; - vi.spyOn(console, "log").mockImplementation((msg: string) => { + spyOn(console, "log").mockImplementation((msg: string) => { output.push(msg); }); const models = Array.from({ length: 6 }, (_, i) => `m${i}`); @@ -338,12 +338,12 @@ describe("_printModelMenu", () => { describe("_printValidationResult", () => { afterEach(() => { - vi.restoreAllMocks(); + mock.restore(); }); test("ok=true prints success message containing '✓'", () => { const lines: string[] = []; - vi.spyOn(console, "log").mockImplementation((msg: string) => { + spyOn(console, "log").mockImplementation((msg: string) => { lines.push(msg); }); _printValidationResult({ ok: true, error: null }); @@ -352,7 +352,7 @@ describe("_printValidationResult", () => { test("ok=false prints warning message containing '⚠'", () => { const lines: string[] = []; - vi.spyOn(console, "log").mockImplementation((msg: string) => { + spyOn(console, "log").mockImplementation((msg: string) => { lines.push(msg); }); _printValidationResult({ ok: false, error: "HTTP 401" }); @@ -361,7 +361,7 @@ describe("_printValidationResult", () => { test("ok=false includes the error string in output", () => { const lines: string[] = []; - vi.spyOn(console, "log").mockImplementation((msg: string) => { + spyOn(console, "log").mockImplementation((msg: string) => { lines.push(msg); }); _printValidationResult({ ok: false, error: "HTTP 401" }); diff --git a/packages/cli-workflow/src/__tests__/setup-validate.test.ts b/packages/cli-workflow/src/__tests__/setup-validate.test.ts index 7221775..51d8f05 100644 --- a/packages/cli-workflow/src/__tests__/setup-validate.test.ts +++ b/packages/cli-workflow/src/__tests__/setup-validate.test.ts @@ -1,7 +1,7 @@ +import { afterEach, beforeEach, describe, expect, mock, spyOn, test } from "bun:test"; import { mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { afterEach, beforeEach, describe, expect, test, vi } from "vitest"; import { cmdSetup, validateModel } from "../commands/setup.js"; describe("validateModel", () => { @@ -10,18 +10,18 @@ describe("validateModel", () => { const MODEL = "test-model"; afterEach(() => { - vi.restoreAllMocks(); + mock.restore(); }); test("success path — returns ok on 200", async () => { - const mockFetch = vi - .spyOn(globalThis, "fetch") - .mockResolvedValue(new Response(JSON.stringify({}), { status: 200 })); + const mockFetch = spyOn(globalThis, "fetch").mockResolvedValue( + new Response(JSON.stringify({}), { status: 200 }), + ); const result = await validateModel(BASE_URL, API_KEY, MODEL); expect(result).toEqual({ ok: true, value: undefined }); - expect(mockFetch).toHaveBeenCalledOnce(); + expect(mockFetch).toHaveBeenCalledTimes(1); const [url, opts] = mockFetch.mock.calls[0]!; expect(url).toBe(`${BASE_URL}/chat/completions`); @@ -37,7 +37,7 @@ describe("validateModel", () => { }); test("HTTP 401 — returns error containing 401", async () => { - vi.spyOn(globalThis, "fetch").mockResolvedValue( + spyOn(globalThis, "fetch").mockResolvedValue( new Response("Unauthorized", { status: 401, statusText: "Unauthorized" }), ); @@ -50,7 +50,7 @@ describe("validateModel", () => { }); test("HTTP 404 — returns error containing 404", async () => { - vi.spyOn(globalThis, "fetch").mockResolvedValue( + spyOn(globalThis, "fetch").mockResolvedValue( new Response("Not Found", { status: 404, statusText: "Not Found" }), ); @@ -64,7 +64,7 @@ describe("validateModel", () => { test("network timeout — returns error mentioning timeout", async () => { const err = new DOMException("signal timed out", "AbortError"); - vi.spyOn(globalThis, "fetch").mockRejectedValue(err); + spyOn(globalThis, "fetch").mockRejectedValue(err); const result = await validateModel(BASE_URL, API_KEY, MODEL); @@ -75,7 +75,7 @@ describe("validateModel", () => { }); test("network error (DNS/connection) — returns error mentioning connectivity", async () => { - vi.spyOn(globalThis, "fetch").mockRejectedValue(new TypeError("fetch failed")); + spyOn(globalThis, "fetch").mockRejectedValue(new TypeError("fetch failed")); const result = await validateModel(BASE_URL, API_KEY, MODEL); @@ -86,9 +86,9 @@ describe("validateModel", () => { }); test("request body correctness", async () => { - const mockFetch = vi - .spyOn(globalThis, "fetch") - .mockResolvedValue(new Response(JSON.stringify({}), { status: 200 })); + const mockFetch = spyOn(globalThis, "fetch").mockResolvedValue( + new Response(JSON.stringify({}), { status: 200 }), + ); await validateModel(BASE_URL, API_KEY, "my-special-model"); @@ -109,7 +109,7 @@ describe("cmdSetup with validation", () => { }); afterEach(async () => { - vi.restoreAllMocks(); + mock.restore(); await rm(storageRoot, { recursive: true, force: true }); }); @@ -122,9 +122,7 @@ describe("cmdSetup with validation", () => { }); test("includes validation result on success", async () => { - vi.spyOn(globalThis, "fetch").mockResolvedValue( - new Response(JSON.stringify({}), { status: 200 }), - ); + spyOn(globalThis, "fetch").mockResolvedValue(new Response(JSON.stringify({}), { status: 200 })); const result = await cmdSetup(setupArgs()); @@ -134,7 +132,7 @@ describe("cmdSetup with validation", () => { }); test("includes validation failure — config still saved", async () => { - vi.spyOn(globalThis, "fetch").mockResolvedValue( + spyOn(globalThis, "fetch").mockResolvedValue( new Response("Unauthorized", { status: 401, statusText: "Unauthorized" }), ); diff --git a/packages/cli-workflow/src/__tests__/solve-issue-tea-worktree.test.ts b/packages/cli-workflow/src/__tests__/solve-issue-tea-worktree.test.ts index bcf0c49..45ad3fa 100644 --- a/packages/cli-workflow/src/__tests__/solve-issue-tea-worktree.test.ts +++ b/packages/cli-workflow/src/__tests__/solve-issue-tea-worktree.test.ts @@ -1,7 +1,7 @@ +import { describe, expect, test } from "bun:test"; import { readFile } from "node:fs/promises"; import { join } from "node:path"; import type { WorkflowPayload } from "@uncaged/workflow-protocol"; -import { describe, expect, test } from "vitest"; import { parse } from "yaml"; /** diff --git a/packages/cli-workflow/src/__tests__/spawn-agent-json.test.ts b/packages/cli-workflow/src/__tests__/spawn-agent-json.test.ts index 1a0c261..a150e1c 100644 --- a/packages/cli-workflow/src/__tests__/spawn-agent-json.test.ts +++ b/packages/cli-workflow/src/__tests__/spawn-agent-json.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, test } from "vitest"; +import { describe, expect, test } from "bun:test"; /** * B-group tests: validate JSON parsing logic used by spawnAgent. diff --git a/packages/cli-workflow/src/__tests__/step-read.test.ts b/packages/cli-workflow/src/__tests__/step-read.test.ts index 0212c2d..35dbf87 100644 --- a/packages/cli-workflow/src/__tests__/step-read.test.ts +++ b/packages/cli-workflow/src/__tests__/step-read.test.ts @@ -1,10 +1,10 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { bootstrap, putSchema } from "@ocas/core"; import { createFsStore } from "@ocas/fs"; import type { CasRef } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdStepRead } from "../commands/step.js"; import { registerUwfSchemas } from "../schemas.js"; diff --git a/packages/cli-workflow/src/__tests__/step-show-json.test.ts b/packages/cli-workflow/src/__tests__/step-show-json.test.ts index 168367f..d037d15 100644 --- a/packages/cli-workflow/src/__tests__/step-show-json.test.ts +++ b/packages/cli-workflow/src/__tests__/step-show-json.test.ts @@ -1,10 +1,10 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { bootstrap, type Hash, type JSONSchema, putSchema } from "@ocas/core"; import { createFsStore } from "@ocas/fs"; import type { CasRef, StepNodePayload } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdStepShow } from "../commands/step.js"; import { formatOutput } from "../format.js"; import { registerUwfSchemas } from "../schemas.js"; diff --git a/packages/cli-workflow/src/__tests__/step-timing.test.ts b/packages/cli-workflow/src/__tests__/step-timing.test.ts index bfc38b2..b083807 100644 --- a/packages/cli-workflow/src/__tests__/step-timing.test.ts +++ b/packages/cli-workflow/src/__tests__/step-timing.test.ts @@ -1,3 +1,4 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; @@ -5,7 +6,6 @@ import { bootstrap, putSchema } from "@ocas/core"; import { createFsStore } from "@ocas/fs"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; import { STEP_NODE_SCHEMA } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdStepList } from "../commands/step.js"; import { cmdThreadRead } from "../commands/thread.js"; import { registerUwfSchemas } from "../schemas.js"; diff --git a/packages/cli-workflow/src/__tests__/store-global-cas.test.ts b/packages/cli-workflow/src/__tests__/store-global-cas.test.ts index 07aacbf..13df2cf 100644 --- a/packages/cli-workflow/src/__tests__/store-global-cas.test.ts +++ b/packages/cli-workflow/src/__tests__/store-global-cas.test.ts @@ -1,7 +1,7 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { createUwfStore, getCasDir, getGlobalCasDir } from "../store.js"; describe("Global CAS directory", () => { diff --git a/packages/cli-workflow/src/__tests__/thread-cancel-status.test.ts b/packages/cli-workflow/src/__tests__/thread-cancel-status.test.ts index 6e9a8aa..c7579c8 100644 --- a/packages/cli-workflow/src/__tests__/thread-cancel-status.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-cancel-status.test.ts @@ -1,8 +1,8 @@ +import { describe, expect, test } from "bun:test"; import { mkdtemp } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; -import { describe, expect, test } from "vitest"; import { appendThreadHistory, loadThreadHistory } from "../store.js"; describe("thread cancel status", () => { diff --git a/packages/cli-workflow/src/__tests__/thread-list-filters.test.ts b/packages/cli-workflow/src/__tests__/thread-list-filters.test.ts index fa4d9fc..d343599 100644 --- a/packages/cli-workflow/src/__tests__/thread-list-filters.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-list-filters.test.ts @@ -1,10 +1,10 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; import { createThreadIndexEntry } from "@uncaged/workflow-protocol"; import { extractUlidTimestamp, generateUlid } from "@uncaged/workflow-util"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { createMarker, deleteMarker } from "../background/index.js"; import { cmdThreadList } from "../commands/thread.js"; import { parseTimeInput } from "../commands/thread-time-parser.js"; diff --git a/packages/cli-workflow/src/__tests__/thread-location.test.ts b/packages/cli-workflow/src/__tests__/thread-location.test.ts index f0ec957..b9b413f 100644 --- a/packages/cli-workflow/src/__tests__/thread-location.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-location.test.ts @@ -1,8 +1,8 @@ +import { describe, expect, test } from "bun:test"; import { mkdir, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import type { CasRef, StartNodePayload, ThreadId } from "@uncaged/workflow-protocol"; -import { describe, expect, test } from "vitest"; import { cmdThreadStart } from "../commands/thread.js"; import { createUwfStore } from "../store.js"; @@ -128,7 +128,7 @@ graph: const workflowPath = join(tmpDir, "test-location.yaml"); await writeFile(workflowPath, workflowYaml, "utf8"); - // Relative path should fail (process.exit is wrapped by vitest) + // Relative path should fail via fail() → process.exit (mocked in test preload) await expect( cmdThreadStart(storageRoot, workflowPath, "test", tmpDir, "relative/path"), ).rejects.toThrow(); diff --git a/packages/cli-workflow/src/__tests__/thread-read-quota.test.ts b/packages/cli-workflow/src/__tests__/thread-read-quota.test.ts index 6387ac7..de7586f 100644 --- a/packages/cli-workflow/src/__tests__/thread-read-quota.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-read-quota.test.ts @@ -1,10 +1,10 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { bootstrap, putSchema } from "@ocas/core"; import { createFsStore } from "@ocas/fs"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdThreadRead } from "../commands/thread.js"; import { registerUwfSchemas } from "../schemas.js"; import { saveThreadsIndex } from "../store.js"; diff --git a/packages/cli-workflow/src/__tests__/thread-read-xml-tags.test.ts b/packages/cli-workflow/src/__tests__/thread-read-xml-tags.test.ts index cfadb89..5fe22ed 100644 --- a/packages/cli-workflow/src/__tests__/thread-read-xml-tags.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-read-xml-tags.test.ts @@ -1,10 +1,10 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { bootstrap, putSchema } from "@ocas/core"; import { createFsStore } from "@ocas/fs"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdThreadRead, THREAD_READ_DEFAULT_QUOTA } from "../commands/thread.js"; import { registerUwfSchemas } from "../schemas.js"; import type { UwfStore } from "../store.js"; diff --git a/packages/cli-workflow/src/__tests__/thread-resume.test.ts b/packages/cli-workflow/src/__tests__/thread-resume.test.ts index b539244..663633e 100644 --- a/packages/cli-workflow/src/__tests__/thread-resume.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-resume.test.ts @@ -1,3 +1,4 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { execFileSync } from "node:child_process"; import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; @@ -5,7 +6,6 @@ import { join } from "node:path"; import { putSchema } from "@ocas/core"; import { createFsStore } from "@ocas/fs"; import type { CasRef, StepNodePayload, ThreadId } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { parse } from "yaml"; import { cmdThreadShow } from "../commands/thread.js"; import { registerUwfSchemas } from "../schemas.js"; diff --git a/packages/cli-workflow/src/__tests__/thread-show-status.test.ts b/packages/cli-workflow/src/__tests__/thread-show-status.test.ts index eb24764..7989165 100644 --- a/packages/cli-workflow/src/__tests__/thread-show-status.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-show-status.test.ts @@ -1,9 +1,9 @@ +import { describe, expect, test } from "bun:test"; import { mkdir, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { putSchema } from "@ocas/core"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; -import { describe, expect, test } from "vitest"; import { createMarker, deleteMarker } from "../background/index.js"; import { cmdThreadShow, cmdThreadStart } from "../commands/thread.js"; import { diff --git a/packages/cli-workflow/src/__tests__/thread-start-cwd-cli.test.ts b/packages/cli-workflow/src/__tests__/thread-start-cwd-cli.test.ts index c324ec5..23ab1fe 100644 --- a/packages/cli-workflow/src/__tests__/thread-start-cwd-cli.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-start-cwd-cli.test.ts @@ -1,9 +1,9 @@ +import { describe, expect, test } from "bun:test"; import { execFileSync } from "node:child_process"; import { mkdir, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import type { CasRef, StartNodePayload, ThreadId } from "@uncaged/workflow-protocol"; -import { describe, expect, test } from "vitest"; import { cmdThreadStart } from "../commands/thread.js"; import { createUwfStore, loadThreadsIndex } from "../store.js"; @@ -136,14 +136,14 @@ graph: const uwfBin = join(process.cwd(), "dist", "cli.js"); // Register the workflow - execFileSync("node", [uwfBin, "workflow", "add", workflowPath], { + execFileSync("bun", [uwfBin, "workflow", "add", workflowPath], { env: { ...process.env, UWF_STORAGE_ROOT: storageRoot, UNCAGED_CAS_DIR: casDir }, encoding: "utf8", }); // Verify CLI accepts --cwd option (no error thrown) const output = execFileSync( - "node", + "bun", [uwfBin, "thread", "start", "test-cwd-cli", "-p", "test prompt", "--cwd", testCwd], { env: { ...process.env, UWF_STORAGE_ROOT: storageRoot, UNCAGED_CAS_DIR: casDir }, diff --git a/packages/cli-workflow/src/__tests__/thread-step-count.test.ts b/packages/cli-workflow/src/__tests__/thread-step-count.test.ts index 1077de3..a4ba092 100644 --- a/packages/cli-workflow/src/__tests__/thread-step-count.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-step-count.test.ts @@ -1,6 +1,6 @@ +import { describe, expect, test } from "bun:test"; import { execFileSync } from "node:child_process"; import { join } from "node:path"; -import { describe, expect, test } from "vitest"; const CLI_PATH = join(import.meta.dirname, "..", "cli.js"); diff --git a/packages/cli-workflow/src/__tests__/thread-suspend-step.test.ts b/packages/cli-workflow/src/__tests__/thread-suspend-step.test.ts index 74ce2b3..8f50eac 100644 --- a/packages/cli-workflow/src/__tests__/thread-suspend-step.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-suspend-step.test.ts @@ -1,3 +1,4 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { execFileSync } from "node:child_process"; import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; @@ -5,7 +6,6 @@ import { join } from "node:path"; import { putSchema } from "@ocas/core"; import { createFsStore } from "@ocas/fs"; import type { CasRef, StepNodePayload, ThreadId } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { parse } from "yaml"; import { cmdThreadShow } from "../commands/thread.js"; import { registerUwfSchemas } from "../schemas.js"; diff --git a/packages/cli-workflow/src/__tests__/thread-suspended-display.test.ts b/packages/cli-workflow/src/__tests__/thread-suspended-display.test.ts index 3477bad..4fb95a4 100644 --- a/packages/cli-workflow/src/__tests__/thread-suspended-display.test.ts +++ b/packages/cli-workflow/src/__tests__/thread-suspended-display.test.ts @@ -1,10 +1,10 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { putSchema } from "@ocas/core"; import type { ThreadId } from "@uncaged/workflow-protocol"; import { createThreadIndexEntry, markThreadSuspended } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdThreadList, cmdThreadShow } from "../commands/thread.js"; import { createUwfStore, saveThreadsIndex } from "../store.js"; diff --git a/packages/cli-workflow/src/__tests__/thread.test.ts b/packages/cli-workflow/src/__tests__/thread.test.ts index 00b1a16..0c3216c 100644 --- a/packages/cli-workflow/src/__tests__/thread.test.ts +++ b/packages/cli-workflow/src/__tests__/thread.test.ts @@ -1,10 +1,10 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { bootstrap, putSchema } from "@ocas/core"; import { createFsStore } from "@ocas/fs"; import type { CasRef, ThreadId } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { cmdStepList, cmdStepShow } from "../commands/step.js"; import { cmdThreadRead, diff --git a/packages/cli-workflow/src/__tests__/validate-semantic.test.ts b/packages/cli-workflow/src/__tests__/validate-semantic.test.ts index 021a8b9..05259ec 100644 --- a/packages/cli-workflow/src/__tests__/validate-semantic.test.ts +++ b/packages/cli-workflow/src/__tests__/validate-semantic.test.ts @@ -1,5 +1,5 @@ +import { describe, expect, test } from "bun:test"; import type { WorkflowPayload } from "@uncaged/workflow-protocol"; -import { describe, expect, test } from "vitest"; import { validateWorkflow } from "../validate-semantic.js"; /** Build a valid two-role workflow that passes all checks. */ diff --git a/packages/cli-workflow/src/__tests__/workflow-resolution.test.ts b/packages/cli-workflow/src/__tests__/workflow-resolution.test.ts index 52aa71c..f472f0e 100644 --- a/packages/cli-workflow/src/__tests__/workflow-resolution.test.ts +++ b/packages/cli-workflow/src/__tests__/workflow-resolution.test.ts @@ -1,9 +1,9 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { createFsStore } from "@ocas/fs"; import type { CasRef, WorkflowPayload } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { stringify } from "yaml"; import { cmdThreadStart } from "../commands/thread.js"; import { registerUwfSchemas } from "../schemas.js"; diff --git a/packages/cli-workflow/src/moderator/__tests__/evaluate.test.ts b/packages/cli-workflow/src/moderator/__tests__/evaluate.test.ts index 8290bbb..53d6285 100644 --- a/packages/cli-workflow/src/moderator/__tests__/evaluate.test.ts +++ b/packages/cli-workflow/src/moderator/__tests__/evaluate.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, test } from "vitest"; +import { describe, expect, test } from "bun:test"; import { evaluate } from "../evaluate.js"; import { isSuspendResult } from "../types.js"; diff --git a/packages/cli-workflow/vitest.config.ts b/packages/cli-workflow/vitest.config.ts deleted file mode 100644 index cf90b0a..0000000 --- a/packages/cli-workflow/vitest.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - include: ["src/__tests__/**/*.test.ts"], - passWithNoTests: true, - }, -}); diff --git a/packages/workflow-agent-builtin/package.json b/packages/workflow-agent-builtin/package.json index 507ad12..3ca57f0 100644 --- a/packages/workflow-agent-builtin/package.json +++ b/packages/workflow-agent-builtin/package.json @@ -19,8 +19,8 @@ }, "scripts": { "prepublishOnly": "echo 'Use bun run release from repo root' && exit 1", - "test": "vitest run", - "test:ci": "vitest run" + "test": "bun test __tests__/", + "test:ci": "bun test __tests__/" }, "dependencies": { "@ocas/core": "^0.1.1", diff --git a/packages/workflow-agent-builtin/vitest.config.ts b/packages/workflow-agent-builtin/vitest.config.ts deleted file mode 100644 index cf90b0a..0000000 --- a/packages/workflow-agent-builtin/vitest.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - include: ["src/__tests__/**/*.test.ts"], - passWithNoTests: true, - }, -}); diff --git a/packages/workflow-agent-claude-code/package.json b/packages/workflow-agent-claude-code/package.json index 8d3800a..9131791 100644 --- a/packages/workflow-agent-claude-code/package.json +++ b/packages/workflow-agent-claude-code/package.json @@ -19,8 +19,8 @@ }, "scripts": { "prepublishOnly": "echo 'Use bun run release from repo root' && exit 1", - "test": "vitest run", - "test:ci": "vitest run" + "test": "bun test __tests__/", + "test:ci": "bun test __tests__/" }, "dependencies": { "@ocas/core": "^0.1.1", diff --git a/packages/workflow-agent-claude-code/vitest.config.ts b/packages/workflow-agent-claude-code/vitest.config.ts deleted file mode 100644 index cf90b0a..0000000 --- a/packages/workflow-agent-claude-code/vitest.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - include: ["src/__tests__/**/*.test.ts"], - passWithNoTests: true, - }, -}); diff --git a/packages/workflow-agent-hermes/package.json b/packages/workflow-agent-hermes/package.json index 1b70c7e..7a0da29 100644 --- a/packages/workflow-agent-hermes/package.json +++ b/packages/workflow-agent-hermes/package.json @@ -19,8 +19,8 @@ }, "scripts": { "prepublishOnly": "echo 'Use bun run release from repo root' && exit 1", - "test": "vitest run", - "test:ci": "vitest run" + "test": "bun test __tests__/", + "test:ci": "bun test __tests__/" }, "dependencies": { "@ocas/core": "^0.1.1", diff --git a/packages/workflow-agent-hermes/vitest.config.ts b/packages/workflow-agent-hermes/vitest.config.ts deleted file mode 100644 index cf90b0a..0000000 --- a/packages/workflow-agent-hermes/vitest.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - include: ["src/__tests__/**/*.test.ts"], - passWithNoTests: true, - }, -}); diff --git a/packages/workflow-dashboard/package.json b/packages/workflow-dashboard/package.json index 0e18696..3eebf0c 100644 --- a/packages/workflow-dashboard/package.json +++ b/packages/workflow-dashboard/package.json @@ -6,8 +6,8 @@ "scripts": { "dev": "bun server.ts", "build": "vite build", - "test": "vitest run", - "test:ci": "vitest run" + "test": "bun test src/", + "test:ci": "bun test src/" }, "dependencies": { "@base-ui/react": "^1.5.0", @@ -33,10 +33,8 @@ "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.2", - "@vitest/ui": "^4.1.7", "tailwindcss": "^4.2.4", "typescript": "^5.8.3", - "vite": "^8.0.13", - "vitest": "^4.1.7" + "vite": "^8.0.13" } } diff --git a/packages/workflow-dashboard/src/editor/layout/__tests__/layout.test.ts b/packages/workflow-dashboard/src/editor/layout/__tests__/layout.test.ts index 9c6e610..f6ead88 100644 --- a/packages/workflow-dashboard/src/editor/layout/__tests__/layout.test.ts +++ b/packages/workflow-dashboard/src/editor/layout/__tests__/layout.test.ts @@ -1,5 +1,5 @@ +import { describe, expect, it } from "bun:test"; import type { Edge, Node } from "@xyflow/react"; -import { describe, expect, it } from "vitest"; import { LayoutLR } from "../index.js"; function makeNode(id: string): Node { diff --git a/packages/workflow-dashboard/src/editor/trans/__tests__/trans-in.test.ts b/packages/workflow-dashboard/src/editor/trans/__tests__/trans-in.test.ts index 4e73cac..75a700b 100644 --- a/packages/workflow-dashboard/src/editor/trans/__tests__/trans-in.test.ts +++ b/packages/workflow-dashboard/src/editor/trans/__tests__/trans-in.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from "vitest"; +import { describe, expect, it } from "bun:test"; import { transIn } from "../trans-in.js"; import type { WorkFlowStep } from "../type.js"; diff --git a/packages/workflow-dashboard/src/editor/trans/__tests__/validate.test.ts b/packages/workflow-dashboard/src/editor/trans/__tests__/validate.test.ts index 0ba0511..bb2794c 100644 --- a/packages/workflow-dashboard/src/editor/trans/__tests__/validate.test.ts +++ b/packages/workflow-dashboard/src/editor/trans/__tests__/validate.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from "vitest"; +import { describe, expect, it } from "bun:test"; import type { AnyWorkEdge, AnyWorkNode } from "../../type.js"; import { validate } from "../validate.js"; diff --git a/packages/workflow-dashboard/vitest.config.ts b/packages/workflow-dashboard/vitest.config.ts deleted file mode 100644 index 6b84473..0000000 --- a/packages/workflow-dashboard/vitest.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import path from "node:path"; -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - environment: "node", - include: ["src/**/__tests__/**/*.test.ts"], - }, - resolve: { - alias: { - "@": path.resolve(import.meta.dirname, "./src"), - }, - }, -}); diff --git a/packages/workflow-protocol/package.json b/packages/workflow-protocol/package.json index df703e0..25ebeb5 100644 --- a/packages/workflow-protocol/package.json +++ b/packages/workflow-protocol/package.json @@ -16,8 +16,8 @@ }, "scripts": { "prepublishOnly": "echo 'Use bun run release from repo root' && exit 1", - "test": "vitest run", - "test:ci": "vitest run" + "test": "bun test src/__tests__/", + "test:ci": "bun test src/__tests__/" }, "dependencies": { "@ocas/core": "^0.1.1", diff --git a/packages/workflow-protocol/src/__tests__/thread-index.test.ts b/packages/workflow-protocol/src/__tests__/thread-index.test.ts index 2d58e7e..2631935 100644 --- a/packages/workflow-protocol/src/__tests__/thread-index.test.ts +++ b/packages/workflow-protocol/src/__tests__/thread-index.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, test } from "vitest"; +import { describe, expect, test } from "bun:test"; import { createThreadIndexEntry, markThreadSuspended, diff --git a/packages/workflow-protocol/src/__tests__/types.test.ts b/packages/workflow-protocol/src/__tests__/types.test.ts index ed8a1bc..bd9060f 100644 --- a/packages/workflow-protocol/src/__tests__/types.test.ts +++ b/packages/workflow-protocol/src/__tests__/types.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, test } from "vitest"; +import { describe, expect, test } from "bun:test"; import type { StartNodePayload, StepRecord, Target } from "../types.js"; describe("Protocol types for thread/edge location", () => { diff --git a/packages/workflow-protocol/vitest.config.ts b/packages/workflow-protocol/vitest.config.ts deleted file mode 100644 index cf90b0a..0000000 --- a/packages/workflow-protocol/vitest.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - include: ["src/__tests__/**/*.test.ts"], - passWithNoTests: true, - }, -}); diff --git a/packages/workflow-util-agent/__tests__/adapter-retry.test.ts b/packages/workflow-util-agent/__tests__/adapter-retry.test.ts index 079ac2b..10f83e6 100644 --- a/packages/workflow-util-agent/__tests__/adapter-retry.test.ts +++ b/packages/workflow-util-agent/__tests__/adapter-retry.test.ts @@ -1,5 +1,5 @@ +import { describe, expect, test } from "bun:test"; import { createMemoryStore, putSchema } from "@ocas/core"; -import { describe, expect, test } from "vitest"; import { tryFrontmatterFastPath } from "../src/frontmatter.js"; diff --git a/packages/workflow-util-agent/__tests__/adapter-stdout.test.ts b/packages/workflow-util-agent/__tests__/adapter-stdout.test.ts index c150032..343c2de 100644 --- a/packages/workflow-util-agent/__tests__/adapter-stdout.test.ts +++ b/packages/workflow-util-agent/__tests__/adapter-stdout.test.ts @@ -1,5 +1,5 @@ +import { describe, expect, test } from "bun:test"; import { createMemoryStore, putSchema } from "@ocas/core"; -import { describe, expect, test } from "vitest"; import { tryFrontmatterFastPath } from "../src/frontmatter.js"; diff --git a/packages/workflow-util-agent/__tests__/build-continuation-prompt.test.ts b/packages/workflow-util-agent/__tests__/build-continuation-prompt.test.ts index eb8ccfc..89df65e 100644 --- a/packages/workflow-util-agent/__tests__/build-continuation-prompt.test.ts +++ b/packages/workflow-util-agent/__tests__/build-continuation-prompt.test.ts @@ -1,5 +1,5 @@ +import { describe, expect, test } from "bun:test"; import type { StepContext } from "@uncaged/workflow-protocol"; -import { describe, expect, test } from "vitest"; import { buildContinuationPrompt } from "../src/build-continuation-prompt.js"; const reviewerStep: StepContext = { diff --git a/packages/workflow-util-agent/__tests__/build-output-format-instruction.test.ts b/packages/workflow-util-agent/__tests__/build-output-format-instruction.test.ts index e63a33e..45efc35 100644 --- a/packages/workflow-util-agent/__tests__/build-output-format-instruction.test.ts +++ b/packages/workflow-util-agent/__tests__/build-output-format-instruction.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, test } from "vitest"; +import { describe, expect, test } from "bun:test"; import { buildOutputFormatInstruction } from "../src/build-output-format-instruction.js"; diff --git a/packages/workflow-util-agent/__tests__/build-role-prompt.test.ts b/packages/workflow-util-agent/__tests__/build-role-prompt.test.ts index a56f702..36cc17e 100644 --- a/packages/workflow-util-agent/__tests__/build-role-prompt.test.ts +++ b/packages/workflow-util-agent/__tests__/build-role-prompt.test.ts @@ -1,5 +1,5 @@ +import { describe, expect, test } from "bun:test"; import type { RoleDefinition } from "@uncaged/workflow-protocol"; -import { describe, expect, test } from "vitest"; import { buildRolePrompt } from "../src/build-role-prompt.js"; describe("buildRolePrompt", () => { diff --git a/packages/workflow-util-agent/__tests__/context.test.ts b/packages/workflow-util-agent/__tests__/context.test.ts index 6079678..dfab360 100644 --- a/packages/workflow-util-agent/__tests__/context.test.ts +++ b/packages/workflow-util-agent/__tests__/context.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, test } from "vitest"; +import { describe, expect, test } from "bun:test"; // We need to test buildHistory indirectly through buildContext // since buildHistory is not exported. For now, we'll test the integration diff --git a/packages/workflow-util-agent/__tests__/frontmatter-fast-path.test.ts b/packages/workflow-util-agent/__tests__/frontmatter-fast-path.test.ts index f17d646..61cc6c8 100644 --- a/packages/workflow-util-agent/__tests__/frontmatter-fast-path.test.ts +++ b/packages/workflow-util-agent/__tests__/frontmatter-fast-path.test.ts @@ -1,5 +1,5 @@ +import { describe, expect, test } from "bun:test"; import { createMemoryStore, putSchema } from "@ocas/core"; -import { describe, expect, test } from "vitest"; import { tryFrontmatterFastPath } from "../src/frontmatter.js"; diff --git a/packages/workflow-util-agent/__tests__/session-cache.test.ts b/packages/workflow-util-agent/__tests__/session-cache.test.ts index 81934d8..673c76a 100644 --- a/packages/workflow-util-agent/__tests__/session-cache.test.ts +++ b/packages/workflow-util-agent/__tests__/session-cache.test.ts @@ -1,7 +1,7 @@ +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import { mkdir, readdir, readFile, rm, stat, writeFile } from "node:fs/promises"; import { dirname, join } from "node:path"; import type { ThreadId } from "@uncaged/workflow-protocol"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; import { getCachedSessionId, getCachePath, setCachedSessionId } from "../src/session-cache.js"; import { resolveStorageRoot } from "../src/storage.js"; diff --git a/packages/workflow-util-agent/package.json b/packages/workflow-util-agent/package.json index b041c53..1598c35 100644 --- a/packages/workflow-util-agent/package.json +++ b/packages/workflow-util-agent/package.json @@ -16,8 +16,8 @@ }, "scripts": { "prepublishOnly": "echo 'Use bun run release from repo root' && exit 1", - "test": "vitest run", - "test:ci": "vitest run" + "test": "bun test __tests__/ src/__tests__/", + "test:ci": "bun test __tests__/ src/__tests__/" }, "dependencies": { "@ocas/core": "^0.1.1", diff --git a/packages/workflow-util-agent/src/__tests__/parseArgv.test.ts b/packages/workflow-util-agent/src/__tests__/parseArgv.test.ts index 903a11f..ec5dddc 100644 --- a/packages/workflow-util-agent/src/__tests__/parseArgv.test.ts +++ b/packages/workflow-util-agent/src/__tests__/parseArgv.test.ts @@ -1,4 +1,4 @@ -import { afterEach, beforeEach, describe, expect, test } from "vitest"; +import { afterEach, beforeEach, describe, expect, test } from "bun:test"; describe("parseArgv empty prompt error message", () => { let stderrOutput: string; diff --git a/packages/workflow-util-agent/vitest.config.ts b/packages/workflow-util-agent/vitest.config.ts deleted file mode 100644 index cf90b0a..0000000 --- a/packages/workflow-util-agent/vitest.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - include: ["src/__tests__/**/*.test.ts"], - passWithNoTests: true, - }, -}); diff --git a/packages/workflow-util/__tests__/frontmatter-markdown.test.ts b/packages/workflow-util/__tests__/frontmatter-markdown.test.ts index b12a4e1..9509ba1 100644 --- a/packages/workflow-util/__tests__/frontmatter-markdown.test.ts +++ b/packages/workflow-util/__tests__/frontmatter-markdown.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from "vitest"; +import { describe, expect, it } from "bun:test"; import type { AgentFrontmatter } from "../src/index.js"; import { parseFrontmatterMarkdown, validateFrontmatter } from "../src/index.js"; diff --git a/packages/workflow-util/package.json b/packages/workflow-util/package.json index 007274c..adff6c7 100644 --- a/packages/workflow-util/package.json +++ b/packages/workflow-util/package.json @@ -16,8 +16,8 @@ }, "scripts": { "prepublishOnly": "echo 'Use bun run release from repo root' && exit 1", - "test": "vitest run", - "test:ci": "vitest run" + "test": "bun test __tests__/ src/__tests__/", + "test:ci": "bun test __tests__/ src/__tests__/" }, "dependencies": {}, "devDependencies": { diff --git a/packages/workflow-util/src/__tests__/ulid-timestamp.test.ts b/packages/workflow-util/src/__tests__/ulid-timestamp.test.ts index 742d2bb..7e25cf3 100644 --- a/packages/workflow-util/src/__tests__/ulid-timestamp.test.ts +++ b/packages/workflow-util/src/__tests__/ulid-timestamp.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from "vitest"; +import { describe, expect, it } from "bun:test"; import { extractUlidTimestamp, generateUlid } from "../ulid.js"; describe("extractUlidTimestamp", () => { diff --git a/packages/workflow-util/vitest.config.ts b/packages/workflow-util/vitest.config.ts deleted file mode 100644 index cf90b0a..0000000 --- a/packages/workflow-util/vitest.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - include: ["src/__tests__/**/*.test.ts"], - passWithNoTests: true, - }, -});