Peter Steinberger
bcbbf28093
docs(plugin-sdk): migrate retained SDK contracts ( #111535 )
...
* refactor(plugin-sdk): finish retained public demotions
* test(plugin-sdk): tighten surface budgets
* fix(plugin-sdk): retain static tool metadata contract
* fix(plugin-sdk): keep retained exports pending
* fix(plugin-sdk): satisfy registry lint
* docs(plugin-sdk): document retained consumer seams
2026-07-19 15:00:45 -07:00
Peter Steinberger
c7e7ac2728
refactor: remove expired plugin compatibility surfaces ( #111451 )
...
* docs(secrets): remove retired web credential paths
* refactor(web): remove retired provider compatibility paths
* refactor(providers): delete retired compatibility routes
* refactor(secrets): remove retired credential aliases
* refactor(plugin-sdk): delete retired compatibility surfaces
* docs(plugin-sdk): remove retired migration guidance
* chore(plugin-sdk): refresh rebased surface budgets
* chore(plugin-sdk): refresh API removal baseline
* refactor(compat): migrate retired internal callers
* chore(plugin-sdk): refresh current-main baselines
* test(config): migrate plugin-owned secret assertions
* test(gateway): narrow plugin secret refs
* fix(plugin-sdk): preserve private boundary type identity
* chore(compat): remove stale sweep references
* chore(lint): lower max-lines budget
* refactor(secrets): remove unused web helper
* build(plugin-sdk): drop removed compat entries
* chore(plugin-sdk): refresh rebased API baseline
* chore(plugin-sdk): use Linux API baseline hash
* fix(plugin-sdk): preserve private bundled build entries
* fix(plugin-sdk): package private runtime facades
* fix(plugins): preserve external credential contracts
2026-07-19 11:04:48 -07:00
Peter Steinberger
bbcfec9e96
fix(channels): prevent outbound echoes and expose native login ( #111341 )
...
* fix(channels): centralize outbound echo suppression
* chore(plugin-sdk): refresh channel outbound surface
* test(commands): avoid native plugin fallback loading
* refactor(channels): separate outbound echo state
* docs(changelog): note channel action decisions
* fix(discord): align webhook preflight call
* fix(discord): use type-only thread binding import
* fix(channels): stream login blocks and widen turn results
* test(channels): narrow drop-capable turn results
* fix(channels): address echo and reply edge cases
2026-07-19 03:49:11 -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
a5ec26fa3c
fix: prevent LINE channel reloads from hanging on stalled deliveries ( #110971 )
...
* fix(channels): bound ingress shutdown and document retention
* docs(channels): note ingress shutdown behavior
* chore: keep release notes in pull request
* docs: refresh documentation map
* fix(line): preserve deferred claims during shutdown
* fix(line): handle late abandonment failures
2026-07-18 23:25:33 +01:00
Peter Steinberger
3572fba7f9
feat(plugin-sdk): guard ingress effects once per event ( #110846 )
...
* feat(plugin-sdk): add ingress effect guard
* docs: refresh docs map
* fix(plugin-sdk): propagate effect commit failures
* fix(plugin-sdk): isolate ingress effect namespaces
2026-07-18 19:23:39 +01:00
Chris Eckert
42be965eac
improve(mattermost): restart only the changed account on config reload ( #99312 )
...
* improve(gateway): restart only the changed account on channel config reload
When a config change is scoped entirely to one channel account
(channels.{kind}.accounts.{accountId}[.*]), restart just that account
instead of the whole channel. Wholesale channel restarts disconnect every
account on the channel; on gateways running many accounts, each
account-scoped config write (adding an account, changing one account's
settings) briefly dropped every other account's connection.
The reload plan gains a restartChannelAccounts bucket populated only when
all of a channel's changed paths are account-scoped; any channel-global
path falls back to the existing wholesale restart, and a channel scheduled
for wholesale restart drops its per-account entries so each (channel,
account) pair restarts at most once. The executor runs per-account
restarts through the existing stopChannel/startChannel accountId parameter.
* fix(gateway): preserve account reload admission
* fix(gateway): scope surgical reloads to isolated plugins
* test(gateway): avoid preactivating reload snapshot
* docs(channels): define account reload isolation contract
* fix(gateway): preflight scoped account reloads
* fix(gateway): re-drain live scoped reload targets
* docs: refresh generated docs map
* fix(mattermost): align scoped reload with durable ingress
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-18 09:33:06 +01:00
Peter Steinberger
2920ec1fab
docs(channels): settle replay-guard vs ingress-drain layering contract ( #109799 )
...
* docs(channels): settle replay-guard vs ingress-drain layering contract in code comments and SDK docs
* docs: refresh SDK channel docs map
2026-07-17 11:13:00 +01:00
iloveleon19
382d570cbf
feat(channels): add unified implicit mention policy ( #108829 )
...
* feat(mattermost): add thread.requireExplicitMention to opt out of thread auto-follow
Mattermost treats any reply in a thread the bot has participated in as an
implicit mention, so requireMention only gates the first message and the bot
then answers follow-ups addressed to other people for the participation TTL.
Slack exposes channels.slack.thread.requireExplicitMention for exactly this;
Mattermost had no equivalent and its strict schema rejected the key.
Add channels.mattermost.thread.requireExplicitMention (channel + per-account),
mirroring Slack. When set, thread participation no longer counts as a mention.
Default (unset/false) keeps today's auto-follow behavior unchanged.
Related: #108269
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
* feat(channels): add implicit mention policy foundation
* feat(channels): unify implicit mention policy
Co-authored-by: leon <dodoma0919@gmail.com >
* refactor(channels): keep implicit policy inside evaluator
* fix(channels): use exported implicit mention type
* chore(channels): satisfy extension lint
* fix(config): break implicit mention type cycle
* fix(plugin-sdk): account for implicit mention config export
* refactor(config): isolate implicit mention schema
* chore(plugin-sdk): align implicit mention surface budget
* fix(config): remove unused schema re-export
---------
Co-authored-by: leon <dodoma0919@gmail.com >
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 17:16:01 -07:00
Peter Steinberger
ed12937cbd
refactor(plugin-sdk)!: delete the zero-consumer channel-ingress facade, AccessFacts projections, and dead dispatch aliases ( #107906 )
...
* refactor(plugin-sdk)!: delete the zero-consumer channel-ingress facade, AccessFacts projections, and dead dispatch aliases
* chore(plugin-sdk): refresh API baseline hash for the facade deletions
* fix(channels): drop dead AccessFacts field writes stranded by the facade deletion
* chore(plugin-sdk): refresh API baseline hash after rebase
2026-07-14 19:43:18 -07:00
Peter Steinberger
7a456e362d
feat(channels): add typed cross-surface approval actions ( #103679 )
...
* fix(gateway): approval registry hardening and protocol-surface follow-ups
Follow-up delta to the merged #103579 head, rebased onto current main:
- gateway-protocol wire types derive from owner-module schema consts
(types.ts tombstone) and ProtocolSchemas leaves the package index so the
public plugin-sdk d.ts graph tree-shakes the registry declaration
- approval access authority follows the operator.approvals scope tier with
reviewerDeviceIds as the opt-in restriction (cross-surface
first-answer-wins; requester identity gates only legacy adapters)
- plugin node.invoke approvals register directly so unrenderable
presentations fail closed before request routing
- exec-approval manager reconciliation with #103515 revocation hardening
(resolution source attribution, one-shot ask-fallback consumption)
- surface-report pins and plugin-sdk API baseline refreshed; Swift models
regenerated
* feat(channels): add typed operator approval actions
Squash-rebased #103679 segment onto the durable-approval-registry tip on
current main. Typed approval/command/select presentation actions replace
raw-string inference across slack/telegram/discord/matrix/imessage/whatsapp,
approval.resolve carries an explicit kind, and channel adapters map native
callback envelopes through the typed action registry.
Drift reconciliation: deprecated buildExecApprovalInteractiveReply assertions
dropped (#104650 removed the shims); worker_environments bootstrap-column
migration kept alongside the approval resolution_ref backfill; plugin-sdk API
baseline regenerated.
(cherry picked from commit 68765a5d39d2118c88a7a54d00387337912d4494)
(cherry picked from commit 8642ac12af142e4b751f4f30d4b114615e7e5f66)
(cherry picked from commit 036c4bc39499925fc03de16ec9302e346769350a)
(cherry picked from commit 19dc350d6bc34e29a5169c6bc80971b0ad12adde)
(cherry picked from commit fc978b0bad86aef421c79f6a211b25cc1b743c01)
(cherry picked from commit 10de4d1ed5071f9be6ad1ee5d1e32c0fa8c9d11c)
(cherry picked from commit 9a664ced1b1fa740172b258f355f1a82925ae41c)
(cherry picked from commit c5ff69abbf444139e9e007bfa45beb0f00ffea54)
(cherry picked from commit d466a80795 )
(cherry picked from commit f5b4fe40dd5c961322f8553cc80b2fdfb3f6503e)
(cherry picked from commit 7340b4749a4cc4c72f7a41cce1bc9cb550cae038)
(cherry picked from commit a151f41808f23ae60b10305ccd2bc959b9169a86)
* fix(approvals): preserve typed transport ownership
* test(imessage): narrow chunked approval text
* refactor(protocol): remove retired type tombstone
* fix(plugin-sdk): align surface budgets after rebase
* docs(changelog): note typed operator approvals
* docs(changelog): defer typed approval release note
2026-07-11 18:31:05 -07:00
kevinlin-openai
245b91b83d
feat(slack): support Enterprise Grid org installs ( #102372 )
...
* feat(slack): support Enterprise Grid org installs
* docs: refresh generated docs map
* fix(slack): satisfy enterprise routing CI
* fix(slack): accept org auth without app id
* docs(plugin-sdk): document channel policy hooks
* fix(slack): reuse canonical sender for enterprise replies
* test(slack): fix enterprise sender lint
---------
Co-authored-by: Kevin Lin <kevin@dendron.so >
2026-07-08 23:53:19 -07:00
Peter Steinberger
f7d7148cf0
docs: rewrite published docs grounded in current source ( #100142 )
...
Source-grounded rewrite of 529 published docs pages with per-unit information-loss verification: 1,713 factual corrections cited to src/**, generated surfaces regenerated, frontmatter titles preserved for i18n, release notes pages untouched. All docs gates green.
Closes #100141
2026-07-05 00:32:47 -04:00
Ted Li
b67df3797a
fix(telegram): explain disabled plugin approval failures ( #95973 )
...
* fix: explain disabled Telegram plugin approvals
* fix: handle disabled Telegram native plugin approvals
* fix: resolve exec approval surface independently
* fix: tie plugin approval setup guidance to plugin surface
* Revert "fix: tie plugin approval setup guidance to plugin surface"
This reverts commit 34e3c10e23ec8d3cf00ff803188df4226cd60f8d.
* fix: gate plugin approval setup guidance
* fix: gate plugin approval availability by delivery
* fix: preserve plugin approval approver auth
* fix: make plugin setup guidance explicit
* test: trim approval guidance proof radius
* Avoid setup guidance on routed approval timeout
* Carry plugin approval delivery route into timeouts
* Keep turn-source approval route visible
* fix(approvals): prefer delivered approval clients
* fix(approvals): prefer delivered approval clients
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-02 14:15:25 -07:00
张贵萍
56baf9d079
fix(outbound): reject reserved Telegram targets
2026-06-25 08:37:00 -07:00
Peter Steinberger
08ae0e6d29
refactor: store Zalo hosted media in plugin state
...
Move Zalo hosted outbound media metadata and expiry into plugin state, add SDK chunked hosted media storage, and keep CI/type/lint gates green after rebase.
2026-06-06 22:56:48 -07:00
Kevin Lin
c57671176e
refactor: share native approval route gates
...
Share native approval route gate helpers across mainstream channel approval runtimes and keep PR #87770 green on current main.
2026-05-29 15:32:31 -07:00
Peter Steinberger
1507a9701b
refactor: centralize inbound supplemental context
...
* refactor: centralize inbound supplemental context
* refactor: trim supplemental finalizer typing
* docs: clarify supplemental context projection
* refactor: move inbound finalization into core
* refactor: simplify channel inbound facts
* refactor: fold supplemental media into inbound finalizer
* refactor: migrate channel inbound callers to builder
* docs: mark inbound finalizer compat types deprecated
* refactor: wire runtime turn context builder
* refactor: replace channel turn runtime API
* fix: respect discord quote visibility
* fix: avoid deprecated line dispatch helper
* refactor: deprecate channel message SDK seams
* docs: trim channel outbound SDK page
* test: migrate irc inbound assertion
* refactor: deprecate outbound SDK facades
* refactor: deprecate channel helper SDK facades
* refactor: deprecate channel streaming SDK facade
* refactor: move direct dm helpers into inbound SDK
* chore: mark legacy test-utils SDK alias deprecated
* refactor: remove unused allow-from read helper
* refactor: route remaining channel dispatch through core
* refactor: enforce modern extension SDK imports
* test: give slow image root tests more time
* ci: support node fallback on windows
* fix: add transcripts tool display metadata
* refactor: trim legacy channel test seams
* fix: preserve channel compat after rebase
* fix: keep deprecated channel inbound aliases
* fix: preserve discord thread context visibility
* fix: clean final rebase conflicts
* fix: preserve channel message dispatch aliases
* fix: sync channel refactor after rebase
* fix: sync channel refactor after latest main
* fix: dedupe memory-core subagent mock
* test: align clickclack inbound dispatch assertions
* fix: sync plugin sdk api hash after rebase
* fix: sync channel refactor after latest main
* fix: sync plugin sdk api hash after rebase
* fix: sync plugin sdk api hash after latest main
* test: remove stale inbound context awaits
2026-05-27 09:26:06 +01:00
Agustin Rivera
08a73dbe4b
fix(qqbot): gate fallback approval buttons ( #87154 )
...
QQBot fallback approval buttons now reuse the same slash-command authorization path as real commands, including access groups and default-account config merging.
Verification:
- node scripts/test-extension.mjs qqbot
- node --max-old-space-size=8192 --import tsx scripts/generate-plugin-sdk-api-baseline.ts --check && git diff --check
- pnpm lint --threads=8
- node scripts/run-vitest.mjs src/agents/agent-command.live-model-switch.test.ts
- GitHub PR checks for 7cc0f15031 : passed
Thanks @eleqtrizit.
Co-authored-by: Agustin Rivera <agustin@rivera-web.com >
2026-05-27 08:44:55 +01:00
Peter Steinberger
c4f0da00a9
refactor: use channel target resolution APIs ( #85814 )
...
* refactor: use channel target resolution apis
* refactor: satisfy delivery lint
* refactor: remove unused target parsing shim
* fix: preserve routed cron topic targets
2026-05-23 21:26:55 +01:00
Peter Steinberger
07f05e972e
refactor: move inbound event classification into core
2026-05-17 00:10:29 +01:00
Feelw00
a2f1f73107
docs(plugins): note cancelDelivered in channel plugin interactions list
...
ClawSweeper R3 flagged that the previous follow-up added the
`cancelDelivered` hook to the public approval-handler runtime interaction
surface but left the channel plugin docs describing `interactions` as
only bind/unbind/clear-action hooks. Extend the bullet so plugin authors
whose `deliverPending` registers in-process or persistent state know
when to implement the cancellation hook.
AI-assisted: drafted with claude code (claude-opus-4-7).
2026-05-16 16:41:07 +01:00
Peter Steinberger
40789da1ef
fix(wizard): narrow setup i18n SDK surface
2026-05-15 15:33:27 +01:00
Peter Steinberger
4f32a32ed6
refactor: move rare sdk seams into owners
2026-05-10 12:37:10 +01:00
Peter Steinberger
a0fb7fb045
refactor: centralize channel ingress access
2026-05-10 00:18:36 -04:00
Vincent Koc
4395f1dd66
docs: typography hygiene + drop one in-body H1 across 5 pages
...
Replaced 98 typography characters (curly quotes, apostrophes, em/en
dashes, non-breaking hyphens) with ASCII equivalents per
docs/CLAUDE.md heading and content hygiene rules.
- docs/plugins/sdk-migration.md: 20 chars
- docs/help/testing.md: 20 chars
- docs/automation/tasks.md: 20 chars
- docs/plugins/sdk-channel-plugins.md: 19 chars
- docs/channels/yuanbao.md: 19 chars; removed the duplicate '# Yuanbao'
H1 (Mintlify renders title from frontmatter).
2026-05-05 19:46:32 -07:00
Peter Steinberger
ceca7fdfda
docs: document channel message plugin api
2026-05-06 01:46:42 +01:00
Peter Steinberger
1ead1b2d18
refactor(channels): finish turn kernel migration
2026-04-30 01:31:00 +01:00
Peter Steinberger
8c68e7535f
refactor: centralize channel DM access resolution
2026-04-29 16:35:37 +01:00
Peter Steinberger
8831d2cf0a
fix: normalize docs mintlify components
2026-04-28 07:52:17 +01:00
Peter Steinberger
48a0be8ff3
docs(plugins): document channel route sdk
2026-04-28 01:13:01 +01:00
Gustavo Madeira Santana
53618cca0d
docs: clarify plugin discovery loading
2026-04-24 22:26:52 -04:00
Peter Steinberger
5e640b93da
fix(discord): preserve outbound reply threading
2026-04-25 02:54:37 +01:00
Vincent Koc
b7c8c53af2
docs(plugins): define config ownership contract
...
* fix(plugins): flag channel config metadata gaps
* docs(plugins): clarify config ownership
2026-04-24 17:17:10 -07:00
Vincent Koc
9153598e65
docs(plugins): split architecture by extracting internals (load pipeline, runtime hooks, HTTP routes, schemas)
2026-04-23 20:03:22 -07:00
Vincent Koc
367b9721b6
docs(concepts,automation,plugins): add Related sections to pages missing them
2026-04-23 15:48:46 -07:00
Vincent Koc
c5c163d078
docs: standardize frontmatter field order (summary before title)
2026-04-23 13:18:17 -07:00
Vincent Koc
2777b089b5
docs: normalize frontmatter titles to sentence case
2026-04-23 13:15:17 -07:00
Vincent Koc
4a2cd533ac
docs: remove duplicate H1 where frontmatter title already sets it
2026-04-23 13:11:14 -07:00
pashpashpash
89932593bb
Show typing while heartbeats are running ( #69963 )
...
* Heartbeat: show typing during runs
* Heartbeat: fix typing review issues
* Discord: preserve heartbeat typing config
2026-04-22 13:50:27 +09:00
Peter Steinberger
ef66798433
fix: preserve outbound thread sessions
2026-04-22 02:56:23 +01:00
Gustavo Madeira Santana
24db09a19b
fix(cli): keep channel status checks off plugin runtimes ( #69479 )
...
Merged via squash.
Prepared head SHA: 63f6e416a9
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-04-21 13:53:08 -04:00
Tak Hoffman
1303b03241
fix: add silent reply policy by conversation type ( #68644 )
...
Thanks @Takhoffman.
2026-04-21 05:17:55 +01:00
Peter Steinberger
418056f7a0
perf: narrow plugin SDK import surfaces
2026-04-17 16:05:09 +01:00
Gustavo Madeira Santana
78ac118427
fix(plugins): stabilize bundled setup runtimes ( #67200 )
...
Merged via squash.
Prepared head SHA: e8d6738fd0
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-04-15 12:35:18 -04:00
slepybear
450c3a8ed2
fix(security): include Matrix avatar params in sandbox media normalization + preserve mxc:// URLs + log gmail watcher stop failures [AI-assisted] ( #64701 )
...
Merged via squash.
Prepared head SHA: 54de3f019b
Co-authored-by: slepybear <108438815+slepybear@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-04-14 12:22:29 -04:00
Peter Steinberger
972ed139a7
fix: make docs anchor audit use Mintlify CLI
2026-04-10 21:39:52 +01:00
Gustavo Madeira Santana
cfe71e2e44
Docs: document approval adapter subpaths
2026-04-07 16:06:02 -04:00
Gustavo Madeira Santana
d78512b09d
Refactor: centralize native approval lifecycle assembly ( #62135 )
...
Merged via squash.
Prepared head SHA: b7c20a7398
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-04-07 14:40:26 -04:00
Peter Steinberger
13a60aa93b
docs: document shared mention policy
2026-04-07 07:51:00 +01:00