agentseek-api 0.0.2__tar.gz → 0.1.0__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 (240) hide show
  1. agentseek_api-0.1.0/.env.example +20 -0
  2. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/.github/workflows/ci.yml +21 -0
  3. agentseek_api-0.1.0/.gitignore +21 -0
  4. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/PKG-INFO +248 -54
  5. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/README.md +244 -51
  6. agentseek_api-0.1.0/README.zh-CN.md +799 -0
  7. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/README.md +5 -2
  8. agentseek_api-0.1.0/examples/auth/api_key_auth.py +38 -0
  9. agentseek_api-0.1.0/examples/auth/bearer_token_auth.py +40 -0
  10. agentseek_api-0.1.0/examples/auth/jwt.md +19 -0
  11. agentseek_api-0.1.0/examples/auth/jwt_auth.py +86 -0
  12. agentseek_api-0.1.0/examples/docker_ci_auth/auth_backend.py +36 -0
  13. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/pyproject.toml +6 -3
  14. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/test_cli_dev_studio_smoke.py +5 -9
  15. agentseek_api-0.1.0/scripts/test_cli_embed_serve_smoke.py +167 -0
  16. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/test_cli_serve_smoke.py +8 -3
  17. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/verify_docker_api.py +8 -102
  18. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/a2a_server.py +8 -28
  19. agentseek_api-0.1.0/src/agentseek_api/api/assistants.py +394 -0
  20. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/api/crons.py +34 -13
  21. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/api/runs.py +352 -177
  22. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/api/stateless_runs.py +34 -12
  23. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/api/store.py +6 -7
  24. agentseek_api-0.1.0/src/agentseek_api/api/streaming.py +282 -0
  25. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/api/threads.py +343 -395
  26. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/cli.py +21 -10
  27. agentseek_api-0.1.0/src/agentseek_api/core/app_loader.py +60 -0
  28. agentseek_api-0.1.0/src/agentseek_api/core/auth_deps.py +68 -0
  29. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/core/auth_middleware.py +103 -121
  30. agentseek_api-0.1.0/src/agentseek_api/core/content_type_fix.py +59 -0
  31. agentseek_api-0.1.0/src/agentseek_api/core/cors_config.py +28 -0
  32. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/core/database.py +104 -40
  33. agentseek_api-0.1.0/src/agentseek_api/core/http_config.py +30 -0
  34. agentseek_api-0.1.0/src/agentseek_api/core/oceanbase_checkpointer.py +106 -0
  35. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/main.py +152 -42
  36. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/models/api.py +157 -39
  37. agentseek_api-0.1.0/src/agentseek_api/models/auth.py +26 -0
  38. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/cron_service.py +27 -14
  39. agentseek_api-0.1.0/src/agentseek_api/services/default_assistants.py +79 -0
  40. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/run_executor.py +269 -38
  41. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/run_jobs.py +1 -1
  42. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/run_preparation.py +22 -16
  43. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/sse.py +22 -1
  44. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/stream_persistence.py +3 -3
  45. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/thread_checkpoint_store.py +189 -4
  46. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/thread_protocol.py +131 -1
  47. agentseek_api-0.1.0/src/agentseek_api/services/thread_service.py +64 -0
  48. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/settings.py +3 -4
  49. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/conftest.py +14 -0
  50. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/conftest.py +0 -1
  51. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/test_a2a_live.py +0 -2
  52. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/test_langsmith_compat_live.py +32 -48
  53. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/test_mcp_live.py +0 -2
  54. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/test_real_api_flow.py +2 -2
  55. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_a2a_endpoint.py +9 -5
  56. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_agent_card.py +0 -33
  57. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_agents_aliases.py +10 -11
  58. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_assistants_compat.py +2 -2
  59. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_assistants_crud.py +3 -3
  60. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_assistants_ordering.py +1 -1
  61. agentseek_api-0.1.0/tests/integration/test_auth_coverage_gaps.py +838 -0
  62. agentseek_api-0.1.0/tests/integration/test_auth_handlers.py +193 -0
  63. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_auth_route_enforcement.py +31 -18
  64. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_auth_scope_matrix.py +10 -7
  65. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_langsmith_compat_coverage.py +6 -6
  66. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_langsmith_compat_extra.py +29 -26
  67. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_mcp_endpoint.py +9 -13
  68. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_metadata_db_config.py +6 -0
  69. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_protocol_v2_streaming.py +6 -6
  70. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_run_cancellation_async.py +1 -2
  71. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_runs_compat.py +35 -53
  72. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_runs_crud.py +4 -3
  73. agentseek_api-0.1.0/tests/integration/test_runs_ordering.py +71 -0
  74. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_runs_streaming_errors.py +3 -2
  75. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_runs_wait_and_get.py +6 -4
  76. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_stateless_runs_crud.py +3 -3
  77. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_store_api.py +13 -14
  78. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_stream_persistence.py +31 -33
  79. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_system_endpoints.py +0 -5
  80. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_threads_compat.py +4 -9
  81. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_threads_crud.py +10 -11
  82. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_threads_ordering.py +2 -2
  83. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_a2a_server.py +3 -26
  84. agentseek_api-0.1.0/tests/unit/test_app_loader.py +55 -0
  85. agentseek_api-0.1.0/tests/unit/test_assistant_routes_unit.py +448 -0
  86. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_auth.py +200 -173
  87. agentseek_api-0.1.0/tests/unit/test_auth_internals.py +204 -0
  88. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_cli.py +12 -43
  89. agentseek_api-0.1.0/tests/unit/test_content_type_fix.py +37 -0
  90. agentseek_api-0.1.0/tests/unit/test_custom_routers.py +216 -0
  91. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_database_manager.py +48 -0
  92. agentseek_api-0.1.0/tests/unit/test_default_assistants.py +164 -0
  93. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_executor.py +24 -0
  94. agentseek_api-0.1.0/tests/unit/test_http_config.py +36 -0
  95. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_openapi_auth_config.py +2 -2
  96. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_run_executor.py +111 -14
  97. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_run_jobs.py +111 -0
  98. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_run_preparation.py +16 -16
  99. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_runtime_store.py +6 -1
  100. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_sample_graphs.py +21 -0
  101. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_seekdb_embed_launcher.py +1 -0
  102. agentseek_api-0.1.0/tests/unit/test_sse_keepalive.py +60 -0
  103. agentseek_api-0.1.0/tests/unit/test_store_config.py +224 -0
  104. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_stream_persistence_helpers.py +2 -6
  105. agentseek_api-0.1.0/tests/unit/test_thread_checkpoint_store.py +273 -0
  106. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_thread_routes_unit.py +71 -68
  107. agentseek_api-0.1.0/tests/unit/test_thread_service.py +91 -0
  108. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/uv.lock +701 -28
  109. agentseek_api-0.0.2/.env.example +0 -15
  110. agentseek_api-0.0.2/.gitignore +0 -9
  111. agentseek_api-0.0.2/docs/superpowers/plans/2026-05-23-mcp-endpoint-implementation.md +0 -1010
  112. agentseek_api-0.0.2/docs/superpowers/plans/2026-05-24-a2a-endpoint-implementation.md +0 -942
  113. agentseek_api-0.0.2/docs/superpowers/plans/2026-05-25-cron-support-implementation.md +0 -625
  114. agentseek_api-0.0.2/docs/superpowers/specs/2026-05-23-mcp-endpoint-design.md +0 -389
  115. agentseek_api-0.0.2/docs/superpowers/specs/2026-05-24-a2a-endpoint-design.md +0 -365
  116. agentseek_api-0.0.2/docs/superpowers/specs/2026-05-25-agent-server-release-hardening-design.md +0 -240
  117. agentseek_api-0.0.2/docs/superpowers/specs/2026-05-25-cron-support-design.md +0 -370
  118. agentseek_api-0.0.2/examples/auth/jwt.md +0 -5
  119. agentseek_api-0.0.2/examples/docker_ci_auth/auth_backend.py +0 -9
  120. agentseek_api-0.0.2/src/agentseek_api/api/assistants.py +0 -251
  121. agentseek_api-0.0.2/src/agentseek_api/core/auth_deps.py +0 -18
  122. agentseek_api-0.0.2/src/agentseek_api/core/oceanbase_checkpointer.py +0 -50
  123. agentseek_api-0.0.2/src/agentseek_api/models/auth.py +0 -6
  124. agentseek_api-0.0.2/src/agentseek_api/services/thread_service.py +0 -23
  125. agentseek_api-0.0.2/tests/integration/test_runs_ordering.py +0 -29
  126. agentseek_api-0.0.2/tests/unit/test_assistant_routes_unit.py +0 -285
  127. agentseek_api-0.0.2/tests/unit/test_store_config.py +0 -109
  128. agentseek_api-0.0.2/tests/unit/test_thread_checkpoint_store.py +0 -98
  129. agentseek_api-0.0.2/tests/unit/test_thread_service.py +0 -34
  130. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/.dockerignore +0 -0
  131. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  132. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/.github/workflows/live-provider-streaming.yml +0 -0
  133. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/.github/workflows/release.yml +0 -0
  134. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/AGENTS.md +0 -0
  135. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/CONTRIBUTING.md +0 -0
  136. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/LICENSE +0 -0
  137. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/Makefile +0 -0
  138. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/__init__.py +0 -0
  139. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/assistant_config/agentseek.json +0 -0
  140. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/assistant_config/graph.py +0 -0
  141. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/auth/custom_backend.py +0 -0
  142. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/custom_routes/app.py +0 -0
  143. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/docker_ci_auth/manifest.json +0 -0
  144. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/external_graph/__init__.py +0 -0
  145. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/external_graph/graph.py +0 -0
  146. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/external_graph/manifest.json +0 -0
  147. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/external_graph/run.py +0 -0
  148. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/__init__.py +0 -0
  149. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/react_agent/__init__.py +0 -0
  150. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/react_agent/graph.py +0 -0
  151. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/store_memory/graph.py +0 -0
  152. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/stress_test/__init__.py +0 -0
  153. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/stress_test/graph.py +0 -0
  154. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/stress_tool_agent/__init__.py +0 -0
  155. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/stress_tool_agent/graph.py +0 -0
  156. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/subgraph_agent/__init__.py +0 -0
  157. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/subgraph_agent/graph.py +0 -0
  158. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/subgraph_hitl_agent/__init__.py +0 -0
  159. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/graphs/subgraph_hitl_agent/graph.py +0 -0
  160. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/live_provider_graphs/__init__.py +0 -0
  161. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/live_provider_graphs/graph.py +0 -0
  162. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/live_provider_graphs/manifest.json +0 -0
  163. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/minimal_agentseek/agentseek.json +0 -0
  164. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/minimal_agentseek/graph.py +0 -0
  165. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/run_sample_graphs.py +0 -0
  166. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/examples/sample_graphs_manifest.json +0 -0
  167. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/build_live_provider_matrix.py +0 -0
  168. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/seekdb_checkpoint_smoke.py +0 -0
  169. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/seekdb_embed_launcher.py +0 -0
  170. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/test-checkpoints.sh +0 -0
  171. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/test-cli-dev-samples.sh +0 -0
  172. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/test-cli-docker.sh +0 -0
  173. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/test-live-provider.sh +0 -0
  174. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/test-redis-runtime.sh +0 -0
  175. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/test-seekdb.sh +0 -0
  176. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/scripts/test_cli_config_autodiscovery.py +0 -0
  177. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/__init__.py +0 -0
  178. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/api/__init__.py +0 -0
  179. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/core/__init__.py +0 -0
  180. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/core/a2a_config.py +0 -0
  181. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/core/config_file.py +0 -0
  182. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/core/mcp_config.py +0 -0
  183. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/core/orm.py +0 -0
  184. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/core/runtime_store.py +0 -0
  185. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/core/store_config.py +0 -0
  186. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/mcp_server.py +0 -0
  187. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/models/__init__.py +0 -0
  188. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/models/protocol.py +0 -0
  189. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/scheduler.py +0 -0
  190. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/__init__.py +0 -0
  191. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/cron_models.py +0 -0
  192. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/cron_rrule.py +0 -0
  193. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/cron_scheduler.py +0 -0
  194. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/cron_webhooks.py +0 -0
  195. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/executor.py +0 -0
  196. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/langgraph_service.py +0 -0
  197. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/redis_queue.py +0 -0
  198. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/run_state.py +0 -0
  199. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/services/sample_graphs.py +0 -0
  200. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/src/agentseek_api/worker.py +0 -0
  201. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/__init__.py +0 -0
  202. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/__init__.py +0 -0
  203. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/e2e_inprocess_flow.py +0 -0
  204. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/e2e_live_http_flow.py +0 -0
  205. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/e2e_live_http_multi_graph.py +0 -0
  206. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/e2e_live_http_resume_flow.py +0 -0
  207. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/fixtures/langgraph.store-e2e.json +0 -0
  208. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/live_provider_helpers.py +0 -0
  209. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/test_live_provider_api.py +0 -0
  210. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/e2e/test_live_provider_mcp.py +0 -0
  211. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_core_api_flow.py +0 -0
  212. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_cron_api.py +0 -0
  213. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_live_provider_streaming.py +0 -0
  214. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_runs_resume.py +0 -0
  215. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_runs_streaming.py +0 -0
  216. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_runs_validation.py +0 -0
  217. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_runs_wait_timeout.py +0 -0
  218. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/integration/test_scheduler_runtime.py +0 -0
  219. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_a2a_config.py +0 -0
  220. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_auth_deps.py +0 -0
  221. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_checkpoint_guards.py +0 -0
  222. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_cron_rrule.py +0 -0
  223. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_cron_service.py +0 -0
  224. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_cron_webhooks.py +0 -0
  225. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_examples.py +0 -0
  226. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_graph_manifest.py +0 -0
  227. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_langgraph_service.py +0 -0
  228. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_live_provider_e2e_config.py +0 -0
  229. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_live_provider_graphs.py +0 -0
  230. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_live_provider_matrix.py +0 -0
  231. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_mcp_config.py +0 -0
  232. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_mcp_server.py +0 -0
  233. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_oceanbase_checkpointer.py +0 -0
  234. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_redis_queue.py +0 -0
  235. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_run_state.py +0 -0
  236. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_scheduler.py +0 -0
  237. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_scheduler_process.py +0 -0
  238. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_seekdb_checkpoint_smoke.py +0 -0
  239. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_thread_protocol.py +0 -0
  240. {agentseek_api-0.0.2 → agentseek_api-0.1.0}/tests/unit/test_worker.py +0 -0
