diff --git a/.cursor/mcp.json b/.cursor/mcp.json new file mode 100644 index 000000000..1321beb9b --- /dev/null +++ b/.cursor/mcp.json @@ -0,0 +1,7 @@ +{ + "mcpServers": { + "stitch": { + "command": "chefgroep-stitch-mcp" + } + } +} diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 07fd1d1cf..052fc0709 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,11 +1,8 @@ blank_issues_enabled: false contact_links: - - name: Report a security vulnerability (private) - url: https://github.com/lidge-jun/opencodex/security/advisories/new - about: Report undisclosed vulnerabilities privately to the maintainers. Do not open a public issue. - name: Security policy - url: https://github.com/lidge-jun/opencodex/blob/main/SECURITY.md + url: https://github.com/OnlineChefGroep/opencodex/blob/main/SECURITY.md about: Read the supported-version and reporting guidance before sharing security-sensitive details. - name: Contributing guide - url: https://opencodex.me/contributing/ + url: https://github.com/OnlineChefGroep/opencodex/blob/dev/CONTRIBUTING.md about: Review setup, build, and verification guidance for contributors. diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml index 358e5e889..98a40322c 100644 --- a/.github/ISSUE_TEMPLATE/documentation.yml +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -28,7 +28,7 @@ body: attributes: label: Documentation location description: Public documentation URL or repository path. - placeholder: "https://opencodex.me/providers/ or docs/providers.md" + placeholder: "https://github.com/OnlineChefGroep/opencodex or docs/providers.md" validations: required: true diff --git a/.github/scripts/issue-quality.test.cjs b/.github/scripts/issue-quality.test.cjs index c629a3d78..71fda9a3d 100644 --- a/.github/scripts/issue-quality.test.cjs +++ b/.github/scripts/issue-quality.test.cjs @@ -1003,7 +1003,7 @@ describe("validateIssue - documentation", () => { "### Documentation problem type", "Incorrect documentation", "### Documentation location", - "https://lidge-jun.github.io/opencodex/providers/", + "https://github.com/OnlineChefGroep/opencodex", "### What is wrong or missing?", "The page says kimi uses /v1/chat/completions but it actually uses /v1/responses.", "### What should the documentation explain instead?", @@ -1164,7 +1164,7 @@ describe("shouldReopen", () => { state: "closed", closed_at: "2026-07-20T10:00:00Z", state_reason: "not_planned", - closed_by: "lidge-jun", + closed_by: "OnlineChefGroep", }; assert.equal(shouldReopen(baseBotState, issue, false), false); }); diff --git a/.github/workflows/enforce-issue-quality.yml b/.github/workflows/enforce-issue-quality.yml index 2ef8ddc59..164397207 100644 --- a/.github/workflows/enforce-issue-quality.yml +++ b/.github/workflows/enforce-issue-quality.yml @@ -1040,7 +1040,7 @@ jobs: "", guidanceList, "", - "See the [Contributing guide](https://lidge-jun.github.io/opencodex/contributing/) for details.", + "See the [README](https://github.com/OnlineChefGroep/opencodex) for details.", "", "Once the report passes the automated checks, it will be reopened automatically unless a maintainer has changed its state.", ].join("\n")); diff --git a/.github/workflows/enforce-pr-target.yml b/.github/workflows/enforce-pr-target.yml index c6b9a3123..f7e08da36 100644 --- a/.github/workflows/enforce-pr-target.yml +++ b/.github/workflows/enforce-pr-target.yml @@ -211,7 +211,7 @@ jobs: "", `This pull request currently targets ${inlineCode(pr.base.ref)}, but pull requests must target one of ${ALLOWED_BASES.map(inlineCode).join(" or ")}.`, "", - `@${pr.user.login} Please retarget this PR to ${inlineCode(DEFAULT_BASE)}. All contributions go to ${inlineCode(DEFAULT_BASE)}; \`main\` receives only release promotions. See our [Contributing guide](https://lidge-jun.github.io/opencodex/contributing/) for details. Thanks! 🙏` + `@${pr.user.login} Please retarget this PR to ${inlineCode(DEFAULT_BASE)}. All contributions go to ${inlineCode(DEFAULT_BASE)}; \`main\` receives only release promotions. See our [Contributing guide](https://github.com/OnlineChefGroep/opencodex/blob/dev/CONTRIBUTING.md) for details. Thanks! 🙏` ); } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d9767d931..b54f233f1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -111,32 +111,38 @@ jobs: run: | set -euo pipefail + # All releases run from main. Stable versions (no pre-release suffix) get dist-tag "latest". + # Pre-release versions (e.g. 1.0.0-alpha.1) get dist-tag "preview". case "$GITHUB_REF" in refs/heads/main) - expected_tag="latest" if [[ "$RELEASE_VERSION" == *-* ]]; then - echo "::error::main releases must use a stable semver version; got ${RELEASE_VERSION}" - exit 1 - fi - ;; - refs/heads/preview) - expected_tag="preview" - if [[ "$RELEASE_VERSION" != *-preview.* ]]; then - echo "::error::preview releases must use a preview prerelease version; got ${RELEASE_VERSION}" - exit 1 + # The only supported prerelease shape is X.Y.Z-preview.N: the update + # client (src/update/notify.ts, bin/ocx.mjs) and the release-notes + # helper both key off that exact suffix, so an -alpha/-beta/-rc build + # would publish to preview and then never be seen as an update. + if [[ ! "$RELEASE_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+-preview\.[0-9]+$ ]]; then + echo "::error::Pre-release versions must be X.Y.Z-preview.N (got ${RELEASE_VERSION})" + exit 1 + fi + # Pre-release version — must use "preview" dist-tag + if [ "$NPM_DIST_TAG" != "preview" ]; then + echo "::error::Pre-release versions (${RELEASE_VERSION}) must use dist-tag 'preview', got '${NPM_DIST_TAG}'" + exit 1 + fi + else + # Stable version — must use "latest" dist-tag + if [ "$NPM_DIST_TAG" != "latest" ]; then + echo "::error::Stable releases (${RELEASE_VERSION}) must use dist-tag 'latest', got '${NPM_DIST_TAG}'" + exit 1 + fi fi ;; *) - echo "::error::Release must run from main or preview; got ${GITHUB_REF}" + echo "::error::Release must run from main; got ${GITHUB_REF}" exit 1 ;; esac - if [ "$NPM_DIST_TAG" != "$expected_tag" ]; then - echo "::error::${GITHUB_REF#refs/heads/} releases must publish with npm dist-tag '${expected_tag}', got '${NPM_DIST_TAG}'" - exit 1 - fi - ci_url="$( gh run list \ --workflow ci.yml \ @@ -306,7 +312,7 @@ jobs: # Preview builds must be marked prerelease so GitHub "latest" keeps pointing at the # stable channel (matching npm dist-tags); see issue #64. prerelease_flag="" - if [[ "$RELEASE_VERSION" == *-preview.* ]]; then + if [[ "$RELEASE_VERSION" == *-* ]]; then prerelease_flag="--prerelease" fi @@ -329,7 +335,10 @@ jobs: # advance the baseline to a later preview that is missing/empty — that would # drop the gap between the last carried preview and that later tag. notes_range_start="$previous_tag" - if [[ "$RELEASE_VERSION" != *-preview.* ]]; then + # Same hyphen predicate as the dist-tag gate and prerelease_flag above: any + # pre-release suffix ships on the preview channel, so only truly stable + # versions take the carry path. + if [[ "$RELEASE_VERSION" != *-* ]]; then preview_carry_tags="$( git tag --list "v${RELEASE_VERSION}-preview.*" | bun scripts/release-notes.ts matching-preview-tags "$RELEASE_VERSION" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index eb3fdab11..e2c0ba992 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,7 +15,7 @@ Thanks for helping with opencodex. - `preview` — prerelease train. The `dev2-go` Go native-port line has been retired. Its history is archived at -[lidge-jun/opencodex-go-archive](https://github.com/lidge-jun/opencodex-go-archive), +[OnlineChefGroep/opencodex-go-archive](https://github.com/OnlineChefGroep/opencodex-go-archive), and everything now goes to `dev`. See [`MAINTAINERS.md`](./MAINTAINERS.md) for the reasoning. diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 867e7d6aa..f4bcd9e4b 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -60,7 +60,7 @@ defects. Bun-native TypeScript on `dev` is the single runtime line again. - The branch has been deleted from this repository. Its full history is published at - [lidge-jun/opencodex-go-archive](https://github.com/lidge-jun/opencodex-go-archive), + [OnlineChefGroep/opencodex-go-archive](https://github.com/OnlineChefGroep/opencodex-go-archive), and its final tip stays reachable here as the `archive/dev2-go` tag. - A merge into `dev` carries no port obligation. The nine open `needs-go-port` issues (#661, #663, #666, #670, #674, #678, #680, #685, #703) were closed as diff --git a/README.md b/README.md index 86b30f082..e0762e081 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Two commands, and every one of them runs any LLM you point it at.

