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
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Container Builder - Docker 镜像构建
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import json
|
|
5
6
|
import os
|
|
6
7
|
import platform
|
|
7
8
|
import shutil
|
|
@@ -404,12 +405,12 @@ CMD ["python", "entrypoint.py"]
|
|
|
404
405
|
"pydantic>=2.0.0",
|
|
405
406
|
"pyyaml>=6.0.0",
|
|
406
407
|
"httpx>=0.24.0",
|
|
407
|
-
# Tracing
|
|
408
|
+
# Tracing — OTLP 双写收敛:只用 OTel + openinference 自动插桩,
|
|
409
|
+
# 不再安装 Langfuse SDK(callback 路径已删除,Langfuse 通过标准 OTLP 接收)。
|
|
408
410
|
"opentelemetry-api>=1.37.0",
|
|
409
411
|
"opentelemetry-sdk>=1.37.0",
|
|
410
412
|
"opentelemetry-exporter-otlp>=1.37.0",
|
|
411
413
|
"openinference-instrumentation-langchain>=0.1.0",
|
|
412
|
-
"langfuse>=2.0.0",
|
|
413
414
|
]
|
|
414
415
|
|
|
415
416
|
framework = detection_result.type.value
|
|
@@ -441,6 +442,9 @@ CMD ["python", "entrypoint.py"]
|
|
|
441
442
|
|
|
442
443
|
def _generate_entrypoint(self, detection_result, package_name: str) -> str:
|
|
443
444
|
"""生成 entrypoint.py"""
|
|
445
|
+
runtime_config_json = json.dumps(
|
|
446
|
+
self._load_config(), ensure_ascii=False, separators=(",", ":"), default=str
|
|
447
|
+
)
|
|
444
448
|
return f'''"""
|
|
445
449
|
AgentEngine Container 模式入口
|
|
446
450
|
"""
|
|
@@ -448,6 +452,7 @@ AgentEngine Container 模式入口
|
|
|
448
452
|
import sys
|
|
449
453
|
import os
|
|
450
454
|
import logging
|
|
455
|
+
import json
|
|
451
456
|
from pathlib import Path
|
|
452
457
|
|
|
453
458
|
# ========== 日志配置 ==========
|
|
@@ -489,15 +494,11 @@ except ImportError:
|
|
|
489
494
|
|
|
490
495
|
env_keys = [
|
|
491
496
|
"AGENT_RUNTIME_NAME", "AGENT_RUNTIME_ID", "ACCOUNT_ID", "PORT",
|
|
492
|
-
"LANGFUSE_BASE_URL", "LANGFUSE_HOST", "LANGFUSE_PUBLIC_KEY",
|
|
493
|
-
"LANGFUSE_SECRET_KEY", "LANGFUSE_USE_CALLBACK",
|
|
494
497
|
"OTEL_EXPORTER_OTLP_ENDPOINT", "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
|
|
495
498
|
"OTEL_EXPORTER_OTLP_HEADERS", "OTEL_EXPORTER_OTLP_TRACES_HEADERS",
|
|
496
|
-
"OTEL_SERVICE_NAME",
|
|
497
|
-
"
|
|
498
|
-
"
|
|
499
|
-
"CLOUD_MONITOR_LANGFUSE_HOST", "CLOUD_MONITOR_LANGFUSE_PUBLIC_KEY",
|
|
500
|
-
"CLOUD_MONITOR_LANGFUSE_SECRET_KEY", "CLOUD_MONITOR_LANGFUSE_ENABLED",
|
|
499
|
+
"OTEL_SERVICE_NAME",
|
|
500
|
+
"CLOUD_MONITOR_OTLP_ENDPOINT", "CLOUD_MONITOR_OTLP_TRACES_ENDPOINT",
|
|
501
|
+
"CLOUD_MONITOR_OTLP_HEADERS", "CLOUD_MONITOR_OTLP_TRACES_HEADERS",
|
|
501
502
|
"LANGCHAIN_TRACING_V2", "MODEL_NAME",
|
|
502
503
|
]
|
|
503
504
|
for key in env_keys:
|
|
@@ -511,15 +512,9 @@ for key in env_keys:
|
|
|
511
512
|
from ksadk.configs import setup_environment
|
|
512
513
|
setup_environment(Path("/app"))
|
|
513
514
|
|
|
514
|
-
try:
|
|
515
|
-
from ksadk.runners.patch_langchain import apply_patch as apply_langchain_patch
|
|
516
|
-
apply_langchain_patch()
|
|
517
|
-
except ImportError:
|
|
518
|
-
pass
|
|
519
|
-
|
|
520
|
-
from ksadk.runners import create_runner
|
|
521
515
|
from ksadk.detection import DetectionResult, FrameworkType
|
|
522
|
-
from ksadk.
|
|
516
|
+
from ksadk.runtime import RuntimeExecutor, RuntimeLaunchContext, build_default_runtime_registry
|
|
517
|
+
from ksadk.server import RuntimeAppConfig, configure_runtime_app, create_runtime_app
|
|
523
518
|
import uvicorn
|
|
524
519
|
|
|
525
520
|
# 检测结果 (构建时固化)
|
|
@@ -535,49 +530,81 @@ detection_result = DetectionResult(
|
|
|
535
530
|
logger.info(f"框架: {{detection_result.name}}")
|
|
536
531
|
logger.info(f"入口: {{detection_result.entry_point}}")
|
|
537
532
|
|
|
538
|
-
# 初始化 Tracing (
|
|
533
|
+
# 初始化 Tracing (如果配置了标准 OTLP HTTP 或 CloudMonitor OTLP)
|
|
539
534
|
has_otlp = bool(
|
|
540
535
|
os.environ.get("OTEL_EXPORTER_OTLP_ENDPOINT")
|
|
541
536
|
or os.environ.get("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT")
|
|
542
537
|
)
|
|
543
538
|
has_cloud_monitor_otlp = bool(
|
|
544
|
-
os.environ.get("
|
|
539
|
+
os.environ.get("CLOUD_MONITOR_OTLP_TRACES_HEADERS")
|
|
540
|
+
or os.environ.get("CLOUD_MONITOR_OTLP_HEADERS")
|
|
545
541
|
or os.environ.get("CLOUD_MONITOR_OTLP_ENDPOINT")
|
|
546
542
|
or os.environ.get("CLOUD_MONITOR_OTLP_TRACES_ENDPOINT")
|
|
543
|
+
or os.environ.get("CLOUD_MONITOR_APP_KEY")
|
|
547
544
|
)
|
|
548
|
-
|
|
549
|
-
os.environ.get("CLOUD_MONITOR_LANGFUSE_PUBLIC_KEY")
|
|
550
|
-
or os.environ.get("CLOUD_MONITOR_LANGFUSE_SECRET_KEY")
|
|
551
|
-
or os.environ.get("CLOUD_MONITOR_LANGFUSE_HOST")
|
|
552
|
-
)
|
|
553
|
-
if (
|
|
554
|
-
os.environ.get("LANGFUSE_PUBLIC_KEY")
|
|
555
|
-
or has_otlp
|
|
556
|
-
or has_cloud_monitor_otlp
|
|
557
|
-
or has_cloud_monitor_langfuse
|
|
558
|
-
):
|
|
545
|
+
if has_otlp or has_cloud_monitor_otlp:
|
|
559
546
|
try:
|
|
560
547
|
from ksadk.tracing import setup_tracing
|
|
561
|
-
|
|
562
|
-
os.environ.get("LANGFUSE_USE_CALLBACK", "").strip().lower()
|
|
563
|
-
in ("1", "true", "yes", "on")
|
|
564
|
-
)
|
|
565
|
-
setup_tracing(use_callback_only=use_callback_only)
|
|
548
|
+
setup_tracing()
|
|
566
549
|
logger.info(
|
|
567
550
|
f"Tracing 已启用 (OTLP={{has_otlp}}, "
|
|
568
|
-
f"CloudMonitorOTLP={{has_cloud_monitor_otlp}}
|
|
569
|
-
f"CloudMonitorLangfuse={{has_cloud_monitor_langfuse}}, "
|
|
570
|
-
f"CallbackOnly={{use_callback_only}})"
|
|
551
|
+
f"CloudMonitorOTLP={{has_cloud_monitor_otlp}})"
|
|
571
552
|
)
|
|
572
553
|
except Exception as e:
|
|
573
554
|
logger.warning(f"Tracing 初始化失败: {{e}}")
|
|
574
555
|
|
|
575
|
-
#
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
556
|
+
# 只装配统一 RuntimeAdapter 执行链;具体 Adapter 在请求开始时由 Registry 创建。
|
|
557
|
+
runtime_build_config = json.loads({runtime_config_json!r})
|
|
558
|
+
runtime_context = RuntimeLaunchContext(
|
|
559
|
+
runtime_type=detection_result.type.value,
|
|
560
|
+
project_dir=Path("/app"),
|
|
561
|
+
detection=detection_result,
|
|
562
|
+
config=dict(runtime_build_config),
|
|
563
|
+
)
|
|
564
|
+
# managed A2A:KSADK_A2A_RUNTIME_ID 非空时挂 discovery card + 完整数据面 route。
|
|
565
|
+
# discovery card 让 server 探测;数据面 route 让 gateway 转发的 JSON-RPC/REST
|
|
566
|
+
# 能真正落到本 runtime 的 A2A 协议端点(路线 C 直连)。
|
|
567
|
+
_managed_a2a_card = None
|
|
568
|
+
_a2a_config = None
|
|
569
|
+
_a2a_adapter = None
|
|
570
|
+
if os.environ.get("KSADK_A2A_RUNTIME_ID", "").strip():
|
|
571
|
+
from ksadk.managed_a2a_card import build_managed_a2a_card_if_configured
|
|
572
|
+
|
|
573
|
+
_managed_a2a_card = build_managed_a2a_card_if_configured()
|
|
574
|
+
try:
|
|
575
|
+
from ksadk.a2a.routes import A2AConfig
|
|
576
|
+
from ksadk.runtime.factory import create_runtime_adapter
|
|
577
|
+
|
|
578
|
+
_a2a_adapter = create_runtime_adapter(runtime_context)
|
|
579
|
+
_base = (
|
|
580
|
+
os.environ.get("KSADK_A2A_INTERNAL_BASE_URL", "").strip()
|
|
581
|
+
or "http://localhost:8080"
|
|
582
|
+
)
|
|
583
|
+
_a2a_config = A2AConfig(
|
|
584
|
+
enabled=True,
|
|
585
|
+
base_url=_base,
|
|
586
|
+
agent_name=(
|
|
587
|
+
os.environ.get("KSADK_A2A_AGENT_NAME", "").strip()
|
|
588
|
+
or os.environ.get("KSADK_A2A_RUNTIME_ID", "").strip()
|
|
589
|
+
),
|
|
590
|
+
streaming=True,
|
|
591
|
+
task_store_dsn="sqlite+aiosqlite:///.agentengine/a2a_tasks.db",
|
|
592
|
+
)
|
|
593
|
+
except Exception as _e:
|
|
594
|
+
logger.warning(f"managed A2A 数据面装配失败,回退 discovery-only: {{_e}}")
|
|
595
|
+
_a2a_config = None
|
|
596
|
+
_a2a_adapter = None
|
|
597
|
+
app = create_runtime_app(
|
|
598
|
+
RuntimeAppConfig(
|
|
599
|
+
runtime_type=detection_result.type.value,
|
|
600
|
+
runtime_executor=RuntimeExecutor(build_default_runtime_registry()),
|
|
601
|
+
launch_context=runtime_context,
|
|
602
|
+
a2a=_a2a_config or _managed_a2a_card,
|
|
603
|
+
a2a_runtime_adapter=_a2a_adapter,
|
|
604
|
+
),
|
|
605
|
+
configure_runtime_app,
|
|
606
|
+
)
|
|
607
|
+
logger.info("RuntimeAdapter 执行链装配成功!")
|
|
581
608
|
|
|
582
609
|
if __name__ == "__main__":
|
|
583
610
|
port = int(os.environ.get("PORT", 8080))
|
|
@@ -4,7 +4,8 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from typing import Iterable
|
|
6
6
|
|
|
7
|
-
FASTAPI_REQUIREMENT = "fastapi>=0.
|
|
7
|
+
FASTAPI_REQUIREMENT = "fastapi>=0.136.0,<0.137.0"
|
|
8
|
+
STARLETTE_REQUIREMENT = "starlette>=1.0,<1.4"
|
|
8
9
|
|
|
9
10
|
ADK_REQUIREMENTS = (
|
|
10
11
|
# goal-00: 与 ksadk 自身 adk extra 对齐,允许 1.34.x 与 2.x
|
ksadk/builders/ks3_uploader.py
CHANGED
|
@@ -10,7 +10,7 @@ from pathlib import Path
|
|
|
10
10
|
from typing import Optional
|
|
11
11
|
|
|
12
12
|
import click
|
|
13
|
-
from ks3.upload import UploadTask
|
|
13
|
+
from ks3.upload import UploadTask # type: ignore[import-untyped]
|
|
14
14
|
|
|
15
15
|
from ksadk.common.constants import get_ks3_endpoints
|
|
16
16
|
|
|
@@ -258,7 +258,7 @@ class KS3Uploader:
|
|
|
258
258
|
return record_dir / f"{safe_key}.ks3resume"
|
|
259
259
|
|
|
260
260
|
def _upload_via_host(self, file_path: Path, object_key: str, host: str) -> bool:
|
|
261
|
-
from ks3.connection import Connection
|
|
261
|
+
from ks3.connection import Connection # type: ignore[import-untyped]
|
|
262
262
|
|
|
263
263
|
ak = os.environ.get("KSYUN_ACCESS_KEY") or os.environ.get("KS3_ACCESS_KEY")
|
|
264
264
|
sk = os.environ.get("KSYUN_SECRET_KEY") or os.environ.get("KS3_SECRET_KEY")
|
|
@@ -4,7 +4,6 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import hashlib
|
|
6
6
|
import json
|
|
7
|
-
import zipfile
|
|
8
7
|
from pathlib import Path
|
|
9
8
|
from typing import Any
|
|
10
9
|
|
|
@@ -20,10 +19,51 @@ _MANIFEST_KEYS = (
|
|
|
20
19
|
"artifact_type",
|
|
21
20
|
"runtime",
|
|
22
21
|
"model",
|
|
22
|
+
"models",
|
|
23
23
|
"prompt",
|
|
24
|
+
"task_prompt",
|
|
25
|
+
"skills",
|
|
26
|
+
"mcp_servers",
|
|
27
|
+
"sandbox",
|
|
28
|
+
"approval_mode",
|
|
29
|
+
"context",
|
|
30
|
+
"memory",
|
|
24
31
|
)
|
|
25
32
|
|
|
26
33
|
|
|
34
|
+
def managed_runtime_lock_path(manifest_path: Path) -> Path:
|
|
35
|
+
"""Return the immutable lock that accompanies a YAML-only declaration.
|
|
36
|
+
|
|
37
|
+
``ManagedRuntime`` is not a user-code artifact. Keeping its two small
|
|
38
|
+
declaration files next to one another makes that visible in both the
|
|
39
|
+
workspace and the build receipt, while still preserving a historical
|
|
40
|
+
manifest for rollback.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
return manifest_path.with_suffix(".lock.json")
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def serialize_managed_runtime_manifest(manifest: dict[str, Any]) -> bytes:
|
|
47
|
+
"""Serialize the Server-canonical ManagedRuntime declaration.
|
|
48
|
+
|
|
49
|
+
The Server validates ``ManifestSHA256`` after parsing and re-dumping YAML
|
|
50
|
+
with sorted keys. Clients must hash those exact canonical bytes instead
|
|
51
|
+
of the editable source formatting, otherwise a valid Studio/CLI build is
|
|
52
|
+
rejected during ``CreateAgent``/``UpdateAgent`` admission.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
canonical = yaml.safe_dump(
|
|
56
|
+
manifest,
|
|
57
|
+
allow_unicode=True,
|
|
58
|
+
sort_keys=True,
|
|
59
|
+
default_flow_style=False,
|
|
60
|
+
width=10_000,
|
|
61
|
+
)
|
|
62
|
+
if not canonical.endswith("\n"):
|
|
63
|
+
canonical += "\n"
|
|
64
|
+
return canonical.encode("utf-8")
|
|
65
|
+
|
|
66
|
+
|
|
27
67
|
class ManagedRuntimeBuilder(BaseBuilder):
|
|
28
68
|
"""Build a deterministic YAML-only deployment artifact.
|
|
29
69
|
|
|
@@ -44,7 +84,10 @@ class ManagedRuntimeBuilder(BaseBuilder):
|
|
|
44
84
|
self.build_dir = self.project_dir / ".agentengine" / "managed_runtime"
|
|
45
85
|
|
|
46
86
|
def build(self) -> BuildResult:
|
|
47
|
-
|
|
87
|
+
# An explicitly supplied snapshot is authoritative. Studio can keep
|
|
88
|
+
# more than one Agent manifest in a workspace, so falling back to the
|
|
89
|
+
# root agentengine.yaml here would silently build the wrong Agent.
|
|
90
|
+
config = dict(self.config) if self.config else self._load_config()
|
|
48
91
|
error = self._validate_config(config)
|
|
49
92
|
if error:
|
|
50
93
|
return BuildResult(success=False, error_message=error)
|
|
@@ -63,36 +106,35 @@ class ManagedRuntimeBuilder(BaseBuilder):
|
|
|
63
106
|
runtime_name = str(runtime.get("name") or config.get("framework") or "").strip().lower()
|
|
64
107
|
runtime = {"name": runtime_name, "version": version}
|
|
65
108
|
manifest = self._normalized_manifest(config, runtime)
|
|
66
|
-
manifest_bytes =
|
|
67
|
-
manifest,
|
|
68
|
-
allow_unicode=True,
|
|
69
|
-
sort_keys=False,
|
|
70
|
-
).encode("utf-8")
|
|
109
|
+
manifest_bytes = serialize_managed_runtime_manifest(manifest)
|
|
71
110
|
manifest_sha256 = hashlib.sha256(manifest_bytes).hexdigest()
|
|
72
111
|
lock = {
|
|
73
112
|
"schema_version": RUNTIME_MANIFEST_SCHEMA,
|
|
74
113
|
"runtime": runtime,
|
|
75
114
|
"manifest_sha256": manifest_sha256,
|
|
76
115
|
}
|
|
77
|
-
lock_bytes = (
|
|
78
|
-
|
|
79
|
-
)
|
|
116
|
+
lock_bytes = (json.dumps(lock, ensure_ascii=False, indent=2, sort_keys=True) + "\n").encode(
|
|
117
|
+
"utf-8"
|
|
118
|
+
)
|
|
80
119
|
|
|
81
120
|
self.build_dir.mkdir(parents=True, exist_ok=True)
|
|
82
121
|
name = str(config.get("name") or self.project_dir.name).strip() or self.project_dir.name
|
|
83
122
|
project_version = str(config.get("version") or "1.0.0").strip() or "1.0.0"
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
123
|
+
# This local declaration receipt is retained for Studio rollback.
|
|
124
|
+
# It is deliberately *not* a ZIP: YAML agents have no user code, no
|
|
125
|
+
# KS3 artifact and no code-downloader path. Version alone is mutable
|
|
126
|
+
# in an editable Agent, so retain the exact canonical YAML plus its
|
|
127
|
+
# lock under the content digest.
|
|
128
|
+
artifact_path = self.build_dir / (
|
|
129
|
+
f"{name}-{project_version}-{manifest_sha256[:16]}-runtime.yaml"
|
|
91
130
|
)
|
|
131
|
+
lock_path = managed_runtime_lock_path(artifact_path)
|
|
132
|
+
artifact_path.write_bytes(manifest_bytes)
|
|
133
|
+
lock_path.write_bytes(lock_bytes)
|
|
92
134
|
return BuildResult(
|
|
93
135
|
success=True,
|
|
94
136
|
artifact_path=artifact_path,
|
|
95
|
-
artifact_size=artifact_path.stat().st_size,
|
|
137
|
+
artifact_size=artifact_path.stat().st_size + lock_path.stat().st_size,
|
|
96
138
|
metadata={
|
|
97
139
|
"agent_name": name,
|
|
98
140
|
"framework": str(config.get("framework") or ""),
|
|
@@ -133,13 +175,3 @@ class ManagedRuntimeBuilder(BaseBuilder):
|
|
|
133
175
|
elif key in config:
|
|
134
176
|
normalized[key] = config[key]
|
|
135
177
|
return normalized
|
|
136
|
-
|
|
137
|
-
@staticmethod
|
|
138
|
-
def _write_bundle(path: Path, files: dict[str, bytes]) -> None:
|
|
139
|
-
with zipfile.ZipFile(path, "w", compression=zipfile.ZIP_DEFLATED) as archive:
|
|
140
|
-
for name in sorted(files):
|
|
141
|
-
info = zipfile.ZipInfo(name)
|
|
142
|
-
info.date_time = (1980, 1, 1, 0, 0, 0)
|
|
143
|
-
info.compress_type = zipfile.ZIP_DEFLATED
|
|
144
|
-
info.external_attr = 0o100644 << 16
|
|
145
|
-
archive.writestr(info, files[name])
|
ksadk/cli/__init__.py
CHANGED
|
@@ -67,13 +67,18 @@ ROOT_HELP_COMMANDS = {
|
|
|
67
67
|
"completion",
|
|
68
68
|
"dashboard",
|
|
69
69
|
"deploy",
|
|
70
|
+
"eval",
|
|
71
|
+
"evalset",
|
|
70
72
|
"files",
|
|
71
73
|
"init",
|
|
72
74
|
"hermes",
|
|
73
75
|
"launch",
|
|
76
|
+
"managed-runtime",
|
|
74
77
|
"mcp",
|
|
78
|
+
"observe",
|
|
75
79
|
"openclaw",
|
|
76
80
|
"run",
|
|
81
|
+
"studio",
|
|
77
82
|
"version",
|
|
78
83
|
"web",
|
|
79
84
|
}
|
|
@@ -87,13 +92,18 @@ SHORT_HELP_MAP = {
|
|
|
87
92
|
"completion": "Shell 补全管理",
|
|
88
93
|
"dashboard": "打开云端 Agent Dashboard",
|
|
89
94
|
"deploy": "部署到云端",
|
|
95
|
+
"eval": "评测本地、A2A 或 Codex Agent",
|
|
96
|
+
"evalset": "预览或上传 EvalSet 云端快照",
|
|
90
97
|
"files": "管理 workspace 文件",
|
|
91
98
|
"hermes": "Hermes Agent 资源管理",
|
|
92
99
|
"init": "创建新项目",
|
|
93
100
|
"launch": "一键构建+部署",
|
|
101
|
+
"managed-runtime": "启动平台托管的 YAML Agent",
|
|
94
102
|
"mcp": "MCP 资源管理",
|
|
103
|
+
"observe": "导出本地 Agent 观测数据",
|
|
95
104
|
"openclaw": "OpenClaw 资源管理",
|
|
96
105
|
"run": "运行 Agent",
|
|
106
|
+
"studio": "启动本地 Agent 构建控制台",
|
|
97
107
|
"version": "Agent 版本管理",
|
|
98
108
|
"web": "本地调试 Agent Invoke UI",
|
|
99
109
|
"config": "项目配置与模型设置",
|
|
@@ -173,12 +183,21 @@ class ColoredHelpGroup(click.Group):
|
|
|
173
183
|
_write_colored_help_row(formatter, "agentengine init", "初始化项目")
|
|
174
184
|
_write_colored_help_row(formatter, "agentengine run", "运行 API Server")
|
|
175
185
|
_write_colored_help_row(formatter, "agentengine web", "本地调试 Agent Invoke UI")
|
|
186
|
+
_write_colored_help_row(formatter, "agentengine studio", "本地 Agent 构建控制台")
|
|
187
|
+
_write_colored_help_row(formatter, "agentengine eval", "评测本地、A2A 或 Codex Agent")
|
|
188
|
+
_write_colored_help_row(formatter, "agentengine evalset", "预览或上传 EvalSet 云端快照")
|
|
189
|
+
_write_colored_help_row(formatter, "agentengine observe", "导出本地 Agent 观测数据")
|
|
176
190
|
|
|
177
191
|
# 云端部署
|
|
178
192
|
formatter.write(click.style(" 🚀 云端部署:\n\n", fg="blue", bold=True))
|
|
179
193
|
_write_colored_help_row(formatter, "agentengine build", "构建部署制品")
|
|
180
194
|
_write_colored_help_row(formatter, "agentengine deploy", "部署到云端")
|
|
181
195
|
_write_colored_help_row(formatter, "agentengine launch", "一键构建+部署")
|
|
196
|
+
_write_colored_help_row(
|
|
197
|
+
formatter,
|
|
198
|
+
"agentengine managed-runtime",
|
|
199
|
+
"启动平台托管的 YAML Agent",
|
|
200
|
+
)
|
|
182
201
|
_write_colored_help_row(formatter, "agentengine agent", "Agent 资源管理")
|
|
183
202
|
_write_colored_help_row(formatter, "agentengine version", "Agent 版本管理")
|
|
184
203
|
_write_colored_help_row(formatter, "agentengine mcp", "MCP 资源管理")
|
|
@@ -319,6 +338,7 @@ def _register_optional_command(cli: click.Group, module_path: str, *cmd_names: s
|
|
|
319
338
|
def _register_commands():
|
|
320
339
|
from ksadk.cli.cmd_create import create
|
|
321
340
|
from ksadk.cli.cmd_deploy import deploy
|
|
341
|
+
from ksadk.cli.cmd_managed_runtime import managed_runtime
|
|
322
342
|
from ksadk.cli.cmd_run import run
|
|
323
343
|
from ksadk.cli.cmd_web import web
|
|
324
344
|
|
|
@@ -326,6 +346,7 @@ def _register_commands():
|
|
|
326
346
|
_add_command_once(cli, run)
|
|
327
347
|
_add_command_once(cli, deploy)
|
|
328
348
|
_add_command_once(cli, web)
|
|
349
|
+
_add_command_once(cli, managed_runtime)
|
|
329
350
|
|
|
330
351
|
# init 作为主命令 (PRD 规范)
|
|
331
352
|
_add_command_once(cli, create, name="init")
|
|
@@ -336,6 +357,10 @@ def _register_commands():
|
|
|
336
357
|
_register_optional_command(cli, "ksadk.cli.cmd_config", "config")
|
|
337
358
|
_register_optional_command(cli, "ksadk.cli.cmd_model", "model")
|
|
338
359
|
_register_optional_command(cli, "ksadk.cli.cmd_build", "build")
|
|
360
|
+
_register_optional_command(cli, "ksadk.cli.cmd_studio", "studio")
|
|
361
|
+
_register_optional_command(cli, "ksadk.cli.cmd_eval", "eval")
|
|
362
|
+
_register_optional_command(cli, "ksadk.cli.cmd_evalset", "evalset")
|
|
363
|
+
_register_optional_command(cli, "ksadk.cli.cmd_observe", "observe")
|
|
339
364
|
_register_optional_command(cli, "ksadk.cli.cmd_launch", "launch")
|
|
340
365
|
_register_optional_command(cli, "ksadk.cli.cmd_agent", "agent")
|
|
341
366
|
_register_optional_command(cli, "ksadk.cli.cmd_status", "status")
|
ksadk/cli/cmd_a2a.py
CHANGED
|
@@ -32,10 +32,8 @@ from ksadk.a2a import (
|
|
|
32
32
|
from ksadk.cli.local_runtime import reexec_with_project_venv_if_needed
|
|
33
33
|
from ksadk.cli.resource_common import CONTEXT_SETTINGS
|
|
34
34
|
from ksadk.detection import FrameworkDetector
|
|
35
|
-
from ksadk.
|
|
36
|
-
from ksadk.runtime.
|
|
37
|
-
from ksadk.runtime.framework_adapters import ADKRuntimeAdapter, LangGraphRuntimeAdapter
|
|
38
|
-
from ksadk.runtime.runner_adapter import RunnerRuntimeAdapter
|
|
35
|
+
from ksadk.runtime.factory import create_runtime_adapter
|
|
36
|
+
from ksadk.runtime.launch import RuntimeLaunchContext
|
|
39
37
|
|
|
40
38
|
_HELP = dict(help_option_names=["-h", "--help"])
|
|
41
39
|
_DEFAULT_TASK_STORE_DSN = "sqlite+aiosqlite:///.agentengine/a2a_tasks.db"
|
|
@@ -121,7 +119,10 @@ def serve(
|
|
|
121
119
|
command_args.append("--no-trace")
|
|
122
120
|
reexec_with_project_venv_if_needed(agent_path, command_args)
|
|
123
121
|
task_store_dsn = _resolve_task_store_dsn(task_store_dsn, agent_path)
|
|
124
|
-
detection_result,
|
|
122
|
+
detection_result, runtime_adapter = _load_runtime_adapter(
|
|
123
|
+
agent_path,
|
|
124
|
+
no_trace=no_trace,
|
|
125
|
+
)
|
|
125
126
|
from fastapi import FastAPI
|
|
126
127
|
|
|
127
128
|
app = FastAPI(title=f"ksadk A2A: {detection_result.name}")
|
|
@@ -135,12 +136,10 @@ def serve(
|
|
|
135
136
|
include_reasoning=include_reasoning,
|
|
136
137
|
)
|
|
137
138
|
runtime_type = detection_result.type.value
|
|
138
|
-
runtime_adapter = _select_runtime_adapter(runtime_type, runner)
|
|
139
139
|
from ksadk.a2a.task_adapter import A2ARuntimeTaskAdapter
|
|
140
140
|
|
|
141
141
|
add_a2a_protocol_routes(
|
|
142
142
|
app,
|
|
143
|
-
runner,
|
|
144
143
|
config,
|
|
145
144
|
task_adapter=A2ARuntimeTaskAdapter(runtime_adapter, runtime_type=runtime_type),
|
|
146
145
|
)
|
|
@@ -212,7 +211,8 @@ def _space_client(space_id: str | None = None) -> A2ASpaceClient:
|
|
|
212
211
|
except ValueError as exc:
|
|
213
212
|
raise click.ClickException(
|
|
214
213
|
f"A2A Space 未配置:{exc}。"
|
|
215
|
-
"请传 --space-id,或由 AgentEngine 部署注入
|
|
214
|
+
"请传 --space-id,或由 AgentEngine 部署注入 KSADK_A2A_SPACE_ID"
|
|
215
|
+
"(兼容 KSADK_A2A_SPACE_IDS);同时需要"
|
|
216
216
|
"KSADK_A2A_CONTROL_PLANE_URL 和 audience workload token。"
|
|
217
217
|
) from exc
|
|
218
218
|
|
|
@@ -312,40 +312,27 @@ def _detect_project(agent_path: Path, *, configure_environment: bool = True):
|
|
|
312
312
|
return result
|
|
313
313
|
|
|
314
314
|
|
|
315
|
-
def
|
|
315
|
+
def _load_runtime_adapter(agent_path: Path, *, no_trace: bool):
|
|
316
316
|
detection_result = _detect_project(agent_path)
|
|
317
|
+
runtime_type = detection_result.type.value
|
|
317
318
|
if not no_trace:
|
|
318
|
-
_setup_tracing(
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
# 与 langgraph 共用 time-travel resume。
|
|
327
|
-
if runtime_type in ("langgraph", "langchain"):
|
|
328
|
-
return LangGraphRuntimeAdapter(runner)
|
|
329
|
-
if runtime_type == "adk":
|
|
330
|
-
return ADKRuntimeAdapter(runner)
|
|
331
|
-
return RunnerRuntimeAdapter(runner, runtime_type=runtime_type)
|
|
319
|
+
_setup_tracing(runtime_type)
|
|
320
|
+
context = RuntimeLaunchContext(
|
|
321
|
+
runtime_type=runtime_type,
|
|
322
|
+
project_dir=agent_path,
|
|
323
|
+
detection=detection_result,
|
|
324
|
+
config=dict(getattr(detection_result, "raw_config", None) or {}),
|
|
325
|
+
)
|
|
326
|
+
return detection_result, create_runtime_adapter(context)
|
|
332
327
|
|
|
333
328
|
|
|
334
329
|
def _setup_tracing(framework_type: str) -> None:
|
|
335
330
|
try:
|
|
336
|
-
import os
|
|
337
331
|
|
|
338
332
|
from ksadk.tracing import setup_tracing
|
|
339
333
|
|
|
340
|
-
use_callback_only = os.getenv("LANGFUSE_USE_CALLBACK", "").strip().lower() in (
|
|
341
|
-
"1",
|
|
342
|
-
"true",
|
|
343
|
-
"yes",
|
|
344
|
-
"on",
|
|
345
|
-
)
|
|
346
334
|
setup_tracing(
|
|
347
335
|
enable_inmemory=True,
|
|
348
|
-
use_callback_only=use_callback_only,
|
|
349
336
|
)
|
|
350
337
|
except Exception:
|
|
351
338
|
return
|
ksadk/cli/cmd_create.py
CHANGED
|
@@ -976,7 +976,7 @@ def _generate_deepagents_service_adapter_content(analysis: dict) -> str:
|
|
|
976
976
|
runnable_build = """ try:
|
|
977
977
|
runnable_module = importlib.import_module(RUNNABLE_MODULE, __package__)
|
|
978
978
|
deep_agent_runnable = getattr(runnable_module, "DeepAgentRunnable")
|
|
979
|
-
return deep_agent_runnable(agent,
|
|
979
|
+
return deep_agent_runnable(agent, _NullObservabilityManager())
|
|
980
980
|
except Exception:
|
|
981
981
|
return None
|
|
982
982
|
"""
|
|
@@ -992,20 +992,11 @@ import asyncio
|
|
|
992
992
|
import importlib
|
|
993
993
|
from typing import Any
|
|
994
994
|
|
|
995
|
-
try:
|
|
996
|
-
from langchain_core.callbacks import BaseCallbackHandler
|
|
997
|
-
except Exception: # pragma: no cover - dependency may be absent during static checks
|
|
998
|
-
BaseCallbackHandler = object
|
|
999
|
-
|
|
1000
995
|
INIT_MODULE = "{init_module}"
|
|
1001
996
|
{runnable_module_constant}
|
|
1002
997
|
|
|
1003
|
-
class
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
class _NullLangfuseManager:
|
|
1008
|
-
callback_handler = _NoopCallbackHandler()
|
|
998
|
+
class _NullObservabilityManager:
|
|
999
|
+
callback_handler = None
|
|
1009
1000
|
|
|
1010
1001
|
|
|
1011
1002
|
class AgentEngineDeepAgentsServiceAdapter:
|
|
@@ -1591,16 +1582,16 @@ deploy:
|
|
|
1591
1582
|
def _write_codex_project_config(project_path: Path, package_name: str) -> None:
|
|
1592
1583
|
"""Write the minimal codex runtime project:yaml 驱动,无 package/agent.py。
|
|
1593
1584
|
|
|
1594
|
-
codex 的 agent 逻辑由 prompt
|
|
1585
|
+
codex 的 agent 逻辑由 prompt 承载,所以只生成
|
|
1595
1586
|
canonical agentengine.yaml(framework: codex,model+prompt)+ requirements +
|
|
1596
|
-
README。model/prompt 经
|
|
1587
|
+
README。model/prompt 经 CodexRuntimeAdapter 传入 codex thread(开发者指令)。
|
|
1597
1588
|
"""
|
|
1598
1589
|
(project_path / "agentengine.yaml").write_text(
|
|
1599
1590
|
f"""# AgentEngine codex runtime 项目配置
|
|
1600
1591
|
name: {package_name}
|
|
1601
1592
|
version: "1.0.0"
|
|
1602
1593
|
|
|
1603
|
-
# 框架:codex
|
|
1594
|
+
# 框架:codex(本地和部署统一使用 CodexRuntimeAdapter)
|
|
1604
1595
|
framework: codex
|
|
1605
1596
|
artifact_type: ManagedRuntime
|
|
1606
1597
|
|
|
@@ -1609,7 +1600,7 @@ artifact_type: ManagedRuntime
|
|
|
1609
1600
|
runtime:
|
|
1610
1601
|
name: codex
|
|
1611
1602
|
|
|
1612
|
-
# codex
|
|
1603
|
+
# codex 的模型与开发者指令(CodexRuntimeAdapter 传入 codex thread)
|
|
1613
1604
|
model: glm-5.2
|
|
1614
1605
|
prompt: |
|
|
1615
1606
|
你是 codex 编码助手。简洁回答,能跑命令验证就跑(shell 工具),中文回复。
|
|
@@ -1639,7 +1630,9 @@ ksadk web .
|
|
|
1639
1630
|
- codex 自动探测模型协议:OpenAI 官方直连,星流 chat 模型自动启用转换代理。
|
|
1640
1631
|
- `agentengine build .` 只生成 YAML manifest bundle,不打包本机 Codex 二进制。若
|
|
1641
1632
|
`runtime.version` 未指定,build 需要连接到已配置 Runtime catalog;离线构建请显式锁定版本。
|
|
1642
|
-
- 部署时服务端解析 ManagedRuntime 版本和 Linux 镜像 digest
|
|
1633
|
+
- 部署时服务端解析 ManagedRuntime 版本和 Linux 镜像 digest。云端必须已发布 Runtime
|
|
1634
|
+
catalog、对应镜像和内联 manifest 控制面;未发布时请继续使用本地 `ksadk web`,不要把
|
|
1635
|
+
`runtime.version` 随意改成开发机版本,KsADK 不回退为 Code 部署。
|
|
1643
1636
|
""",
|
|
1644
1637
|
encoding="utf-8-sig",
|
|
1645
1638
|
)
|
|
@@ -1885,8 +1878,6 @@ PORT=8080
|
|
|
1885
1878
|
elif framework == "codex":
|
|
1886
1879
|
env_content = _generate_codex_env_content(global_env)
|
|
1887
1880
|
else:
|
|
1888
|
-
langfuse_url = global_env.get("LANGFUSE_BASE_URL", "")
|
|
1889
|
-
|
|
1890
1881
|
env_content = """# ======================
|
|
1891
1882
|
# 模型配置 (必填, 可以从星流平台获取https://ksp.console.ksyun.com/#/apiKey)
|
|
1892
1883
|
# ======================
|
|
@@ -1909,13 +1900,9 @@ PORT=8080
|
|
|
1909
1900
|
# 可观测性 (可选)
|
|
1910
1901
|
# ======================
|
|
1911
1902
|
"""
|
|
1912
|
-
env_content += "#
|
|
1913
|
-
env_content += "#
|
|
1914
|
-
|
|
1915
|
-
if langfuse_url:
|
|
1916
|
-
env_content += f"LANGFUSE_BASE_URL={langfuse_url}\n"
|
|
1917
|
-
else:
|
|
1918
|
-
env_content += "# LANGFUSE_BASE_URL=https://cloud.langfuse.com\n"
|
|
1903
|
+
env_content += "# OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf\n"
|
|
1904
|
+
env_content += "# OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://collector.example.com/v1/traces\n"
|
|
1905
|
+
env_content += "# OTEL_EXPORTER_OTLP_TRACES_HEADERS=Authorization=Bearer%20placeholder\n"
|
|
1919
1906
|
|
|
1920
1907
|
env_content += """
|
|
1921
1908
|
# ======================
|
ksadk/cli/cmd_dashboard.py
CHANGED
|
@@ -64,6 +64,10 @@ _PATH_EMBEDDED_OPTION_HINTS = (
|
|
|
64
64
|
DEFAULT_PRIVATE_LINK_EXPIRES_SECONDS = 24 * 60 * 60
|
|
65
65
|
MAX_PRIVATE_LINK_EXPIRES_SECONDS = 365 * 24 * 60 * 60
|
|
66
66
|
DEFAULT_REGION = "cn-beijing-6"
|
|
67
|
+
# Hosted UI is the shared interaction surface for platform-managed Agents.
|
|
68
|
+
# The access link keeps the user/session/Agent binding while this path keeps
|
|
69
|
+
# the Web release independent from the Agent runtime image.
|
|
70
|
+
HOSTED_INTERACTION_UI_PATH = "/hosted-ui/chat"
|
|
67
71
|
|
|
68
72
|
DASHBOARD_RESOURCE = ResourceDescriptor(
|
|
69
73
|
name="Dashboard",
|
|
@@ -528,7 +532,17 @@ def _open_dashboard(
|
|
|
528
532
|
)
|
|
529
533
|
normalized_path = _normalize_ui_path(resolved_ui.path or "/")
|
|
530
534
|
custom_ui_enabled = str(resolved_ui.profile or "").strip().lower() == "custom"
|
|
531
|
-
|
|
535
|
+
# Hermes owns its own dashboard surface and OpenClaw takes its gateway
|
|
536
|
+
# branch below. The shared Hosted UI is the default only for the generic
|
|
537
|
+
# ADK/LangChain-compatible profiles; an explicit/custom path always wins.
|
|
538
|
+
use_hosted_interaction_ui = resolved_ui.profile in {"adk", "langchain"}
|
|
539
|
+
link_path = (
|
|
540
|
+
normalized_path
|
|
541
|
+
if ui_path is not None or custom_ui_enabled
|
|
542
|
+
else HOSTED_INTERACTION_UI_PATH
|
|
543
|
+
if use_hosted_interaction_ui
|
|
544
|
+
else None
|
|
545
|
+
)
|
|
532
546
|
base_url = _build_base_ui_url(endpoint, normalized_path)
|
|
533
547
|
|
|
534
548
|
if direct:
|