Vincent Koc
8fdcdaba76
fix(talk): bound browser transcript ownership
2026-08-01 14:39:27 +08:00
Vincent Koc
20e68e01df
fix(gateway): sign device proofs with challenge time ( #116679 )
2026-07-31 16:45:53 +08:00
Vincent Koc
b015925bc3
test(core): remove dead and duplicate coverage ( #116641 )
...
* test(markdown): make code table style coverage assertive
* test(core): remove duplicate regression coverage
2026-07-31 11:48:46 +08:00
Shakker
2cdedd7eeb
test: isolate gateway sequence lifecycle coverage
2026-07-29 20:05:56 +01:00
Shakker
403a9b778b
test: cover gateway sequence reset on restart
2026-07-29 20:05:56 +01:00
Shakker
dbcd479007
test: cover gateway sequence reset on reconnect
2026-07-29 20:05:56 +01:00
Shakker
ab3f52c367
fix: reset gateway event sequence on reconnect
2026-07-29 20:05:56 +01:00
Peter Steinberger
fde4658bf6
fix(ui): recover sessions and dashboards after prolonged outages ( #115654 )
...
* fix(ui): recover long-running sessions and dashboards
* fix(ui): expose browser-safe gateway timers
* refactor(ui): keep browser timer surface minimal
* refactor(gateway): extract pending request state
* fix(ci): refresh browser runtime and format baseline
* fix(ci): exclude generated plugin outputs from targeted lint
* fix(ui): bound long-running connection and pane lifecycles
* refactor(ui): split long-running lifecycle regression coverage
* fix(ui): bound long-running media and lint ownership
* fix(security): preserve explicit workspace disable denylist
* fix(ci): preserve plugin manifest fallback lint
2026-07-29 10:09:51 -04:00
Vincent Koc
38abf500ba
fix(update): stabilize cross-version dev upgrades ( #115651 )
...
* fix(e2e): stabilize cross-version Parallels upgrades
* fix(e2e): avoid inline macOS guest probes
* fix(e2e): detach Windows dev updates
* fix(e2e): detach macOS guest updates with Node
* fix(e2e): initialize skipped upgrade config
* fix(update): use partial clone for dev checkout
* fix(update): keep Windows dev checkouts clean
* fix(e2e): pin Parallels dev update targets
* fix(e2e): own Parallels gateway restarts
* fix(e2e): verify pinned Parallels checkouts
* fix(e2e): forward Parallels update budgets
* fix(e2e): use canonical provider auth choices
* chore: leave changelog to release automation
* test(ui): stabilize route waits on loaded runners
2026-07-29 19:52:34 +08:00
Peter Steinberger
ad36646ed1
fix(gateway): reconnect nodes after transient socket failures ( #115539 )
...
* fix(gateway): reconnect nodes after transient socket failures
* fix(browser): refresh bundled gateway reconnect runtime
* fix(gateway): preserve callback-owned reconnect state
2026-07-29 01:15:26 -04:00
Peter Steinberger
ad3f74f296
fix(chat): make web and terminal share one session state ( #115429 )
...
* fix(chat): consolidate web and terminal session state
* fix(chat): preserve live history across stale snapshots
2026-07-28 18:53:21 -04:00
Peter Steinberger
d239a59d82
fix(ui): make Control UI ownership and permissions reliable ( #115364 )
...
* fix(ui): unify connection-owned gateway event dispatch
* fix(qa): keep hosted UI smoke evidence truthful
* fix(ui): make mobile navigation drawer an accessible modal
* refactor(ui): centralize settings search destinations
* fix(ui): own chat media resource lifecycles
* fix(ui): unify sidebar session scope ownership
* refactor(ui): remove obsolete navigation backdrop styles
* refactor(ui): isolate dashboard provider lease capabilities
* fix(ui): centralize gateway operator permissions
* style(ui): format gateway event regressions
* fix(ui): render live dashboard permissions immediately
* fix(ui): enforce approval grant authority
* fix(gateway): fence retired sockets after event gaps
* fix(ui): isolate sidebar gateway fixtures across shared workers
* test(ui): isolate singleton-sensitive browser suites
* fix(ui): retire stale catalog pagination on gateway reconnect
* fix(ui): restore drawer focus after native dialog dismissal
* fix(ui): seed drawer threads and preserve modal focus ownership
* fix(ui): isolate nested native drawer overlay lifecycle
* test(ui): prove isolated dashboard lease authorization
* fix(ui): bound settled managed image resources
* fix(ui): type native modal focus and shared test helper
* fix(ui): correct approval mock types and trim dead export
* fix(ui): keep settings section metadata private
* fix(qa): keep hosted coverage regression within lint limit
* refactor(ui): keep catalog presence in its session data owner
* fix(browser): regenerate bundled copilot runtime
* test(ui): split board lease authorization regressions
* fix(ui): snapshot gateway listener fanout without redundant spread
* fix(ui): bind chat media subscriptions to image lifetime
* fix(ui): extract overlay access lifecycle
* fix(ui): restore guarded media after Lit reconnection
* test(ui): localize board lease fixture title
* fix(ui): reuse system approval fixture labels
* test(ui): narrow managed media lifecycle source
* fix(ui): prevent retired board gateway clients from rolling back leases
* fix(ui): expose pairing to pairing-scoped operators
* fix(ui): preserve legacy device pairing access
* fix(ui): preserve responsive sidebar ownership
* fix(ui): preserve responsive navigation and prove media ownership
* fix(ui): retire revoked catalog and refresh pairing grants
* test(ui): align typed catalog fixtures with main
2026-07-28 16:42:05 -04:00
Peter Steinberger
18ecde3d9f
refactor(chat): keep web and terminal sessions synchronized ( #115377 )
...
* refactor(chat): unify web and TUI session synchronization
* refactor(chat): extract canonical projection and transcript owners
* test(gateway): verify private transcript store identity
* test(agents): protect public transcript storage boundary
* fix(chat): harden cross-client identity and subscription lifecycles
* fix(gateway-client): preserve type-safe release callback rejection
* test(ui): complete shared sidebar gateway fixture
2026-07-28 16:08:10 -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
f6131a4fbf
build(deps): remove npm shrinkwrap; mirror pnpm lock into transient package locks ( #114006 )
...
* build(deps): remove npm shrinkwrap; mirror pnpm lock into transient package locks
npm 12 removed shrinkwrap (command + tarball/root loading). Delete all 82
committed npm-shrinkwrap.json files and stop publishing lockfiles; keep
pnpm-lock.yaml as the single reviewed dependency boundary. The generator
becomes scripts/generate-npm-package-lock.mjs and feeds plugin bundling via
a transient package-lock.json + npm ci (works on npm 11 and 12). Tarball
validation treats the published 2026.7.2 beta train as a shrinkwrap
transition; self-update npm detection now uses install topology instead of
the shipped shrinkwrap.
* fix(deps): repair lint, deadcode, and test-type lanes for the npm 12 migration
- sort integrity comparisons with an explicit comparator (oxlint)
- keep resolveBunGlobalNodeModules module-local (knip unused-export gate)
- model npm pack --json as npm<=11 array / npm 12 name-keyed object
- default calver destructuring in the tarball test fixture
2026-07-26 01:29:55 -04:00
Peter Steinberger
acd92f6a3d
chore(deps): refresh repository dependencies ( #112453 )
...
* build(deps): update QA broker dependency
* build(deps): refresh repository dependencies
* build(deps): reconcile rebased shrinkwraps
* test(plugins): remove stale loader test state
* test(deps): stabilize updated dependency coverage
* fix(swift): use caller-isolated TaskLocal overload
* build(deps): regenerate rebased shrinkwraps
* test(msteams): preserve DNS validation in fetch helper
* fix(deps): avoid vulnerable optional image stack
* test(deps): validate generated LRU override
* refactor(ui): extract chat resizable divider
* test(ui): update divider ownership path
* fix(matrix): retain restart-compatible SDK
* style(cron): format update test
2026-07-23 16:17:13 +00:00
Peter Steinberger
537aedd433
docs: attribute published packages and docs home to the OpenClaw Foundation ( #112633 )
...
The root package.json shipped "author": "", so npm showed no author for the
published openclaw package, and the three published workspace packages had no
author field at all. Set all four to the Foundation, matching the LICENSE
copyright holder and the openclaw.ai footer.
Also name the Foundation on the docs homepage, which never said who develops
OpenClaw even though the README and website footer now do.
Personal credits in docs/reference/credits.md, docs/start/lore.md, and the site
footer stay as authorship history; they are not org attribution.
2026-07-22 03:48:02 -07: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
Peter Steinberger
a971188a6d
build(client): make @openclaw/gateway-client publishable to npm ( #111707 )
2026-07-20 00:23:36 -07:00
Peter Steinberger
6d4082ef97
fix(ui): prevent unsafe custodian nudge answers ( #111430 )
...
* fix(ui): harden custodian nudge actions
* refactor(ui): split custodian page helpers
* fix(ui): classify custodian nudge delivery
* fix(ui): ignore stale custodian question replies
* fix(ui): restore rejected custodian questions
* fix(ui): preserve custodian wizard uncertainty
* refactor(ui): keep nudge text helper private
* test(ui): model uncertain custodian delivery
* fix(ui): scope delayed custodian dismissals
* fix(ui): retain in-flight custodian nudges
* fix(ui): block nudges during hosted wizard input
* chore(protocol): regenerate gateway models
2026-07-19 11:10:41 -07:00
Peter Steinberger
62c5a8b888
fix(gateway): make scope errors machine-readable across clients ( #111013 )
...
* fix(gateway): consume structured scope errors
* docs(gateway): clarify tools error boundary
* refactor(gateway): unify node admin policy
2026-07-18 17:53:45 -07:00
Alix-007
deccdb5e57
fix(ui): bound browser gateway WebSocket opening ( #109037 )
...
* fix(ui): bound browser gateway socket opening
* fix(ui): use browser-safe timeout export
2026-07-18 09:38:37 +01:00
Peter Steinberger
ec8f6e5e03
feat(browser): add secure per-tab copilot panel ( #109817 )
...
* feat(browser): add copilot security contracts
* fix(gateway): expose verified client identity to handlers
* feat(browser): add secure per-tab copilot panel
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* refactor(browser): separate copilot gateway hint custody
* fix(browser): preserve legacy pairing parse shape
* fix(browser): harden copilot lifecycle custody
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): enforce copilot lifecycle boundaries
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* style(browser): format copilot sources
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): preserve copilot consent revocation
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* refactor(browser): split copilot custody owners
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(browser): normalize websocket array buffers
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* chore(protocol): regenerate Swift gateway models
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* refactor(browser): model copilot runtime entrypoints
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): honor extension build boundaries
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(gateway): assert targeted chat delivery
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(gateway): cover targeted delivery calls
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): declare copilot build dependencies
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(ci): clear browser copilot gate failures
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(ci): cover copilot lint exclusion
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): gate copilot on relay custody
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(browser): bound copilot relay frames
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
---------
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
2026-07-18 01:00:23 +01:00
Peter Steinberger
a719a851bb
refactor(gateway-client): centralize challenge timeout resolution ( #108932 )
2026-07-16 04:19:54 -07:00
NIO
dacf164793
fix(gateway-client): bound websocket opening handshake waits ( #108348 )
...
* fix(gateway-client): bound websocket opening handshake waits
* test(gateway-client): harden handshake timeout proof
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 03:36:17 -07:00
Josh Avant
4b7f193c9d
fix: gateway-owned work fails through same-host relay ( #108423 )
...
* fix(gateway): dispatch owned runtime work in process
* fix(gateway): publish canonical approval resolutions internally
* fix(gateway): seal owned approval runtime lifecycle
* fix(gateway): keep instance runtime contracts acyclic
* fix(gateway): remove stale runtime type imports
* fix(agents): reconcile ambiguous recovery timeouts
* refactor(gateway): constrain internal approval methods
* fix(agents): route orphan recovery in process
* fix(agents): preserve aborted restores for recovery
* fix(agents): keep lifecycle waits in process
* test(agents): type lifecycle runtime mock
* test(agents): complete restored session fixture
2026-07-15 20:51:57 -07:00
Peter Steinberger
b363d5a293
feat(linux): canvas UI via CLI-node + Tauri app IPC bridge ( #107633 )
...
* feat(linux): canvas via CLI-node + Tauri app IPC bridge
* refactor: extract gateway helper modules
* build(linux-canvas): register plugin package in lockfile
* fix(linux-canvas): move canvas advertise test out of core, regen docs/protocol/deadcode
* fix(gateway): break node-catalog/registry import cycle via leaf normalize module; add canvas glossary term
* style: oxfmt invoke.ts and runtime.ts after buildNodeEventParams extraction
* fix(linux): load Canvas WebView via dedicated data_directory context
Wry's Linux/WebKitGTK incognito mode discards Tauri's registered
WebContext (wry webkitgtk/mod.rs), so the Canvas window got a fresh
ephemeral context without the openclaw-canvas:// scheme handler — the
bundled A2UI page never committed (stayed about:blank) and every A2UI
command timed out. Use an isolated cache-backed data_directory instead,
which keeps the protocol handler while still isolating Canvas storage
from the dashboard window.
* fix(linux): keep Canvas WebView ephemeral via incognito + data_directory
Autoreview flagged that a dedicated data_directory alone persists Canvas
browser state (cookies, localStorage, IndexedDB, service workers) across
restarts, so an agent that navigates Canvas to a site could leak an
authenticated session into a later session. iOS uses a non-persistent
store; Linux should match.
Add .incognito(true) alongside .data_directory(): the distinct directory
gives Tauri a fresh WebContext key so it still attaches the
openclaw-canvas:// protocol closure, and incognito makes Wry swap in a
fresh *ephemeral* context carrying those protocols. Live-verified on a
Wayland/WebKitGTK box: the bundled page still loads
(location.href=openclaw-canvas://localhost/index.html, openclawA2UI
present, A2UI renders) and the canvas-webview dir holds no persistent
cookie/storage files.
2026-07-14 16:05:14 -07:00
Peter Steinberger
f81f9d8570
chore: enforce max-lines suppression ratchet ( #107315 )
...
* ci: enforce max-lines suppression ratchet
* chore: prune stale max-lines suppression
* fix: close max-lines ratchet enforcement gaps
* fix: harden max-lines ratchet checks
* fix(ci): satisfy max-lines ratchet checks
* style: format max-lines declarations
* fix(ci): match oxlint suppression grammar
* test: isolate max-lines git fixtures
* chore: prune resolved max-lines debt
* test: skip newline path fixture on Windows
* fix: harden max-lines suppression ratchet
* chore: refresh max-lines baseline
* fix: close max-lines ratchet bypasses
* fix: derive ratchet base from PR merge tree
* fix: support older Git in staged ratchet
* fix: align max-lines declarations and baseline
* chore: refresh max-lines baseline for current main
* fix: exclude generated wizard locales from max-lines
* chore: prune resolved max-lines debt
2026-07-14 09:27:02 -07:00
Peter Steinberger
c13aa612eb
fix(ws): normalize raw message payloads ( #107459 )
2026-07-14 05:38:38 -07:00
Peter Steinberger
7abb20fe33
fix(lint): buffer casts for nodebuffer ws message handlers
...
aae56539fa set binaryType=nodebuffer but left RawData-typed toString
calls; no-base-to-string fails check-lint repo-wide. Cast to Buffer like
the same commit's realtime-transcription site.
2026-07-14 05:18:39 -07:00
Peter Steinberger
aae56539fa
refactor(ws): use nodebuffer socket contracts
2026-07-14 05:03:57 -07:00
Vincent Koc
3aab2ce6a9
refactor(packages): remove dead internal helpers ( #107077 )
2026-07-14 11:48:14 +08:00
Vincent Koc
aea2dd6ab2
fix(test): follow private UI export cleanup
2026-07-13 20:56:46 +02:00
Peter Steinberger
f87a74602a
refactor(gateway): simplify canonical WebSocket client ( #106316 )
...
* refactor(gateway): simplify canonical websocket client
* refactor(gateway): keep protocol options internal
2026-07-13 05:34:57 -07:00
Peter Steinberger
7c9b8baa2b
refactor(gateway): consolidate TypeScript WebSocket clients ( #106113 )
...
* refactor(gateway): unify websocket clients
* fix(gateway): preserve adapter lifecycle behavior
* test(gateway): keep reconnect proof black-box
* chore(gateway): satisfy shared client lint
* refactor(gateway): keep protocol decisions internal
* refactor(gateway): preserve shared reconnect supervision
* test(gateway): use canonical browser barrel
* fix(gateway): resolve browser retry workspace source
* refactor(gateway): tighten shared protocol types
2026-07-13 03:08:21 -07:00
Peter Steinberger
2fc91410e8
refactor: consolidate reconnect supervisors ( #105987 )
...
* refactor: consolidate reconnect supervisors
* style: satisfy reconnect supervisor lint
* fix: keep reconnect supervisor internal
* refactor: keep retry supervisor lean
* chore: lower gateway client LOC baseline
* style: satisfy large-file LOC guard
* fix: cap long-lived reconnect backoff
* fix: preserve reconnect start failures
* test(sdk): include retry package in install smoke
2026-07-13 00:39:17 -07:00
Peter Steinberger
8fe6ac7fb9
refactor: remove pre-2026.4 compatibility shims and legacy migrations ( #104650 )
...
* refactor(matrix): retire pre-2026.4 legacy crypto and flat-storage migrations
* refactor(cli): drop pre-tsdown daemon-cli dist compat shim from the build
* refactor(diffs): remove deprecated image*/format tool params and output aliases
* refactor(ui): drop pre-gateway-scoped localStorage readers and legacy theme map
* refactor: remove assorted pre-2026.4 compat shims and deprecated aliases
* fix(discord): map legacy thread-binding fields in the doctor JSON import
* fix(msteams): keep bot read fallback for legacy imported conversation rows
* test(msteams): cover legacy bot-only imported conversation references
* fix(ui): keep channel-prefixed session key display fallback
* chore: refresh native i18n inventory and build-docker step count
* chore(matrix): drop now-unused migration-config module
* chore: re-pin plugin SDK public export budget after compat removals
* chore: refresh native i18n inventory after rebase
* chore: re-pin plugin SDK callable budget and refresh i18n inventory after rebase
2026-07-11 13:22:27 -07:00
Peter Steinberger
4b751ce48a
feat(tooling): complete packages/* noUncheckedIndexedAccess adoption (phase 2) ( #104626 )
...
* feat(tooling): extend strict-ratchet lane to all remaining leaf packages
* fix(packages): burn down indexed-access debt in ai and agent-core
All 196 noUncheckedIndexedAccess errors fixed behavior-identically
(iteration, .at()/slices, DataView byte math, guarded queue peeks) plus
cleanup finds: a sparse-tool diagnostic bug, deduplicated Responses
call/item ID parsing with an honest string|undefined splitter, and a
clearer local failure for redacted-thinking blocks missing signatures.
Removes all 17 remaining non-null assertions across ai, gateway-client,
and llm-core so the assertion ban aligns 1:1 with the ratchet lane.
speech-core joins memory-host-sdk as structurally deferred (imports
src/** via plugin-sdk path mappings).
2026-07-11 11:54:06 -07:00
NianJiu
54eda58447
fix(gateway-client): stop unbounded requests masking stalled transports ( #103407 )
...
* fix(gateway-client): keep watchdog active for unbounded requests
* test(gateway-client): prove watchdog recovery lifecycle
* style(gateway-client): satisfy watchdog test lint
---------
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-11 00:27:34 -07:00
Peter Steinberger
1bcc4c5e70
feat(gateway): add cooperative host suspension ( #103618 )
...
* feat(gateway): add cooperative suspension preparation
* style: satisfy suspension lint checks
* test(gateway): reset work admission between shared suites
* fix(gateway): reject upgrades during suspension
* fix(gateway): preserve admitted work during suspension
* test(gateway): isolate suspension and restart state
* fix(gateway): close suspension false-ready gaps
* refactor(protocol): slim suspension declaration graph
* refactor(plugin-sdk): sever protocol registry edges
* fix(gateway): preserve admitted restart follow-ups
* fix(gateway): make suspension recovery fail closed
* fix(protocol): keep validation formatter re-export only
* test(gateway): simplify deferred fixture type
* style(gateway): clarify suspension entry name
* fix(gateway): retain detached work admission
2026-07-10 20:24:53 +01:00
Dallin Romney
8fa83d2742
refactor(gateway): consolidate client contracts ( #101012 )
2026-07-08 10:56:31 -06:00
Dallin Romney
95e3b9243b
test: execute media and Talk runtime boundaries ( #101091 )
...
* test: execute media and Talk runtime boundaries
* test(qa): centralize gateway fixture startup
* test(qa): check in voice call plugin fixture
2026-07-06 16:25:33 -07:00
Peter Steinberger
0acd851a3b
feat(agents): add managed git worktree lifecycle (create/provision/snapshot/restore/GC) ( #100535 )
...
Centralized managed worktrees under <state-dir>/worktrees/<repo-fingerprint>/<name>
with branch-per-task (openclaw/<name>), .worktreeinclude provisioning, an optional
.openclaw/worktree-setup.sh repo hook, and a SQLite registry in the shared state DB.
Removal always snapshots the tree (untracked included, gitignored excluded) to
refs/openclaw/snapshots/<id>; restore rebuilds the branch at the original commit with
the snapshot content as uncommitted state. Lossless run-end cleanup, 7-day idle GC for
run-owned worktrees (manual exempt), orphan reconciliation, 30-day snapshot retention.
Surfaces: worktrees.* gateway RPC (operator.admin mutations), openclaw worktrees CLI,
Control UI page, plugin-SDK facade + Workboard kind:"worktree" materialization.
E2E-verified on Testbox: full create->work->remove->restore->gc lifecycle.
2026-07-06 05:24:58 +01:00
Josh Avant
cee2aca409
Scope agent cron operations to the calling agent ( #96883 )
...
* Scope agent cron operations to caller
* Scope OpenClaw tools MCP cron by session
* Address cron scope review feedback
* Preserve unscoped cron update retargeting
* Move cron caller identity into gateway context
* Clarify Gateway restart guidance
* Add cron caller identity regression proof
2026-06-26 21:41:14 -05:00
Peter Lee
6256ad86c9
fix(gateway): classify probe reachability by validated transport ( #93948 )
...
Distinguish validated gateway reachability from pre-open and TLS-validation failures, and sanitize close diagnostics before terminal output.
Fixes #79099 .
Co-authored-by: xialonglee <li.xialong@xydigit.com >
2026-06-19 11:56:16 +01:00
Vincent Koc
09427aa760
fix(gateway): contain lifecycle callback errors
2026-06-19 05:15:20 +02:00
Vincent Koc
47cad606f4
fix(gateway): clean pending request when send fails
2026-06-17 14:38:34 +02:00
Vincent Koc
9d04064e73
fix(gateway): honor injected env for watchdog timeouts
2026-06-17 14:26:07 +02:00
Vincent Koc
20964d3e3b
fix(gateway): tolerate transient pre-hello clean closes ( #93528 )
...
* fix(gateway): tolerate transient pre-hello clean closes
Co-authored-by: RayRuan <43744645+ruanrrn@users.noreply.github.com >
* fix(clownfish): address review for ghcrawl-156871-autonomous-smoke (1)
Co-authored-by: RayRuan <43744645+ruanrrn@users.noreply.github.com >
---------
Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
Co-authored-by: RayRuan <43744645+ruanrrn@users.noreply.github.com >
2026-06-16 14:43:36 +08:00
Vincent Koc
66749a3713
test: consolidate wrapper facade coverage
2026-06-09 20:12:25 +09:00