docs: restore coding on steroids narrative with future-betting manifesto in all READMEs
This commit is contained in:
parent
b1eccf7425
commit
07c89f0091
12
README.ja.md
12
README.ja.md
@ -32,9 +32,9 @@
|
||||
|
||||
</div>
|
||||
|
||||
> Anthropicはあなたを閉じ込めたがっています。Claude Codeは素敵な牢獄ですが、それでも牢獄には変わりありません。
|
||||
> これはステロイドを打ったコーディングです。一つのモデルのステロイドじゃない——薬局丸ごとです。
|
||||
>
|
||||
> 私たちは囲い込みをしません。Claudeでオーケストレーションし、GPTで推論し、Kimiでスピードを出し、Geminiでビジョンを処理する。未来は一つの勝者を選ぶことではなく、すべてをオーケストレーションすることだ。モデルはどんどん安くなり、どんどん賢くなる。特定のプロバイダーが独占することはない。私たちはその開かれた市場のために構築している。
|
||||
> Claudeでオーケストレーションし、GPTで推論し、Kimiでスピードを出し、Geminiでビジョンを処理する。モデルはどんどん安くなり、どんどん賢くなる。特定のプロバイダーが独占することはない。私たちはその開かれた市場のために構築している。Anthropicの牢獄は素敵だ。だが、私たちはそこに住まない。
|
||||
|
||||
<div align="center">
|
||||
|
||||
@ -79,11 +79,13 @@
|
||||
|
||||
# Oh My OpenCode
|
||||
|
||||
Claude Code、Codex、数々のOSSモデルに振り回されていませんか。ワークフローを設定し、エージェントをデバッグする毎日に疲れているでしょう。
|
||||
最初はこれを「Claude Codeにステロイドを打ったもの」と呼んでいました。それは過小評価でした。
|
||||
|
||||
私たちがその泥臭い作業をすべてやっておきました。すべてをテストし、実際に機能するものだけを残しました。
|
||||
一つのモデルに薬を盛るのではありません。カルテルを動かすんです。Claude、GPT、Kimi、Gemini——それぞれが得意なことを、並列で、止まらずに。モデルは毎月安くなっており、どのプロバイダーも独占できません。私たちはすでにその世界に生きています。
|
||||
|
||||
OmOをインストールして、`ultrawork`とタイプしてください。それだけです。
|
||||
その泥臭い作業をすべてやっておきました。すべてをテストし、実際に機能するものだけを残しました。
|
||||
|
||||
OmOをインストールして、`ultrawork`とタイプしてください。狂ったようにコーディングしてください。
|
||||
|
||||
|
||||
## インストール
|
||||
|
||||
@ -32,9 +32,9 @@
|
||||
|
||||
</div>
|
||||
|
||||
> Anthropic 想把你锁在他们的生态里。Claude Code 是个漂亮的牢笼,但依然是牢笼。
|
||||
> 这是类固醇式编程。不是一个模型的类固醇——而是整个药库。
|
||||
>
|
||||
> 我们不玩那种封闭的花招。我们用 Claude 做编排,用 GPT 做推理,用 Kimi 提速度,用 Gemini 处理视觉。未来不是押注一个赢家,而是编排所有模型。模型正在变得越来越便宜,越来越聪明。没有一个提供商能够垄断。我们正在为那个开放的市场而构建。
|
||||
> 用 Claude 做编排,用 GPT 做推理,用 Kimi 提速度,用 Gemini 处理视觉。模型正在变得越来越便宜,越来越聪明。没有一个提供商能够垄断。我们正在为那个开放的市场而构建。Anthropic 的牢笼很漂亮。但我们不住那。
|
||||
|
||||
<div align="center">
|
||||
|
||||
@ -79,11 +79,13 @@
|
||||
|
||||
# Oh My OpenCode
|
||||
|
||||
你是不是还在不同的模型之间(Claude Code、Codex、各种开源模型)来回切换?还在死磕工作流配置?还在给 Agent 修 Bug?
|
||||
我们最初把这叫做“给 Claude Code 打类固醇”。那是低估了它。
|
||||
|
||||
不是只给一个模型打药。我们在运营一个联合体。Claude、GPT、Kimi、Gemini——各司其职,并行运转,永不停歇。模型每个月都在变便宜,没有任何提供商能够垄断。我们已经活在那个世界里了。
|
||||
|
||||
脏活累活我们替你干了。我们测试了一切,只留下了真正有用的。
|
||||
|
||||
安装 OmO。敲下 `ultrawork`。完事。
|
||||
安装 OmO。敲下 `ultrawork`。疯狂地写代码吧。
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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<number, { id: number; time: number; callback: TimerCallback; args: any[] }>()
|
||||
const cleared = new Set<number>()
|
||||
|
||||
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 }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user