agentengine-sdk-python 0.8.0__py3-none-any.whl → 0.8.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/METADATA +43 -7
- agentengine_sdk_python-0.8.2.dist-info/RECORD +778 -0
- {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/WHEEL +1 -1
- ksadk/a2a/__init__.py +2 -0
- ksadk/a2a/_space_client_events.py +381 -0
- ksadk/a2a/bootstrap.py +0 -2
- ksadk/a2a/card.py +6 -111
- ksadk/a2a/control_plane.py +239 -1
- ksadk/a2a/event_adapter.py +156 -64
- ksadk/a2a/executor.py +195 -172
- ksadk/a2a/routes.py +12 -5
- ksadk/a2a/server.py +1 -8
- ksadk/a2a/service_env.py +33 -0
- ksadk/a2a/space_client.py +43 -349
- ksadk/a2a_card.py +101 -0
- ksadk/a2ui/core.py +222 -53
- ksadk/agui/_agent_helpers.py +243 -0
- ksadk/agui/a2ui_projection.py +12 -5
- ksadk/agui/agent.py +474 -275
- ksadk/agui/config.py +11 -5
- ksadk/agui/routes.py +7 -15
- ksadk/api/client.py +530 -40
- ksadk/api/environment.py +27 -0
- ksadk/builders/code_builder.py +352 -53
- ksadk/builders/container_builder.py +71 -44
- ksadk/builders/framework_requirements.py +2 -1
- ksadk/builders/ks3_uploader.py +2 -2
- ksadk/builders/managed_runtime_builder.py +60 -28
- ksadk/cli/__init__.py +25 -0
- ksadk/cli/cmd_a2a.py +18 -31
- ksadk/cli/cmd_create.py +13 -26
- ksadk/cli/cmd_dashboard.py +15 -1
- ksadk/cli/cmd_deploy.py +28 -3
- ksadk/cli/cmd_eval.py +443 -0
- ksadk/cli/cmd_evalset.py +284 -0
- ksadk/cli/cmd_files.py +5 -1
- ksadk/cli/cmd_hermes.py +137 -163
- ksadk/cli/cmd_invoke.py +28 -38
- ksadk/cli/cmd_launch.py +12 -0
- ksadk/cli/cmd_managed_runtime.py +95 -0
- ksadk/cli/cmd_observe.py +85 -0
- ksadk/cli/cmd_openclaw.py +85 -479
- ksadk/cli/cmd_replay.py +28 -4
- ksadk/cli/cmd_run.py +29 -67
- ksadk/cli/cmd_studio.py +201 -0
- ksadk/cli/cmd_web.py +15 -6
- ksadk/cli/dry_run.py +2 -1
- ksadk/cli/env_options.py +83 -0
- ksadk/cli/global_options.py +3 -1
- ksadk/cli/hermes_env.py +151 -0
- ksadk/cli/invoke_payload.py +49 -0
- ksadk/cli/network_options.py +7 -5
- ksadk/cli/openclaw_env.py +458 -0
- ksadk/cli/runtime_bootstrap.py +51 -0
- ksadk/cli/ui.py +6 -0
- ksadk/cli/workflow_common.py +5 -5
- ksadk/codex/__init__.py +3 -3
- ksadk/codex/client.py +833 -49
- ksadk/codex/phase.py +1 -1
- ksadk/codex/runtime.py +720 -127
- ksadk/common/kop_client.py +232 -0
- ksadk/configs/__init__.py +1 -3
- ksadk/configs/env_registry.py +244 -45
- ksadk/configs/env_registry_pcm.py +181 -0
- ksadk/configs/env_var_spec.py +18 -0
- ksadk/configs/global_config.py +6 -1
- ksadk/configs/settings.py +5 -108
- ksadk/context_engine/__init__.py +98 -0
- ksadk/context_engine/assembler.py +176 -0
- ksadk/context_engine/baseline.py +419 -0
- ksadk/context_engine/cache_observability.py +228 -0
- ksadk/context_engine/capabilities.py +443 -0
- ksadk/context_engine/contributors.py +344 -0
- ksadk/context_engine/hosted_pipeline.py +417 -0
- ksadk/context_engine/models.py +117 -0
- ksadk/context_engine/planner.py +698 -0
- ksadk/context_engine/policies.py +319 -0
- ksadk/context_engine/projection.py +31 -0
- ksadk/context_engine/shadow_plan.py +266 -0
- ksadk/context_engine/tokenizer.py +164 -0
- ksadk/conversations/__init__.py +85 -94
- ksadk/conversations/context.py +126 -6
- ksadk/conversations/message_projection.py +292 -28
- ksadk/conversations/model_context.py +49 -3
- ksadk/conversations/runtime_compaction.py +207 -5
- ksadk/conversations/runtime_input.py +193 -3
- ksadk/conversations/runtime_invocation.py +81 -3
- ksadk/conversations/runtime_observability.py +157 -4
- ksadk/conversations/runtime_payloads.py +42 -0
- ksadk/conversations/runtime_preparation.py +280 -2
- ksadk/conversations/runtime_resume.py +71 -32
- ksadk/conversations/runtime_stream_events.py +94 -9
- ksadk/conversations/runtime_streaming.py +175 -22
- ksadk/conversations/semantic_summary.py +311 -1
- ksadk/conversations/session_lock.py +51 -0
- ksadk/deployment/env_forward.py +72 -0
- ksadk/deployment/managed_runtime.py +38 -0
- ksadk/deployment/manager.py +24 -8
- ksadk/deployment/providers/serverless.py +228 -92
- ksadk/evaluation/__init__.py +116 -0
- ksadk/evaluation/a2a_adapter.py +452 -0
- ksadk/evaluation/adapters.py +67 -0
- ksadk/evaluation/agent_eval_client.py +395 -0
- ksadk/evaluation/cloud_binding.py +80 -0
- ksadk/evaluation/cloud_converter.py +194 -0
- ksadk/evaluation/cloud_service.py +199 -0
- ksadk/evaluation/contracts.py +478 -0
- ksadk/evaluation/evalset.py +351 -0
- ksadk/evaluation/evaluators.py +627 -0
- ksadk/evaluation/evidence.py +258 -0
- ksadk/evaluation/executor.py +143 -0
- ksadk/evaluation/local_adapter.py +550 -0
- ksadk/evaluation/service_env.py +27 -0
- ksadk/evaluation/storage.py +68 -0
- ksadk/evaluation/studio_build_adapter.py +253 -0
- ksadk/evaluation/target.py +82 -0
- ksadk/events/__init__.py +13 -13
- ksadk/events/_v1_compat/__init__.py +1 -0
- ksadk/events/_v1_compat/models.py +299 -0
- ksadk/events/_v1_compat/parser.py +247 -0
- ksadk/events/_v1_compat/projection.py +753 -0
- ksadk/events/adapters/__init__.py +34 -0
- ksadk/events/adapters/_a2a_snapshot.py +622 -0
- ksadk/events/adapters/_a2a_support.py +275 -0
- ksadk/events/adapters/_codex_interactions.py +375 -0
- ksadk/events/adapters/_codex_items.py +801 -0
- ksadk/events/adapters/_codex_validators.py +311 -0
- ksadk/events/adapters/_langgraph_support.py +785 -0
- ksadk/events/adapters/a2a.py +841 -0
- ksadk/events/adapters/adk.py +503 -0
- ksadk/events/adapters/codex.py +717 -0
- ksadk/events/adapters/langgraph.py +745 -0
- ksadk/events/canonical.py +440 -0
- ksadk/events/canonical_replay.py +497 -0
- ksadk/events/canonical_store.py +468 -0
- ksadk/events/cold_recovery.py +257 -0
- ksadk/events/content.py +89 -0
- ksadk/events/identity.py +86 -0
- ksadk/events/pipeline.py +455 -0
- ksadk/events/projections.py +66 -0
- ksadk/events/reducer.py +661 -0
- ksadk/events/replay.py +3 -36
- ksadk/events/runtime_event.py +20 -256
- ksadk/events/session_event.py +324 -0
- ksadk/events/store.py +3 -316
- ksadk/events/v1_compat.py +41 -0
- ksadk/harness/__init__.py +3 -2
- ksadk/harness/app.py +114 -123
- ksadk/harness/config.py +1 -1
- ksadk/harness/runtime.py +467 -0
- ksadk/hermes_terminal.py +5 -0
- ksadk/identity/resolver.py +4 -3
- ksadk/interaction/__init__.py +28 -0
- ksadk/interaction/contracts.py +136 -0
- ksadk/interaction/ledger.py +189 -0
- ksadk/interaction/provider.py +122 -0
- ksadk/interaction/providers/__init__.py +52 -0
- ksadk/interaction/providers/adk.py +40 -0
- ksadk/interaction/providers/codex.py +94 -0
- ksadk/interaction/providers/langgraph.py +58 -0
- ksadk/kernel/__init__.py +117 -0
- ksadk/kernel/authorization.py +258 -0
- ksadk/kernel/bootstrap.py +1074 -0
- ksadk/kernel/contract_fingerprints.py +61 -0
- ksadk/kernel/contracts.py +362 -0
- ksadk/kernel/control.py +219 -0
- ksadk/kernel/errors.py +79 -0
- ksadk/kernel/ingress.py +1102 -0
- ksadk/kernel/mapping.py +111 -0
- ksadk/kernel/memory_store.py +1133 -0
- ksadk/kernel/postgres_store.py +1756 -0
- ksadk/kernel/recovery.py +452 -0
- ksadk/kernel/runtime_identity.py +103 -0
- ksadk/kernel/sql/001_agent_kernel.sql +120 -0
- ksadk/kernel/sqlite_store.py +1410 -0
- ksadk/kernel/state.py +145 -0
- ksadk/kernel/store.py +232 -0
- ksadk/kernel/worker.py +953 -0
- ksadk/knowledge_base/client.py +22 -4
- ksadk/knowledge_base/service.py +32 -5
- ksadk/managed_a2a_card.py +160 -0
- ksadk/managed_runtime.py +16 -9
- ksadk/memory/__init__.py +61 -0
- ksadk/memory/adk/backends/base_ltm_backend.py +96 -1
- ksadk/memory/adk/backends/http_ltm_backend.py +14 -5
- ksadk/memory/adk/backends/inmemory_ltm_backend.py +136 -3
- ksadk/memory/adk/backends/sdk_ltm_backend.py +394 -5
- ksadk/memory/adk/backends/sqlite_ltm_backend.py +95 -0
- ksadk/memory/adk/long_term_memory.py +3 -2
- ksadk/memory/coordinator.py +461 -0
- ksadk/memory/events.py +202 -0
- ksadk/memory/extraction.py +228 -0
- ksadk/memory/ltm_backend_factory.py +16 -3
- ksadk/memory/models.py +316 -0
- ksadk/memory/policy.py +215 -0
- ksadk/memory/provider.py +47 -0
- ksadk/memory/provider_adapter.py +159 -0
- ksadk/memory/provider_resolver.py +71 -0
- ksadk/memory/providers/__init__.py +5 -0
- ksadk/memory/providers/local_sqlite.py +490 -0
- ksadk/memory/resolved_policy.py +145 -0
- ksadk/memory/service.py +198 -8
- ksadk/memory/tool.py +4 -0
- ksadk/model_proxy/bootstrap.py +16 -9
- ksadk/model_proxy/config.py +22 -1
- ksadk/model_proxy/detect.py +202 -9
- ksadk/model_proxy/namespace.py +67 -15
- ksadk/model_proxy/server.py +168 -6
- ksadk/model_proxy/transform.py +105 -3
- ksadk/observability/__init__.py +25 -0
- ksadk/observability/session_log.py +420 -0
- ksadk/observability/trajectory.py +105 -0
- ksadk/prompts/__init__.py +71 -0
- ksadk/prompts/compiler.py +215 -0
- ksadk/prompts/models.py +82 -0
- ksadk/prompts/projection.py +89 -0
- ksadk/prompts/resolved.py +137 -0
- ksadk/prompts/sources.py +233 -0
- ksadk/runners/_langgraph_runner_streams.py +822 -0
- ksadk/runners/adk_runner.py +14 -31
- ksadk/runners/base_runner.py +44 -3
- ksadk/runners/factory.py +3 -3
- ksadk/runners/langgraph_runner.py +252 -433
- ksadk/runners/utils/__init__.py +0 -10
- ksadk/runners/utils/loader.py +16 -0
- ksadk/runtime/__init__.py +67 -41
- ksadk/runtime/_runner_adapter/__init__.py +1 -0
- ksadk/runtime/_runner_adapter/stream_mapping.py +788 -0
- ksadk/runtime/adapter.py +199 -16
- ksadk/runtime/conversation_execution.py +687 -0
- ksadk/runtime/executor.py +392 -0
- ksadk/runtime/factory.py +342 -0
- ksadk/runtime/framework_adapters.py +6 -12
- ksadk/runtime/hosted_finalizer.py +268 -0
- ksadk/runtime/launch.py +61 -0
- ksadk/runtime/preprocessing.py +49 -14
- ksadk/runtime/runner_adapter.py +330 -391
- ksadk/runtime/runner_loading.py +36 -0
- ksadk/runtime/usage.py +33 -0
- ksadk/sandbox/backends/e2b.py +36 -3
- ksadk/server/__init__.py +39 -4
- ksadk/server/app.py +18 -492
- ksadk/server/composition.py +36 -2
- ksadk/server/factory.py +210 -149
- ksadk/server/routes/common.py +15 -46
- ksadk/server/routes/control.py +13 -9
- ksadk/server/routes/kernel_ingress.py +258 -0
- ksadk/server/routes/misc.py +10 -33
- ksadk/server/routes/models.py +14 -6
- ksadk/server/routes/openai_compat.py +129 -27
- ksadk/server/routes/projection.py +84 -16
- ksadk/server/routes/run.py +347 -460
- ksadk/server/routes/sessions.py +37 -40
- ksadk/server/routes/streaming.py +52 -7
- ksadk/server/routes/workspace.py +54 -21
- ksadk/server/static/assets/{ArtifactsPanel-Cjnqt-8W.js → ArtifactsPanel-DSU1sWD_.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-BqyqZfuB.js → CodeBlock-DOH6MVcn.js} +4 -4
- ksadk/server/static/assets/{MathMessageMarkdown-BpH7jiFM.js → MathMessageMarkdown-BL8my1R2.js} +4 -4
- ksadk/server/static/assets/MathMessageMarkdown-BorAY7qD.css +1 -0
- ksadk/server/static/assets/MermaidBlock-Dz4IP-Tx.js +312 -0
- ksadk/server/static/assets/NativeTerminalPanel-DUrK0JpZ.js +1 -0
- ksadk/server/static/assets/abnfDiagram-VCTEODGH-g20pFzNV.js +1 -0
- ksadk/server/static/assets/arc-C4FzinUA.js +1 -0
- ksadk/server/static/assets/architecture-7GRP2DOG-DjKratdf.js +1 -0
- ksadk/server/static/assets/architectureDiagram-5GKGNRK7-DpIqL5h4.js +36 -0
- ksadk/server/static/assets/blockDiagram-NRAW4CY4-BjkljTNz.js +129 -0
- ksadk/server/static/assets/c4Diagram-UCG6FXSJ-Dk_ieq2X.js +38 -0
- ksadk/server/static/assets/channel-4cQHKtx1.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-DmgWkESh.js +1 -0
- ksadk/server/static/assets/{chunk-FMBD7UC4-BGhvzDYt.js → chunk-5VM5RSS4-BVHAchFb.js} +1 -1
- ksadk/server/static/assets/{chunk-ND2GUHAM-D98vPd-E.js → chunk-F27PBJKO-C-ipQzuS.js} +1 -1
- ksadk/server/static/assets/chunk-G27WJ6UU-C2EyJbIK.js +231 -0
- ksadk/server/static/assets/{chunk-4BX2VUAB-CsWIQRhc.js → chunk-JWPE2WC7-vYvVJb_M.js} +1 -1
- ksadk/server/static/assets/chunk-LCL6LL3I-BcI6ysPT.js +206 -0
- ksadk/server/static/assets/chunk-POPQ4Y6H-C030x_Z1.js +1 -0
- ksadk/server/static/assets/chunk-RHFEMEQ7-yyGpsz4n.js +168 -0
- ksadk/server/static/assets/chunk-SVP7TREG-BLTlmMU7.js +88 -0
- ksadk/server/static/assets/chunk-XXDRQBXY-C_32ArgP.js +1 -0
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-DLFd9Xi0.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-DLFd9Xi0.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-S5V4N54A-CX3yotHq.js → cose-bilkent-JH36ORCC-9YQYwdl0.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DjEM48Qp.js +1 -0
- ksadk/server/static/assets/cynefinDiagram-5FMLGOSQ-ErLF5N13.js +62 -0
- ksadk/server/static/assets/cytoscape.esm-CyCl8rPi.js +321 -0
- ksadk/server/static/assets/dagre-3AP2YEHR-DFiQF-6f.js +4 -0
- ksadk/server/static/assets/dagre-BuhGnRI1.js +1 -0
- ksadk/server/static/assets/diagram-S7CK7UJ4-Bt1v8-GC.js +30 -0
- ksadk/server/static/assets/diagram-UQ7AKVKN-DSCxJdBK.js +41 -0
- ksadk/server/static/assets/diagram-VSXAHHWV-DHfYwp_9.js +3 -0
- ksadk/server/static/assets/diagram-VX7I27RA-DdzD-4Le.js +24 -0
- ksadk/server/static/assets/diagram-Z3DM3KII-Du-nAJ9F.js +24 -0
- ksadk/server/static/assets/{dist-D82mtD2s.js → dist-8hqcx0sU.js} +1 -1
- ksadk/server/static/assets/dist-B7seoj3d.js +1 -0
- ksadk/server/static/assets/{dist-DHn6nBzr.js → dist-BE7bu-DL.js} +1 -1
- ksadk/server/static/assets/{dist-eoW6tZXA.js → dist-BVDffZ0U.js} +1 -1
- ksadk/server/static/assets/{dist-C2xjE7cO.js → dist-BX8z72IC.js} +1 -1
- ksadk/server/static/assets/{dist-CgF3fj15.js → dist-Bf2M8m3N.js} +1 -1
- ksadk/server/static/assets/{dist-Bs-jQcRX.js → dist-BjU6y-A2.js} +1 -1
- ksadk/server/static/assets/{dist-Djgl2wVZ.js → dist-BytlxIDT.js} +1 -1
- ksadk/server/static/assets/{dist-CVQRZjPu.js → dist-CSh_DE14.js} +1 -1
- ksadk/server/static/assets/{dist-6CVKuTAe.js → dist-CXYYBw3_.js} +1 -1
- ksadk/server/static/assets/{dist-DlzCRy0S.js → dist-C_wsv-Qd.js} +1 -1
- ksadk/server/static/assets/{dist-DF06ORQo.js → dist-ClxGviKw.js} +1 -1
- ksadk/server/static/assets/{dist-Cf23NY4L.js → dist-CttYUqzS.js} +1 -1
- ksadk/server/static/assets/{dist-ivOya1LD.js → dist-DNp6rLRA.js} +1 -1
- ksadk/server/static/assets/{dist-BibcG1V9.js → dist-DUX-id_F.js} +1 -1
- ksadk/server/static/assets/{dist-BUHRxvDG.js → dist-DmldrHd_.js} +1 -1
- ksadk/server/static/assets/{dist-BZ9n9AjO.js → dist-DnfXs8Vn.js} +2 -2
- ksadk/server/static/assets/{dist-DqNnNFrw.js → dist-Dq9gLD7L.js} +1 -1
- ksadk/server/static/assets/{dist-CGcp2ex8.js → dist-W-TIVntx.js} +1 -1
- ksadk/server/static/assets/{dist-Cwt7koer.js → dist-dDdADKFA.js} +1 -1
- ksadk/server/static/assets/{dist-C7-3jInC.js → dist-dydu68Fl.js} +1 -1
- ksadk/server/static/assets/{dist-C99THtIA.js → dist-ngtN0DJB.js} +1 -1
- ksadk/server/static/assets/ebnfDiagram-PWID7BFC-Da9C9NO1.js +1 -0
- ksadk/server/static/assets/erDiagram-SSCWMZ5O-EAGqqR79.js +99 -0
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CMgMaJrC.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-BBKL0x3P.js +1 -0
- ksadk/server/static/assets/ganttDiagram-EL5Y4UJY-DqJsKb59.js +292 -0
- ksadk/server/static/assets/gitGraph-4MIJSDKK-Dw63mrhw.js +1 -0
- ksadk/server/static/assets/gitGraphDiagram-WWUBYQGX-B6g4dtDi.js +106 -0
- ksadk/server/static/assets/index-8ipRcQ-M.js +240 -0
- ksadk/server/static/assets/index-ByFCqjlh.css +2 -0
- ksadk/server/static/assets/info-A6RAGUB7-B6iAblII.js +1 -0
- ksadk/server/static/assets/infoDiagram-RXCK75RN-Djm_nbd5.js +2 -0
- ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-DLOHGvWw.js → ishikawaDiagram-5VMMS53U-DWya9SG2.js} +6 -6
- ksadk/server/static/assets/{journeyDiagram-JHISSGLW-BIzKeejT.js → journeyDiagram-EYS64GPL-DutxhSNI.js} +6 -6
- ksadk/server/static/assets/{kanban-definition-UN3LZRKU-BWHoFSw2.js → kanban-definition-3QL26DDD-DJdOF8Fm.js} +10 -10
- ksadk/server/static/assets/katex-vFWytM5c.js +257 -0
- ksadk/server/static/assets/{linear-CvMBw9cA.js → linear-BHjG8b-J.js} +1 -1
- ksadk/server/static/assets/mermaid-parser.core-KGSy4jWT.js +166 -0
- ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-CSAQxEAe.js → mindmap-definition-FBJOCRG2-9-HC88D4.js} +29 -29
- ksadk/server/static/assets/packet-AYTQ26CC-BOYAipuq.js +1 -0
- ksadk/server/static/assets/pegDiagram-XKGWAZYB-DrEZd4fD.js +1 -0
- ksadk/server/static/assets/pie-WAS4IAKB-Ctq0Kbku.js +1 -0
- ksadk/server/static/assets/pieDiagram-E7YTZNPT-DpjqOFFp.js +39 -0
- ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-CxIR4JXI.js → quadrantDiagram-AXDQQJYC-BiNhgOXX.js} +6 -6
- ksadk/server/static/assets/radar-RG4KPBEZ-DN0-ul_0.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-C6cC_to0.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BimjIuRc.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-CvY65ABq.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-D72Iq_Tv.js +1 -0
- ksadk/server/static/assets/railroadDiagram-O6MQD6OU-_Y3Ojg6G.js +1 -0
- ksadk/server/static/assets/requirementDiagram-EFPCY7ZU-DeCFdg9K.js +84 -0
- ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-DpGa6EAV.js → sankeyDiagram-P5KCCOFB-CPH75rhw.js} +7 -7
- ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-NTKNGGe5.js → sequenceDiagram-WJ2MYXX4-OEpQQdr4.js} +10 -10
- ksadk/server/static/assets/sizeCapture-X5ZJPWSS-heUErzhI.js +1 -0
- ksadk/server/static/assets/stateDiagram-HBIQ2CUA-DvA3jSMB.js +1 -0
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BgQY03nz.js +1 -0
- ksadk/server/static/assets/swimlanes-XN3QIQJK-CR-dfN_t.js +1 -0
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-DLVw3q5Q.js +8 -0
- ksadk/server/static/assets/{timeline-definition-PNZ67QCA-jqoYs3jQ.js → timeline-definition-24CTP7MA-DAVJf1TX.js} +7 -7
- ksadk/server/static/assets/treeView-Q6P3EWNA-BMpO0wsB.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-Et0aqzU3.js +1 -0
- ksadk/server/static/assets/vennDiagram-4TSXK5OY-DwM8eDkh.js +34 -0
- ksadk/server/static/assets/wardley-WFR3VGLG-CbY0mhpl.js +1 -0
- ksadk/server/static/assets/wardleyDiagram-VM6X3IG4-DZL-Zz2t.js +78 -0
- ksadk/server/static/assets/xychartDiagram-S5SC5T6Z-Dy6Yh_hu.js +7 -0
- ksadk/server/static/index.html +2 -2
- ksadk/sessions/__init__.py +26 -9
- ksadk/sessions/_local_service_sync.py +688 -0
- ksadk/sessions/_local_tables.py +21 -0
- ksadk/sessions/_postgres_schema.py +305 -0
- ksadk/sessions/_postgres_tables.py +15 -0
- ksadk/sessions/base.py +80 -1
- ksadk/sessions/in_memory.py +53 -2
- ksadk/sessions/local_service.py +63 -604
- ksadk/sessions/postgres_service.py +58 -148
- ksadk/sessions/resilient.py +35 -1
- ksadk/skills/runtime/backends/e2b.py +1 -1
- ksadk/skills/service_client.py +13 -3
- ksadk/studio/__init__.py +5 -0
- ksadk/studio/agent_avatar_assets.py +120 -0
- ksadk/studio/agent_lifecycle.py +51 -0
- ksadk/studio/api.py +1598 -0
- ksadk/studio/api_catalog_routes.py +324 -0
- ksadk/studio/api_contracts.py +286 -0
- ksadk/studio/api_helpers.py +132 -0
- ksadk/studio/api_memory_routes.py +82 -0
- ksadk/studio/authoring.py +749 -0
- ksadk/studio/authoring_coordinator.py +1017 -0
- ksadk/studio/builder.py +397 -0
- ksadk/studio/capabilities.py +368 -0
- ksadk/studio/cloud.py +2099 -0
- ksadk/studio/codex_agent_service.py +694 -0
- ksadk/studio/codex_authoring.py +469 -0
- ksadk/studio/codex_builder.py +437 -0
- ksadk/studio/codex_manifest.py +307 -0
- ksadk/studio/codex_run.py +395 -0
- ksadk/studio/compiler.py +190 -0
- ksadk/studio/contracts.py +755 -0
- ksadk/studio/errors.py +47 -0
- ksadk/studio/event_store.py +214 -0
- ksadk/studio/framework_run.py +342 -0
- ksadk/studio/hosted_kernel.py +317 -0
- ksadk/studio/identifiers.py +33 -0
- ksadk/studio/manifest_resolver.py +131 -0
- ksadk/studio/mcp_runtime.py +229 -0
- ksadk/studio/model_client.py +629 -0
- ksadk/studio/model_profile_service.py +214 -0
- ksadk/studio/operations.py +275 -0
- ksadk/studio/otel_trace.py +1060 -0
- ksadk/studio/pagination.py +182 -0
- ksadk/studio/pcm_memory.py +85 -0
- ksadk/studio/python_tool_inspection.py +183 -0
- ksadk/studio/repository.py +327 -0
- ksadk/studio/resource_catalog.py +1260 -0
- ksadk/studio/run_service.py +1133 -0
- ksadk/studio/runtime_catalog.py +74 -0
- ksadk/studio/runtime_source.py +365 -0
- ksadk/studio/service.py +2249 -0
- ksadk/studio/shared_web.py +1004 -0
- ksadk/studio/skill_discovery.py +628 -0
- ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +3 -0
- ksadk/studio/static/assets/index-BLpcdrgW.css +1 -0
- ksadk/studio/static/assets/index-CYekR2Xv.js +260 -0
- ksadk/studio/static/assets/react-vendor-BNmTiJ-I.js +9 -0
- ksadk/studio/static/assets/rolldown-runtime-hePW80VL.js +1 -0
- ksadk/studio/static/index.html +15 -0
- ksadk/studio/templates.py +722 -0
- ksadk/studio/validator.py +265 -0
- ksadk/studio/workspace.py +135 -0
- ksadk/tools/gateway.py +9 -0
- ksadk/toolsets/__init__.py +27 -1
- ksadk/toolsets/a2a.py +426 -0
- ksadk/tracing/__init__.py +19 -21
- ksadk/tracing/setup.py +317 -403
- ksadk/tracing/span_utils.py +0 -44
- ksadk/version.py +1 -1
- ksadk_runtime_common/memory_backend/registry.py +56 -56
- ksadk_runtime_common/schemas/runtime_event_v1.json +37 -0
- ksadk_runtime_common/schemas/runtime_event_v2.json +271 -0
- ksadk_runtime_common/workspace_files/router.py +8 -2
- agentengine_sdk_python-0.8.0.dist-info/RECORD +0 -578
- ksadk/a2a/card_builder.py +0 -64
- ksadk/a2a/client.py +0 -309
- ksadk/events/parser.py +0 -191
- ksadk/harness/runner.py +0 -211
- ksadk/runners/codex_runner.py +0 -132
- ksadk/runners/utils/langfuse.py +0 -230
- ksadk/server/static/assets/MathMessageMarkdown-DeYh8QPr.css +0 -1
- ksadk/server/static/assets/MermaidBlock-DWuxETaJ.js +0 -303
- ksadk/server/static/assets/NativeTerminalPanel-MDTopWMO.js +0 -1
- ksadk/server/static/assets/arc-CFKwSk_B.js +0 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-CynqOWjZ.js +0 -1
- ksadk/server/static/assets/architectureDiagram-3BPJPVTR-Dej8jX8c.js +0 -36
- ksadk/server/static/assets/blockDiagram-GPEHLZMM-1F64jqvy.js +0 -132
- ksadk/server/static/assets/c4Diagram-AAUBKEIU-9q7AUAKb.js +0 -10
- ksadk/server/static/assets/channel-iUGv2N24.js +0 -1
- ksadk/server/static/assets/chunk-2J33WTMH-6qgwJm7Q.js +0 -1
- ksadk/server/static/assets/chunk-55IACEB6-BK8paA20.js +0 -1
- ksadk/server/static/assets/chunk-727SXJPM-B-JEhy7h.js +0 -206
- ksadk/server/static/assets/chunk-AQP2D5EJ-DYBvMHAa.js +0 -231
- ksadk/server/static/assets/chunk-QZHKN3VN-YQIEXeF6.js +0 -1
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-CDAUuoXK.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-CDAUuoXK.js +0 -1
- ksadk/server/static/assets/cytoscape.esm-DelgaX4f.js +0 -321
- ksadk/server/static/assets/dagre-BM42HDAG-C7TguAWo.js +0 -4
- ksadk/server/static/assets/dagre-Bx709z4p.js +0 -1
- ksadk/server/static/assets/diagram-2AECGRRQ-Dd17_kws.js +0 -43
- ksadk/server/static/assets/diagram-5GNKFQAL-DVIClIil.js +0 -10
- ksadk/server/static/assets/diagram-KO2AKTUF-Df_3gYQa.js +0 -3
- ksadk/server/static/assets/diagram-LMA3HP47-BhLk6ZtA.js +0 -24
- ksadk/server/static/assets/diagram-OG6HWLK6-D4GNGvuu.js +0 -24
- ksadk/server/static/assets/dist-DyvYLMW9.js +0 -1
- ksadk/server/static/assets/erDiagram-TEJ5UH35-CnfRcY2M.js +0 -85
- ksadk/server/static/assets/eventmodeling-FCH6USID-ChYO-ijM.js +0 -1
- ksadk/server/static/assets/flowDiagram-I6XJVG4X-DGaJjGNJ.js +0 -162
- ksadk/server/static/assets/ganttDiagram-6RSMTGT7-DpCoB2g9.js +0 -292
- ksadk/server/static/assets/gitGraph-WXDBUCRP-BN_0Fk-j.js +0 -1
- ksadk/server/static/assets/gitGraphDiagram-PVQCEYII-9IKVFBVT.js +0 -106
- ksadk/server/static/assets/graphlib-B8gBHxth.js +0 -1
- ksadk/server/static/assets/index-QSwCHuB8.js +0 -177
- ksadk/server/static/assets/index-jOPmTOZH.css +0 -2
- ksadk/server/static/assets/info-J43DQDTF-Cp6o3vId.js +0 -1
- ksadk/server/static/assets/infoDiagram-5YYISTIA-CYIIsb8y.js +0 -2
- ksadk/server/static/assets/katex-DATssjp1.js +0 -265
- ksadk/server/static/assets/mermaid-parser.core-mGAcEwcq.js +0 -161
- ksadk/server/static/assets/packet-YPE3B663-wQzct3cT.js +0 -1
- ksadk/server/static/assets/pie-LRSECV5Y-BgTQiv-9.js +0 -1
- ksadk/server/static/assets/pieDiagram-4H26LBE5-By-ra07M.js +0 -30
- ksadk/server/static/assets/radar-GUYGQ44K-BIq5fXsn.js +0 -1
- ksadk/server/static/assets/requirementDiagram-4Y6WPE33-DpW90iu3.js +0 -84
- ksadk/server/static/assets/stateDiagram-AJRCARHV-DGpd9yFG.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-B3o579IQ.js +0 -1
- ksadk/server/static/assets/treeView-BLDUP644-Dqi-E0EM.js +0 -1
- ksadk/server/static/assets/treemap-LRROVOQU-ClQP9CJ9.js +0 -1
- ksadk/server/static/assets/vennDiagram-CIIHVFJN-l3Z7-wbP.js +0 -34
- ksadk/server/static/assets/wardley-L42UT6IY-8XLvnNIs.js +0 -1
- ksadk/server/static/assets/wardleyDiagram-YWT4CUSO-BR54GPmr.js +0 -78
- ksadk/server/static/assets/xychartDiagram-2RQKCTM6-SkiH8GsK.js +0 -7
- ksadk/tracing/exporters/langfuse_exporter.py +0 -460
- {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/top_level.txt +0 -0
|
@@ -6,14 +6,33 @@ import uuid
|
|
|
6
6
|
from collections.abc import Mapping
|
|
7
7
|
from typing import Any, Dict, List, Optional
|
|
8
8
|
|
|
9
|
+
from fastapi import HTTPException
|
|
9
10
|
from fastapi.responses import StreamingResponse
|
|
10
11
|
from pydantic import BaseModel
|
|
11
12
|
|
|
13
|
+
from ksadk.conversations.normalize import normalize_kop_messages, normalize_responses_input
|
|
12
14
|
from ksadk.conversations.run_kinds import RUN_MODE_FOREGROUND, trigger_from_resume_input
|
|
15
|
+
from ksadk.conversations.runtime_payloads import (
|
|
16
|
+
build_chat_completions_payload,
|
|
17
|
+
build_responses_payload,
|
|
18
|
+
extract_responses_resume_input,
|
|
19
|
+
)
|
|
20
|
+
from ksadk.conversations.runtime_streaming import (
|
|
21
|
+
stream_runtime_conversation_turn,
|
|
22
|
+
stream_runtime_responses_conversation_turn,
|
|
23
|
+
)
|
|
24
|
+
from ksadk.kernel.ingress import kernel_route_active
|
|
25
|
+
from ksadk.runtime.conversation_execution import invoke_runtime_conversation_once
|
|
26
|
+
from ksadk.server.factory import get_runtime_execution
|
|
13
27
|
|
|
14
28
|
from . import dependencies as deps
|
|
15
29
|
from .checkpoint_resolution import _resolve_checkpoint_resume_input_from_session
|
|
16
|
-
from .
|
|
30
|
+
from .kernel_ingress import (
|
|
31
|
+
_kernel_error_response,
|
|
32
|
+
_kernel_submit,
|
|
33
|
+
kernel_conversation_turn,
|
|
34
|
+
kernel_stream_response,
|
|
35
|
+
)
|
|
17
36
|
from .models import (
|
|
18
37
|
ResponsesRequest,
|
|
19
38
|
_clean_optional_string,
|
|
@@ -23,7 +42,10 @@ from .models import (
|
|
|
23
42
|
_split_custom_metadata,
|
|
24
43
|
)
|
|
25
44
|
from .routers import openai_compat_router
|
|
26
|
-
from .streaming import
|
|
45
|
+
from .streaming import (
|
|
46
|
+
_detached_resume_key_from_input,
|
|
47
|
+
_reject_if_detached_resume_active,
|
|
48
|
+
)
|
|
27
49
|
from .workspace import _build_models_payload
|
|
28
50
|
|
|
29
51
|
|
|
@@ -46,6 +68,26 @@ async def list_openai_models():
|
|
|
46
68
|
"""Expose the current model catalog through the OpenAI-compatible path."""
|
|
47
69
|
|
|
48
70
|
payload = await _build_models_payload()
|
|
71
|
+
try:
|
|
72
|
+
_executor, launch_context = get_runtime_execution()
|
|
73
|
+
except HTTPException:
|
|
74
|
+
launch_context = None
|
|
75
|
+
if launch_context is not None:
|
|
76
|
+
config = dict(launch_context.config)
|
|
77
|
+
raw_allowed = (
|
|
78
|
+
config.get("models") or config.get("allowed_models") or config.get("allowedModels")
|
|
79
|
+
)
|
|
80
|
+
if isinstance(raw_allowed, (list, tuple, set)):
|
|
81
|
+
allowed = {str(item).strip() for item in raw_allowed if str(item).strip()}
|
|
82
|
+
default_model = str(config.get("model") or "").strip()
|
|
83
|
+
if default_model:
|
|
84
|
+
allowed.add(default_model)
|
|
85
|
+
payload = dict(payload)
|
|
86
|
+
payload["data"] = [
|
|
87
|
+
item
|
|
88
|
+
for item in payload.get("data", [])
|
|
89
|
+
if str(item.get("id") or "").strip() in allowed
|
|
90
|
+
]
|
|
49
91
|
return {
|
|
50
92
|
"object": "list",
|
|
51
93
|
"data": payload.get("data", []),
|
|
@@ -57,22 +99,20 @@ async def list_openai_models():
|
|
|
57
99
|
@openai_compat_router.post("/v1/responses")
|
|
58
100
|
async def responses(request: ResponsesRequest):
|
|
59
101
|
"""OpenAI Responses 兼容接口。"""
|
|
60
|
-
|
|
102
|
+
executor, launch_context = get_runtime_execution()
|
|
103
|
+
if kernel_route_active():
|
|
104
|
+
return await _kernel_responses(request, launch_context)
|
|
61
105
|
resolved_session_id, resolved_user_id = _resolve_responses_session_and_user(request)
|
|
62
|
-
agent_id = _runtime_agent_id(
|
|
106
|
+
agent_id = _runtime_agent_id(launch_context)
|
|
63
107
|
|
|
64
|
-
resume_input =
|
|
108
|
+
resume_input = extract_responses_resume_input(request.input)
|
|
65
109
|
resume_input = await _resolve_checkpoint_resume_input_from_session(
|
|
66
110
|
service=deps.resolve_session_service(),
|
|
67
111
|
agent_id=agent_id,
|
|
68
112
|
session_id=resolved_session_id,
|
|
69
113
|
resume_input=resume_input,
|
|
70
114
|
)
|
|
71
|
-
messages = (
|
|
72
|
-
[]
|
|
73
|
-
if resume_input is not None
|
|
74
|
-
else deps.conversation().normalize_responses_input(request.input)
|
|
75
|
-
)
|
|
115
|
+
messages = [] if resume_input is not None else normalize_responses_input(request.input)
|
|
76
116
|
custom_metadata, request_metadata = _split_custom_metadata(request.metadata)
|
|
77
117
|
if request.previous_response_id:
|
|
78
118
|
request_metadata["previous_response_id"] = request.previous_response_id
|
|
@@ -90,11 +130,15 @@ async def responses(request: ResponsesRequest):
|
|
|
90
130
|
invocation_id = _metadata_invocation_id(request_metadata)
|
|
91
131
|
|
|
92
132
|
if request.stream:
|
|
133
|
+
runtime_preparation = (
|
|
134
|
+
None if resume_input is not None else await executor.prepare_start(launch_context)
|
|
135
|
+
)
|
|
93
136
|
resume_key = _detached_resume_key_from_input(resolved_session_id, resume_input)
|
|
94
137
|
_reject_if_detached_resume_active(resume_key)
|
|
95
138
|
return deps.detached_streaming_response(
|
|
96
|
-
|
|
97
|
-
|
|
139
|
+
stream_runtime_responses_conversation_turn(
|
|
140
|
+
executor=executor,
|
|
141
|
+
launch_context=launch_context,
|
|
98
142
|
agent_id=agent_id,
|
|
99
143
|
user_id=resolved_user_id,
|
|
100
144
|
messages=messages,
|
|
@@ -108,9 +152,9 @@ async def responses(request: ResponsesRequest):
|
|
|
108
152
|
resume_input=resume_input,
|
|
109
153
|
account_id=account_id,
|
|
110
154
|
invocation_id=invocation_id,
|
|
111
|
-
prepare_runner=_prepare_runner_for_model,
|
|
112
155
|
session_service_provider=deps.resolve_session_service,
|
|
113
156
|
run_mode=RUN_MODE_FOREGROUND,
|
|
157
|
+
runtime_preparation=runtime_preparation,
|
|
114
158
|
),
|
|
115
159
|
invocation_id=invocation_id,
|
|
116
160
|
resume_key=resume_key,
|
|
@@ -119,8 +163,9 @@ async def responses(request: ResponsesRequest):
|
|
|
119
163
|
)
|
|
120
164
|
|
|
121
165
|
response_id = f"resp_{uuid.uuid4().hex}"
|
|
122
|
-
resolved_session_id, result = await
|
|
123
|
-
|
|
166
|
+
resolved_session_id, result = await invoke_runtime_conversation_once(
|
|
167
|
+
executor=executor,
|
|
168
|
+
launch_context=launch_context,
|
|
124
169
|
agent_id=agent_id,
|
|
125
170
|
user_id=resolved_user_id,
|
|
126
171
|
messages=messages,
|
|
@@ -135,11 +180,10 @@ async def responses(request: ResponsesRequest):
|
|
|
135
180
|
response_id=response_id,
|
|
136
181
|
account_id=account_id,
|
|
137
182
|
invocation_id=invocation_id,
|
|
138
|
-
prepare_runner=_prepare_runner_for_model,
|
|
139
183
|
session_service_provider=deps.resolve_session_service,
|
|
140
184
|
run_mode=RUN_MODE_FOREGROUND,
|
|
141
185
|
)
|
|
142
|
-
return
|
|
186
|
+
return build_responses_payload(
|
|
143
187
|
output_text=result["output_text"],
|
|
144
188
|
model=request.model,
|
|
145
189
|
session_id=resolved_session_id,
|
|
@@ -149,21 +193,79 @@ async def responses(request: ResponsesRequest):
|
|
|
149
193
|
)
|
|
150
194
|
|
|
151
195
|
|
|
196
|
+
async def _kernel_responses(request: ResponsesRequest, launch_context):
|
|
197
|
+
"""kernel 路径(灰度 opt-in):Responses -> AgentControlCommand -> receipt。"""
|
|
198
|
+
|
|
199
|
+
from ksadk.conversations.runtime_persistence import ensure_conversation_session
|
|
200
|
+
|
|
201
|
+
resolved_session_id, resolved_user_id = _resolve_responses_session_and_user(request)
|
|
202
|
+
session = await ensure_conversation_session(
|
|
203
|
+
agent_id=_runtime_agent_id(launch_context),
|
|
204
|
+
user_id=resolved_user_id,
|
|
205
|
+
session_id=resolved_session_id,
|
|
206
|
+
session_service_provider=deps.resolve_session_service,
|
|
207
|
+
)
|
|
208
|
+
session_id = session.id
|
|
209
|
+
metadata = request.metadata if isinstance(request.metadata, dict) else {}
|
|
210
|
+
idempotency_key = (
|
|
211
|
+
_clean_optional_string(metadata.get("idempotency_key"))
|
|
212
|
+
or _metadata_invocation_id(metadata)
|
|
213
|
+
or f"resp_{uuid.uuid4().hex}"
|
|
214
|
+
)
|
|
215
|
+
messages = normalize_responses_input(request.input)
|
|
216
|
+
response_id = f"resp_{uuid.uuid4().hex}"
|
|
217
|
+
receipt, trusted = await _kernel_submit(
|
|
218
|
+
mapper="map_responses_request",
|
|
219
|
+
session_id=session_id,
|
|
220
|
+
idempotency_key=idempotency_key,
|
|
221
|
+
content=messages,
|
|
222
|
+
correlation_ref=response_id,
|
|
223
|
+
source_kind="responses",
|
|
224
|
+
)
|
|
225
|
+
if receipt.status not in ("accepted", "duplicate"):
|
|
226
|
+
return _kernel_error_response(receipt)
|
|
227
|
+
|
|
228
|
+
def build_payload(output_text: str):
|
|
229
|
+
return build_responses_payload(
|
|
230
|
+
output_text=output_text,
|
|
231
|
+
model=request.model,
|
|
232
|
+
session_id=session_id,
|
|
233
|
+
response_id=response_id,
|
|
234
|
+
metadata=None,
|
|
235
|
+
usage=None,
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
if request.stream:
|
|
239
|
+
return kernel_stream_response(
|
|
240
|
+
receipt=receipt,
|
|
241
|
+
trusted=trusted,
|
|
242
|
+
session_id=session_id,
|
|
243
|
+
)
|
|
244
|
+
return await kernel_conversation_turn(
|
|
245
|
+
receipt=receipt,
|
|
246
|
+
trusted=trusted,
|
|
247
|
+
session_id=session_id,
|
|
248
|
+
build_payload=build_payload,
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
|
|
152
252
|
@openai_compat_router.post("/v1/chat/completions")
|
|
153
253
|
async def chat_completions(request: ChatCompletionRequest):
|
|
154
254
|
"""OpenAI 兼容的聊天补全接口 (支持流式和非流式)"""
|
|
155
|
-
|
|
156
|
-
messages =
|
|
157
|
-
agent_id = _runtime_agent_id(
|
|
255
|
+
executor, launch_context = get_runtime_execution()
|
|
256
|
+
messages = normalize_kop_messages(request.messages)
|
|
257
|
+
agent_id = _runtime_agent_id(launch_context)
|
|
158
258
|
resolved_user_id = _clean_optional_string(request.user) or "user"
|
|
159
259
|
account_id = _clean_optional_string(request.account_id)
|
|
160
260
|
custom_metadata, request_metadata = _split_custom_metadata(request.metadata)
|
|
161
261
|
invocation_id = _metadata_invocation_id(request_metadata)
|
|
162
262
|
|
|
163
263
|
if request.stream:
|
|
264
|
+
runtime_preparation = await executor.prepare_start(launch_context)
|
|
164
265
|
return StreamingResponse(
|
|
165
|
-
|
|
166
|
-
|
|
266
|
+
stream_runtime_conversation_turn(
|
|
267
|
+
executor=executor,
|
|
268
|
+
launch_context=launch_context,
|
|
167
269
|
agent_id=agent_id,
|
|
168
270
|
user_id=resolved_user_id,
|
|
169
271
|
messages=messages,
|
|
@@ -175,15 +277,16 @@ async def chat_completions(request: ChatCompletionRequest):
|
|
|
175
277
|
custom_metadata=custom_metadata,
|
|
176
278
|
invocation_id=invocation_id,
|
|
177
279
|
account_id=account_id,
|
|
178
|
-
prepare_runner=_prepare_runner_for_model,
|
|
179
280
|
session_service_provider=deps.resolve_session_service,
|
|
180
281
|
run_mode=RUN_MODE_FOREGROUND,
|
|
282
|
+
runtime_preparation=runtime_preparation,
|
|
181
283
|
),
|
|
182
284
|
media_type="text/event-stream",
|
|
183
285
|
)
|
|
184
286
|
|
|
185
|
-
resolved_session_id, result = await
|
|
186
|
-
|
|
287
|
+
resolved_session_id, result = await invoke_runtime_conversation_once(
|
|
288
|
+
executor=executor,
|
|
289
|
+
launch_context=launch_context,
|
|
187
290
|
agent_id=agent_id,
|
|
188
291
|
user_id=resolved_user_id,
|
|
189
292
|
messages=messages,
|
|
@@ -195,11 +298,10 @@ async def chat_completions(request: ChatCompletionRequest):
|
|
|
195
298
|
custom_metadata=custom_metadata,
|
|
196
299
|
invocation_id=invocation_id,
|
|
197
300
|
account_id=account_id,
|
|
198
|
-
prepare_runner=_prepare_runner_for_model,
|
|
199
301
|
session_service_provider=deps.resolve_session_service,
|
|
200
302
|
run_mode=RUN_MODE_FOREGROUND,
|
|
201
303
|
)
|
|
202
|
-
return
|
|
304
|
+
return build_chat_completions_payload(
|
|
203
305
|
output_text=result["output_text"],
|
|
204
306
|
model=request.model,
|
|
205
307
|
session_id=resolved_session_id,
|
|
@@ -15,8 +15,10 @@ from ksadk.conversations.session_title import (
|
|
|
15
15
|
build_fallback_title,
|
|
16
16
|
build_heuristic_title,
|
|
17
17
|
)
|
|
18
|
-
from ksadk.
|
|
19
|
-
from ksadk.
|
|
18
|
+
from ksadk.events.canonical import ContinuationCreated
|
|
19
|
+
from ksadk.events.canonical_store import session_event_to_runtime_event
|
|
20
|
+
from ksadk.server.factory import get_runtime_execution, get_state
|
|
21
|
+
from ksadk.sessions import Session, SessionEvent
|
|
20
22
|
|
|
21
23
|
from . import dependencies as deps
|
|
22
24
|
from .common import _sanitize_session_state_for_action
|
|
@@ -52,7 +54,6 @@ async def _require_action_session(
|
|
|
52
54
|
|
|
53
55
|
|
|
54
56
|
async def _session_to_action_payload(session: Session) -> dict[str, Any]:
|
|
55
|
-
runner = get_state().runner
|
|
56
57
|
events = list(session.events or [])
|
|
57
58
|
if not events:
|
|
58
59
|
try:
|
|
@@ -106,21 +107,56 @@ async def _session_to_action_payload(session: Session) -> dict[str, Any]:
|
|
|
106
107
|
"CreatedAt": session.created_at,
|
|
107
108
|
"UpdatedAt": session.updated_at,
|
|
108
109
|
"Version": session.version,
|
|
110
|
+
"Continuity": _runtime_continuity_payload(),
|
|
109
111
|
}
|
|
110
|
-
if runner is not None:
|
|
111
|
-
try:
|
|
112
|
-
continuity = await runner.get_session_adapter().describe_continuity(
|
|
113
|
-
runner=runner,
|
|
114
|
-
session=session,
|
|
115
|
-
core=ConversationSessionCore(deps.resolve_session_service()),
|
|
116
|
-
)
|
|
117
|
-
payload["Continuity"] = continuity.to_payload()
|
|
118
|
-
except Exception as exc:
|
|
119
|
-
logger.debug("Failed to describe continuity for session %s: %s", session.id, exc)
|
|
120
112
|
return payload
|
|
121
113
|
|
|
122
114
|
|
|
115
|
+
def _runtime_continuity_payload() -> dict[str, Any]:
|
|
116
|
+
"""Describe continuity from the active RuntimeAdapter capability contract."""
|
|
117
|
+
|
|
118
|
+
state = get_state()
|
|
119
|
+
if state.executor is None or state.launch_context is None:
|
|
120
|
+
# Session storage is independently useful in route-manifest and
|
|
121
|
+
# control-plane-only apps. Do not make a metadata projection require a
|
|
122
|
+
# live runtime execution binding.
|
|
123
|
+
return {
|
|
124
|
+
"Level": "semantic",
|
|
125
|
+
"Path": "replay",
|
|
126
|
+
"Runtime": "unbound",
|
|
127
|
+
"Details": {
|
|
128
|
+
"CheckpointSupported": False,
|
|
129
|
+
"Reason": "RuntimeAdapter is not bound to this app",
|
|
130
|
+
},
|
|
131
|
+
}
|
|
132
|
+
executor, launch_context = get_runtime_execution()
|
|
133
|
+
capabilities = executor.native_capabilities(launch_context)
|
|
134
|
+
continuity = capabilities.get("SessionContinuity")
|
|
135
|
+
continuity = continuity if isinstance(continuity, Mapping) else {}
|
|
136
|
+
checkpoint = capabilities.get("Checkpoint")
|
|
137
|
+
checkpoint = checkpoint if isinstance(checkpoint, Mapping) else {}
|
|
138
|
+
level = str(continuity.get("Level") or "semantic").strip().lower()
|
|
139
|
+
if level not in {"ui_only", "semantic", "runtime", "exact"}:
|
|
140
|
+
level = "semantic"
|
|
141
|
+
return {
|
|
142
|
+
"Level": level,
|
|
143
|
+
"Path": "checkpoint" if checkpoint.get("Supported") else "replay",
|
|
144
|
+
"Runtime": launch_context.runtime_type,
|
|
145
|
+
"Details": {
|
|
146
|
+
"CheckpointSupported": bool(checkpoint.get("Supported")),
|
|
147
|
+
"Reason": str(continuity.get("Reason") or ""),
|
|
148
|
+
},
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
|
|
123
152
|
def _event_to_action_payload(event: SessionEvent) -> dict[str, Any]:
|
|
153
|
+
"""Serialize a stored SessionEvent for the REST action wire.
|
|
154
|
+
|
|
155
|
+
公开承诺字段(契约声明见 ``ksadk/events/projections.py``):
|
|
156
|
+
``EventId``/``SessionId``/``Author``/``EventType``/``Content``/``Timestamp``/
|
|
157
|
+
``SeqId``(有值时附 ``InvocationId``)。这是存储事件形态本身的透传,
|
|
158
|
+
``Content``/``Metadata`` 的内部结构不在承诺范围。
|
|
159
|
+
"""
|
|
124
160
|
payload = {
|
|
125
161
|
"EventId": event.id,
|
|
126
162
|
"SessionId": event.session_id,
|
|
@@ -203,9 +239,41 @@ async def _iter_with_idle_heartbeat(source: AsyncIterator[Any]):
|
|
|
203
239
|
|
|
204
240
|
|
|
205
241
|
def _checkpoint_event_to_action_payload(event: SessionEvent) -> dict[str, Any] | None:
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
242
|
+
"""Project a checkpoint-bearing event into the REST checkpoint action payload.
|
|
243
|
+
|
|
244
|
+
公开承诺字段(契约声明见 ``ksadk/events/projections.py``):``EventId``/
|
|
245
|
+
``SessionId``/``InvocationId``/``SeqId``/``Timestamp``/``RunId``/
|
|
246
|
+
``CheckpointId``/``Framework``/``FrameworkRef``/``IsResumable``/
|
|
247
|
+
``ResumeStatus``/``IsTerminal``/``NextNode``。来源为显式 ``run_checkpoint``
|
|
248
|
+
事件元数据,或 ``continuation.created`` canonical 事件的投影。
|
|
249
|
+
非 checkpoint 事件(或不可识别的 continuation_kind)返回 ``None``。
|
|
250
|
+
内部不保证字段:其余元数据透传键(``Metadata`` 内容随存储演进可变)。
|
|
251
|
+
"""
|
|
252
|
+
if event.event_type == "run_checkpoint":
|
|
253
|
+
metadata = event.metadata or {}
|
|
254
|
+
else:
|
|
255
|
+
canonical = session_event_to_runtime_event(event)
|
|
256
|
+
if not isinstance(canonical, ContinuationCreated):
|
|
257
|
+
return None
|
|
258
|
+
if canonical.continuation_kind != "graph_checkpoint":
|
|
259
|
+
return None
|
|
260
|
+
framework = canonical.source.framework
|
|
261
|
+
framework_ref = {framework: dict(canonical.ref)}
|
|
262
|
+
capability = canonical.source.metadata.get("capability")
|
|
263
|
+
capability = capability if isinstance(capability, Mapping) else {}
|
|
264
|
+
metadata = {
|
|
265
|
+
**dict(event.metadata or {}),
|
|
266
|
+
**dict(canonical.source.metadata),
|
|
267
|
+
"continuation_kind": canonical.continuation_kind,
|
|
268
|
+
"run_id": canonical.run_id,
|
|
269
|
+
"checkpoint_id": canonical.continuation_id,
|
|
270
|
+
"framework": framework,
|
|
271
|
+
"framework_ref": dict(framework_ref),
|
|
272
|
+
"backend": str(capability.get("backend") or "unknown"),
|
|
273
|
+
"scope": str(capability.get("scope") or "unknown"),
|
|
274
|
+
"durable": bool(capability.get("durable", False)),
|
|
275
|
+
"is_resumable": canonical.resumable,
|
|
276
|
+
}
|
|
209
277
|
run_id = str(metadata.get("run_id") or "").strip()
|
|
210
278
|
checkpoint_id = str(metadata.get("checkpoint_id") or "").strip()
|
|
211
279
|
framework = str(metadata.get("framework") or "").strip()
|