Commit Graph

11321 Commits

Author SHA1 Message Date
Galin Iliev c40c08e071 fix(memory): fence brokered runtime during gateway updates 2026-08-19 11:04:47 -07:00
Galin Iliev cee07605ec docs(memory): record separate-cell proof 2026-08-19 10:33:04 -07:00
Galin Iliev e2a3c688db feat(memory): isolate scoped runtime in broker 2026-08-18 18:09:00 -07:00
Galin Iliev c872b1b6ef feat(memory): add enterprise identity operations 2026-08-18 18:04:57 -07:00
Galin Iliev 7879db09fd feat(memory): complete explicit sharing and postbox 2026-08-18 18:02:05 -07:00
Galin Iliev 73fd65c2df feat(memory): bind postbox deposits to verified turns 2026-08-18 17:59:12 -07:00
Galin Iliev 93d50ddee8 feat(memory): seal derived artifact lineage 2026-08-18 17:58:47 -07:00
Galin Iliev 0d20184587 feat(memory): retain transcript policy lineage 2026-08-18 17:53:21 -07:00
Galin Iliev a352d639f7 feat(memory): add authorized write lifecycle 2026-08-18 13:02:38 -07:00
Galin Iliev 80be8c88cc docs(memory): mark Phase 1D complete 2026-08-18 13:02:02 -07:00
Galin Iliev 0320a4fb02 feat(memory): confine filesystem and egress 2026-08-18 13:02:02 -07:00
Galin Iliev 4449aee2d2 fix(memory): complete Phase 1C read isolation 2026-08-18 12:52:46 -07:00
Galin Iliev ecbe94b81f wip(memory): checkpoint Phase 1C read isolation rebase 2026-08-18 12:52:23 -07:00
Galin Iliev 95ef18ce8c feat(memory): add scoped store and policy foundation 2026-08-18 12:48:34 -07:00
Galin Iliev 1042984b7d feat(memory): bind verified DM identities to session subjects 2026-08-18 12:48:15 -07:00
Galin Iliev a6f72e3e0a feat(plugin-sdk): add memory authorization contract 2026-08-18 12:46:51 -07:00
Galin Iliev 121623a7fd docs(memory): record Phase 0 compatibility proof 2026-08-18 12:46:18 -07:00
Galin Iliev 04d044f9d3 docs(memory): keep latency proof pending 2026-08-18 12:46:18 -07:00
Galin Iliev b7341e4fc3 docs(memory): mark Phase 0 evidence complete 2026-08-18 12:46:18 -07:00
Galin Iliev a2ca5c1c8a docs(memory): align Phase 0 shadow definition of done 2026-08-18 12:46:18 -07:00
Galin Iliev 6c42369e9a docs(memory): add implementation plan glossary term 2026-08-18 12:46:18 -07:00
Galin Iliev fb5d1883b8 docs(memory): repair phase plan metadata 2026-08-18 12:46:18 -07:00
Galin Iliev a03cd95bd8 docs(memory): make plan phase headings unique 2026-08-18 12:46:18 -07:00
Galin Iliev 938ee16e8e docs(memory): align Phase 0 capability declaration 2026-08-18 12:46:18 -07:00
Galin Iliev c7f6316803 docs(memory): complete Phase 0 capability example 2026-08-18 12:46:18 -07:00
Galin Iliev b928136faa docs(memory): align Phase 0 shadow boundary 2026-08-18 12:46:18 -07:00
Galin Iliev 0cc4509319 docs(memory): defer trusted context factory to phase 1a 2026-08-18 12:46:18 -07:00
Galin Iliev 51fdc22cd7 docs(memory): retire QMD runtime references 2026-08-18 12:46:18 -07:00
Galin Iliev 883631ce0f docs: add multiplayer memory design 2026-08-18 12:46:18 -07:00
Galin Iliev 5af6ed1dc4 docs: add multiplayer memory implementation plan 2026-08-18 12:46:18 -07:00
Peter Steinberger d5aff660a2 fix(codex): keep large AGENTS.md instructions visible (#125966)
* fix(codex): raise native project doc budget

Default OpenClaw Codex threads to a bounded 128 KiB aggregate project-document budget so large AGENTS.md chains remain visible. Preserve explicit ordinary-thread overrides and keep restricted or lightweight turns at zero.

* test(codex): refresh project doc config expectations
2026-08-18 12:39:52 -07:00
Peter Steinberger bb92dc61c8 fix: stop --tag main from failing during npm pack (#125949)
* fix: refuse unsupported OpenClaw source package updates

* refactor: narrow main update refusal
2026-08-18 12:22:45 -07:00
Peter Steinberger c1527822ce feat: add dashboard fullscreen modes (#125806)
* feat(ui): add dashboard fullscreen modes

* docs(ui): document dashboard fullscreen modes

* fix(ui): scope dashboard fullscreen lifecycles

* test(ui): align dashboard e2e grant fixture

* fix(ui): surface dashboard document load failures
2026-08-18 12:09:07 -07:00
Peter Steinberger 5301fb5e7f fix(codex): preserve harness trajectories (#125941) 2026-08-18 11:47:09 -07:00
Peter Steinberger 97a4d324f5 fix(gateway): allow non-admin cloud sessions (#125787)
* fix(gateway): allow non-admin cloud sessions

Admin-provisioned shared runners are now usable by operator.write while raw environment, config, and pairing controls remain admin-only.

Closes #125602

* chore(test): prune assertion safety baseline

* refactor(gateway): isolate cloud reclaim lifecycle

* test(gateway): declare Codex dispatch ownership

* test(ui): cover session-scoped cloud cleanup

* perf(ui): trim tooltip startup path

* fix(gateway): fence cloud placement activation

* test(gateway): update move recovery dispatch contract

* fix(gateway): fail closed on placement recovery

* docs(gateway): explain fail-closed move recovery

* refactor(gateway): consolidate session mutation target keys
2026-08-18 11:33:54 -07:00
Peter Steinberger ef22410985 refactor(protocol): remove beta-only expectedRunId from chat.send (#125921)
The Gateway owns start-or-steer at admission (6515f6a255) and no
client produces expectedRunId anymore (d84a910fc8). The field shipped
only in v2026.8.1-beta.2 - never a stable tag - so it is removed rather
than deprecated. Steer sends resolve the selected session's current
operation; the exact-match branch, the operation|run target identity
discriminator, run_mismatch rejection, and the suggestion producers'
active-run-id selection (with its ambiguity failure) are deleted.
Provider-native turn fencing (Codex expectedTurnId) is unchanged:
the backend-captured runId on the injection target remains.
2026-08-18 11:28:36 -07:00
Peter Steinberger 3a96fbd64d feat(canvas): present widgets on native device panels (#125818)
* feat(canvas): present widgets on native panels

* refactor(agents): inline gateway caller selection

* fix(canvas): restrict widget panels to macOS

* refactor(agents): reuse resolved spawn workspace
2026-08-18 11:05:41 -07:00
Peter Steinberger 0684f50136 fix(gateway): harden hook admission and shutdown (#125893)
* fix(gateway): harden hook admission and shutdown

Flush structured 413 and 408 hook responses before closing oversized or timed-out request sockets, and reject deferred wake requests that target an explicit session.

Direct Gateway close now marks startup and readiness as draining immediately and attempts every HTTP listener shutdown before reporting an incomplete close.

* test(gateway): model request destruction in fuzzing

Give the HTTP request fuzz double the IncomingMessage destroy contract exercised after 413 and 408 responses finish.

* fix(gateway): preserve response and shutdown bounds

Route installed webhook body-limit failures through the shared response-first close owner and require complete Feishu 413/408 responses before terminal connection closure.

Retain the current-main grace bound for agent-harness disposal so one stuck harness cannot block listener teardown.

* test(telegram): model response-close request cleanup

Keep the slow-body request alive through response finish, then assert cleanup when the mock response transport closes.
2026-08-18 10:39:56 -07:00
Dallin Romney 1a2af5c690 fix(exec): isolate interactive shell env imports (#125624) 2026-08-18 10:06:19 -07:00
Peter Steinberger 5f65ef8138 feat: add A2UI widgets to session boards (#125803)
* feat: add A2UI board widgets

* fix: harden A2UI board widget integration

* fix: repair A2UI CI contracts

* fix(canvas): keep native A2UI pushes on v0.8

* fix(canvas): support board-only widgets without file host
2026-08-18 09:08:45 -07:00
Peter Steinberger 13e3d4535b fix(agents): finalize guided creation safely (#125768)
* fix(agents): finalize guided creation safely

Run channel post-write hooks only after config publication, defer portable auth copying until agent creation succeeds without overwriting newer credentials, and provision existing workspaces before publishing updates.

Keep JSON-only guided creation interactive while routing wizard output to stderr so stdout remains one machine-readable summary.

* fix(terminal): preserve note call signature

* fix(agents): pass committed config to setup hooks

* ci: split heavy codex changed-test shards

Cap non-isolated Codex extension processes at 20 files so 4-vCPU changed-target jobs do not starve real-time watches or hit the no-output watchdog.

* test(ci): align codex shard cap fixture

* docs(cli): clarify agents add JSON mode
2026-08-18 08:50:01 -07:00
Peter Steinberger 8dd0434f86 fix(config): redact plugin secrets and preserve safe mutations (#125753)
* fix(config): secure CLI reads and mutations

Use exact plugin metadata for config get redaction, reject impossible SecretRef provider bindings in canonical validation, preserve include CAS provenance, and skip destructive authored no-op rewrites.

* fix(config): preserve inactive SecretRef startup

Keep normal Gateway validation scoped to active secret owners while strict config validation and write paths reject impossible provider/source bindings, including authored no-ops.

* fix(gateway): preserve config patch no-op

Keep unchanged Gateway config.patch requests on the existing no-op path; strict validation remains owned by actual config writes and the config CLI mutation surfaces.
2026-08-18 08:37:21 -07:00
Peter Steinberger c77feb00f3 feat(ui): move session filter to a global sidebar toolbar (#125690)
* feat(ui): promote session controls to toolbar

* test(ui): add session toolbar proof capture script

* chore: register session toolbar proof script

* test(ui): target ungrouped session drop zone

* fix(ui): trim session toolbar startup cost

* docs(ui): point new-session guide at the Sessions toolbar

Also name the accepted tradeoff for the inert ungrouped-collapse preference at the partition site (ClawSweeper P1/P3 response).

* test(ui): deflake new-session workspace-memory e2e

Menu-geometry assertions now measure relative to the picker anchor in one atomic evaluate (immune to unrelated page settles, still catches focus-induced moves). The post-reload refill raced the composer's async draft restore, which appended the stored draft to the typed text; waiting for the restored draft asserts the documented persistence instead. Failed CI shard checks-ui-e2e 5/12 on runs 32122284238 attempts 1-2.

* fix(ui): use canonical session owner filter state

* chore(ui): keep session toolbar proof artifacts ignored
2026-08-18 08:09:57 -07:00
Peter Steinberger 8131f56cb1 fix(ui): show progress cards on session links (#125733) 2026-08-18 07:58:52 -07:00
Peter Steinberger bdbb0444ee fix: share Control UI terminals with chat agents (#125758)
* fix: share Control UI terminals with chat agents

* fix: terminate canceled shared terminal opens

* perf(ui): keep terminal binding behind lazy boundary

* perf(ui): reuse terminal session scope for bottom dock

* perf(ui): reuse session route decision

* fix: keep shared terminal cleanup server-owned

* fix: preserve shared terminal session identity
2026-08-18 07:51:48 -07:00
Peter Steinberger c7022eb117 feat: nudge progress cards only when visible (#125701)
* feat(agents): gate progress card adoption nudge

* fix(agents): gate progress-card nudge on tool policy

* fix(agents): keep tool factory within lint budget
2026-08-18 07:42:20 -07:00
Josh Lehman eeed2c92cf fix(upgrade): repair stable state before gateway startup (#125483) 2026-08-18 07:40:01 -07:00
Peter Steinberger 6515f6a255 refactor(steering): gateway-owned atomic start-or-steer (#125808)
* refactor(steering): gateway-owned start-or-steer via one captured-operation lifecycle

chat.send with queue mode steer now atomically captures the selected
session's current direct reply operation under the writer barrier and
injects into exactly that operation; with no direct owner it starts a
new run instead of failing with active-leaf-changed. Client-supplied
expectedRunId keeps exact-match semantics; the transcript-branch CAS
(expectedLeafEntryId) now guards only non-steer sends.

All three steering paths (gateway chat.send, channel queue steering,
server /steer) share one begin/finalize lifecycle on the reply-run
registry, including the captured-instance abort from 5a15e1a39c.
Deleted: the duplicate accepted/rejected/unconfirmed policy machine in
steer adoption, the raw embedded /steer runtime path, the leaf-bound
injection identity and reject-before-ack compat, and the dead target
tool-authority fingerprint. messageInjectionAttempted becomes a typed
messageInjectionDisposition (none | accepted | rejected); rejected
injections take one visible followup fallback, so non-injectable
runtimes queue instead of silently dropping.

Deliberate semantics: a registry-less active embedded run is no longer
steered by raw session id (correlation-only authority) - the message
becomes a visible followup; /steer injects under its own command
authorization instead of the inbound tool-authority gate it could
never satisfy.

* docs(protocol): describe gateway start-or-steer contract for chat.send

Targetless steer is no longer a leaf-bound compatibility path that can
reject with active-leaf-changed; it targets the selected session's
current state (inject into the direct run, else start a turn).
expectedRunId stays an exact-run fence; expectedLeafEntryId is the
non-steer transcript-branch CAS.

* fix(steering): require matching tool authority for /steer injection

The authorized-sender command gate is weaker than tool-authority equality. Make /steer and gateway injection present the same projected evidence as channel steering so mismatches fall back to a normal prompt under the sender’s own authority.
2026-08-18 07:33:46 -07:00
Peter Steinberger 4048ae26e0 feat: credit linked session participants as Git co-authors (#125827)
* feat: credit linked session participants as co-authors

Authenticated profiles can link GitHub and receive automatic co-author credit in shared coding sessions.

* style: format rebased co-author registries

* fix: mark profile schema DDL boundary
2026-08-18 07:15:01 -07:00
Dallin Romney adf2ca46bb chore(release): refresh generated preflight artifacts (#125586) 2026-08-18 07:10:49 -07:00