Commit Graph

362 Commits

Author SHA1 Message Date
Peter Steinberger 7cadfb0bd6 fix: speed up local node launches and isolate scratch state (#123503)
* perf(node-host): reuse advertised worker build identity

* fix(agents): keep default workspaces inside state dir

* fix(plugins): package llama.cpp private SSRF runtime

* fix(node-host): silence missing skills directory
2026-08-13 23:24:54 -07:00
Peter Steinberger 860aeed8f6 feat(gateway): transfer node worker workspaces (#123280)
* feat(gateway): transfer node worker workspaces

* fix(gateway): harden node workspace transfer

* fix(gateway): isolate transfer HTTP contract

* fix(gateway): trim transfer HTTP exports
2026-08-13 21:00:44 -07:00
Peter Steinberger 438d035885 feat(gateway): launch workers on paired nodes (#123157)
* feat(gateway): launch workers on paired nodes

* docs(plan): track node worker launch wire

* fix(runners): restore node workspace ownership

Rehydrate durable workspace bindings after Gateway restart, fence timed-out node tunnel starts, and refuse incomplete clone fallback for submodule and Git LFS workspaces.

* test(runners): isolate node launch fixtures
2026-08-13 18:02:18 -07:00
Peter Steinberger 6c9916a48a feat(runners): publish atomic device runner inventory (#123094)
* feat(runners): publish atomic node inventory

# Conflicts:
#	docs/.generated/plugin-sdk-api-baseline/agent-harness-runtime.json
#	src/gateway/server-methods/environments.ts
#	src/gateway/worker-environments/device-provider.test.ts

* fix(runners): refresh topology on inventory removal

* fix(runners): resolve session host type overlap

* fix(protocol): document mobile runner inventory event

* fix(runners): project authoritative session host state

* docs(nodes): clarify prepared session host status
2026-08-13 04:54:26 -07:00
Peter Steinberger 7a4b5a0a41 feat(gateway): provision paired node session hosts (#122966)
* feat(gateway): provision paired node worker installs

* docs: record node local-install PR chain

* chore(protocol): regenerate node worker manifest models

* fix(gateway): resolve node worker build through the device runtime

Repairs a rebase artifact: startup referenced a stale deviceNodeRegistry
binding; the device runtime now owns the connected-node lookup via
resolveWorkerBuild.
2026-08-13 01:56:19 -07:00
Peter Steinberger 3f4d89505a feat(worker): expose supervised terminal outcomes (#123013)
* feat(worker): expose supervised terminal outcomes

* docs(plan): track supervisor terminal outcomes
2026-08-12 22:19:49 -07:00
Peter Steinberger 5e67beb02e feat(node-host): add negotiated private worker controls (#122939)
* feat(node-host): add private worker supervisor controls

* refactor(node-host): harden private worker controls

* refactor(node-host): simplify private worker controls

* docs(plan): track private worker controls

* fix(node-host): satisfy private control CI guards

* test(gateway): follow worker service construction boundary

* test(gateway): register private control release train

* fix(gateway): retain worker dialect across reapproval
2026-08-12 21:27:01 -07:00
Peter Steinberger be600d0a24 fix: restore Telegram release isolation checks (#122843)
* fix(release): repair isolated Telegram QA runtime

sticky runner/SUT suite root permits config locks without config replacement; add PS1 after attested env verification for nested login shells.

* test(node-host): own desktop teardown resets
2026-08-12 16:21:45 -07:00
Peter Steinberger 6b9bea84f0 feat(node-host): supervise durable worker launches (#122829)
* feat(node-host): add worker launch supervision

* fix(node-host): harden worker lifecycle ownership

* fix(node-host): harden worker execution boundary

* fix(node-host): preserve worker trust settings

* chore(plugin-sdk): refresh worker lifecycle baselines

* docs(plan): track runner implementation slices

* test(node-host): await runtime shutdown owner
2026-08-12 15:24:05 -07:00
Peter Steinberger 0c824f09d5 feat(gateway): observe paired node desktops (#122724)
* feat(gateway): stream paired node desktops

* chore(protocol): refresh desktop observe model

* fix(gateway): preserve desktop stream boundaries

* fix(gateway): keep desktop streams lifetime-bound

* fix(gateway): harden node desktop stream lifecycle

* fix(gateway): stabilize node desktop lifecycle setup

* chore(plugin-sdk): refresh API baselines
2026-08-12 13:17:45 -07:00
Peter Steinberger ade3456dd4 feat: add one-paste node onboarding (#122499)
* feat(pairing): add short join onboarding

* fix(gateway): isolate device join routing tests
2026-08-12 06:17:39 -07:00
Peter Steinberger d44f70eb4b feat(pairing): one-paste device pairing via oc-pair setup links (#120768)
* feat(pairing): one-paste device pairing via oc-pair setup links

Implements milestone 3 from docs/plan/runners.md.

* fix(pairing): sign bootstrap handshake, keep URL candidates, wire pairing countdown

* test(gateway): update client callsite guard

* fix(pairing): preserve setup URL context paths

* fix(ui): keep pairing help aligned with setup mode

* fix(pairing): isolate bootstrap credentials

* perf(ui): keep one-paste pairing within bundle budget

* refactor(pairing): isolate native pair URL prefix parsing

* fix(pairing): preserve candidate lifecycle state

* fix(pairing): retire shared credentials after bootstrap

* fix(pairing): apply rotated manifest through client owner

* test(pairing): prove bootstrap retirement across reconnect

* fix(pairing): preserve native gateway context paths

* fix(pairing): carry native context paths through reconnect

* fix(ios): preserve encoded gateway context path

* chore(plugin-sdk): refresh pairing API baselines
2026-08-12 02:01:33 -07:00
Peter Steinberger 3d76246792 refactor: eliminate final export name collisions (#122083)
* refactor: resolve final export name collisions

* refactor: update remaining collision rename consumers

* style: format rebased auth helpers

* test: update remaining session entry mocks

* test: update remaining runtime mock exports

* test: update delivery info path mock

* refactor: reconcile combined collision sweeps

* chore: regenerate collision and sdk baselines
2026-08-11 11:18:24 -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
Vincent Koc 587def9c9d fix(gateway): keep new nodes compatible with older gateways (#119981)
* fix(gateway): keep new nodes compatible with older gateways

Punchcard-Session: golden-brook-lantern-zp

* fix(gateway): clear protocol compatibility check failures

Punchcard-Session: cobalt-timber-orchard-d1

* fix(node-host): retire manifest before inventory refresh

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): keep new nodes compatible with older gateways

Punchcard-Session: golden-brook-lantern-zp

* fix(gateway): clear protocol compatibility check failures

Punchcard-Session: cobalt-timber-orchard-d1

* fix(node-host): retire manifest before inventory refresh

Punchcard-Session: cobalt-timber-orchard-d1

* docs(gateway-client): describe compatible admission

Punchcard-Session: cobalt-timber-orchard-d1

* fix(node-host): ignore retired publication failures

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): keep new nodes compatible with older gateways

Punchcard-Session: golden-brook-lantern-zp

* fix(gateway): clear protocol compatibility check failures

Punchcard-Session: cobalt-timber-orchard-d1

* fix(node-host): retire manifest before inventory refresh

Punchcard-Session: cobalt-timber-orchard-d1

* docs(gateway-client): describe compatible admission

Punchcard-Session: cobalt-timber-orchard-d1

* fix(node-host): ignore retired publication failures

Punchcard-Session: cobalt-timber-orchard-d1

* test(node-host): split optional publication coverage

Punchcard-Session: cobalt-timber-orchard-d1

* fix(node-host): retain latest rejected inventory

Punchcard-Session: cobalt-timber-orchard-d1

* chore(gateway-protocol): remove release-only changelog edits

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): normalize blank node host families

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): normalize node metadata before pairing

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): negotiate legacy node metadata

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): complete rolling node convergence

Punchcard-Session: cobalt-timber-orchard-d1

* fix(node-host): honor publication retry backoff

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): close rolling compatibility gaps

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): migrate node pairing rollback metadata

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): scope legacy support to wire admission

Punchcard-Session: cobalt-timber-orchard-d1

* test(gateway): type legacy hello protocol fixture

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): converge node protocol after upgrade

Punchcard-Session: cobalt-timber-orchard-d1

* fix(node-host): preserve publication retry backoff

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): honor latest node compatibility state

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): recover protocol negotiation after rollback

Punchcard-Session: cobalt-timber-orchard-d1

* fix(gateway): guard legacy metadata lookup

Punchcard-Session: cobalt-timber-orchard-d1
2026-08-09 13:16:37 +08:00
Peter Steinberger fe85bba59e fix(windows): normalize child environment key casing (#120802) 2026-08-08 19:03:48 -07:00
Peter Steinberger 909509a5db fix(codex): resume catalog sessions with the catalog's CODEX_HOME; add main-content terminal placement (#120708)
* fix(codex): pin catalog CODEX_HOME onto terminal resume spawns

The Codex session catalog lists threads through the plugin's supervision
app-server connection, which can run on the agent-scoped Codex home
(homeScope: "agent"). The terminal resume plan spawned a bare
'codex resume <threadId>' under the operator login shell, so the CLI
resolved its default ~/.codex and failed with "No saved session found".

Terminal plans now carry the catalog connection's CODEX_HOME (local and
paired-node paths), the gateway merges plan env into the PTY spawn, and
the triplicated home-scope resolution collapses into one shared
resolveCodexAppServerLocalHomeDir.

* feat(ui): add main-content terminal placement

The terminal panel gains a third dock placement, "main", filling the
content region next to the sidebar like the transcript pane. The panel
header gets a bottom/right/main placement switcher (persisted in the
existing openclaw.terminal.panel.v1 store), and opening a Codex/Claude
session from the session catalog selects main mode so resumed sessions
appear as a full window instead of a bottom strip.
2026-08-08 14:33:20 -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
joshavant 026f4045b7 Revert "fix(protocol): preserve gateway session attribution across node runs"
This reverts commit 735f176b01.
2026-08-07 18:40:17 -05:00
joshavant d4c9a4d8f1 Revert "feat(audit): preserve exact agent execution provenance"
This reverts commit 79b8775bc9.
2026-08-07 18:40:17 -05:00
Vincent Koc 79b8775bc9 feat(audit): preserve exact agent execution provenance 2026-08-07 15:27:14 +08:00
Vincent Koc 735f176b01 fix(protocol): preserve gateway session attribution across node runs 2026-08-07 08:06:01 +08:00
Peter Steinberger 3b14a93000 test(mcp): isolate catalog size checks from wall-clock load (#118871) 2026-08-03 12:15:36 -07:00
Peter Steinberger a67c52611e fix(deps): bump brace-expansion override to 5.0.9 for HIGH advisory 1130705 (#118804)
* fix(deps): bump brace-expansion override to 5.0.9 for advisory 1130705

* test(mcp): isolate oversized catalog proof from wall-clock timeouts
2026-08-03 11:01:02 -07:00
Peter Steinberger 7c35cbc4f4 test(node-host): isolate linux plugin discovery (#118556)
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
2026-08-03 00:25:48 -07:00
Peter Steinberger bc212450bc test(node-host): reuse approvals database fixture (#118517)
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
2026-08-02 22:59:19 -07:00
Peter Steinberger bb5c649e31 fix: bound pending approvals and preserve delivery order (#118252)
* refactor: centralize pending request lifecycles

Share timeout and settlement registries across worker, LSP, node-host, and approval fanout paths. Bound plugin conversation-binding approvals and preserve terminal notification ordering during slow delivery.

* style: satisfy pending registry lint rules

* test: await deferred plugin approval delivery

* test: satisfy forwarder type-aware lint
2026-08-02 17:30:53 -07:00
Peter Steinberger 75aa8306f7 fix: canonicalize single-flight promise caching (#118245)
* fix: canonicalize promise single-flight caches

* fix: make TUI refresh outcome explicit

* fix: satisfy single-flight lint contracts
2026-08-02 16:33:25 -07:00
Peter Steinberger c574a6544c fix(auth): retain the selected account when migrating Codex sessions (#118205)
* fix(auth): preserve selected OAuth accounts during Codex migrations

* test(auth): complete doctor context and stabilize MCP pagination
2026-08-02 16:14:11 -07:00
Peter Steinberger 6c9b38862d refactor(plugins): root-owned bundle installation with scoped registry handles (#117587)
* refactor(plugins): root-owned bundle installation with scoped registry handles

* refactor(plugins): root-owned bundle installation with scoped registry handles

* test(gateway): expect gateway-binding fact in reload rewarm

* fix(agents): reuse gateway prepared runtime generations

* test(agents): isolate runtime handle fixtures

* test(agents): align runtime owner fixtures

* test(cron): mock run-owned registry loading
2026-08-01 16:17:30 -07:00
Peter Steinberger 3856b4fa1b refactor(cli): unify gateway RPC transport (#117601) 2026-08-01 14:06:30 -07:00
Peter Steinberger e051a7bb4a fix(mcp): bound catalog pagination (#116845)
* fix(node-host): bound MCP tool pagination

* fix(node-host): bound MCP catalog duration

* style(node-host): format MCP pagination test

* fix(mcp): share bounded pagination

* fix(mcp): keep pagination types private

* test(mcp): normalize abort rejection

* fix(mcp): enforce pagination deadline after loading

* fix(mcp): stabilize pagination deadline ownership
2026-07-31 06:41:41 -07:00
Pavan Kumar Gondhi 52f81a3684 fix(exec): require approval for abbreviated inline eval flags [AI] (#116529)
* fix: gate abbreviated interpreter eval flags

* fix(exec): cover legacy gawk source abbreviation
2026-07-31 13:42:17 +05:30
Vincent Koc bb68389a66 fix(ui): deduplicate gateway-native session hosts 2026-07-30 15:22:37 +08:00
Peter Steinberger 032defb172 fix(nodes): cancel paired local inference when callers disconnect (#115624) 2026-07-29 02:00:22 -04:00
Peter Steinberger 6c81253985 feat(node-host): migrate retired state before connecting (#115495)
* feat(node-host): run doctor-owned state migrations at startup

* fix(node-host): satisfy startup migration lint
2026-07-29 01:04:48 -04:00
Peter Steinberger 107bc4f963 fix: make gateway nodes and local inference reliable under stress (#115185) 2026-07-28 08:41:14 -04:00
Peter Steinberger 98b8a18b4c fix(node): harden reconnect and local inference cancellation (#115033)
* fix(node): harden reconnect and local inference cancellation

* fix(browser): refresh bundled gateway client

* fix(gateway): preserve restart after reconnect reset

* fix(node): preserve tracked remote command ownership
2026-07-28 04:18:51 -04:00
Peter Steinberger a92f85e642 fix(node): cancel remote commands and stabilize local inference (#114935) 2026-07-28 01:03:25 -04:00
Peter Steinberger 9bcc44301b fix(nodes): preserve gateway connections and local inference (#114857) 2026-07-27 22:28:32 -04:00
Peter Steinberger 10966ed344 fix(exec): defer failed auto reviews to human approval (#114802) 2026-07-27 20:45:09 -04:00
Peter Steinberger 96a7a21d31 fix(agents): prevent opaque shell commands bypassing auto-review (#114558)
* fix(agents): reject opaque auto-review shell carriers

* fix(security): block auto-review PowerShell remoting modes

* fix(security): require human review for PowerShell script files

* fix(security): block encoded PowerShell argument aliases
2026-07-27 09:35:59 -04:00
Peter Steinberger 521f45592e fix(agents): harden exec auto-review shell approval (#114519) 2026-07-27 06:50:18 -04:00
Peter Steinberger 269bc5c89e fix(cli): preserve machine-readable stdout (#113654)
Co-authored-by: 1052326311 <65798732+1052326311@users.noreply.github.com>
2026-07-27 05:44:16 -04:00
Peter Steinberger fd6e042d87 fix(gateway): keep configured local auth authoritative (#114462)
* fix(gateway): align configured local credentials

* test(gateway): align local credential coverage

* chore(gateway): leave release note to release process
2026-07-27 05:43:31 -04:00
Peter Steinberger 9eae43bd37 refactor(infra): move exec approvals into the shared SQLite state DB (#114063)
* refactor(infra): move exec approvals into the shared SQLite state DB

Delete the file-runtime exec-approvals store (exec-approvals.json + .lock
sidecar machinery) on both runtimes and make the reserved
exec_approvals_config singleton row canonical. Doctor owns the one-time
import with claim/verify/receipt discipline; runtime fails closed with a
doctor instruction while un-migrated legacy state exists. The wire CAS
contract, socket semantics, and gateway auth-token derivations are
unchanged. Kills the #113929 lock-contention bug class structurally and
nets around -2.9k lines.

* fix(infra): green CI gates and retire file-era exec approvals tests

Break the migration-type import cycle with a leaf contract, regenerate the
plugin-SDK API and native i18n baselines for the intentional surface change,
drop unused exports, and replace the macOS file-era approvals test suite with
SQLite-backed behavior coverage per the obsolete-internals test policy.

* chore: green max-lines ratchet, native i18n baseline, and unused-export scan
2026-07-26 06:39:23 -04:00
Peter Steinberger 3018e8b78a refactor: deduplicate micro helpers onto canonical homes (#113534)
* refactor: deduplicate micro helpers

* fix(ai): keep hash prefix helper internal
2026-07-25 00:41:01 -07:00
Peter Steinberger 82d1a03f25 refactor(agents): move implicit-main fallback into load-time roster injection (#112678)
* refactor(agents): require explicit roster defaults

* feat(onboard): create named first roster agent

* refactor(agents): remove runtime main fallbacks

* style(agents): apply roster refactor formatting

* refactor(agents): finish roster-only runtime sweep

* fix(doctor): migrate legacy main session sqlite

* fix(doctor): harden roster session migrations

* fix(onboard): commit first agent atomically

* fix(config): support empty-roster analysis

* fix(agents): preserve legacy main state during creation

* fix(setup): materialize baseline agent roster

* fix(agents): harden legacy default transfer recovery

* fix(agents): simplify roster-only legacy compatibility

* fix(agents): preserve staged first-agent entries

* fix(config): migrate persisted implicit-main rosters

* fix(config): preserve staged empty rosters

* fix(agents): finalize roster-only upgrade paths

* fix(sessions): close legacy main migration outcomes

* fix(config): migrate legacy roster markers at load

* fix(sessions): preserve roster upgrade history

* refactor(sessions): restore lean legacy main compatibility

* fix(setup): prepare first-agent credentials before publish

* fix(config): stabilize roster snapshot migration

* refactor(sessions): shrink legacy main compatibility

* fix(agents): restore roster compatibility fidelity

* fix(sessions): preserve divergent legacy history

* refactor(agents): narrow roster-only scope

* fix(config): isolate roster migration

* test(agents): align roster-only fixtures

* fix(agents): keep main agent undeletable

* fix(agents): harden roster migration invariants

* fix(agents): close setup and audit scope gaps

* fix(cron): scope session reaper throttles by agent

* fix(agents): preserve scoped owner precedence

* fix(config): preserve authored config ownership

* fix(setup): keep default workspace and roster in sync

* fix(setup): preserve default entry workspace on bare runs

* fix(agents): adapt roster rebase to keyed entries

* fix(agents): honor both roster representations

* fix(agents): route roster reads through shared helpers

* fix(config): preserve canonical roster writes

* fix(cron): resolve dynamic default for session reaper

* fix(agents): close dynamic default migration gaps

* fix(agents): align scoped session ownership

* fix(sessions): preserve legacy main directory casing

* fix(agents): align cron and legacy auth ownership

* fix(setup): provision the committed default workspace

* fix(cron): align scoped ownership and reaping

* fix(cron): treat blank agent ids as absent

* fix(cron): retain configured session-store owners

* fix(agents): repair roster-aware CI boundaries

* fix(cron): preserve scoped ownership resolution

* fix(agents): preserve rosterless maintenance paths

* fix(agents): propagate roster ownership through runtime boundaries

* fix(agents): preserve roster ownership across runtime paths

* fix(agents): harden roster diagnostics and legacy routing

* fix(agents): remove redundant diagnostic import

* test(agents): type CLI policy fixture explicitly

* fix(config): preserve canonical roster mutation identity

* fix(doctor): read canonical agent rosters consistently

* fix(config): resolve compound roster unsets safely

* fix(config): finalize main-session reconciliation

* fix(doctor): read canonical session state safely

* fix(sessions): preserve current visibility alias

* fix(config): track roster include provenance

* test(config): type roster provenance cases

* fix(config): refine roster include ownership

* fix(agents): preserve staged roster invariants

* test(config): align fixtures with explicit roster ownership

* test(node-host): preserve optional plan typing

* fix(config): preserve authored roster projections

* test(config): keep raw roster fixtures explicit

* test(config): normalize rosters at runtime fixtures

* fix(config): protect authored roster ownership

* fix(agents): require explicit session ownership

* fix(agents): enforce scoped roster ownership

* fix(sessions): merge fixed-store agent partitions

* fix(agents): harden roster ownership boundaries

* fix(config): reject ambiguous roster projections

* fix(sessions): preserve persisted store ownership

* fix(sessions): keep collision diagnostics additive

* fix(security): scan malformed roster workspaces

* test(config): align snapshot fixtures after rebase

* test(agents): use explicit roster fixtures

* fix(config): harden roster diagnostic boundaries

* fix(sessions): isolate fixed-store agent databases

* test(agents): type malformed default markers

* refactor(sessions): extract store collision resolution

* test(system-agent): split oversized setup coverage

* style(system-agent): format split setup suite

* fix(sessions): preserve promoted store ownership

* fix(sessions): derive scoped owner before target

* fix(sessions): preserve explicit sqlite ownership

* fix(agents): restore roster compatibility across CI

* fix(agents): enforce roster-owned runtime boundaries

* fix(agents): satisfy default lookup lint

* test(sessions): split known-owner coverage

* fix(state): satisfy path identity lint

* fix(agents): preserve malformed roster safety boundaries

* fix(agents): restore roster compatibility at runtime boundaries

* fix(config): satisfy roster boundary type checks

* fix(agents): preserve roster ownership across runtime probes

Setup inference probes now execute as the configured roster owner. Malformed agent-prefixed session rows are intentionally omitted by the fail-closed visibility contract rather than normalized by tests.

* fix(agents): satisfy session list owner lint

* fix(agents): preserve roster-owned runtime boundaries

Restore shared logical rows for exact SQLite session locators while keeping their physical database owner separate. The ownership regression test now constructs an explicit sole-owner database directly instead of relying on first-touch capture, matching the intentional shared-store contract.

* fix(sessions): preserve multiply owned exact stores

* fix(sessions): restore runtime owner boundaries

Keep incognito sentinels agent-owned, fold default-agent approvals into the global snapshot, and preserve the configless legacy-main CLI policy fallback. Also repair the existing CLI watchdog test lifecycle so the compact shard observes its timeout without an unawaited assertion or async timer stall; product behavior is unchanged by that test-only fix.

* test(ci): align owner-scoped fixtures

These assertions are unchanged. The fixtures now declare the intended non-default runner, expose the session-key constant imported by production status code, and select the main approvals bucket explicitly on Windows.

* fix(agents): close final roster ownership gaps
2026-07-24 22:38:09 -07:00
Vincent Koc 509a5f0373 fix(sqlite): reject schema data loss during upgrades (#113473)
* fix(sqlite): reject schema data loss during upgrades

* test(macos): align native state schema boundary
2026-07-25 12:22:02 +08:00
Pavan Kumar Gondhi 2628fae0da fix: recognize more shell wrappers [AI] (#112955)
* fix: recognize more shell wrappers

* fix: cover windows shell wrapper aliases

* fix: limit shell rewrite parsing set

* fix: recognize yash cmdline option

* fix: fail closed for opaque shell rewrites

* fix: recognize nushell execute mode

* fix: fail opaque shell allowlist matches closed

* fix: suppress opaque shell positional previews

* fix: parse nushell value options before commands

* fix: block opaque shell script fallbacks

* fix: keep nushell startup configs bound

* fix: preserve plus-option shell script binding

* fix: fail opaque shell fallback paths closed

* fix: reject shell inline flags in script fallback

* fix: block nushell startup option binding

* fix: fail opaque system run transports closed

* fix: deny hidden opaque shell approvals

* fix: keep startup shell payloads opaque

* fix: keep osh shell payloads opaque

* fix: use analysis result in allowlist test

* fix: parse nushell attached command flags

* fix: keep nushell attached parsing local
2026-07-24 15:03:58 +05:30