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
ksadk/runtime/adapter.py
CHANGED
|
@@ -30,12 +30,21 @@ adapter)。本模块定义三层结构与六动词签名,供 Runtime 产生端
|
|
|
30
30
|
from __future__ import annotations
|
|
31
31
|
|
|
32
32
|
from abc import ABC, abstractmethod
|
|
33
|
+
from collections.abc import Callable
|
|
33
34
|
from enum import Enum
|
|
34
35
|
from typing import Any, AsyncIterator, Literal, Optional
|
|
35
36
|
|
|
36
37
|
from pydantic import BaseModel, ConfigDict, Field
|
|
37
38
|
|
|
38
39
|
from ksadk.events.runtime_event import RuntimeEvent
|
|
40
|
+
from ksadk.kernel.contracts import (
|
|
41
|
+
InjectPayload,
|
|
42
|
+
RuntimeCapability,
|
|
43
|
+
RuntimeCapabilityMatrix,
|
|
44
|
+
SteerPayload,
|
|
45
|
+
)
|
|
46
|
+
from ksadk.kernel.errors import UnsupportedControlError
|
|
47
|
+
from ksadk.runtime.launch import RuntimeLaunchContext, RuntimeServices
|
|
39
48
|
|
|
40
49
|
# ---------------------------------------------------------------------------
|
|
41
50
|
# cancel 状态机
|
|
@@ -62,6 +71,19 @@ class CancelResult(str, Enum):
|
|
|
62
71
|
"""取消动作本身失败(如底层 runtime 报错)。"""
|
|
63
72
|
|
|
64
73
|
|
|
74
|
+
class PauseResult(str, Enum):
|
|
75
|
+
"""Non-terminal pause capability result.
|
|
76
|
+
|
|
77
|
+
Pause is deliberately separate from :class:`CancelResult`: an adapter must
|
|
78
|
+
never claim a run is resumable after applying destructive cancel semantics.
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
PAUSED_ACTIVE_TURN = "paused_active_turn"
|
|
82
|
+
NOT_SUPPORTED = "not_supported"
|
|
83
|
+
NOT_RUNNING = "not_running"
|
|
84
|
+
FAILED = "failed"
|
|
85
|
+
|
|
86
|
+
|
|
65
87
|
# ---------------------------------------------------------------------------
|
|
66
88
|
# resume 目标与回包(两件拆开的的事)
|
|
67
89
|
# ---------------------------------------------------------------------------
|
|
@@ -137,6 +159,9 @@ class CheckpointDescriptor(BaseModel):
|
|
|
137
159
|
CONVERSATION_PREPROCESSING_METADATA_KEY = "conversation_request"
|
|
138
160
|
"""StartRequest metadata key for the shared conversation preprocessing contract."""
|
|
139
161
|
|
|
162
|
+
RESUME_START_REQUEST_NATIVE_KEY = "_conversation_start_request"
|
|
163
|
+
"""Ephemeral adapter-private key carrying current request context across attach/resume."""
|
|
164
|
+
|
|
140
165
|
|
|
141
166
|
class ConversationPreprocessingRequest(BaseModel):
|
|
142
167
|
"""Transport-neutral input for the existing conversation preprocessing path.
|
|
@@ -216,6 +241,19 @@ class BaseRuntime(ABC):
|
|
|
216
241
|
"""原生能力声明(cancel / checkpoint / resume / session continuity 等)。"""
|
|
217
242
|
raise NotImplementedError
|
|
218
243
|
|
|
244
|
+
def describe_context_capabilities(self) -> Any:
|
|
245
|
+
"""Context ownership 合同(方案 6.1):默认按 ``runtime_type`` 显式分派已知 Runner
|
|
246
|
+
capability,未知走保守 ``framework_assisted + opaque``。
|
|
247
|
+
|
|
248
|
+
合同放在 ``BaseRuntime``/``RuntimeAdapter``(平台边界),不再依赖 Runner 类名猜测。
|
|
249
|
+
``RunnerRuntimeAdapter`` 经 ``_RunnerAsBaseRuntime`` 汇总内部 ``BaseRunner`` 的声明;
|
|
250
|
+
Codex 等 native adapter 自带 override。第一个 PR+shadow 接线修正阶段仅供 shadow
|
|
251
|
+
ContextPlan / conformance 测试消费,不改变真实输入。
|
|
252
|
+
"""
|
|
253
|
+
from ksadk.context_engine.capabilities import capabilities_for_runtime_type
|
|
254
|
+
|
|
255
|
+
return capabilities_for_runtime_type(self.runtime_type)
|
|
256
|
+
|
|
219
257
|
|
|
220
258
|
# ---------------------------------------------------------------------------
|
|
221
259
|
# RuntimeAdapter:平台六动词
|
|
@@ -236,6 +274,26 @@ class RuntimeAdapter(ABC):
|
|
|
236
274
|
def runtime(self) -> BaseRuntime:
|
|
237
275
|
return self._runtime
|
|
238
276
|
|
|
277
|
+
def describe_context_capabilities(self) -> Any:
|
|
278
|
+
"""平台边界的 Context ownership 合同入口:委托给底层 ``BaseRuntime``。
|
|
279
|
+
|
|
280
|
+
``RunnerRuntimeAdapter`` 经 ``_RunnerAsBaseRuntime`` 汇总内部 Runner 的声明;
|
|
281
|
+
CodexRuntimeAdapter 自带 override。不在本方法里做类名猜测。
|
|
282
|
+
"""
|
|
283
|
+
return self._runtime.describe_context_capabilities()
|
|
284
|
+
|
|
285
|
+
async def preflight(self) -> None:
|
|
286
|
+
"""Validate that this adapter can accept a new run without creating one.
|
|
287
|
+
|
|
288
|
+
This is deliberately an additive lifecycle hook rather than a seventh
|
|
289
|
+
platform verb. HTTP streaming routes use it before committing a 200
|
|
290
|
+
response, so a lazy runner import or configuration failure is returned
|
|
291
|
+
as a normal request error instead of a detached, half-open SSE stream.
|
|
292
|
+
Implementations must not allocate a run handle or start model work.
|
|
293
|
+
"""
|
|
294
|
+
|
|
295
|
+
return None
|
|
296
|
+
|
|
239
297
|
@abstractmethod
|
|
240
298
|
async def start(self, request: StartRequest) -> RunHandle:
|
|
241
299
|
"""启动一次 run,返回句柄。"""
|
|
@@ -255,6 +313,28 @@ class RuntimeAdapter(ABC):
|
|
|
255
313
|
"""请求取消。返回状态机结果;成功 cancel 级联丢弃该 turn 的 pending 审批。"""
|
|
256
314
|
raise NotImplementedError
|
|
257
315
|
|
|
316
|
+
async def pause(self, handle: RunHandle) -> PauseResult:
|
|
317
|
+
"""Pause an active turn without invalidating its resumable state.
|
|
318
|
+
|
|
319
|
+
This additive hook defaults to an honest unsupported result. It must
|
|
320
|
+
not fall back to ``cancel`` because cancellation is terminal for some
|
|
321
|
+
runtimes (notably Codex).
|
|
322
|
+
"""
|
|
323
|
+
|
|
324
|
+
return PauseResult.NOT_SUPPORTED
|
|
325
|
+
|
|
326
|
+
async def submit(self, handle: RunHandle, payload: ResumePayload) -> None:
|
|
327
|
+
"""Submit input to a live interaction without restarting the stream.
|
|
328
|
+
|
|
329
|
+
Runtimes whose HITL model ends the current stream should continue to
|
|
330
|
+
use :meth:`resume`; live JSON-RPC approval requests use this command
|
|
331
|
+
channel instead.
|
|
332
|
+
"""
|
|
333
|
+
|
|
334
|
+
raise UnsupportedControlError(
|
|
335
|
+
f"{type(self).__name__} does not support live interaction input"
|
|
336
|
+
)
|
|
337
|
+
|
|
258
338
|
@abstractmethod
|
|
259
339
|
async def resume(
|
|
260
340
|
self,
|
|
@@ -273,11 +353,94 @@ class RuntimeAdapter(ABC):
|
|
|
273
353
|
cross-process recovery must implement this seam using their framework's
|
|
274
354
|
durable checkpoint/session API. The default deliberately fails closed.
|
|
275
355
|
"""
|
|
276
|
-
raise
|
|
356
|
+
raise UnsupportedControlError(
|
|
277
357
|
f"{type(self).__name__} does not support attaching persisted run "
|
|
278
358
|
f"{handle.run_id!r}; durable runtime restore is unavailable"
|
|
279
359
|
)
|
|
280
360
|
|
|
361
|
+
async def steer(self, handle: RunHandle, payload: SteerPayload) -> None:
|
|
362
|
+
"""Mid-turn steering: adjust an in-flight run without ending the turn.
|
|
363
|
+
|
|
364
|
+
No runtime exposes a native steer channel today; start/stream never
|
|
365
|
+
implies steer. Fails closed until a real implementation overrides it.
|
|
366
|
+
"""
|
|
367
|
+
|
|
368
|
+
raise UnsupportedControlError(
|
|
369
|
+
f"{type(self).__name__} does not support steer: "
|
|
370
|
+
"runtime has no native mid-turn steering channel"
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
async def inject(self, handle: RunHandle, payload: InjectPayload) -> None:
|
|
374
|
+
"""Inject ambient context into an in-flight run without a user turn."""
|
|
375
|
+
|
|
376
|
+
raise UnsupportedControlError(
|
|
377
|
+
f"{type(self).__name__} does not support inject: "
|
|
378
|
+
"runtime has no native mid-turn context injection channel"
|
|
379
|
+
)
|
|
380
|
+
|
|
381
|
+
async def durable_restore(self, handle: RunHandle) -> RunHandle:
|
|
382
|
+
"""Cross-process restore of a persisted run from durable state.
|
|
383
|
+
|
|
384
|
+
Stronger than :meth:`attach`: requires the runtime's checkpoint /
|
|
385
|
+
continuation to be genuinely durable across processes. Fails closed
|
|
386
|
+
by default; an in-memory run table is never evidence of durability.
|
|
387
|
+
"""
|
|
388
|
+
|
|
389
|
+
raise UnsupportedControlError(
|
|
390
|
+
f"{type(self).__name__} does not support durable restore of run "
|
|
391
|
+
f"{handle.run_id!r}: no cross-process checkpoint backend"
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
def capabilities(self) -> RuntimeCapabilityMatrix:
|
|
395
|
+
"""Typed/versioned capability matrix (``RuntimeCapabilityMatrix/v1``).
|
|
396
|
+
|
|
397
|
+
The base declaration is honest: every verb is unavailable with the
|
|
398
|
+
stable reason ``not_implemented``. A subclass may only mark a verb
|
|
399
|
+
``supported`` when it really overrides the method and the conformance
|
|
400
|
+
suite passes; unsupported verbs must raise
|
|
401
|
+
:class:`~ksadk.kernel.errors.UnsupportedControlError` (``pause`` is a
|
|
402
|
+
state machine and may return ``PauseResult.NOT_SUPPORTED``).
|
|
403
|
+
"""
|
|
404
|
+
|
|
405
|
+
def _unavailable(reason: str = "not_implemented") -> RuntimeCapability:
|
|
406
|
+
return RuntimeCapability(
|
|
407
|
+
supported=False, mode="unavailable", reason=reason
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
return RuntimeCapabilityMatrix(
|
|
411
|
+
cancel=_unavailable(),
|
|
412
|
+
pause=_unavailable(),
|
|
413
|
+
resume=_unavailable(),
|
|
414
|
+
submit_interaction=_unavailable(),
|
|
415
|
+
attach=_unavailable(),
|
|
416
|
+
steer=_unavailable("runtime_no_native_steer"),
|
|
417
|
+
inject=_unavailable("runtime_no_native_inject"),
|
|
418
|
+
checkpoint=_unavailable(),
|
|
419
|
+
durable_restore=_unavailable(),
|
|
420
|
+
)
|
|
421
|
+
|
|
422
|
+
def native_capabilities(self) -> dict[str, object]:
|
|
423
|
+
"""One-way legacy projection of the typed matrix.
|
|
424
|
+
|
|
425
|
+
New code (Server/Studio) must read :meth:`capabilities`; the returned
|
|
426
|
+
dict is a compatibility view for one release cycle and is never allowed
|
|
427
|
+
to flow back into the matrix.
|
|
428
|
+
"""
|
|
429
|
+
|
|
430
|
+
matrix = self.capabilities()
|
|
431
|
+
names = (
|
|
432
|
+
"cancel",
|
|
433
|
+
"pause",
|
|
434
|
+
"resume",
|
|
435
|
+
"submit_interaction",
|
|
436
|
+
"attach",
|
|
437
|
+
"steer",
|
|
438
|
+
"inject",
|
|
439
|
+
"checkpoint",
|
|
440
|
+
"durable_restore",
|
|
441
|
+
)
|
|
442
|
+
return {name: getattr(matrix, name).supported for name in names}
|
|
443
|
+
|
|
281
444
|
def is_handle_attached(self, handle: RunHandle) -> bool:
|
|
282
445
|
"""Return whether ``handle`` is already attached to this adapter process."""
|
|
283
446
|
return False
|
|
@@ -298,48 +461,68 @@ class RuntimeAdapter(ABC):
|
|
|
298
461
|
# ---------------------------------------------------------------------------
|
|
299
462
|
|
|
300
463
|
|
|
464
|
+
RuntimeAdapterFactory = Callable[[RuntimeLaunchContext], RuntimeAdapter]
|
|
465
|
+
|
|
466
|
+
|
|
301
467
|
class RuntimeRegistry:
|
|
302
|
-
"""按 ``runtime_type``
|
|
468
|
+
"""按 ``runtime_type`` 注册/创建 :class:`RuntimeAdapter`。
|
|
303
469
|
|
|
304
470
|
替代 ``runners/factory.py`` 的 if/elif 分发:新 runtime 通过 ``register``
|
|
305
471
|
注册,不再改 factory 分支。
|
|
306
472
|
"""
|
|
307
473
|
|
|
308
474
|
def __init__(self) -> None:
|
|
309
|
-
self.
|
|
475
|
+
self._factories: dict[str, RuntimeAdapterFactory] = {}
|
|
310
476
|
|
|
311
|
-
def register(self, runtime_type: str,
|
|
477
|
+
def register(self, runtime_type: str, factory: RuntimeAdapterFactory) -> None:
|
|
312
478
|
if not isinstance(runtime_type, str) or not runtime_type.strip():
|
|
313
|
-
raise ValueError("
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
479
|
+
raise ValueError("runtime type must be a non-empty string")
|
|
480
|
+
key = runtime_type.strip().lower()
|
|
481
|
+
if key in self._factories:
|
|
482
|
+
raise ValueError(f"duplicate runtime type: {runtime_type!r}")
|
|
483
|
+
if not callable(factory):
|
|
484
|
+
raise TypeError(f"runtime factory must be callable: {factory!r}")
|
|
485
|
+
self._factories[key] = factory
|
|
486
|
+
|
|
487
|
+
def get(self, runtime_type: str) -> RuntimeAdapterFactory:
|
|
488
|
+
key = runtime_type.strip().lower()
|
|
319
489
|
try:
|
|
320
|
-
return self.
|
|
490
|
+
return self._factories[key]
|
|
321
491
|
except KeyError:
|
|
322
492
|
raise KeyError(
|
|
323
|
-
f"
|
|
493
|
+
f"missing runtime type: {runtime_type!r}; registered: {sorted(self._factories)}"
|
|
324
494
|
) from None
|
|
325
495
|
|
|
326
|
-
def create(self,
|
|
327
|
-
"""
|
|
328
|
-
|
|
496
|
+
def create(self, context: RuntimeLaunchContext) -> RuntimeAdapter:
|
|
497
|
+
"""使用不可变启动上下文创建一个新的 Adapter 实例。"""
|
|
498
|
+
|
|
499
|
+
adapter = self.get(context.runtime_type)(context)
|
|
500
|
+
if not isinstance(adapter, RuntimeAdapter):
|
|
501
|
+
raise TypeError(
|
|
502
|
+
f"runtime factory must return RuntimeAdapter, got {type(adapter).__name__}"
|
|
503
|
+
)
|
|
504
|
+
return adapter
|
|
329
505
|
|
|
330
506
|
def registered_types(self) -> list[str]:
|
|
331
|
-
return sorted(self.
|
|
507
|
+
return sorted(self._factories)
|
|
332
508
|
|
|
333
509
|
|
|
334
510
|
__all__ = [
|
|
335
511
|
"BaseRuntime",
|
|
336
512
|
"CancelResult",
|
|
513
|
+
"PauseResult",
|
|
337
514
|
"CheckpointCapability",
|
|
338
515
|
"CheckpointDescriptor",
|
|
339
516
|
"ResumePayload",
|
|
340
517
|
"ResumeTarget",
|
|
341
518
|
"RunHandle",
|
|
342
519
|
"RuntimeAdapter",
|
|
520
|
+
"RuntimeAdapterFactory",
|
|
521
|
+
"RuntimeCapability",
|
|
522
|
+
"RuntimeCapabilityMatrix",
|
|
523
|
+
"RuntimeLaunchContext",
|
|
343
524
|
"RuntimeRegistry",
|
|
525
|
+
"RuntimeServices",
|
|
344
526
|
"StartRequest",
|
|
527
|
+
"UnsupportedControlError",
|
|
345
528
|
]
|