agentseek-api 0.2.3__tar.gz → 0.3.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 (271) hide show
  1. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/.env.example +1 -1
  2. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/.github/workflows/ci.yml +35 -8
  3. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/CHANGELOG.md +57 -0
  4. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/CONTRIBUTING.md +3 -3
  5. agentseek_api-0.2.3/README.md → agentseek_api-0.3.1/PKG-INFO +81 -5
  6. agentseek_api-0.2.3/PKG-INFO → agentseek_api-0.3.1/README.md +48 -37
  7. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/README.zh-CN.md +42 -5
  8. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/README.md +2 -2
  9. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/run_sample_graphs.py +1 -1
  10. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/pyproject.toml +10 -5
  11. agentseek_api-0.3.1/scripts/container_image_archive.py +296 -0
  12. agentseek_api-0.3.1/scripts/seekdb_embed_launcher.py +126 -0
  13. agentseek_api-0.3.1/scripts/test-cli-docker.sh +376 -0
  14. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/test-live-provider.sh +1 -1
  15. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/test-redis-runtime.sh +48 -3
  16. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/test-seekdb.sh +2 -2
  17. agentseek_api-0.3.1/scripts/test_cli_config_autodiscovery.py +123 -0
  18. agentseek_api-0.3.1/scripts/test_container_env_boundary.py +920 -0
  19. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/test_minimum_cli_dependencies.py +15 -0
  20. agentseek_api-0.3.1/scripts/value_free_log_tail.py +46 -0
  21. agentseek_api-0.3.1/src/agentseek_api/__init__.py +1 -0
  22. agentseek_api-0.3.1/src/agentseek_api/cli.py +1722 -0
  23. agentseek_api-0.3.1/src/agentseek_api/container_build.py +2831 -0
  24. agentseek_api-0.3.1/src/agentseek_api/container_policy.py +350 -0
  25. agentseek_api-0.3.1/src/agentseek_api/docker_runtime.py +720 -0
  26. agentseek_api-0.3.1/src/agentseek_api/dotenv_adapter.py +141 -0
  27. agentseek_api-0.3.1/src/agentseek_api/environment.py +509 -0
  28. agentseek_api-0.3.1/src/agentseek_api/runtime_entrypoint.py +201 -0
  29. agentseek_api-0.3.1/src/agentseek_api/secure_temp.py +1046 -0
  30. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/sample_graphs.py +1 -1
  31. agentseek_api-0.3.1/tests/container_plan_helpers.py +315 -0
  32. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/conftest.py +3 -3
  33. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/e2e_live_http_multi_graph.py +1 -1
  34. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/test_cron_api_live.py +7 -2
  35. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_cli_runtime_processes.py +173 -0
  36. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_cron_api.py +5 -1
  37. agentseek_api-0.3.1/tests/unit/test_ci_workflow.py +111 -0
  38. agentseek_api-0.3.1/tests/unit/test_cli.py +4414 -0
  39. agentseek_api-0.3.1/tests/unit/test_container_boundary_acceptance.py +606 -0
  40. agentseek_api-0.3.1/tests/unit/test_container_build.py +2343 -0
  41. agentseek_api-0.3.1/tests/unit/test_container_image_archive.py +364 -0
  42. agentseek_api-0.3.1/tests/unit/test_container_policy.py +591 -0
  43. agentseek_api-0.3.1/tests/unit/test_docker_runtime.py +1372 -0
  44. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_dotenv_adapter.py +31 -0
  45. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_redis_runtime_script.py +31 -1
  46. agentseek_api-0.3.1/tests/unit/test_release_artifacts.py +25 -0
  47. agentseek_api-0.3.1/tests/unit/test_secure_temp.py +705 -0
  48. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_seekdb_embed_launcher.py +41 -13
  49. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/uv.lock +33 -1334
  50. agentseek_api-0.2.3/scripts/seekdb_embed_launcher.py +0 -99
  51. agentseek_api-0.2.3/scripts/test-cli-docker.sh +0 -172
  52. agentseek_api-0.2.3/scripts/test_cli_config_autodiscovery.py +0 -55
  53. agentseek_api-0.2.3/src/agentseek_api/__init__.py +0 -1
  54. agentseek_api-0.2.3/src/agentseek_api/cli.py +0 -1117
  55. agentseek_api-0.2.3/src/agentseek_api/dotenv_adapter.py +0 -69
  56. agentseek_api-0.2.3/src/agentseek_api/runtime_entrypoint.py +0 -59
  57. agentseek_api-0.2.3/tests/unit/test_ci_workflow.py +0 -25
  58. agentseek_api-0.2.3/tests/unit/test_cli.py +0 -2193
  59. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/.dockerignore +0 -0
  60. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  61. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/.github/workflows/live-provider-streaming.yml +0 -0
  62. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/.github/workflows/release.yml +0 -0
  63. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/.gitignore +0 -0
  64. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/AGENTS.md +0 -0
  65. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/LICENSE +0 -0
  66. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/Makefile +0 -0
  67. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/__init__.py +0 -0
  68. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/assistant_config/agentseek.json +0 -0
  69. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/assistant_config/graph.py +0 -0
  70. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/auth/api_key_auth.py +0 -0
  71. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/auth/bearer_token_auth.py +0 -0
  72. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/auth/custom_backend.py +0 -0
  73. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/auth/jwt.md +0 -0
  74. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/auth/jwt_auth.py +0 -0
  75. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/custom_routes/app.py +0 -0
  76. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/docker_ci_auth/auth_backend.py +0 -0
  77. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/docker_ci_auth/manifest.json +0 -0
  78. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/external_graph/__init__.py +0 -0
  79. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/external_graph/graph.py +0 -0
  80. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/external_graph/manifest.json +0 -0
  81. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/external_graph/run.py +0 -0
  82. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/__init__.py +0 -0
  83. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/react_agent/__init__.py +0 -0
  84. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/react_agent/graph.py +0 -0
  85. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/store_memory/graph.py +0 -0
  86. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/stress_test/__init__.py +0 -0
  87. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/stress_test/graph.py +0 -0
  88. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/stress_tool_agent/__init__.py +0 -0
  89. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/stress_tool_agent/graph.py +0 -0
  90. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/subgraph_agent/__init__.py +0 -0
  91. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/subgraph_agent/graph.py +0 -0
  92. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/subgraph_hitl_agent/__init__.py +0 -0
  93. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/graphs/subgraph_hitl_agent/graph.py +0 -0
  94. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/live_provider_graphs/__init__.py +0 -0
  95. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/live_provider_graphs/graph.py +0 -0
  96. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/live_provider_graphs/manifest.json +0 -0
  97. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/minimal_agentseek/agentseek.json +0 -0
  98. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/minimal_agentseek/graph.py +0 -0
  99. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/examples/sample_graphs_manifest.json +0 -0
  100. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/build_live_provider_matrix.py +0 -0
  101. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/seekdb_checkpoint_smoke.py +0 -0
  102. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/test-checkpoints.sh +0 -0
  103. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/test-cli-dev-samples.sh +0 -0
  104. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/test_cli_dev_studio_smoke.py +0 -0
  105. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/test_cli_embed_serve_smoke.py +0 -0
  106. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/test_cli_serve_smoke.py +0 -0
  107. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/verify_docker_api.py +0 -0
  108. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/scripts/verify_worker_concurrency.py +0 -0
  109. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/a2a_server.py +0 -0
  110. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/api/__init__.py +0 -0
  111. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/api/assistants.py +0 -0
  112. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/api/crons.py +0 -0
  113. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/api/runs.py +0 -0
  114. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/api/stateless_runs.py +0 -0
  115. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/api/store.py +0 -0
  116. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/api/streaming.py +0 -0
  117. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/api/threads.py +0 -0
  118. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/constants.py +0 -0
  119. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/__init__.py +0 -0
  120. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/a2a_config.py +0 -0
  121. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/app_loader.py +0 -0
  122. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/auth_deps.py +0 -0
  123. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/auth_middleware.py +0 -0
  124. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/config_file.py +0 -0
  125. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/content_type_fix.py +0 -0
  126. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/cors_config.py +0 -0
  127. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/database.py +0 -0
  128. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/http_config.py +0 -0
  129. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/mcp_config.py +0 -0
  130. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/oceanbase_checkpointer.py +0 -0
  131. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/orm.py +0 -0
  132. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/runtime_store.py +0 -0
  133. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/sqlite_checkpointer.py +0 -0
  134. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/core/store_config.py +0 -0
  135. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/main.py +0 -0
  136. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/mcp_server.py +0 -0
  137. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/models/__init__.py +0 -0
  138. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/models/api.py +0 -0
  139. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/models/auth.py +0 -0
  140. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/models/protocol.py +0 -0
  141. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/process_supervisor.py +0 -0
  142. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/scheduler.py +0 -0
  143. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/__init__.py +0 -0
  144. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/cron_models.py +0 -0
  145. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/cron_rrule.py +0 -0
  146. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/cron_scheduler.py +0 -0
  147. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/cron_service.py +0 -0
  148. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/cron_webhooks.py +0 -0
  149. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/default_assistants.py +0 -0
  150. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/executor.py +0 -0
  151. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/langgraph_service.py +0 -0
  152. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/redis_queue.py +0 -0
  153. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/run_executor.py +0 -0
  154. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/run_jobs.py +0 -0
  155. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/run_preparation.py +0 -0
  156. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/run_state.py +0 -0
  157. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/sse.py +0 -0
  158. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/stream_modes.py +0 -0
  159. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/stream_persistence.py +0 -0
  160. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/thread_checkpoint_store.py +0 -0
  161. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/thread_protocol.py +0 -0
  162. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/services/thread_service.py +0 -0
  163. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/settings.py +0 -0
  164. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/src/agentseek_api/worker.py +0 -0
  165. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/__init__.py +0 -0
  166. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/conftest.py +0 -0
  167. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/__init__.py +0 -0
  168. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/e2e_inprocess_flow.py +0 -0
  169. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/e2e_live_http_flow.py +0 -0
  170. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/e2e_live_http_resume_flow.py +0 -0
  171. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/fixtures/langgraph.store-e2e.json +0 -0
  172. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/live_provider_helpers.py +0 -0
  173. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/test_a2a_live.py +0 -0
  174. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/test_cron_scheduler_live.py +0 -0
  175. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/test_langsmith_compat_live.py +0 -0
  176. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/test_live_provider_api.py +0 -0
  177. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/test_live_provider_mcp.py +0 -0
  178. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/test_mcp_live.py +0 -0
  179. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/e2e/test_real_api_flow.py +0 -0
  180. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/fixtures/runtime_settings_probe/sitecustomize.py +0 -0
  181. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/fixtures/termination_tree.py +0 -0
  182. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_a2a_endpoint.py +0 -0
  183. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_agent_card.py +0 -0
  184. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_agents_aliases.py +0 -0
  185. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_assistants_compat.py +0 -0
  186. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_assistants_config_context_sync.py +0 -0
  187. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_assistants_crud.py +0 -0
  188. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_assistants_ordering.py +0 -0
  189. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_auth_coverage_gaps.py +0 -0
  190. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_auth_handlers.py +0 -0
  191. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_auth_route_enforcement.py +0 -0
  192. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_auth_scope_matrix.py +0 -0
  193. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_core_api_flow.py +0 -0
  194. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_langsmith_compat_coverage.py +0 -0
  195. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_langsmith_compat_extra.py +0 -0
  196. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_live_provider_streaming.py +0 -0
  197. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_live_redis_queue.py +0 -0
  198. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_live_redis_stream_persistence.py +0 -0
  199. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_mcp_endpoint.py +0 -0
  200. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_metadata_db_config.py +0 -0
  201. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_protocol_v2_streaming.py +0 -0
  202. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_run_cancellation_async.py +0 -0
  203. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_runs_compat.py +0 -0
  204. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_runs_crud.py +0 -0
  205. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_runs_ordering.py +0 -0
  206. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_runs_resume.py +0 -0
  207. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_runs_streaming.py +0 -0
  208. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_runs_streaming_errors.py +0 -0
  209. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_runs_validation.py +0 -0
  210. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_runs_wait_and_get.py +0 -0
  211. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_runs_wait_timeout.py +0 -0
  212. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_scheduler_runtime.py +0 -0
  213. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_stateless_runs_crud.py +0 -0
  214. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_store_api.py +0 -0
  215. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_stream_persistence.py +0 -0
  216. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_system_endpoints.py +0 -0
  217. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_threads_compat.py +0 -0
  218. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_threads_crud.py +0 -0
  219. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/integration/test_threads_ordering.py +0 -0
  220. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_a2a_config.py +0 -0
  221. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_a2a_server.py +0 -0
  222. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_app_loader.py +0 -0
  223. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_assistant_routes_unit.py +0 -0
  224. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_auth.py +0 -0
  225. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_auth_deps.py +0 -0
  226. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_auth_internals.py +0 -0
  227. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_checkpoint_guards.py +0 -0
  228. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_content_type_fix.py +0 -0
  229. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_cron_rrule.py +0 -0
  230. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_cron_service.py +0 -0
  231. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_cron_webhooks.py +0 -0
  232. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_custom_routers.py +0 -0
  233. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_database_manager.py +0 -0
  234. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_default_assistants.py +0 -0
  235. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_examples.py +0 -0
  236. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_executor.py +0 -0
  237. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_graph_manifest.py +0 -0
  238. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_http_config.py +0 -0
  239. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_langgraph_service.py +0 -0
  240. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_live_provider_e2e_config.py +0 -0
  241. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_live_provider_graphs.py +0 -0
  242. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_live_provider_matrix.py +0 -0
  243. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_mcp_config.py +0 -0
  244. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_mcp_server.py +0 -0
  245. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_oceanbase_checkpointer.py +0 -0
  246. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_openapi_auth_config.py +0 -0
  247. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_process_supervisor.py +0 -0
  248. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_redis_queue.py +0 -0
  249. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_run_controls_validation.py +0 -0
  250. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_run_executor.py +0 -0
  251. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_run_jobs.py +0 -0
  252. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_run_preparation.py +0 -0
  253. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_run_state.py +0 -0
  254. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_runtime_entrypoint.py +0 -0
  255. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_runtime_environment.py +0 -0
  256. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_runtime_store.py +0 -0
  257. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_sample_graphs.py +0 -0
  258. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_scheduler.py +0 -0
  259. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_scheduler_process.py +0 -0
  260. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_seekdb_checkpoint_smoke.py +0 -0
  261. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_sqlite_checkpointer.py +0 -0
  262. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_sse_keepalive.py +0 -0
  263. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_store_config.py +0 -0
  264. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_stream_modes.py +0 -0
  265. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_stream_persistence_helpers.py +0 -0
  266. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_thread_checkpoint_store.py +0 -0
  267. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_thread_protocol.py +0 -0
  268. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_thread_routes_unit.py +0 -0
  269. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_thread_service.py +0 -0
  270. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_worker.py +0 -0
  271. {agentseek_api-0.2.3 → agentseek_api-0.3.1}/tests/unit/test_worker_concurrency_probe.py +0 -0
