Commit Graph

10708 Commits

Author SHA1 Message Date
Dallin Romney e323d862cb ci: persist extended-stable Docker completion 2026-08-10 17:17:01 +08:00
Dallin Romney 5ce4cf8319 ci: publish extended-stable GitHub releases 2026-08-10 17:17:01 +08:00
Ayaan Zaidi 2d627a0c25 feat(skills): repair used skills in turn (#121522)
* feat(skills): repair used skills in turn
* fix(skills): bind repair to used skill receipt
* fix(skills): preserve explicit repair review

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-10 14:42:41 +05:30
Peter Steinberger a77dd02a04 fix(plugin-sdk): restore API baseline manifest (#121527) 2026-08-10 02:02:12 -07:00
Peter Steinberger 51a78b2924 fix(update): keep countdown stable during active work (#121504) 2026-08-10 01:29:41 -07:00
Ayaan Zaidi 7d4d02fff0 feat(skills): improve used skills autonomously
Teach the semantic reviewer to improve skills the agent actually used, keep review input provider-bound, and preserve bounded deterministic retries.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-10 13:50:33 +05:30
Ayaan Zaidi 4b0151682e refactor(commitments): remove inferred follow-up subsystem
Remove hidden follow-up extraction, heartbeat delivery, CLI, docs, and supporting tests/tooling. Existing commitment records remain inert pending separately approved cleanup.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-10 13:48:32 +05:30
Peter Steinberger bcf342903f refactor: finish export shadow hazard renames (#121471)
* refactor(gateway): distinguish pending node handlers

* refactor(approvals): distinguish button presentation builder

* refactor(daemon): distinguish service home resolver
2026-08-10 01:01:20 -07:00
Peter Steinberger 7954dde7cc fix(cloud-workers): support large Git workspaces (#121262)
* fix(cloud-workers): support large git workspaces

* test(cloud-workers): track workspace temp dirs

* refactor(cloud-workers): keep inventory helpers internal
2026-08-10 00:56:48 -07:00
Peter Steinberger da2684b890 fix: serialize onboarding and plugin installation (#121482)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 00:49:25 -07:00
Peter Steinberger f6298bf84d fix(workers): preserve disappeared-worker failures across restarts (#121122)
* fix(workers): persist placement terminal failures

* fix(workers): refresh placement protocol clients

* refactor(workers): isolate error formatting

* fix: integrate cloud terminal state with current main

* chore(plugin-sdk): refresh API baseline

* refactor(ui): inline one-use cloud terminal-reason banner helper

Keeps the Control UI startup JS bundle inside its 317 KiB gzip budget
(the helper + type-only import tipped it by 16 bytes).

* refactor(ui): trim terminal-reason lookup to type-erased optional access

Recovers the last gzip byte of the Control UI startup budget
(324609 B vs the 324608 B limit).
2026-08-10 00:36:52 -07:00
Peter Steinberger e4b617300d refactor(macos): remove obsolete Gateway startup probe (#121439)
* refactor(macos): remove dead gateway command builder

* chore(i18n): refresh native inventory after gateway-env cleanup
2026-08-10 00:19:23 -07:00
Peter Steinberger e0262e6aa4 feat(ui): add people session sorting (#121470)
* feat(ui): add people session sorting

Offer People sorting in the Control UI session sidebar when the Gateway reports multiple session-sharing identities.

* fix(ui): restore sidebar translation dependency

* fix(ui): preserve session sort ordering contracts
2026-08-10 00:18:02 -07:00
Sarah Fortune a968d15f63 feat(slack): enable Enterprise Grid identity, DMs, routing, actions, approvals, and presence (#121373)
* refactor(slack): detect Enterprise Grid installs at runtime

* fix(slack): preserve enterprise bot identity

* style(slack): format enterprise identity test

* fix(slack): scope enterprise config by workspace

* fix(slack): preserve qualified binding casing

* feat(slack): enable enterprise presence polling

* fix(slack): normalize enterprise binding accounts

* fix(slack): require workspace-scoped Grid targets

* docs(slack): document Enterprise policy target forms

* fix(slack): preserve Grid pairing workspace scope

* refactor(slack): simplify scoped target formatting

* fix(slack): repair Enterprise Grid CI checks

* chore: refresh generated Slack metadata

* refactor(slack): simplify optional workspace scope

* test(slack): infer installation state handle types

* chore: resolve plugin SDK baseline conflict

* fix(ci): regenerate plugin SDK API baseline on Linux

* fix(slack): allow standalone workspace sends

---------

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
2026-08-10 07:10:06 +00:00
Peter Steinberger 145ec3778f refactor(agents): consolidate failover classification into one substrate (#121341)
* refactor(agents): consolidate failover classification substrate

* chore(agents): align failover refactor guards

* fix(agents): preserve leading 429 status handling

* perf(agents): retain lazy failover hook gating

* chore(agents): refresh failover guard artifacts
2026-08-09 23:58:44 -07:00
Peter Steinberger 3621c4b511 feat: browse and start sessions inside agent workspaces (#121417)
* feat(gateway): allow workspace-contained browsing

* fix(ui): preserve canonical workspace selections
2026-08-09 23:57:46 -07:00
Peter Steinberger a6a464f4c0 feat(terminal): fullscreen /terminal route and dot-matrix claw intro (#121451)
* feat(ui): add fullscreen /terminal route and open button

* feat(terminal): dot-matrix claw intro banner and CLI mascot

* fix(terminal): satisfy lint and wizard-header assertions for the new mascot

* ci: account for fullscreen terminal startup bytes

* test(terminal): split session manager coverage
2026-08-09 23:52:59 -07:00
Peter Steinberger 23d1eca455 refactor(sessions): enforce transcript writer fence in sqlite sync ops (#121316)
Fold the writer-claim fence into the four sync write ops at their
definition sites, collapse the logical-layer fence wrappers to plain
re-exports, delete the session-accessor.sqlite middle barrel (the only
unfenced escape hatch), and retarget its 26 importers to the focused
defining modules. replaceSessionEntrySync intentionally stays unfenced:
its two production callers own their freshness guards and its return
carries no rebound signal. Net -106 production LOC, behavior-neutral.
Part 1 of the session-accessor dual-layer collapse.
2026-08-09 23:16:57 -07:00
Peter Steinberger eb9cac065f fix(security): unify secret-redaction and SSRF policy ownership (#121335)
* fix(security): unify secret-redaction and SSRF policy ownership

Memory-host errors now redact through the canonical redactor (payment/card/CVV
coverage included) via the existing core facade instead of a stale local
pattern table; ACP error redaction is wired through a single barrel so the
injected canonical redactor no longer depends on module load order, and the
acp-core fallback table shrinks to the minimal standalone set (structured
auth-header patterns proven load-bearing stay). The memory-host SsrFPolicy
structural copy is deleted in favor of the canonical src/infra/net/ssrf.ts
type re-exported through the network facade.

* fix(build): keep memory-core doctor closure execa-free

Import the canonical redactor directly from src/logging/redact.js instead of
the openclaw-runtime-io facade (which reaches execa through the full runtime
graph), and regenerate the plugin SDK API baseline for the intentional
canonical-SsrFPolicy surface change.

* fix(security): merge operator redact patterns with defaults in injected redactors

ClawSweeper found that ACP injected the general redactor, where nonempty logging.redactPatterns replace the built-in provider-token patterns. Use the tool-payload redactor for ACP and memory-host error formatting so operator patterns extend defaults and redaction remains forced for these security boundaries.
2026-08-09 22:40:58 -07:00
Peter Steinberger 8ee945b907 refactor(channels): flatten channel-turn dispatch naming layers (#121308)
* refactor(channels): flatten channel turn dispatch naming

* docs(plugin-sdk): narrow inbound reply compat guidance

* docs(channels): point stale references at turn defining modules

* fix(channels): preserve dispatch contracts after flattening

* chore(plugin-sdk): ratchet surface budgets after flattening

* chore(channels): ratchet removed export collisions

* fix(plugin-sdk): restore inbound reply compat exports

Restore eight still-existing legacy callable re-exports from canonical SDK seams and cover the deprecated package subpath with a table-driven compatibility test.

Raise the public export, callable export, and deprecated export budgets by exactly eight; the three maintainer-authorized zero-consumer symbols remain removed.

* test(channels): split channel turn kernel coverage

Replace the oversized kernel test with independently mocked delivery, pipeline, and finalize suites, preserving all 51 tests while removing the max-lines suppression and stale ratchet entry.

* chore(plugin-sdk): refresh inbound reply API hash

* fix(ci): align channel turn review fixes

Restore the test-local DeliveryResult type removed during the split.

Ratchet the public export, callable export, and deprecated export budgets by exactly seven: six channel-inbound plus one channel-outbound legacy re-export.
2026-08-09 22:22:46 -07:00
Patrick Erichsen d4c3b9e783 refactor(sessions): remove custom icon feature (#121263)
* refactor(sessions): remove custom icon feature

* test(sessions): expect legacy icons to be stripped

* fix(gateway): preserve retired icon request compatibility

* chore(plugin-sdk): refresh API baseline

* fix(plugins): reserve retired session icon slot
2026-08-10 04:51:56 +00:00
Peter Steinberger 8ab7ac54e2 docs: align prompt-overlay, truncation, and pruning docs with shipped behavior (#121324)
* fix(openai): describe personality as the canonical GPT-5 style toggle

The shipped config-schema description told operators and models to prefer
agents.defaults.promptOverlays.gpt5.personality, a retired key that config
validation rejects and doctor deletes. plugins.entries.openai.config.personality
is the only live reader (src/agents/gpt5-prompt-overlay.ts).

* docs: align prompt-overlay, truncation-notice, and pruning docs with shipped behavior

- teach plugins.entries.openai.config.personality as canonical; retired
  agents.defaults.promptOverlays noted as rejected/migrated
- replace nonexistent agents.defaults.bootstrapPromptTruncationWarning with
  prose describing the built-in always-on notice
- reword session-pruning internal constants as built-in behavior, name the
  real contextPruning config surface
- delete stale/orphan pages (path3 harness for a never-committed script,
  superseded swarms plan, landed path3 artifact-family scoping note)
- fix dead paths in reference/test.md and concepts/typebox.md

* docs: describe the embedded truncation notice as compact

The embedded runtime injects buildBootstrapPromptWarningNotice, which
deliberately omits file names and sizes; per-file diagnostics stay in
/context, status, and logs. Addresses ClawSweeper P2 on #121324.

* docs: doctor migrates the retired personality key instead of removing it

Main landed #121346 mid-flight: doctor --fix now moves
agents.defaults.promptOverlays.gpt5.personality into
plugins.entries.openai.config.personality when unset.
2026-08-09 21:41:43 -07:00
Ayaan Zaidi 6626a85dc1 fix(telegram): keep disabled progress hidden in verbose mode
Telegram now treats disabled tool progress as authoritative even when /verbose is enabled. Enabled progress and durable/final messages retain existing behavior.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
Co-authored-by: Jason O'Neal <jason.allen.oneal@gmail.com>
Co-authored-by: 徐金城0668000897 <xu.jincheng@xydigit.com>
2026-08-10 09:52:19 +05:30
Peter Steinberger 232281fc74 perf(skills): reuse unchanged sandbox skill snapshots (#121379)
Gate reuse on the watcher-owned snapshot version and persisted entry manifest, while keeping safe paths process-owned and reconciling only changed skills.

Cache config fingerprints by object identity and reset them at the applied-config lifecycle owner.
2026-08-09 21:00:05 -07:00
Peter Steinberger 1367e9a79f refactor(packages): collapse duplicate type surfaces (#121340)
* refactor(packages): collapse duplicate type surfaces

* chore(generated): refresh package contract artifacts
2026-08-09 20:45:15 -07:00
Sarah Fortune 176716da74 fix(slack): support native slack approvals on enterprise grid (#120942)
* fix(slack): support Grid native approvals

* test(slack): tighten Grid approval validation

* fix(slack): pass Grid scope to native approvals

* fix(slack): narrow Grid approval event scope

* refactor(slack): centralize optional approval scope

* refactor(slack): reuse approval target formatter

* refactor(slack): use generic target formatter

* refactor(slack): centralize explicit target formatting

---------

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
2026-08-10 03:42:59 +00:00
ClawSweeper eab26ec439 fix(microsoft-foundry): write canonical image model config (#121370)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-09 20:40:11 -07:00
Peter Steinberger 914f73ac99 docs: replace retired config keys with canonical schema keys (#121330) 2026-08-09 20:30:43 -07:00
Peter Steinberger 578e92d333 fix(sessions): single patches no longer scan the whole store (#121349)
* perf(sessions): avoid full-store single patches

Single-session non-label patches no longer materialize the whole session store. Label uniqueness remains store-wide, and stale aliases created while queued are still rejected.

* fix(build): refresh plugin SDK API baseline

Current main's generated manifest lagged merged Plugin SDK surface changes; canonical refresh restores the baseline check.
2026-08-09 20:16:15 -07:00
Peter Steinberger 8430fc0e3b refactor(agents): move spawn family into subagents/spawn (#121350)
* refactor(agents): move spawn family into subagents/spawn

* refactor(agents): keep spawn imports within lint budget
2026-08-09 19:51:29 -07:00
Peter Steinberger f44c5e2e5e fix(plugins): surface manifest-only bundled capabilities (#121354)
Use a manifest-first inventory with independent coverage for manifest-only bundled capabilities.

Retire the undocumented thread-ownership plugin while Doctor removes stale references.

Document Talk voice and persist only provider-scoped voice selection.

Closes #121353
2026-08-09 19:43:49 -07:00
Peter Steinberger ca6a379745 refactor(core): delete duplicate account-id, sleep, and config wrappers (#121312)
* refactor(core): delete duplicate account-id/sleep/config wrappers

* chore(plugin-sdk): refresh API contract baseline

* chore(plugin-sdk): regenerate API baseline after rebase

* chore(lint): ratchet export-name-collision baseline after wrapper deletions
2026-08-09 19:41:30 -07:00
Peter Steinberger 50026f1031 refactor(core): canonicalize record guards on normalization-core (#121331)
* refactor(core): canonicalize record guards on normalization-core

* chore(plugin-sdk): refresh API baseline
2026-08-09 19:05:13 -07:00
Sarah Fortune 732108d973 feat(slack): add workspace routing for Enterprise Grid actions and events (#121014)
* fix(slack): preserve team scope for deferred actions

* refactor(slack): use typed Bolt team context

* refactor(slack): preserve deferred action IDs

* refactor(slack): treat team IDs as opaque

* refactor(slack): keep deferred action diff focused

* fix(slack): enable scoped enterprise interactions

* fix(slack): keep event scope at listener boundary

* test(slack): model Bolt enterprise interaction context

* refactor(slack): normalize listener team context

* refactor(slack): pass modal event scope directly

* test(slack): preserve interaction harness argument types

* refactor(slack): pass shortcut event scope directly

* refactor(slack): pass action event scope directly

* fix(slack): scope enterprise slash commands

* test(slack): disambiguate slash harness scope

* fix(slack): type slash block suggestions

* fix(slack): preserve option text literal

* fix(slack): keep scope helpers private

* fix(slack): fall back from slash response URLs

* fix(slack): clarify Web API post message call

* fix(slack): scope post message lint suppression

* fix(slack): preserve event scope export after rebase

* fix(slack): preserve team-bound modal session routing

* fix(slack): retain modal direct-message routing

* fix(slack): preserve modal delivery compatibility

* docs(slack): mark enterprise tool actions supported

* docs(slack): align enterprise support with runtime

* test(slack): align enterprise interaction registration

* fix(slack): support Grid channel create and rename events

---------

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
2026-08-10 02:02:15 +00:00
Peter Steinberger 9066ba948a fix(gateway): accept tls_certificate in worker-live fallback reason schema (#121285)
* fix(gateway): accept tls_certificate in worker-live fallback reason schema

* chore(gateway): refresh plugin SDK API baseline

* test(gateway): move worker-live failover conformance guard
2026-08-09 18:21:29 -07:00
Peter Steinberger ada95a20c1 docs(concepts): add session synchronization and attachment guide (#121091)
* docs(concepts): add session synchronization and attachment guide

* docs: mark session attachment page schema

* docs: distinguish gateway and local TUI sessions
2026-08-09 18:06:18 -07:00
Jason (Json) 0b663e7a62 fix(plugins): preserve legacy runtime-doctor imports (#121220)
* fix(plugins): preserve legacy runtime doctor imports

* fix(plugins): map legacy doctor package types
2026-08-09 19:01:49 -06:00
Peter Steinberger d7cdb2e60b fix(sessions): fence lifecycle transcript writers (#121284) 2026-08-09 17:55:56 -07:00
Peter Steinberger c71c29ecae fix: preserve exec completion identity across poll and heartbeat (#120575)
* fix(agents): bind terminal polls to exact process

UUID-owned completion receipts and ProcessSession-bound finished snapshots prevent same-slug successor consumption.

* chore(plugin-sdk): refresh API baseline

Refresh declaration-closure hashes for the internal system-event receipt boundary.
2026-08-09 17:18:32 -07:00
Peter Steinberger 08507909ed fix(cli): guard remaining embedded state writers (#121282) 2026-08-09 17:09:35 -07:00
Sarah Fortune 6efd013c25 fix(slack): support Grid reaction and pin event listeners (#120944)
* fix(slack): support Grid reaction and pin events

* refactor(slack): isolate system event routing

* test(slack): align Grid event scope fixture

* refactor(slack): pass optional event scope directly

* fix(slack): support Grid member events

---------

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
2026-08-09 17:07:25 -07:00
Peter Steinberger 055a2dc6ce feat: continue dashboard sessions from CLI URLs (#120893)
* feat(cli): ingest session targets

* refactor(ui): remove gateway scope shim

* docs(cli): document session targets

* fix(cli): classify session target failures

* fix(cli): keep session target result private

* fix(cli): simplify timeout option warning

* build: declare session URL contract dependency

* fix(cli): parse bare session URL options symmetrically

* fix(cli): preserve command-owned URL arguments

* build: keep session URL contract build-only

* fix: address session URL review findings

* test: preserve session key mock exports

* fix: keep session URL helpers internal

* fix(tui): preserve URL agent for global sessions

* fix(tui): keep URL agent input internal

* fix(gateway): reconcile websocket protocol owner

* fix(attach): preserve global session agent ownership

* fix(attach): enforce global owner at grant boundary
2026-08-09 16:44:25 -07:00
Peter Steinberger 1b2920a520 improve(agents): avoid plugin registry rebuilds on auth refresh (#121250)
* perf(agents): reuse prepared plugin generation

* test(agents): verify plugin generation reuse

* test(agents): tighten plugin generation proof

* style(agents): format prepared runtime integration

* chore(plugin-sdk): refresh prepared runtime API baseline
2026-08-09 16:13:28 -07:00
Peter Steinberger 0efd5b4bc9 refactor(channels): move owner policy into plugins (#121257)
* refactor(channels): move owner policy into plugins

* test(plugin-sdk): lower surface budget after export removal
2026-08-09 15:46:18 -07:00
Peter Steinberger 42283cb609 fix: completed tasks no longer block gateway suspension (#121267)
* fix(gateway): close task terminals at run end

* refactor(agents): keep terminal task ownership internal

* test(gateway): type task-owned terminal fixtures

* test(infra): split agent run task ownership coverage
2026-08-09 15:45:44 -07:00
Vyctor H. Brzezowski 95fdce7049 fix(ui): confirm disruptive Control UI updates before they start (#121234)
* fix(ui): confirm disruptive Control UI updates before dispatch

Every Control UI update affordance dispatched `update.run` (or the macOS
bridge `start-update` message) on the first click, so a misclick could
install new code, restart the Gateway, and interrupt active work.

Add one canonical confirmation gate in the Control UI owner boundary and
route the sidebar/settings-sidebar/floating update card and the
Settings -> Updates row through it. The gate owns the copy, the versions,
the restart consequence, the action-specific confirm label, and the
choice between the macOS bridge and `update.run`, so the bridge fork no
longer lives in the card and no surface can drift.

CLI, API, automation, agent-driven paths, automatic update campaigns, and
the `update.run` contract are unchanged.

Addresses the Control UI portion of #117178.

* style(ui): apply oxfmt to update confirmation sources

* perf(ui): load the update confirmation lazily and share its impact copy

Keeps the Control UI startup bundle under its 317 KiB gzip ceiling: the
confirmation dialog only loads when an operator opens it.

* test(ui): drive the update confirmation in sidebar and shell wiring tests
2026-08-09 19:40:06 -03:00
Peter Steinberger ce53f7e82e refactor(agents)!: remove the session write lease (#121113)
* refactor(agents): remove session write lease

* refactor(plugin-sdk): deprecate session write lease

* refactor(doctor): remove session lock checks

* test(agents): remove session lease fixtures

* test(agents): align writer rebound assertion

* refactor(infra): remove retired session lock exports

* test(tooling): preserve embedded abort race shard
2026-08-09 15:30:48 -07:00
Peter Steinberger 096b2764e0 refactor(tests): simplify internal test-only seams (#121243)
* refactor(tests): simplify internal test-only seams

* chore(plugin-sdk): refresh API baseline
2026-08-09 15:14:55 -07:00
Peter Steinberger 6ee409ca7b refactor(commands): share native plugin command merging (#120972) 2026-08-09 14:57:45 -07:00
Peter Steinberger 0ef798d28d fix(gateway): keep hello authorization aligned with RPC access (#120888)
* fix(gateway): separate socket and device token scopes

* chore(i18n): refresh native source baseline

* style(ios): keep gateway channel within lint limit

* refactor(gateway): simplify scope metadata decoding

* ci(ui): isolate real-gateway e2e suites

* docs(ci): align runner table formatting

* chore(plugin-sdk): refresh api baseline

* ci(ui): route real-gateway retries to hosted runners

* chore(plugin-sdk): repair generated api baseline

* test(ui): select Labs toggles by title

* fix(gateway): preserve stored scopes without wire metadata
2026-08-09 14:50:07 -07:00