Colin Johnson
de9ed64c29
feat(talk): enable GPT Live with Codex OAuth ( #113354 )
2026-07-25 20:41:27 -04:00
Peter Steinberger
1bce047953
fix(ci): repair plugin prerelease contracts ( #113820 )
2026-07-25 12:38:31 -07:00
Peter Steinberger
332006bc1f
test: consolidate OpenClaw test state fixtures ( #113576 )
...
* test: consolidate OpenClaw test state fixtures
* test(plugin-sdk): expose isolated test state
Promote the isolated OpenClaw test-state lifecycle through a narrow published Plugin SDK subpath so extension tests no longer import private core helpers. This intentional SDK surface addition is maintainer-approved.
* test: use SDK test-state seam in extensions
Route bundled extension suites through the focused repo-local Plugin SDK test-state entrypoint and remove the Codex projector harness exports made stale by fixture consolidation. Keep the seam out of production builds and published package artifacts while auditing its real consumers in the full-tree deadcode scan.
* test(plugins): map test-state in package boundaries
2026-07-25 05:30:52 -07:00
Masato Hoshino
bdcc5d54a5
fix(agents): honor run abort signal in image and pdf tools ( #112644 )
...
* fix(agents): honor run abort signal in image and pdf tools
The image and pdf agent tools declared `execute: async (_toolCallId, args)`
and dropped the run abort signal that `wrapToolWithAbortSignal` supplies as
the third execute argument. The wrapper only races the execute promise, so an
aborted run kept sequentially downloading images/PDFs (up to the per-tool cap,
each up to the byte cap) and still issued a paid vision/PDF-model call for a
dead run.
Thread the signal into the existing `requestInit: { signal }` seam (which the
media fetch layer already merges into the download fetch) and add
`signal.throwIfAborted()` between sequential loop items and before the paid
model call. No new media-options signal field; non-abort behavior is unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
* fix(agents): keep the pdf test suite under the lint ceiling; guard model dispatch
Follow-up on the abort-signal change, resolving the check-lint failure and a
review finding on the same seam.
max-lines
---------
Adding the two pdf abort tests pushed src/agents/tools/pdf-tool.test.ts to 1018
effective lines against a ceiling of 1000, failing check-lint. Resolved without
touching config/max-lines-baseline.txt — a suppression there would also have
tripped the max-lines ratchet.
- The new tests declared their own `describe` with `beforeEach`/`afterEach`
hooks identical to the existing `describe("createPdfTool")`. They exercise
that same tool, so they now live in it and the duplicated scaffolding is gone.
- `stubPdfToolInfra`, `createPdfModelRegistry` and `FAKE_PDF_MEDIA` moved to
pdf-tool.test-support.ts, which already exists for exactly this. They go
through `createPdfToolInfraStub(completeMock)` rather than being exported
directly, because the stub wires the suite's own `complete` mock into the
model registry and vi.mock handles are file-scoped. All 21 existing call
sites are unchanged.
Abort propagation into model dispatch
-------------------------------------
The previous revision stopped cancellation at download boundaries and before
the first model call, but `runImagePrompt`/`runPdfPrompt` never saw the signal.
A run cancelled while the first provider request was in flight could still
issue the remaining ones — the image path dispatches `describeImage` once per
image in a sequential loop, so a dead run kept paying for every later image.
Both now take an optional `signal` and check it immediately before each
provider dispatch (3 sites in image-tool, 4 in pdf-tool).
Forwarding the signal further, into the provider transports themselves, is a
different seam and is deliberately left out of this PR.
Also declares `requestInit` on `ImageToolLoadWebMediaOptions`. The local facade
omitted it while the underlying loader accepts it (web-media.ts declares it and
forwards it to readRemoteMediaBuffer), so the option worked at runtime and only
compiled because spread properties skip excess-property checking. A non-spread
call site would not have.
tsgo core + core-test, oxlint, oxfmt clean; pdf-tool and image-tool suites 266
tests pass.
* test(agents): prove in-flight media aborts
* test(agents): narrow PDF loader options
* test(agents): reject abort mocks with errors
* fix(agents): propagate media cancellation
* test(agents): type PDF abort fixture
* test(agents): type prepared runtime snapshot
* fix(agents): normalize abort rejection errors
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-25 05:17:09 -07:00
Peter Steinberger
9e9615d7c1
refactor(codex): prune migration pipeline ( #113536 )
2026-07-25 00:58:11 -07:00
Vincent Koc
749dbcb2a7
refactor(media): consolidate generated media byte limits ( #113556 )
2026-07-25 15:39:49 +08:00
Peter Steinberger
4f1b5da9d8
refactor(codex): split app-server config ( #113552 )
...
* refactor(codex): split app-server config
* refactor(codex): keep config helper types private
2026-07-25 00:36:50 -07:00
Peter Steinberger
d734df9d0f
test(codex): read canonical steering terminal outcome ( #113416 )
2026-07-24 14:39:27 -07:00
Jason (Json)
ee606def49
fix(codex): stop Computer Use readiness stalls across fallbacks ( #113393 )
...
* fix(codex): bound computer use readiness preflight
* chore(codex): keep service status internal
2026-07-24 14:27:53 -06:00
scotthuang
2900026b33
fix: stop selected channel sessions from WebChat ( #111108 )
...
* fix: stop selected channel sessions from WebChat
* fix: clear channel working state after stop
* fix: cancel queued turns before session abort
* fix: replay pending stops after reconnect
* fix: align stop lifecycle test fixtures
* fix(ui): bind pending aborts to gateway client
* test(ui): keep chat pane specs within line limit
* chore(ios): refresh native i18n inventory
* chore: retrigger PR checks
* fix(system-agent): avoid blocking TUI catalog discovery
* fix: preserve session abort ownership
* test: align abort coverage with current main
* test: assert scoped session abort broadcast
* fix(agent-runs): expose SDK runtime abort state
* fix(ui): clear queued main-session stops by scope
* fix(ui): replay only exact run aborts
* fix(gateway): protect session abort cleanup
* fix(ui): narrow session abort intent
* test(ui): avoid unbound request assertions
---------
Co-authored-by: scotthuang <scotthuang@tencent.com >
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com >
2026-07-24 14:36:18 -05:00
Peter Steinberger
756b6f7009
fix(release): repair plugin prerelease regressions ( #113373 )
2026-07-24 10:20:32 -07:00
Peter Steinberger
6235ea55ac
refactor(codex): split command handlers ( #113335 )
...
* refactor(codex): split command handlers
* refactor(codex): keep helper types private
2026-07-24 07:29:44 -07:00
Peter Steinberger
7584d9585b
refactor(codex): consolidate app-server test fixtures ( #113246 )
...
* test(codex): consolidate app-server fixtures
* test(codex): align legacy heartbeat coverage
2026-07-24 01:54:55 -07:00
Jason (Json)
aee46707ba
feat(plugins): support manifest-declared MCP Apps in native plugins ( #113224 )
...
* feat(plugins): load native manifest MCP servers
* fix(gateway): advertise proxied plugin surface ports
* fix(codex): retain MCP App transcript previews
* fix(codex): render native MCP apps inline
* fix(mcp-apps): resolve harness-native views by session
* fix(codex): normalize null MCP result metadata
* fix(ui): give inline MCP apps full message width
* test(codex): use generic native MCP App fixtures
* chore(plugin-sdk): refresh harness runtime baseline
* refactor(codex): isolate native MCP App contracts
* fix(codex): satisfy native app CI contracts
* fix(ci): scope automation app tokens
* chore(ci): defer token scopes to current main
2026-07-24 01:43:48 -06:00
joshavant
bd559a98ed
fix(cron): migrate scheduled authority provenance
2026-07-24 01:24:03 -05:00
joshavant
5d21ba0a2a
fix(cron): bind scheduled authority to creator accounts
2026-07-24 01:24:03 -05:00
joshavant
d8f1f098e5
fix(cron): honor explicit authority for senderless runs
2026-07-24 01:24:03 -05:00
Peter Steinberger
3b7b2a2a1f
chore: update dependencies and migrate major contracts ( #112963 )
...
* build(deps): complete latest dependency migrations
* fix(deps): satisfy updated dependency types
* fix(deps): hold incompatible build tooling
* fix(deps): preserve portable tooling contracts
* build(deps): allow reviewed fresh transitive releases
* fix(deps): repair major upgrade validation
* build(deps): regenerate current dependency graph
* fix(logging): keep tslog adapter type private
* fix(agents): narrow grep subprocess handle
* fix(codex): prefer pinned managed binary
* fix(codex): fence managed native provenance
* build(deps): align codex ACP with managed harness
* fix(slack): use socket-mode Undici runtime
* fix(slack): detect cross-runtime responses
* fix(slack): bridge package-owned fetch types
* fix(deps): retain tslog v4 JSON contract
* build(plugin-sdk): refresh logging API manifest
2026-07-23 21:21:01 -07:00
Peter Steinberger
61f036f748
refactor(agents): close embedded attempt terminal outcomes ( #113201 )
...
* refactor(agents): close embedded attempt outcomes
* test(agents): align trajectory terminal fixture
* refactor(codex): share attempt failure type
* fix(codex): retain projector result contract
* test(agents): keep terminal projections test-only
* chore(plugin-sdk): refresh attempt terminal baseline
2026-07-23 19:56:03 -07:00
Peter Steinberger
bb657eec93
refactor(config): retire redundant settings ( #113174 )
...
* refactor(config): retire redundant settings
* style: apply current formatter
* chore: update plugin sdk baseline
* fix: keep Codex tool caps context-aware
* chore: remove stale imports
* test: align WhatsApp QA debounce config
* fix(config): clean up retired config checks
* fix(ci): align config cleanup checks
2026-07-23 17:45:02 -07:00
Jason (Json)
09c6d66d19
fix(ui): render managed chat media under base paths ( #113163 )
2026-07-23 16:49:14 -06:00
Peter Steinberger
3e2b3ea4d5
feat(cron): database-backed heartbeat monitor scratch replaces HEARTBEAT.md ( #112967 )
...
* feat(cron): move heartbeat context into database-backed per-job cron scratch
- new additive cron_job_scratch SQLite table (revision tombstones keep
compare-and-swap monotonic across unset/recreate; 256KiB cap)
- heartbeat runner reads monitor scratch instead of workspace HEARTBEAT.md;
heartbeat_respond gains a private scratch replacement parameter
- openclaw doctor --fix migrates HEARTBEAT.md into scratch (hash-verified,
archived under state backups, idempotent, symlink-contained)
- gateway cron.scratch.get/set admin RPCs + openclaw cron scratch CLI
- workspace bootstrap no longer seeds HEARTBEAT.md; Codex heartbeat file
guidance removed; docs and prompt snapshots updated
* fix(cron): review round 2 — shared-workspace heartbeat migration and non-default agent monitors
- doctor migration groups agents by heartbeat source file and imports into
every monitor before archiving/removing the shared file once
- exempt heartbeat payloads from the main-session default-agent restriction:
monitors only poke the wake bus, so non-default agents converge again
- document why disabled monitors retain their last cadence (config default
already resolves before the fallback)
* fix(cron): honor configured cron store, legacy heartbeat fallback, and safer doctor claim
* fix(cron): claim HEARTBEAT.md before committing scratch and restore without clobbering
* fix(cron): pin migration CAS to precondition revision, re-verify claim on release, archive first, report scratch as pending
* docs(heartbeat): remove retired config options
* fix(cron): crash-recoverable migration claims, partial-import rollback, latest-response scratch pairing
* test(heartbeat): keep latest scratch proposal paired
* fix(cron): roll back committed scratch on changed-claim release and restore no-row state
* fix(cron): revision-guarded rollback delete and recreated-file detection on claim release
* fix(cron): treat every failed claim re-verification as a migration conflict
* test(heartbeat): rename ack test after ackMaxChars retirement
* fix(heartbeat): keep monitor scratch out of bypass-scope runs
* fix(cron): resolve claimed symlinks on release and gate legacy fallback on proven scratch state
* fix(cron): strict claim-name recovery and per-entry migration grouping
* fix(ci): heartbeat scratch gate repairs — lint causes, dead exports, since-train, inventory path, prompt snapshot, regenerated docs map, SDK baseline, protocol bindings
* fix(cron): live-owner claim guard and canonical entry-key migration grouping
* fix(cron): archive claimed inode on release and flag orphan claims beside recreated files
* docs(cron): document process-global state-db invariant for scratch service ops
* chore(i18n): refresh native inventory line numbers after protocol binding regen
2026-07-23 11:10:49 -07:00
Peter Steinberger
3608baa853
test(codex): deduplicate run-attempt scenarios ( #113076 )
...
* test(codex): deduplicate run attempt scenarios
* test(codex): satisfy run-attempt lint
2026-07-23 09:27:44 -07:00
Peter Steinberger
09672312c4
feat(gateway): incognito sessions for the web Control UI ( #113006 )
...
* feat(gateway): add web-only incognito sessions held in process memory
* feat(ui): add incognito toggle and badges to the web new-session flow
* fix(sessions): classify incognito by key shape, fail closed on stale keys, and gate memory writes
* fix(codex): start harness threads ephemeral for incognito sessions
* fix(sessions): reshape internal-effects incognito keys and add doctor repair for reserved key collisions
* refactor(plugin-sdk): export canonical incognito key classifier and guard the sentinel path
* fix(state): classify incognito DB handles from the recorded open-time set
* fix(gateway): isolate incognito sessions from durable lineage and allocation on read-only misses
* docs(sessions): pin the reserved incognito namespace ownership decision
* feat(gateway): admin-scope incognito visibility and incognito-blind cross-session surfaces
* fix(ci): repair kysely guardrails, dead export, docs map, protocol bindings, and ACP reset rotation
* fix(gateway): remove non-admin observability side channels for incognito sessions
* fix(gateway): enforce admin-scope incognito access and cover all parent-reference creation paths
2026-07-23 09:04:36 -07:00
Peter Steinberger
88963299e7
test(codex): deduplicate turn watch scenarios ( #113061 )
2026-07-23 09:03:05 -07:00
Peter Steinberger
ad505a7b55
fix(swarm): keep collector results reliable through races and restarts ( #112989 )
...
* fix(swarm): harden collector lifecycle and dashboards
* fix(swarm): initialize collector completion state
* test(swarm): satisfy cross-environment type checks
* test(codex): allow direct request handler calls
* style(ui): avoid Swarm widget shadowing
* test(swarm): keep internal helpers private
* refactor(ui): own Swarm roster helpers in runtime
2026-07-23 06:26:31 -07:00
Peter Steinberger
852548ce05
feat(onboard): stage migration imports before promotion ( #112798 )
...
* feat(onboard): stage migration imports before promotion
* fix(onboard): harden migration recovery
* fix(onboard): commit promoted config with CAS
* fix(onboard): resume setup after migration recovery
* test(onboard): split noninteractive migration coverage
* refactor(onboard): split migration promotion helpers
* fix(onboard): normalize migration preparation cleanup
* fix(onboard): preserve recovered inference ownership
* fix(codex): complete empty deferred plugin config
* fix(codex): reconcile deferred plugin config retries
* fix(onboard): resolve verification target after rebase
* refactor(onboard): trim retired migration exports
* test(onboard): assert read-only auth prompt store
2026-07-23 07:06:01 -04:00
Peter Steinberger
9f13f9b140
feat(openai): make million-token context an explicit opt-in ( #112916 )
...
* feat(openai): add safe long-context opt-in
* fix(ci): keep long-context checks within gates
* fix(ci): keep Codex usage helpers internal
2026-07-23 05:34:54 -04:00
Jason (Json)
93c48a6adb
fix: steer active Codex tasks from the Control UI ( #112858 )
...
* fix(codex): enable transcript-backed active steering
* test(codex): keep persistent fixture tool policy
* test(codex): type mock tool capability
* test(codex): scope persistent policy fixtures
* chore: refresh PR CI base
* test(codex): stabilize persistent run fixtures
* test(codex): preserve lifecycle cached-search baseline
2026-07-23 01:59:50 -06:00
Jason (Json)
307b3060a9
fix: hide memory maintenance turns from chat ( #112942 )
...
* fix: hide memory maintenance turns from chat
* chore: update plugin SDK API baseline
* chore: account for harness visibility export
2026-07-23 01:02:27 -06:00
joshavant
a71ac33928
fix(codex): reject interrupted finalization turns
2026-07-22 06:04:27 -05:00
joshavant
6eea20ce18
fix(agents): finalize settled tool turns safely
2026-07-22 06:04:27 -05:00
joshavant
60f49dcc04
fix(agents): isolate settled-turn finalization
2026-07-22 06:04:27 -05:00
Peter Steinberger
6f29fc88e9
refactor(sessions): migrate pure readers to read-only session accessors ( #112568 )
...
* refactor(sessions): migrate pure readers to read-only session accessors
* test(sessions): teach mocks and declarations the read-only accessors
* test(sessions): align remaining harnesses with read-only accessors
2026-07-22 01:16:35 -07:00
Peter Steinberger
c24a215fe4
fix: prevent announce restart recovery cascades ( #112534 )
...
* fix(agents): stop announce restart recovery cascades
Reconcile interrupted completion handoffs from existing run and transcript provenance, and keep their CLI, embedded, and Codex execution tool-free.\n\nCo-authored-by: Moeed Ahmed <moeedahmed@users.noreply.github.com >
* chore: preserve prior-art credit
Co-authored-by: Moeed Ahmed <moeedahmed@users.noreply.github.com >
* fix(agents): prefer explicit restart recovery runs
* fix(agents): revalidate announce recovery ownership
* test(agents): consolidate announce recovery cases
* fix(agents): preserve silent announce fallback
---------
Co-authored-by: Moeed Ahmed <moeedahmed@users.noreply.github.com >
2026-07-22 00:05:18 -07:00
Jason (Json)
735a6acd56
fix(codex): label unnamed sessions from previews ( #112497 )
2026-07-21 22:53:05 -06:00
Peter Steinberger
edecdbd05e
refactor(config): config-surface reduction tranche 3 — product consolidations (review request) ( #111527 )
...
* refactor(config): consolidate media model lists
* refactor(config): unify memory configuration
* refactor(config): consolidate TTS ownership
* refactor(config): move typing policy to agents
* refactor(config): retire product-level config surfaces
* refactor(config): share scoped tool policy type
* chore(config): refresh generated baselines
* fix(config): honor agent typing overrides
* fix(config): migrate sibling config consumers
* refactor(infra): keep base64url decoder private
* fix(config): strip invalid legacy TTS values
* chore(config): refresh rebased baseline hash
* fix(doctor): route legacy messages.tts.realtime voice to talk during tts move
* refactor(config): polish final layout names
* refactor(config): freeze retired tuning defaults
* feat(config): add fast mode default symmetry
* refactor(config): key agent entries by id
* docs(config): update final layout reference
* test(config): cover final layout migrations
* chore(config): refresh final layout baselines
* fix(config): align final layout runtime readers
* fix(config): align remaining readers
* fix(config): stabilize final layout migrations
* fix(config): finalize config projection proof
* fix(config): address final layout review
* docs(release): preserve historical config names
* fix(config): complete keyed agent migration
* fix(config): close final migration gaps
* fix(config): finish full-branch review
* fix(config): complete runtime secret detection
* fix(config): close final review findings
* fix(config): finish canonical docs and heartbeat migration
* fix(config): integrate latest main after rebase
* refactor(env): isolate test-only controls
* refactor(env): isolate build and development controls
* refactor(env): collapse process identity indirection
* refactor(env): remove duplicate config and temp aliases
* docs(env): define the operator-facing allowlist
* ci(env): ratchet production variable count
* fix(env): remove stale provider helper import
* fix(env): make ratchet sorting explicit
* test(env): keep test seam in dead-code audit
* test(env): cover ratchet growth and boundary; document surface budgets
* docs(config): document tier-eval consolidations
* docs(config): clarify speech preference ownership
* test(memory): align retired tuning fixtures
* refactor(memory): freeze engine heuristics
* refactor(config): apply tier-eval tranche
* refactor(tts): move persona shaping to providers
* refactor(compaction): move prompt policy to providers
* test(config): align hookified prompt fixtures
* chore(deadcode): classify test-only exports
* chore(github): remove unused spawn helper
* chore(deadcode): classify queue diagnostics
* chore(deadcode): remove unused lane snapshot export
* chore(plugin-sdk): ratchet consolidated surface
* fix(config): integrate latest main after rebase
2026-07-21 20:28:43 -07:00
Jason (Json)
c4911a2c77
improve(ui): simplify coding agent session headers ( #112354 )
...
* improve: simplify coding session catalog headers
* improve: simplify coding session catalog headers
2026-07-21 15:27:49 -06:00
pash-openai
b0341b8693
Allow Codex plugin discovery enough startup time ( #112418 )
2026-07-21 14:22:23 -07:00
Andy Ye
5f05c54e87
fix(approvals): handle stale plugin waits ( #88203 )
...
* fix(approvals): handle stale plugin waits
Recognize the gateway stale-id message through the shared classifier and map stale exec, Codex app-server, and native PermissionRequest waits to their existing fail-closed or defer contracts without swallowing aborts.
Closes #88111
Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com >
* style(approvals): type stale wait catch values
Satisfy the catch-callback unknown lint without changing approval behavior.
Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-21 01:56:38 -07:00
mikasa
7a73531321
fix(codex): stream sandbox file copies ( #101511 )
...
* fix(codex): cap sandbox file copy reads
Co-Authored-By: Claude <noreply@anthropic.com >
* test(codex): use PathUri in oversized copy proof
* fix(codex): stream sandbox file copies
Co-authored-by: mikasa0818 <0668001030@xydigit.com >
---------
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-20 23:03:04 -07:00
Josh Avant
33720886c8
fix(agents): keep sender-scoped tools in delegated runs ( #110345 )
...
* fix(agents): preserve requester policy across delegation
* fix(agents): keep policy types internal
* test(codex): cover delegated policy forwarding
* fix(agents): harden delegated policy contract
* fix(agents): preserve split-owner completion policy
* fix: version delegated requester snapshots
* fix: refresh delegated policy protocol artifacts
2026-07-20 19:42:06 -05:00
Peter Steinberger
fd081d6521
fix(ui): keep Codex commentary visible after runs ( #111648 )
...
* fix(ui): keep Codex commentary visible
* fix(codex): preserve commentary transcript ordering
* fix(ui): preserve commentary retention opt-out
2026-07-20 02:10:56 -07:00
Peter Steinberger
7d4dccf959
improve(swarm): close out wait, phase, and worker follow-ups ( #111605 )
...
* fix(codex): support full swarm wait budgets
* feat(ui): bucket swarm dots by phase
* docs(swarm): document flat worker patterns
* fix(codex): configured per-tool timeout still wins over swarm wait default
* fix(codex): outer swarm-wait watchdog outlives the 600s budget (cap + grace)
* fix(ui): order swarm phase buckets by observation rank
* fix(ui): repair rank-order widget test — proper lit render container, untangle sibling assertions
* fix(ui): implicit swarm phase assignment only on child creation events
* test(ui): split swarm activity integration coverage
2026-07-19 20:11:54 -07:00
Peter Steinberger
c7e7ac2728
refactor: remove expired plugin compatibility surfaces ( #111451 )
...
* docs(secrets): remove retired web credential paths
* refactor(web): remove retired provider compatibility paths
* refactor(providers): delete retired compatibility routes
* refactor(secrets): remove retired credential aliases
* refactor(plugin-sdk): delete retired compatibility surfaces
* docs(plugin-sdk): remove retired migration guidance
* chore(plugin-sdk): refresh rebased surface budgets
* chore(plugin-sdk): refresh API removal baseline
* refactor(compat): migrate retired internal callers
* chore(plugin-sdk): refresh current-main baselines
* test(config): migrate plugin-owned secret assertions
* test(gateway): narrow plugin secret refs
* fix(plugin-sdk): preserve private boundary type identity
* chore(compat): remove stale sweep references
* chore(lint): lower max-lines budget
* refactor(secrets): remove unused web helper
* build(plugin-sdk): drop removed compat entries
* chore(plugin-sdk): refresh rebased API baseline
* chore(plugin-sdk): use Linux API baseline hash
* fix(plugin-sdk): preserve private bundled build entries
* fix(plugin-sdk): package private runtime facades
* fix(plugins): preserve external credential contracts
2026-07-19 11:04:48 -07:00
Peter Steinberger
4c55a4fc28
feat(plugins): expose requester context to tool hooks ( #111190 )
...
* feat(plugins): expose requester context to tool hooks
* chore(plugin-sdk): restore generated API baseline
* chore: drop release-owned changelog entry
* docs: refresh documentation map
2026-07-19 10:31:58 -07:00
Peter Steinberger
783a5d21cf
refactor(config): purge numeric tuning knobs behind built-in defaults ( #111382 )
2026-07-19 07:35:45 -07:00
Peter Steinberger
3b84a55d99
refactor(protocol): pre-publish cheat-window cleanup and vintage tracking ( #111041 )
...
* fix(codex): drain dynamic-tool handlers before side-thread cleanup
* refactor(protocol): rename question ids to questionId and flatten answer maps
* refactor(protocol): slim worker stack and unify session-catalog shapes
* refactor(protocol): delete dead public surface and polish packaging
* feat(protocol): track release-train vintage on gateway methods and schemas
* fix(apps): align question surfaces merged from main with reshaped protocol
* test(health): shape secret fixtures to scanner-safe token names
* test(health): use scanner-safe token fixtures
* fix(apps): align question surfaces merged from main with reshaped protocol
* fix(ci): prove reshaped protocol in shallow checks
* fix(ui): align sidebar question fixtures with protocol
* fix(apps): read flat Swift question answers
* fix(apps): align question surfaces merged from main with reshaped protocol
* fix(apps): refresh native question inventory
* fix(apps): align macOS snapshot fixtures with protocol
* fix(ui): align narration question fixture with protocol
2026-07-19 04:07:15 -07:00
xingzhou
e2ca148d4b
fix(codex): preserve JSONL framing across WebSocket writes ( #110384 )
...
* fix(codex): preserve UTF-8 websocket frames
* test(codex): satisfy websocket transport lint
* fix(codex): preserve websocket JSONL framing
2026-07-19 17:07:03 +08:00
Peter Steinberger
ea54060223
feat(codex): fork upstream-linked sessions at a message via thread/fork ( #111149 )
...
* feat(codex): fork upstream-linked sessions at a message via thread/fork
* fix(gateway): fail closed for rewind and branch switch on upstream-linked sessions
* fix(codex): fail closed on first-message forks, image-only prompts, and orphan archival
* fix(codex): baseline retained history and reject paginated threads on upstream fork
* fix(codex): validate the full fork prefix and fail closed across crash windows
* fix(codex): treat all non-text inputs as unverifiable in fork drift checks
* fix(codex): support first-message forks as empty-history upstream cuts
* fix(codex): reject source-id reuse and unverifiable hidden inputs in fork boundaries
* refactor(codex): materialize upstream forks from verified thread read-back
* fix(codex): satisfy strict type lanes and knip for upstream fork
2026-07-19 00:11:10 -07:00