Repository navigation
feat(knowledge): Slack / Confluence / Jira KB ingestion connectors #10538
Description
Activity
- addedknowledgeKnowledge base systemKnowledge base system
on Jun 27, 2026 Part of umbrella #9928 (integrations-plugins — connectors, channels, providers, search, media).
- added a commit that references this issue
on Jul 23, 2026 Scaffold delivered via PR #12189 / #12190 (Slack/Confluence/Jira connectors behind kb_enterprise_connectors flag, offline tests green). REMAINING before close (closure Gate 3): supply real Slack/Confluence/Jira credentials, enable the flag, and run a live sync() end-to-end validation. Keeping open for that.
- added a commit that references this issue
on Jul 23, 2026 github-actions commented
on Jul 23, 2026 on Jul 23, 2026 – with GitHub ActionsContributorMore actions- added a commit that references this issue
on Jul 23, 2026 Credentials model (owner clarification, 2026-07-24): connector credentials are per-install and stored in the AutoBot secrets manager — never provided to devs / never in the repo. So the connectors correctly read from ConnectorCredentialStore (the secrets backend); #12221 aligned the connector credential keys to the declared auth_schema so a per-install operator can supply creds via the secrets manager and authenticate. 'Live validation' is therefore a per-install operator step (enable the flag + add creds to the secrets manager + run a sync), not a dev/CI task. Delivered from the code side: scaffold #12189, offline mock #12199, setup guide #12219, auth-key alignment #12221/#12225.
✅ Closed with proof of implementation
Commit(s) / PRs (all merged to
Dev_new_gui):- fb8be3a / feat(kb): scaffold Slack/Confluence/Jira knowledge connectors behind feature flag (#10538) #12189 — feat(kb): scaffold Slack/Confluence/Jira knowledge connectors behind feature flag (feat(knowledge): Slack / Confluence / Jira KB ingestion connectors #10538)
- feat(kb): offline mock/replay knowledge connector + fixtures for sync() testing (#10538) #12199 — feat(kb): offline mock/replay knowledge connector + fixtures for sync() testing (feat(knowledge): Slack / Confluence / Jira KB ingestion connectors #10538)
- docs(kb): operator setup guide for Slack/Confluence/Jira connectors (#10538) #12219 — docs(kb): operator setup guide for Slack/Confluence/Jira connectors (feat(knowledge): Slack / Confluence / Jira KB ingestion connectors #10538)
- fix(kb): align connector credential reads with declared auth_schema (#12221) #12225 — fix(kb): align connector credential reads with declared auth_schema (closes KB connectors: auth-schema fields don't match connector-read credential keys (#10538) #12221)
- 8a30849 / tech-debt(backend): extract knowledge-connector base — _load_ts/detect_changes duplicated across connectors #12659, tech-debt(backend): extract knowledge-connector base for _load_ts + change-detection (#12659) #12677 — tech-debt: extract
_load_ts/_store_tschange-detection intoAbstractConnector - 1f6d216 / perf(http): 134 raw aiohttp.ClientSession constructions remain (127 per-request) despite the shared pool at 151 sites #12979, perf(http): route web_fetch + knowledge connectors through the shared pool (#12979) #12999 — perf(http): route these connectors through the shared pooled HTTP client
- feat(knowledge): correct auth-field docs + pagination tests for enterprise connectors (#10538) #13042 (this PR) — corrects the operator setup guide (stale post-fix(kb): align connector credential reads with declared auth_schema (#12221) #12225) + adds multi-page pagination tests
Gate 2:
check-issue-close-refs.sh 10538→ clear (no forward-tracking references).Acceptance Criteria (quoted verbatim from issue body):
- "Each connector ingests into ChromaDB via the existing ECL pipeline and is searchable via
kb.search" — ✅ all three connectors inheritAbstractConnector.sync()→_ingest_content()(knowledge/connectors/base.py), which callskb.store_fact(...)via the sharedget_knowledge_base()singleton — identical pipeline to every other connector (gitlab, notion, gdrive, etc.). - "Incremental sync (delta only) — no full rebuilds" — ✅
detect_changes(since=...)is implemented per connector (Slackts, Confluenceversion.when, Jiraupdated) and compares against a Redis-cached checkpoint via the shared_load_ts/_store_tshelpers (base.py:272-308, extracted in tech-debt(backend): extract knowledge-connector base — _load_ts/detect_changes duplicated across connectors #12659). - "Credential-gated; degrades gracefully when unconfigured" — ✅ each connector declares
auth_schema()(BearerAuth/BasicAuth), validated at create-time (api/knowledge_connectors.py:423);test_connection()returnsFalseon bad/missing credentials rather than raising; the whole family is additionally gated off by default behindAUTOBOT_FEATURE_KB_ENTERPRISE_CONNECTORS(knowledge/connectors/__init__.py:85-88).
Proposed-work checklist (quoted verbatim):
- "
slack.py— ingest channel/thread history with incremental sync" — ✅knowledge/connectors/slack.py - "
confluence.py— Atlassian Confluence pages with incremental sync" — ✅knowledge/connectors/confluence.py - "
jira.py— Jira issues + comments" — ✅knowledge/connectors/jira.py - "Register each in
registry.py" — ✅@ConnectorRegistry.register(...)on all three, gated import inknowledge/connectors/__init__.py:85-88, reachable via_SUPPORTED_TYPESinapi/knowledge_connectors.pyandGET /knowledge_base/connector_types/POST /knowledge_base/connectors - "Reuse existing retry/backoff (enhancement(connectors): add built-in HTTP retry with exponential backoff to AbstractConnector #8144) + Redis checkpoint crash recovery (enhancement(connectors): mid-sync checkpoint state so large syncs resume on crash #8146) from
base.py" — ✅ all three callself.fetch_with_retry(...)for paginated requests and inheritsync()'s crash-recovery checkpoint (base.py)
Test evidence (offline, mocked HTTP, no network):
knowledge/connectors/slack_test.py .............. (14) knowledge/connectors/confluence_test.py ............... (15) knowledge/connectors/jira_test.py .................. (18) knowledge/connectors/mock_test.py ................... (19) knowledge/connectors/connectors_init_gating_test.py ...... (6) ============================== 72 passed ==============================Covers: success + auth-failure (
401) paths, malformed/not-found source IDs, incremental
change-detection, and — added in #13042 — multi-page pagination for all three APIs.Reachability proof:
api/knowledge_connectors.py_SUPPORTED_TYPESincludesslack/confluence/jira;GET /knowledge_base/connector_typesandPOST /knowledge_base/connectorsoperate dynamically onConnectorRegistry.registered_types()/.create()— no separate wiring needed once the feature flag is on.Note on "live validation": per the owner's 2026-07-24 comment on this issue, credential wiring is per-install via the AutoBot secrets manager and is an operator task, not a dev/CI gate — the code-side delivery (scaffold, offline tests, auth-schema alignment, docs) is what's in scope here and is complete.
Discovered along the way (filed separately, unrelated to this issue): #13041 —
test_raw_client_session_ceiling_12992regressed 12→13 due to 3 undocumented new rawaiohttp.ClientSessionsites outsideknowledge/connectors/.- added a commit that references this issue
on Jul 30, 2026
Context
Discovered during research comparison against anthropics/knowledge-work-plugins. Their "Enterprise Search" plugin treats chat history (Slack), wikis (Confluence), and trackers (Jira) as first-class searchable knowledge sources. AutoBot has a robust connector framework but is missing these.
Gap
AutoBot's KB connector framework (autobot-backend/knowledge/connectors/registry.py) ships gdrive, onedrive, notion, gitlab, nextcloud, web_crawler, database, file_server — but no Slack, Jira, or Confluence ingestion connectors.
Slack exists only as a notification/approval integration (autobot-backend/integrations/slack_integration.py) — it pushes messages out, it does not ingest channel history into the KB for search.
This is the single biggest "enterprise search" coverage gap: a huge fraction of company knowledge lives in chat threads and wikis.
Proposed Work
Implement new connectors extending
AbstractConnector(autobot-backend/knowledge/connectors/base.py), modeled on notion.py:slack.py— ingest channel/thread history with incremental sync (reuse OAuth from existing slack_integration where possible)confluence.py— Atlassian Confluence pages with incremental syncjira.py— Jira issues + commentsbase.pyAcceptance Criteria
kb.searchRelated: connector category abstraction (sibling issue).