OpenSource-Hub

cloudflare-os

アプリケーション

cloudflare/cloudflare-os

Cloudflareを基盤としたAIエージェントワークスペース。

概要

Cloudflare OS は、チャットインターフェース、サンドボックスアプリケーション開発、および Gatekeepers セキュリティフレームワークを提供する AI プロダクティビティ環境です。ユーザーは AI エージェントを介してドキュメントやカスタム小アプリケーションを作成でき、各アプリケーションはプライベートサンドボックスインスタンス内で実行され、人間による承認操作をサポートしています。

README プレビュー

# Cloudflare OS: An AI productivity environment\n\nCloudflare OS is an "operating system" for AI productivity originally developed for use inside Cloudflare. A large portion of Cloudflare's workforce -- from engineering to sales and everything in between -- uses Cloudflare OS every day to help them do their jobs.\n\n\n\nThis is not a traditional computer operating system. We use the term "operating system" in two senses:\n\n* An operating system for *the company* to be productive with AI, in a way that is safe, so that the security team can sleep at night.\n* An operating system for AI workloads, analogous to the sense in which a traditional operating system manages compute workloads.\n\nCloudflare OS provides three things in particular:\n\n1. An agent chat UI where you can ask agents to do tasks, preloaded with knowledge about how your company operates.\n2. Sandboxed application development, so that you can ask agents to build "gadgets" (small personal apps) and safely share what you've built with others.\n3. A security framework, called Gatekeepers, that applies guardrails to both agents and apps such that non-technical users can safely "go nuts" and nothing bad will happen.\n\nWe are making Cloudflare OS open source so that others can copy it and customize it for their own company. The idea is not that your company uses Cloudflare OS, but rather that you make it "*Your Company* OS".\n\n## Quick Start\n\nTo quickly run Cloudflare OS locally, [install pnpm](https://pnpm.io/), then do:\n\n    pnpm run-local\n\nThen visit: http://localhost:8787\n\nThis runs the whole stack locally on wrangler and workerd. This is not meant for production use, but is a quick way to see what the product does.\n\nAlternatively, you can [deploy to your Cloudflare account](https://os.cloudflare.app/deploy).\n\n(More options at the end of this readme.)\n\n### What to try\n\nTry prompts like:\n\n* "Make slides for my upcoming meeting with a customer." (This will use the built-in slides blue

FAQ (5)

トラブル対応
GitHubのGatekeeper接続が、接続からちょうど8時間後に「Bad credentials」で失敗する場合、どうすれば修正できますか?

これは、GitHubが8時間後に期限切れになるアクセストークンを発行し、リフレッシュトークンを提供するようになったため、新しいGitHub OAuthアプリに影響します。古いバージョンのgatekeeper-githubはアクセストークンのみを保存し、refresh_tokenを破棄していたため、期限切れ後に呼び出しが失敗していました。

即時の回避策:
1. GitHubで、**Settings → Developer settings → OAuth Apps → 対象のアプリを選択 → Optional features**に移動します。
2. **expiring user tokens**をオプトアウトします。
3. 影響を受ける各ユーザーに、GitHubアカウントを一度**Disconnect**してから**Connect**してもらいます。オプトアウト前に発行されたトークンは引き続き期限切れになります。

恒久的な修正: issue #641の修正を含むリリースにgatekeeper-githubをアップグレードしてください。この修正では、refresh_tokenとトークンの有効期限を永続化し、grant_type=refresh_tokenを指定したPOST https://github.com/login/oauth/access_tokenを使用して期限切れ前にリフレッシュを行い、GitHubがローテーションしたトークンペアをアトミックに保存し、同時実行されるリフレッシュを直列化し、GitHubがbad_refresh_tokenを返した場合に再接続を促します。expires_inを持たないOAuthアプリは、従来どおり期限切れのない動作を維持します。

参照 Issue #641
トラブル対応
Windows で workshop-frontend build や pnpm lint を実行した際に発生する「Failed to find executable rm」エラーを修正するにはどうすればよいですか?

