Peter Steinberger
47083460ea
refactor: unify inbound debounce policy and split gateway/models helpers
2026-03-03 00:54:33 +00:00
Peter Steinberger
d76ddd61ec
fix(discord): add missing accountId to reaction routing params
2026-03-03 00:29:20 +00:00
Peter Steinberger
d7dda4dd1a
refactor: dedupe channel outbound and monitor tests
2026-03-03 00:15:15 +00:00
Peter Steinberger
b8b8a5f314
fix(security): enforce explicit ingress owner context
2026-03-02 23:50:36 +00:00
Peter Steinberger
7eda632324
refactor: split slack/discord/session maintenance helpers
2026-03-02 23:07:20 +00:00
Peter Steinberger
0b5d8e5b47
fix: harden discord audio preflight mention detection ( #32136 ) (thanks @jnMetaCode)
2026-03-02 22:45:41 +00:00
jiangnan
b9b47f5002
fix(discord): use correct content_type property for audio attachment detection
...
The preflight audio transcription detection used camelCase `contentType`
but Discord's APIAttachment type uses snake_case `content_type`. This
caused `hasAudioAttachment` to always be false, preventing voice message
transcription from triggering in guild channels where mention detection
requires audio preflight.
Fixes #30034
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-02 22:45:41 +00:00
ademczuk
0743463b88
fix(webchat): suppress NO_REPLY token in chat transcript rendering ( #32183 )
...
* fix(types): resolve pre-existing TS errors in agent-components and pairing-store
- agent-components.ts: normalizeDiscordAllowList returns {allowAll, ids, names},
not an array — use ids.values().next().value instead of [0] indexing
- pairing-store.ts: add non-null assertions for stat after cache-miss guard
(resolveAllowFromReadCacheOrMissing returns early when stat is null)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* fix(webchat): suppress NO_REPLY token in chat transcript rendering
Filter assistant NO_REPLY-only entries from chat.history responses at
the gateway API boundary and add client-side defense-in-depth guards in
the UI chat controller so internal silent tokens never render as visible
chat bubbles.
Two-layer fix:
1. Gateway: extractAssistantTextForSilentCheck + isSilentReplyText
filter in sanitizeChatHistoryMessages (entry.text takes precedence
over entry.content to avoid dropping messages with real text)
2. UI: isAssistantSilentReply + isSilentReplyStream guards on all 5
message insertion points in handleChatEvent and loadChatHistory
Fixes #32015
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* fix(webchat): align isAssistantSilentReply text/content precedence with gateway
* webchat: tighten NO_REPLY transcript and delta filtering
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-03-02 16:39:08 -06:00
Peter Steinberger
f7c658efb9
fix(core): resolve post-rebase type errors
2026-03-02 21:39:43 +00:00
Peter Steinberger
5f0cbd0edc
refactor(gateway): dedupe auth and discord monitor suites
2026-03-02 21:31:36 +00:00
Peter Steinberger
b782ecb7eb
refactor: harden plugin install flow and main DM route pinning
2026-03-02 21:22:38 +00:00
Peter Steinberger
3a08e69a05
refactor: unify queueing and normalize telegram slack flows
2026-03-02 20:55:15 +00:00
SidQin-cyber
479095bcfb
fix(discord): use per-channel message queues to restore parallel agent dispatch
...
Replace the single per-account messageQueue Promise chain in
DiscordMessageListener with per-channel queues. This restores parallel
processing for channel-bound agents that regressed in 2026.3.1.
Messages within the same channel remain serialized to preserve ordering,
while messages to different channels now proceed independently. Completed
queue entries are cleaned up to prevent memory accumulation.
Closes #31530
2026-03-02 20:34:41 +00:00
Peter Steinberger
9d30159fcd
refactor: dedupe channel and gateway surfaces
2026-03-02 19:57:33 +00:00
Peter Steinberger
031bf0c6c0
refactor(security): split safe-regex parse and bounded matching
2026-03-02 16:47:00 +00:00
Peter Steinberger
b1592457fa
perf(security): bound regex input in filters and redaction
2026-03-02 16:37:45 +00:00
Peter Steinberger
6b78544f82
refactor(commands): unify repeated ACP and routing flows
2026-03-02 05:20:19 +00:00
Peter Steinberger
8b05e4091c
fix(discord): prefer names in allowlist resolution logs
2026-03-02 04:31:10 +00:00
Peter Steinberger
619dfa88cb
fix(discord): enrich allowlist resolution logs
2026-03-02 04:19:37 +00:00
SidQin-cyber
6210d2e238
fix(discord): prevent wildcard component registration collisions
...
Assign distinct sentinel registration ids to Discord wildcard handlers while preserving wildcard parser keys, so select/menu/modal handlers no longer get dropped on runtimes that dedupe by raw customId.
2026-03-02 03:08:32 +00:00
Peter Steinberger
c869ca4bbf
fix: harden discord agent cid parsing ( #29013 ) (thanks @Jacky1n7)
2026-03-02 03:07:48 +00:00
李肖然
c14c17403e
style: oxfmt for agent-components
2026-03-02 03:07:48 +00:00
李肖然
e95f96f77a
fix(discord): guard cid decode to avoid URIError
2026-03-02 03:07:48 +00:00
李肖然
9aba8422ca
fix(discord): accept cid in agent component interactions
2026-03-02 03:07:48 +00:00
Peter Steinberger
25b731c34a
fix: harden discord media fallback regressions ( #28906 ) (thanks @Sid-Qin)
2026-03-02 03:05:12 +00:00
SidQin-cyber
0a67033fe3
fix(discord): keep attachment metadata when media fetch is blocked
...
Preserve inbound attachment/sticker metadata in Discord message context when media download fails (for example due to SSRF blocking), so agents still see file references instead of silent drops.
Closes #28816
2026-03-02 03:05:12 +00:00
Glucksberg
a25a73e707
discord: expose EventQueue listenerTimeout as configurable option ( fixes #24458 )
2026-03-02 02:06:24 +00:00
Ash (Bug Lab)
5b64b96c6c
fix(discord): add ackReactionScope channel override + off/none values ( #28268 )
2026-03-02 02:04:39 +00:00
haosenwang1018
60330e011b
fix(discord): log ignored messages from non-allowlisted channels
...
Closes #30676
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-02 02:03:44 +00:00
Peter Steinberger
e7cd4bf1bd
refactor(web): split trusted and strict web tool fetch paths
2026-03-02 01:14:06 +00:00
Peter Steinberger
a95c8077e8
test(discord): type gateway stop mock params
2026-03-02 01:10:03 +00:00
Peter Steinberger
c80f34f0e0
test(discord): type gateway stop mock params
2026-03-02 00:49:27 +00:00
Shakker
4274374297
Tests: type Discord gateway lifecycle wait mock
2026-03-02 00:44:34 +00:00
Peter Steinberger
0c0f556927
fix(discord): unify reconnect watchdog and land #31025/#30530
...
Landed follow-up intent from contributor PR #31025 (@theotarr) and PR #30530 (@liuxiaopai-ai).
Co-authored-by: theotarr <theotarr@users.noreply.github.com >
Co-authored-by: liuxiaopai-ai <liuxiaopai-ai@users.noreply.github.com >
2026-03-02 00:24:15 +00:00
Peter Steinberger
a62d55b283
test(discord): cover DM command decision flow
2026-03-02 00:00:05 +00:00
Peter Steinberger
75596e9370
refactor(discord): unify DM command auth handling
2026-03-02 00:00:05 +00:00
Peter Steinberger
881ac62005
test(discord): stabilize model picker timeout assertions
2026-03-01 23:53:07 +00:00
Peter Steinberger
50e2674dfc
fix(discord): unify dm command auth gating
2026-03-01 23:50:24 +00:00
Peter Steinberger
5056b6438d
fix(discord): harden reconnect recovery and preserve message delivery
...
Landed from contributor PR #29508 by @cgdusek.
Co-authored-by: Charles Dusek <cgdusek@gmail.com >
2026-03-01 23:46:07 +00:00
Sid
39a45121d9
fix(discord,slack): add SSRF policy for media downloads in proxy environments ( #25475 )
...
* fix(discord,slack): add SSRF policy for media downloads in proxy environments
Discord and Slack media downloads (attachments, stickers, forwarded
images) call fetchRemoteMedia without any ssrfPolicy. When running
behind a local transparent proxy (Clash, mihomo, Shadowrocket) in
fake-ip mode, DNS returns virtual IPs in the 198.18.0.0/15 range,
which the SSRF guard blocks.
Add per-channel SSRF policy constants—matching the pattern already
applied to Telegram on main—that allowlist known CDN hostnames and
set allowRfc2544BenchmarkRange: true.
Refs #25355 , #25322
Co-authored-by: Cursor <cursoragent@cursor.com >
* chore(slack): keep raw-fetch allowlist line anchors stable
---------
Co-authored-by: Cursor <cursoragent@cursor.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-03-01 11:30:10 -06:00
Onur Solmaz
a7929abad8
Discord: thread bindings idle + max-age lifecycle ( #27845 ) (thanks @osolmaz)
...
* refactor discord thread bindings to idle and max-age lifecycle
* fix: migrate legacy thread binding expiry and reduce hot-path disk writes
* refactor: remove remaining thread-binding ttl legacy paths
* fix: harden thread-binding lifecycle persistence
* Discord: fix thread binding types in message/reply paths
* Infra: handle win32 unknown inode in file identity checks
* Infra: relax win32 guarded-open identity checks
* Config: migrate threadBindings ttlHours to idleHours
* Revert "Infra: relax win32 guarded-open identity checks"
This reverts commit de94126771 .
* Revert "Infra: handle win32 unknown inode in file identity checks"
This reverts commit 96fc5ddfb3 .
* Discord: re-read live binding state before sweep unbind
* fix: add changelog note for thread binding lifecycle update (#27845 ) (thanks @osolmaz)
---------
Co-authored-by: Onur Solmaz <onur@textcortex.com >
2026-02-27 10:02:39 +01:00
Peter Steinberger
bce643a0bd
refactor(security): enforce account-scoped pairing APIs
2026-02-26 21:57:52 +01:00
Peter Steinberger
cd80c7e7ff
refactor: unify dm policy store reads and reason codes
2026-02-26 17:47:57 +01:00
Peter Steinberger
9a4b2266cc
fix(security): bind node system.run approvals to env
2026-02-26 16:38:07 +01:00
Onur Solmaz
a7d56e3554
feat: ACP thread-bound agents ( #23580 )
...
* docs: add ACP thread-bound agents plan doc
* docs: expand ACP implementation specification
* feat(acp): route ACP sessions through core dispatch and lifecycle cleanup
* feat(acp): add /acp commands and Discord spawn gate
* ACP: add acpx runtime plugin backend
* fix(subagents): defer transient lifecycle errors before announce
* Agents: harden ACP sessions_spawn and tighten spawn guidance
* Agents: require explicit ACP target for runtime spawns
* docs: expand ACP control-plane implementation plan
* ACP: harden metadata seeding and spawn guidance
* ACP: centralize runtime control-plane manager and fail-closed dispatch
* ACP: harden runtime manager and unify spawn helpers
* Commands: route ACP sessions through ACP runtime in agent command
* ACP: require persisted metadata for runtime spawns
* Sessions: preserve ACP metadata when updating entries
* Plugins: harden ACP backend registry across loaders
* ACPX: make availability probe compatible with adapters
* E2E: add manual Discord ACP plain-language smoke script
* ACPX: preserve streamed spacing across Discord delivery
* Docs: add ACP Discord streaming strategy
* ACP: harden Discord stream buffering for thread replies
* ACP: reuse shared block reply pipeline for projector
* ACP: unify streaming config and adopt coalesceIdleMs
* Docs: add temporary ACP production hardening plan
* Docs: trim temporary ACP hardening plan goals
* Docs: gate ACP thread controls by backend capabilities
* ACP: add capability-gated runtime controls and /acp operator commands
* Docs: remove temporary ACP hardening plan
* ACP: fix spawn target validation and close cache cleanup
* ACP: harden runtime dispatch and recovery paths
* ACP: split ACP command/runtime internals and centralize policy
* ACP: harden runtime lifecycle, validation, and observability
* ACP: surface runtime and backend session IDs in thread bindings
* docs: add temp plan for binding-service migration
* ACP: migrate thread binding flows to SessionBindingService
* ACP: address review feedback and preserve prompt wording
* ACPX plugin: pin runtime dependency and prefer bundled CLI
* Discord: complete binding-service migration cleanup and restore ACP plan
* Docs: add standalone ACP agents guide
* ACP: route harness intents to thread-bound ACP sessions
* ACP: fix spawn thread routing and queue-owner stall
* ACP: harden startup reconciliation and command bypass handling
* ACP: fix dispatch bypass type narrowing
* ACP: align runtime metadata to agentSessionId
* ACP: normalize session identifier handling and labels
* ACP: mark thread banner session ids provisional until first reply
* ACP: stabilize session identity mapping and startup reconciliation
* ACP: add resolved session-id notices and cwd in thread intros
* Discord: prefix thread meta notices consistently
* Discord: unify ACP/thread meta notices with gear prefix
* Discord: split thread persona naming from meta formatting
* Extensions: bump acpx plugin dependency to 0.1.9
* Agents: gate ACP prompt guidance behind acp.enabled
* Docs: remove temp experiment plan docs
* Docs: scope streaming plan to holy grail refactor
* Docs: refactor ACP agents guide for human-first flow
* Docs/Skill: add ACP feature-flag guidance and direct acpx telephone-game flow
* Docs/Skill: add OpenCode and Pi to ACP harness lists
* Docs/Skill: align ACP harness list with current acpx registry
* Dev/Test: move ACP plain-language smoke script and mark as keep
* Docs/Skill: reorder ACP harness lists with Pi first
* ACP: split control-plane manager into core/types/utils modules
* Docs: refresh ACP thread-bound agents plan
* ACP: extract dispatch lane and split manager domains
* ACP: centralize binding context and remove reverse deps
* Infra: unify system message formatting
* ACP: centralize error boundaries and session id rendering
* ACP: enforce init concurrency cap and strict meta clear
* Tests: fix ACP dispatch binding mock typing
* Tests: fix Discord thread-binding mock drift and ACP request id
* ACP: gate slash bypass and persist cleared overrides
* ACPX: await pre-abort cancel before runTurn return
* Extension: pin acpx runtime dependency to 0.1.11
* Docs: add pinned acpx install strategy for ACP extension
* Extensions/acpx: enforce strict local pinned startup
* Extensions/acpx: tighten acp-router install guidance
* ACPX: retry runtime test temp-dir cleanup
* Extensions/acpx: require proactive ACPX repair for thread spawns
* Extensions/acpx: require restart offer after acpx reinstall
* extensions/acpx: remove workspace protocol devDependency
* extensions/acpx: bump pinned acpx to 0.1.13
* extensions/acpx: sync lockfile after dependency bump
* ACPX: make runtime spawn Windows-safe
* fix: align doctor-config-flow repair tests with default-account migration (#23580 ) (thanks @osolmaz)
2026-02-26 11:00:09 +01:00
Peter Steinberger
e915b4c64a
refactor: unify monitor abort lifecycle handling
2026-02-26 04:36:25 +01:00
Peter Steinberger
02c731826a
test(discord): fix monitor test typings
2026-02-26 04:35:49 +01:00
Theo Tarr
7af6849c2f
Discord: handle early gateway startup errors
2026-02-26 03:22:02 +00:00
Peter Steinberger
8f8e46d898
refactor: unify reaction ingress policy guards across channels
2026-02-26 01:34:47 +01:00
Peter Steinberger
aedf62ac7e
fix: harden discord and slack reaction ingress authorization
2026-02-26 01:26:47 +01:00