Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ jobs:
- name: Run integration tests
run: >
bun x vitest run
--config tests/configs/integration.config.ts
--config tests/configs/integration.config.mts
--passWithNoTests

# ==================== API 测试(需要运行服务)====================
Expand Down
6 changes: 3 additions & 3 deletions biome.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"$schema": "https://biomejs.dev/schemas/2.4.16/schema.json",
"$schema": "https://biomejs.dev/schemas/2.5.6/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
Expand All @@ -9,9 +9,9 @@
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"preset": "recommended",
"a11y": {
"recommended": false
"preset": "none"
},
"correctness": {
"noUnusedImports": "error",
Expand Down
221 changes: 111 additions & 110 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,136 +16,137 @@
"format": "biome format --write .",
"format:check": "biome format .",
"clean:cache": "rm -rf .next tsconfig.tsbuildinfo node_modules/.cache",
"test": "vitest run",
"test:ui": "vitest --ui --watch",
"test:e2e": "vitest run --config tests/configs/e2e.config.ts --reporter=verbose",
"test:integration": "vitest run --config tests/configs/integration.config.ts --reporter=verbose",
"test:integration:provider-batch-ledger": "vitest run --config tests/configs/provider-batch-ledger-postgres.config.ts",
"test:coverage": "vitest run --coverage",
"test:coverage:logs-sessionid-time-filter": "vitest run --config tests/configs/logs-sessionid-time-filter.config.ts --coverage",
"test:coverage:codex-session-id-completer": "vitest run --config tests/configs/codex-session-id-completer.config.ts --coverage",
"test:coverage:thinking-signature-rectifier": "vitest run --config tests/configs/thinking-signature-rectifier.config.ts --coverage",
"test:coverage:thinking-effort-conflict-rectifier": "vitest run --config tests/configs/thinking-effort-conflict-rectifier.config.ts --coverage",
"test:coverage:quota": "vitest run --config tests/configs/quota.config.ts --coverage",
"test:coverage:my-usage": "vitest run --config tests/configs/my-usage.config.ts --coverage",
"test:coverage:proxy-guard-pipeline": "vitest run --config tests/configs/proxy-guard-pipeline.config.ts --coverage",
"test:coverage:include-session-id-in-errors": "vitest run --config tests/configs/include-session-id-in-errors.config.ts --coverage",
"test:coverage:usage-logs-sessionid-search": "vitest run --config tests/configs/usage-logs-sessionid-search.config.ts --coverage",
"test:coverage:session-binding": "vitest run --config tests/configs/session-binding.config.ts --coverage",
"test:ci": "vitest run --reporter=default --reporter=junit --outputFile.junit=reports/vitest-junit.xml",
"test:v1": "vitest run --config tests/configs/v1.config.ts --coverage --reporter=verbose && bun scripts/check-v1-critical-coverage.ts",
"test": "vitest run --configLoader bundle",
"test:ui": "vitest --ui --watch --configLoader bundle",
"test:e2e": "vitest run --config tests/configs/e2e.config.mts --reporter=verbose --configLoader bundle",
"test:integration": "vitest run --config tests/configs/integration.config.mts --reporter=verbose --configLoader bundle",
"test:integration:provider-batch-ledger": "vitest run --config tests/configs/provider-batch-ledger-postgres.config.mts --configLoader bundle",
"test:coverage": "vitest run --coverage --configLoader bundle",
"test:coverage:logs-sessionid-time-filter": "vitest run --config tests/configs/logs-sessionid-time-filter.config.mts --coverage --configLoader bundle",
"test:coverage:codex-session-id-completer": "vitest run --config tests/configs/codex-session-id-completer.config.mts --coverage --configLoader bundle",
"test:coverage:thinking-signature-rectifier": "vitest run --config tests/configs/thinking-signature-rectifier.config.mts --coverage --configLoader bundle",
"test:coverage:thinking-effort-conflict-rectifier": "vitest run --config tests/configs/thinking-effort-conflict-rectifier.config.mts --coverage --configLoader bundle",
"test:coverage:quota": "vitest run --config tests/configs/quota.config.mts --coverage --configLoader bundle",
"test:coverage:my-usage": "vitest run --config tests/configs/my-usage.config.mts --coverage --configLoader bundle",
"test:coverage:proxy-guard-pipeline": "vitest run --config tests/configs/proxy-guard-pipeline.config.mts --coverage --configLoader bundle",
"test:coverage:include-session-id-in-errors": "vitest run --config tests/configs/include-session-id-in-errors.config.mts --coverage --configLoader bundle",
"test:coverage:usage-logs-sessionid-search": "vitest run --config tests/configs/usage-logs-sessionid-search.config.mts --coverage --configLoader bundle",
"test:coverage:session-binding": "vitest run --config tests/configs/session-binding.config.mts --coverage --configLoader bundle",
"test:ci": "vitest run --configLoader bundle --reporter=default --reporter=junit --outputFile.junit=reports/vitest-junit.xml",
"test:v1": "vitest run --config tests/configs/v1.config.mts --coverage --reporter=verbose --configLoader bundle && bun scripts/check-v1-critical-coverage.ts",
"openapi:generate": "bun scripts/generate-v1-types.ts",
"openapi:check": "bun scripts/generate-v1-types.ts --check",
"openapi:lint": "bun scripts/lint-openapi.ts",
"cui": "npx cui-server --host 0.0.0.0 --port 30000 --token a7564bc8882aa9a2d25d8b4ea6ea1e2e",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

不要公开固定的 CUI 访问令牌。

Line 40 将服务绑定到 0.0.0.0,并在仓库中公开令牌。能够访问该端口的任意客户端都可以使用此令牌。

从环境变量读取令牌。默认绑定到 127.0.0.1。仅在明确需要远程访问时允许覆盖主机地址。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@package.json` at line 40, 更新 package.json 中的 cui
脚本:移除硬编码访问令牌,改为从环境变量读取;将主机默认设为 127.0.0.1,并仅通过环境变量允许显式覆盖主机地址,保留端口配置。

"db:generate": "drizzle-kit generate && node scripts/validate-migrations.js",
"db:generate": "drizzle-kit generate && node scripts/validate-migrations.mjs",
"db:migrate": "bun --conditions=react-server scripts/migrate.ts",
"db:push": "drizzle-kit push",
"db:studio": "drizzle-kit studio",
"validate:migrations": "node scripts/validate-migrations.js",
"validate:migrations": "node scripts/validate-migrations.mjs",
"i18n:audit-placeholders": "node scripts/audit-settings-placeholders.js --scope=settings,dashboard,myUsage --format=tsv",
"i18n:audit-placeholders:fail": "node scripts/audit-settings-placeholders.js --scope=settings,dashboard,myUsage --format=tsv --fail",
"i18n:audit-messages-no-emoji": "node scripts/audit-messages-no-emoji.js --format=tsv",
"i18n:audit-messages-no-emoji:fail": "node scripts/audit-messages-no-emoji.js --format=tsv --fail"
},
"dependencies": {
"@bull-board/api": "^7",
"@bull-board/express": "^7",
"@bull-board/api": "^8.5.0",
"@bull-board/express": "^8.5.0",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@hono/swagger-ui": "^0.6",
"@hono/zod-openapi": "^1",
"@hookform/resolvers": "^5",
"@iarna/toml": "^2",
"@langfuse/client": "^5",
"@langfuse/otel": "^5",
"@langfuse/tracing": "^5",
"@lobehub/icons": "^2",
"@opentelemetry/sdk-node": "^0.217",
"@radix-ui/react-alert-dialog": "^1",
"@radix-ui/react-avatar": "^1",
"@radix-ui/react-checkbox": "^1",
"@radix-ui/react-collapsible": "^1",
"@radix-ui/react-dialog": "^1",
"@radix-ui/react-dropdown-menu": "^2",
"@radix-ui/react-label": "^2",
"@radix-ui/react-popover": "^1",
"@radix-ui/react-progress": "^1",
"@radix-ui/react-scroll-area": "^1",
"@radix-ui/react-select": "^2",
"@radix-ui/react-slider": "^1",
"@radix-ui/react-slot": "^1",
"@radix-ui/react-switch": "^1",
"@radix-ui/react-tabs": "^1",
"@radix-ui/react-tooltip": "^1",
"@scalar/hono-api-reference": "^0.10",
"@tanstack/react-query": "^5",
"@tanstack/react-virtual": "^3",
"@tanstack/virtual-core": "^3",
"agentation": "^3",
"antd": "~6.3",
"bull": "^4",
"class-variance-authority": "^0.7",
"clsx": "^2",
"cmdk": "^1",
"date-fns": "4.1.0",
"date-fns-tz": "^3",
"decimal.js-light": "^2",
"dotenv": "^17",
"drizzle-orm": "^0.45",
"fetch-socks": "^1",
"fflate": "^0.8.2",
"framer-motion": "^12",
"hono": "^4",
"html2canvas": "^1",
"ioredis": "^5",
"jspdf": "^4",
"lucide-react": "^1.8.0",
"maplibre-gl": "^5.23.0",
"next": "^16",
"next-intl": "^4",
"next-themes": "^0.4",
"pino": "^10",
"pino-pretty": "^13",
"postgres": "^3",
"react": "^19",
"react-day-picker": "^10",
"react-dom": "^19",
"react-hook-form": "^7",
"react-syntax-highlighter": "^16",
"recharts": "^3",
"safe-regex": "^2",
"@hono/swagger-ui": "^0.6.1",
"@hono/zod-openapi": "^1.5.1",
"@hookform/resolvers": "^5.6.0",
"@iarna/toml": "^2.2.5",
"@langfuse/client": "^5.10.0",
"@langfuse/otel": "^5.10.0",
"@langfuse/tracing": "^5.10.0",
"@lobehub/icons": "^5.15.0",
"@opentelemetry/sdk-node": "^0.221.0",
"@radix-ui/react-alert-dialog": "^1.1.23",
"@radix-ui/react-avatar": "^1.2.6",
"@radix-ui/react-checkbox": "^1.3.11",
"@radix-ui/react-collapsible": "^1.1.20",
"@radix-ui/react-dialog": "^1.1.23",
"@radix-ui/react-dropdown-menu": "^2.1.24",
"@radix-ui/react-label": "^2.1.15",
"@radix-ui/react-popover": "^1.1.23",
"@radix-ui/react-progress": "^1.1.16",
"@radix-ui/react-scroll-area": "^1.2.18",
"@radix-ui/react-select": "^2.3.7",
"@radix-ui/react-slider": "^1.4.7",
"@radix-ui/react-slot": "^1.3.3",
"@radix-ui/react-switch": "^1.3.7",
"@radix-ui/react-tabs": "^1.1.21",
"@radix-ui/react-tooltip": "^1.2.16",
"@scalar/hono-api-reference": "^0.11.12",
"@tanstack/react-query": "^5.101.4",
"@tanstack/react-virtual": "^3.14.9",
"@tanstack/virtual-core": "^3.17.7",
"agentation": "^3.0.2",
"antd": "~6.5.3",
"bull": "^4.16.5",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"date-fns": "4.4.0",
"date-fns-tz": "^3.2.0",
"decimal.js-light": "^2.5.1",
"dotenv": "^17.4.2",
"drizzle-orm": "^0.45.2",
"fetch-socks": "^1.3.3",
"fflate": "^0.8.3",
"framer-motion": "^12.43.0",
"hono": "^4.12.33",
"html2canvas": "^1.4.1",
"ioredis": "^6.0.0",
"jspdf": "^4.2.1",
"lucide-react": "^1.28.0",
"maplibre-gl": "^6.1.0",
"next": "^16.2.12",
"next-intl": "^4.13.4",
"next-themes": "^0.4.6",
"pino": "^10.3.1",
"pino-pretty": "^13.1.3",
"postgres": "^3.4.9",
"react": "^19.2.8",
"react-day-picker": "^10.0.1",
"react-dom": "^19.2.8",
"react-hook-form": "^7.84.0",
"react-syntax-highlighter": "^16.1.1",
"recharts": "^3.10.1",
"safe-regex": "^2.1.1",
"server-only": "^0.0.1",
"sonner": "^2",
"tailwind-merge": "^3",
"timeago.js": "^4",
"tw-animate-css": "^1",
"undici": "^7",
"vaul": "^1",
"ws": "^8",
"zod": "^4"
"sonner": "^2.0.7",
"tailwind-merge": "^3.6.0",
"timeago.js": "^4.0.2",
"tw-animate-css": "^1.4.0",
"undici": "^8.9.0",

@github-actions github-actions Bot Aug 1, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[CRITICAL] [LOGIC-BUG] undici 8 breaks the production build\n\nWhy this is a problem: src/app/v1/_lib/proxy/forwarder.ts:5, src/app/v1/_lib/models/available-models.ts:2, and src/app/v1/_lib/gemini/auth.ts:1 import undici on the /v1 and /v1beta route graph. After this bump, both Docker Build Test and dev-build-deploy fail during bun run build with TypeError: ... markAsUncloneable is not a function while collecting page data for /v1/[...route] and /v1beta/[...route]. That makes the PR non-deployable. It also violates the exact project requirement: Before committing, always run: bun run build # Production build.\n\nSuggested fix:\njson\n"undici": "^7"\n\nIf you need 8.x, please pin a Bun-compatible version only after verifying bun run build succeeds in CI and locally.\n\nConfidence: 100/100

"vaul": "^1.1.2",
"ws": "^8.21.1",
"zod": "^4.4.3"
},
"devDependencies": {
"@biomejs/biome": "^2",
"@tailwindcss/postcss": "^4.2.0",
"@biomejs/biome": "^2.5.6",
"@tailwindcss/postcss": "^4.3.3",
"@types/geojson": "^7946.0.16",
"@types/ioredis": "^5",
"@types/node": "^25",
"@types/pg": "^8",
"@types/react": "^19",
"@types/react-dom": "^19",
"@types/react-syntax-highlighter": "^15",
"@types/ws": "^8",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@vitest/coverage-v8": "^4",
"@vitest/ui": "^4",
"bun-types": "^1",
"drizzle-kit": "^0.31",
"happy-dom": "^20",
"@types/ioredis": "^5.0.0",
"@types/node": "^26.1.2",
"@types/pg": "^8.20.3",
"@types/react": "^19.2.18",
"@types/react-dom": "^19.2.4",
"@types/react-syntax-highlighter": "^15.5.13",
"@types/ws": "^8.18.1",
"@typescript/native-preview": "7.0.0-dev.20260707.2",
"@vitest/coverage-v8": "^4.1.10",
"@vitest/ui": "^4.1.10",
"bun-types": "^1.3.14",
"drizzle-kit": "^0.31.10",
"happy-dom": "^20.11.1",
"openapi-typescript": "^7.13.0",
"tailwindcss": "^4",
"typescript": "^6",
"vitest": "^4"
"tailwindcss": "^4.3.3",
"typescript": "6.0.2",
"typescript-7": "npm:typescript@7.0.2",
"vitest": "^4.1.10"
Comment on lines 51 to +150

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Tracked Bun lockfiles:"
git ls-files | rg '(^|/)(bun\.lock|bun\.lockb)$' || true

echo "Bun install commands in workflows and package scripts:"
rg -n -C 2 'bun install|frozen-lockfile' .github package.json

Repository: ding113/claude-code-hub

Length of output: 2914


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo ".github workflow files:"
git ls-files .github/workflows | sort

echo "All tracked lockfiles:"
git ls-files | rg '(^|/)(package-lock\.json|yarn\.lock|pnpm-lock\.yaml|bun\.lock|bun\.lockb|Gemfile\.lock|poetry\.lock|uv\.lock)$' || true

echo "Bun lockfile-related comments:"
rg -n -C 1 'lockfile|Bun lock|bun\.lock|No lockfile|frozen-lockfile|frozen' .github package.json || true

echo "package scripts around install/lint/test/typecheck:"
python3 - <<'PY'
import pathlib, json
p=pathlib.Path('package.json')
data=json.loads(p.read_text())
for k,v in data.get('scripts',{}).items():
    if any(s in k or any(x in str(v).lower() for x in ['install','typecheck','test','lint','format']) for s in ['install','script']):
        print(f"{k}: {v}")
PY

echo "Top workflow install entries with surrounding context:"
for f in .github/workflows/*.yml .github/workflows/*.yaml; do
  [ -e "$f" ] || continue
  echo "--- $f"
  rg -n -C 3 'bun (install|update)|bun add|bunx|setup-bun|frozen-lockfile' "$f" || true
done

Repository: ding113/claude-code-hub

Length of output: 13662


提交 Bun lockfile,并将 CI 安装改为冻结模式。

package.json 大量依赖使用版本范围,但仓库未提交 bun.lock/bun.lockb,当前 .github/workflows/test.ymldev.ymlrelease.ymlpr-check.ymlclaude-ci-autofix.yml 均执行 bun install。生成并提交 bun.lock;没有冻结 lockfile 时 CI 会解析不同的依赖树,验证结果无法稳定复现。提交 lockfile 后将这些 CI 安装命令改为冻结模式。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@package.json` around lines 51 - 150, Generate and commit the Bun lockfile for
the dependencies in package.json, then update the bun install commands in the CI
workflows test.yml, dev.yml, release.yml, pr-check.yml, and
claude-ci-autofix.yml to use frozen-lockfile mode. Ensure all CI jobs install
exactly from the committed lockfile.

}
}
File renamed without changes.
2 changes: 1 addition & 1 deletion src/app/v1/_lib/proxy/affinity/affinity-store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ export class AffinityStore {
await redis.zremrangebyscore(descendantsV2Key, "-inf", now);
const [legacyDescendants, descendants] = await Promise.all([
redis.smembers(descendantsKey),
redis.zrange(descendantsV2Key, 0, -1),
redis.zrange(descendantsV2Key, "0", "-1"),
]);
const keys = [...new Set([...knownKeys, ...legacyDescendants, ...descendants])];
await redis.eval(
Expand Down
3 changes: 3 additions & 0 deletions src/components/ui/__tests__/map.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,9 @@ const maplibreMocks = vi.hoisted(() => {

vi.mock("maplibre-gl/dist/maplibre-gl.css", () => ({}));
vi.mock("maplibre-gl", () => ({
Map: maplibreMocks.FakeMap,
Marker: maplibreMocks.FakeMarker,
Popup: maplibreMocks.FakePopup,
default: {
Map: maplibreMocks.FakeMap,
Marker: maplibreMocks.FakeMarker,
Expand Down
3 changes: 2 additions & 1 deletion src/components/ui/map.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

import type * as GeoJSON from "geojson";
import { Loader2, Locate, Maximize, Minus, Plus, X } from "lucide-react";
import MapLibreGL, { type MarkerOptions, type PopupOptions } from "maplibre-gl";
import type { MarkerOptions, PopupOptions } from "maplibre-gl";
import * as MapLibreGL from "maplibre-gl";
import {
createContext,
forwardRef,
Expand Down
2 changes: 1 addition & 1 deletion src/lib/model-vendor-icons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ const VENDOR_ICON_COMPONENTS: Record<string, VendorIconComponent> = {
zhipuai: Zhipu.Color,
minimax: Minimax.Color,
perplexity: Perplexity.Color,
stepfun: Stepfun.Color,
stepfun: Stepfun,
baidu: Baidu.Color,
tencent: Tencent.Color,
bytedance: ByteDance.Color,
Expand Down
2 changes: 1 addition & 1 deletion src/lib/public-status/vendor-icon.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ const PUBLIC_STATUS_VENDOR_ICON_REGISTRY: Record<
qwen: Qwen.Color,
sensenova: SenseNova.Color,
spark: Spark.Color,
stepfun: Stepfun.Color,
stepfun: Stepfun,
together: Together.Color,
volcengine: Doubao.Color,
wenxin: Wenxin.Color,
Expand Down
2 changes: 1 addition & 1 deletion src/lib/session-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3175,7 +3175,7 @@ export class SessionManager {
try {
const pipeline = redis.pipeline();
for (const providerId of uniqueProviderIds) {
pipeline.zrange(`provider:${providerId}:active_sessions`, 0, -1);
pipeline.zrange(`provider:${providerId}:active_sessions`, "0", "-1");
}

const results = await pipeline.exec();
Expand Down
8 changes: 4 additions & 4 deletions src/lib/session-tracker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -536,7 +536,7 @@ export class SessionTracker {
cleanupPipeline.zrangebyscore(key, "-inf", cutoffMs);
cleanupPipeline.zremrangebyscore(key, "-inf", cutoffMs);
// 获取剩余 session IDs
cleanupPipeline.zrange(key, 0, -1);
cleanupPipeline.zrange(key, "0", "-1");
}

const cleanupResults = await cleanupPipeline.exec();
Expand Down Expand Up @@ -665,7 +665,7 @@ export class SessionTracker {
await redis.zremrangebyscore(key, "-inf", cutoffMs);

// 获取剩余的 session ID
return await redis.zrange(key, 0, -1);
return await redis.zrange(key, "0", "-1");
}

return [];
Expand All @@ -688,7 +688,7 @@ export class SessionTracker {
}
const cutoffMs = Date.now() - SessionTracker.SESSION_TTL_MS;
await redis.zremrangebyscore(key, "-inf", cutoffMs);
const sessionIdentities = await redis.zrange(key, 0, -1);
const sessionIdentities = await redis.zrange(key, "0", "-1");
if (sessionIdentities.length === 0) return [];

const pipeline = redis.pipeline();
Expand Down Expand Up @@ -739,7 +739,7 @@ export class SessionTracker {
}

// 2. 获取剩余的 session ID
const sessionIds = await redis.zrange(key, 0, -1);
const sessionIds = await redis.zrange(key, "0", "-1");
if (sessionIds.length === 0) return 0;

// 3. 批量验证 info 是否存在
Expand Down
4 changes: 2 additions & 2 deletions tests/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ echo 'DSN=postgres://postgres:postgres@localhost:5432/claude_code_hub' > .env.te

3. **启用所有测试**:

编辑 `vitest.config.ts`,注释掉 exclude 中的这几行:
编辑 `vitest.config.mts`,注释掉 exclude 中的这几行:
```typescript
// "tests/integration/**",
// "tests/api/users-actions.test.ts",
Expand Down Expand Up @@ -272,7 +272,7 @@ bun run test:ui
# 启动数据库
docker compose up -d postgres redis

# 启用所有测试(修改 vitest.config.ts
# 启用所有测试(修改 vitest.config.mts
# 然后运行
bun run test
```
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { createCoverageConfig } from "../vitest.base";
import { createCoverageConfig } from "../vitest.base.mts";

export default createCoverageConfig({
name: "codex-session-id-completer",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { createTestRunnerConfig } from "../vitest.base";
import { createTestRunnerConfig } from "../vitest.base.mts";

export default createTestRunnerConfig({
environment: "node",
Expand Down
Loading
Loading