Peter Steinberger
86772735ac
fix: pin sessions dropped into Pinned ( #107854 )
...
* fix(ui): pin sessions dropped into pinned group
* test(ui): capture pinned session drop proof
* chore: keep release note in PR metadata
2026-07-14 17:14:39 -07:00
Peter Steinberger
6f8903bc4d
fix(macos): distinguish app and Gateway updates ( #107793 )
...
* fix(macos): clarify app-owned gateway updates
* fix(macos): sync update ownership translations
* fix(i18n): refresh control UI fallbacks
* fix(i18n): translate new control UI copy
* fix(ui): keep update routing live
2026-07-14 17:06:45 -07:00
Peter Steinberger
2dfaa852e9
fix: cloud session delete works after worker destroy ( #107848 )
2026-07-14 16:58:12 -07:00
Peter Steinberger
0b03d17ef2
refactor(agents): split session manager internals ( #107822 )
...
* refactor(agents): split session manager internals
* refactor(agents): keep session helpers private
* fix(agents): preserve opaque SQLite session rows
2026-07-14 16:25:10 -07:00
Peter Steinberger
623ec0f369
improve(qa-matrix): split E2EE runtime and protect recovery keys ( #107828 )
...
* fix(autoreview): handle verified QA source references
* refactor(qa-matrix): split E2EE scenario runtime
* style(qa-matrix): format recovery scenario
* chore(qa-matrix): prune split runtime baseline
* chore: keep release note in PR
2026-07-14 16:13:41 -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
520e2580cb
feat(control-ui): show terminal upload progress ( #107789 )
...
* feat(control-ui): add terminal upload recovery
* fix(control-ui): harden terminal upload recovery
2026-07-14 15:10:01 -07:00
Peter Steinberger
890f20be06
feat(macos): coordinate app and Gateway updates ( #107634 )
...
* feat(macos): coordinate app and Gateway updates
* fix(macos): harden coordinated update recovery
* fix(gateway): reject mixed wake presence events
* chore: keep release notes in PR body
* chore(i18n): sync macOS update strings
* chore(generated): sync native artifacts
* style(macos): satisfy Swift checks
* chore(i18n): refresh update source locations
* fix(macos): localize post-update status
* fix(macos): satisfy post-update Swift lint
* chore(i18n): refresh post-update source locations
* test(gateway): isolate system-event routing state
* test(gateway): document system-event authorization
2026-07-14 14:59:32 -07:00
Peter Steinberger
9d3de463a5
fix(docs-i18n): preserve Max translation boundaries
2026-07-14 16:43:15 -04:00
Peter Steinberger
4f0e131cd2
feat(ui): run sessions on cloud workers ( #107670 )
...
* feat(ui): add cloud session targets
* test(ui): cover cloud session attachments
* test(ui): use recovery token fixture
* test(ui): record cloud locale fallbacks
* fix(ui): harden cloud session recovery
* fix(ui): track cloud handoff phase
* fix(ui): close cloud recovery escape paths
* fix(ui): finish cloud recovery hardening
* fix(ui): recover ambiguous cloud session creation
* fix(ui): isolate stale cloud creation recovery
* test(ui): preserve cloud recovery literals
* fix(ui): complete cloud session release artifacts
* chore: move cloud release note to PR body
* docs(ui): name cloud session menu exactly
2026-07-14 12:44:11 -07:00
Peter Lee
f972c69151
fix(agents): validate cacheRetention values ( #94494 )
...
* fix(agents): map cacheRetention 'standard' to 'short' for Bedrock Claude models
* fix(agents): scope standard cacheRetention alias to Anthropic cache family only
* fix(agents): validate prompt cache retention
* chore: keep changelog release-owned
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 12:37:55 -07:00
Peter Steinberger
a679cda0c9
refactor(copilot): trim internal exports ( #107730 )
...
* refactor(copilot): trim internal exports
* chore(deadcode): refresh export baseline
2026-07-14 12:23:35 -07:00
Shakker
e63e49b1b0
fix: prevent Bonjour probe retry loops ( #107710 )
...
Prevents duplicate Bonjour advertisement attempts by delegating probing, conflict resolution, retries, and interface republishing to ciao.
Related: #98448
Prepared head SHA: 4bd1638acf
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com >
Reviewed-by: @shakkernerd
2026-07-14 19:28:47 +01:00
Peter Steinberger
0571e0ecff
fix(proxy): share canonical no-proxy matching
2026-07-14 11:23:32 -07:00
Peter Steinberger
a6a0716486
feat(setup): rename Crestodian to OpenClaw system agent
...
User-facing name is now OpenClaw (the system speaks); internal code name is
system-agent. Gateway methods crestodian.* -> openclaw.chat/openclaw.setup.*,
agent tool -> openclaw, reserved agent ids openclaw + retired crestodian.
openclaw setup routes: onboarding flags -> onboard, -m/--yes -> system agent,
bare configured interactive -> OpenClaw chat, unconfigured -> onboarding.
Hidden crestodian CLI and /crestodian TUI aliases kept; docs moved to
docs/cli/openclaw.md with redirect stub. macOS/Android strings in lockstep.
Refs #107237
2026-07-14 11:03:02 -07:00
Shakker
3976ec47d3
fix: default skill workshop approvals to auto ( #107690 )
...
Skill Workshop lifecycle actions now run without an additional Gateway approval by default, while explicit `approvalPolicy: "pending"` keeps the operator approval gate.
Prepared head SHA: 06e907797e
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com >
Reviewed-by: @shakkernerd
2026-07-14 18:31:51 +01:00
Jesse Merhi
00364ee777
improve: warn before non-ClawHub plugin installs ( #102197 )
...
Merged via squash.
Prepared head SHA: e08d9e737d
Co-authored-by: jesse-merhi <79823012+jesse-merhi@users.noreply.github.com >
Co-authored-by: jesse-merhi <79823012+jesse-merhi@users.noreply.github.com >
Reviewed-by: @jesse-merhi
2026-07-15 03:25:36 +10:00
Peter Steinberger
2bbf5e6ca0
fix(macos): prevent clipped and stalled onboarding ( #107598 )
...
* fix(macos): harden onboarding on short screens
* chore: keep release notes in PR body
* chore(i18n): refresh macOS onboarding inventory
2026-07-14 10:07:41 -07:00
Peter Steinberger
084d1d9637
feat(control-ui): upload files into terminals ( #107364 )
...
* feat(control-ui): add terminal file uploads
* fix(control-ui): protect Windows terminal uploads
* fix(control-ui): satisfy terminal upload gates
* chore(ui): translate terminal upload labels
* fix(control-ui): reject unknown Windows upload shells
* fix(control-ui): harden Windows upload paths
* fix(control-ui): retry terminal upload cleanup
* chore(ui): reconcile locale translation memory
* fix(control-ui): validate terminal upload inputs
* fix(control-ui): retry failed upload cleanup
* chore(ui): refresh terminal upload locale metadata
* fix(terminal): integrate uploads with session recovery
* refactor(control-ui): isolate terminal upload transport
* fix(control-ui): keep upload helper types private
2026-07-14 09:33:39 -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
VACInc
6f0326af36
fix: prevent session exports from writing outside workspace ( #104708 )
...
* fix: prevent session exports outside workspace
* fix: support aliased workspace export paths
---------
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 09:20:43 -07:00
Peter Steinberger
5f13921c26
fix: preserve Fable thinking on Claude CLI routes ( #107636 )
...
* fix(anthropic): preserve Claude CLI effort on root gateways
* chore: leave release notes to release workflow
2026-07-14 09:15:21 -07:00
Peter Steinberger
6d31c162f9
fix: keep root Claude live sessions usable ( #107606 )
...
* fix(agents): support Claude live sessions as root
* chore: leave release notes to release workflow
2026-07-14 08:46:58 -07:00
Peter Steinberger
2ecc6b6b6b
fix(ui): show restart banner for unapplied config ( #107577 )
...
* fix(ui): derive config apply state from gateway
* test(ui): align applied config hash coverage
* test(ui): follow config autosave flow
* fix(ui): guard applied config refreshes
* fix(ui): reconcile patched config revisions
* fix(ui): prevent stale config apply polling
* chore: leave release notes to release flow
* refactor(config): split applied revision helpers
* style(config): format gateway methods
* fix(i18n): refresh Korean native glossary hash
2026-07-14 08:43:35 -07:00
Alix-007
111f7cde35
fix(telegram): bound stalled diagnostic response reads ( #106035 )
...
* fix(telegram): bound stalled diagnostic response reads
* test(telegram): type timeout cancellation mock
* style(telegram): apply oxfmt to diagnostic response timeout files
* fix(telegram): share diagnostic body deadlines
Co-authored-by: Alix-007 <li.long15@xydigit.com >
* chore: leave release notes release-owned
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 08:27:59 -07:00
Val Alexander
efc12f2e31
feat(workboard): polish drag feedback ( #89821 )
...
* feat(workboard): polish drag feedback
Co-authored-by: BunsDev <68980965+BunsDev@users.noreply.github.com >
* test(workboard): prove drag feedback in browser
* refactor(workboard): keep card rendering lean
* test(workboard): avoid drag proof shadowing
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 08:01:11 -07:00
wm0018
3bb81c25a8
docs(signal): document --signal-number, --http-host, --http-port CLI flags ( #102114 )
...
* docs(signal): document --signal-number, --http-host, --http-port CLI flags
* docs(signal): clarify daemon endpoint flags
* docs(signal): format setup guidance
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 07:54:33 -07:00
tzy-17
66def08d83
feat(workboard): filter cards by persisted board ( #102068 )
...
* feat(workboard): filter cards by persisted board
Co-authored-by: 唐梓夷0668001293 <tang.ziyi@xydigit.com >
* refactor(workboard): split board filter helpers
* chore(ui): refresh Workboard i18n baseline
* chore(ui): sync Workboard locale fallbacks
* chore(ui): update Workboard locale metadata
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 07:25:00 -07:00
Peter Steinberger
21d548a7ff
fix: harden cloud worker admission and remote turns ( #107043 )
...
* fix(cloud-workers): harden worker dispatch
* fix(cloud-workers): enforce Crabbox AWS admission contract
* fix(cloud-workers): sanitize inference terminals
* fix(cloud-workers): bound inference stream work
* fix(cloud-workers): reject unresolved tool deltas
* refactor(cloud-workers): isolate terminal projection
* fix(cloud-workers): satisfy extension lint
* fix(cloud-workers): reject forbidden leases before polling
* fix(cloud-workers): keep helper types internal
* fix(gateway): reject late tool call deltas
* fix(crabbox): clean invalid inspected leases
* refactor(crabbox): extract inspect parser
* style(crabbox): format worker provider
* fix(crabbox): close worker lease cleanup gaps
* docs(cloud-workers): correct runtime contracts
* docs(cloud-workers): match runtime error
2026-07-14 07:24:43 -07:00
Peter Steinberger
f59a0352b3
feat(discord): route online presence arrivals to agents ( #107451 )
...
* feat(discord): add online presence agent events
* fix(discord): harden presence event payloads
* fix(discord): satisfy presence lint contracts
* fix(heartbeat): run notification event wakes
* fix(discord): use wake heartbeat contract
* fix(discord): harden presence snapshot delivery
* chore: remove release-owned changelog entry
* fix(discord): remove unused presence type export
* fix(discord): keep presence config below loc limit
* fix(discord): reserve presence cooldown atomically
2026-07-14 07:22:11 -07:00
Ayaan Zaidi
c214fc4bee
fix(commands): require explicit owner authority
2026-07-14 17:49:20 +05:30
Peter Steinberger
9d79d85f46
feat(workboard): refresh Control UI from live changes ( #99051 )
...
* feat(workboard): refresh control ui from live changes
* refactor(workboard): tighten live invalidation path
* chore(workboard): preserve locale catalog state
* refactor(gateway): keep broadcaster runtime object
* refactor(plugin-sdk): own gateway event types
* test(workboard): bind reconciliation mocks
* test(release): declare recovery helpers
* fix(workboard): cancel direct loads on teardown
2026-07-14 05:17:23 -07:00
Peter Steinberger
4d50965f56
ci: refresh plugin SDK API baseline ( #107436 )
2026-07-14 04:56:51 -07:00
Ayaan Zaidi
7d99de8e32
refactor(mcp): split session runtime modules for the LOC ratchet
...
Mechanical: manager, combined facade, install path, lifecycle, config
loading, and resolver types move to focused modules; the runtime facade
re-exports its prior surface so importers are unchanged. Deletes dead
tools-barrel re-exports flagged by check-dependencies. No behavior
change.
2026-07-14 17:09:53 +05:30
Ayaan Zaidi
98a1535fa3
fix(mcp): regenerate plugin SDK baseline after rebase
2026-07-14 17:09:53 +05:30
Ayaan Zaidi
8b66fe773f
feat(mcp): deliver requester-scoped MCP to shared-thread harnesses
...
Requester-scoped servers never enter harness-native MCP config: Codex
thread and CLI user-MCP projections partition them out (fail-closed,
static-partition fingerprints stay sender-independent so shared threads
never rotate). Codex delivers them as per-attempt dynamic tools through
a scoped-only runtime path on the same core manager, with a
session-stable advertised catalog so authed and unauthed senders share
one spec surface; unauthed calls get a clean not-connected tool error.
New SDK seam materializeRequesterScopedMcpToolsForHarnessRun lets any
future harness consume the same contract.
2026-07-14 17:09:53 +05:30
Ayaan Zaidi
d50feceadb
fix(mcp): address maintainer review of requester-scoped connections
...
Fail-closed app views for requester-scoped servers, tools.effective
fingerprint parity, declaration-order safe names, fail-closed duplicate
resolver registration, resolved-credential redaction registration,
per-session LRU cap on idle requester runtimes, combined-catalog re-merge
on part refresh, and SDK contract docs (timings, schema ownership).
2026-07-14 17:09:53 +05:30
Ayaan Zaidi
834561ad67
feat(mcp): resolve MCP server connections per trusted requester
...
Plugins can register api.registerMcpServerConnectionResolver({serverName,
resolve}) to bind an MCP server's transport (url/headers) to the trusted
sender of each message. Server identity stays static; only the connection
is per-requester. Runtimes are cached per (sessionId, channel, accountId,
senderId); runs without a trusted requester fail closed (cron, subagent,
heartbeat). Resolved credentials never enter fingerprints or logs. Static
servers keep the existing session-scoped lifecycle byte-for-byte.
Enables per-user hosted MCP sessions (e.g. per-user OAuth email/calendar)
in multi-sender channels like Slack.
Refs #106229
2026-07-14 17:09:53 +05:30
Peter Steinberger
e488dc0012
feat(sessions): signal watchers when an adopted upstream disappears ( #107356 )
2026-07-14 03:51:20 -07:00
Peter Steinberger
d79573d457
fix: avoid redundant image-model calls for vision agents ( #107311 )
...
* fix: route native image inspection directly
* fix: narrow image fallback route
* style: satisfy image tool size ratchet
* test: align image fallback auth coverage
* fix: complete native image routing
2026-07-14 02:54:34 -07:00
Peter Steinberger
cd7290bc29
fix(discord): show only agent status in progress drafts ( #107338 )
...
* fix(discord): show agent status only in progress drafts
* test(discord): preserve explicit progress label expectation
* test(telegram): update default progress label fixtures
* test(ui): use supported hidden-label assertions
2026-07-14 02:52:01 -07:00
Dallin Romney
561cf56c53
refactor(workboard): share control ui contract ( #102271 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 02:33:22 -07:00
Peter Steinberger
92cca9343e
feat(linux): headless node device capabilities (camera, location, notifications) ( #107193 )
...
* feat(linux): add node device capabilities
* fix(linux-node): actionable pending-approval error + node-host advertise integration test
* fix(linux-node): map geoclue access-denied to LOCATION_DISABLED; floor camera maxWidth to avoid zero-height scale
* fix(linux-node): clamp small camera maxWidth to 2 instead of default
* docs(linux-node): clarify where-am-i -t is a process timeout, not update throttle
* refactor(gateway): extract legacy-node filter + rejection hint to fit LOC ratchet; docs-map + deadcode baseline
* fix(gateway): drop now-unused DEFAULT_DANGEROUS_NODE_COMMANDS import after hint extraction
* test(node-host): drop imports orphaned by removed error-code test
2026-07-14 02:30:36 -07:00
snowzlmbot
e8ad0466ff
fix: render assistant transcript headers safely ( #99404 )
...
* fix: render assistant transcript headers safely
Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com >
* fix(markdown): nest crossing annotation spans
* fix(markdown): protect final transport projections
* refactor(markdown): split transcript render ownership
* test(ui): cover assistant transcript render flag
* refactor(markdown): keep transcript helpers private
* docs(changelog): note assistant transcript headers
* chore(plugin-sdk): refresh transcript annotation baseline
* fix(markdown): harden final transcript projections
* docs(changelog): defer transcript note to release
* refactor(markdown): centralize HTML tokenization
* fix(markdown): satisfy lint gates
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com >
2026-07-14 02:25:37 -07:00
Peter Steinberger
bb6874fddf
feat(sessions): upstream liveness for adopted catalog sessions ( #107009 )
2026-07-14 01:09:05 -07:00
Peter Steinberger
202dea59bd
fix(workboard): grant dispatch workers required tools
2026-07-14 01:00:37 -07:00
Peter Steinberger
b940339c32
fix: use plain agent progress labels ( #107260 )
...
* fix(channels): simplify agent progress labels
* chore: keep changelog release-owned
* chore: refresh bundled channel metadata
2026-07-14 01:00:24 -07:00
Peter Steinberger
f4b7a19624
fix: avoid remote boxes for focused validation ( #107166 )
...
* fix: avoid remote boxes for focused validation
* fix: preserve explicit remote proof routing
* fix: delegate when local diff refs are unavailable
2026-07-14 00:53:17 -07:00
Michael Appel
18ec9ce8f7
fix: block workspace dotenv endpoint overrides [AI] ( #103914 )
...
* fix: block workspace dotenv endpoint overrides
* docs: clarify workspace endpoint env sources
* style: format dotenv suffix blocklist
---------
Co-authored-by: Pavan Kumar Gondhi <pavangondhi@gmail.com >
2026-07-14 12:51:15 +05:30
Peter Steinberger
644d4c3d23
fix: explain and control native session discovery ( #107162 )
...
* fix: make native session discovery configurable
* refactor: split native session discovery helpers
* chore: keep release notes in PR body
* fix: refresh generated session protocol models
* test(ui): avoid shared lazy-element mock race
2026-07-14 00:18:18 -07:00