Follow @claudeebum on X npm version - license + license node version

@@ -263,7 +263,7 @@ next Codex session. opencodex keeps these behaviors: - **Log in once, skip the API key.** OAuth support for xAI, Anthropic, and Kimi means you can authenticate with your existing account. Tokens auto-refresh. Or forward your `codex login`, paste an API key, or use `${ENV_VAR}` references — your call. - **Works everywhere Codex does.** Injects into Codex CLI, TUI, App, and SDK automatically. Routed models show up in Codex's model picker just like native ones. - **History-safe injection.** On local installs the proxy points Codex's own built-in `openai` provider at itself via a single `openai_base_url` line — new threads keep their native provider tag, so ongoing chat history is never remapped and an unclean shutdown can't hide it. (Threads re-tagged by older versions are migrated back once on the first start; remote/LAN binds use a dedicated provider entry instead, since they need an API-key header.) -- **Delegate to the right model.** Feature up to five routed or native models in Codex's subagent picker from the dashboard or config — route complex tasks to a reasoning model, fast tasks to a cheap one. On the v2 multi-agent surface (GPT-5.6 Sol/Terra) the proxy injects compact, schema-agnostic delegation guidance: an eligible preferred sub-agent model and effort (`injectionModel` / `injectionEffort`), the configured intersection of Codex's picker-visible, v2-compatible, priority-sorted first five with available effort ladders, and the `fork_turns` rules that let cross-model `spawn_agent` calls apply their overrides. Known limitation: when a native parent spawns a routed child, the task body can currently arrive backend-encrypted and be lost ([#92](https://github.com/lidge-jun/opencodex/issues/92)) — use the v1 surface for reliable cross-provider delegation. Want your own wording? Set `injectionPrompt` with `{{model}}` / `{{effort}}` / `{{roster}}` placeholders. +- **Delegate to the right model.** Feature up to five routed or native models in Codex's subagent picker from the dashboard or config — route complex tasks to a reasoning model, fast tasks to a cheap one. On the v2 multi-agent surface (GPT-5.6 Sol/Terra) the proxy injects compact, schema-agnostic delegation guidance: an eligible preferred sub-agent model and effort (`injectionModel` / `injectionEffort`), the configured intersection of Codex's picker-visible, v2-compatible, priority-sorted first five with available effort ladders, and the `fork_turns` rules that let cross-model `spawn_agent` calls apply their overrides. Known limitation: when a native parent spawns a routed child, the task body can currently arrive backend-encrypted and be lost ([#92](https://github.com/OnlineChefGroep/opencodex/issues/92)) — use the v1 surface for reliable cross-provider delegation. Want your own wording? Set `injectionPrompt` with `{{model}}` / `{{effort}}` / `{{roster}}` placeholders. - **Prepare for preview-gated OpenAI rollouts.** GPT-5.6 Sol/Terra/Luna entries preserve the upstream effort ladders. Direct/Multi use the 372k Codex contract; OpenAI API and OpenRouter use 1.05M metadata when upstream access is available. - **Give any model superpowers.** Non-OpenAI models get real web search and image understanding via a `gpt-5.4-mini` sidecar over your ChatGPT login. - **Generate images natively.** Codex's standalone `image_gen` tool uses `POST /v1/images/generations` for generation and `POST /v1/images/edits` for edits; it is separate from the hosted Responses `image_generation` tool. @@ -510,7 +510,7 @@ Maintainer source-of-truth notes live under [`structure/`](./structure). Histori Contributor setup lives in [`CONTRIBUTING.md`](./CONTRIBUTING.md), and security reporting guidance lives in [`SECURITY.md`](./SECURITY.md). Report undisclosed vulnerabilities privately through -[GitHub private vulnerability reporting](https://github.com/lidge-jun/opencodex/security/advisories/new), +[GitHub private vulnerability reporting](https://github.com/OnlineChefGroep/opencodex/security/advisories/new), not a public issue. ## Development @@ -519,7 +519,7 @@ Source development requires the `bun` CLI on your `PATH`. This is separate from package's bundled Bun runtime, which is used only by installed `ocx` commands. ```bash -git clone https://github.com/lidge-jun/opencodex.git +git clone https://github.com/OnlineChefGroep/opencodex.git cd opencodex bun install bun run dev:proxy # start the proxy API in dev mode diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 000000000..010e9dd7f --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,42 @@ +# Roadmap + +Roadmap for [OnlineChefGroep/opencodex](https://github.com/OnlineChefGroep/opencodex). + +## Vision + +A fully self-sufficient fork with our own release cadence, feature set, and quality bar — +no longer dependent on upstream decisions or timelines. + +## Short term (done) + +- [x] **Independent versioning** — fully detached from upstream, own semver scheme +- [x] **All closed PRs merged** — Dutch GUI, Claude Desktop, combo/alias, cursor fixes, etc. +- [x] **Enhanced CI** — CodeQL, dependabot, security audit, workflow linting +- [x] **Release process**: main-only publishing via `.github/workflows/release.yml` + and `scripts/release.ts`, with review and promotion policy in `MAINTAINERS.md` + +## Near term (next) + +- [ ] **First fork release (`2.7.43`)**: publish from `main` on npm dist-tag `latest` + (prereleases use `X.Y.Z-preview.N` and ship on `preview`) +- [ ] **Release documentation**: add `VERSIONING.md`, `RELEASE_PROCESS.md`, and + `CHANGELOG.md` for the fork's release model +- [ ] **Update READMEs** — ensure all translated READMEs (ko, zh, ru, ja) reflect fork status +- [ ] **Clean up old tags** — remove stale upstream tags that don't point to our commits +- [ ] **Dependency audit** — review and update all dependencies (gui + root) +- [ ] **TypeScript strict mode** — enable `strict` in tsconfig and fix all violations + +## Medium term + +- [ ] **Custom provider: OnlineChef AI gateway** — first-party provider integration +- [ ] **Performance benchmarks** — proxy latency regression tests in CI +- [ ] **Improved documentation** — deploy docs to GitHub Pages for our fork +- [ ] **Automated dependency upgrades** — Dependabot auto-merge for non-breaking updates +- [ ] **Smoke test suite** — end-to-end tests that spin up the proxy and make real API calls + +## Long term + +- [ ] **Own GUI theme** — custom branding for the dashboard +- [ ] **Plugin system** — third-party provider adapters +- [ ] **Service mode improvements** — better systemd/launchd integration +- [ ] **Multi-host fleet management** — centralized config across machines diff --git a/SECURITY.md b/SECURITY.md index b39af65d2..b73decd56 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -20,7 +20,7 @@ Please avoid posting undisclosed vulnerabilities as public GitHub issues. Report privately through GitHub private vulnerability reporting, which is enabled on this repository: -**** +**** The same form is reachable from the repository's **Security** tab under **Report a vulnerability**. It is private between you and the maintainers, and it is the only channel this project offers for diff --git a/docs-site/astro.config.mjs b/docs-site/astro.config.mjs index f86b7ea19..698f397ce 100644 --- a/docs-site/astro.config.mjs +++ b/docs-site/astro.config.mjs @@ -52,10 +52,12 @@ export default defineConfig({ { tag: "meta", attrs: { name: "theme-color", media: "(prefers-color-scheme: dark)", content: "#212121" } }, ], social: [ - { icon: "github", label: "GitHub", href: "https://github.com/lidge-jun/opencodex" }, + { icon: "github", label: "GitHub", href: "https://github.com/OnlineChefGroep/opencodex" }, ], editLink: { - baseUrl: "https://github.com/lidge-jun/opencodex/edit/main/docs-site/", + // `dev` is the only integration branch (see MAINTAINERS.md); `main` receives + // release promotions only, so "Edit page" must open a `dev` edit session. + baseUrl: "https://github.com/OnlineChefGroep/opencodex/edit/dev/docs-site/", }, lastUpdated: true, // English at the site root; Korean under /ko, Simplified Chinese under /zh-cn, Russian under /ru, Japanese under /ja. diff --git a/docs-site/src/components/Landing.astro b/docs-site/src/components/Landing.astro index d9e2965f2..105e4ed4a 100644 --- a/docs-site/src/components/Landing.astro +++ b/docs-site/src/components/Landing.astro @@ -112,7 +112,7 @@ const docsMap = [ icon: 'folder', links: [ { label: t('Contributing', '기여하기', '贡献', 'Участие в проекте', 'コントリビュート'), href: `${prefix}contributing/` }, - { label: 'GitHub', href: 'https://github.com/lidge-jun/opencodex' }, + { label: 'GitHub', href: 'https://github.com/OnlineChefGroep/opencodex' }, { label: 'npm', href: 'https://www.npmjs.com/package/@bitkyc08/opencodex' }, ], }, @@ -158,7 +158,7 @@ const docsMap = [ {t('Get Started', '시작하기', '快速开始', 'Начать', 'はじめに')} - GitHub + GitHub