Peter Steinberger
40cb6f0e3b
feat(ui): keep Where picker destinations live ( #122531 )
...
* feat(gateway): enrich environment summaries
* chore(sdk): refresh plugin API surface
surface drift approved: additive EnvironmentSummary enrichment (runners plan rev 2, milestone 4)
* feat(ui): keep where picker destinations live
* docs: link picker liveness milestone PR
* fix(ui): deduplicate picker locale keys
* test(ui): update picker section expectations
* fix(ssrf): narrow lookup resolver contract
* fix(gateway): publish authoritative environment facts
2026-08-12 05:11:46 -07:00
Peter Steinberger
cad77fb39c
refactor: consolidate remaining coercion helpers ( #122020 )
2026-08-11 10:22:01 -07:00
Peter Steinberger
f1bb7cd919
test(sdk): consolidate packed consumer evidence ( #122001 )
...
* test(sdk): consolidate packed consumer evidence
* test(qa): refresh scenario owner references
* test(qa): narrow script execution assertion
2026-08-11 04:18:20 -07:00
Peter Steinberger
fa03d9b913
refactor: consolidate coercion helpers ( #121366 )
...
* refactor: consolidate coercion helpers
* fix: remove duplicate coercion imports
* fix: preserve serialized coercion guard
* chore: ratchet coercion helper carve-outs
* fix(test): keep gauntlet subprocess startup lean
* fix: preserve imported session timestamp semantics
* fix: preserve catalog timestamp string semantics
* chore: align plugin SDK surface ratchet
* fix: preserve trajectory and SDK string contracts
* fix(test): preserve QA record assertion semantics
* fix: complete standalone record guard rename
* refactor(cron): use canonical string coercion
* fix(acpx): preserve Pi timestamp parsing
* test(channels): adapt custody test harnesses
* test(telegram): classify media harness as test support
* test(acpx): split timestamp contract coverage
* test(channels): support generated custody contracts
* chore: ban the full coercion helper name set
Extends the declaration guard to all eleven consolidated helper names and
renames the cron schedule-identity readNumber wrapper to readScheduleInteger
so the banned generic name cannot regrow.
* fix(scripts): repair release-validation guard drift and lint cause
Restores the renamed isJsonRecord guard in assertTrustedWorkflowHarness after
main added isRecord call sites in parallel, and attaches the caught YAML error
as the thrown error cause (preserve-caught-error was red on main).
* fix: preserve Claude timestamp string semantics
* fix: preserve persisted timestamp string semantics
* fix: preserve date-first timestamp contracts
* fix(openai): harden delegation failure formatting
* chore: close coercion helper guard gaps
* test(openai): model non-error delegation rejection
* chore: refresh plugin SDK API contract
* fix(tasks): use canonical string field reader
* fix(ai): use canonical provider error field coercion
* fix(browser): migrate native bootstrap coercion
* docs(plugin-sdk): clarify text record export compatibility
* fix(gateway): normalize approval execution identity
* test(outbound): isolate message action poll harness
2026-08-11 00:02:18 -07:00
Peter Steinberger
b985d5a1ed
feat: stream live subagent progress in task events ( #121549 )
...
* feat(tasks): stream live subagent activity
* fix(tasks): correlate edit activity from start events
* fix(gateway): sanitize live task activity
* test(reply): align custody harnesses with lifecycle
* fix(outbound): preserve post-send recovery evidence
* fix(types): align reply harnesses with current contracts
* fix(tasks): preserve activity liveness and SDK parity
* test(sdk): avoid unsafe task summary assertion
* chore(contracts): refresh Plugin SDK API baseline
2026-08-10 18:37:58 -07:00
Peter Steinberger
bd6c6aaef2
refactor(ws): consolidate raw WebSocket payload decoding ( #121268 )
...
* refactor(ws): consolidate raw data conversion
* fix(scripts): keep gateway client source-loadable
* refactor(ws): share plugin frame decoding
2026-08-09 16:32:18 -07:00
Peter Steinberger
c70aee247e
refactor(scripts): migrate JavaScript tools to TypeScript ( #121005 )
...
* refactor(scripts): migrate JavaScript tools to TypeScript
* fix(ci): keep changed-scope preflight zero-install
* fix(ci): preserve zero-install script owners
* fix(ci): complete script migration follow-through
* fix(release): keep stable closeout zero-install
* fix(scripts): preserve standalone execution boundaries
* fix(scripts): repair standalone loader boundaries
* fix(scripts): normalize gateway observation ids
* fix(scripts): keep Docker packager standalone
* test(scripts): preserve rebase cleanup helpers
* test(sessions): use tracked temp directory
2026-08-09 07:21:35 -07:00
Peter Steinberger
411777dc1f
fix(gateway): recover cloud worker placement state ( #120976 )
...
* fix(gateway): recover cloud worker placement state
Related: #120953
* test(gateway): type failed placement fixture
Related: #120953
2026-08-09 01:01:31 -07:00
Peter Steinberger
08d2062c7f
refactor(infra): fold node-pairing facade into device-pairing ( #120726 )
...
Completes docs/plan/runners.md milestone 1c by moving node-role pairing behavior and state access under device-pairing-owned modules while preserving shipped migrations.
2026-08-08 15:26:11 -07:00
Peter Steinberger
e7a9f33d89
refactor(core): adopt normalization-core leaf helpers across production ( #120350 )
...
* refactor(core): adopt normalization-core leaf helpers across production
* fix(ci): keep plugin contract source-resolvable
* fix(errors): preserve adapter-owned error fields
* fix(errors): short-circuit existing errors before stringifying
* fix(errors): skip throwing structured getters
* ci: retrigger checks on current base
* fix(errors): guard structured error enumeration
* fix: harden error detail copying
2026-08-08 12:00:49 -07:00
Vincent Koc
e928762b9d
test(qa): close external app SDK proof gaps ( #118978 )
...
* test(qa): close external app SDK proof gaps
* test(qa): close external app SDK proof gaps
2026-08-04 09:00:22 +08:00
Peter Steinberger
88d6a2c8d6
perf(gateway): reduce sessions.list read amplification under streaming load ( #118207 )
...
* perf(gateway): reduce sessions list read amplification
* test(gateway): stabilize title batch perf proof
* fix(gateway): satisfy sessions list CI contracts
* perf(gateway): reuse warm batch title fields
* fix(gateway): satisfy strict title cache types
* test(gateway): use transcript write scope in cache test
* fix(gateway): fence session list cache on active runs
* refactor(infra): extract agent run registry
* fix(infra): keep run-registry context types module-local
2026-08-02 16:08:07 -07:00
Peter Steinberger
5c2f935fc9
test(sdk): deduplicate client and event fixtures ( #117692 )
2026-08-01 16:48:50 -07:00
Vincent Koc
263741b1f0
fix(ci): align release validation fixtures ( #117494 )
...
* fix(release): align beta 6 e2e fixtures
* fix(doctor): preserve missing state startup signal
* test(release): align beta e2e contracts
* test(agents): use canonical empty auth store
* test(agents): isolate prompt cooldown scheduling
* test(release): align main validation fixtures
* test(release): accept Code Mode plugin tool evidence
* fix(test): repair release validation checks
* test(cron): assert structured session targets
2026-08-02 00:39:36 +08:00
Vincent Koc
20e68e01df
fix(gateway): sign device proofs with challenge time ( #116679 )
2026-07-31 16:45:53 +08:00
Vincent Koc
38abf500ba
fix(update): stabilize cross-version dev upgrades ( #115651 )
...
* fix(e2e): stabilize cross-version Parallels upgrades
* fix(e2e): avoid inline macOS guest probes
* fix(e2e): detach Windows dev updates
* fix(e2e): detach macOS guest updates with Node
* fix(e2e): initialize skipped upgrade config
* fix(update): use partial clone for dev checkout
* fix(update): keep Windows dev checkouts clean
* fix(e2e): pin Parallels dev update targets
* fix(e2e): own Parallels gateway restarts
* fix(e2e): verify pinned Parallels checkouts
* fix(e2e): forward Parallels update budgets
* fix(e2e): use canonical provider auth choices
* chore: leave changelog to release automation
* test(ui): stabilize route waits on loaded runners
2026-07-29 19:52:34 +08:00
destire-mio
0f92546408
fix(sdk): preserve zero values in normalized event IDs ( #113349 )
...
* fix(sdk): preserve zero values in event ids
* test(sdk): isolate zero event ID components
---------
Co-authored-by: destire-mio <248462155+destire-mio@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-25 02:07:59 -07:00
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
Peter Steinberger
932e8be06c
feat(agents): canonical agent creation with Custodian hatch flow ( #111052 )
...
* refactor(agents): centralize agent creation
* feat(ui): add new agent hatch flow
* refactor(agents): keep creation paths lean
* fix(agents): hide internal creation types
2026-07-18 22:50:02 -07:00
Peter Steinberger
e1d87e9a9d
fix(sessions): preserve parent lifecycle for parallel children ( #110541 )
...
* fix(sessions): declare parent lifecycle disposition
Co-authored-by: Luiz Antonio Busnello <lab@generantis.com.br >
* chore: keep release notes in PR body
* fix(sessions): preserve parallel fallback on old gateways
* chore(i18n): refresh native source inventory
---------
Co-authored-by: Luiz Antonio Busnello <lab@generantis.com.br >
2026-07-18 10:16:14 +01:00
Wynne668
b7e099d36e
fix(gateway): agent model overrides cannot be cleared ( #108734 )
...
* fix(gateway): allow clearing agent model overrides
* fix(protocol): preserve Swift agent model compatibility
* fix(protocol): preserve null when Swift decodes agent updates
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 03:46:37 -07:00
Peter Steinberger
0f32033d78
fix(ui): add thinking level to new cloud sessions ( #108679 )
2026-07-15 23:54:00 -07:00
Peter Steinberger
f81f9d8570
chore: enforce max-lines suppression ratchet ( #107315 )
...
* ci: enforce max-lines suppression ratchet
* chore: prune stale max-lines suppression
* fix: close max-lines ratchet enforcement gaps
* fix: harden max-lines ratchet checks
* fix(ci): satisfy max-lines ratchet checks
* style: format max-lines declarations
* fix(ci): match oxlint suppression grammar
* test: isolate max-lines git fixtures
* chore: prune resolved max-lines debt
* test: skip newline path fixture on Windows
* fix: harden max-lines suppression ratchet
* chore: refresh max-lines baseline
* fix: close max-lines ratchet bypasses
* fix: derive ratchet base from PR merge tree
* fix: support older Git in staged ratchet
* fix: align max-lines declarations and baseline
* chore: refresh max-lines baseline for current main
* fix: exclude generated wizard locales from max-lines
* chore: prune resolved max-lines debt
2026-07-14 09:27:02 -07:00
Peter Steinberger
c13aa612eb
fix(ws): normalize raw message payloads ( #107459 )
2026-07-14 05:38:38 -07:00
Peter Steinberger
7abb20fe33
fix(lint): buffer casts for nodebuffer ws message handlers
...
aae56539fa set binaryType=nodebuffer but left RawData-typed toString
calls; no-base-to-string fails check-lint repo-wide. Cast to Buffer like
the same commit's realtime-transcription site.
2026-07-14 05:18:39 -07:00
Peter Steinberger
aae56539fa
refactor(ws): use nodebuffer socket contracts
2026-07-14 05:03:57 -07:00
Jason (Json)
01a7f4fb3f
feat(ui): add images and model selection to new sessions ( #107358 )
...
Merged via squash.
Prepared head SHA: cf99b5bab5
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com >
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com >
Reviewed-by: @fuller-stack-dev
2026-07-14 04:14:01 -06:00
Peter Steinberger
044392684b
test(release): repair scheduled E2E regressions ( #107173 )
...
* test(release): repair scheduled E2E regressions
* test(release): refresh generated protocol bindings
* docs(agents): harden remote proof invocations
2026-07-13 23:49:36 -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
1aff6da827
refactor(test): use shared timeout helper ( #105918 )
2026-07-12 20:51:51 -07:00
Peter Steinberger
867284dfa3
refactor(deadcode): delete package and script exports ( #105776 )
...
Refs #105733
2026-07-12 17:24:45 -07:00
Peter Steinberger
8fe6ac7fb9
refactor: remove pre-2026.4 compatibility shims and legacy migrations ( #104650 )
...
* refactor(matrix): retire pre-2026.4 legacy crypto and flat-storage migrations
* refactor(cli): drop pre-tsdown daemon-cli dist compat shim from the build
* refactor(diffs): remove deprecated image*/format tool params and output aliases
* refactor(ui): drop pre-gateway-scoped localStorage readers and legacy theme map
* refactor: remove assorted pre-2026.4 compat shims and deprecated aliases
* fix(discord): map legacy thread-binding fields in the doctor JSON import
* fix(msteams): keep bot read fallback for legacy imported conversation rows
* test(msteams): cover legacy bot-only imported conversation references
* fix(ui): keep channel-prefixed session key display fallback
* chore: refresh native i18n inventory and build-docker step count
* chore(matrix): drop now-unused migration-config module
* chore: re-pin plugin SDK public export budget after compat removals
* chore: refresh native i18n inventory after rebase
* chore: re-pin plugin SDK callable budget and refresh i18n inventory after rebase
2026-07-11 13:22:27 -07:00
Peter Steinberger
5ca46a6554
feat(cloud-workers): pinned SSH tunnel runtime and provider-owned key resolution ( #104553 )
...
* feat(cloud-workers): add pinned SSH tunnel runtime
* feat(crabbox): resolve cloud worker SSH identities
* docs(cloud-workers): document SSH tunnel contracts
2026-07-11 09:26:08 -07:00
Peter Steinberger
90e465833b
feat(gateway): durable cloud worker environments, provider SDK contract, and lifecycle RPCs ( #104401 )
...
* docs(plan): add cloud workers design plan
* feat(plugin-sdk): add cloud worker provider foundations
* feat(protocol): add worker environment lifecycle shapes
* feat(gateway): persist worker environment lifecycles
* test(gateway): pin environment inventory assertion for damaged worker store
* style(cloud-workers): satisfy lint and docs formatting
* fix(gateway): narrow worker environment type boundaries
* chore(plugin-sdk): account for WorkerProvider surface growth
* docs: regenerate docs map
2026-07-11 04:54:27 -07:00
Josh Avant
fbd330b7aa
fix(channels): honor configured read target policies ( #99905 )
...
* fix(channels): enforce configured read targets
* test(channels): align policy checks with boundaries
* fix: bind channel reads to trusted turn context
* test: satisfy gateway lint
* fix: narrow message action channel imports
* fix(feishu): authorize message reads before provider access
* fix(slack): await reaction clear authorization
* fix(channels): align provider action contracts
* fix(matrix): read direct-room account data before sync
* fix(channels): reject unsupported attachment actions early
* fix: restore trusted operator conversation reads
* fix(matrix): authorize pin actions before provider reads
* fix: preserve trusted channel read workflows
* fix(discord): resolve current channel ids consistently
* fix(agents): preserve message action turn capability
* fix(plugins): enforce host-owned read provenance
* fix(channels): harden Teams and Discord read policy
* fix(channels): preserve exact-current action compatibility
* fix(imessage): authorize trusted current chat aliases
* fix(channels): preserve normalized current aliases
* fix(channels): preserve external current target aliases
* fix: reconcile channel policy with current main
* fix(discord): isolate DM read policy
* fix(channels): enforce provider read gates
* fix(gateway): await serialized message action identity tokens
* fix(ci): refresh channel protocol contracts
2026-07-10 22:29:37 -05:00
Peter Steinberger
0acd851a3b
feat(agents): add managed git worktree lifecycle (create/provision/snapshot/restore/GC) ( #100535 )
...
Centralized managed worktrees under <state-dir>/worktrees/<repo-fingerprint>/<name>
with branch-per-task (openclaw/<name>), .worktreeinclude provisioning, an optional
.openclaw/worktree-setup.sh repo hook, and a SQLite registry in the shared state DB.
Removal always snapshots the tree (untracked included, gitignored excluded) to
refs/openclaw/snapshots/<id>; restore rebuilds the branch at the original commit with
the snapshot content as uncommitted state. Lossless run-end cleanup, 7-day idle GC for
run-owned worktrees (manual exempt), orphan reconciliation, 30-day snapshot retention.
Surfaces: worktrees.* gateway RPC (operator.admin mutations), openclaw worktrees CLI,
Control UI page, plugin-SDK facade + Workboard kind:"worktree" materialization.
E2E-verified on Testbox: full create->work->remove->restore->gc lifecycle.
2026-07-06 05:24:58 +01:00
Peter Steinberger
6df0fb818d
feat: add session thread management ( #98510 )
...
* feat: add session thread management
Squash of codex/thread-management (025aefc3ad1) onto origin/main:
pin/archive/rename sessions via sessions.patch, archived-aware
sessions.list, lifecycle fencing, read-only archived chat, SDK +
Swift protocol support, Control UI session management.
* refactor(ui): minimal session rows with hover-revealed management
Chat picker and sidebar recents share session-row primitives: single-line
rows, relative timestamps, rename/archive/pin revealed on hover or focus,
accent pin badge for pinned rows, and an active-run spinner in the trail
slot. Sidebar floats pinned sessions above recency via the shared
comparator and gains archive/pin actions through the unified sessions-view
patch fallback. Archive eligibility is one shared policy
(canArchiveSessionRow); the sidebar/picker active-run tooltip now uses the
real sessionsView.activeRun locale key.
* fix: align session admission with mailbox-era main
Integration fixes after rebasing onto current main: sessions_list mailbox
test expectations learn the archived/pinned row fields and archived:false
list param; gateway agent admission treats a session as deleted only when
both the requested and canonical alias sets miss it (legacy bare-main
stores and exec-approval followups read under different spellings); cron
persist tests keep a consistent store across claim-guarded persist calls;
the ACP abort hook test asserts abort propagation instead of signal
identity; drop dead lifecycle writes flagged by no-useless-assignment and
fix the promise-executor return in the codex compact test.
* fix(qa): align UI e2e and shard fixtures with redesigned session rows
Sidebar session rows are wrapper divs with an inner link now: update the
navigation browser tests and chat-flow Playwright selectors. Seed a real
per-test session store for the auto-fallback admission guard instead of
depending on leftover host files at /tmp/sessions.json. Teach the
test-projects routing fixture about the suites that newly import the
shared temp-dir helper. Document the Codex thread-format contract for
archivedAt/pinnedAt (flag derived from server-stamped timestamp, epoch ms
here vs Codex epoch seconds) at the type and in the session docs.
* test: route auto-fallback suite through temp-dir helper plans
The auto-fallback suite now imports the shared temp-dir helper for its
seeded session store, so the top-level helper routing fixture must list
it in the auto-reply plan.
2026-07-04 14:30:47 -04:00
ly-wang19
9a54e5b292
fix(sdk): classify failed/blocked tool events as tool.call.failed ( #95383 )
...
normalizeAgentEventType checked the `phase:"end" || status==="completed"`
branch before the `failed/blocked` branch, but terminal tool/item events are
emitted with phase:"end" AND the real status, so failed and blocked tools were
normalized to tool.call.completed and the tool.call.failed branch was dead for
the item stream. SDK consumers filtering on tool.call.failed never saw tool
failures (they looked like successes). Reorder so failed/blocked is classified
before end/completed.
Co-authored-by: ly-wang19 <ly-wang19@users.noreply.github.com >
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-22 16:54:14 +00:00
Vincent Koc
c6d9977902
test(sdk): resolve npm runner in package e2e
2026-06-22 18:28:27 +08:00
wangmiao0668000666
4db829646a
fix(sdk): type-narrow manifest.files in pack staging root helper ( #95465 )
2026-06-22 13:52:51 +08:00
Vincent Koc
2bdcc8314d
fix(sdk): preserve zero run timeout watchdog
2026-06-22 00:13:51 +02:00
Vincent Koc
b796890b97
test(sdk): resolve Windows package taskkill path
2026-06-21 12:52:41 +02:00
Vincent Koc
06574920dd
fix(sdk): taskkill package e2e trees on windows
2026-06-21 08:33:36 +02:00
scotthuang
81abc2b21b
fix: preserve cron delivery awareness for target sessions ( #93580 )
...
Merged via squash.
Prepared head SHA: 460562ceff
Co-authored-by: scotthuang <1670837+scotthuang@users.noreply.github.com >
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com >
Reviewed-by: @jalehman
2026-06-20 12:13:10 -07:00
Vincent Koc
7c850bdf38
fix(test): kill SDK package command trees
2026-06-20 17:54:16 +02:00
Vincent Koc
2bc20f2ec5
fix(test): use pnpm runner for SDK package build
2026-06-20 17:51:21 +02:00
Vincent Koc
7d658dfd97
fix(sdk): honor session send timeouts
2026-06-20 06:18:09 +02:00
Vincent Koc
e89c255a01
fix(sdk): require session key for effective tools
2026-06-20 06:00:03 +02:00
Vincent Koc
a635e97965
fix(sdk): tighten approval response params
2026-06-20 05:59:50 +02:00
Vincent Koc
4f278ef71c
fix(sdk): type agent mutation RPC params
2026-06-20 05:59:36 +02:00