Commit Graph

9232 Commits

Author SHA1 Message Date
Peter Steinberger
e98c7dfbcb feat(cloud-workers): session placement, dispatch, and worker turn routing (#106332)
* feat(gateway-protocol): add session placement schema

Closed state discriminator for session execution placement (local/requested/provisioning/syncing/starting/active/draining/reconciling/reclaimed/failed), sessions.dispatch params, and worker-admission transcript/live cursor extensions. Swift protocol models mirror the schema.

* feat(state): add worker session placement table

worker_session_placements rows carry placement state, transition generation, worker ownership metadata, ACK cursors, and the turn claim columns used for atomic admission.

* feat(cloud-workers): add durable placement state machine store

SQLite-backed placement store split by concern: state table (placement-state), discriminated record types + shape invariants (placement-record), row codec + CAS transition values (placement-row-codec), atomic turn-claim admission/release/waiters (placement-turn-claims), and lifecycle CAS transitions (placement-store).

* feat(cloud-workers): sync workspaces and attach sessions to worker environments

Environment service session attachment + turn credentials, tunnel workspace commands over a dedicated SSH runner, and git/plain workspace sync into $HOME/.openclaw-worker/workspaces with an immutable manifest. Symlink escapes are rejected locally before transfer (macOS openrsync stat-fails them opaquely) and again by the remote manifest guard.

* feat(worker): run one-shot embedded turns from launch descriptors

Worker runtime executes a single embedded turn from a stdin launch descriptor and reports completed/failed/fenced on stdout for the gateway launcher. Terminal lifecycle live events are deferred past the final transcript flush; transcript projection helpers are shared via transcript-message instead of duplicated in the runtime.

* feat(cloud-workers): dispatch placements and route worker turns

Dispatch service drives local->requested->provisioning->syncing->starting->active with failure teardown (placement-dispatch-failure) and restart/runtime recovery incl. lost-worker reclaim (placement-dispatch-recovery). Worker turn launcher claims the placement turn atomically, builds a windowed launch descriptor (worker-turn-payload), runs the remote one-shot worker, and reconciles the committed transcript; agent runners route turns through the session placement admission provider.

* feat(gateway): expose session placement RPCs and startup reconciliation

sessions.dispatch RPC with lifecycle admission barriers, operator-facing placement projection on session listings, placement-aware session reset guard, and startup/interval reconciliation wiring for worker placements.
2026-07-13 08:03:53 -07:00
Peter Steinberger
f167089d61 feat(nodes): continue Claude catalog sessions on paired nodes via streaming CLI agent runs (#105833)
* feat(gateway): stream node.invoke progress with idle timeouts and cancel

* feat(node-host): opt-in approval-gated claude cli agent run command

* feat(agents): run node-placed claude-cli turns through streaming node invoke

* feat(anthropic): continue claude catalog sessions on advertising nodes

* docs(nodes): document paired-node claude agent runs and continuation

* chore(plugin-sdk): admit spawn-invocation helper into surface budget

* fix(nodes): harden streaming invoke and node run policy from review findings

* test(node-host): prove multi-token tool-policy argv fails closed

* fix(nodes): allowlist cancel event for apps and break node-host type cycle

* chore(protocol): regenerate Swift gateway models for node invoke progress

* chore(node-host): drop test-only export surface flagged by deadcode ratchet

* style(node-host): merge invoke-types imports

* refactor(nodes): split node agent run modules to satisfy the LOC ratchet

* chore(protocol): regenerate android gateway models and sync export baseline

* chore(plugin-sdk): admit spawn-invocation helper and inherited deprecated drift into surface budget

* chore(plugin-sdk): tolerate inherited agent-core deprecated export

* fix(anthropic): drop node param parser orphaned by upstream catalog split

* ci: sync unused-export baseline with healed main

* test(agents): adopt renamed cli backend prepare helper

* style(node-host): format claude run spawn invocation

* ci: retrigger checks

* chore(plugin-sdk): pin surface budgets to healed-base counts

* fix(protocol): restore untyped lazy validators after upstream style change
2026-07-13 07:39:22 -07:00
Peter Steinberger
458746e1c2 chore(ci): enforce changed-file TypeScript LOC ratchet (#106387)
* ci: enforce changed-file TypeScript LOC ratchet

* ci: derive release-gate LOC base from PR

* test(ci): exclude repository test helpers from LOC ratchet

* ci: validate LOC ratchet on PR merge tree

* style: format release maintainer skill

* ci: run LOC ratchet for fast-only changes

* fix(ci): harden LOC ratchet comparisons

* fix(ci): cover native TypeScript in LOC ratchet

* fix(ci): compare LOC against tested merge tree

* test(ci): cover LOC manifest routing
2026-07-13 07:20:32 -07:00
Vincent Koc
a5c5e3b713 fix(ci): refresh plugin SDK API baseline (#106411) 2026-07-13 21:33:06 +08:00
Vitor Cepeda Lopes
93b3f4c45b feat(xai): add native streaming TTS (#103993)
* feat(xai): add streaming TTS via wss://api.x.ai/v1/tts

Expose streamSynthesize on the bundled xAI speech provider so Talk and
Discord streaming playback can use xAI alongside batch REST synthesis.
Adds ws runtime dependency, byte-cap enforcement, and provider tests.

* fix(xai): harden streaming TTS per review feedback

Restrict streaming WS to api.x.ai, decode WebSocket payloads explicitly,
refresh idle timeout on audio.delta, add lifecycle/security tests, and
document the official xAI streaming contract plus non-realtime-voice scope.

* fix(xai): bound streaming TTS text deltas

* fix(xai): require secure native TTS streaming endpoint

* docs(tts): remove duplicate output formats section

* fix(xai): preserve surrogate pairs in tts frames

* fix(xai): bound streaming TTS websocket payloads

* fix(xai): align TTS websocket decoding with ws types

* fix(xai): pin native streaming TTS endpoint

* test(xai): cover native streaming TTS live path

* fix(xai): preserve streaming codec compatibility

* style(xai): format streaming endpoint guard

* docs(tts): describe xAI streaming output policy [skip ci]

* fix(xai): own voice-note TTS format policy [skip ci]

* docs(tts): keep provider summary concise [skip ci]

* test(xai): use explicit placeholder credentials [skip ci]

* test(xai): keep fixtures scanner-safe [skip ci]

---------

Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 06:08:28 -07:00
Peter Steinberger
df3fe6a4f2 feat(worktrees): configurable cleanup limits (max count, max total size) with Settings UI (#106224)
Config surface worktrees.cleanup.{maxCount,maxTotalSizeGb} (0/unset disables),
enforced by hourly gc, worktrees.gc RPC, and openclaw worktrees gc: least
recently active session/Workboard worktrees are snapshotted and removed until
count and total size fit. Manual worktrees, live locks, run leases, and active
session owners are never limit-evicted. Settings -> Worktrees gains a Cleanup
section with debounced, quota-aware stepper controls. Closes #106213.
2026-07-13 06:00:33 -07:00
wangyan2026
5cb4759742 fix(voice-call): restrict classic streaming to Twilio (#102887)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 05:33:16 -07:00
Peter Steinberger
29ac6d6c8c fix: let Control UI admins enable installed plugins (#106318)
* fix: let admins trust installed plugins

* docs: keep release notes out of pull request

* fix(ci): make performance asset sorting explicit
2026-07-13 05:28:01 -07:00
Peter Steinberger
0bab08510e feat: Linux desktop companion app with auto-install, Gateway lifecycle, and Control UI window (#106352)
* feat(linux): add Tauri desktop companion app and openclaw dashboard --json

* test(dashboard): assemble fake token fixture to satisfy secret scanners

* test(dashboard): avoid secret-scanner-shaped mock factory line

* fix(linux): actionable error when installed CLI predates dashboard --json

* docs: regenerate docs map for linux platform heading change
2026-07-13 05:17:27 -07:00
Peter Steinberger
6c5084f1ad feat(xai): add realtime voice provider (#106267)
* feat(xai): add realtime voice provider

Co-authored-by: Vitor Cepeda Lopes <vitor@vitorcepedalopes.com>

* fix(xai): satisfy realtime voice validation

* fix(xai): harden realtime relay boundaries

* chore: drop release-owned changelog edit

* chore(i18n): refresh native voice catalogs

* chore(i18n): refresh Control UI raw-copy baseline

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

* chore(i18n): use canonical main catalogs

* chore(i18n): refresh realtime voice source inventory

* chore: refresh xai voice landing head [skip ci]

* chore: refresh integrated protocol artifacts [skip ci]

---------

Co-authored-by: Vitor Cepeda Lopes <vitor@vitorcepedalopes.com>
2026-07-13 05:17:24 -07:00
Peter Steinberger
9086389527 feat(control-ui): agent identity editor, Settings-homed Agents page, scalable chip switcher (#106058)
* feat(control-ui): agent identity editor, settings-homed agents page, chip switcher pinning

* test(control-ui): pinned-agent persistence coverage; persist pins only when set

* refactor(control-ui): split agent menu, identity actions, model staging out of oversized files

* chore(i18n): sync control-ui locale bundles for agent identity/switcher keys

* fix(control-ui): stabilize new sidebar switcher tests; ratchet LOC + export baselines

* chore(review): document identity clear limitation; drop unused export

* feat(control-ui): scope pages to selected agent

* fix(control-ui): keep scoped page state consistent

* docs(control-ui): explain shared agent scope

* fix(control-ui): reconcile agent scope with current ui

* fix(control-ui): preserve complete agent filtering

* fix(control-ui): bound uploaded agent avatars

* test(control-ui): keep pinned-route fixture valid

* test(control-ui): keep pinned-route fixture valid

* chore(i18n): sync locale bundles for agent scoping keys
2026-07-13 04:03:26 -07:00
Peter Steinberger
bd9bedb201 fix(docs): refresh gateway lock map (#106312) 2026-07-13 03:58:49 -07:00
Peter Steinberger
d87d78f667 fix(ci): refresh plugin SDK API baseline hash (#106289) 2026-07-13 03:49:14 -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
62e53919fd improve(ui): move Devices into Settings and redesign the device inventory (#106055)
* feat(ui): move Devices page into settings and redesign device inventory

- Devices now lives at /settings/devices (System group); /nodes stays as alias
- per-device form-factor icons (phone/browser/terminal/machine) with status dot
- equal-height header actions; stale cleanup and pairing only
- drop manual Refresh button; page already auto-refreshes via presence events + 30s poll
- dynamic connected/pending summary replaces static card subtitle

* style(ui): oxfmt pass + loading empty state for devices inventory

* chore(ui): sync locale bundles for devices settings copy; docs point at Settings → Devices

* refactor(ui): split device tile + pending rows out of view-inventory; drop unused icons

Keeps the TypeScript LOC ratchet green: view-inventory.ts returns below its
baseline and icons.ts sheds unused folderOpen/micOff/volumeOff glyphs.

* fix(ui): ratchet LOC baseline, drop unused DeviceIconSource export, settle devices settings copy

- baseline: icons.ts 693, view-inventory.ts back under the 500 ceiling
- subtitles.nodes now describes the settings page; nav tests updated
- locale bundles resynced (fallbacks=0)

* refactor(ui): rename token row param for reviewer-tool clarity

* fix(ui): collapse device rows in narrow containers and classify the TUI as a terminal client

Review findings: the nodes-entry grid override beat the shared 560px
list-item collapse, overflowing phone-width rows; openclaw-tui connects
with mode ui so only its client id marks it as a terminal.

* chore(ui): translate pending locale keys after rebase (fallbacks=0)
2026-07-13 03:18:17 -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
96df5a0243 fix(ci): refresh plugin SDK API baseline (#106253) 2026-07-13 17:54:43 +08: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
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
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
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
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
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
Peter Steinberger
35f80a1564 fix(discord): honor command owners in voice (#106155)
* fix(discord): honor command owners in voice

* chore(discord): defer voice note to release flow

* chore(discord): refresh pull request head
2026-07-13 01:34:49 -07:00
Peter Steinberger
b1ce84b079 ci: reduce Blacksmith registrations for pull requests (#106146) 2026-07-13 01:32:25 -07:00
Vincent Koc
ccfa1d9b4d fix(ci): refresh plugin SDK API baseline hash (#106184) 2026-07-13 16:27:53 +08:00
Peter Steinberger
0bae4e0e43 fix(codex): update managed app-server to 0.144.3 [AI] (#106098)
* fix(codex): update managed app-server to 0.144.2

* fix(codex): update managed app-server to 0.144.3
2026-07-13 01:27:42 -07:00
Pavan Kumar Gondhi
ffff72c43a fix(line): keep group allowlists scoped (#106056)
Prevent LINE group allowlist policy from inheriting DM allowFrom entries, so open DMs do not broaden group access. Keep group-specific allowlists and per-group overrides as the only group admission sources, and document the scoped behavior.

Co-authored-by: pgondhi987 <pgondhi987@users.noreply.github.com>
2026-07-13 01:18:31 -07:00
Peter Steinberger
d3f6d63fec feat(ui): surface self-learning toggle in the Skill Workshop tab (#106093)
Surfaces skills.workshop.autonomous.enabled in the Control UI Workshop tab:
a Self-learning header toggle plus an enable pitch card on the empty
proposal board. Reads the include-resolved config snapshot, patches the
canonical key over the existing runtimeConfig RFC 7396 merge-patch seam,
and surfaces patch failures in the workshop error banner. Copy states the
token cost and that drafts arrive as pending proposals (no unconditional
review guarantee, which would be false under approvalPolicy "auto").
Splits workshop empty states, header controls, and the self-learning
module out of the oversized page/view files. Locale bundles synced
(fallbacks=0 across 20 locales).

Closes #106054
2026-07-13 00:54:14 -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
d2b382528e feat(ios): guide first launch through pairing explainer and permissions (#106129)
* feat(ios): guide first launch through pairing explainer and permissions

* fix(ios): keep first-run flow resumable and surface limited grants in onboarding

* chore(ios): regenerate native i18n after rebase

* chore(android): project refreshed native translations into strings.xml

* fix(ios): move i18n wrapper contract to shared permission row and sync catalog
2026-07-13 00:35:31 -07:00
Peter Steinberger
af7379bceb fix(docs): localize Russian plugin terminology 2026-07-13 03:34:26 -04:00
Peter Steinberger
73da94f06f improve(ui): move Sessions from the sidebar More menu into Settings (#106032)
Sessions is session management, not a day-to-day workspace destination.
It now lives in Settings under Agents & Tools at /settings/sessions,
with the old /sessions path kept as a route alias; stale pinned-route
prefs drop automatically via normalizeSidebarPinnedRoutes. Also repairs
the sidebar-customization e2e that #105777 broke on main by opening
Settings through the agent-chip menu.
2026-07-13 00:30:20 -07:00
Peter Steinberger
32c84b0f41 feat(skills): capture reusable techniques from successful work (#105674)
* feat(skills): capture reusable experience safely

* feat(skills): review completed work for reusable learning

* docs(skills): explain self-learning

* docs: clarify self-learning runtime scope

* fix(skills): harden autonomous workshop reviews

* test(skills): align review prompt fixture
2026-07-13 00:22:06 -07:00
Ben Badejo
2725742cad fix(memory): respect QMD timeout for memory_search (#95757)
* fix(memory): scope qmd search deadline

Preserve the phase-scoped QMD timeout semantics on current main.

Co-authored-by: Peter Steinberger <58493+steipete@users.noreply.github.com>

* docs: refresh generated docs map

* test(memory): reconcile manager mock with current main

* test(memory): isolate deadline mock import

* style(memory): format search test mocks

* test(memory): decouple mock from deadline symbol

* chore(memory): refresh reviewed pull request head

---------

Co-authored-by: Benjamin Badejo <ben@benbadejo.com>
Co-authored-by: Peter Steinberger <58493+steipete@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-13 00:05:13 -07:00
Peter Steinberger
0cdb13abfc docs(gateway): dedicated 1Password integration page (#106109) 2026-07-12 23:52:33 -07:00
Peter Steinberger
4cbbb86d5e refactor(zalouser): share offset-preserving text chunk ranges (#105842)
* refactor(zalouser): share text chunk ranges

* chore(plugin-sdk): refresh combined API baseline
2026-07-12 23:46:16 -07:00
Vincent Koc
bfa2eff32a fix(ci): refresh plugin SDK API baselines (#106108)
* fix(ci): refresh plugin SDK API baselines

* fix(ci): refresh plugin SDK API baselines

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 23:37:29 -07:00
Peter Steinberger
71295851d7 docs: refresh config baseline 2026-07-12 23:29:02 -07:00
Peter Steinberger
404651d9e8 docs: add HealthKit glossary terms 2026-07-12 23:15:20 -07:00
Peter Steinberger
8a375c4500 docs: document HealthKit summaries 2026-07-12 23:15:19 -07:00
Peter Steinberger
0633afe6a5 fix(config): reject schema-only keys (#106031)
* fix(config): reject schema-only keys

* chore(config): refresh plugin SDK baseline

* test(config): remove stale remote enabled fixtures
2026-07-12 23:10:12 -07:00
Paul Campbell
008f04a656 feat(mxc): add Windows MXC sandbox backend (#97086)
* feat(mxc): add Windows MXC sandbox backend

Add the official MXC sandbox plugin package with Windows ProcessContainer execution, plugin-owned MXC SDK dependency packaging, host-backed filesystem bridge support, and configured MXC policy file loading via mxcPolicyPaths.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(mxc): preserve Windows binary override paths

* fix: remove stray sandbox barrel export

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9ea19539-b8ca-44fb-93bd-b8496e3deb2c

* fix(mxc): address sandbox review feedback

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mxc): satisfy test type checks

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mxc): clarify protected skill enforcement

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(mxc): align fail-closed expectations

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mxc): satisfy extension lint

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(plugin-sdk): narrow fs-safe remove surface

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mxc): repair rebased CI failures

* fix(scripts): declare shrinkwrap override normalizer

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Gio Della-Libera <235387111+giodl73-repo@users.noreply.github.com>
Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-07-12 23:07:25 -07:00
Vincent Koc
f33ab243cf fix(sqlite): reject runtimes vulnerable to WAL corruption (#106065)
* fix(sqlite): require WAL-reset-safe Node runtime

* docs(sqlite): document safe Node runtime floor

* fix(sqlite): defer runtime library validation until use

* fix(ci): align startup memory with Node 24.15
2026-07-13 13:59:00 +08:00
Peter Steinberger
6551786a31 docs: harden Gmail hook guidance 2026-07-12 22:42:48 -07:00
Vincent Koc
6a0eecdb44 fix(release): separate code and release SHA validation (#105948) 2026-07-13 13:38:19 +08:00
Peter Steinberger
b9f0246765 feat(plugin-sdk): add shared HTML escaping seam (#105975) 2026-07-12 22:33:53 -07:00