Peter Steinberger
3eecab1bee
refactor(plugins): adopt shared retry runtime ( #126065 )
2026-08-18 17:46:38 -07:00
Peter Steinberger
4b0d573437
feat: session permission modes with worktree-scoped defaults ( #124909 )
...
* feat(gateway): add session permission modes
* feat(agents): enforce session permission policies
* test: cover session permission modes
* docs: explain session permission modes
* fix(agents): preserve apply patch default root
* feat(codex): map session permission modes
* feat(ui): add session permission controls
* test: cover session permission surfaces
* fix(agents): enforce session permissions from entry
* fix(codex): pass params object to requirements reader
* fix(codex): honor session permission modes
* fix(codex): preserve exec approval floors
* chore: revert changelog edit (release-owned)
* test: align full-mode promotion with upstream semantics
* chore(protocol): regenerate session permission models
* docs: register session permission modes
* fix(ui): use shared permission dropdown
* fix(sessions): restore permission mode contracts
* fix(ci): record session permission startup JS growth in the budget baseline
* refactor(agents): prepare session exec mode at dispatch
Host dispatch owns permissionMode→exec override preparation; the codex
plugin consumes prepared facts and the SDK barrel export is removed,
keeping the plugin-sdk surface at its recorded budget.
* test: type exec mode fixtures as ExecMode
* fix(codex): require admin scope for yolo permissions
* test: isolate codex permission command state
* ci: refresh PR checks against current main
* ci: refresh checks after gateway test repair
* test: fix main-fallout CI suites
* chore: refresh CI merge ref
* fix(worker): fence permission-mode cloud placements
* fix(sessions): clear worktree policy on detach
* chore(protocol): generate session permission mode enum
* test(gateway): type dispatch fixtures from session entries
* fix(ui): allow clearing session permission mode
* chore: refresh CI merge ref
* fix(ci): record permission picker startup growth in the budget baseline
* fix(gateway): gate session root projections
2026-08-17 04:37:35 -07:00
Peter Steinberger
f9b1ccc4fa
refactor(plugin-sdk): discriminate delivery and exec results ( #124979 )
...
* refactor(plugin-sdk): discriminate delivery and exec results
* test(plugin-sdk): update delivery target expectations
* fix(outbound): preserve canonical delivery targets
* fix(irc): normalize message delivery target
2026-08-16 22:55:41 -07:00
Peter Steinberger
568b920b21
feat(lint): enforce import ordering and deduplication ( #124730 )
...
* refactor(imports): dedupe and hoist imports
* feat(lint): enforce import/no-duplicates and import/first
2026-08-16 11:44:52 -07:00
Peter Steinberger
63401b730b
fix: keep doctor security conditions as single findings ( #124666 )
...
* fix(doctor): record security finding severity
* refactor(security): keep audit severity internal
* fix(security): preserve channel finding severity
2026-08-16 10:24:40 -07:00
Peter Steinberger
52cf4db826
fix(synology-chat): prevent duplicate sends after custody loss ( #123953 )
...
* fix(synology-chat): preserve durable send custody
* fix(synology-chat): clean rejected media custody
2026-08-14 20:38:56 -07:00
Pavan Kumar Gondhi
d5e89de906
fix(synology-chat): deliver attachments without forwarding source URLs [AI] ( #119941 )
...
* fix(synology-chat): host outbound attachments
* fix(synology-chat): isolate hosted media routes
* fix(synology-chat): harden hosted media limits
* fix(synology-chat): inspect hosted media content
* fix(synology-chat): reject ambiguous media routes
* fix(synology-chat): retain indeterminate media capabilities
* fix(synology-chat): mask public callback URLs
* fix(synology-chat): align callback sensitivity metadata
* fix(synology-chat): reserve media capability query keys
* fix(synology-chat): release rejected staged media
* fix(synology-chat): preserve ambiguous media handoffs
* fix(synology-chat): scan complete active media preamble
* fix(synology-chat): report validated attachment readiness
* fix(synology-chat): bound public media capability probes
* fix(synology-chat): bound hosted media responses
* test(synology-chat): model response headers read-only
* fix(synology-chat): bound hosted media reads
* fix(synology-chat): bound hosted media delivery
* fix(synology-chat): retain media through active serves
* fix(plugin-sdk): lease hosted media readers atomically
* fix(synology-chat): close hosted media review gaps
* test(synology-chat): clean up hosted media state
* fix(system-agent): canonicalize sensitive config paths
* fix(system-agent): honor runtime config sensitivity hints
* fix(config): inherit sensitive metadata
* fix(synology-chat): close latest review findings
* test(system-agent): keep config recovery checks lint-clean
* fix(system-agent): redact structured config secrets
* fix(synology-chat): harden active-content sniffing
* fix(security): close hosted media review gaps
* fix(security): close remaining hosted media review findings
* fix(system-agent): narrow dynamic owner ids safely
* fix(system-agent): narrow dynamic channel ids safely
* test(channels): isolate hosted media proofs
* fix(security): close config and hosted media review gaps
* test(plugin-sdk): split outbound media retention coverage
* test(plugin-sdk): isolate capacity store fixtures
* test(system-agent): assert config secrecy invariant
2026-08-14 17:05:20 -05:00
Josh Avant
97a53a9b35
feat: audit admitted channel participant identity ( #122863 )
...
* feat: audit admitted channel participant identity
* fix: preserve Telegram identity through thread recovery
* fix: signal held gateway process groups
* fix: keep audit evidence passive in collect routing
* fix: validate copied channel participant evidence
* fix: bind channel participant evidence to host ingress
* fix: honor Telegram proof credential roles
* fix: restart held Telegram proof through gateway
* fix: repair channel identity CI regressions
* test(matrix): bind thread routing owner
* fix: preserve direct DM SDK compatibility
* fix: bind channel provenance at host runtime
* test(feishu): provide channel context builder
* fix: defer record-bound channel runtime resolution
* fix: keep channel admission evidence core-private
* fix(audit): bind channel admission to plugin lifecycle
* fix(audit): bind ingress provenance to final context
* refactor(audit): split admission scope keys
* test(queue): cover combined metadata carriers
* refactor(audit): keep lifecycle helpers private
* fix(queue): preserve combined turn authority
* test(channels): provide ingress context builders
* test(channels): align integrated CI fixtures
* test(clickclack): resolve model-loop ingress
* docs: preserve channel participant evidence invariant
2026-08-14 08:57:01 -05:00
Peter Steinberger
99d662473c
fix(channels): fail-fast headless channel setup with plugin-declared env contracts ( #122530 )
...
* fix(channels): validate headless channel setup
* docs(channels): document headless provisioning
* fix(channels): repair setup metadata typing
* chore(channels): regenerate official channel catalog for env metadata
* fix(slack): keep mode-conditional env contract plugin-owned
Static --use-env declaration keeps only the unconditional SLACK_BOT_TOKEN;
socket-vs-HTTP conditional requirements (app token, signing secret) stay in
Slack's own setup validation so HTTP mode no longer demands an irrelevant
SLACK_APP_TOKEN.
* chore(sdk): regenerate api baselines and catalog after rebase
* fix(slack): align manifest env declaration with runtime contract
* chore(sdk): regenerate api baselines after rebase
* chore(sdk): regenerate api baselines after rebase
* chore(sdk): regenerate api baselines after rebase
2026-08-12 17:12:15 +00:00
Peter Steinberger
b080dd1e76
refactor: consolidate coercion contracts ( #122458 )
...
* refactor: consolidate coercion contracts
Centralize exact string, record, numeric, date, Boolean, argument, and structured-error coercions while preserving call-site semantics.
Migrate canonical-name collisions and deprecated internal SDK bypasses, deleting 55 net production/tooling lines. Expand declaration ownership enforcement to 101 allowed helpers and add a narrow export-completeness audit.
* fix: preserve standalone script coercions
Keep copied Control UI tooling self-contained and retain the trusted release harness module-relative source seam when the harness runs against an old target cwd.
2026-08-11 23:26:37 -07:00
Ayaan Zaidi
2c8ed54ddb
feat(heartbeat): default delivery to the configured owner, never groups ( #121988 )
...
Unset heartbeat.target now resolves "owner": elected heartbeat notifications deliver to the operator's DM resolved from commands.ownerAllowFrom or the channel allowFrom (first concrete entry; wildcards and channel-scoped wildcards excluded; configured owners exhausted across channels before any channel-local fallback). Delivery requires the channel's own classifier to positively prove a direct destination — every bundled messaging plugin now ships an inferTargetChatType contract — and unproven or group-shaped destinations fail closed to the visible no-route state. The first implicitly-routed delivery carries a one-line self-explanation naming the target: "none" opt-out. Explicit target "last" remains as the follow-the-conversation opt-in. Refines the unreleased #121892 default before it ships; refs #121880 .
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 13:18:22 +00:00
Alix-007
50ec5570ae
fix(synology-chat): prevent duplicate messages after ambiguous failures ( #119539 )
...
* fix(synology-chat): avoid ambiguous send replays
* fix(synology-chat): classify aggregate send failures
* test(synology-chat): trim retry loopback proof
---------
Co-authored-by: Dallin Romney <dallinromney@gmail.com >
2026-08-08 11:46:04 +08: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
f9d9d1225a
refactor(channels): own the lifecycle status contract in SDK patch factories ( #118795 )
...
* refactor(sdk): add channel lifecycle patch factories
* refactor(channels): adopt lifecycle patches in a-m
* refactor(channels): adopt lifecycle patches in n-z
* refactor(runtime): lifecycle-own ambient registries
* test(slack): assert lifecycle factory fields
* fix(sdk): preserve lifecycle patch extras types
* test(zalouser): widen lifecycle status sink
* test(irc): avoid shadowed status patch
* fix(zalo): reuse account-agnostic media route
* fix(gateway): accept explicit channel ready recovery
* test(qa): assert terminal Slack block fact
* test(qa): restore Slack blocked lifecycle scenario
* test(gateway): lock explicit lifecycle recovery contract
2026-08-03 12:39:48 -07:00
Vincent Koc
21a767639f
fix(plugins): unify HTTP route conflict handling ( #118203 )
...
* fix(plugins): unify HTTP route conflict handling
* fix(plugins): preserve source-less route replacement
* test(line): type webhook route source
2026-08-04 02:15:00 +08:00
Jesse Merhi
68be0e3378
feat: enable rich setup controls in custodian chat ( #114631 )
...
* feat(protocol): carry the awaited wizard step on the chat result
* fix(system-agent): strip sensitive wizard prefill from chat results
* fix(wizard): keep setup secrets server-side
* test(wizard): preserve prompt mock typing
* fix(ui): add reveal toggle to wizard secrets
* refactor(ui): adopt Carapace sensitive input
* fix(ui): hide revealed sensitive input mask
* test(twitch): cover environment-only setup
* feat(custodian): render rich wizard steps
* fix(custodian): validate wizard text replies
* feat(custodian): submit typed wizard answers
* refactor(gateway): isolate custodian chat turns
* fix(gateway): accept session engine adapter
* fix(ui): narrow wizard control values
* refactor: simplify rich wizard answer flow
* fix(custodian): recover evicted wizard sessions
* docs: note custodian rich setup controls
* test(gateway): split wizard answer coverage
2026-08-03 22:18:27 +10:00
Peter Steinberger
e812630f80
fix(synology-chat): reject failed webhook response envelopes ( #118558 )
...
Co-authored-by: Peter Steinberger <steipete@macos.shared >
2026-08-03 00:36:18 -07:00
Peter Steinberger
4c66ed5615
feat(channels): lifecycle wave 2 — fifteen more channels publish recorded lifecycle ( #118298 )
...
* feat(channels): publish lifecycle from existing status sinks
* feat(channels): thread lifecycle through provider monitors
* fix(mattermost): keep lifecycle status helper private
* fix(matrix): preserve terminal lifecycle during startup cleanup
* fix(matrix): reject invalid tokens during startup
* test(mattermost): drop unused vi import
2026-08-02 17:30:56 -07:00
Peter Steinberger
f7ddcdbf26
refactor: consolidate standard raw-event ingress monitors ( #117859 )
...
* refactor(ingress): consolidate standard raw-event monitors
* fix(ingress): preserve monitor callback typing
* fix(ingress): keep standard profile within line limits
* chore(plugin-sdk): regenerate API baseline for shared ingress profile
2026-08-01 23:32:28 -07:00
DaigoSoup
75830f027a
fix(synology-chat): deliver long messages without webhook rejection ( #116645 )
...
* fix(synology-chat): chunk long messages before webhook delivery
* test(synology-chat): expose chunk limit in channel mock
2026-08-01 01:51:52 -07:00
Peter Steinberger
9e4381eb1c
refactor(channels): unify bundled channel setup contracts ( #117106 )
...
* refactor(channels): canonicalize bundled setup contracts
* test(matrix): use scoped environment fixtures
2026-07-31 16:57:29 -07:00
Eden
601a405430
fix(channels): mark durable webhook acceptance on Zalo, Google Chat, SMS, Feishu, Nextcloud Talk, and Synology Chat ( #115586 )
...
* fix(channels): extend the durable-acceptance marker to zalo, googlechat, and sms
* fix(feishu): mark durable webhook acceptance
* fix(channels): extend the durable-acceptance marker to nextcloud-talk and synology-chat
* fix(channels): extend the durable-acceptance marker to zalo, googlechat, and sms
* fix(feishu): mark durable webhook acceptance
* fix(channels): extend the durable-acceptance marker to nextcloud-talk and synology-chat
* fix(channels): carry durable webhook admission results
* docs(changelog): note durable webhook acceptance
* test(channels): tighten webhook admission types
* chore: leave release changelog to release prep
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-30 01:07:08 +08:00
wangmiao0668000666
77e9ee092f
fix(synology-chat): stop fabricating send message ids ( #110770 )
...
* fix(synology-chat): stop fabricating send message ids
The incoming-webhook send contract acks with a bare boolean and carries
no platform message id, but the adapter returned a synthetic
`sc-${Date.now()}` id and stamped it into the delivery receipt. Return
the established empty-id sentinel and an empty receipt instead, matching
the honest no-platform-id shape used by sibling channels (qqbot,
googlechat) and the plugin-sdk empty-id contract.
Co-Authored-By: Claude <noreply@anthropic.com >
* test(synology-chat): verify truthful webhook receipts
---------
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-29 06:44:44 -04:00
Peter Steinberger
986e5d1758
refactor(channels): share ingress retention defaults ( #115824 )
2026-07-29 06:24:30 -04:00
Peter Steinberger
bde6b166c0
refactor(channels): deduplicate ingress monitor shells ( #115792 )
...
* refactor(channels): deduplicate ingress monitor shells
* fix(channels): preserve ingress error overload types
* fix(channels): type ingress error overload implementation
* chore(plugin-sdk): ratchet ingress error surface
2026-07-29 05:33:00 -04:00
Peter Steinberger
302f262e6b
refactor: deduplicate extension normalization primitives ( #115650 )
...
* refactor(plugins): reuse SDK normalization primitives
* fix(ci): repair code-mode matrix checks
* fix(ci): satisfy code-mode matrix gates
* fix(ci): use matrix evidence export
* fix(ci): validate matrix evidence artifact
2026-07-29 04:10:06 -04:00
Peter Steinberger
08b1ff73e2
refactor(channels): fix account resolution and setup isolation ( #114395 )
...
* refactor(channels): fix account resolution and setup isolation
* fix(channels): keep account resolvers safely destructurable
2026-07-27 03:49:37 -04:00
Peter Steinberger
b67217ffab
fix(channels): stop leaking markdown on plain-text transports ( #112926 )
...
* fix(channels): unify plain-text markdown projection
* fix(synology-chat): satisfy link formatter lint
* test(ui): repair sidebar catalog activity fixture
2026-07-23 02:13:55 -04:00
Jesse Merhi
4a2a600809
feat(channels): add channel-owned setup contracts ( #112176 )
...
* feat(channels): add channel-owned setup contracts
* test(channels): align legacy setup fixtures
* chore(channels): regenerate config and SDK baselines after rebase
* fix(update): run fresh doctor after current-process core changes
* fix(channels): align add pre-scan with execution precedence
* style(cli): format channels-cli test additions
* fix(channels): restore option-before-positional channel resolution via metadata arity scan
* fix(channels): keep help flags out of metadata arity escalation
* test(update): mock fresh post-update doctor in current-process suites
* style: format review fixes and correct entrypoint mock type
* fix(channels): register only modern contract options for dual-publishing plugins
* test(update): align downgrade suites with fresh-doctor child invocation
* docs(channels): record empty-contract and input-forwarding invariants
* fix(line): keep the shipped --token switch as a channel access token alias
* fix(signal): stop treating exact cross-family loopback endpoints as bind-aligned
* chore(config): regenerate docs config baselines after second rebase
* style: format rebased channels add tests
* fix(channels): enforce field-key and flag-name agreement in setup contracts
* fix(signal): detect container endpoints for bare --http-url setup
* fix(signal): ignore unconfigured accounts in transport collision checks
* fix(channels): validate negated setup flags in contract and normalizer
* fix(signal): preserve existing transport kind when setup detection is unreachable
* style(signal): use direct boolean check in collision guard
* style(signal): type test config literals
* docs(update): record two-read design of fresh-doctor validation gate
* fix(channels): satisfy post-rebase architecture gates
* docs: refresh channel setup map
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-22 19:57:42 -04:00
Peter Steinberger
f236e83de7
refactor(channels): shrink ChannelSetupInput to a generic envelope with a deprecated compatibility tier ( #112319 )
...
* refactor(channels)!: shrink ChannelSetupInput to a generic envelope with a deprecated compatibility tier
* fix(channels): keep ChannelSetupInput structurally assignable without an index signature
* docs: regenerate docs map
2026-07-21 22:17:03 -07:00
RileyJJY
699a939c54
fix(synology-chat): ignore blank env fallbacks ( #109495 )
...
* fix(synology-chat): ignore blank env fallbacks
* test(synology-chat): mark token fixture synthetic
* test(synology-chat): make whitespace fixtures explicit
* test(synology-chat): use env stubs in fallback coverage
* test(synology-chat): satisfy fixture lint
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-20 19:40:45 -07:00
Peter Steinberger
ca3a1873a6
fix(test): make broad shard execution deterministic ( #111416 )
...
* fix(test): harden broad shard execution
* test: allow broad-profile contention
* style(telegram): remove redundant chat id cast
* style(test): preserve setup test spacing
2026-07-19 08:39:16 -07:00
Peter Steinberger
7562b79465
refactor(channels): share durable ingress monitor ( #111017 )
...
* refactor(channels): share durable ingress monitor
* fix(channels): harden ingress monitor shutdown
* docs: refresh SDK documentation map
2026-07-19 00:42:08 +01:00
Peter Steinberger
bef8a82762
feat(synology-chat): add durable ingress ( #110899 )
2026-07-18 20:00:06 +01:00
Peter Steinberger
40793e6f8b
fix: bound pasted input and provider response bodies ( #110627 )
...
* refactor(runtime): centralize bounded I/O handling
* fix(runtime): finalize bounded I/O contracts
* chore(security): drop stale audit import
* docs(changelog): credit bounded I/O fixes
Co-authored-by: Pick-cat <huang.ting3@xydigit.com >
* fix(agents): keep provider HTTP options private
* fix(ai): traverse OpenAI schema maps by value
* fix(runtime): preserve absolute download deadlines
* ci(ui): stabilize compressed CSS budget
* fix(ai): traverse legacy schema applicators
---------
Co-authored-by: Pick-cat <huang.ting3@xydigit.com >
2026-07-18 13:54:56 +01:00
Peter Steinberger
1ebfa066a5
fix(synology-chat): bound outgoing response deadlines ( #110520 )
...
Co-authored-by: Pick-cat <huang.ting3@xydigit.com >
2026-07-18 08:32:25 +01:00
pick-cat
f7cc0ef838
fix(synology-chat): bound user_list fetches with a wall-clock deadline ( #109111 )
...
* fix(synology-chat): bound user_list fetches with a wall-clock deadline
* refactor(synology-chat): keep deadline internal
* style(synology-chat): format deadline proof
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-18 07:51:12 +01:00
Peter Steinberger
31ed59bdf6
feat: keep main agents aware of group activity ( #110332 )
...
* feat(sessions): auto-watch group activity from main
* feat(sessions): allow watchers to read watched sessions
* fix(sessions): skip group watches for system turns
* fix(sessions): preserve watched session semantics
* fix(channels): propagate effective dm scope
* fix(sessions): canonicalize main watch identity
* fix(sessions): distinguish ambient group watches
* fix(sessions): revoke ineligible ambient watches
* chore: drop CHANGELOG edit (release generation owns it)
2026-07-18 04:06:58 +01:00
Peter Steinberger
0e792b6de3
refactor(channels): centralize inbound orchestration and remove internal compat ( #109716 )
...
* refactor(channels): centralize inbound turn orchestration
* refactor(runtime): remove stale compatibility paths
* chore(guards): reject internal deprecated API use
* refactor(channels): simplify core turn planning
* chore(guards): keep deprecated checks boundary-focused
* refactor(memory): keep modern config off compat barrel
* fix(msteams): preserve feedback learning
* test(channels): align modern inbound fixtures
* refactor(channels): finish modern inbound migration
* refactor(channels): tighten core inbound kernel
* fix(channels): preserve turn assembly narrowing
* test(sdk): keep runtime mock binding immutable
* test(matrix): isolate read policy runtime
* test(msteams): mock canonical reply factory
* test(slack): mock core inbound turn dispatch
* test(telegram): inject core session recorder
* test(signal): inject core session recorder
* test(googlechat): assert canonical inbound routing
* test(synology-chat): align core turn fixture
* fix(sdk): preserve direct DM runtime compat
* refactor(channels): own inbound envelope compat in core
* refactor(channels): trim inbound dispatch seams
* refactor(channels): remove redundant async wrappers
* test(synology-chat): type canonical dispatcher mock
* refactor(channels): remove remaining dead compat seams
* chore(sdk): refresh API baseline after rebase
* fix(channels): preserve direct DM identity metadata
2026-07-17 00:56:46 -07:00
wahaha1223
77f9da5461
fix(synology-chat): ignore blank token accounts ( #108922 )
2026-07-16 07:51:16 -07:00
Peter Steinberger
44314c9451
refactor(channels): table-drive setup and control-plane helpers ( #109028 )
...
* refactor(channels): table-drive setup credentials, config schemas, doctor detectors, status issues
* refactor(channels): control-plane tables (rest)
* fix(plugin-sdk): refresh surface budgets after rebase
* style(plugin-sdk): format credential helpers
* fix(channels): preserve generic schema refinement types
* fix(channels): preserve schema input and output inference
* fix(clickclack): forward credential patch fields
* test(plugin-sdk): use redacted credential fixtures
* fix(plugin-sdk): refresh API baseline after inference fix
* fix(channels): keep multi-account envelope optional
* fix(channels): preserve policy validation invariants
* fix(extensions): remove stale awaits from file checks
* style(qqbot): format synchronous file check
* fix(config): refresh bundled channel metadata
* fix(qqbot): reject unsupported pairing policy
2026-07-16 07:17:01 -07:00
zw-xysk
30c257f6b4
fix(synology-chat): bound outbound NAS response bodies to prevent Gateway OOM ( #105089 )
...
* fix(synology-chat): settle user_list overflow without hanging
Cap reads at 1 MiB with Buffer concat. On overflow, finish the promise
before destroy() — bare destroy often skips end/error and hung the test.
* fix(synology-chat): share bounded user-list reader
Co-authored-by: zw-xysk <zhao.wang1@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-15 10:38:01 -07:00
mushuiyu886
65d55d046b
fix(synology-chat): replies target the wrong user when Unicode nicknames span response chunks ( #108019 )
...
* fix(synology-chat): preserve UTF-8 in user list responses
* refactor(synology-chat): use native response decoding
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-15 02:02:00 -07:00
Peter Steinberger
21ec1546e5
refactor(extensions): trim internal plugin surfaces ( #107796 )
...
* refactor(diffs): privatize internal plugin surfaces
* refactor(file-transfer): privatize internal plugin surfaces
* refactor(nextcloud-talk): privatize internal plugin surfaces
* refactor(synology-chat): privatize internal plugin surfaces
* chore(deadcode): shrink extension export baseline
2026-07-14 15:02:56 -07:00
Vincent Koc
ee6d6e7e78
refactor(extensions): remove dead local exports ( #107146 )
2026-07-14 13:09:20 +08:00
Peter Steinberger
83bf0379c9
refactor(channels): share plugin contract scaffolds ( #105838 )
...
* refactor(channels): share plugin contract scaffolds
* fix: preserve channel config hint metadata
* chore: refresh Plugin SDK API baseline
* ci: refresh plugin SDK surface budget
* fix(ci): allow read-only state database boundary
* fix(ci): dedupe read-only state database boundary
2026-07-13 01:51:32 -07:00
Peter Steinberger
81941f2d68
test: enable noUncheckedIndexedAccess for extension tests ( #105343 )
2026-07-12 12:48:22 +01:00
Pavan Kumar Gondhi
5f709cfd87
fix: isolate Synology webhook preauth throttling [AI] ( #103619 )
...
* fix: scope Synology preauth throttling by client ip
* fix: clarify Synology preauth limiter comments
2026-07-11 13:44:21 +05:30
pick-cat
7eb163d905
fix(synology-chat): strip internal tool-trace banners from outbound text ( #102925 )
...
* fix(synology-chat): strip internal tool-trace banners from outbound text
* fix(synology-chat): satisfy eslint curly rule
* fix(synology-chat): add sanitizeText to outbound type contract
* fix(synology-chat): use canonical outbound sanitizer type
---------
Co-authored-by: Pick-cat <266665499+Pick-cat@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 06:56:20 +01:00
Peter Steinberger
a2a68d154b
fix(agent): preserve explicit recipient sessions ( #101507 )
...
* fix(agent): honor recipient session routing
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
* fix(agent): preserve canonical recipient routes
* fix(agent): require exact recipient routes
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
* fix(agent): harden recipient route resolution
* fix(imessage): require canonical recipient handles
* fix(agent): refine provider recipient exactness
* fix(agent): bound direct alias session routing
* fix(signal): preserve direct alias route type
* fix(agent): honor binding-scoped recipient sessions
* fix(routing): honor configured main session aliases
* fix(clickclack): align account-owned session routes
* fix(twitch): preserve canonical recipient sessions
* fix(routing): isolate stable outbound identities
* chore: defer recipient session changelog
* fix(sms): use dedicated channel SDK facade
---------
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
2026-07-07 10:07:13 +01:00