Peter Steinberger
edecdbd05e
refactor(config): config-surface reduction tranche 3 — product consolidations (review request) ( #111527 )
...
* refactor(config): consolidate media model lists
* refactor(config): unify memory configuration
* refactor(config): consolidate TTS ownership
* refactor(config): move typing policy to agents
* refactor(config): retire product-level config surfaces
* refactor(config): share scoped tool policy type
* chore(config): refresh generated baselines
* fix(config): honor agent typing overrides
* fix(config): migrate sibling config consumers
* refactor(infra): keep base64url decoder private
* fix(config): strip invalid legacy TTS values
* chore(config): refresh rebased baseline hash
* fix(doctor): route legacy messages.tts.realtime voice to talk during tts move
* refactor(config): polish final layout names
* refactor(config): freeze retired tuning defaults
* feat(config): add fast mode default symmetry
* refactor(config): key agent entries by id
* docs(config): update final layout reference
* test(config): cover final layout migrations
* chore(config): refresh final layout baselines
* fix(config): align final layout runtime readers
* fix(config): align remaining readers
* fix(config): stabilize final layout migrations
* fix(config): finalize config projection proof
* fix(config): address final layout review
* docs(release): preserve historical config names
* fix(config): complete keyed agent migration
* fix(config): close final migration gaps
* fix(config): finish full-branch review
* fix(config): complete runtime secret detection
* fix(config): close final review findings
* fix(config): finish canonical docs and heartbeat migration
* fix(config): integrate latest main after rebase
* refactor(env): isolate test-only controls
* refactor(env): isolate build and development controls
* refactor(env): collapse process identity indirection
* refactor(env): remove duplicate config and temp aliases
* docs(env): define the operator-facing allowlist
* ci(env): ratchet production variable count
* fix(env): remove stale provider helper import
* fix(env): make ratchet sorting explicit
* test(env): keep test seam in dead-code audit
* test(env): cover ratchet growth and boundary; document surface budgets
* docs(config): document tier-eval consolidations
* docs(config): clarify speech preference ownership
* test(memory): align retired tuning fixtures
* refactor(memory): freeze engine heuristics
* refactor(config): apply tier-eval tranche
* refactor(tts): move persona shaping to providers
* refactor(compaction): move prompt policy to providers
* test(config): align hookified prompt fixtures
* chore(deadcode): classify test-only exports
* chore(github): remove unused spawn helper
* chore(deadcode): classify queue diagnostics
* chore(deadcode): remove unused lane snapshot export
* chore(plugin-sdk): ratchet consolidated surface
* fix(config): integrate latest main after rebase
2026-07-21 20:28:43 -07:00
xingzhou
186c25f7f7
fix(gateway): avoid stale wake delays after node re-pairing ( #109647 )
...
* fix(gateway): clear wake state on node removal
* fix(gateway): invalidate wake flows on node removal
* fix(gateway): preserve active wakes on disconnect
* fix(gateway): share node removal runtime cleanup
* fix(gateway): clean up pending node work reliably
* fix(gateway): bind node work to pairing generations
* fix(gateway): fence stale node pairing sessions
* fix(gateway): tighten node pairing ownership
* fix(gateway): close node pairing mutation races
* fix(gateway): bind node sessions to pairing generation
* fix(gateway): harden node pairing generation guards
* fix(gateway): close node pairing generation races
* fix(gateway): guard APNs transport ownership
* fix(gateway): revoke reapproved node transports
* fix(gateway): guard retired node lifecycles
* fix(gateway): preserve pending work across reconnects
* fix(gateway): bind node subscriptions to pairing generations
* fix(gateway): settle subscription fanout failures
* fix(gateway): fence pairing generation ownership
* fix(gateway): fence asynchronous node events
* fix(gateway): fence watch results and voice wake fanout
* fix(gateway): guard voice wake generation fanout
* fix(gateway): carry authenticated snapshot generation
* fix(gateway): bind node state to pairing generation
* fix(gateway): align generation guards with current base
* fix(gateway): enforce pairing-owned node lifecycle
* fix(gateway): fence detached voice session writes
* chore(deps): bump proxyline to 0.3.4
* fix(gateway): close pairing lifecycle races
Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com >
* fix(gateway): distinguish pending action mutation
Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com >
* test(gateway): align lifecycle coverage
Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com >
* test(skills): split remote reconciliation coverage
Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com >
* style: format pairing lifecycle changes
Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-21 05:10:08 -07:00
Jason (Json)
8968e955f7
fix(plugins): restore external runtime imports ( #112021 )
...
* fix(plugins): restore external runtime imports
* fix(plugins): support synthetic runtime builds
* test(plugins): type synthetic runtime plan
2026-07-20 21:45:23 -06:00
Peter Steinberger
e0b1a39d2a
improve(i18n): generate native locales after merge ( #111557 )
...
* ci(i18n): move native locale generation post-merge
* fix(i18n): allow generated Android companions
2026-07-19 15:42:41 -07:00
Peter Steinberger
c7e7ac2728
refactor: remove expired plugin compatibility surfaces ( #111451 )
...
* docs(secrets): remove retired web credential paths
* refactor(web): remove retired provider compatibility paths
* refactor(providers): delete retired compatibility routes
* refactor(secrets): remove retired credential aliases
* refactor(plugin-sdk): delete retired compatibility surfaces
* docs(plugin-sdk): remove retired migration guidance
* chore(plugin-sdk): refresh rebased surface budgets
* chore(plugin-sdk): refresh API removal baseline
* refactor(compat): migrate retired internal callers
* chore(plugin-sdk): refresh current-main baselines
* test(config): migrate plugin-owned secret assertions
* test(gateway): narrow plugin secret refs
* fix(plugin-sdk): preserve private boundary type identity
* chore(compat): remove stale sweep references
* chore(lint): lower max-lines budget
* refactor(secrets): remove unused web helper
* build(plugin-sdk): drop removed compat entries
* chore(plugin-sdk): refresh rebased API baseline
* chore(plugin-sdk): use Linux API baseline hash
* fix(plugin-sdk): preserve private bundled build entries
* fix(plugin-sdk): package private runtime facades
* fix(plugins): preserve external credential contracts
2026-07-19 11:04:48 -07:00
Peter Steinberger
197c4f5a04
feat: generic session discussion seam with Control UI panel ( #111337 )
...
* feat: add session discussion panel seam
* fix: keep discussion iframe cookie-capable and changelog release-owned
* test: cover cookie-capable discussion iframe sandbox
* fix: stretch discussion panel host so the embed fills the rail
* fix: keep provider failures retryable and probe discussion availability before showing the action
* fix: block same-origin discussion embeds, show action on catalog sessions, close stale panel on reconnect
* fix: scope discussion probes and panel callbacks to the issuing connection
* fix: dedupe in-flight discussion probes per session
* fix: retry superseded discussion probes and key-scope panel results
* fix: regenerate Swift protocol models and extend advertised-method expectations
* style: format chat-pane-header
* fix: regenerate Kotlin protocol models and date discussion methods in the 2026.7 train
* chore: restore release-owned changelog to main state
* chore: keep changelog untouched relative to merge-base
2026-07-19 09:47:47 -07:00
Peter Steinberger
87fbc19fe3
fix: complete lint toolchain reuse in worktrees ( #111467 )
...
* fix(scripts): complete worktree lint toolchain
* fix(scripts): prepare complete lint pipeline
2026-07-19 08:58:43 -07:00
Peter Steinberger
06f5f73e47
refactor: own model discovery by runtime lifecycle ( #111173 )
...
* refactor(agents): prepare model runtime catalogs
Build lifecycle-owned model and auth snapshots, carry prepared stores into hot agent paths, and serialize config/auth publication.
Credits @zeroaltitude's #90741 investigation and benchmark approach.
* refactor: finish lifecycle-owned model discovery
* fix: align prepared model catalog contracts
* test: align lifecycle catalog mocks
* test: fix prepared catalog type fixtures
* refactor: split prepared model runtime ownership
* fix: import prepared runtime replacement gate type
* test: split media runtime coverage
* test: preserve image auth fixture key types
* test: isolate lifecycle gate fixtures
* chore: keep release changelog owned
* refactor: finish prepared model catalog migration
* test: keep catalog review fixtures scanner-safe
* refactor: preserve lifecycle model runtime ownership
* fix: close prepared runtime lifecycle races
* fix: preserve compaction workspace fallback
* chore: document btw generation rebinding
* fix: preserve prepared generation boundaries
* fix: keep model-list discovery flag explicit
* fix: serialize standalone model runtime activation
* refactor: migrate subagent model catalog lookup
* refactor: clarify doctor catalog lookup seam
* chore: refresh plugin sdk api baseline
* test: migrate swarm catalog dependency
* refactor(telegram): rename runtime catalog seam
* refactor: extract model-aware tool context
* test(models): isolate lifecycle catalog fixtures
* refactor(agents): avoid btw parameter rebinding
* fix(net-policy): align root ipaddr dependency
* fix(build): keep net policy dependency bundled
* fix(deadcode): document net policy compile dependency
2026-07-19 05:30:54 -07:00
Peter Steinberger
3b84a55d99
refactor(protocol): pre-publish cheat-window cleanup and vintage tracking ( #111041 )
...
* fix(codex): drain dynamic-tool handlers before side-thread cleanup
* refactor(protocol): rename question ids to questionId and flatten answer maps
* refactor(protocol): slim worker stack and unify session-catalog shapes
* refactor(protocol): delete dead public surface and polish packaging
* feat(protocol): track release-train vintage on gateway methods and schemas
* fix(apps): align question surfaces merged from main with reshaped protocol
* test(health): shape secret fixtures to scanner-safe token names
* test(health): use scanner-safe token fixtures
* fix(apps): align question surfaces merged from main with reshaped protocol
* fix(ci): prove reshaped protocol in shallow checks
* fix(ui): align sidebar question fixtures with protocol
* fix(apps): read flat Swift question answers
* fix(apps): align question surfaces merged from main with reshaped protocol
* fix(apps): refresh native question inventory
* fix(apps): align macOS snapshot fixtures with protocol
* fix(ui): align narration question fixture with protocol
2026-07-19 04:07:15 -07:00
Peter Steinberger
f07a1fb502
refactor: centralize bounded file reads in fs-safe ( #111104 )
...
* refactor: use fs-safe bounded descriptor reads
* build: update fs-safe to 0.4.2
* build: refresh root npm shrinkwrap
* fix: satisfy bounded read return paths
* fix: update fs-safe integration for latest main
* fix: adopt fs-safe overflow compatibility release
* build: complete fs-safe lockfile update
* build: update fs-safe to 0.4.4
* build: refresh plugin SDK API baseline
* test: follow fs-safe bounded read seam
2026-07-19 01:29:23 -07:00
Peter Steinberger
7a7d6bb51f
fix: cloud-worker results are lost when the box dies before reconciliation ( #110952 )
...
* fix(cloud-workers): stage worker results durably before reconciliation
* fix(cloud-workers): model result staging test seam
* fix(cloud-workers): disable staging git hooks safely
* chore: defer cloud worker release note
* fix(cloud-workers): harden staged result recovery
2026-07-18 23:24:50 +01:00
mushuiyu886
4e11da2872
fix(process): UTF-8 command output corrupts at Windows byte limits ( #105274 )
...
* fix(process): preserve byte-capped UTF-8 output on Windows
* fix(process): skip codepage probe for UTF-8 output
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-18 22:44:12 +01:00
Josh Lehman
453444636c
feat: bound transcript reads across replacements ( #110374 )
2026-07-18 11:41:39 -07:00
Peter Steinberger
3572fba7f9
feat(plugin-sdk): guard ingress effects once per event ( #110846 )
...
* feat(plugin-sdk): add ingress effect guard
* docs: refresh docs map
* fix(plugin-sdk): propagate effect commit failures
* fix(plugin-sdk): isolate ingress effect namespaces
2026-07-18 19:23:39 +01:00
Peter Steinberger
9d97e10efe
refactor: move non-session runtime journals to SQLite ( #109427 )
...
* refactor: migrate runtime JSONL state to SQLite
* chore: refresh SQLite migration validation
* fix: preserve safe audit migration order
* fix: sanitize retired audit archives safely
* fix: satisfy SQLite storage architecture gates
* fix: serialize plugin doctor state migrations
* fix: bound memory event SQLite projections
* fix: rotate memory event projections safely
* fix: preserve imported event retention age
* fix: harden memory event export projection
* fix: canonicalize memory event migrations
* fix: harden legacy journal migrations
* fix: report unsafe legacy journal paths
* fix: preserve journal ownership during migration
* fix: keep legacy file imports doctor-only
* fix: align SQLite audit CI coverage
* refactor: keep state helpers module-private
* fix: harden legacy state migration recovery
* fix: reconcile SQLite state audit migration
* test: use neutral audit redaction fixtures
* fix: close SQLite migration recovery gaps
* refactor: split audit migration recovery helpers
* test: prove completed audit pads stay out of backups
* fix: preserve audit record ordinals across blank lines
* fix: align SQLite audit CI contracts
* build: package SQLite audit E2E entries
* fix: preserve audit ordinals in backup snapshots
2026-07-18 11:42:14 +01:00
Peter Steinberger
442c166122
refactor(sessions): replace ambient watch sentinels with provenance ( #110428 )
...
* refactor(sessions): store watch provenance in cursors
* style(docs): align database schema table
* refactor(state): use Kysely for watch migration
* style(state): remove redundant timestamp casts
2026-07-18 06:55:29 +01:00
Peter Steinberger
a89f01abf4
perf(sqlite): fast schema gates, background integrity verification, and downgrade protection ( #110271 )
...
* perf(sqlite): gate schema version before integrity scans and quarantine terminal open failures
* feat(gateway): refuse incompatible database schemas at boot and verify integrity in the background
* feat(update): refuse installing builds that cannot open the current databases
* docs: add database schema reference with version history and downgrade guidance
* test(update): tolerate optional runner options in git-mutation mocks
* refactor(update): split npm package-target metadata out of update-check
* chore: model verifier internals for knip and regenerate docs map
* chore(i18n): resync stale iOS localization catalog
* chore: allowlist read-only preflight and verifier raw SQLite access
2026-07-18 05:49:39 +01:00
Peter Steinberger
3d1b771035
fix(ci): catch script declaration drift before merge ( #110248 )
...
* fix(ci): verify script declaration contracts
* fix(ci): harden declaration export analysis
* fix(ci): cover opaque script module exports
* test(ci): cover cyclic script declaration barrels
2026-07-18 02:54:26 +01:00
Josh Lehman
867a2296eb
fix(sessions): fsync archives through writable handles ( #110191 )
...
Fixes #110152 .
2026-07-17 15:16:50 -07:00
Peter Steinberger
da44d52ac6
feat: ask_user — structured questions from the agent with web card, channel buttons, and text answers ( #109922 )
...
* feat(gateway): add transient question runtime (question.* methods + broadcasts)
* feat(agents): add blocking ask_user question tool with chat prompt delivery and text-reply claim
* feat(ui): interactive in-thread question cards for ask_user
* feat(channels): native tap-to-answer buttons for ask_user on Telegram, Discord, and Slack
* feat(ui): unify codex and gateway question cards with interactive gateway answering
* refactor(agents): collapse ask_user pending state to one registry; docs for ask_user
* fix(agents): include ask_user in normal gateway runs; add question-flow control-ui e2e
* test(ui): avoid credential-shaped fixture in question card test
* refactor(ui): reorder stream-group context keys
* fix(gateway,ui): validate question answers at resolve; reject secret/duplicate-label questions; UI retry and reconnect hardening
* fix(gateway,agents): canonicalize accepted option answers; bound ask_user option labels to 64 chars
* chore(ci): prune unused question exports, allowlist mobile question events, fix discord lint
* chore(ci): regenerate protocol/i18n/docs/tool-display artifacts for question surface
* fix(protocol): flatten QuestionRecord for native codegen; drop TS-only alias from schema registry
* chore(android): regenerate ask-user localization resources
* docs: regenerate docs map after rebase
* fix(ci): avoid stale read-only dependency disks
* test: remove stale reef lint suppression ratchet
* fix(ci): keep source locale drift advisory in release gates
* fix(ci): scope locale advisory handling to parity check
2026-07-17 22:24:17 +01:00
Dallin Romney
71a02e16af
test(qa): prove gateway package self-upgrade ( #109399 )
2026-07-17 12:26:35 -07:00
ooiuuii
ecfcaa07e6
fix(shell): keep Git Bash coreutils on PATH ( #108136 )
...
* fix(windows): expose Git Bash coreutils to commands
Co-authored-by: luyifan <al3060388206@gmail.com >
* test(windows): inject duplicate PATH variants
* test(windows): run Git Bash integration in CI
* refactor(windows): keep shell env helper private
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-17 12:15:46 +01:00
Sash Zats
ff95d0c269
improve(ci): replace boundary guards with focused Oxlint rules ( #95368 )
...
* perf(ci): move boundary guards to oxlint
Co-authored-by: Sash Zats <sash@zats.io >
* fix(ci): avoid dead editor URL export
Co-authored-by: Sash Zats <sash@zats.io >
* fix(ci): declare path-loaded boundary guard roots
Co-authored-by: Sash Zats <sash@zats.io >
* fix(ci): model Oxlint plugin export in Knip
Co-authored-by: Sash Zats <sash@zats.io >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-17 11:37:35 +01:00
Peter Steinberger
1a2d9e5e5c
refactor(meeting-bot): extract browser meeting-bot core behind MeetingPlatformAdapter ( #109755 )
...
* refactor(meeting-bot): extract browser meeting-bot core behind MeetingPlatformAdapter
* chore(google-meet): prune max-lines baseline entries shrunk by extraction
* fix(meeting-bot): drop orphaned extension realtime files and refresh lint/test types after extraction
* chore(google-meet): prune deleted realtime max-lines baseline
* chore(meeting-bot): remove release-owned changelog entry
* fix(meeting-bot): harden session leave, cleanup retry, and engine teardown paths
2026-07-17 10:35:56 +01:00
Peter Steinberger
e693d279b3
fix: Bedrock ARN region routing, Copilot device-flow pacing, TUI input fixes ( #109740 )
...
* build(deps): bump terminal UI library to 0.80.9
* fix(plugins): Bedrock ARN region routing, stop-reason detail, and Copilot device-flow pacing
2026-07-17 01:09:29 -07:00
Peter Steinberger
6ac15970a7
feat(onboarding): unified empty-state with provider icons, websites, and recommended installs ( #109681 )
...
* feat(onboarding): unify setup recommendations
* fix(control-ui): proxy model setup icons
* fix(onboarding): refresh landing artifacts
* chore(ui): sync translated i18n catalogs
* chore(ui): keep generated locale artifacts on the refresh workflow
2026-07-17 01:01:06 -07:00
Peter Steinberger
067635cb51
fix(ui): prevent generated locale rebase conflicts ( #109393 )
...
* ci(ui): make locale refresh bot-owned
* test(ui): keep locale gate coverage scoped
* fix(ci): preserve generated PR merge policy
* fix(ci): wait for generated PR head convergence
* fix(ci): retry transient guard API failures
* fix(ci): enforce locale isolation across CI events
* fix(ci): harden generated PR publication
* fix(ci): validate release gate merge tree
* fix(ci): allow trusted main locale output
2026-07-16 18:48:20 -07:00
Peter Steinberger
b78cf56349
improve(ci): persist warm Vitest and Node caches ( #109425 )
...
* perf(ci): harden persistent test caches
* ci: document trusted cache cleanup trigger
* ci: harden composite cache inputs
* perf(ci): isolate Node build bytecode cache
2026-07-16 17:22:28 -07:00
Peter Steinberger
6d20432a29
improve: reduce agent startup cost from TTS imports ( #109344 )
...
* perf(tts): split lightweight settings imports
* fix(tts): drop redundant internal exports
* fix(tts): remove unused settings type import
* docs(sdk): refresh speech settings API baseline
* fix(tts): align SDK surface gates
* fix(tts): ignore non-object preference roots
2026-07-16 15:50:59 -07:00
Peter Steinberger
0631252f4b
refactor: reduce plugin SDK test import overhead ( #109333 )
...
* refactor(test): split plugin SDK test helpers
* fix(test): align plugin SDK test subpaths
2026-07-16 13:55:23 -07:00
Peter Steinberger
ce919593bf
fix(ui): unblock rebases with generated i18n conflicts ( #109279 )
...
* fix(ui): automate i18n conflict resolution
* fix(ui): preserve i18n cache merge intent
* fix(ui): restrict resolver to generated locales
* fix(ui): prune stale locales before baseline
* fix(ui): handle removed locale conflicts
2026-07-16 12:52:28 -07:00
Peter Steinberger
0815f6a4f9
feat(android): add Wear proxy protocol ( #108835 )
...
* feat(android): add Wear proxy protocol
Introduce a bounded, versioned phone/watch RPC contract and wire its test, lint, and build gates before either runtime endpoint lands.
Co-authored-by: Sebastian Schubotz <git@sibbl.de >
* test(android): lock Wear wire names
Cover every supported RPC method and event discriminator so phone and watch cannot silently drift.
Co-authored-by: Sebastian Schubotz <git@sibbl.net >
* fix(android): bound Wear JSON depth
Reject excessively nested Data Layer envelopes before kotlinx.serialization can recurse through them.
* fix(android): enforce Wear depth on encode
Keep outbound messages inside the same JSON nesting contract enforced by the decoder.
* fix(android): preflight Wear payload depth
Traverse arbitrary JSON payloads iteratively before serialization so deeply nested local trees fail safely.
---------
Co-authored-by: Sebastian Schubotz <git@sibbl.de >
Co-authored-by: Sebastian Schubotz <git@sibbl.net >
2026-07-16 10:21:38 -07:00
Peter Steinberger
2bd1a63075
feat: add Baseten Model API provider ( #108708 )
...
* feat: add Baseten model provider
* test: satisfy Baseten provider lint
* fix: align Baseten thinking controls
* docs: refresh Baseten documentation metadata
* fix: preserve Baseten DeepSeek replay metadata
* docs: remove release-owned Baseten changelog entry
2026-07-16 07:41:33 -07:00
Alix-007
f198758006
fix(e2e): bound cross-OS installer fetches ( #108771 )
...
* fix(e2e): bound cross-OS installer fetches
* test(e2e): prove Windows installer timeout
Co-authored-by: Alix-007 <li.long15@xydigit.com >
* test(e2e): track installer proof temp dirs
Co-authored-by: Alix-007 <li.long15@xydigit.com >
* fix(e2e): buffer POSIX installer downloads
Co-authored-by: Alix-007 <li.long15@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 04:50:53 -07:00
Peter Steinberger
05c2701e3d
refactor(plugin-sdk): share widget HTML validation helpers ( #108807 )
...
* refactor(plugin-sdk): add widget HTML helpers
* refactor(plugins): share widget HTML validation
2026-07-16 03:13:29 -07:00
Jason
ccec0224fa
fix(daemon): gateway fails to launch on Windows when the profile path contains CJK characters ( #107751 )
...
* fix(daemon): write Windows gateway launchers in encodings wscript/cmd can decode
gateway.vbs and gateway.cmd were written as UTF-8 without BOM, but
wscript.exe only reads .vbs as ANSI or UTF-16 LE with BOM and cmd.exe
reads .cmd in the console OEM code page, so installs under CJK profile
paths failed with "file not found" (#107416 ).
Write .vbs as UTF-16 LE with BOM, write non-ASCII .cmd content in the
system code page when it matches the console page (CJK/Thai locales),
and BOM-sniff plus code-page-fallback on read so launchers from older
installs keep parsing and migrate on refresh. The hidden .vbs launch
path originates from #95480 , which addressed console visibility only.
* refactor(daemon): drop unused WindowsLauncherScriptFormat export
The type is only referenced by encodeWindowsLauncherScript's format
parameter within the module, so the export tripped check-deadcode-exports.
Keep it module-local.
* fix(daemon): mark code-page cmd launchers with their encoding for deterministic readback
Prepend an ASCII '@rem openclaw-launcher-encoding=<label>' line to code-page
.cmd launchers and decode by that marker instead of sniffing UTF-8. Some GBK
byte sequences are valid UTF-8 (隆 = C2 A1 reads as ¡), so the old sniff
silently corrupted readback and rejected valid paths; the marker makes decode
deterministic and drops the code-page probe (a PowerShell spawn) from the
frequent readScheduledTaskCommand poll path.
Also fix the representability guard for euc-kr: Node ICU decodes euc-kr as
KS X 1001 only, but Windows code page 949 is cp949/UHC, so the TextDecoder
cross-check false-rejected ~8,800 UHC extension syllables (똠 = 8C 63) that
iconv encodes and cmd.exe reads fine. Verify euc-kr via iconv's own cp949
round-trip; keep TextDecoder for the other five labels.
* fix(infra): write Windows restart helper scripts through the launcher encoder
The update-time restart helper wrote its temp .cmd as raw UTF-8 while
embedding the restart-log path, task name, and task script path, so a CJK
profile path or task name broke the same way as the gateway launchers
(#107416 ). Route the write through encodeWindowsLauncherScript: ASCII content
stays byte-identical UTF-8, CJK content gets the marked code-page encoding, and
an unrepresentable task name now fails the restart attempt cleanly instead of
writing a script cmd.exe would misread.
* chore(deps): minimize pnpm-lock delta for the iconv-lite promotion
Reset pnpm-lock.yaml to origin/main and re-add only the iconv-lite root
importer entry, dropping the unrelated @types/node peer-context flips and
audio-decode deprecation metadata that a mismatched-toolchain regeneration had
pulled in. The diff vs main is now the three-line importer entry only; the
version already resolves in main's tree via express -> body-parser/raw-body.
* refactor(windows): centralize launcher encoding
Co-authored-by: Jason Yao <wsyjh8@gmail.com >
* style(windows): format launcher encoding test
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: Peter Steinberger <peter@steipete.me >
2026-07-16 00:42:56 -07:00
Peter Steinberger
bae9752c5a
refactor(deadcode): enforce repository hard zero ( #108641 )
2026-07-15 22:40:00 -07:00
Peter Steinberger
251b6f8d8c
perf(ci): parallel format check and build-input-precise artifact gating ( #108594 )
2026-07-15 21:12:55 -07:00
Dallin Romney
04221fc91e
chore(qa): remove retired Matrix package guards ( #108531 )
2026-07-15 19:28:37 -07:00
Dallin Romney
2d9b78fff7
refactor(qa): canonicalize live scenario coverage ( #108464 )
2026-07-15 16:50:41 -07:00
Peter Steinberger
9497450511
refactor: eliminate dead-export baseline ( #108376 )
...
Burn the grandfathered unused-export baseline to zero and enforce a hard-zero Knip gate.
2026-07-15 17:05:07 +01: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
e9fc23ad1f
refactor(plugin-sdk): remove private testing barrel ahead of window ( #108020 )
2026-07-14 22:13:37 -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
992b4cfc5b
refactor(deps): use native web-push types
2026-07-14 11:37:40 -07:00
Peter Steinberger
a6a0716486
feat(setup): rename Crestodian to OpenClaw system agent
...
User-facing name is now OpenClaw (the system speaks); internal code name is
system-agent. Gateway methods crestodian.* -> openclaw.chat/openclaw.setup.*,
agent tool -> openclaw, reserved agent ids openclaw + retired crestodian.
openclaw setup routes: onboarding flags -> onboard, -m/--yes -> system agent,
bare configured interactive -> OpenClaw chat, unconfigured -> onboarding.
Hidden crestodian CLI and /crestodian TUI aliases kept; docs moved to
docs/cli/openclaw.md with redirect stub. macOS/Android strings in lockstep.
Refs #107237
2026-07-14 11:03:02 -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
47d37804a8
improve(ui): catch i18n catalog drift locally ( #107253 )
...
* ci(ui): verify i18n catalogs locally
* fix(ui): preserve scoped i18n sync errors
* refactor(ui): share i18n raw-copy verifier
* test(ui): cover i18n lint gate
* fix(ui): route lint threads to oxlint
2026-07-14 01:12:36 -07:00
Peter Steinberger
84500db379
refactor(plugin-sdk): isolate HTML entity runtime
2026-07-14 00:16:37 -07:00
Peter Steinberger
d8d2f83cc1
feat(terminal): open Codex/Claude catalog sessions in a terminal on their owning host
...
Catalog session rows (sidebar context menu + click), the built-in viewer
header, and a new "Open Codex/Claude sessions in" preference can launch the
native CLI (codex resume / claude --resume) in the operator terminal on the
machine that owns the session.
- Gateway-local sessions spawn through the existing terminal launch policy
(sandbox/enabled gates preserved) with the resume command in the session cwd.
- Paired-node sessions run through a new seq-ordered node PTY relay: a
duplex node-host command streams PTY output via node.invoke.progress and
receives keystrokes/resize via a new node.invoke.input event, behind the
unchanged terminal.* client protocol (TerminalSessionManager gains a backend
abstraction; node relay reuses the streaming-invoke controller).
- Owner boundary: each plugin owns its resume command and builds argv from a
validated thread id; the gateway routes node opens through the node command
allowlist and plugin invoke policy (no advertisement-only trust), and nodes
re-verify session eligibility before spawning.
- UI setting catalogOpenTarget + canOpenTerminal capability gate every entry
point; capability requires the owning host to actually have the CLI.
Node PATH is normalized before command-availability probes, Windows .cmd/.bat
shims spawn via ComSpec, and catalog terminal opens reattach persisted tabs
before opening the new tab.
2026-07-13 22:20:50 -07:00