@@ -12,7 +12,7 @@ AUTH_MODULE_PATH=
12
12
  # REDIS_STREAM_MAXLEN=10000
13
13
  # REDIS_STREAM_TTL_SECONDS=3600
14
14
 
15
- # Embedded SeekDB — set to true for a zero-config local backend.
15
+ # Embedded seekdb — set to true for a zero-config local backend.
16
16
  # Data stored in SEEKDB_EMBED_DIR (default: ~/.agentseek/seekdb_data).
17
17
  # Requires: uv sync --dev --extra embedded
18
18
  # SEEKDB_EMBED=true
@@ -44,7 +44,13 @@ jobs:
44
44
  run: uv sync --dev
45
45
 
46
46
  - name: Coverage-backed unit + integration suite
47
- run: make test-cov
47
+ run: >-
48
+ uv run pytest tests/unit tests/integration
49
+ -m 'not docker'
50
+ --cov=src/agentseek_api
51
+ --cov-report=term-missing
52
+ --cov-fail-under=90
53
+ -q
48
54
 
49
55
  cli-compatibility:
50
56
  name: CLI Compatibility (${{ matrix.os }})
@@ -78,9 +84,7 @@ jobs:
78
84
  run: uv run python scripts/test_cli_config_autodiscovery.py
79
85
 
