cortexdb-connectors 0.2.6__tar.gz → 0.2.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/PKG-INFO +1 -1
  2. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/__init__.py +1 -1
  3. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/base.py +21 -1
  4. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/cli.py +584 -583
  5. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/slack/__init__.py +103 -11
  6. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/webhooks.py +940 -933
  7. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors.egg-info/PKG-INFO +1 -1
  8. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/pyproject.toml +1 -1
  9. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/tests/test_base.py +367 -302
  10. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/tests/test_slack.py +294 -197
  11. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/README.md +0 -0
  12. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/confluence/__init__.py +0 -0
  13. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/discord/__init__.py +0 -0
  14. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/freshdesk/__init__.py +0 -0
  15. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/github/__init__.py +0 -0
  16. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/gitlab/__init__.py +0 -0
  17. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/google_workspace/__init__.py +0 -0
  18. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/hubspot/__init__.py +0 -0
  19. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/insights/__init__.py +0 -0
  20. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/insights/api.py +0 -0
  21. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/insights/detectors.py +0 -0
  22. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/insights/engine.py +0 -0
  23. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/intercom/__init__.py +0 -0
  24. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/jira/__init__.py +0 -0
  25. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/linear/__init__.py +0 -0
  26. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/notion/__init__.py +0 -0
  27. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/pagerduty/__init__.py +0 -0
  28. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/salesforce/__init__.py +0 -0
  29. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/servicenow/__init__.py +0 -0
  30. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/state.py +0 -0
  31. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/teams/__init__.py +0 -0
  32. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/tldv/__init__.py +0 -0
  33. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/worker.py +0 -0
  34. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors/zendesk/__init__.py +0 -0
  35. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors.egg-info/SOURCES.txt +0 -0
  36. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors.egg-info/dependency_links.txt +0 -0
  37. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors.egg-info/entry_points.txt +0 -0
  38. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors.egg-info/requires.txt +0 -0
  39. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/cortexdb_connectors.egg-info/top_level.txt +0 -0
  40. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/setup.cfg +0 -0
  41. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/tests/test_connector_coverage.py +0 -0
  42. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/tests/test_github.py +0 -0
  43. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/tests/test_ingest_e2e.py +0 -0
  44. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/tests/test_streaming_cursor.py +0 -0
  45. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/tests/test_webhooks.py +0 -0
  46. {cortexdb_connectors-0.2.6 → cortexdb_connectors-0.2.7}/tests/test_webhooks_replay.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cortexdb-connectors
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: Data connectors for CortexDB — ingest from Slack, GitHub, GitLab, Jira, Linear, Confluence, Notion, PagerDuty, Discord, Teams, Google Workspace, Salesforce, HubSpot, Zendesk, Intercom, and ServiceNow into the v1 memory API.
5
5
  Author-email: CortexDB Team <team@cortexdb.ai>
6
6
  License-Expression: Apache-2.0
@@ -8,7 +8,7 @@ poll loop; or `from cortexdb_connectors.slack import SlackConnector`
8
8
  to drive it programmatically.
9
9
  """
10
10
 
11
- __version__ = "0.2.6"
11
+ __version__ = "0.2.7"
12
12
 
13
13
  from cortexdb_connectors.base import (
14
14
  Actor,
@@ -158,6 +158,13 @@ class Episode:
158
158
  class SyncResult:
159
159
  episodes_fetched: int = 0
160
160
  episodes_ingested: int = 0
161
+ # Items the connector's content policy deliberately dropped (`normalize`
162
+ # returned None: empty/attachment-only text, emoji-only, noise subtypes).
163
+ # Counted separately so operators can tell "filtered by design" from
164
+ # "failed"; skipped items ADVANCE the cursor like successes — a skip is
165
+ # a decision, not an error, and treating it as one would stall the sync
166
+ # at the first attachment-only message.
167
+ episodes_skipped: int = 0
161
168
  errors: list[str] = field(default_factory=list)
162
169
  duration_seconds: float = 0.0
163
170
  # Watermarks for cursor-safe syncing: the latest source timestamp we
@@ -237,7 +244,13 @@ class CortexConnector(ABC):
237
244
  ...
238
245
 
239
246
  @abstractmethod
240
- def normalize(self, raw: RawEvent) -> Episode:
247
+ def normalize(self, raw: RawEvent) -> Episode | None:
248
+ """Convert a RawEvent into an Episode, or return None to SKIP it.
249
+
250
+ None means the item is dropped by content policy (nothing sent to
251
+ the server); the sync loop counts it in `episodes_skipped` and the
252
+ cursor advances past it.
253
+ """
241
254
  ...
242
255
 
243
256
  @abstractmethod
@@ -257,6 +270,13 @@ class CortexConnector(ABC):
257
270
  for raw in raw_events:
258
271
  try:
259
272
  episode = self.normalize(raw)
273
+ if episode is None:
274
+ # Content-policy skip: advance the cursor exactly like a
275
+ # success so the next incremental run never re-fetches it.
276
+ result.episodes_skipped += 1
277
+ if result.latest_success is None or raw.timestamp > result.latest_success:
278
+ result.latest_success = raw.timestamp
279
+ continue
260
280
  episode.visibility = self.map_permissions(raw)
261
281
  await self.ingest_episode(episode)
262
282
  result.episodes_ingested += 1