Vite+ の clean:dist タスクは POSIX 専用の rm バイナリを直接呼び出すため、Windows ではそれを見つけることができません。packages/workshop-frontend/vite.config.ts で、command: 'rm -rf dist' を Node.js 組み込みのファイルシステム削除機能に置き換えてください:

'clean:dist': {
  command: `node -e "require('node:fs').rmSync('dist', { recursive: true, force: true })"`,
  cache: false,
}

または、fs.rmSync(..., { recursive: true, force: true }) を使用する PR #373 (c0ccaa1) を含むリビジョンに更新してください。その後、pnpm exec vp run -F @gadgets/workshop-frontend --no-cache build または pnpm lint を再実行してください。

参照 Issue #250
トラブル対応
期待されるパスに '/' が使用され、実際のパスに '\' が使用されることが原因で Windows 上で発生する、バンドルされた blueprint テストの失敗を修正するにはどうすればよいですか?

実装は正しい。テストが POSIX のパス区切り文字をハードコードしている。Windows では、Node の readlinkSync() と path.relative() はバックスラッシュ区切りのパスを返す。scripts/build-bundled-blueprints.test.ts を修正し、アサーションをプラットフォームに対応させる。シンボリックリンクのターゲットを path.normalize("../NOTES.md") と比較し、エラーメッセージの正規表現をどちらの区切り文字にもマッチするように変更する。たとえば /ignored by Git: example[\\/]files[\\/]dist[\\/]client\.js/ や /ignored by Git: example[\\/]blueprint\.json/ のようにする。その後、pnpm --filter @gadgets/scripts test を実行する。これは PR #653 の修正であり、Windows 11 と Ubuntu/WSL 上の Node 24.18.0 で検証済みである。一時的な回避策として、WSL 上でテストを実行する。別件の gatekeeper-google の失敗は無関係であり、core.symlinks=false の場合に Git for Windows がシンボリックリンクを通常ファイルとしてチェックアウトすることが原因である。

参照 Issue #652
トラブル対応
リフレッシュトークンが正常に動作しているにもかかわらず、なぜ Confluence ゲートキーパーは1時間後に「Credentials expired」と表示するのですか?

Confluence ゲートキーパーは、有効期間の短い Atlassian アクセストークンの 1 時間の有効期限を、認証情報全体の有効期限として記録します。その時間が経過すると、getAccessToken() がローテーションするリフレッシュトークンを透過的に利用できるにもかかわらず、UI はアカウントを期限切れとして表示します。これを修正するには、packages/gatekeeper-confluence/src/confluence.ts を編集し、callback.complete()、callback.reconnectComplete()、callback.credentialsRestored() から expiresAt/new Date(grant.expiresAt) 引数を削除してください。通常のリフレッシュパスと、リフレッシュが実際に失敗した場合にのみ送信される明示的な credentialsExpired() シグナルに依存させます。パッチが適用されるまでは、既存の Confluence バインディングを使用するとリフレッシュがトリガーされ、期限切れ状態が一時的に解除されます。再接続でも解消できますが、1 時間後にメッセージが再び表示されます。

参照 Issue #507
トラブル対応
15.0より古いセルフホストのGitLabに接続する際に、「GitLab OAuth token response was incomplete」エラーを修正するにはどうすればよいですか?

これは、GitLab 13.3 など、15.0 より前のセルフホスト版 GitLab で発生します。有効期限のない OAuth トークンは expires_in を省略するためです。GitLab gatekeeper は、このフィールドを必須として扱ってはいけません。

expires_in がオプションになるようトークン交換の処理を修正してください。省略されている場合は expiresAt を空/undefined のままにします。credentials kit はこれを、リフレッシュが不要なトークンとして扱います。

if (typeof tokenResponse.expires_in === "number") {
  credentials.expiresAt = new Date(
    Date.now() + tokenResponse.expires_in * 1000
  ).toISOString();
} else {
  credentials.expiresAt = undefined; // GitLab < 15.0: token does not expire
}

必須とすべきなのは access_token のみです。Cloudflare OS をリビルドして再デプロイし、必要に応じて失敗した GitLab 接続を削除してから、OAuth 経由で再接続してください。あるいは、GitLab を 15.0 以降にアップグレードするか、上記の修正を含むリリースを使用してください。

参照 Issue #704