fix(core): clamp code-mode exec results to the model's truncation policy by argszero · Pull Request #2 · argszero/codex · GitHub
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
496 commits
Select commit Hold shift + click to select a range
f4f85ad
Measure Codex home usage at app-server startup (#41360)
jif-oai Aug 28, 2026
8faf725
Test resuming compressed shared rollouts (#41364)
jif-oai Aug 28, 2026
7e41be6
Restrict async user messages to questions (#41365)
rhan-oai Aug 28, 2026
5ed294d
Match Windows shell guidance to the executor platform (#41368)
iceweasel-oai Aug 28, 2026
8bcac28
Preload plugin recommendations during session startup (#41375)
mzeng-openai Aug 28, 2026
4ee04c0
Clarify proactive multi-agent delegation guidance (#41380)
ani-oai Aug 28, 2026
e4d0ba4
Support configurable timeouts for thread shell commands (#41384)
gero-oai Aug 28, 2026
60fc699
Give Guardian classifications distinct turn identities (#41385)
eddie-openai Aug 28, 2026
4878401
Add shared Guardian context primitives (#41392)
felixxia-oai Aug 28, 2026
b836aec
Preserve one-shot exec when unified exec is disabled (#41393)
jif-oai Aug 28, 2026
bb998ae
Refresh runtimes for remote plugin state changes (#41396)
mzeng-openai Aug 28, 2026
d9511fb
Refresh MCP HTTP helper headers after authorization failures (#41400)
xl-openai Aug 28, 2026
3ae4225
Restrict cloud task credentials to trusted origins (#41403)
won-openai Aug 28, 2026
170da98
Optimize history item lookups (#41413)
andrewgu-oai Aug 28, 2026
0314740
Add app-server notification media filtering (#41416)
vivi Aug 28, 2026
f742dab
Support per-tool MCP output limits (#41421)
pakrym-oai Aug 28, 2026
0918cd2
Add shared Guardian transcript collection (#41422)
felixxia-oai Aug 28, 2026
f9cdc90
Preserve context baselines across nested agent forks (#41424)
jif-oai Aug 28, 2026
2008d27
Filter media from function call output notifications (#41427)
kchainani-oai Aug 28, 2026
0d22692
Retain the last selected step context for each turn (#41429)
kchainani-oai Aug 28, 2026
c2abf86
Run executor hooks for interrupted turns (#41432)
kchainani-oai Aug 28, 2026
c6bf330
Allow bundled browser cleanup hooks on subagent stop (#41435)
kchainani-oai Aug 28, 2026
0ae94fd
Respond to terminal queries from TTY subprocesses (#41436)
etraut-openai Aug 28, 2026
eec4a23
Support `openai/elicitation` form requests (#41447)
victor-openai Aug 28, 2026
a5c581e
Clarify question handling in Default collaboration mode (#41448)
rhan-oai Aug 28, 2026
75388bf
Rename the read-only Seatbelt platform defaults policy (#41449)
tnm-oai Aug 28, 2026
48e22a5
Report code mode host request durations (#41452)
anp-oai Aug 28, 2026
62b458c
Block goals after repeated execution host failures (#41454)
etraut-openai Aug 29, 2026
2181224
Support app targets in executor plugin hooks (#41456)
syuan-oai Aug 29, 2026
03861e6
Source proactive multi-agent instructions from the model catalog (#41…
rhan-oai Aug 29, 2026
3c062df
Source async user message descriptions from the model catalog (#41461)
rhan-oai Aug 29, 2026
0b45b17
Preserve permissions when updating session metadata (#41464)
charliemarsh-oai Aug 29, 2026
5fc7840
Refresh the TUI model picker from the app server (#41467)
bc-openai Aug 29, 2026
9a0d7a7
Use rules_rs platforms for release binaries (#41476)
tamird Aug 29, 2026
6478a75
Organize bundled Rust resources under asset directories (#41477)
tamird Aug 29, 2026
4210c08
Preserve turn lineage across goal continuations (#41562)
etraut-openai Aug 29, 2026
f5636bb
Restore thread cwd from owned settings snapshots (#41567)
rhan-oai Aug 29, 2026
aaa7ed0
Harden diagnostic report uploads (#41569)
chess-oai Aug 29, 2026
b8c8637
Fix proactive multi-agent instruction grammar (#41570)
rhan-oai Aug 29, 2026
63d2138
Add Vim search motions to the composer (#41586)
bc-openai Aug 30, 2026
dde85b4
Move Vim history tests into the history search module (#41613)
bc-openai Aug 30, 2026
2832735
Update tests for default-enabled update_plan (#41630)
rka-oai Aug 30, 2026
0a12b85
Preserve Guardian authorization across history compaction (#41660)
jif-oai Aug 30, 2026
cefa060
Approve the first Node REPL execution without a Guardian wait (#41666)
jif-oai Aug 30, 2026
da23e13
Repair cursor-style rendering on older JediTerm terminals (#41673)
tamird Aug 30, 2026
88f7765
Set working directories for environment MCP tests (#41683)
jif-oai Aug 30, 2026
94cbbdd
Support package-style MCP server names (#41700)
etraut-openai Aug 30, 2026
79b04f1
Show actionable rate-limit banners in the TUI (#41742)
stefanstokic-oai Aug 31, 2026
b7cd519
Mark history ingestion requests in turn metadata (#41743)
pmccrary-oai Aug 31, 2026
a9519cb
Make the update_plan tool opt-in (#41744)
rka-oai Aug 31, 2026
d58d0e5
Allow models to enable token budgeting by default (#41803)
pmccrary-oai Aug 31, 2026
e45226e
Use the async stack budget for approval reviews (#41840)
tamird Aug 31, 2026
1c1e177
Preserve Guardian review evidence across compaction (#41846)
jif-oai Aug 31, 2026
305eed1
Preserve Guardian user answers across compaction (#41852)
jif-oai Aug 31, 2026
9d19c74
Box the session startup future at its API boundary (#41853)
bc-openai Aug 31, 2026
98a8425
Preserve Guardian user answers from current history (#41857)
jif-oai Aug 31, 2026
09f4c45
Preserve user text when Guardian history drops oversized images (#41858)
jif-oai Aug 31, 2026
2c8cfbf
Keep history extension tools out of Guardian reviews (#41861)
jif-oai Aug 31, 2026
032d15c
Use shared transcript collection for Guardian reviews (#41870)
felixxia-oai Aug 31, 2026
9f97cb7
Preserve Guardian review evidence across compaction (#41879)
felixxia-oai Aug 31, 2026
379d50b
Add pinned native voice source preparation (#41884)
bc-openai Aug 31, 2026
fc7d34a
Add native voice dependency build recipe (#41890)
bc-openai Aug 31, 2026
e51b54b
Retain the MCP client for event streams (#41892)
evan-oai Aug 31, 2026
32f4859
Show successful TUI commands individually (#41893)
bc-openai Aug 31, 2026
65237ae
Fix Windows native voice dependency builds (#41894)
bc-openai Aug 31, 2026
d60560f
Add the voice helper lifecycle foundation (#41897)
bc-openai Aug 31, 2026
53691ba
Keep MCP event subscriptions alive after task unloading (#41899)
evan-oai Aug 31, 2026
f88ff94
Load bounded context after empty wake turns (#41901)
bryanashley Aug 31, 2026
13bc770
Add installed voice host lifecycle support (#41902)
bc-openai Aug 31, 2026
ae0ecd7
Add a manager for MCP event streams (#41906)
evan-oai Aug 31, 2026
2f0a5d5
Avoid scanning archived rollouts when archiving threads (#41908)
etraut-openai Aug 31, 2026
b51b077
Make permission transforms aware of executor path context (#41909)
iceweasel-oai Aug 31, 2026
a791339
Preserve TUI drafts after app-server disconnects (#41911)
etraut-openai Aug 31, 2026
5f79a92
Persist response token usage in rollout history (#41912)
owenlin0 Aug 31, 2026
17e8101
Preserve TUI status timing when the status row is hidden (#41913)
imac-oai Aug 31, 2026
9a4b785
Move the config schema generator into a dedicated crate (#41915)
tamird Aug 31, 2026
907c34e
Reconnect TUI app-server sessions automatically (#41916)
etraut-openai Aug 31, 2026
0a2e2bf
Open the agents overview from an empty composer (#41917)
etraut-openai Aug 31, 2026
746798b
Restore agent navigation after TUI reconnects (#41918)
etraut-openai Aug 31, 2026
865bbf9
Source Guardian REPL policy from model metadata (#41919)
olliem-oai Aug 31, 2026
0344625
Start fresh Vim drafts in Insert mode (#41921)
bc-openai Aug 31, 2026
34c4f7e
Allow per-call sideband endpoints for existing realtime calls (#41923)
zahan-oai Aug 31, 2026
64c9cde
Record realtime conversation history in Core (#41924)
guinness-oai Aug 31, 2026
9127f21
Test repository-wide Rust formatter discovery (#41925)
anp-oai Aug 31, 2026
c4350b4
Use executor path context for permission preapproval (#41928)
iceweasel-oai Aug 31, 2026
2c3bf4e
Open the agents overview directly in the reconnect test (#41929)
jif-oai Aug 31, 2026
4ac20a7
Increase Guardian message transcript limits (#41931)
jif-oai Aug 31, 2026
a62ff9a
Report configured sandbox policy consistently (#41933)
charliemarsh-oai Aug 31, 2026
981d6b6
Omit undersized WAV output from Code Mode (#41934)
JenZhao Aug 31, 2026
13d75cd
Attach failed Guardian reviews to diagnostic reports (#41936)
jif-oai Aug 31, 2026
115ffaf
Limit background terminal input previews (#41937)
bc-openai Aug 31, 2026
0e03f88
Clarify resume guidance in exit summaries (#41938)
bc-openai Aug 31, 2026
c5a3700
Preserve transcript layout caches during backtrack selection (#41940)
bc-openai Aug 31, 2026
9c7edd4
Add Vim undo to the TUI composer (#41941)
bc-openai Aug 31, 2026
e39ab0c
Emit turn cost telemetry for ChatGPT sessions (#41944)
xli-oai Aug 31, 2026
c2e5692
Expand extension permission regression coverage (#41946)
anp-oai Sep 1, 2026
bfa9646
Add plugin reconciliation app-server API (#41949)
mzeng-openai Sep 1, 2026
55e5158
Improve tracing for nested tool calls and exec processes (#41950)
anp-oai Sep 1, 2026
633ab19
Enforce marketplace source policy for curated plugins (#41953)
willwang-openai Sep 1, 2026
c7fced5
Track TUI starts by app server mode (#41974)
etraut-openai Sep 1, 2026
d038f34
Move `disable_paste_burst` under `[tui]` (#41976)
etraut-openai Sep 1, 2026
e017e93
Preserve raw response usage metadata (#41980)
sayan-oai Sep 1, 2026
2b7c279
Report turn trigger and source in turn analytics (#42003)
eddie-openai Sep 1, 2026
8209978
Share Guardian user-message retention logic (#42031)
felixxia-oai Sep 1, 2026
2e5ee41
Improve Guardian report diagnostics (#42033)
jif-oai Sep 1, 2026
9d0eae7
Include shared histories in rollout compression (#42039)
jif-oai Sep 1, 2026
90ae0c4
Tag Codex home size metrics with compression state (#42043)
jif-oai Sep 1, 2026
0ec375e
Add per-account approval settings for apps (#42047)
zamoshchin-openai Sep 1, 2026
0e37d83
Honor explicit account selectors for Apps tool calls (#42054)
zamoshchin-openai Sep 1, 2026
3a04482
Honor app link settings for MCP tool approvals (#42056)
zamoshchin-openai Sep 1, 2026
28097e9
Preserve Guardian history across thread reconstruction (#42065)
jif-oai Sep 1, 2026
25ba0ae
Remove selected core test cases (#42066)
jif-oai Sep 1, 2026
3c6bb8b
Detect standalone installs from the macOS CLI bundle (#42068)
eburke-openai Sep 1, 2026
82461c9
Remove redundant test coverage (#42069)
jif-oai Sep 1, 2026
d141438
Detect Vite+-managed Codex installs (#42071)
charliemarsh-oai Sep 1, 2026
2350823
Unify Guardian context section collection (#42076)
felixxia-oai Sep 1, 2026
67cc3c3
Attribute nested REPL reviews to their tool calls (#42082)
ankushg Sep 1, 2026
6127478
Centralize Guardian context composition (#42085)
felixxia-oai Sep 1, 2026
f4e6cb7
Attribute Guardian reviews to OpenAI app tools (#42086)
alecbarber-oai Sep 1, 2026
ade0cca
Record Windows MXC availability (#42094)
iceweasel-oai Sep 1, 2026
a17ee57
Make diagnostic report uploads resilient to slow networks (#42096)
chess-oai Sep 1, 2026
b6ab99e
Prefer remote Sites over the bundled plugin (#42100)
jiwon-oai Sep 1, 2026
8ea297f
Add a TUI setting to disable automatic recaps (#42101)
fcoury-oai Sep 1, 2026
9969043
Extract OTEL trace WebSocket into a reusable crate (#42102)
anp-oai Sep 1, 2026
f40e084
Show recent sessions in the agent command center (#42104)
etraut-openai Sep 1, 2026
6a479e1
Show full patches and terminal input in TUI history (#42107)
bc-openai Sep 1, 2026
84aa752
Format Python scripts across the repository (#42109)
charliemarsh-oai Sep 1, 2026
c7c824d
Treat bundled cleanup hooks as built-ins (#42110)
teddywyly-oai Sep 1, 2026
1f4c473
Apply remote platform semantics to exec safety checks (#42113)
iceweasel-oai Sep 1, 2026
ef76e6a
Centralize remote plugin mutations in `PluginsManager` (#42114)
willwang-openai Sep 1, 2026
ea7e071
Fix relative MCP server spawning on macOS (#42117)
charliemarsh-oai Sep 1, 2026
bc39b0e
Refine hook activity rendering in the TUI (#42118)
abhinav-oai Sep 1, 2026
9112564
Allow updating the approval reviewer for active turns (#42121)
jif-oai Sep 1, 2026
0276f2e
Preserve descriptive labels on local file links (#42123)
bc-openai Sep 1, 2026
7730edf
Ignore non-JSON files in plugin catalog test helpers (#42126)
willwang-openai Sep 1, 2026
bd89ce6
Prepare MCP connections for coordinated OAuth refresh (#42128)
mzeng-openai Sep 1, 2026
8436b74
Bound Git root discovery for metadata enrichment (#42132)
charliemarsh-oai Sep 1, 2026
2393b5c
Scope session MCP approvals to app account links (#42133)
zamoshchin-openai Sep 1, 2026
a30fa3d
Include app link metadata in MCP approval elicitations (#42134)
zamoshchin-openai Sep 1, 2026
c5b5fa8
Support thread forks from symlinked session roots (#42135)
owenlin0 Sep 1, 2026
612e649
Prewarm shell snapshots for eligible turns (#42137)
jif-oai Sep 1, 2026
b192442
Add redo support to Vim composer history (#42140)
bc-openai Sep 1, 2026
a876a9e
Add early rate-limit warnings for Plus and Team plans (#42142)
stefanstokic-oai Sep 1, 2026
86b7d12
Add Guardian V2 analytics events (#42144)
jif-oai Sep 1, 2026
cd8bd62
Resolve permission requests in the executor context (#42146)
iceweasel-oai Sep 1, 2026
e576993
Skip Guardian reviews in Full Access (#42147)
jif-oai Sep 1, 2026
68c9556
Upgrade Git marketplaces from merged configuration (#42149)
willwang-openai Sep 1, 2026
6b59cef
Support remote marketplaces in the plugin CLI (#42150)
willwang-openai Sep 1, 2026
986ff1c
Expose model settings in app-server thread metadata (#42151)
btraut-openai Sep 1, 2026
8971fc2
Split tool JSON Schema code into focused modules (#42161)
celia-oai Sep 2, 2026
12ed76b
Record result sources in app tool analytics (#42164)
ningyi-oai Sep 2, 2026
671d5d1
Support header injections in network requirements (#42173)
andrewhuang-oai Sep 2, 2026
b21f2e3
Add a cacheable Bazel app-server schema bundle (#42174)
charliemarsh-oai Sep 2, 2026
2c79ee6
Add structured asynchronous user input requests (#42178)
rka-oai Sep 2, 2026
ddf8a67
Fix punctuation in npm packaging documentation (#42188)
johnl-oai Sep 2, 2026
02f47d3
Use native spawning for bare macOS MCP commands (#42192)
charliemarsh-oai Sep 2, 2026
5a0419e
Add Vim replace mode to the TUI composer (#42194)
bc-openai Sep 2, 2026
798833f
Add managed worktree creation (#42196)
bc-openai Sep 2, 2026
0b509e9
Refactor shared TUI input routing (#42199)
bc-openai Sep 2, 2026
9d57be7
Separate TUI preferences from server configuration (#42202)
etraut-openai Sep 2, 2026
8813bd4
Add macOS voice runtime projection (#42204)
bc-openai Sep 2, 2026
27bf160
Retry TUI reconnects while threads are closing (#42207)
etraut-openai Sep 2, 2026
8d01cd4
Add GNU Linux voice runtime preparation (#42208)
bc-openai Sep 2, 2026
eb10d91
Add Windows voice runtime preparation (#42209)
bc-openai Sep 2, 2026
bdfd769
Track history notes thread hint outcomes (#42247)
pmccrary-oai Sep 2, 2026
a0dcfe2
Skip Guardian scoring in User approval mode (#42256)
jif-oai Sep 2, 2026
8d32abc
Report the exec-server release version in environment info (#42270)
felixxia-oai Sep 2, 2026
50fffd5
Refresh plugin skills after out-of-process version changes (#42284)
jif-oai Sep 2, 2026
94e5d05
Fetch rules_rs zlib packages from Ubuntu snapshots (#42288)
jif-oai Sep 2, 2026
389dd56
Expand Guardian history coverage across resume and rollback (#42290)
felixxia-oai Sep 2, 2026
5971d42
Preserve verified answers across history compaction (#42293)
felixxia-oai Sep 2, 2026
8e3b180
Preserve retained answers across steer rollbacks (#42298)
felixxia-oai Sep 2, 2026
fc953e5
Stabilize the detached exec-server session resume test (#42306)
jif-oai Sep 2, 2026
1bc8fb1
Separate Windows sandbox provisioning from ACL refresh (#42309)
iceweasel-oai Sep 2, 2026
eb078b4
Preserve target-native cwd in permission approval requests (#42314)
iceweasel-oai Sep 2, 2026
f252c23
Refactor exec-server startup futures (#42316)
anp-oai Sep 2, 2026
a94a5db
Support packaged managed Codex binary paths (#42318)
etraut-openai Sep 2, 2026
a526f54
Show live context compaction status in the TUI (#42319)
etraut-openai Sep 2, 2026
5e26f76
Make the app-server thread unload delay configurable (#42320)
etraut-openai Sep 2, 2026
637c322
Avoid executing PATH helpers before workspace trust (#42324)
fcoury-oai Sep 2, 2026
e6ff749
Render completed assistant messages directly during replay (#42325)
bc-openai Sep 2, 2026
73e94ee
Harden Windows control socket rendezvous (#42326)
etraut-openai Sep 2, 2026
0d502a4
Support durable reasoning configuration updates (#42328)
felixxia-oai Sep 2, 2026
f599056
Protect Windows sandbox binaries from inherited write access (#42330)
iceweasel-oai Sep 2, 2026
dc0dc4f
Package prepared runtimes with the voice host (#42332)
bc-openai Sep 2, 2026
301a7c5
Add a Windows sandbox provisioning protocol (#42334)
johnl-oai Sep 2, 2026
dcfcb57
Add an authenticated Windows sandbox provisioning client (#42337)
johnl-oai Sep 2, 2026
501931b
Add Windows sandbox service lifecycle scaffolding (#42341)
johnl-oai Sep 2, 2026
add870a
Harden Windows sandbox provisioning file handling (#42342)
johnl-oai Sep 2, 2026
c4ea729
Prepare managed policy validation for Windows sandbox provisioning (#…
johnl-oai Sep 2, 2026
4fdf4c1
Add Windows sandbox client authentication (#42348)
johnl-oai Sep 2, 2026
7e45bdb
Enable authenticated Windows sandbox provisioning (#42351)
johnl-oai Sep 2, 2026
830363b
Add experimental Windows sandbox service provisioning (#42353)
johnl-oai Sep 2, 2026
d6350e2
Add free-form asynchronous user messages (#42354)
rka-oai Sep 2, 2026
0227158
Initialize questions in buffered replay test messages (#42356)
andrewgu-oai Sep 2, 2026
577a4fc
Extend rate limit reads with usage capabilities (#42358)
dhruvgupta-oai Sep 2, 2026
10aca93
Support graceful daemon shutdown on Windows (#42364)
etraut-openai Sep 2, 2026
a2a9a43
List managed worktrees for a repository (#42366)
bc-openai Sep 2, 2026
095ac4f
Keep SQLite history projection moving past invalid records (#42369)
owenlin0 Sep 2, 2026
76f4710
Improve MCP server startup error logging (#42370)
victor-openai Sep 2, 2026
5037919
Add Luna Reserve usage fallback to the TUI (#42372)
dhruvgupta-oai Sep 2, 2026
f53c91b
Add attributed exec process lifecycle telemetry (#42373)
viyatb-oai Sep 2, 2026
a14ef02
Extract PID startup into a dedicated module (#42374)
etraut-openai Sep 2, 2026
665e5f4
Clean up Windows sandbox resources on app uninstall (#42375)
chess-oai Sep 2, 2026
e1d0ef9
Make app-server realtime sessions always available (#42377)
guinness-oai Sep 2, 2026
69cebb5
Route rollout reads through the canonical JSON decoder (#42378)
owenlin0 Sep 2, 2026
0588fc9
Require confirmation for safety-buffered retries (#42380)
etraut-openai Sep 2, 2026
7152944
Support managed app-server lifecycle on Windows (#42381)
etraut-openai Sep 2, 2026
a28aab7
Update rmcp to 3.2.0 (#42383)
mzeng-openai Sep 2, 2026
3127092
Add an RMCP OAuth credential store adapter (#42384)
mzeng-openai Sep 2, 2026
cff76fa
Add experimental context management activation (#42385)
pmccrary-oai Sep 2, 2026
2b554fd
Expose loaded thread environments in app-server responses (#42386)
apanasenko-oai Sep 2, 2026
e6249b5
Recover deferred environments after provisioning failure (#42388)
apanasenko-oai Sep 2, 2026
fe140d4
Authorize `apply_patch` in the executor path context (#42391)
iceweasel-oai Sep 2, 2026
9160823
Support managed daemon updates on Windows (#42392)
etraut-openai Sep 2, 2026
9bb1ea0
Expose the Codex version to commands and turn metadata (#42395)
jif-oai Sep 2, 2026
e6a944a
Extract focused TUI logic into submodules (#42397)
etraut-openai Sep 2, 2026
54a4077
Preserve restored input after resolved misalignment errors (#42399)
etraut-openai Sep 2, 2026
d4dc882
Discover TUI collaboration modes from the app server (#42401)
etraut-openai Sep 2, 2026
1281778
Expose the last accepted environment ready report (#42403)
apanasenko-oai Sep 2, 2026
deb1471
Read voice helper frames independently of pipe chunks (#42404)
bc-openai Sep 2, 2026
b7f7102
Support the app-server daemon on Windows (#42405)
etraut-openai Sep 2, 2026
460b63e
Honor explicit plugin mentions during MCP startup (#42406)
mzeng-openai Sep 3, 2026
93053c7
Harden embedded composer input handling (#42408)
etraut-openai Sep 3, 2026
fdf23b4
Allow reviewing and continuing misalignment-paused chats (#42410)
etraut-openai Sep 3, 2026
88912c0
Enable coordinated MCP OAuth refresh (#42413)
mzeng-openai Sep 3, 2026
b27a632
Expose managed application network requirements (#42417)
acrognale-oai Sep 3, 2026
1d74174
Add session resume to the agent command center (#42419)
etraut-openai Sep 3, 2026
38ba8cd
Honor model requirements in Guardian computer-use scoring (#42422)
jif-oai Sep 3, 2026
cac96cd
Discover TUI experimental features from the server (#42425)
etraut-openai Sep 3, 2026
62f553b
Use the shared composer in the agent command center (#42428)
etraut-openai Sep 3, 2026
498d40b
Box the TUI resume picker future (#42432)
etraut-openai Sep 3, 2026
36984da
Include originator in plugin measurement analytics (#42445)
jwang-openai Sep 3, 2026
8b8ee28
Acknowledge pending TUI steers by submission ID (#42451)
etraut-openai Sep 3, 2026
c9fecd3
Discover permission profiles from the app server (#42453)
etraut-openai Sep 3, 2026
8ff74cc
Show live task details in the agent command center (#42455)
etraut-openai Sep 3, 2026
728cb12
Expose thread originators through the app-server API (#42458)
cansar-oai Sep 3, 2026
6d7f6dc
Register the Guardian thread context feature flag (#42529)
felixxia-oai Sep 3, 2026
0650d6d
Preserve MCP authentication challenges on tool calls (#42552)
frantic-openai Sep 3, 2026
7a7c188
Preserve target-native paths in command approvals (#42577)
iceweasel-oai Sep 3, 2026
1d74c3b
Persist verified user answers in Guardian thread context (#42579)
felixxia-oai Sep 3, 2026
1d6727c
Recover Vim escape input in legacy terminals (#42584)
bc-openai Sep 3, 2026
ad8ee16
Require Guardian review for incompatible compaction checkpoints (#42588)
felixxia-oai Sep 3, 2026
ec84e69
Harden the macOS sandbox against terminal input injection (#42590)
won-openai Sep 3, 2026
2387310
Reload user config after local plugin installation (#42593)
victor-openai Sep 3, 2026
f60dfe8
Record Windows sandbox private desktop usage (#42596)
iceweasel-oai Sep 3, 2026
8f31b64
Report MCP tool discovery errors in server status (#42598)
victor-openai Sep 3, 2026
f84c977
Deprecate detached review delivery (#42602)
yansenzhou-oai Sep 3, 2026
7eee24e
Expose global metrics installation in `codex-otel` (#42603)
ostepanian Sep 3, 2026
27023e3
fix(core): clamp code-mode exec results to the model's truncation policy
argszero Sep 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
4 changes: 0 additions & 4 deletions .bazelrc
106 changes: 83 additions & 23 deletions .codex/skills/babysit-pr/scripts/gh_pr_watch.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,16 +60,22 @@ def parse_args():
)
parser.add_argument("--pr", default="auto", help="auto, PR number, or PR URL")
parser.add_argument("--repo", help="Optional OWNER/REPO override")
parser.add_argument("--poll-seconds", type=int, default=30, help="Watch poll interval")
parser.add_argument(
"--poll-seconds", type=int, default=30, help="Watch poll interval"
)
parser.add_argument(
"--max-flaky-retries",
type=int,
default=3,
help="Max rerun cycles per head SHA before stop recommendation",
)
parser.add_argument("--state-file", help="Path to state JSON file")
parser.add_argument("--once", action="store_true", help="Emit one snapshot and exit")
parser.add_argument("--watch", action="store_true", help="Continuously emit JSONL snapshots")
parser.add_argument(
"--once", action="store_true", help="Emit one snapshot and exit"
)
parser.add_argument(
"--watch", action="store_true", help="Continuously emit JSONL snapshots"
)
parser.add_argument(
"--retry-failed-now",
action="store_true",
Expand Down Expand Up @@ -128,7 +134,9 @@ def gh_json(args, repo=None):
try:
return json.loads(raw)
except json.JSONDecodeError as err:
raise GhCommandError(f"Failed to parse JSON from gh output for {' '.join(args)}") from err
raise GhCommandError(
f"Failed to parse JSON from gh output for {' '.join(args)}"
) from err


def parse_pr_spec(pr_spec):
Expand Down Expand Up @@ -210,6 +218,8 @@ def extract_repo_from_pr_view(data):
if owner and name:
return f"{owner}/{name}"
return None


def extract_repo_from_pr_url(pr_url):
parsed = urlparse(pr_url)
parts = [p for p in parsed.path.split("/") if p]
Expand Down Expand Up @@ -242,7 +252,9 @@ def load_state(path):
def save_state(path, state):
path.parent.mkdir(parents=True, exist_ok=True)
payload = json.dumps(state, indent=2, sort_keys=True) + "\n"
fd, tmp_name = tempfile.mkstemp(prefix=f"{path.name}.", suffix=".tmp", dir=path.parent)
fd, tmp_name = tempfile.mkstemp(
prefix=f"{path.name}.", suffix=".tmp", dir=path.parent
)
tmp_path = Path(tmp_name)
try:
with os.fdopen(fd, "w", encoding="utf-8") as tmp_file:
Expand Down Expand Up @@ -304,7 +316,16 @@ def summarize_checks(checks):
def get_workflow_runs_for_sha(repo, head_sha):
endpoint = f"repos/{repo}/actions/runs"
data = gh_json(
["api", endpoint, "-X", "GET", "-f", f"head_sha={head_sha}", "-f", "per_page=100"],
[
"api",
endpoint,
"-X",
"GET",
"-f",
f"head_sha={head_sha}",
"-f",
"per_page=100",
],
repo=repo,
)
if not isinstance(data, dict):
Expand Down Expand Up @@ -334,7 +355,12 @@ def failed_runs_from_workflow_runs(runs, head_sha):
"html_url": str(run.get("html_url") or ""),
}
)
failed_runs.sort(key=lambda item: (str(item.get("workflow_name") or ""), str(item.get("run_id") or "")))
failed_runs.sort(
key=lambda item: (
str(item.get("workflow_name") or ""),
str(item.get("run_id") or ""),
)
)
return failed_runs


Expand All @@ -361,7 +387,10 @@ def failed_jobs_from_workflow_runs(repo, runs, head_sha):
continue
run_status = str(run.get("status") or "")
run_conclusion = str(run.get("conclusion") or "")
if run_status.lower() == "completed" and run_conclusion not in FAILED_RUN_CONCLUSIONS:
if (
run_status.lower() == "completed"
and run_conclusion not in FAILED_RUN_CONCLUSIONS
):
continue
jobs = get_jobs_for_run(repo, run_id)
for job in jobs:
Expand Down Expand Up @@ -401,7 +430,9 @@ def failed_jobs_from_workflow_runs(repo, runs, head_sha):
def get_authenticated_login():
data = gh_json(["api", "user"])
if not isinstance(data, dict) or not data.get("login"):
raise GhCommandError("Unable to determine authenticated GitHub login from `gh api user`")
raise GhCommandError(
"Unable to determine authenticated GitHub login from `gh api user`"
)
return str(data["login"])


Expand Down Expand Up @@ -492,7 +523,9 @@ def normalize_reviews(items):
"id": str(item.get("id") or ""),
"author": extract_login(item.get("user")),
"author_association": str(item.get("author_association") or ""),
"created_at": str(item.get("submitted_at") or item.get("created_at") or ""),
"created_at": str(
item.get("submitted_at") or item.get("created_at") or ""
),
"body": str(item.get("body") or ""),
"path": None,
"line": None,
Expand Down Expand Up @@ -535,7 +568,9 @@ def fetch_new_review_items(pr, state, fresh_state, authenticated_login=None):
endpoints = comment_endpoints(repo, pr_number)

issue_payload = gh_api_list_paginated(endpoints["issue_comment"], repo=repo)
review_comment_payload = gh_api_list_paginated(endpoints["review_comment"], repo=repo)
review_comment_payload = gh_api_list_paginated(
endpoints["review_comment"], repo=repo
)
review_payload = gh_api_list_paginated(endpoints["review"], repo=repo)

issue_items = normalize_issue_comments(issue_payload)
Expand All @@ -545,7 +580,9 @@ def fetch_new_review_items(pr, state, fresh_state, authenticated_login=None):
if isinstance(item, dict) and item.get("id") not in (None, "")
}
pending_review_ids = {
review_id for review_id, review_state in review_states.items() if review_state == "PENDING"
review_id
for review_id, review_state in review_states.items()
if review_state == "PENDING"
}
pending_review_comment_ids = {
str(item.get("id"))
Expand All @@ -554,7 +591,9 @@ def fetch_new_review_items(pr, state, fresh_state, authenticated_login=None):
and item.get("id") not in (None, "")
and str(item.get("pull_request_review_id") or "") in pending_review_ids
}
review_comment_items = normalize_review_comments(review_comment_payload, review_states)
review_comment_items = normalize_review_comments(
review_comment_payload, review_states
)
review_items = normalize_reviews(review_payload)
all_items = issue_items + review_comment_items + review_items

Expand Down Expand Up @@ -598,7 +637,13 @@ def fetch_new_review_items(pr, state, fresh_state, authenticated_login=None):
elif kind == "review":
seen_review.add(item_id)

new_items.sort(key=lambda item: (item.get("created_at") or "", item.get("kind") or "", item.get("id") or ""))
new_items.sort(
key=lambda item: (
item.get("created_at") or "",
item.get("kind") or "",
item.get("id") or "",
)
)
state["seen_issue_comment_ids"] = sorted(seen_issue)
state["seen_review_comment_ids"] = sorted(seen_review_comment)
state["seen_review_ids"] = sorted(seen_review)
Expand Down Expand Up @@ -650,7 +695,15 @@ def is_pr_ready_to_merge(pr, checks_summary, new_review_items):
return True


def recommend_actions(pr, checks_summary, failed_runs, failed_jobs, new_review_items, retries_used, max_retries):
def recommend_actions(
pr,
checks_summary,
failed_runs,
failed_jobs,
new_review_items,
retries_used,
max_retries,
):
actions = []
if pr["closed"] or pr["merged"]:
if new_review_items:
Expand All @@ -671,7 +724,11 @@ def recommend_actions(pr, checks_summary, failed_runs, failed_jobs, new_review_i
actions.append("stop_exhausted_retries")
else:
actions.append("diagnose_ci_failure")
if checks_summary["all_terminal"] and failed_runs and retries_used < max_retries:
if (
checks_summary["all_terminal"]
and failed_runs
and retries_used < max_retries
):
actions.append("retry_failed_checks")

if not actions:
Expand All @@ -681,7 +738,9 @@ def recommend_actions(pr, checks_summary, failed_runs, failed_jobs, new_review_i

def collect_snapshot(args):
pr = resolve_pr(args.pr, repo_override=args.repo)
state_path = Path(args.state_file) if args.state_file else default_state_file_for(pr)
state_path = (
Path(args.state_file) if args.state_file else default_state_file_for(pr)
)
state, fresh_state = load_state(state_path)

if not state.get("started_at"):
Expand All @@ -703,7 +762,9 @@ def collect_snapshot(args):
checks_summary = summarize_checks(checks)
workflow_runs = get_workflow_runs_for_sha(pr["repo"], pr["head_sha"])
failed_runs = failed_runs_from_workflow_runs(workflow_runs, pr["head_sha"])
failed_jobs = failed_jobs_from_workflow_runs(pr["repo"], workflow_runs, pr["head_sha"])
failed_jobs = failed_jobs_from_workflow_runs(
pr["repo"], workflow_runs, pr["head_sha"]
)

retries_used = current_retry_count(state, pr["head_sha"])
actions = recommend_actions(
Expand Down Expand Up @@ -845,11 +906,10 @@ def run_watch(args):
},
)
actions = set(snapshot.get("actions") or [])
if (
"stop_pr_closed" in actions
or "stop_exhausted_retries" in actions
):
print_event("stop", {"actions": snapshot.get("actions"), "pr": snapshot.get("pr")})
if "stop_pr_closed" in actions or "stop_exhausted_retries" in actions:
print_event(
"stop", {"actions": snapshot.get("actions"), "pr": snapshot.get("pr")}
)
return 0

current_change_key = snapshot_change_key(snapshot)
Expand Down
1 change: 1 addition & 0 deletions .gitattributes
Loading