@@ -0,0 +1,20 @@
1
+ METADATA_DB_URL=
2
+ METADATA_DB_BACKEND=auto
3
+ SEEKDB_URL=mysql+aiomysql://root%40test:@localhost:2881/seekdb
4
+ AGENTSEEK_GRAPHS=
5
+ # Auth: configure via agentseek.json "auth.path" or set AUTH_MODULE_PATH directly.
6
+ # Format: "./path/to/auth.py:auth" (langgraph_sdk.Auth object)
7
+ # If not set, all requests pass through as default_user (noop).
8
+ AUTH_MODULE_PATH=
9
+
10
+ # Embedded SeekDB — set to true for a zero-config local backend.
11
+ # Data stored in SEEKDB_EMBED_DIR (default: ~/.agentseek/seekdb_data).
12
+ # Requires: uv sync --dev --extra embedded
13
+ # SEEKDB_EMBED=true
14
+ # SEEKDB_EMBED_DIR=
15
+
16
+ OCEANBASE_HOST=localhost
17
+ OCEANBASE_PORT=2881
18
+ OCEANBASE_USER=root@test
19
+ OCEANBASE_PASSWORD=
20
+ OCEANBASE_DB_NAME=seekdb
@@ -90,6 +90,27 @@ jobs:
90
90
  - name: CLI config and Docker planning tests
