agentgraph-server 0.7.1__tar.gz → 0.7.2__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 (111) hide show
  1. {agentgraph_server-0.7.1/agentgraph_server.egg-info → agentgraph_server-0.7.2}/PKG-INFO +1 -1
  2. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/link.py +7 -0
  3. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2/agentgraph_server.egg-info}/PKG-INFO +1 -1
  4. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/pyproject.toml +1 -1
  5. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_upsert.py +37 -0
  6. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/.agents/skills/agentgraph/SKILL.md +0 -0
  7. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/.agents/skills/agentgraph/references/commands.md +0 -0
  8. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/.agents/skills/agentgraph/references/data-model.md +0 -0
  9. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/.agents/skills/agentgraph/references/operations.md +0 -0
  10. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/.agents/skills/slack-auth/SKILL.md +0 -0
  11. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/LICENSE +0 -0
  12. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/README.md +0 -0
  13. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/__init__.py +0 -0
  14. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/auth/__init__.py +0 -0
  15. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/auth/credentials.py +0 -0
  16. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/backends/__init__.py +0 -0
  17. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/backends/sqlite/__init__.py +0 -0
  18. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/backends/sqlite/backend.py +0 -0
  19. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/backends/sqlite/schema.sql +0 -0
  20. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/backends/sqlite/vector.py +0 -0
  21. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/cli.py +0 -0
  22. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/cli_query.py +0 -0
  23. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/cli_sync.py +0 -0
  24. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/config.py +0 -0
  25. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/connectors/__init__.py +0 -0
  26. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/connectors/base.py +0 -0
  27. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/connectors/command_effects.py +0 -0
  28. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/connectors/feed.py +0 -0
  29. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/connectors/match_patterns.py +0 -0
  30. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/connectors/registry.py +0 -0
  31. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/connectors/status.py +0 -0
  32. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/core/__init__.py +0 -0
  33. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/core/context.py +0 -0
  34. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/core/runtime.py +0 -0
  35. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/core/storage.py +0 -0
  36. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/demo.py +0 -0
  37. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/demo_fixtures/reliable-webhooks.md +0 -0
  38. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/demo_fixtures/retry-guidance.md +0 -0
  39. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/__init__.py +0 -0
  40. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/bookmark.py +0 -0
  41. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/delete.py +0 -0
  42. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/download.py +0 -0
  43. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/embeddings.py +0 -0
  44. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/expiration.py +0 -0
  45. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/fetch.py +0 -0
  46. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/operations.py +0 -0
  47. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/person.py +0 -0
  48. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/query.py +0 -0
  49. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/graph/upsert.py +0 -0
  50. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/logging.py +0 -0
  51. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/mcp/__init__.py +0 -0
  52. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/mcp/server.py +0 -0
  53. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/perf.py +0 -0
  54. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/query_client.py +0 -0
  55. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/__init__.py +0 -0
  56. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/app.py +0 -0
  57. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/browse_api.py +0 -0
  58. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/graph_api.py +0 -0
  59. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/meta_api.py +0 -0
  60. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/observation.py +0 -0
  61. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/presentation.py +0 -0
  62. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/router.py +0 -0
  63. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/static/viewer.html +0 -0
  64. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/sync.py +0 -0
  65. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/sync_api.py +0 -0
  66. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/server/uds.py +0 -0
  67. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph/skills.py +0 -0
  68. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph_server.egg-info/SOURCES.txt +0 -0
  69. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph_server.egg-info/dependency_links.txt +0 -0
  70. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph_server.egg-info/entry_points.txt +0 -0
  71. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph_server.egg-info/requires.txt +0 -0
  72. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/agentgraph_server.egg-info/top_level.txt +0 -0
  73. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/setup.cfg +0 -0
  74. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_auth.py +0 -0
  75. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_auth_status_methods.py +0 -0
  76. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_benchmarks.py +0 -0
  77. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_browse.py +0 -0
  78. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_cli.py +0 -0
  79. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_command_effects.py +0 -0
  80. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_config.py +0 -0
  81. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_connectors.py +0 -0
  82. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_discord_attachments.py +0 -0
  83. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_docs_build.py +0 -0
  84. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_embeddings.py +0 -0
  85. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_entity_types.py +0 -0
  86. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_expiration.py +0 -0
  87. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_feed_connectors.py +0 -0
  88. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_fetch.py +0 -0
  89. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_graph_operations.py +0 -0
  90. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_launch_demo.py +0 -0
  91. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_logging.py +0 -0
  92. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_match_patterns.py +0 -0
  93. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_mcp_transport.py +0 -0
  94. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_observation.py +0 -0
  95. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_query.py +0 -0
  96. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_query_client.py +0 -0
  97. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_query_parity.py +0 -0
  98. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_registry.py +0 -0
  99. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_release_metadata.py +0 -0
  100. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_route_resolution.py +0 -0
  101. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_router.py +0 -0
  102. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_rss_connector.py +0 -0
  103. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_schema.py +0 -0
  104. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_server_imports.py +0 -0
  105. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_server_lifespan.py +0 -0
  106. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_server_uds.py +0 -0
  107. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_slack_auth_artifacts.py +0 -0
  108. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_slack_oauth.py +0 -0
  109. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_sync.py +0 -0
  110. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_viewer_layout_contract.py +0 -0
  111. {agentgraph_server-0.7.1 → agentgraph_server-0.7.2}/tests/test_web_connector.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentgraph-server
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: A local-first CLI and MCP server that turns selected digital sources into a searchable graph for the AI agent you already use.
5
5
  Requires-Python: >=3.12
