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
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
"""Runner Context Capabilities —— Prompt/Context/Memory 的 ownership 合同。
|
|
2
|
+
|
|
3
|
+
能力声明是可执行合同,不是展示标签:Runtime 按 ``ContextCapabilities`` 决定是否
|
|
4
|
+
编译/投影 Prompt、是否注入 History/Memory、是否执行 compaction。
|
|
5
|
+
|
|
6
|
+
本模块只落地数据模型与已知 Runner 的显式默认值;任何行为型接入(实际改写 Runner 输入、
|
|
7
|
+
按 capability 切换 ambient 注入、双阈值等)都在后续 PR,第一个 PR 仅做声明与 shadow 观测,
|
|
8
|
+
不改线上行为。未知自定义 Runner 默认采用最保守的 ``framework_assisted + opaque``。
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from dataclasses import dataclass
|
|
14
|
+
from typing import Any, Literal
|
|
15
|
+
|
|
16
|
+
DeploymentMode = Literal["local", "ksadk_managed_cloud", "external_managed"]
|
|
17
|
+
"""部署位置(方案 §4.3 / §6.1)。
|
|
18
|
+
|
|
19
|
+
与 Context ownership 正交:描述实例在哪里运行、谁负责构建/扩缩容/运维,不描述谁拥有最终
|
|
20
|
+
模型输入。``local`` / ``ksadk_managed_cloud`` / ``external_managed``。不得据字符串判断
|
|
21
|
+
Context owner(``ksadk_managed_cloud`` 不自动等于 ``ksadk_owned``)。
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
ContextIntegrationMode = Literal["ksadk_hosted", "framework_assisted", "native_runtime"]
|
|
25
|
+
"""KsADK 对最终模型输入的控制程度。
|
|
26
|
+
|
|
27
|
+
- ``ksadk_hosted``: KsADK 负责编译 Prompt、候选选择、预算、compaction 和最终输入组装。
|
|
28
|
+
- ``framework_assisted``: KsADK 提供统一 CompiledPrompt/Policy/Memory/观测,框架负责
|
|
29
|
+
投影到原生 instruction/state/store。
|
|
30
|
+
- ``native_runtime``: KsADK 只传递版本化 instructions、平台边界和外部 Memory hook,
|
|
31
|
+
原生 Runtime 持有 Agent loop/history/compaction/最终输入。
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
ContextOwner = Literal["ksadk", "framework", "native"]
|
|
35
|
+
"""某一关注点(prompt/history/compaction/memory/skill)的实际所有者。"""
|
|
36
|
+
|
|
37
|
+
ContextAccuracy = Literal["exact", "runtime_reported", "estimated", "opaque"]
|
|
38
|
+
"""Context 观测精度等级(方案 6.3)。
|
|
39
|
+
|
|
40
|
+
- ``exact``: KsADK 生成最终模型输入并用匹配 tokenizer 计算。
|
|
41
|
+
- ``runtime_reported``: 原生 Runtime/模型返回了实际 usage 或 context 统计。
|
|
42
|
+
- ``estimated``: KsADK 只能对提交给 Runner 的内容做启发式估算。
|
|
43
|
+
- ``opaque``: Runner 不暴露最终输入或可靠 usage,只记录来源/hash/能力缺口。
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@dataclass(frozen=True)
|
|
48
|
+
class ContextCapabilities:
|
|
49
|
+
"""单个 Runner 的 Context 接入能力与 ownership 声明。
|
|
50
|
+
|
|
51
|
+
必须由 Runner 实现或由 KsADK 为已知 Runner 提供显式默认值,不能仅靠 ``hasattr``
|
|
52
|
+
猜测。若实际 usage 或事件证明声明不一致,应记录 ``context.capability_mismatch``
|
|
53
|
+
并停止对该 Runner 启用行为型 Context Engine(该熔断逻辑留后续 PR)。
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
integration_mode: ContextIntegrationMode
|
|
57
|
+
prompt_owner: ContextOwner
|
|
58
|
+
history_owner: ContextOwner
|
|
59
|
+
compaction_owner: ContextOwner
|
|
60
|
+
memory_owner: ContextOwner
|
|
61
|
+
skill_owner: ContextOwner
|
|
62
|
+
# Runner 投影 Prompt 时实际使用的目标 SDK 承载形式,例如
|
|
63
|
+
# ``{"system_message","state"}`` / ``{"instruction","session","memory_service"}`` /
|
|
64
|
+
# ``{"base_instructions","thread"}``。空集表示未知/不投影。
|
|
65
|
+
prompt_projection: frozenset[str]
|
|
66
|
+
memory_read: bool
|
|
67
|
+
memory_write: bool
|
|
68
|
+
core_memory: bool
|
|
69
|
+
native_skills: bool
|
|
70
|
+
token_accounting: ContextAccuracy
|
|
71
|
+
supports_context_snapshot: bool
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def DEFAULT_CONTEXT_CAPABILITIES() -> ContextCapabilities:
|
|
75
|
+
"""未知自定义 Runner 的保守合同:framework_assisted + opaque,不启用任何行为型接入。"""
|
|
76
|
+
return ContextCapabilities(
|
|
77
|
+
integration_mode="framework_assisted",
|
|
78
|
+
prompt_owner="framework",
|
|
79
|
+
history_owner="framework",
|
|
80
|
+
compaction_owner="framework",
|
|
81
|
+
memory_owner="framework",
|
|
82
|
+
skill_owner="framework",
|
|
83
|
+
prompt_projection=frozenset(),
|
|
84
|
+
memory_read=False,
|
|
85
|
+
memory_write=False,
|
|
86
|
+
core_memory=False,
|
|
87
|
+
native_skills=False,
|
|
88
|
+
token_accounting="opaque",
|
|
89
|
+
supports_context_snapshot=False,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def adk_context_capabilities() -> ContextCapabilities:
|
|
94
|
+
"""Google ADK:framework_assisted。
|
|
95
|
+
|
|
96
|
+
instructions 拼进 new_message 文本 + agent.instruction 加载时改写;history 由 ADK
|
|
97
|
+
SessionService 拥有(忽略 payload.history);STM/LTM 作为 memory_service 注入 +
|
|
98
|
+
load/save_memory 工具;skills 完整注入(manifest 仅 name/desc/version);无 compaction。
|
|
99
|
+
"""
|
|
100
|
+
return ContextCapabilities(
|
|
101
|
+
integration_mode="framework_assisted",
|
|
102
|
+
prompt_owner="framework",
|
|
103
|
+
history_owner="framework",
|
|
104
|
+
compaction_owner="framework",
|
|
105
|
+
memory_owner="framework",
|
|
106
|
+
skill_owner="framework",
|
|
107
|
+
prompt_projection=frozenset({"instruction", "session", "memory_service"}),
|
|
108
|
+
memory_read=True,
|
|
109
|
+
memory_write=True,
|
|
110
|
+
core_memory=False,
|
|
111
|
+
native_skills=True,
|
|
112
|
+
token_accounting="runtime_reported",
|
|
113
|
+
supports_context_snapshot=True,
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def langgraph_context_capabilities() -> ContextCapabilities:
|
|
118
|
+
"""LangGraph:framework_assisted,KsADK 侧参与 prompt/history/compaction 投影。
|
|
119
|
+
|
|
120
|
+
instructions→SystemMessage(或 ``ksadk_prepare_state`` hook);history 由 runner
|
|
121
|
+
组装(history dict→HumanMessage/AIMessage);memory=checkpointer + memory_context
|
|
122
|
+
payload 字段;无 skills;无 compaction。
|
|
123
|
+
"""
|
|
124
|
+
return ContextCapabilities(
|
|
125
|
+
integration_mode="framework_assisted",
|
|
126
|
+
prompt_owner="ksadk",
|
|
127
|
+
history_owner="ksadk",
|
|
128
|
+
compaction_owner="ksadk",
|
|
129
|
+
memory_owner="framework",
|
|
130
|
+
skill_owner="framework",
|
|
131
|
+
prompt_projection=frozenset({"system_message", "state"}),
|
|
132
|
+
memory_read=True,
|
|
133
|
+
memory_write=False,
|
|
134
|
+
core_memory=False,
|
|
135
|
+
native_skills=False,
|
|
136
|
+
token_accounting="estimated",
|
|
137
|
+
supports_context_snapshot=True,
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def langchain_context_capabilities() -> ContextCapabilities:
|
|
142
|
+
"""LangChain:framework_assisted,继承 LangGraph 的 prompt 投影但 history/compaction 交框架。"""
|
|
143
|
+
return ContextCapabilities(
|
|
144
|
+
integration_mode="framework_assisted",
|
|
145
|
+
prompt_owner="ksadk",
|
|
146
|
+
history_owner="framework",
|
|
147
|
+
compaction_owner="framework",
|
|
148
|
+
memory_owner="framework",
|
|
149
|
+
skill_owner="framework",
|
|
150
|
+
prompt_projection=frozenset({"system_message", "state"}),
|
|
151
|
+
memory_read=False,
|
|
152
|
+
memory_write=False,
|
|
153
|
+
core_memory=False,
|
|
154
|
+
native_skills=False,
|
|
155
|
+
token_accounting="estimated",
|
|
156
|
+
supports_context_snapshot=False,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def deepagents_context_capabilities() -> ContextCapabilities:
|
|
161
|
+
"""DeepAgents:framework_assisted,LangGraph 系编译图,history/compaction 交框架。"""
|
|
162
|
+
return ContextCapabilities(
|
|
163
|
+
integration_mode="framework_assisted",
|
|
164
|
+
prompt_owner="ksadk",
|
|
165
|
+
history_owner="framework",
|
|
166
|
+
compaction_owner="framework",
|
|
167
|
+
memory_owner="framework",
|
|
168
|
+
skill_owner="framework",
|
|
169
|
+
prompt_projection=frozenset({"system_message", "state"}),
|
|
170
|
+
memory_read=False,
|
|
171
|
+
memory_write=False,
|
|
172
|
+
core_memory=False,
|
|
173
|
+
native_skills=False,
|
|
174
|
+
token_accounting="estimated",
|
|
175
|
+
supports_context_snapshot=False,
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def codex_context_capabilities() -> ContextCapabilities:
|
|
180
|
+
"""Codex:native_runtime。
|
|
181
|
+
|
|
182
|
+
base_instructions 移交后端 thread;history 由后端 thread_id 拥有;无 memory hook;
|
|
183
|
+
无 skills 暴露;compaction 后端拥有。KsADK 不重复注入完整 Transcript、不运行第二套
|
|
184
|
+
compaction。
|
|
185
|
+
"""
|
|
186
|
+
return ContextCapabilities(
|
|
187
|
+
integration_mode="native_runtime",
|
|
188
|
+
prompt_owner="native",
|
|
189
|
+
history_owner="native",
|
|
190
|
+
compaction_owner="native",
|
|
191
|
+
memory_owner="native",
|
|
192
|
+
skill_owner="native",
|
|
193
|
+
prompt_projection=frozenset({"base_instructions", "thread"}),
|
|
194
|
+
memory_read=False,
|
|
195
|
+
memory_write=False,
|
|
196
|
+
core_memory=False,
|
|
197
|
+
native_skills=True,
|
|
198
|
+
token_accounting="runtime_reported",
|
|
199
|
+
supports_context_snapshot=True,
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
# detection_result.type.value → 已知 Runner capability 工厂。显式枚举,不靠 hasattr。
|
|
204
|
+
_KNOWN_RUNNER_CAPABILITIES: dict[str, Any] = {
|
|
205
|
+
"adk": adk_context_capabilities,
|
|
206
|
+
"langgraph": langgraph_context_capabilities,
|
|
207
|
+
"langchain": langchain_context_capabilities,
|
|
208
|
+
"deepagents": deepagents_context_capabilities,
|
|
209
|
+
"codex": codex_context_capabilities,
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def _runner_type_value(runner: Any) -> str:
|
|
214
|
+
"""读取 runner.detection_result.type.value,兼容缺失字段。返回小写字符串。"""
|
|
215
|
+
detection_result = getattr(runner, "detection_result", None)
|
|
216
|
+
if detection_result is None:
|
|
217
|
+
return ""
|
|
218
|
+
detection_type = getattr(detection_result, "type", None)
|
|
219
|
+
if detection_type is None:
|
|
220
|
+
return ""
|
|
221
|
+
value = getattr(detection_type, "value", detection_type)
|
|
222
|
+
return str(value or "").strip().lower()
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def _capabilities_for_detection_type(value: str) -> ContextCapabilities:
|
|
226
|
+
"""按 detection_result.type.value 显式分派已知 Runner capability,未知走 DEFAULT。
|
|
227
|
+
|
|
228
|
+
纯 registry 查找,不调用 runner 的 ``describe_context_capabilities``,因此无递归风险:
|
|
229
|
+
``BaseRunner.describe_context_capabilities`` 默认实现直接走本函数。
|
|
230
|
+
"""
|
|
231
|
+
factory = _KNOWN_RUNNER_CAPABILITIES.get(value)
|
|
232
|
+
if factory is not None:
|
|
233
|
+
return factory()
|
|
234
|
+
return DEFAULT_CONTEXT_CAPABILITIES()
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def capabilities_for_runtime_type(runtime_type: str | None) -> ContextCapabilities:
|
|
238
|
+
"""按 ``runtime_type``(平台边界 ``BaseRuntime.runtime_type``)显式分派 capability。
|
|
239
|
+
|
|
240
|
+
对 framework runner,``runtime_type`` 与 ``detection_result.type.value`` 一致
|
|
241
|
+
(adk/langgraph/langchain/deepagents/codex),故 canonical conversation execution
|
|
242
|
+
路径在 ``build_run_input`` 阶段(尚未拿到 adapter/runner 实例)也能取得正确 ownership,
|
|
243
|
+
不落成默认 opaque。未知 runtime_type 走 DEFAULT。
|
|
244
|
+
"""
|
|
245
|
+
normalized = str(runtime_type or "").strip().lower()
|
|
246
|
+
return _capabilities_for_detection_type(normalized)
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
_CAPABILITY_HASH_FIELDS: tuple[str, ...] = (
|
|
250
|
+
"integration_mode",
|
|
251
|
+
"prompt_owner",
|
|
252
|
+
"history_owner",
|
|
253
|
+
"compaction_owner",
|
|
254
|
+
"memory_owner",
|
|
255
|
+
"skill_owner",
|
|
256
|
+
"memory_read",
|
|
257
|
+
"memory_write",
|
|
258
|
+
"core_memory",
|
|
259
|
+
"native_skills",
|
|
260
|
+
"token_accounting",
|
|
261
|
+
"supports_context_snapshot",
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def capability_hash(caps: ContextCapabilities) -> str:
|
|
266
|
+
"""对 capability 稳定字段做 SHA-256,供 Plan/Trace 记录 ``capability_hash``。
|
|
267
|
+
|
|
268
|
+
``prompt_projection`` 是 frozenset,按排序后元素拼接以保证确定性。不含 ``metadata``。
|
|
269
|
+
"""
|
|
270
|
+
import hashlib
|
|
271
|
+
import json
|
|
272
|
+
|
|
273
|
+
payload = {field: getattr(caps, field) for field in _CAPABILITY_HASH_FIELDS}
|
|
274
|
+
projection = sorted(getattr(caps, "prompt_projection", frozenset()) or [])
|
|
275
|
+
payload["prompt_projection"] = projection
|
|
276
|
+
serialized = json.dumps(payload, sort_keys=True, ensure_ascii=False)
|
|
277
|
+
return "sha256:" + hashlib.sha256(serialized.encode("utf-8")).hexdigest()
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
def capabilities_for_runner(runner: Any | None) -> ContextCapabilities:
|
|
281
|
+
"""统一 lookup:优先 runner 自身的 ``describe_context_capabilities()``,否则按 detection
|
|
282
|
+
type 显式分派,未知走 DEFAULT。
|
|
283
|
+
|
|
284
|
+
不依赖 ``hasattr`` 猜测 ownership(方案 6.1)。``BaseRunner`` 的默认
|
|
285
|
+
``describe_context_capabilities``
|
|
286
|
+
走 ``_capabilities_for_detection_type``,故本函数对 BaseRunner 子类不会递归。已被 compaction
|
|
287
|
+
门控(``runtime_preparation`` proactive compaction)与 shadow plan / conformance 测试消费。
|
|
288
|
+
"""
|
|
289
|
+
if runner is None:
|
|
290
|
+
return DEFAULT_CONTEXT_CAPABILITIES()
|
|
291
|
+
|
|
292
|
+
describe = getattr(runner, "describe_context_capabilities", None)
|
|
293
|
+
if callable(describe):
|
|
294
|
+
try:
|
|
295
|
+
caps = describe()
|
|
296
|
+
except Exception:
|
|
297
|
+
caps = None
|
|
298
|
+
if isinstance(caps, ContextCapabilities):
|
|
299
|
+
return caps
|
|
300
|
+
|
|
301
|
+
return _capabilities_for_detection_type(_runner_type_value(runner))
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
# ---- Capability Mismatch 检测与熔断(方案 §6.1 / §8.3)----
|
|
305
|
+
|
|
306
|
+
# 进程内 best-effort 熔断记录:runner 标识 → 已熔断。只影响"是否对该 Runner 启用行为型
|
|
307
|
+
# Context Engine",不影响 shadow 观测与正常执行(方案 §6.1)。pod 重启清空。
|
|
308
|
+
_MISMATCH_CIRCUIT: dict[str, bool] = {}
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
def detect_capability_mismatch(
|
|
312
|
+
*,
|
|
313
|
+
declared: ContextCapabilities,
|
|
314
|
+
actual_prompt_owner: str | None = None,
|
|
315
|
+
actual_history_owner: str | None = None,
|
|
316
|
+
actual_compaction_owner: str | None = None,
|
|
317
|
+
runtime_reported_usage: bool | None = None,
|
|
318
|
+
duplicate_history_injected: bool = False,
|
|
319
|
+
double_compaction: bool = False,
|
|
320
|
+
) -> str | None:
|
|
321
|
+
"""检测声明的 capability 与运行时实际证据是否一致(方案 §6.1)。
|
|
322
|
+
|
|
323
|
+
返回 mismatch 原因字符串(``prompt_owner``/``history_owner``/``compaction_owner``/
|
|
324
|
+
``token_accounting``/``duplicate_history``/``double_compaction``);一致返回 ``None``。
|
|
325
|
+
熔断由 ``mark_capability_mismatch`` / ``is_capability_circuit_open`` 表达。
|
|
326
|
+
"""
|
|
327
|
+
reasons: list[str] = []
|
|
328
|
+
if actual_prompt_owner is not None and actual_prompt_owner != declared.prompt_owner:
|
|
329
|
+
reasons.append(f"prompt_owner:{declared.prompt_owner}!={actual_prompt_owner}")
|
|
330
|
+
if actual_history_owner is not None and actual_history_owner != declared.history_owner:
|
|
331
|
+
reasons.append(f"history_owner:{declared.history_owner}!={actual_history_owner}")
|
|
332
|
+
if actual_compaction_owner is not None and actual_compaction_owner != declared.compaction_owner:
|
|
333
|
+
reasons.append(f"compaction_owner:{declared.compaction_owner}!={actual_compaction_owner}")
|
|
334
|
+
if runtime_reported_usage is False and declared.token_accounting == "runtime_reported":
|
|
335
|
+
reasons.append("token_accounting:declared_runtime_reported_but_no_usage")
|
|
336
|
+
if duplicate_history_injected:
|
|
337
|
+
reasons.append("duplicate_history_injected")
|
|
338
|
+
if double_compaction:
|
|
339
|
+
reasons.append("double_compaction")
|
|
340
|
+
return ";".join(reasons) if reasons else None
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
def _mismatch_key(runner: Any | None, runtime_type: str | None) -> str:
|
|
344
|
+
rt = _runner_type_value(runner) if runner is not None else str(runtime_type or "")
|
|
345
|
+
return rt or "unknown"
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
def mark_capability_mismatch(runner: Any | None = None, runtime_type: str | None = None) -> None:
|
|
349
|
+
"""标记某 Runner 触发 capability mismatch 熔断(方案 §6.1)。
|
|
350
|
+
|
|
351
|
+
熔断后 ``is_capability_circuit_open`` 返回 True,行为型 Context Engine 对该 Runner 停用;
|
|
352
|
+
shadow 观测与正常 Runner 执行不受影响。
|
|
353
|
+
"""
|
|
354
|
+
_MISMATCH_CIRCUIT[_mismatch_key(runner, runtime_type)] = True
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def is_capability_circuit_open(runner: Any | None = None, runtime_type: str | None = None) -> bool:
|
|
358
|
+
"""该 Runner 是否已因 capability mismatch 熔断(方案 §6.1)。"""
|
|
359
|
+
return _MISMATCH_CIRCUIT.get(_mismatch_key(runner, runtime_type), False)
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
def reset_capability_circuit(runner: Any | None = None, runtime_type: str | None = None) -> None:
|
|
363
|
+
"""清除熔断标记(测试/运维用)。"""
|
|
364
|
+
key = _mismatch_key(runner, runtime_type)
|
|
365
|
+
_MISMATCH_CIRCUIT.pop(key, None)
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
# ---- Ownership 可选范围与校验(方案 §5.2:ownership 不允许任意选择)----
|
|
369
|
+
|
|
370
|
+
# 按 runtime_type 列出 Studio 可选 ownership(context.ownership 字段值)。
|
|
371
|
+
# auto = 由 capability 推导;ksadk/framework/native 必须与 capability 兼容。
|
|
372
|
+
_OWNERSHIP_CHOICES: dict[str, tuple[str, ...]] = {
|
|
373
|
+
"codex": ("native",),
|
|
374
|
+
"adk": ("framework",), # 后续开放 assisted
|
|
375
|
+
"langgraph": ("framework", "ksadk"),
|
|
376
|
+
"langchain": ("framework",),
|
|
377
|
+
"deepagents": ("framework",),
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
def allowed_ownership_choices(runtime_type: str | None) -> tuple[str, ...]:
|
|
382
|
+
"""该 runtime 在 Studio 中可选的 ownership(方案 §5.2)。未知 runtime 走保守 framework。"""
|
|
383
|
+
key = str(runtime_type or "").strip().lower()
|
|
384
|
+
return _OWNERSHIP_CHOICES.get(key, ("framework",))
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
def validate_ownership_for_runtime(ownership: str, *, runtime_type: str | None) -> None:
|
|
388
|
+
"""校验 ownership 与 runtime capability 兼容(方案 §5.2)。
|
|
389
|
+
|
|
390
|
+
不支持组合时抛 ``ValueError``,Studio 据 it 返回 capability mismatch,不静默降级。
|
|
391
|
+
``auto`` 总是合法(运行时按 capability 推导)。
|
|
392
|
+
"""
|
|
393
|
+
if ownership == "auto":
|
|
394
|
+
return
|
|
395
|
+
allowed = allowed_ownership_choices(runtime_type)
|
|
396
|
+
if ownership not in allowed:
|
|
397
|
+
raise ValueError(
|
|
398
|
+
f"ownership={ownership!r} 不被 runtime={runtime_type!r} 支持;"
|
|
399
|
+
f"可选: {list(allowed)}(方案 §5.2)"
|
|
400
|
+
)
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
def resolve_ownership(ownership: str, *, runtime_type: str | None) -> str:
|
|
404
|
+
"""把 ``context.ownership`` 解析为实际 prompt ownership(ksadk/framework/native)。
|
|
405
|
+
|
|
406
|
+
``auto`` → 解析为该 runtime 的**保守产品默认**(方案 §5.2:langgraph/adk 默认 framework,
|
|
407
|
+
codex 默认 native),而非 capability 上限——capability 表示“能接管”,不代表“默认接管”。
|
|
408
|
+
显式值原样返回(已由 ``validate_ownership_for_runtime`` 校验)。
|
|
409
|
+
"""
|
|
410
|
+
if ownership == "auto":
|
|
411
|
+
rt = str(runtime_type or "").strip().lower()
|
|
412
|
+
if rt == "codex":
|
|
413
|
+
return "native"
|
|
414
|
+
return "framework" # langgraph/adk/langchain/deepagents 默认 framework
|
|
415
|
+
return ownership
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
def assert_capability_not_circuit_open(
|
|
419
|
+
*, runner: Any | None = None, runtime_type: str | None = None, label: str = ""
|
|
420
|
+
) -> None:
|
|
421
|
+
"""行为型 Context Engine 接入前的门禁(方案 §6.1)。
|
|
422
|
+
|
|
423
|
+
若该 Runner 已因 capability mismatch 熔断,则抛 ``CapabilityCircuitOpen``——调用方据
|
|
424
|
+
此回退 shadow/旧路径,**不**继续行为型接管。``label`` 仅用于错误信息,便于诊断是哪个接入点
|
|
425
|
+
被熔断拦下。shadow 观测与正常 Runner 执行不受此门禁影响。
|
|
426
|
+
"""
|
|
427
|
+
if is_capability_circuit_open(runner=runner, runtime_type=runtime_type):
|
|
428
|
+
raise CapabilityCircuitOpen(
|
|
429
|
+
runtime_type=_mismatch_key(runner, runtime_type),
|
|
430
|
+
label=label or "behavioral_context_engine",
|
|
431
|
+
)
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
class CapabilityCircuitOpen(RuntimeError):
|
|
435
|
+
"""Runner 因 capability mismatch 被熔断,行为型 Context Engine 对其停用(方案 §6.1)。"""
|
|
436
|
+
|
|
437
|
+
def __init__(self, *, runtime_type: str, label: str) -> None:
|
|
438
|
+
self.runtime_type = runtime_type
|
|
439
|
+
self.label = label
|
|
440
|
+
super().__init__(
|
|
441
|
+
f"capability circuit open for runtime={runtime_type!r} at {label!r}; "
|
|
442
|
+
"behavioral context engine disabled for this runner"
|
|
443
|
+
)
|