Commit Graph

10 Commits

Author SHA1 Message Date
Prateek db79ad9423 test: align codex plugin version checks and stabilize init port tests 2026-03-07 21:02:07 +05:30
suraj-markup b6eb4d8888 fix(agent-codex): catch approval emit throw, remove dead wasClosedBefore guard
- Wrap entire handleApprovalRequest body in try/catch so a throwing
  "approval" listener doesn't cause an unhandled promise rejection
- Remove wasClosedBefore variable that was always false (the closed
  check on entry guarantees it), simplifying the connect catch block

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 13:52:52 +05:30
suraj-markup 3f81936467 fix(agent-codex): reject pending requests before emitting error event
Move this.emit("error", err) after the pending-rejection loop in
handleProcessError, matching handleProcessExit's order. Without this,
emit("error") with no listeners throws synchronously, skipping
cleanup of pending requests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 12:08:00 +05:30
suraj-markup da7d3ec80e fix(agent-codex): stream JSONL, shell-escape binary, guard close()
- Replace full-file readFile with streaming createReadStream + readline
  for potentially huge Codex session files (100MB+)
- Shell-escape resolved binary path in launch/restore commands
- Prevent connect() failure from resetting an explicit close() call
- Remove dead helper functions replaced by streamCodexSessionData

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 09:23:15 +05:30
suraj-markup 3f76338bb4 fix(agent-codex): add jsonrpc 2.0 field and fix resume flag ordering
- Add "jsonrpc": "2.0" to all JSON-RPC requests, notifications, and
  approval responses for spec compliance
- Place flags before positional threadId in resume command for CLI
  parser compatibility (codex resume --flags <threadId>)
- Add test assertions for jsonrpc field and flag ordering

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 01:41:47 +05:30
suraj-markup 2dfbf8a778 fix(agent-codex): fix token double-counting and spawn error handling
- Remove additive cached_tokens/reasoning_tokens from cost calculation
  (they are subsets of input_tokens/output_tokens per OpenAI API convention)
- Wrap entire connect() body in try/catch so connecting flag resets if
  spawn() throws synchronously (EMFILE, ENOMEM)
- Add test for spawn-throws-synchronously recovery
- Update cost assertions to reflect correct non-additive token counting

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 01:19:36 +05:30
suraj-markup c0105476da fix(agent-codex): address follow-up review — retry after failed connect, binary guard recovery, lint fixes
- Reset closed flag after failed connect() so client can retry
- Wrap binary resolve guard in try/finally to clear on rejection
- Fix duplicate import and unused variable lint errors in tests
- Add test: client retries connect after transient handshake failure

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 01:00:44 +05:30
suraj-markup 4e7129d50d fix(agent-codex): address review comments — resource cleanup, concurrency, and memory
Fixes 6 issues flagged by Cursor Bugbot on PR #188:

1. sessionFileMatchesCwd reads only first 4 KB via open()+read() instead of
   loading entire rollout file into memory (Medium)
2. Binary resolution race condition: added promise guard to prevent
   concurrent resolveCodexBinary() calls (Low)
3. Concurrent connect() calls: added connecting guard to prevent
   orphaned child processes (High)
4. connect() failure cleanup: wrap initialize() in try/catch that
   calls close() on failure (Medium)
5. readline cleanup on process exit/error: close readline in both
   handleProcessExit and handleProcessError (Medium)
6. stderr pipe drain: call stderr.resume() to prevent child blocking
   when stderr buffer fills (High)

All 177 tests pass, typecheck clean.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 00:38:58 +05:30
suraj-markup 82317cbdeb fix(agent-codex): use correct Codex CLI flags, native resume, and date-sharded sessions
Verified all CLI flags against actual Codex documentation and fixed 6 issues:
- --approval-mode → --ask-for-approval (untrusted/on-request/never)
- --reasoning → -c model_reasoning_effort=high (config override)
- Fake text re-injection → codex resume <threadId> (native subcommand)
- Flat readdir → recursive collectJsonlFiles() for YYYY/MM/DD sharding
- ThreadStartParams values → correct Codex enum values
- Added /opt/homebrew/bin/codex and ~/.cargo/bin/codex fallback paths

Closes #176, #177, #178, #179, #183, #184

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:47:28 +05:30
suraj-markup 2e09330980 feat(agent-codex): add token tracking, approval policies, reasoning flag, binary detection, conversation resume, and app-server client
Implements six Codex-specific improvements:
- getSessionInfo() parses JSONL session files for token usage and cost estimation
- Configurable approval/sandbox policies (--approval-mode, --dangerously-bypass-approvals-and-sandbox)
- Auto-detect o-series models for --reasoning flag
- resolveCodexBinary() discovers codex via which + fallback paths
- getRestoreCommand() extracts thread context for conversation resume via re-injection
- CodexAppServerClient JSON-RPC client for Codex app-server mode (thread/turn management, approval handling, model discovery)

Closes #176, #177, #178, #179, #183, #184

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:37:13 +05:30