91
91
  run: uv run pytest tests/unit/test_cli.py tests/unit/test_graph_manifest.py -q
92
92
 
93
+ embedded-seekdb-smoke:
94
+ name: Embedded SeekDB Smoke
95
+ runs-on: ubuntu-latest
96
+ timeout-minutes: 15
97
+ steps:
98
+ - name: Checkout
99
+ uses: actions/checkout@v4
100
+
101
+ - name: Setup UV
102
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
103
+ with:
104
+ enable-cache: true
105
+ cache-python: true
106
+ python-version: "3.12"
107
+
108
+ - name: Sync with embedded extra
109
+ run: uv sync --dev --extra embedded
110
+
111
+ - name: Embedded seekdb serve smoke (SEEKDB_EMBED=true)
112
+ run: uv run python scripts/test_cli_embed_serve_smoke.py
113
+
93
114
  cli-docker-runtime:
94
115
  name: CLI Docker Runtime
95
116
  runs-on: ubuntu-latest
@@ -0,0 +1,21 @@
1
+ .DS_Store
2
+ .vscode/
3
+ .coverage
4
+ .agentseek/
5
+ .pytest_cache/
6
+ .ruff_cache/
7
+ .tmp/
8
+ .venv/
9
+ __pycache__/
10
+ *.pyc
11
+ *.cover
12
+ .env
13
+ .envrc
14
+ .venv
15
+ env/
16
+ venv/
17
+ ENV/
18
+ env.bak/
19
+ venv.bak/
20
+ .claude
21
+ docs/superpowers/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentseek-api
3
- Version: 0.0.2
3
+ Version: 0.1.0
4
4
  Summary: AgentSeek API core runtime with OceanBase checkpoints.
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -12,7 +12,7 @@ Requires-Dist: fastapi>=0.110.1
12
12
  Requires-Dist: greenlet>=3.1.0
