scotthuang
2900026b33
fix: stop selected channel sessions from WebChat ( #111108 )
...
* fix: stop selected channel sessions from WebChat
* fix: clear channel working state after stop
* fix: cancel queued turns before session abort
* fix: replay pending stops after reconnect
* fix: align stop lifecycle test fixtures
* fix(ui): bind pending aborts to gateway client
* test(ui): keep chat pane specs within line limit
* chore(ios): refresh native i18n inventory
* chore: retrigger PR checks
* fix(system-agent): avoid blocking TUI catalog discovery
* fix: preserve session abort ownership
* test: align abort coverage with current main
* test: assert scoped session abort broadcast
* fix(agent-runs): expose SDK runtime abort state
* fix(ui): clear queued main-session stops by scope
* fix(ui): replay only exact run aborts
* fix(gateway): protect session abort cleanup
* fix(ui): narrow session abort intent
* test(ui): avoid unbound request assertions
---------
Co-authored-by: scotthuang <scotthuang@tencent.com >
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com >
2026-07-24 14:36:18 -05:00
Pavan Kumar Gondhi
1fc81c2054
fix: reusable exec approvals apply to approved arguments ( #112946 )
...
* fix: bind allow-always exec approvals to argv
* test: update exec approval persistence expectations
* fix: hash reusable exec approval arguments
* test: pin POSIX exec approval hash expectation
* fix: match hashed exec approvals in macOS
* fix: encode exec approval argv hashes unambiguously
* fix: bind native exec approval grants to argv
* test: expect hashed exec approval patterns
* fix: ignore legacy broad exec approval grants
* fix: hash shell script allow-always grants
* fix: require argv binding for package manager grants
* fix: bind positional carrier approval grants
* fix: address approval check failures
* fix: format approval policy test
* fix: reject context-changing package manager grants
* fix: keep build-enabled pnpm dlx grants one-shot
* fix: reject npm exec context grants
* fix: catch npm exec tail context options
* fix: block npm package context approvals
* fix: block leading pnpm dlx context grants
* fix: restrict durable positional carrier grants
* docs: clarify generated exec approvals
* fix: block post-dlx pnpm context grants
2026-07-24 15:38:38 +05:30
Vincent Koc
b3e3f06584
fix(i18n): correct Indonesian seconds labels
2026-07-24 17:17:56 +08:00
github-actions[bot]
2a465debe8
chore(i18n): refresh native locales
2026-07-24 17:17:56 +08:00
Vincent Koc
e3c2a8be58
fix(i18n): drop concatenated runtime prefixes
2026-07-24 16:29:32 +08:00
Vincent Koc
ac3eb02951
fix(android): avoid pluralized observation copy
2026-07-24 16:29:32 +08:00
Vincent Koc
6dbe278283
fix(android): allow post-merge flavor translations
2026-07-24 15:26:58 +08:00
Vincent Koc
48b4be5c4c
build(i18n): align iOS source inventory lines
2026-07-24 15:26:58 +08:00
Vincent Koc
a911bfb716
style(ios): satisfy settings chat formatting
2026-07-24 15:26:58 +08:00
Vincent Koc
80c94becee
build(i18n): refresh mobile source inventory
2026-07-24 15:26:58 +08:00
Vincent Koc
9cecc3083d
fix(ios): localize settings chat fixtures
2026-07-24 15:26:58 +08:00
Vincent Koc
a3911fe9ff
fix(apple): localize TLS connection problems
2026-07-24 15:26:58 +08:00
Vincent Koc
2f85a77cc1
fix(android): localize accessibility executor UI
2026-07-24 15:26:58 +08:00
Vincent Koc
292cc5659d
fix(android): localize recommended option labels
2026-07-24 15:26:58 +08:00
joshavant
96539d1c3c
test(cron): align generated and compatibility gates
2026-07-24 01:24:03 -05:00
joshavant
ed7d9ef441
fix(ios): preserve planned build during release validation
2026-07-23 21:34:34 -05:00
Peter Steinberger
90aee82793
feat(sessions): suggestion queue + typing indicator ( #113173 )
...
* feat(protocol): add session collaboration contracts
* feat(gateway): add session suggestion queue and typing
* feat(ui): add session suggestion controls
* fix(collaboration): restrict suggestion resolution
* fix(collaboration): dedupe suggestion dispatch modes
* fix(collaboration): preserve resolver identity
* fix(collaboration): reconcile suggestion state
* fix(collaboration): filter identityless suggestion events
* fix(ui): expose full suggestion text
* fix(collaboration): durably claim suggestion dispatch
* fix(collaboration): harden suggestion events and typing
* fix(collaboration): reconcile suggestion races
* fix(ui): reconcile suggestion capabilities
* fix(collaboration): close suggestion privacy races
* test(ui): satisfy suggestion lifecycle lint
* fix(collaboration): fence resolved suggestion events
* test(collaboration): type deferred audit result
* fix(collaboration): fence delayed typing events
* fix(ui): coalesce suggestion refreshes
* fix(ui): preserve resolved self suggestions
* fix(collaboration): enforce draft suggestion visibility
* fix(collaboration): fence post-dispatch finalization
* fix(ui): retain suggestions across visibility changes
* fix(collaboration): fence suggestion context and archives
* fix(collaboration): fence suggestion resolve lifecycle
* fix(collaboration): map suggestion replacement races
* refactor(gateway): extract session typing state
* fix(collaboration): integrate suggestion storage with session nodes
* refactor(gateway): extract session sharing snapshot cache
* fix(collaboration): satisfy protocol and deadcode gates
* fix(ci): register iOS release script entrypoints
* fix(collaboration): fence typing by session instance
* fix(collaboration): enforce incognito suggestion privacy
* docs(ui): clarify solo suggestion dormancy
* test(gateway): preserve incognito literal type
* test(gateway): split session typing coverage
* test(gateway): register collaboration method expectations
2026-07-23 18:59:58 -07:00
joshavant
d87707d806
chore(ios): refresh native i18n source inventory
2026-07-23 20:45:33 -05:00
joshavant
0030a8c808
fix(ios): cache location authorization state
2026-07-23 20:45:33 -05:00
joshavant
ee317497d9
fix(ios): isolate release screenshot captures
2026-07-23 20:45:33 -05:00
joshavant
ba09e05e97
refactor(ios): append unpadded App Store revisions
2026-07-23 18:42:16 -05:00
joshavant
0558831b92
fix(ios): normalize App Store build upload state
2026-07-23 18:26:29 -05:00
joshavant
b7d77b0f21
feat(ios): deterministically plan App Store releases
2026-07-23 18:18:32 -05:00
joshavant
30395ba31b
feat(ios): support App Store release revisions
2026-07-23 16:24:15 -05:00
Peter Steinberger
cbf94c0d8b
feat(sessions): drafts UX — create-as-draft, promote, admin ghost treatment ( #113127 )
...
* feat(protocol): support draft session creation
* feat(ui): add draft session workflows
* docs: explain multi-user drafts
* test(ui): tighten draft ownership fixture
* test(ui): satisfy draft E2E lint
* test(ui): keep draft fixtures strictly typed
* docs: add drafts implementation report
* docs: clarify implementation LOC summary
* test: strengthen draft compatibility coverage
* docs: correct drafts cleanup report
* fix: harden draft availability policy
* docs: update draft policy review notes
* test(ui): type draft policy mock control
* fix: preserve keyed draft creation retries
* fix: keep disabled draft retries idempotent
* docs: finalize drafts cleanup report
* fix(ui): keep draft ownership helper internal
* docs: refresh drafts docs map
2026-07-23 13:06:35 -07:00
Peter Steinberger
c519e01a24
feat(gateway): chat.send expectedLeafEntryId precondition keeps stale panes off switched branches ( #113073 )
2026-07-23 12:33:31 -07:00
Peter Steinberger
013b24dd6d
feat(sessions): archive attribution (archivedBy) ( #113116 )
...
* feat(sessions): attribute archive transitions
* docs: add archive attribution report
* fix(sessions): restore alias layout after archive audit failure
* docs: update archive attribution report
* fix(sessions): isolate archive audit rollback
* docs: record final archive rollback design
* fix(sessions): make archive audit note best-effort
* docs: record best-effort archive audit policy
* chore: refresh native i18n baseline
2026-07-23 11:23:30 -07:00
Jason (Json)
2f5e7cfc5d
fix(ui): prevent duplicate image prompt and flicker ( #113113 )
...
* fix(ui): stabilize initial image prompt handoff
* chore(protocol): refresh sessions create model
* chore(i18n): refresh native source inventory
2026-07-23 12:11:52 -06:00
Peter Steinberger
3e2b3ea4d5
feat(cron): database-backed heartbeat monitor scratch replaces HEARTBEAT.md ( #112967 )
...
* feat(cron): move heartbeat context into database-backed per-job cron scratch
- new additive cron_job_scratch SQLite table (revision tombstones keep
compare-and-swap monotonic across unset/recreate; 256KiB cap)
- heartbeat runner reads monitor scratch instead of workspace HEARTBEAT.md;
heartbeat_respond gains a private scratch replacement parameter
- openclaw doctor --fix migrates HEARTBEAT.md into scratch (hash-verified,
archived under state backups, idempotent, symlink-contained)
- gateway cron.scratch.get/set admin RPCs + openclaw cron scratch CLI
- workspace bootstrap no longer seeds HEARTBEAT.md; Codex heartbeat file
guidance removed; docs and prompt snapshots updated
* fix(cron): review round 2 — shared-workspace heartbeat migration and non-default agent monitors
- doctor migration groups agents by heartbeat source file and imports into
every monitor before archiving/removing the shared file once
- exempt heartbeat payloads from the main-session default-agent restriction:
monitors only poke the wake bus, so non-default agents converge again
- document why disabled monitors retain their last cadence (config default
already resolves before the fallback)
* fix(cron): honor configured cron store, legacy heartbeat fallback, and safer doctor claim
* fix(cron): claim HEARTBEAT.md before committing scratch and restore without clobbering
* fix(cron): pin migration CAS to precondition revision, re-verify claim on release, archive first, report scratch as pending
* docs(heartbeat): remove retired config options
* fix(cron): crash-recoverable migration claims, partial-import rollback, latest-response scratch pairing
* test(heartbeat): keep latest scratch proposal paired
* fix(cron): roll back committed scratch on changed-claim release and restore no-row state
* fix(cron): revision-guarded rollback delete and recreated-file detection on claim release
* fix(cron): treat every failed claim re-verification as a migration conflict
* test(heartbeat): rename ack test after ackMaxChars retirement
* fix(heartbeat): keep monitor scratch out of bypass-scope runs
* fix(cron): resolve claimed symlinks on release and gate legacy fallback on proven scratch state
* fix(cron): strict claim-name recovery and per-entry migration grouping
* fix(ci): heartbeat scratch gate repairs — lint causes, dead exports, since-train, inventory path, prompt snapshot, regenerated docs map, SDK baseline, protocol bindings
* fix(cron): live-owner claim guard and canonical entry-key migration grouping
* fix(cron): archive claimed inode on release and flag orphan claims beside recreated files
* docs(cron): document process-global state-db invariant for scratch service ops
* chore(i18n): refresh native inventory line numbers after protocol binding regen
2026-07-23 11:10:49 -07:00
Peter Steinberger
78b987aa2e
fix: keep model catalog coherent across config reloads ( #112331 )
...
* fix(gateway): keep model catalog reads generation-safe
* fix(gateway): type owner-aware catalog snapshots
* fix(sessions): break lifecycle accessor import cycle
* fix(gateway): preserve requested catalog owner
* fix(gateway): keep catalog owner identity explicit
* fix(gateway): isolate catalog snapshot types
* fix(gateway): respect published catalog owner
* fix(gateway): reject mismatched catalog owners
* test(apple): gate unread patch timing explicitly
* fix(gateway): keep startup metadata bounded
* fix(gateway): forbid startup catalog fallback
* test(apple): wait for terminal outbox flush
* fix(cron): follow published model catalog owner
* test(cron): align catalog runtime mocks
* test(system-agent): isolate TUI catalog metadata
* test(gateway): refresh deletion session snapshot
* fix(gateway): preserve authoritative catalog owners
* fix(gateway): retain equivalent catalog preload
* fix(gateway): reject ownerless catalog projections
* fix(gateway): scope catalog loads to resolved agent
* fix(gateway): restore canonical catalog owner identity
* fix(cron): preserve published catalog owner
* test(cron): align owner snapshot mocks
* fix(cron): preserve replacement owner workspace
* fix(runtime): reject explicit catalog owner mismatch
* fix(runtime): preserve implicit owner fallback
* test(cron): resolve implicit owner fixtures
2026-07-23 10:54:27 -07:00
joshavant
3d7e996fd3
docs(ios): default releases to gateway version
2026-07-23 12:07:09 -05: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
joshavant
b85c0e2064
fix(ios): harden release screenshot capture
2026-07-23 11:09:06 -05:00
Peter Steinberger
09672312c4
feat(gateway): incognito sessions for the web Control UI ( #113006 )
...
* feat(gateway): add web-only incognito sessions held in process memory
* feat(ui): add incognito toggle and badges to the web new-session flow
* fix(sessions): classify incognito by key shape, fail closed on stale keys, and gate memory writes
* fix(codex): start harness threads ephemeral for incognito sessions
* fix(sessions): reshape internal-effects incognito keys and add doctor repair for reserved key collisions
* refactor(plugin-sdk): export canonical incognito key classifier and guard the sentinel path
* fix(state): classify incognito DB handles from the recorded open-time set
* fix(gateway): isolate incognito sessions from durable lineage and allocation on read-only misses
* docs(sessions): pin the reserved incognito namespace ownership decision
* feat(gateway): admin-scope incognito visibility and incognito-blind cross-session surfaces
* fix(ci): repair kysely guardrails, dead export, docs map, protocol bindings, and ACP reset rotation
* fix(gateway): remove non-admin observability side channels for incognito sessions
* fix(gateway): enforce admin-scope incognito access and cover all parent-reference creation paths
2026-07-23 09:04:36 -07:00
Peter Steinberger
9a624cd78f
fix(ios): localize Agent Pro detail labels ( #112980 )
...
* fix(ios): preserve localized Agent Pro detail labels
* fix(ios): localize Dreaming metric labels
* test(ios): refresh native localization inventory
* test(setup): align isolated detection fallback
* test(system-agent): allow slow shared TUI setup
* test(chat): allow loaded outbox retry drain
---------
Co-authored-by: Alix-007 <li.long15@xydigit.com >
2026-07-23 09:01:07 -07:00
Colin Johnson
4f4d89574a
fix(ios): show dark app icon in Dark appearance ( #113039 )
...
* fix(ios): use dark app icon appearance
* fix(ios): cover debug app icon appearances
2026-07-23 10:56:24 -04:00
Peter Steinberger
3023d69fd8
feat(gateway): carry reviewer-only detail on plugin approvals ( #113027 )
...
* feat(gateway): carry reviewer-only detail on plugin approvals
* chore(protocol): regenerate projections for plugin approval detail
* chore(plugin-sdk): budget reviewer-detail surface additions
2026-07-23 06:28:23 -07:00
Peter Steinberger
6251343384
feat(sessions): visibility states, membership, and server-enforced participation ( #112787 )
...
* feat(sessions): enforce visibility and membership
* feat(ui): add session sharing controls
* docs: add session sharing implementation report
* refactor(sessions): use canonical creator identity
* fix(sessions): adopt creator ownership contract
* docs: refresh session sharing rebase report
* docs: record final creator integration proof
* docs: record final main rebase
* chore: drop worktree report artifact
* fix(sessions): keep drafts owner-only
* fix(ui): preserve redacted session restrictions
* fix(sessions): preserve scoped sharing authorization
* fix(sessions): re-verify session instance inside sharing mutation queue
* test(sessions): cover stale sharing mutation
* fix(sessions): bind membership to session instance, gate absence blocking on sharing
* fix(sessions): preserve entry normalization on rebase
* fix(sessions): atomic visibility instance guard, reset visibility on recreate
* docs(ui): name the absence-heuristic tradeoff and link follow-up
* feat(protocol): expose session sharing row state
* docs: note generated creator identity type
* fix(sessions): bind member writes and visibility rollback to session instance
* fix(ui): discard stale-connection sharing loads; drop worktree scratch files
* fix(ui): block composer only on observed sharing state, never on list absence
* fix(gateway): authorize agent runs against the resolved session (close keyless bypass)
* chore(protocol): allowlist Control UI-only session.sharing event for mobile
* test(config): record session.sharing keys in common-tier snapshot
* refactor(sessions): unexport internal sharing helpers
* test(gateway): update sessions changed routing assertions
* fix(sessions): align sharing identity with created actor
* fix(sessions): align membership identities and storage keys
* fix(gateway): re-filter drafts against fresh sharing state in sessions.list
* fix(gateway): drafts stay owner+admin only in the sessions.list fresh filter
* fix(ui): re-export sharing protocol types for the Control UI
* fix(ui): keep SessionSharingRole internal to satisfy deadcode gate
* fix(gateway): read runtime config lazily in session-mutation authorization
authorizeSessionMutation ran on every gateway request but eagerly called
context.getRuntimeConfig() — a non-trivial config resolve — for methods that
are never session mutations. Read config only once a real session-mutation
target is resolved. Also register the four session sharing methods in the
2026.7 release-train inventory test.
* fix(gateway): share one config snapshot across session-mutation authorization
Group rename/delete discovery and the authorization loop were each resolving
runtime config separately after the lazy-read change. Memoize the resolve so
non-session requests still pay nothing, while any session mutation resolves
config at most once and both discovery and authorization use that single
snapshot (no double reload, no mid-request config-change split).
* fix(gateway): resolve session-sharing CI gates
- isGatewayAdmin: null-safe connect access so internal/plugin-runtime runs
(which reach authorization with a connect-less client) do not crash.
- emitSessionsChanged: scope only to a concrete session key; a [undefined]
sessionKeys scope filters nothing correctly and would strip draft gating.
- session stores: mark the sync TOCTOU re-read and the sqlite_master
existence probe as narrowly-justified raw SQLite primitives.
- tests: provide getRuntimeConfig to the session-action contract context,
drop a shadowed 'call' binding, use structuredClone, and assert the
agent-scoped sessions.changed broadcast shape.
* docs(gateway): note best-effort participation gate + refresh native i18n baseline
Session ownership/visibility are usability features, not a security boundary
(docs/concepts/multi-user.md, SECURITY.md); document that the pre-dispatch
authorization is intentionally not commit-bound to the resolved instance.
Also refresh apps/.i18n/native-source.json after the session-sharing protocol
codegen shifted line numbers of existing native strings (position-only).
* test(gateway): reset session sharing snapshots
* style(gateway): format sharing reset import
2026-07-23 08:53:57 -04:00
metaforismo
33044992c1
fix(ios): avoid phantom iPad nodes on Apple Silicon Macs ( #112744 )
2026-07-23 08:25:59 -04:00
Vincent Koc
392b3a5695
test(ios): refresh native i18n source lines
2026-07-23 17:43:10 +08:00
Peter Steinberger
6b470b1fe8
fix(ui): thread-changes button leads to a dead end when the workspace is not a git checkout ( #112914 )
...
* fix(ui): disable the thread-changes button when the workspace is not a git checkout
* chore(protocol): regenerate Swift gateway models for sessions.files.list gitCheckout
2026-07-23 01:33:35 -04:00
joshavant
ebbbfa4c30
fix(ios): stabilize release screenshot launches
2026-07-23 00:28:00 -05:00
Peter Steinberger
26e4dec8c9
fix(ios): native Talk respects session thinking level ( #112901 )
...
* fix(ios): inherit thinking in native Talk
* test(ios): verify native Talk thinking inheritance
* test(ios): keep Talk regression i18n-neutral
* test(ios): import Talk request builder module
* test(secrets): secure plugin preset fixture
---------
Co-authored-by: RECOVERI <alfred@recoveri.io >
2026-07-23 01:02:12 -04:00
openclaw-mantis[bot]
c5ea0787a2
chore(i18n): refresh native locales ( #112803 )
...
* chore(i18n): refresh native locales
* fix(i18n): correct native secret translations
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-23 00:56:26 -04:00
joshavant
1af115d257
test(ios): retry stalled screenshot launches
2026-07-22 23:42:32 -05:00
joshavant
690ed56441
fix(ios): preserve localized app display names
2026-07-22 22:56:22 -05:00
Peter Steinberger
099d6351b3
refactor(sessions): canonical lineage model — creation provenance, fork ancestry, generation chain, typed row contract ( #111861 )
...
* fix(sessions): preserve spawn/fork lineage across implicit daily/idle rollover
* refactor(sessions): canonical creation model with forkSource ancestry and generation chain
* feat(sessions): stamp creation provenance across all creation paths and emit created events
* refactor(gateway): lock lineage patching, split control from navigation, add typed session-row contract
* docs(gateway): document creation provenance stamping and lineage patch tightening
* fix(sessions): keep provenance proof-only on wire fallbacks and strip node-local lineage from cron continuations
* fix(gateway): never journal a created event for session adoption
* fix(gateway): keep post-create work on adoption while gating the created event
* fix(sessions): restore trusted ensure-main provenance and stamp navigation parent at spawn
* fix(sessions): allow parentSessionKey through the direct child spawn patch
* fix(ci): break type cycles, satisfy export scan, regenerate Swift protocol models
* refactor(sessions): replace createdBy with createdActor
* fix(protocol): export session row type
* fix(sessions): preserve proven creation provenance
* fix(sessions): close lineage creation gaps
* test(sessions): align atomic spawn lineage coverage
* test(sessions): widen transcript search reconcile wait
* fix(sessions): stamp reset-created rows
* test(sessions): keep reset provenance coverage focused
* fix(sessions): journal chat-created rows
* test(ci): anchor release skill reads to repo
* test(ci): avoid cached module paths
2026-07-22 22:54:31 -04:00
metaforismo
c876d9917d
fix(ios): show full multiline Markdown list items ( #112723 )
2026-07-22 22:18:18 -04:00
Jason (Json)
7eec1345f9
fix(gateway): preserve Control UI access across device-auth upgrades ( #112558 )
...
* fix(gateway): preserve device auth upgrade recovery
* fix(gateway): satisfy device auth upgrade gates
* fix(doctor): clean disabled device auth bypass
* fix(gateway): recheck migration operator boundary
* fix(gateway): keep migration guard internal
* fix(gateway): preserve insecure migration access
* fix(gateway): reject stale migration handshakes
* fix(gateway): revoke legacy migration sessions
* fix(gateway): bound device-less migration authority
* fix(gateway): require explicit migration pairing
* fix(gateway): revoke alternate migration sessions
* fix(gateway): close migration admission races
* style(gateway): format migration pairing import
* fix(security): audit pending device-auth migration
* fix(gateway): reconcile migration on startup
* fix(gateway): cap device auth migration scopes
* fix(gateway): retain migration socket restrictions
* perf(ui): trim migration startup bundle
* perf(ui): lazy-load device auth migration
* fix(gateway): bind migration completion to approved key
* fix(gateway): preserve migration authorization bounds
* fix(gateway): grant migrated device pairing capability
* fix(ui): preserve device migration bundle budget
* fix(ui): stabilize migration startup budget
* chore(ui): retain startup budget headroom
* fix(ui): split migration overlay helpers
2026-07-22 18:44:48 -06:00
Peter Steinberger
c26b0e0843
feat(android): add OpenClaw settings chat ( #112788 )
2026-07-22 19:29:51 -04:00