Commit Graph

72120 Commits

Author SHA1 Message Date
Peter Steinberger 5df966eb0b docs(auto-qa): harden campaign evidence and worker tracking (#113857) 2026-07-25 19:04:05 -07:00
Peter Steinberger 1ae0dfed4d refactor(doctor): split health contributions (#113937)
* refactor(doctor): split health contributions

* refactor(doctor): keep auth flow reviewable

* refactor(doctor): keep config result internal

* refactor(doctor): preserve lazy module boundaries
2026-07-25 19:02:30 -07:00
Peter Steinberger c7fcfd3482 fix(ui): gate chat sidebar mutations (#113947) 2026-07-25 19:01:32 -07:00
Peter Steinberger 25495ad0be fix(ui): focus scoped windows for notification clicks (#113951) 2026-07-25 19:00:50 -07:00
Peter Steinberger 517978a808 refactor(meetings): converge Google Meet probes and adapter parsing (#113970)
* refactor(meetings): converge Google Meet adapters

* fix(meetings): guard manual action category lookup

* fix(meetings): type manual action category map
2026-07-25 19:00:44 -07:00
Peter Steinberger 2bffce62da refactor(agents): share restart recovery state snapshot (#113969) 2026-07-25 18:51:44 -07:00
Peter Steinberger d1aec7d65f fix(control-ui): drop stale Create PR row after merge and surface PR chips mid-turn (#113944)
* fix(control-ui): drop stale Create PR row after merge and surface PR chips mid-turn

* test(gateway): split session-PR branch tests to satisfy max-lines

* test(gateway): drop unused GitContext export from test support
2026-07-25 18:51:07 -07:00
Peter Steinberger 3838d342c2 fix(browser): recover node proxy after failed startup (#113926) 2026-07-25 18:47:11 -07:00
Peter Steinberger 4859d524ed refactor(tasks): classify harness-owned subagent rows without plugin ids (#113964)
* refactor(tasks): classify harness-owned subagent rows without plugin ids

* refactor(plugin-sdk): require taskKind for harness-owned subagent runtimes

* docs(tasks): record harness-ownership invariant at the predicate

* test(plugin-sdk): declare harness task kind in scope fixtures
2026-07-25 18:41:13 -07:00
Peter Steinberger 4f17139bfb test(ui): align sidebar end-to-end coverage with current navigation (#113942)
* test(ui): align sidebar e2e with current navigation

* test(ui): wait for hydrated sidebar agent switcher
2026-07-25 18:40:36 -07:00
Peter Steinberger 1eff642cd2 docs(logging): purge retired redaction key reference (#113963) 2026-07-25 18:38:05 -07:00
Peter Steinberger 5a04a554c4 fix(infra): keep valid exec approvals under same-process lock contention (#113929)
Sync loadExecApprovals fabricated a fail-closed deny policy whenever the
approvals lock was held by an async holder in the same process, which the
Codex app-server gate then misread as configured tools.exec.mode=deny and
killed entire agent runs on fully permissive hosts. Read the committed file
directly in that provably race-free case; cross-process contention, missing,
malformed, and unreadable states stay fail-closed.
2026-07-25 18:37:41 -07:00
Peter Steinberger d42c11ec24 fix(browser): one unresponsive shared tab no longer hangs every browser tool (#113921)
* fix(browser): keep tab enumeration responsive

Read tab titles from browser-process CDP target metadata and skip bounded target-info reads so one wedged tab cannot block the profile.

Fixes #113787

Co-authored-by: CBruney <CBruney@users.noreply.github.com>

* fix(browser): parallelize tab metadata reads

Resolve page target metadata concurrently so multiple wedged tabs consume one bounded timeout window.

Co-authored-by: CBruney <CBruney@users.noreply.github.com>

---------

Co-authored-by: CBruney <CBruney@users.noreply.github.com>
2026-07-25 18:35:19 -07:00
Peter Steinberger 14a6a72153 refactor(config): remove retired diagnostics shapes (#113946) 2026-07-25 18:32:01 -07:00
Peter Steinberger d7ef7fc5a6 refactor(config): promote planTool to canonical tools.updatePlan (#113958)
The update_plan checklist tool has been default-on with no model gating for a
while, so keeping it under tools.experimental misrepresented it and kept a
container key alive for a single boolean. Rename it to a plain boolean
tools.updatePlan (camel-cased tool id, matching tools.agentToAgent and
tools.toolSearch), keeping the !== false default-on semantics.

The strict schema rejects the retired key, so openclaw doctor --fix now lifts
tools.experimental.planTool to tools.updatePlan and deletes the emptied
container. Registration also drops five parameters that were never read
(agentSessionKey, agentId, modelProvider, modelId, pluginToolAllowlist).

Docs: config-tools.md dropped a stale claim that the tool defaults off behind a
strict-agentic GPT-5 rule that no longer exists, experimental-features.md no
longer lists the tool and now cites the real Codex app-server floor (0.143.0,
per MIN_CODEX_APP_SERVER_VERSION).

Config baseline core count drops 2307 -> 2306.
2026-07-25 18:31:23 -07:00
Peter Steinberger 9349a0e880 fix(ui): give running tasks priority in the background-tasks rail (#113928) 2026-07-25 18:30:03 -07:00
Peter Steinberger 467d1d1f11 fix(ui): stop claiming a gateway restart when toggling dreaming (#113960)
The dreaming toggle writes `plugins.entries.<memoryPluginId>.config.dreaming.enabled`,
which matches the `{ prefix: "plugins", kind: "hot" }` reload rule in
src/gateway/config-reload-plan.ts, so `restartGateway` stays false and no restart
ever happens. The confirmation modal nonetheless showed a red danger callout
promising a Gateway restart that "may temporarily interrupt chats, automations,
and connected channels".

Replace it with an accurate confirmation that states the real consequence:
dreaming is global, so the single managed cron sweep it schedules covers every
configured agent workspace (resolveMemoryDreamingWorkspaces iterates all agent
entries), not just the agent whose page the panel is on. Copy is now
direction-aware, since turning it off is the consequential direction.

Renames the i18n block from `dreaming.restartConfirmation` to
`dreaming.toggleConfirmation` and the component from `restart-confirmation.ts`
to `toggle-confirmation.ts`; memory-panel was its only caller. No runtime or
server behavior changes.
2026-07-25 18:29:10 -07:00
Peter Steinberger 977c8e9d37 refactor(policy): drop retired redactSensitive doctor remediation (#113961)
Sensitive log redaction became unconditional and `logging.redactSensitive`
was retired from the config schema, but the policy doctor still classified
`dataHandling.sensitiveLogging.requireRedaction` as an automatic repair that
would have written the retired key back into config.

Remove the automatic repair (check-id registration, patch branch, and the
`enableSensitiveLoggingRedaction` writer), drop the `logging.redactSensitive`
config target, and reclassify the check as `validateOnly`. The check keeps
evaluating the policy declaration against the redaction invariant; it just no
longer claims a fixable config target. Refresh the policy docs, the finding
fix hint, and a stale comment in `src/logging/redact.ts`.
2026-07-25 18:27:31 -07:00
Peter Steinberger 7c34185ac2 fix(browser): preserve lazy tool output schema (#113925) 2026-07-25 18:26:55 -07:00
Peter Steinberger 3a72688ce6 test(codex): preserve realtime test owner (#113962) 2026-07-25 18:25:17 -07:00
Peter Steinberger 1e20cc814e docs: retire config keys that strict validation rejects (#113956)
* docs: correct retired cron/audit config keys, cron failure-alert default, memory recall default, and tool-search telemetry claims

- configuration-reference: cron block documented cron.webhook and cron.failureDestination, both retired by the config-surface reduction tranches (58452de711, edecdbd05e); the cron schema is strict so a copied snippet is rejected. Document only the live keys and note the doctor --fix migrations.
- configuration-reference: root-level audit block is retired; canonical path is logging.audit (src/config/zod-schema.root-shape.ts).
- configuration-reference: cron.failureAlert.after default is 2, not 3 (src/cron/service/failure-alerts.ts).
- memory-config: rememberAcrossConversations defaults on for personal installs (packages/memory-host-sdk/src/host/config-utils.ts), matching the canonical table earlier in the page.
- tool-search: telemetry records catalogSize, per-source counts, and search/describe/call counts, and only on tool_search_code results. No byte accounting exists in the runtime.

* docs: retire remaining references to removed cron, audit, and logging config keys

Sweep follow-up to the previous commit, covering the same bug class in the pages that still contradicted it.

- cron-jobs/cli-cron: global cron.failureDestination is retired; the destination fields now live on cron.failureAlert (src/config/zod-schema.root-shape.ts, merged by legacy-config-migrations.runtime.retired.ts:379). Per-job delivery.failureDestination bullets left intact.
- gateway/audit, cli/audit, gateway/protocol: root-level audit.* is retired; canonical path is logging.audit.*.
- logging: logging.redactSensitive is retired (dead-config-keys.test.ts:198; removed by legacy-config-migrations.runtime.tier-eval.ts:12). resolveConfigRedaction hardcodes DEFAULT_REDACT_MODE = tools, so redaction is unconditional. Also documented that redactPatterns replaces the defaults on the log path (redact.ts:419) while tool payloads always merge them.
- logging: consoleStyle accepts only pretty|json (zod-schema.root-shape.ts:106); compact remains the automatic non-TTY rendering style (logging/console.ts:40) but is no longer settable, and doctor maps a stored one to pretty.
- security: security --fix no longer touches redaction and the logging.redact_off audit check is retired (src/security/audit-loopback-logging.test.ts asserts it never fires).

* chore(docs): regenerate docs map after retired-key cleanup
2026-07-25 18:24:02 -07:00
Peter Steinberger 6d6f36a8a5 refactor(memory-core): separate dreaming state codec ownership (#113949) 2026-07-25 18:22:44 -07:00
Peter Steinberger 4596fd2dd2 feat(ci): weekly Codex sweep for date-carrying to-dos (#113914)
* feat(ci): weekly Codex sweep for date-carrying to-dos

Mondays 06:23 UTC (plus default-branch-only manual dispatch with
dry_run): a deterministic prefilter collects candidate lines where
to-do markers co-occur with date tokens, plus every deprecated compat
record from the plugin registry; a pinned openai/codex-action step
judges each candidate in context (genuine dated commitment vs
historical date or fixture) and writes an OVERDUE / DUE-30-days /
FUTURE report; a separate privileged job validates the report (tracked
file:line locations, date shape, inert text) and upserts one
marker-tagged tracking issue via the Barnacle app token, commenting
only when items newly become due.

The app token is minted on a fresh runner and checkout — never beside
Codex or its child processes; only the validated report artifact
crosses jobs. No permission-* subsets on token minting (installations
reject explicit subsets; see pr-ci-sweeper).

* chore(ci): localize upsert helpers with no external consumers
2026-07-25 18:18:06 -07:00
Peter Steinberger 360fe2317c feat(ui): person grouping and people filter in the sidebar catalog view menu (#113943) 2026-07-25 18:17:12 -07:00
Peter Steinberger 33876991e7 fix(ui): stop false critical alerts for the selected session (#113932) 2026-07-25 18:12:05 -07:00
Peter Steinberger caa01f4f5b refactor(providers): table-driven forward compat and manifest-derived contract tests (#113940)
* refactor(providers): share family forward compat resolution

* test(providers): derive runtime contracts from manifests

* test(providers): validate manifest fixture inputs

* refactor(zai): narrow forward compat inputs
2026-07-25 18:09:37 -07:00
Peter Steinberger 463a57c8e0 refactor(agents): share media reference access resolution (#113931) 2026-07-25 18:09:35 -07:00
Peter Steinberger 8b9314b7e6 refactor(protocol): split gateway protocol registries (#113941) 2026-07-25 18:03:42 -07:00
Peter Steinberger cb099f5193 refactor(daemon): split Windows scheduled task service (#113934)
* refactor(daemon): split scheduled task service

* refactor(daemon): narrow scheduled task internals
2026-07-25 18:03:32 -07:00
Peter Steinberger 908e181f3f test(kimi): align K3 public policy fixture (#113936) 2026-07-25 17:48:34 -07:00
Peter Steinberger fb26903d6c feat: add flexible multi-sidebar chat layout (#113712)
* feat(ui): add persisted sidebar layout model

* feat(ui): render flexible chat sidebar columns

* test(ui): align board sidebar fixture type

* fix(ui): preserve sidebar panels across responsive layout

* fix(ui): satisfy sidebar CI ownership and performance

* test(ui): derive discussion helpers from panel config

* test(ui): mount session rail through its registry

* fix(ui): preserve sidebar state across projections

* style(ui): format sidebar state fixes

* fix(ui): satisfy sidebar lint constraints

* refactor(ui): break sidebar layout import cycle

* fix(ui): stabilize sidebar panel rendering

* fix(ui): keep the narrow sidebar grid off for an empty layout

The two-row narrow grid reserved a panel row even with no sidebar panel open, halving the primary surface height on every default mobile chat pane.

* fix(ui): lazy-load chat sidebar region

* style(ui): format rebased chat state page

* chore(ui): raise sidebar startup baseline

* fix(ui): preserve sidebar move and resize state

* chore(ui): align sidebar startup baseline

* chore(ui): refresh sidebar startup baseline

* test(ui): register discussion element in isolated test

* fix(ui): persist the dragged panel as the collapsed active panel

Drag moves activated the panel in its destination column but left the separate persisted collapsed-mode selection stale, so the narrow layout foregrounded the wrong panel after a move and the stale choice survived reload.

* fix(ui): preserve resolved canvas URL in detail panel
2026-07-25 17:45:29 -07:00
Peter Steinberger c539c77057 fix(ios): expose expandable chat agent identity (#113917) 2026-07-25 17:42:17 -07:00
Colin Johnson de9ed64c29 feat(talk): enable GPT Live with Codex OAuth (#113354) 2026-07-25 20:41:27 -04:00
Ayaan Zaidi e889fb47a7 fix(cron): close browser tabs after isolated runs (#113566)
* fix(cron): clean browser tabs by run session

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-26 00:34:44 +00:00
Peter Steinberger e25dbf6214 test(agents): update diagnostic capture fixture (#113922) 2026-07-25 17:21:55 -07:00
Peter Steinberger 34ee065bf3 fix(ui): render close icon in image lightbox header (#113913) 2026-07-25 17:16:29 -07:00
Peter Steinberger 93a0fdb9b8 fix(release): align extension validation contracts (#113919) 2026-07-25 17:07:51 -07:00
Peter Steinberger e3fc8527ce fix(models): preserve empty machine-readable model lists (#113897) 2026-07-25 17:02:15 -07:00
Peter Steinberger 3cec82e145 feat(kimi): add first-class Kimi K3 support (#113909) 2026-07-25 16:48:10 -07:00
Peter Steinberger 9defe24ec2 fix(chat): restore canonical native session ordering and search (#113886) 2026-07-25 16:42:33 -07:00
Peter Steinberger 81b7a0a006 feat(gateway): enable the operator terminal by default (#113888) 2026-07-25 16:34:28 -07:00
Peter Steinberger 71c654c72d fix(release): install package validation dependencies (#113907)
* fix(release): install package validation dependencies

* fix(release): isolate artifact validation tooling
2026-07-25 16:29:20 -07:00
Peter Steinberger 603f839058 refactor(providers): collapse live model discovery onto shared projection hook (#113903)
* feat(plugin-sdk): add live catalog row projection

* refactor(providers): share live catalog projection

* fix(venice): keep live projection internal
2026-07-25 16:17:27 -07:00
Peter Steinberger 52c11daed6 fix(control-ui): renew canvas capability so agent widgets keep rendering (#113702)
* fix(control-ui): renew canvas plugin surface capability so widgets keep loading

* fix(control-ui): scope canvas capability renewal to connections

* test(control-ui): cover rotated capability on a newly mounted widget

* fix(control-ui): bind canvas URLs to mounted frames

* fix(control-ui): keep reported widget heights across capability rotation

* fix(control-ui): keep canvas lease type private

* test(gateway): prove Canvas capability rotation over HTTP

* perf(control-ui): lazy-load canvas surface renewal

* chore(control-ui): raise startup budget baseline for canvas renewal lease

* fix(control-ui): satisfy promise-executor lint in gateway store test
2026-07-25 16:14:20 -07:00
Peter Steinberger d515ad571c fix(tui): restore Ctrl+D forward delete (#113872)
* fix(tui): restore Ctrl+D forward delete

* test(tui): wait for session response before reset
2026-07-25 16:13:39 -07:00
Peter Steinberger ddd3d4fdb3 refactor(agents): split before-tool-call policy pipeline (#113885)
* refactor(agents): split before-tool-call pipeline

* refactor(agents): isolate before-tool call types

* fix(agents): restore approval resolution type import
2026-07-25 15:59:30 -07:00
Peter Steinberger 16badb18e5 fix(qa): prevent live transport cleanup races (#113874) 2026-07-25 15:59:09 -07:00
Peter Steinberger bfc8c89c35 refactor(agents): split direct compaction pipeline (#113880) 2026-07-25 15:49:44 -07:00
Shakker bd449458c7 fix: honor deny fallback for shell expansion execs (#113892)
Gateway exec commands with shell-expanded arguments now fail closed immediately when approvals are disabled and askFallback is deny.

Refs #113191.
Prepared head SHA: 63f104e681
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com>
Reviewed-by: @shakkernerd
2026-07-25 23:40:10 +01:00
Peter Steinberger 667abb18a1 refactor(agents): finish exec pipeline split (#113889)
* refactor(agents): finish exec pipeline split

* fix(agents): retain exec pipeline type imports
2026-07-25 15:34:08 -07:00