13
13
  Requires-Dist: langchain-anthropic>=1.0.0
14
14
  Requires-Dist: langchain-core>=1.0.0
15
- Requires-Dist: langchain-oceanbase==0.5.0
15
+ Requires-Dist: langchain-oceanbase==0.5.2
16
16
  Requires-Dist: langchain-openai>=1.0.0
17
17
  Requires-Dist: langchain>=0.3.9
18
18
  Requires-Dist: langgraph-sdk>=0.3.5
@@ -22,33 +22,41 @@ Requires-Dist: pydantic-settings>=2.4.0
22
22
  Requires-Dist: pydantic>=2.8.0
23
23
  Requires-Dist: pymysql>=1.1.0
24
24
  Requires-Dist: redis>=5.0.0
25
+ Requires-Dist: scalar-fastapi>=1.0.3
25
26
  Requires-Dist: sqlalchemy>=2.0.0
26
27
  Requires-Dist: uvicorn>=0.30.0
27
28
  Provides-Extra: embedded
28
- Requires-Dist: langchain-oceanbase[pyseekdb]==0.5.0; extra == 'embedded'
29
+ Requires-Dist: langchain-oceanbase[pyseekdb]==0.5.2; extra == 'embedded'
29
30
  Description-Content-Type: text/markdown
30
31
 
31
32
  # AgentSeek API
32
33
 
34
+ **English** | [中文](README.zh-CN.md)
35
+
36
+ > [!WARNING]
37
+ > This project is under active development and is **not production-ready**.
38
+ > Pull requests for bug fixes and enhancements are warmly welcomed!
39
+
33
40
  Run LangGraph and LangChain apps behind a FastAPI runtime with a standalone
34
41
  `agentseek-api` CLI.
35
42
 
36
43
  > [!NOTE]
37
44
  > AgentSeek API uses
