- 品牌替换:OpenCode/opencode → AirCoding/aircoding(16+ 文件) - Logo ASCII art:修复 left/right 行数不匹配导致的启动崩溃 - 启动诊断:添加 OPENCODE_PRINT_TIMING 计时探针 - dev 模式默认 --pure 跳过外部插件加载 - AGENTS.md 模板:追加 AirCoding 多 Agent 专项段落 - architect prompt + plugin:强化 AGENTS.md 产出验证
32 lines
882 B
TypeScript
32 lines
882 B
TypeScript
import { GlobalBus, type GlobalEvent } from "@/bus/global"
|
|
import { Cause, Effect } from "effect"
|
|
|
|
export function waitGlobalBusEvent(input: {
|
|
timeout?: number
|
|
message?: string
|
|
predicate: (event: GlobalEvent) => boolean
|
|
}) {
|
|
return Effect.callback<GlobalEvent, unknown>((resume) => {
|
|
const cleanup = () => GlobalBus.off("event", handler)
|
|
|
|
const handler = (event: GlobalEvent) => {
|
|
try {
|
|
if (!input.predicate(event)) return
|
|
cleanup()
|
|
resume(Effect.succeed(event))
|
|
} catch (error) {
|
|
cleanup()
|
|
resume(Effect.fail(error))
|
|
}
|
|
}
|
|
|
|
GlobalBus.on("event", handler)
|
|
return Effect.sync(cleanup)
|
|
}).pipe(
|
|
Effect.timeout(input.timeout ?? 10_000),
|
|
Effect.mapError((error) =>
|
|
Cause.isTimeoutError(error) ? new Error(input.message ?? "timed out waiting for global bus event") : error,
|
|
),
|
|
)
|
|
}
|