diff --git a/README.ja.md b/README.ja.md
index 3cf49d24e..45845a5c0 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -32,9 +32,9 @@
-> Anthropicはあなたを閉じ込めたがっています。Claude Codeは素敵な牢獄ですが、それでも牢獄には変わりありません。
+> これはステロイドを打ったコーディングです。一つのモデルのステロイドじゃない——薬局丸ごとです。
>
-> 私たちは囲い込みをしません。Claudeでオーケストレーションし、GPTで推論し、Kimiでスピードを出し、Geminiでビジョンを処理する。未来は一つの勝者を選ぶことではなく、すべてをオーケストレーションすることだ。モデルはどんどん安くなり、どんどん賢くなる。特定のプロバイダーが独占することはない。私たちはその開かれた市場のために構築している。
+> Claudeでオーケストレーションし、GPTで推論し、Kimiでスピードを出し、Geminiでビジョンを処理する。モデルはどんどん安くなり、どんどん賢くなる。特定のプロバイダーが独占することはない。私たちはその開かれた市場のために構築している。Anthropicの牢獄は素敵だ。だが、私たちはそこに住まない。
@@ -79,11 +79,13 @@
# Oh My OpenCode
-Claude Code、Codex、数々のOSSモデルに振り回されていませんか。ワークフローを設定し、エージェントをデバッグする毎日に疲れているでしょう。
+最初はこれを「Claude Codeにステロイドを打ったもの」と呼んでいました。それは過小評価でした。
-私たちがその泥臭い作業をすべてやっておきました。すべてをテストし、実際に機能するものだけを残しました。
+一つのモデルに薬を盛るのではありません。カルテルを動かすんです。Claude、GPT、Kimi、Gemini——それぞれが得意なことを、並列で、止まらずに。モデルは毎月安くなっており、どのプロバイダーも独占できません。私たちはすでにその世界に生きています。
-OmOをインストールして、`ultrawork`とタイプしてください。それだけです。
+その泥臭い作業をすべてやっておきました。すべてをテストし、実際に機能するものだけを残しました。
+
+OmOをインストールして、`ultrawork`とタイプしてください。狂ったようにコーディングしてください。
## インストール
diff --git a/README.zh-cn.md b/README.zh-cn.md
index a6962f618..f03163a4c 100644
--- a/README.zh-cn.md
+++ b/README.zh-cn.md
@@ -32,9 +32,9 @@
-> Anthropic 想把你锁在他们的生态里。Claude Code 是个漂亮的牢笼,但依然是牢笼。
+> 这是类固醇式编程。不是一个模型的类固醇——而是整个药库。
>
-> 我们不玩那种封闭的花招。我们用 Claude 做编排,用 GPT 做推理,用 Kimi 提速度,用 Gemini 处理视觉。未来不是押注一个赢家,而是编排所有模型。模型正在变得越来越便宜,越来越聪明。没有一个提供商能够垄断。我们正在为那个开放的市场而构建。
+> 用 Claude 做编排,用 GPT 做推理,用 Kimi 提速度,用 Gemini 处理视觉。模型正在变得越来越便宜,越来越聪明。没有一个提供商能够垄断。我们正在为那个开放的市场而构建。Anthropic 的牢笼很漂亮。但我们不住那。
@@ -79,11 +79,13 @@
# Oh My OpenCode
-你是不是还在不同的模型之间(Claude Code、Codex、各种开源模型)来回切换?还在死磕工作流配置?还在给 Agent 修 Bug?
+我们最初把这叫做“给 Claude Code 打类固醇”。那是低估了它。
+
+不是只给一个模型打药。我们在运营一个联合体。Claude、GPT、Kimi、Gemini——各司其职,并行运转,永不停歇。模型每个月都在变便宜,没有任何提供商能够垄断。我们已经活在那个世界里了。
脏活累活我们替你干了。我们测试了一切,只留下了真正有用的。
-安装 OmO。敲下 `ultrawork`。完事。
+安装 OmO。敲下 `ultrawork`。疯狂地写代码吧。
diff --git a/src/cli/run/events.test.ts b/src/cli/run/events.test.ts
index d777ba54c..334d518ef 100644
--- a/src/cli/run/events.test.ts
+++ b/src/cli/run/events.test.ts
@@ -1,5 +1,5 @@
import { describe, it, expect, spyOn } from "bun:test"
-import { createEventState, serializeError, type EventState } from "./events"
+import { createEventState, processEvents, serializeError, type EventState } from "./events"
import type { RunContext, EventPayload } from "./types"
const createMockContext = (sessionID: string = "test-session"): RunContext => ({
@@ -99,7 +99,6 @@ describe("event handling", () => {
}
const events = toAsyncIterable([payload])
- const { processEvents } = await import("./events")
// when
await processEvents(ctx, events, state)
@@ -121,7 +120,6 @@ describe("event handling", () => {
}
const events = toAsyncIterable([payload])
- const { processEvents } = await import("./events")
// when
await processEvents(ctx, events, state)
@@ -144,7 +142,6 @@ describe("event handling", () => {
}
const events = toAsyncIterable([payload])
- const { processEvents } = await import("./events")
// when
await processEvents(ctx, events, state)
@@ -164,7 +161,6 @@ describe("event handling", () => {
}
const events = toAsyncIterable([payload])
- const { processEvents } = await import("./events")
// when
await processEvents(ctx, events, state)
@@ -184,7 +180,6 @@ describe("event handling", () => {
}
const events = toAsyncIterable([payload])
- const { processEvents } = await import("./events")
// when
await processEvents(ctx, events, state)
@@ -207,7 +202,6 @@ describe("event handling", () => {
}
const events = toAsyncIterable([payload])
- const { processEvents } = await import("./events")
// when
await processEvents(ctx, events, state)
@@ -229,7 +223,6 @@ describe("event handling", () => {
}
const events = toAsyncIterable([payload])
- const { processEvents } = await import("./events")
//#when
await processEvents(ctx, events, state)
@@ -251,7 +244,6 @@ describe("event handling", () => {
}
const events = toAsyncIterable([payload])
- const { processEvents } = await import("./events")
// when
await processEvents(ctx, events, state)
@@ -275,7 +267,6 @@ describe("event handling", () => {
}
const events = toAsyncIterable([payload])
- const { processEvents } = await import("./events")
// when
await processEvents(ctx, events, state)
@@ -299,7 +290,6 @@ describe("event handling", () => {
}
const events = toAsyncIterable([payload])
- const { processEvents } = await import("./events")
// when
await processEvents(ctx, events, state)
@@ -328,7 +318,6 @@ describe("event handling", () => {
}
const events = toAsyncIterable([payload])
- const { processEvents } = await import("./events")
// when
await processEvents(ctx, events, state)
diff --git a/src/hooks/anthropic-context-window-limit-recovery/executor.test.ts b/src/hooks/anthropic-context-window-limit-recovery/executor.test.ts
index 8efb76de9..cc575e189 100644
--- a/src/hooks/anthropic-context-window-limit-recovery/executor.test.ts
+++ b/src/hooks/anthropic-context-window-limit-recovery/executor.test.ts
@@ -11,17 +11,17 @@ interface FakeTimeouts {
restore: () => void
}
+// Capture the real implementations at module load time, before any test can patch them.
+// This ensures restore() always returns to the true originals regardless of test execution order.
+const TRUE_ORIGINAL_SET_TIMEOUT = globalThis.setTimeout
+const TRUE_ORIGINAL_CLEAR_TIMEOUT = globalThis.clearTimeout
+
function createFakeTimeouts(): FakeTimeouts {
let now = 0
let nextId = 1
const timers = new Map()
const cleared = new Set()
- const original = {
- setTimeout: globalThis.setTimeout,
- clearTimeout: globalThis.clearTimeout,
- }
-
const normalizeDelay = (delay?: number) => {
if (typeof delay !== "number" || !Number.isFinite(delay)) return 0
return delay < 0 ? 0 : delay
@@ -68,8 +68,8 @@ function createFakeTimeouts(): FakeTimeouts {
}
const restore = () => {
- globalThis.setTimeout = original.setTimeout
- globalThis.clearTimeout = original.clearTimeout
+ globalThis.setTimeout = TRUE_ORIGINAL_SET_TIMEOUT
+ globalThis.clearTimeout = TRUE_ORIGINAL_CLEAR_TIMEOUT
}
return { advanceBy, restore }