cortexdb-connectors 0.2.5__tar.gz → 0.2.6__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.5 → cortexdb_connectors-0.2.6}/PKG-INFO +1 -1
  2. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/__init__.py +40 -40
  3. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/base.py +18 -9
  4. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/confluence/__init__.py +359 -359
  5. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/discord/__init__.py +646 -646
  6. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/gitlab/__init__.py +749 -749
  7. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/hubspot/__init__.py +489 -489
  8. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/insights/detectors.py +56 -28
  9. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/intercom/__init__.py +631 -631
  10. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/linear/__init__.py +705 -705
  11. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/pagerduty/__init__.py +298 -298
  12. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/salesforce/__init__.py +399 -399
  13. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/servicenow/__init__.py +460 -460
  14. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/state.py +145 -145
  15. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/teams/__init__.py +656 -656
  16. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/worker.py +2 -2
  17. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/zendesk/__init__.py +496 -496
  18. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors.egg-info/PKG-INFO +1 -1
  19. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/pyproject.toml +87 -87
  20. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/tests/test_base.py +45 -0
  21. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/README.md +0 -0
  22. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/cli.py +0 -0
  23. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/freshdesk/__init__.py +0 -0
  24. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/github/__init__.py +0 -0
  25. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/google_workspace/__init__.py +0 -0
  26. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/insights/__init__.py +0 -0
  27. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/insights/api.py +0 -0
  28. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/insights/engine.py +0 -0
  29. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/jira/__init__.py +0 -0
  30. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/notion/__init__.py +0 -0
  31. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/slack/__init__.py +0 -0
  32. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/tldv/__init__.py +0 -0
  33. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors/webhooks.py +0 -0
  34. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors.egg-info/SOURCES.txt +0 -0
  35. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors.egg-info/dependency_links.txt +0 -0
  36. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors.egg-info/entry_points.txt +0 -0
  37. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors.egg-info/requires.txt +0 -0
  38. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/cortexdb_connectors.egg-info/top_level.txt +0 -0
  39. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/setup.cfg +0 -0
  40. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/tests/test_connector_coverage.py +0 -0
  41. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/tests/test_github.py +0 -0
  42. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/tests/test_ingest_e2e.py +0 -0
  43. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/tests/test_slack.py +0 -0
  44. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/tests/test_streaming_cursor.py +0 -0
  45. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/tests/test_webhooks.py +0 -0
  46. {cortexdb_connectors-0.2.5 → cortexdb_connectors-0.2.6}/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.5
3
+ Version: 0.2.6
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
@@ -1,40 +1,40 @@
1
- """cortexdb_connectors — data connector SDK for the CortexDB v1 API.
2
-
3
- Each connector subclass implements `fetch_events`, `normalize`, and
4
- `map_permissions`; the base class POSTs every normalised Episode to
5
- `/v1/experience` with the required Authorization + X-Cortex-Actor
6
- headers. Use the `cortexdb-sync` CLI to run a connector once or in a
7
- poll loop; or `from cortexdb_connectors.slack import SlackConnector`
8
- to drive it programmatically.
9
- """
10
-
11
- __version__ = "0.2.1"
12
-
13
- from cortexdb_connectors.base import (
14
- Actor,
15
- CortexConnector,
16
- EntityRef,
17
- Episode,
18
- EpisodeType,
19
- RawEvent,
20
- Source,
21
- SyncResult,
22
- SyncState,
23
- Visibility,
24
- VisibilityLevel,
25
- )
26
-
27
- __all__ = [
28
- "__version__",
29
- "Actor",
30
- "CortexConnector",
31
- "EntityRef",
32
- "Episode",
33
- "EpisodeType",
34
- "RawEvent",
35
- "Source",
36
- "SyncResult",
37
- "SyncState",
38
- "Visibility",
39
- "VisibilityLevel",
40
- ]
1
+ """cortexdb_connectors — data connector SDK for the CortexDB v1 API.
2
+
3
+ Each connector subclass implements `fetch_events`, `normalize`, and
4
+ `map_permissions`; the base class POSTs every normalised Episode to
5
+ `/v1/experience` with the required Authorization + X-Cortex-Actor
6
+ headers. Use the `cortexdb-sync` CLI to run a connector once or in a
7
+ poll loop; or `from cortexdb_connectors.slack import SlackConnector`
8
+ to drive it programmatically.
9
+ """
10
+
11
+ __version__ = "0.2.6"
12
+
13
+ from cortexdb_connectors.base import (
14
+ Actor,
15
+ CortexConnector,
16
+ EntityRef,
17
+ Episode,
18
+ EpisodeType,
19
+ RawEvent,
20
+ Source,
21
+ SyncResult,
22
+ SyncState,
23
+ Visibility,
24
+ VisibilityLevel,
25
+ )
26
+
27
+ __all__ = [
28
+ "__version__",
29
+ "Actor",
30
+ "CortexConnector",
31
+ "EntityRef",
32
+ "Episode",
33
+ "EpisodeType",
34
+ "RawEvent",
35
+ "Source",
36
+ "SyncResult",
37
+ "SyncState",
38
+ "Visibility",
39
+ "VisibilityLevel",
40
+ ]
@@ -322,19 +322,28 @@ class CortexConnector(ABC):
322
322
  "role": "user" if modality == "conversation" else "system",
323
323
  "text": self._guard_content(episode.content, episode),
324
324
  }
325
+ # The v1 write envelope is STRICT (deny_unknown_fields) as of v0.8.0:
326
+ # thread_id / meta / preceded_by are NOT envelope context fields, and
327
+ # sending them returns 422 INVALID_BODY (which stalls the sync cursor
328
+ # forever). Everything routable rides `context.labels` as key=value
329
+ # strings — the queryable partition recall metadata filters target.
330
+ # `context.preceded_by` is a list of CortexDB event ids (evt_…), not
331
+ # source-side parent ids, so the connector's parent_id goes to a
332
+ # label instead.
333
+ labels = list(labels)
334
+ if episode.thread_id:
335
+ labels.append(f"thread={episode.thread_id}")
336
+ if episode.parent_id:
337
+ labels.append(f"parent={episode.parent_id}")
338
+ if episode.metadata:
339
+ for k, v in episode.metadata.items():
340
+ if k == "modality":
341
+ continue
342
+ labels.append(f"{k}={v}")
325
343
  context: dict[str, Any] = {
326
344
  "observed_at": episode.occurred_at.isoformat(),
327
345
  "labels": labels,
328
346
  }
329
- if episode.thread_id:
330
- context["thread_id"] = episode.thread_id
331
- if episode.parent_id:
332
- context["preceded_by"] = [episode.parent_id]
333
- if episode.metadata:
334
- # Forward non-reserved metadata under a single key — the v1
335
- # surface doesn't reject unknown context keys but we tuck
336
- # everything under `meta` to keep the envelope tidy.
337
- context["meta"] = {k: v for k, v in episode.metadata.items() if k != "modality"}
338
347
 
339
348
  envelope: dict[str, Any] = {
340
349
  "scope": scope,