80
86
  - name: Dockerfile command renders a runnable config
81
- run: >-
82
- uv run python -c
83
- "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"
87
+ run: uv run python scripts/test_cli_config_autodiscovery.py --config examples/external_graph/manifest.json
84
88
 
85
89
  - name: CLI config, host environment, and process tests
86
90
  run: >-
@@ -92,11 +96,13 @@ jobs:
92
96
  tests/unit/test_runtime_entrypoint.py
93
97
  tests/unit/test_process_supervisor.py
94
98
  tests/unit/test_sqlite_checkpointer.py
99
+ tests/unit/test_container_policy.py
100
+ tests/unit/test_secure_temp.py
95
101
  tests/integration/test_cli_runtime_processes.py
96
102
  tests/integration/test_metadata_db_config.py
97
103
  -q
98
104
 
99
- - name: Sync embedded SeekDB extra for serve smoke
105
+ - name: Sync embedded seekdb extra for serve smoke
100
106
  if: runner.os == 'Linux' || (runner.os == 'macOS' && runner.arch == 'ARM64')
101
107
  run: uv sync --dev --extra embedded
102
108
 
@@ -109,7 +115,7 @@ jobs:
109
115
  run: uv run python scripts/test_minimum_cli_dependencies.py
110
116
 
111
117
  embedded-seekdb-smoke:
112
- name: Embedded SeekDB Smoke
118
+ name: Embedded seekdb Smoke
113
119
  runs-on: ubuntu-latest
114
120
  timeout-minutes: 15
115
121
  steps:
@@ -130,9 +136,15 @@ jobs:
130
136
  run: uv run python scripts/test_cli_embed_serve_smoke.py
131
137
 
132
138
  cli-docker-runtime:
133
- name: CLI Docker Runtime
139
+ name: CLI Docker Runtime (Compose ${{ matrix.compose-version }})
134
140
  runs-on: ubuntu-latest
135
- timeout-minutes: 30
141
+ timeout-minutes: 45
142
+ strategy:
143
+ fail-fast: false
144
+ matrix:
145
+ compose-version:
146
+ - runner-current
147
+ - v2.24.0
136
148
  steps:
137
149
  - name: Checkout
138
150
  uses: actions/checkout@v4
@@ -147,6 +159,21 @@ jobs:
147
159
  - name: Sync dependencies
148
160
  run: uv sync --dev
149
161
 
162
+ - name: Install Compose floor
163
+ if: matrix.compose-version == 'v2.24.0'
164
+ uses: docker/setup-compose-action@2fe291b7677a45ee1269ec56a42604c143505e7e # v1
165
+ with:
166
+ version: v2.24.0
167
+
168
+ - name: Record Compose version
169
+ run: docker compose version --short
170
+
171
+ - name: Container environment boundary
172
+ run: uv run python scripts/test_container_env_boundary.py
173
+
174
+ - name: Docker and Compose regression suite
175
+ run: uv run pytest tests/unit/test_docker_runtime.py -m docker -q
176
+
150
177
  - name: CLI Docker smoke
