Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions docs-site/src/content/docs/fr/reference/cli/lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ Récupération explicite destinée aux anciennes versions de développement qui

Il s'agit d'un réétiquetage large et destructif : chaque fil contenant un message utilisateur et actuellement marqué `opencodex` passe à `openai`, `exec` est normalisé en `cli` et l'indicateur d'événement est activé. L'historique légitime d'un fournisseur dédié est également concerné. Sauvegardez l'état et n'exécutez la commande que si vous souhaitez cette portée complète.

### `ocx recover-history --ocx-compaction <thread-id> --yes`

Réparez l'historique d'une tâche compactée par un fournisseur routé avant de la reprendre avec Codex natif. La commande sélectionne exactement une tâche par UUID, enregistre d'abord une sauvegarde privée octet par octet, puis convertit uniquement l'état de compaction `ocx1:` propre à OpenCodeX en résumé ordinaire relisible par Codex natif. Le contenu chiffré natif et les autres tâches restent inchangés. Fermez la tâche sélectionnée avant d'exécuter la commande ; toute modification simultanée du rollout interrompt la récupération sans remplacer le fichier.

### `ocx uninstall` · `ocx remove`

Arrête le service et le proxy, supprime le service et le shim Codex, rétablit le fonctionnement natif de Codex, puis supprime la configuration locale d’opencodex uniquement si toutes les étapes de restauration ont réussi. `remove` est un alias de `uninstall`. Le nettoyage de la configuration exige les métadonnées de propriété créées par une installation récente ; les répertoires anciens ou partagés sont conservés.
Expand Down
4 changes: 4 additions & 0 deletions docs-site/src/content/docs/ja/reference/cli/lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ ocx eject back

これは広範囲で破壊的な再ラベル付けです。ユーザーメッセージを持ち、現在 `opencodex` とタグ付けされているすべてのスレッドを `openai` に変更し、`exec` を `cli` に正規化してイベントマーカーを設定します。正当な専用プロバイダー履歴も対象です。状態をバックアップし、この全範囲を意図する場合にのみ実行してください。

### `ocx recover-history --ocx-compaction <thread-id> --yes`

ルーティングされたプロバイダーで圧縮されたタスクをネイティブ Codex で再開する前に、その履歴を修復します。このコマンドは UUID で 1 つのタスクだけを選択し、非公開のバイト単位バックアップを保存してから、OpenCodeX 所有の `ocx1:` 圧縮状態だけをネイティブ Codex が再生できる通常の要約に変換します。ネイティブの暗号化コンテンツと他のタスクは変更しません。実行前に対象タスクを閉じてください。処理中に rollout が変更された場合、ファイルを置き換えずに修復を中止します。

### `ocx uninstall`・`ocx remove`

すべての復元手順が成功した場合にのみ、サービスとプロキシを停止し、サービスと Codex シムを削除し、ネイティブ Codex を復元してから、opencodex ローカル設定を削除します。 `remove` は `uninstall` の別名です。設定のクリーンアップには、新規インストールによって作成された所有権メタデータが必要です。従来のディレクトリまたは共有ディレクトリはそのまま残ります。
Expand Down
4 changes: 4 additions & 0 deletions docs-site/src/content/docs/ko/reference/cli/lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ ocx eject back
thread를 `openai`로 바꾸고, `exec`를 `cli`로 정규화하며 event marker를 설정합니다. 정상적인
dedicated-provider history도 포함됩니다. 상태를 백업하고 이 전체 범위를 의도한 경우에만 실행하세요.

### `ocx recover-history --ocx-compaction <thread-id> --yes`

라우팅된 provider를 통해 압축된 작업을 native Codex에서 다시 열기 전에 해당 기록을 복구합니다. 이 명령은 UUID로 정확히 하나의 작업을 선택하고 비공개 바이트 단위 백업을 저장한 뒤, OpenCodeX가 소유한 `ocx1:` 압축 상태만 native Codex가 재생할 수 있는 일반 요약으로 변환합니다. native 암호화 콘텐츠와 다른 작업은 변경하지 않습니다. 실행 전에 선택한 작업을 닫으십시오. 처리 중 rollout이 변경되면 파일을 교체하지 않고 복구를 중단합니다.

### `ocx uninstall` · `ocx remove`

서비스와 프록시를 중지하고, 서비스와 Codex shim을 제거한 뒤, 기본 Codex를 복원합니다. 그 다음
Expand Down
9 changes: 9 additions & 0 deletions docs-site/src/content/docs/reference/cli/lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,15 @@ changed to `openai`, `exec` is normalized to `cli`, and the event marker is set.
legitimate dedicated-provider history. Back up the state and run it only when that full scope is
intended.

### `ocx recover-history --ocx-compaction <thread-id> --yes`