38
45
  > [Agent Protocol](https://github.com/langchain-ai/agent-protocol) as the main
39
- > external compatibility reference. The current runtime already covers the core
40
- > thread, run, cron, streaming, and protocol-v2 event flows. Some protocol surfaces
41
- > are still pending, and agent resources are exposed through `/assistants`,
42
- > direct `/agents` aliases, Streamable HTTP MCP, and LangSmith-style A2A
43
- > endpoints. This is workable OSS parity for the core agent-server surfaces,
44
- > not full LangSmith Agent Server parity.
46
+ > external compatibility reference. The current runtime covers the core
47
+ > thread, run, cron, streaming (including subgraph and expanded stream modes),
48
+ > and protocol-v2 event flows. Auth uses the `langgraph_sdk.Auth` pattern with
49
+ > `@auth.authenticate` and `@auth.on` handlers. Agent resources are exposed
50
+ > through `/assistants`, direct `/agents` aliases, Streamable HTTP MCP, and
51
+ > LangSmith-style A2A endpoints. This is workable OSS parity for the core
52
+ > agent-server surfaces, not full LangSmith Agent Server parity.
45
53
 
46
54
  Current release boundary:
47
55
 
48
- - Implemented: assistants, threads, runs, crons, streaming, Store API, MCP,
49
- and A2A
50
- - Explicitly not implemented: distributed runtime parity, assistant
51
- subgraph inspection, and assistant version-promotion workflows
56
+ - Implemented: assistants, threads, runs, crons, streaming (including subgraph
57
+ and expanded stream modes), Store API, MCP, and A2A
58
+ - Explicitly not implemented: distributed runtime parity and assistant
59
+ version-promotion workflows
52
60
 
53
61
  ## 🚀 Quickstart
54
62
 
@@ -62,19 +70,110 @@ Current release boundary:
62
70
  | Workflow | Use it when | Recommended command |
63
71
  | --- | --- | --- |
64
72
  | `langgraph dev` | You want the fastest mocked or in-memory local API loop for graph prototyping or Studio experimentation. | `langgraph dev` |
65
- | `agentseek-api dev` | You want the real AgentSeek API surface with your actual MySQL-family / SeekDB / OceanBase-style persistence, auth, and Docker/runtime behavior. | `uv run agentseek-api dev` |
73
+ | `agentseek-api dev` | You want the real AgentSeek API surface with your actual MySQL-family / seekdb / OceanBase-style persistence, auth, and Docker/runtime behavior. | `uv run agentseek-api dev` |
66
74
 
67
75
  Use `langgraph dev` when you do not need real backend validation. Use
68
76
  `agentseek-api dev` when you want to exercise the actual API contract this repo
69
77
  ships.
70
78
 
71
- ### 1. Install dependencies
79
+ ### 1. Install
80
+
81
+ **Install as a project dependency** (recommended):
82
+
83
+ ```bash
84
+ # In your project directory
85
+ uv add agentseek-api
86
+
87
+ # With embedded seekdb backend (no Docker needed)
88
+ uv add agentseek-api[embedded]
89
+ ```
90
+
91
+ **Global install** (if you prefer a system-wide command):
92
+
93
+ ```bash
94
+ pip install agentseek-api
95
+
96
+ # Then install your graph's dependencies into the same environment
97
+ pip install ...
98
+ ```
99
+
100
+ > [!WARNING]
101
+ > Global install only supports `pip install`. **Do NOT use `uv tool install`**.
102
+
103
+ **Install from source** (for contributors):
72
104
 
73
105
  ```bash
74
106
  uv sync
107
+
108
+ # With embedded seekdb backend
109
+ uv sync --extra embedded
75
110
  ```
76
111
 
77
- ### 2. Create a config file
112
+ ### 2. Configure seekdb embed as the default backend (recommended)
113
+
114
+ The fastest way to get a real backend running locally is **seekdb embed** — an
115
+ in-process SeekDB instance, no Docker or separate process required:
116
+
117
+ ```bash
118
+ SEEKDB_EMBED=true agentseek-api dev
119
+ ```
120
+
121
+ Data is stored in `~/.agentseek/seekdb_data` by default. Set `SEEKDB_EMBED_DIR`
122
+ to change the location.
123
+
124
+ <details>
125
+ <summary>Using a seekdb Docker container instead</summary>
126
+
127
+ ```bash
128
+ docker run -d --name seekdb-dev \
129
+ -p 2881:2881 -p 2886:2886 \
130
+ oceanbase/seekdb:latest
131
+ ```
132
+
133
+ Wait for the container to become healthy, then export:
134
+
135
+ ```bash
136
+ export OCEANBASE_HOST=127.0.0.1
137
+ export OCEANBASE_PORT=2881
138
+ export OCEANBASE_USER=root
139
+ export OCEANBASE_PASSWORD=
140
+ export OCEANBASE_DB_NAME=seekdb
141
+ ```
142
+
143
+ </details>
144
+
145
+ <details>
146
+ <summary>Using an OceanBase instance instead</summary>
147
+
148
+ Start an OceanBase-CE container in mini mode:
149
+
150
+ ```bash
151
+ docker run -d --name ob-dev \
152
+ -e MODE=mini \
153
+ -p 2881:2881 \
154
+ oceanbase/oceanbase-ce:latest
155
+ ```
156
+
157
+ OceanBase-CE in mini mode takes a few minutes to initialize. Wait for readiness,
158
+ then export:
159
+
160
+ ```bash
161
+ export OCEANBASE_HOST=127.0.0.1
162
+ export OCEANBASE_PORT=2881
163
+ export OCEANBASE_USER=root@test
164
+ export OCEANBASE_PASSWORD=
165
+ export OCEANBASE_DB_NAME=seekdb
166
+ ```
167
+
168
+ Create the database:
169
+
170
+ ```bash
171
+ mysql -h 127.0.0.1 -P 2881 -u root@test -e "CREATE DATABASE IF NOT EXISTS seekdb"
172
+ ```
173
+
174
+ </details>
175
+
176
+ ### 3. Create a config file
78
177
 
79
178
  `agentseek-api` looks for config in this order:
80
179
 
@@ -94,7 +193,7 @@ Minimal `langgraph.json`:
94
193
  }
