agentseek-api 0.2.2__tar.gz → 0.3.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.
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/.github/workflows/ci.yml +35 -6
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/CHANGELOG.md +54 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/PKG-INFO +53 -4
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/README.md +51 -3
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/README.zh-CN.md +45 -3
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/pyproject.toml +6 -1
- agentseek_api-0.3.0/scripts/container_image_archive.py +296 -0
- agentseek_api-0.3.0/scripts/test-cli-docker.sh +376 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/test-redis-runtime.sh +48 -3
- agentseek_api-0.3.0/scripts/test_cli_config_autodiscovery.py +123 -0
- agentseek_api-0.3.0/scripts/test_container_env_boundary.py +920 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/test_minimum_cli_dependencies.py +15 -0
- agentseek_api-0.3.0/scripts/value_free_log_tail.py +46 -0
- agentseek_api-0.3.0/src/agentseek_api/__init__.py +1 -0
- agentseek_api-0.3.0/src/agentseek_api/cli.py +1722 -0
- agentseek_api-0.3.0/src/agentseek_api/container_build.py +2831 -0
- agentseek_api-0.3.0/src/agentseek_api/container_policy.py +350 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/database.py +27 -8
- agentseek_api-0.3.0/src/agentseek_api/core/sqlite_checkpointer.py +82 -0
- agentseek_api-0.3.0/src/agentseek_api/docker_runtime.py +720 -0
- agentseek_api-0.3.0/src/agentseek_api/dotenv_adapter.py +141 -0
- agentseek_api-0.3.0/src/agentseek_api/environment.py +509 -0
- agentseek_api-0.3.0/src/agentseek_api/runtime_entrypoint.py +201 -0
- agentseek_api-0.3.0/src/agentseek_api/secure_temp.py +1046 -0
- agentseek_api-0.3.0/tests/container_plan_helpers.py +315 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_cli_runtime_processes.py +173 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_metadata_db_config.py +53 -0
- agentseek_api-0.3.0/tests/unit/test_ci_workflow.py +111 -0
- agentseek_api-0.3.0/tests/unit/test_cli.py +4414 -0
- agentseek_api-0.3.0/tests/unit/test_container_boundary_acceptance.py +606 -0
- agentseek_api-0.3.0/tests/unit/test_container_build.py +2332 -0
- agentseek_api-0.3.0/tests/unit/test_container_image_archive.py +364 -0
- agentseek_api-0.3.0/tests/unit/test_container_policy.py +591 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_database_manager.py +27 -13
- agentseek_api-0.3.0/tests/unit/test_docker_runtime.py +1372 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_dotenv_adapter.py +31 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_redis_runtime_script.py +31 -1
- agentseek_api-0.3.0/tests/unit/test_release_artifacts.py +14 -0
- agentseek_api-0.3.0/tests/unit/test_secure_temp.py +705 -0
- agentseek_api-0.3.0/tests/unit/test_sqlite_checkpointer.py +51 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/uv.lock +3 -1
- agentseek_api-0.2.2/scripts/test-cli-docker.sh +0 -172
- agentseek_api-0.2.2/scripts/test_cli_config_autodiscovery.py +0 -55
- agentseek_api-0.2.2/src/agentseek_api/__init__.py +0 -1
- agentseek_api-0.2.2/src/agentseek_api/cli.py +0 -1117
- agentseek_api-0.2.2/src/agentseek_api/dotenv_adapter.py +0 -69
- agentseek_api-0.2.2/src/agentseek_api/runtime_entrypoint.py +0 -59
- agentseek_api-0.2.2/tests/unit/test_cli.py +0 -2193
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/.dockerignore +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/.env.example +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/.github/workflows/live-provider-streaming.yml +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/.github/workflows/release.yml +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/.gitignore +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/AGENTS.md +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/CONTRIBUTING.md +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/LICENSE +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/Makefile +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/README.md +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/assistant_config/agentseek.json +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/assistant_config/graph.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/auth/api_key_auth.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/auth/bearer_token_auth.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/auth/custom_backend.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/auth/jwt.md +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/auth/jwt_auth.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/custom_routes/app.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/docker_ci_auth/auth_backend.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/docker_ci_auth/manifest.json +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/external_graph/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/external_graph/graph.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/external_graph/manifest.json +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/external_graph/run.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/react_agent/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/react_agent/graph.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/store_memory/graph.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/stress_test/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/stress_test/graph.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/stress_tool_agent/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/stress_tool_agent/graph.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/subgraph_agent/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/subgraph_agent/graph.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/subgraph_hitl_agent/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/graphs/subgraph_hitl_agent/graph.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/live_provider_graphs/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/live_provider_graphs/graph.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/live_provider_graphs/manifest.json +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/minimal_agentseek/agentseek.json +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/minimal_agentseek/graph.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/run_sample_graphs.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/examples/sample_graphs_manifest.json +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/build_live_provider_matrix.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/seekdb_checkpoint_smoke.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/seekdb_embed_launcher.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/test-checkpoints.sh +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/test-cli-dev-samples.sh +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/test-live-provider.sh +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/test-seekdb.sh +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/test_cli_dev_studio_smoke.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/test_cli_embed_serve_smoke.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/test_cli_serve_smoke.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/verify_docker_api.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/scripts/verify_worker_concurrency.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/a2a_server.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/api/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/api/assistants.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/api/crons.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/api/runs.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/api/stateless_runs.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/api/store.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/api/streaming.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/api/threads.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/constants.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/a2a_config.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/app_loader.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/auth_deps.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/auth_middleware.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/config_file.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/content_type_fix.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/cors_config.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/http_config.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/mcp_config.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/oceanbase_checkpointer.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/orm.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/runtime_store.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/core/store_config.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/main.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/mcp_server.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/models/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/models/api.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/models/auth.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/models/protocol.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/process_supervisor.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/scheduler.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/cron_models.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/cron_rrule.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/cron_scheduler.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/cron_service.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/cron_webhooks.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/default_assistants.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/executor.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/langgraph_service.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/redis_queue.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/run_executor.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/run_jobs.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/run_preparation.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/run_state.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/sample_graphs.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/sse.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/stream_modes.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/stream_persistence.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/thread_checkpoint_store.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/thread_protocol.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/services/thread_service.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/settings.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/src/agentseek_api/worker.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/conftest.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/__init__.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/conftest.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/e2e_inprocess_flow.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/e2e_live_http_flow.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/e2e_live_http_multi_graph.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/e2e_live_http_resume_flow.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/fixtures/langgraph.store-e2e.json +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/live_provider_helpers.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/test_a2a_live.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/test_cron_api_live.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/test_cron_scheduler_live.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/test_langsmith_compat_live.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/test_live_provider_api.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/test_live_provider_mcp.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/test_mcp_live.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/e2e/test_real_api_flow.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/fixtures/runtime_settings_probe/sitecustomize.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/fixtures/termination_tree.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_a2a_endpoint.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_agent_card.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_agents_aliases.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_assistants_compat.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_assistants_config_context_sync.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_assistants_crud.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_assistants_ordering.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_auth_coverage_gaps.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_auth_handlers.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_auth_route_enforcement.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_auth_scope_matrix.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_core_api_flow.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_cron_api.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_langsmith_compat_coverage.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_langsmith_compat_extra.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_live_provider_streaming.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_live_redis_queue.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_live_redis_stream_persistence.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_mcp_endpoint.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_protocol_v2_streaming.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_run_cancellation_async.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_runs_compat.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_runs_crud.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_runs_ordering.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_runs_resume.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_runs_streaming.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_runs_streaming_errors.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_runs_validation.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_runs_wait_and_get.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_runs_wait_timeout.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_scheduler_runtime.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_stateless_runs_crud.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_store_api.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_stream_persistence.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_system_endpoints.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_threads_compat.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_threads_crud.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/integration/test_threads_ordering.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_a2a_config.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_a2a_server.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_app_loader.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_assistant_routes_unit.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_auth.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_auth_deps.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_auth_internals.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_checkpoint_guards.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_content_type_fix.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_cron_rrule.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_cron_service.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_cron_webhooks.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_custom_routers.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_default_assistants.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_examples.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_executor.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_graph_manifest.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_http_config.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_langgraph_service.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_live_provider_e2e_config.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_live_provider_graphs.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_live_provider_matrix.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_mcp_config.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_mcp_server.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_oceanbase_checkpointer.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_openapi_auth_config.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_process_supervisor.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_redis_queue.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_run_controls_validation.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_run_executor.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_run_jobs.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_run_preparation.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_run_state.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_runtime_entrypoint.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_runtime_environment.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_runtime_store.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_sample_graphs.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_scheduler.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_scheduler_process.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_seekdb_checkpoint_smoke.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_seekdb_embed_launcher.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_sse_keepalive.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_store_config.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_stream_modes.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_stream_persistence_helpers.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_thread_checkpoint_store.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_thread_protocol.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_thread_routes_unit.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_thread_service.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_worker.py +0 -0
- {agentseek_api-0.2.2 → agentseek_api-0.3.0}/tests/unit/test_worker_concurrency_probe.py +0 -0
|
@@ -44,7 +44,13 @@ jobs:
|
|
|
44
44
|
run: uv sync --dev
|
|
45
45
|
|
|
46
46
|
- name: Coverage-backed unit + integration suite
|
|
47
|
-
run:
|
|
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: >-
|
|
@@ -91,7 +95,11 @@ jobs:
|
|
|
91
95
|
tests/unit/test_runtime_environment.py
|
|
92
96
|
tests/unit/test_runtime_entrypoint.py
|
|
93
97
|
tests/unit/test_process_supervisor.py
|
|
98
|
+
tests/unit/test_sqlite_checkpointer.py
|
|
99
|
+
tests/unit/test_container_policy.py
|
|
100
|
+
tests/unit/test_secure_temp.py
|
|
94
101
|
tests/integration/test_cli_runtime_processes.py
|
|
102
|
+
tests/integration/test_metadata_db_config.py
|
|
95
103
|
-q
|
|
96
104
|
|
|
97
105
|
- name: Sync embedded SeekDB extra for serve smoke
|
|
@@ -128,9 +136,15 @@ jobs:
|
|
|
128
136
|
run: uv run python scripts/test_cli_embed_serve_smoke.py
|
|
129
137
|
|
|
130
138
|
cli-docker-runtime:
|
|
131
|
-
name: CLI Docker Runtime
|
|
139
|
+
name: CLI Docker Runtime (Compose ${{ matrix.compose-version }})
|
|
132
140
|
runs-on: ubuntu-latest
|
|
133
|
-
timeout-minutes:
|
|
141
|
+
timeout-minutes: 45
|
|
142
|
+
strategy:
|
|
143
|
+
fail-fast: false
|
|
144
|
+
matrix:
|
|
145
|
+
compose-version:
|
|
146
|
+
- runner-current
|
|
147
|
+
- v2.24.0
|
|
134
148
|
steps:
|
|
135
149
|
- name: Checkout
|
|
136
150
|
uses: actions/checkout@v4
|
|
@@ -145,6 +159,21 @@ jobs:
|
|
|
145
159
|
- name: Sync dependencies
|
|
146
160
|
run: uv sync --dev
|
|
147
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
|
+
|
|
148
177
|
- name: CLI Docker smoke
|
|
149
178
|
run: make test-cli-docker
|
|
150
179
|
|
|
@@ -4,6 +4,60 @@ Notable changes to AgentSeek API are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## 0.3.0 - 2026-08-20
|
|
8
|
+
|
|
9
|
+
### Highlights
|
|
10
|
+
|
|
11
|
+
- Added the explicit `preloaded-v1` container environment contract so the host
|
|
12
|
+
remains the single owner of application environment resolution.
|
|
13
|
+
- Generated containers install and attest the exact
|
|
14
|
+
`agentseek-api[embedded]==0.3.0` runtime independently of project
|
|
15
|
+
dependencies.
|
|
16
|
+
- Hardened Docker, Compose, and build-context boundaries so application values
|
|
17
|
+
are carried only to the declared runtime target and credential-bearing source
|
|
18
|
+
files are excluded from image inputs.
|
|
19
|
+
- Defined compatible custom-image labels and runtime-manifest checks for
|
|
20
|
+
`preloaded-v1` launches.
|
|
21
|
+
|
|
22
|
+
### Upgrade notes
|
|
23
|
+
|
|
24
|
+
- Container projects that pin `agentseek-api==0.2.2`, or otherwise exclude
|
|
25
|
+
`0.3.0`, must update their dependency constraint before using generated
|
|
26
|
+
images.
|
|
27
|
+
- Custom images must publish the `preloaded-v1` environment-contract, runtime
|
|
28
|
+
manifest, distribution, and version labels; older images must keep using the
|
|
29
|
+
older launcher until migrated.
|
|
30
|
+
- `dockerfile` now writes a complete build-bundle directory. Declare only
|
|
31
|
+
reviewed project paths with `build_include`; credentialed `pip_config_file`
|
|
32
|
+
input is delivered as a BuildKit secret rather than copied into the bundle.
|
|
33
|
+
- Container application values cross only an explicit runtime boundary:
|
|
34
|
+
`--pass-env` selects the direct Docker carrier, while `compose_env` and
|
|
35
|
+
`--compose-pass-env` select the private Compose dotenv carrier. All are
|
|
36
|
+
trusted-input declarations and none authorize values to enter the build.
|
|
37
|
+
- Custom images must provide the exact `org.agentseek.environment-contract`,
|
|
38
|
+
`org.agentseek.runtime-manifest`, `org.agentseek.runtime-distribution`, and
|
|
39
|
+
`org.agentseek.runtime-version` labels and matching manifest/runtime state.
|
|
40
|
+
There is no legacy-image fallback.
|
|
41
|
+
- Release Train A shipped API 0.2.3, templates 0.1.3, and AgentSeek 0.1.3. The
|
|
42
|
+
planned Train B template/catalog release is 0.1.4. The separate planned
|
|
43
|
+
AgentSeek release is also 0.1.4; both follow their shipped 0.1.3 releases and
|
|
44
|
+
remain separate release gates.
|
|
45
|
+
|
|
46
|
+
## 0.2.3 - 2026-08-17
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- When `METADATA_DB_BACKEND=sqlite`, store completed-run snapshots in the
|
|
51
|
+
configured SQLite metadata database instead of constructing an OceanBase
|
|
52
|
+
saver and attempting a MySQL-family connection.
|
|
53
|
+
|
|
54
|
+
### Upgrade notes
|
|
55
|
+
|
|
56
|
+
- No manual schema or configuration migration is required. The
|
|
57
|
+
`agentseek_checkpoints` table is created idempotently at startup.
|
|
58
|
+
- This fix covers completed-run snapshots only. LangGraph checkpoint state
|
|
59
|
+
remains in memory when the metadata backend is SQLite.
|
|
60
|
+
|
|
7
61
|
## 0.2.2 - 2026-08-16
|
|
8
62
|
|
|
9
63
|
### Highlights
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agentseek-api
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: AgentSeek API core runtime with OceanBase checkpoints.
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Python: >=3.12
|
|
@@ -18,6 +18,7 @@ Requires-Dist: langchain>=0.3.9
|
|
|
18
18
|
Requires-Dist: langgraph-sdk>=0.3.5
|
|
19
19
|
Requires-Dist: langgraph>=1.0.6
|
|
20
20
|
Requires-Dist: mcp<2,>=1.27.1
|
|
21
|
+
Requires-Dist: packaging>=24.0
|
|
21
22
|
Requires-Dist: pydantic-settings>=2.4.0
|
|
22
23
|
Requires-Dist: pydantic>=2.8.0
|
|
23
24
|
Requires-Dist: pymysql>=1.1.0
|
|
@@ -217,7 +218,7 @@ When the server starts it prints the banner and local URLs:
|
|
|
217
218
|
╠═╣│ ┬├┤ │││ │ ╚═╗├┤ ├┤ ├┴┐
|
|
218
219
|
╩ ╩└─┘└─┘┘└┘ ┴ ╚═╝└─┘└─┘┴ ┴
|
|
219
220
|
|
|
220
|
-
AgentSeek v0.2.
|
|
221
|
+
AgentSeek v0.2.3
|
|
221
222
|
|
|
222
223
|
- 🚀 API: http://localhost:2024
|
|
223
224
|
- 📚 Docs: http://localhost:2024/docs
|
|
@@ -328,7 +329,7 @@ keys with similar names.
|
|
|
328
329
|
uv run agentseek-api dev
|
|
329
330
|
uv run agentseek-api serve --config ./langgraph.json --port 8080
|
|
330
331
|
uv run agentseek-api worker --config ./langgraph.json
|
|
331
|
-
uv run agentseek-api dockerfile --config ./langgraph.json ./
|
|
332
|
+
uv run agentseek-api dockerfile --config ./langgraph.json ./agentseek-build-bundle
|
|
332
333
|
uv run agentseek-api build --config ./langgraph.json -t agentseek-api:dev
|
|
333
334
|
uv run agentseek-api up --config ./langgraph.json --port 8123 --wait
|
|
334
335
|
uv run agentseek-api version
|
|
@@ -355,9 +356,18 @@ uv run agentseek-api version
|
|
|
355
356
|
- `build`
|
|
356
357
|
- Use `-t, --tag` to set the image tag
|
|
357
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
|
|
358
363
|
- `up`
|
|
359
364
|
- Supports `--wait`, `--image`, `--base-image`, `--postgres-uri`,
|
|
360
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`
|
|
361
371
|
|
|
362
372
|
Some LangGraph CLI-shaped flags are parsed for command compatibility but
|
|
363
373
|
rejected when their runtime behavior is not implemented yet. For mocked,
|
|
@@ -436,6 +446,40 @@ Useful config fields:
|
|
|
436
446
|
- `http.disable_a2a`: disable the A2A endpoint and agent-card discovery route
|
|
437
447
|
- `base_image`, `python_version`, `image_distro`, `pip_config_file`,
|
|
438
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 migration for 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.0`
|
|
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.
|
|
439
483
|
|
|
440
484
|
Endpoint-level LangGraph config keys such as `http` and `api_version` are
|
|
441
485
|
tolerated by the CLI layer where possible. Store config is used by the HTTP
|
|
@@ -691,7 +735,12 @@ parent api build --config ./langgraph.json -t my-api:dev
|
|
|
691
735
|
- `METADATA_DB_BACKEND=auto` normalizes drivers:
|
|
692
736
|
- PostgreSQL: `postgresql+asyncpg://...`
|
|
693
737
|
- OceanBase / MySQL: `mysql+aiomysql://...`
|
|
694
|
-
-
|
|
738
|
+
- SQLite: `sqlite+aiosqlite://...`
|
|
739
|
+
- Completed-run snapshots default to OceanBase / seekdb settings. With
|
|
740
|
+
`METADATA_DB_BACKEND=sqlite`, they are stored in the configured SQLite
|
|
741
|
+
metadata database without constructing an OceanBase saver.
|
|
742
|
+
- The SQLite metadata path still uses an in-memory LangGraph checkpointer; it
|
|
743
|
+
does not make LangGraph graph checkpoints durable.
|
|
695
744
|
- Auth: configure via `agentseek.json` `"auth.path"` or `AUTH_MODULE_PATH` env var.
|
|
696
745
|
Uses `langgraph_sdk.Auth` with `@auth.authenticate` and `@auth.on` handlers.
|
|
697
746
|
If not set, all requests pass through as default_user (noop).
|
|
@@ -185,7 +185,7 @@ When the server starts it prints the banner and local URLs:
|
|
|
185
185
|
╠═╣│ ┬├┤ │││ │ ╚═╗├┤ ├┤ ├┴┐
|
|
186
186
|
╩ ╩└─┘└─┘┘└┘ ┴ ╚═╝└─┘└─┘┴ ┴
|
|
187
187
|
|
|
188
|
-
AgentSeek v0.2.
|
|
188
|
+
AgentSeek v0.2.3
|
|
189
189
|
|
|
190
190
|
- 🚀 API: http://localhost:2024
|
|
191
191
|
- 📚 Docs: http://localhost:2024/docs
|
|
@@ -296,7 +296,7 @@ keys with similar names.
|
|
|
296
296
|
uv run agentseek-api dev
|
|
297
297
|
uv run agentseek-api serve --config ./langgraph.json --port 8080
|
|
298
298
|
uv run agentseek-api worker --config ./langgraph.json
|
|
299
|
-
uv run agentseek-api dockerfile --config ./langgraph.json ./
|
|
299
|
+
uv run agentseek-api dockerfile --config ./langgraph.json ./agentseek-build-bundle
|
|
300
300
|
uv run agentseek-api build --config ./langgraph.json -t agentseek-api:dev
|
|
301
301
|
uv run agentseek-api up --config ./langgraph.json --port 8123 --wait
|
|
302
302
|
uv run agentseek-api version
|
|
@@ -323,9 +323,18 @@ uv run agentseek-api version
|
|
|
323
323
|
- `build`
|
|
324
324
|
- Use `-t, --tag` to set the image tag
|
|
325
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
|
|
326
330
|
- `up`
|
|
327
331
|
- Supports `--wait`, `--image`, `--base-image`, `--postgres-uri`,
|
|
328
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`
|
|
329
338
|
|
|
330
339
|
Some LangGraph CLI-shaped flags are parsed for command compatibility but
|
|
331
340
|
rejected when their runtime behavior is not implemented yet. For mocked,
|
|
@@ -404,6 +413,40 @@ Useful config fields:
|
|
|
404
413
|
- `http.disable_a2a`: disable the A2A endpoint and agent-card discovery route
|
|
405
414
|
- `base_image`, `python_version`, `image_distro`, `pip_config_file`,
|
|
406
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 migration for 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.0`
|
|
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.
|
|
407
450
|
|
|
408
451
|
Endpoint-level LangGraph config keys such as `http` and `api_version` are
|
|
409
452
|
tolerated by the CLI layer where possible. Store config is used by the HTTP
|
|
@@ -659,7 +702,12 @@ parent api build --config ./langgraph.json -t my-api:dev
|
|
|
659
702
|
- `METADATA_DB_BACKEND=auto` normalizes drivers:
|
|
660
703
|
- PostgreSQL: `postgresql+asyncpg://...`
|
|
661
704
|
- OceanBase / MySQL: `mysql+aiomysql://...`
|
|
662
|
-
-
|
|
705
|
+
- SQLite: `sqlite+aiosqlite://...`
|
|
706
|
+
- Completed-run snapshots default to OceanBase / seekdb settings. With
|
|
707
|
+
`METADATA_DB_BACKEND=sqlite`, they are stored in the configured SQLite
|
|
708
|
+
metadata database without constructing an OceanBase saver.
|
|
709
|
+
- The SQLite metadata path still uses an in-memory LangGraph checkpointer; it
|
|
710
|
+
does not make LangGraph graph checkpoints durable.
|
|
663
711
|
- Auth: configure via `agentseek.json` `"auth.path"` or `AUTH_MODULE_PATH` env var.
|
|
664
712
|
Uses `langgraph_sdk.Auth` with `@auth.authenticate` and `@auth.on` handlers.
|
|
665
713
|
If not set, all requests pass through as default_user (noop).
|
|
@@ -181,7 +181,7 @@ uv run agentseek-api dev --config ./langgraph.json
|
|
|
181
181
|
╠═╣│ ┬├┤ │││ │ ╚═╗├┤ ├┤ ├┴┐
|
|
182
182
|
╩ ╩└─┘└─┘┘└┘ ┴ ╚═╝└─┘└─┘┴ ┴
|
|
183
183
|
|
|
184
|
-
AgentSeek v0.2.
|
|
184
|
+
AgentSeek v0.2.3
|
|
185
185
|
|
|
186
186
|
- 🚀 API: http://localhost:2024
|
|
187
187
|
- 📚 Docs: http://localhost:2024/docs
|
|
@@ -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 ./
|
|
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,6 +379,35 @@ 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.0`
|
|
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
|
|
@@ -623,7 +660,12 @@ parent api build --config ./langgraph.json -t my-api:dev
|
|
|
623
660
|
- `METADATA_DB_BACKEND=auto` 会对驱动进行归一化:
|
|
624
661
|
- PostgreSQL:`postgresql+asyncpg://...`
|
|
625
662
|
- OceanBase / MySQL:`mysql+aiomysql://...`
|
|
626
|
-
-
|
|
663
|
+
- SQLite:`sqlite+aiosqlite://...`
|
|
664
|
+
- 完成态 run 快照默认使用 OceanBase / seekdb 配置。当
|
|
665
|
+
`METADATA_DB_BACKEND=sqlite` 时,快照会写入已配置的 SQLite 元数据
|
|
666
|
+
数据库,且不会构造 OceanBase saver。
|
|
667
|
+
- SQLite 元数据路径仍使用内存中的 LangGraph checkpointer,不提供持久化的
|
|
668
|
+
LangGraph 图 checkpoint。
|
|
627
669
|
- 鉴权:通过 `agentseek.json` 的 `"auth.path"` 或 `AUTH_MODULE_PATH` 环境变量配置。
|
|
628
670
|
使用 `langgraph_sdk.Auth` 的 `@auth.authenticate` 与 `@auth.on` 处理器风格。
|
|
629
671
|
未配置时所有请求以 default_user 放行(noop)。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "agentseek-api"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.0"
|
|
4
4
|
description = "AgentSeek API core runtime with OceanBase checkpoints."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -27,6 +27,7 @@ dependencies = [
|
|
|
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]
|
|
@@ -53,6 +54,9 @@ dev = [
|
|
|
53
54
|
requires = ["hatchling"]
|
|
54
55
|
build-backend = "hatchling.build"
|
|
55
56
|
|
|
57
|
+
[tool.hatch.build]
|
|
58
|
+
exclude = ["/.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 = [
|
|
67
|
+
"docker: tests requiring Docker or Docker Compose",
|
|
63
68
|
"e2e: end-to-end tests against a live server and real SeekDB/OceanBase backend",
|
|
64
69
|
]
|