Repair one thread that was compacted through a routed provider before resuming it through native
Codex. The command reads the exact thread selected by UUID, saves a private byte-for-byte backup,
then converts only OpenCodeX-owned `ocx1:` compaction state into a plain summary that native Codex
can replay. Native encrypted content and other threads are left unchanged. Close the selected
thread before running the command; a concurrent rollout change makes recovery stop without
replacing the file.

### `ocx uninstall` · `ocx remove`

Stop the service and proxy, remove the service and Codex shim, restore native Codex, then remove
Expand Down
4 changes: 4 additions & 0 deletions docs-site/src/content/docs/ru/reference/cli/lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ ocx eject back
устанавливается. Корректная история выделенного провайдера тоже входит в охват. Сначала сделайте
резервную копию и запускайте команду только если нужен весь этот охват.

### `ocx recover-history --ocx-compaction <thread-id> --yes`

Исправьте историю одной задачи, сжатой через маршрутизируемого провайдера, перед её возобновлением в нативном Codex. Команда выбирает ровно одну задачу по UUID, сначала сохраняет приватную побайтовую резервную копию, а затем преобразует только принадлежащее OpenCodeX состояние сжатия `ocx1:` в обычную сводку, которую может воспроизвести нативный Codex. Нативное зашифрованное содержимое и другие задачи не изменяются. Перед запуском закройте выбранную задачу; если rollout изменится во время обработки, восстановление остановится без замены файла.

### `ocx uninstall` · `ocx remove`

Остановить службу и прокси, удалить службу и Codex shim, восстановить native Codex, а затем
Expand Down
4 changes: 4 additions & 0 deletions docs-site/src/content/docs/tr/reference/cli/lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ Bu, geniş kapsamlı ve yıkıcı bir yeniden etiketlemedir: kullanıcı iletisi
olarak normalleştirilir ve event marker ayarlanır. Geçerli dedicated-provider geçmişi de kapsama
dahildir. Durumu yedekleyin ve yalnızca bu kapsamın tamamını istiyorsanız çalıştırın.

### `ocx recover-history --ocx-compaction <thread-id> --yes`

Yönlendirilmiş bir sağlayıcı üzerinden sıkıştırılmış bir görevi yerel Codex ile sürdürmeden önce geçmişini onarın. Komut UUID ile yalnızca bir görevi seçer, önce özel ve bayt bayt bir yedek kaydeder, ardından yalnızca OpenCodeX'e ait `ocx1:` sıkıştırma durumunu yerel Codex'in yeniden oynatabileceği düz bir özete dönüştürür. Yerel şifreli içerik ve diğer görevler değişmeden kalır. Komutu çalıştırmadan önce seçili görevi kapatın; işlem sırasında rollout değişirse kurtarma dosyayı değiştirmeden durur.

### `ocx uninstall` · `ocx remove`

Servisi ve proxy'yi durdurun, servisi ve Codex dolgusunu kaldırın, yerel Codex'i
Expand Down
4 changes: 4 additions & 0 deletions docs-site/src/content/docs/zh-cn/reference/cli/lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ ocx eject back

这是范围很广且具有破坏性的重标记:所有包含用户消息且当前标记为 `opencodex` 的线程都会改标为 `openai`,`exec` 会规范化为 `cli`,并设置事件标记。正常的专用提供方历史记录也在范围内。请先备份状态,并且仅在确实需要这一完整范围时执行。

### `ocx recover-history --ocx-compaction <thread-id> --yes`

在通过原生 Codex 恢复某个曾由路由提供方压缩的任务前,修复该任务的历史记录。此命令按 UUID 精确选择一个任务,先保存私有的逐字节备份,然后仅将 OpenCodeX 自有的 `ocx1:` 压缩状态转换为原生 Codex 可重放的普通摘要。原生加密内容和其他任务保持不变。运行前请关闭所选任务;如果 rollout 在处理期间发生变化,恢复会停止且不会替换原文件。

### `ocx uninstall` · `ocx remove`

停止服务和代理,移除服务和 Codex shim,恢复原生 Codex,然后仅在所有恢复步骤都成功时才删除 opencodex 本地配置。`remove` 是 `uninstall` 的别名。配置清理需要由全新安装创建的所有权元数据;旧版或共享目录会保留原样。
Expand Down
4 changes: 4 additions & 0 deletions docs-site/src/content/docs/zh-tw/reference/cli/lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ ocx eject back

這是範圍很廣且具破壞性的重新標記:所有含有使用者訊息且目前標記為 `opencodex` 的 thread 都會改標為 `openai`,`exec` 會正規化為 `cli`,並設定 event marker。正常的專用 provider 歷史也包含在內。請先備份狀態,而且只有在確實需要這個完整範圍時才執行。

### `ocx recover-history --ocx-compaction <thread-id> --yes`

在透過原生 Codex 恢復曾由路由提供方壓縮的工作前,修復該工作的歷史記錄。此命令依 UUID 精確選取一個工作,先儲存私有的逐位元組備份,然後只把 OpenCodeX 自有的 `ocx1:` 壓縮狀態轉換成原生 Codex 可重播的普通摘要。原生加密內容與其他工作不會變更。執行前請關閉所選工作;若 rollout 在處理期間發生變化,復原會停止且不會取代原始檔案。