95
194
  ```
96
195
 
97
- ### 3. Start the local API
196
+ ### 4. Start the local API
98
197
 
99
198
  ```bash
100
199
  uv run agentseek-api dev
@@ -106,19 +205,24 @@ Run with an explicit config when needed:
106
205
  uv run agentseek-api dev --config ./langgraph.json
107
206
  ```
108
207
 
109
- When the server is ready it prints the local API, docs, and Studio URLs:
208
+ When the server starts it prints the banner and local URLs:
110
209
 
111
210
  ```text
112
- > Ready!
113
- >
114
- > - API: http://localhost:2024
115
- >
116
- > - Docs: http://localhost:2024/docs
117
- >
118
- > - LangSmith Studio Web UI: https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024
211
+ Welcome to
212
+
213
+ ╔═╗┌─┐┌─┐┌┐┌┌┬┐╔═╗┌─┐┌─┐┬┌─
214
+ ╠═╣│ ┬├┤ │││ │ ╚═╗├┤ ├┤ ├┴┐
215
+ ╩└─┘└─┘┘└┘ ╚═╝└─┘└─┘┴ ┴
216
+
217
+ AgentSeek v0.1.0
218
+
219
+ - 🚀 API: http://localhost:2024
220
+ - 📚 Docs: http://localhost:2024/docs
221
+ - 🎨 Studio UI: https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024
222
+
119
223
  ```
120
224
 
121
- ### 4. Check that it is up
225
+ ### 5. Check that it is up
122
226
 
123
227
  ```bash
124
228
  curl http://127.0.0.1:2024/health
@@ -126,6 +230,37 @@ curl http://127.0.0.1:2024/info
126
230
  curl http://127.0.0.1:2024/openapi.json
127
231
  ```
128
232
 
233
+ ### 6. Test by using LangGraph SDK
234
+
235
+ ```python
236
+ from langgraph_sdk import get_client
237
+
238
+ client = get_client(url="http://localhost:2024/")
239
+
240
+ async def main():
241
+ # List all assistants
242
+ assistants = await client.assistants.search(graph_id="agent")
243
+
244
+ # We auto-create an assistant for each graph you register in config.
245
+ agent = assistants[0]
246
+
247
+ # Start a new thread
248
+ thread = await client.threads.create()
249
+
250
+ # Start a streaming run
251
+ input = {"messages": [{"role": "human", "content": "hello?"}]}
252
+ async for chunk in client.runs.stream(
253
+ thread["thread_id"], agent["assistant_id"], input=input
254
+ ):
255
+ print(chunk)
256
+
257
+
258
+ if __name__ == "__main__":
259
+ import asyncio
260
+
261
+ asyncio.run(main())
262
+ ```
263
+
129
264
  ## 🧰 CLI
130
265
 
131
266
  The package installs `agentseek-api` as the standalone executable. It does not
@@ -202,7 +337,8 @@ in-memory, or tunneled local workflows, prefer `langgraph dev`.
202
337
  - ⚙️ Standalone CLI plus embeddable subcommand registration for parent CLIs
203
338
  - 🔌 Manifest-driven graph loading through `agentseek.json`, `langgraph.json`,
204
339
  or `AGENTSEEK_GRAPHS`
205
- - 🌊 SSE streaming with `message_chunk` events
340
+ - 🌊 SSE streaming with subgraph support and expanded stream modes
341
+ (values, updates, messages, messages-tuple, events, tasks, checkpoints, custom, debug)
206
342
  - 🧰 MCP tool exposure for registered graphs over Streamable HTTP
207
343
  - 🤝 A2A assistant endpoints with agent-card discovery, streaming, and task lookup/cancel
208
344
  - 🧵 Thread, run, wait, cancel, history, state, and protocol-v2 stream flows
@@ -210,13 +346,14 @@ in-memory, or tunneled local workflows, prefer `langgraph dev`.
210
346
  - 🤖 Agent resources exposed through both `/assistants` and `/agents`
211
347
  - 🧑‍💻 Human-in-the-loop resume through
212
348
  `POST /threads/{thread_id}/runs/{run_id}/resume`
213
- - 🗄️ SeekDB / OceanBase-first checkpoint persistence via
349
+ - 🗄️ seekdb / OceanBase-first checkpoint persistence via
214
350
  `langchain-oceanbase`
215
351
  - 📦 Redis-backed durable execution with a dedicated worker process
216
352
  - ♻️ Persisted run and thread stream replay for resume-after-restart flows
217
- - 🔐 `noop` and custom auth backends
353
+ - 🔐 `langgraph_sdk.Auth`-based authentication with `@auth.authenticate` and
354
+ `@auth.on` handlers; noop fallback when unconfigured
218
355
  - 🐳 Dockerfile generation, image build, and local Docker runtime helpers
219
- - 🧪 Real backend CI coverage across MySQL, SeekDB, OceanBase, and Redis runtime paths
356
+ - 🧪 Real backend CI coverage across MySQL, seekdb, OceanBase, and Redis runtime paths
220
357
  - 🧪 Manual provider-backed streaming checks for live SSE proof
221
358
 
222
359
  ## 🎯 Compatibility Scope
@@ -224,12 +361,13 @@ in-memory, or tunneled local workflows, prefer `langgraph dev`.
224
361
  Treat AgentSeek API as a practical OSS-compatible core for Agent Server-style
225
362
  apps.
226
363
 
227
- - Shipped: assistant CRUD, thread/run lifecycle APIs, resumable SSE streams,
228
- cron APIs and scheduler dispatch, Store API, MCP, A2A, Redis-backed durable
229
- execution, and Docker/runtime helpers
364
+ - Shipped: assistant CRUD, thread/run lifecycle APIs, resumable SSE streams
365
+ with subgraph and expanded stream modes, cron APIs and scheduler dispatch,
366
+ Store API, MCP, A2A, Redis-backed durable execution, and Docker/runtime
367
+ helpers
230
368
  - Intentionally missing: distributed runtime orchestration parity, full
231
- assistant version management, assistant subgraph inspection, and full
232
- assistant helper parity beyond the core CRUD and schema flows
369
+ assistant version management, and full assistant helper parity beyond the
370
+ core CRUD and schema flows
233
371
 
234
372
  ## 🚚 Deployment Roles
235
373
 
@@ -271,7 +409,7 @@ Useful config fields:
271
409
  Endpoint-level LangGraph config keys such as `http` and `api_version` are
272
410
  tolerated by the CLI layer where possible. Store config is used by the HTTP
273
411
  Store API and the injected LangGraph `BaseStore` runtime for TTL and semantic
274
- search. This repo uses the published `langchain-oceanbase==0.5.0` package from
412
+ search. This repo uses the published `langchain-oceanbase==0.5.2` package from
275
413
  PyPI.
276
414
 
277
415
  Config-driven custom auth can live in `agentseek.json` or `langgraph.json`:
@@ -518,14 +656,12 @@ parent api build --config ./langgraph.json -t my-api:dev
518
656
  - `METADATA_DB_BACKEND=auto` normalizes drivers:
519
657
  - PostgreSQL: `postgresql+asyncpg://...`
