agentengine-sdk-python 0.8.1__py3-none-any.whl → 0.8.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/METADATA +25 -12
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/RECORD +421 -232
- ksadk/_build_provenance.json +1 -0
- ksadk/a2a/_space_client_events.py +381 -0
- ksadk/a2a/event_adapter.py +156 -64
- ksadk/a2a/executor.py +179 -63
- ksadk/a2a/space_client.py +6 -333
- ksadk/a2ui/core.py +222 -53
- ksadk/agui/_agent_helpers.py +247 -0
- ksadk/agui/a2ui_projection.py +12 -5
- ksadk/agui/agent.py +443 -259
- ksadk/api/client.py +528 -27
- ksadk/builders/code_builder.py +284 -8
- ksadk/builders/container_builder.py +8 -1
- ksadk/builders/managed_runtime_builder.py +42 -35
- ksadk/cli/__init__.py +23 -0
- ksadk/cli/cmd_dashboard.py +15 -1
- ksadk/cli/cmd_deploy.py +10 -2
- ksadk/cli/cmd_eval.py +66 -9
- ksadk/cli/cmd_evalset.py +284 -0
- ksadk/cli/cmd_files.py +5 -1
- ksadk/cli/cmd_hermes.py +1 -126
- ksadk/cli/cmd_invoke.py +28 -38
- ksadk/cli/cmd_managed_runtime.py +95 -0
- ksadk/cli/cmd_observe.py +85 -0
- ksadk/cli/cmd_openclaw.py +1 -435
- ksadk/cli/cmd_plugin.py +657 -0
- ksadk/cli/cmd_replay.py +28 -4
- ksadk/cli/cmd_studio.py +99 -8
- ksadk/cli/cmd_web.py +10 -2
- ksadk/cli/hermes_env.py +151 -0
- ksadk/cli/invoke_payload.py +49 -0
- ksadk/cli/openclaw_env.py +458 -0
- ksadk/codex/client.py +180 -30
- ksadk/codex/runtime.py +475 -331
- ksadk/configs/env_registry.py +94 -12
- ksadk/configs/env_registry_pcm.py +181 -0
- ksadk/configs/env_var_spec.py +18 -0
- ksadk/configs/global_config.py +5 -0
- ksadk/configs/settings.py +9 -0
- ksadk/context_engine/__init__.py +98 -0
- ksadk/context_engine/assembler.py +176 -0
- ksadk/context_engine/baseline.py +419 -0
- ksadk/context_engine/cache_observability.py +228 -0
- ksadk/context_engine/capabilities.py +443 -0
- ksadk/context_engine/contributors.py +409 -0
- ksadk/context_engine/hosted_pipeline.py +417 -0
- ksadk/context_engine/models.py +117 -0
- ksadk/context_engine/planner.py +698 -0
- ksadk/context_engine/policies.py +319 -0
- ksadk/context_engine/projection.py +31 -0
- ksadk/context_engine/shadow_plan.py +266 -0
- ksadk/context_engine/tokenizer.py +164 -0
- ksadk/conversations/__init__.py +19 -0
- ksadk/conversations/context.py +230 -30
- ksadk/conversations/contracts.py +266 -0
- ksadk/conversations/message_projection.py +308 -26
- ksadk/conversations/model_context.py +49 -3
- ksadk/conversations/projector.py +616 -0
- ksadk/conversations/reducer.py +98 -0
- ksadk/conversations/runtime_compaction.py +207 -5
- ksadk/conversations/runtime_input.py +184 -2
- ksadk/conversations/runtime_invocation.py +81 -3
- ksadk/conversations/runtime_observability.py +141 -0
- ksadk/conversations/runtime_payloads.py +42 -0
- ksadk/conversations/runtime_preparation.py +272 -2
- ksadk/conversations/runtime_resume.py +20 -1
- ksadk/conversations/runtime_stream_events.py +94 -9
- ksadk/conversations/semantic_summary.py +311 -1
- ksadk/conversations/session_lock.py +51 -0
- ksadk/deployment/env_forward.py +72 -0
- ksadk/deployment/managed_runtime.py +5 -0
- ksadk/deployment/providers/serverless.py +143 -69
- ksadk/evaluation/__init__.py +32 -0
- ksadk/evaluation/a2a_adapter.py +9 -1
- ksadk/evaluation/adapters.py +18 -5
- ksadk/evaluation/agent_eval_client.py +395 -0
- ksadk/evaluation/cloud_binding.py +80 -0
- ksadk/evaluation/cloud_converter.py +194 -0
- ksadk/evaluation/cloud_service.py +199 -0
- ksadk/evaluation/contracts.py +73 -4
- ksadk/evaluation/evaluators.py +183 -17
- ksadk/evaluation/evidence.py +258 -0
- ksadk/evaluation/executor.py +31 -6
- ksadk/evaluation/local_adapter.py +550 -0
- ksadk/evaluation/service_env.py +27 -0
- ksadk/evaluation/studio_build_adapter.py +253 -0
- ksadk/evaluation/target.py +15 -6
- ksadk/events/__init__.py +13 -13
- ksadk/events/_v1_compat/__init__.py +1 -0
- ksadk/events/_v1_compat/models.py +299 -0
- ksadk/events/_v1_compat/parser.py +247 -0
- ksadk/events/_v1_compat/projection.py +755 -0
- ksadk/events/adapters/__init__.py +34 -0
- ksadk/events/adapters/_a2a_snapshot.py +622 -0
- ksadk/events/adapters/_a2a_support.py +275 -0
- ksadk/events/adapters/_codex_interactions.py +375 -0
- ksadk/events/adapters/_codex_items.py +801 -0
- ksadk/events/adapters/_codex_validators.py +311 -0
- ksadk/events/adapters/_langgraph_support.py +785 -0
- ksadk/events/adapters/a2a.py +841 -0
- ksadk/events/adapters/adk.py +503 -0
- ksadk/events/adapters/codex.py +907 -0
- ksadk/events/adapters/langgraph.py +745 -0
- ksadk/events/canonical.py +440 -0
- ksadk/events/canonical_replay.py +497 -0
- ksadk/events/canonical_store.py +468 -0
- ksadk/events/cold_recovery.py +257 -0
- ksadk/events/content.py +89 -0
- ksadk/events/identity.py +86 -0
- ksadk/events/pipeline.py +455 -0
- ksadk/events/projections.py +66 -0
- ksadk/events/reducer.py +661 -0
- ksadk/events/replay.py +3 -36
- ksadk/events/runtime_event.py +20 -265
- ksadk/events/session_event.py +324 -0
- ksadk/events/store.py +3 -316
- ksadk/events/v1_compat.py +41 -0
- ksadk/harness/__init__.py +45 -35
- ksadk/harness/runtime.py +220 -58
- ksadk/identity/resolver.py +4 -3
- ksadk/interaction/__init__.py +28 -0
- ksadk/interaction/contracts.py +136 -0
- ksadk/interaction/ledger.py +189 -0
- ksadk/interaction/provider.py +122 -0
- ksadk/interaction/providers/__init__.py +52 -0
- ksadk/interaction/providers/adk.py +40 -0
- ksadk/interaction/providers/codex.py +94 -0
- ksadk/interaction/providers/langgraph.py +58 -0
- ksadk/kernel/__init__.py +117 -0
- ksadk/kernel/authorization.py +258 -0
- ksadk/kernel/bootstrap.py +1074 -0
- ksadk/kernel/contract_fingerprints.py +62 -0
- ksadk/kernel/contracts.py +370 -0
- ksadk/kernel/control.py +220 -0
- ksadk/kernel/errors.py +79 -0
- ksadk/kernel/ingress.py +1123 -0
- ksadk/kernel/mapping.py +111 -0
- ksadk/kernel/memory_store.py +1134 -0
- ksadk/kernel/postgres_store.py +1757 -0
- ksadk/kernel/recovery.py +452 -0
- ksadk/kernel/runtime_identity.py +103 -0
- ksadk/kernel/sql/001_agent_kernel.sql +120 -0
- ksadk/kernel/sqlite_store.py +1411 -0
- ksadk/kernel/state.py +145 -0
- ksadk/kernel/store.py +232 -0
- ksadk/kernel/worker.py +964 -0
- ksadk/knowledge_base/client.py +7 -0
- ksadk/knowledge_base/service.py +32 -5
- ksadk/memory/__init__.py +61 -0
- ksadk/memory/adk/backends/base_ltm_backend.py +96 -1
- ksadk/memory/adk/backends/http_ltm_backend.py +14 -5
- ksadk/memory/adk/backends/inmemory_ltm_backend.py +136 -3
- ksadk/memory/adk/backends/sdk_ltm_backend.py +384 -2
- ksadk/memory/adk/backends/sqlite_ltm_backend.py +95 -0
- ksadk/memory/coordinator.py +461 -0
- ksadk/memory/events.py +202 -0
- ksadk/memory/extraction.py +228 -0
- ksadk/memory/ltm_backend_factory.py +16 -3
- ksadk/memory/models.py +316 -0
- ksadk/memory/policy.py +215 -0
- ksadk/memory/provider.py +47 -0
- ksadk/memory/provider_adapter.py +159 -0
- ksadk/memory/provider_resolver.py +71 -0
- ksadk/memory/providers/__init__.py +5 -0
- ksadk/memory/providers/local_sqlite.py +497 -0
- ksadk/memory/resolved_policy.py +145 -0
- ksadk/memory/service.py +188 -6
- ksadk/model_proxy/bootstrap.py +16 -9
- ksadk/model_proxy/detect.py +202 -9
- ksadk/model_proxy/namespace.py +39 -15
- ksadk/model_proxy/server.py +24 -5
- ksadk/model_proxy/transform.py +60 -2
- ksadk/observability/__init__.py +25 -0
- ksadk/observability/session_log.py +420 -0
- ksadk/observability/trajectory.py +105 -0
- ksadk/plugins/__init__.py +167 -0
- ksadk/plugins/bridges/__init__.py +45 -0
- ksadk/plugins/bridges/codex.py +552 -0
- ksadk/plugins/bridges/dsh.py +1116 -0
- ksadk/plugins/builtins.py +747 -0
- ksadk/plugins/bundle.py +246 -0
- ksadk/plugins/bundle_security.py +167 -0
- ksadk/plugins/composition.py +529 -0
- ksadk/plugins/context_contributor.py +437 -0
- ksadk/plugins/contracts.py +451 -0
- ksadk/plugins/dsh_toolchain.py +935 -0
- ksadk/plugins/ecosystem_bridge.py +1105 -0
- ksadk/plugins/ecosystem_probe.py +191 -0
- ksadk/plugins/host.py +724 -0
- ksadk/plugins/providers/__init__.py +85 -0
- ksadk/plugins/providers/bundles/ksadk-codex/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-codex/index.mjs +18 -0
- ksadk/plugins/providers/bundles/ksadk-codex/package.json +19 -0
- ksadk/plugins/providers/bundles/ksadk-harness/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +19 -0
- ksadk/plugins/providers/bundles/ksadk-harness/package.json +19 -0
- ksadk/plugins/providers/codex.py +722 -0
- ksadk/plugins/providers/codex_dsh.py +83 -0
- ksadk/plugins/providers/dsh.py +951 -0
- ksadk/plugins/providers/dsh_descriptor_host.py +226 -0
- ksadk/plugins/providers/harness.py +627 -0
- ksadk/plugins/providers/harness_dsh.py +91 -0
- ksadk/plugins/providers/legacy.py +215 -0
- ksadk/plugins/providers/legacy_catalog.py +100 -0
- ksadk/plugins/providers/shipped_dsh.py +370 -0
- ksadk/plugins/resolver.py +331 -0
- ksadk/plugins/subagent_providers/__init__.py +12 -0
- ksadk/plugins/subagent_providers/codex.py +443 -0
- ksadk/plugins/subagents.py +333 -0
- ksadk/prompts/__init__.py +71 -0
- ksadk/prompts/compiler.py +215 -0
- ksadk/prompts/models.py +82 -0
- ksadk/prompts/projection.py +89 -0
- ksadk/prompts/resolved.py +137 -0
- ksadk/prompts/sources.py +233 -0
- ksadk/runners/_langgraph_runner_streams.py +822 -0
- ksadk/runners/adk_runner.py +5 -5
- ksadk/runners/base_runner.py +16 -0
- ksadk/runners/factory.py +1 -2
- ksadk/runners/langgraph_runner.py +198 -437
- ksadk/runtime/_runner_adapter/__init__.py +1 -0
- ksadk/runtime/_runner_adapter/stream_mapping.py +797 -0
- ksadk/runtime/adapter.py +119 -2
- ksadk/runtime/conversation_execution.py +316 -182
- ksadk/runtime/executor.py +144 -3
- ksadk/runtime/factory.py +268 -8
- ksadk/runtime/framework_adapters.py +18 -0
- ksadk/runtime/hosted_finalizer.py +268 -0
- ksadk/runtime/launch.py +14 -1
- ksadk/runtime/preprocessing.py +25 -3
- ksadk/runtime/runner_adapter.py +293 -508
- ksadk/runtime/usage.py +33 -0
- ksadk/sandbox/__init__.py +2 -1
- ksadk/sandbox/backends/e2b.py +35 -2
- ksadk/sandbox/factory.py +72 -0
- ksadk/scheduler/__init__.py +18 -0
- ksadk/scheduler/calendar.py +102 -0
- ksadk/scheduler/contracts.py +254 -0
- ksadk/scheduler/dispatcher.py +129 -0
- ksadk/scheduler/engine.py +416 -0
- ksadk/scheduler/sqlite_store.py +563 -0
- ksadk/server/composition.py +8 -0
- ksadk/server/factory.py +69 -6
- ksadk/server/routes/kernel_ingress.py +258 -0
- ksadk/server/routes/openai_compat.py +88 -8
- ksadk/server/routes/projection.py +35 -20
- ksadk/server/routes/run.py +94 -0
- ksadk/server/routes/sessions.py +2 -0
- ksadk/server/routes/streaming.py +5 -2
- ksadk/server/static/assets/{ArtifactsPanel-CakCqxEN.js → ArtifactsPanel-10GPXIJ6.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-CynLknyO.js → CodeBlock-BXk1l-G1.js} +4 -4
- ksadk/server/static/assets/MathMessageMarkdown-BorAY7qD.css +1 -0
- ksadk/server/static/assets/{MathMessageMarkdown-3sQdOysS.js → MathMessageMarkdown-D9uB55Oh.js} +4 -4
- ksadk/server/static/assets/MermaidBlock--OEYoXIJ.js +312 -0
- ksadk/server/static/assets/NativeTerminalPanel-DrEe1syq.js +1 -0
- ksadk/server/static/assets/abnfDiagram-VCTEODGH-eeTFJLvo.js +1 -0
- ksadk/server/static/assets/arc-S3ZNbIAd.js +1 -0
- ksadk/server/static/assets/architecture-7GRP2DOG-Dk9nRQ6-.js +1 -0
- ksadk/server/static/assets/architectureDiagram-5GKGNRK7-CRjgEJDX.js +36 -0
- ksadk/server/static/assets/blockDiagram-NRAW4CY4-C7bsBoNH.js +129 -0
- ksadk/server/static/assets/c4Diagram-UCG6FXSJ-BX3c33Ob.js +38 -0
- ksadk/server/static/assets/channel-s354Yo6o.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-CDpPpKR5.js +1 -0
- ksadk/server/static/assets/{chunk-FMBD7UC4-B_fH2YuH.js → chunk-5VM5RSS4-bZ7ws-8m.js} +1 -1
- ksadk/server/static/assets/{chunk-ND2GUHAM-D6rFLaVV.js → chunk-F27PBJKO-D2r0pvhY.js} +1 -1
- ksadk/server/static/assets/chunk-G27WJ6UU-CZwF3oUP.js +231 -0
- ksadk/server/static/assets/{chunk-4BX2VUAB-B9drTgOW.js → chunk-JWPE2WC7-DigFYCML.js} +1 -1
- ksadk/server/static/assets/chunk-LCL6LL3I-CnorGV5q.js +206 -0
- ksadk/server/static/assets/chunk-POPQ4Y6H-CexntQA-.js +1 -0
- ksadk/server/static/assets/chunk-RHFEMEQ7-CHTC7UxA.js +168 -0
- ksadk/server/static/assets/chunk-SVP7TREG-BC1EWt_-.js +88 -0
- ksadk/server/static/assets/chunk-XXDRQBXY-BTG24xN0.js +1 -0
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Dd0nucl9.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Dd0nucl9.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-S5V4N54A-ChNs_Mdk.js → cose-bilkent-JH36ORCC-CkonRdAS.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-BBlT4uMf.js +1 -0
- ksadk/server/static/assets/cynefinDiagram-5FMLGOSQ-DEOCBe15.js +62 -0
- ksadk/server/static/assets/cytoscape.esm-CyCl8rPi.js +321 -0
- ksadk/server/static/assets/dagre-3AP2YEHR-DBThPuLa.js +4 -0
- ksadk/server/static/assets/dagre-ClTPrTht.js +1 -0
- ksadk/server/static/assets/diagram-S7CK7UJ4-DsZHrnpJ.js +30 -0
- ksadk/server/static/assets/diagram-UQ7AKVKN-BJR4nhVr.js +41 -0
- ksadk/server/static/assets/diagram-VSXAHHWV-xzcERX0a.js +3 -0
- ksadk/server/static/assets/diagram-VX7I27RA-tn2xM1xu.js +24 -0
- ksadk/server/static/assets/diagram-Z3DM3KII-BZPGBkw5.js +24 -0
- ksadk/server/static/assets/{dist-gLnrGsoU.js → dist-4zN1_tq5.js} +1 -1
- ksadk/server/static/assets/{dist-C1sz5Eo3.js → dist-8VWI-2bZ.js} +1 -1
- ksadk/server/static/assets/{dist-BjOdlDjj.js → dist-B-46q3Hk.js} +1 -1
- ksadk/server/static/assets/{dist-o2OVmKvt.js → dist-B0gdk4rl.js} +1 -1
- ksadk/server/static/assets/{dist-4N2NMVYg.js → dist-B1oWRmrH.js} +1 -1
- ksadk/server/static/assets/{dist-CmZHzlwZ.js → dist-BI1qQH4n.js} +1 -1
- ksadk/server/static/assets/{dist-X4TnqwOK.js → dist-BJLUwH6W.js} +1 -1
- ksadk/server/static/assets/{dist-B5oS1zcj.js → dist-Bbwqa8TG.js} +1 -1
- ksadk/server/static/assets/{dist-j6Dxmf_j.js → dist-Btyo4vX4.js} +1 -1
- ksadk/server/static/assets/{dist-DQU9EWw-.js → dist-C71CsujO.js} +1 -1
- ksadk/server/static/assets/{dist-BIlKoW0k.js → dist-CXpH_Rdd.js} +1 -1
- ksadk/server/static/assets/{dist-DJN_6Y39.js → dist-Cq4OL6nO.js} +1 -1
- ksadk/server/static/assets/{dist-Dli7qW-B.js → dist-D1V3f1B4.js} +1 -1
- ksadk/server/static/assets/{dist-fhOuWds5.js → dist-DJmCPRVB.js} +1 -1
- ksadk/server/static/assets/{dist-CWV4lDr1.js → dist-DQAB0qn_.js} +2 -2
- ksadk/server/static/assets/{dist-D6MpCZtz.js → dist-DUwKa_l6.js} +1 -1
- ksadk/server/static/assets/dist-DdRBIceA.js +1 -0
- ksadk/server/static/assets/{dist-DWKByxWV.js → dist-DfGFrb0v.js} +1 -1
- ksadk/server/static/assets/{dist-DsHPdk3W.js → dist-DjhwGUgZ.js} +1 -1
- ksadk/server/static/assets/{dist-B-jNR6Vn.js → dist-DyqV4fL4.js} +1 -1
- ksadk/server/static/assets/{dist-BB3-OwTQ.js → dist-M67Hwu0n.js} +1 -1
- ksadk/server/static/assets/{dist-_pHPTyZ-.js → dist-u8tVH5Ak.js} +1 -1
- ksadk/server/static/assets/ebnfDiagram-PWID7BFC-DVfMsLge.js +1 -0
- ksadk/server/static/assets/erDiagram-SSCWMZ5O-CWEZSYaw.js +99 -0
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-Dr5okd8V.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-VEO-cVcO.js +1 -0
- ksadk/server/static/assets/ganttDiagram-EL5Y4UJY-TWIxoyYL.js +292 -0
- ksadk/server/static/assets/gitGraph-4MIJSDKK-CKiKY9Cf.js +1 -0
- ksadk/server/static/assets/gitGraphDiagram-WWUBYQGX-DDh2hd2S.js +106 -0
- ksadk/server/static/assets/index-B2k_urY8.js +241 -0
- ksadk/server/static/assets/index-ILPt6IWF.css +2 -0
- ksadk/server/static/assets/info-A6RAGUB7-ubA4Nm_p.js +1 -0
- ksadk/server/static/assets/infoDiagram-RXCK75RN-CgoyWiDR.js +2 -0
- ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-K0OOfVna.js → ishikawaDiagram-5VMMS53U-CyRIu_om.js} +6 -6
- ksadk/server/static/assets/{journeyDiagram-JHISSGLW-8LeOJaZp.js → journeyDiagram-EYS64GPL-DN5JXHzN.js} +6 -6
- ksadk/server/static/assets/{kanban-definition-UN3LZRKU-C6uCgZrW.js → kanban-definition-3QL26DDD-CNP3ui66.js} +10 -10
- ksadk/server/static/assets/katex-DWEzQy1d.js +257 -0
- ksadk/server/static/assets/{linear-hdBcYzM8.js → linear-C-qHp7d2.js} +1 -1
- ksadk/server/static/assets/mermaid-parser.core-Cl-K943T.js +166 -0
- ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-Bjy_2v4_.js → mindmap-definition-FBJOCRG2-D5DB5mYm.js} +29 -29
- ksadk/server/static/assets/packet-AYTQ26CC-C7R3NUlK.js +1 -0
- ksadk/server/static/assets/pegDiagram-XKGWAZYB-BQVc9ia_.js +1 -0
- ksadk/server/static/assets/pie-WAS4IAKB-BIT6qjr3.js +1 -0
- ksadk/server/static/assets/pieDiagram-E7YTZNPT-B6UCAvtY.js +39 -0
- ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-BmkRbwCg.js → quadrantDiagram-AXDQQJYC-mIr2d3eb.js} +6 -6
- ksadk/server/static/assets/radar-RG4KPBEZ-l5noef9X.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-Baea6ZvM.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-OKn8zZnU.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-DdKAKC4l.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-Bds8udlG.js +1 -0
- ksadk/server/static/assets/railroadDiagram-O6MQD6OU-Dt3FFDmK.js +1 -0
- ksadk/server/static/assets/requirementDiagram-EFPCY7ZU-Cz_vQtgF.js +84 -0
- ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-l6iXmU65.js → sankeyDiagram-P5KCCOFB-wlO1TsH5.js} +7 -7
- ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-Cq6UBeQB.js → sequenceDiagram-WJ2MYXX4-CHRbElYq.js} +10 -10
- ksadk/server/static/assets/sizeCapture-X5ZJPWSS-DXX54iyO.js +1 -0
- ksadk/server/static/assets/stateDiagram-HBIQ2CUA-Dp_lw9II.js +1 -0
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-5b-8o2iS.js +1 -0
- ksadk/server/static/assets/swimlanes-XN3QIQJK-D8O5UlLG.js +1 -0
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uf6WPRA4.js +8 -0
- ksadk/server/static/assets/{timeline-definition-PNZ67QCA-DEz24vV0.js → timeline-definition-24CTP7MA-8mfKcxvG.js} +7 -7
- ksadk/server/static/assets/treeView-Q6P3EWNA-CK5CSrSO.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-Ch2BKgAM.js +1 -0
- ksadk/server/static/assets/vennDiagram-4TSXK5OY-EnNl0DE7.js +34 -0
- ksadk/server/static/assets/wardley-WFR3VGLG-YW3Q0ml_.js +1 -0
- ksadk/server/static/assets/wardleyDiagram-VM6X3IG4-DBu5fbYr.js +78 -0
- ksadk/server/static/assets/xychartDiagram-S5SC5T6Z-BSVXs4IY.js +7 -0
- ksadk/server/static/index.html +2 -2
- ksadk/sessions/__init__.py +26 -9
- ksadk/sessions/_local_service_sync.py +688 -0
- ksadk/sessions/_local_tables.py +21 -0
- ksadk/sessions/_postgres_schema.py +305 -0
- ksadk/sessions/_postgres_tables.py +15 -0
- ksadk/sessions/base.py +80 -1
- ksadk/sessions/in_memory.py +53 -2
- ksadk/sessions/local_service.py +63 -604
- ksadk/sessions/postgres_service.py +58 -148
- ksadk/sessions/resilient.py +35 -1
- ksadk/skills/service_client.py +48 -0
- ksadk/studio/agent_lifecycle.py +26 -20
- ksadk/studio/api.py +1063 -69
- ksadk/studio/api_catalog_routes.py +5 -0
- ksadk/studio/api_contracts.py +148 -6
- ksadk/studio/api_memory_routes.py +82 -0
- ksadk/studio/api_plugin_routes.py +480 -0
- ksadk/studio/attachment_store.py +187 -0
- ksadk/studio/authoring.py +259 -28
- ksadk/studio/authoring_coordinator.py +809 -67
- ksadk/studio/builder.py +197 -40
- ksadk/studio/capabilities.py +17 -0
- ksadk/studio/cloud.py +1920 -95
- ksadk/studio/codex_agent_service.py +137 -15
- ksadk/studio/codex_authoring.py +469 -0
- ksadk/studio/codex_builder.py +177 -25
- ksadk/studio/codex_manifest.py +71 -22
- ksadk/studio/codex_run.py +59 -4
- ksadk/studio/compatibility_report.py +445 -0
- ksadk/studio/compiler.py +7 -1
- ksadk/studio/contracts.py +234 -4
- ksadk/studio/dsh_provider_registration.py +768 -0
- ksadk/studio/event_store.py +79 -101
- ksadk/studio/framework_run.py +264 -3
- ksadk/studio/hosted_kernel.py +317 -0
- ksadk/studio/manifest_resolver.py +131 -0
- ksadk/studio/model_client.py +95 -9
- ksadk/studio/model_profile_service.py +1 -1
- ksadk/studio/operations.py +47 -5
- ksadk/studio/otel_trace.py +348 -42
- ksadk/studio/pcm_memory.py +85 -0
- ksadk/studio/plugin_composition.py +301 -0
- ksadk/studio/plugin_kernel_adapter.py +128 -0
- ksadk/studio/plugin_runtime.py +652 -0
- ksadk/studio/repository.py +23 -2
- ksadk/studio/resource_catalog.py +49 -1
- ksadk/studio/run_service.py +1266 -202
- ksadk/studio/runtime_source.py +51 -17
- ksadk/studio/scheduler_runtime.py +374 -0
- ksadk/studio/scheduler_service.py +211 -0
- ksadk/studio/service.py +1815 -117
- ksadk/studio/shared_web.py +199 -50
- ksadk/studio/soul.py +52 -0
- ksadk/studio/static/assets/index-DXs1Eq4M.css +1 -0
- ksadk/studio/static/assets/index-DeDqwTsD.js +283 -0
- ksadk/studio/static/index.html +2 -2
- ksadk/studio/templates.py +100 -8
- ksadk/studio/validator.py +20 -1
- ksadk/studio/workspace.py +31 -32
- ksadk/tracing/setup.py +304 -3
- ksadk/version.py +1 -1
- ksadk_runtime_common/schemas/runtime_event_v1.json +37 -0
- ksadk_runtime_common/schemas/runtime_event_v2.json +271 -0
- ksadk_runtime_common/workspace_files/path_utils.py +41 -0
- ksadk/events/parser.py +0 -191
- ksadk/server/static/assets/MathMessageMarkdown-DeYh8QPr.css +0 -1
- ksadk/server/static/assets/MermaidBlock-NERD_ef7.js +0 -303
- ksadk/server/static/assets/NativeTerminalPanel-CiHWf82q.js +0 -1
- ksadk/server/static/assets/arc-DrgjcKhl.js +0 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-CpZLRCcY.js +0 -1
- ksadk/server/static/assets/architectureDiagram-3BPJPVTR-BXoVRbQ6.js +0 -36
- ksadk/server/static/assets/blockDiagram-GPEHLZMM-BnaB3Ywv.js +0 -132
- ksadk/server/static/assets/c4Diagram-AAUBKEIU-Dw4weZcp.js +0 -10
- ksadk/server/static/assets/channel-Dt3rQTFI.js +0 -1
- ksadk/server/static/assets/chunk-2J33WTMH-ChjpLK7j.js +0 -1
- ksadk/server/static/assets/chunk-55IACEB6-CK4ROATy.js +0 -1
- ksadk/server/static/assets/chunk-727SXJPM-B9KtTTgw.js +0 -206
- ksadk/server/static/assets/chunk-AQP2D5EJ-1O1mki3m.js +0 -231
- ksadk/server/static/assets/chunk-QZHKN3VN-iXEZtKQc.js +0 -1
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-DIveV17Q.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-DIveV17Q.js +0 -1
- ksadk/server/static/assets/cytoscape.esm-DelgaX4f.js +0 -321
- ksadk/server/static/assets/dagre-BM42HDAG-D0QXg_MQ.js +0 -4
- ksadk/server/static/assets/dagre-Bx709z4p.js +0 -1
- ksadk/server/static/assets/diagram-2AECGRRQ-DBDDKwBQ.js +0 -43
- ksadk/server/static/assets/diagram-5GNKFQAL-BkwDOxmO.js +0 -10
- ksadk/server/static/assets/diagram-KO2AKTUF-Bv8waYvY.js +0 -3
- ksadk/server/static/assets/diagram-LMA3HP47-e1VECDdu.js +0 -24
- ksadk/server/static/assets/diagram-OG6HWLK6-Ds9adfRl.js +0 -24
- ksadk/server/static/assets/dist-B5J2uhNk.js +0 -1
- ksadk/server/static/assets/erDiagram-TEJ5UH35-BPItFKH6.js +0 -85
- ksadk/server/static/assets/eventmodeling-FCH6USID-DYFSxbqr.js +0 -1
- ksadk/server/static/assets/flowDiagram-I6XJVG4X-BbYB9w5Y.js +0 -162
- ksadk/server/static/assets/ganttDiagram-6RSMTGT7-TQXa0KXv.js +0 -292
- ksadk/server/static/assets/gitGraph-WXDBUCRP-DyNYp6BN.js +0 -1
- ksadk/server/static/assets/gitGraphDiagram-PVQCEYII-bKblCnpa.js +0 -106
- ksadk/server/static/assets/graphlib-B8gBHxth.js +0 -1
- ksadk/server/static/assets/index-R52pJJvg.js +0 -177
- ksadk/server/static/assets/index-jJr3_955.css +0 -2
- ksadk/server/static/assets/info-J43DQDTF-WUx7qTde.js +0 -1
- ksadk/server/static/assets/infoDiagram-5YYISTIA-BGVT7J_i.js +0 -2
- ksadk/server/static/assets/katex-CYWseY5E.js +0 -265
- ksadk/server/static/assets/mermaid-parser.core-BWrDjSZM.js +0 -161
- ksadk/server/static/assets/packet-YPE3B663-BN13y_xl.js +0 -1
- ksadk/server/static/assets/pie-LRSECV5Y-ftSLXhhc.js +0 -1
- ksadk/server/static/assets/pieDiagram-4H26LBE5-GmmqNiVH.js +0 -30
- ksadk/server/static/assets/radar-GUYGQ44K-jaICkIeO.js +0 -1
- ksadk/server/static/assets/requirementDiagram-4Y6WPE33-DSWFqL7c.js +0 -84
- ksadk/server/static/assets/stateDiagram-AJRCARHV-qzTQpg3Y.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-BYCoYGAN.js +0 -1
- ksadk/server/static/assets/treeView-BLDUP644-Cpib_vlz.js +0 -1
- ksadk/server/static/assets/treemap-LRROVOQU-DQxfmVHK.js +0 -1
- ksadk/server/static/assets/vennDiagram-CIIHVFJN-CMCixki2.js +0 -34
- ksadk/server/static/assets/wardley-L42UT6IY-BQYHnnkU.js +0 -1
- ksadk/server/static/assets/wardleyDiagram-YWT4CUSO-CVzB8F9K.js +0 -78
- ksadk/server/static/assets/xychartDiagram-2RQKCTM6-BFBqBLc1.js +0 -7
- ksadk/studio/evaluation.py +0 -192
- ksadk/studio/static/assets/index-CaEN0eTR.css +0 -1
- ksadk/studio/static/assets/index-DI2eY_NH.js +0 -252
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/top_level.txt +0 -0
ksadk/codex/client.py
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
- 测试实现:用 fake(见 tests/runners/test_codex_runtime.py / test_adapter_contract.py),
|
|
12
12
|
不需要真 CLI 二进制。
|
|
13
13
|
|
|
14
|
-
诚实边界:本模块的 SDK **方法面**已对安装的 ``openai-codex==0.
|
|
14
|
+
诚实边界:本模块的 SDK **方法面**已对安装的 ``openai-codex==0.147.0`` 实证(方法存在性 +
|
|
15
15
|
协程/asyncgen 形态);Notification → RuntimeEvent 的**字段级** phase 映射需在接真实 codex
|
|
16
16
|
后端时按实况对齐(结构已按生成的 payload 类型映射,见 ``_notification_to_event_dict``)。
|
|
17
17
|
"""
|
|
@@ -31,12 +31,35 @@ from uuid import uuid4
|
|
|
31
31
|
|
|
32
32
|
from ksadk.model_proxy import ProxyConfig, ProxyServer
|
|
33
33
|
from ksadk.model_proxy.cache import CapabilityCache, credential_scope
|
|
34
|
-
from ksadk.model_proxy.detect import
|
|
34
|
+
from ksadk.model_proxy.detect import (
|
|
35
|
+
CODEX_DIRECT_REQUIRED_TOOL_TYPES,
|
|
36
|
+
CODEX_OPTIONAL_TOOL_TYPES,
|
|
37
|
+
ModelCapabilities,
|
|
38
|
+
probe_responses_capability,
|
|
39
|
+
)
|
|
35
40
|
|
|
36
41
|
# 探测缓存单例:能力判定跨 client 共享,按 (model, base, credential_scope) 长缓存
|
|
37
42
|
_CAPABILITY_CACHE = CapabilityCache(ttl=3600)
|
|
38
43
|
|
|
39
44
|
|
|
45
|
+
class CodexCapabilityUnavailableError(RuntimeError):
|
|
46
|
+
"""A caller-required Codex capability cannot be preserved by this route."""
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass(frozen=True)
|
|
50
|
+
class _CapabilityRoute:
|
|
51
|
+
use_proxy: bool
|
|
52
|
+
disabled_tool_types: frozenset[str] = frozenset()
|
|
53
|
+
unavailable_required_tool_types: frozenset[str] = frozenset()
|
|
54
|
+
|
|
55
|
+
def require_available(self) -> None:
|
|
56
|
+
if self.unavailable_required_tool_types:
|
|
57
|
+
names = ", ".join(sorted(self.unavailable_required_tool_types))
|
|
58
|
+
raise CodexCapabilityUnavailableError(
|
|
59
|
+
f"required Codex capabilities unavailable on selected route: {names}"
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
40
63
|
@dataclass
|
|
41
64
|
class _PendingApproval:
|
|
42
65
|
approval_id: str
|
|
@@ -81,11 +104,48 @@ def _upgrade_http_to_https(upstream: str) -> str:
|
|
|
81
104
|
return upstream
|
|
82
105
|
|
|
83
106
|
|
|
84
|
-
def
|
|
85
|
-
|
|
107
|
+
def _route_for_capabilities(
|
|
108
|
+
caps: ModelCapabilities,
|
|
109
|
+
*,
|
|
110
|
+
required_tool_types: set[str] | frozenset[str] = frozenset(),
|
|
111
|
+
) -> _CapabilityRoute:
|
|
112
|
+
"""Split protocol requirements from optional tool degradation.
|
|
86
113
|
|
|
87
|
-
|
|
88
|
-
|
|
114
|
+
The current Studio/Codex launch contract has no user-facing required-tool
|
|
115
|
+
declaration, so callers pass the default empty set. This explicit input is
|
|
116
|
+
the fail-closed seam for a future ``web_search=required`` contract.
|
|
117
|
+
"""
|
|
118
|
+
|
|
119
|
+
native_ready = caps.responses_supported is True and CODEX_DIRECT_REQUIRED_TOOL_TYPES.issubset(
|
|
120
|
+
caps.tool_types
|
|
121
|
+
)
|
|
122
|
+
use_proxy = not native_ready
|
|
123
|
+
disabled = (
|
|
124
|
+
CODEX_OPTIONAL_TOOL_TYPES
|
|
125
|
+
if use_proxy
|
|
126
|
+
else CODEX_OPTIONAL_TOOL_TYPES.difference(caps.tool_types)
|
|
127
|
+
)
|
|
128
|
+
required = frozenset(required_tool_types)
|
|
129
|
+
unavailable = (required.difference(caps.tool_types)) | required.intersection(disabled)
|
|
130
|
+
return _CapabilityRoute(
|
|
131
|
+
use_proxy=use_proxy,
|
|
132
|
+
disabled_tool_types=frozenset(disabled),
|
|
133
|
+
unavailable_required_tool_types=frozenset(unavailable),
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def _probe_capability_route(
|
|
138
|
+
model: str,
|
|
139
|
+
base: str,
|
|
140
|
+
key: str,
|
|
141
|
+
*,
|
|
142
|
+
required_tool_types: set[str] | frozenset[str] = frozenset(),
|
|
143
|
+
) -> _CapabilityRoute:
|
|
144
|
+
"""Probe once and return protocol plus optional-tool routing decisions.
|
|
145
|
+
|
|
146
|
+
纯文本 Responses 成功不代表能接收 Codex 0.147 的完整
|
|
147
|
+
``additional_tools`` 方言。namespace/custom 缺失或未知走兼容代理;仅缺
|
|
148
|
+
web_search 时保留原生 Responses,并在 Codex 生成请求前禁用该可选工具。
|
|
89
149
|
"""
|
|
90
150
|
|
|
91
151
|
def probe(m: str, b: str):
|
|
@@ -95,7 +155,13 @@ def _probe_requires_proxy(model: str, base: str, key: str) -> bool:
|
|
|
95
155
|
return probe_responses_capability(client, b, key, m, timeout=15.0)
|
|
96
156
|
|
|
97
157
|
caps = _CAPABILITY_CACHE.get_or_probe(model, base, credential_scope(key), probe)
|
|
98
|
-
return caps
|
|
158
|
+
return _route_for_capabilities(caps, required_tool_types=required_tool_types)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def _probe_requires_proxy(model: str, base: str, key: str) -> bool:
|
|
162
|
+
"""Compatibility predicate for callers/tests that only need protocol choice."""
|
|
163
|
+
|
|
164
|
+
return _probe_capability_route(model, base, key).use_proxy
|
|
99
165
|
|
|
100
166
|
|
|
101
167
|
class CodexClient(ABC):
|
|
@@ -220,7 +286,7 @@ class AsyncCodexClient(CodexClient):
|
|
|
220
286
|
f"{owner.__name__}.{method_name}(版本不兼容)"
|
|
221
287
|
)
|
|
222
288
|
|
|
223
|
-
# AsyncCodex 0.
|
|
289
|
+
# AsyncCodex 0.147.0 only accepts one CodexConfig positional/keyword.
|
|
224
290
|
config, self._proxy = self._maybe_apply_proxy(
|
|
225
291
|
config,
|
|
226
292
|
proxy_observer=proxy_observer,
|
|
@@ -239,7 +305,7 @@ class AsyncCodexClient(CodexClient):
|
|
|
239
305
|
def _install_approval_bridge(self) -> None:
|
|
240
306
|
"""Replace the SDK's unconditional accept handler with a HITL bridge.
|
|
241
307
|
|
|
242
|
-
``openai-codex==0.
|
|
308
|
+
``openai-codex==0.147.0`` exposes approval callbacks only on its sync
|
|
243
309
|
JSON-RPC client. The public ``AsyncCodex`` wrapper owns that client, so
|
|
244
310
|
this pinned compatibility seam is validated eagerly instead of silently
|
|
245
311
|
auto-accepting tool and file changes.
|
|
@@ -304,24 +370,29 @@ class AsyncCodexClient(CodexClient):
|
|
|
304
370
|
# active run; never fall back to the SDK's auto-accept default.
|
|
305
371
|
return {"decision": "decline"}
|
|
306
372
|
self._pending_approvals[approval_id] = pending
|
|
373
|
+
# 下发原生 JSON-RPC requestApproval 消息(synthetic id=approval_id):
|
|
374
|
+
# canonical mapper 只认原生方法(unsupported_method fail-closed),
|
|
375
|
+
# 旧合成 ``item/approval/requested`` 事件会让整个 run 失败。
|
|
307
376
|
approval_queue.put(
|
|
308
377
|
{
|
|
309
|
-
"
|
|
310
|
-
"
|
|
311
|
-
|
|
312
|
-
"threadId": thread_id,
|
|
313
|
-
"kind": (
|
|
314
|
-
"command"
|
|
315
|
-
if method == "item/commandExecution/requestApproval"
|
|
316
|
-
else "file_change"
|
|
317
|
-
),
|
|
318
|
-
"detail": raw,
|
|
319
|
-
},
|
|
378
|
+
"id": approval_id,
|
|
379
|
+
"method": method,
|
|
380
|
+
"params": raw,
|
|
320
381
|
}
|
|
321
382
|
)
|
|
322
383
|
pending.resolved.wait()
|
|
323
384
|
with self._approval_lock:
|
|
324
385
|
self._pending_approvals.pop(approval_id, None)
|
|
386
|
+
# 回包也以 JSON-RPC response 形态下发,mapper 才会产出
|
|
387
|
+
# InteractionResolved(原 call_id 闭环)并释放 continuation。
|
|
388
|
+
response = pending.response or {"decision": "decline"}
|
|
389
|
+
if approval_queue is not None:
|
|
390
|
+
approval_queue.put(
|
|
391
|
+
{
|
|
392
|
+
"id": approval_id,
|
|
393
|
+
"result": dict(response),
|
|
394
|
+
}
|
|
395
|
+
)
|
|
325
396
|
return pending.response or {"decision": "decline"}
|
|
326
397
|
|
|
327
398
|
def _handle_user_input_request(
|
|
@@ -455,19 +526,23 @@ class AsyncCodexClient(CodexClient):
|
|
|
455
526
|
- ``KSADK_CODEX_USE_PROXY=1`` → 强制开代理;``=0`` → 强制直连(可人工覆盖误判)。
|
|
456
527
|
- **未设 env 时智能探测**:OpenAI 官方 base_url 直连(不探测);自定义上游
|
|
457
528
|
(星流等)探测 responses 能力(detect.py + CapabilityCache 缓存,一次探测长缓存):
|
|
458
|
-
-
|
|
459
|
-
-
|
|
460
|
-
-
|
|
529
|
+
- namespace/custom 支持 → 原生 Responses 直连
|
|
530
|
+
- 仅 web_search 缺失 → 仍直连,并关闭该可选能力
|
|
531
|
+
- namespace/custom 缺失或无法确认 → 自动启用代理
|
|
461
532
|
- 凭证闭合:codex 子进程只拿随机 KSADK_PROXY_TOKEN;上游 key 留父进程。
|
|
462
533
|
- 互斥:launch_args_override 已设时 raise(override 整体覆盖命令行)。
|
|
534
|
+
- P1:直连分支(协议必需工具面确认、env=0)遇到自定义 base 也注入
|
|
535
|
+
``ksadk_direct`` provider——否则 codex 子进程回落默认 OpenAI 官方
|
|
536
|
+
端点,自定义上游(OPENAI_API_BASE)静默失效。已显式设
|
|
537
|
+
``model_provider=`` 的 config 不覆盖;官方 base 不注入。
|
|
463
538
|
|
|
464
539
|
返回 (新 config, ProxyServer | None)。staticmethod 便于单测。
|
|
465
540
|
"""
|
|
466
541
|
runtime_env = {**os.environ, **(getattr(config, "env", None) or {})}
|
|
467
542
|
env_val = runtime_env.get("KSADK_CODEX_USE_PROXY")
|
|
468
|
-
if env_val
|
|
469
|
-
return config, None
|
|
470
|
-
if env_val
|
|
543
|
+
if env_val in {"0", "direct"}:
|
|
544
|
+
return AsyncCodexClient._inject_direct_provider(config), None
|
|
545
|
+
if env_val in {"1", "forced"}:
|
|
471
546
|
return AsyncCodexClient._start_proxy_and_inject(
|
|
472
547
|
config,
|
|
473
548
|
proxy_observer=proxy_observer,
|
|
@@ -483,12 +558,79 @@ class AsyncCodexClient(CodexClient):
|
|
|
483
558
|
return config, None # OpenAI 官方:直连,不探测
|
|
484
559
|
model = runtime_env.get("OPENAI_MODEL_NAME") or runtime_env.get("MODEL_NAME") or ""
|
|
485
560
|
key = runtime_env.get("KSADK_PROXY_UPSTREAM_KEY") or runtime_env.get("OPENAI_API_KEY") or ""
|
|
486
|
-
|
|
561
|
+
# Probe the exact URL scheme that Codex/proxy will use. Managed
|
|
562
|
+
# runtimes discover KSPMAS through its historical ``http://`` internal
|
|
563
|
+
# URL, while the provider is upgraded to HTTPS before execution. A
|
|
564
|
+
# probe against HTTP can see only a redirect and incorrectly classify
|
|
565
|
+
# an HTTPS ``/responses`` 404 as unknown, causing a broken direct path.
|
|
566
|
+
probe_base = _upgrade_http_to_https(base)
|
|
567
|
+
route = _probe_capability_route(model, probe_base, key)
|
|
568
|
+
# Future required-tool declarations must be checked here before either
|
|
569
|
+
# proxying or suppressing optional tools.
|
|
570
|
+
if isinstance(route, bool): # compatibility for injected test doubles
|
|
571
|
+
route = _CapabilityRoute(use_proxy=route)
|
|
572
|
+
route.require_available()
|
|
573
|
+
if route.use_proxy:
|
|
487
574
|
return AsyncCodexClient._start_proxy_and_inject(
|
|
488
575
|
config,
|
|
489
576
|
proxy_observer=proxy_observer,
|
|
490
577
|
)
|
|
491
|
-
|
|
578
|
+
# 探测确认协议必需工具面:直连,但必须把自定义 base 配成 provider。
|
|
579
|
+
return (
|
|
580
|
+
AsyncCodexClient._inject_direct_provider(
|
|
581
|
+
config,
|
|
582
|
+
disabled_tool_types=route.disabled_tool_types,
|
|
583
|
+
),
|
|
584
|
+
None,
|
|
585
|
+
)
|
|
586
|
+
|
|
587
|
+
@staticmethod
|
|
588
|
+
def _inject_direct_provider(
|
|
589
|
+
config: Any,
|
|
590
|
+
*,
|
|
591
|
+
disabled_tool_types: frozenset[str] = frozenset(),
|
|
592
|
+
) -> Any:
|
|
593
|
+
"""直连模式注入 ``ksadk_direct`` provider(P1:非 proxy 不丢自定义 base)。
|
|
594
|
+
|
|
595
|
+
- 无自定义 base / 官方 OpenAI base → 原样返回。
|
|
596
|
+
- 已设 ``model_provider=`` → 保留 provider,仅追加必要的可选工具关闭项。
|
|
597
|
+
- 否则追加 ``model_provider=ksadk_direct`` + base_url/env_key/wire_api
|
|
598
|
+
(responses;该分支只在探测确认或显式强制直连时到达,其余走 proxy)。
|
|
599
|
+
"""
|
|
600
|
+
import dataclasses
|
|
601
|
+
|
|
602
|
+
from openai_codex import CodexConfig # type: ignore[import-not-found]
|
|
603
|
+
|
|
604
|
+
cfg = config if isinstance(config, CodexConfig) else CodexConfig()
|
|
605
|
+
overrides = list(cfg.config_overrides or ())
|
|
606
|
+
if any(str(o).startswith("model_provider=") for o in overrides):
|
|
607
|
+
if "web_search" in disabled_tool_types and "web_search=disabled" not in overrides:
|
|
608
|
+
return dataclasses.replace(
|
|
609
|
+
cfg,
|
|
610
|
+
config_overrides=tuple([*overrides, "web_search=disabled"]),
|
|
611
|
+
)
|
|
612
|
+
return config
|
|
613
|
+
runtime_env = {**os.environ, **(cfg.env or {})}
|
|
614
|
+
base = (
|
|
615
|
+
runtime_env.get("KSADK_PROXY_UPSTREAM_BASE")
|
|
616
|
+
or runtime_env.get("OPENAI_BASE_URL")
|
|
617
|
+
or runtime_env.get("OPENAI_API_BASE")
|
|
618
|
+
or ""
|
|
619
|
+
)
|
|
620
|
+
if not base or _is_openai_official(base):
|
|
621
|
+
return config
|
|
622
|
+
base = _upgrade_http_to_https(base)
|
|
623
|
+
overrides += [
|
|
624
|
+
"model_provider=ksadk_direct",
|
|
625
|
+
"model_providers.ksadk_direct.name=ksadk_direct",
|
|
626
|
+
f"model_providers.ksadk_direct.base_url={base}",
|
|
627
|
+
"model_providers.ksadk_direct.env_key=OPENAI_API_KEY",
|
|
628
|
+
"model_providers.ksadk_direct.wire_api=responses",
|
|
629
|
+
"model_providers.ksadk_direct.supports_websockets=false",
|
|
630
|
+
]
|
|
631
|
+
if "web_search" in disabled_tool_types and "web_search=disabled" not in overrides:
|
|
632
|
+
overrides.append("web_search=disabled")
|
|
633
|
+
return dataclasses.replace(cfg, config_overrides=tuple(overrides))
|
|
492
634
|
|
|
493
635
|
@staticmethod
|
|
494
636
|
def _start_proxy_and_inject(
|
|
@@ -532,6 +674,14 @@ class AsyncCodexClient(CodexClient):
|
|
|
532
674
|
)
|
|
533
675
|
proxy.start()
|
|
534
676
|
overrides = list(cfg.config_overrides or ())
|
|
677
|
+
# 默认模型必须注入:codex 未配置 model= 时会发自家默认名(如 gpt-5.6-terra),
|
|
678
|
+
# 上游(kspmas)按未知模型 403。注入后 thread 级 model 覆盖仍优先生效
|
|
679
|
+
# (实测 codex thread model > config model=),RunAgent 的 Model 透传靠它。
|
|
680
|
+
default_model = (
|
|
681
|
+
runtime_env.get("OPENAI_MODEL_NAME") or runtime_env.get("MODEL_NAME") or ""
|
|
682
|
+
).strip()
|
|
683
|
+
if default_model and not any(str(o).startswith("model=") for o in overrides):
|
|
684
|
+
overrides.append(f"model={default_model}")
|
|
535
685
|
overrides += [
|
|
536
686
|
"model_provider=ksadk_proxy",
|
|
537
687
|
"model_providers.ksadk_proxy.name=ksadk_proxy",
|
|
@@ -587,7 +737,7 @@ class AsyncCodexClient(CodexClient):
|
|
|
587
737
|
async def _start_manual_thread(self, config: Optional[dict[str, Any]]) -> Any:
|
|
588
738
|
"""Start a thread whose native approvals are reviewed by Studio users.
|
|
589
739
|
|
|
590
|
-
``openai-codex==0.
|
|
740
|
+
``openai-codex==0.147.0`` exposes ``ApprovalsReviewer.user`` on the
|
|
591
741
|
generated app-server contract but omits it from the public
|
|
592
742
|
``ApprovalMode`` enum. Use that pinned wire contract explicitly rather
|
|
593
743
|
than falling back to ``auto_review``.
|
|
@@ -999,7 +1149,7 @@ class AsyncCodexClient(CodexClient):
|
|
|
999
1149
|
"""
|
|
1000
1150
|
payload = notification.payload
|
|
1001
1151
|
if hasattr(payload, "model_dump"):
|
|
1002
|
-
params = payload.model_dump(mode="json")
|
|
1152
|
+
params = payload.model_dump(mode="json", by_alias=True)
|
|
1003
1153
|
else:
|
|
1004
1154
|
params = getattr(payload, "params", None)
|
|
1005
1155
|
if not isinstance(params, dict):
|