Peter Steinberger
ebe7af218c
fix(cli): allow hook toggles to select an agent ( #124761 )
2026-08-16 12:11:44 -07:00
Peter Steinberger
57ebd20566
fix(cli): fail absent service start and restart ( #124711 )
...
* fix(cli): fail uninstalled service mutations
Treat Gateway and Node start/restart as failures when no managed service is installed, while preserving absent-service stop as an idempotent success.
* docs(cli): clarify gateway restart recovery
2026-08-16 11:38:45 -07:00
Peter Steinberger
15a01bcc5e
fix(sessions): reject invalid explicit store paths ( #124515 )
...
* fix(sessions): validate operator-supplied store paths
* fix(sessions): preserve legacy store selectors
* style(sessions): avoid unchecked store assertions
* fix(sessions): keep store errors concise
* chore(sessions): document SQLite schema probe
2026-08-16 03:06:43 -07:00
Jason (Json)
5f1bbed42d
fix(doctor): report missing managed local embedding setup ( #123575 )
...
* fix(gateway): expose startup blockers before cutover
* fix(gateway): include session blockers in preflight
* fix(gateway): keep preflight finding type private
* fix(gateway): preflight startup auth blockers
* fix(gateway): complete startup preflight readiness
* fix(llama-cpp): keep preflight remediation private
* fix(gateway): keep preflight passive and activation-aware
* fix(gateway): apply startup guard in preflight
* fix(gateway): align auth mode preflight
* fix(gateway): keep preflight state reads isolated
Share the read-only inspection snapshot scope across duplicated runtime chunks so blocked gateway preflight remains non-mutating when bundled provider artifacts read canonical state.
* fix(gateway): keep startup preflight passive
* fix(gateway): ignore inactive embedding owner shadows
* fix(gateway): preserve startup preflight parity
* fix(llama-cpp): keep cache inspection types private
* fix(gateway): close startup preflight parity gaps
* fix(gateway): handle uninitialized memory databases
* test(gateway): observe shell fallback portably
* fix(llama-cpp): normalize embedding model paths
* refactor(gateway): drop broad startup preflight surface
* fix(doctor): report missing managed local embedding setup
* style(memory): simplify setup enablement check
* fix(memory): keep diagnostic result type private
* fix(memory): inspect local setup with remote secret refs
* fix(memory): keep doctor index inspection immutable
* fix(memory): make readiness inspection owner-aware
* fix(doctor): mirror memory slot allowlist policy
* test(doctor): use canonical memory slot id
* fix(doctor): normalize memory provider ids
* fix(doctor): resolve external embedding readiness owner
* fix(plugins): keep embedding inspection result internal
* fix(doctor): isolate plugin state during lint
* fix(doctor): route lint metadata through snapshot
* fix(cli): keep doctor lint startup source-only
* fix(cli): keep doctor lint compile-cache free
* fix(doctor): keep local embedding readiness opt-in
* test(doctor): preserve plugin artifact roots during lint
* fix(doctor): refresh memory readiness registration
* test(doctor): type nullable provider policy mock
* fix(doctor): scope lint state snapshot to provider check
* fix(doctor): isolate selected plugin state checks
* test(doctor): restore only scoped environment
* fix(doctor): defer readiness state inspection
* fix(doctor): keep deferred config reads isolated
* fix(doctor): keep plugin state mode internal
* fix(config): preserve default plugin validation
2026-08-15 20:15:06 -06:00
Pavan Kumar Gondhi
8668aeb969
fix(discord): bind transcript capture to source account [AI] ( #118579 )
...
* fix(discord): bind transcript capture to source account
* style(agents): keep transcript tool wiring compact
* fix(transcripts): declare account binding channels
* fix(transcripts): report effective capture account
* fix(transcripts): enforce account lifecycle ownership
* fix(transcripts): preserve cross-surface control
* fix(copilot): preserve transcript channel context
* fix(transcripts): fail closed for legacy channel owners
* fix(transcripts): add trusted legacy recovery
* fix(transcripts): preserve auto-start cleanup ownership
* fix(transcripts): reject untrusted account starts
* fix(transcripts): keep persisted ownership authoritative
* fix(transcripts): harden legacy recovery
* fix(transcripts): preserve agent ownership boundary
* fix(transcripts): scope account binding to source channel
* fix(transcripts): preserve unattributed owner isolation
* fix(transcripts): own configured captures by account
* docs(plugins): clarify transcript auto-start ownership
* test(transcripts): cover account-less recovery
* docs(transcripts): scope legacy recovery by provider
* fix(discord): reuse eligible account ordering for transcripts
* test(discord): use neutral transcript account fixtures
* fix(transcripts): keep accountless recovery local
* fix(discord): resolve transcript accounts by voice capability
* fix(transcripts): bound account resolution failures
* fix(transcripts): bound account tool output
* fix(transcripts): honor unresolved provider accounts
* fix(transcripts): preserve binding when providers are missing
* fix(transcripts): fail closed on unknown binding provenance
* fix(transcripts): qualify account lifecycle capability
* fix(transcripts): normalize provable legacy owners
* fix(transcripts): bind scheduled capture to caller authority
* fix(transcripts): preserve scheduled caller identity tuple
* fix(transcripts): preserve channel-less scheduled authority
* fix(plugin-sdk): publish transcript provider types
* fix(transcripts): use exact lifecycle ownership tokens
* fix(transcripts): preserve local ownerless lifecycle access
* fix(transcripts): allow local configured capture control
* fix(transcripts): preserve scheduled caller channel
* fix(transcripts): retain named-agent legacy recovery
* fix(transcripts): deny unrelated remote channels
* fix(doctor): validate transcript owner inference
* fix(transcripts): restrict legacy remote recovery
* fix(ci): align transcript Doctor checks
* fix(transcripts): require Doctor-owned legacy metadata
* fix(transcripts): reject unowned remote capture starts
* fix(transcripts): reject unbound Discord lifecycle calls
* fix(transcripts): distinguish legacy owner rows
* test(discord): keep unavailable account fixture typed
* fix(transcripts): mark current imports for Doctor
* fix(transcripts): complete account ownership validation
* fix(discord): restore transcript package boundary
* fix(discord): preserve bundled transcript entry boundary
* docs(transcripts): clarify Discord auto-start account
* fix(transcripts): bind account-owned imports
* fix: preserve transcript and cron policy state
* fix(cron): preserve scheduled transcript authority
* fix(discord): keep legacy transcript rows local
* fix(transcripts): narrow account ownership boundary
* fix(transcripts): preserve trusted caller ownership
* fix(discord): enforce transcript source authorization
* fix(ci): bound Control UI gzip build variance
* test(qa): align transcript scenario contracts
* fix(agents): repair rebased caller context
* fix(discord): restore rebased account ownership
* test(discord): restore voice account fixtures
---------
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
2026-08-15 12:10:43 -07:00
Josh Lehman
56798ae085
fix(cli): accept inherited flags after nested subcommands ( #116587 )
...
* fix(cli): accept auth agent flag after subcommands
* openclaw-87a: normalize inherited skills options
* test(cli): classify curator leaf JSON flags
* test(cli): cover all auth agent leaves
2026-08-15 09:52:24 -07:00
Peter Steinberger
124847928d
fix(cli): name the agent escapes each command supports ( #124018 )
...
* fix(cli): name supported agent selection escapes
* refactor(cli): keep selection context compact
* fix(cli): preserve caught selection errors
2026-08-14 21:58:11 -07:00
Peter Steinberger
6e5bf3ec55
fix(doctor): stop false failures on multi-agent profiles ( #124010 )
...
* fix(doctor): resolve multi-agent health owners
* fix(doctor): keep bare json exit advisory
2026-08-14 21:45:55 -07:00
Gio Della-Libera
103e1a4cc9
fix(claws): recover lifecycle state safely ( #123254 )
...
* fix(claws): preserve runtime lifecycle state
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: 34377cd6-beac-4e49-8ab0-22cfaf8b54a5
* fix(claws): harden lifecycle reconciliation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: 34377cd6-beac-4e49-8ab0-22cfaf8b54a5
* fix(mcp): serialize ownership mutations
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: 34377cd6-beac-4e49-8ab0-22cfaf8b54a5
* test(mcp): prove lifecycle lease ordering
* fix(claws): page cron recovery inventory
* fix(claws): fail closed on missing cron ownership
* refactor(claws): keep pending cron recovery unchanged
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Co-authored-by: Gio Della-Libera <235387111+giodl73-repo@users.noreply.github.com >
Copilot-Session: 34377cd6-beac-4e49-8ab0-22cfaf8b54a5
2026-08-14 20:52:45 -07:00
Peter Steinberger
d8cd661517
fix(gateway): keep supervised restarts from migrating live state ( #123920 )
...
* fix(gateway): fence supervised restart schema ownership
* fix(gateway): target supervised safe restarts
* chore: leave changelog to release automation
* fix(gateway): satisfy restart control checks
2026-08-14 19:31:15 -07:00
Peter Steinberger
156af00a78
fix(memory): report truthful index outcomes ( #123863 )
2026-08-14 17:17:16 -07:00
Dallin Romney
a01d40bfb9
fix(sessions): honor total entry cap with protected history ( #123081 )
...
* fix(sessions): count protected rows toward entry cap
* perf(sessions): defer maintenance snapshot loading
* test(sessions): assert total maintenance cap
* fix(sessions): align warning preservation
* fix(sessions): guard malformed maintenance rows
2026-08-15 08:03:57 +08:00
Peter Steinberger
72e67904be
fix(cli): infer provider lists respect selected agent ( #123884 )
...
* fix(cli): require inference provider owners
* test(cli): type provider owner fixtures
* chore: leave infer release note to release
2026-08-14 16:45:37 -07:00
Peter Steinberger
bd1814bede
fix(policy): require --agent for explicit workspaces ( #123880 )
...
* fix(policy): require explicit CLI agent owner
* chore(policy): leave release notes to release flow
2026-08-14 16:15:17 -07:00
Peter Steinberger
1c055ba5e5
fix(cli): preserve explicit read-only agent targets ( #123868 )
...
* fix(cli): preserve explicit read-only agent targets
* chore: leave release changelog to release flow
2026-08-14 15:39:24 -07:00
Peter Steinberger
1b98bc35a0
fix(onboard): stop failing intentionally unstarted gateway ( #123857 )
2026-08-14 14:59:54 -07:00
Peter Steinberger
d5c194f4ea
fix(status): keep explicit fleets ownerless in diagnostics ( #123831 )
...
* fix(status): preserve explicit agent ownership
* chore: leave status notes to release
* style(status): format reconciled imports
2026-08-14 14:54:52 -07:00
Peter Steinberger
b3f1cd36db
fix(status): keep multi-agent diagnostics owner-safe ( #123826 )
...
* fix(status): preserve explicit multi-agent inventory ownership
* chore: leave changelog to release automation
2026-08-14 14:10:23 -07:00
Jesse Merhi
bf40269cb7
feat(security): require acknowledgement for policy warnings ( #116489 )
2026-08-15 03:58:45 +10:00
Josh Avant
97a53a9b35
feat: audit admitted channel participant identity ( #122863 )
...
* feat: audit admitted channel participant identity
* fix: preserve Telegram identity through thread recovery
* fix: signal held gateway process groups
* fix: keep audit evidence passive in collect routing
* fix: validate copied channel participant evidence
* fix: bind channel participant evidence to host ingress
* fix: honor Telegram proof credential roles
* fix: restart held Telegram proof through gateway
* fix: repair channel identity CI regressions
* test(matrix): bind thread routing owner
* fix: preserve direct DM SDK compatibility
* fix: bind channel provenance at host runtime
* test(feishu): provide channel context builder
* fix: defer record-bound channel runtime resolution
* fix: keep channel admission evidence core-private
* fix(audit): bind channel admission to plugin lifecycle
* fix(audit): bind ingress provenance to final context
* refactor(audit): split admission scope keys
* test(queue): cover combined metadata carriers
* refactor(audit): keep lifecycle helpers private
* fix(queue): preserve combined turn authority
* test(channels): provide ingress context builders
* test(channels): align integrated CI fixtures
* test(clickclack): resolve model-loop ingress
* docs: preserve channel participant evidence invariant
2026-08-14 08:57:01 -05:00
Peter Steinberger
ad6bc6d3ae
fix(delivery): keep failed queue rows payload-free ( #123642 )
...
* refactor(delivery): collapse failed-row lifecycle
Replace the unshipped failure-operations platform with payload-free terminal receipts owned by existing queue boundaries. Keep bounded/permanent idempotency only for reusable or crash-ambiguous producers, move physical expiry to queue maintenance, and preserve migration and media-cleanup safety.\n\nTogether with #123410 , production code is net negative by 11 lines; tests, docs, and generated protocol mirrors are accounted separately.
* fix(delivery): break state DB import cycle
* fix(delivery): classify SQLite boundary uses
* test(gateway): mark retained health fixture
2026-08-14 06:22:51 -07:00
Peter Steinberger
e6eebc5ad8
feat(agents): un-reserve literal main ( #123609 )
...
* feat(agents): un-reserve literal main
* fix(agents): scan legacy sessions before reusing main
2026-08-14 04:23:19 -07:00
Peter Steinberger
2a77e6e5a0
feat(onboard): named first agent ( #123521 )
...
* feat(onboard): named first agent
* fix(onboard): harden named-agent handoff
* test(onboard): preserve authored roster provenance
* test(gateway): restore authorized steering coverage
* fix(onboard): report imported roster name conflicts
2026-08-14 02:54:55 -07:00
Peter Steinberger
65597f93b0
fix: restore default-profile backup archives ( #123504 )
...
* fix(backup): make default-profile backups restorable
* fix(backup): preserve restore cleanup context
* refactor(backup): drop preserve-caught-error suppression via hoisted cleanup error
* refactor(backup): hoist restore failure handling out of catch scopes
2026-08-14 01:39:08 -07:00
Peter Steinberger
2ef92d0bbe
feat: cookie sync from Mac to a remote Gateway browser profile ( #123494 )
...
* feat(browser): sync system cookies to a remote gateway profile
Add `openclaw browser cookie-sync`: decrypt allowlisted macOS Chrome-family
cookies locally and push them into a managed profile on a possibly-remote
Gateway over the existing operator channel. --watch re-syncs on cookie-DB
changes with a single Keychain prompt per session.
- New POST /cookies/set-many batch route (mirrors /cookies/set)
- Extract one canonical readSystemProfileCookies reused by import + sync
- Mandatory domain allowlist (never syncs an unrestricted cookie jar)
- Decryption stays host-local (macOS); no cookie values are logged
* feat(macos): cookie sync checkbox and configuration UI
Add an off-by-default 'Cookie sync' section (Settings > General): a toggle, an
editable domain allowlist editor, and a target-profile field, actionable only in
remote-gateway mode. CookieSyncManager supervises `openclaw browser cookie-sync
--watch` against the connected Gateway when enabled, resolving a LOCAL CLI (never
the SSH-redirect path, since decryption is host-local) and injecting gateway
URL + token/password via environment, never argv. A status row surfaces
running/stopped/error and the last sync summary.
* fix(macos): satisfy cookie sync lint gates
* chore(i18n): register cookie sync native source strings
Regenerate apps/.i18n/native-source.json baseline for the new macOS Cookie
sync settings strings (additive only). Satisfies the native:i18n:verify gate;
generated locale artifacts are refreshed separately by the locale-refresh job.
2026-08-13 23:47:26 -07:00
Peter Steinberger
7026cf2f21
fix(delivery): bound failed-row retention lifecycle ( #123410 )
2026-08-13 22:03:33 -07:00
Peter Steinberger
b9c6789560
feat(secrets): authenticated egress substitution proxy with destination binding ( #123216 )
...
* feat(secrets): add authenticated egress substitution proxy
* feat(secrets): bind egress substitution to hosts
* ci(codeql): classify egress proxy bypass tunnel in network boundary query
* refactor(proxy-capture): use the canonical IP parser instead of node:net
* fix(secrets): compare proxy tokens with a process-keyed MAC
2026-08-13 20:49:31 -07:00
Peter Steinberger
d2dad76ecd
feat(doctor): relocate shared auth store into state DB ( #123349 )
...
* feat(doctor): relocate shared auth store into state DB
* fix(doctor): make shared auth relocation crash-safe
* fix(doctor): skip disabled shared auth inspection
* fix(doctor): break shared auth migration cycle
* fix(doctor): remove unused migration type export
* fix(test): remove duplicate Codex attempt shard
2026-08-13 17:44:02 -07:00
Peter Steinberger
b233ea7957
fix(health): surface blocked ingress lanes ( #123234 )
2026-08-13 12:44:59 -07:00
Peter Steinberger
8e0f464a5f
fix(gateway): suppress ambient channel auto-enable ( #123174 )
2026-08-13 11:20:40 -07:00
Dallin Romney
4afccbdaa4
fix(sessions): exclude protected sessions from entry cap ( #123014 )
2026-08-13 15:42:55 +08:00
Peter Steinberger
e45a9460ce
docs: repair spellcheck and anchor drift ( #122960 )
...
* docs: repair spellcheck and anchor drift
* docs: satisfy markdown anchor lint
2026-08-12 20:50:56 -07:00
Peter Steinberger
d2628e430c
fix(cli): avoid restart hint for unchanged config ( #122953 )
...
* fix(cli): avoid restart hint for unchanged config
* docs(cli): clarify no-op restart guidance
2026-08-12 20:40:30 -07:00
Peter Steinberger
6076efc968
docs(gateway): clarify dynamic operator scopes ( #122931 )
2026-08-12 19:23:54 -07:00
Jacqueline Henriksen
800328f14e
feat(cli): allow editing automation display names ( #122702 )
...
* feat(cli): allow editing automation display names
* feat(cli): allow clearing automation display names
2026-08-12 17:15:21 -07:00
Peter Steinberger
08b134324f
feat: continue web sessions in the terminal ( #122870 )
...
* feat: continue sessions in terminal
Add a credential-free Control UI continuation command and allow openclaw resume to reuse current-profile authentication only for byte-exact configured Gateway targets.
* fix(gateway): separate public origin TLS ownership
Allow exact public-origin resume targets to reuse local authentication without inheriting the direct local listener certificate fingerprint.
* fix(gateway): scope exact targets to gateway mode
Prevent remote profiles from reusing dormant local Gateway authentication for explicit loopback or public-origin targets.
* fix(cli): encode terminal resume handoffs
Replace shell-specific quoting with a strict credential-free base64url handoff, gate configured auth reuse to validated handoffs, and skip unused session discovery.
* fix(gateway): isolate handoff auth identity
Suppress ambient Gateway auth fallback for validated handoffs while preserving explicit credentials, configured SecretRefs, stored device auth, and exact-target TLS ownership.
* fix(cli): harden terminal resume handoffs
* fix(cli): parse terminal handoff outcomes
* fix(cli): bind handoffs to resolved agent
* test(ui): align terminal continuation proof
* docs(plan): track terminal continuation
* refactor(ui): keep terminal handoff result local
2026-08-12 17:07:48 -07:00
Gio Della-Libera
1ec4e4582e
fix(claws): freeze installed tool profile authority ( #121327 )
...
* fix(claws): freeze installed tool profile authority
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* chore(claws): normalize consent helper file modes
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): preserve consented tool authority
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* chore(claws): normalize source file modes
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* chore(claws): allowlist runtime provenance probe
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): close consent review gaps
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* docs(claws): require concrete frozen tool grants
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): reject dynamic MCP selectors
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): type profile resolution at parse boundary
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): preserve bounded update authority
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): prepare consent provenance at config load
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): isolate consent provenance failures
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): keep runtime grants inside consent
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): own consent cache in state lifecycle
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): guide legacy full profile repair
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* chore(claws): keep consent cache internals private
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): satisfy strict consent cache types
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): fail closed when state cache closes
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): integrate consent cache with state owner
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): fail closed before consent state opens
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): resume legacy v1 profile installs
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* test(claws): isolate legacy resume regression
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): follow tool policy normalizer rename
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): bind runtime consent to agent config
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* chore(claws): normalize digest helper mode
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): drop stale digest helper import
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* test(runtime): keep snapshot mocks complete
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): retain bounded legacy profile plans
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): verify ownership before runtime consent
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* test(claws): remove stale runtime import
* fix(claws): drop stale add import
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* fix(claws): resume failed v1 promotion
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* test(claws): codify cold-state authority fence
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
* chore(plugin-sdk): refresh API baseline
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
---------
Co-authored-by: Gio Della-Libera <235387111+giodl73-repo@users.noreply.github.com >
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
2026-08-12 11:37:04 -07:00
Peter Steinberger
e69a973bfb
feat(backup): add whole-archive restore into a fresh staging directory ( #122750 )
...
* feat(backup): add whole-archive restore into a fresh staging directory
Verify-first extraction with fresh-target and live-state-dir guards,
cleanup on failure, and explicit rollback warnings (ratchet-bearing
channel credentials, approvals, delivery state). Activation stays an
explicit operator step.
* fix(cli): sync backup catalog description with registered command
2026-08-12 18:03:28 +00:00
Peter Steinberger
99d662473c
fix(channels): fail-fast headless channel setup with plugin-declared env contracts ( #122530 )
...
* fix(channels): validate headless channel setup
* docs(channels): document headless provisioning
* fix(channels): repair setup metadata typing
* chore(channels): regenerate official channel catalog for env metadata
* fix(slack): keep mode-conditional env contract plugin-owned
Static --use-env declaration keeps only the unconditional SLACK_BOT_TOKEN;
socket-vs-HTTP conditional requirements (app token, signing secret) stay in
Slack's own setup validation so HTTP mode no longer demands an irrelevant
SLACK_APP_TOKEN.
* chore(sdk): regenerate api baselines and catalog after rebase
* fix(slack): align manifest env declaration with runtime contract
* chore(sdk): regenerate api baselines after rebase
* chore(sdk): regenerate api baselines after rebase
* chore(sdk): regenerate api baselines after rebase
2026-08-12 17:12:15 +00:00
Peter Steinberger
6093e3477d
fix(cli): make doctor --json imply read-only lint mode ( #122662 )
...
* fix(cli): make doctor json imply lint
* fix(cli): preserve doctor session selector errors
2026-08-12 09:04:51 -07:00
Vincent Koc
d5f995c388
fix(slack): preserve original bytes for forced media ( #122667 )
...
Punchcard-Session: crisp-valley-brook-8r
2026-08-12 23:32:32 +08:00
Peter Steinberger
37b4fc8621
feat(backup): recorded runs, scheduled backups, and git-backed versioned snapshots ( #122485 )
...
* refactor(infra): extract shared git exec and verified snapshot-copy helpers
Moves the worktrees git wrapper to src/infra/git-exec.ts (with optional
maxOutputBytes for large buffered reads) and the online-backup/sanitize/
VACUUM/verify snapshot step into src/snapshot/openclaw-snapshot-copy.ts so
snapshot backends share one hardened copy path. Behavior-identical moves;
all importers updated.
* feat(snapshot): git-backed versioned SQLite snapshot engine
Deterministic per-table JSONL dumps (PK-ordered, lossless bigint/blob
encoding), verbatim DDL preservation, virtual/shadow-table skipping with
FTS rebuild on restore, secret-table redaction policy, manifest with
per-table row counts and content hashes, and restore verification by
re-serialization. Unchanged data produces no commit.
* feat(backup): recorded runs, freshness surfacing, and scheduled git backups
Every backup attempt is recorded in the previously writer-less backup_runs
table (bounded to 200 rows). openclaw status gains a Backups overview row
and JSON payload; doctor prints an informational hint when no successful
backup is recorded or the newest is stale. New commands: backup git
init/create/log/verify/restore and backup enable/disable, which provision
one idempotent gateway cron job running scheduled git backups.
* fix(state): stop bumping schema_meta.updated_at on unchanged opens
updated_at now records when schema metadata actually changed instead of
when the database was last opened; unconditional bumps dirtied the row on
every open and defeated no-change backup detection.
* docs: document versioned git backups, scheduling, and backup freshness
* fix(backup): satisfy CI ownership checks
* fix(backup): complete CI contract coverage
* fix(backup): complete credential table redaction
* fix(backup): isolate git repository ownership
* fix(backup): persist push degradation
* fix(backup): atomically converge schedules
* fix(status): isolate backup freshness environment
* fix(status): carry scan environment to freshness reads
* fix(backup): harden Git repository ownership
* docs(backup): document Git repository safety
* fix(backup): non-creating outcome log and origin preflight for pushed schedules
Recording a backup outcome never bootstraps an absent state database (a
failed backup on a fresh host would otherwise create a blank DB that a
retry treats as real input), and backup enable --push now requires the
repository to have an origin remote, pointing at backup git init --remote
instead of scheduling permanently degraded pushes.
* refactor(worktrees): use shared git exec helpers
* refactor(worktrees): remove unused git buffer wrapper
* refactor(worktrees): consume buffered git helper
* feat(backup): redact pushed schedules by default
Unattended recurring pushes retain credential-bearing tables durably in
remote Git history, so backup enable --push now defaults to
--exclude-secrets; --include-secrets is the explicit full-fidelity
override (still warned). Local non-push schedules keep full fidelity for
complete restores.
* fix(backup): redact audit HMAC and OAuth pending state; tolerate absent backup_runs
Adds audit_identity_keys (audit HMAC key) and mcp_oauth_pending_authorizations
(live OAuth callback state) to the redaction inventory, and makes read-only
backup freshness treat a same-version database without the additive
backup_runs table as no recorded backups instead of failing before a
writable open converges the schema.
* fix(backup): restrict schedules to local gateways
* fix(snapshot): harden Git restore and redaction
* fix(backup): block pushes of adopted history
* fix(backup): contain commits and pairing secrets
2026-08-12 08:11:22 -07:00
Peter Steinberger
85230cf76c
test(secrets): cover Code Mode exec store env and document the harness boundary ( #122405 )
...
* test(secrets): cover code-mode nested exec store env; document harness boundary
* docs(secrets): warn that store env does not reach external agent harnesses
2026-08-12 07:06:40 -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
Josh Avant
562391b9af
feat(audit): explain denied operator approvals ( #119815 )
...
* Audit: add durable decision receipts
* Audit: route generic decision facts through writer
* Audit: satisfy strict decision count typing
* Test: align decision writer type coverage
* Refactor: isolate decision receipt projection
* Fix: preserve ambiguous approval correlation
* Fix decision coverage across pages
* Fix approval coverage across corrupt pages
* Fix decision summaries across retention and paging
* Remove superseded decision fact count path
* Keep session-derived approval links conservative
* Test decision paging at owner boundary
* Audit: bind approval receipts to exact execution
* Test: keep decision receipt coverage focused
* docs(agents): preserve decision receipt ownership
* Docs: refresh Plugin SDK split baselines
* Docs: require opt-in for future decision facts
* Fix: bound decision receipt inspection
2026-08-12 05:23:29 -05:00
clawSean
654fc632cd
docs(backup): describe manual restore flow ( #86971 )
...
* docs(backup): describe manual restore flow
* docs(backup): make restore copy-back fail closed
* docs(backup): make inspect-and-stage block fail closed
Add set -euo pipefail to the first restore staging snippet so a failed
openclaw backup verify stops before mktemp/tar extraction, matching the
fail-closed copy-back block. Addresses ClawSweeper P1 on docs/cli/backup.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
* docs(backup): reconcile restore guidance with exclusions
Punchcard-Session: brisk-harbor-harbor-6w
* docs(backup): centralize archive restore guidance
Punchcard-Session: calm-cedar-workshop-by
---------
Co-authored-by: clawSean <260045960+clawSean@users.noreply.github.com >
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-08-12 18:09:26 +08:00
Peter Steinberger
5350b92dc8
fix(browser): wake extension relay through gateway ( #122537 )
...
* fix(browser): wake extension relay through gateway
* fix(browser): preserve manual extension relay pairing
2026-08-12 02:13:03 -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
Josh Avant
3b01ea7905
fix(audit): show authenticated users for Gateway runs ( #122484 )
...
* fix(audit): show authenticated users for Gateway runs
* fix(audit): keep profile labels out of sessions
* test(qa): verify session label retention at storage
* fix(sessions): preserve canonical profile ownership
* test(qa): require full identity inspection proof
* docs(agents): preserve execution identity ownership boundary
2026-08-12 08:50:37 +00:00
Peter Steinberger
5a643e3543
fix(plugins): keep packed entries consistent through package lifecycle ( #121174 )
...
* fix(plugins): own packed entry lifecycles by package
Persist package ownership per runtime child, route lifecycle actions through one closed resolver, reconcile removed child policy during updates, and retain rollback generations until durable config/index commit.
* fix(plugins): break uninstall policy import cycle
* test(plugins): model package ownership in lifecycle fixtures
2026-08-12 00:49:29 -07:00