520
658
  - OceanBase / MySQL: `mysql+aiomysql://...`
521
- - Checkpoint persistence defaults to OceanBase / SeekDB settings
522
- - Auth modes:
523
- - `AUTH_TYPE=noop`
524
- - `AUTH_TYPE=custom` with `AUTH_MODULE_PATH=module:backend_symbol`
525
- - `AUTH_TYPE=api_key` with `AUTH_API_KEYS=key=user_id[,key2=user2]`
526
- - `AUTH_TYPE=jwt` with `AUTH_JWT_SECRET`, optional
527
- `AUTH_JWT_ALGORITHM=HS256`, and `sub` as the user identity
659
+ - Checkpoint persistence defaults to OceanBase / seekdb settings
660
+ - Auth: configure via `agentseek.json` `"auth.path"` or `AUTH_MODULE_PATH` env var.
661
+ Uses `langgraph_sdk.Auth` with `@auth.authenticate` and `@auth.on` handlers.
662
+ If not set, all requests pass through as default_user (noop).
528
663
  - Assistant management, thread, and run endpoints enforce configured auth.
664
+ Resource-level filtering is supported via `@auth.on` handlers.
529
665
 
530
666
  ### Durable execution
531
667
 
@@ -540,6 +676,9 @@ parent api build --config ./langgraph.json -t my-api:dev
540
676
 
541
677
  - `examples/minimal_agentseek/agentseek.json`: minimal first-time config
542
678
  - `examples/assistant_config/`: assistant config/context/metadata starter
679
+ - `examples/auth/api_key_auth.py`: API key authentication using `langgraph_sdk.Auth`
680
+ - `examples/auth/bearer_token_auth.py`: bearer token authentication
681
+ - `examples/auth/jwt_auth.py`: JWT authentication with JWKS validation
543
682
  - `examples/auth/custom_backend.py`: custom auth backend
544
683
  - `examples/auth/jwt.md`: JWT auth environment contract
545
684
  - `examples/custom_routes/app.py`: mounting custom FastAPI routes around the
@@ -577,10 +716,10 @@ make test-redis-docker
577
716
  ```
578
717
 
579
718
  GitHub Actions also runs the Docker-backed backend matrix against MySQL,
580
- SeekDB, and OceanBase, including the dedicated `Redis Durable Execution`
719
+ seekdb, and OceanBase, including the dedicated `Redis Durable Execution`
581
720
  workflow jobs.
582
721
 
583
- For local embedded SeekDB smoke coverage, install the optional extra first:
722
+ For local embedded seekdb smoke coverage, install the optional extra first:
584
723
 
585
724
  ```bash
586
725
  uv sync --dev --extra embedded