6
6
  Description-Content-Type: text/markdown
@@ -47,6 +47,13 @@ async def link_entity_to_urls(platform_entity_id: str, platform: str, content: s
47
47
  continue
48
48
  seen.add(ref.resource_id)
49
49
 
50
+ # An entity's own URL is normally part of its content — connectors append
51
+ # it to the rendered body, and a page or work item often links to itself
52
+ # from a comment. A self-loop carries no information, so it is dropped
53
+ # here rather than left for every caller to filter out of a traversal.
54
+ if ref.source == platform and ref.resource_id == platform_entity_id:
55
+ continue
56
+
50
57
  tgt_id = await backend.find_entity_id(ref.source, ref.resource_id)
51
58
  if not tgt_id:
52
59
  entity_type = RESOURCE_TYPE_TO_ENTITY_TYPE[ref.resource_type]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentgraph-server
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: A local-first CLI and MCP server that turns selected digital sources into a searchable graph for the AI agent you already use.
5
5
  Requires-Python: >=3.12
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentgraph-server"
3
- version = "0.7.1"
3
+ version = "0.7.2"
4
4
  description = "A local-first CLI and MCP server that turns selected digital sources into a searchable graph for the AI agent you already use."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -716,6 +716,43 @@ async def test_upsert_event_includes_reference_edge_created_after_storage_commit
716
716
  assert notify.await_count == 1
717
717
 
718
718
 
719
+ async def test_content_linking_ignores_the_entity_s_own_url(
720
+ sqlite_backend: SQLiteBackend,
721
+ ) -> None:
722
+ """A body that links to its own entity must not gain a `references` self-loop.
723
+
724
+ Connectors append an entity's web URL to its rendered content, so every
725
+ content-bearing entity hits this path on the way in.
726
+ """
727
+ own_url = "https://example.com/self"
728
+ batch = EntityBatch(
729
+ entities=[
730
+ EntityRecord(
731
+ entity_type="Document",
732
+ platform="web",
733
+ platform_entity_id=own_url,
734
+ content=f"Canonical location: {own_url}",
735
+ )
736
+ ]
737
+ )
738
+ own_ref = SourceReference(source="web", resource_type="document", resource_id=own_url)
739
+
740
+ with (
741
+ patch("agentgraph.graph.upsert._build_embeddings", return_value=({}, {})),
742
+ patch("agentgraph.server.router.classify_url", return_value=own_ref),
743
+ patch("agentgraph.connectors.feed.notify_feed_connectors", new=AsyncMock()) as notify,
744
+ ):
745
+ await upsert_batch(batch)
746
+
747
+ entity_id = await sqlite_backend.find_entity_id("web", own_url)
748
+ assert entity_id is not None
749
+ assert await sqlite_backend.get_edges(entity_id, None, "both") == []
750
+
751
+ notify_args = notify.await_args
752
+ assert notify_args is not None
753
+ assert notify_args.args[0].edges == []
754
+
755
+
719
756
  async def test_upsert_batch_skips_fts_rewrites_for_unchanged_text(
720
757
  sqlite_backend: SQLiteBackend,
721
758
  ) -> None: