Peter Steinberger
218dcd815a
feat(tooling): enforce noUncheckedIndexedAccess in the extensions lane (NUIA phase 4) ( #105132 )
...
* fix(extensions): make indexed access explicit across channel plugins
Transport-payload-safe burn-down: malformed Telegram/Discord/QQ/LINE
and sibling channel input keeps existing skip paths; no synthesized
fields, no new throws in delivery loops. Zalo escape sentinels preserve
literal matches instead of undefined replacements.
* fix(extensions): make indexed access explicit across provider and memory plugins
Stream and model iteration, tool-block guards, capture guards, and
sparse accumulators; singleton model reads carry named invariants.
* fix(extensions): make indexed access explicit across tooling plugins, flip the extensions lane
Remaining plugins (oc-path, qa-lab, browser, logbook, and siblings) plus
the tsconfig.extensions.json flag flip. Cleanup: logbook sampleFrames
NaN index at max=1, QA retry clamp at non-positive attempts, dead Canvas
probe and OpenShell no-op slice removed, twitch test setup leak excluded
from the prod lane.
* refactor(plugin-sdk): expose expectDefined via a focused SDK subpath
Extensions imported @openclaw/normalization-core directly, crossing the
external-plugin packaging boundary (it only worked because the runtime
builder bundles undeclared workspace helpers). expect-runtime joins the
canonical entrypoints JSON, generated exports, API baseline, docs, and
subpath contract test; all 78 extension imports now use the SDK seam.
Two scanner-shaped locals renamed for review-bundle hygiene.
* chore(plugin-sdk): raise surface budgets for the expect-runtime subpath
One new entrypoint with one callable export, added intentionally as the
packaging-honest seam for extension invariant helpers.
2026-07-12 09:17:31 +01:00
Peter Steinberger
c3a8e60adc
fix: doctor repairs Voice Call SQLite schema upgrades ( #104752 )
...
* fix(doctor): repair voice-call SQLite schema
* chore: keep release notes in PR body
* test(plugin-sdk): update public surface budget
2026-07-11 16:05:59 -07:00
NIO
ab9a1c9a84
fix(voice-call): use sliceUtf16Safe for bounded child output tail cap ( #104260 )
...
Co-authored-by: NIO <nocodet@mail.com >
2026-07-11 13:05:16 -04:00
Peter Steinberger
7bf80dc2c6
chore(tooling): enforce formatting and refresh TypeScript checks ( #104239 )
...
* chore(tooling): enforce current formatter and refresh checks
* chore(tooling): keep release changelog formatter-owned
* chore(tooling): retain compatible Node type surface
* ci: enforce formatting for docs-only changes
* ci: isolate docs formatter check
* chore(tooling): apply updated lint and format rules
* chore(tooling): satisfy updated switch lint
* style(ui): apply Linux formatter layout
* test(doctor): match quiet local audio contribution
* test(doctor): assert quiet output only
* test(doctor): follow restored information contract
2026-07-11 01:09:51 -07:00
Peter Steinberger
f94a7dc183
feat(codex): supervise native Codex sessions ( #104045 )
...
* feat(codex): add native session supervision
* fix(codex): harden supervision integration
* fix(codex): preserve locked harness ownership
* fix(codex): fence native session archive
* fix(codex): revalidate archive binding ownership
* feat(codex): integrate supervision runtime
* feat(sessions): preserve harness-owned execution
* feat(sessions): persist harness ownership invariants
* feat(gateway): enforce harness-owned sessions
* feat(setup): enable detected Codex supervision
* feat(mac): expose supervised Codex sessions
* feat(ui): make Codex sessions actionable
* docs(codex): document session supervision
* test(codex): cover integration ownership
* chore(i18n): refresh supervision inventories
* fix(setup): finalize Codex activation atomically
* test(codex): narrow binding store update
* fix(sessions): preserve legacy model locks
* test(macos): serialize Codex catalog fixtures
* fix(sessions): preserve legacy lock admission
* chore(i18n): reconcile supervision metadata
* test(sessions): mark legacy lock fixture
* fix(macos): drain final Codex catalog frame
* docs: leave supervision note to release
* style(macos): satisfy Codex catalog type length
* chore: record session accessor seam owners
* fix(macos): honor configured Codex supervision
* fix(codex): preserve harness-owned model locks
* fix(codex): satisfy supervision lint gates
* chore(i18n): refresh native supervision inventory
* fix(codex): align supervision validation contracts
* fix(codex): close supervision boundary gaps
* fix(codex): preserve supervision activation contracts
* fix(codex): dispose standalone supervision runtime
* fix(codex): pin supervised source connection
* fix(plugins): bind delegated runs to exact session target
* fix(codex): scope supervised sessions to configured agents
* fix(codex): fingerprint effective supervision home
* fix(codex): normalize supervision plugin policy
* fix(codex): keep supervised bindings stable across upgrades
* fix(codex): guard all supervised binding connections
* fix(codex): preserve catalog filters and pending CAS identity
* fix(codex): preserve supervision identity for diagnostics
* fix(codex): bind uncertain commits to supervision connection
* fix(codex): satisfy supervision type boundaries
* fix(macos): reconcile current main validation
* fix(codex): handle absent runtime config in supervision
* fix(doctor): own local audio acceleration check
* fix(codex): satisfy integration lint gates
* fix(codex): satisfy lifecycle safety guards
2026-07-11 00:12:08 -07:00
Peter Lee
99ddde8726
fix(voice-call): consolidate webhook logs on the injected plugin logger and assert transcript privacy boundary ( #103555 )
...
* fix(voice-call): redact transcript and AI response content from webhook logs
* fix(voice-call): wrap catch error in record for subsystem logger meta param
* fix(voice-call): consolidate webhook diagnostics on the injected logger and assert privacy boundary in tests
* fix(voice-call): restore [voice-call] attribution on shared plugin logger wrapper
* fix(voice-call): narrow optional debug callback before constructing wrapper
* test(voice-call): consolidate privacy assertions
* test(voice-call): share transcript privacy assertions
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 23:05:34 -07:00
Peter Lee
964a83b363
fix(voice-call): redact phone numbers in event logs via subsystem logger ( #103547 )
...
* fix(voice-call): redact phone numbers in event logs via subsystem logger
* fix(voice-call): add output-level privacy assertions that raw phone numbers are absent from event logs
* test(voice-call): consolidate privacy assertions
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 22:57:09 -07:00
Peter Steinberger
dba64d574f
chore(release): set version to 2026.7.2
2026-07-11 04:00:49 +01:00
JC
59e95fe3fd
feat: support GPT-5.6 Ultra across OpenClaw and Codex runtimes ( #98021 )
...
* feat: support GPT-5.6 Ultra across agent runtimes
Co-authored-by: J Cai <anyech@gmail.com >
* fix: keep harness projections discovery-free
* fix(codex): mirror V2 native subagent tasks
* chore: refresh plugin SDK surface budgets
* test: expose Ultra wire effort proof
* test(cron): avoid hoisted mock initialization race
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 15:23:24 +01:00
chengzhichao-xydt
5b916cb319
fix(voice-call): add timeout to guardedJsonApiRequest ( #102884 )
...
* fix(voice-call): add timeout to guardedJsonApiRequest
* fix(voice-call): bound provider JSON requests
---------
Co-authored-by: chengzhichao-xydt <chengzhichao-xydt@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 07:05:24 +01:00
Peter Steinberger
e8fcc93cd3
fix(talk): await realtime tool result delivery ( #103268 )
...
* fix(talk): await realtime tool result delivery
* fix(talk): terminally cancel queued results
* chore: keep release changelog out of PR
---------
Co-authored-by: Peter Steinberger <peter@steipete.me >
2026-07-09 20:11:20 -07:00
Peter Steinberger
d185f9a0b4
fix(infra): preserve characters in truncated response snippets ( #103136 )
...
* fix(infra): preserve bounded response text characters
Co-authored-by: qingminlong <34085845+qingminglong@users.noreply.github.com >
* ci(plugin-sdk): refresh API baseline
---------
Co-authored-by: qingminlong <34085845+qingminglong@users.noreply.github.com >
2026-07-09 23:43:26 +01:00
Alix-007
b37476ab0b
fix(twilio): redact webhook turnToken diagnostics ( #102089 )
...
* fix(twilio): redact webhook turnToken diagnostics
* chore(twilio): rerun ci
* fix(twilio): contain webhook URL diagnostics
Co-authored-by: Alix-007 <li.long15@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-09 11:19:40 +01:00
Vincent Koc
c46e76cff7
refactor(voice-call): localize internal declarations ( #102059 )
2026-07-07 23:19:59 -07:00
Tran Quang
19f7b72a74
fix(voice-call): preserve per-call agent routing ( #77763 )
...
* fix(voice-call): preserve per-call agent routing
Co-authored-by: Tran Quang <randytran8800@gmail.com >
* chore: keep release notes in PR metadata
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: Peter Steinberger <peter@steipete.me >
2026-07-08 07:06:35 +01:00
Vincent Koc
1b6f3e43d1
refactor(deadcode): trim private helper exports ( #101886 )
2026-07-07 14:43:45 -07:00
Vincent Koc
b88f80940a
refactor: localize internal implementation symbols ( #101831 )
2026-07-07 10:23:36 -07:00
Vincent Koc
3d206140f3
refactor: localize internal implementation constants ( #101758 )
2026-07-07 08:34:13 -07:00
Vincent Koc
fdc7892a6e
refactor: localize internal implementation types ( #101731 )
2026-07-07 07:41:04 -07:00
Happy Dog Support Bot
e591dcfa82
fix(voice-call): persist complete realtime transcripts ( #84161 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: Happy Dog Support Bot <bot@happydog.digital >
2026-07-07 14:13:02 +01:00
Alix-007
079a704dda
fix(voice-call): keep realtime context truncation UTF-16 safe ( #101304 )
...
* Fix UTF-16-safe realtime context truncation
* test(voice-call): tighten UTF-16 context regression
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-07 11:01:48 +01:00
cxbAsDev
735b7b2f34
fix(voice-call): handle tunnel child stream errors and stop-after-exit hang ( #101394 )
...
* fix(voice-call): handle tunnel child stream errors and stop-after-exit hang
* fix(voice-call): stop children after stream failures
* style(voice-call): satisfy timer lint
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-07 08:30:02 +01:00
Vincent Koc
094c0d421f
fix(voice-call): bound Twilio API hosts
2026-07-07 07:40:14 +02:00
Jodok Batlogg
a2f95de750
feat(voice-call): support Twilio regions ( #95832 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: Jodok Batlogg <158125+jodok@users.noreply.github.com >
2026-07-07 06:05:31 +01:00
Vincent Koc
84e5327720
fix(text): keep bounded outputs UTF-16 safe ( #101355 )
...
Co-authored-by: Alix-007 <li.long15@xydigit.com >
2026-07-06 21:33:24 -07:00
Dallin Romney
95e3b9243b
test: execute media and Talk runtime boundaries ( #101091 )
...
* test: execute media and Talk runtime boundaries
* test(qa): centralize gateway fixture startup
* test(qa): check in voice call plugin fixture
2026-07-06 16:25:33 -07:00
Martin Moellenbeck
cac05ff695
Fix realtime voice-call barge-in cancellation ( #90749 )
...
* fix voice call realtime barge-in cancellation
* chore: retrigger PR checks
* chore: retrigger PR checks
* fix voice call realtime barge-in fallback
* fix voice call provider barge-in precedence
* fix voice call speech-started fallback contract
* fix late provider barge-in queued audio clear
* fix realtime handler test raw message parsing
* chore rerun ci
* Document realtime speech-start capability
* fix voice call barge-in interruption policy
* fix(voice-call): centralize realtime barge-in
Co-authored-by: Martin Möllenbeck <martin.moellenbeck@5minds.de >
* chore(changelog): leave voice fix to release flow
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 23:30:16 +01:00
Peter Lee
7cabd19268
fix(voice-call): deliver early TTS via onEarlyText before compaction wait ( #94015 )
...
* fix(voice-call): speak before post-turn compaction
Co-authored-by: xialonglee <li.xialong@xydigit.com >
* fix(voice-call): satisfy flush callback contracts
* test(agents): assert block reply message context
* fix(voice-call): preserve deferred answer boundaries
* fix(voice-call): type tool boundary message index
* test(voice-call): initialize tool boundary index
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 02:34:22 +01:00
Darren2030
39b5bf38f7
fix(voice-call): resolve completed calls from the persisted store on status misses ( #99797 )
...
* fix(voice-call): resolve completed calls from the persisted store on status misses
get_status, the legacy status mode, and the voicecall.status gateway method
only consulted the in-memory call manager. Once a call was evicted (finalize,
gateway restart, or max-duration expiry) they reported { found: false } even
though the full record remained on disk. Fall back to the persisted call
history and resolve the NEWEST matching snapshot — history is oldest-first, so
a forward find() returns a stale record (the regression in the prior attempt).
Closes #96586
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* test(voice-call): use bracket access for mocked getCallHistory assertion
Avoids the typescript(unbound-method) lint rule that flags referencing a
typed method (`runtimeStub.manager.getCallHistory`) as an unbound value.
Bracket access matches the existing mock-assertion pattern in this file
(e.g. `runtimeStub.manager["sendDtmf"]`).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* ci: re-trigger QA Smoke (transient build-OOM, also failing main run 28695162780)
* fix(voice-call): resolve persisted calls in the CLI status fallback too
The local CLI `voicecall status` gateway-unavailable fallback only consulted
the in-memory manager, so a completed/evicted call still returned
{ found: false } even though the gateway/tool/legacy status paths now fall
back to the persisted store. Align this fourth status reader: consult
getCallByProviderCallId in addition to getCall, and on an active miss resolve
the NEWEST matching persisted snapshot via getCallHistory(100) +
toReversed().find(...) (history is oldest-first), mirroring the gateway/tool
paths. Return shape is unchanged.
Per review on #96586 (align CLI status before merge).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* refactor(voice-call): centralize persisted status lookup
Co-authored-by: 曾文锋0668000834 <zeng.wenfeng@xydigit.com >
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-05 12:05:01 -07:00
Peter Steinberger
c757675f34
improve: keep isolated tests under one second ( #100019 )
...
* test: speed up isolated test suite
* test: finish isolated latency cleanup
* test: eliminate remaining isolated latency spikes
* test: remove final isolated timing outliers
* test: bound full-suite tooling processes
* test: bound native test process lifetime
* test: warm isolated runtime suites
* test: eliminate final isolated timing outliers
* test: fix isolated timing fixture types
* test: make timeout cleanup timing deterministic
* test: pin media manifests to source checkout
* test: isolate provider manifest contracts
* test: eliminate residual isolated timing spikes
* test: restore final isolated timing fixes
* test: eliminate remaining isolated timing spikes
* test: warm Zalo lifecycle imports
* test: keep isolated suites below one second
* test: use readable browser response fixtures
2026-07-05 10:57:19 -07:00
Peter Steinberger
c3b479b8e2
fix(voice-call): auto-respond to webhook transcripts ( #100255 )
...
Co-authored-by: dvy <dvy@users.noreply.github.com >
2026-07-05 06:21:45 -07:00
Peter Steinberger
f535b2a3ec
fix(voice-call): normalize mapped proxy addresses ( #100261 )
...
Co-authored-by: Rohit <rohitjavvadi2@gmail.com >
2026-07-05 06:10:36 -07:00
Peter Steinberger
43fd44a28c
fix(voice-call): share webhook replay tracking ( #100263 )
...
* fix(voice-call): share webhook replay tracking
Co-authored-by: xialonglee <li.xialong@xydigit.com >
* fix(voice-call): share webhook replay tracking
* fix(voice-call): share webhook replay tracking
* fix(voice-call): share webhook replay tracking
* fix(voice-call): share webhook replay tracking
* fix(voice-call): share webhook replay tracking
* fix(voice-call): share webhook replay tracking
* fix(voice-call): share webhook replay tracking
---------
Co-authored-by: xialonglee <li.xialong@xydigit.com >
2026-07-05 05:32:41 -07:00
Peter Steinberger
f3e3b6985b
fix: land nine small correctness fixes ( #100204 )
...
* fix(memory-wiki): preserve dollar notes on reimport
Co-authored-by: 李兰 0668001394 <li.lan3@xydigit.com >
* fix(voice-call): handle spawn error during tunnel cleanup
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com >
* fix(media): reject invalid response byte limits
Co-authored-by: linhongkuan <linhk8@mail2.sysu.edu.cn >
* fix(infra): match listening ports exactly
Co-authored-by: 徐闻涵0668001344 <xu.wenhan1@xydigit.com >
* fix(exec): preserve UTF-16 boundaries when truncating output
Co-authored-by: liuhao1024 <sunsky.lau@gmail.com >
* fix(agents): reject surrogate HTML entities
Co-authored-by: mikasa0818 <0668001030@xydigit.com >
* fix(anthropic): guard Claude Fable 5 prefix boundaries
Co-authored-by: 黄剑雄0668001315 <huang.jianxiong@xydigit.com >
* fix(models): render context windows in decimal K
Co-authored-by: harjoth <harjoth.khara@gmail.com >
* fix(clickclack): preserve websocket rejection diagnostics
Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com >
* fix(exec): use canonical UTF-16 slicing helper
Co-authored-by: liuhao1024 <sunsky.lau@gmail.com >
* style(exec): sort UTF-16 helper imports
* style(exec): sort UTF-16 helper imports
* style(exec): sort UTF-16 helper imports
* style(infra): format response limit helper
* style(infra): format response limit helper
---------
Co-authored-by: 李兰 0668001394 <li.lan3@xydigit.com >
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com >
Co-authored-by: linhongkuan <linhk8@mail2.sysu.edu.cn >
Co-authored-by: 徐闻涵0668001344 <xu.wenhan1@xydigit.com >
Co-authored-by: liuhao1024 <sunsky.lau@gmail.com >
Co-authored-by: mikasa0818 <0668001030@xydigit.com >
Co-authored-by: 黄剑雄0668001315 <huang.jianxiong@xydigit.com >
Co-authored-by: harjoth <harjoth.khara@gmail.com >
Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com >
2026-07-05 01:44:56 -07:00
Dallin Romney
bfffa950d7
refactor(plugin-sdk): consolidate tool result helpers ( #99740 )
...
* refactor(plugin-sdk): consolidate tool result helpers
* docs(plugin-sdk): tighten tool result guidance
* refactor(feishu): use tool results directly
2026-07-04 16:50:44 -07:00
Dallin Romney
194dd6fe50
refactor(security): consolidate secret primitives ( #99746 )
...
* refactor(security): consolidate secret primitives
* fix(plugin-sdk): align secret display metadata
* chore(plugin-sdk): refresh API baseline after rebase
* refactor(security): trim secret primitive consolidation
2026-07-04 16:38:13 -07:00
Peter Steinberger
614e87cce1
chore: update dependencies ( #100027 )
2026-07-04 14:56:50 -04:00
Peter Steinberger
6df0fb818d
feat: add session thread management ( #98510 )
...
* feat: add session thread management
Squash of codex/thread-management (025aefc3ad1) onto origin/main:
pin/archive/rename sessions via sessions.patch, archived-aware
sessions.list, lifecycle fencing, read-only archived chat, SDK +
Swift protocol support, Control UI session management.
* refactor(ui): minimal session rows with hover-revealed management
Chat picker and sidebar recents share session-row primitives: single-line
rows, relative timestamps, rename/archive/pin revealed on hover or focus,
accent pin badge for pinned rows, and an active-run spinner in the trail
slot. Sidebar floats pinned sessions above recency via the shared
comparator and gains archive/pin actions through the unified sessions-view
patch fallback. Archive eligibility is one shared policy
(canArchiveSessionRow); the sidebar/picker active-run tooltip now uses the
real sessionsView.activeRun locale key.
* fix: align session admission with mailbox-era main
Integration fixes after rebasing onto current main: sessions_list mailbox
test expectations learn the archived/pinned row fields and archived:false
list param; gateway agent admission treats a session as deleted only when
both the requested and canonical alias sets miss it (legacy bare-main
stores and exec-approval followups read under different spellings); cron
persist tests keep a consistent store across claim-guarded persist calls;
the ACP abort hook test asserts abort propagation instead of signal
identity; drop dead lifecycle writes flagged by no-useless-assignment and
fix the promise-executor return in the codex compact test.
* fix(qa): align UI e2e and shard fixtures with redesigned session rows
Sidebar session rows are wrapper divs with an inner link now: update the
navigation browser tests and chat-flow Playwright selectors. Seed a real
per-test session store for the auto-fallback admission guard instead of
depending on leftover host files at /tmp/sessions.json. Teach the
test-projects routing fixture about the suites that newly import the
shared temp-dir helper. Document the Codex thread-format contract for
archivedAt/pinnedAt (flag derived from server-stamped timestamp, epoch ms
here vs Codex epoch seconds) at the type and in the session docs.
* test: route auto-fallback suite through temp-dir helper plans
The auto-fallback suite now imports the shared temp-dir helper for its
seeded session store, so the top-level helper routing fixture must list
it in the auto-reply plan.
2026-07-04 14:30:47 -04:00
Dallin Romney
d96db362bd
refactor(voice-call): reuse webhook path normalization ( #99766 )
2026-07-04 10:53:07 -07:00
Peter Steinberger
eafe2a8d0b
refactor: consolidate duplicated plugin state and doctor migration plumbing onto SDK seams ( #99850 )
...
* refactor(plugin-sdk): add createPersistentDedupeCache and migrate channel presence caches
* refactor(matrix): adopt SDK approval reaction target store
* refactor(plugin-sdk): share doctor legacy-state migration fs helpers
* refactor(memory-core): dedupe qmd cache entry envelope validation
* chore(plugin-sdk): pin surface budgets for shared dedupe and doctor helpers
* test(matrix): use future approval expiry fixtures for reaction targets
* test(matrix): use future approval expiry fixtures for reaction targets
2026-07-04 01:51:03 -07:00
Dallin Romney
3b4092dbaa
test: add executable runtime fixture canaries ( #99737 )
...
* test(qa): add runtime fixture canaries
* test(voice-call): track fixture temp directories
2026-07-03 20:22:40 -07:00
Dallin Romney
59b08b4693
refactor(shared): consolidate remaining channel lazy loaders ( #99302 )
2026-07-02 19:08:11 -07:00
Vincent Koc
3e2646a786
fix(release): use workspace host deps in release lockfile
...
(cherry picked from commit d377c0f910 )
2026-06-30 15:54:12 -07:00
Vincent Koc
66e676d29b
chore(release): close out 2026.6.11 on main
2026-06-30 11:31:08 -07:00
Vincent Koc
c16bb8725a
fix(channels): keep text previews UTF-16 safe
2026-06-30 11:04:32 -07:00
Agustin Rivera
825aafac57
fix(voicecall): redact read-scoped status payloads ( #97870 )
...
* fix(voicecall): redact read-scoped status payloads
* fix(voicecall): make status assertion lint-safe
2026-06-29 15:38:29 -07:00
mushuiyu886
65fec9d787
fix(voice-call): emit canonical session keys ( #89884 )
...
* fix(voice-call): scope generated session keys by agent
* docs(voice-call): document session key canonicalization
* test(voice-call): prove legacy session migration
* fix(voice-call): preserve canonical session ownership
* fix(sessions): isolate opaque nested identities
* fix(voice-call): preserve routing ownership
* fix(voice-call): enforce inbound route direction
* fix(sessions): preserve migration and policy boundaries
* fix(sessions): normalize ambiguous main aliases
* fix(sessions): preserve canonical peer and warning paths
* fix(sessions): exclude mixed-case scoped legacy keys
* fix(sessions): cover first-run plugin migration gaps
* fix(sessions): compare aliased store identities
* fix(sessions): coalesce aliased store ownership
* fix(sessions): defer ambiguous aliased migrations
* fix(sessions): preserve shared migration boundaries
* fix(sessions): preserve opaque peer ownership
* fix(sessions): reject ambiguous ownership shapes
* fix(sessions): preserve transcript rewrite keys
* fix(sessions): close routing and migration ambiguities
* fix(sessions): preserve plugin-owned ACP aliases
* fix(sessions): retain physical store ownership
* fix(sessions): restore configured store owners
* fix(sessions): reject malformed store owners
* fix(sessions): validate ACP store ownership
* fix(sessions): include canonical store owners
* fix(sessions): preserve final store symlinks
* fix(sessions): retain shared row owners
* fix(sessions): close legacy policy gaps
* fix(sessions): preserve aliases across migrations
* fix(sessions): resolve first-run store ownership
* fix(sessions): preserve hostile legacy keys
* fix(sessions): inspect unlisted store owners
* test(doctor): refresh migration harness
* fix(sessions): preserve opaque route segments
* fix(sessions): retain metadata during migration
* fix(sessions): fail closed on store alias uncertainty
* fix(sessions): defer aliased store rewrites
* fix(sessions): retain legacy row owners
* test(sessions): harden migration proof
* fix(sessions): migrate opaque agent keys
* chore(plugin-sdk): refresh API baseline
* fix(voice-call): reuse public routing parser
* fix(sessions): retain readable alias warnings
* fix(sessions): reject opaque nested routes
* fix(sessions): share strict delivery parsing
* test(voice-call): preserve malformed Matrix case
* fix(sessions): reject legacy peer overlap
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-06-27 01:29:58 +01:00
Josh Lehman
d716900929
refactor: route voice call agent runs through session target ( #96539 )
2026-06-24 12:48:39 -07:00
Vincent Koc
0671c08900
chore(release): close out 2026.6.10 on main ( #96271 )
...
* chore(release): close out 2026.6.10 on main
* chore(release): align native app metadata for 2026.6.10
* chore(release): sync Android 2026.6.10 notes
* docs(changelog): preserve 2026.6.9 history
* docs(changelog): preserve 2026.6.9 history
2026-06-24 11:51:14 +08:00
Vincent Koc
905c9759a7
refactor(voice-call): share path normalization
2026-06-22 22:18:49 +08:00