hermes-agent/plugins
Nikita Barkov 5d3f75110a fix(kanban): key terminal-event wakes to the creator's workspace scope
Slack session keys include the workspace id since #70190, but the kanban
notifier rebuilds the wake source from a subscription row that has no scope
column, so every terminal-event wake keyed without the workspace.

The legacy-key adoption shipped in the same change (`_legacy_slack_session_key`,
`_recovered_row_matches_source_scope`) resolves that unscoped key onto the same
session_id, so the wake passes the busy guards that are keyed by routing key
(`_active_sessions`, `_running_agents`) and only collides afterwards, on session
id, under the per-session turn lease (#64934) — which serializes it behind the
live turn's flush. On a live Slack gateway that shows up as a duplicate run on
one task plus 400+s of waiting before the woken turn starts.

Same failure mode as #56580 / #72191 (chat_type), one field over, and it needs
no schema change: `_thread_metadata_for_source()` already stamps
`slack_team_id`, the notify subscription persists that dict as
`delivery_metadata`, and the notifier already unpacks it. Rows written by
`kanban_tools._maybe_auto_subscribe` carry no workspace, so fall back to the
adapter's channel → workspace map via `scope_id_for_chat()`, read with getattr
so adapters opt in and unscoped platforms' keys stay byte-identical. Slack
answers it from `_remember_channel_team`, which drops channels claimed by two
workspaces, so an unknown or ambiguous channel degrades to today's behavior
instead of guessing wrong.

Also adds the contributor email mapping the attribution check requires.

Co-authored-by: Junie <junie@jetbrains.com>
2026-08-13 11:41:19 -07:00
..
browser feat(browser): integrate Browser Use CLI 3.0 2026-08-10 10:45:44 -07:00
context_engine
…
cron_providers fix(cron): surface initial scheduler registration failures 2026-08-07 17:45:06 +05:30
dashboard_auth fix(dashboard): set headers for Nous JWKS requests 2026-07-31 10:17:30 -04:00
disk-cleanup fix(disk-cleanup): re-validate stale test entries and protect new dirs from sweep 2026-07-31 22:36:04 -07:00
google_meet fix(secrets): resolve google_meet realtime key via secret scope at spawn time 2026-08-02 10:04:48 -07:00
hermes-achievements chore: remove old plan files 2026-08-09 15:17:01 -04:00
image_gen feat(media): default-on upscaling for sub-2MP image models (FAL + Krea) 2026-08-08 14:49:28 -07:00
kanban feat(plugins): kanban worker-lifecycle, task-mutation, and dispatch-tick observers 2026-08-13 09:35:52 -07:00
memory fix: track and join honcho-memwrite thread in shutdown 2026-08-13 23:43:15 +05:30
model-providers feat(models): add google/gemini-3.7-flash to nous + openrouter catalogs, drop gemini-3.6-flash 2026-08-13 11:28:16 -07:00
observability docs: document nemo_relay session-span segmentation config 2026-08-13 10:45:15 -07:00
platforms fix(kanban): key terminal-event wakes to the creator's workspace scope 2026-08-13 11:41:19 -07:00
security-guidance
…
spotify
…
teams_pipeline fix(secrets): scope tier-3 credential reads (teams_pipeline, deepinfra models, FAL/XAI/VERCEL/DAYTONA/GITHUB presence, HERMES_API_KEY display) 2026-08-02 10:04:48 -07:00
video_gen fix(video): bind managed SeedVR to source request 2026-08-08 17:01:59 -07:00
web
…
__init__.py
…
plugin_utils.py
…