151
178
  run: make test-cli-docker
152
179
 
@@ -4,6 +4,63 @@ Notable changes to AgentSeek API are documented in this file.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 0.3.1 - 2026-09-03
8
+
9
+ ### Highlights
10
+
11
+ - Upgraded both the base and embedded `langchain-oceanbase` dependency pins to
12
+ 0.6.3, with the resolved embedded seekdb stack at `pylibseekdb` 1.4.0,
13
+ `pyobvector` 0.2.29, and `pyseekdb` 1.4.0.post1.
14
+ - Synchronized package metadata, generated container runtime artifacts,
15
+ attestations, scripts, fixtures, and runtime labels at 0.3.1.
16
+ - Restricted the supported Python range to `>=3.12,<3.14` and made generated
17
+ runtime verification reject unsupported Python versions.
18
+ - Normalized current human-facing documentation and runtime prose to the
19
+ lowercase `seekdb` product spelling.
20
+
21
+ ### Upgrade notes
22
+
23
+ - No API or schema migration is required for this release.
24
+
25
+ ## 0.3.0 - 2026-08-20
26
+
27
+ ### Highlights
28
+
29
+ - Added the explicit `preloaded-v1` container environment contract so the host
30
+ remains the single owner of application environment resolution.
31
+ - Generated containers install and attest the exact
32
+ `agentseek-api[embedded]==0.3.0` runtime independently of project
33
+ dependencies.
34
+ - Hardened Docker, Compose, and build-context boundaries so application values
35
+ are carried only to the declared runtime target and credential-bearing source
36
+ files are excluded from image inputs.
37
+ - Defined compatible custom-image labels and runtime-manifest checks for
38
+ `preloaded-v1` launches.
39
+
40
+ ### Upgrade notes
41
+
42
+ - Container projects that pin `agentseek-api==0.2.2`, or otherwise exclude
43
+ `0.3.0`, must update their dependency constraint before using generated
44
+ images.
45
+ - Custom images must publish the `preloaded-v1` environment-contract, runtime
46
+ manifest, distribution, and version labels; older images must keep using the
47
+ older launcher until migrated.
48
+ - `dockerfile` now writes a complete build-bundle directory. Declare only
49
+ reviewed project paths with `build_include`; credentialed `pip_config_file`
50
+ input is delivered as a BuildKit secret rather than copied into the bundle.
51
+ - Container application values cross only an explicit runtime boundary:
52
+ `--pass-env` selects the direct Docker carrier, while `compose_env` and
53
+ `--compose-pass-env` select the private Compose dotenv carrier. All are
54
+ trusted-input declarations and none authorize values to enter the build.
55
+ - Custom images must provide the exact `org.agentseek.environment-contract`,
56
+ `org.agentseek.runtime-manifest`, `org.agentseek.runtime-distribution`, and
57
+ `org.agentseek.runtime-version` labels and matching manifest/runtime state.
58
+ There is no legacy-image fallback.
59
+ - Release Train A shipped API 0.2.3, templates 0.1.3, and AgentSeek 0.1.3. The
60
+ planned Train B template/catalog release is 0.1.4. The separate planned
61
+ AgentSeek release is also 0.1.4; both follow their shipped 0.1.3 releases and
62
+ remain separate release gates.
63
+
7
64
  ## 0.2.3 - 2026-08-17
8
65
 
9
66
  ### Fixed
@@ -31,8 +31,8 @@ GitHub Actions is split into three validation layers:
31
31
  Coverage-backed unit and integration suite (`make test-cov`) on every supported push and PR.
32
32
  - Sample Graphs
33
33
  In-process graph runner plus the in-process API smoke flow (`make test-samples`).
34
- - SeekDB Validation
35
- Real backend checkpoint smoke plus live HTTP e2e coverage (`make test-seekdb`) on PRs to `develop` or `main`, and on pushes to `develop`, `main`, `release/*`, and `hotfix/*`. CI runs this in a Docker matrix across `seekdb`, `oceanbase`, and `mysql`, while local quick verification should prefer embedded SeekDB via `scripts/seekdb_embed_launcher.py`.
34
+ - seekdb Validation
35
+ Real backend checkpoint smoke plus live HTTP e2e coverage (`make test-seekdb`) on PRs to `develop` or `main`, and on pushes to `develop`, `main`, `release/*`, and `hotfix/*`. CI runs this in a Docker matrix across `seekdb`, `oceanbase`, and `mysql`, while local quick verification should prefer embedded seekdb via `scripts/seekdb_embed_launcher.py`.
36
36
 
37
37
  Keep local commands aligned with CI when possible:
38
38
 
@@ -42,6 +42,6 @@ Keep local commands aligned with CI when possible:
42
42
  - `make test-e2e`
43
43
  - `make test-seekdb`
44
44
 
45
- For embedded SeekDB locally, install the optional extra first:
45
+ For embedded seekdb locally, install the optional extra first:
46
46
 
47
47
  - `uv sync --dev --extra embedded`
@@ -1,8 +1,41 @@
1
+ Metadata-Version: 2.5
2
+ Name: agentseek-api
3
+ Version: 0.3.1
4
+ Summary: AgentSeek API core runtime with OceanBase checkpoints.
5
+ License-File: LICENSE
6
+ Requires-Python: <3.14,>=3.12
7
+ Requires-Dist: aiomysql>=0.2.0
8
+ Requires-Dist: aiosqlite>=0.20.0
9
+ Requires-Dist: asyncpg>=0.29.0
10
+ Requires-Dist: cryptography>=45.0.0
11
+ Requires-Dist: fastapi>=0.110.1
12
+ Requires-Dist: greenlet>=3.1.0
13
+ Requires-Dist: langchain-anthropic>=1.0.0
14
+ Requires-Dist: langchain-core>=1.2.5
15
+ Requires-Dist: langchain-oceanbase==0.6.3
16
+ Requires-Dist: langchain-openai>=1.0.0
17
+ Requires-Dist: langchain>=0.3.9
18
+ Requires-Dist: langgraph-sdk>=0.3.5
19
+ Requires-Dist: langgraph>=1.0.6
20
+ Requires-Dist: mcp<2,>=1.27.1
21
+ Requires-Dist: packaging>=24.0
22
+ Requires-Dist: pydantic-settings>=2.4.0
23
+ Requires-Dist: pydantic>=2.8.0
24
+ Requires-Dist: pymysql>=1.1.0
25
+ Requires-Dist: python-dotenv<1.3,>=1.0
26
+ Requires-Dist: redis>=5.0.0
27
+ Requires-Dist: scalar-fastapi>=1.0.3
28
+ Requires-Dist: sqlalchemy>=2.0.12
29
+ Requires-Dist: uvicorn>=0.30.0
30
+ Provides-Extra: embedded
31
+ Requires-Dist: langchain-oceanbase[pyseekdb]==0.6.3; extra == 'embedded'
32
+ Description-Content-Type: text/markdown
33
+
1
34
  # AgentSeek API
