Peter Steinberger
0e520d68e7
fix(ci): stabilize runtime test retries
2026-07-13 11:41:15 +01:00
Peter Steinberger
a17058d191
feat(usage): show the account email with plan windows in the chat context popover ( #106200 )
...
* feat(usage): surface plan windows and account email in the chat context popover
The context-window popover now shows which account a session runs on:
provider usage snapshots carry an accountEmail resolved from the auth
profile when stored, the ChatGPT access-token JWT claims (openai/codex),
or the Claude CLI config file (~/.claude.json oauthAccount) for
keychain-synced logins. models.authStatus embeds it, quota groups keep
distinct accounts separate, and the popover renders the email under the
plan header for local CLI sessions and OpenClaw-configured subscriptions
alike.
* test(openai): assemble the fake usage JWT from parts
* test(usage): keep fixture tokens and identity plumbing scanner-safe
* fix(usage): verify the Claude CLI login before labeling usage with its email
Review findings: the CLI-config email fallback now requires the usage token
to match the cached CLI credential (and honors CLAUDE_CONFIG_DIR), so an
ambient login for another account never labels a snapshot; token-type
credentials propagate their stored email alongside oauth ones.
* style(anthropic): scanner-safe local for the CLI login read
* fix(usage): capture the Claude CLI account email on the credential
Review findings: reading ambient CLI config at usage-fetch time could not
verify keychain-only logins and could go stale across account switches.
The credential reader now captures oauthAccount.emailAddress next to the
credential it belongs to, the synced claude-cli profile carries it, and
the anthropic fetcher uses only the credential-borne identity.
* style(usage): scanner-safe credential fixtures and helper naming
* fix(auth): backfill the CLI account email onto existing synced profiles
Profiles synced before identity capture stay usable and skip CLI reads,
so upgraded installs would never gain the email until token rotation.
While the stored token material matches the CLI login, merge the
non-secret email onto the stored profile.
* style(test): scanner-safe email assertion
* test(auth): pin the no-reread invariant to identity-complete profiles
2026-07-13 03:39:16 -07:00
Peter Steinberger
b9411fda36
test(plugins): restore removed regression coverage ( #106269 )
2026-07-13 03:34:46 -07:00
Peter Steinberger
9857f05b74
fix(ci): drop stale gateway-lock deadcode entries
2026-07-13 03:28:56 -07:00
Arca
0e5ed900b0
fix(discord): retry stale preview cleanup after final delivery ( #104893 )
...
* fix(discord): retry stale preview cleanup
* test(channels): use compatible deferred helper
* test(channels): satisfy deferred lint
* chore: prepare Discord preview cleanup
* fix(channels): retain failed draft cleanup targets
* fix(channels): separate draft cleanup callbacks
* fix(channels): claim standalone draft cleanup ids
---------
Co-authored-by: Cad from Arca <cad@arcabot.ai >
Co-authored-by: Colin <colin@solvely.net >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-13 03:23:27 -07:00
Peter Steinberger
ca0fe7f691
refactor(agents): trim subagent spawn exports ( #106275 )
2026-07-13 03:22:12 -07:00
Peter Steinberger
2aa4ff0825
refactor: consolidate duplicate helper exports ( #106016 )
...
* refactor(normalization): consolidate string helpers
* refactor(normalization): consolidate agent ids
* refactor(paths): consolidate user path resolution
* refactor(gateway): preserve transcript helper facade
* fix(normalization): align helper build aliases
* fix(memory): keep helper import line neutral
* chore(plugin-sdk): align consolidated helper surface
* refactor(normalization): reuse lowercase string helper
* refactor(normalization): reuse record guard
* refactor(normalization): share surrogate boundary helper
* refactor(agents): share token estimate constant
* refactor(memory): distinguish standalone helper contracts
* refactor(normalization): share error cause formatter
* refactor(config): distinguish eligibility predicates
* refactor(plugins): share registry state symbol
* refactor(cli): reuse outbound dependency adapter
* refactor(cron): distinguish positive duration parser
* fix(gateway): keep transcript helper private
* fix(paths): preserve public helper status
* refactor(channels): reuse registry normalizer
* refactor(agents): reuse agent core runtime facade
* refactor(auth): reuse locked profile upsert
* refactor(records): distinguish trap-safe guard
* refactor(migrations): distinguish sync directory helper
* test(plugins): drop stale duration alias expectations
* fix(channels): remove stale registry import
* chore(plugin-sdk): refresh helper API baseline
* fix(memory): keep renamed helpers private
* fix(plugins): keep registry state key private
* fix(plugin-sdk): tighten wildcard surface budget
* chore(plugin-sdk): refresh rebased helper API baseline
2026-07-13 03:22:00 -07:00
Peter Steinberger
31425b50a8
test(worker): add cloud worker fault injection gate ( #105921 )
2026-07-13 03:17:53 -07:00
Peter Steinberger
a2da4700be
refactor: consolidate remaining bounded concurrency ( #106265 )
2026-07-13 03:16:28 -07:00
Vincent Koc
e474ba38e8
fix(sqlite): serialize offline maintenance with gateway ( #106210 )
2026-07-13 18:15:32 +08:00
Peter Steinberger
6bb85f177f
feat(onepassword): optional 1Password secrets broker plugin ( #106133 )
...
* feat(onepassword): add optional 1Password secrets broker plugin
Curated slug registry with per-item auto/approve/deny policy, plugin-approval
gating with expiring allow-always grants, SQLite audit history, onepassword
status/audit CLI, and a single-attempt op client (--cache=false, minimal env).
Closes #105924
* docs(plugins): refresh generated inventory count after rebase
* fix(onepassword): scope grants and field reads
* fix(onepassword): bound grant retention
* fix(onepassword): satisfy deadcode ratchet and hook allowlist contract
* fix(onepassword): honor live policy reloads
* refactor(onepassword): trim private exports
* test(onepassword): satisfy plugin boundaries
* test(onepassword): document temp directory boundary
2026-07-13 03:12:47 -07:00
Vincent Koc
5eb52493c7
refactor(config): remove dead session runtime exports ( #106197 )
2026-07-13 18:11:31 +08:00
xingzhou
c3cb1af93c
fix(transcripts): stop live capture when the agent run is canceled ( #104123 )
...
* fix(transcripts): stop live capture when the agent run is canceled
* fix(transcripts): preserve startup cleanup ownership
* fix(transcripts): keep runtime session type internal
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-13 03:11:25 -07:00
Peter Steinberger
7c9b8baa2b
refactor(gateway): consolidate TypeScript WebSocket clients ( #106113 )
...
* refactor(gateway): unify websocket clients
* fix(gateway): preserve adapter lifecycle behavior
* test(gateway): keep reconnect proof black-box
* chore(gateway): satisfy shared client lint
* refactor(gateway): keep protocol decisions internal
* refactor(gateway): preserve shared reconnect supervision
* test(gateway): use canonical browser barrel
* fix(gateway): resolve browser retry workspace source
* refactor(gateway): tighten shared protocol types
2026-07-13 03:08:21 -07:00
Peter Steinberger
9092e59a43
refactor(agents): trim sandbox test seams ( #106257 )
2026-07-13 02:58:06 -07:00
Peter Steinberger
9ea4b167fa
refactor(deadcode): trim channel auth exports ( #106247 )
2026-07-13 02:45:34 -07:00
RickLin
21c377873d
fix(agents): classify account-restricted model 400s as model_not_found ( #104878 )
...
* fix(agents): classify account-restricted model 400s as model_not_found
OpenAI-backed runtimes reject plan/account-restricted models with HTTP
400 invalid_request_error ("The '<model>' model is not supported when
using Codex with a ChatGPT account."). Without a model_not_found match
the ambiguous-400 branch collapses this into a format failure, so users
get the generic retry//new copy for a config-only problem (#104490 ).
The 'when using' qualifier keeps capability rejections ("not supported
for tool calling") out of the class, preserving the #97611 contract.
Fixes #104490
* fix(agents): narrow account model rejection match
---------
Co-authored-by: Altay <altay@hey.com >
2026-07-13 12:44:40 +03:00
zhangqueping
87e2bafe00
fix(config): clear snapshot marker on transient read error so future updates retry ( #106105 )
...
* fix(config): clear snapshot marker on transient read error so future updates retry
The pre-update config snapshot marks a config path as snapshotted
before attempting the I/O. If readFile or writeFile threw a transient
error (e.g. disk space exhaustion, file locking), the catch block kept
the in-memory marker intact, permanently blocking snapshot retries for
the lifetime of the process.
Clear the marker in the catch block so a subsequent update can attempt
the snapshot again.
Fixes #105431
* test(config): cover snapshot retry failures
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-13 02:34:51 -07:00
Peter Steinberger
6cd1133858
feat(cloud-workers): openclaw worker mode running the embedded loop on the box ( #105865 )
...
* feat(cloud-workers): add restricted worker runtime
* test(cloud-workers): cover worker runtime contracts
* docs(cloud-workers): document worker mode
* fix(worker): bound connection lifecycle
* fix(worker): serialize transcript flushes
* fix(worker): fail stop stale transcript bases
* fix(worker): degrade lossy live streaming
* test(worker): cover inference reconnect fencing
* refactor(worker): split RPC clients
* refactor(worker): split connection transport
* refactor(worker): split embedded runtime
* refactor(worker): narrow worker module exports
2026-07-13 02:34:31 -07:00
Peter Steinberger
843e3c7878
improve(gateway): speed up pristine plugin-heavy startup [AI] ( #106195 )
...
* perf(gateway): skip absent core startup migrations
* fix(gateway): revalidate recovered startup config
2026-07-13 02:32:24 -07:00
Peter Steinberger
938d41014f
feat(mobile): default pairing to full node access ( #105928 )
...
* feat(mobile): default pairing to full node access
* chore: leave release notes to release workflow
* refactor(mobile): bound pairing helpers
* chore(i18n): refresh mobile access inventory
* chore(ci): lower mobile pairing LOC baseline
* fix(mobile): complete pairing validation artifacts
* ci: remove stale transcript target export baseline
* fix(ios): wrap access upgrade guidance
* fix(ios): preserve localized access key
* fix(ci): dedupe read-only SQLite guardrail
* fix(mobile): secure full-access node setup
2026-07-13 02:30:45 -07:00
Peter Steinberger
8c9b034480
refactor(agents): trim sandbox export seams ( #106237 )
2026-07-13 02:25:42 -07:00
Peter Steinberger
4f287dd740
refactor(process): adopt Execa execution layer ( #105939 )
...
* refactor(process): adopt execa execution layer
* fix(process): preserve launch error semantics
* chore(process): ratchet exec size baseline
* fix(process): preserve Windows and error contracts
* chore(plugin-sdk): ratchet wildcard surface budget
* test(process): allow resolved Windows executable paths
* fix(process): preserve Windows shim completion
* test(process): isolate Execa mocks
* style(process): format Windows exec test
* style(process): apply Windows test formatting
* test(process): normalize Windows system path casing
* fix(process): harden execa edge handling
* test(tui): preserve ESM fixture semantics
* fix(process): preserve PATHEXT lookup contract
* fix(process): keep invocation type internal
2026-07-13 02:21:08 -07:00
Peter Steinberger
7da28f3704
fix(plugin-sdk): freeze directory compat exports ( #106222 )
2026-07-13 02:14:02 -07:00
Peter Steinberger
bafabba0df
fix(gateway): preserve Control UI turns across restarts ( #106151 )
...
* fix(gateway): preserve Control UI turns across restart
* perf(sessions): index restart recovery state
* fix(sessions): avoid replaying pre-admitted turns
* fix(sessions): index per-entry recovery status
* fix(sessions): guard restart failure notices
* fix(sessions): preserve terminal claims across admissions
* fix(sessions): retry failed recovery notices
* fix(sessions): harden restart retry ownership
* fix(gateway): tighten restart recovery typing
* fix(sessions): close restart recovery races
* refactor(sessions): split restart recovery ownership
* chore(sessions): clean restart recovery lint
* chore: drop release-owned changelog entry
* fix(gateway): satisfy restart recovery guards
* test(gateway): cover Control UI durable admission
2026-07-13 02:08:56 -07:00
Peter Steinberger
48e212a19a
refactor(agents): trim embedded runner exports ( #105855 )
...
* refactor(agents): trim embedded runner exports
* chore(deadcode): refresh export baseline
2026-07-13 02:07:28 -07:00
mushuiyu886
ed57c6cd88
fix(agents): honor claude-cli contextTokens setting ( #93198 )
...
* fix: honor claude-cli configured context tokens
* test: cover claude-cli native compaction budget
* test: cover ordinary claude-cli budget persistence
* test: migrate claude-cli budget fixtures to session accessor
* fix(agents): carry CLI provider into context budget
* fix(agents): guard optional CLI context metadata
* fix(agents): align Claude CLI native compaction budget
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
* fix(agents): apply selected CLI context cap
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
* fix(agents): preserve prepared CLI context budgets
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
* fix(agents): resolve prepared CLI context ownership
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
* test(agents): type CLI context budget cases
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-13 01:58:44 -07:00
Peter Steinberger
1136757174
refactor: consolidate bounded concurrency on p-limit and p-map ( #106002 )
...
* refactor: adopt p-limit and p-map for bounded concurrency
* chore: normalize lockfile ordering
* fix: preserve memory host concurrency export
* refactor: keep media apply within size budget
* fix: drain memory concurrency before failure
* fix: satisfy memory concurrency guards
* chore: scope memory host dead-code checks
* chore: lower concurrency LOC baselines
* fix: preserve concurrency API surfaces
* chore: reconcile concurrency LOC baseline
* test: keep memory concurrency gate portable
* style: simplify concurrency drain
* ci: refresh deadcode export baseline
2026-07-13 01:53:28 -07:00
Peter Steinberger
83bf0379c9
refactor(channels): share plugin contract scaffolds ( #105838 )
...
* refactor(channels): share plugin contract scaffolds
* fix: preserve channel config hint metadata
* chore: refresh Plugin SDK API baseline
* ci: refresh plugin SDK surface budget
* fix(ci): allow read-only state database boundary
* fix(ci): dedupe read-only state database boundary
2026-07-13 01:51:32 -07:00
Peter Steinberger
a857c44300
refactor: extract chat abort handling from gateway handler ( #106094 )
...
* refactor(gateway): extract chat abort handling
* fix(gateway): keep abort helper types private
2026-07-13 01:41:13 -07:00
Peter Steinberger
c2da10585c
refactor(plugin-sdk): prune eligible deprecated exports ( #106010 )
...
* refactor(plugin-sdk): remove unshipped compatibility exports
* refactor(zalo): use typed outbound delivery results
* chore(plugin-sdk): ratchet deprecated surface budgets
* chore(changelog): defer release note to release automation
* fix(zalo): reject failed message adapter sends
* refactor(zalo): share typed send boundary
* chore(plugin-sdk): account for main deprecation drift
2026-07-13 01:39:38 -07:00
Pavan Kumar Gondhi
0d177c9b4d
fix: keep command cron jobs operator-scoped [AI] ( #106057 )
...
* fix: scope agent cron command access
* test: avoid secret-like cron fixture text
2026-07-13 14:08:04 +05:30
Peter Steinberger
65257bebdd
fix(gateway): lower superseded reload log severity ( #106165 )
2026-07-13 01:35:41 -07:00
Peter Steinberger
98e3f729bc
refactor: remove dead plugin loader exports ( #105937 )
...
* refactor(plugins): trim activation and contract exports
* test(plugins): restore fixture cleanup
* refactor(plugins): trim install and loader exports
* test(plugins): fully reset loader caches
* refactor(plugins): trim metadata and catalog exports
* test(plugins): preserve catalog trust coverage
* refactor(plugins): trim provider and plugin exports
* refactor(plugins): trim runtime and tool exports
* test(plugins): update dead-export consumers
* test(plugins): remove empty dead-export suites
* refactor(plugins): align exports with split registry
* refactor(plugins): trim drifted loader exports
* style(plugins): format test fixtures
* refactor(scripts): use supported plugin APIs
* refactor(plugins): finish dead export cleanup
* chore(deadcode): refresh export baseline
* test(cli): mock production memory state
* chore(deadcode): sync latest export baseline
* fix(tests): keep plugin fixtures inside core
* chore(deadcode): refresh rebased export baseline
* chore(deadcode): sync current ratchets
* fix(plugins): retain reserved slot invariant
* fix(plugins): preserve dead-export invariants
* test(plugins): use neutral catalog query fixture
* test(plugins): satisfy catalog lint
* test(plugins): preserve integrity drift coverage
* fix(ci): register skill experience live proof
2026-07-13 01:29:33 -07:00
Peter Steinberger
7ff41d8271
style(ci): format experience review imports
2026-07-13 04:17:46 -04:00
Peter Steinberger
a18da069c5
fix(ci): eliminate experience review gate failures
2026-07-13 04:08:00 -04:00
Peter Steinberger
26e05c1c56
ci: repair main gate drift from skills experience-review landing
2026-07-13 00:59:56 -07:00
juyaohuidt
78bfcd2c2e
fix(cli): preserve literal --update subcommand args ( #106144 )
...
Co-authored-by: xydt-juyaohui <xydt-juyaohui@users.noreply.github.com >
2026-07-13 00:53:59 -07:00
Peter Steinberger
02cbe66846
refactor: use built-in glob for package manifests ( #105951 )
...
* refactor: use built-in glob for package manifests
* docs: note built-in glob migration
* docs: defer dependency note to release process
2026-07-13 00:45:41 -07:00
Peter Steinberger
e2ec8283c4
refactor(deadcode): trim mid-size src exports ( #105888 )
...
* refactor(deadcode): trim auto-reply and CLI exports
* refactor(deadcode): trim cron and task exports
* refactor(deadcode): trim fleet and process exports
* test(deadcode): exercise live task and process seams
* test(fleet): cover stream redaction through owner module
* refactor(security): trim dead internal exports
* refactor(secrets): trim dead internal exports
* refactor(deadcode): trim remaining src exports
* refactor(deadcode): remove test-only runtime exports
* refactor(deadcode): trim pairing test exports
* refactor(deadcode): reconcile refreshed baseline
* test(auto-reply): deduplicate queue state imports
2026-07-13 00:42:56 -07:00
Peter Steinberger
6df498c3cd
refactor: canonicalize binary operation results ( #106049 )
...
* refactor(normalization-core): promote shared result type
* refactor(agent-core): reuse canonical error coercion
* refactor: discriminate internal operation results
* docs: establish shared result convention
* fix(agent-core): preserve error coercion facade
* build: derive package entries from exports
* fix(plugins): resolve shared result subpath
* fix(ci): align Result integration guards
* build: refresh plugin SDK API baseline
* fix(agent-core): preserve toError compatibility
2026-07-13 00:39:43 -07:00
Peter Steinberger
2fc91410e8
refactor: consolidate reconnect supervisors ( #105987 )
...
* refactor: consolidate reconnect supervisors
* style: satisfy reconnect supervisor lint
* fix: keep reconnect supervisor internal
* refactor: keep retry supervisor lean
* chore: lower gateway client LOC baseline
* style: satisfy large-file LOC guard
* fix: cap long-lived reconnect backoff
* fix: preserve reconnect start failures
* test(sdk): include retry package in install smoke
2026-07-13 00:39:17 -07:00
Peter Steinberger
92962af779
refactor: prune unsupported OPENCLAW env overrides ( #105970 )
...
* refactor: prune unsupported env overrides
* refactor: prune unsupported env overrides
* chore: keep dead export baseline current
* fix: preserve packaged telemetry override
2026-07-13 00:36:02 -07:00
Peter Steinberger
a4383306dc
fix(plugin-sdk): preserve sandbox create options
2026-07-13 00:35:08 -07:00
Peter Steinberger
f06ec98c90
fix(auto-reply): preserve parsed media fallback
2026-07-13 00:35:08 -07:00
Peter Steinberger
c4e82aceea
refactor(agents): internalize env sanitization options
2026-07-13 00:35:08 -07:00
Peter Steinberger
b9fd02c51d
test(channels): remove deprecated catalog mocks
2026-07-13 00:35:08 -07:00
Peter Steinberger
2c9850048a
fix(plugin-sdk): preserve agent session compatibility method
2026-07-13 00:35:08 -07:00
Peter Steinberger
968d72b589
refactor(agents): remove singular media directive use
2026-07-13 00:35:08 -07:00
Peter Steinberger
6def44a2fe
fix(plugin-sdk): preserve allowlist compatibility export
2026-07-13 00:35:08 -07:00