@@ -616,7 +755,7 @@ The live-provider workflow is the canonical proof for real SSE
616
755
  `message_chunk` events from provider-backed graphs, and it now also covers
617
756
  provider-backed Store, MCP, and HITL flows in a tiered backend matrix:
618
757
 
619
- - SeekDB: full Streaming + Store + MCP + HITL acceptance
758
+ - seekdb: full Streaming + Store + MCP + HITL acceptance
620
759
  - OceanBase: full Streaming + Store + MCP + HITL acceptance
621
760
  - MySQL: Streaming + HITL compatibility
622
761
  - PostgreSQL metadata: Streaming + MCP compatibility while runtime
@@ -636,11 +775,66 @@ Use `ci.yml` for the normal development signal, and use
636
775
  `live-provider-streaming.yml` when you need explicit proof that real providers
637
776
  still satisfy the intended streaming, Store, MCP, and HITL contracts.
638
777
 
639
- ## 🗺️ Future Work
640
-
641
- 1. [x] Add Redis-backed task queue and worker handoff for durable run execution
642
- 2. [ ] Deepen Agent Protocol schema parity beyond the current alias coverage
643
- 3. [x] Add crons and scheduler support
644
- 4. [ ] Add distributed runtime parity beyond the current single-worker Redis flow
645
- 5. [ ] Add assistant version history and subgraph inspection support
646
- 6. [x] Add MCP and A2A endpoint parity
778
+ ## 🧱 Built On
779
+
780
+ AgentSeek API is glue around a small set of upstream projects and infra.
781
+
782
+ **Core pillars**
783
+
784
+ - [LangGraph](https://github.com/langchain-ai/langgraph) graph runtime that
785
+ executes registered assistants
786
+ - [langchain-oceanbase](https://pypi.org/project/langchain-oceanbase/) —
787
+ checkpointer and store implementation, the primary path for graph state
788
+ - [OceanBase](https://github.com/oceanbase/oceanbase) /
789
+ [seekdb](https://github.com/oceanbase/seekdb) — first-class supported
790
+ databases for checkpoint and store persistence
791
+ - [Redis](https://github.com/redis/redis) — run queue, worker lease, and
792
+ stream-event persistence when `EXECUTOR_BACKEND=redis`
793
+ - [FastAPI](https://github.com/tiangolo/fastapi) — HTTP framework for every
794
+ `/assistants`, `/threads`, `/runs`, `/mcp`, `/a2a` surface
795
+ - [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol/python-sdk)
796
+ — registered graphs exposed as MCP tools over Streamable HTTP at `/mcp`
797
+ - [A2A SDK](https://github.com/a2aproject/a2a-python) — assistant-to-assistant
798
+ RPC and agent-card discovery shape under `/a2a`
799
+
800
+ <details>
801
+ <summary>Full dependency list</summary>
802
+
803
+ **Runtime & API**
804
+ - [Uvicorn](https://github.com/encode/uvicorn) — ASGI server used by
805
+ `agentseek-api dev` and `serve`
806
+ - [Pydantic](https://github.com/pydantic/pydantic) and pydantic-settings —
807
+ request/response models and env-driven configuration
808
+ - [scalar-fastapi](https://github.com/scalar/scalar) — alternate API docs
809
+ rendering at `/scalar`
810
+
811
+ **LangChain / LangGraph stack**
812
+ - [LangChain Core](https://github.com/langchain-ai/langchain) and
813
+ [langgraph-sdk](https://github.com/langchain-ai/langgraph) — message,
814
+ tool, and SDK contracts the API speaks
815
+ - [langchain-openai](https://github.com/langchain-ai/langchain) /
816
+ [langchain-anthropic](https://github.com/langchain-ai/langchain) —
817
+ provider integrations used by sample graphs and live-provider CI
818
+ - [Agent Protocol](https://github.com/langchain-ai/agent-protocol) —
819
+ external compatibility reference for the assistants/threads/runs surface
820
+
821
+ **Database drivers**
822
+ - [SQLAlchemy](https://github.com/sqlalchemy/sqlalchemy) (async) plus
823
+ [asyncpg](https://github.com/MagicStack/asyncpg) (PostgreSQL),
824
+ [aiomysql](https://github.com/aio-libs/aiomysql) and
825
+ [PyMySQL](https://github.com/PyMySQL/PyMySQL) (MySQL family),
826
+ [aiosqlite](https://github.com/omnilib/aiosqlite) (SQLite)
827
+ - [redis-py](https://github.com/redis/redis-py) — async Redis client
828
+
829
+ **Interop**
830
+ - [LangSmith Studio](https://smith.langchain.com/) — external UI that
831
+ connects to the local API for graph inspection and runs
832
+
833
+ **Packaging & runtime delivery**
834
+ - [uv](https://github.com/astral-sh/uv) — dependency resolution and the
835
+ recommended way to run the CLI
836
+ - [Hatchling](https://github.com/pypa/hatch) — wheel build backend
837
+ - [Docker](https://www.docker.com/) — `dockerfile`, `build`, and `up`
838
+ commands generate and run a containerized API
839
+
840
+ </details>