2
35
 
3
36
  **English** | [中文](README.zh-CN.md)
4
37
 
5
- [![PyPI version](https://img.shields.io/pypi/v/agentseek-api.svg)](https://pypi.org/project/agentseek-api/) [![Python >=3.12](https://img.shields.io/badge/python-%3E%3D3.12-blue.svg)](https://pypi.org/project/agentseek-api/) [![CI](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml?query=branch%3Amain)
38
+ [![PyPI version](https://img.shields.io/pypi/v/agentseek-api.svg)](https://pypi.org/project/agentseek-api/) [![Python 3.12-3.13](https://img.shields.io/badge/python-3.12--3.13-blue.svg)](https://pypi.org/project/agentseek-api/) [![CI](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml?query=branch%3Amain)
6
39
 
7
40
  > [!WARNING]
8
41
  > This project is under active development and is **not production-ready**.
@@ -33,7 +66,7 @@ Current release boundary:
33
66
 
34
67
  ### Prerequisites
35
68
 
36
- - Python 3.12+
69
+ - Python >=3.12,<3.14
37
70
  - `uv`
38
71
 
39
72
  ### Choose the right local loop
@@ -83,7 +116,7 @@ uv sync --extra embedded
83
116
  ### 2. Configure seekdb embed as the default backend (recommended)
84
117
 
85
118
  The fastest way to get a real backend running locally is **seekdb embed** — an
86
- in-process SeekDB instance, no Docker or separate process required:
119
+ in-process seekdb instance, no Docker or separate process required:
87
120
 
88
121
  ```bash
89
122
  SEEKDB_EMBED=true agentseek-api dev
@@ -296,7 +329,7 @@ keys with similar names.
296
329
  uv run agentseek-api dev
297
330
  uv run agentseek-api serve --config ./langgraph.json --port 8080
298
331
  uv run agentseek-api worker --config ./langgraph.json
299
- uv run agentseek-api dockerfile --config ./langgraph.json ./Dockerfile.agentseek
332
+ uv run agentseek-api dockerfile --config ./langgraph.json ./agentseek-build-bundle
300
333
  uv run agentseek-api build --config ./langgraph.json -t agentseek-api:dev
301
334
  uv run agentseek-api up --config ./langgraph.json --port 8123 --wait
302
335
  uv run agentseek-api version
@@ -323,9 +356,18 @@ uv run agentseek-api version
323
356
  - `build`
324
357
  - Use `-t, --tag` to set the image tag
325
358
  - Supports `--platform`, `--pull`, and `--no-pull`
359
+ - `dockerfile`
360
+ - Writes a complete private build-bundle directory, including the generated
361
+ `Dockerfile`, sanitized runtime manifest, and selected project files; the
362
+ output argument is a new directory, not a standalone Dockerfile path
326
363
  - `up`
327
364
  - Supports `--wait`, `--image`, `--base-image`, `--postgres-uri`,
328
365
  `--recreate`, and `--no-recreate`
366
+ - `--pass-env NAME` explicitly selects a resolved application value for the
367
+ direct Docker carrier; the value is inherited by name and never put in argv
368
+ - `--compose-pass-env NAME` explicitly selects a resolved application value
369
+ for Compose interpolation; config can make the same selection with
370
+ `compose_env`
329
371
 
330
372
  Some LangGraph CLI-shaped flags are parsed for command compatibility but
331
373
  rejected when their runtime behavior is not implemented yet. For mocked,
@@ -404,11 +446,45 @@ Useful config fields:
404
446
  - `http.disable_a2a`: disable the A2A endpoint and agent-card discovery route
405
447
  - `base_image`, `python_version`, `image_distro`, `pip_config_file`,
406
448
  `dockerfile_lines`: Docker build customization fields
449
+ - `build_include`: additional trusted regular files or directory trees to copy
450
+ into the sanitized build bundle
451
+ - `compose_env`: names from the already-resolved application environment that
452
+ may cross into an explicitly selected Compose dotenv carrier
453
+
454
+ ### Container contract introduced in 0.3.0
455
+
456
+ The `preloaded-v1` contract is a breaking, fail-closed container boundary. The
457
+ host resolves application configuration once. Containers started from generated images receive only
458
+ the selected runtime payload, while ambient host values, dotenv files, package
459
+ credentials, and unselected Compose values stay outside the build context and
460
+ image layers. Use `--pass-env` or `--compose-pass-env` only for trusted input;
461
+ these flags authorize a value to cross the named runtime boundary, not to enter
462
+ the build.
463
+
464
+ `build_include` is also a trusted-input declaration: review every selected path.
465
+ Credentialed Python indexes belong in `pip_config_file`, which is mounted as a
466
+ BuildKit pip secret and is not copied into the context. The `dockerfile` command
467
+ now writes the complete bundle directory consumed by Docker rather than a lone
468
+ Dockerfile.
469
+
470
+ Custom images must expose all four exact labels:
471
+
472
+ - `org.agentseek.environment-contract=preloaded-v1`
473
+ - `org.agentseek.runtime-manifest=/opt/agentseek/manifest.v1.json`
474
+ - `org.agentseek.runtime-distribution=agentseek-api`
475
+ - `org.agentseek.runtime-version=0.3.1`
476
+
477
+ The manifest, installed distribution, entrypoint, and labels must agree. There
478
+ is no legacy-image fallback: migrate and attest the image before passing it to
479
+ `up --image`, or keep using the older launcher with the older image. Release
480
+ Train A coordinates are API 0.2.3, templates 0.1.3, and AgentSeek 0.1.3; the
481
+ The planned Train B template/catalog release is 0.1.4. The separate planned
482
+ AgentSeek release is also 0.1.4; both follow the shipped 0.1.3 releases.
407
483
 
408
484
  Endpoint-level LangGraph config keys such as `http` and `api_version` are
409
485
  tolerated by the CLI layer where possible. Store config is used by the HTTP
410
486
  Store API and the injected LangGraph `BaseStore` runtime for TTL and semantic
411
- search. This repo uses the published `langchain-oceanbase==0.5.2` package from
487
+ search. This repo uses the published `langchain-oceanbase==0.6.3` package from
412
488
  PyPI.
413
489
 
414
490
  Config-driven custom auth can live in `agentseek.json` or `langgraph.json`:
@@ -1,40 +1,8 @@
1
- Metadata-Version: 2.5
2
- Name: agentseek-api
3
- Version: 0.2.3
4
- Summary: AgentSeek API core runtime with OceanBase checkpoints.
5
- License-File: LICENSE
6
- Requires-Python: >=3.12
7
- Requires-Dist: aiomysql>=0.2.0
8
- Requires-Dist: aiosqlite>=0.20.0
9
- Requires-Dist: asyncpg>=0.29.0
10
- Requires-Dist: cryptography>=45.0.0
11
- Requires-Dist: fastapi>=0.110.1
12
- Requires-Dist: greenlet>=3.1.0
13
- Requires-Dist: langchain-anthropic>=1.0.0
14
- Requires-Dist: langchain-core>=1.2.5
15
- Requires-Dist: langchain-oceanbase==0.6.0
16
- Requires-Dist: langchain-openai>=1.0.0
17
- Requires-Dist: langchain>=0.3.9
18
- Requires-Dist: langgraph-sdk>=0.3.5
19
- Requires-Dist: langgraph>=1.0.6
20
- Requires-Dist: mcp<2,>=1.27.1
21
- Requires-Dist: pydantic-settings>=2.4.0
22
- Requires-Dist: pydantic>=2.8.0
23
- Requires-Dist: pymysql>=1.1.0
24
- Requires-Dist: python-dotenv<1.3,>=1.0
25
- Requires-Dist: redis>=5.0.0
26
- Requires-Dist: scalar-fastapi>=1.0.3
27
- Requires-Dist: sqlalchemy>=2.0.12
28
- Requires-Dist: uvicorn>=0.30.0
29
- Provides-Extra: embedded
30
- Requires-Dist: langchain-oceanbase[pyseekdb]==0.6.0; extra == 'embedded'
31
- Description-Content-Type: text/markdown
32
-
33
1
  # AgentSeek API
34
2
 
35
3
  **English** | [中文](README.zh-CN.md)
36
4
 
37
- [![PyPI version](https://img.shields.io/pypi/v/agentseek-api.svg)](https://pypi.org/project/agentseek-api/) [![Python >=3.12](https://img.shields.io/badge/python-%3E%3D3.12-blue.svg)](https://pypi.org/project/agentseek-api/) [![CI](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml?query=branch%3Amain)
5
+ [![PyPI version](https://img.shields.io/pypi/v/agentseek-api.svg)](https://pypi.org/project/agentseek-api/) [![Python 3.12-3.13](https://img.shields.io/badge/python-3.12--3.13-blue.svg)](https://pypi.org/project/agentseek-api/) [![CI](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml?query=branch%3Amain)
38
6
 
39
7
  > [!WARNING]
40
8
  > This project is under active development and is **not production-ready**.
@@ -65,7 +33,7 @@ Current release boundary:
65
33
 
66
34
  ### Prerequisites
67
35
 
68
- - Python 3.12+
36
+ - Python >=3.12,<3.14
69
37
  - `uv`
70
38
 
71
39
  ### Choose the right local loop
@@ -115,7 +83,7 @@ uv sync --extra embedded
115
83
  ### 2. Configure seekdb embed as the default backend (recommended)
116
84
 
117
85
  The fastest way to get a real backend running locally is **seekdb embed** — an
118
- in-process SeekDB instance, no Docker or separate process required:
86
+ in-process seekdb instance, no Docker or separate process required:
119
87
 
120
88
  ```bash
121
89
  SEEKDB_EMBED=true agentseek-api dev
@@ -328,7 +296,7 @@ keys with similar names.
328
296
  uv run agentseek-api dev
329
297
  uv run agentseek-api serve --config ./langgraph.json --port 8080
330
298
  uv run agentseek-api worker --config ./langgraph.json
331
- uv run agentseek-api dockerfile --config ./langgraph.json ./Dockerfile.agentseek
299
+ uv run agentseek-api dockerfile --config ./langgraph.json ./agentseek-build-bundle
332
300
  uv run agentseek-api build --config ./langgraph.json -t agentseek-api:dev
333
301
  uv run agentseek-api up --config ./langgraph.json --port 8123 --wait
334
302
  uv run agentseek-api version
@@ -355,9 +323,18 @@ uv run agentseek-api version
355
323
  - `build`
356
324
  - Use `-t, --tag` to set the image tag
357
325
  - Supports `--platform`, `--pull`, and `--no-pull`
326
+ - `dockerfile`
327
+ - Writes a complete private build-bundle directory, including the generated
328
+ `Dockerfile`, sanitized runtime manifest, and selected project files; the
329
+ output argument is a new directory, not a standalone Dockerfile path
358
330
  - `up`
359
331
  - Supports `--wait`, `--image`, `--base-image`, `--postgres-uri`,
360
332
  `--recreate`, and `--no-recreate`
333
+ - `--pass-env NAME` explicitly selects a resolved application value for the
334
+ direct Docker carrier; the value is inherited by name and never put in argv
335
+ - `--compose-pass-env NAME` explicitly selects a resolved application value
336
+ for Compose interpolation; config can make the same selection with
337
+ `compose_env`
361
338
 
362
339
  Some LangGraph CLI-shaped flags are parsed for command compatibility but
363
340
  rejected when their runtime behavior is not implemented yet. For mocked,
@@ -436,11 +413,45 @@ Useful config fields:
436
413
  - `http.disable_a2a`: disable the A2A endpoint and agent-card discovery route
437
414
  - `base_image`, `python_version`, `image_distro`, `pip_config_file`,
438
415
  `dockerfile_lines`: Docker build customization fields
416
+ - `build_include`: additional trusted regular files or directory trees to copy
417
+ into the sanitized build bundle
418
+ - `compose_env`: names from the already-resolved application environment that
419
+ may cross into an explicitly selected Compose dotenv carrier
420
+
421
+ ### Container contract introduced in 0.3.0
422
+
423
+ The `preloaded-v1` contract is a breaking, fail-closed container boundary. The
424
+ host resolves application configuration once. Containers started from generated images receive only
425
+ the selected runtime payload, while ambient host values, dotenv files, package
426
+ credentials, and unselected Compose values stay outside the build context and
427
+ image layers. Use `--pass-env` or `--compose-pass-env` only for trusted input;
428
+ these flags authorize a value to cross the named runtime boundary, not to enter
429
+ the build.
430
+
431
+ `build_include` is also a trusted-input declaration: review every selected path.
432
+ Credentialed Python indexes belong in `pip_config_file`, which is mounted as a
433
+ BuildKit pip secret and is not copied into the context. The `dockerfile` command
434
+ now writes the complete bundle directory consumed by Docker rather than a lone
435
+ Dockerfile.
436
+
437
+ Custom images must expose all four exact labels:
438
+
439
+ - `org.agentseek.environment-contract=preloaded-v1`
440
+ - `org.agentseek.runtime-manifest=/opt/agentseek/manifest.v1.json`
441
+ - `org.agentseek.runtime-distribution=agentseek-api`
442
+ - `org.agentseek.runtime-version=0.3.1`
443
+
444
+ The manifest, installed distribution, entrypoint, and labels must agree. There
445
+ is no legacy-image fallback: migrate and attest the image before passing it to
446
+ `up --image`, or keep using the older launcher with the older image. Release
447
+ Train A coordinates are API 0.2.3, templates 0.1.3, and AgentSeek 0.1.3; the
448
+ The planned Train B template/catalog release is 0.1.4. The separate planned
449
+ AgentSeek release is also 0.1.4; both follow the shipped 0.1.3 releases.
439
450
 
440
451
  Endpoint-level LangGraph config keys such as `http` and `api_version` are
441
452
  tolerated by the CLI layer where possible. Store config is used by the HTTP
442
453
  Store API and the injected LangGraph `BaseStore` runtime for TTL and semantic
443
- search. This repo uses the published `langchain-oceanbase==0.5.2` package from
454
+ search. This repo uses the published `langchain-oceanbase==0.6.3` package from
444
455
  PyPI.
445
456
 
446
457
  Config-driven custom auth can live in `agentseek.json` or `langgraph.json`:
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | **中文**
4
4
 
5
- [![PyPI version](https://img.shields.io/pypi/v/agentseek-api.svg)](https://pypi.org/project/agentseek-api/) [![Python >=3.12](https://img.shields.io/badge/python-%3E%3D3.12-blue.svg)](https://pypi.org/project/agentseek-api/) [![CI](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml?query=branch%3Amain)
5
+ [![PyPI version](https://img.shields.io/pypi/v/agentseek-api.svg)](https://pypi.org/project/agentseek-api/) [![Python 3.12-3.13](https://img.shields.io/badge/python-3.12--3.13-blue.svg)](https://pypi.org/project/agentseek-api/) [![CI](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/ob-labs/agentseek-api/actions/workflows/ci.yml?query=branch%3Amain)
6
6
 
7
7
  > [!WARNING]
8
8
  > 本项目正在积极开发中,**尚未达到生产可用状态**。
@@ -32,7 +32,7 @@
32
32
 
33
33
  ### 前置条件
34
34
 
35
- - Python 3.12+
35
+ - Python >=3.12,<3.14
36
36
  - `uv`
37
37
 
38
38
  ### 选择合适的本地开发循环
@@ -80,7 +80,7 @@ uv sync --extra embedded
80
80
 
81
81
  ### 2. 将 seekdb embed 配置为默认后端(推荐)
82
82
 
83
- 最快获得真实后端的方式是 **seekdb embed** — 一个进程内嵌入式 SeekDB 实例,
83
+ 最快获得真实后端的方式是 **seekdb embed** — 一个进程内嵌入式 seekdb 实例,
84
84
  无需 Docker 或独立进程:
85
85
 
86
86
  ```bash
@@ -262,7 +262,7 @@ agentseek-api <command> [arguments]
262
262
  uv run agentseek-api dev
263
263
  uv run agentseek-api serve --config ./langgraph.json --port 8080
264
264
  uv run agentseek-api worker --config ./langgraph.json
265
- uv run agentseek-api dockerfile --config ./langgraph.json ./Dockerfile.agentseek
265
+ uv run agentseek-api dockerfile --config ./langgraph.json ./agentseek-build-bundle
266
266
  uv run agentseek-api build --config ./langgraph.json -t agentseek-api:dev
267
267
  uv run agentseek-api up --config ./langgraph.json --port 8123 --wait
268
268
  uv run agentseek-api version
@@ -289,9 +289,17 @@ uv run agentseek-api version
289
289
  - `build`
290
290
  - 使用 `-t, --tag` 设置镜像 tag
291
291
  - 支持 `--platform`、`--pull`、`--no-pull`
292
+ - `dockerfile`
293
+ - 输出完整的私有构建 bundle 目录,其中包含生成的 `Dockerfile`、净化后的
294
+ runtime manifest 与选中的项目文件;输出参数必须是新目录,而不是单个
295
+ Dockerfile 文件路径
292
296
  - `up`
293
297
  - 支持 `--wait`、`--image`、`--base-image`、`--postgres-uri`、
294
298
  `--recreate`、`--no-recreate`
299
+ - `--pass-env NAME` 显式选择一个已解析的应用变量,通过名称继承方式交给
300
+ 直接 Docker carrier,变量值不会进入 argv
301
+ - `--compose-pass-env NAME` 显式选择一个已解析的应用变量交给 Compose;
302
+ 配置文件中的 `compose_env` 提供同样的选择能力
295
303
 
296
304
  部分仿照 LangGraph CLI 的参数会为了命令兼容性被解析,但当对应运行时
297
305
  行为还未实现时会被直接拒绝。对于 mock、内存或 tunnel 化的本地工作流,
@@ -371,11 +379,40 @@ Redis 实例同时运行。
371
379
  - `http.disable_a2a`:关闭 A2A 端点及 agent-card 发现路由
372
380
  - `base_image`、`python_version`、`image_distro`、`pip_config_file`、
373
381
  `dockerfile_lines`:Docker 构建自定义字段
382
+ - `build_include`:额外复制到净化构建 bundle 中的受信任普通文件或目录树
383
+ - `compose_env`:允许通过显式 Compose dotenv carrier 的、已完成解析的应用
384
+ 环境变量名称
385
+
386
+ ### 0.3.0 引入的容器契约
387
+
388
+ `preloaded-v1` 是不兼容旧行为、失败即关闭的容器边界。宿主机只解析一次
389
+ 应用配置。从生成镜像启动的容器只接收显式选择的运行时 payload;宿主机环境、dotenv
390
+ 文件、包仓库凭证和未选择的 Compose 值都不会进入构建上下文或镜像层。
391
+ `--pass-env` 与 `--compose-pass-env` 只应接收可信输入:它们授权变量跨越指定
392
+ 运行时边界,并不允许变量进入镜像构建。
393
+
394
+ `build_include` 同样属于可信输入声明,必须审查每条路径。带凭证的 Python
395
+ 仓库配置应使用 `pip_config_file`,CLI 会将其作为 BuildKit pip secret 挂载,
396
+ 不会复制到上下文。`dockerfile` 命令现在输出 Docker 实际消费的完整 bundle
397
+ 目录,而不是单独的 Dockerfile。
398
+
399
+ 自定义镜像必须提供以下四个精确标签:
400
+
401
+ - `org.agentseek.environment-contract=preloaded-v1`
402
+ - `org.agentseek.runtime-manifest=/opt/agentseek/manifest.v1.json`
403
+ - `org.agentseek.runtime-distribution=agentseek-api`
404
+ - `org.agentseek.runtime-version=0.3.1`
405
+
406
+ manifest、已安装 distribution、entrypoint 与标签必须一致。系统不提供旧镜像
407
+ 回退:传给 `up --image` 前必须完成迁移与校验;否则应继续用旧 launcher 配合
408
+ 旧镜像。Train A 已达成版本为 API 0.2.3、templates 0.1.3、AgentSeek 0.1.3;
409
+ 后续 Train B 的 template/catalog 计划单独发布 0.1.4。AgentSeek 也计划另行发布
410
+ 0.1.4;两者都基于已经发布的 0.1.3。
374
411
 
375
412
  CLI 层会尽量容忍 LangGraph 在端点级别使用的配置键,例如 `http` 与
376
413
  `api_version`。Store 配置会被 HTTP Store API 以及注入的 LangGraph
377
414
  `BaseStore` 运行时用于 TTL 与语义检索。本仓库使用 PyPI 上发布的
378
- `langchain-oceanbase==0.5.2` 包。
415
+ `langchain-oceanbase==0.6.3` 包。
379
416
 
380
417
  配置驱动的自定义鉴权可以放在 `agentseek.json` 或 `langgraph.json` 中:
381
418
 
@@ -42,7 +42,7 @@ uv run python examples/external_graph/run.py
42
42
  ```
43
43
 
44
44
  Invokes every sample graph directly through LangGraph — no HTTP server, no
45
- SeekDB. Useful during development when you want a tight feedback loop.
45
+ seekdb. Useful during development when you want a tight feedback loop.
46
46
 
47
47
  ## Running them through the HTTP API
48
48
 
@@ -76,7 +76,7 @@ curl -s http://127.0.0.1:2024/threads/$THREAD_ID/runs/$RUN_ID/wait \
76
76
  `tests/e2e/e2e_live_http_multi_graph.py` does the full dance against every
77
77
  registered sample. `make test-cli-dev-samples` runs that sweep through the
78
78
  `agentseek dev` CLI, and `make test-seekdb` runs it end-to-end against a real
79
- SeekDB-compatible backend.
79
+ seekdb-compatible backend.
80
80
 
81
81
  ## Adding your own graph
82
82
 
@@ -1,7 +1,7 @@
1
1
  """Run every sample graph once, in-process, to prove they import and execute.
2
2
 
3
3
  Useful as a local smoke test while developing a new graph. Does not require
4
- the HTTP server or SeekDB — it invokes each compiled graph directly through
4
+ the HTTP server or seekdb — it invokes each compiled graph directly through
5
5
  LangGraph.
6
6
  """
7
7
 
@@ -1,9 +1,9 @@
1
1
  [project]
2
2
  name = "agentseek-api"
3
- version = "0.2.3"
3
+ version = "0.3.1"
4
4
  description = "AgentSeek API core runtime with OceanBase checkpoints."
5
5
  readme = "README.md"
6
- requires-python = ">=3.12"
6
+ requires-python = ">=3.12,<3.14"
7
7
  dependencies = [
8
8
  "fastapi>=0.110.1",
9
9
  "uvicorn>=0.30.0",
@@ -20,18 +20,19 @@ dependencies = [
20
20
  "langchain-core>=1.2.5",
21
21
  "langchain-openai>=1.0.0",
22
22
  "langchain-anthropic>=1.0.0",
23
- "langchain-oceanbase==0.6.0",
23
+ "langchain-oceanbase==0.6.3",
24
24
  "cryptography>=45.0.0",
25
25
  "pymysql>=1.1.0",
26
26
  "langchain>=0.3.9",
27
27
  "mcp>=1.27.1,<2",
28
28
  "python-dotenv>=1.0,<1.3",
29
29
  "scalar-fastapi>=1.0.3",
30
+ "packaging>=24.0",
30
31
  ]
31
32
 
32
33
  [project.optional-dependencies]
33
34
  embedded = [
34
- "langchain-oceanbase[pyseekdb]==0.6.0",
35
+ "langchain-oceanbase[pyseekdb]==0.6.3",
35
36
  ]
36
37
 
37
38
  [project.scripts]
@@ -53,6 +54,9 @@ dev = [
53
54
  requires = ["hatchling"]
54
55
  build-backend = "hatchling.build"
55
56
 
57
+ [tool.hatch.build]
58
+ exclude = ["/.superpowers", "/docs/superpowers"]
59
+
56
60
  [tool.hatch.build.targets.wheel]
57
61
  packages = ["src/agentseek_api"]
58
62
 
@@ -60,5 +64,6 @@ packages = ["src/agentseek_api"]
60
64
  asyncio_mode = "auto"
61
65
  testpaths = ["tests"]
62
66
  markers = [
63
- "e2e: end-to-end tests against a live server and real SeekDB/OceanBase backend",
67
+ "docker: tests requiring Docker or Docker Compose",
68
+ "e2e: end-to-end tests against a live server and real seekdb/OceanBase backend",
64
69
  ]