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
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import logging
|
|
3
4
|
import os
|
|
4
5
|
from typing import Any, Callable, Dict, Mapping, Optional, Sequence
|
|
5
6
|
|
|
7
|
+
from ksadk.context_engine.shadow_plan import (
|
|
8
|
+
build_shadow_context_plan_dict,
|
|
9
|
+
minimal_shadow_context_plan_dict,
|
|
10
|
+
)
|
|
6
11
|
from ksadk.conversations.attachments import compact_attachment_result_for_session
|
|
7
12
|
from ksadk.conversations.context import (
|
|
8
13
|
build_history_from_events,
|
|
9
14
|
build_request_history,
|
|
10
15
|
build_responses_history_from_messages,
|
|
16
|
+
canonical_event_type,
|
|
11
17
|
project_responses_history,
|
|
12
18
|
)
|
|
13
19
|
from ksadk.conversations.model_options import normalize_model_options
|
|
@@ -66,7 +72,9 @@ from ksadk.conversations.runtime_resume import (
|
|
|
66
72
|
)
|
|
67
73
|
from ksadk.ids import new_run_id
|
|
68
74
|
from ksadk.model_policy import model_policy_options_for_model
|
|
69
|
-
from ksadk.sessions import resolve_session_service
|
|
75
|
+
from ksadk.sessions import SessionEvent, resolve_session_service
|
|
76
|
+
|
|
77
|
+
logger = logging.getLogger(__name__)
|
|
70
78
|
|
|
71
79
|
|
|
72
80
|
async def build_run_input(
|
|
@@ -87,6 +95,21 @@ async def build_run_input(
|
|
|
87
95
|
governance_state: RuntimeGovernanceState | None = None,
|
|
88
96
|
session_service_provider: Callable[[], Any] | None = None,
|
|
89
97
|
run_mode: str = RUN_MODE_FOREGROUND,
|
|
98
|
+
runner: Any | None = None,
|
|
99
|
+
runtime_type: str | None = None,
|
|
100
|
+
agent_system: str = "",
|
|
101
|
+
agent_task: str = "",
|
|
102
|
+
prompt_integration_mode: str = "",
|
|
103
|
+
context_engine_rollout: str | None = None,
|
|
104
|
+
memory_recall_enabled: bool | None = None,
|
|
105
|
+
memory_write_rollout: str | None = None,
|
|
106
|
+
memory_enabled: bool | None = None,
|
|
107
|
+
memory_write_mode: str = "candidate",
|
|
108
|
+
flush_before_compaction: bool = True,
|
|
109
|
+
provider_ref: str = "local-default",
|
|
110
|
+
deployment_mode: str = "local",
|
|
111
|
+
agent_max_input_tokens: int | None = None,
|
|
112
|
+
agent_reserve_output_tokens: int | None = None,
|
|
90
113
|
) -> PreparedConversationTurn:
|
|
91
114
|
"""构建一次 turn 的标准运行输入,并在进入模型前做上下文投影/压缩。
|
|
92
115
|
|
|
@@ -124,6 +147,26 @@ async def build_run_input(
|
|
|
124
147
|
}
|
|
125
148
|
normalized_instructions = str(instructions or "").strip()
|
|
126
149
|
|
|
150
|
+
# PR A:当 agent_system/agent_task 非空时,编译真实 CompiledPrompt(含 stable section)。
|
|
151
|
+
# 仅用于 hash/trace/future projection,不改 Runner 输入(payload["instructions"] 不变)。
|
|
152
|
+
# platform_policy_source 默认 EnvPlatformPolicySource(env 未设→不产 platform_safety)。
|
|
153
|
+
compiled_prompt: dict[str, Any] | None = None
|
|
154
|
+
if (agent_system or "").strip() or (agent_task or "").strip():
|
|
155
|
+
from ksadk.prompts.resolved import (
|
|
156
|
+
ResolvedPromptSources,
|
|
157
|
+
compile_resolved_prompt_dict,
|
|
158
|
+
get_default_platform_policy_source,
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
compiled_prompt = compile_resolved_prompt_dict(
|
|
162
|
+
ResolvedPromptSources(
|
|
163
|
+
agent_system=agent_system,
|
|
164
|
+
agent_task=agent_task,
|
|
165
|
+
request_instructions=normalized_instructions,
|
|
166
|
+
platform_policy_source=get_default_platform_policy_source(),
|
|
167
|
+
)
|
|
168
|
+
)
|
|
169
|
+
|
|
127
170
|
if resume_input is not None:
|
|
128
171
|
if not session_id:
|
|
129
172
|
raise ValueError("Responses resume input requires session_id")
|
|
@@ -184,6 +227,16 @@ async def build_run_input(
|
|
|
184
227
|
resume_input=normalized_resume_input,
|
|
185
228
|
run_mode=caller_run_mode,
|
|
186
229
|
run_trigger=RUN_TRIGGER_CHECKPOINT_RESUME,
|
|
230
|
+
shadow_context_plan=minimal_shadow_context_plan_dict(
|
|
231
|
+
runner=runner, runtime_type=runtime_type, deployment_mode=deployment_mode
|
|
232
|
+
),
|
|
233
|
+
compiled_prompt=None,
|
|
234
|
+
memory_write_rollout=memory_write_rollout,
|
|
235
|
+
memory_enabled=memory_enabled,
|
|
236
|
+
memory_recall_enabled=memory_recall_enabled,
|
|
237
|
+
memory_write_mode=memory_write_mode,
|
|
238
|
+
flush_before_compaction=flush_before_compaction,
|
|
239
|
+
provider_ref=provider_ref,
|
|
187
240
|
)
|
|
188
241
|
|
|
189
242
|
is_approval_resume = _is_approval_resume_input(normalized_resume_input)
|
|
@@ -253,6 +306,14 @@ async def build_run_input(
|
|
|
253
306
|
existing_events=existing_events,
|
|
254
307
|
)
|
|
255
308
|
effective_resume_input = tool_resume_input or normalized_resume_input
|
|
309
|
+
if tool_resume_input is not None:
|
|
310
|
+
# ToolGateway approvals complete after an otherwise normal tool
|
|
311
|
+
# call. Only LangGraph needs this private marker to restart a
|
|
312
|
+
# terminal graph semantically; runtime_input strips it elsewhere.
|
|
313
|
+
effective_resume_input = {
|
|
314
|
+
**tool_resume_input,
|
|
315
|
+
"_ksadk_gateway_approval_resume": True,
|
|
316
|
+
}
|
|
256
317
|
del existing_events
|
|
257
318
|
event_history = await service.get_events(resolved_session_id)
|
|
258
319
|
history = build_history_from_events(event_history)
|
|
@@ -279,6 +340,23 @@ async def build_run_input(
|
|
|
279
340
|
resume_input=effective_resume_input,
|
|
280
341
|
run_mode=caller_run_mode,
|
|
281
342
|
run_trigger=RUN_TRIGGER_APPROVAL_RESUME,
|
|
343
|
+
shadow_context_plan=build_shadow_context_plan_dict(
|
|
344
|
+
instructions=normalized_instructions,
|
|
345
|
+
history=history,
|
|
346
|
+
user_input=resume_text,
|
|
347
|
+
request_metadata=normalized_request_metadata,
|
|
348
|
+
runner=runner,
|
|
349
|
+
runtime_type=runtime_type,
|
|
350
|
+
model_metadata=resolved_model_metadata,
|
|
351
|
+
deployment_mode=deployment_mode,
|
|
352
|
+
),
|
|
353
|
+
compiled_prompt=None,
|
|
354
|
+
memory_write_rollout=memory_write_rollout,
|
|
355
|
+
memory_enabled=memory_enabled,
|
|
356
|
+
memory_recall_enabled=memory_recall_enabled,
|
|
357
|
+
memory_write_mode=memory_write_mode,
|
|
358
|
+
flush_before_compaction=flush_before_compaction,
|
|
359
|
+
provider_ref=provider_ref,
|
|
282
360
|
)
|
|
283
361
|
|
|
284
362
|
normalized_messages = _normalized_conversation_messages(messages)
|
|
@@ -341,6 +419,17 @@ async def build_run_input(
|
|
|
341
419
|
user_input=user_input or user_display_input,
|
|
342
420
|
)
|
|
343
421
|
|
|
422
|
+
# compaction_owner 硬门控(方案 §6.2):从 capability 取 owner,非 ksadk 时不走双阈值
|
|
423
|
+
from ksadk.context_engine.capabilities import (
|
|
424
|
+
capabilities_for_runner,
|
|
425
|
+
capabilities_for_runtime_type,
|
|
426
|
+
)
|
|
427
|
+
|
|
428
|
+
_caps = (
|
|
429
|
+
capabilities_for_runner(runner)
|
|
430
|
+
if runner is not None
|
|
431
|
+
else capabilities_for_runtime_type(runtime_type)
|
|
432
|
+
)
|
|
344
433
|
checkpoint = await _compact_conversation_history_with_governance(
|
|
345
434
|
governance_state,
|
|
346
435
|
session_id=resolved_session_id,
|
|
@@ -349,6 +438,9 @@ async def build_run_input(
|
|
|
349
438
|
model=model,
|
|
350
439
|
model_metadata=resolved_model_metadata,
|
|
351
440
|
session_service_provider=provider,
|
|
441
|
+
# PR D1:双阈值门控透传。ksadk_hosted → soft/hard proactive compact;否则旧单阈值。
|
|
442
|
+
prompt_integration_mode=prompt_integration_mode,
|
|
443
|
+
compaction_owner=_caps.compaction_owner,
|
|
352
444
|
)
|
|
353
445
|
event_history = await service.get_events(resolved_session_id)
|
|
354
446
|
history = build_history_from_events(event_history)
|
|
@@ -364,10 +456,32 @@ async def build_run_input(
|
|
|
364
456
|
request_responses_history,
|
|
365
457
|
responses_history,
|
|
366
458
|
)
|
|
459
|
+
# The current user event is persisted before context construction so an
|
|
460
|
+
# interrupted turn remains auditable. That event belongs to
|
|
461
|
+
# ``current_input`` though, not to prior history. Keep the legacy
|
|
462
|
+
# ``prepared.history`` contract unchanged for non-hosted paths, while the
|
|
463
|
+
# KsADK-owned planner receives only events from earlier invocations. Using
|
|
464
|
+
# invocation_id (instead of text equality) also handles users deliberately
|
|
465
|
+
# repeating the same message across turns.
|
|
466
|
+
hosted_history = _merge_request_history_with_session_history(
|
|
467
|
+
request_history,
|
|
468
|
+
build_history_from_events(
|
|
469
|
+
[event for event in event_history if event.invocation_id != resolved_invocation_id]
|
|
470
|
+
),
|
|
471
|
+
)
|
|
472
|
+
# PR D2:取最新 checkpoint 的 WorkingState(仅 ksadk_hosted 路径重注入)。
|
|
473
|
+
# 非 ksadk_hosted → working_state=None(零注入,Runner 输入与旧逻辑一致)。
|
|
474
|
+
# PTL retry 后 _refresh_history 也会重读 events,但此处 build_run_input 首次构建时取一次即可;
|
|
475
|
+
# PTL 路径若产生新 checkpoint,retry 用 prepared 已有 working_state(保守:不中途换)。
|
|
476
|
+
working_state: dict[str, Any] | None = None
|
|
477
|
+
if prompt_integration_mode == "ksadk_hosted":
|
|
478
|
+
working_state = _latest_checkpoint_working_state(event_history)
|
|
367
479
|
|
|
368
|
-
|
|
480
|
+
prepared = PreparedConversationTurn(
|
|
369
481
|
session_id=resolved_session_id,
|
|
370
482
|
invocation_id=resolved_invocation_id,
|
|
483
|
+
user_id=resolved_user_id,
|
|
484
|
+
agent_id=agent_id,
|
|
371
485
|
user_input=user_input,
|
|
372
486
|
user_display_input=user_display_input or user_input,
|
|
373
487
|
history=history,
|
|
@@ -397,7 +511,171 @@ async def build_run_input(
|
|
|
397
511
|
),
|
|
398
512
|
run_mode=caller_run_mode,
|
|
399
513
|
run_trigger=caller_run_trigger,
|
|
514
|
+
shadow_context_plan=build_shadow_context_plan_dict(
|
|
515
|
+
instructions=normalized_instructions,
|
|
516
|
+
history=hosted_history if prompt_integration_mode == "ksadk_hosted" else history,
|
|
517
|
+
user_input=user_input,
|
|
518
|
+
request_metadata=normalized_request_metadata,
|
|
519
|
+
runner=runner,
|
|
520
|
+
runtime_type=runtime_type,
|
|
521
|
+
model_metadata=resolved_model_metadata,
|
|
522
|
+
prompt_shadow=compiled_prompt,
|
|
523
|
+
prompt_integration_mode=prompt_integration_mode,
|
|
524
|
+
deployment_mode=deployment_mode,
|
|
525
|
+
),
|
|
526
|
+
compiled_prompt=compiled_prompt,
|
|
527
|
+
prompt_integration_mode=prompt_integration_mode,
|
|
528
|
+
working_state=working_state,
|
|
529
|
+
memory_write_rollout=memory_write_rollout,
|
|
530
|
+
memory_enabled=memory_enabled,
|
|
531
|
+
memory_recall_enabled=memory_recall_enabled,
|
|
532
|
+
memory_write_mode=memory_write_mode,
|
|
533
|
+
flush_before_compaction=flush_before_compaction,
|
|
534
|
+
provider_ref=provider_ref,
|
|
535
|
+
)
|
|
536
|
+
# PR E:ksadk_hosted + V2 开关时运行真实 hosted 链路,回填 context_plan/assembled_input。
|
|
537
|
+
# 失败回退空字段(prepared 字段语义完整),不阻断主链路。
|
|
538
|
+
await _maybe_fill_hosted_pipeline(
|
|
539
|
+
prepared,
|
|
540
|
+
compiled_prompt=compiled_prompt,
|
|
541
|
+
user_input=user_input,
|
|
542
|
+
history=hosted_history,
|
|
543
|
+
working_state=working_state,
|
|
544
|
+
model_metadata=resolved_model_metadata,
|
|
545
|
+
prompt_integration_mode=prompt_integration_mode,
|
|
546
|
+
context_engine_rollout=context_engine_rollout,
|
|
547
|
+
memory_recall_enabled=memory_recall_enabled,
|
|
548
|
+
runtime_type=runtime_type,
|
|
549
|
+
session_id=resolved_session_id,
|
|
550
|
+
invocation_id=resolved_invocation_id,
|
|
551
|
+
user_id=resolved_user_id,
|
|
552
|
+
agent_id=agent_id,
|
|
553
|
+
agent_max_input_tokens=agent_max_input_tokens,
|
|
554
|
+
agent_reserve_output_tokens=agent_reserve_output_tokens,
|
|
555
|
+
)
|
|
556
|
+
return prepared
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
async def _maybe_fill_hosted_pipeline(
|
|
560
|
+
prepared: PreparedConversationTurn,
|
|
561
|
+
*,
|
|
562
|
+
compiled_prompt: dict[str, Any] | None,
|
|
563
|
+
user_input: str,
|
|
564
|
+
history: list[dict[str, str]],
|
|
565
|
+
working_state: dict[str, Any] | None,
|
|
566
|
+
model_metadata: dict[str, Any],
|
|
567
|
+
prompt_integration_mode: str,
|
|
568
|
+
context_engine_rollout: str | None,
|
|
569
|
+
memory_recall_enabled: bool | None,
|
|
570
|
+
agent_max_input_tokens: int | None = None,
|
|
571
|
+
agent_reserve_output_tokens: int | None = None,
|
|
572
|
+
runtime_type: str | None,
|
|
573
|
+
session_id: str,
|
|
574
|
+
invocation_id: str,
|
|
575
|
+
user_id: str,
|
|
576
|
+
agent_id: str,
|
|
577
|
+
) -> None:
|
|
578
|
+
"""PR E:在 ksadk_hosted + V2 时运行 hosted 链路并回填 plan/assembly。
|
|
579
|
+
|
|
580
|
+
门控三重:``KSADK_CONTEXT_ENGINE_V2_ENABLED`` × ``prompt_integration_mode=="ksadk_hosted"``
|
|
581
|
+
× 已编译出含 prompt_content 的 CompiledPrompt(agent_system/agent_task 非空)。任一不满足
|
|
582
|
+
→ 不回填(走旧 PR B 分支,字节级一致)。
|
|
583
|
+
|
|
584
|
+
仅对 ``prompt_owner=ksadk`` 的 runtime(langgraph 系)启用;native_runtime(codex)不进入,
|
|
585
|
+
保证 Managed Codex 不被接管(方案 §6.2 / PCM-RUNNER-003)。
|
|
586
|
+
"""
|
|
587
|
+
from ksadk.context_engine.capabilities import (
|
|
588
|
+
assert_capability_not_circuit_open,
|
|
589
|
+
capabilities_for_runtime_type,
|
|
400
590
|
)
|
|
591
|
+
from ksadk.context_engine.hosted_pipeline import (
|
|
592
|
+
default_hosted_contributors,
|
|
593
|
+
hosted_pipeline_enabled,
|
|
594
|
+
run_hosted_pipeline,
|
|
595
|
+
)
|
|
596
|
+
|
|
597
|
+
if (
|
|
598
|
+
not hosted_pipeline_enabled(rollout=context_engine_rollout)
|
|
599
|
+
or prompt_integration_mode != "ksadk_hosted"
|
|
600
|
+
):
|
|
601
|
+
return
|
|
602
|
+
if (
|
|
603
|
+
not isinstance(compiled_prompt, dict)
|
|
604
|
+
or not str(compiled_prompt.get("prompt_content") or "").strip()
|
|
605
|
+
):
|
|
606
|
+
return
|
|
607
|
+
caps = capabilities_for_runtime_type(runtime_type)
|
|
608
|
+
if caps.prompt_owner != "ksadk":
|
|
609
|
+
return
|
|
610
|
+
# 门禁:该 Runner 若已因 capability mismatch 熔断,回退旧路径(方案 §6.1)。不抛给主链路。
|
|
611
|
+
try:
|
|
612
|
+
assert_capability_not_circuit_open(runtime_type=runtime_type, label="hosted_pipeline")
|
|
613
|
+
except Exception: # noqa: BLE001
|
|
614
|
+
logger.info("hosted pipeline skipped for session=%s: capability circuit open", session_id)
|
|
615
|
+
return
|
|
616
|
+
# PR E:注入默认 Contributors(MemoryRecall 等)进真实链路(方案 §8.7)。
|
|
617
|
+
contributors = default_hosted_contributors(
|
|
618
|
+
user_id=user_id,
|
|
619
|
+
agent_id=agent_id,
|
|
620
|
+
memory_recall_enabled=memory_recall_enabled,
|
|
621
|
+
)
|
|
622
|
+
try:
|
|
623
|
+
result = await run_hosted_pipeline(
|
|
624
|
+
compiled_prompt=compiled_prompt,
|
|
625
|
+
user_input=user_input,
|
|
626
|
+
history=history,
|
|
627
|
+
working_state=working_state,
|
|
628
|
+
model_metadata=model_metadata,
|
|
629
|
+
contributors=contributors,
|
|
630
|
+
# 与 shadow_plan 口径一致:ksadk_hosted + prompt_owner=ksadk + langgraph → ksadk_hosted
|
|
631
|
+
integration_mode=(
|
|
632
|
+
"ksadk_hosted"
|
|
633
|
+
if prompt_integration_mode == "ksadk_hosted"
|
|
634
|
+
and caps.prompt_owner == "ksadk"
|
|
635
|
+
and runtime_type == "langgraph"
|
|
636
|
+
else caps.integration_mode
|
|
637
|
+
),
|
|
638
|
+
accounting_accuracy=caps.token_accounting,
|
|
639
|
+
session_id=session_id,
|
|
640
|
+
invocation_id=invocation_id,
|
|
641
|
+
user_id=user_id,
|
|
642
|
+
agent_id=agent_id,
|
|
643
|
+
agent_max_input_tokens=agent_max_input_tokens,
|
|
644
|
+
agent_reserve_output_tokens=agent_reserve_output_tokens,
|
|
645
|
+
)
|
|
646
|
+
except Exception: # noqa: BLE001
|
|
647
|
+
logger.warning(
|
|
648
|
+
"hosted pipeline failed for session=%s; falling back to PR B path",
|
|
649
|
+
session_id,
|
|
650
|
+
)
|
|
651
|
+
return
|
|
652
|
+
if result is None:
|
|
653
|
+
return
|
|
654
|
+
prepared.context_plan = result.plan
|
|
655
|
+
prepared.assembled_input = {
|
|
656
|
+
"format": result.assembled.format,
|
|
657
|
+
"system": result.assembled.system,
|
|
658
|
+
"messages": list(result.assembled.messages),
|
|
659
|
+
"estimated_tokens": result.assembled.estimated_tokens,
|
|
660
|
+
"warnings": list(result.assembled.warnings),
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
def _latest_checkpoint_working_state(events: Sequence[SessionEvent]) -> dict[str, Any] | None:
|
|
665
|
+
"""取最新 context_checkpoint 事件的 working_state(PR D2)。
|
|
666
|
+
|
|
667
|
+
checkpoint metadata 由 compact_conversation_history 写入(仅 ksadk_hosted)。
|
|
668
|
+
无 checkpoint 或无 working_state 键时返回 None。
|
|
669
|
+
"""
|
|
670
|
+
for event in reversed(list(events)):
|
|
671
|
+
if canonical_event_type(event.event_type) != "context_checkpoint":
|
|
672
|
+
continue
|
|
673
|
+
meta = event.metadata or {}
|
|
674
|
+
ws = meta.get("working_state")
|
|
675
|
+
if isinstance(ws, dict):
|
|
676
|
+
return ws
|
|
677
|
+
return None
|
|
678
|
+
return None
|
|
401
679
|
|
|
402
680
|
|
|
403
681
|
async def _refresh_history(
|
|
@@ -15,6 +15,7 @@ from ksadk.conversations.run_kinds import (
|
|
|
15
15
|
validate_run_mode,
|
|
16
16
|
)
|
|
17
17
|
from ksadk.conversations.runtime_persistence import append_conversation_event
|
|
18
|
+
from ksadk.events.v1_compat import EventTypeV1 as EventType
|
|
18
19
|
from ksadk.sessions import SessionEvent
|
|
19
20
|
from ksadk.tools.gateway import (
|
|
20
21
|
build_tool_receipt_idempotency_key,
|
|
@@ -24,11 +25,7 @@ from ksadk.tools.gateway import (
|
|
|
24
25
|
def _has_pending_approval(events: Sequence[SessionEvent]) -> bool:
|
|
25
26
|
pending = 0
|
|
26
27
|
for event in events:
|
|
27
|
-
event_type =
|
|
28
|
-
event.event_type,
|
|
29
|
-
author=event.author,
|
|
30
|
-
role=str((event.content or {}).get("role") or ""),
|
|
31
|
-
)
|
|
28
|
+
event_type = _approval_lifecycle_event_type(event)
|
|
32
29
|
if event_type == "approval_request":
|
|
33
30
|
pending += 1
|
|
34
31
|
elif event_type == "approval_response" and pending > 0:
|
|
@@ -37,23 +34,17 @@ def _has_pending_approval(events: Sequence[SessionEvent]) -> bool:
|
|
|
37
34
|
|
|
38
35
|
|
|
39
36
|
def _approval_request_id_from_event(event: SessionEvent) -> str:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if
|
|
43
|
-
|
|
44
|
-
if value:
|
|
45
|
-
return str(value)
|
|
37
|
+
interrupt_info = _approval_interrupt_info_from_event(event)
|
|
38
|
+
value = interrupt_info.get("approval_request_id") or interrupt_info.get("id")
|
|
39
|
+
if value:
|
|
40
|
+
return str(value)
|
|
46
41
|
return str(event.id or "")
|
|
47
42
|
|
|
48
43
|
|
|
49
44
|
def _pending_approval_events(events: Sequence[SessionEvent]) -> list[SessionEvent]:
|
|
50
45
|
pending: list[SessionEvent] = []
|
|
51
46
|
for event in events:
|
|
52
|
-
event_type =
|
|
53
|
-
event.event_type,
|
|
54
|
-
author=event.author,
|
|
55
|
-
role=str((event.content or {}).get("role") or ""),
|
|
56
|
-
)
|
|
47
|
+
event_type = _approval_lifecycle_event_type(event)
|
|
57
48
|
if event_type == "approval_request":
|
|
58
49
|
pending.append(event)
|
|
59
50
|
continue
|
|
@@ -79,17 +70,71 @@ def _pending_approval_events(events: Sequence[SessionEvent]) -> list[SessionEven
|
|
|
79
70
|
|
|
80
71
|
def _approval_request_events(events: Sequence[SessionEvent]) -> list[SessionEvent]:
|
|
81
72
|
return [
|
|
82
|
-
event
|
|
83
|
-
for event in events
|
|
84
|
-
if canonical_event_type(
|
|
85
|
-
event.event_type,
|
|
86
|
-
author=event.author,
|
|
87
|
-
role=str((event.content or {}).get("role") or ""),
|
|
88
|
-
)
|
|
89
|
-
== "approval_request"
|
|
73
|
+
event for event in events if _approval_lifecycle_event_type(event) == "approval_request"
|
|
90
74
|
]
|
|
91
75
|
|
|
92
76
|
|
|
77
|
+
def _approval_lifecycle_event_type(event: SessionEvent) -> str:
|
|
78
|
+
"""Classify approvals stored as either legacy session or RuntimeEvent rows."""
|
|
79
|
+
|
|
80
|
+
if event.event_type == EventType.APPROVAL_REQUESTED:
|
|
81
|
+
return "approval_request"
|
|
82
|
+
if event.event_type == EventType.APPROVAL_RESOLVED:
|
|
83
|
+
return "approval_response"
|
|
84
|
+
# canonical schema-v2:审批请求/应答是 interaction.* 事件。
|
|
85
|
+
if event.event_type == "interaction.requested":
|
|
86
|
+
return "approval_request"
|
|
87
|
+
if event.event_type in {"interaction.resolved", "approval.resolved"}:
|
|
88
|
+
return "approval_response"
|
|
89
|
+
return canonical_event_type(
|
|
90
|
+
event.event_type,
|
|
91
|
+
author=event.author,
|
|
92
|
+
role=str((event.content or {}).get("role") or ""),
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _approval_interrupt_info_from_event(event: SessionEvent) -> dict[str, Any]:
|
|
97
|
+
"""Read the approval payload without downgrading canonical RuntimeEvents.
|
|
98
|
+
|
|
99
|
+
RuntimeExecutor persists ``approval.requested`` as a RuntimeEvent envelope,
|
|
100
|
+
whereas legacy runners write an ``approval_request`` SessionEvent. Resume
|
|
101
|
+
accepts both forms so the durable runtime record remains the source of truth.
|
|
102
|
+
"""
|
|
103
|
+
|
|
104
|
+
metadata = event.metadata or {}
|
|
105
|
+
legacy_detail = metadata.get("interrupt_info")
|
|
106
|
+
if isinstance(legacy_detail, Mapping):
|
|
107
|
+
return dict(legacy_detail)
|
|
108
|
+
|
|
109
|
+
content = event.content or {}
|
|
110
|
+
# canonical schema-v2 envelope:content["runtime_event"]["request"]["detail"]
|
|
111
|
+
canonical_payload = content.get("runtime_event")
|
|
112
|
+
if isinstance(canonical_payload, Mapping):
|
|
113
|
+
request = canonical_payload.get("request")
|
|
114
|
+
if isinstance(request, Mapping):
|
|
115
|
+
raw_detail = request.get("detail")
|
|
116
|
+
detail = dict(raw_detail) if isinstance(raw_detail, Mapping) else {}
|
|
117
|
+
approval_id = request.get("call_id") or canonical_payload.get("interaction_id")
|
|
118
|
+
if approval_id:
|
|
119
|
+
detail.setdefault("approval_request_id", approval_id)
|
|
120
|
+
detail.setdefault("id", approval_id)
|
|
121
|
+
if request.get("call_id"):
|
|
122
|
+
detail.setdefault("run_id", request.get("call_id"))
|
|
123
|
+
return detail
|
|
124
|
+
payload = content.get("payload")
|
|
125
|
+
if not isinstance(payload, Mapping):
|
|
126
|
+
return {}
|
|
127
|
+
raw_detail = payload.get("detail")
|
|
128
|
+
detail = dict(raw_detail) if isinstance(raw_detail, Mapping) else {}
|
|
129
|
+
approval_id = payload.get("approval_id") or payload.get("call_id")
|
|
130
|
+
if approval_id:
|
|
131
|
+
detail.setdefault("approval_request_id", approval_id)
|
|
132
|
+
detail.setdefault("id", approval_id)
|
|
133
|
+
if payload.get("call_id"):
|
|
134
|
+
detail.setdefault("run_id", payload.get("call_id"))
|
|
135
|
+
return detail
|
|
136
|
+
|
|
137
|
+
|
|
93
138
|
def _approval_resume_run_mode(
|
|
94
139
|
events: Sequence[SessionEvent],
|
|
95
140
|
resume_input: Mapping[str, Any],
|
|
@@ -167,11 +212,7 @@ def _approval_decision_from_resume(resume_input: Mapping[str, Any]) -> dict[str,
|
|
|
167
212
|
def _consecutive_approval_denials_from_events(events: Sequence[SessionEvent]) -> int:
|
|
168
213
|
denials = 0
|
|
169
214
|
for event in reversed(events):
|
|
170
|
-
event_type =
|
|
171
|
-
event.event_type,
|
|
172
|
-
author=event.author,
|
|
173
|
-
role=str((event.content or {}).get("role") or ""),
|
|
174
|
-
)
|
|
215
|
+
event_type = _approval_lifecycle_event_type(event)
|
|
175
216
|
if event_type != "approval_response":
|
|
176
217
|
continue
|
|
177
218
|
resume_input = (event.metadata or {}).get("resume_input")
|
|
@@ -210,9 +251,7 @@ def _normalize_approval_resume_input(
|
|
|
210
251
|
if matched_event is None:
|
|
211
252
|
return normalized
|
|
212
253
|
|
|
213
|
-
interrupt_info = (matched_event
|
|
214
|
-
if not isinstance(interrupt_info, Mapping):
|
|
215
|
-
return normalized
|
|
254
|
+
interrupt_info = _approval_interrupt_info_from_event(matched_event)
|
|
216
255
|
if not (interrupt_info.get("tool_name") or normalized.get("tool_name")):
|
|
217
256
|
return normalized
|
|
218
257
|
|