Beta - #894
Conversation
fix(vkvideo): reliably capture VK Video popup chat messages Rework VK Video message handling so chat is captured when added DOM nodes contain nested ChatMessage roots, instead of assuming the inserted node is itself a message. - Replace the per-node `skip` flag with per-message `ssnProcessed` marking so valid messages are not dropped when container elements are inserted. - Add `getMessageElements()` to search the added node, its closest match, and descendants for `[class*='ChatMessage_root_']`. - Start processing the chat root immediately once detected; remove the artificial 2-second delay. Add a Playwright test for `sources/vkvideo.js` and unignore it in `.gitignore`. Also includes line-ending normalization in the docs files touched while updating this feature. ``` [auto-enhanced]
docs: update Discord webhook event flow plan to implemented status
The Discord webhook template-variable work is complete and validated.
Update the plan document to describe the implemented behavior instead of
the proposed design.
- Call Webhook now renders template variables in JSON string values using
the shared Event Flow `replaceTemplateVars()` behavior.
- Templated JSON is parsed, rendered, and serialized safely so user
content containing quotes, newlines, Unicode, or emoji cannot corrupt
the webhook body.
- Non-templated custom webhook bodies remain unchanged.
- The built-in Discord template now uses `{username}`, `{message}`, and
`{chatimg}` with plain-text content, restricted mentions, and reflection
loop protection.
- Validation results are included: 55 focused tests pass and the SSApp
Electron E2E test passes.
```
[auto-enhanced]
fix(castyr): harden live chat integration and expand test coverage - Ignore disabled/read-only chat inputs so focusChat fails gracefully - Add Castyr to platform docs and site list with pop-out chat setup details - Strengthen Castyr source tests: * validate source icon is a 128x128 PNG * assert rich message field defaults * verify viewer-count updates are suppressed when disabled or settings are off ``` [auto-enhanced]
test(blaze): expand chat integration test coverage Refactor blaze-source tests into isolated scenarios and assert page error-free operation. Add coverage for empty-chat first messages, lazily created chat lists, delayed/progressive history batches, and advanced initial indexes to ensure history is never forwarded as live chat. ``` [auto-enhanced]
fix(blaze): resolve chat startup capture race and retire Trovo source - Harden the Blaze chat startup capture path. - Remove Trovo from EventFlowEditor platform dropdowns. - Move sources/trovo.js to sources/graveyard/ and remove it from active manifests. - Update agent platform-source docs to reflect Trovo's retirement. ``` [auto-enhanced]
fix(settings): update Kick sign-in user agent and CSP for Windows Update the Kick sign-in configuration to use Chrome 151's user agent and include matching `mockUserAgentData` with Windows platform details. Also disable `enforceSigninCSP` to avoid Content Security Policy interference during sign-in. This restores Kick sign-in compatibility on Windows. ``` [auto-enhanced]
fix(twitch): extract Twitch GIF URLs and update Discord sign-in - Parse Twitch GIF URLs from message fragments or `gifs` tags and expose them as `contentimg` on normalized messages. - Normalize object-shaped Twitch chat messages containing `.text` so raw message text is handled correctly. - Add `tests/twitch-gif-message.test.js` to the test allowlist. - Carry the new `contentimg` field through websocket source messages. - Replace the Discord sign-in `userAgent` with full Chrome/148 user agents per platform, disable sign-in CSP enforcement, and skip preload/UA-data overrides so Discord login works again. ``` [auto-enhanced]
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f31b6ce531
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (initialChatSyncComplete) { | ||
| target.querySelectorAll("[data-item-index],[data-index]").forEach(function(item) { | ||
| scheduleProcess(item); | ||
| }); |
There was a problem hiding this comment.
Reseed each replacement Blaze chat container
When Blaze replaces the Virtuoso list after a channel switch or reconnect, initialChatSyncComplete remains true, so every existing row in the new container is processed as live instead of seeded as backlog. New-channel signatures will not be in emittedSignatures, causing the visible chat history to flood overlays and automations.
Useful? React with 👍 / 👎.
| var firstIndex = getMessageIndex(messageRows[0]); | ||
| var isInitialBacklog = rows.length > 1 || (!isNaN(firstIndex) && firstIndex > 0); |
There was a problem hiding this comment.
Suppress a lone existing Blaze history row
When the extension attaches to a quiet chat containing exactly one historical row at index 0, this heuristic sets isInitialBacklog to false and emits that old row as a new message. Rows already present when the container is first detected need to remain backlog even when there is only one.
Useful? React with 👍 / 👎.
| function requestSettings() { | ||
| if (!hasChromeRuntime()) { | ||
| return; |
There was a problem hiding this comment.
Add the Electron inbound bridge for Castyr
When Castyr runs in the Electron app without chrome.runtime, this returns before loading settings, while the only listener below is also Chrome-gated. The source therefore remains permanently enabled, ignores text-only mode, and never emits viewer counts because showviewercount/hypemode stay unset; it needs to consume the SSApp IPC/postMessage requests as well as use the existing outbound fallback.
AGENTS.md reference: AGENTS.md:L3-L5
Useful? React with 👍 / 👎.
fix(blaze): correct initial chat sync for lone history rows and container replacement
The previous startup logic incorrectly assumed a lone index-zero row was
always the first live message. This caused two regressions:
1. **Pre-existing history:** Pages loading with a single history row (index 0)
had that row emitted as a live message instead of being seeded as backlog.
2. **Container replacement:** SPA navigations replacing the chat container
(e.g., `virtuoso-item-list`) caused existing history rows in the new
container to be emitted as live messages.
This commit introduces a state machine to distinguish "cold start with history"
from "lazy load into empty chat":
* Tracks `hasObservedChatContainer` and `sawMissingChatBeforeFirstContainer`
to detect if the page rendered without a chat container initially.
* A lone index-zero row is now treated as **live** only when we previously
observed a missing container (indicating a lazy/empty chat start).
* Rows present at attachment are seeded as backlog by default.
* On container replacement, sync state is fully reset and history is re-seeded.
Tests added for single existing history row and replacement container scenarios.
Refs: 61d16d4 (initial startup race fix)
```
[auto-enhanced]
081a078 to
1af75fa
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 081a0782f0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (!container.marked){ | ||
| if (container && !container.marked){ | ||
| container.marked=true; | ||
|
|
There was a problem hiding this comment.
Preserve VK Video startup backlog suppression
When VK Video creates the chat container before asynchronously hydrating its existing rows, attaching the observer immediately causes every historical row added during hydration to be processed and forwarded as live chat. The removed two-second delay previously kept that initial backlog outside the observer; seed existing rows or retain a startup suppression phase before accepting new messages.
Useful? React with 👍 / 👎.
fix(twitch): normalize GIF payloads with contentimg and meta.gifLabel Twitch GIF messages now expose their Giphy asset in `contentimg`, keep `chatmessage` empty, and preserve Twitch's fallback label in `meta.gifLabel`. This removes duplicate text from chat rendering and makes GIF payloads consistent across IRC, EventSub, and websocket paths. - providers/twitch: set `contentimg`, clear `chatmessage`, and add `meta.gifLabel` for GIF messages - sources/twitch: widen GIF content image selector to include gigantified GIF images - sources/websocket/twitch: apply the same normalization when `contentimg` is present - docs/tests: update event reference and coverage for the new GIF payload shape ``` [auto-enhanced]
d984882 to
20ceac2
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d98488297d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (assetType === 'sticker') { | ||
| return true; |
There was a problem hiding this comment.
Fall back to metadata for incomplete sticker fragments
When Kick splits a sticker between a lightweight fragment such as {type: "sticker", text: "Party"} and metadata containing its ID or URL, this returns true based only on the fragment type. renderKickMessageHtml then skips findKickStickerAttachment, even though the fragment can render only fallback text, so the sticker image is lost; suppress the metadata fallback only when the fragment actually supplies or renders the asset.
Useful? React with 👍 / 👎.
**Improved Commit Message:** ``` fix(likes): auto-enable total collection when showing in dock, refactor search UI - Automatically enable the global `captureliketotals` setting when a user toggles the `showlikecount` display option for a dock via the popup. This ensures the required data pipeline is active, fixing a common point of user confusion. The reverse (disabling display) does not turn off collection, as intended. - Document this new behavior in `customoverlays.md` and `event-reference.html`. - Refactor the popup's internal search feature: replace the previous hide/show logic with a clearer "matched element" highlight (gold border), optimize performance by reducing DOM thrashing, and increase the debounce delay for smoother input handling. - Minor UI tweak: add a new `centerorigin` option for the Reactions overlay and adjust its default scale from 1x to 3x for better visibility. ``` [auto-enhanced]
59f459d to
c09749e
Compare
本次提交重构了 `popup.html` 中的 `⚙️ Mechanics` 设置部分,将其拆分为三个更清晰、功能更集中的子部分: 1. `⚙️ Mechanics - Events & Capture` 2. `⚙️ Mechanics - Message Processing` 3. `⚙️ Mechanics - Connections & Integrations` **主要变更:** - **`popup.html`**:为上述每个新部分创建了独立的 HTML 容器(`div`)、折叠控件(`collapsible`)和标签。 - **`popup.js`**:更新了 `BEGINNER_ADVANCED_OPTION_SELECTORS` 映射,将相关的选项选择器移入对应的新部分 ID 中,并调整了 `BEGINNER_ADVANCED_OPTION_HEADINGS` 配置。 - **`tests/popup-search.test.js`**:新增测试用例,验证新的三个部分在 HTML 中均存在且具有正确的标签,确保搜索和 UI 功能完整。 此重构旨在改善设置面板的组织结构,使功能分组更直观,并可能解决因部分过于臃肿导致的 UI 问题或崩溃。 [auto-enhanced]
470cdee to
5f4f579
Compare
``` refactor(popup): 引入安全搜索结果面板,重构弹出窗口搜索体验 替换原有的实时过滤机制,新增独立的 `#popupSearchResults` 面板,以更安全、 更可靠的方式展示搜索结果。主要变更包括: - **UI 重构**:添加一个固定定位的面板 (`popupSearchResults`),专门用于显示 搜索结果,避免直接修改和隐藏弹窗原有的实时 DOM 结构。 - **索引增强**:改进搜索索引的创建逻辑 (`createPopupSearchIndex`),确保分组行 内的控件被独立索引,并将下拉框 (`<select>`) 选项和 `data-*` 属性 (如 `data-setting`, `data-textparam` 等) 纳入可搜索内容范围。 - **逻辑优化**:重写核心搜索与渲染函数 (`applyPopupSearchNow`, `renderPopupSearchResults`),使其专注于收集匹配项并渲染到新的结果面板, 从而解耦搜索与视图更新。 - **体验改进**:文本规范化现在会智能拆分驼峰命名 (如 `camelCase`),提升 搜索的准确性与覆盖率。 - **测试强化**:更新测试套件,验证新面板的存在、搜索逻辑不直接操作 UI 的 原则,以及新索引的完整性。 此举旨在提升搜索功能的稳定性、可维护性和用户体验。 ``` [auto-enhanced]
7e457c9 to
3e1055f
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7e457c93b7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (Date.now() < backlogSuppressUntil) { | ||
| hasSeenOrRemember(identity); | ||
| return; |
There was a problem hiding this comment.
Preserve live Castyr messages during attachment
When a genuine chat row arrives within 750 ms of the initial container detection or a container replacement, this branch marks its identity as seen and returns, so later scans cannot emit it. Limit backlog suppression to rows that existed when the container was attached rather than dropping every newly added row during the suppression window.
Useful? React with 👍 / 👎.
| { | ||
| "js": ["./sources/amazon.js"], |
There was a problem hiding this comment.
Update the Trovo catalog assertion
After removing Trovo from the manifest and source catalog, node tests/popup-link-generation.test.js now deterministically fails at its assertion that Trovo must remain in source dropdowns. Update that assertion alongside the retirement so the committed focused test reflects the new catalog.
Useful? React with 👍 / 👎.
b21fa0b to
b0d059b
Compare
…ns the "why" behind the test, and explicitly links it to the recent fix it verifies: ``` test(tts): add regression test for ElevenLabs playback queue race condition This test validates the fix in 61a3f12 that preserves queued playback across media completion. It simulates rapid successive TTS requests to ensure the ElevenLabs queue correctly maintains order and does not drop or overlap messages when the current audio ends, guarding against a regression in the queue management logic. ``` **Key improvements made:** 1. **Descriptive Subject:** Changes "cover" to "add regression test for... race condition" for immediate clarity. 2. **Expanded Body:** The message now explicitly states the test's purpose (validating the previous fix `61a3f12c`), describes the scenario it simulates (rapid requests), and details what specific behavior it asserts (correct queue order, no message loss/overlap). 3. **Context & Linkage:** It directly references the related fix commit, providing a clear audit trail and explaining *why* this test is necessary. 4. **Clarity of Outcome:** Ends by stating the test's goal is to "guard against a regression," which highlights its long-term value in maintaining stability. [auto-enhanced]
b0d059b to
1be53a0
Compare
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…state sharing** The previous `duplicateFlow` implementation performed a shallow copy, causing the duplicated flow to share the same node IDs as the original. This meant that any subsequent changes to the state of a node in one flow would inadvertently affect its counterpart in the other, leading to inconsistent behavior and bugs. This fix completely rewrites the duplication logic to: 1. Generate new, unique IDs for all nodes in the duplicated flow. 2. Rebuild all connections (`from` and `to`) to point to the new node IDs. 3. Update internal references, such as `config.targetNodeId`, to maintain the correct graph structure in the copy. 4. Ensure the original flow remains completely unmutated. A comprehensive test has been added to verify that the duplicated flow receives independent node IDs, connections are remapped correctly, and the original is not altered. [auto-enhanced]
b1019ba to
8c30921
Compare
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
- Set `fontSize` on reaction items in `reactions.html` to match the calculated `size` variable, ensuring emoji characters scale proportionally with image reactions. - Add Playwright e2e test case verifying emoji reactions respect the `scale` query parameter (4x), asserting the emoji font size matches the wrapper dimensions. [auto-enhanced]
5a75241 to
fc0337d
Compare
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…story, here is an improved commit message: **Improved Commit Message:** ``` fix(reactions): set default emoji scale to 1x for better initial display Change the default value for the reaction emoji scale from 3x to 1x. This provides a more appropriate starting size that fits better with the overlay's layout and avoids oversized reactions on initial load. The 1x default aligns with the base size before user customization. This update is consistent with the recent fix to ensure emoji glyphs scale correctly with the overlay size (fc0337d). Updated defaults in: - popup.html (UI range slider) - reactions.html (JS fallback and URL parameter default) - playwright-reactions-overlay-e2e.cjs (test assertions) ``` **Key Improvements Made:** 1. **Provides a clear "Why":** Explains the rationale ("better initial display", "fits better with the overlay's layout", "avoids oversized reactions"). 2. **Adds Context:** Explicitly links the change to the related recent fix (`fc0337d9`), showing logical progression. 3. **Specifies Scope:** Clearly lists the affected components (UI, JS logic, tests). 4. **Uses Conventional Prefix:** Employs the `fix(reactions):` prefix, which aligns with the conventional commit style seen in the branch history and accurately describes this as a corrective/UX fix. 5. **Improves Readability:** Uses a concise subject line followed by a detailed body with bullet points for clarity. [auto-enhanced]
616a458 to
4886a5e
Compare
No description provided.