Commit Graph

371 Commits

Author SHA1 Message Date
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