Peter Steinberger
aec8096bbc
refactor(gateway): remove obsolete worker test seams ( #123970 )
2026-08-14 20:30:34 -07:00
Peter Steinberger
d913796112
fix(runners): preserve node workspaces across restarts ( #123889 )
...
* fix(runners): retain node workspaces from gateway state
* docs(plan): record authoritative node retention
2026-08-14 16:59:19 -07:00
Peter Steinberger
afb3b9defb
fix(worker): surface gateway admission failures ( #123773 )
...
* fix(worker): surface admission retry failures
* fix(worker): ignore cancellation connection errors
2026-08-14 13:29:36 -07:00
Peter Steinberger
15bf43fe19
fix(node-host): prevent false TLS mismatch after turns ( #123790 )
...
* fix(node-host): avoid resumed TLS pin mismatches
* test(node-host): cover pinned replacement sockets
* fix(node-host): preserve proxy routing for pinned transfers
* test(node-host): type proxy tunnel cleanup generically
2026-08-14 13:05:28 -07:00
Peter Steinberger
d9211bf14d
fix(runners): bound node workspace disk growth ( #123700 )
...
* fix(runners): prune superseded node workspaces
* docs(plan): record node retention progress
* fix(runners): drain workspace retention backlogs
* test(runners): await workspace retention cleanup
2026-08-14 08:27:59 -07:00
Peter Steinberger
bbca520108
refactor(runners): prune terminal launch receipts ( #123641 )
...
* refactor(runners): prune terminal launch receipts
* perf(runners): index launch receipt expiry
2026-08-14 05:49:55 -07:00
Peter Steinberger
38379a9a2e
feat(runners): enforce node worker capacity ( #123612 )
...
* feat(runners): enforce node worker capacity
* test(node-host): mock supervisor initialization
* fix(runners): surface capacity exhaustion
2026-08-14 04:49:47 -07:00
Peter Steinberger
d19c7553dd
feat(computer-use): computer.act v2 action contract with capability-filtered tool ( #123544 )
...
* feat(computer-use): computer.act v2 action contract with capability-filtered tool
* fix(computer-use): break contract import cycle, bound model-visible elements, regen swift protocol
* test(computer-use): satisfy curly rule in schema-cap helpers
* fix(computer-use): satisfy type-aware lint on contract and tool
* test(gateway-protocol): keep connect-params suite under the line cap
2026-08-14 02:40:56 -07:00
Peter Steinberger
8a3964f87c
fix: node workspace transfers fail after successful turns ( #123564 )
...
* fix(node-host): preserve TLS transfer failures
* fix(node-host): clean transfer backpressure listeners
* fix(gateway): explain node workspace sync paths
2026-08-14 01:51:42 -07:00
Peter Steinberger
7cadfb0bd6
fix: speed up local node launches and isolate scratch state ( #123503 )
...
* perf(node-host): reuse advertised worker build identity
* fix(agents): keep default workspaces inside state dir
* fix(plugins): package llama.cpp private SSRF runtime
* fix(node-host): silence missing skills directory
2026-08-13 23:24:54 -07:00
Peter Steinberger
860aeed8f6
feat(gateway): transfer node worker workspaces ( #123280 )
...
* feat(gateway): transfer node worker workspaces
* fix(gateway): harden node workspace transfer
* fix(gateway): isolate transfer HTTP contract
* fix(gateway): trim transfer HTTP exports
2026-08-13 21:00:44 -07:00
Peter Steinberger
438d035885
feat(gateway): launch workers on paired nodes ( #123157 )
...
* feat(gateway): launch workers on paired nodes
* docs(plan): track node worker launch wire
* fix(runners): restore node workspace ownership
Rehydrate durable workspace bindings after Gateway restart, fence timed-out node tunnel starts, and refuse incomplete clone fallback for submodule and Git LFS workspaces.
* test(runners): isolate node launch fixtures
2026-08-13 18:02:18 -07:00
Peter Steinberger
6c9916a48a
feat(runners): publish atomic device runner inventory ( #123094 )
...
* feat(runners): publish atomic node inventory
# Conflicts:
# docs/.generated/plugin-sdk-api-baseline/agent-harness-runtime.json
# src/gateway/server-methods/environments.ts
# src/gateway/worker-environments/device-provider.test.ts
* fix(runners): refresh topology on inventory removal
* fix(runners): resolve session host type overlap
* fix(protocol): document mobile runner inventory event
* fix(runners): project authoritative session host state
* docs(nodes): clarify prepared session host status
2026-08-13 04:54:26 -07:00
Peter Steinberger
7a4b5a0a41
feat(gateway): provision paired node session hosts ( #122966 )
...
* feat(gateway): provision paired node worker installs
* docs: record node local-install PR chain
* chore(protocol): regenerate node worker manifest models
* fix(gateway): resolve node worker build through the device runtime
Repairs a rebase artifact: startup referenced a stale deviceNodeRegistry
binding; the device runtime now owns the connected-node lookup via
resolveWorkerBuild.
2026-08-13 01:56:19 -07:00
Peter Steinberger
3f4d89505a
feat(worker): expose supervised terminal outcomes ( #123013 )
...
* feat(worker): expose supervised terminal outcomes
* docs(plan): track supervisor terminal outcomes
2026-08-12 22:19:49 -07:00
Peter Steinberger
5e67beb02e
feat(node-host): add negotiated private worker controls ( #122939 )
...
* feat(node-host): add private worker supervisor controls
* refactor(node-host): harden private worker controls
* refactor(node-host): simplify private worker controls
* docs(plan): track private worker controls
* fix(node-host): satisfy private control CI guards
* test(gateway): follow worker service construction boundary
* test(gateway): register private control release train
* fix(gateway): retain worker dialect across reapproval
2026-08-12 21:27:01 -07:00
Peter Steinberger
be600d0a24
fix: restore Telegram release isolation checks ( #122843 )
...
* fix(release): repair isolated Telegram QA runtime
sticky runner/SUT suite root permits config locks without config replacement; add PS1 after attested env verification for nested login shells.
* test(node-host): own desktop teardown resets
2026-08-12 16:21:45 -07:00
Peter Steinberger
6b9bea84f0
feat(node-host): supervise durable worker launches ( #122829 )
...
* feat(node-host): add worker launch supervision
* fix(node-host): harden worker lifecycle ownership
* fix(node-host): harden worker execution boundary
* fix(node-host): preserve worker trust settings
* chore(plugin-sdk): refresh worker lifecycle baselines
* docs(plan): track runner implementation slices
* test(node-host): await runtime shutdown owner
2026-08-12 15:24:05 -07:00
Peter Steinberger
0c824f09d5
feat(gateway): observe paired node desktops ( #122724 )
...
* feat(gateway): stream paired node desktops
* chore(protocol): refresh desktop observe model
* fix(gateway): preserve desktop stream boundaries
* fix(gateway): keep desktop streams lifetime-bound
* fix(gateway): harden node desktop stream lifecycle
* fix(gateway): stabilize node desktop lifecycle setup
* chore(plugin-sdk): refresh API baselines
2026-08-12 13:17:45 -07:00
Peter Steinberger
ade3456dd4
feat: add one-paste node onboarding ( #122499 )
...
* feat(pairing): add short join onboarding
* fix(gateway): isolate device join routing tests
2026-08-12 06:17:39 -07:00
Peter Steinberger
d44f70eb4b
feat(pairing): one-paste device pairing via oc-pair setup links ( #120768 )
...
* feat(pairing): one-paste device pairing via oc-pair setup links
Implements milestone 3 from docs/plan/runners.md.
* fix(pairing): sign bootstrap handshake, keep URL candidates, wire pairing countdown
* test(gateway): update client callsite guard
* fix(pairing): preserve setup URL context paths
* fix(ui): keep pairing help aligned with setup mode
* fix(pairing): isolate bootstrap credentials
* perf(ui): keep one-paste pairing within bundle budget
* refactor(pairing): isolate native pair URL prefix parsing
* fix(pairing): preserve candidate lifecycle state
* fix(pairing): retire shared credentials after bootstrap
* fix(pairing): apply rotated manifest through client owner
* test(pairing): prove bootstrap retirement across reconnect
* fix(pairing): preserve native gateway context paths
* fix(pairing): carry native context paths through reconnect
* fix(ios): preserve encoded gateway context path
* chore(plugin-sdk): refresh pairing API baselines
2026-08-12 02:01:33 -07:00
Peter Steinberger
3d76246792
refactor: eliminate final export name collisions ( #122083 )
...
* refactor: resolve final export name collisions
* refactor: update remaining collision rename consumers
* style: format rebased auth helpers
* test: update remaining session entry mocks
* test: update remaining runtime mock exports
* test: update delivery info path mock
* refactor: reconcile combined collision sweeps
* chore: regenerate collision and sdk baselines
2026-08-11 11:18:24 -07:00
Peter Steinberger
fa03d9b913
refactor: consolidate coercion helpers ( #121366 )
...
* refactor: consolidate coercion helpers
* fix: remove duplicate coercion imports
* fix: preserve serialized coercion guard
* chore: ratchet coercion helper carve-outs
* fix(test): keep gauntlet subprocess startup lean
* fix: preserve imported session timestamp semantics
* fix: preserve catalog timestamp string semantics
* chore: align plugin SDK surface ratchet
* fix: preserve trajectory and SDK string contracts
* fix(test): preserve QA record assertion semantics
* fix: complete standalone record guard rename
* refactor(cron): use canonical string coercion
* fix(acpx): preserve Pi timestamp parsing
* test(channels): adapt custody test harnesses
* test(telegram): classify media harness as test support
* test(acpx): split timestamp contract coverage
* test(channels): support generated custody contracts
* chore: ban the full coercion helper name set
Extends the declaration guard to all eleven consolidated helper names and
renames the cron schedule-identity readNumber wrapper to readScheduleInteger
so the banned generic name cannot regrow.
* fix(scripts): repair release-validation guard drift and lint cause
Restores the renamed isJsonRecord guard in assertTrustedWorkflowHarness after
main added isRecord call sites in parallel, and attaches the caught YAML error
as the thrown error cause (preserve-caught-error was red on main).
* fix: preserve Claude timestamp string semantics
* fix: preserve persisted timestamp string semantics
* fix: preserve date-first timestamp contracts
* fix(openai): harden delegation failure formatting
* chore: close coercion helper guard gaps
* test(openai): model non-error delegation rejection
* chore: refresh plugin SDK API contract
* fix(tasks): use canonical string field reader
* fix(ai): use canonical provider error field coercion
* fix(browser): migrate native bootstrap coercion
* docs(plugin-sdk): clarify text record export compatibility
* fix(gateway): normalize approval execution identity
* test(outbound): isolate message action poll harness
2026-08-11 00:02:18 -07:00
Vincent Koc
587def9c9d
fix(gateway): keep new nodes compatible with older gateways ( #119981 )
...
* fix(gateway): keep new nodes compatible with older gateways
Punchcard-Session: golden-brook-lantern-zp
* fix(gateway): clear protocol compatibility check failures
Punchcard-Session: cobalt-timber-orchard-d1
* fix(node-host): retire manifest before inventory refresh
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): keep new nodes compatible with older gateways
Punchcard-Session: golden-brook-lantern-zp
* fix(gateway): clear protocol compatibility check failures
Punchcard-Session: cobalt-timber-orchard-d1
* fix(node-host): retire manifest before inventory refresh
Punchcard-Session: cobalt-timber-orchard-d1
* docs(gateway-client): describe compatible admission
Punchcard-Session: cobalt-timber-orchard-d1
* fix(node-host): ignore retired publication failures
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): keep new nodes compatible with older gateways
Punchcard-Session: golden-brook-lantern-zp
* fix(gateway): clear protocol compatibility check failures
Punchcard-Session: cobalt-timber-orchard-d1
* fix(node-host): retire manifest before inventory refresh
Punchcard-Session: cobalt-timber-orchard-d1
* docs(gateway-client): describe compatible admission
Punchcard-Session: cobalt-timber-orchard-d1
* fix(node-host): ignore retired publication failures
Punchcard-Session: cobalt-timber-orchard-d1
* test(node-host): split optional publication coverage
Punchcard-Session: cobalt-timber-orchard-d1
* fix(node-host): retain latest rejected inventory
Punchcard-Session: cobalt-timber-orchard-d1
* chore(gateway-protocol): remove release-only changelog edits
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): normalize blank node host families
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): normalize node metadata before pairing
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): negotiate legacy node metadata
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): complete rolling node convergence
Punchcard-Session: cobalt-timber-orchard-d1
* fix(node-host): honor publication retry backoff
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): close rolling compatibility gaps
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): migrate node pairing rollback metadata
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): scope legacy support to wire admission
Punchcard-Session: cobalt-timber-orchard-d1
* test(gateway): type legacy hello protocol fixture
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): converge node protocol after upgrade
Punchcard-Session: cobalt-timber-orchard-d1
* fix(node-host): preserve publication retry backoff
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): honor latest node compatibility state
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): recover protocol negotiation after rollback
Punchcard-Session: cobalt-timber-orchard-d1
* fix(gateway): guard legacy metadata lookup
Punchcard-Session: cobalt-timber-orchard-d1
2026-08-09 13:16:37 +08:00
Peter Steinberger
fe85bba59e
fix(windows): normalize child environment key casing ( #120802 )
2026-08-08 19:03:48 -07:00
Peter Steinberger
909509a5db
fix(codex): resume catalog sessions with the catalog's CODEX_HOME; add main-content terminal placement ( #120708 )
...
* fix(codex): pin catalog CODEX_HOME onto terminal resume spawns
The Codex session catalog lists threads through the plugin's supervision
app-server connection, which can run on the agent-scoped Codex home
(homeScope: "agent"). The terminal resume plan spawned a bare
'codex resume <threadId>' under the operator login shell, so the CLI
resolved its default ~/.codex and failed with "No saved session found".
Terminal plans now carry the catalog connection's CODEX_HOME (local and
paired-node paths), the gateway merges plan env into the PTY spawn, and
the triplicated home-scope resolution collapses into one shared
resolveCodexAppServerLocalHomeDir.
* feat(ui): add main-content terminal placement
The terminal panel gains a third dock placement, "main", filling the
content region next to the sidebar like the transcript pane. The panel
header gets a bottom/right/main placement switcher (persisted in the
existing openclaw.terminal.panel.v1 store), and opening a Codex/Claude
session from the session catalog selects main mode so resumed sessions
appear as a full window instead of a bottom strip.
2026-08-08 14:33:20 -07:00
Peter Steinberger
e7a9f33d89
refactor(core): adopt normalization-core leaf helpers across production ( #120350 )
...
* refactor(core): adopt normalization-core leaf helpers across production
* fix(ci): keep plugin contract source-resolvable
* fix(errors): preserve adapter-owned error fields
* fix(errors): short-circuit existing errors before stringifying
* fix(errors): skip throwing structured getters
* ci: retrigger checks on current base
* fix(errors): guard structured error enumeration
* fix: harden error detail copying
2026-08-08 12:00:49 -07:00
joshavant
026f4045b7
Revert "fix(protocol): preserve gateway session attribution across node runs"
...
This reverts commit 735f176b01 .
2026-08-07 18:40:17 -05:00
joshavant
d4c9a4d8f1
Revert "feat(audit): preserve exact agent execution provenance"
...
This reverts commit 79b8775bc9 .
2026-08-07 18:40:17 -05:00
Vincent Koc
79b8775bc9
feat(audit): preserve exact agent execution provenance
2026-08-07 15:27:14 +08:00
Vincent Koc
735f176b01
fix(protocol): preserve gateway session attribution across node runs
2026-08-07 08:06:01 +08:00
Peter Steinberger
3b14a93000
test(mcp): isolate catalog size checks from wall-clock load ( #118871 )
2026-08-03 12:15:36 -07:00
Peter Steinberger
a67c52611e
fix(deps): bump brace-expansion override to 5.0.9 for HIGH advisory 1130705 ( #118804 )
...
* fix(deps): bump brace-expansion override to 5.0.9 for advisory 1130705
* test(mcp): isolate oversized catalog proof from wall-clock timeouts
2026-08-03 11:01:02 -07:00
Peter Steinberger
7c35cbc4f4
test(node-host): isolate linux plugin discovery ( #118556 )
...
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local >
2026-08-03 00:25:48 -07:00
Peter Steinberger
bc212450bc
test(node-host): reuse approvals database fixture ( #118517 )
...
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local >
2026-08-02 22:59:19 -07:00
Peter Steinberger
bb5c649e31
fix: bound pending approvals and preserve delivery order ( #118252 )
...
* refactor: centralize pending request lifecycles
Share timeout and settlement registries across worker, LSP, node-host, and approval fanout paths. Bound plugin conversation-binding approvals and preserve terminal notification ordering during slow delivery.
* style: satisfy pending registry lint rules
* test: await deferred plugin approval delivery
* test: satisfy forwarder type-aware lint
2026-08-02 17:30:53 -07:00
Peter Steinberger
75aa8306f7
fix: canonicalize single-flight promise caching ( #118245 )
...
* fix: canonicalize promise single-flight caches
* fix: make TUI refresh outcome explicit
* fix: satisfy single-flight lint contracts
2026-08-02 16:33:25 -07:00
Peter Steinberger
c574a6544c
fix(auth): retain the selected account when migrating Codex sessions ( #118205 )
...
* fix(auth): preserve selected OAuth accounts during Codex migrations
* test(auth): complete doctor context and stabilize MCP pagination
2026-08-02 16:14:11 -07:00
Peter Steinberger
6c9b38862d
refactor(plugins): root-owned bundle installation with scoped registry handles ( #117587 )
...
* refactor(plugins): root-owned bundle installation with scoped registry handles
* refactor(plugins): root-owned bundle installation with scoped registry handles
* test(gateway): expect gateway-binding fact in reload rewarm
* fix(agents): reuse gateway prepared runtime generations
* test(agents): isolate runtime handle fixtures
* test(agents): align runtime owner fixtures
* test(cron): mock run-owned registry loading
2026-08-01 16:17:30 -07:00
Peter Steinberger
3856b4fa1b
refactor(cli): unify gateway RPC transport ( #117601 )
2026-08-01 14:06:30 -07:00
Peter Steinberger
e051a7bb4a
fix(mcp): bound catalog pagination ( #116845 )
...
* fix(node-host): bound MCP tool pagination
* fix(node-host): bound MCP catalog duration
* style(node-host): format MCP pagination test
* fix(mcp): share bounded pagination
* fix(mcp): keep pagination types private
* test(mcp): normalize abort rejection
* fix(mcp): enforce pagination deadline after loading
* fix(mcp): stabilize pagination deadline ownership
2026-07-31 06:41:41 -07:00
Pavan Kumar Gondhi
52f81a3684
fix(exec): require approval for abbreviated inline eval flags [AI] ( #116529 )
...
* fix: gate abbreviated interpreter eval flags
* fix(exec): cover legacy gawk source abbreviation
2026-07-31 13:42:17 +05:30
Vincent Koc
bb68389a66
fix(ui): deduplicate gateway-native session hosts
2026-07-30 15:22:37 +08:00
Peter Steinberger
032defb172
fix(nodes): cancel paired local inference when callers disconnect ( #115624 )
2026-07-29 02:00:22 -04:00
Peter Steinberger
6c81253985
feat(node-host): migrate retired state before connecting ( #115495 )
...
* feat(node-host): run doctor-owned state migrations at startup
* fix(node-host): satisfy startup migration lint
2026-07-29 01:04:48 -04:00
Peter Steinberger
107bc4f963
fix: make gateway nodes and local inference reliable under stress ( #115185 )
2026-07-28 08:41:14 -04:00
Peter Steinberger
98b8a18b4c
fix(node): harden reconnect and local inference cancellation ( #115033 )
...
* fix(node): harden reconnect and local inference cancellation
* fix(browser): refresh bundled gateway client
* fix(gateway): preserve restart after reconnect reset
* fix(node): preserve tracked remote command ownership
2026-07-28 04:18:51 -04:00
Peter Steinberger
a92f85e642
fix(node): cancel remote commands and stabilize local inference ( #114935 )
2026-07-28 01:03:25 -04:00
Peter Steinberger
9bcc44301b
fix(nodes): preserve gateway connections and local inference ( #114857 )
2026-07-27 22:28:32 -04:00
Peter Steinberger
10966ed344
fix(exec): defer failed auto reviews to human approval ( #114802 )
2026-07-27 20:45:09 -04:00