Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d3049cb
Enable Pro subagent spawning
miuuyy Aug 1, 2026
2dfc791
Support parallel ChatGPT Web task tabs
miuuyy Aug 2, 2026
2441ff6
Stabilize parallel browser turn lifecycle
miuuyy Aug 2, 2026
e32b24e
Support Windows PowerShell 5.1 installer
miuuyy Aug 2, 2026
ba24327
Release 1.1.1
miuuyy Aug 3, 2026
d101e22
Stabilize Windows runtime for 1.1.1
miuuyy Aug 3, 2026
8f7c259
Bind Codex turns that have no turn timeout
Albro3459 Aug 3, 2026
580b7ac
Merge pull request #29 from Albro3459/fix/bind-turn-without-turn-timeout
miuuyy Aug 3, 2026
8be4863
Handle ChatGPT rate-limit dialog explicitly
miuuyy Aug 4, 2026
6100ffd
Fix account-aware Web model failures
miuuyy Aug 4, 2026
2e79cb1
Fix Web turn lifecycle regressions
miuuyy Aug 4, 2026
a7e61dc
Stabilize launcher recovery and Web turns
miuuyy Aug 4, 2026
e0eb5ff
Fix Windows tunnel command assertion
miuuyy Aug 4, 2026
a1b1d62
fix: stabilize long ChatGPT web turns
miuuyy Aug 5, 2026
cb743c1
fix: stabilize ChatGPT Web trace streaming
miuuyy Aug 5, 2026
767d69b
Release v2.0.0 with resilient streaming and compaction
miuuyy Aug 5, 2026
8ae34eb
Fix cross-platform updater verification
miuuyy Aug 5, 2026
0c54cdc
Add Korean-first launcher localization (#1)
AgenticLab-SH Aug 1, 2026
579920f
Add project-bound Web GPT conversations
AgenticLab-SH Aug 4, 2026
ed29698
Harden Web GPT project boundary and document secure tunnel
AgenticLab-SH Aug 4, 2026
d5636aa
route non-Web models through configured upstream
AgenticLab-SH Aug 6, 2026
662c22a
Web GPT 대화 모드와 추론 수준 분리
AgenticLab-SH Aug 4, 2026
f11cfd4
finish AICC Web GPT v2 bridge
AgenticLab-SH Aug 6, 2026
1b20cb7
Merge remote-tracking branch 'origin/main' into agent/aicc-v2
AgenticLab-SH Aug 6, 2026
111290c
fix release version verification
AgenticLab-SH Aug 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,21 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Validate launcher installer with Windows PowerShell 5.1
if: runner.os == 'Windows'
shell: powershell
run: |
if ($PSVersionTable.PSVersion.Major -ne 5) {
throw "Expected Windows PowerShell 5.1, got $($PSVersionTable.PSVersion)"
}
$source = Get-Content scripts/install-launcher.ps1 -Raw
[void][scriptblock]::Create($source)
if (-not [Environment]::Is64BitOperatingSystem) {
throw "The Windows CI runner must be 64-bit"
}
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.3.11
bun-version: 1.3.14
- run: bun install --frozen-lockfile
- run: bun install --frozen-lockfile
working-directory: launcher
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
- uses: actions/checkout@v6
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.3.11
bun-version: 1.3.14
- run: bun install --frozen-lockfile
- run: bun install --frozen-lockfile
working-directory: launcher
Expand Down Expand Up @@ -73,7 +73,7 @@ jobs:
- uses: actions/checkout@v6
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.3.11
bun-version: 1.3.14
- run: bun install --frozen-lockfile
- run: bun install --frozen-lockfile
working-directory: launcher
Expand All @@ -91,7 +91,7 @@ jobs:
cp LICENSE release-assets/LICENSE
cp LICENSES/NOTICE.md release-assets/NOTICE.md
cp LICENSES/OpenCodex-MIT.txt release-assets/OpenCodex-MIT.txt
cp LICENSES/Bun-1.3.11.md release-assets/Bun-1.3.11.md
cp LICENSES/Bun-1.3.14.md release-assets/Bun-1.3.14.md
cp dist/THIRD_PARTY_NOTICES.txt release-assets/THIRD_PARTY_NOTICES.txt
cp scripts/install.sh release-assets/install.sh
cp scripts/install-launcher.sh release-assets/install-launcher.sh
Expand Down
9 changes: 9 additions & 0 deletions .gitleaks.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[extend]
useDefault = true

[[allowlists]]
description = "Deterministic fake turn tokens used by the prompt contract tests"
regexes = [
'''turn_12345678901234567890123456789012''',
'''turn_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA''',
]
10 changes: 9 additions & 1 deletion LICENSES/Bun-1.3.11.md → LICENSES/Bun-1.3.14.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,29 @@ Bun statically links these libraries:
| [`brotli`](https://github.com/google/brotli) | MIT |
| [`libarchive`](https://github.com/libarchive/libarchive) | [several licenses](https://github.com/libarchive/libarchive/blob/master/COPYING) |
| [`lol-html`](https://github.com/cloudflare/lol-html/tree/master/c-api) | BSD 3-Clause |
| [`ls-hpack`](https://github.com/litespeedtech/ls-hpack) | MIT |
| [`ls-qpack`](https://github.com/litespeedtech/ls-qpack) | MIT |
| [`lsquic`](https://github.com/litespeedtech/lsquic) | MIT (portions derived from [Chromium proto-quic](https://github.com/litespeedtech/lsquic/blob/master/LICENSE.chrome), BSD 3-Clause) |
| [`mimalloc`](https://github.com/microsoft/mimalloc) | MIT |
| [`picohttp`](https://github.com/h2o/picohttpparser) | dual-licensed under the Perl License or the MIT License |
| [`zstd`](https://github.com/facebook/zstd) | dual-licensed under the BSD License or GPLv2 license |
| [`simdutf`](https://github.com/simdutf/simdutf) | Apache 2.0 |
| [`tinycc`](https://github.com/tinycc/tinycc) | LGPL v2.1 |
| [`uSockets`](https://github.com/uNetworking/uSockets) | Apache 2.0 |
| [`zlib-cloudflare`](https://github.com/cloudflare/zlib) | zlib |
| [`zlib-ng`](https://github.com/zlib-ng/zlib-ng) | zlib |
| [`c-ares`](https://github.com/c-ares/c-ares) | MIT licensed |
| [`libicu`](https://github.com/unicode-org/icu) 72 | [license here](https://github.com/unicode-org/icu/blob/main/icu4c/LICENSE) |
| [`libbase64`](https://github.com/aklomp/base64/blob/master/LICENSE) | BSD 2-Clause |
| [`libuv`](https://github.com/libuv/libuv) (on Windows) | MIT |
| [`libdeflate`](https://github.com/ebiggers/libdeflate) | MIT |
| [`libjpeg-turbo`](https://github.com/libjpeg-turbo/libjpeg-turbo) | [BSD 3-Clause / IJG / zlib](https://github.com/libjpeg-turbo/libjpeg-turbo/blob/main/LICENSE.md) |
| [`libspng`](https://github.com/randy408/libspng) | BSD 2-Clause |
| [`libwebp`](https://github.com/webmproject/libwebp) | BSD 3-Clause |
| [`highway`](https://github.com/google/highway) | Apache 2.0 |
| [`uucode`](https://github.com/jacobsandlund/uucode) | MIT |
| A fork of [`uWebsockets`](https://github.com/jarred-sumner/uwebsockets) | Apache 2.0 licensed |
| Parts of [Tigerbeetle's IO code](https://github.com/tigerbeetle/tigerbeetle/blob/532c8b70b9142c17e07737ab6d3da68d7500cbca/src/io/windows.zig#L1) | Apache 2.0 licensed |
| `__cxa_thread_atexit` fallback from [LLVM libc++abi](https://github.com/llvm/llvm-project/blob/llvmorg-19.1.0/libcxxabi/src/cxa_thread_atexit.cpp) | Apache 2.0 with LLVM exception |

## Polyfills

Expand Down
21 changes: 21 additions & 0 deletions LICENSES/tiktoken-MIT.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2022 OpenAI, Shantanu Jain

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
139 changes: 108 additions & 31 deletions README.ko-KR.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,53 @@
# Codex용 ChatGPT Web

Codex의 기본 모델 선택기에서 ChatGPT Web의 Instant, Medium, High, Extra High, Pro를 선택해
사용하는 로컬 Responses 브리지입니다. 이 포크는 런처의 기본 언어를 한국어로 바꾸고,
한국어 UI를 추가했으며, GitHub/X 페이지를 반드시 열어야 했던 시작 절차를 선택 사항으로
바꿨습니다.

이 포크의 런타임은 upstream
[`miuuyy/codex-chatgpt-web`](https://github.com/miuuyy/codex-chatgpt-web) v1.0.1의
커밋 `4ad7abe428fe2226fa05038a36e1682de1670fcc`를 기반으로 합니다. 원 저작자 표시와 MIT
라이선스를 유지합니다.

## 권장 사용 방식
Codex Desktop의 모델 선택기에서 ChatGPT Web을 직접 모델 백엔드로 사용하는 로컬
Responses 브리지입니다. Codex는 작업 화면, 스레드 기록, 승인, 도구 하네스를 유지하고
모델 추론만 로그인된 ChatGPT Web 계정에서 수행합니다.

이 AICC 포크는 upstream
[`miuuyy/codex-chatgpt-web`](https://github.com/miuuyy/codex-chatgpt-web) v2.0.0
커밋 `8ae34eb`을 기준으로 하며, 원 저작자 표시와 MIT 라이선스를 유지합니다.

## 모델 선택기

일반 계정에서 다음 8개 항목을 제공합니다.

- `Web / 임시 / 낮음`
- `Web / 임시 / 중간`
- `Web / 임시 / 높음`
- `Web / 임시 / 매우 높음`
- `Web / 저장 / 낮음`
- `Web / 저장 / 중간`
- `Web / 저장 / 높음`
- `Web / 저장 / 매우 높음`

계정에서 Pro가 실제로 확인된 경우에만 `Web / 임시 / Pro`와
`Web / 저장 / Pro`가 추가됩니다. 매우 높음(xhigh)은 Pro 전용이 아닙니다.
임시·저장 방식과 추론 수준은 모델 이름 하나에 함께 고정되므로 Codex의 별도
추론 강도 행이 선택한 Web 모드를 조용히 바꾸지 않습니다.

현재 구현은 안정적인 복구와 컨텍스트 일관성을 위해 Codex의 매 turn을 새 ChatGPT
대화로 실행합니다. 임시는 ChatGPT 기록에 남지 않고, 저장은 일반 ChatGPT 대화로
남습니다. 같은 Codex 스레드의 누적 문맥은 Codex가 정본으로 보유하고 매 turn에
검증된 컨텍스트 패킷으로 다시 전달합니다. ChatGPT 대화 URL을 재사용하는 연속 모드는
아직 제공하지 않습니다.

## 세 가지 독립 경로

```text
Web 모델 -> 17841 -> ChatGPT Web 추론
Web 이외 모델 -> 17841 -> 설치 전의 loopback upstream(이 Mac에서는 OCX 10100)
codex-native 프로필 -> 공식 Codex endpoint
```

- 기본값은 브라우저 전용 모드입니다. 로컬 도구 없이 ChatGPT Web 모델로 계획·검토·조사를
수행할 때 적합합니다.
- 전체 하네스 모드는 명시적으로 필요한 경우에만 사용하세요. MCP 커넥터와 OpenAI Tunnel
설정이 필요하며, 쓰기 작업은 워크스페이스 정책과 수동 승인을 따라야 합니다.
- Pro는 깊은 계획과 검토에 적합하지만 현재 이 브리지의 로컬 MCP 도구를 직접 호출하지
못합니다.
- 공유 계정, 브라우저 프로필 공유, 과도한 동시 요청, 제한 우회는 사용하지 마세요.
초기 설치 시 기존 Codex 설정이 loopback upstream과 모델 catalog를 사용 중이면
브리지가 이를 자동 보존합니다. 따라서 Web 모델 요청은 OCX 모델 추론을 호출하지 않고,
Web 이외 모델만 OCX로 전달됩니다. OCX가 중단돼도 Web 분기는 계속 동작하지만, 앞단
브리지 17841이 중단되면 해당 브리지를 쓰는 Desktop 요청은 모두 실패합니다.
순수 Native 복구는 별도 `codex-native` 프로필 또는 안전한 시점의 `ocx restore`로
수행합니다.

## 설치 및 시작
## 설치

macOS 또는 Linux:

Expand All @@ -36,25 +63,75 @@ irm https://github.com/AgenticLab-SH/codex-chatgpt-web/releases/latest/download/

앱에서 다음 순서로 진행합니다.

1. 내장 브라우저에서 ChatGPT에 로그인합니다.
2. 브라우저 점검을 실행합니다.
3. `모델 설치`를 누르고 Codex를 한 번 다시 시작합니다.
4. Codex 모델 선택기에서 `ChatGPT Web — ...` 모델을 선택합니다.
1. 앱 전용 내장 브라우저에 사용할 ChatGPT 계정으로 로그인합니다.
2. 브라우저 동작 시험을 실행합니다.
3. 모델 연결을 실행합니다. 기존 Codex route가 있으면 복구 journal을 만든 뒤
`--replace-codex-route`와 같은 가역 교체를 수행합니다.
4. Codex Desktop을 한 번 완전히 다시 열어 모델 catalog를 갱신합니다.

앱은 로그인 시 자동 시작하고 창을 닫아도 백그라운드에서 브리지를 유지할 수 있습니다.
Mac이 꺼졌거나 앱을 완전히 종료하면 Web 모델은 동작하지 않습니다.

## 브라우저 전용과 전체 하네스

| 모드 | ChatGPT Web 추론 | 로컬 파일·터미널·도구 | 추가 설정 |
| --- | --- | --- | --- |
| 브라우저 전용 | 가능 | 불가 | 내장 브라우저 로그인 |
| 전체 하네스 | 가능 | 현재 Codex 프로젝트 경계에서 가능 | Secure MCP Tunnel과 ChatGPT 앱 |

전체 하네스는 현재 Codex turn이 광고한 도구 중 명시적으로 허용된 도구만 ChatGPT에
노출합니다. 전용 파일·패치·명령·이미지 도구는 검증된 프로젝트 경계를 강제하며,
Browser·Chrome·Computer Use 및 다른 MCP 도구는 allowlist와 현재 하네스의 실제
가용성에 따라 제공됩니다. 범용 `node_repl`처럼 프로젝트 경계를 우회할 수 있는
원시 gateway는 직접 노출하지 않습니다.

Secure MCP Tunnel은 Mac에서 OpenAI로 나가는 연결만 만들며 공인 IP, 인바운드 포트,
공유기 포트 포워딩을 요구하지 않습니다. Tunnel용 일반 API 키는 Tunnel Read+Use
권한에만 사용되며 모델 API 호출을 발생시키지 않습니다. 다만 ChatGPT 구독과
워크스페이스 정책은 그대로 적용됩니다.

## AICC Workspace와의 차이

`AICC Workspace`는 외부 ChatGPT 웹이나 휴대폰 브라우저에서 이 Mac의 등록 프로젝트를
다루는 별도 Business 앱입니다.

```text
외부 ChatGPT Web -> Secure MCP Tunnel -> AICC Workspace MCP -> 등록 프로젝트
```

Codex 모델 선택기의 Web GPT 브리지와 AICC Workspace는 서로 다른 경로입니다.
AICC Workspace는 Codex 작업을 위임하거나 OCX/로컬 Codex 모델 토큰을 사용하지 않습니다.
Mac, 로컬 MCP, Tunnel이 실행 중이어야 하며 모바일 네이티브 앱의 전체 custom MCP 지원은
공식 보장 범위가 아니므로 모바일 웹에서 먼저 검증해야 합니다.

## 컨텍스트·동시성·보안

- 동시에 최대 5개의 Web browser turn을 허용하며 완료된 turn의 탭은 즉시 해제합니다.
- Codex의 native compaction 요청을 지원하고, Web 응답의 provider-local ID를 다른
backend로 넘길 때 제거합니다.
- 프로젝트 밖 경로, 심볼릭 링크 탈출, 임의 절대 경로와 미허용 도구 호출은 실패로 끝납니다.
- 승인 프롬프트는 기본적으로 자동 클릭하지 않습니다. 명시적 opt-in에서도 영구 허용이
아닌 1회 허용만 처리합니다.
- ChatGPT UI가 바뀌면 selector 검증이 명시적으로 실패하며 다른 계정이나 모델로 조용히
우회하지 않습니다.

브라우저 창은 닫아도 됩니다. 설정의 백그라운드 실행이 켜져 있으면 런처와 내장 브라우저
프로세스는 계속 동작합니다. 다만 런처를 완전히 종료하면 브리지도 멈춥니다.
Temporary Chat도 OpenAI 서버에서 처리됩니다. 자세한 내용은
[Temporary Chat 정책](https://help.openai.com/en/articles/8914046-temporary-chat-faq)을
확인하세요.

## 소스에서 실행
## 소스 개발

```bash
git clone https://github.com/AgenticLab-SH/codex-chatgpt-web.git
cd codex-chatgpt-web
bun run verify
bun run app
bun run app:package
```

Bun 1.3.11이 필요합니다. 전체 아키텍처와 보안 경계는 [영문 README](README.md),
[아키텍처](docs/architecture.md), [보안 모델](docs/security-model.md)을 확인하세요.
고정 개발 런타임은 Bun 1.3.14입니다. 전체 경계는
[아키텍처](docs/architecture.md), [보안 모델](docs/security-model.md),
[기여 안내](CONTRIBUTING.md)를 확인하세요.

이 프로젝트는 OpenAI의 공식 제품이 아니며 OpenAI의 보증을 받지 않습니다. ChatGPT UI
자동화는 화면 변경으로 중단될 수 있고, 프롬프트는 사용 중인 계정과 워크스페이스 정책에
따라 OpenAI에서 처리됩니다.
이 프로젝트는 OpenAI의 공식 제품이 아니며 OpenAI의 보증을 받지 않습니다. 본인 계정과
허용된 워크스페이스에서만 사용하고 OpenAI 약관과 조직 정책을 준수하세요.
Loading