agentseek-api 0.0.1__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 (205) hide show
  1. agentseek_api-0.0.1/.dockerignore +8 -0
  2. agentseek_api-0.0.1/.env.example +15 -0
  3. agentseek_api-0.0.1/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  4. agentseek_api-0.0.1/.github/workflows/ci.yml +387 -0
  5. agentseek_api-0.0.1/.github/workflows/live-provider-streaming.yml +160 -0
  6. agentseek_api-0.0.1/.github/workflows/release.yml +83 -0
  7. agentseek_api-0.0.1/.gitignore +9 -0
  8. agentseek_api-0.0.1/AGENTS.md +25 -0
  9. agentseek_api-0.0.1/CONTRIBUTING.md +47 -0
  10. agentseek_api-0.0.1/LICENSE +201 -0
  11. agentseek_api-0.0.1/Makefile +31 -0
  12. agentseek_api-0.0.1/PKG-INFO +646 -0
  13. agentseek_api-0.0.1/README.md +616 -0
  14. agentseek_api-0.0.1/docs/superpowers/plans/2026-05-23-mcp-endpoint-implementation.md +1010 -0
  15. agentseek_api-0.0.1/docs/superpowers/plans/2026-05-24-a2a-endpoint-implementation.md +942 -0
  16. agentseek_api-0.0.1/docs/superpowers/plans/2026-05-25-cron-support-implementation.md +625 -0
  17. agentseek_api-0.0.1/docs/superpowers/specs/2026-05-23-mcp-endpoint-design.md +389 -0
  18. agentseek_api-0.0.1/docs/superpowers/specs/2026-05-24-a2a-endpoint-design.md +365 -0
  19. agentseek_api-0.0.1/docs/superpowers/specs/2026-05-25-agent-server-release-hardening-design.md +240 -0
  20. agentseek_api-0.0.1/docs/superpowers/specs/2026-05-25-cron-support-design.md +370 -0
  21. agentseek_api-0.0.1/examples/README.md +122 -0
  22. agentseek_api-0.0.1/examples/__init__.py +1 -0
  23. agentseek_api-0.0.1/examples/assistant_config/agentseek.json +8 -0
  24. agentseek_api-0.0.1/examples/assistant_config/graph.py +17 -0
  25. agentseek_api-0.0.1/examples/auth/custom_backend.py +12 -0
  26. agentseek_api-0.0.1/examples/auth/jwt.md +5 -0
  27. agentseek_api-0.0.1/examples/custom_routes/app.py +15 -0
  28. agentseek_api-0.0.1/examples/docker_ci_auth/auth_backend.py +9 -0
  29. agentseek_api-0.0.1/examples/docker_ci_auth/manifest.json +29 -0
  30. agentseek_api-0.0.1/examples/external_graph/__init__.py +1 -0
  31. agentseek_api-0.0.1/examples/external_graph/graph.py +20 -0
  32. agentseek_api-0.0.1/examples/external_graph/manifest.json +7 -0
  33. agentseek_api-0.0.1/examples/external_graph/run.py +27 -0
  34. agentseek_api-0.0.1/examples/graphs/__init__.py +6 -0
  35. agentseek_api-0.0.1/examples/graphs/react_agent/__init__.py +5 -0
  36. agentseek_api-0.0.1/examples/graphs/react_agent/graph.py +80 -0
  37. agentseek_api-0.0.1/examples/graphs/store_memory/graph.py +54 -0
  38. agentseek_api-0.0.1/examples/graphs/stress_test/__init__.py +5 -0
  39. agentseek_api-0.0.1/examples/graphs/stress_test/graph.py +105 -0
  40. agentseek_api-0.0.1/examples/graphs/stress_tool_agent/__init__.py +1 -0
  41. agentseek_api-0.0.1/examples/graphs/stress_tool_agent/graph.py +128 -0
  42. agentseek_api-0.0.1/examples/graphs/subgraph_agent/__init__.py +5 -0
  43. agentseek_api-0.0.1/examples/graphs/subgraph_agent/graph.py +61 -0
  44. agentseek_api-0.0.1/examples/graphs/subgraph_hitl_agent/__init__.py +5 -0
  45. agentseek_api-0.0.1/examples/graphs/subgraph_hitl_agent/graph.py +53 -0
  46. agentseek_api-0.0.1/examples/live_provider_graphs/__init__.py +1 -0
  47. agentseek_api-0.0.1/examples/live_provider_graphs/graph.py +243 -0
  48. agentseek_api-0.0.1/examples/live_provider_graphs/manifest.json +37 -0
  49. agentseek_api-0.0.1/examples/minimal_agentseek/agentseek.json +5 -0
  50. agentseek_api-0.0.1/examples/minimal_agentseek/graph.py +14 -0
  51. agentseek_api-0.0.1/examples/run_sample_graphs.py +84 -0
  52. agentseek_api-0.0.1/examples/sample_graphs_manifest.json +15 -0
  53. agentseek_api-0.0.1/pyproject.toml +60 -0
  54. agentseek_api-0.0.1/scripts/build_live_provider_matrix.py +113 -0
  55. agentseek_api-0.0.1/scripts/seekdb_checkpoint_smoke.py +85 -0
  56. agentseek_api-0.0.1/scripts/seekdb_embed_launcher.py +99 -0
  57. agentseek_api-0.0.1/scripts/test-checkpoints.sh +5 -0
  58. agentseek_api-0.0.1/scripts/test-cli-dev-samples.sh +103 -0
  59. agentseek_api-0.0.1/scripts/test-cli-docker.sh +172 -0
  60. agentseek_api-0.0.1/scripts/test-live-provider.sh +286 -0
  61. agentseek_api-0.0.1/scripts/test-redis-runtime.sh +296 -0
  62. agentseek_api-0.0.1/scripts/test-seekdb.sh +291 -0
  63. agentseek_api-0.0.1/scripts/test_cli_config_autodiscovery.py +55 -0
  64. agentseek_api-0.0.1/scripts/test_cli_dev_studio_smoke.py +172 -0
  65. agentseek_api-0.0.1/scripts/test_cli_serve_smoke.py +149 -0
  66. agentseek_api-0.0.1/scripts/verify_docker_api.py +635 -0
  67. agentseek_api-0.0.1/src/agentseek_api/__init__.py +1 -0
  68. agentseek_api-0.0.1/src/agentseek_api/a2a_server.py +879 -0
  69. agentseek_api-0.0.1/src/agentseek_api/api/__init__.py +1 -0
  70. agentseek_api-0.0.1/src/agentseek_api/api/assistants.py +251 -0
  71. agentseek_api-0.0.1/src/agentseek_api/api/crons.py +88 -0
  72. agentseek_api-0.0.1/src/agentseek_api/api/runs.py +299 -0
  73. agentseek_api-0.0.1/src/agentseek_api/api/stateless_runs.py +80 -0
  74. agentseek_api-0.0.1/src/agentseek_api/api/store.py +111 -0
  75. agentseek_api-0.0.1/src/agentseek_api/api/threads.py +795 -0
  76. agentseek_api-0.0.1/src/agentseek_api/cli.py +1017 -0
  77. agentseek_api-0.0.1/src/agentseek_api/core/__init__.py +1 -0
  78. agentseek_api-0.0.1/src/agentseek_api/core/a2a_config.py +23 -0
  79. agentseek_api-0.0.1/src/agentseek_api/core/auth_deps.py +18 -0
  80. agentseek_api-0.0.1/src/agentseek_api/core/auth_middleware.py +301 -0
  81. agentseek_api-0.0.1/src/agentseek_api/core/config_file.py +30 -0
  82. agentseek_api-0.0.1/src/agentseek_api/core/database.py +245 -0
  83. agentseek_api-0.0.1/src/agentseek_api/core/mcp_config.py +23 -0
  84. agentseek_api-0.0.1/src/agentseek_api/core/oceanbase_checkpointer.py +50 -0
  85. agentseek_api-0.0.1/src/agentseek_api/core/orm.py +170 -0
  86. agentseek_api-0.0.1/src/agentseek_api/core/runtime_store.py +326 -0
  87. agentseek_api-0.0.1/src/agentseek_api/core/store_config.py +178 -0
  88. agentseek_api-0.0.1/src/agentseek_api/main.py +249 -0
  89. agentseek_api-0.0.1/src/agentseek_api/mcp_server.py +192 -0
  90. agentseek_api-0.0.1/src/agentseek_api/models/__init__.py +1 -0
  91. agentseek_api-0.0.1/src/agentseek_api/models/api.py +250 -0
  92. agentseek_api-0.0.1/src/agentseek_api/models/auth.py +6 -0
  93. agentseek_api-0.0.1/src/agentseek_api/models/protocol.py +18 -0
  94. agentseek_api-0.0.1/src/agentseek_api/scheduler.py +97 -0
  95. agentseek_api-0.0.1/src/agentseek_api/services/__init__.py +1 -0
  96. agentseek_api-0.0.1/src/agentseek_api/services/cron_models.py +57 -0
  97. agentseek_api-0.0.1/src/agentseek_api/services/cron_rrule.py +205 -0
  98. agentseek_api-0.0.1/src/agentseek_api/services/cron_scheduler.py +406 -0
  99. agentseek_api-0.0.1/src/agentseek_api/services/cron_service.py +183 -0
  100. agentseek_api-0.0.1/src/agentseek_api/services/cron_webhooks.py +195 -0
  101. agentseek_api-0.0.1/src/agentseek_api/services/executor.py +39 -0
  102. agentseek_api-0.0.1/src/agentseek_api/services/langgraph_service.py +370 -0
  103. agentseek_api-0.0.1/src/agentseek_api/services/redis_queue.py +121 -0
  104. agentseek_api-0.0.1/src/agentseek_api/services/run_executor.py +854 -0
  105. agentseek_api-0.0.1/src/agentseek_api/services/run_jobs.py +205 -0
  106. agentseek_api-0.0.1/src/agentseek_api/services/run_preparation.py +397 -0
  107. agentseek_api-0.0.1/src/agentseek_api/services/run_state.py +78 -0
  108. agentseek_api-0.0.1/src/agentseek_api/services/sample_graphs.py +187 -0
  109. agentseek_api-0.0.1/src/agentseek_api/services/stream_persistence.py +237 -0
  110. agentseek_api-0.0.1/src/agentseek_api/services/thread_checkpoint_store.py +232 -0
  111. agentseek_api-0.0.1/src/agentseek_api/services/thread_protocol.py +787 -0
  112. agentseek_api-0.0.1/src/agentseek_api/services/thread_service.py +23 -0
  113. agentseek_api-0.0.1/src/agentseek_api/settings.py +41 -0
  114. agentseek_api-0.0.1/src/agentseek_api/worker.py +103 -0
  115. agentseek_api-0.0.1/tests/__init__.py +1 -0
  116. agentseek_api-0.0.1/tests/conftest.py +59 -0
  117. agentseek_api-0.0.1/tests/e2e/__init__.py +1 -0
  118. agentseek_api-0.0.1/tests/e2e/conftest.py +153 -0
  119. agentseek_api-0.0.1/tests/e2e/e2e_inprocess_flow.py +116 -0
  120. agentseek_api-0.0.1/tests/e2e/e2e_live_http_flow.py +39 -0
  121. agentseek_api-0.0.1/tests/e2e/e2e_live_http_multi_graph.py +128 -0
  122. agentseek_api-0.0.1/tests/e2e/e2e_live_http_resume_flow.py +53 -0
  123. agentseek_api-0.0.1/tests/e2e/fixtures/langgraph.store-e2e.json +11 -0
  124. agentseek_api-0.0.1/tests/e2e/live_provider_helpers.py +84 -0
  125. agentseek_api-0.0.1/tests/e2e/test_a2a_live.py +155 -0
  126. agentseek_api-0.0.1/tests/e2e/test_langsmith_compat_live.py +879 -0
  127. agentseek_api-0.0.1/tests/e2e/test_live_provider_api.py +325 -0
  128. agentseek_api-0.0.1/tests/e2e/test_live_provider_mcp.py +38 -0
  129. agentseek_api-0.0.1/tests/e2e/test_mcp_live.py +99 -0
  130. agentseek_api-0.0.1/tests/e2e/test_real_api_flow.py +132 -0
  131. agentseek_api-0.0.1/tests/integration/test_a2a_endpoint.py +606 -0
  132. agentseek_api-0.0.1/tests/integration/test_agent_card.py +165 -0
  133. agentseek_api-0.0.1/tests/integration/test_agents_aliases.py +68 -0
  134. agentseek_api-0.0.1/tests/integration/test_assistants_compat.py +61 -0
  135. agentseek_api-0.0.1/tests/integration/test_assistants_crud.py +41 -0
  136. agentseek_api-0.0.1/tests/integration/test_assistants_ordering.py +14 -0
  137. agentseek_api-0.0.1/tests/integration/test_auth_route_enforcement.py +205 -0
  138. agentseek_api-0.0.1/tests/integration/test_auth_scope_matrix.py +32 -0
  139. agentseek_api-0.0.1/tests/integration/test_core_api_flow.py +35 -0
  140. agentseek_api-0.0.1/tests/integration/test_cron_api.py +223 -0
  141. agentseek_api-0.0.1/tests/integration/test_langsmith_compat_coverage.py +323 -0
  142. agentseek_api-0.0.1/tests/integration/test_langsmith_compat_extra.py +273 -0
  143. agentseek_api-0.0.1/tests/integration/test_live_provider_streaming.py +170 -0
  144. agentseek_api-0.0.1/tests/integration/test_mcp_endpoint.py +328 -0
  145. agentseek_api-0.0.1/tests/integration/test_metadata_db_config.py +104 -0
  146. agentseek_api-0.0.1/tests/integration/test_protocol_v2_streaming.py +315 -0
  147. agentseek_api-0.0.1/tests/integration/test_run_cancellation_async.py +82 -0
  148. agentseek_api-0.0.1/tests/integration/test_runs_compat.py +95 -0
  149. agentseek_api-0.0.1/tests/integration/test_runs_crud.py +81 -0
  150. agentseek_api-0.0.1/tests/integration/test_runs_ordering.py +29 -0
  151. agentseek_api-0.0.1/tests/integration/test_runs_resume.py +99 -0
  152. agentseek_api-0.0.1/tests/integration/test_runs_streaming.py +142 -0
  153. agentseek_api-0.0.1/tests/integration/test_runs_streaming_errors.py +40 -0
  154. agentseek_api-0.0.1/tests/integration/test_runs_validation.py +80 -0
  155. agentseek_api-0.0.1/tests/integration/test_runs_wait_and_get.py +46 -0
  156. agentseek_api-0.0.1/tests/integration/test_runs_wait_timeout.py +45 -0
  157. agentseek_api-0.0.1/tests/integration/test_scheduler_runtime.py +611 -0
  158. agentseek_api-0.0.1/tests/integration/test_stateless_runs_crud.py +73 -0
  159. agentseek_api-0.0.1/tests/integration/test_store_api.py +373 -0
  160. agentseek_api-0.0.1/tests/integration/test_stream_persistence.py +545 -0
  161. agentseek_api-0.0.1/tests/integration/test_system_endpoints.py +208 -0
  162. agentseek_api-0.0.1/tests/integration/test_threads_compat.py +141 -0
  163. agentseek_api-0.0.1/tests/integration/test_threads_crud.py +40 -0
  164. agentseek_api-0.0.1/tests/integration/test_threads_ordering.py +15 -0
  165. agentseek_api-0.0.1/tests/unit/test_a2a_config.py +89 -0
  166. agentseek_api-0.0.1/tests/unit/test_a2a_server.py +1067 -0
  167. agentseek_api-0.0.1/tests/unit/test_assistant_routes_unit.py +285 -0
  168. agentseek_api-0.0.1/tests/unit/test_auth.py +380 -0
  169. agentseek_api-0.0.1/tests/unit/test_auth_deps.py +32 -0
  170. agentseek_api-0.0.1/tests/unit/test_checkpoint_guards.py +8 -0
  171. agentseek_api-0.0.1/tests/unit/test_cli.py +1600 -0
  172. agentseek_api-0.0.1/tests/unit/test_cron_rrule.py +92 -0
  173. agentseek_api-0.0.1/tests/unit/test_cron_service.py +328 -0
  174. agentseek_api-0.0.1/tests/unit/test_cron_webhooks.py +248 -0
  175. agentseek_api-0.0.1/tests/unit/test_database_manager.py +261 -0
  176. agentseek_api-0.0.1/tests/unit/test_examples.py +41 -0
  177. agentseek_api-0.0.1/tests/unit/test_executor.py +72 -0
  178. agentseek_api-0.0.1/tests/unit/test_graph_manifest.py +417 -0
  179. agentseek_api-0.0.1/tests/unit/test_langgraph_service.py +62 -0
  180. agentseek_api-0.0.1/tests/unit/test_live_provider_e2e_config.py +29 -0
  181. agentseek_api-0.0.1/tests/unit/test_live_provider_graphs.py +118 -0
  182. agentseek_api-0.0.1/tests/unit/test_live_provider_matrix.py +96 -0
  183. agentseek_api-0.0.1/tests/unit/test_mcp_config.py +114 -0
  184. agentseek_api-0.0.1/tests/unit/test_mcp_server.py +47 -0
  185. agentseek_api-0.0.1/tests/unit/test_oceanbase_checkpointer.py +69 -0
  186. agentseek_api-0.0.1/tests/unit/test_openapi_auth_config.py +48 -0
  187. agentseek_api-0.0.1/tests/unit/test_redis_queue.py +192 -0
  188. agentseek_api-0.0.1/tests/unit/test_run_executor.py +836 -0
  189. agentseek_api-0.0.1/tests/unit/test_run_jobs.py +159 -0
  190. agentseek_api-0.0.1/tests/unit/test_run_preparation.py +553 -0
  191. agentseek_api-0.0.1/tests/unit/test_run_state.py +99 -0
  192. agentseek_api-0.0.1/tests/unit/test_runtime_store.py +275 -0
  193. agentseek_api-0.0.1/tests/unit/test_sample_graphs.py +118 -0
  194. agentseek_api-0.0.1/tests/unit/test_scheduler.py +197 -0
  195. agentseek_api-0.0.1/tests/unit/test_scheduler_process.py +169 -0
  196. agentseek_api-0.0.1/tests/unit/test_seekdb_checkpoint_smoke.py +36 -0
  197. agentseek_api-0.0.1/tests/unit/test_seekdb_embed_launcher.py +112 -0
  198. agentseek_api-0.0.1/tests/unit/test_store_config.py +109 -0
  199. agentseek_api-0.0.1/tests/unit/test_stream_persistence_helpers.py +198 -0
  200. agentseek_api-0.0.1/tests/unit/test_thread_checkpoint_store.py +98 -0
  201. agentseek_api-0.0.1/tests/unit/test_thread_protocol.py +272 -0
  202. agentseek_api-0.0.1/tests/unit/test_thread_routes_unit.py +395 -0
  203. agentseek_api-0.0.1/tests/unit/test_thread_service.py +34 -0
  204. agentseek_api-0.0.1/tests/unit/test_worker.py +155 -0
  205. agentseek_api-0.0.1/uv.lock +3647 -0