### `ocx uninstall` · `ocx remove`

停止服務與代理、移除服務與 Codex shim、還原原生 Codex,然後僅在所有還原步驟成功時移除 opencodex 本機設定。`remove` 是 `uninstall` 的別名。設定清理需要由全新安裝建立的擁有權中繼資料;舊版或共享目錄會被原樣保留。
Expand Down
1 change: 1 addition & 0 deletions scripts/test-layout/layout.json
Original file line number Diff line number Diff line change
Expand Up @@ -686,6 +686,7 @@
"gui-static.test.ts": "gui",
"health-scoring.test.ts": "server",
"history-migration-guardian.test.ts": "codex-integration",
"history-ocx-compaction-recovery.test.ts": "codex-integration",
"hyperbolic-provider.test.ts": "providers",
"identity-neutralize.test.ts": "adapters",
"init-backup-cleanup.test.ts": "service",
Expand Down
2 changes: 2 additions & 0 deletions src/cli/dispatch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import { afterCatalogWriteHandleAppServers } from "../codex/app-server-processes
import { normalizeUpdateChannel, runGuiUpdateWorker } from "../update/job";
import { isJsonOption, takeFlag } from "./runtime-api";
import type { ClientConnectionState } from "../client/state";
import { OCX_NATIVE_REPLAY_RECOVERY_NOTE } from "../responses/compaction";

export interface CliDispatchDeps {
args: string[];
Expand Down Expand Up @@ -199,6 +200,7 @@ const commandRunners: Record<string, CommandRunner> = {
}
if (r.success) {
console.log("Codex integration is OFF and plain `codex` now runs natively. Switch back with: ocx restore back");
console.log(`Note: ${OCX_NATIVE_REPLAY_RECOVERY_NOTE}`);
} else {
console.error("Plain `codex` was not fully restored. Inspect $CODEX_HOME/config.toml before using native Codex.");
}
Expand Down
2 changes: 2 additions & 0 deletions src/cli/help.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ Usage:
ocx restore back Re-point codex at the running proxy (undo restore)
ocx recover-history --legacy-openai --yes
Force all user-message opencodex rows to OpenAI (legacy recovery)
ocx recover-history --ocx-compaction <thread-id> --yes
Back up and make one ocx1-compacted thread replayable by native Codex
ocx uninstall Remove service/shim/config and restore native Codex (alias: remove)
ocx service [sub] Run as a background service (default: install/update/start)
ocx codex-shim <sub> Auto-start proxy when \`codex\` launches (install|status|uninstall|remove)
Expand Down
25 changes: 24 additions & 1 deletion src/cli/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1442,8 +1442,31 @@ async function handleStatus() {
}

async function handleRecoverHistory() {
if (args[1] === "--ocx-compaction") {
const threadId = args[2];
if (args.length !== 4 || !threadId || args[3] !== "--yes") {
console.error("Usage: ocx recover-history --ocx-compaction <thread-id> --yes");
console.error("This rewrites one rollout after saving a private byte-for-byte backup. Close that Codex thread before retrying.");
process.exit(1);
}
console.error("WARNING: this converts OpenCodeX-owned ocx1 compaction state into a plain summary for native Codex replay.");
try {
const { recoverOcxCompactionHistory } = await import("../codex/ocx-compaction-history");
const result = recoverOcxCompactionHistory({ threadId });
if (result.replaced === 0) {
console.log(`Thread ${threadId} has no repairable ocx1 compaction history; no files changed.`);
return;
}
console.log(`Recovered ${result.replaced} ocx1 compaction item(s) in thread ${threadId}.`);
console.log(`Backup: ${result.backupPath}`);
return;
} catch (error) {
console.error(`Recovery failed: ${error instanceof Error ? error.message : String(error)}`);
process.exit(1);
}
}
if (args[1] !== "--legacy-openai") {
console.error("Usage: ocx recover-history --legacy-openai --yes");
console.error("Usage: ocx recover-history (--legacy-openai | --ocx-compaction <thread-id>) --yes");
console.error("This force-relabels every user-message opencodex row to OpenAI, including legitimate dedicated-provider history. Back up first and use it only for pre-backup legacy recovery.");
process.exit(1);
}
Expand Down
4 changes: 2 additions & 2 deletions src/cli/registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ export const CLI_COMMANDS: CliCommandEntry[] = [
},
{
name: "recover-history",
usage: "ocx recover-history --legacy-openai --yes",
summary: "Force all user-message opencodex rows to OpenAI for legacy recovery.",
usage: "ocx recover-history (--legacy-openai | --ocx-compaction <thread-id>) --yes",
summary: "Recover legacy provider metadata or one OpenCodeX-compacted thread for native replay.",
},
{
name: "uninstall",
Expand Down
Loading
Loading