Commit Graph

40 Commits

Author SHA1 Message Date
Peter Steinberger d60a5f7dd4 refactor(plugins): consolidate delivery fixtures (#114464) 2026-08-09 08:30:53 -07:00
Peter Steinberger 11e897a630 fix(discord): preserve attachment content types (#114460)
Co-authored-by: Zhe Liu <15888718+zheliu2@users.noreply.github.com>
2026-08-09 04:44:38 -07:00
Peter Steinberger 5439732124 fix(discord): remove only the bot own reactions (#120785) 2026-08-08 17:21:03 -07:00
Peter Steinberger b4a26783f7 refactor(test): consolidate duplicated requireRecord and provider HTTP mock helpers (#119982)
* refactor(test): consolidate duplicated test helpers

* test: remove stale record guard import

* fix(test): remove orphaned record guards

* refactor(test): keep record requirement messages exhaustively typed

* fix(test): keep packages/ai record guard package-local
2026-08-06 14:48:01 -07:00
Peter Steinberger ca11c4902d fix(discord): retry safe webhook and reaction requests (#116821)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 05:21:42 -07:00
Peter Steinberger 59e1d58614 fix(discord): preserve forum delivery identity and actionable failures (#116750)
* fix(discord): preserve forum thread delivery and receipts

* refactor(discord): centralize forum delivery receipt aggregation

---------

Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 04:22:41 -07:00
Peter Steinberger 8108b9637b fix: preserve Discord bold and Mattermost tables (#113037)
* refactor(channels): unify Discord and Mattermost markdown

* build(discord): refresh shrinkwrap

* refactor(discord): split markdown formatter
2026-07-23 06:42:22 -07:00
Peter Steinberger b624abfc69 fix(discord): stop channel presence greetings for unrelated guild members (#108448)
* fix(discord): scope presence wakes to channel viewers

* chore: remove release-owned changelog entry

* fix(discord): bound presence permission lookups

* test(discord): bind presence fetch mock

* fix(discord): keep presence lookup overflow retryable
2026-07-15 13:51:48 -07:00
Peter Steinberger 3932a6038c refactor(discord): privatize internal plugin surfaces (#108003)
* refactor(discord): privatize internal plugin surfaces

* chore(deadcode): update export baseline
2026-07-14 21:26:00 -07:00
Peter Steinberger 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
Yuval Dinodia df883ab81a fix(discord): stop retrying non-idempotent sends on post-connect-ambiguous errors (#103867)
* fix(discord): stop retrying non-idempotent sends on post-connect-ambiguous errors

Discord's outbound retry runner treated every transient transport error as
retryable, including ECONNRESET, ETIMEDOUT, AbortError, and the undici
headers/body/socket timeouts. Those errors can fire after Discord has already
received and created the message but before the client reads the response, so
replaying the non-idempotent createChannelMessage POST delivers the same
message twice while reporting success.

Add a pre-connect-only classifier (isRetryableDiscordPreConnectError) covering
errors that provably never reached Discord (DNS/connect refused/connect
timeout) plus rate-limit rejections, mirroring the Telegram send-path
carve-out. The retry runner now accepts a per-call nonIdempotent option; the
message-create and thread-create call sites opt in so ambiguous post-connect
errors surface to the caller instead of double-sending. Idempotent REST calls
(reactions, edits, DM-channel lookup, uploads) keep the broader transient set.

* fix(discord): retry nonce-enforced message creates

* fix(discord): scope create retries by endpoint

* fix(discord): stabilize sticker and poll create nonce across retries

* fix(discord): tighten create retry safety

* fix(discord): preserve nonce-safe retries

* fix(discord): scope nonce fields to message creates

* test(discord): cover nonce-safe direct sends

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 00:54:23 -07:00
tzy-17 3dd5c1880f fix(discord): honor forum archive defaults (#103033)
Carry typed forum/media parent metadata through the message-send path so implicit thread creation uses the configured default archive duration.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 00:23:34 +01:00
davelutztx 8aaf9fc6bc fix(discord): send fresh final messages after previews (#99711)
* fix(discord): send fresh final messages after previews

* fix(discord): suppress broadcast mentions on fresh finals

* docs(changelog): note Discord streamed final fix

* fix(discord): stabilize targeted mention policy

---------

Co-authored-by: Dave Lutz <dave@lutzfamily.net>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 19:14:09 +01:00
Peter Steinberger bfb89d3ea6 fix(discord): limit implicit reply fanout (#100784)
* fix(discord): limit implicit reply fanout

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

* fix(discord): preserve oversized fallback fanout

* refactor(discord): make reply metadata per-message

* fix(discord): keep reply receipts serializable

* docs(changelog): defer Discord entry to release

* refactor(discord): model native reply fanout

---------

Co-authored-by: qingminlong <qing.minlong@xydigit.com>
2026-07-06 17:55:23 +01:00
Masato Hoshino a327cec143 fix(discord): surface failed bulk reaction removals instead of false success (#90038) 2026-07-06 16:21:53 +01:00
lin-hongkuan 9607c3a2bf fix(discord): preserve text after oversized uploads (#99577)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: lin-hongkuan <lin-hongkuan@users.noreply.github.com>
2026-07-06 09:25:05 +01:00
xingzhou 741d9524be fix: outbound recovery can replay already sent replies (#99600)
* fix(outbound): avoid replaying sent recovery deliveries

* fix(outbound): persist recovery send state before ack

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

* fix(outbound): preserve partial send evidence across adapters

* test(line): cover multi-send delivery progress

* fix(outbound): preserve repeated receipt result multiplicity

* test(heartbeat): expect delivery progress callback

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 01:09:12 -07:00
Peter Lee f3982d6442 fix(discord): propagate timeout through channel capabilities diagnostics (#93716)
* fix(discord): propagate timeout through channel capabilities diagnostics

* fix(discord): fix type error in capabilities timeout test

* fix(discord): cancel timed-out capability diagnostics

* fix(discord): abort in-flight capability requests

---------

Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com>
2026-06-17 03:27:50 +08:00
Peter Steinberger 23716de446 docs: document discord extension sources 2026-06-04 22:06:01 -04:00
Josh Avant c5b987274a fix(discord): restore bare numeric channel sends (#86571)
* fix(discord): restore bare numeric channel sends

* docs: add Discord channel send changelog
2026-05-25 10:24:20 -07:00
Peter Steinberger 4f4d108639 chore(lint): remove underscore-dangle allow list (#83542)
* chore(lint): reduce underscore-dangle exceptions

* chore(lint): reduce more underscore exceptions

* chore(lint): remove underscore-dangle allow list

* fix(lint): repair underscore cleanup regressions

* test(lint): track version define suppression
2026-05-18 14:56:06 +01:00
Peter Steinberger 41810a462e fix(discord): suppress link embeds by default
* fix(discord): suppress link embeds by default

* fix(discord): handle missing stream config
2026-05-15 15:22:54 +01:00
Peter Steinberger eb5685cfab test: guard discord send mock calls 2026-05-12 02:10:57 +01:00
Peter Steinberger e43d246e30 test: clear discord basic send broad matchers 2026-05-10 11:22:38 +01:00
Peter Steinberger 05eda57b3c refactor: migrate bundled plugins to message lifecycle 2026-05-06 01:46:42 +01:00
Peter Steinberger fc4da581b3 fix(discord): advertise upload-file message action 2026-05-02 07:21:10 +01:00
Peter Steinberger 8c4c12a6dd fix(discord): add outbound mention aliases 2026-05-02 03:54:07 +01:00
Peter Steinberger 20945b84b4 feat: generalize message access groups (#75813) 2026-05-01 23:55:26 +01:00
Peter Steinberger b217cd0972 feat(discord): allow DM access groups from channel audiences 2026-05-01 23:55:26 +01:00
Peter Steinberger dfe75db09d fix(discord): surface final reply permission context 2026-04-23 23:28:16 +01:00
Peter Steinberger 64a98dea8d fix(discord): restore DM reactions and guild activation 2026-04-22 20:29:50 +01:00
Peter Steinberger 95331e5cc5 fix(channels): thread runtime config through sends 2026-04-22 06:47:51 +01:00
Peter Steinberger 134d309571 fix(discord): raise default media cap 2026-04-06 03:22:20 +01:00
Tak Hoffman 58d6c16d12 fix: honor discord default mention account 2026-04-03 14:24:07 -05:00
Peter Steinberger f7285e0a9e test: speed up extension suites 2026-03-31 02:25:02 +01:00
Peter Steinberger 88f49c27a0 test: speed up discord extension suites 2026-03-24 15:16:18 +00:00
Peter Steinberger fc9739313c test: harden channel suite isolation 2026-03-23 11:09:12 +00:00
scoootscooob 24032dcc0e Reply: fix generated image delivery to Discord (#52489) 2026-03-22 15:18:16 -07:00
Gustavo Madeira Santana 513b4869d8 Discord: stabilize provider registry coverage 2026-03-19 01:53:55 -04:00
scoootscooob 5682ec37fa refactor: move Discord channel implementation to extensions/ (#45660)
* refactor: move Discord channel implementation to extensions/discord/src/

Move all Discord source files from src/discord/ to extensions/discord/src/,
following the extension migration pattern. Source files in src/discord/ are
replaced with re-export shims. Channel-plugin files from
src/channels/plugins/*/discord* are similarly moved and shimmed.

- Copy all .ts source files preserving subdirectory structure (monitor/, voice/)
- Move channel-plugin files (actions, normalize, onboarding, outbound, status-issues)
- Fix all relative imports to use correct paths from new location
- Create re-export shims at original locations for backward compatibility
- Delete test files from shim locations (tests live in extension now)
- Update tsconfig.plugin-sdk.dts.json rootDir from "src" to "." to accommodate
  extension files outside src/
- Update write-plugin-sdk-entry-dts.ts to match new declaration output paths

* fix: add importOriginal to thread-bindings session-meta mock for extensions test

* style: fix formatting in thread-bindings lifecycle test
2026-03-14 02:53:57 -07:00