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
Peter Steinberger
84500db379
refactor(plugin-sdk): isolate HTML entity runtime
2026-07-14 00:16:37 -07:00
Peter Steinberger
606e2f5dba
fix(ci): stop unrelated main updates from forcing PR rebases ( #107050 )
...
* fix(ci): stop unrelated main updates from forcing PR rebases
* docs(ci): document reusable aggregate proof
* docs(ci): clarify immutable gate success
* chore(ci): refresh stalled PR head
2026-07-14 00:01:01 -07:00
Peter Steinberger
b58a75d726
refactor(html): share entity decoding
2026-07-14 00:00:05 -07:00
Peter Steinberger
e0b52a9618
feat: resume OpenCode and Pi sessions in terminal ( #107200 )
...
* feat: resume OpenCode and Pi sessions in terminal
* refactor: keep Pi session commands internal
2026-07-13 23:54:40 -07:00
ruizcrp
40cf6c51b3
feat(workboard): add manual card movement surfaces ( #96554 )
...
Adds consistent manual Workboard movement across CLI, slash commands, and agent tools while preserving operator authority and agent claim isolation.
Co-authored-by: Ross I4JU <ross@i4ju.ch >
2026-07-13 23:01:06 -07:00
Peter Steinberger
d8d2f83cc1
feat(terminal): open Codex/Claude catalog sessions in a terminal on their owning host
...
Catalog session rows (sidebar context menu + click), the built-in viewer
header, and a new "Open Codex/Claude sessions in" preference can launch the
native CLI (codex resume / claude --resume) in the operator terminal on the
machine that owns the session.
- Gateway-local sessions spawn through the existing terminal launch policy
(sandbox/enabled gates preserved) with the resume command in the session cwd.
- Paired-node sessions run through a new seq-ordered node PTY relay: a
duplex node-host command streams PTY output via node.invoke.progress and
receives keystrokes/resize via a new node.invoke.input event, behind the
unchanged terminal.* client protocol (TerminalSessionManager gains a backend
abstraction; node relay reuses the streaming-invoke controller).
- Owner boundary: each plugin owns its resume command and builds argv from a
validated thread id; the gateway routes node opens through the node command
allowlist and plugin invoke policy (no advertisement-only trust), and nodes
re-verify session eligibility before spawning.
- UI setting catalogOpenTarget + canOpenTerminal capability gate every entry
point; capability requires the owning host to actually have the CLI.
Node PATH is normalized before command-availability probes, Windows .cmd/.bat
shims spawn via ComSpec, and catalog terminal opens reattach persisted tabs
before opening the new tab.
2026-07-13 22:20:50 -07:00
Peter Steinberger
25bc6df8cd
refactor(speech-core): remove redundant API back-edge
2026-07-13 22:11:48 -07:00
Hannes Rudolph
a5b2e4167d
docs: publish release notes for v2026.7.1 ( #107040 )
...
* docs: publish release notes for v2026.7.1
* docs: refine v2026.7.1 release notes
2026-07-13 22:54:04 -06:00
Vincent Koc
7a279741ed
fix(plugin-sdk): refresh API baseline hash ( #107140 )
2026-07-14 12:53:33 +08:00
Peter Steinberger
4023eb92d2
feat(android): add foreground Voice Wake ( #107081 )
...
* feat(android): add foreground voice wake
* chore(android): refresh voice wake artifacts
* fix(android): refresh voice wake capability readiness
* chore(android): sync voice wake translations
* chore: keep release notes in PR context
2026-07-13 21:48:29 -07:00
Peter Steinberger
05fb55eb7b
feat: discover OpenCode and Pi sessions on paired nodes ( #106941 )
...
* feat(sessions): add opencode and pi catalogs
* fix(sessions): satisfy catalog lint
* fix(sessions): validate pi storage paths
* fix(sessions): index growing pi transcripts
* refactor(sessions): split pi path resolution
* docs(sessions): refresh catalog map
* refactor(sessions): privatize pi catalog internals
* fix(sessions): validate node catalog payloads
* fix(sessions): harden external catalog discovery
* fix(sessions): normalize catalog transcript data
* refactor(gateway): keep node scope gate compact
* fix(opencode): reject option-like session ids
* fix(sessions): align external id validation
2026-07-13 21:45:53 -07:00
Peter Steinberger
0ecbbe2382
fix(workboard): keep dispatch inside caller workspace authority ( #107087 )
...
* fix(workboard): inherit caller workspace authority
* docs(plugin-sdk): refresh API baseline
* fix(workboard): pin restricted worker authority
* fix(workboard): avoid host git for restricted dispatch
* refactor(worktrees): extract owner matching
* refactor(workboard): reuse sdk workspace helpers
* fix(workboard): narrow cleanup owner
* refactor(workboard): clarify claim value handling
* fix(workboard): inherit caller workspace authority
* test(worktrees): use managed temp directories
* chore: keep release notes in PR body
* fix(workboard): keep internal authority helpers private
2026-07-13 21:36:26 -07:00