agentengine-sdk-python 0.8.3__py3-none-any.whl → 0.8.5__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.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/METADATA +13 -9
- agentengine_sdk_python-0.8.5.dist-info/RECORD +1296 -0
- ksadk/_build_provenance.json +1 -1
- ksadk/_process.py +83 -0
- ksadk/_str_enum.py +17 -0
- ksadk/a2ui/core.py +3 -3
- ksadk/api/client.py +111 -91
- ksadk/builders/code_builder.py +74 -21
- ksadk/builders/framework_requirements.py +22 -3
- ksadk/builders/ks3_uploader.py +36 -7
- ksadk/builders/managed_runtime_builder.py +1 -0
- ksadk/cli/__init__.py +68 -3
- ksadk/cli/cmd_config.py +4 -4
- ksadk/cli/cmd_create.py +12 -12
- ksadk/cli/cmd_hermes.py +24 -2
- ksadk/cli/cmd_invoke.py +28 -5
- ksadk/cli/cmd_managed_runtime.py +13 -1
- ksadk/cli/cmd_openclaw.py +26 -1
- ksadk/cli/cmd_plugin.py +76 -13
- ksadk/cli/cmd_studio.py +64 -16
- ksadk/cli/cmd_web.py +2 -5
- ksadk/cli/openclaw_env.py +1 -1
- ksadk/cli/resource_common.py +26 -0
- ksadk/cli/runtime_bootstrap.py +23 -1
- ksadk/codex/client.py +425 -96
- ksadk/codex/projection.py +24 -0
- ksadk/codex/runtime.py +56 -298
- ksadk/common/auth.py +16 -10
- ksadk/configs/__init__.py +1 -1
- ksadk/configs/env_registry.py +153 -31
- ksadk/configs/env_registry_studio.py +86 -0
- ksadk/configs/global_config.py +1 -1
- ksadk/configs/settings.py +3 -3
- ksadk/connector/__init__.py +17 -0
- ksadk/connector/channel.py +477 -0
- ksadk/context_engine/capabilities.py +52 -4
- ksadk/conversations/attachment_storage.py +10 -3
- ksadk/conversations/attachments.py +16 -5
- ksadk/conversations/message_projection.py +133 -21
- ksadk/conversations/normalize.py +28 -10
- ksadk/conversations/projector.py +4 -6
- ksadk/conversations/runtime_baseline.py +37 -0
- ksadk/conversations/runtime_invocation.py +22 -4
- ksadk/conversations/runtime_observability.py +39 -10
- ksadk/conversations/runtime_payloads.py +9 -0
- ksadk/conversations/runtime_persistence.py +105 -9
- ksadk/conversations/runtime_preparation.py +42 -33
- ksadk/conversations/runtime_resume.py +50 -2
- ksadk/conversations/runtime_stream_events.py +34 -35
- ksadk/conversations/runtime_streaming.py +33 -7
- ksadk/deployment/env_forward.py +2 -2
- ksadk/deployment/providers/serverless.py +1 -1
- ksadk/events/adapters/_codex_items.py +16 -8
- ksadk/events/adapters/_codex_validators.py +18 -7
- ksadk/events/adapters/_langgraph_support.py +34 -0
- ksadk/events/adapters/langgraph.py +15 -1
- ksadk/events/canonical_store.py +3 -1
- ksadk/events/projections.py +1 -1
- ksadk/events/session_event.py +2 -2
- ksadk/harness/__init__.py +14 -0
- ksadk/harness/app.py +11 -0
- ksadk/harness/artifact_store.py +213 -0
- ksadk/harness/capabilities.py +115 -0
- ksadk/harness/capability_runtime.py +237 -0
- ksadk/harness/closure_contract.py +92 -0
- ksadk/harness/compaction_record.py +122 -0
- ksadk/harness/compiler.py +284 -0
- ksadk/harness/config.py +2 -2
- ksadk/harness/conformance/__init__.py +33 -0
- ksadk/harness/conformance/contract.py +506 -0
- ksadk/harness/conformance/fixtures.py +102 -0
- ksadk/harness/context_engine.py +403 -0
- ksadk/harness/context_maintenance.py +259 -0
- ksadk/harness/context_manifest.py +188 -0
- ksadk/harness/context_tuning.py +168 -0
- ksadk/harness/draft_runtime.py +322 -0
- ksadk/harness/engine/__init__.py +40 -0
- ksadk/harness/engine/base.py +122 -0
- ksadk/harness/engine/budgets.py +108 -0
- ksadk/harness/engine/capability_declarations.py +59 -0
- ksadk/harness/engine/completion_guard.py +42 -0
- ksadk/harness/engine/context_pipeline.py +579 -0
- ksadk/harness/engine/graph_builder.py +859 -0
- ksadk/harness/engine/langgraph.py +931 -0
- ksadk/harness/engine/mcp_disclosure.py +750 -0
- ksadk/harness/engine/policy_runtime.py +70 -0
- ksadk/harness/engine/postgres_checkpointer.py +63 -0
- ksadk/harness/engine/run_control_bridge.py +80 -0
- ksadk/harness/engine/run_types.py +88 -0
- ksadk/harness/engine/skill_disclosure.py +189 -0
- ksadk/harness/engine/spans.py +41 -0
- ksadk/harness/engine/subagents.py +343 -0
- ksadk/harness/engine/thread_ids.py +112 -0
- ksadk/harness/engine/tool_dispatch.py +144 -0
- ksadk/harness/event_tree.py +212 -0
- ksadk/harness/events.py +461 -0
- ksadk/harness/execution_policy.py +94 -0
- ksadk/harness/insights.py +210 -0
- ksadk/harness/lifecycle.py +578 -0
- ksadk/harness/lifecycle_conformance.py +233 -0
- ksadk/harness/lifecycle_local_plane.py +104 -0
- ksadk/harness/loop/__init__.py +44 -0
- ksadk/harness/loop/reason.py +454 -0
- ksadk/harness/loop/tools.py +762 -0
- ksadk/harness/managed_runtime.py +884 -0
- ksadk/harness/mcp_matrix.py +474 -0
- ksadk/harness/mcp_runtime.py +471 -0
- ksadk/harness/memory_consolidation.py +157 -0
- ksadk/harness/memory_loop.py +156 -0
- ksadk/harness/memory_runtime.py +541 -0
- ksadk/harness/metrics.py +90 -0
- ksadk/harness/model_capability.py +253 -0
- ksadk/harness/model_provider.py +220 -0
- ksadk/harness/observability/__init__.py +29 -0
- ksadk/harness/observability/inspection.py +528 -0
- ksadk/harness/observability/metrics.py +167 -0
- ksadk/harness/observability/otel_exporter.py +218 -0
- ksadk/harness/prompt_cache.py +70 -0
- ksadk/harness/public_activity.py +154 -0
- ksadk/harness/readiness.py +249 -0
- ksadk/harness/reasoner.py +466 -13
- ksadk/harness/release_readiness.py +140 -0
- ksadk/harness/resource_ref.py +69 -0
- ksadk/harness/run_control.py +668 -0
- ksadk/harness/runtime.py +171 -136
- ksadk/harness/runtime_capabilities.py +158 -0
- ksadk/harness/runtime_server.py +514 -0
- ksadk/harness/sandbox_adapters.py +739 -0
- ksadk/harness/sandbox_backend.py +530 -0
- ksadk/harness/sandbox_conformance.py +288 -0
- ksadk/harness/sandbox_lease.py +77 -0
- ksadk/harness/sandbox_lease_conformance.py +259 -0
- ksadk/harness/sandbox_matrix.py +170 -0
- ksadk/harness/sandbox_reconciliation.py +140 -0
- ksadk/harness/sandbox_recovery.py +586 -0
- ksadk/harness/sandbox_recovery_conformance.py +246 -0
- ksadk/harness/session_store.py +243 -0
- ksadk/harness/skill_composition.py +212 -0
- ksadk/harness/skill_feedback.py +123 -0
- ksadk/harness/skill_matrix.py +233 -0
- ksadk/harness/skill_runtime.py +259 -0
- ksadk/harness/spec.py +332 -0
- ksadk/harness/state.py +153 -0
- ksadk/harness/strategies.py +149 -0
- ksadk/harness/subagent.py +253 -0
- ksadk/harness/tool_policy.py +131 -0
- ksadk/harness/tool_receipts.py +96 -0
- ksadk/harness/tool_reliability.py +81 -0
- ksadk/harness/tools.py +38 -13
- ksadk/harness/user_errors.py +69 -0
- ksadk/harness/working_context.py +81 -0
- ksadk/harness/working_context_patch.py +99 -0
- ksadk/identity/resolver.py +18 -0
- ksadk/interaction/__init__.py +1 -1
- ksadk/interaction/ledger.py +1 -1
- ksadk/interaction/provider.py +2 -1
- ksadk/interaction/providers/__init__.py +3 -1
- ksadk/interaction/providers/adk.py +1 -1
- ksadk/interaction/providers/codex.py +1 -1
- ksadk/interaction/providers/harness.py +50 -0
- ksadk/interaction/providers/langgraph.py +2 -1
- ksadk/kernel/__init__.py +10 -0
- ksadk/kernel/approval_presentation.py +91 -0
- ksadk/kernel/authorization.py +1 -1
- ksadk/kernel/bootstrap.py +114 -106
- ksadk/kernel/contract_fingerprints.py +1 -1
- ksadk/kernel/contracts.py +5 -0
- ksadk/kernel/control.py +32 -1
- ksadk/kernel/execution_grants.py +221 -0
- ksadk/kernel/execution_grants_memory.py +133 -0
- ksadk/kernel/execution_grants_postgres.py +217 -0
- ksadk/kernel/execution_grants_sqlite.py +209 -0
- ksadk/kernel/ingress.py +42 -29
- ksadk/kernel/mapping.py +1 -1
- ksadk/kernel/memory_store.py +24 -11
- ksadk/kernel/postgres_store.py +63 -33
- ksadk/kernel/recovery.py +78 -14
- ksadk/kernel/sql/001_agent_kernel.sql +23 -0
- ksadk/kernel/sqlite_store.py +331 -25
- ksadk/kernel/state.py +2 -3
- ksadk/kernel/store.py +72 -2
- ksadk/kernel/worker.py +144 -51
- ksadk/kernel/worker_history.py +72 -0
- ksadk/kernel/worker_identity.py +47 -0
- 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/coordinator.py +22 -6
- ksadk/memory/extraction.py +40 -1
- ksadk/memory/models.py +84 -5
- ksadk/memory/provider_resolver.py +8 -0
- ksadk/memory/providers/local_postgres.py +200 -0
- ksadk/memory/providers/local_sqlite.py +42 -3
- ksadk/memory/retrieval.py +189 -0
- ksadk/memory/store_adapter.py +150 -0
- ksadk/model_policy.py +2 -2
- ksadk/model_proxy/detect.py +254 -0
- ksadk/model_proxy/server.py +14 -7
- ksadk/model_proxy/transform.py +40 -2
- ksadk/plugins/__init__.py +5 -1
- ksadk/plugins/artifacts.py +275 -0
- ksadk/plugins/bridges/__init__.py +4 -2
- ksadk/plugins/bridges/codex.py +120 -13
- ksadk/plugins/bridges/dsh.py +351 -156
- ksadk/plugins/builtins.py +72 -35
- ksadk/plugins/bundle_security.py +28 -4
- ksadk/plugins/codex_manifest.py +983 -0
- ksadk/plugins/companion_artifacts.py +83 -0
- ksadk/plugins/companions.py +368 -0
- ksadk/plugins/composition.py +8 -0
- ksadk/plugins/contracts.py +119 -1
- ksadk/plugins/delivery.py +153 -0
- ksadk/plugins/dsh_channels.py +156 -0
- ksadk/plugins/dsh_home.py +140 -0
- ksadk/plugins/dsh_installation_digest.py +71 -0
- ksadk/plugins/dsh_teams.py +105 -0
- ksadk/plugins/dsh_toolchain.py +203 -32
- ksadk/plugins/ecosystem_probe.py +6 -6
- ksadk/plugins/execution_host.py +99 -0
- ksadk/plugins/host.py +102 -39
- ksadk/plugins/kernel_adapter.py +205 -0
- ksadk/plugins/providers/__init__.py +23 -0
- ksadk/plugins/providers/bundles/dsh-channels-client/client.js +19 -0
- ksadk/plugins/providers/bundles/dsh-channels-client/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-channels-client/index.mjs +7 -0
- ksadk/plugins/providers/bundles/dsh-channels-client/package.json +12 -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/dsh-teams-client/client.js +29 -0
- ksadk/plugins/providers/bundles/dsh-teams-client/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-client/index.mjs +11 -0
- ksadk/plugins/providers/bundles/dsh-teams-client/package.json +35 -0
- ksadk/plugins/providers/bundles/dsh-teams-leader-policy/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-leader-policy/index.mjs +13 -0
- ksadk/plugins/providers/bundles/dsh-teams-leader-policy/package.json +27 -0
- ksadk/plugins/providers/bundles/dsh-teams-profile/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-profile/index.mjs +12 -0
- ksadk/plugins/providers/bundles/dsh-teams-profile/package.json +26 -0
- ksadk/plugins/providers/bundles/dsh-teams-router/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-router/index.mjs +16 -0
- ksadk/plugins/providers/bundles/dsh-teams-router/package.json +27 -0
- ksadk/plugins/providers/bundles/dsh-teams-tasks/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-tasks/index.mjs +16 -0
- ksadk/plugins/providers/bundles/dsh-teams-tasks/package.json +27 -0
- ksadk/plugins/providers/bundles/dsh-teams-tools/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-tools/index.mjs +25 -0
- ksadk/plugins/providers/bundles/dsh-teams-tools/package.json +29 -0
- ksadk/plugins/providers/bundles/dsh-teams-tools/tools.json +235 -0
- ksadk/plugins/providers/bundles/ksadk-codex/index.mjs +1 -1
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/index.mjs +920 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +27 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-companion-host/client.mjs +133 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-companion-host/index.mjs +14 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/client.js +115 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +19 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/package.json +7 -0
- ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +1 -1
- ksadk/plugins/providers/codex.py +344 -70
- ksadk/plugins/providers/codex_native.py +368 -0
- ksadk/plugins/providers/codex_turn.py +301 -0
- ksadk/plugins/providers/dsh_capabilities.py +1450 -0
- ksadk/plugins/providers/dsh_mcp.py +467 -0
- ksadk/plugins/providers/harness.py +294 -141
- ksadk/plugins/providers/harness_delegation.py +593 -0
- ksadk/plugins/providers/harness_managed.py +456 -0
- ksadk/plugins/providers/harness_tools.py +326 -0
- ksadk/plugins/providers/mcp_projection.py +150 -0
- ksadk/plugins/providers/platform_resources.py +657 -0
- ksadk/plugins/providers/shipped_dsh.py +4 -1
- ksadk/plugins/resolver.py +8 -1
- ksadk/plugins/subagent_providers/codex.py +28 -6
- ksadk/plugins/teams/__init__.py +5 -0
- ksadk/plugins/teams/api.py +405 -0
- ksadk/plugins/teams/application.py +680 -0
- ksadk/plugins/teams/artifacts.py +60 -0
- ksadk/plugins/teams/context.py +96 -0
- ksadk/plugins/teams/contracts.py +136 -0
- ksadk/plugins/teams/domain.py +1427 -0
- ksadk/plugins/teams/domain_values.py +24 -0
- ksadk/plugins/teams/errors.py +13 -0
- ksadk/plugins/teams/migration.py +311 -0
- ksadk/plugins/teams/migration_cli.py +322 -0
- ksadk/plugins/teams/postgres_store.py +138 -0
- ksadk/plugins/teams/runtime.py +777 -0
- ksadk/plugins/teams/source_projection.py +84 -0
- ksadk/plugins/teams/store.py +311 -0
- ksadk/plugins/teams/task_decisions.py +423 -0
- ksadk/plugins/teams/transport.py +91 -0
- ksadk/plugins/teams/workspaces.py +255 -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 +182 -38
- ksadk/runners/_langgraph_state_reader.py +106 -0
- ksadk/runners/_session_identity.py +285 -0
- ksadk/runners/adk_runner.py +166 -63
- ksadk/runners/base_runner.py +29 -1
- ksadk/runners/langgraph_runner.py +542 -195
- ksadk/runners/patch_langchain.py +47 -0
- ksadk/runners/usage_accumulator.py +11 -3
- ksadk/runtime/_runner_adapter/stream_mapping.py +194 -20
- ksadk/runtime/adapter.py +2 -0
- ksadk/runtime/conversation_execution.py +117 -17
- ksadk/runtime/executor.py +87 -3
- ksadk/runtime/factory.py +65 -274
- ksadk/runtime/framework_adapters.py +23 -0
- ksadk/runtime/preprocessing.py +21 -5
- ksadk/runtime/runner_adapter.py +106 -18
- ksadk/runtime/skill_eval_result.py +36 -0
- ksadk/runtime/timing.py +46 -0
- ksadk/runtime/usage.py +49 -18
- ksadk/runtime_context.py +142 -2
- ksadk/sandbox/backends/e2b.py +288 -25
- ksadk/sandbox/backends/local_process.py +72 -39
- ksadk/sandbox/base.py +64 -1
- ksadk/sandbox/diagnostics.py +82 -0
- ksadk/sandbox/e2b_connection.py +66 -0
- ksadk/sandbox/local_controls.py +746 -0
- ksadk/sandbox/local_launcher.py +90 -0
- ksadk/scheduler/dispatcher.py +1 -1
- ksadk/scheduler/sqlite_store.py +18 -0
- ksadk/server/composition.py +2 -0
- ksadk/server/factory.py +5 -0
- ksadk/server/invocation_identity.py +118 -0
- ksadk/server/persistence_capability.py +516 -0
- ksadk/server/routes/common.py +32 -3
- ksadk/server/routes/control.py +271 -52
- ksadk/server/routes/dependencies.py +16 -0
- ksadk/server/routes/kernel_ingress.py +9 -1
- ksadk/server/routes/misc.py +233 -25
- ksadk/server/routes/models.py +47 -4
- ksadk/server/routes/openai_compat.py +76 -13
- ksadk/server/routes/projection.py +252 -12
- ksadk/server/routes/run.py +106 -35
- ksadk/server/routes/sessions.py +491 -138
- ksadk/server/routes/streaming.py +43 -9
- ksadk/server/routes/workspace.py +130 -21
- ksadk/server/static/assets/{ArtifactsPanel-10GPXIJ6.js → ArtifactsPanel-C1YoaKhx.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-BXk1l-G1.js → CodeBlock-DHuAWfr5.js} +10 -7
- ksadk/server/static/assets/MathMessageMarkdown-cvdrBwYr.js +8 -0
- ksadk/server/static/assets/{MermaidBlock--OEYoXIJ.js → MermaidBlock-DeBkbJvI.js} +9 -9
- ksadk/server/static/assets/{NativeTerminalPanel-DrEe1syq.js → NativeTerminalPanel-oJj44_sV.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-eeTFJLvo.js → abnfDiagram-VCTEODGH-Dhfv25o2.js} +1 -1
- ksadk/server/static/assets/{arc-S3ZNbIAd.js → arc-C35w-pn1.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-BCsa26zi.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-CRjgEJDX.js → architectureDiagram-5GKGNRK7-FoMY_u6D.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-C7bsBoNH.js → blockDiagram-NRAW4CY4-zD4Rt7oE.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-BX3c33Ob.js → c4Diagram-UCG6FXSJ-BCtGGkhN.js} +1 -1
- ksadk/server/static/assets/channel-_KDifNys.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-HdVkJ9F0.js +1 -0
- ksadk/server/static/assets/{chunk-5VM5RSS4-bZ7ws-8m.js → chunk-5VM5RSS4-C2Ms13_k.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-D2r0pvhY.js → chunk-F27PBJKO-BoTj-qgx.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-CZwF3oUP.js → chunk-G27WJ6UU-DOMyyjHH.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-DigFYCML.js → chunk-JWPE2WC7-DbJJqDli.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-CnorGV5q.js → chunk-LCL6LL3I-CLuRCt_W.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-CexntQA-.js → chunk-POPQ4Y6H-D0Dz847e.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-CHTC7UxA.js → chunk-RHFEMEQ7-BWSRzEcd.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-BC1EWt_-.js → chunk-SVP7TREG-CPoHqkCY.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-BTG24xN0.js → chunk-XXDRQBXY-Bx1jS-X-.js} +1 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-BVCW3ZqZ.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-BVCW3ZqZ.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-JH36ORCC-CkonRdAS.js → cose-bilkent-JH36ORCC-LzyWm4m0.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-CNXjFctL.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-DEOCBe15.js → cynefinDiagram-5FMLGOSQ-BlW_bHED.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-DBThPuLa.js → dagre-3AP2YEHR-Bu_S86_i.js} +1 -1
- ksadk/server/static/assets/{dagre-ClTPrTht.js → dagre-B7nCawed.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-DsZHrnpJ.js → diagram-S7CK7UJ4-W_Zow2Km.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-BJR4nhVr.js → diagram-UQ7AKVKN-CLIKAHON.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-xzcERX0a.js → diagram-VSXAHHWV-Dv6_QAlN.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-tn2xM1xu.js → diagram-VX7I27RA-BWAWRDtZ.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-BZPGBkw5.js → diagram-Z3DM3KII-XA_rWMss.js} +1 -1
- ksadk/server/static/assets/dist-0X_j2Rcc.js +1 -0
- ksadk/server/static/assets/{dist-4zN1_tq5.js → dist-1nXCdsej.js} +1 -1
- ksadk/server/static/assets/{dist-M67Hwu0n.js → dist-2vL2sAdF.js} +1 -1
- ksadk/server/static/assets/{dist-BJLUwH6W.js → dist-B3bA05-e.js} +1 -1
- ksadk/server/static/assets/{dist-8VWI-2bZ.js → dist-BLpRy_Yx.js} +1 -1
- ksadk/server/static/assets/{dist-D1V3f1B4.js → dist-BO_UwatH.js} +1 -1
- ksadk/server/static/assets/{dist-Cq4OL6nO.js → dist-BdNFAney.js} +1 -1
- ksadk/server/static/assets/{dist-DfGFrb0v.js → dist-C0J5_3qM.js} +1 -1
- ksadk/server/static/assets/{dist-DyqV4fL4.js → dist-CGt_UGeO.js} +1 -1
- ksadk/server/static/assets/{dist-DjhwGUgZ.js → dist-CIRMvUM4.js} +1 -1
- ksadk/server/static/assets/{dist-B1oWRmrH.js → dist-CIpWk_5f.js} +1 -1
- ksadk/server/static/assets/{dist-CXpH_Rdd.js → dist-CPyieXEf.js} +1 -1
- ksadk/server/static/assets/{dist-Btyo4vX4.js → dist-D-92S-Fd.js} +1 -1
- ksadk/server/static/assets/{dist-u8tVH5Ak.js → dist-DNKuMzWc.js} +1 -1
- ksadk/server/static/assets/{dist-DQAB0qn_.js → dist-DWfdmz9s.js} +2 -2
- ksadk/server/static/assets/{dist-B-46q3Hk.js → dist-DppE_r-D.js} +1 -1
- ksadk/server/static/assets/{dist-C71CsujO.js → dist-DyG6Ya-z.js} +1 -1
- ksadk/server/static/assets/{dist-DJmCPRVB.js → dist-M-SrdhhZ.js} +1 -1
- ksadk/server/static/assets/{dist-Bbwqa8TG.js → dist-mqD5TZup.js} +1 -1
- ksadk/server/static/assets/{dist-BI1qQH4n.js → dist-n3n6t_FO.js} +1 -1
- ksadk/server/static/assets/{dist-DUwKa_l6.js → dist-qe8xjesy.js} +1 -1
- ksadk/server/static/assets/{dist-B0gdk4rl.js → dist-t6MzE0jU.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-DVfMsLge.js → ebnfDiagram-PWID7BFC-BfCzF1Xi.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CWEZSYaw.js → erDiagram-SSCWMZ5O-Dpz9_0zn.js} +1 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-B5-8RH9c.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-BppFxEKw.js +1 -0
- ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-TWIxoyYL.js → ganttDiagram-EL5Y4UJY-DDaG1f4_.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-B-AhYj4C.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-DDh2hd2S.js → gitGraphDiagram-WWUBYQGX-DcxzRwYC.js} +1 -1
- ksadk/server/static/assets/index-BMd2mucF.css +2 -0
- ksadk/server/static/assets/index-D5qyyhTH.js +244 -0
- ksadk/server/static/assets/info-A6RAGUB7-0uiKrC35.js +1 -0
- ksadk/server/static/assets/{infoDiagram-RXCK75RN-CgoyWiDR.js → infoDiagram-RXCK75RN-CYMdn6lQ.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CyRIu_om.js → ishikawaDiagram-5VMMS53U-CLHFAD6c.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-DN5JXHzN.js → journeyDiagram-EYS64GPL-BHSKQGAl.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-CNP3ui66.js → kanban-definition-3QL26DDD-D5W3tjTT.js} +1 -1
- ksadk/server/static/assets/{katex-DWEzQy1d.js → katex-mtjOi4KM.js} +1 -1
- ksadk/server/static/assets/{linear-C-qHp7d2.js → linear-BETqsxE_.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-Cl-K943T.js → mermaid-parser.core-DPWrvs90.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-D5DB5mYm.js → mindmap-definition-FBJOCRG2-CJG2mfBP.js} +1 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BVTmZ_cw.js +1 -0
- ksadk/server/static/assets/{pegDiagram-XKGWAZYB-BQVc9ia_.js → pegDiagram-XKGWAZYB-GjAPNaqn.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-DyfxBU7V.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-B6UCAvtY.js → pieDiagram-E7YTZNPT-ToIewrqr.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-mIr2d3eb.js → quadrantDiagram-AXDQQJYC-4d78KiEY.js} +1 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-FFontjL2.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-D0Uidzen.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BOo_9T2h.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-D6-BjW7Z.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-CXx__yMm.js +1 -0
- ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-Dt3FFDmK.js → railroadDiagram-O6MQD6OU-DKzx4xfv.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-Cz_vQtgF.js → requirementDiagram-EFPCY7ZU-CJYljxQS.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-wlO1TsH5.js → sankeyDiagram-P5KCCOFB-DLU2fV1w.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-CHRbElYq.js → sequenceDiagram-WJ2MYXX4-CVqysrA9.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DXX54iyO.js → sizeCapture-X5ZJPWSS-BUxfmTHc.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-Dp_lw9II.js → stateDiagram-HBIQ2CUA-CNFgYI9E.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BXAFScz8.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-D8O5UlLG.js → swimlanes-XN3QIQJK-B6qCMe8N.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uIQ2lJKH.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-8mfKcxvG.js → timeline-definition-24CTP7MA-CMD3x_U_.js} +1 -1
- ksadk/server/static/assets/treeView-Q6P3EWNA-CK5GgucZ.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-Bq1u1SpG.js +1 -0
- ksadk/server/static/assets/{vennDiagram-4TSXK5OY-EnNl0DE7.js → vennDiagram-4TSXK5OY-BqtUqvXM.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-QAt06uEz.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-DBu5fbYr.js → wardleyDiagram-VM6X3IG4-B5KfDjI-.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-BSVXs4IY.js → xychartDiagram-S5SC5T6Z-BaUlSZrn.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/server/terminal_sessions.py +34 -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/invocation_identity.py +235 -0
- 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/__init__.py +26 -0
- ksadk/skills/events.py +464 -0
- ksadk/skills/manifest_cache.py +263 -0
- ksadk/skills/mcp_server/__init__.py +0 -0
- ksadk/skills/mcp_server/_registry.py +33 -0
- ksadk/skills/mcp_server/_routing.py +26 -0
- ksadk/skills/mcp_server/_workspace_files.py +160 -0
- ksadk/skills/mcp_server/register.py +415 -0
- ksadk/skills/mcp_server/server.py +218 -0
- ksadk/skills/models.py +37 -4
- ksadk/skills/observability.py +132 -0
- ksadk/skills/package_store.py +261 -40
- ksadk/skills/runtime/agent.py +67 -9
- ksadk/skills/runtime/artifact_delivery.py +139 -0
- ksadk/skills/runtime/artifacts.py +87 -0
- ksadk/skills/runtime/backends/e2b.py +460 -27
- ksadk/skills/runtime/backends/local.py +629 -62
- ksadk/skills/runtime/base.py +81 -7
- ksadk/skills/runtime/executor.py +268 -1
- ksadk/skills/runtime/loader.py +118 -5
- ksadk/skills/runtime/pinned.py +114 -0
- ksadk/skills/runtime/request.py +49 -0
- ksadk/skills/service_client.py +167 -28
- ksadk/skills/tool_defs.py +108 -3
- ksadk/studio/api.py +810 -93
- ksadk/studio/api_catalog_routes.py +18 -0
- ksadk/studio/api_contracts.py +8 -2
- ksadk/studio/api_plugin_routes.py +562 -104
- ksadk/studio/api_resource_connections.py +221 -0
- ksadk/studio/authoring.py +12 -6
- ksadk/studio/authoring_coordinator.py +23 -16
- ksadk/studio/builder.py +88 -0
- ksadk/studio/capabilities.py +23 -6
- ksadk/studio/channel_connections.py +333 -0
- ksadk/studio/cloud.py +370 -112
- ksadk/studio/cloud_shared_web.py +638 -0
- ksadk/studio/codex_agent_service.py +130 -28
- ksadk/studio/codex_builder.py +242 -3
- ksadk/studio/codex_credentials.py +90 -0
- ksadk/studio/codex_manifest.py +31 -4
- ksadk/studio/codex_plugin_store.py +746 -0
- ksadk/studio/codex_provider_build.py +231 -0
- ksadk/studio/codex_run.py +190 -26
- ksadk/studio/compatibility_report.py +12 -1
- ksadk/studio/compiler.py +88 -14
- ksadk/studio/configuration.py +182 -0
- ksadk/studio/contracts.py +165 -11
- ksadk/studio/dsh_application.py +247 -0
- ksadk/studio/dsh_capability_service.py +1374 -0
- ksadk/studio/dsh_lifecycle.py +58 -0
- ksadk/studio/dsh_models.py +59 -0
- ksadk/studio/dsh_provider_registration.py +367 -21
- ksadk/studio/entry.py +53 -0
- ksadk/studio/event_store.py +36 -5
- ksadk/studio/execution_host.py +525 -0
- ksadk/studio/framework_run.py +32 -10
- ksadk/studio/hosted_kernel.py +89 -14
- ksadk/studio/kernel_registry.py +418 -0
- ksadk/studio/kernel_sqlite_migration.py +181 -0
- ksadk/studio/mcp_runtime.py +11 -3
- ksadk/studio/model_client.py +1180 -66
- ksadk/studio/model_profile_service.py +26 -11
- ksadk/studio/native_documents.py +172 -0
- ksadk/studio/plugin_composition.py +202 -24
- ksadk/studio/plugin_kernel_adapter.py +21 -106
- ksadk/studio/plugin_lifecycle.py +80 -0
- ksadk/studio/plugin_runtime.py +448 -56
- ksadk/studio/provider_recovery.py +59 -0
- ksadk/studio/recovery_page.py +70 -0
- ksadk/studio/resource_authority.py +664 -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 -2
- ksadk/studio/resource_connections.py +220 -0
- ksadk/studio/run_activity.py +895 -0
- ksadk/studio/run_documents.py +127 -0
- ksadk/studio/run_service.py +789 -83
- ksadk/studio/runtime_catalog.py +53 -10
- ksadk/studio/runtime_source.py +16 -8
- ksadk/studio/scheduler_assistant.py +317 -0
- ksadk/studio/scheduler_runtime.py +32 -280
- ksadk/studio/scheduler_service.py +3 -0
- ksadk/studio/service.py +861 -120
- ksadk/studio/shared_web.py +579 -82
- ksadk/studio/static/assets/ChannelsPage-D_PGmKVq.js +8 -0
- ksadk/studio/static/assets/CodeBlock-DMIf4h33-UIqo-BPW.js +44 -0
- ksadk/studio/static/assets/ExecutionTree-v3HexvPo-Bk8wzGSy.js +1 -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-BesSeCYl-BEOyPC3w.css +1 -0
- ksadk/studio/static/assets/MathMessageMarkdown-BesSeCYl-OhNwH4K9.js +8 -0
- ksadk/studio/static/assets/MermaidBlock-H_0qzQDf-BdXtxug_.js +11 -0
- ksadk/studio/static/assets/MessageMarkdown-CwMTvgFj-g0I-I4dD.js +59 -0
- ksadk/studio/static/assets/PrismRenderer-5pK6tUdb.js +3 -0
- ksadk/studio/static/assets/TeamsPage-DqX4HWKQ.js +3 -0
- ksadk/studio/static/assets/abnfDiagram-VCTEODGH-Bnb1O3tA.js +1 -0
- ksadk/studio/static/assets/arc-Pry-7G1_.js +1 -0
- ksadk/studio/static/assets/architecture-7GRP2DOG-BMOPAkUC.js +1 -0
- ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-5Zn1gqJv.js +36 -0
- ksadk/studio/static/assets/array-BifhSqXX.js +1 -0
- ksadk/studio/static/assets/blockDiagram-I7D4REHJ-CLB4L11u.js +129 -0
- ksadk/studio/static/assets/c4Diagram-7LVT6UL2-BOma_Z_F.js +38 -0
- ksadk/studio/static/assets/channel-r8itPEik.js +1 -0
- ksadk/studio/static/assets/chunk-2E4U76K2-BFf_huql.js +2 -0
- ksadk/studio/static/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- ksadk/studio/static/assets/chunk-2ZTRR5NV-C2qZJila.js +2 -0
- ksadk/studio/static/assets/chunk-3Z5EZCMW-DMniOlPd.js +1 -0
- ksadk/studio/static/assets/chunk-4HAMMTFA-DVtDP4rm.js +62 -0
- ksadk/studio/static/assets/chunk-5V3GS4D5-i-ZDOEnP.js +1 -0
- ksadk/studio/static/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- ksadk/studio/static/assets/chunk-6AZGARVD-BB6FqMl-.js +1 -0
- ksadk/studio/static/assets/chunk-6EIED4P4-DdUJkP0f.js +1 -0
- ksadk/studio/static/assets/chunk-6K3QC6MW-CqVsVn-y.js +1 -0
- ksadk/studio/static/assets/chunk-6TQVIW2G-DKlLbNIP.js +1 -0
- ksadk/studio/static/assets/chunk-747NJXEK-BFkZPlab.js +2 -0
- ksadk/studio/static/assets/chunk-75Z2AOVW-BZNhM4vB.js +2 -0
- ksadk/studio/static/assets/chunk-CLGD4ZFX-D-GTtyKs.js +1 -0
- ksadk/studio/static/assets/chunk-DU6HZSFF-CpEZCUgg.js +128 -0
- ksadk/studio/static/assets/chunk-F27PBJKO-D7pvKf0C.js +1 -0
- ksadk/studio/static/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
- ksadk/studio/static/assets/chunk-GMAD6QVW-DE_8H717.js +72 -0
- ksadk/studio/static/assets/chunk-GVQU2GXP-BfEB0lNv.js +1 -0
- ksadk/studio/static/assets/chunk-I5DQTOEV-Hm2LfiYI.js +1 -0
- ksadk/studio/static/assets/chunk-ICYGCRZG-749o-pGJ.js +1 -0
- ksadk/studio/static/assets/chunk-IH6LHLGP-CC6I9F3i.js +1 -0
- ksadk/studio/static/assets/chunk-IMKFNOWR-D38axYOR.js +231 -0
- ksadk/studio/static/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- ksadk/studio/static/assets/chunk-KI3K4JFJ-Rma-0k_M.js +1 -0
- ksadk/studio/static/assets/chunk-L3NEJ4N5-Dq5xn7aL.js +1 -0
- ksadk/studio/static/assets/chunk-LNGE3PJU-DWpGwHrW.js +34 -0
- ksadk/studio/static/assets/chunk-OSK3NFVY-DiCQjx9b.js +10 -0
- ksadk/studio/static/assets/chunk-OUJLGHUK-D0j2JRSg.js +2 -0
- ksadk/studio/static/assets/chunk-P2QGCYS3-VdhKmfYq.js +1 -0
- ksadk/studio/static/assets/chunk-POPQ4Y6H-C1_rzO5M.js +1 -0
- ksadk/studio/static/assets/chunk-PWAF6VOD-B45HvflI.js +1 -0
- ksadk/studio/static/assets/chunk-SHT3W25Y-DsCFnRVE.js +168 -0
- ksadk/studio/static/assets/chunk-SVP7TREG-DljApgRX.js +88 -0
- ksadk/studio/static/assets/chunk-TICWLB2K-DWqRtyqa.js +206 -0
- ksadk/studio/static/assets/chunk-TLUHSLCS-DUeGgnD5.js +2 -0
- ksadk/studio/static/assets/chunk-UY3FDG6J-CnmaAkG5.js +1 -0
- ksadk/studio/static/assets/chunk-XHIXRSVI-BFQ6B8BE.js +1 -0
- ksadk/studio/static/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
- ksadk/studio/static/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- ksadk/studio/static/assets/classDiagram-ZZMXUADV-DjeMNJmu.js +1 -0
- ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-DjeMNJmu.js +1 -0
- ksadk/studio/static/assets/clsx-DB0hHKMi.js +1 -0
- ksadk/studio/static/assets/cose-bilkent-JH36ORCC-om8AY0Mc.js +1 -0
- ksadk/studio/static/assets/createLucideIcon-DR0LGTP5.js +1 -0
- ksadk/studio/static/assets/cynefin-OW5HDTMX-7tP7QfM3.js +1 -0
- ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-6BrmK52S.js +62 -0
- ksadk/studio/static/assets/cytoscape.esm-CGd-uY3x.js +321 -0
- ksadk/studio/static/assets/dagre-GXQ25YYZ-buZBRlwz.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-C6aH78c4.js +30 -0
- ksadk/studio/static/assets/diagram-UQ7AKVKN-DY_tQ6C_.js +41 -0
- ksadk/studio/static/assets/diagram-VSXAHHWV-DX9p5cQT.js +3 -0
- ksadk/studio/static/assets/diagram-VX7I27RA-DB2WSH8X.js +24 -0
- ksadk/studio/static/assets/diagram-Z3DM3KII-Ce1BJwHE.js +24 -0
- ksadk/studio/static/assets/dist-v5Q1xZ2K.js +1 -0
- ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-Daukxwqf.js +1 -0
- ksadk/studio/static/assets/erDiagram-RLTQ6QDP-CGthTMmJ.js +99 -0
- ksadk/studio/static/assets/eventmodeling-NTZA5JFV-BR2FzK4R.js +1 -0
- ksadk/studio/static/assets/flowDiagram-HODETNUW-CZ1tEenp.js +1 -0
- ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BfoAZW9X.js +292 -0
- ksadk/studio/static/assets/gitGraph-4MIJSDKK-DYlXv_yJ.js +1 -0
- ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-S985OIJF.js +106 -0
- ksadk/studio/static/assets/graphlib-DS17s2tU.js +1 -0
- ksadk/studio/static/assets/iconfont-4HN3C9Pg.woff2 +0 -0
- ksadk/studio/static/assets/index-CfEnms6Y.css +2 -0
- ksadk/studio/static/assets/index-Dp61rOWZ.js +0 -0
- ksadk/studio/static/assets/index.dom-BQenBtFm.js +1 -0
- ksadk/studio/static/assets/info-A6RAGUB7-BlU-8_xu.js +1 -0
- ksadk/studio/static/assets/infoDiagram-27XIBGKW-CO3W8tFn.js +2 -0
- ksadk/studio/static/assets/init-C-OQMol4.js +1 -0
- ksadk/studio/static/assets/ishikawaDiagram-5VMMS53U-BUGEl8cO.js +70 -0
- ksadk/studio/static/assets/journeyDiagram-3NMN7TZE-Ch2ZYxvr.js +139 -0
- ksadk/studio/static/assets/kanban-definition-UXKFOSKX-Da-Fp4vC.js +89 -0
- ksadk/studio/static/assets/katex-DhON-x74.js +257 -0
- ksadk/studio/static/assets/kingsoft-cloud-BOcLiQ3e.ico +0 -0
- ksadk/studio/static/assets/line-BDaeq300.js +1 -0
- ksadk/studio/static/assets/linear-DmucvK78.js +1 -0
- ksadk/studio/static/assets/mermaid-parser.core-Cj5mYdBi.js +4 -0
- ksadk/studio/static/assets/mindmap-definition-YA3MSWOX-CvlsVQ38.js +96 -0
- ksadk/studio/static/assets/ordinal-BDEzSJ7C.js +1 -0
- ksadk/studio/static/assets/packet-AYTQ26CC-BSJEH9Lb.js +1 -0
- ksadk/studio/static/assets/path-fybaL0A-.js +1 -0
- ksadk/studio/static/assets/pegDiagram-XKGWAZYB-BuHuNgT5.js +1 -0
- ksadk/studio/static/assets/pie-WAS4IAKB-qxv01Y8W.js +1 -0
- ksadk/studio/static/assets/pieDiagram-E7YTZNPT-DlrWiSOv.js +39 -0
- ksadk/studio/static/assets/preload-helper-CO68xz6u.js +1 -0
- ksadk/studio/static/assets/presentation-yYw7xK60-BmcZriri.js +1 -0
- ksadk/studio/static/assets/quadrantDiagram-AXDQQJYC-BA3hpUZM.js +7 -0
- ksadk/studio/static/assets/radar-RG4KPBEZ-B6h6pWOs.js +1 -0
- ksadk/studio/static/assets/railroad-74A4TZTK-CGtTWdGc.js +1 -0
- ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-Cq7y22IA.js +1 -0
- ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-V0aQVv9m.js +1 -0
- ksadk/studio/static/assets/railroad-peg-WCYAUIDC-BQiIsX_p.js +1 -0
- ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-BxpAazym.js +1 -0
- ksadk/studio/static/assets/requirementDiagram-BXWQKSXE-E-Ge0FcV.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-CA6YKhQ3.js +40 -0
- ksadk/studio/static/assets/sequenceDiagram-WJ2MYXX4-CcElXGg4.js +162 -0
- ksadk/studio/static/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- ksadk/studio/static/assets/src-B6xuSHsQ.js +1 -0
- ksadk/studio/static/assets/stateDiagram-D77RDMKH-DdXZOFqY.js +1 -0
- ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-CJbOM-QK.js +1 -0
- ksadk/studio/static/assets/swimlanes-42K2YHIH-NtgEEHLY.js +1 -0
- ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-D-AVlW8B.js +8 -0
- ksadk/studio/static/assets/timeline-definition-24CTP7MA-CIuYhNy3.js +120 -0
- ksadk/studio/static/assets/treeView-Q6P3EWNA-BTTYcvrF.js +1 -0
- ksadk/studio/static/assets/treemap-WGGIJYW6-Cg7tyfH8.js +1 -0
- ksadk/studio/static/assets/vennDiagram-4TSXK5OY-7HbApbrv.js +34 -0
- ksadk/studio/static/assets/wardley-WFR3VGLG-C6N1rULY.js +1 -0
- ksadk/studio/static/assets/wardleyDiagram-VM6X3IG4-CMJiaedy.js +78 -0
- ksadk/studio/static/assets/xychartDiagram-S5SC5T6Z-BdgtMvW2.js +7 -0
- ksadk/studio/static/index.html +8 -2
- ksadk/studio/teams_catalog.py +133 -0
- ksadk/studio/teams_installation.py +214 -0
- ksadk/studio/teams_node.py +545 -0
- ksadk/studio/teams_node_runner.py +69 -0
- ksadk/studio/teams_remote.py +274 -0
- ksadk/studio/templates.py +40 -19
- ksadk/studio/validator.py +13 -0
- ksadk/studio/workspace.py +19 -4
- ksadk/studio/workspace_plugins.py +136 -0
- ksadk/studio/workspace_registry.py +286 -0
- ksadk/toolsets/__init__.py +11 -0
- ksadk/toolsets/skills.py +446 -378
- ksadk/toolsets/workspace.py +3 -3
- ksadk/toolsets/workspace_identity.py +15 -0
- ksadk/version.py +1 -1
- ksadk_runtime_common/memory_backend/providers/lancedb.py +56 -2
- ksadk_runtime_common/schemas/memory_backend_manifest.schema.json +148 -148
- ksadk_runtime_common/workspace_files/router.py +26 -13
- agentengine_sdk_python-0.8.3.dist-info/RECORD +0 -833
- ksadk/server/static/assets/MathMessageMarkdown-D9uB55Oh.js +0 -8
- ksadk/server/static/assets/architecture-7GRP2DOG-Dk9nRQ6-.js +0 -1
- ksadk/server/static/assets/channel-s354Yo6o.js +0 -1
- ksadk/server/static/assets/chunk-2Q5K7J3B-CDpPpKR5.js +0 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Dd0nucl9.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Dd0nucl9.js +0 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-BBlT4uMf.js +0 -1
- ksadk/server/static/assets/dist-DdRBIceA.js +0 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-Dr5okd8V.js +0 -1
- ksadk/server/static/assets/flowDiagram-A5DVABFB-VEO-cVcO.js +0 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-CKiKY9Cf.js +0 -1
- ksadk/server/static/assets/index-B2k_urY8.js +0 -241
- ksadk/server/static/assets/index-ILPt6IWF.css +0 -2
- ksadk/server/static/assets/info-A6RAGUB7-ubA4Nm_p.js +0 -1
- ksadk/server/static/assets/packet-AYTQ26CC-C7R3NUlK.js +0 -1
- ksadk/server/static/assets/pie-WAS4IAKB-BIT6qjr3.js +0 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-l5noef9X.js +0 -1
- ksadk/server/static/assets/railroad-74A4TZTK-Baea6ZvM.js +0 -1
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-OKn8zZnU.js +0 -1
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-DdKAKC4l.js +0 -1
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-Bds8udlG.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-5b-8o2iS.js +0 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uf6WPRA4.js +0 -8
- ksadk/server/static/assets/treeView-Q6P3EWNA-CK5CSrSO.js +0 -1
- ksadk/server/static/assets/treemap-WGGIJYW6-Ch2BKgAM.js +0 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-YW3Q0ml_.js +0 -1
- ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +0 -3
- ksadk/studio/static/assets/index-DXs1Eq4M.css +0 -1
- ksadk/studio/static/assets/index-DeDqwTsD.js +0 -283
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/top_level.txt +0 -0
ksadk/_build_provenance.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"schemaVersion":1,"sourceCommit":"
|
|
1
|
+
{"schemaVersion":1,"sourceCommit":"5128ff1e57d1c37bc16f780028698da433c12a7e","sourceTree":"clean","version":"0.8.5"}
|
ksadk/_process.py
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""Small process-group lifecycle helpers shared by local runtime backends."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
import signal
|
|
7
|
+
import subprocess
|
|
8
|
+
import time
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def starts_new_process_group() -> bool:
|
|
12
|
+
return os.name == "posix"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def terminate_process_group(
|
|
16
|
+
process: subprocess.Popen[object],
|
|
17
|
+
*,
|
|
18
|
+
grace_seconds: float = 0.2,
|
|
19
|
+
reap_seconds: float = 1.0,
|
|
20
|
+
) -> str | None:
|
|
21
|
+
"""Stop a process and its descendants, then reap the direct child.
|
|
22
|
+
|
|
23
|
+
The caller must have created the process with ``start_new_session=True`` on
|
|
24
|
+
POSIX. The bounded waits intentionally avoid ``communicate()`` because a
|
|
25
|
+
surviving descendant may keep inherited output descriptors open.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
errors: list[str] = []
|
|
29
|
+
if os.name == "posix":
|
|
30
|
+
_signal_group(process.pid, signal.SIGTERM, errors)
|
|
31
|
+
deadline = time.monotonic() + max(grace_seconds, 0)
|
|
32
|
+
while time.monotonic() < deadline and _group_exists(process.pid):
|
|
33
|
+
# Reap an exited group leader before probing again. On Darwin an
|
|
34
|
+
# unreaped leader can make a now-empty group appear present and a
|
|
35
|
+
# subsequent killpg report EPERM.
|
|
36
|
+
process.poll()
|
|
37
|
+
time.sleep(0.01)
|
|
38
|
+
process.poll()
|
|
39
|
+
if _group_exists(process.pid):
|
|
40
|
+
_signal_group(process.pid, signal.SIGKILL, errors)
|
|
41
|
+
elif process.poll() is None:
|
|
42
|
+
try:
|
|
43
|
+
process.terminate()
|
|
44
|
+
except ProcessLookupError:
|
|
45
|
+
pass
|
|
46
|
+
except Exception as exc: # pragma: no cover - platform/runtime specific
|
|
47
|
+
errors.append(type(exc).__name__)
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
process.wait(timeout=max(reap_seconds, 0.01))
|
|
51
|
+
except subprocess.TimeoutExpired:
|
|
52
|
+
try:
|
|
53
|
+
process.kill()
|
|
54
|
+
except ProcessLookupError:
|
|
55
|
+
pass
|
|
56
|
+
except Exception as exc: # pragma: no cover - platform/runtime specific
|
|
57
|
+
errors.append(type(exc).__name__)
|
|
58
|
+
try:
|
|
59
|
+
process.wait(timeout=max(reap_seconds, 0.01))
|
|
60
|
+
except subprocess.TimeoutExpired:
|
|
61
|
+
errors.append("process_reap_timeout")
|
|
62
|
+
except Exception as exc: # pragma: no cover - platform/runtime specific
|
|
63
|
+
errors.append(type(exc).__name__)
|
|
64
|
+
return ",".join(dict.fromkeys(errors)) or None
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _signal_group(pid: int, sig: signal.Signals, errors: list[str]) -> None:
|
|
68
|
+
try:
|
|
69
|
+
os.killpg(pid, sig)
|
|
70
|
+
except ProcessLookupError:
|
|
71
|
+
pass
|
|
72
|
+
except Exception as exc: # pragma: no cover - platform/runtime specific
|
|
73
|
+
errors.append(type(exc).__name__)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _group_exists(pid: int) -> bool:
|
|
77
|
+
try:
|
|
78
|
+
os.killpg(pid, 0)
|
|
79
|
+
return True
|
|
80
|
+
except ProcessLookupError:
|
|
81
|
+
return False
|
|
82
|
+
except PermissionError: # pragma: no cover - cannot inspect another owner
|
|
83
|
+
return True
|
ksadk/_str_enum.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""String-valued enums on all supported Python versions (including 3.10)."""
|
|
2
|
+
|
|
3
|
+
try:
|
|
4
|
+
from enum import StrEnum
|
|
5
|
+
except ImportError: # Python 3.10
|
|
6
|
+
from enum import Enum
|
|
7
|
+
|
|
8
|
+
class StrEnum(str, Enum):
|
|
9
|
+
__str__ = str.__str__
|
|
10
|
+
__format__ = str.__format__
|
|
11
|
+
|
|
12
|
+
@staticmethod
|
|
13
|
+
def _generate_next_value_(name, start, count, last_values):
|
|
14
|
+
return name.lower()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
__all__ = ["StrEnum"]
|
ksadk/a2ui/core.py
CHANGED
|
@@ -73,7 +73,7 @@ class A2UICore:
|
|
|
73
73
|
self._seq = 0
|
|
74
74
|
self._seen_surfaces: set[str] = set()
|
|
75
75
|
# InteractionLedger 存在时它是 pending interaction 的唯一权威
|
|
76
|
-
# (
|
|
76
|
+
# (Kernel Task 5 Step 6);本地 dict 只作无 ledger 的降级路径。
|
|
77
77
|
self._ledger = interaction_ledger
|
|
78
78
|
self._guard = interaction_guard
|
|
79
79
|
self._tenant_id = tenant_id
|
|
@@ -181,7 +181,7 @@ class A2UICore:
|
|
|
181
181
|
await self.display_ui(surface, invocation_id=invocation_id, origin=origin)
|
|
182
182
|
interaction_id = f"int_{uuid.uuid4().hex[:12]}"
|
|
183
183
|
if self._ledger is not None and self._guard is not None:
|
|
184
|
-
#
|
|
184
|
+
# Kernel Task 5 Step 6:durable ledger 是 pending interaction 的
|
|
185
185
|
# 唯一权威;持久化身份与 interaction.requested 事实由 ledger 落盘。
|
|
186
186
|
from datetime import datetime, timezone
|
|
187
187
|
|
|
@@ -264,7 +264,7 @@ class A2UICore:
|
|
|
264
264
|
``action``: ``{"action_id","surface_id","name","actor"?,"component_id"?}``;
|
|
265
265
|
携带 ``interaction_id`` 且配置了 InteractionLedger 时,对原 ID 建
|
|
266
266
|
InteractionSubmission 走 durable resolve,不再发第二个
|
|
267
|
-
InteractionRequested(
|
|
267
|
+
InteractionRequested(Kernel Task 5 Step 6)。
|
|
268
268
|
"""
|
|
269
269
|
receipt = ActionReceipt(
|
|
270
270
|
action_id=str(action.get("action_id") or f"act_{uuid.uuid4().hex[:12]}"),
|
ksadk/api/client.py
CHANGED
|
@@ -162,8 +162,30 @@ class AgentEngineClient:
|
|
|
162
162
|
timeout: float = 60.0,
|
|
163
163
|
dry_run: bool = False,
|
|
164
164
|
extra_headers: Optional[Dict[str, str]] = None,
|
|
165
|
+
allow_env_fallback: bool = True,
|
|
166
|
+
api_version: Optional[str] = None,
|
|
165
167
|
):
|
|
166
|
-
|
|
168
|
+
if type(allow_env_fallback) is not bool:
|
|
169
|
+
raise ValueError("allow_env_fallback must be a boolean")
|
|
170
|
+
self._allow_env_fallback = allow_env_fallback
|
|
171
|
+
self._explicit_api_version = api_version
|
|
172
|
+
if not allow_env_fallback:
|
|
173
|
+
parsed = urlsplit(base_url or "")
|
|
174
|
+
parsed.port # validate malformed or out-of-range ports before any transport
|
|
175
|
+
if (
|
|
176
|
+
parsed.scheme not in {"http", "https"} or not parsed.hostname
|
|
177
|
+
or parsed.username is not None or parsed.password is not None
|
|
178
|
+
or parsed.query or parsed.fragment or "\\" in (base_url or "")
|
|
179
|
+
or any(char.isspace() for char in (base_url or ""))
|
|
180
|
+
or not access_key or not secret_key or not region
|
|
181
|
+
or region.strip().lower() == "pre-online"
|
|
182
|
+
):
|
|
183
|
+
raise ValueError(
|
|
184
|
+
"Explicit control clients require endpoint, credentials and region"
|
|
185
|
+
)
|
|
186
|
+
resolved_base_url = base_url or (
|
|
187
|
+
os.getenv("AGENTENGINE_SERVER_URL") if allow_env_fallback else None
|
|
188
|
+
)
|
|
167
189
|
self.base_url: str = resolved_base_url or self._detect_default_base_url()
|
|
168
190
|
|
|
169
191
|
# 本地调试覆盖 (如果需要)
|
|
@@ -172,10 +194,12 @@ class AgentEngineClient:
|
|
|
172
194
|
self.logical_region = region
|
|
173
195
|
self.region = self._normalize_control_region(region)
|
|
174
196
|
self.custom_source = self._resolve_custom_source(region)
|
|
175
|
-
self.dry_run = bool(dry_run or self._is_global_dry_run_enabled())
|
|
197
|
+
self.dry_run = bool(dry_run or (allow_env_fallback and self._is_global_dry_run_enabled()))
|
|
176
198
|
self.extra_headers = extra_headers or {}
|
|
177
199
|
# 签名 service 可通过环境变量覆盖(例如 aicp)
|
|
178
|
-
self.service: str = service or
|
|
200
|
+
self.service: str = service or (
|
|
201
|
+
os.getenv("AGENTENGINE_SIGN_SERVICE") if allow_env_fallback else None
|
|
202
|
+
) or "aicp"
|
|
179
203
|
|
|
180
204
|
# AWS V4 签名
|
|
181
205
|
self._auth = AWSV4Auth(
|
|
@@ -183,6 +207,7 @@ class AgentEngineClient:
|
|
|
183
207
|
secret_access_key=secret_key or "",
|
|
184
208
|
region=self.region,
|
|
185
209
|
service=self.service,
|
|
210
|
+
allow_env_fallback=allow_env_fallback,
|
|
186
211
|
)
|
|
187
212
|
|
|
188
213
|
if self._auth.is_enabled:
|
|
@@ -197,10 +222,6 @@ class AgentEngineClient:
|
|
|
197
222
|
# requests.Session must not be used by several worker threads at once.
|
|
198
223
|
self._async_action_lock = asyncio.Lock()
|
|
199
224
|
self._http_error_log_suppressors: list[HttpErrorLogSuppressor] = []
|
|
200
|
-
# A Server Action can be deployed before the external KOP publication
|
|
201
|
-
# finishes. Remember that result per client so an approval retry does
|
|
202
|
-
# not repeatedly hit the known-unpublished control-plane route.
|
|
203
|
-
self._unpublished_kop_actions: set[str] = set()
|
|
204
225
|
# 反查身份的实例缓存(避免同会话重复调 IAM);None=未尝试,ResolvedIdentity|None=已反查
|
|
205
226
|
self._resolved_identity: Any = None
|
|
206
227
|
self._identity_resolve_attempted: bool = False
|
|
@@ -217,6 +238,15 @@ class AgentEngineClient:
|
|
|
217
238
|
return False
|
|
218
239
|
return True
|
|
219
240
|
|
|
241
|
+
def _request_ssl_verify(self) -> bool:
|
|
242
|
+
return True if not self._allow_env_fallback else self._ssl_verify_enabled()
|
|
243
|
+
|
|
244
|
+
def _request_api_version(self) -> str:
|
|
245
|
+
return self._explicit_api_version or (
|
|
246
|
+
os.getenv("AGENTENGINE_API_VERSION", "2024-06-12")
|
|
247
|
+
if self._allow_env_fallback else "2024-06-12"
|
|
248
|
+
)
|
|
249
|
+
|
|
220
250
|
@staticmethod
|
|
221
251
|
def _is_global_dry_run_enabled() -> bool:
|
|
222
252
|
"""根命令 --dry-run 开关:支持未显式透传 dry_run 参数的命令。"""
|
|
@@ -259,6 +289,7 @@ class AgentEngineClient:
|
|
|
259
289
|
def _get_session(self) -> requests.Session:
|
|
260
290
|
if self._session is None:
|
|
261
291
|
self._session = requests.Session()
|
|
292
|
+
self._session.trust_env = self._allow_env_fallback
|
|
262
293
|
return self._session
|
|
263
294
|
|
|
264
295
|
def _get_host(self) -> str:
|
|
@@ -421,6 +452,8 @@ class AgentEngineClient:
|
|
|
421
452
|
)
|
|
422
453
|
|
|
423
454
|
def _can_retry_with_inner_aicp_endpoint(self, details: Dict[str, Any]) -> bool:
|
|
455
|
+
if not self._allow_env_fallback:
|
|
456
|
+
return False
|
|
424
457
|
if not self._is_inner_account_intranet_error(details):
|
|
425
458
|
return False
|
|
426
459
|
parsed = urlparse(self.base_url or "")
|
|
@@ -439,7 +472,7 @@ class AgentEngineClient:
|
|
|
439
472
|
kop_mode = self._is_kop_mode()
|
|
440
473
|
headers = self._build_headers(action=action, kop_mode=kop_mode)
|
|
441
474
|
if kop_mode:
|
|
442
|
-
version =
|
|
475
|
+
version = self._request_api_version()
|
|
443
476
|
full_url = f"{self.base_url.rstrip('/')}/?Action={action}&Version={version}"
|
|
444
477
|
else:
|
|
445
478
|
full_url = f"{self.base_url}{path}"
|
|
@@ -453,7 +486,7 @@ class AgentEngineClient:
|
|
|
453
486
|
headers["Accept"] = accept
|
|
454
487
|
if has_files:
|
|
455
488
|
headers.pop("Content-Type", None)
|
|
456
|
-
version =
|
|
489
|
+
version = self._request_api_version()
|
|
457
490
|
full_url = (
|
|
458
491
|
f"{self.base_url.rstrip('/')}/?Action={action}&Version={version}"
|
|
459
492
|
if kop_mode
|
|
@@ -532,7 +565,7 @@ class AgentEngineClient:
|
|
|
532
565
|
}
|
|
533
566
|
if kop_mode and action:
|
|
534
567
|
headers["X-Action"] = action
|
|
535
|
-
headers["X-Version"] =
|
|
568
|
+
headers["X-Version"] = self._request_api_version()
|
|
536
569
|
if self.custom_source:
|
|
537
570
|
headers["X-KSC-CUSTOM-SOURCE"] = self.custom_source
|
|
538
571
|
|
|
@@ -579,6 +612,10 @@ class AgentEngineClient:
|
|
|
579
612
|
|
|
580
613
|
def _get_resolved_identity(self) -> Any:
|
|
581
614
|
"""反查身份并缓存到实例。dry-run 只读文件缓存不联网。"""
|
|
615
|
+
if not self._allow_env_fallback:
|
|
616
|
+
# Explicit resource admission owns identity resolution and its target.
|
|
617
|
+
# Never consult a global identity cache or contact an implicit service.
|
|
618
|
+
return None
|
|
582
619
|
if self._identity_resolve_attempted:
|
|
583
620
|
return self._resolved_identity
|
|
584
621
|
self._identity_resolve_attempted = True
|
|
@@ -606,7 +643,9 @@ class AgentEngineClient:
|
|
|
606
643
|
if key.lower() == "x-ksc-account-id" and str(value or "").strip():
|
|
607
644
|
return str(value).strip()
|
|
608
645
|
# 2. env KSYUN_ACCOUNT_ID
|
|
609
|
-
account_id =
|
|
646
|
+
account_id = (
|
|
647
|
+
os.getenv("KSYUN_ACCOUNT_ID", "").strip() if self._allow_env_fallback else ""
|
|
648
|
+
)
|
|
610
649
|
if account_id:
|
|
611
650
|
return account_id
|
|
612
651
|
# 3. 反查主账号 ID(复用 _get_resolved_identity 的反查,不重复调)
|
|
@@ -734,11 +773,17 @@ class AgentEngineClient:
|
|
|
734
773
|
headers=headers,
|
|
735
774
|
auth=self._auth.get_auth(), # AWS V4 签名
|
|
736
775
|
timeout=self.timeout,
|
|
737
|
-
verify=self.
|
|
776
|
+
verify=self._request_ssl_verify(),
|
|
777
|
+
allow_redirects=self._allow_env_fallback,
|
|
738
778
|
)
|
|
739
779
|
|
|
740
780
|
logger.debug(f"Response: {response.status_code}")
|
|
741
781
|
|
|
782
|
+
if not self._allow_env_fallback and 300 <= response.status_code < 400:
|
|
783
|
+
raise AgentEngineAPIError(
|
|
784
|
+
response.status_code, "Explicit connection redirect refused"
|
|
785
|
+
)
|
|
786
|
+
|
|
742
787
|
if response.status_code < 400:
|
|
743
788
|
break
|
|
744
789
|
|
|
@@ -996,24 +1041,6 @@ class AgentEngineClient:
|
|
|
996
1041
|
)
|
|
997
1042
|
return AgentEngineAPIError(response.status_code, message)
|
|
998
1043
|
|
|
999
|
-
@staticmethod
|
|
1000
|
-
def _is_unregistered_kop_action(error: AgentEngineAPIError, action: str) -> bool:
|
|
1001
|
-
"""Return whether KOP rejected an otherwise valid Server Action.
|
|
1002
|
-
|
|
1003
|
-
Public Action publication is an infrastructure step independent of a
|
|
1004
|
-
Server rollout. During that window the per-Agent Gateway route is
|
|
1005
|
-
already authenticated and still forwards the exact same Action to
|
|
1006
|
-
Server admission, so callers can safely use it as the data-plane
|
|
1007
|
-
fallback instead of losing an approval response.
|
|
1008
|
-
"""
|
|
1009
|
-
|
|
1010
|
-
message = str(error.message or "").strip().lower()
|
|
1011
|
-
return (
|
|
1012
|
-
error.code == 400
|
|
1013
|
-
and f"action {action.lower()}" in message
|
|
1014
|
-
and "not valid for this web service" in message
|
|
1015
|
-
)
|
|
1016
|
-
|
|
1017
1044
|
def _runtime_action(
|
|
1018
1045
|
self,
|
|
1019
1046
|
*,
|
|
@@ -1031,7 +1058,8 @@ class AgentEngineClient:
|
|
|
1031
1058
|
headers={"Authorization": f"Bearer {api_key}"},
|
|
1032
1059
|
json=params,
|
|
1033
1060
|
timeout=self.timeout,
|
|
1034
|
-
verify=self.
|
|
1061
|
+
verify=self._request_ssl_verify(),
|
|
1062
|
+
allow_redirects=self._allow_env_fallback,
|
|
1035
1063
|
)
|
|
1036
1064
|
if response.status_code >= 400:
|
|
1037
1065
|
raise self._workspace_runtime_error(response)
|
|
@@ -1057,22 +1085,6 @@ class AgentEngineClient:
|
|
|
1057
1085
|
raise AgentEngineAPIError(502, "Runtime Action returned non-object Data")
|
|
1058
1086
|
return normalized
|
|
1059
1087
|
|
|
1060
|
-
async def _runtime_action_for_agent(
|
|
1061
|
-
self,
|
|
1062
|
-
*,
|
|
1063
|
-
agent_id: str,
|
|
1064
|
-
action: str,
|
|
1065
|
-
params: Dict[str, Any],
|
|
1066
|
-
) -> Dict[str, Any]:
|
|
1067
|
-
detail = await self.get_agent(agent_id, include_api_key=True)
|
|
1068
|
-
access = self._extract_runtime_access(detail)
|
|
1069
|
-
return await asyncio.to_thread(
|
|
1070
|
-
self._runtime_action,
|
|
1071
|
-
access=access,
|
|
1072
|
-
action=action,
|
|
1073
|
-
params=params,
|
|
1074
|
-
)
|
|
1075
|
-
|
|
1076
1088
|
@staticmethod
|
|
1077
1089
|
def _compact_params(params: Dict[str, Any] | None) -> Dict[str, Any]:
|
|
1078
1090
|
return {key: value for key, value in (params or {}).items() if value is not None}
|
|
@@ -1164,7 +1176,8 @@ class AgentEngineClient:
|
|
|
1164
1176
|
headers=headers,
|
|
1165
1177
|
auth=self._auth.get_auth(),
|
|
1166
1178
|
timeout=self.timeout,
|
|
1167
|
-
verify=self.
|
|
1179
|
+
verify=self._request_ssl_verify(),
|
|
1180
|
+
allow_redirects=self._allow_env_fallback,
|
|
1168
1181
|
)
|
|
1169
1182
|
if response.status_code < 400:
|
|
1170
1183
|
return response
|
|
@@ -1238,7 +1251,8 @@ class AgentEngineClient:
|
|
|
1238
1251
|
files=files,
|
|
1239
1252
|
stream=False,
|
|
1240
1253
|
timeout=self.timeout,
|
|
1241
|
-
verify=self.
|
|
1254
|
+
verify=self._request_ssl_verify(),
|
|
1255
|
+
allow_redirects=self._allow_env_fallback,
|
|
1242
1256
|
)
|
|
1243
1257
|
setattr(response, "_ksadk_workspace_url", url)
|
|
1244
1258
|
if response.status_code >= 400:
|
|
@@ -1501,8 +1515,13 @@ class AgentEngineClient:
|
|
|
1501
1515
|
}
|
|
1502
1516
|
if manifest_sha256:
|
|
1503
1517
|
payload["ManifestSHA256"] = manifest_sha256
|
|
1518
|
+
if isinstance(declaration, dict) and declaration.get("plugin_artifacts"):
|
|
1519
|
+
payload["PluginArtifacts"] = declaration["plugin_artifacts"]
|
|
1504
1520
|
return payload
|
|
1505
1521
|
|
|
1522
|
+
async def get_plugin_delivery_capabilities(self) -> Dict[str, Any]:
|
|
1523
|
+
return await self._action_async("GetPluginDeliveryCapabilities", {})
|
|
1524
|
+
|
|
1506
1525
|
async def create_agent(self, data: Dict[str, Any]) -> Dict[str, Any]:
|
|
1507
1526
|
"""Create an Agent through the established order workflow.
|
|
1508
1527
|
|
|
@@ -1596,6 +1615,9 @@ class AgentEngineClient:
|
|
|
1596
1615
|
"EnableObservability": enable_observability,
|
|
1597
1616
|
"EnvironmentVariables": env_vars,
|
|
1598
1617
|
}
|
|
1618
|
+
component_config = data.get("component_config")
|
|
1619
|
+
if component_config:
|
|
1620
|
+
advanced["ComponentConfig"] = component_config
|
|
1599
1621
|
inbound_identity_auth = data.get("inbound_identity_auth")
|
|
1600
1622
|
if inbound_identity_auth is not None:
|
|
1601
1623
|
advanced["InboundIdentityAuth"] = inbound_identity_auth
|
|
@@ -1604,21 +1626,10 @@ class AgentEngineClient:
|
|
|
1604
1626
|
advanced["ProjectId"] = project_id
|
|
1605
1627
|
params["Advanced"] = advanced
|
|
1606
1628
|
|
|
1607
|
-
#
|
|
1608
|
-
#
|
|
1609
|
-
#
|
|
1610
|
-
|
|
1611
|
-
action = (
|
|
1612
|
-
"CreateAgent"
|
|
1613
|
-
if params["DeploymentType"] == "ManagedRuntime"
|
|
1614
|
-
else "CreateAgentProduct"
|
|
1615
|
-
)
|
|
1616
|
-
if action == "CreateAgent":
|
|
1617
|
-
# CreateAgent is also used as an order callback and therefore
|
|
1618
|
-
# requires an InstanceId. A declarative runtime has no order to
|
|
1619
|
-
# allocate one for us, so the SDK supplies a stable request UUID.
|
|
1620
|
-
params["InstanceId"] = str(data.get("instance_id") or uuid.uuid4())
|
|
1621
|
-
return self._action(action, params)
|
|
1629
|
+
# CreateAgentProduct is the established public Action. The Server
|
|
1630
|
+
# handles ManagedRuntime synchronously without involving Ding, while
|
|
1631
|
+
# Code and Container retain their existing order/callback lifecycle.
|
|
1632
|
+
return self._action("CreateAgentProduct", params)
|
|
1622
1633
|
|
|
1623
1634
|
async def get_agent(
|
|
1624
1635
|
self,
|
|
@@ -1686,6 +1697,33 @@ class AgentEngineClient:
|
|
|
1686
1697
|
params["Name"] = name
|
|
1687
1698
|
return self._action("ListAgentModels", params)
|
|
1688
1699
|
|
|
1700
|
+
async def list_knowledge_bases(self) -> Dict[str, Any]:
|
|
1701
|
+
"""List knowledge bases visible to the current signed cloud identity."""
|
|
1702
|
+
|
|
1703
|
+
result = await self._action_async("ListKnowledgeBases", {})
|
|
1704
|
+
return {
|
|
1705
|
+
"knowledge_bases": result.get("knowledge_bases", []),
|
|
1706
|
+
"total_count": result.get("total_count", 0),
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1709
|
+
async def list_memory_instances(self) -> Dict[str, Any]:
|
|
1710
|
+
"""List long-term memory instances visible to the signed identity."""
|
|
1711
|
+
|
|
1712
|
+
result = await self._action_async("ListMemoryInstances", {})
|
|
1713
|
+
return {
|
|
1714
|
+
"memory_instances": result.get("memory_instances", []),
|
|
1715
|
+
"total_count": result.get("total_count", 0),
|
|
1716
|
+
}
|
|
1717
|
+
|
|
1718
|
+
async def list_skill_workspaces(self) -> Dict[str, Any]:
|
|
1719
|
+
"""List Skill Center workspaces visible to the signed identity."""
|
|
1720
|
+
|
|
1721
|
+
result = await self._action_async("ListSkillWorkspaces", {})
|
|
1722
|
+
return {
|
|
1723
|
+
"skill_workspaces": result.get("skill_workspaces", []),
|
|
1724
|
+
"total_count": result.get("total_count", 0),
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1689
1727
|
async def create_dashboard_access_link(
|
|
1690
1728
|
self,
|
|
1691
1729
|
*,
|
|
@@ -1931,6 +1969,9 @@ class AgentEngineClient:
|
|
|
1931
1969
|
inbound_identity_auth = data.get("inbound_identity_auth")
|
|
1932
1970
|
if inbound_identity_auth is not None:
|
|
1933
1971
|
advanced["InboundIdentityAuth"] = inbound_identity_auth
|
|
1972
|
+
component_config = data.get("component_config")
|
|
1973
|
+
if component_config:
|
|
1974
|
+
advanced["ComponentConfig"] = component_config
|
|
1934
1975
|
project_id = data.get("project_id")
|
|
1935
1976
|
if project_id:
|
|
1936
1977
|
advanced["ProjectId"] = project_id
|
|
@@ -2060,24 +2101,7 @@ class AgentEngineClient:
|
|
|
2060
2101
|
"Response": response or {},
|
|
2061
2102
|
"IdempotencyKey": idempotency_key,
|
|
2062
2103
|
}
|
|
2063
|
-
|
|
2064
|
-
try:
|
|
2065
|
-
return await self._action_async("SubmitInteraction", params)
|
|
2066
|
-
except AgentEngineAPIError as exc:
|
|
2067
|
-
if not self._is_unregistered_kop_action(exc, "SubmitInteraction"):
|
|
2068
|
-
raise
|
|
2069
|
-
self._unpublished_kop_actions.add("SubmitInteraction")
|
|
2070
|
-
if "SubmitInteraction" in self._unpublished_kop_actions:
|
|
2071
|
-
# KOP publication can lag the Server/Gateway rollout. The
|
|
2072
|
-
# per-Agent endpoint is authenticated with the API key returned by
|
|
2073
|
-
# signed GetAgent and still traverses Gateway -> Server admission;
|
|
2074
|
-
# it never submits directly to Runtime.
|
|
2075
|
-
return await self._runtime_action_for_agent(
|
|
2076
|
-
agent_id=agent_id,
|
|
2077
|
-
action="SubmitInteraction",
|
|
2078
|
-
params=params,
|
|
2079
|
-
)
|
|
2080
|
-
raise AssertionError("unreachable SubmitInteraction transport state")
|
|
2104
|
+
return await self._action_async("SubmitInteraction", params)
|
|
2081
2105
|
|
|
2082
2106
|
async def list_workspace_files(
|
|
2083
2107
|
self,
|
|
@@ -2582,6 +2606,7 @@ class AgentEngineClient:
|
|
|
2582
2606
|
raise AssertionError("dry-run request unexpectedly returned")
|
|
2583
2607
|
|
|
2584
2608
|
session = requests.Session()
|
|
2609
|
+
session.trust_env = self._allow_env_fallback
|
|
2585
2610
|
response: requests.Response | None = None
|
|
2586
2611
|
retried_inner_endpoint = False
|
|
2587
2612
|
try:
|
|
@@ -2596,7 +2621,8 @@ class AgentEngineClient:
|
|
|
2596
2621
|
# reasoning before its next SSE chunk. Bound connection
|
|
2597
2622
|
# establishment, not the lifetime of an admitted stream.
|
|
2598
2623
|
timeout=(self.timeout, None),
|
|
2599
|
-
verify=self.
|
|
2624
|
+
verify=self._request_ssl_verify(),
|
|
2625
|
+
allow_redirects=self._allow_env_fallback,
|
|
2600
2626
|
stream=True,
|
|
2601
2627
|
)
|
|
2602
2628
|
content_type = str(response.headers.get("content-type") or "").lower()
|
|
@@ -2622,9 +2648,7 @@ class AgentEngineClient:
|
|
|
2622
2648
|
)
|
|
2623
2649
|
message = (
|
|
2624
2650
|
str(
|
|
2625
|
-
details.get("remote_error_message")
|
|
2626
|
-
or details.get("message")
|
|
2627
|
-
or ""
|
|
2651
|
+
details.get("remote_error_message") or details.get("message") or ""
|
|
2628
2652
|
).strip()
|
|
2629
2653
|
or "RunAgent stream did not return text/event-stream"
|
|
2630
2654
|
)
|
|
@@ -2650,11 +2674,7 @@ class AgentEngineClient:
|
|
|
2650
2674
|
details=details,
|
|
2651
2675
|
)
|
|
2652
2676
|
message = (
|
|
2653
|
-
str(
|
|
2654
|
-
details.get("remote_error_message")
|
|
2655
|
-
or details.get("message")
|
|
2656
|
-
or ""
|
|
2657
|
-
).strip()
|
|
2677
|
+
str(details.get("remote_error_message") or details.get("message") or "").strip()
|
|
2658
2678
|
or resp_text
|
|
2659
2679
|
)
|
|
2660
2680
|
raise AgentEngineAPIError(
|
ksadk/builders/code_builder.py
CHANGED
|
@@ -236,6 +236,14 @@ class CodeBuilder(BaseBuilder):
|
|
|
236
236
|
".ruff_cache",
|
|
237
237
|
}
|
|
238
238
|
IGNORED_FILE_NAMES = {".DS_Store"}
|
|
239
|
+
BUNDLED_SOURCE_IGNORED_DIR_NAMES = {
|
|
240
|
+
"__pycache__",
|
|
241
|
+
"node_modules",
|
|
242
|
+
".git",
|
|
243
|
+
".pytest_cache",
|
|
244
|
+
".mypy_cache",
|
|
245
|
+
".ruff_cache",
|
|
246
|
+
}
|
|
239
247
|
KSADK_ALLOWED_SUFFIXES = {
|
|
240
248
|
".py",
|
|
241
249
|
".yaml",
|
|
@@ -280,7 +288,15 @@ class CodeBuilder(BaseBuilder):
|
|
|
280
288
|
"mcp>=1.1.0",
|
|
281
289
|
"langchain-mcp-adapters>=0.0.1",
|
|
282
290
|
)
|
|
283
|
-
BUNDLED_KSADK_POSTGRES_SESSION_REQUIREMENTS = (
|
|
291
|
+
BUNDLED_KSADK_POSTGRES_SESSION_REQUIREMENTS = (
|
|
292
|
+
"asyncpg>=0.30.0,<1.0.0",
|
|
293
|
+
"greenlet>=1.0.0",
|
|
294
|
+
)
|
|
295
|
+
BUNDLED_KSADK_LANGGRAPH_POSTGRES_REQUIREMENTS = (
|
|
296
|
+
"langgraph-checkpoint-postgres>=3.1.0",
|
|
297
|
+
"psycopg[binary]>=3.2,<4.0",
|
|
298
|
+
"psycopg-pool>=3.2,<4.0",
|
|
299
|
+
)
|
|
284
300
|
BUNDLED_KSADK_ATTACHMENT_RUNTIME_REQUIREMENTS = (
|
|
285
301
|
"pypdf>=6.0.0",
|
|
286
302
|
"beautifulsoup4>=4.12.0",
|
|
@@ -584,8 +600,14 @@ class CodeBuilder(BaseBuilder):
|
|
|
584
600
|
value = os.getenv("KSADK_BUILD_ENABLE_ATTACHMENT_OCR", "")
|
|
585
601
|
return value.strip().lower() in {"1", "true", "yes", "on"}
|
|
586
602
|
|
|
587
|
-
def _bundled_runtime_requirements(self) -> tuple[str, ...]:
|
|
603
|
+
def _bundled_runtime_requirements(self, detection_result: Any = None) -> tuple[str, ...]:
|
|
588
604
|
requirements = list(self.BUNDLED_KSADK_RUNTIME_REQUIREMENTS)
|
|
605
|
+
detection_type = getattr(detection_result, "type", None)
|
|
606
|
+
framework = str(
|
|
607
|
+
getattr(detection_type, "value", detection_type) or ""
|
|
608
|
+
).strip().lower()
|
|
609
|
+
if framework in {"langgraph", "langchain", "deepagents"}:
|
|
610
|
+
requirements.extend(self.BUNDLED_KSADK_LANGGRAPH_POSTGRES_REQUIREMENTS)
|
|
589
611
|
if self._attachment_ocr_runtime_enabled():
|
|
590
612
|
requirements.extend(self.BUNDLED_KSADK_ATTACHMENT_OCR_RUNTIME_REQUIREMENTS)
|
|
591
613
|
if self._mcp_runtime_enabled():
|
|
@@ -612,16 +634,26 @@ class CodeBuilder(BaseBuilder):
|
|
|
612
634
|
if self._env_flag_enabled("KSADK_BUILD_ENABLE_POSTGRES_SESSION"):
|
|
613
635
|
return True
|
|
614
636
|
backend = (
|
|
615
|
-
self.
|
|
616
|
-
or self.
|
|
617
|
-
or self.
|
|
637
|
+
self._project_file_env_value("KSADK_SESSION_BACKEND")
|
|
638
|
+
or self._project_file_env_value("AGENTENGINE_SESSION_BACKEND")
|
|
639
|
+
or self._project_file_env_value("KSADK_STM_BACKEND")
|
|
640
|
+
or os.getenv("KSADK_SESSION_BACKEND")
|
|
641
|
+
or os.getenv("AGENTENGINE_SESSION_BACKEND")
|
|
642
|
+
or os.getenv("KSADK_STM_BACKEND")
|
|
643
|
+
or ""
|
|
618
644
|
)
|
|
619
645
|
if backend.strip().lower() == "postgres":
|
|
620
646
|
return True
|
|
621
647
|
dsn = (
|
|
622
|
-
self.
|
|
623
|
-
or self.
|
|
624
|
-
or self.
|
|
648
|
+
self._project_file_env_value("KSADK_CHECKPOINT_DSN")
|
|
649
|
+
or self._project_file_env_value("KSADK_SESSION_DSN")
|
|
650
|
+
or self._project_file_env_value("KSADK_STM_URL")
|
|
651
|
+
or self._project_file_env_value("KSADK_STM_DB_URL")
|
|
652
|
+
or os.getenv("KSADK_CHECKPOINT_DSN")
|
|
653
|
+
or os.getenv("KSADK_SESSION_DSN")
|
|
654
|
+
or os.getenv("KSADK_STM_URL")
|
|
655
|
+
or os.getenv("KSADK_STM_DB_URL")
|
|
656
|
+
or ""
|
|
625
657
|
)
|
|
626
658
|
return self._looks_like_postgres_dsn(dsn)
|
|
627
659
|
|
|
@@ -642,6 +674,9 @@ class CodeBuilder(BaseBuilder):
|
|
|
642
674
|
value = os.getenv(name)
|
|
643
675
|
if value:
|
|
644
676
|
return value
|
|
677
|
+
return self._project_file_env_value(name)
|
|
678
|
+
|
|
679
|
+
def _project_file_env_value(self, name: str) -> str:
|
|
645
680
|
for env_file in (self.project_dir / ".env", self.project_dir / "agentengine.env"):
|
|
646
681
|
if not env_file.is_file():
|
|
647
682
|
continue
|
|
@@ -823,18 +858,36 @@ class CodeBuilder(BaseBuilder):
|
|
|
823
858
|
yield from self._iter_bundled_source_package(package_name, package_root)
|
|
824
859
|
|
|
825
860
|
def _iter_bundled_source_package(self, package_name: str, package_root: Path):
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
861
|
+
bundled_files = []
|
|
862
|
+
for current_root, dirnames, filenames in os.walk(package_root):
|
|
863
|
+
current_path = Path(current_root)
|
|
864
|
+
dirnames[:] = sorted(
|
|
865
|
+
dir_name
|
|
866
|
+
for dir_name in dirnames
|
|
867
|
+
if dir_name not in self.BUNDLED_SOURCE_IGNORED_DIR_NAMES
|
|
868
|
+
and not (
|
|
869
|
+
package_name == "ksadk"
|
|
870
|
+
and self._should_skip_ksadk_relative_path(
|
|
871
|
+
(current_path / dir_name).relative_to(package_root)
|
|
872
|
+
)
|
|
873
|
+
)
|
|
874
|
+
)
|
|
875
|
+
for file_name in sorted(filenames):
|
|
876
|
+
file_path = current_path / file_name
|
|
877
|
+
if not file_path.is_file():
|
|
878
|
+
continue
|
|
879
|
+
relative_path = file_path.relative_to(package_root)
|
|
880
|
+
if (
|
|
881
|
+
package_name == "ksadk"
|
|
882
|
+
and self._should_skip_ksadk_relative_path(relative_path)
|
|
883
|
+
):
|
|
884
|
+
continue
|
|
885
|
+
if file_path.suffix.lower() not in self.KSADK_ALLOWED_SUFFIXES:
|
|
886
|
+
continue
|
|
887
|
+
bundled_files.append((relative_path.as_posix(), file_path))
|
|
888
|
+
|
|
889
|
+
for relative_path, file_path in sorted(bundled_files):
|
|
890
|
+
yield package_name, relative_path, file_path
|
|
838
891
|
|
|
839
892
|
def _should_skip_ksadk_relative_path(self, relative_path: Path) -> bool:
|
|
840
893
|
parts = relative_path.parts
|
|
@@ -942,7 +995,7 @@ class CodeBuilder(BaseBuilder):
|
|
|
942
995
|
def _build_requirements_list(self, detection_result) -> List[str]:
|
|
943
996
|
final_deps = merge_requirement_lists(
|
|
944
997
|
self._get_base_requirements(detection_result),
|
|
945
|
-
self._bundled_runtime_requirements(),
|
|
998
|
+
self._bundled_runtime_requirements(detection_result),
|
|
946
999
|
)
|
|
947
1000
|
|
|
948
1001
|
user_requirements = self.project_dir / "requirements.txt"
|