agentengine-sdk-python 0.8.2__py3-none-any.whl → 0.8.4__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.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/METADATA +22 -28
- agentengine_sdk_python-0.8.4.dist-info/RECORD +1070 -0
- ksadk/_build_provenance.json +1 -0
- ksadk/agui/_agent_helpers.py +4 -0
- ksadk/api/client.py +108 -91
- ksadk/builders/code_builder.py +36 -9
- ksadk/builders/framework_requirements.py +2 -1
- ksadk/builders/ks3_uploader.py +36 -7
- ksadk/builders/managed_runtime_builder.py +4 -0
- ksadk/cli/__init__.py +38 -3
- ksadk/cli/cmd_managed_runtime.py +13 -1
- ksadk/cli/cmd_plugin.py +662 -0
- ksadk/cli/cmd_web.py +2 -5
- ksadk/cli/runtime_bootstrap.py +23 -1
- ksadk/codex/client.py +424 -96
- ksadk/codex/projection.py +24 -0
- ksadk/codex/runtime.py +83 -283
- ksadk/common/auth.py +16 -10
- ksadk/configs/env_registry.py +59 -3
- ksadk/configs/settings.py +9 -0
- ksadk/context_engine/contributors.py +73 -8
- ksadk/conversations/__init__.py +19 -0
- ksadk/conversations/context.py +104 -24
- ksadk/conversations/contracts.py +266 -0
- ksadk/conversations/message_projection.py +154 -15
- ksadk/conversations/projector.py +614 -0
- ksadk/conversations/reducer.py +98 -0
- ksadk/conversations/runtime_invocation.py +5 -0
- ksadk/conversations/runtime_payloads.py +1 -0
- ksadk/conversations/runtime_preparation.py +30 -27
- ksadk/conversations/runtime_resume.py +50 -2
- ksadk/conversations/runtime_stream_events.py +5 -0
- ksadk/conversations/runtime_streaming.py +25 -7
- ksadk/deployment/env_forward.py +2 -2
- ksadk/deployment/providers/serverless.py +1 -1
- ksadk/events/_v1_compat/projection.py +2 -0
- ksadk/events/adapters/_codex_validators.py +18 -7
- ksadk/events/adapters/codex.py +190 -0
- ksadk/events/adapters/langgraph.py +15 -1
- ksadk/events/canonical_store.py +3 -1
- ksadk/events/projections.py +1 -1
- ksadk/harness/__init__.py +45 -35
- ksadk/harness/config.py +2 -2
- ksadk/harness/runtime.py +75 -16
- ksadk/harness/tools.py +38 -13
- ksadk/interaction/provider.py +1 -0
- ksadk/interaction/providers/langgraph.py +1 -0
- ksadk/kernel/bootstrap.py +28 -4
- ksadk/kernel/contract_fingerprints.py +5 -4
- ksadk/kernel/contracts.py +8 -0
- ksadk/kernel/control.py +1 -0
- ksadk/kernel/ingress.py +36 -2
- ksadk/kernel/memory_store.py +1 -0
- ksadk/kernel/postgres_store.py +1 -0
- ksadk/kernel/sqlite_store.py +28 -0
- ksadk/kernel/store.py +3 -0
- ksadk/kernel/worker.py +76 -10
- ksadk/knowledge_base/client.py +57 -27
- ksadk/mcp_runtime/__init__.py +12 -4
- ksadk/memory/adk/backends/sdk_ltm_backend.py +161 -41
- ksadk/memory/adk/resilient_session_service.py +25 -17
- ksadk/memory/adk/short_term_memory.py +26 -9
- ksadk/memory/models.py +7 -4
- ksadk/memory/provider_resolver.py +3 -0
- ksadk/memory/providers/local_sqlite.py +7 -0
- ksadk/model_proxy/server.py +10 -5
- ksadk/plugins/__init__.py +171 -0
- ksadk/plugins/artifacts.py +275 -0
- ksadk/plugins/bridges/__init__.py +47 -0
- ksadk/plugins/bridges/codex.py +659 -0
- ksadk/plugins/bridges/dsh.py +1300 -0
- ksadk/plugins/builtins.py +746 -0
- ksadk/plugins/bundle.py +246 -0
- ksadk/plugins/bundle_security.py +191 -0
- ksadk/plugins/codex_manifest.py +983 -0
- ksadk/plugins/composition.py +537 -0
- ksadk/plugins/context_contributor.py +437 -0
- ksadk/plugins/contracts.py +569 -0
- ksadk/plugins/delivery.py +153 -0
- ksadk/plugins/dsh_installation_digest.py +71 -0
- ksadk/plugins/dsh_toolchain.py +1024 -0
- ksadk/plugins/ecosystem_bridge.py +1105 -0
- ksadk/plugins/ecosystem_probe.py +191 -0
- ksadk/plugins/host.py +787 -0
- ksadk/plugins/kernel_adapter.py +205 -0
- ksadk/plugins/providers/__init__.py +108 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/index.mjs +53 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/package.json +16 -0
- ksadk/plugins/providers/bundles/dsh-memory/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-memory/index.mjs +175 -0
- ksadk/plugins/providers/bundles/dsh-memory/package.json +16 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/client.mjs +166 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/index.mjs +9 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/package.json +12 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/index.mjs +125 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/package.json +16 -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-dsh-capability-host/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/index.mjs +870 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +27 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/client.js +92 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +15 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/package.json +7 -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 +988 -0
- ksadk/plugins/providers/codex_dsh.py +83 -0
- ksadk/plugins/providers/codex_native.py +368 -0
- ksadk/plugins/providers/codex_turn.py +301 -0
- ksadk/plugins/providers/dsh.py +951 -0
- ksadk/plugins/providers/dsh_capabilities.py +1389 -0
- ksadk/plugins/providers/dsh_descriptor_host.py +226 -0
- ksadk/plugins/providers/dsh_mcp.py +467 -0
- ksadk/plugins/providers/harness.py +632 -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/mcp_projection.py +150 -0
- ksadk/plugins/providers/platform_resources.py +657 -0
- ksadk/plugins/providers/shipped_dsh.py +370 -0
- ksadk/plugins/resolver.py +338 -0
- ksadk/plugins/subagent_providers/__init__.py +12 -0
- ksadk/plugins/subagent_providers/codex.py +443 -0
- ksadk/plugins/subagents.py +333 -0
- ksadk/resource_runtime/__init__.py +4 -0
- ksadk/resource_runtime/broker.py +616 -0
- ksadk/resource_runtime/build_artifacts.py +165 -0
- ksadk/resource_runtime/contracts.py +138 -0
- ksadk/resource_runtime/discovery_receipts.py +100 -0
- ksadk/resource_runtime/discovery_skills.py +172 -0
- ksadk/resource_runtime/errors.py +6 -0
- ksadk/resource_runtime/ipc.py +142 -0
- ksadk/resource_runtime/kernel_approval.py +165 -0
- ksadk/resource_runtime/knowledge.py +114 -0
- ksadk/resource_runtime/langgraph.py +94 -0
- ksadk/resource_runtime/leases.py +191 -0
- ksadk/resource_runtime/managed_projection.py +186 -0
- ksadk/resource_runtime/mcp_server.py +138 -0
- ksadk/resource_runtime/memory_provider.py +318 -0
- ksadk/resource_runtime/memory_receipts.py +34 -0
- ksadk/resource_runtime/operation_ledger.py +211 -0
- ksadk/resource_runtime/plugin_config.py +48 -0
- ksadk/resource_runtime/policy_authorization.py +54 -0
- ksadk/resource_runtime/process.py +110 -0
- ksadk/resource_runtime/skill_artifacts.py +153 -0
- ksadk/resource_runtime/skill_runtime.py +42 -0
- ksadk/resource_runtime/skill_workspace.py +118 -0
- ksadk/resource_runtime/skills.py +215 -0
- ksadk/resource_runtime/snapshots.py +180 -0
- ksadk/resource_runtime/socket_server.py +103 -0
- ksadk/resource_runtime/supervisor.py +380 -0
- ksadk/resource_runtime/worker.py +504 -0
- ksadk/runners/_langgraph_runner_streams.py +74 -6
- ksadk/runners/adk_runner.py +149 -11
- ksadk/runners/base_runner.py +29 -1
- ksadk/runners/langgraph_runner.py +475 -145
- ksadk/runtime/_runner_adapter/stream_mapping.py +193 -60
- ksadk/runtime/adapter.py +3 -0
- ksadk/runtime/conversation_execution.py +92 -16
- ksadk/runtime/executor.py +78 -2
- ksadk/runtime/factory.py +30 -200
- ksadk/runtime/framework_adapters.py +41 -0
- ksadk/runtime/preprocessing.py +10 -2
- ksadk/runtime/runner_adapter.py +78 -14
- ksadk/runtime_context.py +40 -2
- ksadk/sandbox/__init__.py +2 -1
- ksadk/sandbox/backends/e2b.py +52 -11
- ksadk/sandbox/backends/local_process.py +9 -0
- ksadk/sandbox/base.py +2 -0
- ksadk/sandbox/e2b_connection.py +66 -0
- 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 +581 -0
- ksadk/server/composition.py +2 -0
- ksadk/server/factory.py +5 -0
- ksadk/server/persistence_capability.py +516 -0
- ksadk/server/routes/control.py +210 -46
- ksadk/server/routes/dependencies.py +15 -0
- ksadk/server/routes/models.py +47 -4
- ksadk/server/routes/projection.py +252 -12
- ksadk/server/routes/sessions.py +284 -107
- ksadk/server/routes/streaming.py +43 -9
- ksadk/server/static/assets/{ArtifactsPanel-DSU1sWD_.js → ArtifactsPanel-CGbWlMNh.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-DOH6MVcn.js → CodeBlock-b4C7upmO.js} +3 -3
- ksadk/server/static/assets/{MathMessageMarkdown-BL8my1R2.js → MathMessageMarkdown-DbdW5A4_.js} +4 -4
- ksadk/server/static/assets/{MermaidBlock-Dz4IP-Tx.js → MermaidBlock-BEBN4Ksz.js} +6 -6
- ksadk/server/static/assets/{NativeTerminalPanel-DUrK0JpZ.js → NativeTerminalPanel-zvL-WpAn.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-g20pFzNV.js → abnfDiagram-VCTEODGH-BYafW7Za.js} +1 -1
- ksadk/server/static/assets/{arc-C4FzinUA.js → arc-bTohInsS.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-BW5UtSnx.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-DpIqL5h4.js → architectureDiagram-5GKGNRK7-Ch5Lbzsi.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-BjkljTNz.js → blockDiagram-NRAW4CY4-kqF4MDOG.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-Dk_ieq2X.js → c4Diagram-UCG6FXSJ-8uSRIODv.js} +1 -1
- ksadk/server/static/assets/channel-CF5Up3hQ.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-KkXX47WI.js +1 -0
- ksadk/server/static/assets/{chunk-5VM5RSS4-BVHAchFb.js → chunk-5VM5RSS4-DkhehZDr.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-C-ipQzuS.js → chunk-F27PBJKO-BdXhtPe9.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-C2EyJbIK.js → chunk-G27WJ6UU-DPTpvpwi.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-vYvVJb_M.js → chunk-JWPE2WC7-Pqoh38el.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-BcI6ysPT.js → chunk-LCL6LL3I-DeU00qC-.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-C030x_Z1.js → chunk-POPQ4Y6H-CzxScFkr.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-yyGpsz4n.js → chunk-RHFEMEQ7-DpqMx-ux.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-BLTlmMU7.js → chunk-SVP7TREG-C6t0SypQ.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-C_32ArgP.js → chunk-XXDRQBXY-DVaeafZk.js} +1 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Cz81acRQ.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Cz81acRQ.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-JH36ORCC-9YQYwdl0.js → cose-bilkent-JH36ORCC-Bf9D3tzJ.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DVWs8a2t.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-ErLF5N13.js → cynefinDiagram-5FMLGOSQ-B9cY3iTz.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-DFiQF-6f.js → dagre-3AP2YEHR-CSwlx3CB.js} +1 -1
- ksadk/server/static/assets/{dagre-BuhGnRI1.js → dagre-UBpgon5q.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-Bt1v8-GC.js → diagram-S7CK7UJ4-C9akhN9a.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-DSCxJdBK.js → diagram-UQ7AKVKN-CgedhTPI.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-DHfYwp_9.js → diagram-VSXAHHWV-Cjucz5BY.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-DdzD-4Le.js → diagram-VX7I27RA-Dd4Vleyn.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-Du-nAJ9F.js → diagram-Z3DM3KII-CZ2jGtYW.js} +1 -1
- ksadk/server/static/assets/{dist-B7seoj3d.js → dist-B2_CVgKv.js} +1 -1
- ksadk/server/static/assets/{dist-CSh_DE14.js → dist-B3FR1SKK.js} +1 -1
- ksadk/server/static/assets/{dist-DUX-id_F.js → dist-BIr4DSRq.js} +1 -1
- ksadk/server/static/assets/{dist-C_wsv-Qd.js → dist-BgV_owcB.js} +1 -1
- ksadk/server/static/assets/{dist-W-TIVntx.js → dist-Bj730Ib4.js} +1 -1
- ksadk/server/static/assets/{dist-BytlxIDT.js → dist-BnaTiyzN.js} +1 -1
- ksadk/server/static/assets/{dist-CXYYBw3_.js → dist-C1NMAY5a.js} +1 -1
- ksadk/server/static/assets/{dist-dDdADKFA.js → dist-C5_ZAZsG.js} +1 -1
- ksadk/server/static/assets/{dist-BVDffZ0U.js → dist-CB9iJrvg.js} +1 -1
- ksadk/server/static/assets/{dist-Bf2M8m3N.js → dist-CFzsn6BG.js} +1 -1
- ksadk/server/static/assets/{dist-ngtN0DJB.js → dist-Cf125P_m.js} +1 -1
- ksadk/server/static/assets/{dist-BE7bu-DL.js → dist-ClYUxfeK.js} +1 -1
- ksadk/server/static/assets/{dist-DNp6rLRA.js → dist-DFD6Qa6T.js} +1 -1
- ksadk/server/static/assets/{dist-BX8z72IC.js → dist-DVCOWtha.js} +1 -1
- ksadk/server/static/assets/{dist-dydu68Fl.js → dist-D_ctSS2i.js} +1 -1
- ksadk/server/static/assets/{dist-ClxGviKw.js → dist-DiixqL0J.js} +1 -1
- ksadk/server/static/assets/{dist-BjU6y-A2.js → dist-DoVSwoDb.js} +1 -1
- ksadk/server/static/assets/{dist-Dq9gLD7L.js → dist-DvFK7p5S.js} +1 -1
- ksadk/server/static/assets/{dist-8hqcx0sU.js → dist-QfkEHOlb.js} +1 -1
- ksadk/server/static/assets/{dist-CttYUqzS.js → dist-btbmmX5O.js} +1 -1
- ksadk/server/static/assets/{dist-DmldrHd_.js → dist-fBO2v5Kt.js} +1 -1
- ksadk/server/static/assets/{dist-DnfXs8Vn.js → dist-ufY3F5p6.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-Da9C9NO1.js → ebnfDiagram-PWID7BFC-Ci8NqqZu.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-EAGqqR79.js → erDiagram-SSCWMZ5O-CCIOhLZG.js} +1 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CQqR2hg3.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-DDRRbGPm.js +1 -0
- ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-DqJsKb59.js → ganttDiagram-EL5Y4UJY-Cp_r9Hb6.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-fgWEf7UD.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-B6g4dtDi.js → gitGraphDiagram-WWUBYQGX-Dlhc8Wr8.js} +1 -1
- ksadk/server/static/assets/index-DcTML1Up.css +2 -0
- ksadk/server/static/assets/index-Dh2XHqPK.js +244 -0
- ksadk/server/static/assets/info-A6RAGUB7-BUecLTdt.js +1 -0
- ksadk/server/static/assets/{infoDiagram-RXCK75RN-Djm_nbd5.js → infoDiagram-RXCK75RN-CO0rRTRA.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-DWya9SG2.js → ishikawaDiagram-5VMMS53U-CHiaedSS.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-DutxhSNI.js → journeyDiagram-EYS64GPL-CHcCIB09.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-DJdOF8Fm.js → kanban-definition-3QL26DDD-CJ_ebBZf.js} +1 -1
- ksadk/server/static/assets/{katex-vFWytM5c.js → katex-B4weu383.js} +1 -1
- ksadk/server/static/assets/{linear-BHjG8b-J.js → linear-V-MgYHW1.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-KGSy4jWT.js → mermaid-parser.core-CBijEX_c.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-9-HC88D4.js → mindmap-definition-FBJOCRG2-Bc-pQvpp.js} +1 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BeW-btFv.js +1 -0
- ksadk/server/static/assets/{pegDiagram-XKGWAZYB-DrEZd4fD.js → pegDiagram-XKGWAZYB-D7genGLl.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-X0xh4SaT.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-DpjqOFFp.js → pieDiagram-E7YTZNPT-Bxj32zwD.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-BiNhgOXX.js → quadrantDiagram-AXDQQJYC-BURv2mGh.js} +1 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-DzRMSqjd.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-Cc44icX-.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-D6S4BdV-.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-vD3aVE2o.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-CYbW_b4T.js +1 -0
- ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-_Y3Ojg6G.js → railroadDiagram-O6MQD6OU-CCsh3avW.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-DeCFdg9K.js → requirementDiagram-EFPCY7ZU-_FRRBKEd.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-CPH75rhw.js → sankeyDiagram-P5KCCOFB-C-gr2o9M.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-OEpQQdr4.js → sequenceDiagram-WJ2MYXX4-D97NmfKg.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-heUErzhI.js → sizeCapture-X5ZJPWSS-DjrPC5FX.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-DvA3jSMB.js → stateDiagram-HBIQ2CUA-DzMNg1hh.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BIcjKFhF.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-CR-dfN_t.js → swimlanes-XN3QIQJK-Cssf_CsU.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-tq3K3Ybl.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-DAVJf1TX.js → timeline-definition-24CTP7MA-BWTHzyS1.js} +1 -1
- ksadk/server/static/assets/treeView-Q6P3EWNA-DBXt3GdU.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-DrCy4E_l.js +1 -0
- ksadk/server/static/assets/{vennDiagram-4TSXK5OY-DwM8eDkh.js → vennDiagram-4TSXK5OY-BSKgJsmR.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-CefhOliM.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-DZL-Zz2t.js → wardleyDiagram-VM6X3IG4-eflHNoaZ.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-Dy6Yh_hu.js → xychartDiagram-S5SC5T6Z-eYqrQ-v4.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/session_context.py +66 -0
- ksadk/sessions/__init__.py +11 -21
- ksadk/sessions/_local_service_sync.py +263 -1
- ksadk/sessions/base.py +176 -0
- ksadk/sessions/errors.py +4 -0
- ksadk/sessions/in_memory.py +309 -19
- ksadk/sessions/local_service.py +83 -1
- ksadk/sessions/persistence.py +275 -0
- ksadk/sessions/postgres_service.py +358 -0
- ksadk/sessions/resilience.py +8 -0
- ksadk/sessions/resilient.py +362 -4
- ksadk/sessions/topology.py +135 -0
- ksadk/skills/models.py +26 -4
- ksadk/skills/package_store.py +186 -38
- ksadk/skills/runtime/agent.py +31 -6
- ksadk/skills/runtime/artifact_delivery.py +139 -0
- ksadk/skills/runtime/backends/e2b.py +98 -6
- ksadk/skills/runtime/backends/local.py +73 -8
- ksadk/skills/runtime/base.py +3 -0
- ksadk/skills/runtime/executor.py +2 -0
- ksadk/skills/runtime/loader.py +10 -2
- ksadk/skills/runtime/pinned.py +114 -0
- ksadk/skills/runtime/request.py +31 -0
- ksadk/skills/service_client.py +211 -24
- ksadk/studio/agent_lifecycle.py +26 -20
- ksadk/studio/api.py +714 -90
- ksadk/studio/api_catalog_routes.py +23 -0
- ksadk/studio/api_contracts.py +34 -1
- ksadk/studio/api_plugin_routes.py +911 -0
- ksadk/studio/api_resource_connections.py +183 -0
- ksadk/studio/attachment_store.py +187 -0
- ksadk/studio/authoring.py +10 -4
- ksadk/studio/authoring_coordinator.py +31 -16
- ksadk/studio/builder.py +199 -43
- ksadk/studio/cloud.py +346 -104
- ksadk/studio/cloud_shared_web.py +565 -0
- ksadk/studio/codex_agent_service.py +140 -27
- ksadk/studio/codex_builder.py +294 -16
- ksadk/studio/codex_credentials.py +90 -0
- ksadk/studio/codex_manifest.py +51 -4
- ksadk/studio/codex_plugin_store.py +746 -0
- ksadk/studio/codex_provider_build.py +231 -0
- ksadk/studio/codex_run.py +200 -29
- ksadk/studio/compatibility_report.py +456 -0
- ksadk/studio/compiler.py +84 -15
- ksadk/studio/contracts.py +249 -4
- ksadk/studio/dsh_application.py +137 -0
- ksadk/studio/dsh_capability_service.py +1107 -0
- ksadk/studio/dsh_models.py +59 -0
- ksadk/studio/dsh_provider_registration.py +1075 -0
- ksadk/studio/event_store.py +54 -6
- ksadk/studio/framework_run.py +37 -4
- ksadk/studio/hosted_kernel.py +89 -14
- ksadk/studio/mcp_runtime.py +11 -3
- ksadk/studio/model_client.py +2 -2
- ksadk/studio/operations.py +12 -2
- ksadk/studio/plugin_composition.py +468 -0
- ksadk/studio/plugin_kernel_adapter.py +28 -0
- ksadk/studio/plugin_runtime.py +831 -0
- ksadk/studio/resource_authority.py +637 -0
- ksadk/studio/resource_binding_validation.py +77 -0
- ksadk/studio/resource_build_admission.py +196 -0
- ksadk/studio/resource_build_materializer.py +149 -0
- ksadk/studio/resource_catalog.py +149 -3
- ksadk/studio/resource_connections.py +220 -0
- ksadk/studio/run_service.py +1144 -96
- ksadk/studio/runtime_source.py +24 -8
- ksadk/studio/scheduler_assistant.py +317 -0
- ksadk/studio/scheduler_runtime.py +383 -0
- ksadk/studio/scheduler_service.py +214 -0
- ksadk/studio/service.py +1131 -95
- ksadk/studio/shared_web.py +610 -87
- ksadk/studio/soul.py +52 -0
- ksadk/studio/static/assets/CodeBlock-DCUUY0PL-BLjA7kbS.js +41 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--BEOyPC3w.css +1 -0
- ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--CUYIXwgI.js +8 -0
- ksadk/studio/static/assets/MermaidBlock-DBFTztfQ-BTYKWEbD.js +44 -0
- ksadk/studio/static/assets/PrismRenderer-wiXRHURw.js +3 -0
- ksadk/studio/static/assets/abnfDiagram-VCTEODGH-CLETGjKq.js +1 -0
- ksadk/studio/static/assets/arc-Pry-7G1_.js +1 -0
- ksadk/studio/static/assets/architecture-7GRP2DOG-hXMiO_AU.js +1 -0
- ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-B5EQysk6.js +36 -0
- ksadk/studio/static/assets/array-BifhSqXX.js +1 -0
- ksadk/studio/static/assets/blockDiagram-I7D4REHJ-CFmPl1de.js +129 -0
- ksadk/studio/static/assets/c4Diagram-7LVT6UL2-BRrGu8qt.js +38 -0
- ksadk/studio/static/assets/channel-BqO-gtEw.js +1 -0
- ksadk/studio/static/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- ksadk/studio/static/assets/chunk-4HAMMTFA-D220vUtq.js +62 -0
- ksadk/studio/static/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- ksadk/studio/static/assets/chunk-75Z2AOVW-C8lLv_qc.js +2 -0
- ksadk/studio/static/assets/chunk-DU6HZSFF-C4DtVpCu.js +128 -0
- ksadk/studio/static/assets/chunk-F27PBJKO-Cpw14SNG.js +1 -0
- ksadk/studio/static/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
- ksadk/studio/static/assets/chunk-GMAD6QVW-DiQA-u2N.js +72 -0
- ksadk/studio/static/assets/chunk-GVQU2GXP-DUdNBUCi.js +1 -0
- ksadk/studio/static/assets/chunk-IMKFNOWR-BSlbjT_b.js +231 -0
- ksadk/studio/static/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- ksadk/studio/static/assets/chunk-L3NEJ4N5-Db8Ab22W.js +1 -0
- ksadk/studio/static/assets/chunk-OSK3NFVY-M2m6G3j4.js +10 -0
- ksadk/studio/static/assets/chunk-P2QGCYS3-DezaQxiK.js +1 -0
- ksadk/studio/static/assets/chunk-POPQ4Y6H-DOpufJ3t.js +1 -0
- ksadk/studio/static/assets/chunk-PWAF6VOD-CfLb1gSc.js +1 -0
- ksadk/studio/static/assets/chunk-SHT3W25Y-DAyIVp5H.js +168 -0
- ksadk/studio/static/assets/chunk-SVP7TREG-DulomOrS.js +88 -0
- ksadk/studio/static/assets/chunk-TICWLB2K-bHJYoflj.js +206 -0
- ksadk/studio/static/assets/chunk-XXDRQBXY-7PcdR2B1.js +1 -0
- ksadk/studio/static/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- ksadk/studio/static/assets/classDiagram-ZZMXUADV-D_bW8JjA.js +1 -0
- ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-D_bW8JjA.js +1 -0
- ksadk/studio/static/assets/cose-bilkent-JH36ORCC-snL88wkX.js +1 -0
- ksadk/studio/static/assets/cynefin-OW5HDTMX-Bd1YhRo1.js +1 -0
- ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-BBrIG_mI.js +62 -0
- ksadk/studio/static/assets/cytoscape.esm-CGd-uY3x.js +321 -0
- ksadk/studio/static/assets/dagre-GXQ25YYZ-DtF1nGdY.js +4 -0
- ksadk/studio/static/assets/dagre-PrKaheQc.js +1 -0
- ksadk/studio/static/assets/defaultLocale-BFoDCU3G.js +1 -0
- ksadk/studio/static/assets/diagram-S7CK7UJ4-0BZ98mya.js +30 -0
- ksadk/studio/static/assets/diagram-UQ7AKVKN-6mLKEo6L.js +41 -0
- ksadk/studio/static/assets/diagram-VSXAHHWV-CJBIaiZ2.js +3 -0
- ksadk/studio/static/assets/diagram-VX7I27RA-BohLEE1C.js +24 -0
- ksadk/studio/static/assets/diagram-Z3DM3KII-D8KIGonG.js +24 -0
- ksadk/studio/static/assets/dist-v5Q1xZ2K.js +1 -0
- ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-C99HU61t.js +1 -0
- ksadk/studio/static/assets/erDiagram-RLTQ6QDP-DLGry2Ap.js +99 -0
- ksadk/studio/static/assets/eventmodeling-NTZA5JFV-B1_5Ac8j.js +1 -0
- ksadk/studio/static/assets/flowDiagram-HODETNUW-DD5hmicn.js +1 -0
- ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BPJrVLSG.js +292 -0
- ksadk/studio/static/assets/gitGraph-4MIJSDKK-Cy_ZQBGi.js +1 -0
- ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-CZCUz4MT.js +106 -0
- ksadk/studio/static/assets/graphlib-DS17s2tU.js +1 -0
- ksadk/studio/static/assets/index-CeHL9ARV.css +2 -0
- ksadk/studio/static/assets/index-D9QEcVpL.js +320 -0
- ksadk/studio/static/assets/info-A6RAGUB7-DBzDQB_I.js +1 -0
- ksadk/studio/static/assets/infoDiagram-27XIBGKW-B-sq07Hi.js +2 -0
- ksadk/studio/static/assets/init-C-OQMol4.js +1 -0
- ksadk/studio/static/assets/ishikawaDiagram-5VMMS53U-CljI2wyf.js +70 -0
- ksadk/studio/static/assets/journeyDiagram-3NMN7TZE-D50Fo2sL.js +139 -0
- ksadk/studio/static/assets/kanban-definition-UXKFOSKX-DimfOTam.js +89 -0
- ksadk/studio/static/assets/katex-DhON-x74.js +257 -0
- ksadk/studio/static/assets/line-CX5BOOUP.js +1 -0
- ksadk/studio/static/assets/linear-BCxN9JLv.js +1 -0
- ksadk/studio/static/assets/mermaid-parser.core-BdCz8fkS.js +7 -0
- ksadk/studio/static/assets/mindmap-definition-YA3MSWOX-Bizzqy5R.js +96 -0
- ksadk/studio/static/assets/ordinal-BDEzSJ7C.js +1 -0
- ksadk/studio/static/assets/packet-AYTQ26CC-gPln-_kG.js +1 -0
- ksadk/studio/static/assets/path-fybaL0A-.js +1 -0
- ksadk/studio/static/assets/pegDiagram-XKGWAZYB-Dy3fB-gW.js +1 -0
- ksadk/studio/static/assets/pie-WAS4IAKB-qZdHMr7B.js +1 -0
- ksadk/studio/static/assets/pieDiagram-E7YTZNPT-B9mrFSDF.js +39 -0
- ksadk/studio/static/assets/quadrantDiagram-AXDQQJYC-NzUfCbMR.js +7 -0
- ksadk/studio/static/assets/radar-RG4KPBEZ-BZlnaea9.js +1 -0
- ksadk/studio/static/assets/railroad-74A4TZTK-Ce3__H9c.js +1 -0
- ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-DqQn7EzD.js +1 -0
- ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-B55kCA8F.js +1 -0
- ksadk/studio/static/assets/railroad-peg-WCYAUIDC-DfQnvkHd.js +1 -0
- ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-DnhMjZCk.js +1 -0
- ksadk/studio/static/assets/requirementDiagram-BXWQKSXE-BF3d103U.js +84 -0
- ksadk/studio/static/assets/rolldown-runtime-Dy4uBu1J-DK3Fl9T5.js +1 -0
- ksadk/studio/static/assets/rough.esm-Dy-Kn_BL.js +1 -0
- ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-Bo-JTwt0.js +40 -0
- ksadk/studio/static/assets/sequenceDiagram-WJ2MYXX4-Dh4wZtUm.js +162 -0
- ksadk/studio/static/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- ksadk/studio/static/assets/src-SFn9St9H.js +1 -0
- ksadk/studio/static/assets/stateDiagram-D77RDMKH-DH774G6d.js +1 -0
- ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-DZvVWPBo.js +1 -0
- ksadk/studio/static/assets/swimlanes-42K2YHIH-Bl13OvTX.js +1 -0
- ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-BnFOTALJ.js +8 -0
- ksadk/studio/static/assets/timeline-definition-24CTP7MA-DxmSSjRB.js +120 -0
- ksadk/studio/static/assets/treeView-Q6P3EWNA-D5Nn9Swz.js +1 -0
- ksadk/studio/static/assets/treemap-WGGIJYW6-CgHgnQhE.js +1 -0
- ksadk/studio/static/assets/vennDiagram-4TSXK5OY-B9QEXcJq.js +34 -0
- ksadk/studio/static/assets/wardley-WFR3VGLG-DXrK2RRY.js +1 -0
- ksadk/studio/static/assets/wardleyDiagram-VM6X3IG4-Ba1AOWoe.js +78 -0
- ksadk/studio/static/assets/xychartDiagram-S5SC5T6Z-Cr5pt5Y-.js +7 -0
- ksadk/studio/static/index.html +2 -2
- ksadk/studio/validator.py +1 -1
- ksadk/studio/workspace.py +1 -0
- ksadk/version.py +1 -1
- ksadk_runtime_common/workspace_files/path_utils.py +41 -0
- agentengine_sdk_python-0.8.2.dist-info/RECORD +0 -778
- ksadk/server/static/assets/architecture-7GRP2DOG-DjKratdf.js +0 -1
- ksadk/server/static/assets/channel-4cQHKtx1.js +0 -1
- ksadk/server/static/assets/chunk-2Q5K7J3B-DmgWkESh.js +0 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-DLFd9Xi0.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-DLFd9Xi0.js +0 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DjEM48Qp.js +0 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CMgMaJrC.js +0 -1
- ksadk/server/static/assets/flowDiagram-A5DVABFB-BBKL0x3P.js +0 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-Dw63mrhw.js +0 -1
- ksadk/server/static/assets/index-8ipRcQ-M.js +0 -240
- ksadk/server/static/assets/index-ByFCqjlh.css +0 -2
- ksadk/server/static/assets/info-A6RAGUB7-B6iAblII.js +0 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BOYAipuq.js +0 -1
- ksadk/server/static/assets/pie-WAS4IAKB-Ctq0Kbku.js +0 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-DN0-ul_0.js +0 -1
- ksadk/server/static/assets/railroad-74A4TZTK-C6cC_to0.js +0 -1
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BimjIuRc.js +0 -1
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-CvY65ABq.js +0 -1
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-D72Iq_Tv.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BgQY03nz.js +0 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-DLVw3q5Q.js +0 -8
- ksadk/server/static/assets/treeView-Q6P3EWNA-BMpO0wsB.js +0 -1
- ksadk/server/static/assets/treemap-WGGIJYW6-Et0aqzU3.js +0 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-CbY0mhpl.js +0 -1
- ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +0 -3
- ksadk/studio/static/assets/index-BLpcdrgW.css +0 -1
- ksadk/studio/static/assets/index-CYekR2Xv.js +0 -260
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Native input projection contract consumed by the Codex lifecycle adapter."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Protocol
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from ksadk.runtime.adapter import ResumePayload, StartRequest
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass(frozen=True)
|
|
12
|
+
class ProjectedCodexTurn:
|
|
13
|
+
"""SDK-ready turn input; contains no lifecycle or execution behavior."""
|
|
14
|
+
input: Any
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class CodexTurnProjection(Protocol):
|
|
18
|
+
def prepare(self, request: StartRequest) -> StartRequest: ...
|
|
19
|
+
|
|
20
|
+
def project(
|
|
21
|
+
self, request: StartRequest | None, payload: ResumePayload | None,
|
|
22
|
+
) -> ProjectedCodexTurn: ...
|
|
23
|
+
|
|
24
|
+
def close(self) -> None: ...
|
ksadk/codex/runtime.py
CHANGED
|
@@ -19,19 +19,15 @@
|
|
|
19
19
|
from __future__ import annotations
|
|
20
20
|
|
|
21
21
|
import asyncio
|
|
22
|
-
import base64
|
|
23
|
-
import binascii
|
|
24
|
-
import hashlib
|
|
25
22
|
import json
|
|
26
23
|
import logging
|
|
27
|
-
import re
|
|
28
24
|
import time
|
|
29
25
|
from collections.abc import Mapping
|
|
30
26
|
from dataclasses import dataclass, field
|
|
31
|
-
from pathlib import Path
|
|
32
27
|
from typing import Any, AsyncIterator, Optional
|
|
33
28
|
|
|
34
|
-
from ksadk.codex.client import CodexClient
|
|
29
|
+
from ksadk.codex.client import CodexClient, CodexPluginBootstrap
|
|
30
|
+
from ksadk.codex.projection import CodexTurnProjection
|
|
35
31
|
from ksadk.events.adapters.codex import CodexAdapterContext, CodexEventAdapter
|
|
36
32
|
from ksadk.events.canonical import (
|
|
37
33
|
ErrorInfo,
|
|
@@ -107,11 +103,26 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
107
103
|
*,
|
|
108
104
|
sandbox_read_only: bool = True,
|
|
109
105
|
turn_timeout_seconds: Optional[float] = None,
|
|
106
|
+
bound_skill_paths: Mapping[str, str] | None = None,
|
|
107
|
+
plugin_bootstrap: CodexPluginBootstrap | None = None,
|
|
108
|
+
turn_projector: CodexTurnProjection | None = None,
|
|
110
109
|
) -> None:
|
|
111
110
|
super().__init__(_CodexAsBaseRuntime(client))
|
|
112
111
|
self._client = client
|
|
113
112
|
self._sandbox_read_only = sandbox_read_only
|
|
114
113
|
self._turn_timeout_seconds = turn_timeout_seconds
|
|
114
|
+
if turn_projector is not None and bound_skill_paths:
|
|
115
|
+
raise ValueError("Skill paths must be owned by the supplied turn projector")
|
|
116
|
+
if turn_projector is None:
|
|
117
|
+
# Compatibility for direct SDK construction; production factories inject
|
|
118
|
+
# the same official projector, never a second input implementation.
|
|
119
|
+
from ksadk.plugins.providers.codex_turn import CodexTurnProjector
|
|
120
|
+
|
|
121
|
+
turn_projector = CodexTurnProjector(bound_skill_paths=bound_skill_paths)
|
|
122
|
+
self._turn_projector = turn_projector
|
|
123
|
+
self._plugin_bootstrap = plugin_bootstrap
|
|
124
|
+
self._plugin_bootstrap_lock = asyncio.Lock()
|
|
125
|
+
self._plugins_bootstrapped = False
|
|
115
126
|
self._threads: dict[str, _CodexThread] = {}
|
|
116
127
|
self._requests: dict[str, StartRequest] = {}
|
|
117
128
|
self._known_threads: set[str] = set()
|
|
@@ -147,13 +158,19 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
147
158
|
goal=RuntimeCapability(supported=True, mode="native"),
|
|
148
159
|
loop=_unavailable("codex_loop_requires_run_control_spec"),
|
|
149
160
|
plan=RuntimeCapability(supported=True, mode="native"),
|
|
161
|
+
interaction_mode="live_submit",
|
|
150
162
|
)
|
|
151
163
|
|
|
152
164
|
# ---- 六动词 ----
|
|
153
165
|
|
|
154
166
|
async def start(self, request: StartRequest) -> RunHandle:
|
|
167
|
+
# A failed bootstrap must leave no native thread behind. The success
|
|
168
|
+
# bit is set only after marketplace/add, every plugin/install, and the
|
|
169
|
+
# enabled-inventory reconciliation all complete on this same client.
|
|
170
|
+
await self._bootstrap_plugins_once()
|
|
155
171
|
# 新 thread 由后端分配真实 thread_id(thread_start);metadata 携带的 thread_id
|
|
156
172
|
# 表示接入既有 thread(resume 语义,run_turn 时按 resume 接入)。
|
|
173
|
+
request = self._turn_projector.prepare(request)
|
|
157
174
|
provided = request.metadata.get("thread_id")
|
|
158
175
|
if provided:
|
|
159
176
|
thread_id = str(provided)
|
|
@@ -197,6 +214,16 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
197
214
|
native_ref={"thread_id": thread_id, "user_id": request.user_id},
|
|
198
215
|
)
|
|
199
216
|
|
|
217
|
+
async def _bootstrap_plugins_once(self) -> None:
|
|
218
|
+
config = self._plugin_bootstrap
|
|
219
|
+
if config is None or self._plugins_bootstrapped:
|
|
220
|
+
return
|
|
221
|
+
async with self._plugin_bootstrap_lock:
|
|
222
|
+
if self._plugins_bootstrapped:
|
|
223
|
+
return
|
|
224
|
+
await self._client.bootstrap_plugins(config)
|
|
225
|
+
self._plugins_bootstrapped = True
|
|
226
|
+
|
|
200
227
|
def stream(self, handle: RunHandle) -> AsyncIterator[RuntimeEvent]:
|
|
201
228
|
return self._stream_events(handle)
|
|
202
229
|
|
|
@@ -276,7 +303,7 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
276
303
|
elif payload.kind == "hitl_answer":
|
|
277
304
|
resolved = await self._client.resolve_interaction(
|
|
278
305
|
payload.call_id,
|
|
279
|
-
|
|
306
|
+
raw,
|
|
280
307
|
)
|
|
281
308
|
else:
|
|
282
309
|
raise ValueError("Codex live submit requires approval_decision or hitl_answer")
|
|
@@ -353,23 +380,50 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
353
380
|
)
|
|
354
381
|
|
|
355
382
|
async def close(self, handle: RunHandle) -> None:
|
|
383
|
+
self._do_not_persist.add(handle.run_id)
|
|
384
|
+
await self.close_all()
|
|
385
|
+
|
|
386
|
+
async def compact_session(self, thread_id: str, config: dict[str, Any]) -> dict[str, Any]:
|
|
387
|
+
"""Compact an existing native session using this build's client."""
|
|
388
|
+
await self._bootstrap_plugins_once()
|
|
389
|
+
await self._client.resume_thread(thread_id, config)
|
|
390
|
+
return await self._client.compact_thread(thread_id)
|
|
391
|
+
|
|
392
|
+
async def close_all(self) -> None:
|
|
393
|
+
"""Dispose every thread and the activation-owned App Server process.
|
|
394
|
+
|
|
395
|
+
One ``CodexRuntimeAdapter`` owns one client transport. Closing any
|
|
396
|
+
attached Kernel handle therefore closes the transport as a unit; this
|
|
397
|
+
additive helper also lets a draining AgentProvider clean up a runtime
|
|
398
|
+
that has been created but not started yet.
|
|
399
|
+
"""
|
|
400
|
+
|
|
356
401
|
if self._closed:
|
|
357
402
|
return
|
|
358
403
|
self._closed = True
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
if active:
|
|
404
|
+
threads = tuple(self._threads.values())
|
|
405
|
+
active_threads = tuple(thread for thread in threads if thread.streaming and not thread.done)
|
|
406
|
+
for thread in active_threads:
|
|
363
407
|
thread.interrupt_event.set()
|
|
364
408
|
try:
|
|
365
|
-
|
|
409
|
+
for thread in active_threads:
|
|
366
410
|
await self._client.interrupt_active_turn(thread.thread_id)
|
|
367
411
|
finally:
|
|
368
412
|
# AsyncCodex.close owns terminate/wait/kill for the app-server child.
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
413
|
+
try:
|
|
414
|
+
await self._client.close()
|
|
415
|
+
finally:
|
|
416
|
+
self._turn_projector.close()
|
|
417
|
+
thread_ids = {
|
|
418
|
+
*self._known_threads,
|
|
419
|
+
*self._threads,
|
|
420
|
+
*self._requests,
|
|
421
|
+
}
|
|
422
|
+
self._do_not_persist.update(thread_ids)
|
|
423
|
+
self._threads.clear()
|
|
424
|
+
self._requests.clear()
|
|
425
|
+
self._known_threads.clear()
|
|
426
|
+
self._pending_cancels.clear()
|
|
373
427
|
|
|
374
428
|
# ---- stream → RuntimeEvent(phase 翻译 + 中断竞速) ----
|
|
375
429
|
|
|
@@ -397,13 +451,10 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
397
451
|
|
|
398
452
|
request = thread.__dict__.get("_start_request")
|
|
399
453
|
resume_state = thread.__dict__.get("_resume")
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
else:
|
|
405
|
-
prompt = ""
|
|
406
|
-
run_input = _build_run_input(request, prompt)
|
|
454
|
+
projected = self._turn_projector.project(
|
|
455
|
+
request, resume_state.get("payload") if resume_state is not None else None,
|
|
456
|
+
)
|
|
457
|
+
run_input = projected.input
|
|
407
458
|
thread.streaming = True
|
|
408
459
|
thread.turn_id = thread.turn_id or f"turn_{thread.thread_id}"
|
|
409
460
|
try:
|
|
@@ -438,14 +489,12 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
438
489
|
) -> AsyncIterator[RuntimeEvent]:
|
|
439
490
|
request = thread.__dict__.get("_start_request") or thread.__dict__.get("_request_config")
|
|
440
491
|
adapter = CodexEventAdapter(
|
|
441
|
-
known_thread_ids=(thread.thread_id,)
|
|
442
|
-
if thread.continuation_preexisting
|
|
443
|
-
else (),
|
|
492
|
+
known_thread_ids=(thread.thread_id,) if thread.continuation_preexisting else (),
|
|
444
493
|
)
|
|
445
494
|
context = CodexAdapterContext(run_id=self._event_run_id(handle))
|
|
446
495
|
run_config: dict[str, Any] = {"sandbox_read_only": self._sandbox_read_only}
|
|
447
496
|
if request is not None and request.config:
|
|
448
|
-
for key in ("sandbox", "approval_mode", "summary", "collaboration_mode"):
|
|
497
|
+
for key in ("sandbox", "approval_mode", "summary", "collaboration_mode", "effort"):
|
|
449
498
|
value = request.config.get(key)
|
|
450
499
|
if key == "approval_mode" and value == "manual":
|
|
451
500
|
continue
|
|
@@ -512,8 +561,7 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
512
561
|
# finish promptly, close the transport *before* awaiting
|
|
513
562
|
# the waiter so MessageRouter.fail_all can release it.
|
|
514
563
|
drain_deadline = (
|
|
515
|
-
asyncio.get_running_loop().time()
|
|
516
|
-
+ _INTERRUPT_DRAIN_TIMEOUT_SECONDS
|
|
564
|
+
asyncio.get_running_loop().time() + _INTERRUPT_DRAIN_TIMEOUT_SECONDS
|
|
517
565
|
)
|
|
518
566
|
while True:
|
|
519
567
|
drain_remaining = max(
|
|
@@ -557,9 +605,7 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
557
605
|
# autoApprovalReview 不产生 canonical 事件(adapter 静默),但
|
|
558
606
|
# cancel 级联丢弃审批的契约依赖 runtime 的 pending 跟踪。
|
|
559
607
|
chunk_method = (
|
|
560
|
-
str((chunk or {}).get("method") or "")
|
|
561
|
-
if isinstance(chunk, dict)
|
|
562
|
-
else ""
|
|
608
|
+
str((chunk or {}).get("method") or "") if isinstance(chunk, dict) else ""
|
|
563
609
|
)
|
|
564
610
|
if chunk_method in {
|
|
565
611
|
"item/autoApprovalReview/started",
|
|
@@ -567,9 +613,7 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
567
613
|
}:
|
|
568
614
|
review_params = chunk.get("params") or {}
|
|
569
615
|
review_id = str(
|
|
570
|
-
review_params.get("reviewId")
|
|
571
|
-
or review_params.get("review_id")
|
|
572
|
-
or ""
|
|
616
|
+
review_params.get("reviewId") or review_params.get("review_id") or ""
|
|
573
617
|
)
|
|
574
618
|
if review_id:
|
|
575
619
|
if chunk_method.endswith("started"):
|
|
@@ -643,9 +687,7 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
643
687
|
framework="codex",
|
|
644
688
|
native_run_id=handle.run_id,
|
|
645
689
|
metadata={
|
|
646
|
-
"agent_id": (
|
|
647
|
-
str(request.agent_id or "codex") if request is not None else "codex"
|
|
648
|
-
),
|
|
690
|
+
"agent_id": (str(request.agent_id or "codex") if request is not None else "codex"),
|
|
649
691
|
"user_id": (
|
|
650
692
|
request.user_id
|
|
651
693
|
if request is not None
|
|
@@ -670,8 +712,7 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
670
712
|
"user_id": str(getattr(request, "user_id", "") or "user"),
|
|
671
713
|
"session_id": str(getattr(request, "session_id", "") or ""),
|
|
672
714
|
"invocation_id": str(
|
|
673
|
-
(getattr(request, "metadata", None) or {}).get("invocation_id")
|
|
674
|
-
or ""
|
|
715
|
+
(getattr(request, "metadata", None) or {}).get("invocation_id") or ""
|
|
675
716
|
),
|
|
676
717
|
}
|
|
677
718
|
merged = {**caller_scope, **dict(event.source.metadata or {})}
|
|
@@ -706,9 +747,7 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
706
747
|
"source": self._make_source(handle),
|
|
707
748
|
}
|
|
708
749
|
|
|
709
|
-
def _make_run_canceled(
|
|
710
|
-
self, handle: RunHandle, *, reason: str | None = None
|
|
711
|
-
) -> RunCanceled:
|
|
750
|
+
def _make_run_canceled(self, handle: RunHandle, *, reason: str | None = None) -> RunCanceled:
|
|
712
751
|
framework = "codex"
|
|
713
752
|
run_id = self._event_run_id(handle)
|
|
714
753
|
scope_id = stable_scope_id(framework, run_id)
|
|
@@ -744,9 +783,7 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
744
783
|
reason=reason,
|
|
745
784
|
)
|
|
746
785
|
|
|
747
|
-
def _make_run_failed(
|
|
748
|
-
self, handle: RunHandle, error_message: str
|
|
749
|
-
) -> RunFailed:
|
|
786
|
+
def _make_run_failed(self, handle: RunHandle, error_message: str) -> RunFailed:
|
|
750
787
|
framework = "codex"
|
|
751
788
|
run_id = self._event_run_id(handle)
|
|
752
789
|
scope_id = stable_scope_id(framework, run_id)
|
|
@@ -800,243 +837,6 @@ async def _anext_or_stop(gen: AsyncIterator[Any]) -> Any:
|
|
|
800
837
|
return _STREAM_STOP
|
|
801
838
|
|
|
802
839
|
|
|
803
|
-
def _resume_prompt(payload: Optional[ResumePayload]) -> Any:
|
|
804
|
-
if payload is None:
|
|
805
|
-
return ""
|
|
806
|
-
if isinstance(payload.data, str):
|
|
807
|
-
return payload.data
|
|
808
|
-
return json.dumps(payload.data, ensure_ascii=False, sort_keys=True)
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
def _coerce_prompt_text(value: Any) -> Any:
|
|
812
|
-
"""把 canonical message 形态的 input 压成 SDK 可接受的文本。
|
|
813
|
-
|
|
814
|
-
``openai-codex`` 0.147 的 run input 只接受 TextInput/str;请求侧没有
|
|
815
|
-
conversation preprocessing 时 ``request.input`` 可能是
|
|
816
|
-
``[{role, content}]`` 历史列表,直接透传会 ``unsupported input item``。
|
|
817
|
-
"""
|
|
818
|
-
if isinstance(value, str) or value is None:
|
|
819
|
-
return value
|
|
820
|
-
if isinstance(value, dict):
|
|
821
|
-
content = value.get("content") if "role" in value else value.get("text")
|
|
822
|
-
if isinstance(content, str):
|
|
823
|
-
return content
|
|
824
|
-
if isinstance(content, dict):
|
|
825
|
-
text = content.get("text") or content.get("content")
|
|
826
|
-
if isinstance(text, str):
|
|
827
|
-
return text
|
|
828
|
-
return str(value)
|
|
829
|
-
if isinstance(value, list):
|
|
830
|
-
texts = [
|
|
831
|
-
text
|
|
832
|
-
for text in (_coerce_prompt_text(item) for item in value)
|
|
833
|
-
if isinstance(text, str) and text
|
|
834
|
-
]
|
|
835
|
-
return "\n".join(texts) if texts else str(value)
|
|
836
|
-
return str(value)
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
def _request_prompt(request: StartRequest) -> Any:
|
|
840
|
-
"""Render canonical conversation history for a native Codex turn.
|
|
841
|
-
|
|
842
|
-
只传 user 消息历史 + 当前 input,不传 assistant 的完整回复(避免 codex 复述历史)。
|
|
843
|
-
assistant 回复用简短摘要代替,仅维持对话结构。
|
|
844
|
-
"""
|
|
845
|
-
# A resumed Codex thread already owns its transcript. Re-sending Studio's
|
|
846
|
-
# transport-neutral history would duplicate every prior turn after refresh.
|
|
847
|
-
if str(request.metadata.get("thread_id") or "").strip():
|
|
848
|
-
return (
|
|
849
|
-
request.input
|
|
850
|
-
if _is_structured_turn_input(request.input)
|
|
851
|
-
else _coerce_prompt_text(request.input)
|
|
852
|
-
)
|
|
853
|
-
|
|
854
|
-
conversation = request.conversation_preprocessing()
|
|
855
|
-
if conversation is None or not conversation.messages:
|
|
856
|
-
# Keep native text/image/mention parts intact for _build_run_input().
|
|
857
|
-
# Flattening this list turns an image dict into user-visible text.
|
|
858
|
-
return (
|
|
859
|
-
request.input
|
|
860
|
-
if _is_structured_turn_input(request.input)
|
|
861
|
-
else _coerce_prompt_text(request.input)
|
|
862
|
-
)
|
|
863
|
-
|
|
864
|
-
lines: list[str] = []
|
|
865
|
-
for message in conversation.messages:
|
|
866
|
-
content = message.get("content")
|
|
867
|
-
if not isinstance(content, str):
|
|
868
|
-
continue
|
|
869
|
-
role = str(message.get("role") or "user").strip().lower()
|
|
870
|
-
if role == "assistant":
|
|
871
|
-
# 不传完整回复,只标注"已回复",避免 codex 复述
|
|
872
|
-
summary = content[:80] + ("..." if len(content) > 80 else "")
|
|
873
|
-
lines.append(f"[上一轮已回复: {summary}]")
|
|
874
|
-
elif role == "user":
|
|
875
|
-
lines.append(f"User: {content}")
|
|
876
|
-
return "\n".join(lines) or request.input
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
def _is_structured_turn_input(value: Any) -> bool:
|
|
880
|
-
return isinstance(value, list) and any(
|
|
881
|
-
isinstance(item, dict) and isinstance(item.get("type"), str)
|
|
882
|
-
for item in value
|
|
883
|
-
)
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
def _build_run_input(request: Optional[StartRequest], prompt: Any) -> Any:
|
|
887
|
-
"""Compose Codex skills and native text/image/mention turn input."""
|
|
888
|
-
try:
|
|
889
|
-
from openai_codex import ImageInput, LocalImageInput, MentionInput, SkillInput, TextInput
|
|
890
|
-
except ImportError:
|
|
891
|
-
return prompt
|
|
892
|
-
skills: list[SkillInput] = []
|
|
893
|
-
if request is not None:
|
|
894
|
-
raw = request.config.get("skills") if request.config else None
|
|
895
|
-
if isinstance(raw, list):
|
|
896
|
-
for item in raw:
|
|
897
|
-
if not isinstance(item, dict):
|
|
898
|
-
continue
|
|
899
|
-
name = str(item.get("name") or "").strip()
|
|
900
|
-
path = str(item.get("path") or "").strip()
|
|
901
|
-
if name and path:
|
|
902
|
-
skills.append(SkillInput(name=name, path=path))
|
|
903
|
-
native_items: list[Any] = []
|
|
904
|
-
raw_input = request.input if request is not None else prompt
|
|
905
|
-
if isinstance(raw_input, list):
|
|
906
|
-
text_replaced = False
|
|
907
|
-
for item in raw_input:
|
|
908
|
-
if not isinstance(item, dict):
|
|
909
|
-
continue
|
|
910
|
-
kind = str(item.get("type") or "")
|
|
911
|
-
if not kind and "role" in item:
|
|
912
|
-
# canonical conversation message({role, content});当前 input
|
|
913
|
-
# 已由 prompt(或 conversation preprocessing)承载,跳过历史项。
|
|
914
|
-
continue
|
|
915
|
-
if kind in {"text", "input_text"}:
|
|
916
|
-
text = str(
|
|
917
|
-
prompt
|
|
918
|
-
if not text_replaced and isinstance(prompt, str)
|
|
919
|
-
else item.get("text") or ""
|
|
920
|
-
)
|
|
921
|
-
text_replaced = True
|
|
922
|
-
if text:
|
|
923
|
-
native_items.append(TextInput(text=text))
|
|
924
|
-
elif kind in {"image", "input_image"} and (
|
|
925
|
-
item.get("url") or item.get("image_url")
|
|
926
|
-
):
|
|
927
|
-
native_items.append(
|
|
928
|
-
ImageInput(url=str(item.get("url") or item.get("image_url")))
|
|
929
|
-
)
|
|
930
|
-
elif kind == "localImage" and item.get("path"):
|
|
931
|
-
native_items.append(LocalImageInput(path=str(item["path"])))
|
|
932
|
-
elif kind == "input_file" and (
|
|
933
|
-
item.get("file_data")
|
|
934
|
-
or str(item.get("file_url") or "").startswith("data:")
|
|
935
|
-
):
|
|
936
|
-
file_path = _materialize_inline_file(
|
|
937
|
-
str(item.get("file_data") or item.get("file_url")),
|
|
938
|
-
str(item.get("filename") or "attachment"),
|
|
939
|
-
)
|
|
940
|
-
if file_path is not None:
|
|
941
|
-
# App Server's ``mention`` input is presentation metadata:
|
|
942
|
-
# current Codex versions do not include it in the model's
|
|
943
|
-
# user message. Always add an explicit model-visible
|
|
944
|
-
# attachment context as well. Small textual files are
|
|
945
|
-
# inlined deterministically; binary/large files expose a
|
|
946
|
-
# sandbox-readable path that Codex can inspect with tools.
|
|
947
|
-
native_items.append(
|
|
948
|
-
TextInput(text=_attachment_context_text(file_path, item))
|
|
949
|
-
)
|
|
950
|
-
native_items.append(
|
|
951
|
-
MentionInput(name=file_path.name, path=str(file_path))
|
|
952
|
-
)
|
|
953
|
-
elif kind == "mention" and item.get("path"):
|
|
954
|
-
native_items.append(
|
|
955
|
-
MentionInput(
|
|
956
|
-
name=str(item.get("name") or item["path"]),
|
|
957
|
-
path=str(item["path"]),
|
|
958
|
-
)
|
|
959
|
-
)
|
|
960
|
-
else:
|
|
961
|
-
text = prompt if isinstance(prompt, str) else str(prompt or "")
|
|
962
|
-
if text:
|
|
963
|
-
native_items.append(TextInput(text=text))
|
|
964
|
-
combined = [*skills, *native_items]
|
|
965
|
-
if not combined:
|
|
966
|
-
return prompt
|
|
967
|
-
if len(combined) == 1 and isinstance(combined[0], TextInput) and not skills:
|
|
968
|
-
return combined[0].text
|
|
969
|
-
return combined
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
def _materialize_inline_file(data_url: str, filename: str) -> Path | None:
|
|
973
|
-
"""Materialize a bounded Studio inline attachment for native Codex."""
|
|
974
|
-
|
|
975
|
-
match = re.fullmatch(r"data:([^;,]+)?;base64,([A-Za-z0-9+/=\s]+)", data_url)
|
|
976
|
-
encoded = match.group(2) if match is not None else data_url.strip()
|
|
977
|
-
try:
|
|
978
|
-
payload = base64.b64decode(encoded, validate=True)
|
|
979
|
-
except (ValueError, binascii.Error):
|
|
980
|
-
return None
|
|
981
|
-
if not payload or len(payload) > 10 * 1024 * 1024:
|
|
982
|
-
return None
|
|
983
|
-
safe_name = re.sub(r"[^A-Za-z0-9._-]+", "-", Path(filename).name).strip(".-")
|
|
984
|
-
safe_name = safe_name[:120] or "attachment"
|
|
985
|
-
digest = hashlib.sha256(payload).hexdigest()
|
|
986
|
-
path = Path("/tmp/ksadk-codex-attachments") / digest / safe_name
|
|
987
|
-
path.parent.mkdir(parents=True, exist_ok=True)
|
|
988
|
-
if not path.exists():
|
|
989
|
-
path.write_bytes(payload)
|
|
990
|
-
return path
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
_MAX_INLINE_ATTACHMENT_TEXT_BYTES = 64 * 1024
|
|
994
|
-
_TEXT_ATTACHMENT_SUFFIXES = {
|
|
995
|
-
".csv",
|
|
996
|
-
".html",
|
|
997
|
-
".htm",
|
|
998
|
-
".ini",
|
|
999
|
-
".json",
|
|
1000
|
-
".jsonl",
|
|
1001
|
-
".log",
|
|
1002
|
-
".md",
|
|
1003
|
-
".py",
|
|
1004
|
-
".rst",
|
|
1005
|
-
".toml",
|
|
1006
|
-
".tsv",
|
|
1007
|
-
".txt",
|
|
1008
|
-
".xml",
|
|
1009
|
-
".yaml",
|
|
1010
|
-
".yml",
|
|
1011
|
-
}
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
def _attachment_context_text(path: Path, item: Mapping[str, Any]) -> str:
|
|
1015
|
-
"""Build model-visible context for a materialized Responses input file."""
|
|
1016
|
-
|
|
1017
|
-
name = str(item.get("filename") or path.name).replace('"', "'")
|
|
1018
|
-
inline_data = item.get("inlineData")
|
|
1019
|
-
inline_mime = inline_data.get("mimeType") if isinstance(inline_data, Mapping) else None
|
|
1020
|
-
mime_type = str(item.get("mime_type") or inline_mime or "").strip().lower()
|
|
1021
|
-
source = str(item.get("file_data") or item.get("file_url") or "")
|
|
1022
|
-
data_url_match = re.match(r"data:([^;,]+)", source)
|
|
1023
|
-
if not mime_type and data_url_match is not None:
|
|
1024
|
-
mime_type = data_url_match.group(1).strip().lower()
|
|
1025
|
-
is_text = mime_type.startswith("text/") or path.suffix.lower() in _TEXT_ATTACHMENT_SUFFIXES
|
|
1026
|
-
header = f'<uploaded_attachment name="{name}" path="{path}">'
|
|
1027
|
-
if not is_text:
|
|
1028
|
-
return (
|
|
1029
|
-
f"{header}\n"
|
|
1030
|
-
"The uploaded file is available at the path above. Read it with an appropriate "
|
|
1031
|
-
"tool before answering questions about its contents.\n"
|
|
1032
|
-
"</uploaded_attachment>"
|
|
1033
|
-
)
|
|
1034
|
-
|
|
1035
|
-
raw = path.read_bytes()
|
|
1036
|
-
truncated = len(raw) > _MAX_INLINE_ATTACHMENT_TEXT_BYTES
|
|
1037
|
-
text = raw[:_MAX_INLINE_ATTACHMENT_TEXT_BYTES].decode("utf-8", errors="replace")
|
|
1038
|
-
suffix = "\n[attachment content truncated]" if truncated else ""
|
|
1039
|
-
return f"{header}\n{text}{suffix}\n</uploaded_attachment>"
|
|
1040
840
|
|
|
1041
841
|
|
|
1042
842
|
__all__ = ["CodexRuntimeAdapter"]
|
ksadk/common/auth.py
CHANGED
|
@@ -49,6 +49,8 @@ class AWSV4Auth:
|
|
|
49
49
|
secret_access_key: str = "",
|
|
50
50
|
region: str = "cn-beijing-6",
|
|
51
51
|
service: str = "aicp",
|
|
52
|
+
*,
|
|
53
|
+
allow_env_fallback: bool = True,
|
|
52
54
|
):
|
|
53
55
|
"""初始化签名器
|
|
54
56
|
|
|
@@ -57,17 +59,21 @@ class AWSV4Auth:
|
|
|
57
59
|
secret_access_key: 访问密钥 (SK),默认从环境变量读取
|
|
58
60
|
region: 区域 ID (如 cn-beijing-6)
|
|
59
61
|
service: 服务名称 (如 kmr, aicp, iam 等)
|
|
62
|
+
allow_env_fallback: 显式运行时连接设为 False,禁止继承宿主凭证
|
|
60
63
|
"""
|
|
61
|
-
self.access_key_id =
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
64
|
+
self.access_key_id = access_key_id
|
|
65
|
+
self.secret_access_key = secret_access_key
|
|
66
|
+
if allow_env_fallback:
|
|
67
|
+
self.access_key_id = (
|
|
68
|
+
self.access_key_id
|
|
69
|
+
or os.environ.get("KSYUN_ACCESS_KEY")
|
|
70
|
+
or os.environ.get("KS3_ACCESS_KEY", "")
|
|
71
|
+
)
|
|
72
|
+
self.secret_access_key = (
|
|
73
|
+
self.secret_access_key
|
|
74
|
+
or os.environ.get("KSYUN_SECRET_KEY")
|
|
75
|
+
or os.environ.get("KS3_SECRET_KEY", "")
|
|
76
|
+
)
|
|
71
77
|
self.region = region
|
|
72
78
|
self.service = service
|
|
73
79
|
|
ksadk/configs/env_registry.py
CHANGED
|
@@ -232,6 +232,28 @@ _ENV_VAR_REGISTRY_ITEMS: tuple[EnvVarSpec, ...] = (
|
|
|
232
232
|
"Isolate native Codex state under the project workspace; set to 0 for debugging only.",
|
|
233
233
|
"1",
|
|
234
234
|
),
|
|
235
|
+
EnvVarSpec(
|
|
236
|
+
"KSADK_DSH_BIN",
|
|
237
|
+
"plugins",
|
|
238
|
+
(
|
|
239
|
+
"Optional absolute path to the managed DSH command; must match the pinned "
|
|
240
|
+
"toolchain version."
|
|
241
|
+
),
|
|
242
|
+
),
|
|
243
|
+
EnvVarSpec(
|
|
244
|
+
"KSADK_DSH_HOME",
|
|
245
|
+
"plugins",
|
|
246
|
+
(
|
|
247
|
+
"Directory containing the isolated DSH Profile; defaults to .agentkit/dsh-home "
|
|
248
|
+
"in the workspace."
|
|
249
|
+
),
|
|
250
|
+
),
|
|
251
|
+
EnvVarSpec(
|
|
252
|
+
"KSADK_DSH_PROFILE",
|
|
253
|
+
"plugins",
|
|
254
|
+
"DSH Profile name used by Studio and the plugin bridge.",
|
|
255
|
+
"studio",
|
|
256
|
+
),
|
|
235
257
|
EnvVarSpec(
|
|
236
258
|
"KSADK_STUDIO_NO_SECURITY",
|
|
237
259
|
"studio",
|
|
@@ -347,6 +369,12 @@ _ENV_VAR_REGISTRY_ITEMS: tuple[EnvVarSpec, ...] = (
|
|
|
347
369
|
sensitive=True,
|
|
348
370
|
),
|
|
349
371
|
EnvVarSpec("KSADK_KB_TOP_K", "knowledge_base", "Knowledge-base retrieval result count.", "5"),
|
|
372
|
+
EnvVarSpec(
|
|
373
|
+
"KSADK_CHECKPOINT_DSN",
|
|
374
|
+
"sessions",
|
|
375
|
+
"Framework-agnostic PostgreSQL checkpoint DSN.",
|
|
376
|
+
sensitive=True,
|
|
377
|
+
),
|
|
350
378
|
EnvVarSpec(
|
|
351
379
|
"KSADK_LANGGRAPH_CHECKPOINT_DSN",
|
|
352
380
|
"sessions",
|
|
@@ -356,9 +384,17 @@ _ENV_VAR_REGISTRY_ITEMS: tuple[EnvVarSpec, ...] = (
|
|
|
356
384
|
EnvVarSpec(
|
|
357
385
|
"KSADK_LANGGRAPH_AUTO_CHECKPOINT",
|
|
358
386
|
"sessions",
|
|
359
|
-
|
|
387
|
+
(
|
|
388
|
+
"Allow a hosted LangGraph runner to rebuild a factory-exported graph with the "
|
|
389
|
+
"managed PostgreSQL saver."
|
|
390
|
+
),
|
|
360
391
|
"false",
|
|
361
392
|
),
|
|
393
|
+
EnvVarSpec(
|
|
394
|
+
"KSADK_LANGGRAPH_POSTGRES_REQUIREMENTS",
|
|
395
|
+
"builders",
|
|
396
|
+
"Internal bundled LangGraph PostgreSQL checkpointer requirement constant.",
|
|
397
|
+
),
|
|
362
398
|
EnvVarSpec(
|
|
363
399
|
"KSADK_LOCAL_SKILLS_DIR", "skills", "Local directory containing extracted Skill packages."
|
|
364
400
|
),
|
|
@@ -436,6 +472,18 @@ _ENV_VAR_REGISTRY_ITEMS: tuple[EnvVarSpec, ...] = (
|
|
|
436
472
|
"model_proxy",
|
|
437
473
|
"Comma-separated model allowlist for the experimental model proxy.",
|
|
438
474
|
),
|
|
475
|
+
EnvVarSpec(
|
|
476
|
+
"KSADK_PERSISTENCE_PROBE_CACHE_TTL",
|
|
477
|
+
"sessions",
|
|
478
|
+
"PostgreSQL persistence readiness cache TTL seconds.",
|
|
479
|
+
"30",
|
|
480
|
+
),
|
|
481
|
+
EnvVarSpec(
|
|
482
|
+
"KSADK_PERSISTENCE_PROBE_TIMEOUT",
|
|
483
|
+
"sessions",
|
|
484
|
+
"PostgreSQL persistence readiness timeout seconds.",
|
|
485
|
+
"2",
|
|
486
|
+
),
|
|
439
487
|
EnvVarSpec("KSADK_PG_EVENTS_TABLE", "sessions", "Internal PostgreSQL events table constant."),
|
|
440
488
|
EnvVarSpec(
|
|
441
489
|
"KSADK_PG_SESSIONS_TABLE", "sessions", "Internal PostgreSQL sessions table constant."
|
|
@@ -473,6 +521,11 @@ _ENV_VAR_REGISTRY_ITEMS: tuple[EnvVarSpec, ...] = (
|
|
|
473
521
|
"skills",
|
|
474
522
|
"Comma-separated public Skill Space ids appended after user spaces.",
|
|
475
523
|
),
|
|
524
|
+
EnvVarSpec(
|
|
525
|
+
"KSADK_RESOURCE_IAM_ENDPOINT",
|
|
526
|
+
"platform_resources",
|
|
527
|
+
"Operator-owned IAM endpoint used to authorize Studio platform-resource bindings.",
|
|
528
|
+
),
|
|
476
529
|
EnvVarSpec(
|
|
477
530
|
"KSADK_RESPONSES_SESSION_HEADER",
|
|
478
531
|
"runners",
|
|
@@ -640,7 +693,10 @@ _ENV_VAR_REGISTRY_ITEMS: tuple[EnvVarSpec, ...] = (
|
|
|
640
693
|
EnvVarSpec(
|
|
641
694
|
"KSADK_AGENT_KERNEL",
|
|
642
695
|
"kernel",
|
|
643
|
-
|
|
696
|
+
(
|
|
697
|
+
"Opt in to Agent Kernel ingress locally; managed deployment may use "
|
|
698
|
+
"AGENT_KERNEL_ENABLED instead."
|
|
699
|
+
),
|
|
644
700
|
"false",
|
|
645
701
|
),
|
|
646
702
|
EnvVarSpec("KSADK_SESSION_PATH", "sessions", "Conversation local SQLite database path."),
|
|
@@ -810,7 +866,7 @@ _ENV_VAR_REGISTRY_ITEMS: tuple[EnvVarSpec, ...] = (
|
|
|
810
866
|
"KSADK_WEB_VERSION",
|
|
811
867
|
"web",
|
|
812
868
|
"Published KsADK Web npm version used for a reproducible wheel build.",
|
|
813
|
-
"0.3.
|
|
869
|
+
"0.3.7",
|
|
814
870
|
),
|
|
815
871
|
EnvVarSpec(
|
|
816
872
|
"KSADK_WORKING_SET_MAX_FILES",
|