Show the selected bot profile and add OpenRouter fallback #18
Reference in New Issue
Block a user
Delete Branch "codex-claude-opencode"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Uses Codex first, then Claude, then OpenCode through OpenRouter when quota is exhausted.
Every generated comment and review now identifies the selected profile and model in a final quote. The dependent action interface remains one master key.
Verified formatting, lint, type checks, encrypted profile decryption, current OpenCode CLI flags, and 45 tests.
@bot please review the current head for approval, especially profile attribution, credential isolation, and quota-only fallback.
@bot please re-review the current head. OpenCode now streams live output, post-processing failures receive the attributed generic failure, and provider credentials are withheld from setup subprocesses.
54f704b660toe2af609845@bot please re-review the current head. Transport-level Gitea failures are now classified and preserved without a second posting attempt; the regression suite is 49 tests.
e2af609845to41f7d6e64f✅ Approved
Profile attribution, credential isolation, quota-only fallback, and Gitea failure classification all check out.
Verification
deno fmt --check,deno lint,deno check src/*.ts: cleandeno test --allow-all: 49/49 pass, matching the claimed count41f7d6eopencode-ai@1.18.32binary:run --format json --auto --modelare real flags, and JSON events use{type:"text", part:{type:"text", text}}, matchingparseOpenCodeEventsnpx skills add ... --agent opencodesucceeds, validating theprepareProfileagent-name changeagentEnvironmentscopesOPENROUTER_API_KEY/CLAUDE_CODE_OAUTH_TOKEN/OPENAI_API_KEYto only the active profile;prepareProfile's setup subprocesses (git config, skills install) receive no tokenGiteaRequestErrorcleanly separates transport/HTTP failures (no duplicateFAILUREcomment, perpost_test.ts) from post-processing bugs (which still get the attributed generic failure)withProfilefooter applied consistently to issue comments, review bodies, and inline commentsDeclined to judge
JSON.parseper line inparseOpenCodeEventsif OpenCode ever emits a non-JSON line despite--format json: matches the existing unguarded pattern already used for Claude'sstream-jsonoutput inrunClaude, so not a new risk introduced by this change.