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
|
@@ -89,6 +89,11 @@ def register_catalog_routes(
|
|
|
89
89
|
async def catalog_runtimes():
|
|
90
90
|
return {"items": studio.runtime_catalog(), "nextCursor": None}
|
|
91
91
|
|
|
92
|
+
@app.get("/api/v1/agent-providers")
|
|
93
|
+
async def agent_providers():
|
|
94
|
+
await studio.start()
|
|
95
|
+
return {"items": studio.agent_provider_catalog(), "nextCursor": None}
|
|
96
|
+
|
|
92
97
|
@app.get("/api/v1/catalog/resources/{resource_id}")
|
|
93
98
|
async def get_catalog_resource(resource_id: str):
|
|
94
99
|
return studio.catalog.get(resource_id)
|
ksadk/studio/api_contracts.py
CHANGED
|
@@ -4,10 +4,12 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from typing import Any, Literal
|
|
6
6
|
|
|
7
|
-
from pydantic import Field, SecretStr
|
|
7
|
+
from pydantic import Field, SecretStr, field_validator
|
|
8
8
|
|
|
9
|
+
from ksadk.conversations.contracts import ConversationInput
|
|
9
10
|
from ksadk.evaluation import EvaluationConfig as PublicEvaluationConfig
|
|
10
11
|
from ksadk.evaluation import TargetRef
|
|
12
|
+
from ksadk.scheduler.contracts import ScheduleSpec
|
|
11
13
|
from ksadk.studio.contracts import (
|
|
12
14
|
AgentBindings,
|
|
13
15
|
AgentSpec,
|
|
@@ -48,6 +50,28 @@ class BuildRequest(ContractModel):
|
|
|
48
50
|
evaluation_suite_refs: list[str] = Field(default_factory=list)
|
|
49
51
|
|
|
50
52
|
|
|
53
|
+
class ImportRootRequest(ContractModel):
|
|
54
|
+
"""一键导入根 Framework 项目(方案 §6.1)。"""
|
|
55
|
+
name: str | None = None
|
|
56
|
+
slug: str | None = None
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class PromptCompileRequest(ContractModel):
|
|
60
|
+
"""PR-S2:Prompt 编译预览请求(方案 §6.2)。只读,不写 Session/Trace。"""
|
|
61
|
+
revision: int = Field(default=1, ge=1)
|
|
62
|
+
request_instructions: str = Field(default="", max_length=32768)
|
|
63
|
+
include_content: bool = False # local debug 显式请求正文
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class ContextPreviewRequest(ContractModel):
|
|
67
|
+
"""PR-S2:Context 预览请求(方案 §6.2)。复用真实 Planner,不调模型。"""
|
|
68
|
+
revision: int = Field(default=1, ge=1)
|
|
69
|
+
user_input: str = Field(default="", max_length=1_000_000)
|
|
70
|
+
request_instructions: str = Field(default="", max_length=32768)
|
|
71
|
+
simulated_history: list[MessageInput] = Field(default_factory=list)
|
|
72
|
+
include_content: bool = False
|
|
73
|
+
|
|
74
|
+
|
|
51
75
|
class MessageInput(ContractModel):
|
|
52
76
|
role: str = "user"
|
|
53
77
|
content: str = Field(min_length=1, max_length=1_000_000)
|
|
@@ -56,7 +80,7 @@ class MessageInput(ContractModel):
|
|
|
56
80
|
class QuickAuthoringRequest(ContractModel):
|
|
57
81
|
name: str = Field(min_length=1, max_length=128)
|
|
58
82
|
slug: str | None = Field(default=None, min_length=1, max_length=63)
|
|
59
|
-
runtime_type: Literal["codex", "adk", "langgraph"]
|
|
83
|
+
runtime_type: Literal["codex", "adk", "langgraph", "plugin"]
|
|
60
84
|
template: Literal["blank", "research"] = "blank"
|
|
61
85
|
description: str = Field(default="", max_length=1024)
|
|
62
86
|
spec: AgentSpec | None = None
|
|
@@ -69,7 +93,29 @@ class AuthoringConversationMessage(ContractModel):
|
|
|
69
93
|
|
|
70
94
|
class ConversationAuthoringRequest(ContractModel):
|
|
71
95
|
messages: list[AuthoringConversationMessage] = Field(min_length=1, max_length=100)
|
|
96
|
+
# This is the single profile used to generate the Draft Patch. It is not
|
|
97
|
+
# implicitly the deployed Agent's only model: callers may bind a separate
|
|
98
|
+
# allow-list and default below.
|
|
72
99
|
model_profile_id: str = Field(min_length=3, max_length=256)
|
|
100
|
+
# Runtime is a Studio-owned deployment choice. The authoring model only
|
|
101
|
+
# supplies semantic intent and must not choose an incompatible framework
|
|
102
|
+
# source contract on its own.
|
|
103
|
+
runtime_type: Literal["codex", "adk", "langgraph"] = "codex"
|
|
104
|
+
agent_model_profile_ids: list[str] = Field(default_factory=list, max_length=100)
|
|
105
|
+
agent_default_model_profile_id: str | None = Field(
|
|
106
|
+
default=None,
|
|
107
|
+
min_length=3,
|
|
108
|
+
max_length=256,
|
|
109
|
+
)
|
|
110
|
+
# Resource identities are selected by the Studio user, never generated by
|
|
111
|
+
# the authoring model. The API resolves and validates their contracts
|
|
112
|
+
# before adding them to the returned Draft Patch.
|
|
113
|
+
tool_resource_ids: list[str] = Field(default_factory=list, max_length=100)
|
|
114
|
+
mcp_resource_ids: list[str] = Field(default_factory=list, max_length=100)
|
|
115
|
+
skill_resource_ids: list[str] = Field(default_factory=list, max_length=100)
|
|
116
|
+
# 可选的进度关联标识:前端生成后随请求带上,可通过
|
|
117
|
+
# GET /api/v1/authoring/conversations:status/{request_id} 轮询构建阶段。
|
|
118
|
+
request_id: str | None = Field(default=None, min_length=1, max_length=128)
|
|
73
119
|
|
|
74
120
|
|
|
75
121
|
class AuthoringCommitRequest(ContractModel):
|
|
@@ -91,15 +137,107 @@ class RunRequest(ContractModel):
|
|
|
91
137
|
sandbox: str | None = None
|
|
92
138
|
|
|
93
139
|
|
|
140
|
+
class ConversationTurnRequest(ContractModel):
|
|
141
|
+
"""A capability-gated local Studio turn.
|
|
142
|
+
|
|
143
|
+
Unlike the compatibility ``RunRequest`` this request deliberately contains
|
|
144
|
+
only the provider-neutral ConversationInput. The server resolves the
|
|
145
|
+
active Build's ConversationSurface and rejects undeclared intent before it
|
|
146
|
+
reaches a framework-specific runtime request.
|
|
147
|
+
"""
|
|
148
|
+
|
|
149
|
+
input: ConversationInput
|
|
150
|
+
sandbox: str | None = None
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class AgentScheduleRequest(ContractModel):
|
|
154
|
+
"""Browser-safe authoring input for one local ``ScheduledTask``.
|
|
155
|
+
|
|
156
|
+
Stable Agent/Build/Kernel target fields are intentionally absent. Studio
|
|
157
|
+
resolves those from the active local Runtime binding and refuses creation
|
|
158
|
+
when it cannot prove that binding.
|
|
159
|
+
"""
|
|
160
|
+
|
|
161
|
+
display_name: str = Field(min_length=1, max_length=128)
|
|
162
|
+
prompt: str = Field(min_length=1, max_length=32_768)
|
|
163
|
+
schedule: ScheduleSpec
|
|
164
|
+
enabled: bool = True
|
|
165
|
+
continuity: Literal["new_session", "continue_session"] = "new_session"
|
|
166
|
+
session_id: str | None = Field(default=None, min_length=1, max_length=256)
|
|
167
|
+
|
|
168
|
+
|
|
94
169
|
class InteractionSubmitRequest(ContractModel):
|
|
95
170
|
name: str = Field(min_length=1, max_length=64)
|
|
96
171
|
data: dict[str, Any] = Field(default_factory=dict)
|
|
172
|
+
expected_revision: int = Field(alias="expectedRevision", ge=1)
|
|
173
|
+
idempotency_key: str = Field(alias="idempotencyKey", min_length=1, max_length=256)
|
|
97
174
|
|
|
98
175
|
|
|
99
|
-
class
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
176
|
+
class CloudChatMessageRequest(ContractModel):
|
|
177
|
+
"""One cloud turn submitted through Studio's loopback control plane.
|
|
178
|
+
|
|
179
|
+
The loopback process, never the browser, owns the AK/SK used to admit the
|
|
180
|
+
message through the cloud control plane. ``content`` uses the same
|
|
181
|
+
OpenAI-compatible text/image/file part shape as RunAgent; execution-policy
|
|
182
|
+
fields remain bounded enums and are revalidated by Server/Runtime.
|
|
183
|
+
"""
|
|
184
|
+
|
|
185
|
+
content: str | list[dict[str, Any]]
|
|
186
|
+
model: str | None = Field(default=None, min_length=1, max_length=256)
|
|
187
|
+
model_options: dict[str, Any] = Field(default_factory=dict)
|
|
188
|
+
tool_approval_mode: Literal["ask", "risk", "full"] = "risk"
|
|
189
|
+
collaboration_mode: Literal["default", "plan"] | None = None
|
|
190
|
+
goal_objective: str | None = Field(default=None, min_length=1, max_length=4096)
|
|
191
|
+
|
|
192
|
+
@field_validator("content")
|
|
193
|
+
@classmethod
|
|
194
|
+
def validate_content(cls, value):
|
|
195
|
+
if isinstance(value, str):
|
|
196
|
+
if not value.strip():
|
|
197
|
+
raise ValueError("content must not be empty")
|
|
198
|
+
if len(value) > 1_000_000:
|
|
199
|
+
raise ValueError("text content is too large")
|
|
200
|
+
return value
|
|
201
|
+
if not 1 <= len(value) <= 9:
|
|
202
|
+
raise ValueError("content must contain between 1 and 9 parts")
|
|
203
|
+
attachment_count = 0
|
|
204
|
+
for part in value:
|
|
205
|
+
kind = str(part.get("type") or "")
|
|
206
|
+
if kind == "input_text":
|
|
207
|
+
text = part.get("text")
|
|
208
|
+
if not isinstance(text, str) or not text.strip() or len(text) > 1_000_000:
|
|
209
|
+
raise ValueError("input_text must contain bounded non-empty text")
|
|
210
|
+
continue
|
|
211
|
+
if kind == "input_image":
|
|
212
|
+
attachment_count += 1
|
|
213
|
+
url = part.get("image_url")
|
|
214
|
+
if not isinstance(url, str) or not url or len(url) > 14_000_000:
|
|
215
|
+
raise ValueError("input_image must contain a bounded image_url")
|
|
216
|
+
continue
|
|
217
|
+
if kind == "input_file":
|
|
218
|
+
attachment_count += 1
|
|
219
|
+
filename = part.get("filename")
|
|
220
|
+
data = part.get("file_data") or part.get("file_url")
|
|
221
|
+
if not isinstance(filename, str) or not filename.strip():
|
|
222
|
+
raise ValueError("input_file must contain a filename")
|
|
223
|
+
if not isinstance(data, str) or not data or len(data) > 14_000_000:
|
|
224
|
+
raise ValueError("input_file must contain bounded file data")
|
|
225
|
+
continue
|
|
226
|
+
raise ValueError(f"unsupported content part: {kind or '<missing>'}")
|
|
227
|
+
if attachment_count > 8:
|
|
228
|
+
raise ValueError("a turn supports at most 8 attachments")
|
|
229
|
+
return value
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
class CloudChatInteractionSubmitRequest(ContractModel):
|
|
233
|
+
"""Public Interaction/v1 fields accepted by the local cloud-chat proxy."""
|
|
234
|
+
|
|
235
|
+
run_id: str = Field(min_length=1, max_length=256)
|
|
236
|
+
interaction_id: str = Field(min_length=1, max_length=256)
|
|
237
|
+
expected_revision: int = Field(ge=1)
|
|
238
|
+
action: Literal["approve", "reject", "submit", "cancel"]
|
|
239
|
+
response: dict[str, Any] = Field(default_factory=dict)
|
|
240
|
+
idempotency_key: str = Field(min_length=1, max_length=256)
|
|
103
241
|
|
|
104
242
|
|
|
105
243
|
class StudioEvaluationCreate(ContractModel):
|
|
@@ -123,6 +261,10 @@ class RollbackRequest(ContractModel):
|
|
|
123
261
|
target_build_id: str
|
|
124
262
|
|
|
125
263
|
|
|
264
|
+
class CloudAgentVersionRollbackRequest(ContractModel):
|
|
265
|
+
version_id: str = Field(min_length=1, max_length=256)
|
|
266
|
+
|
|
267
|
+
|
|
126
268
|
class ModelProfileCreateRequest(ContractModel):
|
|
127
269
|
name: str = Field(pattern=r"^[a-z][a-z0-9._-]{1,127}$")
|
|
128
270
|
display_name: str = Field(min_length=1, max_length=128)
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""Memory observability and local management routes for Studio."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from fastapi import FastAPI, Query
|
|
8
|
+
|
|
9
|
+
from ksadk.memory.coordinator import agent_user_scope_id
|
|
10
|
+
from ksadk.memory.models import MemoryDeleteRequest, MemorySearchRequest
|
|
11
|
+
from ksadk.memory.providers.local_sqlite import resolve_default_memory_provider
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def register_memory_routes(app: FastAPI, studio: Any) -> None:
|
|
15
|
+
"""Register PCM memory routes without expanding the central API module."""
|
|
16
|
+
|
|
17
|
+
@app.get("/api/v1/runs/{run_id}/memory-events")
|
|
18
|
+
async def get_run_memory_events(run_id: str):
|
|
19
|
+
events = studio.event_store.events(run_id)
|
|
20
|
+
items = []
|
|
21
|
+
for event in events:
|
|
22
|
+
data = event.data or {}
|
|
23
|
+
has_memory_payload = isinstance(data, dict) and (
|
|
24
|
+
"memory_event" in data
|
|
25
|
+
or any(
|
|
26
|
+
isinstance(value, str) and value.startswith("memory.")
|
|
27
|
+
for value in data.values()
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
if "memory" in str(event.type or "").lower() or has_memory_payload:
|
|
31
|
+
items.append({"id": event.id, "type": event.type, "data": data})
|
|
32
|
+
return {"items": items}
|
|
33
|
+
|
|
34
|
+
@app.get("/api/v1/memories")
|
|
35
|
+
async def list_memories(
|
|
36
|
+
user_id: str = Query(default="local-user", alias="userId"),
|
|
37
|
+
agent_id: str | None = Query(default=None, alias="agentId"),
|
|
38
|
+
):
|
|
39
|
+
provider = resolve_default_memory_provider()
|
|
40
|
+
scope_id = agent_user_scope_id(agent_id=agent_id, user_id=user_id) if agent_id else user_id
|
|
41
|
+
result = provider.search(
|
|
42
|
+
MemorySearchRequest(
|
|
43
|
+
query="",
|
|
44
|
+
scopes=[("user", scope_id)],
|
|
45
|
+
memory_types=["profile", "fact", "episode"],
|
|
46
|
+
top_k=100,
|
|
47
|
+
max_tokens=10000,
|
|
48
|
+
min_score=0.0,
|
|
49
|
+
)
|
|
50
|
+
)
|
|
51
|
+
return {
|
|
52
|
+
"items": [
|
|
53
|
+
{
|
|
54
|
+
"memory_id": record.memory_id,
|
|
55
|
+
"scope": record.scope,
|
|
56
|
+
"scope_id": record.scope_id,
|
|
57
|
+
"memory_type": record.memory_type,
|
|
58
|
+
"content": record.content[:200],
|
|
59
|
+
"summary": record.summary,
|
|
60
|
+
"status": record.status,
|
|
61
|
+
"confidence": record.confidence,
|
|
62
|
+
"created_at": record.created_at,
|
|
63
|
+
}
|
|
64
|
+
for record in result.records
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@app.delete("/api/v1/memories/{memory_id}")
|
|
69
|
+
async def delete_memory(memory_id: str):
|
|
70
|
+
provider = resolve_default_memory_provider()
|
|
71
|
+
record = provider.get(memory_id)
|
|
72
|
+
if record is None:
|
|
73
|
+
return {"deleted": False, "status": "ok"}
|
|
74
|
+
result = provider.delete(
|
|
75
|
+
MemoryDeleteRequest(
|
|
76
|
+
memory_id=memory_id,
|
|
77
|
+
scope=record.scope,
|
|
78
|
+
scope_id=record.scope_id,
|
|
79
|
+
hard=True,
|
|
80
|
+
)
|
|
81
|
+
)
|
|
82
|
+
return {"deleted": result.deleted, "status": result.status}
|