agentengine-sdk-python 0.8.1__py3-none-any.whl → 0.8.3__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.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/METADATA +25 -12
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/RECORD +421 -232
- ksadk/_build_provenance.json +1 -0
- ksadk/a2a/_space_client_events.py +381 -0
- ksadk/a2a/event_adapter.py +156 -64
- ksadk/a2a/executor.py +179 -63
- ksadk/a2a/space_client.py +6 -333
- ksadk/a2ui/core.py +222 -53
- ksadk/agui/_agent_helpers.py +247 -0
- ksadk/agui/a2ui_projection.py +12 -5
- ksadk/agui/agent.py +443 -259
- ksadk/api/client.py +528 -27
- ksadk/builders/code_builder.py +284 -8
- ksadk/builders/container_builder.py +8 -1
- ksadk/builders/managed_runtime_builder.py +42 -35
- ksadk/cli/__init__.py +23 -0
- ksadk/cli/cmd_dashboard.py +15 -1
- ksadk/cli/cmd_deploy.py +10 -2
- ksadk/cli/cmd_eval.py +66 -9
- ksadk/cli/cmd_evalset.py +284 -0
- ksadk/cli/cmd_files.py +5 -1
- ksadk/cli/cmd_hermes.py +1 -126
- ksadk/cli/cmd_invoke.py +28 -38
- ksadk/cli/cmd_managed_runtime.py +95 -0
- ksadk/cli/cmd_observe.py +85 -0
- ksadk/cli/cmd_openclaw.py +1 -435
- ksadk/cli/cmd_plugin.py +657 -0
- ksadk/cli/cmd_replay.py +28 -4
- ksadk/cli/cmd_studio.py +99 -8
- ksadk/cli/cmd_web.py +10 -2
- ksadk/cli/hermes_env.py +151 -0
- ksadk/cli/invoke_payload.py +49 -0
- ksadk/cli/openclaw_env.py +458 -0
- ksadk/codex/client.py +180 -30
- ksadk/codex/runtime.py +475 -331
- ksadk/configs/env_registry.py +94 -12
- ksadk/configs/env_registry_pcm.py +181 -0
- ksadk/configs/env_var_spec.py +18 -0
- ksadk/configs/global_config.py +5 -0
- ksadk/configs/settings.py +9 -0
- 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 +409 -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 +19 -0
- ksadk/conversations/context.py +230 -30
- ksadk/conversations/contracts.py +266 -0
- ksadk/conversations/message_projection.py +308 -26
- ksadk/conversations/model_context.py +49 -3
- ksadk/conversations/projector.py +616 -0
- ksadk/conversations/reducer.py +98 -0
- ksadk/conversations/runtime_compaction.py +207 -5
- ksadk/conversations/runtime_input.py +184 -2
- ksadk/conversations/runtime_invocation.py +81 -3
- ksadk/conversations/runtime_observability.py +141 -0
- ksadk/conversations/runtime_payloads.py +42 -0
- ksadk/conversations/runtime_preparation.py +272 -2
- ksadk/conversations/runtime_resume.py +20 -1
- ksadk/conversations/runtime_stream_events.py +94 -9
- 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 +5 -0
- ksadk/deployment/providers/serverless.py +143 -69
- ksadk/evaluation/__init__.py +32 -0
- ksadk/evaluation/a2a_adapter.py +9 -1
- ksadk/evaluation/adapters.py +18 -5
- 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 +73 -4
- ksadk/evaluation/evaluators.py +183 -17
- ksadk/evaluation/evidence.py +258 -0
- ksadk/evaluation/executor.py +31 -6
- ksadk/evaluation/local_adapter.py +550 -0
- ksadk/evaluation/service_env.py +27 -0
- ksadk/evaluation/studio_build_adapter.py +253 -0
- ksadk/evaluation/target.py +15 -6
- 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 +755 -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 +907 -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 -265
- ksadk/events/session_event.py +324 -0
- ksadk/events/store.py +3 -316
- ksadk/events/v1_compat.py +41 -0
- ksadk/harness/__init__.py +45 -35
- ksadk/harness/runtime.py +220 -58
- 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 +62 -0
- ksadk/kernel/contracts.py +370 -0
- ksadk/kernel/control.py +220 -0
- ksadk/kernel/errors.py +79 -0
- ksadk/kernel/ingress.py +1123 -0
- ksadk/kernel/mapping.py +111 -0
- ksadk/kernel/memory_store.py +1134 -0
- ksadk/kernel/postgres_store.py +1757 -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 +1411 -0
- ksadk/kernel/state.py +145 -0
- ksadk/kernel/store.py +232 -0
- ksadk/kernel/worker.py +964 -0
- ksadk/knowledge_base/client.py +7 -0
- ksadk/knowledge_base/service.py +32 -5
- 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 +384 -2
- ksadk/memory/adk/backends/sqlite_ltm_backend.py +95 -0
- 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 +497 -0
- ksadk/memory/resolved_policy.py +145 -0
- ksadk/memory/service.py +188 -6
- ksadk/model_proxy/bootstrap.py +16 -9
- ksadk/model_proxy/detect.py +202 -9
- ksadk/model_proxy/namespace.py +39 -15
- ksadk/model_proxy/server.py +24 -5
- ksadk/model_proxy/transform.py +60 -2
- ksadk/observability/__init__.py +25 -0
- ksadk/observability/session_log.py +420 -0
- ksadk/observability/trajectory.py +105 -0
- ksadk/plugins/__init__.py +167 -0
- ksadk/plugins/bridges/__init__.py +45 -0
- ksadk/plugins/bridges/codex.py +552 -0
- ksadk/plugins/bridges/dsh.py +1116 -0
- ksadk/plugins/builtins.py +747 -0
- ksadk/plugins/bundle.py +246 -0
- ksadk/plugins/bundle_security.py +167 -0
- ksadk/plugins/composition.py +529 -0
- ksadk/plugins/context_contributor.py +437 -0
- ksadk/plugins/contracts.py +451 -0
- ksadk/plugins/dsh_toolchain.py +935 -0
- ksadk/plugins/ecosystem_bridge.py +1105 -0
- ksadk/plugins/ecosystem_probe.py +191 -0
- ksadk/plugins/host.py +724 -0
- ksadk/plugins/providers/__init__.py +85 -0
- ksadk/plugins/providers/bundles/ksadk-codex/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-codex/index.mjs +18 -0
- ksadk/plugins/providers/bundles/ksadk-codex/package.json +19 -0
- ksadk/plugins/providers/bundles/ksadk-harness/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +19 -0
- ksadk/plugins/providers/bundles/ksadk-harness/package.json +19 -0
- ksadk/plugins/providers/codex.py +722 -0
- ksadk/plugins/providers/codex_dsh.py +83 -0
- ksadk/plugins/providers/dsh.py +951 -0
- ksadk/plugins/providers/dsh_descriptor_host.py +226 -0
- ksadk/plugins/providers/harness.py +627 -0
- ksadk/plugins/providers/harness_dsh.py +91 -0
- ksadk/plugins/providers/legacy.py +215 -0
- ksadk/plugins/providers/legacy_catalog.py +100 -0
- ksadk/plugins/providers/shipped_dsh.py +370 -0
- ksadk/plugins/resolver.py +331 -0
- ksadk/plugins/subagent_providers/__init__.py +12 -0
- ksadk/plugins/subagent_providers/codex.py +443 -0
- ksadk/plugins/subagents.py +333 -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 +5 -5
- ksadk/runners/base_runner.py +16 -0
- ksadk/runners/factory.py +1 -2
- ksadk/runners/langgraph_runner.py +198 -437
- ksadk/runtime/_runner_adapter/__init__.py +1 -0
- ksadk/runtime/_runner_adapter/stream_mapping.py +797 -0
- ksadk/runtime/adapter.py +119 -2
- ksadk/runtime/conversation_execution.py +316 -182
- ksadk/runtime/executor.py +144 -3
- ksadk/runtime/factory.py +268 -8
- ksadk/runtime/framework_adapters.py +18 -0
- ksadk/runtime/hosted_finalizer.py +268 -0
- ksadk/runtime/launch.py +14 -1
- ksadk/runtime/preprocessing.py +25 -3
- ksadk/runtime/runner_adapter.py +293 -508
- ksadk/runtime/usage.py +33 -0
- ksadk/sandbox/__init__.py +2 -1
- ksadk/sandbox/backends/e2b.py +35 -2
- ksadk/sandbox/factory.py +72 -0
- ksadk/scheduler/__init__.py +18 -0
- ksadk/scheduler/calendar.py +102 -0
- ksadk/scheduler/contracts.py +254 -0
- ksadk/scheduler/dispatcher.py +129 -0
- ksadk/scheduler/engine.py +416 -0
- ksadk/scheduler/sqlite_store.py +563 -0
- ksadk/server/composition.py +8 -0
- ksadk/server/factory.py +69 -6
- ksadk/server/routes/kernel_ingress.py +258 -0
- ksadk/server/routes/openai_compat.py +88 -8
- ksadk/server/routes/projection.py +35 -20
- ksadk/server/routes/run.py +94 -0
- ksadk/server/routes/sessions.py +2 -0
- ksadk/server/routes/streaming.py +5 -2
- ksadk/server/static/assets/{ArtifactsPanel-CakCqxEN.js → ArtifactsPanel-10GPXIJ6.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-CynLknyO.js → CodeBlock-BXk1l-G1.js} +4 -4
- ksadk/server/static/assets/MathMessageMarkdown-BorAY7qD.css +1 -0
- ksadk/server/static/assets/{MathMessageMarkdown-3sQdOysS.js → MathMessageMarkdown-D9uB55Oh.js} +4 -4
- ksadk/server/static/assets/MermaidBlock--OEYoXIJ.js +312 -0
- ksadk/server/static/assets/NativeTerminalPanel-DrEe1syq.js +1 -0
- ksadk/server/static/assets/abnfDiagram-VCTEODGH-eeTFJLvo.js +1 -0
- ksadk/server/static/assets/arc-S3ZNbIAd.js +1 -0
- ksadk/server/static/assets/architecture-7GRP2DOG-Dk9nRQ6-.js +1 -0
- ksadk/server/static/assets/architectureDiagram-5GKGNRK7-CRjgEJDX.js +36 -0
- ksadk/server/static/assets/blockDiagram-NRAW4CY4-C7bsBoNH.js +129 -0
- ksadk/server/static/assets/c4Diagram-UCG6FXSJ-BX3c33Ob.js +38 -0
- ksadk/server/static/assets/channel-s354Yo6o.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-CDpPpKR5.js +1 -0
- ksadk/server/static/assets/{chunk-FMBD7UC4-B_fH2YuH.js → chunk-5VM5RSS4-bZ7ws-8m.js} +1 -1
- ksadk/server/static/assets/{chunk-ND2GUHAM-D6rFLaVV.js → chunk-F27PBJKO-D2r0pvhY.js} +1 -1
- ksadk/server/static/assets/chunk-G27WJ6UU-CZwF3oUP.js +231 -0
- ksadk/server/static/assets/{chunk-4BX2VUAB-B9drTgOW.js → chunk-JWPE2WC7-DigFYCML.js} +1 -1
- ksadk/server/static/assets/chunk-LCL6LL3I-CnorGV5q.js +206 -0
- ksadk/server/static/assets/chunk-POPQ4Y6H-CexntQA-.js +1 -0
- ksadk/server/static/assets/chunk-RHFEMEQ7-CHTC7UxA.js +168 -0
- ksadk/server/static/assets/chunk-SVP7TREG-BC1EWt_-.js +88 -0
- ksadk/server/static/assets/chunk-XXDRQBXY-BTG24xN0.js +1 -0
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Dd0nucl9.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Dd0nucl9.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-S5V4N54A-ChNs_Mdk.js → cose-bilkent-JH36ORCC-CkonRdAS.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-BBlT4uMf.js +1 -0
- ksadk/server/static/assets/cynefinDiagram-5FMLGOSQ-DEOCBe15.js +62 -0
- ksadk/server/static/assets/cytoscape.esm-CyCl8rPi.js +321 -0
- ksadk/server/static/assets/dagre-3AP2YEHR-DBThPuLa.js +4 -0
- ksadk/server/static/assets/dagre-ClTPrTht.js +1 -0
- ksadk/server/static/assets/diagram-S7CK7UJ4-DsZHrnpJ.js +30 -0
- ksadk/server/static/assets/diagram-UQ7AKVKN-BJR4nhVr.js +41 -0
- ksadk/server/static/assets/diagram-VSXAHHWV-xzcERX0a.js +3 -0
- ksadk/server/static/assets/diagram-VX7I27RA-tn2xM1xu.js +24 -0
- ksadk/server/static/assets/diagram-Z3DM3KII-BZPGBkw5.js +24 -0
- ksadk/server/static/assets/{dist-gLnrGsoU.js → dist-4zN1_tq5.js} +1 -1
- ksadk/server/static/assets/{dist-C1sz5Eo3.js → dist-8VWI-2bZ.js} +1 -1
- ksadk/server/static/assets/{dist-BjOdlDjj.js → dist-B-46q3Hk.js} +1 -1
- ksadk/server/static/assets/{dist-o2OVmKvt.js → dist-B0gdk4rl.js} +1 -1
- ksadk/server/static/assets/{dist-4N2NMVYg.js → dist-B1oWRmrH.js} +1 -1
- ksadk/server/static/assets/{dist-CmZHzlwZ.js → dist-BI1qQH4n.js} +1 -1
- ksadk/server/static/assets/{dist-X4TnqwOK.js → dist-BJLUwH6W.js} +1 -1
- ksadk/server/static/assets/{dist-B5oS1zcj.js → dist-Bbwqa8TG.js} +1 -1
- ksadk/server/static/assets/{dist-j6Dxmf_j.js → dist-Btyo4vX4.js} +1 -1
- ksadk/server/static/assets/{dist-DQU9EWw-.js → dist-C71CsujO.js} +1 -1
- ksadk/server/static/assets/{dist-BIlKoW0k.js → dist-CXpH_Rdd.js} +1 -1
- ksadk/server/static/assets/{dist-DJN_6Y39.js → dist-Cq4OL6nO.js} +1 -1
- ksadk/server/static/assets/{dist-Dli7qW-B.js → dist-D1V3f1B4.js} +1 -1
- ksadk/server/static/assets/{dist-fhOuWds5.js → dist-DJmCPRVB.js} +1 -1
- ksadk/server/static/assets/{dist-CWV4lDr1.js → dist-DQAB0qn_.js} +2 -2
- ksadk/server/static/assets/{dist-D6MpCZtz.js → dist-DUwKa_l6.js} +1 -1
- ksadk/server/static/assets/dist-DdRBIceA.js +1 -0
- ksadk/server/static/assets/{dist-DWKByxWV.js → dist-DfGFrb0v.js} +1 -1
- ksadk/server/static/assets/{dist-DsHPdk3W.js → dist-DjhwGUgZ.js} +1 -1
- ksadk/server/static/assets/{dist-B-jNR6Vn.js → dist-DyqV4fL4.js} +1 -1
- ksadk/server/static/assets/{dist-BB3-OwTQ.js → dist-M67Hwu0n.js} +1 -1
- ksadk/server/static/assets/{dist-_pHPTyZ-.js → dist-u8tVH5Ak.js} +1 -1
- ksadk/server/static/assets/ebnfDiagram-PWID7BFC-DVfMsLge.js +1 -0
- ksadk/server/static/assets/erDiagram-SSCWMZ5O-CWEZSYaw.js +99 -0
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-Dr5okd8V.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-VEO-cVcO.js +1 -0
- ksadk/server/static/assets/ganttDiagram-EL5Y4UJY-TWIxoyYL.js +292 -0
- ksadk/server/static/assets/gitGraph-4MIJSDKK-CKiKY9Cf.js +1 -0
- ksadk/server/static/assets/gitGraphDiagram-WWUBYQGX-DDh2hd2S.js +106 -0
- ksadk/server/static/assets/index-B2k_urY8.js +241 -0
- ksadk/server/static/assets/index-ILPt6IWF.css +2 -0
- ksadk/server/static/assets/info-A6RAGUB7-ubA4Nm_p.js +1 -0
- ksadk/server/static/assets/infoDiagram-RXCK75RN-CgoyWiDR.js +2 -0
- ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-K0OOfVna.js → ishikawaDiagram-5VMMS53U-CyRIu_om.js} +6 -6
- ksadk/server/static/assets/{journeyDiagram-JHISSGLW-8LeOJaZp.js → journeyDiagram-EYS64GPL-DN5JXHzN.js} +6 -6
- ksadk/server/static/assets/{kanban-definition-UN3LZRKU-C6uCgZrW.js → kanban-definition-3QL26DDD-CNP3ui66.js} +10 -10
- ksadk/server/static/assets/katex-DWEzQy1d.js +257 -0
- ksadk/server/static/assets/{linear-hdBcYzM8.js → linear-C-qHp7d2.js} +1 -1
- ksadk/server/static/assets/mermaid-parser.core-Cl-K943T.js +166 -0
- ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-Bjy_2v4_.js → mindmap-definition-FBJOCRG2-D5DB5mYm.js} +29 -29
- ksadk/server/static/assets/packet-AYTQ26CC-C7R3NUlK.js +1 -0
- ksadk/server/static/assets/pegDiagram-XKGWAZYB-BQVc9ia_.js +1 -0
- ksadk/server/static/assets/pie-WAS4IAKB-BIT6qjr3.js +1 -0
- ksadk/server/static/assets/pieDiagram-E7YTZNPT-B6UCAvtY.js +39 -0
- ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-BmkRbwCg.js → quadrantDiagram-AXDQQJYC-mIr2d3eb.js} +6 -6
- ksadk/server/static/assets/radar-RG4KPBEZ-l5noef9X.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-Baea6ZvM.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-OKn8zZnU.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-DdKAKC4l.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-Bds8udlG.js +1 -0
- ksadk/server/static/assets/railroadDiagram-O6MQD6OU-Dt3FFDmK.js +1 -0
- ksadk/server/static/assets/requirementDiagram-EFPCY7ZU-Cz_vQtgF.js +84 -0
- ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-l6iXmU65.js → sankeyDiagram-P5KCCOFB-wlO1TsH5.js} +7 -7
- ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-Cq6UBeQB.js → sequenceDiagram-WJ2MYXX4-CHRbElYq.js} +10 -10
- ksadk/server/static/assets/sizeCapture-X5ZJPWSS-DXX54iyO.js +1 -0
- ksadk/server/static/assets/stateDiagram-HBIQ2CUA-Dp_lw9II.js +1 -0
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-5b-8o2iS.js +1 -0
- ksadk/server/static/assets/swimlanes-XN3QIQJK-D8O5UlLG.js +1 -0
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uf6WPRA4.js +8 -0
- ksadk/server/static/assets/{timeline-definition-PNZ67QCA-DEz24vV0.js → timeline-definition-24CTP7MA-8mfKcxvG.js} +7 -7
- ksadk/server/static/assets/treeView-Q6P3EWNA-CK5CSrSO.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-Ch2BKgAM.js +1 -0
- ksadk/server/static/assets/vennDiagram-4TSXK5OY-EnNl0DE7.js +34 -0
- ksadk/server/static/assets/wardley-WFR3VGLG-YW3Q0ml_.js +1 -0
- ksadk/server/static/assets/wardleyDiagram-VM6X3IG4-DBu5fbYr.js +78 -0
- ksadk/server/static/assets/xychartDiagram-S5SC5T6Z-BSVXs4IY.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/service_client.py +48 -0
- ksadk/studio/agent_lifecycle.py +26 -20
- ksadk/studio/api.py +1063 -69
- ksadk/studio/api_catalog_routes.py +5 -0
- ksadk/studio/api_contracts.py +148 -6
- ksadk/studio/api_memory_routes.py +82 -0
- ksadk/studio/api_plugin_routes.py +480 -0
- ksadk/studio/attachment_store.py +187 -0
- ksadk/studio/authoring.py +259 -28
- ksadk/studio/authoring_coordinator.py +809 -67
- ksadk/studio/builder.py +197 -40
- ksadk/studio/capabilities.py +17 -0
- ksadk/studio/cloud.py +1920 -95
- ksadk/studio/codex_agent_service.py +137 -15
- ksadk/studio/codex_authoring.py +469 -0
- ksadk/studio/codex_builder.py +177 -25
- ksadk/studio/codex_manifest.py +71 -22
- ksadk/studio/codex_run.py +59 -4
- ksadk/studio/compatibility_report.py +445 -0
- ksadk/studio/compiler.py +7 -1
- ksadk/studio/contracts.py +234 -4
- ksadk/studio/dsh_provider_registration.py +768 -0
- ksadk/studio/event_store.py +79 -101
- ksadk/studio/framework_run.py +264 -3
- ksadk/studio/hosted_kernel.py +317 -0
- ksadk/studio/manifest_resolver.py +131 -0
- ksadk/studio/model_client.py +95 -9
- ksadk/studio/model_profile_service.py +1 -1
- ksadk/studio/operations.py +47 -5
- ksadk/studio/otel_trace.py +348 -42
- ksadk/studio/pcm_memory.py +85 -0
- ksadk/studio/plugin_composition.py +301 -0
- ksadk/studio/plugin_kernel_adapter.py +128 -0
- ksadk/studio/plugin_runtime.py +652 -0
- ksadk/studio/repository.py +23 -2
- ksadk/studio/resource_catalog.py +49 -1
- ksadk/studio/run_service.py +1266 -202
- ksadk/studio/runtime_source.py +51 -17
- ksadk/studio/scheduler_runtime.py +374 -0
- ksadk/studio/scheduler_service.py +211 -0
- ksadk/studio/service.py +1815 -117
- ksadk/studio/shared_web.py +199 -50
- ksadk/studio/soul.py +52 -0
- ksadk/studio/static/assets/index-DXs1Eq4M.css +1 -0
- ksadk/studio/static/assets/index-DeDqwTsD.js +283 -0
- ksadk/studio/static/index.html +2 -2
- ksadk/studio/templates.py +100 -8
- ksadk/studio/validator.py +20 -1
- ksadk/studio/workspace.py +31 -32
- ksadk/tracing/setup.py +304 -3
- ksadk/version.py +1 -1
- 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/path_utils.py +41 -0
- ksadk/events/parser.py +0 -191
- ksadk/server/static/assets/MathMessageMarkdown-DeYh8QPr.css +0 -1
- ksadk/server/static/assets/MermaidBlock-NERD_ef7.js +0 -303
- ksadk/server/static/assets/NativeTerminalPanel-CiHWf82q.js +0 -1
- ksadk/server/static/assets/arc-DrgjcKhl.js +0 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-CpZLRCcY.js +0 -1
- ksadk/server/static/assets/architectureDiagram-3BPJPVTR-BXoVRbQ6.js +0 -36
- ksadk/server/static/assets/blockDiagram-GPEHLZMM-BnaB3Ywv.js +0 -132
- ksadk/server/static/assets/c4Diagram-AAUBKEIU-Dw4weZcp.js +0 -10
- ksadk/server/static/assets/channel-Dt3rQTFI.js +0 -1
- ksadk/server/static/assets/chunk-2J33WTMH-ChjpLK7j.js +0 -1
- ksadk/server/static/assets/chunk-55IACEB6-CK4ROATy.js +0 -1
- ksadk/server/static/assets/chunk-727SXJPM-B9KtTTgw.js +0 -206
- ksadk/server/static/assets/chunk-AQP2D5EJ-1O1mki3m.js +0 -231
- ksadk/server/static/assets/chunk-QZHKN3VN-iXEZtKQc.js +0 -1
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-DIveV17Q.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-DIveV17Q.js +0 -1
- ksadk/server/static/assets/cytoscape.esm-DelgaX4f.js +0 -321
- ksadk/server/static/assets/dagre-BM42HDAG-D0QXg_MQ.js +0 -4
- ksadk/server/static/assets/dagre-Bx709z4p.js +0 -1
- ksadk/server/static/assets/diagram-2AECGRRQ-DBDDKwBQ.js +0 -43
- ksadk/server/static/assets/diagram-5GNKFQAL-BkwDOxmO.js +0 -10
- ksadk/server/static/assets/diagram-KO2AKTUF-Bv8waYvY.js +0 -3
- ksadk/server/static/assets/diagram-LMA3HP47-e1VECDdu.js +0 -24
- ksadk/server/static/assets/diagram-OG6HWLK6-Ds9adfRl.js +0 -24
- ksadk/server/static/assets/dist-B5J2uhNk.js +0 -1
- ksadk/server/static/assets/erDiagram-TEJ5UH35-BPItFKH6.js +0 -85
- ksadk/server/static/assets/eventmodeling-FCH6USID-DYFSxbqr.js +0 -1
- ksadk/server/static/assets/flowDiagram-I6XJVG4X-BbYB9w5Y.js +0 -162
- ksadk/server/static/assets/ganttDiagram-6RSMTGT7-TQXa0KXv.js +0 -292
- ksadk/server/static/assets/gitGraph-WXDBUCRP-DyNYp6BN.js +0 -1
- ksadk/server/static/assets/gitGraphDiagram-PVQCEYII-bKblCnpa.js +0 -106
- ksadk/server/static/assets/graphlib-B8gBHxth.js +0 -1
- ksadk/server/static/assets/index-R52pJJvg.js +0 -177
- ksadk/server/static/assets/index-jJr3_955.css +0 -2
- ksadk/server/static/assets/info-J43DQDTF-WUx7qTde.js +0 -1
- ksadk/server/static/assets/infoDiagram-5YYISTIA-BGVT7J_i.js +0 -2
- ksadk/server/static/assets/katex-CYWseY5E.js +0 -265
- ksadk/server/static/assets/mermaid-parser.core-BWrDjSZM.js +0 -161
- ksadk/server/static/assets/packet-YPE3B663-BN13y_xl.js +0 -1
- ksadk/server/static/assets/pie-LRSECV5Y-ftSLXhhc.js +0 -1
- ksadk/server/static/assets/pieDiagram-4H26LBE5-GmmqNiVH.js +0 -30
- ksadk/server/static/assets/radar-GUYGQ44K-jaICkIeO.js +0 -1
- ksadk/server/static/assets/requirementDiagram-4Y6WPE33-DSWFqL7c.js +0 -84
- ksadk/server/static/assets/stateDiagram-AJRCARHV-qzTQpg3Y.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-BYCoYGAN.js +0 -1
- ksadk/server/static/assets/treeView-BLDUP644-Cpib_vlz.js +0 -1
- ksadk/server/static/assets/treemap-LRROVOQU-DQxfmVHK.js +0 -1
- ksadk/server/static/assets/vennDiagram-CIIHVFJN-CMCixki2.js +0 -34
- ksadk/server/static/assets/wardley-L42UT6IY-BQYHnnkU.js +0 -1
- ksadk/server/static/assets/wardleyDiagram-YWT4CUSO-CVzB8F9K.js +0 -78
- ksadk/server/static/assets/xychartDiagram-2RQKCTM6-BFBqBLc1.js +0 -7
- ksadk/studio/evaluation.py +0 -192
- ksadk/studio/static/assets/index-CaEN0eTR.css +0 -1
- ksadk/studio/static/assets/index-DI2eY_NH.js +0 -252
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/top_level.txt +0 -0
ksadk/studio/contracts.py
CHANGED
|
@@ -43,10 +43,37 @@ class Instructions(ContractModel):
|
|
|
43
43
|
task: str = Field(default="", max_length=32768)
|
|
44
44
|
|
|
45
45
|
|
|
46
|
+
class SoulDocument(ContractModel):
|
|
47
|
+
"""Reviewed identity/boundary source that compiles ahead of task prompts.
|
|
48
|
+
|
|
49
|
+
This is deliberately an immutable revision input, not a mutable memory
|
|
50
|
+
file. Runtime may read the compiled snapshot but cannot promote a new
|
|
51
|
+
SoulDocument from a conversation.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
schema_version: Literal["agentkit.soul/v1"] = "agentkit.soul/v1"
|
|
55
|
+
identity: str = Field(min_length=1, max_length=4096)
|
|
56
|
+
principles: list[str] = Field(default_factory=list, max_length=64)
|
|
57
|
+
boundaries: list[str] = Field(default_factory=list, max_length=64)
|
|
58
|
+
tone: str | None = Field(default=None, max_length=1024)
|
|
59
|
+
|
|
60
|
+
@field_validator("principles", "boundaries")
|
|
61
|
+
@classmethod
|
|
62
|
+
def validate_nonempty_items(cls, value: list[str]) -> list[str]:
|
|
63
|
+
if any(not item.strip() for item in value):
|
|
64
|
+
raise ValueError("soul principles and boundaries must not contain empty items")
|
|
65
|
+
return value
|
|
66
|
+
|
|
67
|
+
|
|
46
68
|
class ModelParameters(ContractModel):
|
|
47
|
-
|
|
48
|
-
|
|
69
|
+
# 三者 None=未配置:请求 payload 一律不携带该字段,使用服务端默认,
|
|
70
|
+
# 规避各模型族对 temperature/max_tokens 的硬约束(如 kimi 只接受默认温度)。
|
|
71
|
+
temperature: float | None = Field(default=None, ge=0, le=2)
|
|
72
|
+
max_tokens: int | None = Field(default=None, ge=1, le=131072)
|
|
49
73
|
top_p: float | None = Field(default=None, gt=0, le=1)
|
|
74
|
+
# 是否允许在 chat 请求中携带 response_format(json_object 结构化输出)。
|
|
75
|
+
# 关闭后 compose 等结构化调用退回纯文本输出,兼容不支持该字段的网关。
|
|
76
|
+
allow_json_response_format: bool = Field(default=True)
|
|
50
77
|
|
|
51
78
|
|
|
52
79
|
class ModelSpec(ContractModel):
|
|
@@ -218,20 +245,92 @@ class ExecutionSpec(ContractModel):
|
|
|
218
245
|
class CompactionSpec(ContractModel):
|
|
219
246
|
enabled: bool = True
|
|
220
247
|
threshold_ratio: float = Field(default=0.8, gt=0, le=1)
|
|
248
|
+
# PCM:双阈值(方案 §8.2 / §9.1)。soft=主动整理,hard=强制压缩。
|
|
249
|
+
soft_threshold_ratio: float = Field(default=0.50, gt=0, le=1)
|
|
250
|
+
hard_threshold_ratio: float = Field(default=0.85, gt=0, le=1)
|
|
251
|
+
preserve_working_state: bool = True
|
|
252
|
+
flush_memory_before_compaction: bool = True
|
|
253
|
+
|
|
254
|
+
@model_validator(mode="after")
|
|
255
|
+
def validate_ratios(self) -> "CompactionSpec":
|
|
256
|
+
if self.soft_threshold_ratio >= self.hard_threshold_ratio:
|
|
257
|
+
raise ValueError("softThresholdRatio 必须小于 hardThresholdRatio")
|
|
258
|
+
return self
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
class ContextContributorsSpec(ContractModel):
|
|
262
|
+
"""ContextContributor 开关与预算(方案 §5.1 / §8.7)。默认按 policy,可显式开关。"""
|
|
263
|
+
|
|
264
|
+
workspace_rules: bool | None = None
|
|
265
|
+
skill_manifest: bool | None = None
|
|
266
|
+
memory_recall: bool | None = None
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
class RolloutSpec(ContractModel):
|
|
270
|
+
"""AgentVersion 级灰度/回退状态(方案 §8.5)。替代环境变量控制正式灰度。"""
|
|
271
|
+
|
|
272
|
+
context_engine: Literal["off", "shadow", "enabled"] = "shadow"
|
|
273
|
+
memory_write: Literal["off", "shadow", "enabled"] = "shadow"
|
|
221
274
|
|
|
222
275
|
|
|
223
276
|
class ContextSpec(ContractModel):
|
|
224
277
|
max_input_tokens: int = Field(default=32000, ge=1024)
|
|
225
278
|
reserve_output_tokens: int = Field(default=4096, ge=1)
|
|
226
279
|
compaction: CompactionSpec = Field(default_factory=CompactionSpec)
|
|
280
|
+
# prompt_ownership:标记本 Agent 的 system prompt 归属。
|
|
281
|
+
# framework(默认)= 框架自带 SystemMessage,ksadk 不接管 Runner 输入;
|
|
282
|
+
# ksadk = 由 ksadk 的 PromptCompiler 编译 CompiledPrompt 并接管 instructions。
|
|
283
|
+
prompt_ownership: Literal["framework", "ksadk"] = "framework"
|
|
284
|
+
# PCM:ownership 高阶字段(方案 §5.1)。auto=按 capability 推导,向后兼容现有
|
|
285
|
+
# prompt_ownership;显式 ksadk/framework/native 时覆盖。Studio 据 capability 限制选项。
|
|
286
|
+
ownership: Literal["auto", "ksadk", "framework", "native"] = "auto"
|
|
287
|
+
tokenizer: Literal["auto", "heuristic"] = "auto"
|
|
288
|
+
policy_version: str = Field(default="context-v2", max_length=64)
|
|
289
|
+
contributors: ContextContributorsSpec = Field(default_factory=ContextContributorsSpec)
|
|
290
|
+
rollout: RolloutSpec = Field(default_factory=RolloutSpec)
|
|
227
291
|
|
|
228
292
|
@model_validator(mode="after")
|
|
229
293
|
def validate_budget(self) -> "ContextSpec":
|
|
230
294
|
if self.reserve_output_tokens >= self.max_input_tokens:
|
|
231
295
|
raise ValueError("reserveOutputTokens 必须小于 maxInputTokens")
|
|
296
|
+
# ownership 与 prompt_ownership 一致性:显式 ownership 收窄 prompt_ownership(§5.2)。
|
|
297
|
+
if self.ownership == "ksadk":
|
|
298
|
+
self.prompt_ownership = "ksadk"
|
|
299
|
+
elif self.ownership == "framework":
|
|
300
|
+
self.prompt_ownership = "framework"
|
|
301
|
+
# native 不收窄 prompt_ownership(native runtime 的 prompt 投影由 Adapter 决定)。
|
|
232
302
|
return self
|
|
233
303
|
|
|
234
304
|
|
|
305
|
+
class MemoryRecallSpec(ContractModel):
|
|
306
|
+
enabled: bool = True
|
|
307
|
+
max_tokens: int = Field(default=1600, ge=0)
|
|
308
|
+
top_k: int = Field(default=8, ge=1, le=64)
|
|
309
|
+
min_score: float = Field(default=0.45, ge=0, le=1)
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
class MemoryWriteSpec(ContractModel):
|
|
313
|
+
mode: Literal["off", "explicit_only", "candidate"] = "candidate"
|
|
314
|
+
flush_before_compaction: bool = True
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
MemoryScope = Literal["tenant", "workspace", "agent", "user"]
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
def _default_memory_scopes() -> list[MemoryScope]:
|
|
321
|
+
return ["workspace", "agent", "user"]
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
class MemorySpec(ContractModel):
|
|
325
|
+
"""AgentVersion 级 Memory 策略(方案 §5.1 / §10)。Build 只存 providerRef,不存凭证。"""
|
|
326
|
+
|
|
327
|
+
enabled: bool = False
|
|
328
|
+
provider_ref: str = Field(default="local-default", max_length=128)
|
|
329
|
+
recall: MemoryRecallSpec = Field(default_factory=MemoryRecallSpec)
|
|
330
|
+
write: MemoryWriteSpec = Field(default_factory=MemoryWriteSpec)
|
|
331
|
+
scopes: list[MemoryScope] = Field(default_factory=_default_memory_scopes)
|
|
332
|
+
|
|
333
|
+
|
|
235
334
|
class NetworkPolicy(ContractModel):
|
|
236
335
|
mode: Literal["restricted", "open"] = "restricted"
|
|
237
336
|
allowed_hosts: list[str] = Field(default_factory=list)
|
|
@@ -257,12 +356,17 @@ class RuntimeRef(ContractModel):
|
|
|
257
356
|
project entrypoint that is snapshotted by its Build.
|
|
258
357
|
"""
|
|
259
358
|
|
|
260
|
-
type: Literal["codex", "adk", "langgraph"]
|
|
359
|
+
type: Literal["codex", "adk", "langgraph", "harness", "plugin"]
|
|
261
360
|
project_path: str | None = Field(default=None, min_length=1, max_length=1024)
|
|
262
361
|
entry_point: str | None = Field(default=None, min_length=1, max_length=1024)
|
|
263
362
|
agent_variable: str = Field(default="root_agent", min_length=1, max_length=256)
|
|
264
363
|
version: str | None = Field(default=None, min_length=1, max_length=64)
|
|
265
364
|
detection: Literal["declared", "auto"] = "declared"
|
|
365
|
+
provider_ref: str | None = Field(default=None, min_length=12, max_length=256)
|
|
366
|
+
provider_config: dict[str, Any] = Field(
|
|
367
|
+
default_factory=dict,
|
|
368
|
+
exclude_if=lambda value: not value,
|
|
369
|
+
)
|
|
266
370
|
|
|
267
371
|
@field_validator("project_path", "entry_point")
|
|
268
372
|
@classmethod
|
|
@@ -280,8 +384,32 @@ class RuntimeRef(ContractModel):
|
|
|
280
384
|
raise ValueError("Runtime 路径必须是工作区内的相对路径")
|
|
281
385
|
return normalized
|
|
282
386
|
|
|
387
|
+
@field_validator("provider_ref")
|
|
388
|
+
@classmethod
|
|
389
|
+
def validate_provider_ref(cls, value: str | None) -> str | None:
|
|
390
|
+
if value is None:
|
|
391
|
+
return None
|
|
392
|
+
if not re.fullmatch(
|
|
393
|
+
r"plugin://[a-z0-9]+(?:[._-][a-z0-9]+)*@"
|
|
394
|
+
r"\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?",
|
|
395
|
+
value,
|
|
396
|
+
):
|
|
397
|
+
raise ValueError("Provider 引用必须固定为 plugin://<id>@<exact-version>")
|
|
398
|
+
return value
|
|
399
|
+
|
|
400
|
+
@field_validator("provider_config")
|
|
401
|
+
@classmethod
|
|
402
|
+
def validate_provider_config(cls, value: dict[str, Any]) -> dict[str, Any]:
|
|
403
|
+
_reject_clear_runtime_secrets(value)
|
|
404
|
+
return value
|
|
405
|
+
|
|
283
406
|
@model_validator(mode="after")
|
|
284
407
|
def validate_framework_source(self) -> "RuntimeRef":
|
|
408
|
+
if self.type == "plugin":
|
|
409
|
+
if not self.provider_ref:
|
|
410
|
+
raise ValueError("plugin Runtime 必须配置 providerRef")
|
|
411
|
+
elif self.provider_ref is not None or self.provider_config:
|
|
412
|
+
raise ValueError("只有 plugin Runtime 可以配置 providerRef/providerConfig")
|
|
285
413
|
if self.type in {"adk", "langgraph"}:
|
|
286
414
|
if not self.project_path:
|
|
287
415
|
raise ValueError(f"{self.type} Runtime 必须配置 projectPath")
|
|
@@ -290,15 +418,45 @@ class RuntimeRef(ContractModel):
|
|
|
290
418
|
return self
|
|
291
419
|
|
|
292
420
|
|
|
421
|
+
_RUNTIME_SECRET_KEY = re.compile(
|
|
422
|
+
r"(?:secret|password|token|api[_-]?key)", re.IGNORECASE
|
|
423
|
+
)
|
|
424
|
+
_RUNTIME_SECRET_REF_PREFIXES = (
|
|
425
|
+
"secret://",
|
|
426
|
+
"env://",
|
|
427
|
+
"credential://",
|
|
428
|
+
"vault://",
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
def _reject_clear_runtime_secrets(value: Any, *, path: str = "providerConfig") -> None:
|
|
433
|
+
"""Provider config is revision data: it may only retain secret references."""
|
|
434
|
+
|
|
435
|
+
if isinstance(value, dict):
|
|
436
|
+
for key, child in value.items():
|
|
437
|
+
child_path = f"{path}.{key}"
|
|
438
|
+
if _RUNTIME_SECRET_KEY.search(str(key)) and child is not None:
|
|
439
|
+
if not isinstance(child, str) or not child.startswith(
|
|
440
|
+
_RUNTIME_SECRET_REF_PREFIXES
|
|
441
|
+
):
|
|
442
|
+
raise ValueError(f"{child_path} 必须保存 Secret 引用,不能保存明文")
|
|
443
|
+
_reject_clear_runtime_secrets(child, path=child_path)
|
|
444
|
+
elif isinstance(value, list):
|
|
445
|
+
for index, child in enumerate(value):
|
|
446
|
+
_reject_clear_runtime_secrets(child, path=f"{path}[{index}]")
|
|
447
|
+
|
|
448
|
+
|
|
293
449
|
class AgentSpec(ContractModel):
|
|
294
450
|
description: str = Field(default="", max_length=1024)
|
|
295
451
|
runtime: RuntimeRef | None = None
|
|
296
452
|
instructions: Instructions = Field(default_factory=Instructions)
|
|
453
|
+
soul: SoulDocument | None = None
|
|
297
454
|
model: ModelSpec | None = None
|
|
298
455
|
capabilities: CapabilitiesSpec = Field(default_factory=CapabilitiesSpec)
|
|
299
456
|
bindings: AgentBindings = Field(default_factory=AgentBindings)
|
|
300
457
|
execution: ExecutionSpec = Field(default_factory=ExecutionSpec)
|
|
301
458
|
context: ContextSpec = Field(default_factory=ContextSpec)
|
|
459
|
+
memory: MemorySpec = Field(default_factory=MemorySpec)
|
|
302
460
|
security: SecuritySpec = Field(default_factory=SecuritySpec)
|
|
303
461
|
evaluation: EvaluationSpec = Field(default_factory=EvaluationSpec)
|
|
304
462
|
|
|
@@ -383,9 +541,23 @@ class AgentTemplateRecommendation(ContractModel):
|
|
|
383
541
|
resource_id: str | None = None
|
|
384
542
|
|
|
385
543
|
|
|
544
|
+
class AgentBehaviorDesign(ContractModel):
|
|
545
|
+
"""Human-readable explanation of the generated Agent behavior contract."""
|
|
546
|
+
|
|
547
|
+
role: str
|
|
548
|
+
objective: str
|
|
549
|
+
operating_principles: list[str] = Field(default_factory=list)
|
|
550
|
+
workflow: list[str] = Field(default_factory=list)
|
|
551
|
+
explicit_boundaries: list[str] = Field(default_factory=list)
|
|
552
|
+
safety_boundaries: list[str] = Field(default_factory=list)
|
|
553
|
+
output_expectations: list[str] = Field(default_factory=list)
|
|
554
|
+
source_notes: list[str] = Field(default_factory=list)
|
|
555
|
+
|
|
556
|
+
|
|
386
557
|
class AgentTemplateComposition(ContractModel):
|
|
387
558
|
template_id: Literal["blank", "research"]
|
|
388
559
|
spec: AgentSpec
|
|
560
|
+
behavior_design: AgentBehaviorDesign | None = None
|
|
389
561
|
recommendations: list[AgentTemplateRecommendation] = Field(default_factory=list)
|
|
390
562
|
warnings: list[str] = Field(default_factory=list)
|
|
391
563
|
|
|
@@ -411,10 +583,12 @@ class ResolvedAgentSpec(ContractModel):
|
|
|
411
583
|
source_revision: int
|
|
412
584
|
compiler_version: str = "1"
|
|
413
585
|
instructions: Instructions
|
|
586
|
+
soul: SoulDocument | None = None
|
|
414
587
|
model: ResolvedModel
|
|
415
588
|
capabilities: ResolvedCapabilities
|
|
416
589
|
execution: ExecutionSpec
|
|
417
590
|
context: ContextSpec
|
|
591
|
+
memory: MemorySpec
|
|
418
592
|
security: SecuritySpec
|
|
419
593
|
evaluation: EvaluationSpec
|
|
420
594
|
source_digest: str
|
|
@@ -446,17 +620,55 @@ class FileEntry(ContractModel):
|
|
|
446
620
|
|
|
447
621
|
|
|
448
622
|
class BundleManifest(ContractModel):
|
|
449
|
-
|
|
623
|
+
# v1 remains readable for existing local Build records. Every new Studio
|
|
624
|
+
# build uses v2 because Server admission requires a deterministic plugin
|
|
625
|
+
# lock even when the lock is empty.
|
|
626
|
+
bundle_format: Literal["agentkit.bundle/v1", "agentkit.bundle/v2"] = "agentkit.bundle/v1"
|
|
450
627
|
agent_id: str
|
|
451
628
|
source_revision: int
|
|
452
629
|
resolved_digest: str
|
|
453
630
|
runtime_type: str = ""
|
|
454
631
|
source_digest: str = ""
|
|
455
632
|
runtime_contract: Literal["agentkit.runtime/v1"] = "agentkit.runtime/v1"
|
|
633
|
+
plugin_lock_digest: str = ""
|
|
634
|
+
# A v0.8.2 bundle already used the v2 envelope without a composition.
|
|
635
|
+
# Keep that wire shape readable as the explicit legacy execution profile;
|
|
636
|
+
# newly built bundles write ``composition_mode`` so consumers never need
|
|
637
|
+
# to infer whether PluginHost admission is required from missing files.
|
|
638
|
+
composition_mode: Literal["legacy", "composed"] | None = None
|
|
639
|
+
composition_profile_digest: str | None = None
|
|
640
|
+
hosted_kernel_requirement_digest: str = ""
|
|
456
641
|
files: list[FileEntry]
|
|
457
642
|
created_at: str = "1970-01-01T00:00:00Z"
|
|
458
643
|
bundle_digest: str = ""
|
|
459
644
|
|
|
645
|
+
@model_validator(mode="after")
|
|
646
|
+
def validate_composition_mode(self) -> "BundleManifest":
|
|
647
|
+
if self.composition_mode == "composed" and not self.composition_profile_digest:
|
|
648
|
+
raise ValueError("composed Bundle v2 requires compositionProfileDigest")
|
|
649
|
+
if self.composition_mode == "legacy" and self.composition_profile_digest:
|
|
650
|
+
raise ValueError("legacy Bundle v2 cannot declare compositionProfileDigest")
|
|
651
|
+
return self
|
|
652
|
+
|
|
653
|
+
@property
|
|
654
|
+
def execution_profile(self) -> Literal["legacy", "composed"]:
|
|
655
|
+
"""Normalize historical v2 manifests without rewriting their bytes.
|
|
656
|
+
|
|
657
|
+
``compositionMode`` was added after the v0.8.2 envelope. Its absence
|
|
658
|
+
remains a backward-compatible projection: an embedded composition
|
|
659
|
+
digest is composed; its absence selects the established runtime path.
|
|
660
|
+
"""
|
|
661
|
+
|
|
662
|
+
if self.composition_mode is not None:
|
|
663
|
+
return self.composition_mode
|
|
664
|
+
return "composed" if self.composition_profile_digest else "legacy"
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
# ``BundleManifest`` is the existing, installed source type. The explicit
|
|
668
|
+
# name documents that its ``agentkit.bundle/v2`` branch is the Phase 2
|
|
669
|
+
# AgentBundleManifest/v2 contract; it is an alias, not a parallel manifest.
|
|
670
|
+
AgentBundleManifest = BundleManifest
|
|
671
|
+
|
|
460
672
|
|
|
461
673
|
class BuildRecord(ContractModel):
|
|
462
674
|
id: str
|
|
@@ -495,6 +707,7 @@ class Operation(ContractModel):
|
|
|
495
707
|
kind: OperationKind
|
|
496
708
|
status: OperationStatus = OperationStatus.QUEUED
|
|
497
709
|
resource_id: str
|
|
710
|
+
metadata: dict[str, Any] = Field(default_factory=dict)
|
|
498
711
|
error: dict[str, Any] | None = None
|
|
499
712
|
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
|
|
500
713
|
completed_at: datetime | None = None
|
|
@@ -551,6 +764,11 @@ class RunRecord(ContractModel):
|
|
|
551
764
|
completed_at: datetime | None = None
|
|
552
765
|
duration_ms: int | None = None
|
|
553
766
|
duration_source: Literal["runtime", "studio"] | None = None
|
|
767
|
+
# PR-S4:PCM evidence(方案 §6.3)。由 run_service 以 shadow 方式捕获(不进真实输入),
|
|
768
|
+
# 供 Context Inspector 展示 planned/projected/actual + 精度。默认空(未捕获)。
|
|
769
|
+
context_plan: dict[str, Any] | None = None
|
|
770
|
+
prompt_evidence: dict[str, Any] | None = None
|
|
771
|
+
working_state: dict[str, Any] | None = None
|
|
554
772
|
|
|
555
773
|
|
|
556
774
|
class RunEvent(ContractModel):
|
|
@@ -642,3 +860,15 @@ class DeploymentRecord(ContractModel):
|
|
|
642
860
|
version_id: str
|
|
643
861
|
status: Literal["ADMITTING", "DEPLOYING", "READY", "FAILED", "ROLLED_BACK"]
|
|
644
862
|
target: DeploymentTarget
|
|
863
|
+
# These are receipts from the existing Agent creation control plane, not
|
|
864
|
+
# Studio-generated deployment identities.
|
|
865
|
+
agent_id: str | None = None
|
|
866
|
+
instance_id: str | None = None
|
|
867
|
+
endpoint: str | None = None
|
|
868
|
+
# Immutable KS3 object selected by this receipt. It is a deployment fact,
|
|
869
|
+
# not a browser-supplied credential or a mutable "latest" alias.
|
|
870
|
+
bundle_uri: str | None = None
|
|
871
|
+
artifact_id: str | None = None
|
|
872
|
+
# New direct-cloud receipts are expected to pass AgentKernel/v1 admission.
|
|
873
|
+
# Older receipts intentionally default to false for read compatibility.
|
|
874
|
+
requires_kernel: bool = False
|