Josh Lehman
10c6be319e
test(qa): use configured agent for MCP parity ( #128959 )
2026-08-25 02:26:52 -07:00
Peter Steinberger
8a1ff3966b
feat(workers): run OpenClaw and Codex on the same cloud profile ( #127752 )
...
* feat(workers): run both harnesses on one cloud node profile
* docs(workers): explain shared OpenClaw and Codex cloud profiles
* fix(workers): preserve trusted Codex cloud enrollment
* docs(codex): clarify bundled cloud plugin eligibility
* fix(workers): honor Crabbox bootstrap retries
* fix(workers): allow cloud profile setup to finish
* fix(workers): reject unsupported cloud execution modes
* refactor(workers): split cloud placement modules
* fix(workers): preserve completed container results
2026-08-25 00:13:29 -07:00
Peter Steinberger
7da9c41f39
fix(qa): repair cloud disappearance proof ( #129056 )
2026-08-24 23:59:11 -07:00
Peter Steinberger
f3defc7c86
fix(qa): clean partial cloud proof startup ( #128977 )
2026-08-24 20:08:50 -07:00
Josh Avant
2e9c8f8d3f
Audit exact-bound owner-native lifecycle receipts ( #126082 )
...
* feat(audit): add owner-native lifecycle receipts
* fix(audit): store lifecycle bindings additively
* test(cron): isolate execution binding fixtures
* fix(audit): reject stale lifecycle owners
* fix(acp): gate parent flow binding on retained task
* fix(audit): reject pruned owner cursors
2026-08-24 17:49:25 -07:00
Peter Steinberger
12d0fd2ef8
refactor(anthropic): replace handwritten Claude sessions with Agent SDK ( #128131 )
...
* refactor(anthropic): explore official Claude Agent SDK runtime
* refactor(anthropic): replace handwritten Claude sessions with SDK
* refactor(anthropic): collapse SDK live-session ownership
* refactor(anthropic): simplify SDK ownership and preserve live skills
* fix(anthropic): fence cancelled SDK runs before process startup
* fix(anthropic): harden SDK approvals, lifecycle, and packaging
* refactor(anthropic): own SDK process trees and streamline runtime
* fix(anthropic): repair rebased packaging and legacy test fixtures
2026-08-24 01:59:16 -07:00
Vincent Koc
1ece62a4d8
fix(ci): gate source package producers ( #128463 )
...
* fix(release): preflight package source metadata
* fix(ci): gate source package producers
* fix(ci): preflight canonical package producers
* fix(ci): skip no-package source setup
* fix(ci): normalize source package validation
* fix(ci): normalize Docker package reporting
* fix(ci): avoid generic dependency guard
* test(ci): cover gated package identity
2026-08-23 22:30:10 -07:00
Peter Steinberger
2aa5eee34e
feat(channels): custom emoji discovery via emoji-list across Discord, Slack, Telegram ( #128435 )
...
* feat(channels): custom emoji discovery via emoji-list across Discord, Slack, Telegram
Make custom emojis discoverable by the agent. The message tool's emoji
param now documents custom-emoji syntax per channel (gate-aware, only
naming emoji-list when the action is actually advertised). Discord
emoji-list defaults guildId from the current conversation and returns
reaction-ready { name, identifier, animated? } entries; Slack returns
normalized shortcodes with aliasOf. Telegram gains emoji-list backed by
one canonical allowed-reactions owner (getChat available_reactions,
custom_emoji entries preserved), numeric custom-emoji reactions, and
replaces the dead 'reaction disallow list' error advice with a bounded
sample of the chat's allowed reactions.
* test(channels): expect telegram emoji-list provider-owned read gate in plugin shape contract
* test(telegram): prove emoji-list authority chain via mock-gateway e2e
Ephemeral gateway + mock Bot API + mock OpenAI provider: current-chat
emoji-list returns normalized standard and custom_emoji identifiers with
exactly one getChat call; a delegated cross-chat request is rejected with
the conversation-binding error and zero Bot API requests reference the
foreign chat.
2026-08-23 20:39:06 -07:00
sunlit-deng
5833f53c18
fix(gateway): invalidate stale worker disk-space projections ( #123442 )
...
* fix(gateway): invalidate stale worker disk-space projections
* test(qa): prove worker disk-space projection eviction
* test(qa): narrow operator client in proof
* test(gateway): keep retired disk projection fence stable
Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-08-23 16:12:14 -07:00
Peter Steinberger
79e675521f
fix(agents): prevent reloads from losing queued replies or restoring stale credentials ( #128138 )
...
* fix(agents): fence retired prepared runtime generations
* test(agents): prove queued turns survive credential reload
2026-08-23 01:10:00 -07:00
Josh Avant
40a6b50cc1
feat(audit): explain plugin and remote actions ( #126027 )
...
* fix(audit): converge action receipts after U2
* docs(agents): clarify receipt authority fencing
2026-08-22 14:06:54 -07:00
Peter Steinberger
4e7bf407d1
test: remove redundant extension test seams ( #127688 )
2026-08-21 16:55:33 -07:00
Peter Steinberger
1353ce0995
feat: run Codex sessions on approved paired devices ( #127202 )
...
* feat(codex): execute paired-device sessions over node carrier
* fix(node-host): preserve approved invocation session identity
* fix(codex): observe paired-node execution leases before handshake
* fix: fence paired-device placement and Codex execution owners
* fix: satisfy paired-device placement CI ownership guards
* fix(codex): reject credentialed paired-node URL parameters
* fix(codex): fence nested remote HTTP session credentials
* fix(codex): scrub node process URLs and preserve plaintext HTTP
* test(codex): republish node inventory after capability approval
2026-08-21 12:50:26 -07:00
Peter Steinberger
b9ebfeb950
perf(qa): isolate OTEL model-call test imports ( #127420 )
2026-08-21 12:33:02 -07:00
Josh Avant
0b85966072
fix gateway conversation route ownership ( #126424 )
2026-08-21 12:20:21 -07:00
Josh Avant
ccbfa6c3a3
feat(ui): explain decision receipts in Activity ( #126007 )
...
* fix(audit): project safe decision receipt displays
* docs(agents): preserve audit display privacy
* fix(ci): satisfy audit receipt guardrails
2026-08-21 11:33:32 -07:00
Dallin Romney
8091f7ceb3
test(qa): align failed-tool recovery oracle ( #127077 )
...
* test(qa): bound OTEL runtime timeout evidence
* test(qa): identify OTEL runtime wait stage
* test(qa): align failed-tool recovery oracle
* test(qa): bound recent OTEL trace evidence
* test(qa): keep trace summary type private
2026-08-21 09:11:17 -07:00
Dallin Romney
2fe6b67871
fix(test): read migrated Codex auth from shared owner ( #127097 )
2026-08-21 09:04:39 -07:00
Peter Steinberger
02bba8ee84
fix(heartbeat): honor configured session for monitor wakes ( #127153 )
...
Sessionless interval heartbeat monitor and task wakes now defer to the
configured heartbeat session, while explicit user sessions and ordinary cron
event queue ownership remain unchanged.
Maintainer replacement for #116373 because the external fork cannot satisfy
the strict Clownfish landing transaction. The replacement preserves the
accepted patch exactly on current main.
Fixes #116205 .
Thanks @sloptop-the-terrible for the original patch and @QQSHI13 for the report.
Co-authored-by: sloptop-the-terrible <310909503+sloptop-the-terrible@users.noreply.github.com >
2026-08-21 05:11:01 -07:00
Peter Steinberger
7fd243326f
fix(process): retain live children after signal errors ( #127154 )
2026-08-21 03:49:55 -07:00
Peter Steinberger
9c3335a1a4
fix(qa): restore failed-tool recovery scenarios ( #126971 )
...
* fix(qa): sync cron failed-tool honesty fixture
* fix(qa): sync channel failed-tool honesty fixture
Amp-Thread-ID: https://ampcode.com/threads/T-01a02218-492f-73b8-8514-ef342917e129
* test(qa): sync OTEL failed-tool assertion
---------
Co-authored-by: Amp <amp@ampcode.com >
Co-authored-by: Dallin Romney <dallinromney@gmail.com >
2026-08-21 02:20:53 -07:00
Josh Avant
a042125170
fix(memory): preserve provenance across dreaming ( #126489 )
...
* fix(memory): preserve provenance across dreaming
* fix(build): preserve bundled hook metadata
* refactor(build): remove obsolete directory helper
* test(memory): align provenance fixtures
* test(memory): type consolidation run options
* test(memory): register write provenance siblings
* fix(memory): preserve legacy provenance registration
* fix(memory): make provenance provider-independent
* fix(memory): canonicalize provenance workspace keys
* fix(memory): keep provenance mutation host-private
* fix(build): track runtime postbuild implementations
* fix(build): verify bundled hook metadata outputs
2026-08-20 17:58:31 -07:00
Jacqueline Henriksen
b668a21f07
fix(models): classify catalog timeouts by identity ( #124288 )
...
Prevent provider-authored timeout-like errors from being silently downgraded as discovery deadlines. Keep prepared catalog reuse covered across Gateway/Telegram picker callbacks.
Co-authored-by: Jacqueline Henriksen <jjjhenriksen@gmail.com >
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
2026-08-20 15:08:45 +05:30
Peter Steinberger
10e707435a
fix(mcp): repair channel lifecycle ownership ( #126592 )
...
Restore persisted channel media, cancellation cleanup, retryable permission delivery, bounded-event gap recovery, complete shutdown, and actionable Gateway startup diagnostics.
2026-08-20 01:14:43 -07:00
Peter Steinberger
ab7fc490d6
fix(package): clean dist before root packaging ( #126577 )
2026-08-20 01:13:06 -07:00
Peter Steinberger
980b07f4a2
refactor(agents): replace tool-failure warning heuristics with a two-rule policy ( #126542 )
...
* refactor(agents): reduce tool failure warnings to two rules
* test(agents): remove obsolete tool recovery receipt proof
* refactor(agents): drop unused meta param from buildToolMutationState
* test(agents): remove stale tool warning assertions
* test: export runtime source snapshot from closed runtime-snapshot mocks
Heal the main breakage introduced by 9441e3fe6e / #126531 , which added a runtime source-snapshot read to provider model route resolution. Closed Vitest factories now return null for that source snapshot, preserving their pre-projection behavior.
* test(gateway): make compaction read-error faults order-immune
Generation-2 CI failure in run 32342180898, job 96343444772 showed that the mock factory initialized while shared gateway-server importers remained bound to the real transcript reader.
The dedicated isolated project fixes normal shards. Complete its ownership by adding it to the root project matrix and excluding the test from the non-isolated OPENCLAW_GATEWAY_PROJECT_SHARDS=0 fallback.
2026-08-20 01:11:05 -07:00
Peter Steinberger
14c02a43ab
fix(mcp): stop revoked App actions after catalog waits ( #126415 )
...
* fix(mcp): revalidate app grants after catalog work
* test(mcp): track grant proof temp state
* test(browser): use canonical graceful stop budget
2026-08-19 13:35:01 -07:00
Samuel Judson
24a1139188
fix: move raw call transcripts from system to user prompt to protect provenance ( #123846 )
...
* Move raw transcript from system to user prompt to protect provenance.
* Type fix.
* fix(voice-call): harden transcript context handling
* fix(voice-call): initialize inbound Twilio control state
* test(voice-call): align runtime coordinator fixture
---------
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
2026-08-19 13:07:59 -07:00
Peter Steinberger
51599041bc
fix: explain preserved session worktrees accurately ( #126347 )
...
* fix(sessions): report worktree preservation reasons
* fix(sessions): align preservation checks with current main
* perf(ui): keep preservation copy within startup budget
* perf(ui): reuse localized preservation copy
* test(ui): match preserved worktree confirmation copy
* test(ui): await committed raw config state
2026-08-19 10:59:42 -07:00
Peter Steinberger
ae55a4090c
refactor(canvas): make the panel a widget presenter ( #126030 )
...
* refactor(canvas): retire legacy host and commands
* refactor(apple): narrow shared Canvas contracts
* refactor(macos): keep Canvas as widget presenter
* refactor(ios): remove Canvas client
* refactor(android): remove Canvas client
* refactor(linux): remove Canvas client
* fix(ci): isolate native locale artifacts
* fix(linux): regenerate companion lockfile
* fix(canvas): refresh native tool display metadata
* test(canvas): align coverage with presenter surface
* test(canvas): remove obsolete asset root seam
* test(canvas): stabilize retirement CI coverage
* refactor(swift): remove orphaned resource wrapper
* test(ios): remove retired canvas layout assertion
* fix(macos): reserve retired canvas command namespace
* refactor(macos): isolate canvas command policy
* fix(canvas): select only eligible macOS panels
* fix(canvas): keep panel selection plugin-owned
2026-08-19 08:21:07 -07:00
Peter Steinberger
97557ec3f5
fix(widgets): route show_widget through Discord Activities ( #126294 )
...
* refactor(widgets): unify Discord presentation
* fix(discord): keep incomplete Activity routes private
* fix(discord): require usable Activity accounts
* docs(discord): clarify hidden Activity routes
2026-08-19 05:41:37 -07:00
Peter Steinberger
66cacbae5d
test: remove strict-subset assertions ( #126142 )
2026-08-18 20:15:50 -07:00
Peter Steinberger
54ebb307cd
fix(mcp): retire terminal transports and process trees ( #126101 )
...
Close terminal SSE and stateful notification streams through the owning lifecycle, and reap stdio/QA process groups before exact authority is discarded.\n\nRefs #126098 , #126099 , #126100 .
2026-08-18 18:10:45 -07:00
Peter Steinberger
fe816d69ef
fix(gateway): route detached announce by instance ( #125946 )
...
* test(qa): cover worker generation reload
* test(qa): anchor worker generation fixture
* test(qa): strengthen worker generation proof
* test(qa): stabilize terminal reply smoke waits
* test(qa): widen terminal reply CI budget
* test(qa): drop superseded timeout workaround
* fix(gateway): route detached announce by instance
2026-08-18 17:14:43 -07:00
Josh Avant
50720c3b8e
fix(codex): preserve native approval scope ( #125995 )
2026-08-18 16:18:01 -07:00
Dallin Romney
f6dbcc1ba9
test(e2e): keep recovery proof alive ( #125804 )
2026-08-18 07:44:38 -07:00
Dallin Romney
902eb1f282
test(e2e): repair release validation harness drift ( #125681 )
...
* test(e2e): align usage and Canvas contracts
* test(e2e): restore registry and use built CLI
2026-08-18 07:14:01 -07:00
Dallin Romney
350ac1d050
test(gateway): await hosted plugin registry startup ( #125814 )
2026-08-18 07:12:34 -07:00
Dallin Romney
e1d4eac8f4
fix(qa): use full tool profile for node MCP live proof ( #125683 )
...
* fix(gateway): share node tool snapshots across chunks
* docs(gateway): explain node snapshot ownership
* fix(qa): expose node MCP tool in live proof
2026-08-18 07:08:25 -07:00
Peter Steinberger
efaa867d93
feat(nodes): publish exact runner slots ( #125708 )
...
* feat(nodes): publish exact runner slots
* docs(runners): link slot inventory PR
* fix(ui): keep session menus clickable under previews
* perf(protocol): keep runner slot schema off broad barrel
* test(codex): tolerate elapsed media startup budget
* test(codex): type media client factory mocks
* fix(protocol): reject impossible runner slot counts
* test(ci): stabilize loaded lifecycle checks
* test(ui): allow loaded bulk-delete scheduling
* test(ui): stabilize loaded interaction checks
* test(ui): isolate loaded update notice checks
* test(ui): colocate bulk-delete lifecycle coverage
* test(gateway): publish session config before async setup
2026-08-18 07:08:06 -07:00
Peter Steinberger
f72782d87b
refactor(test): restore auth persistence integrity ( #125699 )
...
* test: restore auth persistence integrity
Restore the SQLite-backed auth wizard assertions traced to 43ea501f38 and consolidate duplicated message-action and temp-directory fixtures.
* test: support npm 12 pack results
2026-08-18 02:58:30 -07:00
Josh Avant
916aca13f3
feat: record subagent execution lineage ( #122015 )
...
* feat(audit): record subagent execution lineage
* fix(audit): type-check spawn lineage validation
* docs: preserve spawned-run lineage invariants
* fix(audit): preserve lineage for worker spawns
* fix(audit): bind worker lineage to live authority
* fix(audit): keep lineage carrier private
* fix(sessions): preserve ACP participant recording
* fix(audit): keep lineage out of runtime bearer
* fix(audit): keep lineage type private
* test(audit): match current worker claim shape
* test(audit): preserve readonly lineage result
* fix(audit): redeem spawn lineage privately
* fix(audit): preserve lineage redemption on copy
* test(audit): prove nested worker spawn lineage
* fix(audit): restore execution identity CI gates
2026-08-17 21:41:30 -07:00
Peter Steinberger
1cf8ea446d
fix(mcp): prevent stale catalogs and silent tool failures ( #125564 )
...
* fix(mcp): harden lifecycle and result integrity
* fix(mcp): bound catalog invalidation replay
* test(mcp): stabilize process cleanup proof
2026-08-17 21:37:12 -07:00
Peter Steinberger
821f41e1cd
fix(workers): propagate session permission context to worker placements ( #125326 )
...
* fix(workers): propagate session permission context
* test(workers): expect launch descriptor v4
2026-08-17 09:34:56 -07:00
Peter Steinberger
11ebdfc9c3
fix(gateway): normalize TLS certificate pins ( #125276 )
...
* fix(gateway): normalize TLS certificate pins
* test(gateway): use valid TLS pin fixtures
2026-08-17 06:02:56 -07:00
Peter Steinberger
2b55b55b72
feat(workboard): run attached automations after linked sessions finish ( #125170 )
...
* feat(workboard): nudge attached automations on session events
* fix(workboard): share automation nudge lifecycle state
* fix(workboard): satisfy nudge type guards
* fix(cron): add enabled-only immediate runs
2026-08-17 02:29:26 -07:00
Ayaan Zaidi
8c6976e1fc
fix(agents): report recovered tool retries ( #125078 )
...
Preserve attempt-local recovery state so successful mutation retries emit a redacted terminal receipt without stale failure warnings.
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
2026-08-17 14:35:00 +05:30
Peter Steinberger
ee86b24ac1
fix(node-host): recover MCP catalogs and sessions ( #125092 )
...
* fix(node-host): recover MCP catalogs and sessions
Share placement-neutral MCP lifecycle and result projection while keeping Gateway session ownership and node process ownership separate. Refresh node catalogs live, recover closed or expired transports without replay, and preserve MCP application errors across node.invoke.\n\nFixes #125044
* test: register node MCP CI inventory
* fix(node-host): stop MCP recovery after abort
2026-08-17 01:39:33 -07:00
Peter Steinberger
f59e945013
feat(gateway): move sessions between Gateway and runners ( #125036 )
...
* chore: preserve session placement move work
* feat(gateway): move sessions between runners
* test(gateway): align recovery fixture with move barriers
* fix(protocol): format literal-only Swift initializers
* test(ui): prove session move terminal state
* refactor(gateway): narrow session move target fence
* fix(gateway): preserve pending result recovery ownership
* test(workers): migrate reclaim lifecycle fixtures
* refactor(gateway): keep move internals private
* test(gateway): align split bootstrap fixture with moves
* fix(gateway): recover session moves through exact intent
* refactor(gateway): derive move placement subtypes locally
2026-08-17 00:23:13 -07:00
Josh Avant
c1d3b33aa7
fix: honor provider timeouts during stuck-session recovery ( #123877 )
...
* fix(diagnostics): respect active model request timeouts
* chore(diagnostics): keep recovery activity internal
* test(diagnostics): await stream wrapper results
* fix(diagnostics): harden provider timeout recovery
* fix(diagnostics): track compaction model calls
* test: prove provider timeout recovery boundary
2026-08-16 18:18:29 -07:00