Skip to content

feat(knowledge): Slack / Confluence / Jira KB ingestion connectors #10538

Description

@mrveiss

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:

Acceptance Criteria

  • Each connector ingests into ChromaDB via the existing ECL pipeline and is searchable via kb.search
  • Incremental sync (delta only) — no full rebuilds
  • Credential-gated; degrades gracefully when unconfigured

Related: connector category abstraction (sibling issue).

Activity

  1. mrveiss commented on Jun 27, 2026

    @mrveiss
    OwnerAuthor

    Sibling: #10539 (tool-agnostic connector category abstraction). Best implemented together — new connectors here should register into the CATEGORY_MAP from #10539.

  2. mrveiss commented on Jun 27, 2026

    @mrveiss
    OwnerAuthor

    Part of umbrella #9928 (integrations-plugins — connectors, channels, providers, search, media).

  3. mrveiss commented on Jul 23, 2026

    @mrveiss
    OwnerAuthor

    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.

  4. github-actions commented on Jul 23, 2026

    @github-actions
    Contributor

    PR #12199 (merged to Dev_new_gui) references this issue with a close keyword.

    feat(kb): offline mock/replay knowledge connector + fixtures for sync() testing (#10538)

    If this issue is fully resolved, close it manually. If work remains, no action is needed.

  5. mrveiss commented on Jul 24, 2026

    @mrveiss
    OwnerAuthor

    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.

  6. mrveiss commented on Jul 30, 2026

    @mrveiss
    OwnerAuthor

    ✅ Closed with proof of implementation

    Commit(s) / PRs (all merged to Dev_new_gui):

    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 inherit AbstractConnector.sync() → _ingest_content() (knowledge/connectors/base.py), which calls kb.store_fact(...) via the shared get_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 (Slack ts, Confluence version.when, Jira updated) and compares against a Redis-cached checkpoint via the shared _load_ts/_store_ts helpers (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() returns False on bad/missing credentials rather than raising; the whole family is additionally gated off by default behind AUTOBOT_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 in knowledge/connectors/__init__.py:85-88, reachable via _SUPPORTED_TYPES in api/knowledge_connectors.py and GET /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 call self.fetch_with_retry(...) for paginated requests and inherit sync()'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_TYPES includes slack/confluence/jira; GET /knowledge_base/connector_types and POST /knowledge_base/connectors operate dynamically on ConnectorRegistry.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_12992 regressed 12→13 due to 3 undocumented new raw aiohttp.ClientSession sites outside knowledge/connectors/.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions