agentengine-sdk-python 0.8.0__py3-none-any.whl → 0.8.2__py3-none-any.whl
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.
- {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/METADATA +43 -7
- agentengine_sdk_python-0.8.2.dist-info/RECORD +778 -0
- {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/WHEEL +1 -1
- ksadk/a2a/__init__.py +2 -0
- ksadk/a2a/_space_client_events.py +381 -0
- ksadk/a2a/bootstrap.py +0 -2
- ksadk/a2a/card.py +6 -111
- ksadk/a2a/control_plane.py +239 -1
- ksadk/a2a/event_adapter.py +156 -64
- ksadk/a2a/executor.py +195 -172
- ksadk/a2a/routes.py +12 -5
- ksadk/a2a/server.py +1 -8
- ksadk/a2a/service_env.py +33 -0
- ksadk/a2a/space_client.py +43 -349
- ksadk/a2a_card.py +101 -0
- ksadk/a2ui/core.py +222 -53
- ksadk/agui/_agent_helpers.py +243 -0
- ksadk/agui/a2ui_projection.py +12 -5
- ksadk/agui/agent.py +474 -275
- ksadk/agui/config.py +11 -5
- ksadk/agui/routes.py +7 -15
- ksadk/api/client.py +530 -40
- ksadk/api/environment.py +27 -0
- ksadk/builders/code_builder.py +352 -53
- ksadk/builders/container_builder.py +71 -44
- ksadk/builders/framework_requirements.py +2 -1
- ksadk/builders/ks3_uploader.py +2 -2
- ksadk/builders/managed_runtime_builder.py +60 -28
- ksadk/cli/__init__.py +25 -0
- ksadk/cli/cmd_a2a.py +18 -31
- ksadk/cli/cmd_create.py +13 -26
- ksadk/cli/cmd_dashboard.py +15 -1
- ksadk/cli/cmd_deploy.py +28 -3
- ksadk/cli/cmd_eval.py +443 -0
- ksadk/cli/cmd_evalset.py +284 -0
- ksadk/cli/cmd_files.py +5 -1
- ksadk/cli/cmd_hermes.py +137 -163
- ksadk/cli/cmd_invoke.py +28 -38
- ksadk/cli/cmd_launch.py +12 -0
- ksadk/cli/cmd_managed_runtime.py +95 -0
- ksadk/cli/cmd_observe.py +85 -0
- ksadk/cli/cmd_openclaw.py +85 -479
- ksadk/cli/cmd_replay.py +28 -4
- ksadk/cli/cmd_run.py +29 -67
- ksadk/cli/cmd_studio.py +201 -0
- ksadk/cli/cmd_web.py +15 -6
- ksadk/cli/dry_run.py +2 -1
- ksadk/cli/env_options.py +83 -0
- ksadk/cli/global_options.py +3 -1
- ksadk/cli/hermes_env.py +151 -0
- ksadk/cli/invoke_payload.py +49 -0
- ksadk/cli/network_options.py +7 -5
- ksadk/cli/openclaw_env.py +458 -0
- ksadk/cli/runtime_bootstrap.py +51 -0
- ksadk/cli/ui.py +6 -0
- ksadk/cli/workflow_common.py +5 -5
- ksadk/codex/__init__.py +3 -3
- ksadk/codex/client.py +833 -49
- ksadk/codex/phase.py +1 -1
- ksadk/codex/runtime.py +720 -127
- ksadk/common/kop_client.py +232 -0
- ksadk/configs/__init__.py +1 -3
- ksadk/configs/env_registry.py +244 -45
- ksadk/configs/env_registry_pcm.py +181 -0
- ksadk/configs/env_var_spec.py +18 -0
- ksadk/configs/global_config.py +6 -1
- ksadk/configs/settings.py +5 -108
- ksadk/context_engine/__init__.py +98 -0
- ksadk/context_engine/assembler.py +176 -0
- ksadk/context_engine/baseline.py +419 -0
- ksadk/context_engine/cache_observability.py +228 -0
- ksadk/context_engine/capabilities.py +443 -0
- ksadk/context_engine/contributors.py +344 -0
- ksadk/context_engine/hosted_pipeline.py +417 -0
- ksadk/context_engine/models.py +117 -0
- ksadk/context_engine/planner.py +698 -0
- ksadk/context_engine/policies.py +319 -0
- ksadk/context_engine/projection.py +31 -0
- ksadk/context_engine/shadow_plan.py +266 -0
- ksadk/context_engine/tokenizer.py +164 -0
- ksadk/conversations/__init__.py +85 -94
- ksadk/conversations/context.py +126 -6
- ksadk/conversations/message_projection.py +292 -28
- ksadk/conversations/model_context.py +49 -3
- ksadk/conversations/runtime_compaction.py +207 -5
- ksadk/conversations/runtime_input.py +193 -3
- ksadk/conversations/runtime_invocation.py +81 -3
- ksadk/conversations/runtime_observability.py +157 -4
- ksadk/conversations/runtime_payloads.py +42 -0
- ksadk/conversations/runtime_preparation.py +280 -2
- ksadk/conversations/runtime_resume.py +71 -32
- ksadk/conversations/runtime_stream_events.py +94 -9
- ksadk/conversations/runtime_streaming.py +175 -22
- ksadk/conversations/semantic_summary.py +311 -1
- ksadk/conversations/session_lock.py +51 -0
- ksadk/deployment/env_forward.py +72 -0
- ksadk/deployment/managed_runtime.py +38 -0
- ksadk/deployment/manager.py +24 -8
- ksadk/deployment/providers/serverless.py +228 -92
- ksadk/evaluation/__init__.py +116 -0
- ksadk/evaluation/a2a_adapter.py +452 -0
- ksadk/evaluation/adapters.py +67 -0
- ksadk/evaluation/agent_eval_client.py +395 -0
- ksadk/evaluation/cloud_binding.py +80 -0
- ksadk/evaluation/cloud_converter.py +194 -0
- ksadk/evaluation/cloud_service.py +199 -0
- ksadk/evaluation/contracts.py +478 -0
- ksadk/evaluation/evalset.py +351 -0
- ksadk/evaluation/evaluators.py +627 -0
- ksadk/evaluation/evidence.py +258 -0
- ksadk/evaluation/executor.py +143 -0
- ksadk/evaluation/local_adapter.py +550 -0
- ksadk/evaluation/service_env.py +27 -0
- ksadk/evaluation/storage.py +68 -0
- ksadk/evaluation/studio_build_adapter.py +253 -0
- ksadk/evaluation/target.py +82 -0
- ksadk/events/__init__.py +13 -13
- ksadk/events/_v1_compat/__init__.py +1 -0
- ksadk/events/_v1_compat/models.py +299 -0
- ksadk/events/_v1_compat/parser.py +247 -0
- ksadk/events/_v1_compat/projection.py +753 -0
- ksadk/events/adapters/__init__.py +34 -0
- ksadk/events/adapters/_a2a_snapshot.py +622 -0
- ksadk/events/adapters/_a2a_support.py +275 -0
- ksadk/events/adapters/_codex_interactions.py +375 -0
- ksadk/events/adapters/_codex_items.py +801 -0
- ksadk/events/adapters/_codex_validators.py +311 -0
- ksadk/events/adapters/_langgraph_support.py +785 -0
- ksadk/events/adapters/a2a.py +841 -0
- ksadk/events/adapters/adk.py +503 -0
- ksadk/events/adapters/codex.py +717 -0
- ksadk/events/adapters/langgraph.py +745 -0
- ksadk/events/canonical.py +440 -0
- ksadk/events/canonical_replay.py +497 -0
- ksadk/events/canonical_store.py +468 -0
- ksadk/events/cold_recovery.py +257 -0
- ksadk/events/content.py +89 -0
- ksadk/events/identity.py +86 -0
- ksadk/events/pipeline.py +455 -0
- ksadk/events/projections.py +66 -0
- ksadk/events/reducer.py +661 -0
- ksadk/events/replay.py +3 -36
- ksadk/events/runtime_event.py +20 -256
- ksadk/events/session_event.py +324 -0
- ksadk/events/store.py +3 -316
- ksadk/events/v1_compat.py +41 -0
- ksadk/harness/__init__.py +3 -2
- ksadk/harness/app.py +114 -123
- ksadk/harness/config.py +1 -1
- ksadk/harness/runtime.py +467 -0
- ksadk/hermes_terminal.py +5 -0
- ksadk/identity/resolver.py +4 -3
- ksadk/interaction/__init__.py +28 -0
- ksadk/interaction/contracts.py +136 -0
- ksadk/interaction/ledger.py +189 -0
- ksadk/interaction/provider.py +122 -0
- ksadk/interaction/providers/__init__.py +52 -0
- ksadk/interaction/providers/adk.py +40 -0
- ksadk/interaction/providers/codex.py +94 -0
- ksadk/interaction/providers/langgraph.py +58 -0
- ksadk/kernel/__init__.py +117 -0
- ksadk/kernel/authorization.py +258 -0
- ksadk/kernel/bootstrap.py +1074 -0
- ksadk/kernel/contract_fingerprints.py +61 -0
- ksadk/kernel/contracts.py +362 -0
- ksadk/kernel/control.py +219 -0
- ksadk/kernel/errors.py +79 -0
- ksadk/kernel/ingress.py +1102 -0
- ksadk/kernel/mapping.py +111 -0
- ksadk/kernel/memory_store.py +1133 -0
- ksadk/kernel/postgres_store.py +1756 -0
- ksadk/kernel/recovery.py +452 -0
- ksadk/kernel/runtime_identity.py +103 -0
- ksadk/kernel/sql/001_agent_kernel.sql +120 -0
- ksadk/kernel/sqlite_store.py +1410 -0
- ksadk/kernel/state.py +145 -0
- ksadk/kernel/store.py +232 -0
- ksadk/kernel/worker.py +953 -0
- ksadk/knowledge_base/client.py +22 -4
- ksadk/knowledge_base/service.py +32 -5
- ksadk/managed_a2a_card.py +160 -0
- ksadk/managed_runtime.py +16 -9
- ksadk/memory/__init__.py +61 -0
- ksadk/memory/adk/backends/base_ltm_backend.py +96 -1
- ksadk/memory/adk/backends/http_ltm_backend.py +14 -5
- ksadk/memory/adk/backends/inmemory_ltm_backend.py +136 -3
- ksadk/memory/adk/backends/sdk_ltm_backend.py +394 -5
- ksadk/memory/adk/backends/sqlite_ltm_backend.py +95 -0
- ksadk/memory/adk/long_term_memory.py +3 -2
- ksadk/memory/coordinator.py +461 -0
- ksadk/memory/events.py +202 -0
- ksadk/memory/extraction.py +228 -0
- ksadk/memory/ltm_backend_factory.py +16 -3
- ksadk/memory/models.py +316 -0
- ksadk/memory/policy.py +215 -0
- ksadk/memory/provider.py +47 -0
- ksadk/memory/provider_adapter.py +159 -0
- ksadk/memory/provider_resolver.py +71 -0
- ksadk/memory/providers/__init__.py +5 -0
- ksadk/memory/providers/local_sqlite.py +490 -0
- ksadk/memory/resolved_policy.py +145 -0
- ksadk/memory/service.py +198 -8
- ksadk/memory/tool.py +4 -0
- ksadk/model_proxy/bootstrap.py +16 -9
- ksadk/model_proxy/config.py +22 -1
- ksadk/model_proxy/detect.py +202 -9
- ksadk/model_proxy/namespace.py +67 -15
- ksadk/model_proxy/server.py +168 -6
- ksadk/model_proxy/transform.py +105 -3
- ksadk/observability/__init__.py +25 -0
- ksadk/observability/session_log.py +420 -0
- ksadk/observability/trajectory.py +105 -0
- ksadk/prompts/__init__.py +71 -0
- ksadk/prompts/compiler.py +215 -0
- ksadk/prompts/models.py +82 -0
- ksadk/prompts/projection.py +89 -0
- ksadk/prompts/resolved.py +137 -0
- ksadk/prompts/sources.py +233 -0
- ksadk/runners/_langgraph_runner_streams.py +822 -0
- ksadk/runners/adk_runner.py +14 -31
- ksadk/runners/base_runner.py +44 -3
- ksadk/runners/factory.py +3 -3
- ksadk/runners/langgraph_runner.py +252 -433
- ksadk/runners/utils/__init__.py +0 -10
- ksadk/runners/utils/loader.py +16 -0
- ksadk/runtime/__init__.py +67 -41
- ksadk/runtime/_runner_adapter/__init__.py +1 -0
- ksadk/runtime/_runner_adapter/stream_mapping.py +788 -0
- ksadk/runtime/adapter.py +199 -16
- ksadk/runtime/conversation_execution.py +687 -0
- ksadk/runtime/executor.py +392 -0
- ksadk/runtime/factory.py +342 -0
- ksadk/runtime/framework_adapters.py +6 -12
- ksadk/runtime/hosted_finalizer.py +268 -0
- ksadk/runtime/launch.py +61 -0
- ksadk/runtime/preprocessing.py +49 -14
- ksadk/runtime/runner_adapter.py +330 -391
- ksadk/runtime/runner_loading.py +36 -0
- ksadk/runtime/usage.py +33 -0
- ksadk/sandbox/backends/e2b.py +36 -3
- ksadk/server/__init__.py +39 -4
- ksadk/server/app.py +18 -492
- ksadk/server/composition.py +36 -2
- ksadk/server/factory.py +210 -149
- ksadk/server/routes/common.py +15 -46
- ksadk/server/routes/control.py +13 -9
- ksadk/server/routes/kernel_ingress.py +258 -0
- ksadk/server/routes/misc.py +10 -33
- ksadk/server/routes/models.py +14 -6
- ksadk/server/routes/openai_compat.py +129 -27
- ksadk/server/routes/projection.py +84 -16
- ksadk/server/routes/run.py +347 -460
- ksadk/server/routes/sessions.py +37 -40
- ksadk/server/routes/streaming.py +52 -7
- ksadk/server/routes/workspace.py +54 -21
- ksadk/server/static/assets/{ArtifactsPanel-Cjnqt-8W.js → ArtifactsPanel-DSU1sWD_.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-BqyqZfuB.js → CodeBlock-DOH6MVcn.js} +4 -4
- ksadk/server/static/assets/{MathMessageMarkdown-BpH7jiFM.js → MathMessageMarkdown-BL8my1R2.js} +4 -4
- ksadk/server/static/assets/MathMessageMarkdown-BorAY7qD.css +1 -0
- ksadk/server/static/assets/MermaidBlock-Dz4IP-Tx.js +312 -0
- ksadk/server/static/assets/NativeTerminalPanel-DUrK0JpZ.js +1 -0
- ksadk/server/static/assets/abnfDiagram-VCTEODGH-g20pFzNV.js +1 -0
- ksadk/server/static/assets/arc-C4FzinUA.js +1 -0
- ksadk/server/static/assets/architecture-7GRP2DOG-DjKratdf.js +1 -0
- ksadk/server/static/assets/architectureDiagram-5GKGNRK7-DpIqL5h4.js +36 -0
- ksadk/server/static/assets/blockDiagram-NRAW4CY4-BjkljTNz.js +129 -0
- ksadk/server/static/assets/c4Diagram-UCG6FXSJ-Dk_ieq2X.js +38 -0
- ksadk/server/static/assets/channel-4cQHKtx1.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-DmgWkESh.js +1 -0
- ksadk/server/static/assets/{chunk-FMBD7UC4-BGhvzDYt.js → chunk-5VM5RSS4-BVHAchFb.js} +1 -1
- ksadk/server/static/assets/{chunk-ND2GUHAM-D98vPd-E.js → chunk-F27PBJKO-C-ipQzuS.js} +1 -1
- ksadk/server/static/assets/chunk-G27WJ6UU-C2EyJbIK.js +231 -0
- ksadk/server/static/assets/{chunk-4BX2VUAB-CsWIQRhc.js → chunk-JWPE2WC7-vYvVJb_M.js} +1 -1
- ksadk/server/static/assets/chunk-LCL6LL3I-BcI6ysPT.js +206 -0
- ksadk/server/static/assets/chunk-POPQ4Y6H-C030x_Z1.js +1 -0
- ksadk/server/static/assets/chunk-RHFEMEQ7-yyGpsz4n.js +168 -0
- ksadk/server/static/assets/chunk-SVP7TREG-BLTlmMU7.js +88 -0
- ksadk/server/static/assets/chunk-XXDRQBXY-C_32ArgP.js +1 -0
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-DLFd9Xi0.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-DLFd9Xi0.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-S5V4N54A-CX3yotHq.js → cose-bilkent-JH36ORCC-9YQYwdl0.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DjEM48Qp.js +1 -0
- ksadk/server/static/assets/cynefinDiagram-5FMLGOSQ-ErLF5N13.js +62 -0
- ksadk/server/static/assets/cytoscape.esm-CyCl8rPi.js +321 -0
- ksadk/server/static/assets/dagre-3AP2YEHR-DFiQF-6f.js +4 -0
- ksadk/server/static/assets/dagre-BuhGnRI1.js +1 -0
- ksadk/server/static/assets/diagram-S7CK7UJ4-Bt1v8-GC.js +30 -0
- ksadk/server/static/assets/diagram-UQ7AKVKN-DSCxJdBK.js +41 -0
- ksadk/server/static/assets/diagram-VSXAHHWV-DHfYwp_9.js +3 -0
- ksadk/server/static/assets/diagram-VX7I27RA-DdzD-4Le.js +24 -0
- ksadk/server/static/assets/diagram-Z3DM3KII-Du-nAJ9F.js +24 -0
- ksadk/server/static/assets/{dist-D82mtD2s.js → dist-8hqcx0sU.js} +1 -1
- ksadk/server/static/assets/dist-B7seoj3d.js +1 -0
- ksadk/server/static/assets/{dist-DHn6nBzr.js → dist-BE7bu-DL.js} +1 -1
- ksadk/server/static/assets/{dist-eoW6tZXA.js → dist-BVDffZ0U.js} +1 -1
- ksadk/server/static/assets/{dist-C2xjE7cO.js → dist-BX8z72IC.js} +1 -1
- ksadk/server/static/assets/{dist-CgF3fj15.js → dist-Bf2M8m3N.js} +1 -1
- ksadk/server/static/assets/{dist-Bs-jQcRX.js → dist-BjU6y-A2.js} +1 -1
- ksadk/server/static/assets/{dist-Djgl2wVZ.js → dist-BytlxIDT.js} +1 -1
- ksadk/server/static/assets/{dist-CVQRZjPu.js → dist-CSh_DE14.js} +1 -1
- ksadk/server/static/assets/{dist-6CVKuTAe.js → dist-CXYYBw3_.js} +1 -1
- ksadk/server/static/assets/{dist-DlzCRy0S.js → dist-C_wsv-Qd.js} +1 -1
- ksadk/server/static/assets/{dist-DF06ORQo.js → dist-ClxGviKw.js} +1 -1
- ksadk/server/static/assets/{dist-Cf23NY4L.js → dist-CttYUqzS.js} +1 -1
- ksadk/server/static/assets/{dist-ivOya1LD.js → dist-DNp6rLRA.js} +1 -1
- ksadk/server/static/assets/{dist-BibcG1V9.js → dist-DUX-id_F.js} +1 -1
- ksadk/server/static/assets/{dist-BUHRxvDG.js → dist-DmldrHd_.js} +1 -1
- ksadk/server/static/assets/{dist-BZ9n9AjO.js → dist-DnfXs8Vn.js} +2 -2
- ksadk/server/static/assets/{dist-DqNnNFrw.js → dist-Dq9gLD7L.js} +1 -1
- ksadk/server/static/assets/{dist-CGcp2ex8.js → dist-W-TIVntx.js} +1 -1
- ksadk/server/static/assets/{dist-Cwt7koer.js → dist-dDdADKFA.js} +1 -1
- ksadk/server/static/assets/{dist-C7-3jInC.js → dist-dydu68Fl.js} +1 -1
- ksadk/server/static/assets/{dist-C99THtIA.js → dist-ngtN0DJB.js} +1 -1
- ksadk/server/static/assets/ebnfDiagram-PWID7BFC-Da9C9NO1.js +1 -0
- ksadk/server/static/assets/erDiagram-SSCWMZ5O-EAGqqR79.js +99 -0
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CMgMaJrC.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-BBKL0x3P.js +1 -0
- ksadk/server/static/assets/ganttDiagram-EL5Y4UJY-DqJsKb59.js +292 -0
- ksadk/server/static/assets/gitGraph-4MIJSDKK-Dw63mrhw.js +1 -0
- ksadk/server/static/assets/gitGraphDiagram-WWUBYQGX-B6g4dtDi.js +106 -0
- ksadk/server/static/assets/index-8ipRcQ-M.js +240 -0
- ksadk/server/static/assets/index-ByFCqjlh.css +2 -0
- ksadk/server/static/assets/info-A6RAGUB7-B6iAblII.js +1 -0
- ksadk/server/static/assets/infoDiagram-RXCK75RN-Djm_nbd5.js +2 -0
- ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-DLOHGvWw.js → ishikawaDiagram-5VMMS53U-DWya9SG2.js} +6 -6
- ksadk/server/static/assets/{journeyDiagram-JHISSGLW-BIzKeejT.js → journeyDiagram-EYS64GPL-DutxhSNI.js} +6 -6
- ksadk/server/static/assets/{kanban-definition-UN3LZRKU-BWHoFSw2.js → kanban-definition-3QL26DDD-DJdOF8Fm.js} +10 -10
- ksadk/server/static/assets/katex-vFWytM5c.js +257 -0
- ksadk/server/static/assets/{linear-CvMBw9cA.js → linear-BHjG8b-J.js} +1 -1
- ksadk/server/static/assets/mermaid-parser.core-KGSy4jWT.js +166 -0
- ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-CSAQxEAe.js → mindmap-definition-FBJOCRG2-9-HC88D4.js} +29 -29
- ksadk/server/static/assets/packet-AYTQ26CC-BOYAipuq.js +1 -0
- ksadk/server/static/assets/pegDiagram-XKGWAZYB-DrEZd4fD.js +1 -0
- ksadk/server/static/assets/pie-WAS4IAKB-Ctq0Kbku.js +1 -0
- ksadk/server/static/assets/pieDiagram-E7YTZNPT-DpjqOFFp.js +39 -0
- ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-CxIR4JXI.js → quadrantDiagram-AXDQQJYC-BiNhgOXX.js} +6 -6
- ksadk/server/static/assets/radar-RG4KPBEZ-DN0-ul_0.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-C6cC_to0.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BimjIuRc.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-CvY65ABq.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-D72Iq_Tv.js +1 -0
- ksadk/server/static/assets/railroadDiagram-O6MQD6OU-_Y3Ojg6G.js +1 -0
- ksadk/server/static/assets/requirementDiagram-EFPCY7ZU-DeCFdg9K.js +84 -0
- ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-DpGa6EAV.js → sankeyDiagram-P5KCCOFB-CPH75rhw.js} +7 -7
- ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-NTKNGGe5.js → sequenceDiagram-WJ2MYXX4-OEpQQdr4.js} +10 -10
- ksadk/server/static/assets/sizeCapture-X5ZJPWSS-heUErzhI.js +1 -0
- ksadk/server/static/assets/stateDiagram-HBIQ2CUA-DvA3jSMB.js +1 -0
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BgQY03nz.js +1 -0
- ksadk/server/static/assets/swimlanes-XN3QIQJK-CR-dfN_t.js +1 -0
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-DLVw3q5Q.js +8 -0
- ksadk/server/static/assets/{timeline-definition-PNZ67QCA-jqoYs3jQ.js → timeline-definition-24CTP7MA-DAVJf1TX.js} +7 -7
- ksadk/server/static/assets/treeView-Q6P3EWNA-BMpO0wsB.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-Et0aqzU3.js +1 -0
- ksadk/server/static/assets/vennDiagram-4TSXK5OY-DwM8eDkh.js +34 -0
- ksadk/server/static/assets/wardley-WFR3VGLG-CbY0mhpl.js +1 -0
- ksadk/server/static/assets/wardleyDiagram-VM6X3IG4-DZL-Zz2t.js +78 -0
- ksadk/server/static/assets/xychartDiagram-S5SC5T6Z-Dy6Yh_hu.js +7 -0
- ksadk/server/static/index.html +2 -2
- ksadk/sessions/__init__.py +26 -9
- ksadk/sessions/_local_service_sync.py +688 -0
- ksadk/sessions/_local_tables.py +21 -0
- ksadk/sessions/_postgres_schema.py +305 -0
- ksadk/sessions/_postgres_tables.py +15 -0
- ksadk/sessions/base.py +80 -1
- ksadk/sessions/in_memory.py +53 -2
- ksadk/sessions/local_service.py +63 -604
- ksadk/sessions/postgres_service.py +58 -148
- ksadk/sessions/resilient.py +35 -1
- ksadk/skills/runtime/backends/e2b.py +1 -1
- ksadk/skills/service_client.py +13 -3
- ksadk/studio/__init__.py +5 -0
- ksadk/studio/agent_avatar_assets.py +120 -0
- ksadk/studio/agent_lifecycle.py +51 -0
- ksadk/studio/api.py +1598 -0
- ksadk/studio/api_catalog_routes.py +324 -0
- ksadk/studio/api_contracts.py +286 -0
- ksadk/studio/api_helpers.py +132 -0
- ksadk/studio/api_memory_routes.py +82 -0
- ksadk/studio/authoring.py +749 -0
- ksadk/studio/authoring_coordinator.py +1017 -0
- ksadk/studio/builder.py +397 -0
- ksadk/studio/capabilities.py +368 -0
- ksadk/studio/cloud.py +2099 -0
- ksadk/studio/codex_agent_service.py +694 -0
- ksadk/studio/codex_authoring.py +469 -0
- ksadk/studio/codex_builder.py +437 -0
- ksadk/studio/codex_manifest.py +307 -0
- ksadk/studio/codex_run.py +395 -0
- ksadk/studio/compiler.py +190 -0
- ksadk/studio/contracts.py +755 -0
- ksadk/studio/errors.py +47 -0
- ksadk/studio/event_store.py +214 -0
- ksadk/studio/framework_run.py +342 -0
- ksadk/studio/hosted_kernel.py +317 -0
- ksadk/studio/identifiers.py +33 -0
- ksadk/studio/manifest_resolver.py +131 -0
- ksadk/studio/mcp_runtime.py +229 -0
- ksadk/studio/model_client.py +629 -0
- ksadk/studio/model_profile_service.py +214 -0
- ksadk/studio/operations.py +275 -0
- ksadk/studio/otel_trace.py +1060 -0
- ksadk/studio/pagination.py +182 -0
- ksadk/studio/pcm_memory.py +85 -0
- ksadk/studio/python_tool_inspection.py +183 -0
- ksadk/studio/repository.py +327 -0
- ksadk/studio/resource_catalog.py +1260 -0
- ksadk/studio/run_service.py +1133 -0
- ksadk/studio/runtime_catalog.py +74 -0
- ksadk/studio/runtime_source.py +365 -0
- ksadk/studio/service.py +2249 -0
- ksadk/studio/shared_web.py +1004 -0
- ksadk/studio/skill_discovery.py +628 -0
- ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +3 -0
- ksadk/studio/static/assets/index-BLpcdrgW.css +1 -0
- ksadk/studio/static/assets/index-CYekR2Xv.js +260 -0
- ksadk/studio/static/assets/react-vendor-BNmTiJ-I.js +9 -0
- ksadk/studio/static/assets/rolldown-runtime-hePW80VL.js +1 -0
- ksadk/studio/static/index.html +15 -0
- ksadk/studio/templates.py +722 -0
- ksadk/studio/validator.py +265 -0
- ksadk/studio/workspace.py +135 -0
- ksadk/tools/gateway.py +9 -0
- ksadk/toolsets/__init__.py +27 -1
- ksadk/toolsets/a2a.py +426 -0
- ksadk/tracing/__init__.py +19 -21
- ksadk/tracing/setup.py +317 -403
- ksadk/tracing/span_utils.py +0 -44
- ksadk/version.py +1 -1
- ksadk_runtime_common/memory_backend/registry.py +56 -56
- ksadk_runtime_common/schemas/runtime_event_v1.json +37 -0
- ksadk_runtime_common/schemas/runtime_event_v2.json +271 -0
- ksadk_runtime_common/workspace_files/router.py +8 -2
- agentengine_sdk_python-0.8.0.dist-info/RECORD +0 -578
- ksadk/a2a/card_builder.py +0 -64
- ksadk/a2a/client.py +0 -309
- ksadk/events/parser.py +0 -191
- ksadk/harness/runner.py +0 -211
- ksadk/runners/codex_runner.py +0 -132
- ksadk/runners/utils/langfuse.py +0 -230
- ksadk/server/static/assets/MathMessageMarkdown-DeYh8QPr.css +0 -1
- ksadk/server/static/assets/MermaidBlock-DWuxETaJ.js +0 -303
- ksadk/server/static/assets/NativeTerminalPanel-MDTopWMO.js +0 -1
- ksadk/server/static/assets/arc-CFKwSk_B.js +0 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-CynqOWjZ.js +0 -1
- ksadk/server/static/assets/architectureDiagram-3BPJPVTR-Dej8jX8c.js +0 -36
- ksadk/server/static/assets/blockDiagram-GPEHLZMM-1F64jqvy.js +0 -132
- ksadk/server/static/assets/c4Diagram-AAUBKEIU-9q7AUAKb.js +0 -10
- ksadk/server/static/assets/channel-iUGv2N24.js +0 -1
- ksadk/server/static/assets/chunk-2J33WTMH-6qgwJm7Q.js +0 -1
- ksadk/server/static/assets/chunk-55IACEB6-BK8paA20.js +0 -1
- ksadk/server/static/assets/chunk-727SXJPM-B-JEhy7h.js +0 -206
- ksadk/server/static/assets/chunk-AQP2D5EJ-DYBvMHAa.js +0 -231
- ksadk/server/static/assets/chunk-QZHKN3VN-YQIEXeF6.js +0 -1
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-CDAUuoXK.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-CDAUuoXK.js +0 -1
- ksadk/server/static/assets/cytoscape.esm-DelgaX4f.js +0 -321
- ksadk/server/static/assets/dagre-BM42HDAG-C7TguAWo.js +0 -4
- ksadk/server/static/assets/dagre-Bx709z4p.js +0 -1
- ksadk/server/static/assets/diagram-2AECGRRQ-Dd17_kws.js +0 -43
- ksadk/server/static/assets/diagram-5GNKFQAL-DVIClIil.js +0 -10
- ksadk/server/static/assets/diagram-KO2AKTUF-Df_3gYQa.js +0 -3
- ksadk/server/static/assets/diagram-LMA3HP47-BhLk6ZtA.js +0 -24
- ksadk/server/static/assets/diagram-OG6HWLK6-D4GNGvuu.js +0 -24
- ksadk/server/static/assets/dist-DyvYLMW9.js +0 -1
- ksadk/server/static/assets/erDiagram-TEJ5UH35-CnfRcY2M.js +0 -85
- ksadk/server/static/assets/eventmodeling-FCH6USID-ChYO-ijM.js +0 -1
- ksadk/server/static/assets/flowDiagram-I6XJVG4X-DGaJjGNJ.js +0 -162
- ksadk/server/static/assets/ganttDiagram-6RSMTGT7-DpCoB2g9.js +0 -292
- ksadk/server/static/assets/gitGraph-WXDBUCRP-BN_0Fk-j.js +0 -1
- ksadk/server/static/assets/gitGraphDiagram-PVQCEYII-9IKVFBVT.js +0 -106
- ksadk/server/static/assets/graphlib-B8gBHxth.js +0 -1
- ksadk/server/static/assets/index-QSwCHuB8.js +0 -177
- ksadk/server/static/assets/index-jOPmTOZH.css +0 -2
- ksadk/server/static/assets/info-J43DQDTF-Cp6o3vId.js +0 -1
- ksadk/server/static/assets/infoDiagram-5YYISTIA-CYIIsb8y.js +0 -2
- ksadk/server/static/assets/katex-DATssjp1.js +0 -265
- ksadk/server/static/assets/mermaid-parser.core-mGAcEwcq.js +0 -161
- ksadk/server/static/assets/packet-YPE3B663-wQzct3cT.js +0 -1
- ksadk/server/static/assets/pie-LRSECV5Y-BgTQiv-9.js +0 -1
- ksadk/server/static/assets/pieDiagram-4H26LBE5-By-ra07M.js +0 -30
- ksadk/server/static/assets/radar-GUYGQ44K-BIq5fXsn.js +0 -1
- ksadk/server/static/assets/requirementDiagram-4Y6WPE33-DpW90iu3.js +0 -84
- ksadk/server/static/assets/stateDiagram-AJRCARHV-DGpd9yFG.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-B3o579IQ.js +0 -1
- ksadk/server/static/assets/treeView-BLDUP644-Dqi-E0EM.js +0 -1
- ksadk/server/static/assets/treemap-LRROVOQU-ClQP9CJ9.js +0 -1
- ksadk/server/static/assets/vennDiagram-CIIHVFJN-l3Z7-wbP.js +0 -34
- ksadk/server/static/assets/wardley-L42UT6IY-8XLvnNIs.js +0 -1
- ksadk/server/static/assets/wardleyDiagram-YWT4CUSO-BR54GPmr.js +0 -78
- ksadk/server/static/assets/xychartDiagram-2RQKCTM6-SkiH8GsK.js +0 -7
- ksadk/tracing/exporters/langfuse_exporter.py +0 -460
- {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/top_level.txt +0 -0
|
@@ -6,6 +6,7 @@ Serverless Provider - 金山云 Serverless 计算引擎 (AgentEngine 托管)
|
|
|
6
6
|
- Deploy 阶段: 客户端调用 AgentEngine Server API 发起部署
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
+
import hashlib
|
|
9
10
|
import json
|
|
10
11
|
import logging
|
|
11
12
|
import os
|
|
@@ -17,6 +18,7 @@ import click
|
|
|
17
18
|
import yaml
|
|
18
19
|
|
|
19
20
|
from ksadk.api import AgentEngineClient, DryRunExit
|
|
21
|
+
from ksadk.builders.base import BaseBuilder
|
|
20
22
|
from ksadk.builders.code_builder import CodeBuilder
|
|
21
23
|
from ksadk.builders.container_builder import (
|
|
22
24
|
ContainerBuilder,
|
|
@@ -24,7 +26,6 @@ from ksadk.builders.container_builder import (
|
|
|
24
26
|
resolve_registry_credentials,
|
|
25
27
|
)
|
|
26
28
|
from ksadk.builders.ks3_uploader import KS3Uploader
|
|
27
|
-
from ksadk.configs.env_registry import ENV_VAR_REGISTRY
|
|
28
29
|
from ksadk.configs.global_config import get_env_from_global_config
|
|
29
30
|
from ksadk.configs.settings import DEFAULT_RUNTIME_TIMEZONE
|
|
30
31
|
from ksadk.deployment.agent_access import get_latest_agent_access
|
|
@@ -35,55 +36,46 @@ from ksadk.deployment.base import (
|
|
|
35
36
|
DeployTarget,
|
|
36
37
|
PackageInfo,
|
|
37
38
|
)
|
|
39
|
+
from ksadk.deployment.env_forward import should_forward_process_env
|
|
38
40
|
from ksadk.deployment.registry import DeployProviderRegistry
|
|
39
41
|
from ksadk.deployment.ui_config import resolve_ui_config, ui_config_to_state_fields
|
|
40
42
|
|
|
41
43
|
logger = logging.getLogger(__name__)
|
|
42
44
|
|
|
45
|
+
# CodeBuilder archives put the runnable application below ``runtime/``. The
|
|
46
|
+
# command and checksum travel together: sending the command for an arbitrary
|
|
47
|
+
# legacy ``--ks3-path`` archive could change its launch semantics, while a
|
|
48
|
+
# fresh locally built archive can be attested and safely admitted as v1.
|
|
49
|
+
_HOSTED_CODE_COMMAND = (
|
|
50
|
+
"ksadk",
|
|
51
|
+
"web",
|
|
52
|
+
"/app/code/runtime",
|
|
53
|
+
"--port",
|
|
54
|
+
"8080",
|
|
55
|
+
"--host",
|
|
56
|
+
"0.0.0.0",
|
|
57
|
+
"--no-open",
|
|
58
|
+
)
|
|
43
59
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
) | frozenset(
|
|
60
|
+
|
|
61
|
+
# 转发规则已迁移至 ksadk.deployment.env_forward(hermes/openclaw deploy 共用);
|
|
62
|
+
# 保留私有别名以兼容既有调用与测试。
|
|
63
|
+
_should_forward_process_env = should_forward_process_env
|
|
64
|
+
|
|
65
|
+
# These values authenticate or configure the local deploy/build control plane.
|
|
66
|
+
# They must never enter an Agent runtime merely because they exist in global
|
|
67
|
+
# config, the caller's shell, or a project .env file. A caller can still opt in
|
|
68
|
+
# deliberately through explicit ``--env`` / ``--env-file`` values.
|
|
69
|
+
_CONTROL_PLANE_ONLY_ENV_KEYS = frozenset(
|
|
57
70
|
{
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"OPENAI_API_KEY",
|
|
62
|
-
"OPENAI_BASE_URL",
|
|
63
|
-
"OPENAI_MODEL_NAME",
|
|
64
|
-
"SKILL_SPACE_ID",
|
|
71
|
+
"KCR_PASSWORD",
|
|
72
|
+
"KCR_REGISTRY",
|
|
73
|
+
"KCR_USERNAME",
|
|
65
74
|
"KSYUN_ACCESS_KEY",
|
|
66
75
|
"KSYUN_ACCOUNT_ID",
|
|
67
|
-
"KSYUN_REGION",
|
|
68
76
|
"KSYUN_SECRET_KEY",
|
|
69
77
|
}
|
|
70
78
|
)
|
|
71
|
-
_DEPLOY_PROCESS_ENV_PREFIXES = ("KSADK_", "OPENAI_", "KSYUN_", "E2B_")
|
|
72
|
-
_DEPLOY_PROCESS_ENV_DENYLIST = frozenset(
|
|
73
|
-
{spec.name for spec in ENV_VAR_REGISTRY if spec.module in {"builders", "cli", "configs", "web"}}
|
|
74
|
-
) | frozenset(
|
|
75
|
-
{
|
|
76
|
-
"KSADK_GLOBAL_CONFIG_ENV_KEYS",
|
|
77
|
-
"KSADK_UPDATED_AT",
|
|
78
|
-
"KSADK_VERSION",
|
|
79
|
-
}
|
|
80
|
-
)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
def _should_forward_process_env(name: str) -> bool:
|
|
84
|
-
if name in _DEPLOY_PROCESS_ENV_DENYLIST:
|
|
85
|
-
return False
|
|
86
|
-
return name in _DEPLOY_PROCESS_ENV_ALLOWLIST or name.startswith(_DEPLOY_PROCESS_ENV_PREFIXES)
|
|
87
79
|
|
|
88
80
|
|
|
89
81
|
@DeployProviderRegistry.register("serverless")
|
|
@@ -193,23 +185,63 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
193
185
|
) -> tuple[Dict[str, str], bool, int]:
|
|
194
186
|
"""读取部署时注入到托管运行时的环境变量。
|
|
195
187
|
|
|
196
|
-
|
|
197
|
-
Code/Container 制品打包,只通过 deploy payload 注入到 Pod 环境变量。
|
|
188
|
+
优先级: --env/--env-file (explicit) > shell env (转发白名单前缀) > 项目 .env > 全局配置。
|
|
189
|
+
真实 .env 文件不会随 Code/Container 制品打包,只通过 deploy payload 注入到 Pod 环境变量。
|
|
198
190
|
"""
|
|
191
|
+
shell_keys = set(os.environ)
|
|
199
192
|
env_vars: Dict[str, str] = dict(get_env_from_global_config())
|
|
200
193
|
env_file = Path(project_dir) / ".env"
|
|
201
194
|
project_env_count = 0
|
|
202
|
-
for key, value in sorted(os.environ.items()):
|
|
203
|
-
if value and _should_forward_process_env(key):
|
|
204
|
-
env_vars.setdefault(key, value)
|
|
205
195
|
if env_file.exists():
|
|
206
196
|
project_env = cls._load_project_env_vars(env_file)
|
|
207
197
|
project_env_count = len(project_env)
|
|
208
|
-
|
|
209
|
-
|
|
198
|
+
# auto .env 覆盖 global_config,但不覆盖 shell (shell 优先于 auto .env)
|
|
199
|
+
for key, value in project_env.items():
|
|
200
|
+
if key not in shell_keys:
|
|
201
|
+
env_vars[key] = value
|
|
202
|
+
# shell 转发 (仅 KSADK_/OPENAI_/KSYUN_/E2B_ 前缀 + 白名单);shell 覆盖 auto .env 与全局配置
|
|
203
|
+
for key, value in sorted(os.environ.items()):
|
|
204
|
+
if value and _should_forward_process_env(key):
|
|
205
|
+
env_vars[key] = value
|
|
206
|
+
explicit = dict(explicit_env_vars or {})
|
|
207
|
+
for key in _CONTROL_PLANE_ONLY_ENV_KEYS:
|
|
208
|
+
if key not in explicit:
|
|
209
|
+
env_vars.pop(key, None)
|
|
210
|
+
# explicit --env/--env-file (显式 CLI 意图最高,可选择性注入运行时凭证)
|
|
211
|
+
env_vars.update(explicit)
|
|
210
212
|
env_vars.setdefault("TZ", DEFAULT_RUNTIME_TIMEZONE)
|
|
213
|
+
env_vars.setdefault("KSADK_DEPLOYMENT_MODE", "ksadk_managed_cloud")
|
|
211
214
|
return env_vars, env_file.exists(), project_env_count
|
|
212
215
|
|
|
216
|
+
@staticmethod
|
|
217
|
+
def _bind_managed_runtime_contract_env(
|
|
218
|
+
env_vars: Dict[str, str],
|
|
219
|
+
runtime_config: Optional[Dict[str, str]],
|
|
220
|
+
) -> Dict[str, str]:
|
|
221
|
+
"""Keep the deployed provider model aligned with the admitted manifest.
|
|
222
|
+
|
|
223
|
+
Credential env files are reusable across projects and commonly contain
|
|
224
|
+
``OPENAI_MODEL_NAME``. For a ManagedRuntime declaration, however, the
|
|
225
|
+
manifest's ``model`` is the admitted source of truth. Letting a generic
|
|
226
|
+
credential file override it makes capability probing and the actual
|
|
227
|
+
provider request select different upstream protocols.
|
|
228
|
+
"""
|
|
229
|
+
|
|
230
|
+
if not runtime_config:
|
|
231
|
+
return env_vars
|
|
232
|
+
try:
|
|
233
|
+
manifest = yaml.safe_load(str(runtime_config.get("manifest") or ""))
|
|
234
|
+
except yaml.YAMLError:
|
|
235
|
+
return env_vars
|
|
236
|
+
if not isinstance(manifest, dict):
|
|
237
|
+
return env_vars
|
|
238
|
+
model = str(manifest.get("model") or "").strip()
|
|
239
|
+
if not model:
|
|
240
|
+
return env_vars
|
|
241
|
+
bound = dict(env_vars)
|
|
242
|
+
bound["OPENAI_MODEL_NAME"] = model
|
|
243
|
+
return bound
|
|
244
|
+
|
|
213
245
|
@staticmethod
|
|
214
246
|
def _inject_ui_runtime_env(
|
|
215
247
|
env_vars: Dict[str, str],
|
|
@@ -257,6 +289,18 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
257
289
|
with open(metadata_file, "w", encoding="utf-8") as f:
|
|
258
290
|
json.dump(payload, f, indent=2, ensure_ascii=False)
|
|
259
291
|
|
|
292
|
+
@staticmethod
|
|
293
|
+
def _sha256_file(path: Path) -> str:
|
|
294
|
+
digest = hashlib.sha256()
|
|
295
|
+
with path.open("rb") as source:
|
|
296
|
+
for chunk in iter(lambda: source.read(1024 * 1024), b""):
|
|
297
|
+
digest.update(chunk)
|
|
298
|
+
return digest.hexdigest()
|
|
299
|
+
|
|
300
|
+
@staticmethod
|
|
301
|
+
def _is_sha256_digest(value: str) -> bool:
|
|
302
|
+
return len(value) == 64 and all(char in "0123456789abcdef" for char in value.lower())
|
|
303
|
+
|
|
260
304
|
@staticmethod
|
|
261
305
|
def _serialize_network_config(
|
|
262
306
|
target: DeployTarget, *, is_update: bool = False
|
|
@@ -387,23 +431,9 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
387
431
|
artifact_type = target.extra.get("artifact_type", "Code")
|
|
388
432
|
|
|
389
433
|
if artifact_type == "ManagedRuntime":
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
from ksadk.builders.managed_runtime_builder import ManagedRuntimeBuilder
|
|
394
|
-
|
|
395
|
-
builder = ManagedRuntimeBuilder(
|
|
396
|
-
Path(package_info.project_dir),
|
|
397
|
-
config=target.extra.copy(),
|
|
398
|
-
runtime_version=str(target.extra.get("runtime_version") or ""),
|
|
399
|
-
)
|
|
400
|
-
build_result = builder.build()
|
|
401
|
-
if not build_result.success:
|
|
402
|
-
raise Exception(f"构建失败: {build_result.error_message}")
|
|
403
|
-
package_info.metadata.update(build_result.metadata)
|
|
404
|
-
if build_result.artifact_path is not None:
|
|
405
|
-
package_info.metadata["managed_manifest_path"] = str(build_result.artifact_path)
|
|
406
|
-
return package_info
|
|
434
|
+
from ksadk.deployment.managed_runtime import build_managed_runtime_package
|
|
435
|
+
|
|
436
|
+
return build_managed_runtime_package(package_info, target)
|
|
407
437
|
|
|
408
438
|
if artifact_type == "Code":
|
|
409
439
|
# 1. 检查是否已有 KS3 路径
|
|
@@ -419,9 +449,20 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
419
449
|
return package_info
|
|
420
450
|
|
|
421
451
|
# 如果没有 no_cache 且有缓存,才使用缓存
|
|
422
|
-
|
|
452
|
+
cached_checksum = str(package_info.metadata.get("code_checksum") or "").strip()
|
|
453
|
+
if (
|
|
454
|
+
not no_cache
|
|
455
|
+
and not repackage
|
|
456
|
+
and cached_ks3_path
|
|
457
|
+
and self._is_sha256_digest(cached_checksum)
|
|
458
|
+
):
|
|
423
459
|
logger.info(f"Using cached bundle: {cached_ks3_path}")
|
|
424
460
|
return package_info
|
|
461
|
+
if cached_ks3_path and not no_cache and not repackage:
|
|
462
|
+
# Older metadata had only a KS3 URI. Re-upload instead of
|
|
463
|
+
# silently creating a legacy agent that cannot be admitted to
|
|
464
|
+
# the hosted Kernel path.
|
|
465
|
+
click.echo(" 缓存代码包缺少 SHA-256,重新打包并上传以启用 Kernel 准入")
|
|
425
466
|
|
|
426
467
|
# 2. 构建 ZIP 包
|
|
427
468
|
|
|
@@ -430,20 +471,24 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
430
471
|
builder_config["no_cache"] = no_cache
|
|
431
472
|
builder_config["repackage"] = repackage
|
|
432
473
|
|
|
474
|
+
artifact_builder: BaseBuilder
|
|
433
475
|
if artifact_type == "ManagedRuntime":
|
|
434
476
|
from ksadk.builders.managed_runtime_builder import ManagedRuntimeBuilder
|
|
435
477
|
|
|
436
|
-
|
|
478
|
+
artifact_builder = ManagedRuntimeBuilder(
|
|
437
479
|
Path(package_info.project_dir),
|
|
438
480
|
config=builder_config,
|
|
439
481
|
runtime_version=str(target.extra.get("runtime_version") or ""),
|
|
440
482
|
)
|
|
441
483
|
else:
|
|
442
484
|
# CodeBuilder 直接操作原始 project_dir。
|
|
443
|
-
|
|
485
|
+
artifact_builder = CodeBuilder(
|
|
486
|
+
Path(package_info.project_dir),
|
|
487
|
+
config=builder_config,
|
|
488
|
+
)
|
|
444
489
|
|
|
445
490
|
# 执行构建
|
|
446
|
-
build_result =
|
|
491
|
+
build_result = artifact_builder.build()
|
|
447
492
|
|
|
448
493
|
if not build_result.success:
|
|
449
494
|
raise Exception(f"构建失败: {build_result.error_message}")
|
|
@@ -452,6 +497,7 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
452
497
|
if zip_path is None:
|
|
453
498
|
raise RuntimeError("代码构建成功但未生成 artifact_path")
|
|
454
499
|
package_info.metadata.update(build_result.metadata)
|
|
500
|
+
package_info.metadata["code_checksum"] = self._sha256_file(zip_path)
|
|
455
501
|
if build_result.metadata.get("manifest_sha256"):
|
|
456
502
|
target.extra["manifest_sha256"] = build_result.metadata["manifest_sha256"]
|
|
457
503
|
# click.echo(f" ✅ ZIP 已生成: {zip_path}")
|
|
@@ -692,6 +738,10 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
692
738
|
runtime_config = {
|
|
693
739
|
"name": str(target.extra.get("runtime_name") or "").strip(),
|
|
694
740
|
"version": str(target.extra.get("runtime_version") or "").strip(),
|
|
741
|
+
"manifest_sha256": str(target.extra.get("manifest_sha256") or "").strip(),
|
|
742
|
+
"manifest": str(
|
|
743
|
+
package_info.metadata.get("managed_runtime_manifest") or ""
|
|
744
|
+
),
|
|
695
745
|
}
|
|
696
746
|
missing = [key for key, value in runtime_config.items() if not value]
|
|
697
747
|
if missing:
|
|
@@ -700,6 +750,11 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
700
750
|
+ ", ".join(f"runtime_config.{key}" for key in missing)
|
|
701
751
|
)
|
|
702
752
|
|
|
753
|
+
code_checksum = str(package_info.metadata.get("code_checksum") or "").strip()
|
|
754
|
+
if not self._is_sha256_digest(code_checksum):
|
|
755
|
+
code_checksum = ""
|
|
756
|
+
code_command = list(_HOSTED_CODE_COMMAND) if code_backed and code_checksum else None
|
|
757
|
+
|
|
703
758
|
try:
|
|
704
759
|
# 获取 dry_run 标识
|
|
705
760
|
is_dry_run = target.extra.get("dry_run", False)
|
|
@@ -707,34 +762,101 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
707
762
|
async with AgentEngineClient(region=target.region, dry_run=is_dry_run) as client:
|
|
708
763
|
agent_exists = False
|
|
709
764
|
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
#
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
765
|
+
# 显式 --agent-id:优先于本地 state,用于状态丢失后重新关联已有 Agent。
|
|
766
|
+
explicit_agent_id = (target.extra.get("agent_id") or "").strip() or None
|
|
767
|
+
if explicit_agent_id:
|
|
768
|
+
if existing_agent_id and existing_agent_id != explicit_agent_id:
|
|
769
|
+
click.secho(
|
|
770
|
+
f" ⚠️ --agent-id ({explicit_agent_id}) 与本地状态 "
|
|
771
|
+
f"({existing_agent_id}) 不一致,以 --agent-id 为准",
|
|
772
|
+
fg="yellow",
|
|
773
|
+
)
|
|
774
|
+
if is_dry_run:
|
|
775
|
+
# DryRun 无法真实校验,假设存在并走更新路径
|
|
776
|
+
existing_agent_id = explicit_agent_id
|
|
777
|
+
agent_exists = True
|
|
778
|
+
click.secho(
|
|
779
|
+
f" [Dry Run] 假设 Agent {explicit_agent_id} 存在", fg="cyan"
|
|
780
|
+
)
|
|
781
|
+
else:
|
|
782
|
+
try:
|
|
783
|
+
detail = await client.get_agent(
|
|
784
|
+
explicit_agent_id, include_api_key=True
|
|
726
785
|
)
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
786
|
+
except Exception as e:
|
|
787
|
+
return DeployResult(
|
|
788
|
+
status=DeployStatus.FAILED,
|
|
789
|
+
agent_id=explicit_agent_id,
|
|
790
|
+
message=(
|
|
791
|
+
f"❌ 指定的 Agent ID '{explicit_agent_id}' 不存在,"
|
|
792
|
+
f"或当前凭证无权限访问。\n"
|
|
793
|
+
f" 详情: {e}\n"
|
|
794
|
+
" 👉 请确认 agent_id 正确,且当前 AK/SK / 账号"
|
|
795
|
+
"有该 Agent 的权限。"
|
|
796
|
+
),
|
|
733
797
|
)
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
798
|
+
|
|
799
|
+
# 校验通过 → 关联并回填 state,走热更新
|
|
800
|
+
qa = detail.get("quick_access", {}) or {}
|
|
801
|
+
basic = detail.get("basic", {}) or {}
|
|
802
|
+
recovered_state = local_state.copy()
|
|
803
|
+
recovered_state.update(
|
|
804
|
+
{
|
|
805
|
+
"agent_id": explicit_agent_id,
|
|
806
|
+
"name": basic.get("name") or package_info.name,
|
|
807
|
+
"region": target.region,
|
|
808
|
+
"endpoint": qa.get("public_endpoint"),
|
|
809
|
+
"updated_at": self._now_iso(),
|
|
810
|
+
}
|
|
811
|
+
)
|
|
812
|
+
if qa.get("api_key"):
|
|
813
|
+
recovered_state["api_key"] = qa["api_key"]
|
|
814
|
+
# 去掉 None 值,避免覆盖掉旧的有效字段
|
|
815
|
+
recovered_state = {
|
|
816
|
+
k: v for k, v in recovered_state.items() if v is not None
|
|
817
|
+
}
|
|
818
|
+
self._save_state(state_file, recovered_state)
|
|
819
|
+
local_state = recovered_state
|
|
820
|
+
|
|
821
|
+
existing_agent_id = explicit_agent_id
|
|
822
|
+
agent_exists = True
|
|
823
|
+
click.secho(
|
|
824
|
+
f" 🔗 已通过 --agent-id 关联 Agent: {explicit_agent_id} "
|
|
825
|
+
f"(已回填 .agentengine.state)",
|
|
826
|
+
fg="green",
|
|
827
|
+
)
|
|
828
|
+
|
|
829
|
+
# ``agent_exists`` means the target has already been resolved
|
|
830
|
+
# (including an explicit ``--agent-id``). Both that path and
|
|
831
|
+
# the normal state-file lookup must enter the same hot-update
|
|
832
|
+
# branch. The explicit path must not need a second GetAgent
|
|
833
|
+
# request merely to enter that branch.
|
|
834
|
+
if existing_agent_id:
|
|
835
|
+
if not agent_exists:
|
|
836
|
+
# 有本地状态 → 先检查服务器上是否存在
|
|
837
|
+
click.echo(f" 检测到本地状态: {existing_agent_id}")
|
|
838
|
+
try:
|
|
839
|
+
existing_agent = await client.get_agent(existing_agent_id)
|
|
840
|
+
if existing_agent:
|
|
841
|
+
agent_exists = True
|
|
842
|
+
except Exception as e:
|
|
843
|
+
err_msg = str(e).lower()
|
|
844
|
+
if "not found" in err_msg or "404" in err_msg or "不存在" in err_msg:
|
|
845
|
+
click.secho(
|
|
846
|
+
" ⚠️ 服务器上未找到 Agent "
|
|
847
|
+
f"{existing_agent_id},将创建新 Agent",
|
|
848
|
+
fg="yellow",
|
|
849
|
+
)
|
|
850
|
+
agent_exists = False
|
|
851
|
+
# DryRun 异常表示真实请求被拦截,无法确认 Agent 是否存在。
|
|
852
|
+
# 为安全起见,DryRun 假设它存在并走更新路径。
|
|
853
|
+
elif "Dry Run" in str(e):
|
|
854
|
+
click.secho(
|
|
855
|
+
f" [Dry Run] 假设 Agent {existing_agent_id} 存在", fg="cyan"
|
|
856
|
+
)
|
|
857
|
+
agent_exists = True
|
|
858
|
+
else:
|
|
859
|
+
raise
|
|
738
860
|
|
|
739
861
|
if agent_exists:
|
|
740
862
|
# Agent 存在 → 执行更新
|
|
@@ -766,6 +888,9 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
766
888
|
|
|
767
889
|
if ks3_config:
|
|
768
890
|
update_data["ks3"] = ks3_config
|
|
891
|
+
if code_checksum:
|
|
892
|
+
update_data["code_checksum"] = code_checksum
|
|
893
|
+
update_data["code_command"] = code_command
|
|
769
894
|
elif artifact_type == "Container":
|
|
770
895
|
image_credential = self._image_credential_from_env(artifact_path)
|
|
771
896
|
if image_credential:
|
|
@@ -781,6 +906,10 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
781
906
|
project_dir,
|
|
782
907
|
target.extra.get("env_vars") or {},
|
|
783
908
|
)
|
|
909
|
+
env_vars = self._bind_managed_runtime_contract_env(
|
|
910
|
+
env_vars,
|
|
911
|
+
runtime_config,
|
|
912
|
+
)
|
|
784
913
|
env_vars = self._inject_ui_runtime_env(env_vars, ui_state, local_state)
|
|
785
914
|
if env_vars:
|
|
786
915
|
update_data["env_vars"] = env_vars
|
|
@@ -889,6 +1018,9 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
889
1018
|
|
|
890
1019
|
if ks3_config:
|
|
891
1020
|
request_data["ks3"] = ks3_config
|
|
1021
|
+
if code_checksum:
|
|
1022
|
+
request_data["code_checksum"] = code_checksum
|
|
1023
|
+
request_data["code_command"] = code_command
|
|
892
1024
|
|
|
893
1025
|
# Container 模式: 传递镜像凭证
|
|
894
1026
|
if artifact_type == "Container":
|
|
@@ -905,6 +1037,10 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
905
1037
|
project_dir,
|
|
906
1038
|
target.extra.get("env_vars") or {},
|
|
907
1039
|
)
|
|
1040
|
+
env_vars = self._bind_managed_runtime_contract_env(
|
|
1041
|
+
env_vars,
|
|
1042
|
+
runtime_config,
|
|
1043
|
+
)
|
|
908
1044
|
env_vars = self._inject_ui_runtime_env(env_vars, ui_state, local_state)
|
|
909
1045
|
if env_vars:
|
|
910
1046
|
if env_file_exists:
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"""Public contracts and file loading for local Agent evaluation."""
|
|
2
|
+
|
|
3
|
+
from .a2a_adapter import A2ATargetAdapter, A2ATargetError
|
|
4
|
+
from .adapters import (
|
|
5
|
+
EvaluationNotImplementedError,
|
|
6
|
+
TargetAdapter,
|
|
7
|
+
TargetAdapterError,
|
|
8
|
+
create_target_adapter,
|
|
9
|
+
)
|
|
10
|
+
from .cloud_binding import CloudBinding, CloudBindingError, CloudBindingStore
|
|
11
|
+
from .cloud_converter import (
|
|
12
|
+
CloudDatasetColumn,
|
|
13
|
+
CloudDatasetRow,
|
|
14
|
+
CloudDatasetSnapshot,
|
|
15
|
+
EvalSetCloudConversionError,
|
|
16
|
+
evalset_from_dataset_snapshot,
|
|
17
|
+
evalset_to_dataset_snapshot,
|
|
18
|
+
)
|
|
19
|
+
from .cloud_service import (
|
|
20
|
+
CloudEvalSetPreviewError,
|
|
21
|
+
CloudEvalSetCatalogItem,
|
|
22
|
+
CloudEvalSetPublishResult,
|
|
23
|
+
CloudEvalSetPullResult,
|
|
24
|
+
CloudEvalSetService,
|
|
25
|
+
)
|
|
26
|
+
from .contracts import (
|
|
27
|
+
AssertionSpec,
|
|
28
|
+
AssertionType,
|
|
29
|
+
CaseRun,
|
|
30
|
+
CloudDatasetRef,
|
|
31
|
+
DataPolicy,
|
|
32
|
+
EvalCase,
|
|
33
|
+
EvalRunReport,
|
|
34
|
+
EvalRunSpec,
|
|
35
|
+
EvalRunStatus,
|
|
36
|
+
EvalRunSummary,
|
|
37
|
+
EvalSetVersion,
|
|
38
|
+
EvalTurn,
|
|
39
|
+
EvaluationConfig,
|
|
40
|
+
EvaluationRequest,
|
|
41
|
+
MetricResult,
|
|
42
|
+
MetricStatus,
|
|
43
|
+
TargetKind,
|
|
44
|
+
TargetRef,
|
|
45
|
+
TargetRun,
|
|
46
|
+
TargetRunStatus,
|
|
47
|
+
TargetSnapshot,
|
|
48
|
+
TraceRef,
|
|
49
|
+
UsageSnapshot,
|
|
50
|
+
)
|
|
51
|
+
from .evalset import (
|
|
52
|
+
EvalSetFormat,
|
|
53
|
+
EvalSetParseError,
|
|
54
|
+
identify_evalset_format,
|
|
55
|
+
load_evalset,
|
|
56
|
+
parse_evalset,
|
|
57
|
+
)
|
|
58
|
+
from .executor import EvaluationExecutionError, execute_evaluation
|
|
59
|
+
from .storage import EvaluationStorage, EvaluationStorageError
|
|
60
|
+
from .target import EvaluationTarget
|
|
61
|
+
|
|
62
|
+
__all__ = [
|
|
63
|
+
"AssertionSpec",
|
|
64
|
+
"AssertionType",
|
|
65
|
+
"A2ATargetAdapter",
|
|
66
|
+
"A2ATargetError",
|
|
67
|
+
"CloudBinding",
|
|
68
|
+
"CloudBindingError",
|
|
69
|
+
"CloudBindingStore",
|
|
70
|
+
"CloudDatasetRef",
|
|
71
|
+
"CloudDatasetColumn",
|
|
72
|
+
"CloudDatasetRow",
|
|
73
|
+
"CloudDatasetSnapshot",
|
|
74
|
+
"CloudEvalSetPreviewError",
|
|
75
|
+
"CloudEvalSetCatalogItem",
|
|
76
|
+
"CloudEvalSetPublishResult",
|
|
77
|
+
"CloudEvalSetPullResult",
|
|
78
|
+
"CloudEvalSetService",
|
|
79
|
+
"CaseRun",
|
|
80
|
+
"DataPolicy",
|
|
81
|
+
"EvalCase",
|
|
82
|
+
"EvalRunReport",
|
|
83
|
+
"EvalRunSummary",
|
|
84
|
+
"EvalRunSpec",
|
|
85
|
+
"EvalRunStatus",
|
|
86
|
+
"EvalSetFormat",
|
|
87
|
+
"EvalSetParseError",
|
|
88
|
+
"EvalSetVersion",
|
|
89
|
+
"EvalTurn",
|
|
90
|
+
"EvaluationConfig",
|
|
91
|
+
"EvaluationExecutionError",
|
|
92
|
+
"EvalSetCloudConversionError",
|
|
93
|
+
"EvaluationNotImplementedError",
|
|
94
|
+
"EvaluationRequest",
|
|
95
|
+
"EvaluationStorage",
|
|
96
|
+
"EvaluationStorageError",
|
|
97
|
+
"EvaluationTarget",
|
|
98
|
+
"MetricResult",
|
|
99
|
+
"MetricStatus",
|
|
100
|
+
"TargetKind",
|
|
101
|
+
"TargetAdapter",
|
|
102
|
+
"TargetAdapterError",
|
|
103
|
+
"TargetRun",
|
|
104
|
+
"TargetRunStatus",
|
|
105
|
+
"TargetSnapshot",
|
|
106
|
+
"TargetRef",
|
|
107
|
+
"TraceRef",
|
|
108
|
+
"UsageSnapshot",
|
|
109
|
+
"identify_evalset_format",
|
|
110
|
+
"load_evalset",
|
|
111
|
+
"parse_evalset",
|
|
112
|
+
"execute_evaluation",
|
|
113
|
+
"evalset_from_dataset_snapshot",
|
|
114
|
+
"evalset_to_dataset_snapshot",
|
|
115
|
+
"create_target_adapter",
|
|
116
|
+
]
|