Peter Steinberger
0240327fe7
refactor(security): privatize audit internals ( #108067 )
...
* refactor(security): privatize audit internals
* chore(deadcode): shrink security export baseline
2026-07-14 23:28:04 -07:00
Peter Steinberger
23c0a7b612
fix: preserve working installs on unsupported Node ( #106994 )
...
* fix(update): preserve installs on unsupported Node
* fix(update): verify skipped install scripts
* refactor(update): share global install preflight
* fix(update): validate Bun-installed Node runtime
* fix(update): classify install preflight failures
* refactor(update): normalize install failure reasons
* style(update): format updater policy test
* fix(update): preserve pnpm script policy safety
* fix(update): classify hosted git sources
* chore: leave release notes to release flow
* fix(release): defer package inventory helper loading
* style(release): keep inventory loader LOC-neutral
* fix(update): validate staged package lifecycle
* fix(update): match packed lifecycle contract
* fix(update): harden Bun package activation
* test(update): model packed Bun lifecycle
* style(update): avoid lifecycle name shadowing
* fix(update): remove unsafe Bun staging experiment
* fix(update): satisfy updater type checks
* fix(update): preserve packed npm package name
* fix(update): preserve checkout failure status
* fix(update): disable scripts while packing candidates
* fix(update): preflight source package engines safely
* fix(update): preserve legacy npm downgrades
* fix(update): pin npm packing to selected Node
* fix(update): stage npm activation before replacing live package
* fix(update): guard non-npm source activation
* refactor(update): isolate npm staging helpers
* fix(update): harden staged package lifecycle
* test(update): satisfy merged type gates
* fix(update): privatize runtime npm helper
* fix(ci): satisfy merged lint and type gates
* docs(changelog): defer updater note to release
* fix(update): guard package activation runtime
* fix(update): preserve installs on unsupported Node
* test(update): reject prerelease Node runtimes
* test(update): use shared temp cleanup
* fix(update): fail closed when install scripts are skipped
* fix(update): pack install guard in docker artifacts
* fix(ci): keep install guard export tooling-local
2026-07-14 23:19:48 -07:00
Dallin Romney
c421a3b2e6
feat: add reusable Parallels Windows test setup ( #107881 )
...
* test: route Parallels Windows setup
* test: own Parallels Windows baseline setup
* docs: point Windows proof to Parallels sidecar
2026-07-14 23:15:57 -07:00
Peter Steinberger
ed49673307
fix(release): prepare trusted harness dependencies
2026-07-15 07:11:59 +01:00
Peter Steinberger
34b8a3fda0
fix(release): isolate trusted candidate dependencies
2026-07-15 07:08:00 +01:00
Peter Steinberger
7f1baa6d75
refactor(codex): trim session catalog exports ( #108045 )
...
* refactor(codex): privatize session catalog helpers
* chore(deadcode): refresh export baseline
2026-07-14 22:59:46 -07:00
Peter Steinberger
c8733ea674
fix(release): run candidate smoke from trusted tooling
2026-07-15 06:56:04 +01:00
Peter Steinberger
2e73cff6ca
fix(maint): keep PR maintenance delta-only ( #108018 )
...
* fix(maint): keep fork prep sync delta-only
* fix(ci): use exact merge parent for PR diffs
* fix(ci): pass docs diff base through environment
* test(ci): cover environment-mediated docs base
2026-07-14 22:49:33 -07:00
Peter Steinberger
5bbf30b852
refactor(canvas): remove internal A2UI handler factory ( #108038 )
...
* refactor(canvas): remove internal A2UI handler factory
* chore(deadcode): refresh export baseline
2026-07-14 22:41:27 -07:00
Peter Steinberger
9275f476f4
fix(release): retry flaky fresh Parallels lanes
2026-07-15 06:24:32 +01:00
Peter Steinberger
1967e4c04d
refactor(telegram): privatize internal plugin surfaces ( #108026 )
...
* refactor(telegram): privatize internal plugin surfaces
* chore(deadcode): refresh export baseline
2026-07-14 22:20:46 -07:00
Peter Steinberger
eebc0dbc33
refactor(auto-reply): split agent runner execution ( #107985 )
...
* refactor(auto-reply): split agent runner execution
* style(auto-reply): satisfy promise executor lint
* fix(ci): align refactor baselines and test types
* fix(ci): prune stale max-lines baseline
2026-07-14 22:20:25 -07:00
xydt-tanshanshan
f638cbd0f9
fix(doctor): preserve allowlist entries for version-bound runtime plugins during stale config scan ( #107285 )
...
* fix(doctor): preserve allowlist entries for version-bound runtime plugins (codex) during stale config scan
* fix(doctor): restore codex to scanner stale expectation, protect at repair-sequencing
Scanner now flags codex in plugins.allow as stale so diagnostics are visible.
Repair-sequencing preserves the entry via preservePluginIds which already
includes VERSION_BOUND_RUNTIME_PLUGIN_IDS.
* fix(doctor): scope version-bound runtime plugin preservation to allow surface only
ClawSweeper P2: VERSION_BOUND_RUNTIME_PLUGIN_IDS was applied globally
across all stale config surfaces (deny, entries, slots, channels, etc.),
but only plugins.allow needs preservation. Move to a surface-scoped
parameter surfacePreservePluginIds so codex is preserved only in allow.
* fix(doctor): harden version-bound allowlist repair
* fix(doctor): retain version-bound plugin policy
* fix(doctor): align version-bound plugin diagnostics
Co-authored-by: hailory <hailory@xydigit.com >
---------
Co-authored-by: hailory <hailory@xydigit.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 22:14:11 -07:00
Peter Steinberger
e9fc23ad1f
refactor(plugin-sdk): remove private testing barrel ahead of window ( #108020 )
2026-07-14 22:13:37 -07:00
Peter Steinberger
290836cafd
refactor(config): split config I/O responsibilities ( #107983 )
...
* refactor(config): split config I/O
* fix(config): align split modules with guardrails
* fix(config): remove dead write metadata helper
* style(config): format write safety imports
* fix(config): preserve comment-loss warning on split writes
2026-07-14 22:11:22 -07:00
Peter Steinberger
aac4c16f84
refactor(doctor): split Codex route diagnostics ( #107955 )
2026-07-14 22:02:56 -07:00
Peter Steinberger
3932a6038c
refactor(discord): privatize internal plugin surfaces ( #108003 )
...
* refactor(discord): privatize internal plugin surfaces
* chore(deadcode): update export baseline
2026-07-14 21:26:00 -07:00
Peter Steinberger
6c0725e0d9
fix(release): tolerate exhausted GitHub read quota
2026-07-15 05:21:30 +01:00
Peter Steinberger
2372c71697
fix(release): preserve candidate Node runtime
2026-07-15 05:03:43 +01:00
Peter Steinberger
5fa348f3ed
fix(release): pin max-lines debt to branch merge base
2026-07-15 05:03:43 +01:00
Peter Steinberger
938bddddc1
refactor: privatize QA Matrix and Workspaces internals ( #107973 )
...
* refactor(qa-matrix): replace testing export facades
* refactor(workspaces): remove broadcast reset export
* chore(deadcode): shrink unused export baseline
2026-07-14 20:48:46 -07:00
Alix-007
e9d76ae2a7
fix(qa-lab): prevent dashboard API hangs ( #107701 )
2026-07-14 20:45:57 -07:00
Peter Steinberger
ce078367e4
fix(docs): preserve plugin surface identifiers
2026-07-14 23:41:24 -04:00
Peter Steinberger
b50822aab5
refactor(channels): remove Google Chat and Matrix test exports ( #107951 )
...
* refactor(googlechat): privatize internal test seams
* refactor(matrix): remove internal test exports
* chore(deadcode): refresh export baseline
2026-07-14 20:06:39 -07:00
Peter Steinberger
ed12937cbd
refactor(plugin-sdk)!: delete the zero-consumer channel-ingress facade, AccessFacts projections, and dead dispatch aliases ( #107906 )
...
* refactor(plugin-sdk)!: delete the zero-consumer channel-ingress facade, AccessFacts projections, and dead dispatch aliases
* chore(plugin-sdk): refresh API baseline hash for the facade deletions
* fix(channels): drop dead AccessFacts field writes stranded by the facade deletion
* chore(plugin-sdk): refresh API baseline hash after rebase
2026-07-14 19:43:18 -07:00
Peter Steinberger
6d3eff97a0
refactor(channels): privatize Mattermost and MSTeams test seams ( #107924 )
...
* refactor(mattermost): privatize internal test seams
* refactor(msteams): privatize internal test seams
* docs(mattermost): fix public API import path
* refactor(deadcode): shrink export baseline
2026-07-14 19:11:46 -07:00
Peter Steinberger
5579f009fb
refactor(channels): converge internal group-policy drift onto the scope tree ( #107865 )
...
* refactor(channels): converge internal group-policy drift onto the scope tree
* chore(plugin-sdk): refresh API baseline hash for scope-key exports
* fix(config): avoid shadowing the scopeKey export in the case-insensitive lookup
2026-07-14 18:30:04 -07:00
Peter Steinberger
e905a682f7
feat(agents): session self-service tools
...
New grouped sessions tool (patch: label/pin/archive/model/thinking; group
CRUD; owner-gated; no reset/delete/compact). sessions_spawn gains visible +
worktree via sessions.create with admission reservation and abort-confirmed
rollback; a started run with no run id is aborted and deleted rather than
left orphaned. subagents tool reads the unified task_runs ledger tree-scoped
(subagent/acp/media/cron) and cancels detached runs, enforcing the
controlScope gate for leaf callers. session_status gains a cost line.
Agent-origin model patches record a fallback marker; runs failing on
auth/billing/model_not_found revert to the last working model (transient
errors never revert), and an independent thinkingLevel change realigns the
marker so revert cannot clobber it.
Refs #107237
2026-07-14 18:12:22 -07:00
Peter Steinberger
1fd4009e41
perf: speed type suppression inventory ( #107874 )
2026-07-14 18:08:33 -07:00
Peter Steinberger
75d029dae2
refactor: privatize Linux Canvas and Node Host internals ( #107884 )
...
* refactor(linux-canvas): privatize internal command surfaces
* refactor(node-host): privatize runtime manifest type
* chore(deadcode): shrink export baseline
2026-07-14 18:00:16 -07:00
Peter Steinberger
525db34f80
refactor: privatize diagnostics, Meet, and QA test seams ( #107869 )
...
* refactor(diagnostics-prometheus): privatize metrics test surface
* refactor(google-meet): remove Chrome test dependency exports
* refactor(qa-lab): test retained runtime boundaries
* chore(deadcode): shrink export baseline
2026-07-14 17:42:34 -07:00
Peter Steinberger
ced61db64a
fix(ci): preserve OCM workspace prepack ( #107844 )
...
* fix(ci): preserve OCM workspace prepack
* fix(ci): bind OCM prepack to pack context
* fix(ci): avoid path import shadowing
2026-07-14 17:28:45 -07:00
Peter Steinberger
d91073eb1d
refactor(plugins): remove internal test exports ( #107859 )
...
* refactor(imessage): privatize reply-cache reset
* refactor(vault): privatize CLI test helpers
* refactor(voice-call): privatize test seams
* refactor(zalo): privatize monitor test seams
* refactor(zalouser): test through provider boundaries
* chore(deadcode): refresh export baseline
2026-07-14 17:13:38 -07:00
Peter Steinberger
7651ef5fca
fix(docs-i18n): preserve slash numeric literals
2026-07-14 19:49:02 -04:00
Jason (Json)
be88c46160
fix(packaging): reject unsafe root source packs ( #107794 )
2026-07-14 16:09:27 -07:00
Peter Steinberger
b363d5a293
feat(linux): canvas UI via CLI-node + Tauri app IPC bridge ( #107633 )
...
* feat(linux): canvas via CLI-node + Tauri app IPC bridge
* refactor: extract gateway helper modules
* build(linux-canvas): register plugin package in lockfile
* fix(linux-canvas): move canvas advertise test out of core, regen docs/protocol/deadcode
* fix(gateway): break node-catalog/registry import cycle via leaf normalize module; add canvas glossary term
* style: oxfmt invoke.ts and runtime.ts after buildNodeEventParams extraction
* fix(linux): load Canvas WebView via dedicated data_directory context
Wry's Linux/WebKitGTK incognito mode discards Tauri's registered
WebContext (wry webkitgtk/mod.rs), so the Canvas window got a fresh
ephemeral context without the openclaw-canvas:// scheme handler — the
bundled A2UI page never committed (stayed about:blank) and every A2UI
command timed out. Use an isolated cache-backed data_directory instead,
which keeps the protocol handler while still isolating Canvas storage
from the dashboard window.
* fix(linux): keep Canvas WebView ephemeral via incognito + data_directory
Autoreview flagged that a dedicated data_directory alone persists Canvas
browser state (cookies, localStorage, IndexedDB, service workers) across
restarts, so an agent that navigates Canvas to a site could leak an
authenticated session into a later session. iOS uses a non-persistent
store; Linux should match.
Add .incognito(true) alongside .data_directory(): the distinct directory
gives Tauri a fresh WebContext key so it still attaches the
openclaw-canvas:// protocol closure, and incognito makes Wry swap in a
fresh *ephemeral* context carrying those protocols. Live-verified on a
Wayland/WebKitGTK box: the bundled page still loads
(location.href=openclaw-canvas://localhost/index.html, openclawA2UI
present, A2UI renders) and the canvas-webview dir holds no persistent
cookie/storage files.
2026-07-14 16:05:14 -07:00
Peter Steinberger
85e4a42fef
refactor: privatize core dead exports ( #107826 )
...
* refactor(gateway): privatize Claude prompt candidate type
* refactor(music-generation): privatize runtime dependency type
* refactor(security): privatize install policy request type
* refactor(sessions): privatize state notice prefix
* refactor(skills): privatize upload concurrency limit
* refactor(agents): privatize Chutes and catalog constants
* test(commands): use Chutes endpoint contract literals
* refactor(llm): remove proxy error facade export
* refactor(infra): privatize proxy protocol error message
* refactor(proxy-capture): privatize environment keys
* chore(deadcode): shrink unused export baseline
2026-07-14 16:00:58 -07:00
Peter Steinberger
42591653de
refactor(extensions): trim provider and channel internals ( #107817 )
...
* refactor(ollama): privatize internal plugin surfaces
* refactor(openshell): privatize internal plugin surfaces
* refactor(lmstudio): privatize internal plugin surfaces
* refactor(signal): privatize internal plugin surfaces
* refactor(whatsapp): privatize internal plugin surfaces
* chore(deadcode): shrink extension export baseline
2026-07-14 15:38:39 -07:00
Peter Steinberger
21ec1546e5
refactor(extensions): trim internal plugin surfaces ( #107796 )
...
* refactor(diffs): privatize internal plugin surfaces
* refactor(file-transfer): privatize internal plugin surfaces
* refactor(nextcloud-talk): privatize internal plugin surfaces
* refactor(synology-chat): privatize internal plugin surfaces
* chore(deadcode): shrink extension export baseline
2026-07-14 15:02:56 -07:00
Peter Steinberger
86085563be
test(ci): isolate flaky shared-worker suites ( #107780 )
...
* test(ci): isolate flaky shared-worker suites
* test(ci): route isolated agent targets
2026-07-14 15:00:58 -07:00
Peter Steinberger
7b9a72fc4f
refactor(extensions): trim small plugin exports ( #107784 )
...
* refactor(workspaces): privatize internal plugin surfaces
* refactor(canvas): trim internal host exports
* refactor(qa-channel): privatize media URL validation
* refactor(google): remove web search test facade
* refactor(xai): remove response helper test facades
* chore(deadcode): shrink extension export baseline
2026-07-14 14:38:08 -07:00
Peter Steinberger
0b9e3e19fa
refactor(sessions): separate SQLite accessor owners ( #107772 )
...
* refactor(sessions): separate SQLite accessor owners
* refactor(sessions): keep SQLite helper types private
2026-07-14 14:23:20 -07:00
Peter Steinberger
2eb9c7ebd7
refactor(extensions): privatize small plugin internals ( #107774 )
...
* refactor(llama-cpp): privatize embedding internals
* refactor(parallel): privatize MCP response helpers
* refactor(logbook): privatize analysis parsers
* refactor(crabbox): narrow worker provider exports
* refactor(acpx): privatize process reaper internals
* chore(deadcode): refresh unused-export baseline
2026-07-14 14:15:44 -07:00
Peter Steinberger
fd986ed3c2
refactor(system-agent): narrow internal turn types ( #107767 )
...
* refactor(system-agent): narrow internal turn types
* chore(deadcode): refresh unused-export baseline
2026-07-14 14:02:22 -07:00
Peter Steinberger
7cf790a49d
refactor(pairing): model runtime type consumers ( #107760 )
...
* refactor(pairing): model runtime type consumers
* chore(deadcode): refresh unused-export baseline
2026-07-14 13:53:34 -07:00
Peter Steinberger
24fb23d96f
refactor(compat): trim internal naming exports ( #107758 )
...
* refactor(compat): privatize legacy naming constants
* chore(deadcode): refresh unused-export baseline
2026-07-14 13:46:59 -07:00
Peter Steinberger
9d3de463a5
fix(docs-i18n): preserve Max translation boundaries
2026-07-14 16:43:15 -04:00
Peter Steinberger
e2ad943ebd
refactor(media): trim internal exports ( #107756 )
...
* refactor(media): privatize internal parsing helpers
* chore(deadcode): refresh unused-export baseline
2026-07-14 13:41:04 -07:00
Peter Steinberger
58cca1d98a
refactor(linux-node,oc-path): trim internal exports ( #107753 )
...
* refactor(linux-node): privatize internal plugin surfaces
* refactor(oc-path): test commands through CLI registration
* chore(deadcode): refresh unused-export baseline
2026-07-14 13:34:00 -07:00
Peter Steinberger
074f07c520
refactor(irc,workboard): trim internal exports ( #107749 )
...
* refactor(irc): privatize internal plugin surfaces
* refactor(workboard): privatize internal plugin surfaces
* chore(deadcode): refresh unused-export baseline
2026-07-14 13:19:08 -07:00