@@ -0,0 +1,8 @@
1
+ .agentseek
2
+ .git
3
+ .github
4
+ .pytest_cache
5
+ .tmp
6
+ .venv
7
+ __pycache__
8
+ *.pyc
@@ -0,0 +1,15 @@
1
+ METADATA_DB_URL=
2
+ METADATA_DB_BACKEND=auto
3
+ SEEKDB_URL=mysql+aiomysql://root%40test:@localhost:2881/seekdb
4
+ AGENTSEEK_GRAPHS=
5
+ AUTH_TYPE=noop
6
+ # AUTH_TYPE values:
7
+ # - noop: always use default_user
8
+ # - custom: load backend from AUTH_MODULE_PATH
9
+ AUTH_MODULE_PATH=
10
+
11
+ OCEANBASE_HOST=localhost
12
+ OCEANBASE_PORT=2881
13
+ OCEANBASE_USER=root@test
14
+ OCEANBASE_PASSWORD=
15
+ OCEANBASE_DB_NAME=seekdb
@@ -0,0 +1,13 @@
1
+ ## Summary
2
+
3
+ -
4
+
5
+ ## Test Plan
6
+
7
+ - [ ] `uv run pytest -q`
8
+
9
+ ## Target Branch Check
10
+
11
+ - [ ] `feature/*` PRs target `develop`
12
+ - [ ] `release/*` PRs target `main`
13
+ - [ ] `hotfix/*` PRs target `main`
@@ -0,0 +1,387 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ - develop
8
+ - "feature/**"
9
+ - "release/**"
10
+ - "hotfix/**"
11
+ paths-ignore:
12
+ - "**/*.md"
13
+ pull_request:
14
+ branches:
15
+ - develop
16
+ - main
17
+ paths-ignore:
18
+ - "**/*.md"
19
+ workflow_dispatch:
20
+
21
+ permissions:
22
+ contents: read
23
+
24
+ jobs:
25
+ fast-tests:
26
+ name: Fast Tests
27
+ runs-on: ubuntu-latest
28
+ timeout-minutes: 15
29
+ steps:
30
+ - name: Checkout
31
+ uses: actions/checkout@v4
32
+
33
+ - name: Setup UV
34
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
35
+ with:
36
+ enable-cache: true
37
+ cache-python: true
38
+ python-version: "3.12"
39
+
40
+ - name: Sync dependencies
41
+ run: uv sync --dev
42
+
43
+ - name: Coverage-backed unit + integration suite
44
+ run: make test-cov
45
+
46
+ cli-compatibility:
47
+ name: CLI Compatibility (${{ matrix.os }})
48
+ runs-on: ${{ matrix.os }}
49
+ timeout-minutes: 15
50
+ strategy:
51
+ fail-fast: false
52
+ matrix:
53
+ os:
54
+ - ubuntu-latest
55
+ - macos-latest
56
+ - windows-latest
57
+ steps:
58
+ - name: Checkout
59
+ uses: actions/checkout@v4
60
+
61
+ - name: Setup UV
62
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
63
+ with:
64
+ enable-cache: true
65
+ cache-python: true
66
+ python-version: "3.12"
67
+
68
+ - name: Sync dependencies
69
+ run: uv sync --dev
70
+
71
+ - name: Installed CLI reports version
72
+ run: uv run agentseek-api version
73
+
74
+ - name: CLI auto-discovers agentseek.json for dockerfile
75
+ run: uv run python scripts/test_cli_config_autodiscovery.py
76
+
77
+ - name: Dockerfile command renders a runnable config
78
+ run: >-
79
+ uv run python -c
80
+ "from pathlib import Path; import subprocess; out = Path('.tmp/agentseek.Dockerfile'); out.parent.mkdir(exist_ok=True); subprocess.run(['uv', 'run', 'agentseek-api', 'dockerfile', '--config', 'examples/external_graph/manifest.json', str(out)], check=True); text = out.read_text(encoding='utf-8'); assert 'ENV PYTHONPATH=/deps/agent' in text; assert 'ENV AGENTSEEK_GRAPHS=/deps/agent/examples/external_graph/manifest.json' in text"
81
+
82
+ - name: Sync embedded SeekDB extra for serve smoke
83
+ if: runner.os == 'Linux' || (runner.os == 'macOS' && runner.arch == 'ARM64')
84
+ run: uv sync --dev --extra embedded
85
+
86
+ - name: CLI serve smoke boots a live API
87
+ if: runner.os == 'Linux' || (runner.os == 'macOS' && runner.arch == 'ARM64')
88
+ run: uv run python scripts/test_cli_serve_smoke.py
89
+
90
+ - name: CLI config and Docker planning tests
91
+ run: uv run pytest tests/unit/test_cli.py tests/unit/test_graph_manifest.py -q
92
+
93
+ cli-docker-runtime:
94
+ name: CLI Docker Runtime
95
+ runs-on: ubuntu-latest
96
+ timeout-minutes: 30
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 dependencies
109
+ run: uv sync --dev
110
+
111
+ - name: CLI Docker smoke
112
+ run: make test-cli-docker
113
+
114
+ sample-graphs:
115
+ name: Sample Graphs
116
+ runs-on: ubuntu-latest
117
+ timeout-minutes: 15
118
+ steps:
119
+ - name: Checkout
120
+ uses: actions/checkout@v4
121
+
122
+ - name: Setup UV
123
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
124
+ with:
125
+ enable-cache: true
126
+ cache-python: true
127
+ python-version: "3.12"
128
+
129
+ - name: Sync dependencies
130
+ run: uv sync --dev
131
+
132
+ - name: In-process sample graph validation
133
+ run: make test-samples
134
+
135
+ cli-dev-sample-graphs:
136
+ name: CLI Dev Sample Graphs
137
+ runs-on: ubuntu-latest
138
+ timeout-minutes: 20
139
+ services:
140
+ mysql:
141
+ image: mysql:8.4
142
+ env:
143
+ MYSQL_ROOT_PASSWORD: root
144
+ MYSQL_DATABASE: seekdb
145
+ ports:
146
+ - 3306:3306
147
+ options: >-
148
+ --health-cmd="mysqladmin ping -h 127.0.0.1 -proot --silent"
149
+ --health-interval=10s
150
+ --health-timeout=5s
151
+ --health-retries=12
152
+ steps:
153
+ - name: Checkout
154
+ uses: actions/checkout@v4
155
+
156
+ - name: Setup UV
157
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
158
+ with:
159
+ enable-cache: true
160
+ cache-python: true
161
+ python-version: "3.12"
162
+
163
+ - name: Sync dependencies
164
+ run: uv sync --dev
165
+
166
+ - name: CLI dev smoke covers docs and Studio-style localhost auth
167
+ env:
168
+ OCEANBASE_HOST: 127.0.0.1
169
+ OCEANBASE_PORT: "3306"
170
+ OCEANBASE_USER: root
171
+ OCEANBASE_PASSWORD: root
172
+ OCEANBASE_DB_NAME: seekdb
173
+ run: uv run python scripts/test_cli_dev_studio_smoke.py
174
+
175
+ - name: Run sample graphs through agentseek-api dev
176
+ env:
177
+ MYSQL_HOST: 127.0.0.1
178
+ MYSQL_PORT: "3306"
179
+ MYSQL_USER: root
180
+ MYSQL_PASSWORD: root
181
+ MYSQL_DB: seekdb
182
+ run: make test-cli-dev-samples
183
+
184
+ mysql-family-checkpoint-validation:
185
+ name: MySQL-Family Checkpoint Validation
186
+ runs-on: ubuntu-latest
187
+ timeout-minutes: 30
188
+ if: >-
189
+ github.event_name == 'pull_request' ||
190
+ github.ref_name == 'develop' ||
191
+ github.ref_name == 'main' ||
192
+ startsWith(github.ref_name, 'release/') ||
193
+ startsWith(github.ref_name, 'hotfix/')
194
+ strategy:
195
+ fail-fast: false
196
+ matrix:
197
+ backend:
198
+ - name: seekdb
199
+ docker_backend: seekdb
200
+ image: oceanbase/seekdb:latest
201
+ user: root
202
+ password: ""
203
+ port: "2881"
204
+ db_name: seekdb
205
+ url: mysql+aiomysql://root:@127.0.0.1:2881/seekdb
206
+ - name: oceanbase
207
+ docker_backend: oceanbase
208
+ image: oceanbase/oceanbase-ce:latest
209
+ mode: slim
210
+ user: root@test
211
+ password: ""
212
+ port: "2881"
213
+ db_name: seekdb
214
+ url: mysql+aiomysql://root%40test:@127.0.0.1:2881/seekdb
215
+ - name: mysql
216
+ docker_backend: mysql
217
+ image: mysql:8.4
218
+ user: root
219
+ password: root
220
+ port: "3306"
221
+ db_name: seekdb
222
+ url: mysql+aiomysql://root:root@127.0.0.1:3306/seekdb
223
+ steps:
224
+ - name: Checkout
225
+ uses: actions/checkout@v4
226
+
227
+ - name: Setup UV
228
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
229
+ with:
230
+ enable-cache: true
231
+ cache-python: true
232
+ python-version: "3.12"
233
+
234
+ - name: Sync dependencies
235
+ run: uv sync --dev
236
+
237
+ - name: MySQL-family checkpoint validation (${{ matrix.backend.name }})
238
+ env:
239
+ SEEKDB_MODE: docker
240
+ SEEKDB_DOCKER_BACKEND: ${{ matrix.backend.docker_backend }}
241
+ SEEKDB_DOCKER_IMAGE: ${{ matrix.backend.image }}
242
+ OCEANBASE_DOCKER_MODE: ${{ matrix.backend.mode || '' }}
243
+ OCEANBASE_USER: ${{ matrix.backend.user }}
244
+ OCEANBASE_PASSWORD: ${{ matrix.backend.password }}
245
+ OCEANBASE_PORT: ${{ matrix.backend.port }}
246
+ OCEANBASE_DB_NAME: ${{ matrix.backend.db_name }}
247
+ SEEKDB_URL: ${{ matrix.backend.url }}
248
+ run: make test-checkpoints
249
+
250
+ redis-durable-execution:
251
+ name: Redis Durable Execution (${{ matrix.backend.name }})
252
+ runs-on: ubuntu-latest
253
+ timeout-minutes: 40
254
+ if: >-
255
+ github.event_name == 'pull_request' ||
256
+ github.ref_name == 'develop' ||
257
+ github.ref_name == 'main' ||
258
+ startsWith(github.ref_name, 'release/') ||
259
+ startsWith(github.ref_name, 'hotfix/')
260
+ strategy:
261
+ fail-fast: false
262
+ matrix:
263
+ backend:
264
+ - name: seekdb
265
+ docker_backend: seekdb
266
+ image: oceanbase/seekdb:latest
267
+ user: root
268
+ password: ""
269
+ port: "2881"
270
+ db_name: seekdb
271
+ - name: oceanbase
272
+ docker_backend: oceanbase
273
+ image: oceanbase/oceanbase-ce:latest
274
+ mode: slim
275
+ user: root@test
276
+ password: ""
277
+ port: "2881"
278
+ db_name: seekdb
279
+ - name: mysql
280
+ docker_backend: mysql
281
+ image: mysql:8.4
282
+ user: root
283
+ password: root
284
+ port: "3306"
285
+ db_name: seekdb
286
+ steps:
287
+ - name: Checkout
288
+ uses: actions/checkout@v4
289
+
290
+ - name: Setup UV
291
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
292
+ with:
293
+ enable-cache: true
294
+ cache-python: true
295
+ python-version: "3.12"
296
+
297
+ - name: Sync dependencies
298
+ run: uv sync --dev
299
+
300
+ - name: Redis durable execution stack (${{ matrix.backend.name }})
301
+ env:
302
+ SEEKDB_DOCKER_BACKEND: ${{ matrix.backend.docker_backend }}
303
+ SEEKDB_DOCKER_IMAGE: ${{ matrix.backend.image }}
304
+ OCEANBASE_DOCKER_MODE: ${{ matrix.backend.mode || '' }}
305
+ OCEANBASE_USER: ${{ matrix.backend.user }}
306
+ OCEANBASE_PASSWORD: ${{ matrix.backend.password }}
307
+ OCEANBASE_PORT: ${{ matrix.backend.port }}
308
+ OCEANBASE_DB_NAME: ${{ matrix.backend.db_name }}
309
+ run: make test-redis-docker
310
+
311
+ pgsql-metadata-checkpoint-validation:
312
+ name: PostgreSQL Metadata + Checkpoint Validation
313
+ runs-on: ubuntu-latest
314
+ timeout-minutes: 30
315
+ if: >-
316
+ github.event_name == 'pull_request' ||
317
+ github.ref_name == 'develop' ||
318
+ github.ref_name == 'main' ||
319
+ startsWith(github.ref_name, 'release/') ||
320
+ startsWith(github.ref_name, 'hotfix/')
321
+ services:
322
+ postgres:
323
+ image: postgres:16
324
+ env:
325
+ POSTGRES_USER: postgres
326
+ POSTGRES_PASSWORD: postgres
327
+ POSTGRES_DB: agentseek
328
+ ports:
329
+ - 5432:5432
330
+ options: >-
331
+ --health-cmd "pg_isready -U postgres -d agentseek"
332
+ --health-interval 10s
333
+ --health-timeout 5s
334
+ --health-retries 6
335
+ strategy:
336
+ fail-fast: false
337
+ matrix:
338
+ backend:
339
+ - name: seekdb
340
+ docker_backend: seekdb
341
+ image: oceanbase/seekdb:latest
342
+ user: root
343
+ password: ""
344
+ port: "2881"
345
+ db_name: seekdb
346
+ - name: oceanbase
347
+ docker_backend: oceanbase
348
+ image: oceanbase/oceanbase-ce:latest
349
+ mode: slim
350
+ user: root@test
351
+ password: ""
352
+ port: "2881"
353
+ db_name: seekdb
354
+ - name: mysql
355
+ docker_backend: mysql
356
+ image: mysql:8.4
357
+ user: root
358
+ password: root
359
+ port: "3306"
360
+ db_name: seekdb
361
+ steps:
362
+ - name: Checkout
363
+ uses: actions/checkout@v4
364
+
365
+ - name: Setup UV
366
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
367
+ with:
368
+ enable-cache: true
369
+ cache-python: true
370
+ python-version: "3.12"
371
+
372
+ - name: Sync dependencies
373
+ run: uv sync --dev
374
+
375
+ - name: PostgreSQL metadata with checkpoint validation (${{ matrix.backend.name }})
376
+ env:
377
+ SEEKDB_MODE: docker
378
+ SEEKDB_DOCKER_BACKEND: ${{ matrix.backend.docker_backend }}
379
+ SEEKDB_DOCKER_IMAGE: ${{ matrix.backend.image }}
380
+ OCEANBASE_DOCKER_MODE: ${{ matrix.backend.mode || '' }}
381
+ OCEANBASE_USER: ${{ matrix.backend.user }}
382
+ OCEANBASE_PASSWORD: ${{ matrix.backend.password }}
383
+ OCEANBASE_PORT: ${{ matrix.backend.port }}
384
+ OCEANBASE_DB_NAME: ${{ matrix.backend.db_name }}
385
+ METADATA_DB_URL: postgresql://postgres:postgres@127.0.0.1:5432/agentseek
386
+ METADATA_DB_BACKEND: postgresql
387
+ run: make test-checkpoints
@@ -0,0 +1,160 @@
1
+ name: Live Provider Streaming
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ run_openai_compatible:
7
+ description: Run the OpenAI-compatible live provider suite
8
+ required: false
9
+ default: true
10
+ type: boolean
11
+ openai_model:
12
+ description: Optional override for the OpenAI-compatible model name
13
+ required: false
14
+ type: string
15
+ openai_base_url:
16
+ description: Optional override for the OpenAI-compatible base URL
17
+ required: false
18
+ type: string
19
+ run_anthropic_compatible:
20
+ description: Run the Anthropic-compatible live provider suite
21
+ required: false
22
+ default: true
23
+ type: boolean
24
+ anthropic_model:
25
+ description: Optional override for the Anthropic-compatible model name
26
+ required: false
27
+ type: string
28
+ anthropic_base_url:
29
+ description: Optional override for the Anthropic-compatible base URL
30
+ required: false
31
+ type: string
32
+ backend_tier:
33
+ description: Backend tier to run, or all four tiers
34
+ required: false
35
+ default: all
36
+ type: choice
37
+ options:
38
+ - all
39
+ - seekdb
40
+ - oceanbase
41
+ - mysql
42
+ - postgresql-metadata
43
+ schedule:
44
+ - cron: "0 3 * * *"
45
+
46
+ permissions:
47
+ contents: read
48
+
49
+ jobs:
50
+ prepare-matrix:
51
+ name: Prepare Matrix
52
+ runs-on: ubuntu-latest
53
+ outputs:
54
+ matrix: ${{ steps.matrix.outputs.matrix }}
55
+ steps:
56
+ - name: Checkout
57
+ uses: actions/checkout@v4
58
+
59
+ - name: Build selected matrix
60
+ id: matrix
61
+ env:
62
+ BACKEND_TIER_INPUT: ${{ inputs.backend_tier || 'all' }}
63
+ RUN_OPENAI_COMPATIBLE: ${{ inputs.run_openai_compatible }}
64
+ RUN_ANTHROPIC_COMPATIBLE: ${{ inputs.run_anthropic_compatible }}
65
+ run: python3 scripts/build_live_provider_matrix.py
66
+
67
+ live-provider-suite:
68
+ name: ${{ matrix.provider_label }} / ${{ matrix.backend_name }}
69
+ needs: prepare-matrix
70
+ runs-on: ubuntu-latest
71
+ timeout-minutes: 75
72
+ strategy:
73
+ fail-fast: false
74
+ matrix: ${{ fromJson(needs.prepare-matrix.outputs.matrix) }}
75
+ services:
76
+ postgres:
77
+ image: postgres:16
78
+ env:
79
+ POSTGRES_USER: postgres
80
+ POSTGRES_PASSWORD: postgres
81
+ POSTGRES_DB: agentseek
82
+ ports:
83
+ - 5432:5432
84
+ options: >-
85
+ --health-cmd "pg_isready -U postgres -d agentseek"
86
+ --health-interval 10s
87
+ --health-timeout 5s
88
+ --health-retries 12
89
+ env:
90
+ LIVE_PROVIDER_KIND: ${{ matrix.provider_kind }}
91
+ LIVE_PROVIDER_REQUIRED: "1"
92
+ LIVE_OPENAI_COMPAT_MODEL: ${{ matrix.provider_kind == 'openai' && (inputs.openai_model != '' && inputs.openai_model || vars.OPENAI_COMPAT_MODEL) || '' }}
93
+ LIVE_OPENAI_COMPAT_BASE_URL: ${{ matrix.provider_kind == 'openai' && (inputs.openai_base_url != '' && inputs.openai_base_url || vars.OPENAI_COMPAT_BASE_URL) || '' }}
94
+ LIVE_OPENAI_COMPAT_API_KEY: ${{ matrix.provider_kind == 'openai' && secrets.OPENAI_COMPAT_API_KEY || '' }}
95
+ LIVE_ANTHROPIC_COMPAT_MODEL: ${{ matrix.provider_kind == 'anthropic' && (inputs.anthropic_model != '' && inputs.anthropic_model || vars.ANTHROPIC_COMPAT_MODEL) || '' }}
96
+ LIVE_ANTHROPIC_COMPAT_BASE_URL: ${{ matrix.provider_kind == 'anthropic' && (inputs.anthropic_base_url != '' && inputs.anthropic_base_url || vars.ANTHROPIC_COMPAT_BASE_URL) || '' }}
97
+ LIVE_ANTHROPIC_COMPAT_API_KEY: ${{ matrix.provider_kind == 'anthropic' && secrets.ANTHROPIC_COMPAT_API_KEY || '' }}
98
+ LIVE_PROVIDER_MATRIX_BACKEND: ${{ matrix.backend_name }}
99
+ SEEKDB_MODE: docker
100
+ SEEKDB_DOCKER_BACKEND: ${{ matrix.backend_name == 'oceanbase' && 'oceanbase' || matrix.backend_name == 'mysql' && 'mysql' || 'seekdb' }}
101
+ SEEKDB_DOCKER_IMAGE: ${{ matrix.backend_name == 'oceanbase' && 'oceanbase/oceanbase-ce:latest' || matrix.backend_name == 'mysql' && 'mysql:8.4' || 'oceanbase/seekdb:latest' }}
102
+ OCEANBASE_DOCKER_MODE: ${{ matrix.backend_name == 'oceanbase' && 'slim' || '' }}
103
+ OCEANBASE_HOST: 127.0.0.1
104
+ OCEANBASE_USER: ${{ matrix.backend_name == 'oceanbase' && 'root@test' || 'root' }}
105
+ OCEANBASE_PASSWORD: ${{ matrix.backend_name == 'mysql' && 'root' || '' }}
106
+ OCEANBASE_PORT: ${{ matrix.backend_name == 'mysql' && '3306' || '2881' }}
107
+ OCEANBASE_DB_NAME: seekdb
108
+ SEEKDB_URL: ${{ matrix.backend_name == 'oceanbase' && 'mysql+aiomysql://root%40test:@127.0.0.1:2881/seekdb' || matrix.backend_name == 'mysql' && 'mysql+aiomysql://root:root@127.0.0.1:3306/seekdb' || 'mysql+aiomysql://root:@127.0.0.1:2881/seekdb' }}
109
+ METADATA_DB_URL: ${{ matrix.backend_name == 'postgresql-metadata' && 'postgresql://postgres:postgres@127.0.0.1:5432/agentseek' || '' }}
110
+ METADATA_DB_BACKEND: ${{ matrix.backend_name == 'postgresql-metadata' && 'postgresql' || '' }}
111
+ LIVE_PROVIDER_CAPABILITIES: ${{ matrix.backend_name == 'mysql' && 'streaming,hitl' || matrix.backend_name == 'postgresql-metadata' && 'streaming,mcp' || 'streaming,store,mcp,hitl' }}
112
+ steps:
113
+ - name: Checkout
114
+ uses: actions/checkout@v4
115
+
116
+ - name: Setup UV
117
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
118
+ with:
119
+ enable-cache: true
120
+ cache-python: true
121
+ python-version: "3.12"
122
+
123
+ - name: Validate provider configuration
124
+ shell: bash
125
+ run: |
126
+ missing=()
127
+ if [[ "${LIVE_PROVIDER_KIND}" == "openai" ]]; then
128
+ for name in LIVE_PROVIDER_KIND LIVE_OPENAI_COMPAT_MODEL LIVE_OPENAI_COMPAT_BASE_URL LIVE_OPENAI_COMPAT_API_KEY; do
129
+ if [[ -z "${!name:-}" ]]; then
130
+ missing+=("$name")
131
+ fi
132
+ done
133
+ else
134
+ for name in LIVE_PROVIDER_KIND LIVE_ANTHROPIC_COMPAT_MODEL LIVE_ANTHROPIC_COMPAT_BASE_URL LIVE_ANTHROPIC_COMPAT_API_KEY; do
135
+ if [[ -z "${!name:-}" ]]; then
136
+ missing+=("$name")
137
+ fi
138
+ done
139
+ fi
140
+ if [[ ${#missing[@]} -gt 0 ]]; then
141
+ echo "::error::Missing live provider workflow config: ${missing[*]}"
142
+ exit 1
143
+ fi
144
+
145
+ - name: Sync dependencies
146
+ run: uv sync --dev
147
+
148
+ - name: Run live provider suite
149
+ run: bash ./scripts/test-live-provider.sh
150
+
151
+ - name: Upload live provider logs
152
+ if: always()
153
+ uses: actions/upload-artifact@v4
154
+ with:
155
+ name: live-provider-logs-${{ matrix.provider_kind }}-${{ matrix.backend_name }}
156
+ if-no-files-found: ignore
157
+ path: |
158
+ .tmp/e2e-server.log
159
+ /tmp/agentseek-live-provider-docker.log
160
+ /tmp/agentseek-live-provider-embed.log
@@ -0,0 +1,83 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+
14
+ - name: Set up Python
15
+ uses: actions/setup-python@v5
16
+ with:
17
+ python-version: "3.12"
18
+
19
+ - name: Install build tooling
20
+ run: |
21
+ python -m pip install --upgrade pip
22
+ pip install build twine
23
+
24
+ - name: Build sdist and wheel
25
+ run: python -m build
26
+
27
+ - name: Check artifacts
28
+ run: twine check dist/*
29
+
30
+ - name: Upload artifacts
31
+ uses: actions/upload-artifact@v4
32
+ with:
33
+ name: dist
34
+ path: dist/
35
+
36
+ publish-pypi:
37
+ needs: build
38
+ runs-on: ubuntu-latest
39
+ environment:
40
+ name: pypi
41
+ url: https://pypi.org/p/agentseek-api
42
+ permissions:
43
+ id-token: write
44
+ steps:
45
+ - name: Download artifacts
46
+ uses: actions/download-artifact@v4
47
+ with:
48
+ name: dist
49
+ path: dist/
50
+
51
+ - name: Publish to PyPI
52
+ uses: pypa/gh-action-pypi-publish@release/v1
53
+
54
+ github-release:
55
+ needs: build
56
+ runs-on: ubuntu-latest
57
+ permissions:
58
+ contents: write
59
+ steps:
60
+ - uses: actions/checkout@v4
61
+
62
+ - name: Download artifacts
63
+ uses: actions/download-artifact@v4
64
+ with:
65
+ name: dist
66
+ path: dist/
67
+
68
+ - name: Attach artifacts to GitHub Release
69
+ env:
70
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
71
+ run: |
72
+ if gh release view "${GITHUB_REF_NAME}" >/dev/null 2>&1; then
73
+ echo "Release ${GITHUB_REF_NAME} already exists (manual or prior run); uploading dist/*."
74
+ gh release upload "${GITHUB_REF_NAME}" dist/* --clobber
75
+ else
76
+ echo "No release found for ${GITHUB_REF_NAME}; creating one from README.md."
77
+ NOTES_FILE="$(mktemp)"
78
+ echo "AgentSeek API release ${GITHUB_REF_NAME}. See [README.md](README.md) for usage." > "${NOTES_FILE}"
79
+ gh release create "${GITHUB_REF_NAME}" \
80
+ --title "${GITHUB_REF_NAME}" \
81
+ --notes-file "${NOTES_FILE}" \
82
+ dist/*
83
+ fi
@@ -0,0 +1,9 @@
1
+ .DS_Store
2
+ .coverage
3
+ .agentseek/
4
+ .pytest_cache/
5
+ .tmp/
6
+ .venv/
7
+ __pycache__/
8
+ *.pyc
9
+ *.cover