From 16b613c8b6e6cb11fd28fc6de658e4a970fe1f3c Mon Sep 17 00:00:00 2001 From: D2758695161 <13510221939@163.com> Date: Sun, 5 Apr 2026 05:02:37 +0800 Subject: [PATCH 1/3] feat: add --full-access flag for danger-full-access sandbox Implements #145 --- plugins/codex/scripts/codex-companion.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/codex/scripts/codex-companion.mjs b/plugins/codex/scripts/codex-companion.mjs index 201d1c7..17c61e8 100644 --- a/plugins/codex/scripts/codex-companion.mjs +++ b/plugins/codex/scripts/codex-companion.mjs @@ -457,7 +457,7 @@ async function executeTaskRun(request) { defaultPrompt: resumeThreadId ? DEFAULT_CONTINUE_PROMPT : "", model: request.model, effort: request.effort, - sandbox: request.write ? "workspace-write" : "read-only", + sandbox: request.fullAccess ? "danger-full-access" : (request.write ? "workspace-write" : "read-only"), onProgress: request.onProgress, persistThread: true, threadName: resumeThreadId ? null : buildPersistentTaskThreadName(request.prompt || DEFAULT_CONTINUE_PROMPT) @@ -704,7 +704,7 @@ async function handleReview(argv) { async function handleTask(argv) { const { options, positionals } = parseCommandInput(argv, { valueOptions: ["model", "effort", "cwd", "prompt-file"], - booleanOptions: ["json", "write", "resume-last", "resume", "fresh", "background"], + booleanOptions: ["json", "write", "full-access", "resume-last", "resume", "fresh", "background"], aliasMap: { m: "model" } From f4077609dd17b635d9ead70533fc2234cf9ee5f7 Mon Sep 17 00:00:00 2001 From: D2758695161 <13510221939@163.com> Date: Sun, 5 Apr 2026 10:58:03 +0800 Subject: [PATCH 2/3] fix: handle EAGAIN in readHookInput() Fixes #120 - Catch EAGAIN when reading non-blocking stdin in hooks --- plugins/codex/scripts/stop-review-gate-hook.mjs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/plugins/codex/scripts/stop-review-gate-hook.mjs b/plugins/codex/scripts/stop-review-gate-hook.mjs index c22edbd..1b7ed87 100644 --- a/plugins/codex/scripts/stop-review-gate-hook.mjs +++ b/plugins/codex/scripts/stop-review-gate-hook.mjs @@ -19,11 +19,16 @@ const ROOT_DIR = path.resolve(SCRIPT_DIR, ".."); const STOP_REVIEW_TASK_MARKER = "Run a stop-gate review of the previous Claude turn."; function readHookInput() { - const raw = fs.readFileSync(0, "utf8").trim(); - if (!raw) { - return {}; + try { + const raw = fs.readFileSync(0, "utf8").trim(); + if (!raw) { + return {}; + } + return JSON.parse(raw); + } catch (e) { + if (e.code === 'EAGAIN') return {}; + throw e; } - return JSON.parse(raw); } function emitDecision(payload) { From 2d542f852115a81256d97695b6b087b12771d071 Mon Sep 17 00:00:00 2001 From: D2758695161 <13510221939@163.com> Date: Sun, 5 Apr 2026 10:58:04 +0800 Subject: [PATCH 3/3] fix: handle EAGAIN in readHookInput() Fixes #120 - Catch EAGAIN when reading non-blocking stdin in hooks --- plugins/codex/scripts/session-lifecycle-hook.mjs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/plugins/codex/scripts/session-lifecycle-hook.mjs b/plugins/codex/scripts/session-lifecycle-hook.mjs index 9655eae..7551069 100644 --- a/plugins/codex/scripts/session-lifecycle-hook.mjs +++ b/plugins/codex/scripts/session-lifecycle-hook.mjs @@ -20,11 +20,16 @@ export const SESSION_ID_ENV = "CODEX_COMPANION_SESSION_ID"; const PLUGIN_DATA_ENV = "CLAUDE_PLUGIN_DATA"; function readHookInput() { - const raw = fs.readFileSync(0, "utf8").trim(); - if (!raw) { - return {}; + try { + const raw = fs.readFileSync(0, "utf8").trim(); + if (!raw) { + return {}; + } + return JSON.parse(raw); + } catch (e) { + if (e.code === 'EAGAIN') return {}; + throw e; } - return JSON.parse(raw); } function shellEscape(value) {