HN 日本語サマリー

← 一覧へ戻る
プログラミング

OpenCode 2.0

OpenCode 2.0 (anoma.ly)

212 pointsby gmays80 コメント

要約

OpenCode 2.0は、数百万人の日々のユーザー体験に基づいた大規模なオーバーホールです。エージェントが必要とするあらゆるものに対応できる柔軟なシステムを提供します。クライアント/サーバーモデルがバックグラウンドプロセスとして自動実行されるようになり、APIはゼロから再設計されました。また、JavaScriptインタープリターを内蔵した「Code Mode」、バックグラウンドタスク(サブエージェントやシェルコマンド)、豊富なプラグインシステム、SDKによるライブラリとしての利用などが強化されています。

全文翻訳

OpenCode 2.0は、大規模なオーバーホールです。数百万人の日々のユーザー体験に基づき、エージェントが必要とするあらゆるものに対応できる柔軟なシステムを提供します。多くの新機能、パフォーマンス改善、バグ修正がありますが、ここではユーザーに最も影響を与える変更点をいくつか紹介します。 サービス 当初からOpenCodeはクライアント/サーバーモデルを採用していましたが、デフォルトではそれを活用しておらず、主にパワーユーザーによって使用されていました。2.0では、このサーバーが自動的に単一のバックグラウンドプロセスとして実行されます。TUI、Webインターフェース、デスクトップアプリを開くと、すべて同じ中央プロセスと通信します。 Terminal Flaky testの修正 Web Flaky testの修正 Desktop ダークモードの追加 review.ts 変更のレビュー opencodepid 48213 Stopped Starting Running Sessions Flaky testの修正 ダークモードの追加 レビュー変更 プログラム的なクライアント@opencode/clientを使用して独自のスクリプトを作成している場合、ローカルサービスを自動検出してそのまま動作します。これは特にスケジュールされたタスクに便利です。opencode apiコマンドを使用してCLIから呼び出すこともできます。他のホストに公開して、/pairまたはopencode pairを呼び出して他のアプリケーションに接続することもできます。このフローを活用するネイティブアプリも開発中です。 API 古いAPIは、私たちと世界がエージェントとは何か、そしてあるべきかを collectively に学んでいく中で、場当たり的に成長しました。それは悪かったです。 私たちはゼロから始め、毎日OpenCodeを使用する数百万人のユーザーの奇妙なユースケースをすべて調査しました。今では、あなたがやりたいことのほぼすべてをサポートしています。 OpenCodeは自身のAPIも認識しており、新しい作業を開始する際に現在のセッションをgit worktreeに移動するなどの便利な操作を行うためにそれを呼び出します。 Session New session YOU 新しいworktreeでアップロードのレート制限を開始します。 execute{ code } ›opencode.worktree_create[name=rate-limit] ›opencode.session_rename[title=Rate limit uploads] ›opencode.session_move[directory=~/worktrees/rate-limit] YOU Flaky testセッションがスタックしています。停止して、テストを隔離し、完了したタブを閉じます。 execute{ code } ›opencode.session_list ›opencode.session_context[sessionID=ses_7c41e09a] └ "Retrying uploads.test.ts again…" execute{ code } ›opencode.session_interrupt[sessionID=ses_7c41e09a] ›opencode.session_prompt[sessionID=ses_7c41e09a, text=Quarantine uploads.test.ts] ›opencode.tab_close[sessionID=ses_2f9d61b4] 停止し、テストを隔離するように指示し、設定タブを閉じました。 OpenCode ~/app Flaky upload testの修正 interrupted config loaderの移行 tab closed New session this session ~/worktrees/rate-limit バニラJavaScriptおよびEffect用のクライアントを含む新しいクライアントパッケージ@opencode/clientも出荷しました。 review.ts import { OpenCode } from "@opencode/client" import { Service } from "@opencode/client/service" const endpoint = await Service.ensure() const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint), }) const session = await client.session.create({ location: { directory: process.cwd() }, }) await client.session.prompt({ sessionID: session.id, text: "Review the current changes", }) Code Mode モデルはコードを書くのが大好きで、OpenCode 2.0はそれを他のどのコーディングエージェントよりも活用します。私たちは@opencode/codemodeパッケージに最小限のJavaScriptインタープリターを構築しました。 Session YOU LinearでGitHubのバグをファイルしてください。 execute{ code } tools.github.list_issuestools.linear.save_issue execute{ code } ["OC-412", "OC-413", "OC-414"] Code Mode return [ search({ query: "list github issues" }), search({ query: "create linear issue" }), ] const { issues } = await tools.github.list_issues({ owner: "anomalyco", repo: "opencode", labels: ["bug"], state: "OPEN", }) const filed = await Promise.all( issues.map(({ title }) => tools.linear.save_issue({ team: "OC", title })) ) return filed.map((issue) => issue.identifier) MCP servers github linear sentry このパッケージは、MCPサーバーまたはOpenAPIエンドポイントを取り込み、エージェントがスクリプトで呼び出せる関数に変換します。Node.js VMの複雑さやQuickJSのような複雑なソリューションを埋め込むことなく、ネイティブでこれらのスクリプトを実行できます。 これにより、エージェントはツールを呼び出し、結果をマップして別のツールを呼び出すといったことができるスクリプトを書くことができます。一度に1つずつ呼び出すのではなく、単一のラウンドトリップで実行できます。 2.0のすべてのMCPサーバーはデフォルトでcodemodeがオプトインされています。これは、コンテキストの肥大化を最小限に抑えながら数千を追加でき、エージェントがそれらを発見して組み合わせてタスクを完了できることを意味します。 バックグラウンドタスク 最新のモデルはオーケストレーションに非常に優れており、ハーネスがその能力を最大限に発揮できるようにすることが重要です。 Session YOU このコードをレビューするために、バックグラウンドのfableサブエージェントを起動します。 subagent review this code fable background 2 comments $shell bun test background 148 passed editsrc/retry.ts +12 $shell bun run build background done 変更が完了しました。レビューで2件のコメント、148件のテストがパスし、ビルドが成功し、変更ログが更新されました。 Background review this code fable $bun test $bun run build ctrlb まず、バックグラウンドサブエージェントを追加しました。これにより、プライマリエージェントが別のエージェントに作業をオフロードし、自身は続行できます。 これは自動的に発生しますが、手動でトリガーすることもできます。異なるモデルを使用することも可能です。「このコードをレビューするためにバックグラウンドのfableサブエージェントを起動して」のように、プロンプトを続けながら実行できます。 次に、バックグラウンドシェルコマンドを追加しました。シェルツールは非同期で呼び出すことができるため、長時間実行される作業がプライマリエージェントをブロックする必要がなくなります。完了すると通知されます。 フォアグラウンドのシェルコマンドまたはサブエージェントが予想よりも長くかかる場合は、ホットキーを押してバックグラウンドに移動させ、プロンプトを続けることができます。 プラグイン OpenCode 1.0にはプラグインシステムがありましたが、十分な注目を集めることはありませんでした。これを是正するために、私たちはOpenCode 2.0のほぼすべての機能を内部プラグインとして実装することを余儀なくされ、現在80以上のプラグインがあります。これにより、Plugin APIが適切にメンテナンスされることが保証されます。 また、TUIプラグインを実験段階から安定版に昇格させました。すべてOpenTUIによって駆動されるため、ほぼ何でも構築できます。ここに無用なものの例を示します。 また、OpenCode 2.0のすべての機能をホットリロードできるようにするためにかなりの時間を費やしました。これにより、セッション中に自身のためにプラグインを書き、すぐに使用することができます。この設計については以前のブログ記事でカバーしました。 OpenCodeに任意のプラグインを構築するように依頼でき、それはその方法を知っています。ドキュメントを読みたい場合は、こちらで入手できます。 SDK OpenCodeは、@opencode/sdkパッケージを使用してライブラリとしても使用できるようになりました。これは、CLIを駆動するのと同じコードです。 これにより、それを削減して独自のOpenCodeフレーバーを作成し、サーバーまたはDurable Objectsのような特殊な環境で実行できます。そして、標準のOpenCodeサーバープロトコルを話すため、任意のOpenCodeクライアントから接続できます。 オプションでEffectベースのAPIも提供しています。 これはまだ開発中ですが、すでに使用できます。 アップグレード CLIをアップグレードするには、最新の1.xリリースを使用していることを確認し、opencode upgrade --majorを実行します。デスクトップアプリをアップグレードするには、こちらから最新版をダウンロードしてください。 いくつかの破壊的変更があります。 1.0プラグインは2.0では動作しません サーバーAPIは完全に異なります tui.json設定はjsonに移動しました 他にも多くの変更がありますが、それらは後方互換性があります。OpenCodeにこのドキュメントを指し示して、それ自身で移行できるようにすると良いでしょう。 OpenCode 2.0は、大規模なオーバーホールです。数百万人の日々のユーザー体験に基づき、エージェントが必要とするあらゆるものに対応できる柔軟なシステムを提供します。多くの新機能、パフォーマンス改善、バグ修正がありますが、ここではユーザーに最も影響を与える変更点をいくつか紹介します。 当初からOpenCodeはクライアント/サーバーモデルを採用していましたが、デフォルトではそれを活用しておらず、主にパワーユーザーによって使用されていました。2.0では、このサーバーが自動的に単一のバックグラウンドプロセスとして実行されます。When