Peter Steinberger
e717d24c2e
refactor(meetings): close manual action state ( #114247 )
2026-07-26 23:25:19 -04:00
Peter Steinberger
7594e09100
refactor(meetings): centralize talk-back readiness ( #114229 )
2026-07-26 22:03:12 -04:00
Peter Steinberger
517978a808
refactor(meetings): converge Google Meet probes and adapter parsing ( #113970 )
...
* refactor(meetings): converge Google Meet adapters
* fix(meetings): guard manual action category lookup
* fix(meetings): type manual action category map
2026-07-25 19:00:44 -07:00
Peter Steinberger
89122bf298
refactor(google-meet): consolidate plugin test fixtures ( #113256 )
...
* test(google-meet): consolidate plugin fixtures
* test(google-meet): keep fixture internals private
2026-07-24 01:02:39 -07:00
Peter Steinberger
129f86bbf5
feat: auto-collect durable meeting transcripts ( #113122 )
...
* feat(meetings): auto-collect durable transcripts
* chore(plugin-sdk): refresh meeting transcript API baseline
* fix(plugin-sdk): keep meeting transcript options implicit
* fix(meetings): satisfy transcript bridge typecheck
* fix(google-meet): preserve optional caption policy context
* fix(google-meet): retain caption mode callback type
* refactor(meetings): split transcript lifecycle helpers
* chore(plugin-sdk): refresh split meeting runtime baseline
* refactor(google-meet): split session helpers
* fix(meetings): decouple transcript retries from leave
* fix(meetings): isolate provider subscribers
* fix(meetings): harden capture lifecycle
* fix(meetings): preserve capture during storage outages
* fix(meetings): preserve pending transcript ordering
* fix(meetings): retry capture initialization
* test(agents): reflect default transcript registration
2026-07-23 11:41:08 -07:00
Peter Steinberger
bac2bbd243
refactor(google-meet): split CLI modules ( #112937 )
...
* refactor(google-meet): split CLI modules
* test(google-meet): align CLI split routing
* refactor(google-meet): isolate CLI command contract
2026-07-23 03:00:34 -04:00
Peter Steinberger
cca67fc842
fix(meetings): verify talk-back loopback signal ( #112939 )
...
* fix(meetings): verify talk-back loopback signal
* refactor(meetings): keep verification helper private
* fix(meetings): type loopback buffers generically
* fix(meetings): bound loopback reference buffers
* fix(meetings): align loopback proof with playback
* chore(meetings): defer release note ownership
* fix(meetings): keep loopback health type private
2026-07-23 02:32:24 -04:00
Peter Steinberger
32014bd84f
refactor(google-meet): split plugin entry modules ( #112903 )
2026-07-23 01:03:51 -04:00
Peter Steinberger
dfc88210be
refactor(google-meet): split Meet API client ( #112873 )
...
* refactor(google-meet): split Meet API client
* refactor(google-meet): keep internal API types private
2026-07-23 00:29:21 -04:00
Peter Steinberger
939ecb5ef8
refactor(meeting-bot): hoist meeting adapter runtime glue ( #112785 )
...
* refactor(meeting-bot): hoist adapter runtime glue
* refactor(meeting-bot): specialize runtime adapters
* refactor(google-meet): reuse runtime adapter alias
* refactor(meeting-bot): privatize consult internals
* refactor(plugin-sdk): ratchet meeting runtime surface
2026-07-22 18:52:17 -04:00
sunlit-deng
74c5415e2e
fix(google-meet): reject malformed audio base64 ( #106474 )
...
* fix(google-meet): reject malformed audio base64
* refactor(meeting-bot): validate node audio centrally
Make the shared meeting-bot owner reject malformed push and pull audio for Google Meet, Teams, and Zoom without plugin-specific callbacks or permissive fallbacks.
Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-22 14:25:42 -07:00
Peter Steinberger
6f2fa019bd
fix: honor configured default agent in consults ( #111749 )
2026-07-20 01:43:00 -07:00
Peter Steinberger
b4187ced90
feat: add live-validated Zoom meeting guest plugin ( #111048 )
...
* feat(zoom-meetings): add browser guest transport
* fix(zoom-meetings): type reusable refresh result
* test(meeting-bot): bind reusable refresh callback
* chore(zoom-meetings): use existing plugin label
* chore(zoom-meetings): defer changelog to release
* test(zoom-meetings): cover node setup through public host
2026-07-18 17:17:26 -07:00
Peter Steinberger
d7b0bacf10
fix(teams-meetings): join and transcribe live meetings reliably ( #110615 )
...
* fix(teams-meetings): validate live web flows
* chore(plugin-sdk): update meeting runtime baseline
* test(teams-meetings): align live validation fixtures
* fix(teams-meetings): harden live browser validation
* fix(teams-meetings): preserve live transition lifecycles
* fix(meeting-bot): pass wait budget during recovery
* test(teams-meetings): satisfy extension lint
* fix(teams-meetings): preserve browser session ownership
* fix(teams-meetings): retire audio bridges after leave
* fix(teams-meetings): harden leave and audio ownership
* fix(teams-meetings): preserve leave transition ownership
* fix(teams-meetings): serialize leave cleanup safely
* fix(teams-meetings): guard live transition cleanup
* fix(teams-meetings): preserve adapter boundaries
* fix(teams-meetings): await caption readiness
* fix(teams-meetings): surface caption blockers
* fix(teams-meetings): retry transient media playback
* chore(teams-meetings): defer release notes
* refactor(meeting-bot): isolate navigation error helper
* test(teams-meetings): keep page control helper private
* fix(meeting-bot): bound caption lifecycle cleanup
* chore(plugin-sdk): refresh API baseline
* test(teams-meetings): split caption ownership coverage
* fix(teams-meetings): retry pending audio routing
* fix(teams-meetings): retain leave transition ownership
* fix(teams-meetings): refresh transcript target
* fix(teams-meetings): bound audio routing retries
* fix(teams-meetings): retry pending remote audio
* fix(teams-meetings): harden media source ownership
2026-07-18 15:57:22 +01:00
Peter Steinberger
fcdf3954d7
fix(meetings): wait for audio bridge cleanup ( #110548 )
...
* fix(meetings): wait for audio bridge cleanup
Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com >
* test(meetings): skip POSIX signal proof on Windows
---------
Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com >
2026-07-18 09:00:19 +01:00
Peter Steinberger
72d597c202
fix(google-meet): harden talkback bridge recovery ( #110092 )
...
* fix(meeting-bot): harden deferred runtime findings
* fix(google-meet): gate paired-node talkback bridge
* fix(google-meet): preserve tracked tab during bridge recovery
* docs(google-meet): explain external bridge exception
2026-07-17 23:50:30 +01:00
Peter Steinberger
ecd285222c
fix: harden recovered meeting browser sessions ( #110089 )
...
* fix(meeting-bot): harden browser session recovery
* chore: leave meeting notes to release generation
* docs: fix release-gate example lint
2026-07-17 23:20:51 +01:00
Peter Steinberger
ee762ad761
feat(teams-meetings): join Microsoft Teams meetings via the meeting-bot core ( #109964 )
...
* feat(teams-meetings): join Microsoft Teams meetings via the meeting-bot core
* fix(teams-meetings): satisfy lint and package-boundary contracts
2026-07-17 13:23:39 +01:00
Peter Steinberger
5c21b70144
fix(google-meet): preserve attendance CSV row boundaries ( #109926 )
...
* fix(google-meet): harden attendance CSV export
* chore: defer google meet release note
2026-07-17 11:47:00 +01:00
Peter Steinberger
3d7346f96b
test(google-meet): keep CLI test on plugin boundary ( #109915 )
2026-07-17 11:26:49 +01:00
Pavan Kumar Gondhi
93e9e2fe93
fix(google-meet): neutralize attendance CSV formulas [AI] ( #109725 )
...
* fix: neutralize meet attendance csv cells
* fix: cover fullwidth csv formula prefixes
* test: use temp dir tracker for meet csv export
2026-07-17 15:38:12 +05:30
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
Wynne668
68c4cb31d2
fix(google-meet): report blank Twilio setup credentials as missing ( #109674 )
...
* fix(google-meet): reject blank Twilio setup credentials
* fix: centralize Google Meet voice setup values
Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-17 01:54:43 -07:00
Peter Steinberger
e3618454f2
refactor(talk): add realtime voice session harness and adopt in google-meet and voice-call ( #109497 )
...
* refactor(talk): add realtime voice session harness and adopt in google-meet and voice-call
* fix(google-meet): satisfy prefer-const in realtime engine wiring
2026-07-16 21:28:44 -07:00
Peter Steinberger
92146f9f80
refactor(talk): share audio-energy stats and speech-threshold gate across voice surfaces ( #109466 )
2026-07-16 18:10:26 -07:00
Peter Steinberger
edd052989b
refactor(google-meet): merge host and node realtime engines behind one audio transport ( #109413 )
...
* refactor(google-meet): merge host and node realtime engines behind one audio transport
* refactor(google-meet): internalize engine helpers left test-only after realtime-node removal
2026-07-16 17:39:53 -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
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
5c509efb02
refactor(google-meet): use JSZip for exports
2026-07-14 03:29:43 -07:00
Peter Steinberger
16ff48c729
refactor(time): trust pretty-ms defaults
2026-07-14 01:15:43 -07:00
Peter Steinberger
473753001a
refactor(google-meet): trim internal exports ( #107284 )
2026-07-14 01:07:06 -07:00
Wynne668
73cb408565
fix(google-meet): reject nondecimal transcript cursors ( #106384 )
...
* fix(google-meet): reject nondecimal transcript cursors
Use parseStrictNonNegativeInteger for --since validation so hex,
exponent, and fractional spellings are rejected at the CLI boundary
instead of silently coercing to different cursor offsets.
Remove the redundant file header comment to stay within the
oversized-file LOC ratchet.
* test(google-meet): harden transcript cursor coverage
* style(google-meet): format cursor tests
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-13 22:28:18 -07:00
Peter Steinberger
adf6b08ab4
refactor: consolidate duration parsing and formatting ( #105988 )
...
* refactor: consolidate duration handling
* docs: leave release notes to release workflow
* fix: preserve build timing precision
* ci: align plugin sdk surface budgets
2026-07-12 23:38:22 -07:00
Vincent Koc
de5e15efc3
refactor(google-meet): remove obsolete Chrome testing alias ( #105416 )
2026-07-12 15:53:16 +02:00
Peter Steinberger
7c954849e6
fix(google-meet): use strong caption epochs ( #105221 )
2026-07-12 10:20:50 +01:00
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
Shubhankar Tripathy
43e138cc66
feat(google-meet): retain the full caption transcript per session ( #103387 ) ( #103811 )
...
* feat(google-meet): retain bounded transcripts
Co-authored-by: lonexreb <reach2shubhankar@gmail.com >
* chore: leave changelog to release tooling
* fix(google-meet): satisfy transcript CI checks
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-12 09:16:46 +01:00
llagy007
7ed7840c94
fix(google-meet): validate calendar Meet URLs ( #104863 )
...
* fix(google-meet): validate calendar meet urls
* fix(google-meet): share meet url normalization
* fix(google-meet): normalize Calendar Meet URLs
* fix(google-meet): keep calendar text fallback stable
* fix(google-meet): validate calendar text candidates
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: Peter Steinberger <peter@steipete.me >
2026-07-12 09:12:40 +01:00
llagy007
f6d11d0e29
fix(google-meet): guard node-host meet URLs ( #104687 )
2026-07-12 06:55:38 +01:00
Shubhankar Tripathy
86cd9786c8
fix(google-meet): actually leave the Meet call in the browser on leave ( #103386 ) ( #103522 )
...
* fix(google-meet): leave browser calls on session end
Co-authored-by: lonexreb <reach2shubhankar@gmail.com >
* fix(google-meet): keep agent browser control in gateway
* chore(google-meet): move release note to pr
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-12 06:50:13 +01:00
llagy007
f8aa995856
fix(google-meet): validate chrome node policy params ( #103752 )
2026-07-11 04:00:28 -07: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
cxbAsDev
4fcee4f4fd
fix(google-meet): force English UI when reusing existing Chrome tabs ( #103719 )
...
* fix(google-meet): force English UI when reusing existing Chrome tab
* fix(google-meet): narrow reused tab before forcing English UI
* test(google-meet): assert /navigate target id is adopted in reused tabs
* fix(google-meet): preserve active call tabs and normalize English before recovery
* fix(google-meet): preserve localized active tabs
* test(google-meet): avoid shadowing path import
* test(google-meet): align mocks with English-pinned tab reuse
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-11 00:11:00 -07: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
lzyyzznl
57c468ca1b
fix(google-meet): use truncateUtf16Safe for log value truncation ( #102617 )
...
* fix(google-meet): use truncateUtf16Safe for log value truncation
One .slice(0, 180) truncation site in the Google Meet extension
may cut UTF-16 surrogate pairs in half when the log value contains
multi-byte characters such as emoji. Replace it with
truncateUtf16Safe to keep the truncated output valid Unicode.
* test(google-meet): cover UTF-16 model log boundary
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-09 12:40:26 +01:00
wangmiao0668000666
51b4e78c33
fix(google-meet): bound Google API requests ( #102149 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-09 09:39:34 +01:00
wangmiao0668000666
28bbbe4f60
fix(google-meet): bound Calendar event lookups ( #102157 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-09 06:12:24 +01:00
wangmiao0668000666
624dfa6cf6
fix(google-meet): contain node host stream failures ( #102105 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-09 05:59:35 +01:00
Peter Steinberger
f85d438164
fix(google-meet): keep Meet sessions on the agent that joined them ( #102331 )
...
* fix(google-meet): preserve routed agent across session reuse
* chore: defer google meet release note to release closeout
---------
Co-authored-by: Peter Steinberger <peter@steipete.me >
2026-07-08 18:52:04 -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