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 OAuth 앱에 영향을 미칩니다. GitHub가 이제 8시간 후에 만료되는 액세스 토큰을 발급하고 refresh token을 제공하기 때문입니다. 이전 gatekeeper-github 버전은 액세스 토큰만 저장하고 refresh_token을 폐기하여 만료 후 호출이 실패하게 됩니다.

즉시 해결 방법:
1. GitHub에서 **Settings → Developer settings → OAuth Apps → select your app → 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 내장 파일시스템 삭제 기능으로 교체하세요:

'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의 수정 사항이며, Node 24.18.0으로 Windows 11과 Ubuntu/WSL에서 검증되었습니다. 임시 해결 방법으로 WSL에서 테스트를 실행하세요. 별개의 gatekeeper-google 실패는 이 문제와 관련이 없으며, core.symlinks=false일 때 Git for Windows가 심볼릭 링크를 일반 파일로 체크아웃하기 때문에 발생합니다.

원본 Issue #652
문제 해결
refresh token이 정상적으로 작동함에도 불구하고 한 시간 후에 Confluence gatekeeper에 "Credentials expired"가 표시되는 이유는 무엇인가요?

Confluence gatekeeper는 수명이 짧은 Atlassian 액세스 토큰의 한 시간 만료 기한을 전체 자격 증명 만료 기한으로 기록합니다. 이 시간이 지나면 getAccessToken()이 로테이팅 리프레시 토큰을 투명하게 사용할 수 있음에도 불구하고 UI는 계정을 만료된 것으로 표시합니다. 이 문제를 해결하려면 packages/gatekeeper-confluence/src/confluence.ts를 편집하고 callback.complete(), callback.reconnectComplete(), callback.credentialsRestored()에서 expiresAt/new Date(grant.expiresAt) 인수를 제거하세요. 일반적인 리프레시 경로와 리프레시가 실제로 실패할 때만 전송되는 명시적인 credentialsExpired() 신호에 의존하세요. 패치가 적용되기 전까지는 기존 Confluence 바인딩을 사용하면 리프레시가 트리거되어 만료 상태가 일시적으로 해제되며, 재연결도 가능하지만 메시지는 한 시간 후에 다시 나타납니다.

원본 Issue #507
문제 해결
15.0보다 오래된 self-hosted 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