agentengine-sdk-python 0.8.4__py3-none-any.whl → 0.8.6__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.4.dist-info → agentengine_sdk_python-0.8.6.dist-info}/METADATA +17 -10
- agentengine_sdk_python-0.8.6.dist-info/RECORD +1731 -0
- ksadk/_async_iterators.py +79 -0
- ksadk/_build_provenance.json +1 -1
- ksadk/_model_anthropic.py +49 -0
- ksadk/_model_input.py +86 -0
- ksadk/_model_json.py +40 -0
- ksadk/_model_reasoning.py +17 -0
- ksadk/_model_refusal.py +20 -0
- ksadk/_model_sse.py +163 -0
- ksadk/_process.py +83 -0
- ksadk/_str_enum.py +17 -0
- ksadk/a2a/__init__.py +157 -167
- ksadk/a2a/_invocation_state.py +86 -0
- ksadk/a2a/_space_client_events.py +33 -22
- ksadk/a2a/adk.py +194 -0
- ksadk/a2a/adk_invocation_context.py +242 -0
- ksadk/a2a/adk_runtime.py +126 -0
- ksadk/a2a/adk_tools.py +319 -0
- ksadk/a2a/bootstrap.py +149 -23
- ksadk/a2a/build_validation.py +147 -0
- ksadk/a2a/card.py +23 -15
- ksadk/a2a/codex.py +160 -0
- ksadk/a2a/codex_checkpoint.py +111 -0
- ksadk/a2a/codex_recovery.py +96 -0
- ksadk/a2a/codex_recovery_events.py +123 -0
- ksadk/a2a/codex_runtime.py +198 -0
- ksadk/a2a/codex_session_checkpoint.py +162 -0
- ksadk/a2a/composition.py +88 -0
- ksadk/a2a/context_store.py +118 -19
- ksadk/a2a/control_plane.py +108 -106
- ksadk/a2a/event_adapter.py +92 -193
- ksadk/a2a/executor.py +257 -85
- ksadk/a2a/exposure.py +106 -0
- ksadk/a2a/external_transport.py +3 -4
- ksadk/a2a/identity.py +106 -12
- ksadk/a2a/ids.py +14 -3
- ksadk/a2a/inbound_kernel.py +133 -0
- ksadk/a2a/interaction_wire.py +76 -0
- ksadk/a2a/invocation_checkpoint.py +274 -0
- ksadk/a2a/invocation_policy.py +87 -0
- ksadk/a2a/invocation_publication.py +210 -0
- ksadk/a2a/invocation_service.py +972 -0
- ksadk/a2a/invocation_types.py +459 -0
- ksadk/a2a/kernel_task_adapter.py +259 -0
- ksadk/a2a/langgraph.py +20 -7
- ksadk/a2a/langgraph_invocation_context.py +136 -0
- ksadk/a2a/langgraph_managed.py +150 -0
- ksadk/a2a/langgraph_recovery.py +32 -0
- ksadk/a2a/langgraph_runtime.py +89 -0
- ksadk/a2a/langgraph_tool_runtime.py +132 -0
- ksadk/a2a/langgraph_tools.py +63 -0
- ksadk/a2a/message_digest.py +40 -0
- ksadk/a2a/platform.py +389 -0
- ksadk/a2a/policy_refs.py +13 -0
- ksadk/a2a/presentation.py +402 -0
- ksadk/a2a/product_kernel_facts.py +177 -0
- ksadk/a2a/product_key.py +99 -0
- ksadk/a2a/protocol_errors.py +116 -0
- ksadk/a2a/result_text.py +49 -0
- ksadk/a2a/resume_store.py +93 -3
- ksadk/a2a/routes.py +6 -1
- ksadk/a2a/runtime_approval.py +198 -0
- ksadk/a2a/runtime_input.py +151 -0
- ksadk/a2a/server.py +16 -7
- ksadk/a2a/space_client.py +101 -16
- ksadk/a2a/task_adapter.py +19 -5
- ksadk/a2a/task_event_dispatcher.py +39 -2
- ksadk/a2a/task_event_outbox.py +215 -0
- ksadk/a2a/task_event_outbox_owned.py +130 -0
- ksadk/a2a/task_store.py +37 -0
- ksadk/a2a/tool_activity.py +176 -0
- ksadk/a2a/workload_tokens.py +134 -0
- ksadk/a2ui/core.py +3 -3
- ksadk/api/client.py +38 -79
- ksadk/api/sse_stream.py +96 -0
- ksadk/builders/code_builder.py +121 -118
- ksadk/builders/container_builder.py +11 -29
- ksadk/builders/framework_requirements.py +22 -2
- ksadk/builders/managed_runtime_builder.py +12 -0
- ksadk/builders/source_provenance.py +87 -0
- ksadk/cli/__init__.py +36 -0
- ksadk/cli/cmd_a2a.py +43 -0
- ksadk/cli/cmd_build.py +9 -0
- ksadk/cli/cmd_config.py +4 -4
- ksadk/cli/cmd_create.py +12 -12
- ksadk/cli/cmd_deploy.py +27 -2
- ksadk/cli/cmd_hermes.py +24 -2
- ksadk/cli/cmd_invoke.py +64 -88
- ksadk/cli/cmd_openclaw.py +26 -1
- ksadk/cli/cmd_plugin.py +70 -12
- ksadk/cli/cmd_studio.py +69 -17
- ksadk/cli/cmd_web.py +2 -0
- ksadk/cli/hosted_invoke.py +206 -0
- ksadk/cli/invoke_content.py +60 -0
- ksadk/cli/openclaw_env.py +1 -1
- ksadk/cli/resource_common.py +26 -0
- ksadk/cli/runtime_bootstrap.py +27 -5
- ksadk/codex/_expert_request_reader.py +48 -0
- ksadk/codex/a2a_tools.py +140 -0
- ksadk/codex/async_approval.py +169 -0
- ksadk/codex/async_client.py +938 -0
- ksadk/codex/async_proxy.py +216 -0
- ksadk/codex/base_runtime.py +25 -0
- ksadk/codex/client.py +3 -1047
- ksadk/codex/client_payloads.py +85 -0
- ksadk/codex/rollout_checkpoint.py +264 -0
- ksadk/codex/runtime.py +290 -54
- ksadk/common/auth.py +2 -2
- ksadk/common/cloud_headers.py +36 -0
- ksadk/common/diagnostics.py +34 -0
- ksadk/common/kop_client.py +2 -1
- ksadk/configs/__init__.py +1 -1
- ksadk/configs/env_registry.py +216 -143
- ksadk/configs/env_registry_a2a.py +173 -0
- ksadk/configs/env_registry_studio.py +134 -0
- ksadk/configs/global_config.py +2 -1
- ksadk/configs/settings.py +9 -3
- ksadk/connector/__init__.py +17 -0
- ksadk/connector/channel.py +477 -0
- ksadk/context_engine/assembler.py +9 -0
- ksadk/context_engine/capabilities.py +52 -4
- ksadk/context_engine/contributors.py +80 -17
- ksadk/context_engine/instruction_authority.py +18 -0
- ksadk/conversations/attachment_storage.py +10 -3
- ksadk/conversations/attachments.py +69 -20
- ksadk/conversations/contracts.py +28 -9
- ksadk/conversations/message_projection.py +51 -155
- ksadk/conversations/message_projection_blocks.py +137 -0
- ksadk/conversations/model_context.py +11 -3
- ksadk/conversations/normalize.py +28 -10
- ksadk/conversations/projector.py +63 -0
- ksadk/conversations/runtime_baseline.py +37 -0
- ksadk/conversations/runtime_compaction.py +7 -2
- ksadk/conversations/runtime_input.py +16 -4
- ksadk/conversations/runtime_invocation.py +17 -4
- ksadk/conversations/runtime_observability.py +39 -10
- ksadk/conversations/runtime_payloads.py +12 -0
- ksadk/conversations/runtime_persistence.py +296 -32
- ksadk/conversations/runtime_preparation.py +98 -13
- ksadk/conversations/runtime_projection.py +217 -0
- ksadk/conversations/runtime_resume.py +141 -70
- ksadk/conversations/runtime_stream_events.py +29 -35
- ksadk/conversations/runtime_streaming.py +8 -0
- ksadk/conversations/tool_receipt_resume.py +387 -0
- ksadk/conversations/tool_receipts.py +32 -0
- ksadk/deployment/env_forward.py +5 -0
- ksadk/deployment/manager.py +15 -6
- ksadk/deployment/providers/serverless.py +76 -136
- ksadk/deployment/providers/serverless_payloads.py +122 -0
- ksadk/evaluation/agent_eval_client.py +2 -1
- ksadk/evaluation/contracts.py +78 -3
- ksadk/evaluation/evaluators.py +166 -1
- ksadk/evaluation/evidence.py +271 -4
- ksadk/evaluation/local_adapter.py +76 -12
- ksadk/evaluation/studio_build_adapter.py +73 -9
- ksadk/events/adapters/_a2a_checkpoint.py +151 -0
- ksadk/events/adapters/_a2a_snapshot.py +18 -14
- ksadk/events/adapters/_a2a_support.py +15 -3
- ksadk/events/adapters/_a2a_tool_activity.py +123 -0
- ksadk/events/adapters/_codex_errors.py +49 -0
- ksadk/events/adapters/_codex_items.py +16 -8
- ksadk/events/adapters/_langgraph_support.py +46 -1
- ksadk/events/adapters/a2a.py +54 -26
- ksadk/events/adapters/adk.py +188 -30
- ksadk/events/adapters/codex.py +33 -7
- ksadk/events/adapters/langgraph.py +16 -6
- ksadk/events/canonical.py +5 -0
- ksadk/events/canonical_store.py +200 -4
- ksadk/events/reducer.py +82 -0
- ksadk/events/run_authority.py +176 -0
- ksadk/events/session_event.py +2 -2
- ksadk/harness/__init__.py +18 -0
- ksadk/harness/app.py +11 -0
- ksadk/harness/artifact_adapters/__init__.py +1 -0
- ksadk/harness/artifact_adapters/native_page_budget.py +172 -0
- ksadk/harness/artifact_adapters/native_search.py +249 -0
- ksadk/harness/artifact_adapters/native_search_budget.py +134 -0
- ksadk/harness/artifact_adapters/native_store.py +115 -0
- ksadk/harness/artifact_adapters/native_tool.py +222 -0
- ksadk/harness/artifact_store.py +230 -0
- ksadk/harness/browser_adapters/__init__.py +6 -0
- ksadk/harness/browser_adapters/native_browser_tool.py +92 -0
- ksadk/harness/browser_adapters/native_dom_snapshot.py +187 -0
- ksadk/harness/browser_adapters/native_playwright.py +953 -0
- ksadk/harness/browser_adapters/native_vision.py +295 -0
- ksadk/harness/capabilities.py +115 -0
- ksadk/harness/capability_adapters/__init__.py +1 -0
- ksadk/harness/capability_adapters/native_dsh.py +289 -0
- ksadk/harness/capability_runtime.py +332 -0
- ksadk/harness/closure_contract.py +92 -0
- ksadk/harness/compaction_record.py +153 -0
- ksadk/harness/compiler.py +284 -0
- ksadk/harness/config.py +28 -5
- ksadk/harness/conformance/__init__.py +33 -0
- ksadk/harness/conformance/contract.py +504 -0
- ksadk/harness/conformance/fixtures.py +102 -0
- ksadk/harness/context_engine.py +388 -0
- ksadk/harness/context_maintenance.py +259 -0
- ksadk/harness/context_manifest.py +188 -0
- ksadk/harness/context_sections.py +397 -0
- ksadk/harness/context_tuning.py +168 -0
- ksadk/harness/diagnostic_adapters/__init__.py +1 -0
- ksadk/harness/diagnostic_adapters/contracts.py +70 -0
- ksadk/harness/diagnostic_adapters/lsp_rpc.py +210 -0
- ksadk/harness/diagnostic_adapters/native_lsp.py +286 -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 +57 -0
- ksadk/harness/engine/context_pipeline.py +1351 -0
- ksadk/harness/engine/graph_builder.py +352 -0
- ksadk/harness/engine/hooked_reasoner.py +380 -0
- ksadk/harness/engine/langgraph.py +1049 -0
- ksadk/harness/engine/mcp_disclosure.py +701 -0
- ksadk/harness/engine/phases/__init__.py +6 -0
- ksadk/harness/engine/phases/context.py +48 -0
- ksadk/harness/engine/phases/interaction.py +31 -0
- ksadk/harness/engine/phases/reason.py +552 -0
- ksadk/harness/engine/phases/tools.py +638 -0
- ksadk/harness/engine/policy_runtime.py +81 -0
- ksadk/harness/engine/postgres_checkpointer.py +386 -0
- ksadk/harness/engine/run_control_bridge.py +100 -0
- ksadk/harness/engine/run_types.py +98 -0
- ksadk/harness/engine/skill_disclosure.py +275 -0
- ksadk/harness/engine/spans.py +41 -0
- ksadk/harness/engine/steering.py +177 -0
- ksadk/harness/engine/subagents.py +360 -0
- ksadk/harness/engine/thread_ids.py +112 -0
- ksadk/harness/engine/tool_dispatch.py +249 -0
- ksadk/harness/event_tree.py +212 -0
- ksadk/harness/events.py +498 -0
- ksadk/harness/execution_policy.py +104 -0
- ksadk/harness/hooks.py +259 -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 +699 -0
- ksadk/harness/loop/tools.py +907 -0
- ksadk/harness/managed_runtime.py +1044 -0
- ksadk/harness/mcp_disclosure_contract.py +85 -0
- ksadk/harness/mcp_matrix.py +474 -0
- ksadk/harness/mcp_result_policy.py +44 -0
- ksadk/harness/mcp_runtime.py +504 -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/micro_compact.py +69 -0
- ksadk/harness/model_adapters/__init__.py +1 -0
- ksadk/harness/model_adapters/native_mcp_media.py +100 -0
- ksadk/harness/model_adapters/native_mcp_result.py +36 -0
- ksadk/harness/model_adapters/native_openai.py +703 -0
- ksadk/harness/model_capability.py +468 -0
- ksadk/harness/model_provider.py +430 -0
- ksadk/harness/multimodal.py +57 -0
- ksadk/harness/native/__init__.py +1 -0
- ksadk/harness/native/activation_contract.py +25 -0
- ksadk/harness/native/activation_recovery.py +29 -0
- ksadk/harness/native/adapters.py +291 -0
- ksadk/harness/native/artifact_contract.py +14 -0
- ksadk/harness/native/artifact_partial_read_capacity.py +171 -0
- ksadk/harness/native/artifact_read_capacity.py +182 -0
- ksadk/harness/native/artifact_read_contract.py +27 -0
- ksadk/harness/native/artifact_runtime.py +408 -0
- ksadk/harness/native/artifact_search_capacity.py +206 -0
- ksadk/harness/native/artifact_search_contract.py +40 -0
- ksadk/harness/native/artifact_single_read_capacity.py +170 -0
- ksadk/harness/native/browser_contract.py +229 -0
- ksadk/harness/native/browser_recovery.py +183 -0
- ksadk/harness/native/capabilities.py +204 -0
- ksadk/harness/native/child_approval.py +60 -0
- ksadk/harness/native/child_budget.py +136 -0
- ksadk/harness/native/child_cancellation.py +80 -0
- ksadk/harness/native/child_input.py +98 -0
- ksadk/harness/native/child_input_runtime.py +59 -0
- ksadk/harness/native/child_interruption.py +81 -0
- ksadk/harness/native/child_lifecycle.py +246 -0
- ksadk/harness/native/child_lifecycle_contract.py +91 -0
- ksadk/harness/native/child_notifications.py +75 -0
- ksadk/harness/native/child_promotion.py +66 -0
- ksadk/harness/native/command_runtime.py +99 -0
- ksadk/harness/native/completion.py +302 -0
- ksadk/harness/native/completion_text.py +116 -0
- ksadk/harness/native/context.py +358 -0
- ksadk/harness/native/context_artifact_page.py +75 -0
- ksadk/harness/native/context_compaction_projection.py +131 -0
- ksadk/harness/native/context_contributions.py +320 -0
- ksadk/harness/native/context_contributor_contract.py +133 -0
- ksadk/harness/native/context_driver.py +820 -0
- ksadk/harness/native/context_fresh_tools.py +49 -0
- ksadk/harness/native/context_history.py +272 -0
- ksadk/harness/native/context_microcompact.py +61 -0
- ksadk/harness/native/context_partial_summary.py +58 -0
- ksadk/harness/native/context_partition.py +492 -0
- ksadk/harness/native/context_pruning.py +275 -0
- ksadk/harness/native/context_reduction.py +60 -0
- ksadk/harness/native/context_replay.py +148 -0
- ksadk/harness/native/context_request_projection.py +526 -0
- ksadk/harness/native/context_runtime.py +976 -0
- ksadk/harness/native/context_runtime_contracts.py +409 -0
- ksadk/harness/native/context_search.py +112 -0
- ksadk/harness/native/context_source_fragments.py +188 -0
- ksadk/harness/native/context_source_progress.py +119 -0
- ksadk/harness/native/context_summary_planning.py +788 -0
- ksadk/harness/native/context_summary_recovery.py +105 -0
- ksadk/harness/native/delivery_review.py +331 -0
- ksadk/harness/native/delivery_review_contract.py +54 -0
- ksadk/harness/native/effect_admission.py +82 -0
- ksadk/harness/native/effect_control.py +318 -0
- ksadk/harness/native/effect_receipts.py +729 -0
- ksadk/harness/native/effect_runtime.py +303 -0
- ksadk/harness/native/effective_configuration.py +28 -0
- ksadk/harness/native/engine.py +945 -0
- ksadk/harness/native/final_output.py +34 -0
- ksadk/harness/native/final_submission.py +58 -0
- ksadk/harness/native/finalization_workspace.py +96 -0
- ksadk/harness/native/fork.py +151 -0
- ksadk/harness/native/guidance.py +91 -0
- ksadk/harness/native/history.py +381 -0
- ksadk/harness/native/hook_executor.py +205 -0
- ksadk/harness/native/hook_runtime_contract.py +282 -0
- ksadk/harness/native/interaction_observation.py +117 -0
- ksadk/harness/native/lease.py +103 -0
- ksadk/harness/native/machine.py +974 -0
- ksadk/harness/native/mcp_result_governance.py +156 -0
- ksadk/harness/native/model.py +570 -0
- ksadk/harness/native/model_feedback.py +63 -0
- ksadk/harness/native/model_input.py +30 -0
- ksadk/harness/native/model_recovery_contract.py +35 -0
- ksadk/harness/native/model_replay.py +128 -0
- ksadk/harness/native/model_request.py +133 -0
- ksadk/harness/native/model_runtime.py +196 -0
- ksadk/harness/native/model_takeover.py +419 -0
- ksadk/harness/native/model_tool_batch.py +40 -0
- ksadk/harness/native/observed_progress.py +46 -0
- ksadk/harness/native/operator_guidance.py +201 -0
- ksadk/harness/native/output_contract.py +80 -0
- ksadk/harness/native/output_recovery.py +24 -0
- ksadk/harness/native/ports.py +749 -0
- ksadk/harness/native/precompact_hook_runtime.py +171 -0
- ksadk/harness/native/replay_context.py +149 -0
- ksadk/harness/native/request_media.py +112 -0
- ksadk/harness/native/restore_contract.py +16 -0
- ksadk/harness/native/run_clock.py +120 -0
- ksadk/harness/native/state.py +436 -0
- ksadk/harness/native/steering.py +170 -0
- ksadk/harness/native/stop_hook_runtime.py +151 -0
- ksadk/harness/native/studio_admission.py +29 -0
- ksadk/harness/native/subagents.py +86 -0
- ksadk/harness/native/task_policy.py +99 -0
- ksadk/harness/native/task_progress.py +86 -0
- ksadk/harness/native/terminal_verification.py +43 -0
- ksadk/harness/native/tool_argument_feedback.py +178 -0
- ksadk/harness/native/tool_budget.py +253 -0
- ksadk/harness/native/tool_error_streak.py +89 -0
- ksadk/harness/native/tool_hook_runtime.py +343 -0
- ksadk/harness/native/tool_input_validation.py +58 -0
- ksadk/harness/native/tool_interruption.py +96 -0
- ksadk/harness/native/tool_observation.py +259 -0
- ksadk/harness/native/tool_progress.py +223 -0
- ksadk/harness/native/tool_recovery.py +25 -0
- ksadk/harness/native/tool_scheduling.py +33 -0
- ksadk/harness/native/tool_schema.py +126 -0
- ksadk/harness/native/transitions.py +151 -0
- ksadk/harness/native/turn_control.py +98 -0
- ksadk/harness/native/user_document.py +98 -0
- ksadk/harness/native/user_document_capture.py +49 -0
- ksadk/harness/native/user_input.py +87 -0
- ksadk/harness/native/verification.py +432 -0
- ksadk/harness/native/verification_binding.py +40 -0
- ksadk/harness/native/verification_runtime.py +233 -0
- ksadk/harness/native/verification_workspace.py +67 -0
- ksadk/harness/native_driver_failure.py +123 -0
- ksadk/harness/native_facade.py +977 -0
- ksadk/harness/native_factory.py +244 -0
- ksadk/harness/native_projection.py +503 -0
- ksadk/harness/native_runtime.py +621 -0
- ksadk/harness/native_shadow.py +250 -0
- ksadk/harness/native_shadow_inputs.py +146 -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/progress_adapters/__init__.py +5 -0
- ksadk/harness/progress_adapters/native_todo.py +75 -0
- ksadk/harness/prompt_cache.py +132 -0
- ksadk/harness/public_activity.py +213 -0
- ksadk/harness/public_output.py +30 -0
- ksadk/harness/public_summary.py +36 -0
- ksadk/harness/readiness.py +249 -0
- ksadk/harness/reasoner.py +779 -17
- ksadk/harness/release_readiness.py +140 -0
- ksadk/harness/resource_ref.py +69 -0
- ksadk/harness/rpc.py +200 -0
- ksadk/harness/run_control.py +773 -0
- ksadk/harness/runtime.py +157 -113
- ksadk/harness/runtime_capabilities.py +228 -0
- ksadk/harness/runtime_server.py +514 -0
- ksadk/harness/sandbox_adapters.py +739 -0
- ksadk/harness/sandbox_backend.py +733 -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/sdk.py +153 -0
- ksadk/harness/session_store.py +589 -0
- ksadk/harness/skill_adapters/__init__.py +1 -0
- ksadk/harness/skill_adapters/native_bundle.py +148 -0
- ksadk/harness/skill_adapters/native_disclosure.py +306 -0
- ksadk/harness/skill_composition.py +212 -0
- ksadk/harness/skill_feedback.py +123 -0
- ksadk/harness/skill_intent.py +47 -0
- ksadk/harness/skill_matrix.py +233 -0
- ksadk/harness/skill_runtime.py +317 -0
- ksadk/harness/spec.py +342 -0
- ksadk/harness/state.py +155 -0
- ksadk/harness/stores/__init__.py +14 -0
- ksadk/harness/stores/native_command_settlement.py +65 -0
- ksadk/harness/stores/native_contract.py +311 -0
- ksadk/harness/stores/native_memory.py +326 -0
- ksadk/harness/stores/native_memory_archive.py +70 -0
- ksadk/harness/stores/native_migration_cli.py +91 -0
- ksadk/harness/stores/native_outbox.py +56 -0
- ksadk/harness/stores/native_sqlite.py +782 -0
- ksadk/harness/stores/native_sqlite_audit.py +29 -0
- ksadk/harness/stores/native_sqlite_migration.py +252 -0
- ksadk/harness/strategies.py +149 -0
- ksadk/harness/subagent.py +263 -0
- ksadk/harness/subagent_adapters/checkpoint_recovery.py +120 -0
- ksadk/harness/subagent_adapters/native_background_child.py +803 -0
- ksadk/harness/subagent_adapters/native_child.py +819 -0
- ksadk/harness/subagent_adapters/native_child_approval.py +128 -0
- ksadk/harness/subagent_adapters/native_child_continuation.py +51 -0
- ksadk/harness/subagent_adapters/native_child_result.py +392 -0
- ksadk/harness/subagent_adapters/prepared_recovery.py +120 -0
- ksadk/harness/tool_display.py +75 -0
- ksadk/harness/tool_display_contract.py +134 -0
- ksadk/harness/tool_output.py +141 -0
- ksadk/harness/tool_policy.py +134 -0
- ksadk/harness/tool_receipts.py +96 -0
- ksadk/harness/tool_reliability.py +81 -0
- ksadk/harness/tool_result_policy.py +216 -0
- ksadk/harness/tools.py +52 -0
- ksadk/harness/user_errors.py +69 -0
- ksadk/harness/working_context.py +81 -0
- ksadk/harness/working_context_patch.py +99 -0
- ksadk/harness/workspace_adapters/__init__.py +6 -0
- ksadk/harness/workspace_adapters/native_directory.py +180 -0
- ksadk/harness/workspace_adapters/native_git.py +208 -0
- ksadk/harness/workspace_adapters/native_isolation.py +350 -0
- ksadk/identity/resolver.py +18 -0
- ksadk/interaction/__init__.py +1 -1
- ksadk/interaction/ledger.py +1 -1
- ksadk/interaction/provider.py +1 -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 +9 -2
- ksadk/kernel/__init__.py +10 -0
- ksadk/kernel/approval_presentation.py +91 -0
- ksadk/kernel/authorization.py +1 -1
- ksadk/kernel/bootstrap.py +220 -252
- ksadk/kernel/contract_fingerprints.py +45 -1
- ksadk/kernel/contracts.py +30 -0
- ksadk/kernel/control.py +180 -29
- ksadk/kernel/execution_grants.py +428 -0
- ksadk/kernel/execution_grants_memory.py +252 -0
- ksadk/kernel/execution_grants_postgres.py +395 -0
- ksadk/kernel/execution_grants_sqlite.py +435 -0
- ksadk/kernel/execution_host_ingress.py +1071 -0
- ksadk/kernel/history_projection.py +120 -0
- ksadk/kernel/ingress.py +139 -226
- ksadk/kernel/ingress_bootstrap.py +268 -0
- ksadk/kernel/legacy_history.py +179 -0
- ksadk/kernel/mapping.py +1 -1
- ksadk/kernel/memory_store.py +61 -58
- ksadk/kernel/memory_store_projection.py +63 -0
- ksadk/kernel/postgres_event_log.py +181 -0
- ksadk/kernel/postgres_store.py +230 -231
- ksadk/kernel/readiness.py +125 -0
- ksadk/kernel/recovery.py +166 -16
- ksadk/kernel/recovery_projection.py +124 -0
- ksadk/kernel/runtime_checkpoint.py +34 -0
- ksadk/kernel/sql/001_agent_kernel.sql +28 -0
- ksadk/kernel/sqlite_schema.py +100 -0
- ksadk/kernel/sqlite_store.py +410 -200
- ksadk/kernel/state.py +2 -3
- ksadk/kernel/store.py +104 -5
- ksadk/kernel/teams_artifact_tools.py +392 -0
- ksadk/kernel/teams_effects.py +851 -0
- ksadk/kernel/teams_execution_context.py +408 -0
- ksadk/kernel/teams_host_http.py +237 -0
- ksadk/kernel/teams_material_transport.py +245 -0
- ksadk/kernel/teams_materials.py +318 -0
- ksadk/kernel/teams_runtime_bootstrap.py +604 -0
- ksadk/kernel/teams_tool_runtime.py +273 -0
- ksadk/kernel/teams_workspace.py +259 -0
- ksadk/kernel/worker.py +369 -340
- ksadk/kernel/worker_controls.py +454 -0
- ksadk/kernel/worker_history.py +72 -0
- ksadk/kernel/worker_identity.py +74 -0
- ksadk/kernel/worker_interactions.py +197 -0
- ksadk/knowledge_base/client.py +15 -1
- ksadk/managed_runtime.py +29 -2
- ksadk/memory/adk/backends/http_ltm_backend.py +2 -1
- ksadk/memory/adk/backends/sdk_ltm_backend.py +15 -1
- ksadk/memory/adk/bounded_database_session_service.py +232 -0
- ksadk/memory/adk/resilient_session_service.py +115 -15
- ksadk/memory/adk/short_term_memory.py +8 -9
- ksadk/memory/coordinator.py +22 -6
- ksadk/memory/extraction.py +159 -7
- ksadk/memory/models.py +77 -1
- ksadk/memory/provider_resolver.py +5 -0
- ksadk/memory/providers/local_candidates.py +183 -0
- ksadk/memory/providers/local_postgres.py +200 -0
- ksadk/memory/providers/local_sqlite.py +280 -67
- ksadk/memory/resolved_policy.py +12 -7
- ksadk/memory/retrieval.py +189 -0
- ksadk/memory/store_adapter.py +150 -0
- ksadk/model_gateway/__init__.py +29 -0
- ksadk/model_gateway/client.py +253 -0
- ksadk/model_gateway/events.py +113 -0
- ksadk/model_gateway/matrix.py +297 -0
- ksadk/model_policy.py +2 -2
- ksadk/model_proxy/compat.py +670 -0
- ksadk/model_proxy/detect.py +254 -0
- ksadk/model_proxy/server.py +14 -9
- ksadk/model_proxy/transform.py +72 -6
- ksadk/plugins/__init__.py +1 -1
- ksadk/plugins/bridges/dsh.py +29 -20
- ksadk/plugins/bridges/dsh_profile_manifest.py +36 -0
- ksadk/plugins/builtin_resources.py +199 -0
- ksadk/plugins/builtins.py +417 -185
- ksadk/plugins/companion_artifacts.py +83 -0
- ksadk/plugins/companions.py +368 -0
- ksadk/plugins/context_contributor.py +15 -4
- ksadk/plugins/contracts.py +1 -1
- ksadk/plugins/dsh_channels.py +156 -0
- ksadk/plugins/dsh_dependency_policy.py +41 -0
- ksadk/plugins/dsh_home.py +140 -0
- ksadk/plugins/dsh_teams.py +105 -0
- ksadk/plugins/dsh_toolchain.py +92 -21
- ksadk/plugins/execution_host.py +107 -0
- ksadk/plugins/host.py +73 -5
- ksadk/plugins/kernel_adapter.py +44 -1
- ksadk/plugins/memory_provider.py +180 -0
- ksadk/plugins/providers/_process_group.py +50 -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/index.mjs +24 -2
- ksadk/plugins/providers/bundles/dsh-knowledge/package.json +1 -1
- ksadk/plugins/providers/bundles/dsh-memory/package.json +1 -1
- ksadk/plugins/providers/bundles/dsh-skill-center/package.json +1 -1
- 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/index.mjs +51 -1
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +2 -2
- 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 +27 -4
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +9 -5
- ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +1 -1
- ksadk/plugins/providers/codex.py +52 -40
- ksadk/plugins/providers/codex_native.py +20 -0
- ksadk/plugins/providers/codex_skills.py +46 -0
- ksadk/plugins/providers/dsh_capabilities.py +49 -143
- ksadk/plugins/providers/dsh_connector_lease.py +225 -0
- ksadk/plugins/providers/dsh_mcp.py +163 -1
- ksadk/plugins/providers/harness.py +413 -52
- ksadk/plugins/providers/harness_context.py +61 -0
- ksadk/plugins/providers/harness_contributions.py +241 -0
- ksadk/plugins/providers/harness_delegation.py +670 -0
- ksadk/plugins/providers/harness_hooks.py +121 -0
- ksadk/plugins/providers/harness_managed.py +550 -0
- ksadk/plugins/providers/harness_tools.py +455 -0
- ksadk/plugins/providers/legacy_catalog.py +1 -1
- ksadk/plugins/providers/mcp_projection.py +100 -3
- ksadk/plugins/providers/platform_resources.py +16 -6
- ksadk/plugins/providers/shipped_dsh.py +4 -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 +540 -0
- ksadk/plugins/teams/artifacts.py +60 -0
- ksadk/plugins/teams/build_artifacts.py +460 -0
- ksadk/plugins/teams/cloud_contract_fingerprints.py +22 -0
- ksadk/plugins/teams/cloud_contracts.py +928 -0
- ksadk/plugins/teams/cloud_permits.py +250 -0
- ksadk/plugins/teams/context.py +96 -0
- ksadk/plugins/teams/contracts.py +136 -0
- ksadk/plugins/teams/domain.py +1480 -0
- ksadk/plugins/teams/domain_values.py +24 -0
- ksadk/plugins/teams/effect_contracts.py +255 -0
- ksadk/plugins/teams/errors.py +13 -0
- ksadk/plugins/teams/execution_projection.py +255 -0
- ksadk/plugins/teams/leader_decisions.py +106 -0
- ksadk/plugins/teams/migration.py +311 -0
- ksadk/plugins/teams/migration_cli.py +322 -0
- ksadk/plugins/teams/postgres_store.py +352 -0
- ksadk/plugins/teams/release_contracts.py +60 -0
- ksadk/plugins/teams/runtime.py +853 -0
- ksadk/plugins/teams/source_projection.py +84 -0
- ksadk/plugins/teams/store.py +519 -0
- ksadk/plugins/teams/task_decisions.py +436 -0
- ksadk/plugins/teams/tool_service.py +152 -0
- ksadk/plugins/teams/transport.py +96 -0
- ksadk/plugins/teams/workspaces.py +255 -0
- ksadk/resource_runtime/skill_runtime.py +3 -0
- ksadk/resource_runtime/socket_server.py +11 -0
- ksadk/resource_runtime/worker.py +28 -4
- ksadk/runners/_adk_a2a_stream.py +122 -0
- ksadk/runners/_adk_canonical_stream.py +474 -0
- ksadk/runners/_langgraph_canonical_streams.py +527 -0
- ksadk/runners/_langgraph_runner_streams.py +83 -401
- ksadk/runners/_langgraph_state_reader.py +106 -0
- ksadk/runners/_langgraph_tool_projection.py +86 -0
- ksadk/runners/_langgraph_tools_transformer.py +27 -0
- ksadk/runners/_session_identity.py +285 -0
- ksadk/runners/adk_runner.py +220 -350
- ksadk/runners/base_runner.py +6 -5
- ksadk/runners/langgraph_runner.py +208 -195
- ksadk/runners/patch_langchain.py +47 -0
- ksadk/runners/usage_accumulator.py +11 -3
- ksadk/runners/utils/loader.py +28 -14
- ksadk/runtime/_runner_adapter/a2ui_surface.py +145 -0
- ksadk/runtime/_runner_adapter/gateway_approvals.py +93 -0
- ksadk/runtime/_runner_adapter/stream_mapping.py +134 -129
- ksadk/runtime/adapter.py +40 -3
- ksadk/runtime/conversation_execution.py +29 -3
- ksadk/runtime/executor.py +105 -7
- ksadk/runtime/factory.py +45 -3
- ksadk/runtime/framework_adapters.py +184 -10
- ksadk/runtime/hosted_finalizer.py +4 -6
- ksadk/runtime/launch.py +2 -0
- ksadk/runtime/preprocessing.py +11 -3
- ksadk/runtime/runner_adapter.py +160 -21
- ksadk/runtime/skill_eval_result.py +36 -0
- ksadk/runtime/timing.py +46 -0
- ksadk/runtime/usage.py +49 -18
- ksadk/runtime_context.py +105 -1
- ksadk/sandbox/backends/e2b.py +272 -24
- ksadk/sandbox/backends/local_process.py +73 -39
- ksadk/sandbox/base.py +62 -1
- ksadk/sandbox/diagnostics.py +82 -0
- ksadk/sandbox/e2b_connection.py +9 -1
- ksadk/sandbox/local_controls.py +776 -0
- ksadk/sandbox/local_launcher.py +124 -0
- ksadk/scheduler/dispatcher.py +1 -1
- ksadk/server/factory.py +178 -25
- ksadk/server/history_deadline.py +158 -0
- ksadk/server/history_page_cache.py +129 -0
- ksadk/server/invocation_identity.py +118 -0
- ksadk/server/routes/checkpoint_audit.py +88 -0
- ksadk/server/routes/checkpoint_listing.py +294 -0
- ksadk/server/routes/checkpoint_resolution.py +73 -20
- ksadk/server/routes/common.py +32 -3
- ksadk/server/routes/control.py +112 -9
- ksadk/server/routes/dependencies.py +2 -1
- ksadk/server/routes/display_projection.py +154 -0
- ksadk/server/routes/kernel_ingress.py +26 -3
- ksadk/server/routes/misc.py +331 -33
- ksadk/server/routes/models.py +28 -4
- ksadk/server/routes/openai_compat.py +82 -13
- ksadk/server/routes/projection.py +159 -216
- ksadk/server/routes/run.py +112 -37
- ksadk/server/routes/sessions.py +493 -358
- ksadk/server/routes/streaming.py +68 -15
- ksadk/server/routes/tool_receipt_claim_routes.py +107 -0
- ksadk/server/routes/workspace.py +135 -23
- ksadk/server/static/assets/{ArtifactsPanel-CGbWlMNh.js → ArtifactsPanel-CILaW-fC.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-b4C7upmO.js → CodeBlock-BVrNVtJC.js} +10 -7
- ksadk/server/static/assets/MathMessageMarkdown-Dp7c4wWD.js +8 -0
- ksadk/server/static/assets/{MermaidBlock-BEBN4Ksz.js → MermaidBlock-Dxop8Rd7.js} +9 -9
- ksadk/server/static/assets/{NativeTerminalPanel-zvL-WpAn.js → NativeTerminalPanel-Cjjz8B30.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-BYafW7Za.js → abnfDiagram-VCTEODGH-ckWDmOzw.js} +1 -1
- ksadk/server/static/assets/{arc-bTohInsS.js → arc-DqxJede-.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-pn_DuLy6.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-Ch5Lbzsi.js → architectureDiagram-5GKGNRK7-SEQA4bVi.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-kqF4MDOG.js → blockDiagram-NRAW4CY4-pM0B-6NJ.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-8uSRIODv.js → c4Diagram-UCG6FXSJ-m2tuCNVq.js} +1 -1
- ksadk/server/static/assets/channel-fySsnkft.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-BheGxKRQ.js +1 -0
- ksadk/server/static/assets/{chunk-5VM5RSS4-DkhehZDr.js → chunk-5VM5RSS4-GJHDr9Ww.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-BdXhtPe9.js → chunk-F27PBJKO-CbAN45AV.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-DPTpvpwi.js → chunk-G27WJ6UU-D5ngbbzF.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-Pqoh38el.js → chunk-JWPE2WC7-Cc5IwuYC.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-DeU00qC-.js → chunk-LCL6LL3I-CprgDDdJ.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-CzxScFkr.js → chunk-POPQ4Y6H-CDZhSy82.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-DpqMx-ux.js → chunk-RHFEMEQ7-CZchUNro.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-C6t0SypQ.js → chunk-SVP7TREG-BVruqk6T.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-DVaeafZk.js → chunk-XXDRQBXY-4ld9SxPN.js} +1 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-DSfLtNYm.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-DSfLtNYm.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-JH36ORCC-Bf9D3tzJ.js → cose-bilkent-JH36ORCC-Dmyyk_Vp.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-PFWIGtvA.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-B9cY3iTz.js → cynefinDiagram-5FMLGOSQ-BIyq3EJb.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-CSwlx3CB.js → dagre-3AP2YEHR-eBw08Qdk.js} +1 -1
- ksadk/server/static/assets/{dagre-UBpgon5q.js → dagre-DfvnEf45.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-C9akhN9a.js → diagram-S7CK7UJ4-CUSrE3Mg.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-CgedhTPI.js → diagram-UQ7AKVKN-Dq5Zw2gy.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-Cjucz5BY.js → diagram-VSXAHHWV-DyUHfNwT.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-Dd4Vleyn.js → diagram-VX7I27RA-CREmM89O.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-CZ2jGtYW.js → diagram-Z3DM3KII-Dw9zhHUK.js} +1 -1
- ksadk/server/static/assets/{dist-Bj730Ib4.js → dist-0uJ4tdx6.js} +1 -1
- ksadk/server/static/assets/{dist-BnaTiyzN.js → dist-AEv-vXf-.js} +1 -1
- ksadk/server/static/assets/{dist-BgV_owcB.js → dist-B49GzZDb.js} +1 -1
- ksadk/server/static/assets/{dist-D_ctSS2i.js → dist-B8Myiet9.js} +1 -1
- ksadk/server/static/assets/{dist-ufY3F5p6.js → dist-BBsYarrI.js} +2 -2
- ksadk/server/static/assets/{dist-ClYUxfeK.js → dist-BQMrUwdI.js} +1 -1
- ksadk/server/static/assets/{dist-CFzsn6BG.js → dist-BX_-FENW.js} +1 -1
- ksadk/server/static/assets/{dist-B3FR1SKK.js → dist-CD4L6ymH.js} +1 -1
- ksadk/server/static/assets/{dist-Cf125P_m.js → dist-CHpW1BHj.js} +1 -1
- ksadk/server/static/assets/{dist-DVCOWtha.js → dist-CVPau3tn.js} +1 -1
- ksadk/server/static/assets/{dist-DFD6Qa6T.js → dist-C_qdxcSH.js} +1 -1
- ksadk/server/static/assets/{dist-BIr4DSRq.js → dist-Co68Apq4.js} +1 -1
- ksadk/server/static/assets/{dist-DiixqL0J.js → dist-Cp2PaOMY.js} +1 -1
- ksadk/server/static/assets/{dist-fBO2v5Kt.js → dist-CuR5Bgme.js} +1 -1
- ksadk/server/static/assets/{dist-DoVSwoDb.js → dist-DDSyLEOX.js} +1 -1
- ksadk/server/static/assets/{dist-C5_ZAZsG.js → dist-DUxO0R99.js} +1 -1
- ksadk/server/static/assets/{dist-C1NMAY5a.js → dist-QzbGrED_.js} +1 -1
- ksadk/server/static/assets/dist-bupkyEBZ.js +1 -0
- ksadk/server/static/assets/{dist-DvFK7p5S.js → dist-cxTGfdqx.js} +1 -1
- ksadk/server/static/assets/{dist-CB9iJrvg.js → dist-hL5p1til.js} +1 -1
- ksadk/server/static/assets/{dist-btbmmX5O.js → dist-lOy23y43.js} +1 -1
- ksadk/server/static/assets/{dist-QfkEHOlb.js → dist-pq-nD33R.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-Ci8NqqZu.js → ebnfDiagram-PWID7BFC-BS5LdNoR.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CCIOhLZG.js → erDiagram-SSCWMZ5O-Bv1QtiY-.js} +1 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-DsM4upQX.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-D5NA16k9.js +1 -0
- ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-Cp_r9Hb6.js → ganttDiagram-EL5Y4UJY-musi-e0G.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-DUCVz-ih.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-Dlhc8Wr8.js → gitGraphDiagram-WWUBYQGX-DH37EGkG.js} +1 -1
- ksadk/server/static/assets/index-CZdkAvsv.js +244 -0
- ksadk/server/static/assets/index-CvXdHgF3.css +2 -0
- ksadk/server/static/assets/info-A6RAGUB7-rw0ZNHZp.js +1 -0
- ksadk/server/static/assets/{infoDiagram-RXCK75RN-CO0rRTRA.js → infoDiagram-RXCK75RN-C1kEtv2y.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CHiaedSS.js → ishikawaDiagram-5VMMS53U-BCNPyMka.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-CHcCIB09.js → journeyDiagram-EYS64GPL--cDbKnjP.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-CJ_ebBZf.js → kanban-definition-3QL26DDD-R1rAVw2f.js} +1 -1
- ksadk/server/static/assets/{katex-B4weu383.js → katex-BT-X-V7U.js} +1 -1
- ksadk/server/static/assets/{linear-V-MgYHW1.js → linear-DTR631iG.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-CBijEX_c.js → mermaid-parser.core-DfFzJhX8.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-Bc-pQvpp.js → mindmap-definition-FBJOCRG2-D4by_rmk.js} +1 -1
- ksadk/server/static/assets/packet-AYTQ26CC-Ca4Hvki9.js +1 -0
- ksadk/server/static/assets/{pegDiagram-XKGWAZYB-D7genGLl.js → pegDiagram-XKGWAZYB-xWXPEh0c.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-hwiz6fbw.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-Bxj32zwD.js → pieDiagram-E7YTZNPT-BudBDlCI.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-BURv2mGh.js → quadrantDiagram-AXDQQJYC-DXZ0PCJF.js} +1 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-BR1oZXLM.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-DfgEISfX.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-CWOC3rdk.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-CiRvHCLY.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-DSDDyJ2f.js +1 -0
- ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-CCsh3avW.js → railroadDiagram-O6MQD6OU-BdAYRYB8.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-_FRRBKEd.js → requirementDiagram-EFPCY7ZU-CBBmaL70.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-C-gr2o9M.js → sankeyDiagram-P5KCCOFB-Doc3rdwp.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-D97NmfKg.js → sequenceDiagram-WJ2MYXX4-0J8R8hWW.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DjrPC5FX.js → sizeCapture-X5ZJPWSS-CfFLlWsK.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-DzMNg1hh.js → stateDiagram-HBIQ2CUA-jBwkjtTy.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-Cw1fPb5w.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-Cssf_CsU.js → swimlanes-XN3QIQJK-B0WxTQf8.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-Cc3JMBAF.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-BWTHzyS1.js → timeline-definition-24CTP7MA-BfCT_75A.js} +1 -1
- ksadk/server/static/assets/treeView-Q6P3EWNA-C05SJHxo.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-BqNLAhc3.js +1 -0
- ksadk/server/static/assets/{vennDiagram-4TSXK5OY-BSKgJsmR.js → vennDiagram-4TSXK5OY-9gX1VMDC.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-DokNktqB.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-eflHNoaZ.js → wardleyDiagram-VM6X3IG4-sEs_BP6O.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-eYqrQ-v4.js → xychartDiagram-S5SC5T6Z-Ll4jvUN9.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/server/terminal_sessions.py +34 -2
- ksadk/sessions/__init__.py +8 -1
- ksadk/sessions/_checkpoint_resume_audit.py +44 -0
- ksadk/sessions/_in_memory_query.py +112 -0
- ksadk/sessions/_local_service_sync.py +157 -156
- ksadk/sessions/_local_state_sync.py +152 -0
- ksadk/sessions/_local_tables.py +2 -0
- ksadk/sessions/_postgres_checkpoint_read.py +323 -0
- ksadk/sessions/_postgres_checkpoint_stats.py +330 -0
- ksadk/sessions/_postgres_history_read.py +678 -0
- ksadk/sessions/_postgres_schema.py +44 -2
- ksadk/sessions/_postgres_tables.py +2 -0
- ksadk/sessions/_postgres_tool_receipts.py +169 -0
- ksadk/sessions/_resilient_read.py +630 -0
- ksadk/sessions/_tool_receipt_sync.py +119 -0
- ksadk/sessions/agent_identity.py +16 -0
- ksadk/sessions/base.py +278 -0
- ksadk/sessions/db_budget.py +332 -0
- ksadk/sessions/errors.py +12 -0
- ksadk/sessions/history_budget.py +36 -0
- ksadk/sessions/history_identity.py +27 -0
- ksadk/sessions/in_memory.py +376 -113
- ksadk/sessions/invocation_identity.py +235 -0
- ksadk/sessions/local_service.py +345 -0
- ksadk/sessions/postgres_service.py +515 -549
- ksadk/sessions/resilience.py +21 -14
- ksadk/sessions/resilient.py +611 -504
- ksadk/skills/__init__.py +26 -0
- ksadk/skills/events.py +464 -0
- ksadk/skills/loader.py +44 -2
- 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 +11 -0
- ksadk/skills/observability.py +132 -0
- ksadk/skills/package_store.py +75 -2
- ksadk/skills/runtime/agent.py +38 -5
- ksadk/skills/runtime/artifacts.py +87 -0
- ksadk/skills/runtime/backends/e2b.py +400 -56
- ksadk/skills/runtime/backends/local.py +621 -119
- ksadk/skills/runtime/base.py +78 -7
- ksadk/skills/runtime/executor.py +266 -1
- ksadk/skills/runtime/loader.py +108 -3
- ksadk/skills/runtime/request.py +18 -0
- ksadk/skills/service_client.py +6 -1
- ksadk/skills/tool_defs.py +108 -3
- ksadk/studio/a2a_bindings.py +407 -0
- ksadk/studio/a2a_orchestration.py +178 -0
- ksadk/studio/active_run_output.py +92 -0
- ksadk/studio/activity_records.py +542 -0
- ksadk/studio/agent_configuration.py +173 -0
- ksadk/studio/api.py +784 -419
- ksadk/studio/api_a2a_routes.py +93 -0
- ksadk/studio/api_catalog_routes.py +13 -0
- ksadk/studio/api_cloud_chat_routes.py +382 -0
- ksadk/studio/api_contracts.py +31 -2
- ksadk/studio/api_plugin_routes.py +39 -12
- ksadk/studio/api_resource_connections.py +79 -41
- ksadk/studio/attachment_store.py +14 -2
- ksadk/studio/authoring.py +12 -6
- ksadk/studio/authoring_coordinator.py +4 -2
- ksadk/studio/build_resolution.py +117 -0
- ksadk/studio/build_singleflight.py +37 -0
- ksadk/studio/builder.py +32 -2
- ksadk/studio/capabilities.py +31 -9
- ksadk/studio/channel_connections.py +333 -0
- ksadk/studio/cloud.py +113 -387
- ksadk/studio/cloud_gateways.py +424 -0
- ksadk/studio/cloud_shared_web.py +82 -2
- ksadk/studio/codex_agent_service.py +19 -2
- ksadk/studio/codex_builder.py +1 -1
- ksadk/studio/codex_manifest.py +5 -1
- ksadk/studio/codex_provider_build.py +65 -0
- ksadk/studio/codex_run.py +6 -1
- ksadk/studio/compiler.py +112 -6
- ksadk/studio/configuration.py +182 -0
- ksadk/studio/contract_base.py +19 -0
- ksadk/studio/contracts.py +260 -202
- ksadk/studio/dsh_application.py +183 -27
- ksadk/studio/dsh_capability_service.py +302 -189
- ksadk/studio/dsh_lifecycle.py +58 -0
- ksadk/studio/dsh_mcp_transport.py +191 -0
- ksadk/studio/dsh_provider_registration.py +55 -16
- ksadk/studio/entry.py +53 -0
- ksadk/studio/event_store.py +53 -5
- ksadk/studio/execution_host.py +598 -0
- ksadk/studio/framework_run.py +50 -10
- ksadk/studio/hosted_kernel.py +1 -1
- ksadk/studio/interaction_submission.py +265 -0
- ksadk/studio/kernel_registry.py +429 -0
- ksadk/studio/kernel_sqlite_migration.py +181 -0
- ksadk/studio/lifecycle_status.py +43 -0
- ksadk/studio/model_buffered_wire.py +227 -0
- ksadk/studio/model_chat_tools.py +143 -0
- ksadk/studio/model_client.py +1939 -345
- ksadk/studio/model_content_stream.py +129 -0
- ksadk/studio/model_credentials.py +196 -0
- ksadk/studio/model_profile_service.py +89 -40
- ksadk/studio/model_request_projection.py +284 -0
- ksadk/studio/model_responses_content.py +296 -0
- ksadk/studio/model_usage.py +109 -0
- ksadk/studio/model_wire_failure.py +110 -0
- ksadk/studio/model_wire_identity.py +138 -0
- ksadk/studio/model_wire_snapshot.py +45 -0
- ksadk/studio/model_wire_tools.py +283 -0
- ksadk/studio/native_acceptance.py +68 -0
- ksadk/studio/native_approval.py +111 -0
- ksadk/studio/native_browser_port.py +861 -0
- ksadk/studio/native_child_mcp.py +87 -0
- ksadk/studio/native_child_publication.py +68 -0
- ksadk/studio/native_child_skills.py +72 -0
- ksadk/studio/native_child_workspace.py +176 -0
- ksadk/studio/native_command_policy.py +53 -0
- ksadk/studio/native_context_port.py +326 -0
- ksadk/studio/native_context_registration.py +54 -0
- ksadk/studio/native_document_input.py +88 -0
- ksadk/studio/native_documents.py +172 -0
- ksadk/studio/native_final_shape.py +852 -0
- ksadk/studio/native_gateway_stream.py +69 -0
- ksadk/studio/native_hook_port.py +145 -0
- ksadk/studio/native_hook_registration.py +70 -0
- ksadk/studio/native_inventory_disclosure.py +223 -0
- ksadk/studio/native_kernel_admission.py +84 -0
- ksadk/studio/native_language_diagnostics.py +320 -0
- ksadk/studio/native_mcp_disclosure.py +198 -0
- ksadk/studio/native_mcp_tool_port.py +219 -0
- ksadk/studio/native_memory_acceptance.py +362 -0
- ksadk/studio/native_memory_context.py +266 -0
- ksadk/studio/native_memory_flush.py +174 -0
- ksadk/studio/native_memory_sources.py +80 -0
- ksadk/studio/native_memory_tool_port.py +360 -0
- ksadk/studio/native_memory_turn.py +183 -0
- ksadk/studio/native_model_port.py +765 -0
- ksadk/studio/native_model_recovery.py +126 -0
- ksadk/studio/native_options.py +75 -0
- ksadk/studio/native_output_fields.py +58 -0
- ksadk/studio/native_planning.py +156 -0
- ksadk/studio/native_product.py +988 -0
- ksadk/studio/native_read_budget.py +426 -0
- ksadk/studio/native_recovery.py +171 -0
- ksadk/studio/native_scope.py +35 -0
- ksadk/studio/native_session_context_port.py +141 -0
- ksadk/studio/native_session_engine.py +14 -0
- ksadk/studio/native_skill_source.py +74 -0
- ksadk/studio/native_subagent_port.py +700 -0
- ksadk/studio/native_terminal_recovery.py +95 -0
- ksadk/studio/native_test_action.py +610 -0
- ksadk/studio/native_tool_port.py +477 -0
- ksadk/studio/native_user_input.py +60 -0
- ksadk/studio/native_verification_presentation.py +65 -0
- ksadk/studio/native_workspace_diagnostics.py +183 -0
- ksadk/studio/native_workspace_port.py +43 -0
- ksadk/studio/operations.py +34 -9
- ksadk/studio/plugin_composition.py +39 -12
- ksadk/studio/plugin_kernel_adapter.py +89 -0
- ksadk/studio/plugin_lifecycle.py +80 -0
- ksadk/studio/plugin_native_activation.py +163 -0
- ksadk/studio/plugin_runtime.py +832 -99
- ksadk/studio/plugin_runtime_admission.py +57 -0
- ksadk/studio/presentation.py +92 -0
- ksadk/studio/provider_recovery.py +59 -0
- ksadk/studio/public_output_store.py +69 -0
- ksadk/studio/recovery_page.py +70 -0
- ksadk/studio/resource_authority.py +69 -34
- ksadk/studio/resource_catalog.py +14 -12
- ksadk/studio/run_activity.py +848 -0
- ksadk/studio/run_controls.py +185 -0
- ksadk/studio/run_documents.py +127 -0
- ksadk/studio/run_service.py +1220 -335
- ksadk/studio/run_submission_receipts.py +68 -0
- ksadk/studio/runtime_catalog.py +73 -11
- ksadk/studio/runtime_prewarm.py +22 -0
- ksadk/studio/runtime_source.py +1 -1
- ksadk/studio/scheduler_assistant.py +4 -1
- ksadk/studio/scheduler_runtime.py +32 -289
- ksadk/studio/service.py +615 -246
- ksadk/studio/service_settings.py +229 -0
- ksadk/studio/shared_web.py +518 -181
- ksadk/studio/shared_web_response_events.py +180 -0
- ksadk/studio/shared_web_run_state.py +133 -0
- ksadk/studio/skill_discovery.py +305 -3
- ksadk/studio/static/assets/ChannelsPage-xX5HlMId.js +8 -0
- ksadk/studio/static/assets/CodeBlock-DMIf4h33-CkufcPYo.js +44 -0
- ksadk/studio/static/assets/ExecutionTree-v3HexvPo-Bk8wzGSy.js +1 -0
- ksadk/studio/static/assets/MathMessageMarkdown-BesSeCYl-DYG1Wzbx.js +8 -0
- ksadk/studio/static/assets/MermaidBlock-H_0qzQDf-BdXtxug_.js +11 -0
- ksadk/studio/static/assets/MessageMarkdown-CwMTvgFj-BeyLyQHu.js +59 -0
- ksadk/studio/static/assets/PrismRenderer-5pK6tUdb.js +3 -0
- ksadk/studio/static/assets/TeamsPage-CCaaGaVp.js +3 -0
- ksadk/studio/static/assets/abnfDiagram-VCTEODGH-Bnb1O3tA.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/{blockDiagram-I7D4REHJ-CFmPl1de.js → blockDiagram-I7D4REHJ-CLB4L11u.js} +6 -6
- ksadk/studio/static/assets/{c4Diagram-7LVT6UL2-BRrGu8qt.js → c4Diagram-7LVT6UL2-BOma_Z_F.js} +7 -7
- 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-2ZTRR5NV-C2qZJila.js +2 -0
- ksadk/studio/static/assets/chunk-3Z5EZCMW-DMniOlPd.js +1 -0
- ksadk/studio/static/assets/{chunk-4HAMMTFA-D220vUtq.js → chunk-4HAMMTFA-DVtDP4rm.js} +7 -7
- ksadk/studio/static/assets/chunk-5V3GS4D5-i-ZDOEnP.js +1 -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-C4DtVpCu.js → chunk-DU6HZSFF-CpEZCUgg.js} +1 -1
- ksadk/studio/static/assets/chunk-F27PBJKO-D7pvKf0C.js +1 -0
- ksadk/studio/static/assets/{chunk-GMAD6QVW-DiQA-u2N.js → chunk-GMAD6QVW-DE_8H717.js} +6 -6
- 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-BSlbjT_b.js → chunk-IMKFNOWR-D38axYOR.js} +5 -5
- 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-M2m6G3j4.js → chunk-OSK3NFVY-DiCQjx9b.js} +5 -5
- ksadk/studio/static/assets/chunk-OUJLGHUK-D0j2JRSg.js +2 -0
- ksadk/studio/static/assets/{chunk-P2QGCYS3-DezaQxiK.js → chunk-P2QGCYS3-VdhKmfYq.js} +1 -1
- 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-DAyIVp5H.js → chunk-SHT3W25Y-DsCFnRVE.js} +9 -9
- ksadk/studio/static/assets/{chunk-SVP7TREG-DulomOrS.js → chunk-SVP7TREG-DljApgRX.js} +1 -1
- ksadk/studio/static/assets/{chunk-TICWLB2K-bHJYoflj.js → chunk-TICWLB2K-DWqRtyqa.js} +6 -6
- 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/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/dagre-GXQ25YYZ-buZBRlwz.js +4 -0
- ksadk/studio/static/assets/{diagram-S7CK7UJ4-0BZ98mya.js → diagram-S7CK7UJ4-C6aH78c4.js} +3 -3
- 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/ebnfDiagram-PWID7BFC-Daukxwqf.js +1 -0
- ksadk/studio/static/assets/{erDiagram-RLTQ6QDP-DLGry2Ap.js → erDiagram-RLTQ6QDP-CGthTMmJ.js} +6 -6
- 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/iconfont-4HN3C9Pg.woff2 +0 -0
- ksadk/studio/static/assets/index-C7DNDik2.css +2 -0
- ksadk/studio/static/assets/index-Cy68gTlH.js +265 -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/{ishikawaDiagram-5VMMS53U-CljI2wyf.js → ishikawaDiagram-5VMMS53U-BUGEl8cO.js} +2 -2
- ksadk/studio/static/assets/{journeyDiagram-3NMN7TZE-D50Fo2sL.js → journeyDiagram-3NMN7TZE-Ch2ZYxvr.js} +6 -6
- ksadk/studio/static/assets/{kanban-definition-UXKFOSKX-DimfOTam.js → kanban-definition-UXKFOSKX-Da-Fp4vC.js} +3 -3
- ksadk/studio/static/assets/kingsoft-cloud-BOcLiQ3e.ico +0 -0
- ksadk/studio/static/assets/{line-CX5BOOUP.js → line-BDaeq300.js} +1 -1
- 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-Bizzqy5R.js → mindmap-definition-YA3MSWOX-CvlsVQ38.js} +1 -1
- ksadk/studio/static/assets/packet-AYTQ26CC-BSJEH9Lb.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-B9mrFSDF.js → pieDiagram-E7YTZNPT-DlrWiSOv.js} +1 -1
- 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-NzUfCbMR.js → quadrantDiagram-AXDQQJYC-BA3hpUZM.js} +6 -6
- 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-BF3d103U.js → requirementDiagram-BXWQKSXE-E-Ge0FcV.js} +1 -1
- ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-CA6YKhQ3.js +40 -0
- ksadk/studio/static/assets/{sequenceDiagram-WJ2MYXX4-Dh4wZtUm.js → sequenceDiagram-WJ2MYXX4-CcElXGg4.js} +9 -9
- 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-DxmSSjRB.js → timeline-definition-24CTP7MA-CIuYhNy3.js} +7 -7
- 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-Ba1AOWoe.js → wardleyDiagram-VM6X3IG4-CMJiaedy.js} +1 -1
- ksadk/studio/static/assets/{xychartDiagram-S5SC5T6Z-Cr5pt5Y-.js → xychartDiagram-S5SC5T6Z-BdgtMvW2.js} +6 -6
- ksadk/studio/static/index.html +8 -2
- ksadk/studio/teams_catalog.py +166 -0
- ksadk/studio/teams_installation.py +217 -0
- ksadk/studio/teams_node.py +549 -0
- ksadk/studio/teams_node_factory.py +558 -0
- ksadk/studio/teams_node_runner.py +72 -0
- ksadk/studio/teams_node_v1.py +935 -0
- ksadk/studio/teams_remote.py +496 -0
- ksadk/studio/templates.py +41 -19
- ksadk/studio/validator.py +13 -0
- ksadk/studio/workspace.py +19 -4
- ksadk/studio/workspace_plugins.py +138 -0
- ksadk/studio/workspace_registry.py +286 -0
- ksadk/tools/a2a_policy.py +5 -0
- ksadk/tools/artifact_observation.py +53 -0
- ksadk/tools/captured_source_artifact.py +68 -0
- ksadk/tools/schema.py +34 -0
- ksadk/toolsets/__init__.py +93 -88
- ksadk/toolsets/a2a.py +89 -89
- ksadk/toolsets/sandbox.py +377 -6
- ksadk/toolsets/skill_management.py +315 -0
- ksadk/toolsets/skills.py +446 -378
- ksadk/toolsets/tool_selection.py +94 -0
- ksadk/toolsets/workspace.py +344 -326
- ksadk/toolsets/workspace_editing.py +291 -0
- ksadk/toolsets/workspace_identity.py +15 -0
- ksadk/toolsets/workspace_model_observation.py +104 -0
- ksadk/toolsets/workspace_mutation.py +75 -0
- ksadk/toolsets/workspace_read_budget.py +216 -0
- ksadk/toolsets/workspace_search.py +192 -0
- ksadk/toolsets/workspace_search_process.py +129 -0
- ksadk/toolsets/workspace_state.py +6 -0
- ksadk/version.py +1 -1
- ksadk_runtime_common/http_headers.py +18 -0
- 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 +28 -14
- agentengine_sdk_python-0.8.4.dist-info/RECORD +0 -1070
- ksadk/server/static/assets/MathMessageMarkdown-DbdW5A4_.js +0 -8
- ksadk/server/static/assets/architecture-7GRP2DOG-BW5UtSnx.js +0 -1
- ksadk/server/static/assets/channel-CF5Up3hQ.js +0 -1
- ksadk/server/static/assets/chunk-2Q5K7J3B-KkXX47WI.js +0 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Cz81acRQ.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Cz81acRQ.js +0 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DVWs8a2t.js +0 -1
- ksadk/server/static/assets/dist-B2_CVgKv.js +0 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CQqR2hg3.js +0 -1
- ksadk/server/static/assets/flowDiagram-A5DVABFB-DDRRbGPm.js +0 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-fgWEf7UD.js +0 -1
- ksadk/server/static/assets/index-DcTML1Up.css +0 -2
- ksadk/server/static/assets/index-Dh2XHqPK.js +0 -244
- ksadk/server/static/assets/info-A6RAGUB7-BUecLTdt.js +0 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BeW-btFv.js +0 -1
- ksadk/server/static/assets/pie-WAS4IAKB-X0xh4SaT.js +0 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-DzRMSqjd.js +0 -1
- ksadk/server/static/assets/railroad-74A4TZTK-Cc44icX-.js +0 -1
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-D6S4BdV-.js +0 -1
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-vD3aVE2o.js +0 -1
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-CYbW_b4T.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BIcjKFhF.js +0 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-tq3K3Ybl.js +0 -8
- ksadk/server/static/assets/treeView-Q6P3EWNA-DBXt3GdU.js +0 -1
- ksadk/server/static/assets/treemap-WGGIJYW6-DrCy4E_l.js +0 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-CefhOliM.js +0 -1
- ksadk/studio/static/assets/CodeBlock-DCUUY0PL-BLjA7kbS.js +0 -41
- ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--CUYIXwgI.js +0 -8
- ksadk/studio/static/assets/MermaidBlock-DBFTztfQ-BTYKWEbD.js +0 -44
- ksadk/studio/static/assets/PrismRenderer-wiXRHURw.js +0 -3
- ksadk/studio/static/assets/abnfDiagram-VCTEODGH-CLETGjKq.js +0 -1
- ksadk/studio/static/assets/architecture-7GRP2DOG-hXMiO_AU.js +0 -1
- ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-B5EQysk6.js +0 -36
- ksadk/studio/static/assets/channel-BqO-gtEw.js +0 -1
- ksadk/studio/static/assets/chunk-75Z2AOVW-C8lLv_qc.js +0 -2
- ksadk/studio/static/assets/chunk-F27PBJKO-Cpw14SNG.js +0 -1
- ksadk/studio/static/assets/chunk-GVQU2GXP-DUdNBUCi.js +0 -1
- ksadk/studio/static/assets/chunk-L3NEJ4N5-Db8Ab22W.js +0 -1
- ksadk/studio/static/assets/chunk-POPQ4Y6H-DOpufJ3t.js +0 -1
- ksadk/studio/static/assets/chunk-PWAF6VOD-CfLb1gSc.js +0 -1
- ksadk/studio/static/assets/chunk-XXDRQBXY-7PcdR2B1.js +0 -1
- ksadk/studio/static/assets/classDiagram-ZZMXUADV-D_bW8JjA.js +0 -1
- ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-D_bW8JjA.js +0 -1
- ksadk/studio/static/assets/cose-bilkent-JH36ORCC-snL88wkX.js +0 -1
- ksadk/studio/static/assets/cynefin-OW5HDTMX-Bd1YhRo1.js +0 -1
- ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-BBrIG_mI.js +0 -62
- ksadk/studio/static/assets/dagre-GXQ25YYZ-DtF1nGdY.js +0 -4
- ksadk/studio/static/assets/diagram-UQ7AKVKN-6mLKEo6L.js +0 -41
- ksadk/studio/static/assets/diagram-VSXAHHWV-CJBIaiZ2.js +0 -3
- ksadk/studio/static/assets/diagram-VX7I27RA-BohLEE1C.js +0 -24
- ksadk/studio/static/assets/diagram-Z3DM3KII-D8KIGonG.js +0 -24
- ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-C99HU61t.js +0 -1
- ksadk/studio/static/assets/eventmodeling-NTZA5JFV-B1_5Ac8j.js +0 -1
- ksadk/studio/static/assets/flowDiagram-HODETNUW-DD5hmicn.js +0 -1
- ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BPJrVLSG.js +0 -292
- ksadk/studio/static/assets/gitGraph-4MIJSDKK-Cy_ZQBGi.js +0 -1
- ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-CZCUz4MT.js +0 -106
- ksadk/studio/static/assets/index-CeHL9ARV.css +0 -2
- ksadk/studio/static/assets/index-D9QEcVpL.js +0 -320
- ksadk/studio/static/assets/info-A6RAGUB7-DBzDQB_I.js +0 -1
- ksadk/studio/static/assets/infoDiagram-27XIBGKW-B-sq07Hi.js +0 -2
- ksadk/studio/static/assets/linear-BCxN9JLv.js +0 -1
- ksadk/studio/static/assets/mermaid-parser.core-BdCz8fkS.js +0 -7
- ksadk/studio/static/assets/packet-AYTQ26CC-gPln-_kG.js +0 -1
- ksadk/studio/static/assets/pegDiagram-XKGWAZYB-Dy3fB-gW.js +0 -1
- ksadk/studio/static/assets/pie-WAS4IAKB-qZdHMr7B.js +0 -1
- ksadk/studio/static/assets/radar-RG4KPBEZ-BZlnaea9.js +0 -1
- ksadk/studio/static/assets/railroad-74A4TZTK-Ce3__H9c.js +0 -1
- ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-DqQn7EzD.js +0 -1
- ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-B55kCA8F.js +0 -1
- ksadk/studio/static/assets/railroad-peg-WCYAUIDC-DfQnvkHd.js +0 -1
- ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-DnhMjZCk.js +0 -1
- ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-Bo-JTwt0.js +0 -40
- ksadk/studio/static/assets/src-SFn9St9H.js +0 -1
- ksadk/studio/static/assets/stateDiagram-D77RDMKH-DH774G6d.js +0 -1
- ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-DZvVWPBo.js +0 -1
- ksadk/studio/static/assets/swimlanes-42K2YHIH-Bl13OvTX.js +0 -1
- ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-BnFOTALJ.js +0 -8
- ksadk/studio/static/assets/treeView-Q6P3EWNA-D5Nn9Swz.js +0 -1
- ksadk/studio/static/assets/treemap-WGGIJYW6-CgHgnQhE.js +0 -1
- ksadk/studio/static/assets/vennDiagram-4TSXK5OY-B9QEXcJq.js +0 -34
- ksadk/studio/static/assets/wardley-WFR3VGLG-DXrK2RRY.js +0 -1
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.6.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.6.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.6.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.6.dist-info}/top_level.txt +0 -0
- /ksadk/studio/static/assets/{MathMessageMarkdown-CBcDrAw--BEOyPC3w.css → MathMessageMarkdown-BesSeCYl-BEOyPC3w.css} +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ExecutionTree-v3HexvPo-Bk8wzGSy.js","assets/rolldown-runtime-hePW80VL.js","assets/react-vendor-BNmTiJ-I.js","assets/rolldown-runtime-Dy4uBu1J-DK3Fl9T5.js","assets/presentation-yYw7xK60-BmcZriri.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-vendor-BNmTiJ-I.js";import{t as r}from"./preload-helper-CO68xz6u.js";import{a as i}from"./MessageMarkdown-CwMTvgFj-BeyLyQHu.js";import{$ as a,C as o,D as s,E as c,P as l,Q as u,R as d,S as f,T as p,U as m,V as h,X as g,Z as _,_ as v,a as y,b,f as x,g as S,h as C,i as w,m as T,n as E,o as D,p as O,r as ee,s as k,v as A,w as j,x as M,y as N}from"./index-Cy68gTlH.js";import{i as P,n as F,o as te,r as ne,s as re,t as ie}from"./presentation-yYw7xK60-BmcZriri.js";var I=e(t(),1),ae=`teams.ksadk.io/v1`,L=o().min(1).max(2048),R=N().int().nonnegative(),z=o().min(1),B=x([`planning`,`running`,`waiting`,`needs_attention`,`awaiting_acceptance`,`succeeded`,`failed`,`cancel_requested`,`cancelled`]),oe=x([`draft`,`ready`,`blocked`,`running`,`awaiting_acceptance`,`succeeded`,`failed`,`cancel_requested`,`cancelled`]),V=b({authorityRef:L,groupId:L,memberId:L,bindingRef:L,providerRef:L,sessionId:L,runId:L,itemId:L.optional()}).passthrough(),se=V.extend({interactionId:L}),ce=b({enqueue:C(),cancel:C(),steer:C(),restore:C(),interaction:C(),leader:C()}).passthrough(),le=b({groupId:L,name:o().min(1),authorityRef:L,tenantId:L,ownerSubject:L,policy:b({taskAcceptance:x([`leader`,`human`,`result`]),peerWake:C()}).optional(),leaderMemberId:L,revision:R,status:x([`active`,`archived`]),createdAt:z,updatedAt:z}).passthrough(),ue=b({memberId:L,groupId:L,name:o().min(1),role:x([`leader`,`member`]),responsibility:o().max(2e3).optional(),bindingRef:L,binding:b({bindingRef:L,providerRef:L,kind:x([`local_build`,`a2a`,`cloud`]),agentId:L,capabilities:ce}).passthrough(),sessionId:L,revision:R,status:x([`active`,`removed`,`unavailable`]),executionStatus:x([`idle`,`queued`,`running`,`waiting`,`needs_attention`,`unavailable`])}).passthrough(),de=ue.extend({runMemberId:L,teamRunId:L,groupRevision:R}),fe=S(`kind`,[b({kind:A(`text`),text:o()}),b({kind:A(`attachment`),attachmentRef:L,mediaType:L,name:o().optional()})]),pe=b({messageId:L,groupId:L,revision:R,createdAt:z,senderPrincipal:L,senderName:o(),groupRole:x([`owner`,`leader`,`member`,`system`]),parts:T(fe),mentions:T(L),intent:x([`start_goal`,`followup`,`directed`,`note`,`result`,`progress`]),sourceRefs:T(V).optional(),visibility:x([`public`,`internal`])}).passthrough(),me=b({artifactId:L,name:o(),mediaType:L,source:V}).passthrough(),he=b({attemptId:L,attemptNumber:R,executionEpoch:R,status:oe,source:V.optional(),artifacts:T(me)}).passthrough(),ge=b({taskId:L,groupId:L,teamRunId:L,revision:R,title:o().min(1),description:o(),ownerMemberId:L.nullable(),dependencies:T(L),status:oe,acceptanceCriteria:o(),attempts:T(he)}).passthrough(),_e=b({sourcePath:o().min(1),baseRef:o().optional(),inputs:T(o()).optional(),mode:x([`auto`,`directory`]).optional()}).passthrough(),H=b({groupId:L,teamRunId:L,state:x([`armed`,`blocked`,`active`]),primaryNodeId:L,primarySessionId:L,primaryBindingRef:L,standbyNodeId:L,standbyBindingRef:L,buildDigest:L,epoch:R,reason:o().nullable().optional(),automaticFailback:A(!1),sessionId:L.optional(),checkpointId:L.optional()}).passthrough(),ve=b({teamRunId:L,groupId:L,groupRevision:R,policy:le.shape.policy,revision:R,goalMessageId:L,goal:o(),result:o().optional(),resultHistory:T(b({result:o(),reason:o(),revision:R,requestedAt:z}).passthrough()).optional(),workspace:_e.nullable().optional(),leaderStandby:H.nullable().optional(),leaderMemberId:L,status:B,dispatchSuspended:C(),dispatchEpoch:R,budget:b({maxMembers:R,maxConcurrent:R,maxStarts:R,startsUsed:R,maxHops:R}).passthrough(),createdAt:z,updatedAt:z}).passthrough(),ye=b({deliveryId:L,groupId:L,teamRunId:L,messageId:L,memberId:L,revision:R,status:x([`pending`,`accepted`,`rejected`,`uncertain`,`cancelled`])}).passthrough(),be=b({ref:se,revision:R,title:o(),message:o(),kind:x([`approval`,`input`]),status:x([`pending`,`resolving`,`resolved`,`cancelled`,`expired`]),createdAt:z}).passthrough(),xe=b({apiVersion:A(ae),group:le,watermark:R,members:T(ue),runMembers:T(de).optional(),messages:T(pe),tasks:T(ge),teamRuns:T(ve),deliveries:T(ye),interactions:T(be),artifacts:T(me).optional()}).passthrough(),Se=b({apiVersion:A(ae),eventId:L,groupId:L,groupSeq:N().int().positive(),type:L,createdAt:z,payload:M(o(),p())}).passthrough(),Ce=b({nodeId:L,kind:x([`task`,`run`,`child_invocation`]),title:o(),status:L,taskId:L.optional(),memberId:L.nullable().optional(),attemptId:L.optional(),source:V.nullable().optional(),parentNodeId:L.optional(),reason:o().nullable().optional()}).passthrough(),we=b({groupId:L,teamRunId:L,watermark:R,nodes:T(Ce),edges:T(b({source:L,target:L,kind:x([`dependency`,`invocation`])}).passthrough())}).passthrough();function Te(e){let t=we.safeParse(e);if(!t.success)throw new U(`contract_mismatch`,`执行视图格式不兼容,请刷新或更新客户端。`);let n=t.data,r=new Set(n.nodes.map(e=>e.nodeId));if(r.size!==n.nodes.length||n.edges.some(e=>!r.has(e.source)||!r.has(e.target))||n.nodes.some(e=>e.source&&e.source.groupId!==n.groupId))throw new U(`scope_mismatch`,`执行视图包含无效的节点引用。`);return n}var U=class extends Error{code;status;constructor(e,t,n){super(t),this.name=`TeamsError`,this.code=e,this.status=n}};function Ee(e){let t=xe.safeParse(e);if(!t.success)throw new U(`contract_mismatch`,`群快照格式不兼容,请刷新或更新客户端。`);let n=t.data,r=n.group.groupId;if([n.runMembers||[],n.members,n.messages,n.tasks,n.teamRuns,n.deliveries].some(e=>e.some(e=>e.groupId!==r))||n.interactions.some(e=>e.ref.groupId!==r||e.ref.authorityRef!==n.group.authorityRef))throw new U(`scope_mismatch`,`群快照包含其他作用域的数据。`);if([...(n.artifacts||[]).map(e=>e.source),...n.messages.flatMap(e=>e.sourceRefs||[]),...n.tasks.flatMap(e=>e.attempts.flatMap(e=>[...e.source?[e.source]:[],...e.artifacts.map(e=>e.source)]))].some(e=>e.groupId!==r||e.authorityRef!==n.group.authorityRef))throw new U(`scope_mismatch`,`群快照的产物或执行来源跨越作用域。`);let i=e=>new Set(e).size===e.length;if(!i((n.runMembers||[]).map(e=>e.runMemberId))||(n.runMembers||[]).some(e=>!n.teamRuns.some(t=>t.teamRunId===e.teamRunId))||!i((n.artifacts||[]).map(e=>e.artifactId))||!i(n.members.map(e=>e.memberId))||!i(n.messages.map(e=>e.messageId))||!i(n.tasks.map(e=>e.taskId))||!i(n.teamRuns.map(e=>e.teamRunId))||!i(n.deliveries.map(e=>e.deliveryId))||!i(n.interactions.map(e=>JSON.stringify(e.ref))))throw new U(`contract_mismatch`,`群快照存在重复身份。`);return n}function De(e){let t=Se.safeParse(e);if(!t.success)throw new U(`contract_mismatch`,`群事件格式不兼容。`);return t.data}function Oe(e){if(!e.name.trim())throw new U(`invalid_name`,`请填写群组名称。`);if(!e.members.length||e.members.length>8)throw new U(`invalid_members`,`请选择 1–8 位成员。`);if(new Set(e.members.map(e=>e.memberId)).size!==e.members.length)throw new U(`duplicate_member`,`成员不能重复。`);if(!e.members.some(t=>t.memberId===e.leaderMemberId))throw new U(`invalid_leader`,`Leader 必须是已选成员。`)}function ke(e){return JSON.stringify([e.authorityRef,e.groupId,e.memberId,e.bindingRef,e.providerRef,e.sessionId,e.runId])}function Ae(e){return JSON.stringify([ke(e),e.interactionId])}function je(e,t,n){let r=e.findIndex(e=>n(e)===n(t));return r>=0&&e[r].revision>=t.revision?e:r<0?[...e,t]:e.map((e,n)=>n===r?t:e)}var Me=class{value;seenIds=new Set;constructor(e){this.value=Ee(e)}snapshot(){return this.value}replace(e){let t=Ee(e);if(t.group.groupId!==this.value.group.groupId||t.group.authorityRef!==this.value.group.authorityRef||t.group.tenantId!==this.value.group.tenantId)throw new U(`scope_mismatch`,`不能把另一个群或授权域的快照用于当前会话。`);return t.watermark<this.value.watermark||t.group.revision<this.value.group.revision?!1:(this.value=t,this.seenIds.clear(),!0)}apply(e){let t=De(e),n=this.value;if(t.groupId!==n.group.groupId)throw new U(`scope_mismatch`,`事件不属于当前群。`);if(t.groupSeq<=n.watermark)return!1;if(t.groupSeq!==n.watermark+1||this.seenIds.has(t.eventId))throw new U(`reset_required`,`群事件存在缺口,需要重新读取快照。`);let r={...n,watermark:t.groupSeq},i=(e,t)=>{let r;try{r=e.parse(t)}catch{throw new U(`contract_mismatch`,`群事件内容格式不兼容。`)}let i=r;if(i.groupId&&i.groupId!==n.group.groupId||i.ref&&(i.ref.groupId!==n.group.groupId||i.ref.authorityRef!==n.group.authorityRef))throw new U(`scope_mismatch`,`群事件引用了其他作用域。`);if([...i.source?[i.source]:[],...i.sourceRefs||[],...(i.attempts||[]).flatMap(e=>[...e.source?[e.source]:[],...e.artifacts.map(e=>e.source)])].some(e=>e.groupId!==n.group.groupId||e.authorityRef!==n.group.authorityRef))throw new U(`scope_mismatch`,`群事件的产物或执行来源跨越作用域。`);return r};switch(t.type){case`group.updated`:{let e=i(le,t.payload.group);if(e.groupId!==n.group.groupId||e.authorityRef!==n.group.authorityRef||e.tenantId!==n.group.tenantId)throw new U(`scope_mismatch`,`群事件改变了授权域。`);e.revision>n.group.revision&&(r.group=e);break}case`run_member.updated`:r.runMembers=je(n.runMembers||[],i(de,t.payload.runMember),e=>e.runMemberId);break;case`member.updated`:r.members=je(n.members,i(ue,t.payload.member),e=>e.memberId);break;case`message.created`:case`message.updated`:r.messages=je(n.messages,i(pe,t.payload.message),e=>e.messageId);break;case`task.updated`:r.tasks=je(n.tasks,i(ge,t.payload.task),e=>e.taskId);break;case`team_run.updated`:r.teamRuns=je(n.teamRuns,i(ve,t.payload.teamRun),e=>e.teamRunId);break;case`delivery.updated`:r.deliveries=je(n.deliveries,i(ye,t.payload.delivery),e=>e.deliveryId);break;case`artifact.updated`:{let e=i(me,t.payload.artifact);r.artifacts=[...new Map([...n.artifacts||[],e].map(e=>[e.artifactId,e])).values()];break}case`interaction.updated`:r.interactions=je(n.interactions,i(be,t.payload.interaction),e=>Ae(e.ref))}return this.seenIds.add(t.eventId),this.seenIds.size>2048&&this.seenIds.delete(this.seenIds.values().next().value),this.value=r,!0}};function Ne(e){if(e?.aborted)throw new DOMException(`Aborted`,`AbortError`)}function Pe(e,t){return new Promise((n,r)=>{Ne(t);let i=()=>t.removeEventListener(`abort`,o),a=setTimeout(()=>{i(),n()},e),o=()=>{clearTimeout(a),i(),r(new DOMException(`Aborted`,`AbortError`))};t.addEventListener(`abort`,o,{once:!0})})}async function Fe(e,t,n){if(!e.body||!e.headers.get(`content-type`)?.includes(`text/event-stream`))throw new U(`contract_mismatch`,`服务没有返回事件流。`);let r=e.body.getReader(),i=new TextDecoder,a=``,o=()=>{r.cancel().catch(()=>{})};t.addEventListener(`abort`,o,{once:!0});let s=e=>{Ne(t);let r=`message`,i=[];for(let t of e.split(/\r?\n/))t.startsWith(`event:`)&&(r=t.slice(6).trim()),t.startsWith(`data:`)&&i.push(t.slice(5).trimStart());if(!i.length)return;let a;try{a=JSON.parse(i.join(`
|
|
3
|
+
`))}catch{throw new U(`contract_mismatch`,`无法解析群事件。`)}n(r,a)};try{for(;;){Ne(t);let{done:e,value:n}=await r.read();if(Ne(t),a+=e?i.decode():i.decode(n,{stream:!0}),a.length>8e6)throw new U(`event_too_large`,`群事件超过客户端大小限制。`);let o=/\r?\n\r?\n/.exec(a);for(;o;)s(a.slice(0,o.index)),a=a.slice(o.index+o[0].length),o=/\r?\n\r?\n/.exec(a);if(e){a.trim()&&s(a);break}}}finally{t.removeEventListener(`abort`,o),await r.cancel().catch(()=>{}),r.releaseLock()}}var Ie=class{fetcher;baseUrl;reconnects;retryDelay;constructor(e={}){if(this.fetcher=e.fetch??((e,t)=>globalThis.fetch(e,t)),this.baseUrl=(e.baseUrl??`/api/v1/groups`).replace(/\/+$/,``),this.reconnects=e.maxReconnects??6,!Number.isSafeInteger(this.reconnects)||this.reconnects<0||this.reconnects>32)throw new U(`invalid_reconnect_limit`,`重连次数必须在 0–32 之间。`);this.retryDelay=e.retryDelayMs??(e=>Math.min(500*2**e,1e4))}path(e,t=``){return`/${encodeURIComponent(e)}${t}`}async request(e,t={}){Ne(t.signal??void 0);let n=await this.fetcher(`${this.baseUrl}${e}`,t);if(!n.ok){let e=await n.json().catch(()=>({}));throw new U(e.error?.code??e.code??`http_error`,e.error?.message??e.message??`群服务请求失败(${n.status})`,n.status)}return n}async json(e,t={}){let n=await this.request(e,t);return n.status===204?void 0:n.json()}post(e,t,n){return this.json(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t),signal:n})}list(e={}){let t=new URLSearchParams;return e.cursor&&t.set(`cursor`,e.cursor),e.limit&&t.set(`limit`,String(e.limit)),this.json(t.size?`?${t}`:``,{signal:e.signal})}async snapshot(e,t){let n=Ee(await this.json(this.path(e),{signal:t}));if(n.group.groupId!==e)throw new U(`scope_mismatch`,`服务返回了另一个群。`);return n}async create(e,t){return Oe(e),Ee(await this.post(``,e,t))}async update(e,t,n){let r=Ee(await this.json(this.path(e),{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t),signal:n}));if(r.group.groupId!==e)throw new U(`scope_mismatch`,`群更新返回了另一个群。`);return r}send(e,t,n){if(!t.parts.some(e=>e.kind!==`text`||e.text.trim()))throw new U(`empty_message`,`请输入消息。`);if(t.workspace&&t.intent!==`start_goal`)throw new U(`invalid_workspace_scope`,`工作目录只能在新建任务时指定。`);if(t.intent===`directed`&&!t.mentions.length)throw new U(`missing_recipient`,`请选择接收成员。`);return this.post(this.path(e,`/messages`),t,n)}start(e,t,n){return this.post(this.path(e,`/team-runs`),t,n)}taskAction(e,t,n,r){return this.post(this.path(e,`/tasks/${encodeURIComponent(t)}/actions`),n,r)}control(e,t,n,r){return this.post(this.path(e,`/team-runs/${encodeURIComponent(t)}/control`),n,r)}acceptRun(e,t,n,r){return this.post(this.path(e,`/team-runs/${encodeURIComponent(t)}/acceptance`),n,r)}async configureLeaderStandby(e,t,n,r){if(!n.bindingRef.trim())throw new U(`missing_binding`,`请选择云端备用节点。`);let i=await this.post(this.path(e,`/team-runs/${encodeURIComponent(t)}/leader-standby`),n,r);if(i.groupId!==e||i.teamRunId!==t||i.standbyBindingRef!==n.bindingRef||![`armed`,`blocked`,`active`].includes(i.state))throw new U(`scope_mismatch`,`备用节点确认不属于当前任务或所选节点。`);return i}interaction(e,t,n){if(t.ref.groupId!==e)throw new U(`scope_mismatch`,`审批不属于当前群。`);return this.post(this.path(e,`/interactions`),t,n)}cancelMember(e,t,n,r){if(n.ref.groupId!==e||n.ref.memberId!==t)throw new U(`scope_mismatch`,`停止请求不属于当前成员。`);return this.post(this.path(e,`/members/${encodeURIComponent(t)}/cancel`),n,r)}async execution(e,t,n){let r=Te(await this.json(this.path(e,`/execution${t?`?teamRunId=${encodeURIComponent(t)}`:``}`),{signal:n}));if(r.groupId!==e||t&&r.teamRunId!==t)throw new U(`scope_mismatch`,`执行视图不属于当前协作轮次。`);return r}markRead(e,t,n){return this.post(this.path(e,`/read`),{watermark:t},n)}async reconciliation(e,t){let n=await this.json(this.path(e,`/reconciliation`));if(n.groupId!==e||!Array.isArray(n.items))throw new U(`scope_mismatch`,`原单核查结果不属于当前团队。`);return n.items.filter(e=>e.teamRunId===t)}reconcile(e,t,n){return this.post(this.path(e,`/reconciliation/${encodeURIComponent(t)}`),n)}async watch(e,t){let{signal:n,onSnapshot:r,onConnection:i,onError:a}=t,o,s=!0,c=0;i?.(`connecting`);try{for(;!n.aborted;)try{if(s){let t=await this.snapshot(e,n);if(o){if(!o.replace(t))throw new U(`reset_required`,`服务返回的快照早于当前状态,正在重新核对。`)}else o=new Me(t);s=!1,Ne(n),r(o.snapshot())}if(!o)throw new U(`reset_required`,`群快照尚未就绪。`);let t=await this.request(this.path(e,`/events?after=${o.snapshot().watermark}`),{signal:n});throw i?.(`connected`),await Fe(t,n,(e,t)=>{if(e===`reset_required`)throw new U(`reset_required`,`群事件游标已过期。`);e===`heartbeat`||e===`ping`||o.apply(De(t))&&(c=0,r(o.snapshot()))}),Ne(n),new U(`stream_ended`,`群事件连接已断开。`)}catch(e){if(n.aborted)break;let t=e instanceof U?e:new U(`network_error`,e instanceof Error?e.message:`无法连接群服务。`);if(t.code===`reset_required`)s=!0;else if(t.status===401||t.status===403||t.status===404||t.code===`contract_mismatch`||t.code===`scope_mismatch`)throw t;if(c++>=this.reconnects)throw t;i?.(`reconnecting`),await Pe(this.retryDelay(c-1),n)}}catch(e){if(!n.aborted){i?.(`offline`);let t=e instanceof U?e:new U(`network_error`,String(e));throw a?.(t),t}}finally{n.aborted&&i?.(`closed`)}}},Le=class extends Error{constructor(){super(`invalid_teams_canonical_json`),this.name=`TeamsCanonicalJsonError`}};function Re(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n>=55296&&n<=56319){let n=e.charCodeAt(++t);if(!(n>=56320&&n<=57343))return!1}else if(n>=56320&&n<=57343)return!1}return!0}function W(e){let t=new Set,n=()=>{throw new Le},r=(e,i)=>{if(i>50)return n();if(e===null||typeof e==`boolean`)return JSON.stringify(e);if(typeof e==`string`)return Re(e)?JSON.stringify(e):n();if(typeof e==`number`)return!Number.isFinite(e)||Number.isInteger(e)&&!Number.isSafeInteger(e)?n():JSON.stringify(e);if(!e||typeof e!=`object`||t.has(e)||Object.getOwnPropertySymbols(e).length||!Array.isArray(e)&&Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return n();t.add(e);let a;if(Array.isArray(e)){if(Object.getOwnPropertyNames(e).length!==e.length+1)return n();let t=[];for(let a=0;a<e.length;a++){let o=Object.getOwnPropertyDescriptor(e,a);if(!o||!(`value`in o))return n();t.push(r(o.value,i+1))}a=`[${t.join(`,`)}]`}else{let t=Object.keys(e).sort();if(Object.getOwnPropertyNames(e).length!==t.length)return n();a=`{${t.map(t=>{if(!Re(t))return n();let a=Object.getOwnPropertyDescriptor(e,t);return!a||!(`value`in a)?n():`${JSON.stringify(t)}:${r(a.value,i+1)}`}).join(`,`)}}`}return t.delete(e),a};return r(e,0)}async function ze(e,t=globalThis.crypto.subtle){let n=await t.digest(`SHA-256`,new TextEncoder().encode(W(e)));return`sha256:${Array.from(new Uint8Array(n),e=>e.toString(16).padStart(2,`0`)).join(``)}`}function Be(e,t){let n=Array.from(e,e=>e.codePointAt(0)),r=Array.from(t,e=>e.codePointAt(0));for(let e=0;e<Math.min(n.length,r.length);e++)if(n[e]!==r[e])return n[e]-r[e];return n.length-r.length}var Ve=class extends Error{code;constructor(e){super(e),this.name=`TeamsOperationOutboxError`,this.code=e}},He=`teams_operations`,Ue=[`scope.origin`,`scope.ownerScopeRef`,`scope.authorityId`,`scope.groupId`],We=new Set([`confirmed`,`rejected`]),Ge=new Set([`authorization`,`proxyauthorization`,`cookie`,`setcookie`,`credentials`,`headers`,`password`,`secret`,`secretkey`,`accesskey`,`accesskeyid`,`accesskeysecret`,`apikey`,`token`,`tokenref`,`accesstoken`,`refreshtoken`,`refreshsecret`,`privatekey`,`clientsecret`,`nodecredential`,`runtimetoken`,`signedurl`,`presignedurl`]),Ke=new Set([`requestId`,`idempotencyKey`,`transportTimestamp`,`transportTime`]);function G(e){throw new Ve(e)}function qe(e,t=200,n=!1){return(typeof e!=`string`||!n&&!e.trim()||e.length>t||Array.from(e).some(e=>e.charCodeAt(0)<32))&&G(`invalid_operation_identity`),e}function Je(e,t,n=!0){(!e||Array.isArray(e)||typeof e!=`object`)&&G(`invalid_business_payload`),n&&Object.keys(e).some(e=>Ke.has(e))&&G(`transport_metadata_not_allowed`);let r;try{r=W(e)}catch{G(`invalid_business_payload`)}new TextEncoder().encode(r).byteLength>t&&G(`payload_too_large`);let i=e=>{if(Array.isArray(e))e.forEach(i);else if(e&&typeof e==`object`)for(let[t,n]of Object.entries(e))Ge.has(t.toLowerCase().replace(/[^a-z0-9]/g,``))&&G(`credentials_not_allowed`),i(n)};return i(e),{payload:JSON.parse(r),json:r}}function Ye(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}function Xe(e){return[e.origin,e.ownerScopeRef,e.authorityId,e.groupId]}function Ze(e,t,n){return(!Number.isSafeInteger(e)||e<t||e>n)&&G(`invalid_outbox_limit`),e}var Qe=class{scope;factory;cryptography;now;databaseName;maxEntries;maxPayloadBytes;database;closed=!1;constructor(e){let{origin:t,ownerScopeRef:n,authorityId:r,groupId:i}=e.scope,a;try{a=new URL(t)}catch{G(`invalid_operation_origin`)}(a.origin!==t||![`http:`,`https:`].includes(a.protocol))&&G(`invalid_operation_origin`),this.scope=Object.freeze({origin:t,ownerScopeRef:qe(n,512),authorityId:qe(r),groupId:qe(i,200,!0)}),this.factory=e.indexedDB??globalThis.indexedDB,this.cryptography=e.crypto??globalThis.crypto,(!this.factory||!this.cryptography?.subtle||!this.cryptography.randomUUID)&&G(`outbox_unavailable`),this.now=e.now??Date.now,this.databaseName=e.databaseName??`ksadk-teams-operations`,this.maxEntries=Ze(e.maxEntries??1e3,1,1e4),this.maxPayloadBytes=Ze(e.maxPayloadBytes??1048576,1,2097152)}async open(){return this.closed&&G(`outbox_closed`),this.database||=new Promise((e,t)=>{let n=this.factory.open(this.databaseName,1);n.onupgradeneeded=()=>{let e=n.result.createObjectStore(He,{keyPath:[...Ue,`operationId`]});e.createIndex(`scope`,Ue),e.createIndex(`scope_key`,[...Ue,`operation`,`idempotencyKey`],{unique:!0})},n.onsuccess=()=>{n.result.onversionchange=()=>{n.result.close(),this.closed=!0},e(n.result)},n.onerror=()=>t(new Ve(`outbox_unavailable`)),n.onblocked=()=>t(new Ve(`outbox_upgrade_blocked`))}),this.database}key(e){return[...Xe(this.scope),qe(e)]}async transaction(e,t){let n=(await this.open()).transaction(He,e,{durability:e===`readwrite`?`strict`:`default`}),r=new Promise((e,t)=>{n.oncomplete=()=>e(),n.onabort=()=>t(n.error??new Ve(`outbox_transaction_aborted`)),n.onerror=()=>{}});r.catch(()=>void 0);try{let e=await t(n.objectStore(He));return await r,e}catch(e){try{n.abort()}catch{}throw await r.catch(()=>void 0),e}}async digest(e,t){return ze({operation:e,payload:JSON.parse(t)},this.cryptography.subtle)}async enqueue(e,t={}){let n=qe(e.operationId??this.cryptography.randomUUID()),r=qe(e.operation,512);(!/^[a-zA-Z0-9_.:/-]+$/.test(r)||r.includes(`://`))&&G(`invalid_business_operation`);let i=qe(e.idempotencyKey??this.cryptography.randomUUID()),{payload:a,json:o}=Je(e.payload,this.maxPayloadBytes),s=await this.digest(r,o);return this.transaction(`readwrite`,async o=>{let c=await Ye(o.get(this.key(n)));if(c)return(c.payloadDigest!==s||c.operation!==r||e.idempotencyKey!==void 0&&c.idempotencyKey!==i)&&G(`operation_payload_conflict`),c;let l=await Ye(o.index(`scope`).getAll(Xe(this.scope))),u=t.reuseUnresolved&&l.find(e=>e.operation===r&&e.payloadDigest===s&&!We.has(e.status));if(u)return u;await Ye(o.index(`scope_key`).get([...Xe(this.scope),r,i]))&&G(`idempotency_key_conflict`);let d=l.filter(e=>We.has(e.status)).sort((e,t)=>e.updatedAt-t.updatedAt),f=l.length;for(;f>=this.maxEntries&&d.length;)await Ye(o.delete(this.key(d.shift().operationId))),f--;f>=this.maxEntries&&G(`outbox_capacity`);let p=this.now(),m={scope:{...this.scope},operationId:n,operation:r,idempotencyKey:i,payload:a,payloadDigest:s,createdAt:p,updatedAt:p,status:`queued`,revision:1,attempts:0};return await Ye(o.add(m)),m})}async get(e){return this.transaction(`readonly`,async t=>await Ye(t.get(this.key(e))))}async list(e={}){let t=Ze(e.limit??100,1,1e4);return this.transaction(`readonly`,async n=>(await Ye(n.index(`scope`).getAll(Xe(this.scope)))).filter(t=>!e.statuses||e.statuses.includes(t.status)).sort((e,t)=>e.createdAt-t.createdAt||e.operationId.localeCompare(t.operationId)).slice(0,t))}async updateDraft(e,t,n){let r=await this.get(e);r||G(`operation_not_found`);let{payload:i,json:a}=Je(n,this.maxPayloadBytes),o=await this.digest(r.operation,a);return this.transaction(`readwrite`,async n=>{let r=await Ye(n.get(this.key(e)));r||G(`operation_not_found`),r.revision!==t&&G(`operation_revision_conflict`),(r.status!==`queued`||r.attempts!==0)&&G(`operation_already_sent`);let a={...r,payload:i,payloadDigest:o,revision:r.revision+1,updatedAt:this.now()};return await Ye(n.put(a)),a})}async claimNext(e,t,n=new Set){qe(e),Ze(t,100,12e4);let r=this.cryptography.randomUUID();return this.transaction(`readwrite`,async i=>{let a=this.now(),o=(await Ye(i.index(`scope`).getAll(Xe(this.scope)))).filter(e=>!We.has(e.status)&&!n.has(e.operationId)&&(!e.leaseExpiresAt||e.leaseExpiresAt<=a)).sort((e,t)=>e.attempts-t.attempts||e.createdAt-t.createdAt||e.operationId.localeCompare(t.operationId))[0];if(!o)return;let s={...o,status:`sending`,leaseOwner:e,leaseToken:r,leaseExpiresAt:a+t,attempts:o.attempts+1,revision:o.revision+1,updatedAt:a};return await Ye(i.put(s)),s})}owns(e,t){return!!(e&&Xe(t.scope).every((e,t)=>e===Xe(this.scope)[t])&&e.status===`sending`&&e.leaseOwner===t.leaseOwner&&e.leaseToken===t.leaseToken&&e.leaseExpiresAt>this.now())}async renew(e,t){return Ze(t,100,12e4),this.transaction(`readwrite`,async n=>{let r=await Ye(n.get(this.key(e.operationId)));return this.owns(r,e)?(await Ye(n.put({...r,leaseExpiresAt:this.now()+t,updatedAt:this.now()})),!0):!1})}async settle(e,t,n){[`confirmed`,`rejected`,`uncertain`,`pending`].includes(t.status)||G(`invalid_operation_receipt`);let r=t.serverOperationId===void 0?void 0:qe(t.serverOperationId),i=`receipt`in t&&t.receipt!==void 0?Je(t.receipt,this.maxPayloadBytes,!1).payload:void 0,a=t.status===`rejected`?t.code:n??(t.status===`pending`?`pending`:void 0);return a!==void 0&&!/^[a-z][a-z0-9_]{0,99}$/.test(a)&&G(`invalid_operation_error_code`),this.transaction(`readwrite`,async n=>{let o=await Ye(n.get(this.key(e.operationId)));if(!this.owns(o,e))return!1;let s={...o,status:t.status===`pending`?`uncertain`:t.status,updatedAt:this.now(),revision:o.revision+1};return delete s.leaseOwner,delete s.leaseToken,delete s.leaseExpiresAt,delete s.errorCode,delete s.receipt,r!==void 0&&(s.serverOperationId=r),i!==void 0&&(s.receipt=i),a!==void 0&&(s.errorCode=a),await Ye(n.put(s)),!0})}async close(){this.closed=!0,this.database&&(await this.database).close()}},$e=class{outbox;transport;tabId;active;deactivated=!1;constructor(e,t,n=globalThis.crypto.randomUUID()){this.outbox=e,this.transport=t,this.tabId=qe(n)}deactivate(){this.deactivated=!0,this.active?.abort()}async drain(e={}){this.deactivated&&G(`outbox_identity_inactive`),this.active&&G(`outbox_drain_in_progress`);let t=Ze(e.maxOperations??50,1,1e3),n=Ze(e.maxDurationMs??3e4,1,12e4),r=Ze(e.requestTimeoutMs??1e4,1,12e4),i=Ze(e.leaseMs??15e3,100,12e4),a=new AbortController;this.active=a;let o=()=>a.abort();e.signal?.addEventListener(`abort`,o,{once:!0}),e.signal?.aborted&&o();let s=setTimeout(o,n),c={processed:0,confirmed:0,rejected:0,uncertain:0,aborted:!1},l=new Set;try{for(;!a.signal.aborted&&c.processed<t;){let e=await this.outbox.claimNext(this.tabId,i,l);if(!e)break;l.add(e.operationId),c.processed++;let t=await this.recover(e,a.signal,i,r);t!==void 0&&c[t]++}return c.aborted=a.signal.aborted,c}finally{clearTimeout(s),e.signal?.removeEventListener(`abort`,o),this.active=void 0}}async recover(e,t,n,r){let i=new AbortController,a=()=>i.abort();t.addEventListener(`abort`,a,{once:!0}),t.aborted&&a();let o=!1,s=setInterval(()=>{o||i.signal.aborted||(o=!0,this.outbox.renew(e,n).then(e=>{e||a()},a).finally(()=>{o=!1}))},Math.floor(n/3));try{let t=await this.call(t=>this.transport.lookup(structuredClone(e),t),i.signal,r);return t.status===`missing`&&((i.signal.aborted||!await this.outbox.renew(e,n))&&G(`operation_aborted`),t=await this.call(t=>this.transport.send(structuredClone(e),t),i.signal,r)),i.signal.aborted&&G(`operation_aborted`),await this.outbox.settle(e,t)?t.status===`pending`?`uncertain`:t.status:void 0}catch(n){let r=t.aborted?`aborted`:n instanceof Ve&&n.code===`operation_timeout`?`timeout`:`transport_uncertain`;return await this.outbox.settle(e,{status:`uncertain`},r)?`uncertain`:void 0}finally{clearInterval(s),t.removeEventListener(`abort`,a),i.abort()}}async call(e,t,n){t.aborted&&G(`operation_aborted`);let r=new AbortController,i=()=>void 0,a,o=new Promise((e,o)=>{i=()=>{r.abort(),o(new Ve(`operation_aborted`))},t.addEventListener(`abort`,i,{once:!0}),a=setTimeout(()=>{r.abort(),o(new Ve(`operation_timeout`))},n)});try{return await Promise.race([Promise.resolve().then(()=>(r.signal.aborted&&G(`operation_aborted`),e(r.signal))),o])}finally{clearTimeout(a),t.removeEventListener(`abort`,i),r.abort()}}},et=`teams-node/v1`,tt=20971520,nt=67108864,rt=1048576,it=o().refine(Re,`Invalid Unicode scalar string`),at=(e,t)=>it.refine(n=>{let r=Array.from(n).length;return r>=e&&r<=t},`Invalid text length`),K=at(1,256).refine(e=>!Array.from(e).some(e=>{let t=e.codePointAt(0);return t>=9&&t<=13||t===32||t>=8192&&t<=8202||[133,160,5760,8232,8233,8239,8287,12288].includes(t)}),`Identifier contains whitespace`),q=at(1,200),J=it.length(71).regex(/^sha256:[0-9a-f]{64}$/),ot=it.length(36).regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/),st=N().int().min(0).max(2**53-1),Y=st.min(1),ct=it.refine(e=>{if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(e)||e.startsWith(`0000`))return!1;let t=new Date(e);return Number.isFinite(t.getTime())&&t.toISOString()===e},`Expected a valid UTC timestamp with millisecond precision`),lt=v(()=>j([O(),C(),it,N().refine(e=>Number.isFinite(e)&&(!Number.isInteger(e)||Number.isSafeInteger(e))),T(lt),M(it,lt)])),ut=M(it,lt),dt=K.nullable().default(null),ft=S(`kind`,[f({kind:A(`node`),nodeId:K,nodeGeneration:Y}),f({kind:A(`cloud_agent`),agentId:K,versionId:K,runtimeId:K,agentInstanceId:K})]),pt=f({authorityId:K,groupId:K,teamRunId:K,memberId:K,runMemberId:K,taskId:dt,attemptId:K,deliveryId:K,bindingRef:K,providerRef:K,sessionId:K,commandId:ot,idempotencyKey:q,schedulerEpoch:Y,leaderEpoch:Y,dispatchEpoch:Y,attemptEpoch:Y,target:ft,bundleDigest:J,contractDigest:J,capabilitiesDigest:J,nativeRunId:dt}),mt=f({sessionId:K,runId:K,commandId:ot,terminalSeq:st,terminalEventDigest:J,resultDigest:J.nullable().default(null)}),ht=new Set([`succeeded`,`failed`,`cancelled`,`interrupted`]),gt=f({status:x([`missing`,`accepted`,`duplicate`,`rejected`,`uncertain`]),commandId:ot,idempotencyKey:q,payloadDigest:J,storeIncarnation:K,runId:dt,acceptedSeq:st.nullable().default(null),nativeStatus:x([`queued`,`running`,`waiting`,`awaiting_approval`,`waiting_for_node`,`succeeded`,`failed`,`cancelled`,`interrupted`]).nullable().default(null),terminalEvidence:mt.nullable().default(null)}).superRefine((e,t)=>{e.status===`missing`&&[e.runId,e.acceptedSeq,e.nativeStatus,e.terminalEvidence].some(e=>e!==null)&&t.addIssue({code:`custom`,message:`Missing receipt cannot contain execution evidence`}),e.terminalEvidence&&(e.commandId!==e.terminalEvidence.commandId||e.runId!==e.terminalEvidence.runId||!ht.has(e.nativeStatus??``))&&t.addIssue({code:`custom`,message:`Terminal evidence must match the original command/run and terminal status`})}),_t=f({eventId:K,sessionId:K,runId:K,seq:st,family:K,type:K,payload:ut,sourceRef:f({nativeRunId:dt,parentRunId:dt,nativeEventType:dt})});function vt(e,t){try{if(new TextEncoder().encode(W(e)).byteLength<=rt)return}catch{}t.addIssue({code:`custom`,message:`Report is not safe canonical JSON within one MiB`})}var yt=f({sessionId:K,storeIncarnation:K,afterSeq:st,nextSeq:st,snapshotUpperSeq:st,hasMore:C(),items:T(_t).max(200)}).superRefine((e,t)=>{(!(e.afterSeq<=e.nextSeq&&e.nextSeq<=e.snapshotUpperSeq)||e.hasMore!==e.nextSeq<e.snapshotUpperSeq||e.hasMore&&e.nextSeq===e.afterSeq)&&t.addIssue({code:`custom`,message:`Invalid frozen canonical session cursor interval`});let n=e.afterSeq,r=new Set;for(let i of e.items)(i.sessionId!==e.sessionId||!(n<i.seq&&i.seq<=e.nextSeq)||r.has(i.eventId))&&t.addIssue({code:`custom`,message:`Events must be unique and ordered in the declared session interval`}),n=i.seq,r.add(i.eventId);vt(e,t)}),bt=f({permitKind:x([`execute`,`recovery`]),permit:at(1,16384),grantRevision:Y.nullable().default(null)}),xt={protocolVersion:A(et).default(et),nodeCommandId:ot,operationKey:q,ref:pt,commandDigest:J,issuedAt:ct,claimLeaseUntil:ct,authorization:bt},St=f({contextRef:K,contextDigest:J,materialManifestRef:dt}),Ct=b({schema_version:A(1).optional(),command_id:ot,idempotency_key:o(),tenant_id:o(),agent_instance_id:o(),session_id:o(),command_type:A(`enqueue`),source:b({kind:x([`studio`,`responses`,`agui`,`a2a`,`parent_agent`,`scheduler`,`workflow`,`channel`,`system`]),ref:o()}).passthrough(),authorization_ref:o(),submitted_at:o(),causation_id:o().nullable().optional(),correlation_id:o().nullable().optional(),payload:b({content:lt,reply_to:o().nullable().optional(),execution_grant_id:at(1,512),execution_grant_attempt_epoch:Y.nullable().optional(),execution_policy_ref:at(1,2**53-1),teams_context_ref:at(1,2**53-1)}).passthrough()}).passthrough(),wt=f({command:ut,payloadDigest:J}).superRefine((e,t)=>{Ct.safeParse(e.command).success||t.addIssue({code:`custom`,message:`Teams submit requires an original governed native enqueue envelope`})}),Tt=f({grantId:K,expectedRevision:Y,state:x([`active`,`suspended`,`revoked`]),attemptEpoch:Y,expiresAt:ct,renewalId:q.nullable().default(null),controlId:q.nullable().default(null)}).superRefine((e,t)=>{(e.renewalId===null==(e.controlId===null)||e.renewalId!==null&&e.state!==`active`)&&t.addIssue({code:`custom`,message:`Exactly one control or active renewal identity is required`})});S(`operation`,[f({...xt,operation:A(`prepare`),lane:A(`execution`),payload:St}),f({...xt,operation:A(`submit`),lane:A(`execution`),payload:wt}),f({...xt,operation:A(`lookup`),lane:A(`control`),payload:f({commandId:ot,idempotencyKey:q,payloadDigest:J,storeIncarnation:K})}),f({...xt,operation:A(`set_grant`),lane:A(`control`),payload:Tt}),f({...xt,operation:A(`set_admission`),lane:A(`control`),payload:f({grantId:K,expectedAdmissionRevision:Y,admissionAllowed:C(),attemptEpoch:Y,controlId:q})}),f({...xt,operation:A(`get_grant`),lane:A(`control`),payload:f({grantId:K,renewalId:q.nullable().default(null)})}),f({...xt,operation:A(`cancel`),lane:A(`control`),payload:f({controlCommandId:ot,controlIdempotencyKey:q,targetRunId:K,reason:at(0,2e3)})}),f({...xt,operation:A(`respond_interaction`),lane:A(`control`),payload:f({controlCommandId:ot,controlIdempotencyKey:q,interactionId:K,expectedRevision:Y,action:x([`approve`,`reject`,`submit`,`cancel`]),response:ut})}),f({...xt,operation:A(`observe`),lane:A(`control`),payload:f({sessionId:K,afterSeq:st,limit:N().int().min(1).max(200).default(200)})})]).superRefine((e,t)=>{let n=e=>t.addIssue({code:`custom`,message:e});(e.ref.target.kind!==`node`||e.nodeCommandId===e.ref.commandId||e.claimLeaseUntil<=e.issuedAt)&&n(`Invalid node target, operation identity or claim interval`),e.operation===`submit`&&(e.payload.command.command_id!==e.ref.commandId||e.payload.command.idempotency_key!==e.ref.idempotencyKey||e.payload.command.session_id!==e.ref.sessionId)&&n(`Submit differs from frozen enqueue reference`),e.operation===`lookup`&&(e.payload.commandId!==e.ref.commandId||e.payload.idempotencyKey!==e.ref.idempotencyKey)&&n(`Lookup must target the original enqueue`),(e.operation===`cancel`||e.operation===`respond_interaction`)&&(([e.nodeCommandId,e.ref.commandId].includes(e.payload.controlCommandId)||e.payload.controlIdempotencyKey===e.ref.idempotencyKey||e.ref.nativeRunId===null)&&n(`Control requires original native run and independent identity`),e.operation===`cancel`&&e.payload.targetRunId!==e.ref.nativeRunId&&n(`Cancel must target the exact original native run`)),e.operation===`observe`&&e.payload.sessionId!==e.ref.sessionId&&n(`Observe must target the original session`),e.operation===`set_admission`&&(e.payload.attemptEpoch!==e.ref.attemptEpoch||e.payload.controlId===e.ref.idempotencyKey)&&n(`Admission requires the original attempt and an independent control identity`),([`prepare`,`submit`,`respond_interaction`,`set_admission`].includes(e.operation)||e.operation===`set_grant`&&e.payload.state!==`revoked`)&&e.authorization.permitKind!==`execute`&&n(`Recovery authorization cannot grant execution`)});var Et=it.refine(e=>!e||Array.from(e).length>4096||e.startsWith(`/`)||e.includes(`\\`)||/^[A-Za-z]:/.test(e)||Array.from(e).some(e=>e.codePointAt(0)<32||e.codePointAt(0)===127)?!1:e.split(`/`).every(e=>e!==``&&e!==`.`&&e!==`..`),`Material path must be a normalized relative file path`),Dt=f({path:Et,digest:J,sizeBytes:N().int().min(0).max(tt),mediaType:at(1,200)}),Ot={kind:x([`files`,`git_snapshot`]),sourceCommit:it.refine(e=>[40,64].includes(e.length)&&/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/.test(e)).nullable().default(null),entries:T(Dt).min(1).max(4096)};function kt(e,t){let n=e=>t.addIssue({code:`custom`,message:e});e.kind===`git_snapshot`!=(e.sourceCommit!==null)&&n(`Only Git snapshots require a full source commit`),e.entries.reduce((e,t)=>e+t.sizeBytes,0)>nt&&n(`Material exceeds 64 MiB`);let r=new Set(e.entries.map(e=>e.path));r.size!==e.entries.length&&n(`Duplicate material path`);for(let e of r){let t=e.split(`/`);for(t.pop();t.length;)r.has(t.join(`/`))&&n(`A material file cannot also be a directory`),t.pop()}}var At=f(Ot).superRefine(kt),jt=f({...Ot,idempotencyKey:q}).superRefine(kt);async function Mt(e){let t=At.parse(e);return ze({kind:t.kind,...t.sourceCommit===null?{}:{sourceCommit:t.sourceCommit},entries:[...t.entries].sort((e,t)=>Be(e.path,t.path))})}var Nt=f({storeIncarnation:K,grant:f({grantId:K,state:x([`active`,`suspended`,`revoked`]),revision:Y,attemptEpoch:Y,expiresAt:ct,admissionAllowed:C(),admissionRevision:Y}),barrier:f({queuedMessageIds:T(K).max(1e4).default([]),inFlightMessageIds:T(K).max(1e4).default([]),discardedMessageIds:T(K).max(1e4).default([]),settledMessageIds:T(K).max(1e4).default([]),commands:T(f({messageId:K,commandId:ot,idempotencyKey:q,inboxState:x([`accepted`,`claimed`,`completed`,`discarded`]),runId:dt,runState:x([`pending`,`running`,`paused`,`waiting`,`completed`,`failed`,`cancelled`,`interrupted`]).nullable().default(null)})).max(1e4).default([])})}),Pt=f({operationId:q,status:A(`applied`).default(`applied`),snapshot:Nt}),Ft=f({operation:A(`get_grant`),storeIncarnation:K,current:Nt.nullable().default(null),lookupOperationId:q.nullable().default(null),mutationReceipt:Pt.nullable().default(null)}).superRefine((e,t)=>{(e.current&&e.current.storeIncarnation!==e.storeIncarnation||e.mutationReceipt&&(e.mutationReceipt.operationId!==e.lookupOperationId||e.mutationReceipt.snapshot.storeIncarnation!==e.storeIncarnation))&&t.addIssue({code:`custom`,message:`Grant lookup must match the original store and mutation identity`})}),It=S(`operation`,[f({operation:A(`prepare`),contextRef:K,contextDigest:J,snapshot:Nt}),f({operation:A(`set_grant`),mutationReceipt:Pt}),f({operation:A(`set_admission`),mutationReceipt:Pt}),Ft]);f({protocolVersion:A(et).default(et),nodeCommandId:ot,operation:A(`describe`),lane:A(`control`).default(`control`),operationKey:q,authorityId:K,nodeId:K,bindingRef:K,localBindingRef:K,expectedDigests:f({bundle:J,contract:J,capabilities:J}),nodeGeneration:Y,claimLeaseUntil:ct,authorization:f({permitKind:A(`probe`),permit:at(1,16384)}),commandDigest:J});var Lt=f({bindingRef:K,localBindingRef:K,agentInstanceId:K,storeIncarnation:K,capabilities:ut,capabilitiesDigest:J,bundleDigest:J,contractDigest:J});f({reportKind:A(`probe`).default(`probe`),nodeCommandId:ot,nodeGeneration:Y,commandDigest:J,resultRevision:Y,phase:x([`described`,`uncertain`,`rejected`]),probeResult:Lt.nullable().default(null),error:f({code:K,retryable:C()}).nullable().default(null)}).refine(e=>e.phase===`described`==(e.probeResult!==null),`Described probe requires exact Host result`);var Rt=f({status:x([`succeeded`,`failed`,`cancelled`,`interrupted`]),candidate:f({result:at(0,rt),artifacts:T(ut).max(1e3).default([])}),usage:f({totalTokens:st}),terminalEvidence:mt,completionDigest:J}).superRefine(vt);f({nodeCommandId:ot,nodeGeneration:Y,commandDigest:J,resultRevision:Y,phase:x([`prepared`,`submitted`,`running`,`waiting`,`terminal`,`uncertain`,`rejected`,`control_applied`]),receipt:gt.nullable().default(null),eventBatch:yt.nullable().default(null),materialProof:f({manifestRef:K,digest:J}).nullable().default(null),error:f({code:K,retryable:C()}).nullable().default(null),operationResult:It.nullable().default(null),executionResult:Rt.nullable().default(null)}).superRefine((e,t)=>{e.phase===`prepared`&&e.operationResult?.operation!==`prepare`&&t.addIssue({code:`custom`,message:`Prepared report requires durable preparation result`}),e.phase===`control_applied`&&(!e.operationResult||e.operationResult.operation===`prepare`)&&t.addIssue({code:`custom`,message:`Control report requires a typed mutation or lookup result`}),e.operationResult!==null&&![`prepared`,`control_applied`].includes(e.phase)&&t.addIssue({code:`custom`,message:`Operation result only belongs to preparation or control reports`}),e.phase===`terminal`&&!e.receipt?.terminalEvidence&&t.addIssue({code:`custom`,message:`Terminal report requires canonical evidence`}),e.phase===`terminal`&&(!e.executionResult||e.executionResult.status!==e.receipt?.nativeStatus||W(e.executionResult.terminalEvidence)!==W(e.receipt?.terminalEvidence??null))&&t.addIssue({code:`custom`,message:`Terminal report requires matching canonical completion`}),e.phase!==`terminal`&&e.executionResult!==null&&t.addIssue({code:`custom`,message:`Completion only belongs to terminal report`}),vt(e,t)});var zt={text:it,length:at,identifier:K,operationKey:q,digest:J,commandId:ot,sequence:st,revision:Y,timestamp:ct,relativePath:Et},Bt=`workspace/v1`,Vt=[`runSummaries`,`taskSummaries`,`pendingInteractions`,`recentMessages`,`artifactSummaries`],X=o().min(1).max(256),Ht=N().int().min(0).max(2**53-1),Ut=Ht.min(1),Wt=s({offset:!0}).max(40).refine(e=>!e.startsWith(`0000`)&&Number.isFinite(Date.parse(e)),`Invalid timestamp`),Gt=X.nullable(),Kt=o().max(2e3).nullable(),qt=o().min(1).max(4096).nullable(),Jt=x([`planning`,`running`,`waiting`,`needs_attention`,`awaiting_acceptance`,`succeeded`,`failed`,`cancel_requested`,`cancelled`]),Yt=x([`draft`,`ready`,`blocked`,`running`,`awaiting_acceptance`,`succeeded`,`failed`,`cancel_requested`,`cancelled`]),Xt=f({authorityId:X,ownerScopeRef:o().min(1).max(512),groupId:X}),Zt=Xt.extend({origin:o().refine(e=>{try{let t=new URL(e);return[`http:`,`https:`].includes(t.protocol)&&t.origin===e}catch{return!1}},`Invalid workspace origin`)}),Qt=f({groupId:X,name:o().min(1).max(256),authorityRef:X,tenantId:X,ownerSubject:X,leaderMemberId:X,revision:Ut,status:x([`active`,`archived`]),createdAt:Wt,updatedAt:Wt,policy:f({taskAcceptance:x([`leader`,`human`,`result`]),peerWake:C()})}),$t=f({enqueue:C(),cancel:C(),steer:C(),restore:C(),interaction:C(),leader:C()}),en=f({bindingRef:X,providerRef:X,kind:x([`local_build`,`a2a`,`cloud`]),agentId:X,capabilities:$t,availability:f({state:x([`ready`,`unchecked`,`unavailable`]),code:Gt,reason:Kt,action:o().max(256).nullable()})}),tn=f({memberId:X,groupId:X,name:o().min(1).max(256),role:x([`leader`,`member`]),responsibility:o().max(2e3),bindingRef:X,binding:en,sessionId:X,revision:Ut,status:x([`active`,`removed`,`unavailable`]),executionStatus:x([`idle`,`queued`,`running`,`waiting`,`needs_attention`,`unavailable`]),activeRunId:Gt,reason:Kt}).refine(e=>e.bindingRef===e.binding.bindingRef,`Binding identity mismatch`),nn=tn.safeExtend({runMemberId:X,teamRunId:X,groupRevision:Ut}),rn=f({state:x([`armed`,`fencing_old`,`waiting_old_grant`,`activating`,`active`,`blocked`]),standbyBindingRef:X,releaseRef:X,takeoverId:Gt,reason:Kt,newLeaderEpoch:Ut.nullable()}),an=f({teamRunId:X,groupId:X,revision:Ut,groupRevision:Ut,goalMessageId:X,goal:o(),leaderMemberId:X,status:Jt,dispatchSuspended:C(),dispatchEpoch:Ut,taskCount:Ht,pendingCount:Ht,createdAt:Wt,updatedAt:Wt,reason:Kt,leaderStandby:rn.optional()}),on=f({taskId:X,groupId:X,teamRunId:X,revision:Ut,title:o().min(1).max(2e3),ownerMemberId:Gt,dependencies:T(X).max(4096),status:Yt,attemptCount:Ht,reason:Kt}).refine(e=>new Set(e.dependencies).size===e.dependencies.length&&!e.dependencies.includes(e.taskId),`Invalid task dependencies`),sn=f({authorityRef:X,groupId:X,memberId:X,bindingRef:X,providerRef:X,sessionId:X,runId:X,itemId:X.optional()}),cn=sn.extend({interactionId:X}),ln=f({ref:cn,groupId:X,teamRunId:X,revision:Ut,title:o().max(2e3),kind:x([`approval`,`input`]),status:x([`pending`,`resolving`,`resolved`,`cancelled`,`expired`]),createdAt:Wt}),un=S(`kind`,[f({kind:A(`text`),text:o()}),f({kind:A(`attachment`),attachmentRef:X,mediaType:o().min(1).max(200),name:o().max(4096).optional()})]),dn=f({messageId:X,groupId:X,teamRunId:Gt,revision:Ut,createdSeq:Ut,createdAt:Wt,senderPrincipal:X,senderName:o().max(256),groupRole:x([`owner`,`leader`,`member`,`system`]),memberId:Gt,parts:T(un).max(64),mentions:T(X).max(8),intent:x([`start_goal`,`followup`,`directed`,`note`,`result`,`progress`]),replyTo:Gt,sourceRefs:T(sn).max(64),visibility:x([`public`,`internal`])}),fn=f({artifactId:X,groupId:X,teamRunId:X,revision:Ut,name:o().max(4096),mediaType:o().min(1).max(200),source:sn,digest:o().regex(/^sha256:[0-9a-f]{64}$/).length(71),sizeBytes:Ht,state:x([`pending`,`ready`,`failed`])});function pn(e,t){try{if(new TextEncoder().encode(W(e)).byteLength<=2097152)return}catch{}t.addIssue({code:`custom`,message:`Workspace response exceeds safe JSON / two MiB boundary`})}function mn(e){return JSON.stringify([e.authorityId,e.ownerScopeRef,e.groupId])}function hn(e){return JSON.stringify([e.origin,mn(e)])}function gn(e){let t=e.ref;return JSON.stringify([t.authorityRef,t.groupId,t.memberId,t.bindingRef,t.providerRef,t.sessionId,t.runId,t.interactionId])}function _n(e,t){switch(e){case`runSummaries`:return t.teamRunId;case`taskSummaries`:return t.taskId;case`pendingInteractions`:return gn(t);case`recentMessages`:return t.messageId;case`artifactSummaries`:return t.artifactId}}function vn(e,t){return e.groupId===t.groupId&&[...e.ref?[e.ref]:[],...e.source?[e.source]:[],...e.sourceRefs??[]].every(e=>e.groupId===t.groupId&&e.authorityRef===t.authorityId)}function yn(e,t,n,r,i){let a=new Set;for(let o of t){let t=_n(e,o);(a.has(t)||!vn(o,n))&&i.addIssue({code:`custom`,message:`Duplicate row or foreign workspace scope`}),a.add(t),e!==`runSummaries`&&o.teamRunId!==r&&i.addIssue({code:`custom`,message:`Collection belongs to another selected run`}),e===`pendingInteractions`&&![`pending`,`resolving`].includes(o.status)&&i.addIssue({code:`custom`,message:`Pending collection contains a terminal interaction`})}e===`recentMessages`&&t.some((e,n)=>n>0&&t[n-1].createdSeq>=e.createdSeq)&&i.addIssue({code:`custom`,message:`Message history must be ordered by creation sequence`})}var bn=f({runSummaries:qt,taskSummaries:qt,pendingInteractions:qt,recentMessages:qt,artifactSummaries:qt}),xn=f({apiVersion:A(ae),viewVersion:A(Bt),scope:Xt,snapshotId:X,watermark:Ht,group:Qt,members:T(tn).max(8),runSummaries:T(an).max(20),selectedRun:an.nullable(),selectedRunMembers:T(nn).max(8),taskSummaries:T(on).max(100),pendingInteractions:T(ln).max(50),recentMessages:T(dn).max(50),artifactSummaries:T(fn).max(50),cursors:bn}).superRefine((e,t)=>{let n=e=>t.addIssue({code:`custom`,message:e});(e.group.groupId!==e.scope.groupId||e.group.authorityRef!==e.scope.authorityId)&&n(`Group scope mismatch`),(new Set(e.members.map(e=>e.memberId)).size!==e.members.length||e.members.some(t=>!vn(t,e.scope)))&&n(`Invalid group roster`),e.members.some(t=>t.memberId===e.group.leaderMemberId)||n(`Missing group Leader`);let r=e.selectedRun?.teamRunId??null;for(let n of Vt)yn(n,e[n],e.scope,r,t);e.selectedRun&&(!vn(e.selectedRun,e.scope)||!e.selectedRunMembers.some(t=>t.memberId===e.selectedRun.leaderMemberId))&&n(`Invalid selected run or frozen Leader roster`);let i=e.runSummaries.find(e=>e.teamRunId===r);i&&W(i)!==W(e.selectedRun)&&n(`Selected run and summary differ at snapshot watermark`),(new Set(e.selectedRunMembers.map(e=>e.runMemberId)).size!==e.selectedRunMembers.length||new Set(e.selectedRunMembers.map(e=>e.memberId)).size!==e.selectedRunMembers.length||e.selectedRunMembers.some(t=>!vn(t,e.scope)||t.teamRunId!==r||t.groupRevision!==e.selectedRun?.groupRevision))&&n(`Invalid frozen run roster`),r===null&&(e.selectedRunMembers.length||Vt.slice(1).some(t=>e[t].length||e.cursors[t]!==null))&&n(`Unselected view cannot contain run-specific rows`),e.recentMessages.some(t=>t.createdSeq>e.watermark)&&n(`Message creation is newer than snapshot watermark`),pn(e,t)}),Sn={apiVersion:A(ae),viewVersion:A(Bt),scope:Xt,snapshotId:X,watermark:Ht,teamRunId:Gt,cursor:o().min(1).max(4096),nextCursor:qt},Cn=S(`collection`,[f({...Sn,collection:A(`runSummaries`),items:T(an).max(100)}),f({...Sn,collection:A(`taskSummaries`),items:T(on).max(100)}),f({...Sn,collection:A(`pendingInteractions`),items:T(ln).max(100)}),f({...Sn,collection:A(`recentMessages`),items:T(dn).max(100)}),f({...Sn,collection:A(`artifactSummaries`),items:T(fn).max(100)})]).superRefine((e,t)=>{yn(e.collection,e.items,e.scope,e.teamRunId,t),(e.collection===`runSummaries`?e.teamRunId!==null:e.teamRunId===null)&&t.addIssue({code:`custom`,message:`Invalid page run scope`}),e.cursor===e.nextCursor&&t.addIssue({code:`custom`,message:`Page cursor did not advance`}),e.collection===`recentMessages`&&e.items.some(t=>t.createdSeq>e.watermark)&&t.addIssue({code:`custom`,message:`Message creation exceeds snapshot watermark`}),pn(e,t)}),wn=f({collection:x(Vt),snapshotId:X,watermark:Ht,teamRunId:Gt,cursor:o().min(1).max(4096),limit:N().int().min(1).max(100).optional()}).refine(e=>e.collection===`runSummaries`?e.teamRunId===null:e.teamRunId!==null,`Invalid collection run scope`),Tn=S(`kind`,[f({kind:A(`group`),group:Qt}),f({kind:A(`member`),member:tn}),f({kind:A(`run_member`),runMember:nn}),f({kind:A(`run`),run:an}),f({kind:A(`task`),task:on}),f({kind:A(`interaction`),interaction:ln}),f({kind:A(`message`),message:dn}),f({kind:A(`artifact`),artifact:fn}),f({kind:A(`invalidate`),teamRunId:Gt,collections:T(x(Vt)).min(1).max(5)})]),En=f({apiVersion:A(ae),viewVersion:A(Bt),scope:Xt,eventId:X,groupSeq:Ut,type:A(`workspace.delta`),createdAt:Wt,changes:T(Tn).max(32)}).superRefine((e,t)=>{for(let n of e.changes)n.kind!==`invalidate`&&((!vn(n.kind===`group`?n.group:n.kind===`member`?n.member:n.kind===`run_member`?n.runMember:n.kind===`run`?n.run:n.kind===`task`?n.task:n.kind===`interaction`?n.interaction:n.kind===`message`?n.message:n.artifact,e.scope)||n.kind===`group`&&n.group.authorityRef!==e.scope.authorityId)&&t.addIssue({code:`custom`,message:`Foreign row in workspace delta`}),n.kind===`message`&&n.message.createdSeq>e.groupSeq&&t.addIssue({code:`custom`,message:`Future message in workspace event`}));pn(e,t)});function Dn(e,t){try{return e.parse(t)}catch{throw new U(`workspace_contract_mismatch`,`团队工作区数据格式不兼容,需要重新读取。`)}}function On(e){return Dn(xn,e)}function kn(e){return Dn(Cn,e)}function An(e){return Dn(En,e)}var jn=e=>{throw new U(`reset_required`,e)},Mn=class{value;baseWatermark;versions=new Map;seenSeq=new Map;seenIds=new Map;dirty=new Set;dirtyRuns=new Set;usedCursors=new Map;maxRows;constructor(e,t={}){if(this.value=On(e),this.baseWatermark=this.value.watermark,this.maxRows=t.maxRowsPerCollection??5e3,!Number.isSafeInteger(this.maxRows)||this.maxRows<100||this.maxRows>5e4)throw new U(`invalid_workspace_limit`,`工作区缓存上限无效。`);this.seedVersions()}snapshot(){return structuredClone(this.value)}watermark(){return this.value.watermark}snapshotId(){return this.value.snapshotId}projection(){return{snapshot:this.snapshot(),snapshotWatermark:this.baseWatermark,dirtyCollections:[...this.dirty],dirtyRunIds:[...this.dirtyRuns]}}seedVersions(){this.versions.clear();let e=(e,t)=>this.versions.set(e,{revision:t.revision,digest:W(t),domainDigest:this.domainDigest(e,t),observedSeq:this.baseWatermark});e(`group`,this.value.group),this.value.members.forEach(t=>e(`members:${t.memberId}`,t)),this.value.selectedRunMembers.forEach(t=>e(`runMembers:${t.runMemberId}`,t));for(let t of Vt)for(let n of this.value[t])e(`${t}:${_n(t,n)}`,n);this.value.selectedRun&&e(`runSummaries:${this.value.selectedRun.teamRunId}`,this.value.selectedRun)}domainDigest(e,t){if(!e.startsWith(`runSummaries:`))return W(t);let n={...t};return delete n.taskCount,delete n.pendingCount,delete n.leaderStandby,W(n)}accept(e,t,n,r){let i=e.get(t);if(i&&(i.revision>n.revision||i.observedSeq>r))return!1;let a=W(n),o=this.domainDigest(t,n);if(i?.revision===n.revision){if(i.digest===a)return!1;(r<=i.observedSeq||i.domainDigest!==o)&&jn(`同一对象版本出现不同内容,需要重新读取。`)}return e.set(t,{revision:n.revision,digest:a,domainDigest:o,observedSeq:r}),!0}upsert(e,t,n){let r=e.findIndex(e=>n(e)===n(t));return r<0&&e.length>=this.maxRows&&jn(`工作区缓存已达到上限,需要重新读取分页视图。`),r<0?[...e,t]:e.map((e,n)=>n===r?t:e)}mergeRow(e,t,n,r,i){let a=_n(n,r);if(!this.accept(t,`${n}:${a}`,r,i)){n===`runSummaries`&&e.selectedRun?.teamRunId===a&&!e.runSummaries.some(e=>e.teamRunId===a)&&(e.runSummaries=this.upsert(e.runSummaries,e.selectedRun,e=>e.teamRunId));return}if(n===`pendingInteractions`&&![`pending`,`resolving`].includes(r.status)){e.pendingInteractions=e.pendingInteractions.filter(e=>_n(n,e)!==a);return}let o=this.upsert(e[n],r,e=>_n(n,e));n===`recentMessages`&&o.sort((e,t)=>e.createdSeq-t.createdSeq||_n(n,e).localeCompare(_n(n,t))),Object.assign(e,{[n]:o})}replace(e){let t=On(e);if(mn(t.scope)!==mn(this.value.scope)||t.selectedRun?.teamRunId!==this.value.selectedRun?.teamRunId)throw new U(`scope_mismatch`,`刷新快照改变了工作区身份或所选协作任务。`);return t.watermark<this.value.watermark||t.group.revision<this.value.group.revision||t.selectedRun&&this.value.selectedRun&&t.selectedRun.revision<this.value.selectedRun.revision?!1:(this.value=t,this.baseWatermark=t.watermark,this.seenSeq.clear(),this.seenIds.clear(),this.dirty.clear(),this.dirtyRuns.clear(),this.usedCursors.clear(),this.seedVersions(),!0)}apply(e){let t=An(e);if(mn(t.scope)!==mn(this.value.scope))throw new U(`scope_mismatch`,`事件不属于当前授权工作区。`);let n=this.seenSeq.get(t.groupSeq);n&&n!==t.eventId&&jn(`同一事件水位出现不同事件身份。`);let r=this.seenIds.get(t.eventId);if(r!==void 0&&r!==t.groupSeq&&jn(`同一事件身份被用于不同水位。`),t.groupSeq<=this.value.watermark)return!1;t.groupSeq!==this.value.watermark+1&&jn(`团队事件存在缺口,需要重新读取工作区。`);let i={...this.value},a=new Map(this.versions),o=new Set(this.dirty),s=new Set(this.dirtyRuns),c=new Set,l=i.selectedRun?.teamRunId??null;for(let e of t.changes){if(e.kind===`invalidate`){e.teamRunId===l||e.teamRunId===null?e.collections.forEach(e=>o.add(e)):s.add(e.teamRunId);continue}if(e.kind===`group`){if(e.group.tenantId!==i.group.tenantId||e.group.ownerSubject!==i.group.ownerSubject)throw new U(`scope_mismatch`,`群事件改变了原始租户或主体。`);this.accept(a,`group`,e.group,t.groupSeq)&&(i.group=e.group)}else if(e.kind===`member`)this.accept(a,`members:${e.member.memberId}`,e.member,t.groupSeq)&&(i.members=this.upsert(i.members,e.member,e=>e.memberId));else if(e.kind===`run_member`){if(e.runMember.teamRunId!==l){s.add(e.runMember.teamRunId);continue}this.accept(a,`runMembers:${e.runMember.runMemberId}`,e.runMember,t.groupSeq)&&(i.selectedRunMembers=this.upsert(i.selectedRunMembers,e.runMember,e=>e.runMemberId))}else if(e.kind===`run`){let n=e.run;this.accept(a,`runSummaries:${n.teamRunId}`,n,t.groupSeq)&&(i.runSummaries=this.upsert(i.runSummaries,n,e=>e.teamRunId),n.teamRunId===l&&(i.selectedRun=n)),c.add(n.teamRunId)}else{let[n,r]=e.kind===`task`?[`taskSummaries`,e.task]:e.kind===`interaction`?[`pendingInteractions`,e.interaction]:e.kind===`message`?[`recentMessages`,e.message]:[`artifactSummaries`,e.artifact];if(r.teamRunId!==l){r.teamRunId&&s.add(r.teamRunId);continue}this.mergeRow(i,a,n,r,t.groupSeq),(n===`taskSummaries`||n===`pendingInteractions`)&&(o.add(`runSummaries`),r.teamRunId&&s.add(r.teamRunId))}}if(c.forEach(e=>s.delete(e)),(!i.members.some(e=>e.memberId===i.group.leaderMemberId)||i.selectedRun&&(!i.selectedRunMembers.some(e=>e.memberId===i.selectedRun.leaderMemberId)||i.selectedRunMembers.some(e=>e.groupRevision!==i.selectedRun.groupRevision)))&&jn(`Leader 变更缺少匹配成员投影。`),i.watermark=t.groupSeq,this.value=i,this.versions=a,this.dirty=o,this.dirtyRuns=s,this.seenSeq.set(t.groupSeq,t.eventId),this.seenIds.set(t.eventId,t.groupSeq),this.seenSeq.size>1e4){let e=this.seenSeq.entries().next().value;this.seenSeq.delete(e[0]),this.seenIds.delete(e[1])}return!0}pageRequest(e,t){let n=this.value.cursors[e];if(n===null)return null;let r=e===`runSummaries`?null:this.value.selectedRun?.teamRunId??null;if(e!==`runSummaries`&&r===null)throw new U(`scope_mismatch`,`未选择任务,无法读取任务分页。`);return{collection:e,snapshotId:this.value.snapshotId,watermark:this.baseWatermark,teamRunId:r,cursor:n,...t===void 0?{}:{limit:t}}}mergePage(e,t){let n=kn(t);if(mn(n.scope)!==mn(this.value.scope))throw new U(`scope_mismatch`,`分页返回了其他授权工作区。`);let r=this.pageRequest(e.collection,e.limit);if(!r||e.snapshotId!==r.snapshotId||e.watermark!==r.watermark||e.cursor!==r.cursor||e.teamRunId!==r.teamRunId||n.snapshotId!==r.snapshotId||n.watermark!==r.watermark||n.cursor!==r.cursor||n.teamRunId!==r.teamRunId||n.collection!==r.collection)throw new U(`workspace_page_mismatch`,`分页与当前快照或任务不一致,需要重新读取。`);if(n.nextCursor!==null&&this.usedCursors.get(n.collection)?.has(n.nextCursor))throw new U(`workspace_page_mismatch`,`分页游标出现循环,需要重新读取。`);let i={...this.value,cursors:{...this.value.cursors}},a=new Map(this.versions);for(let e of n.items)this.mergeRow(i,a,n.collection,e,n.watermark);i.cursors[n.collection]=n.nextCursor,this.value=i,this.versions=a;let o=this.usedCursors.get(n.collection)??new Set;return o.add(n.cursor),this.usedCursors.set(n.collection,o),!0}},Nn=new Set([`reset_required`,`snapshot_expired`,`workspace_page_mismatch`,`workspace_contract_mismatch`]),Pn=(e,t)=>new Promise(n=>{if(t.aborted){n();return}let r=()=>{clearTimeout(i),t.removeEventListener(`abort`,r),n()},i=setTimeout(r,e);t.addEventListener(`abort`,r,{once:!0})}),Fn=class{scope;cacheKey;transport;maxReconnects;retryDelay;value;reducer;listeners=new Set;drafts=new Map;pendingPages=new Map;controller;streamController;generation=0;disposed=!1;resyncRequested=!1;observingGeneration;constructor(e,t,n={}){if(this.scope=Object.freeze(Zt.parse(e)),this.cacheKey=hn(this.scope),this.transport=t,this.maxReconnects=n.maxReconnects??6,!Number.isSafeInteger(this.maxReconnects)||this.maxReconnects<0||this.maxReconnects>32)throw new U(`invalid_reconnect_limit`,`重连次数必须在 0–32 之间。`);this.retryDelay=n.retryDelayMs??(e=>Math.min(500*2**e,1e4)),this.value={scope:this.scope,selectedRunId:null,projection:null,connection:`closed`,draft:``,errorCode:null,loadingPages:[]}}getSnapshot=()=>this.value;subscribe=e=>(this.listeners.add(e),()=>this.listeners.delete(e));update(e){this.disposed||(this.value={...this.value,...e},this.listeners.forEach(e=>e()))}setDraft(e){this.drafts.set(this.value.selectedRunId??``,e),this.update({draft:e})}acknowledgeDraft(e,t){if(this.disposed)return!1;let n=e??``,r=this.value.selectedRunId===e?this.value.draft:this.drafts.get(n);return r===void 0||r.trim()!==t?!1:(this.drafts.set(n,``),this.value.selectedRunId===e&&this.update({draft:``}),!0)}disconnect(){this.generation++,this.controller?.abort(),this.streamController?.abort(),this.controller=void 0,this.observingGeneration=void 0,this.pendingPages.clear(),this.update({connection:`closed`,loadingPages:[]})}dispose(){this.disconnect(),this.reducer=void 0,this.drafts.clear(),this.update({projection:null,draft:``,selectedRunId:null,errorCode:null}),this.disposed=!0,this.listeners.clear()}refresh(){if(!this.disposed){if(this.observingGeneration===void 0){this.observe(this.value.selectedRunId??void 0);return}this.resyncRequested=!0,this.update({connection:`reconnecting`}),this.streamController?.abort()}}async observe(e){if(this.disposed)throw new U(`scope_disposed`,`工作区观察已关闭。`);let t=this.value.selectedRunId;this.disconnect();let n=++this.generation;this.observingGeneration=n;let r=new AbortController;this.controller=r;let i=()=>!this.disposed&&n===this.generation&&!r.signal.aborted;e!==t&&(this.reducer=void 0),this.resyncRequested=!1,this.update({selectedRunId:e??null,projection:this.reducer?.projection()??null,draft:this.drafts.get(e??``)??``,connection:`connecting`,errorCode:null});let a=e,o=!0,s=0;try{for(;i();)try{if(o){this.resyncRequested=!1,this.pendingPages.clear(),this.update({loadingPages:[]});let e=await this.transport.read(this.scope,{teamRunId:a,signal:r.signal});if(!i())return;if(mn(e.scope)!==mn(this.scope)||a!==void 0&&e.selectedRun?.teamRunId!==a)throw new U(`scope_mismatch`,`工作区快照与当前身份或所选任务不一致。`);if(this.reducer){if(!this.reducer.replace(e))throw new U(`reset_required`,`工作区快照早于当前事件水位。`)}else this.reducer=new Mn(e);a=e.selectedRun?.teamRunId;let t=a??null,n=this.value.selectedRunId===t?this.value.draft:this.drafts.get(t??``)??this.value.draft;this.drafts.set(t??``,n),this.update({selectedRunId:t,projection:this.reducer.projection(),draft:n}),o=!1,this.resyncRequested=!1}let e=this.reducer,t=new AbortController;this.streamController=t;let n=()=>t.abort();r.signal.addEventListener(`abort`,n,{once:!0}),this.update({connection:`connected`,errorCode:null});try{await this.transport.subscribe(this.scope,e.watermark(),t.signal,n=>{if(!(!i()||t.signal.aborted||this.reducer!==e)&&e.apply(n)){s=0;let t=e.projection();this.update({projection:t}),t.dirtyCollections.length&&this.refresh()}})}finally{r.signal.removeEventListener(`abort`,n),t.abort()}if(!i())return;if(this.resyncRequested){o=!0;continue}throw new U(`stream_ended`,`工作区事件连接已断开。`)}catch(e){if(!i())return;if(this.resyncRequested){o=!0;continue}let t=e instanceof U?e:new U(`network_error`,`工作区暂时无法连接。`);if(t.code===`scope_mismatch`||[401,403,404].includes(t.status??0)||(Nn.has(t.code)&&(o=!0),s++>=this.maxReconnects))throw t;this.update({connection:`reconnecting`,errorCode:t.code});let n=this.retryDelay(s-1);if(!Number.isFinite(n)||n<0||n>6e4)throw new U(`invalid_retry_delay`,`工作区重试间隔无效。`);await Pn(n,r.signal)}}catch(e){if(!i())return;let t=e instanceof U?e:new U(`network_error`,`工作区无法连接。`);(t.code===`scope_mismatch`||[401,403,404].includes(t.status??0))&&(this.reducer=void 0,this.drafts.clear(),this.update({projection:null,draft:``})),this.update({connection:`offline`,errorCode:t.code})}finally{this.observingGeneration===n&&(this.observingGeneration=void 0)}}loadMore(e,t){if(this.disposed)return Promise.reject(new U(`scope_disposed`,`工作区观察已关闭。`));let n=this.pendingPages.get(e);if(n)return n;let r=this.reducer,i=this.controller,a=this.generation;if(!r||!i||i.signal.aborted)return Promise.reject(new U(`workspace_not_ready`,`工作区尚未就绪。`));let o=r.pageRequest(e,t);if(!o)return Promise.resolve(!1);let s=()=>!this.disposed&&a===this.generation&&!i.signal.aborted&&r===this.reducer,c=()=>s()&&r.snapshotId()===o.snapshotId,l;return l=(async()=>{this.update({loadingPages:[...new Set([...this.value.loadingPages,e])]});try{let e=await this.transport.page(this.scope,o,i.signal);return c()?(r.mergePage(o,e),this.update({projection:r.projection()}),!0):!1}catch(e){if(!c())return!1;let t=e instanceof U?e:new U(`network_error`,`分页加载失败。`);throw t.code===`scope_mismatch`||[401,403,404].includes(t.status??0)?(this.disconnect(),this.reducer=void 0,this.drafts.clear(),this.update({projection:null,draft:``,connection:`offline`,errorCode:t.code}),t):(this.update({errorCode:t.code}),Nn.has(t.code)&&this.refresh(),t)}finally{s()&&this.pendingPages.get(e)===l&&(this.pendingPages.delete(e),this.update({loadingPages:this.value.loadingPages.filter(t=>t!==e)}))}})(),this.pendingPages.set(e,l),l}},In=class{outbox;drainer;state={operations:[],recovering:!1,errorCode:null};listeners=new Set;work;disposed=!1;writable=!0;recoveryController;controller=new AbortController;constructor(e,t){this.outbox=new Qe(e),this.drainer=new $e(this.outbox,t)}getSnapshot=()=>this.state;subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)});update(e){this.disposed||(this.state={...this.state,...e},this.listeners.forEach(e=>e()))}async refresh(){this.disposed||this.update({operations:await this.outbox.list({limit:1e4})})}setWritable(e){this.writable=e,e||this.recoveryController?.abort()}async enqueue(e){if(this.disposed||!this.writable)throw new Ve(`cloud_read_only`);let t=await this.outbox.enqueue(e,{reuseUnresolved:!0});return await this.refresh(),t}async recover(){if(this.disposed)return;if(this.work)return this.work;if(!this.writable){await this.refresh();return}this.update({recovering:!0,errorCode:null});let e=new AbortController;this.recoveryController=e;let t=()=>e.abort();return this.controller.signal.addEventListener(`abort`,t,{once:!0}),this.work=(async()=>{try{await this.drainer.drain({signal:e.signal,maxOperations:50,maxDurationMs:3e4}),await this.refresh()}catch(e){this.update({errorCode:e instanceof Ve?e.code:`outbox_unavailable`})}finally{this.controller.signal.removeEventListener(`abort`,t),this.recoveryController=void 0,this.update({recovering:!1}),this.work=void 0}})(),this.work}async submit(e){let t=await this.enqueue(e);return await this.recover(),await this.outbox.get(t.operationId)??t}dispose(){this.disposed=!0,this.controller.abort(),this.drainer.deactivate(),this.listeners.clear(),this.outbox.close().catch(()=>void 0)}},Ln={fileBytes:20971520,totalBytes:67108864,files:4096,manifestBytes:2097152},Rn=o().regex(/^sha256:[0-9a-f]{64}$/),zn=f({materialId:o().regex(/^tm_[0-9a-f]{64}$/),manifestDigest:Rn,state:x([`pending`,`ready`,`expired`]),sizeBytes:N().int().min(0).max(Ln.totalBytes),manifest:At}),Bn=f({materialId:o().regex(/^tm_[0-9a-f]{64}$/),state:A(`pending`),missingBlobs:T(Rn).max(Ln.files)}),Vn=f({digest:Rn,sizeBytes:N().int().min(0).max(Ln.fileBytes),state:A(`ready`)});async function Hn(e,t,n){let r=zn.parse(e),i=await Mt(r.manifest);if(i!==r.manifestDigest||r.materialId!==`tm_${(await ze([t.authorityId,i])).slice(7)}`||r.sizeBytes!==r.manifest.entries.reduce((e,t)=>e+t.sizeBytes,0)||n&&i!==await Mt(n))throw new U(`material_identity_conflict`,`材料回执与当前身份或所选文件不一致。`);return r}var Un=()=>({state:`idle`,files:[],completed:0,material:null,error:``}),Wn=e=>[`hashing`,`creating`,`uploading`,`verifying`].includes(e),Gn=()=>new DOMException(`Aborted`,`AbortError`),Kn=class{snapshot=Un();selection=null;listeners=new Set;port;scope;constructor(e,t){this.port=e,this.scope=t}getSnapshot=()=>this.snapshot;subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)});update(e){this.snapshot={...this.snapshot,...e};for(let e of this.listeners)e()}clear(){let e=this.selection;this.selection=null,e?.controller?.abort(),this.snapshot=Un();for(let e of this.listeners)e()}dispose(){this.clear(),this.listeners.clear()}cancel(){this.selection?.controller?.abort(),this.selection&&Wn(this.snapshot.state)&&this.update({state:`cancelled`,material:null,error:`上传已取消。重试或移除材料后再开始协作。`})}async select(e){this.clear();let t=Array.from(e);if(!t.length)return;let n={files:t,createKey:`material-create:${crypto.randomUUID()}`,finalizeKey:`material-finalize:${crypto.randomUUID()}`,controller:null};this.selection=n,this.update({files:t.map(e=>({name:e.name,size:e.size}))}),await this.run(n)}async retry(){this.selection&&!Wn(this.snapshot.state)&&await this.run(this.selection)}async run(e){let t=new AbortController;e.controller=t;let n=()=>{if(t.signal.aborted||this.selection!==e||e.controller!==t)throw Gn()},r=setTimeout(()=>t.abort(),6e5);this.update({state:`hashing`,completed:0,error:``,material:null});try{if(e.files.length>Ln.files)throw Error(`最多选择 4096 个文件。`);if(e.files.some(e=>e.size>Ln.fileBytes))throw Error(`单个文件不能超过 20 MiB。`);if(e.files.reduce((e,t)=>e+t.size,0)>Ln.totalBytes)throw Error(`材料总大小不能超过 64 MiB。`);let r=e.files.map(e=>({path:e.name,sizeBytes:e.size,mediaType:e.type||`application/octet-stream`,digest:`sha256:${`0`.repeat(64)}`}));At.parse({kind:`files`,entries:r});for(let t=0;t<e.files.length;t++){n();let i=await e.files[t].arrayBuffer();n();let a=await crypto.subtle.digest(`SHA-256`,i);n(),r[t].digest=`sha256:${Array.from(new Uint8Array(a),e=>e.toString(16).padStart(2,`0`)).join(``)}`,this.update({completed:t+1})}let i=jt.parse({kind:`files`,entries:r,idempotencyKey:e.createKey});if(new TextEncoder().encode(W(i)).byteLength>Ln.manifestBytes)throw Error(`文件清单超过 2 MiB,请减少文件数量或缩短文件名。`);let a=At.parse({kind:i.kind,entries:i.entries});this.update({state:`creating`,completed:0});let o=await this.port.createMaterial(this.scope,i,t.signal);if(n(),o=await Hn(o,this.scope,a),n(),o.state===`expired`)throw Error(`材料已过期,请重新选择文件。`);if(o.state!==`ready`){let i=new Set;for(let a=0;a<r.length;a++)n(),this.update({state:`uploading`,completed:a}),i.has(r[a].digest)||(await this.port.uploadMaterialBlob(this.scope,o,r[a],e.files[a],t.signal),n(),i.add(r[a].digest)),this.update({completed:a+1});this.update({state:`verifying`}),o=await this.port.finalizeMaterial(this.scope,o,e.finalizeKey,t.signal),n(),o=await Hn(o,this.scope,a),n()}if(o.state!==`ready`)throw Error(`服务端尚未验证全部文件,请重试原上传。`);this.update({state:`ready`,material:o})}catch(n){if(this.selection!==e||e.controller!==t)return;t.signal.aborted?this.update({state:`cancelled`,material:null,error:`上传已取消或超时。重试或移除材料后再开始协作。`}):this.update({state:`failed`,material:null,error:n instanceof U?`材料上传未完成(${n.code}),请重试原上传。`:n instanceof c?`文件名、类型或清单无效;同名文件不能同时上传。`:n instanceof Error?n.message:`材料上传失败,请重试。`})}finally{clearTimeout(r),e.controller===t&&(e.controller=null)}}},qn=class{ref;value;reducer=new ee;listeners=new Set;abort;generation=0;disposed=!1;constructor(e){let t=V.safeParse(e);if(!t.success)throw new U(`invalid_member_ref`,`成员观察需要完整的运行引用。`);this.ref=Object.freeze({...t.data}),this.value={ref:this.ref,items:[],cursor:0,connection:`closed`,draft:``,error:null}}getSnapshot=()=>this.value;subscribe=e=>(this.listeners.add(e),()=>this.listeners.delete(e));update(e){this.disposed||(this.value={...this.value,...e},this.listeners.forEach(e=>e()))}setDraft(e){this.update({draft:e})}assertRef(e){if(ke(e)!==ke(this.ref))throw new U(`scope_mismatch`,`成员事件的执行身份不匹配。`)}decode(e){let t=E(e);if(!t)throw new U(`contract_mismatch`,`成员会话内容格式不兼容。`);if(t.sessionId!==this.ref.sessionId||t.runId!==this.ref.runId)throw new U(`scope_mismatch`,`成员事件引用了其他会话或运行。`);return t}ingest(e){if(!this.disposed){if(this.assertRef(e.ref),!Number.isSafeInteger(e.cursor)||e.cursor<0)throw new U(`contract_mismatch`,`成员事件游标无效。`);e.cursor<=this.value.cursor||(this.reducer.apply(this.decode(e.item)),this.update({items:this.reducer.snapshot().items,cursor:e.cursor}))}}restore(e){if(this.assertRef(e.ref),!Number.isSafeInteger(e.cursor)||e.cursor<0)throw new U(`contract_mismatch`,`成员历史游标无效。`);if(e.cursor<this.value.cursor)return;let t=new ee;for(let n of e.items)t.apply(this.decode(n));this.reducer=t,this.update({items:t.snapshot().items,cursor:e.cursor})}async observe(e){if(this.disposed)throw new U(`scope_disposed`,`成员会话已关闭。`);this.disconnect();let t=++this.generation,n=new AbortController;this.abort=n;let r=()=>!n.signal.aborted&&t===this.generation;this.update({connection:`connecting`,error:null});try{let t=!0,i=0;for(;r();)try{if(t){let i=await e.read(this.ref,n.signal);if(!r())return;this.restore(i),t=!1}if(this.update({connection:`connected`,error:null}),await e.subscribe(this.ref,this.value.cursor,n.signal,e=>{r()&&(this.ingest(e),i=0)}),!r())return;throw new U(`stream_ended`,`成员事件连接已断开。`)}catch(e){if(!r())return;if(e instanceof U&&([`scope_mismatch`,`contract_mismatch`].includes(e.code)||[401,403,404].includes(e.status??0))||i++>=6)throw e;e instanceof U&&e.code===`reset_required`&&(t=!0),this.update({connection:`reconnecting`}),await new Promise(e=>{let t=n.signal,r=()=>{clearTimeout(a),t.removeEventListener(`abort`,r),e()},a=setTimeout(()=>{t.removeEventListener(`abort`,r),e()},Math.min(500*2**(i-1),1e4));t.addEventListener(`abort`,r,{once:!0})})}}catch(e){r()&&this.update({connection:`offline`,error:e instanceof Error?e.message:`成员详情加载失败。`})}}setConnection(e){this.update({connection:e})}disconnect(){this.generation++,this.abort?.abort(),this.abort=void 0,this.update({connection:`closed`})}dispose(){this.disconnect(),this.disposed=!0,this.listeners.clear(),this.reducer=new ee,this.value={...this.value,draft:``,items:[],cursor:0,error:null}}};function Jn(e){return new qn(e)}function Yn(e={}){let t=e.fetch??((e,t)=>globalThis.fetch(e,t)),n=(e.baseUrl??`/api/v1/groups`).replace(/\/+$/,``),r=(e,t,r)=>{let i=new URLSearchParams({sessionId:e.sessionId,runId:e.runId,bindingRef:e.bindingRef});return r!==void 0&&i.set(`after`,String(r)),`${n}/${encodeURIComponent(e.groupId)}/members/${encodeURIComponent(e.memberId)}/${t}?${i}`},i=async(e,n)=>{let r=await t(e,{method:`GET`,signal:n});if(!r.ok){let e=await r.json().catch(()=>({}));throw new U(e.error?.code??`member_observation_failed`,e.error?.message??`成员详情请求失败(${r.status})`,r.status)}return r};return{async read(e,t){return(await i(r(e,`conversation`),t)).json()},async subscribe(e,t,n,a){await Fe(await i(r(e,`conversation/events`,t),n),n,(e,t)=>{if(e!==`heartbeat`&&e!==`ping`){if(e===`reset_required`)throw new U(`reset_required`,`成员历史已变化,请重新连接。`);a(t)}})}}}var Xn=o().min(1).max(256),Zn=N().int().min(1).max(2**53-1),Qn=o().regex(/^sha256:[0-9a-f]{64}$/),$n=f({phase:x([`completed`,`failed`]),external_ref:Xn.nullable(),evidence_ref:Xn,result_digest:Qn.nullable(),definitively_not_applied:C()}).refine(e=>e.phase===`failed`===e.definitively_not_applied,`Unproven effect outcome`),er=f({resolutionId:Xn,expectedRevision:Zn,expectedEvidenceDigest:Qn,decision:x([`confirmed_applied`,`confirmed_not_applied`,`accept_risk`]),evidenceRef:Xn,reason:o().min(1).max(1e3),kind:x([`manual_risk_acceptance`,`external_evidence`]),actorSubject:Xn,ownerScopeRef:Xn,verifiedOutcome:$n.nullable()}).refine(e=>e.decision===`accept_risk`?e.kind===`manual_risk_acceptance`&&e.verifiedOutcome===null:e.kind===`external_evidence`&&e.verifiedOutcome?.phase===(e.decision===`confirmed_applied`?`completed`:`failed`),`Unverified effect resolution`),tr=f({effectKey:Xn,groupId:Xn,teamRunId:Xn,toolName:Xn,effectClass:x([`external_idempotent`,`external_reconcilable`]),phase:x([`prepared`,`unknown`,`completed`,`failed`,`resolved`]),revision:Zn,evidenceDigest:Qn,resolution:er.nullable(),resolutionConflict:C(),outcome:$n.nullable()}).refine(e=>e.phase===`resolved`?e.resolution!==null:e.resolution===null&&!e.resolutionConflict&&([`completed`,`failed`].includes(e.phase)?e.outcome?.phase===e.phase:e.outcome===null),`Inconsistent effect projection`),nr=f({scope:Xt,teamRunId:Xn,items:T(tr).max(100),nextCursor:Zn.nullable()}).refine(e=>new Set(e.items.map(e=>e.effectKey)).size===e.items.length,`Duplicate effect identity`),rr=`teams-build/v1`,ir=`teams-loaded-build/v1`,{identifier:Z,operationKey:ar,digest:Q,revision:or,timestamp:sr,commandId:cr,relativePath:lr,length:ur}=zt,dr=x([`prepared`,`unknown`,`completed`,`failed`,`resolved`]),fr=x([`external_idempotent`,`external_reconcilable`]),pr=f({ref:pt,context_ref:Z,store_incarnation:Z,journal_incarnation:Z,native_run_id:Z,tool_call_id:Z,effect_index:N().int().min(0).max(1023),tool_name:Z,adapter_version:Z,effect_class:fr,payload_digest:Q}).refine(e=>e.ref.nativeRunId===null||e.ref.nativeRunId===e.native_run_id,`effect_native_run_mismatch`),mr=f({phase:x([`completed`,`failed`]),external_ref:Z.nullable().default(null),evidence_ref:Z,result_digest:Q.nullable().default(null),definitively_not_applied:C().default(!1)}).refine(e=>e.phase===`failed`===e.definitively_not_applied,`effect_outcome_not_proven`);f({effect_key:Z,payload_digest:Q,request_digest:Q,revision:or,phase:dr});var hr=f({request:pr,phase:x([`prepared`,`unknown`,`completed`,`failed`]),revision:or,evidence_digest:Q,outcome:mr.nullable().default(null)}).refine(e=>[`completed`,`failed`].includes(e.phase)?e.outcome?.phase===e.phase:e.outcome===null,`effect_outcome_inconsistent`);f({effectKey:Z,journalRevision:or,evidenceDigest:Q,authorityRevision:or,phase:dr}),f({expectedRevision:or,expectedEvidenceDigest:Q,decision:x([`confirmed_applied`,`confirmed_not_applied`,`accept_risk`]),evidenceRef:Z,reason:ur(1,1e3),idempotencyKey:ar});var gr=mr.required(),_r=f({resolutionId:Z,expectedRevision:or,expectedEvidenceDigest:Q,decision:x([`confirmed_applied`,`confirmed_not_applied`,`accept_risk`]),evidenceRef:Z,reason:ur(1,1e3),kind:x([`manual_risk_acceptance`,`external_evidence`]),actorSubject:Z,ownerScopeRef:Z,verifiedOutcome:gr.nullable()}).refine(e=>e.decision===`accept_risk`?e.kind===`manual_risk_acceptance`&&e.verifiedOutcome===null:e.kind===`external_evidence`&&e.verifiedOutcome?.phase===(e.decision===`confirmed_applied`?`completed`:`failed`),`effect_resolution_not_verified`),vr=tr.safeExtend({effectKey:Z,groupId:Z,teamRunId:Z,toolName:Z,resolution:_r.nullable(),outcome:gr.nullable()});nr.safeExtend({scope:f({authorityId:ur(1,256),ownerScopeRef:ur(1,512),groupId:ur(1,256)}),teamRunId:Z,items:T(vr).max(100)}),f({contextRef:Z,storeIncarnation:Z,nativeRunId:Z,journalIncarnation:Z,items:T(hr).max(100),nextCursor:zt.text.nullable().default(null)});var yr=new Set([`ensure_session`,`prepare`,`enqueue`,`renew_grant`,`set_grant`,`set_admission`,`invoke`,`respond_interaction`]),br=new Set([`lookup`,`get_result`,`observe`,`get_grant`,`revoke`,`cancel`]),xr=f({schemaVersion:A(1).default(1),issuer:Z,kid:Z,authorityId:Z,issuedAt:sr,expiresAt:sr,nonce:Z,signature:ur(0,128).default(``),audience:A(`agentengine-teams-runtime`).default(`agentengine-teams-runtime`),permitKind:x([`execute`,`recovery`]),subjectRef:Z,agentInstanceId:Z,sessionId:Z,commandId:cr,allowedOperations:T(zt.text).min(1).max(16),payloadDigest:Q,policyDigest:Q,leaderEpoch:or,dispatchEpoch:or,attemptEpoch:or,grantRevision:or}).refine(e=>{let t=Date.parse(e.expiresAt)-Date.parse(e.issuedAt);return t>0&&t<=6e4},`invalid_permit_lifetime`).refine(e=>new Set(e.allowedOperations).size===e.allowedOperations.length&&e.allowedOperations.every(t=>(e.permitKind===`execute`?yr:br).has(t)),`invalid_permit_operations`);f({contextRef:ur(1,2**53-1),expectedIncarnation:ur(1,2**53-1),permit:xr,after:ur(0,256).default(``),limit:N().int().min(1).max(100).default(100)});var Sr={agentDefinitionDigest:`.teams/agent-definition.json`,toolsPolicyDigest:`.teams/tools-policy.json`,behaviorConfigDigest:`.teams/behavior-config.json`,dependencyLockDigest:`.teams/dependency.lock`},Cr={agentDefinitionDigest:Q,toolsPolicyDigest:Q,dependencyLockDigest:Q,behaviorConfigDigest:Q},wr=f({schemaVersion:A(rr).default(rr),entrypoint:lr,...Cr,materialContractVersion:A(`materials/v1`).default(`materials/v1`),files:T(f({path:lr,digest:Q,sizeBytes:N().int().min(0).max(20971520)})).min(1).max(4096)}).superRefine((e,t)=>{let n=new Map(e.files.map(e=>[e.path,e])),r=e.files.map(e=>e.path);n.size===r.length&&!n.has(`.teams/build-manifest.json`)&&r.every((e,t)=>t===0||Be(r[t-1],e)<0)&&n.has(e.entrypoint)&&!e.entrypoint.startsWith(`.teams/`)&&e.files.reduce((e,t)=>e+t.sizeBytes,0)<=67108864&&Object.entries(Sr).every(([t,r])=>n.get(r)?.digest===e[t])&&r.every(e=>e.split(`/`).every((e,t,r)=>t===0||!n.has(r.slice(0,t).join(`/`))))||t.addIssue({code:`custom`,message:`invalid_build_manifest`})});f({schemaVersion:A(ir).default(ir),codeArtifactDigest:Q,buildManifestDigest:Q,...Cr,materialContractVersion:A(`materials/v1`).default(`materials/v1`),immutableWorkspace:A(!0),externalMutableInputs:A(!1)});var Tr=f({buildArtifactRef:Z,state:A(`verified`),authorityId:Z,codeArtifactDigest:Q,buildManifestDigest:Q,sizeBytes:N().int().min(1).max(20971520),manifest:wr});f({idempotencyKey:ar}),j([f({status:A(`missing`)}),Tr.extend({status:A(`recorded`)})]),f({agentId:Z,versionId:Z,instanceId:Z,codeArtifactDigest:Q,buildManifestDigest:Q,bundleDigest:Q,contractDigest:Q,deployedAt:zt.text}),f({buildArtifactRef:Z,localBindingRef:Z,cloudBindingRef:Z,idempotencyKey:ar}),f({releaseRef:Z,buildArtifactRef:Z,localBindingRef:Z,cloudBindingRef:Z,evidenceDigest:Q,verifiedAt:sr});function Er(e){if(!/^[\x21-\x7e]{1,256}$/.test(e.authorityId)||!/^[\x21-\x7e]{1,512}$/.test(e.ownerScopeRef))throw new U(`scope_mismatch`,`云端身份引用无效,请重新连接服务。`);return{"X-Teams-Authority-Id":e.authorityId,"X-Teams-Owner-Scope-Ref":e.ownerScopeRef}}function Dr(e){if(e.aborted)throw new DOMException(`Aborted`,`AbortError`)}async function Or(e,t,n){let r=e.headers.get(`content-length`);if(r!==null&&Number(r)>n)throw await e.body?.cancel().catch(()=>void 0),new U(`workspace_response_too_large`,`工作区响应超过大小限制。`);if(!e.body)throw new U(`workspace_contract_mismatch`,`工作区服务未返回数据。`);let i=e.body.getReader(),a=()=>{i.cancel().catch(()=>void 0)};t.addEventListener(`abort`,a,{once:!0});let o=new TextDecoder(`utf-8`,{fatal:!0}),s=``,c=0;try{for(;;){Dr(t);let e=await i.read();if(Dr(t),e.done){s+=o.decode();break}if(c+=e.value.byteLength,c>n)throw new U(`workspace_response_too_large`,`工作区响应超过大小限制。`);s+=o.decode(e.value,{stream:!0})}try{return JSON.parse(s)}catch{throw new U(`workspace_contract_mismatch`,`工作区响应不是有效 JSON。`)}}finally{t.removeEventListener(`abort`,a),await i.cancel().catch(()=>void 0),i.releaseLock()}}var kr=class{origin;base;fetcher;constructor(e){let t=new URL(e.origin),n=new URL(e.baseUrl??`/api/v1/groups`,t);if(![`https:`,`http:`].includes(t.protocol)||t.origin!==e.origin||n.origin!==t.origin||n.search||n.hash||n.username||n.password)throw new U(`invalid_workspace_origin`,`工作区客户端必须固定到同一服务来源。`);this.origin=t.origin,this.base=n.href.replace(/\/+$/,``),this.fetcher=e.fetch??((e,t)=>globalThis.fetch(e,t))}path(e,t){if(e.origin!==this.origin)throw new U(`scope_mismatch`,`工作区来源与客户端不一致。`);return`${this.base}/${encodeURIComponent(e.groupId)}${t}`}async get(e,t,n){Dr(t);let r=await this.fetcher(e,{method:`GET`,signal:t,credentials:`same-origin`,redirect:`error`,cache:`no-store`,headers:{...Er(n),Accept:`application/json, text/event-stream`}});if(Dr(t),!r.ok){let e=await Or(r,t,65536).catch(()=>({})),n=e.error?.code??e.code;throw new U(typeof n==`string`&&/^[a-z][a-z0-9_]{0,99}$/.test(n)?n:`workspace_http_error`,`工作区请求失败(${r.status})。`,r.status)}return r}async read(e,t){let n=new URLSearchParams({viewVersion:Bt});t.teamRunId!==void 0&&n.set(`teamRunId`,t.teamRunId);let r=On(await Or(await this.get(this.path(e,`/workspace?${n}`),t.signal,e),t.signal,2097152));if(mn(e)!==mn(r.scope)||t.teamRunId!==void 0&&r.selectedRun?.teamRunId!==t.teamRunId)throw new U(`scope_mismatch`,`服务返回了其他身份或任务的工作区。`);return r}async page(e,t,n){if(!wn.safeParse(t).success)throw new U(`invalid_workspace_page`,`工作区分页参数无效。`);if(t.collection!==`runSummaries`&&t.teamRunId===null)throw new U(`scope_mismatch`,`任务分页需要指定协作任务。`);let r=t.collection===`runSummaries`?`/team-runs`:`/team-runs/${encodeURIComponent(t.teamRunId)}/${{taskSummaries:`tasks`,pendingInteractions:`interactions`,recentMessages:`messages`,artifactSummaries:`artifacts`}[t.collection]}`,i=new URLSearchParams({viewVersion:Bt,snapshotId:t.snapshotId,watermark:String(t.watermark),cursor:t.cursor,limit:String(t.limit??100)}),a=kn(await Or(await this.get(this.path(e,`${r}?${i}`),n,e),n,2097152));if(mn(e)!==mn(a.scope))throw new U(`scope_mismatch`,`服务返回了其他身份的分页。`);if(a.snapshotId!==t.snapshotId||a.watermark!==t.watermark||a.teamRunId!==t.teamRunId||a.collection!==t.collection||a.cursor!==t.cursor)throw new U(`workspace_page_mismatch`,`服务分页与请求的只读快照不一致。`);return a}async subscribe(e,t,n,r){if(!Number.isSafeInteger(t)||t<0)throw new U(`invalid_workspace_cursor`,`工作区事件水位无效。`);let i=new URLSearchParams({after:String(t),viewVersion:Bt}),a=await this.get(this.path(e,`/events?${i}`),n,e);try{await Fe(a,n,(t,n)=>{if(t===`heartbeat`||t===`ping`)return;if(t===`reset_required`||t===`snapshot_expired`)throw new U(`reset_required`,`工作区历史需要重新同步。`);if(![`workspace.delta`,`workspace.event`,`message`].includes(t))throw new U(`workspace_contract_mismatch`,`未知工作区事件,需要重新读取。`);let i=An(n);if(mn(e)!==mn(i.scope))throw new U(`scope_mismatch`,`服务事件属于其他授权工作区。`);r(i)})}catch(e){throw e instanceof U&&[`contract_mismatch`,`event_too_large`].includes(e.code)?new U(`workspace_contract_mismatch`,`工作区事件无法验证,需要重新读取。`):e}}},Ar=o().min(1).max(256),jr=N().int().min(0).max(2**53-1),Mr=f({apiVersion:A(ae),scope:Xt.omit({groupId:!0}),items:T(Qt.extend({memberCount:jr,pendingCount:jr,unreadCount:jr,lastMessage:o().default(``)})).max(100),nextCursor:o().min(1).max(4096).nullable()}).refine(e=>new Set(e.items.map(e=>e.groupId)).size===e.items.length,`Duplicate group identity`),Nr=en.extend({name:o().min(1).max(256),revision:jr.min(1),authorityRef:Ar}),Pr=f({apiVersion:A(ae),scope:Xt.omit({groupId:!0}),items:T(Nr).max(100),nextCursor:o().min(1).max(4096).nullable()}).refine(e=>new Set(e.items.map(e=>e.bindingRef)).size===e.items.length,`Duplicate binding identity`),Fr=ln.extend({message:o(),requestSchema:M(o(),p()).nullable()}),Ir=f({status:x([`accepted`,`duplicate`,`rejected`,`uncertain`]),groupId:Ar.optional(),teamRunId:Ar.optional(),messageId:Ar.optional(),watermark:jr.optional(),reason:o().max(2e3).optional(),effectKey:Ar.optional(),phase:A(`resolved`).optional(),revision:jr.min(1).optional(),resolutionId:Ar.optional(),decision:x([`confirmed_applied`,`confirmed_not_applied`,`accept_risk`]).optional(),evidenceDigest:o().regex(/^sha256:[0-9a-f]{64}$/).optional()}),Lr=f({status:x([`confirmed`,`rejected`,`pending`,`uncertain`]),operationId:Ar,payloadDigest:o().regex(/^sha256:[0-9a-f]{64}$/),receipt:Ir.nullable(),code:o().max(100).optional()}),Rr=f({status:A(`missing`)}),zr=encodeURIComponent,Br=class{origin;fetcher;groupsBase;teamsBase;constructor(e){if(this.origin=new URL(e.origin).origin,e.origin!==this.origin||!/^https?:/.test(this.origin))throw new U(`invalid_workspace_origin`,`团队服务来源无效。`);let t=e=>{let t=new URL(e,this.origin);if(t.origin!==this.origin||t.search||t.hash||t.username||t.password)throw new U(`invalid_workspace_origin`,`团队接口必须使用同一服务来源。`);return t.href.replace(/\/+$/,``)};this.groupsBase=t(e.groupsBase??`/api/v1/groups`),this.teamsBase=t(e.teamsBase??`/api/v1/teams`),this.fetcher=e.fetch??globalThis.fetch.bind(globalThis)}async json(e,t,n,r,i){if(t.aborted)throw new DOMException(`Aborted`,`AbortError`);let a=await this.fetcher(e,{method:i?`PUT`:r===void 0?`GET`:`POST`,signal:t,credentials:`same-origin`,redirect:`error`,cache:`no-store`,headers:{...Er(n),Accept:`application/json`,...i?{"Content-Type":`application/octet-stream`}:r===void 0?{}:{"Content-Type":`application/json`}},...i?{body:i}:r===void 0?{}:{body:JSON.stringify(r)}});if(t.aborted)throw new DOMException(`Aborted`,`AbortError`);if(Number(a.headers.get(`content-length`))>2097152)throw await a.body?.cancel(),new U(`cloud_contract_mismatch`,`团队响应超过大小限制。`);let o=a.body?.getReader();if(!o)throw new U(`cloud_contract_mismatch`,`团队服务未返回数据。`);let s=0,c=[],l=()=>{o.cancel()};t.addEventListener(`abort`,l,{once:!0});try{for(;;){let e=await o.read();if(t.aborted)throw new DOMException(`Aborted`,`AbortError`);if(e.done)break;if(s+=e.value.byteLength,s>2097152)throw new U(`cloud_contract_mismatch`,`团队响应超过大小限制。`);c.push(e.value)}}finally{t.removeEventListener(`abort`,l),await o.cancel().catch(()=>void 0),o.releaseLock()}let u=new Uint8Array(s),d=0;for(let e of c)u.set(e,d),d+=e.byteLength;let f;try{f=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(u)),W(f)}catch{throw new U(`cloud_contract_mismatch`,`团队响应格式无效。`)}if(!a.ok){let e=f.error?.code;throw new U(typeof e==`string`&&/^[a-z][a-z0-9_]{0,99}$/.test(e)?e:`cloud_http_error`,`团队请求失败(${a.status})。`,a.status)}return f}async list(e,t,n){if(e.origin!==this.origin)throw new U(`scope_mismatch`,`团队来源不一致。`);let r=new URLSearchParams({limit:`50`});n&&r.set(`cursor`,n);let i=Mr.parse(await this.json(`${this.groupsBase}?${r}`,t,e));if(i.scope.authorityId!==e.authorityId||i.scope.ownerScopeRef!==e.ownerScopeRef||i.items.some(t=>t.authorityRef!==e.authorityId))throw new U(`scope_mismatch`,`团队目录属于其他身份。`);if(n&&i.nextCursor===n)throw new U(`cloud_contract_mismatch`,`团队目录游标未前进。`);return i}async bindings(e,t,n){if(e.origin!==this.origin)throw new U(`scope_mismatch`,`成员目录来源不一致。`);let r=new URLSearchParams({limit:`100`});n&&r.set(`cursor`,n);let i=Pr.parse(await this.json(`${this.groupsBase}/bindings?${r}`,t,e));if(i.scope.authorityId!==e.authorityId||i.scope.ownerScopeRef!==e.ownerScopeRef||i.items.some(t=>t.authorityRef!==e.authorityId))throw new U(`scope_mismatch`,`成员目录属于其他身份。`);if(n&&i.nextCursor===n)throw new U(`cloud_contract_mismatch`,`成员目录游标未前进。`);return i}target(e){if(e.scope.origin!==this.origin)throw new U(`scope_mismatch`,`操作来源不一致。`);let t=e.scope.groupId;if(!t&&e.operation===`groups`)return{path:this.groupsBase,targetId:``};let n=`groups/${t}/`,r=e.operation.slice(n.length);if(!t||!e.operation.startsWith(n)||!/^(messages|interactions|team-runs\/[^/]+\/(control|acceptance)|tasks\/[^/]+\/actions|effects\/[^/]+\/reconcile)$/.test(r))throw new U(`invalid_cloud_operation`,`不支持的团队操作。`);let i=r.split(`/`);return{path:`${this.groupsBase}/${zr(t)}/${i.map(zr).join(`/`)}`,targetId:t}}outcome(e,t){let n=Lr.parse(e);if(n.payloadDigest!==t.payloadDigest||n.receipt?.groupId&&t.scope.groupId&&n.receipt.groupId!==t.scope.groupId)throw new U(`scope_mismatch`,`操作回执与原始意图不一致。`);if(n.status===`confirmed`&&(!n.receipt||![`accepted`,`duplicate`].includes(n.receipt.status)))throw new U(`cloud_contract_mismatch`,`操作尚未被事务接受。`);let r=/^groups\/[^/]+\/team-runs\/([^/]+)\//.exec(t.operation)?.[1],i=typeof t.payload.teamRunId==`string`?t.payload.teamRunId:r;if(n.receipt?.teamRunId&&i&&n.receipt.teamRunId!==i)throw new U(`scope_mismatch`,`操作回执属于其他协作任务。`);if(n.status===`confirmed`&&(!n.receipt?.groupId||t.payload.intent===`start_goal`&&!n.receipt.teamRunId))throw new U(`cloud_contract_mismatch`,`原单缺少已创建的资源标识。`);let a=/^groups\/[^/]+\/effects\/([^/]+)\/reconcile$/.exec(t.operation)?.[1];if(n.status===`confirmed`&&a&&(n.receipt?.effectKey!==a||n.receipt?.phase!==`resolved`||!n.receipt.resolutionId||!n.receipt.revision||!n.receipt.evidenceDigest||n.receipt.decision!==t.payload.decision))throw new U(`scope_mismatch`,`核查回执与原操作不一致。`);if(n.status===`pending`||n.status===`uncertain`)return{status:n.status,serverOperationId:n.operationId};let o=n.receipt;return n.status===`confirmed`?{status:`confirmed`,serverOperationId:n.operationId,...o?{receipt:o}:{}}:{status:`rejected`,code:n.code??`operation_rejected`,serverOperationId:n.operationId,...o?{receipt:o}:{}}}async lookup(e,t){let{targetId:n}=this.target(e),r=await this.json(`${this.teamsBase}/operations/lookup`,t,e.scope,{idempotencyKey:e.idempotencyKey,operation:e.operation,targetId:n});return Rr.safeParse(r).success?{status:`missing`}:this.outcome(r,e)}async send(e,t){let{path:n}=this.target(e);return this.outcome(await this.json(n,t,e.scope,{...e.payload,idempotencyKey:e.idempotencyKey}),e)}async interaction(e,t,n){if(e.origin!==this.origin||t.groupId!==e.groupId)throw new U(`scope_mismatch`,`审批不属于当前团队。`);let r=new URLSearchParams({teamRunId:t.teamRunId,...t.ref}),i=await this.json(`${this.groupsBase}/${zr(e.groupId)}/interactions/${zr(t.ref.interactionId)}?${r}`,n,e),a=Fr.parse(i);if(W(a.ref)!==W(t.ref)||a.teamRunId!==t.teamRunId||a.groupId!==e.groupId||a.revision!==t.revision)throw new U(`stale_interaction`,`审批已更新,请刷新后查看。`);return a}async task(e,t,n,r){if(e.origin!==this.origin)throw new U(`scope_mismatch`,`任务来源不一致。`);let i=ge.parse(await this.json(`${this.groupsBase}/${zr(e.groupId)}/tasks/${zr(t)}?teamRunId=${zr(n)}`,r,e));if(i.taskId!==t||i.groupId!==e.groupId||i.teamRunId!==n)throw new U(`scope_mismatch`,`任务详情不属于当前协作。`);return i}async effects(e,t,n,r=0){if(e.origin!==this.origin||!t||!Number.isSafeInteger(r)||r<0)throw new U(`scope_mismatch`,`执行核查不属于当前工作区。`);let i=new URLSearchParams({after:String(r),limit:`50`}),a=nr.parse(await this.json(`${this.groupsBase}/${zr(e.groupId)}/team-runs/${zr(t)}/effects?${i}`,n,e));if(a.scope.authorityId!==e.authorityId||a.scope.ownerScopeRef!==e.ownerScopeRef||a.scope.groupId!==e.groupId||a.teamRunId!==t||a.items.some(n=>n.groupId!==e.groupId||n.teamRunId!==t||n.resolution&&n.resolution.ownerScopeRef!==e.ownerScopeRef))throw new U(`scope_mismatch`,`执行核查记录属于其他任务或身份。`);if(a.nextCursor!==null&&a.nextCursor<=r)throw new U(`cloud_contract_mismatch`,`执行核查游标未前进。`);return a}async createMaterial(e,t,n){if(e.origin!==this.origin)throw new U(`scope_mismatch`,`材料来源不一致。`);let r=jt.parse(t);return Hn(await this.json(`${this.teamsBase}/materials`,n,e,r),e,{kind:r.kind,entries:r.entries,sourceCommit:r.sourceCommit})}async uploadMaterialBlob(e,t,n,r,i){if(e.origin!==this.origin)throw new U(`scope_mismatch`,`材料来源不一致。`);let a=await Hn(t,e);if(r.size!==n.sizeBytes||!a.manifest.entries.some(e=>W(e)===W(n)))throw new U(`material_identity_conflict`,`文件与原材料清单不一致。`);let o=Vn.parse(await this.json(`${this.teamsBase}/materials/${zr(a.materialId)}/blobs/${zr(n.digest)}`,i,e,void 0,r));if(o.digest!==n.digest||o.sizeBytes!==n.sizeBytes)throw new U(`material_identity_conflict`,`上传回执与原文件不一致。`)}async finalizeMaterial(e,t,n,r){if(e.origin!==this.origin)throw new U(`scope_mismatch`,`材料来源不一致。`);let i=await Hn(t,e),a=await this.json(`${this.teamsBase}/materials/${zr(i.materialId)}/finalize`,r,e,{manifestDigest:i.manifestDigest,idempotencyKey:n}),o=Bn.safeParse(a);if(o.success){let e=o.data.missingBlobs;throw o.data.materialId!==i.materialId||!e.length||new Set(e).size!==e.length||e.some(e=>!i.manifest.entries.some(t=>t.digest===e))?new U(`material_identity_conflict`,`待上传文件与原材料清单不一致。`):Error(`服务端尚未确认所有文件,请重试原上传。`)}return Hn(a,e,i.manifest)}artifactUrl(e,t,n){if(e.origin!==this.origin||!n)throw new U(`scope_mismatch`,`交付物来源不一致。`);Er(e);let r=new URLSearchParams({expectAuthorityId:e.authorityId,expectOwnerScopeRef:e.ownerScopeRef,teamRunId:n});return`${this.groupsBase}/${zr(e.groupId)}/artifacts/${zr(t)}/content?${r}`}},$=n();function Vr({message:e}){let t=null;try{let n=JSON.parse(e);n&&typeof n==`object`&&`arguments`in n&&n.arguments&&typeof n.arguments==`object`&&!Array.isArray(n.arguments)&&(t=n)}catch{}if(!t)return(0,$.jsx)(`p`,{children:e});let n={path:`文件位置`,command:`命令`,cwd:`执行目录`},r={low:`低`,medium:`中`,high:`高`},i=e=>typeof e==`string`?e:JSON.stringify(e,null,2);return(0,$.jsxs)(`div`,{className:`team-approval-details`,children:[(0,$.jsx)(`dl`,{children:Object.entries(t.arguments).filter(([e])=>e!==`content`).map(([e,t])=>(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`dt`,{children:n[e]||e}),(0,$.jsx)(`dd`,{children:(0,$.jsx)(`code`,{children:i(t)})})]},e))}),`content`in t.arguments&&(0,$.jsxs)(`details`,{className:`team-approval-preview`,children:[(0,$.jsx)(`summary`,{children:`查看待写入的文件内容`}),(0,$.jsx)(`pre`,{children:i(t.arguments.content)})]}),typeof t.risk==`string`&&(0,$.jsxs)(`p`,{className:`team-approval-risk`,children:[`风险级别:`,r[t.risk]||t.risk]})]})}function Hr({run:e,onLoadReconciliation:t,onReconcile:n}){let[r,i]=(0,I.useState)(null),[a,o]=(0,I.useState)({}),[s,c]=(0,I.useState)(!1),[l,u]=(0,I.useState)(``);if(!t||!n||e.leaderStandby?.reason!==`execution_uncertain_fenced`)return null;async function d(){c(!0),u(``);try{i(await t(e))}catch(e){u(e instanceof Error?e.message:`暂时无法读取原单。`)}finally{c(!1)}}async function f(r,s){c(!0),u(``);try{await n(r,s,(a[r.commandId]||``).trim()),i(await t(e)),o(e=>({...e,[r.commandId]:``}))}catch(e){u(e instanceof Error?e.message:`核查状态已改变,请刷新。`)}finally{c(!1)}}return(0,$.jsxs)(`section`,{className:`team-run-budget`,"aria-label":`原执行核查`,children:[(0,$.jsx)(`h4`,{children:`旧执行结果需要核查`}),(0,$.jsx)(`p`,{children:`云端已接管,相关分支会等待原单确认。请先核对外部操作和交付物,再决定是否采用结果。`}),(0,$.jsx)(`button`,{type:`button`,className:`team-button`,disabled:s,onClick:()=>void d(),children:s?`正在核对…`:`查看原单证据`}),r?.filter(e=>!e.reconciled).map(e=>{let t=e.quarantinedReceipt,n=a[e.commandId]||``,r=!!e.receiptDigest&&[`succeeded`,`failed`,`cancelled`,`interrupted`].includes(t?.run_status||``);return(0,$.jsxs)(`article`,{className:`team-observer-item`,children:[(0,$.jsxs)(`p`,{children:[e.taskId?`成员执行`:`原 Leader 执行`,` · `,r?`已返回结束回执`:`原节点尚未返回结束回执`]}),t?.output&&(0,$.jsx)(`pre`,{className:`team-observer-details`,children:t.output.slice(0,1e4)}),(0,$.jsxs)(`details`,{children:[(0,$.jsx)(`summary`,{children:`执行引用`}),(0,$.jsx)(`code`,{children:t?.run_id||e.nativeRunId||e.commandId})]}),r&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`label`,{className:`team-field`,children:[`核查说明`,(0,$.jsx)(`textarea`,{value:n,onChange:t=>o(n=>({...n,[e.commandId]:t.target.value})),maxLength:2e3,placeholder:`说明已检查哪些原单或外部结果`})]}),(0,$.jsx)(`button`,{type:`button`,className:`team-button`,disabled:s||!n.trim(),onClick:()=>void f(e,`confirm_ended`),children:`确认已结束`}),e.taskId&&t?.run_status===`succeeded`&&(0,$.jsx)(`button`,{type:`button`,className:`team-button`,disabled:s||!n.trim(),onClick:()=>void f(e,`use_result`),children:`采用已验证成果`}),(0,$.jsx)(`p`,{className:`team-muted`,children:`确认结束不会自动重新执行;必要时再对相应子任务提出重试。`})]})]},e.commandId)}),l&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:l})]})}var Ur=(0,I.lazy)(()=>r(()=>import(`./ExecutionTree-v3HexvPo-Bk8wzGSy.js`).then(e=>e.n),__vite__mapDeps([0,1,2,3,4])).then(e=>({default:e.ExecutionTree}))),Wr=()=>`team-${globalThis.crypto.randomUUID()}`,Gr={owner:`群主`,leader:`Leader`,member:`成员`,system:`系统`},Kr={idle:`空闲`,queued:`待执行`,running:`进行中`,waiting:`等待中`,needs_attention:`需要处理`,unavailable:`不可用`},qr={connecting:`正在连接`,connected:`已连接`,reconnecting:`正在重连 · 任务继续执行`,offline:`连接中断 · 显示最后状态`,closed:`未连接`};function Jr({name:e}){return(0,$.jsx)(`span`,{className:`team-avatar`,"aria-hidden":`true`,children:Array.from(e.trim())[0]||`A`})}function Yr({status:e}){return(0,$.jsx)(`span`,{className:`team-status`,"data-status":e,children:F[e]??e})}function Xr({goal:e}){return e.length<=100?(0,$.jsx)(`h3`,{children:e}):(0,$.jsxs)(`details`,{className:`team-run-goal`,children:[(0,$.jsxs)(`summary`,{children:[(0,$.jsx)(`h3`,{children:e}),(0,$.jsx)(`span`,{children:`完整目标`})]}),(0,$.jsx)(`p`,{children:e})]})}function Zr({snapshot:e,connection:t,onMembers:n,onManage:r}){let i=e.members.filter(e=>e.status!==`removed`);return(0,$.jsxs)(`header`,{className:`team-header`,children:[(0,$.jsxs)(`div`,{className:`team-header-identity`,children:[(0,$.jsx)(`div`,{className:`team-avatar-stack`,"aria-hidden":`true`,children:i.slice(0,3).map(e=>(0,$.jsx)(Jr,{name:e.name},e.memberId))}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h1`,{children:e.group.name}),(0,$.jsxs)(`button`,{type:`button`,className:`team-text-button team-muted`,onClick:n,children:[i.length,` 位成员 · `,i.find(t=>t.memberId===e.group.leaderMemberId)?.name||`Leader`]})]})]}),(0,$.jsxs)(`div`,{className:`team-header-actions`,children:[t!==`connected`&&(0,$.jsx)(`span`,{className:`team-connection`,role:`status`,children:qr[t]}),r&&(0,$.jsx)(`button`,{type:`button`,className:`team-button`,onClick:r,children:`设置`})]})]})}function Qr({messages:e,children:t,emptyState:n,focusFinalDelivery:r}){let a=(0,I.useRef)(null),o=(0,I.useRef)(!0),[s,c]=(0,I.useState)(100),l=e.filter(e=>e.visibility===`public`);(0,I.useLayoutEffect)(()=>{let e=a.current;if(!o.current||!e)return;let t=r?e.querySelector(`.team-final-delivery`):null;t?e.scrollTop+=t.getBoundingClientRect().top-e.getBoundingClientRect().top-12:e.scrollTop=e.scrollHeight},[l.map(e=>`${e.messageId}:${e.revision}`).join(`|`),r]);function u(){let e=a.current;if(!e)return;let t=e.scrollHeight;c(e=>e+100),requestAnimationFrame(()=>{e.scrollTop+=e.scrollHeight-t})}return(0,$.jsx)(`div`,{className:`team-timeline`,ref:a,onScroll:()=>{let e=a.current;e&&(o.current=e.scrollHeight-e.scrollTop-e.clientHeight<80)},"aria-label":`群聊消息`,tabIndex:0,children:(0,$.jsxs)(`div`,{className:`team-timeline-inner`,children:[l.length>s&&(0,$.jsx)(`button`,{className:`team-button team-history-more`,type:`button`,onClick:u,children:`查看更早的消息`}),!l.length&&(n??(0,$.jsxs)(`div`,{className:`team-empty`,children:[(0,$.jsx)(`span`,{className:`team-eyebrow`,children:`一起完成一个目标`}),(0,$.jsx)(`h2`,{children:`团队已就绪`}),(0,$.jsxs)(`p`,{children:[`描述你想得到的成果,Leader 会组织成员分工。`,(0,$.jsx)(`br`,{}),`也可以 @成员,指定由谁参与。`]})]})),l.slice(-s).map(e=>(0,$.jsxs)(`article`,{className:`team-message`,"data-role":e.groupRole,"data-message-id":e.messageId,children:[e.groupRole!==`owner`&&(0,$.jsx)(Jr,{name:e.senderName}),(0,$.jsxs)(`div`,{className:`team-message-main`,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`strong`,{children:e.senderName}),(0,$.jsx)(`span`,{children:Gr[e.groupRole]}),(0,$.jsx)(`time`,{dateTime:e.createdAt,children:new Date(e.createdAt).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}),e.intent===`note`&&(0,$.jsx)(`span`,{children:`仅留言`})]}),(0,$.jsx)(`div`,{className:`team-message-body`,children:e.parts.map((e,t)=>e.kind===`text`?(0,$.jsx)(i,{content:e.text},t):(0,$.jsxs)(`span`,{className:`team-attachment`,children:[e.name||`附件`,` `,(0,$.jsx)(`span`,{children:e.mediaType})]},e.attachmentRef))})]})]},e.messageId)),t]})})}function $r({run:e,tasks:t,pendingCount:n,onOpen:r,compact:i=!1}){let a=t.filter(e=>e.status===`succeeded`).length,o=re(e.status);return(0,$.jsxs)(`button`,{type:`button`,className:`team-progress-card`,"data-active":o||void 0,onClick:r,"aria-label":`查看协作:${e.goal}`,children:[(0,$.jsxs)(`span`,{className:`team-progress-heading`,children:[(0,$.jsx)(`span`,{className:`team-eyebrow`,children:`本轮协作`}),(0,$.jsxs)(`span`,{className:`team-progress-status`,children:[(0,$.jsx)(Yr,{status:e.status}),o&&(0,$.jsxs)(`span`,{className:`team-progress-live`,role:`status`,children:[`实时处理中`,(0,$.jsxs)(`span`,{"aria-hidden":`true`,children:[(0,$.jsx)(`i`,{}),(0,$.jsx)(`i`,{}),(0,$.jsx)(`i`,{})]})]})]})]}),!i&&(0,$.jsx)(`strong`,{children:e.goal}),(0,$.jsxs)(`span`,{className:`team-progress-caption`,children:[t.length?`${a} / ${t.length} 项任务已验收`:`正在整理目标与分工`,n>0?` · ${n} 项需要处理`:``,(0,$.jsxs)(`span`,{children:[`查看协作 `,(0,$.jsx)(`span`,{"aria-hidden":`true`,children:`→`})]})]}),e.reason&&(0,$.jsx)(`span`,{className:`team-progress-reason`,children:e.reason})]})}function ei({members:e,activeRun:t,value:n,onChange:r,onSend:i,disabled:a=!1,recipientMemberId:o,onRecipientChange:s,focusRequest:c=0,artifacts:l=[],referenceArtifacts:u=[],serverAuthority:d=!1}){let f=(0,I.useId)(),p=(0,I.useId)(),m=(0,I.useId)(),h=t?.teamRunId||``,g={attachmentIds:[],note:!1,sourcePath:``,baseRef:``,inputs:``,mode:`auto`},[v,y]=(0,I.useState)({}),b=v[h]||g,x=e=>y(t=>({...t,[h]:{...t[h]||g,...e}})),{attachmentIds:S,note:C}=b,w=e=>y(t=>{let n=t[h]||g;return{...t,[h]:{...n,attachmentIds:typeof e==`function`?e(n.attachmentIds):e}}}),T=e=>x({note:e}),E=[...new Map([...l,...u].map(e=>[e.artifactId,e])).values()],D=E.filter(e=>S.includes(e.artifactId)),[O,ee]=(0,I.useState)(``),k=o??O,A=e=>{ee(e),s?.(e)},j=(0,I.useRef)(null);(0,I.useLayoutEffect)(()=>{let e=j.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,176)}px`)},[n]),(0,I.useEffect)(()=>{c&&j.current?.focus()},[c]);let[M,N]=(0,I.useState)(0),P=(0,I.useRef)(h);P.current=h,(0,I.useEffect)(()=>{L(``)},[h]);let[F,te]=(0,I.useState)(!1),ne=!!(t&&re(t.status)),ie=(!!(t&&!ne)||t?.status===`cancel_requested`)&&!C,[ae,L]=(0,I.useState)(``),R=_(),z=(0,I.useRef)(new Map),B=(0,I.useRef)(!0);(0,I.useEffect)(()=>(B.current=!0,()=>{B.current=!1}),[]);let oe=/@([^\s@]*)$/u.exec(n)?.[1],V=oe===void 0?[]:e.filter(e=>e.status===`active`&&e.name.toLowerCase().includes(oe.toLowerCase()));async function se(){if(a||F||!n.trim()&&!D.length)return;if(ie){L(`这个任务已结束,请新建任务继续协作。`);return}let e=n.trim(),o=C?`note`:t?k===``?`followup`:`directed`:`start_goal`;if(o===`start_goal`&&!e){L(`请补充这轮希望团队完成的目标,或选择仅留言。`);return}let s=k===``?[]:[k],c=[...e?[{kind:`text`,text:e}]:[],...D.map(e=>({kind:`attachment`,attachmentRef:e.artifactId,mediaType:e.mediaType,name:e.name}))],l=t?.teamRunId,u=h;if(o===`start_goal`&&!b.sourcePath.trim()&&(b.baseRef.trim()||b.inputs.trim())){L(`请先填写执行节点上的工作目录。`);return}let f=o===`start_goal`&&b.sourcePath.trim()?{sourcePath:b.sourcePath.trim(),mode:b.mode,...b.mode===`auto`&&b.baseRef.trim()?{baseRef:b.baseRef.trim()}:{},inputs:b.inputs.split(/\r?\n/).map(e=>e.trim()).filter(Boolean)}:void 0;if(f&&d&&f.mode===`auto`&&!/^(?:[a-fA-F0-9]{40}|[a-fA-F0-9]{64})$/.test(b.baseRef.trim())){L(`云端协作的 Git 基线需要完整的 40 或 64 位 commit,请在工作目录设置中填写。`);return}if(f&&f.inputs.length>32){L(`每次任务最多引用 32 个输入文件。`);return}let p=JSON.stringify([c,o,s,l,f]);z.current.get(h)?.digest!==p&&z.current.set(h,{digest:p,idempotencyKey:Wr()});let m=z.current.get(h);te(!0),L(``);try{let e=await i({parts:c,mentions:s,intent:o,...l?{teamRunId:l}:{},...f?{workspace:f}:{},idempotencyKey:m.idempotencyKey});if(!B.current)return;if(e?.status===`rejected`||e?.status===`uncertain`)throw Error(e.reason||(e.status===`uncertain`?`消息接收结果尚未确认。再次提交将使用相同标识核对。`:`消息未被接收。`));P.current===u&&(r(``),w([])),z.current.delete(u),o===`start_goal`&&y(e=>{let t={...e};return delete t[u],t})}catch(e){L(e instanceof Error?e.message:`消息发送失败,请重试。`)}finally{te(!1)}}function ce(e){A(e.memberId),r(n.replace(/@([^\s@]*)$/u,`@${e.name} `)),N(0),j.current?.focus()}return(0,$.jsxs)(`form`,{className:`team-composer-wrap`,onSubmit:e=>{e.preventDefault(),se()},children:[ae&&(0,$.jsx)(`p`,{className:`team-inline-error`,role:`alert`,children:ae}),!!V.length&&(0,$.jsx)(`div`,{className:`team-mention-options`,role:`listbox`,"aria-label":`选择要提及的成员`,children:V.map((e,t)=>(0,$.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":t===M,onClick:()=>ce(e),children:[(0,$.jsx)(Jr,{name:e.name}),(0,$.jsx)(`span`,{children:e.name}),(0,$.jsx)(`small`,{children:e.role===`leader`?`Leader`:`成员`})]},e.memberId))}),!!D.length&&(0,$.jsx)(`div`,{className:`team-selected-artifacts`,"aria-label":`已选择的交付物`,children:D.map(e=>(0,$.jsxs)(`span`,{className:`team-attachment`,children:[e.name,(0,$.jsx)(`button`,{type:`button`,className:`team-text-button`,"aria-label":`移除引用 ${e.name}`,disabled:F,onClick:()=>w(t=>t.filter(t=>t!==e.artifactId)),children:`×`})]},e.artifactId))}),(0,$.jsxs)(`div`,{className:`team-composer`,children:[(0,$.jsx)(`label`,{className:`team-sr-only`,htmlFor:f,children:`给团队的消息`}),(0,$.jsx)(`textarea`,{ref:j,id:f,value:n,rows:2,onChange:e=>{r(e.target.value),N(0)},placeholder:C?`留下一条消息,不启动任务…`:k===``?`描述目标、交付物或需要团队解决的问题…`:`向选中的成员提问或分派工作…`,disabled:a||F,onKeyDown:e=>{if(V.length&&!R(e)&&[`ArrowDown`,`ArrowUp`,`Enter`].includes(e.key)){e.preventDefault(),e.key===`Enter`?ce(V[M%V.length]):N(t=>(t+(e.key===`ArrowDown`?1:-1)+V.length)%V.length);return}e.key===`Enter`&&!e.shiftKey&&!R(e)&&(e.preventDefault(),se())}}),(0,$.jsxs)(`div`,{className:`team-composer-toolbar`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`label`,{className:`team-sr-only`,htmlFor:p,children:`接收成员`}),(0,$.jsxs)(`select`,{id:p,value:k,onChange:e=>A(e.target.value),disabled:a||F,children:[(0,$.jsx)(`option`,{value:``,children:`发给 Leader`}),e.filter(e=>e.status===`active`).map(e=>(0,$.jsxs)(`option`,{value:e.memberId,children:[`@`,e.name]},e.memberId))]}),(0,$.jsxs)(`details`,{className:`team-composer-more`,children:[(0,$.jsx)(`summary`,{"aria-label":`更多消息选项`,children:`···`}),(0,$.jsxs)(`div`,{className:`team-composer-menu`,children:[(0,$.jsxs)(`label`,{className:`team-note-toggle`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:C,onChange:e=>T(e.target.checked),disabled:a||F}),`仅留言,不启动执行`]}),!t&&(0,$.jsxs)(`details`,{className:`team-workspace-options`,children:[(0,$.jsxs)(`summary`,{children:[`工作目录`,b.sourcePath?` · 已选择`:` · 可选`]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`工作目录`,(0,$.jsx)(`input`,{value:b.sourcePath,maxLength:4096,onChange:e=>x({sourcePath:e.target.value}),placeholder:`执行节点上的目录路径`,disabled:F})]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`目录类型`,(0,$.jsxs)(`select`,{value:b.mode,onChange:e=>x({mode:e.target.value}),children:[(0,$.jsx)(`option`,{value:`auto`,children:d?`Git 仓库`:`自动识别 Git`}),(0,$.jsx)(`option`,{value:`directory`,children:`普通目录,仅复制输入文件`})]})]}),b.mode===`auto`&&(0,$.jsxs)(`label`,{className:`team-field`,children:[`Git 基线`,(0,$.jsx)(`input`,{value:b.baseRef,maxLength:256,onChange:e=>x({baseRef:e.target.value}),placeholder:d?`完整 commit(40 或 64 位)`:`HEAD`,disabled:F})]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`输入文件`,(0,$.jsx)(`textarea`,{rows:2,value:b.inputs,onChange:e=>x({inputs:e.target.value}),placeholder:`每行一个相对路径(非 Git 目录)`,disabled:F})]}),(0,$.jsxs)(`p`,{children:[`路径须在执行节点可访问。Git 使用提交版本,不带入未提交修改;普通目录只复制列出的输入文件。`,d&&`云端协作需填写固定 commit,并确保节点可访问相同版本。`]})]})]})]}),!!E.length&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`label`,{className:`team-sr-only`,htmlFor:m,children:`引用本群交付物`}),(0,$.jsxs)(`select`,{id:m,value:``,disabled:a||F||D.length>=8,onChange:e=>{let t=e.target.value;t&&w(e=>e.includes(t)?e:[...e,t])},children:[(0,$.jsx)(`option`,{value:``,children:`引用交付物`}),(0,$.jsx)(`optgroup`,{label:`当前任务`,children:l.filter(e=>!S.includes(e.artifactId)).map(e=>(0,$.jsx)(`option`,{value:e.artifactId,children:e.name},e.artifactId))}),(0,$.jsx)(`optgroup`,{label:`其他任务(显式引用)`,children:u.filter(e=>!l.some(t=>t.artifactId===e.artifactId)&&!S.includes(e.artifactId)).map(e=>(0,$.jsx)(`option`,{value:e.artifactId,children:e.name},e.artifactId))})]})]})]}),(0,$.jsx)(`button`,{className:`team-button team-primary`,type:`submit`,disabled:a||F||ie||!n.trim()&&!D.length,children:F?`正在发送`:`发送`})]})]}),(0,$.jsx)(`p`,{className:`team-composer-help`,children:ie?t?.status===`cancel_requested`?`正在停止任务 · 等待执行端确认`:`任务已结束 · 新建任务以继续协作`:(0,$.jsxs)($.Fragment,{children:[`Enter 发送 · Shift + Enter 换行`,C?` · 留言不会唤醒成员`:``]})})]})}function ti({tasks:e,members:t,selectedTaskId:n,onSelect:r}){return e.length?(0,$.jsx)(`div`,{className:`team-task-board`,children:[[`attention`,`需处理`],[`running`,`进行中`],[`waiting`,`等待`],[`done`,`已完成`]].map(([i,a])=>{let o=e.filter(e=>te(e)===i);return o.length?(0,$.jsxs)(`section`,{children:[(0,$.jsxs)(`h3`,{children:[a,(0,$.jsx)(`span`,{children:o.length})]}),o.map(e=>(0,$.jsxs)(`button`,{className:`team-task-row`,type:`button`,onClick:()=>r(e),"aria-pressed":n===e.taskId,children:[(0,$.jsxs)(`span`,{className:`team-task-row-main`,children:[(0,$.jsx)(`strong`,{children:e.title}),(0,$.jsx)(Yr,{status:e.status})]}),(0,$.jsxs)(`span`,{className:`team-muted`,children:[t.find(t=>t.memberId===e.ownerMemberId)?.name||`待分派`,ne(e)?` · ${ne(e)}`:e.dependencies.length&&e.status===`blocked`?` · 等待前置任务验收`:``]})]},e.taskId))]},i):null})}):(0,$.jsxs)(`div`,{className:`team-panel-empty`,children:[(0,$.jsx)(`h3`,{children:`尚未分派任务`}),(0,$.jsx)(`p`,{children:`Leader 建立任务后,负责人、依赖与验收进度会出现在这里。`})]})}function ni({artifact:e,onOpen:t}){let n=ie(e.uri);return(0,$.jsxs)(`div`,{className:`team-artifact`,children:[t?(0,$.jsx)(`button`,{className:`team-text-button`,type:`button`,onClick:()=>t(e),children:e.name}):n?(0,$.jsx)(`a`,{href:n,target:`_blank`,rel:`noopener noreferrer`,children:e.name}):(0,$.jsx)(`span`,{children:e.name}),(0,$.jsxs)(`small`,{children:[e.mediaType,e.digest?` · ${e.digest.slice(0,12)}`:``]})]})}function ri({task:e,members:t,onAction:n,onOpenArtifact:r,onMemberSelect:a}){let[o,s]=(0,I.useState)(``),[c,l]=(0,I.useState)(!1),[u,d]=(0,I.useState)(``),[f,p]=(0,I.useState)(!1),[m,h]=(0,I.useState)(``),g=e.attempts.find(e=>e.attemptId===o)??e.attempts.at(-1),_=t.find(t=>t.memberId===e.ownerMemberId);async function v(t){if(!(!n||c)){if(t===`reject`&&!m.trim()){d(`请填写需要修改的内容。`);return}l(!0),d(``);try{await n(e,t,t===`reject`?m.trim():void 0),p(!1)}catch(e){d(e instanceof Error?e.message:`操作失败。`)}finally{l(!1)}}}return(0,$.jsxs)(`section`,{className:`team-task-detail`,children:[(0,$.jsx)(Yr,{status:e.status}),(0,$.jsx)(`h3`,{children:e.title}),_&&(0,$.jsxs)(`button`,{className:`team-member-link`,type:`button`,onClick:()=>a?.(_),disabled:!a,children:[(0,$.jsx)(Jr,{name:_.name}),_.name,(0,$.jsx)(`span`,{children:`查看执行`})]}),(0,$.jsx)(`p`,{children:e.description}),ne(e)&&(0,$.jsx)(`p`,{className:`team-detail-reason`,children:ne(e)}),(0,$.jsx)(`h4`,{children:`验收要求`}),(0,$.jsx)(`p`,{children:e.acceptanceCriteria||`等待确定验收要求`}),e.attempts.length>1&&(0,$.jsxs)(`label`,{className:`team-field`,children:[`执行记录`,(0,$.jsx)(`select`,{value:g?.attemptId,onChange:e=>s(e.target.value),children:e.attempts.map(e=>(0,$.jsxs)(`option`,{value:e.attemptId,children:[`第 `,e.attemptNumber,` 次执行 · `,F[e.status]]},e.attemptId))})]}),g?.result&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`h4`,{children:`交付结果`}),(0,$.jsx)(i,{content:g.result})]}),g?.artifacts.map(e=>(0,$.jsx)(ni,{artifact:e,onOpen:r},e.artifactId)),f&&(0,$.jsxs)(`label`,{className:`team-field`,children:[`修改意见`,(0,$.jsx)(`textarea`,{rows:3,maxLength:2e3,value:m,onChange:e=>h(e.target.value)}),(0,$.jsx)(`button`,{className:`team-button`,type:`button`,disabled:c||!m.trim(),onClick:()=>void v(`reject`),children:`提交修改意见`})]}),n&&(0,$.jsxs)(`div`,{className:`team-task-actions`,children:[e.status===`awaiting_acceptance`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`team-button team-primary`,type:`button`,disabled:c,onClick:()=>void v(`accept`),children:`验收通过`}),(0,$.jsx)(`button`,{className:`team-button`,type:`button`,disabled:c,onClick:()=>p(!0),children:`提出修改`})]}),[`failed`,`cancelled`].includes(e.status)&&(0,$.jsx)(`button`,{className:`team-button`,type:`button`,disabled:c,onClick:()=>void v(`retry`),children:`重新执行`})]}),u&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:u})]})}function ii({interaction:e,member:t,onRespond:n}){let[r,i]=(0,I.useState)({}),[a,o]=(0,I.useState)(!1),[s,c]=(0,I.useState)(!1),[l,d]=(0,I.useState)(``),f=(0,I.useRef)(null);async function p(t,r){if(a||s)return;let i=JSON.stringify([t,r,e.revision]);f.current?.digest!==i&&(f.current={digest:i,idempotencyKey:Wr()}),o(!0),d(``);try{let i=await n({ref:e.ref,expectedRevision:e.revision,action:t,response:r,idempotencyKey:f.current.idempotencyKey});if(i?.status===`rejected`||i?.status===`uncertain`)throw Error(i.reason||`审批结果尚未确认,请核对后重试。`);c(!0)}catch(e){d(e instanceof Error?e.message:`审批提交失败。`)}finally{o(!1)}}return(0,$.jsxs)(`article`,{className:`team-interaction-card`,children:[(0,$.jsxs)(`span`,{className:`team-eyebrow`,children:[t?.name||`成员`,` · 需要你的确认`]}),(0,$.jsx)(`h3`,{children:e.title}),(0,$.jsx)(Vr,{message:e.message}),s||e.status===`resolving`?(0,$.jsx)(`p`,{role:`status`,children:`已提交,等待执行端确认`}):e.kind===`input`&&e.requestSchema?(0,$.jsx)(u,{schema:e.requestSchema,values:r,onChange:i,disabled:a,onSubmit:()=>void p(`submit`,r),onCancel:()=>void p(`cancel`,{})}):(0,$.jsxs)(`div`,{className:`team-task-actions`,children:[(0,$.jsx)(`button`,{type:`button`,className:`team-button`,disabled:a,onClick:()=>void p(`reject`,{approved:!1}),children:`拒绝`}),(0,$.jsx)(`button`,{type:`button`,className:`team-button team-primary`,disabled:a,onClick:()=>void p(`approve`,{approved:!0}),children:`同意`})]}),l&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:l})]})}function ai({interactions:e,members:t,onRespond:n}){return(0,$.jsx)(`section`,{className:`team-interactions`,"aria-label":`团队审批与待处理输入`,children:e.filter(e=>[`pending`,`resolving`].includes(e.status)).map(e=>(0,$.jsx)(ii,{interaction:e,member:t.find(t=>t.memberId===e.ref.memberId),onRespond:n},Ae(e.ref)))})}function oi({members:e,selectedMemberId:t,onSelect:n}){return(0,$.jsx)(`div`,{className:`team-member-list`,children:e.filter(e=>e.status!==`removed`).map(e=>(0,$.jsxs)(`button`,{type:`button`,className:`team-member-row`,onClick:()=>n(e),"aria-pressed":t===e.memberId,children:[(0,$.jsx)(Jr,{name:e.name}),(0,$.jsxs)(`span`,{children:[(0,$.jsxs)(`strong`,{children:[e.name,(0,$.jsx)(`small`,{children:e.role===`leader`?`Leader`:`成员`})]}),(0,$.jsxs)(`span`,{children:[Kr[e.executionStatus],e.binding.kind===`local_build`?` · 本地`:` · 云端`]})]}),(0,$.jsx)(`span`,{"aria-hidden":`true`,children:`→`})]},e.memberId))})}function si({member:e,observation:t,onDirectedMessage:n,onRetry:r,onCancel:a,cancelPending:o=!1,cancelBusy:s=!1}){return(0,$.jsxs)(`section`,{className:`team-member-inspector`,children:[(0,$.jsxs)(`div`,{className:`team-member-heading`,children:[(0,$.jsx)(Jr,{name:e.name}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{children:e.name}),(0,$.jsxs)(`span`,{className:`team-muted`,children:[e.role===`leader`?`Leader`:`成员`,` · `,Kr[e.executionStatus]]})]})]}),e.responsibility&&(0,$.jsx)(`p`,{className:`team-member-responsibility`,children:e.responsibility}),(0,$.jsxs)(`div`,{className:`team-member-actions`,children:[n&&(0,$.jsx)(`button`,{className:`team-button`,type:`button`,onClick:n,children:`在群内 @成员`}),a&&e.binding.capabilities.cancel&&e.activeRunId&&(0,$.jsx)(`button`,{className:`team-button`,type:`button`,disabled:o||s,onClick:a,children:s?`正在提交…`:o?`已请求停止`:`请求停止此执行`})]}),(0,$.jsx)(`p`,{className:`team-observer-note`,children:`执行详情只读。关闭面板不会停止成员。`}),t?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`team-connection`,role:`status`,children:qr[t.connection]}),t.error&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:t.error}),t.connection===`offline`&&r&&(0,$.jsx)(`button`,{className:`team-button`,type:`button`,onClick:r,children:`重新连接`}),(0,$.jsx)(`div`,{className:`team-member-transcript`,children:t.items.filter(e=>e.visibility===`public`&&(e.kind!==`progress`||Object.keys(e.payload).length!==0)).map(e=>(0,$.jsxs)(`article`,{className:`team-observer-item`,children:[(0,$.jsx)(`span`,{className:`team-eyebrow`,children:e.kind===`assistant_text`?`回复`:e.kind===`user_message`?`输入`:e.kind===`tool_call`?`工具调用`:e.kind===`reasoning`?`执行思考`:e.kind}),typeof e.payload.text==`string`?(0,$.jsx)(i,{content:e.payload.text}):typeof e.payload.error==`string`?(0,$.jsx)(`p`,{className:`team-inline-error`,children:e.payload.error}):(0,$.jsxs)(`details`,{className:`team-observer-details`,children:[(0,$.jsx)(`summary`,{children:String(e.payload.tool||e.payload.summary||e.payload.title||(e.kind===`tool_call`?`查看工具结果`:`查看事件详情`))}),(0,$.jsx)(`pre`,{children:JSON.stringify(e.payload,null,2)})]})]},e.itemId))}),!t.items.length&&(0,$.jsx)(`p`,{className:`team-muted`,children:`尚无可展示的运行事件。`})]}):(0,$.jsx)(`p`,{className:`team-muted`,children:e.activeRunId?`正在读取执行详情…`:`当前没有进行中的执行。`})]})}function ci(e){return e.snapshot?(0,$.jsx)(li,{...e,snapshot:e.snapshot},`${e.snapshot.group.authorityRef}:${e.snapshot.group.groupId}`):(0,$.jsx)(`section`,{className:`ksadk-teams team-workspace`,children:e.loading?(0,$.jsxs)(`div`,{className:`team-loading`,role:`status`,"aria-label":`正在加载群组`,children:[(0,$.jsx)(`span`,{}),(0,$.jsx)(`span`,{}),(0,$.jsx)(`span`,{})]}):(0,$.jsxs)(`div`,{className:`team-empty`,children:[(0,$.jsx)(`h2`,{children:e.error?`群组暂不可用`:`选择一个团队,开始协作`}),(0,$.jsx)(`p`,{children:e.error||`创建群组并选择 Leader,让各有所长的 Agent 共同完成目标。`}),e.onRetry&&(0,$.jsx)(`button`,{type:`button`,className:`team-button`,onClick:e.onRetry,children:`重试`})]})})}function li({snapshot:e,connection:t=`connected`,draft:n,onDraftChange:r,initialDrafts:a,initialSelection:o,onSelectionChange:s,onSend:c,onRetry:l,error:u,onManage:d,serverAuthority:f,standbyCandidates:p,onConfigureStandby:m,onLoadReconciliation:h,onReconcile:g,onControl:_,onAcceptRun:v,onTaskAction:y,onRespondInteraction:b,onOpenArtifact:x,onMemberSelect:S,renderMember:C,onLoadExecution:w}){let[T,E]=(0,I.useState)(a?.[o?.teamRunId||P(e)?.teamRunId||``]||``),[D,O]=(0,I.useState)(``),[ee,k]=(0,I.useState)(0),[A,j]=(0,I.useState)(null),[M,N]=(0,I.useState)(!1),[F,ne]=(0,I.useState)(o?.taskId??``),[ie,ae]=(0,I.useState)(o?.teamRunId||P(e)?.teamRunId||``),[L,R]=(0,I.useState)(!1),[z,B]=(0,I.useState)(``),[oe,V]=(0,I.useState)(),[se,ce]=(0,I.useState)(!1),[le,ue]=(0,I.useState)(``),[de,fe]=(0,I.useState)(!1),[pe,me]=(0,I.useState)(``),he=(0,I.useRef)(null),ge=(0,I.useRef)(null),_e=(0,I.useRef)(new Map(Object.entries(a||{}).map(([e,t])=>[e,{text:t,recipient:``}]))),H=e.teamRuns.find(e=>e.teamRunId===ie)??null,ve=!!(ie&&!H),ye=e.tasks.filter(e=>e.teamRunId===H?.teamRunId);(0,I.useEffect)(()=>{H&&R(!1)},[H]);let be=H?e.runMembers?.filter(e=>e.teamRunId===H.teamRunId):void 0,xe=H&&e.runMembers?be||[]:e.members.filter(e=>e.status!==`removed`),Se=ye.find(e=>e.taskId===F),Ce=xe.find(e=>e.memberId===z),we=[...e.deliveries.filter(e=>e.teamRunId===H?.teamRunId).map(e=>e.runId),...ye.flatMap(e=>e.attempts.map(e=>e.source?.runId))].filter(Boolean),Te=!e.runMembers&&e.teamRuns.length===1,U=e=>!!(H&&(we.includes(e.runId)||be?.some(t=>t.sessionId===e.sessionId)||Te&&xe.some(t=>t.sessionId===e.sessionId))),Ee=e.interactions.filter(e=>U(e.ref)),De=[...new Map([...(e.artifacts||[]).filter(e=>U(e.source)),...ye.flatMap(e=>e.attempts.flatMap(e=>e.artifacts))].filter(t=>t.source.groupId===e.group.groupId&&t.source.authorityRef===e.group.authorityRef).map(e=>[e.artifactId,e])).values()],Oe=Ee.filter(e=>e.status===`pending`).length+((H?.policy||e.group.policy)?.taskAcceptance===`leader`?0:ye.filter(e=>te(e)===`attention`).length),ke=n??T;function Ae(e){E(e),r?.(e,ie),_e.current.set(ie,{text:e,recipient:D})}function je(e){_e.current.set(ie,{text:ke,recipient:D});let t=_e.current.get(e);ae(e),R(!1),ne(``),B(``),V(void 0),O(t?.recipient||``),E(t?.text||``),r?.(t?.text||``,e),ue(``),fe(!1),me(``),N(!1),s?.({teamRunId:e,taskId:``})}function Me(e){ne(e),s?.({teamRunId:H?.teamRunId??``,taskId:e})}function Ne(e){ge.current=document.activeElement,j(e),B(``)}function Pe(){j(null),N(!1),ge.current?.focus()}function Fe(e){O(e.memberId),j(null),N(!1),k(e=>e+1)}function Ie(e){V(void 0),B(e.memberId),j(`members`),S?.(e)}(0,I.useEffect)(()=>{A&&he.current?.focus()},[A]);async function Le(e){if(!(!H||!_||se)){ce(!0),ue(``);try{await _(H,e)}catch(e){ue(e instanceof Error?e.message:`操作失败。`)}finally{ce(!1)}}}async function Re(e){if(!(!H||!v||se)){if(!e&&!pe.trim()){ue(`请说明需要修改的内容。`);return}ce(!0),ue(``);try{await v(H,e,e?void 0:pe.trim()),fe(!1),me(``)}catch(e){ue(e instanceof Error?e.message:`验收提交失败。`)}finally{ce(!1)}}}async function W(e){let t=await c(e);return t?.teamRunId&&!e.teamRunId&&[`accepted`,`duplicate`].includes(t.status)&&(_e.current.set(``,{text:``,recipient:``}),ae(t.teamRunId),R(!0),E(``),r?.(``,``),O(``),s?.({teamRunId:t.teamRunId,taskId:``})),t}let ze=H?.status===`awaiting_acceptance`&&v&&(0,$.jsxs)(`section`,{className:`team-final-delivery`,"aria-label":`最终验收`,children:[(0,$.jsx)(`span`,{className:`team-eyebrow`,children:`团队已提交成果`}),(0,$.jsx)(`h3`,{children:`请确认这次交付`}),H.result&&(0,$.jsx)(`div`,{className:`team-final-summary`,children:(0,$.jsx)(i,{content:H.result})}),(0,$.jsx)(`p`,{children:`验收通过后完成任务;提出修改会交给 Leader 继续推进。`}),de&&(0,$.jsxs)(`label`,{className:`team-field`,children:[`修改意见`,(0,$.jsx)(`textarea`,{value:pe,onChange:e=>me(e.target.value),placeholder:`哪些内容需要调整?期望是什么?`,rows:3,maxLength:2e3,disabled:se})]}),(0,$.jsx)(`div`,{className:`team-task-actions`,children:de?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`team-button`,type:`button`,disabled:se,onClick:()=>fe(!1),children:`取消修改`}),(0,$.jsx)(`button`,{className:`team-button team-primary`,type:`button`,disabled:se||!pe.trim(),onClick:()=>void Re(!1),children:`提交修改意见`})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`team-button`,type:`button`,disabled:se,onClick:()=>fe(!0),children:`提出修改`}),(0,$.jsx)(`button`,{className:`team-button team-primary`,type:`button`,disabled:se,onClick:()=>void Re(!0),children:`通过验收`})]})}),le&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:le})]});return(0,$.jsxs)(`section`,{className:`ksadk-teams team-workspace`,"data-panel":A||`closed`,"data-execution":M?`open`:`closed`,children:[(0,$.jsx)(Zr,{snapshot:e,connection:t,onProgress:()=>Ne(`tasks`),onMembers:()=>Ne(`members`),onManage:d}),u&&(0,$.jsxs)(`div`,{className:`team-top-error`,role:`alert`,children:[u,l&&(0,$.jsx)(`button`,{className:`team-text-button`,type:`button`,onClick:l,children:`重新连接`})]}),(0,$.jsxs)(`div`,{className:`team-body`,children:[(0,$.jsxs)(`nav`,{className:`team-run-directory`,"aria-label":`团队任务`,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`h2`,{children:`任务`}),(0,$.jsx)(`button`,{type:`button`,className:`team-text-button`,onClick:()=>{je(``),k(e=>e+1)},children:`+ 新任务`})]}),(0,$.jsxs)(`div`,{className:`team-run-list`,children:[[...e.teamRuns].reverse().map(e=>(0,$.jsxs)(`button`,{type:`button`,className:`team-run-item`,"aria-current":e.teamRunId===ie?`page`:void 0,onClick:()=>je(e.teamRunId),children:[(0,$.jsx)(`strong`,{children:e.goal}),(0,$.jsx)(Yr,{status:e.status})]},e.teamRunId)),!e.teamRuns.length&&(0,$.jsx)(`p`,{className:`team-muted`,children:`每个目标是一个独立任务。`})]})]}),(0,$.jsxs)(`div`,{className:`team-chat-pane`,"aria-hidden":M||void 0,children:[(0,$.jsxs)(`header`,{className:`team-task-heading`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`team-eyebrow`,children:H?`当前任务`:`新的目标`}),(0,$.jsx)(`h2`,{children:H?.goal||(ve?L?`正在同步任务…`:`未找到所选任务`:`希望团队完成什么?`)})]}),(0,$.jsx)(`button`,{type:`button`,className:`team-button`,"aria-label":`查看任务详情`,onClick:()=>Ne(`tasks`),children:`详情`})]}),(0,$.jsxs)(`label`,{className:`team-mobile-task-picker team-field`,children:[`切换任务`,(0,$.jsxs)(`select`,{value:ie,onChange:e=>je(e.target.value),children:[(0,$.jsx)(`option`,{value:``,children:`+ 新任务`}),e.teamRuns.map(e=>(0,$.jsx)(`option`,{value:e.teamRunId,children:e.goal},e.teamRunId))]})]}),(0,$.jsxs)(Qr,{emptyState:ve?(0,$.jsxs)(`div`,{className:`team-empty`,role:`status`,children:[(0,$.jsx)(`p`,{children:L?`正在读取刚创建的任务,消息已提交。`:`请从任务列表重新选择;当前输入不会发送到其他任务。`}),l&&(0,$.jsx)(`button`,{className:`team-button`,type:`button`,onClick:l,children:`重新读取`})]}):void 0,focusFinalDelivery:ze?H?.teamRunId:void 0,messages:e.messages.filter(e=>H?e.teamRunId===H.teamRunId||Te&&!e.teamRunId:!1),children:[H&&(0,$.jsx)($r,{compact:!0,run:H,tasks:ye,pendingCount:Oe,onOpen:()=>Ne(`tasks`)}),ze]},ie),Oe>0&&(0,$.jsxs)(`button`,{type:`button`,className:`team-attention-banner`,onClick:()=>Ne(`tasks`),children:[Oe,` 项需要处理 `,(0,$.jsxs)(`span`,{children:[`查看 `,(0,$.jsx)(`span`,{"aria-hidden":`true`,children:`→`})]})]}),(0,$.jsx)(ei,{serverAuthority:f,referenceArtifacts:[...new Map([...e.artifacts||[],...e.tasks.flatMap(e=>e.attempts.flatMap(e=>e.artifacts))].filter(t=>t.source.groupId===e.group.groupId&&t.source.authorityRef===e.group.authorityRef).map(e=>[e.artifactId,e])).values()],artifacts:De,recipientMemberId:D,onRecipientChange:O,focusRequest:ee,members:xe,activeRun:H,value:ke,onChange:Ae,onSend:W,disabled:e.group.status!==`active`||ve})]}),A&&(0,$.jsxs)(`aside`,{className:`team-sidepanel`,ref:he,tabIndex:-1,"aria-label":`任务详情`,onKeyDown:e=>{e.key===`Escape`&&(e.stopPropagation(),Pe())},children:[(0,$.jsxs)(`header`,{className:`team-panel-header`,children:[(0,$.jsx)(`nav`,{className:`team-detail-tabs`,"aria-label":`任务详情分类`,children:[[`tasks`,`进度`],[`members`,`成员`],[`artifacts`,`交付物`]].map(([e,t])=>(0,$.jsx)(`button`,{type:`button`,"aria-pressed":A===e,onClick:()=>Ne(e),children:t},e))}),(0,$.jsx)(`button`,{type:`button`,className:`team-button team-icon-button`,"aria-label":`关闭详情`,onClick:Pe,children:`×`})]}),(0,$.jsx)(`div`,{className:`team-panel-scroll`,children:A===`tasks`?(0,$.jsxs)($.Fragment,{children:[H&&(0,$.jsxs)(`div`,{className:`team-run-overview`,children:[(0,$.jsx)(Yr,{status:H.status}),(0,$.jsx)(Xr,{goal:H.goal}),H.reason&&(0,$.jsx)(`p`,{children:H.reason}),_&&re(H.status)&&(0,$.jsxs)(`div`,{className:`team-run-actions`,children:[(0,$.jsx)(`button`,{className:`team-text-button`,type:`button`,disabled:se||H.status===`cancel_requested`,onClick:()=>void Le(H.dispatchSuspended?`resume_dispatch`:`suspend_dispatch`),children:H.dispatchSuspended?`继续协作`:`暂停派发`}),(0,$.jsx)(`button`,{className:`team-text-button team-danger`,type:`button`,disabled:se||H.status===`cancel_requested`,onClick:()=>void Le(`stop`),children:`停止任务`})]}),le&&!ze&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:le}),(0,$.jsx)(ui,{run:H,enabled:f,candidates:p||[],configure:m}),(0,$.jsx)(Hr,{run:H,onLoadReconciliation:h,onReconcile:g},H.teamRunId),(0,$.jsxs)(`details`,{className:`team-run-budget`,children:[(0,$.jsx)(`summary`,{children:`执行限额`}),(0,$.jsxs)(`dl`,{children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`dt`,{children:`累计启动`}),(0,$.jsxs)(`dd`,{children:[H.budget.startsUsed,` / `,H.budget.maxStarts]})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`dt`,{children:`同时执行`}),(0,$.jsxs)(`dd`,{children:[`最多 `,H.budget.maxConcurrent,` 个`]})]}),H.budget.maxTokens&&(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`dt`,{children:`Token`}),(0,$.jsxs)(`dd`,{children:[H.budget.tokensUsed??0,` / `,H.budget.maxTokens]})]}),H.budget.maxDurationSeconds&&(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`dt`,{children:`主动执行时限`}),(0,$.jsxs)(`dd`,{children:[Math.round(H.budget.maxDurationSeconds/60),` 分钟`]})]})]})]})]}),b&&(0,$.jsx)(ai,{interactions:Ee,members:xe,onRespond:b}),Se?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`team-text-button team-back`,type:`button`,onClick:()=>Me(``),children:`← 所有分工`}),(0,$.jsx)(ri,{task:Se,members:xe,onAction:(H?.policy||e.group.policy)?.taskAcceptance===`leader`?void 0:y,onOpenArtifact:x,onMemberSelect:Ie},Se.taskId)]}):(0,$.jsx)(ti,{tasks:ye,members:xe,selectedTaskId:F,onSelect:e=>Me(e.taskId)})]}):A===`artifacts`?(0,$.jsxs)(`section`,{className:`team-artifact-list`,children:[(0,$.jsx)(`h3`,{children:`任务交付物`}),De.length?De.map(e=>(0,$.jsx)(ni,{artifact:e,onOpen:x},e.artifactId)):(0,$.jsx)(`p`,{className:`team-muted`,children:`成员发布的成果会保存在这里。`})]}):Ce?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`team-text-button team-back`,type:`button`,onClick:()=>B(``),children:`← 所有成员`}),C?.(Ce,{directedMessage:()=>Fe(Ce),teamRunId:H?.teamRunId},oe)??(0,$.jsx)(si,{member:Ce,onDirectedMessage:()=>Fe(Ce)})]}):(0,$.jsx)(oi,{members:xe,selectedMemberId:z,onSelect:Ie})}),A===`tasks`&&(ye.length>0||!!(w&&H))&&(0,$.jsx)(`footer`,{className:`team-panel-footer`,children:(0,$.jsxs)(`button`,{className:`team-button team-expand`,type:`button`,onClick:()=>N(!0),children:[`查看执行详情 `,(0,$.jsx)(`span`,{"aria-hidden":`true`,children:`↗`})]})})]}),M&&(0,$.jsxs)(`section`,{className:`team-execution-workspace`,"aria-label":`执行工作台`,children:[(0,$.jsxs)(`header`,{className:`team-panel-header`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`team-eyebrow`,children:`执行详情`}),(0,$.jsx)(`h2`,{children:H?.goal})]}),(0,$.jsx)(`button`,{className:`team-button`,type:`button`,onClick:()=>N(!1),children:`返回聊天`})]}),(0,$.jsx)(I.Suspense,{fallback:(0,$.jsxs)(`div`,{className:`team-loading`,role:`status`,"aria-label":`正在加载执行视图`,children:[(0,$.jsx)(`span`,{}),(0,$.jsx)(`span`,{})]}),children:(0,$.jsx)(di,{authorityRef:e.group.authorityRef,groupId:e.group.groupId,teamRunId:H?.teamRunId||``,watermark:e.watermark,load:w,tasks:ye,members:xe,selectedTaskId:F,onSelect:e=>{Me(e.taskId),N(!1),j(`tasks`)},onSelectNode:e=>{e.kind===`task`&&e.taskId?(Me(e.taskId),j(`tasks`),N(!1)):e.source&&(B(e.source.memberId),V(e.source),j(`members`),N(!1))}},`${e.group.groupId}:${H?.teamRunId||``}`)})]})]})]})}function ui({run:e,enabled:t,candidates:n,configure:r}){let[i,a]=(0,I.useState)(e.leaderStandby?.standbyBindingRef||``),[o,s]=(0,I.useState)(!1),[c,l]=(0,I.useState)(``),[u,d]=(0,I.useState)(e.leaderStandby),f=n.filter(e=>e.kind!==`local_build`&&[`ready`,`unchecked`].includes(e.availability?.state||``)&&e.capabilities.leader&&e.capabilities.enqueue);if((0,I.useEffect)(()=>{a(e.leaderStandby?.standbyBindingRef||``),l(``),d(e.leaderStandby)},[e.teamRunId,e.leaderStandby]),!t||!r||!f.length&&!u)return null;async function p(){if(!(!i||o||!r)){s(!0),l(``);try{d(await r(e,i))}catch(e){l(e instanceof Error?e.message:`备用配置失败。`)}finally{s(!1)}}}return(0,$.jsxs)(`details`,{className:`team-run-budget team-standby`,children:[(0,$.jsxs)(`summary`,{children:[`云端接管设置`,u?.state===`active`?` · 已接管`:u?.state===`blocked`?` · 等待恢复`:``]}),u&&(0,$.jsx)(`p`,{role:`status`,children:u.state===`active`?`云端 Leader 已接管当前任务。`:u.state===`armed`?`兼容的备用节点已配置;接管前会保存进度并核对原执行。`:{standby_offline:`云端备用节点离线,正在等待恢复。`,checkpoint_required:`正在等待 Leader 保存可恢复的任务进度。`,execution_uncertain:`正在核对原执行结果,避免重复执行。`}[u.reason||``]||`暂时无法接管,请检查执行状态。`}),re(e.status)&&!!f.length&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`label`,{className:`team-field`,children:[`Leader 备用节点`,(0,$.jsxs)(`select`,{value:i,onChange:e=>a(e.target.value),disabled:o,children:[(0,$.jsx)(`option`,{value:``,children:`选择云端节点,保存时检查`}),f.map(e=>(0,$.jsx)(`option`,{value:e.bindingRef,children:e.name||e.agentId},e.bindingRef))]})]}),(0,$.jsx)(`p`,{children:`本地 Leader 失联后由备用节点继续。新任务沿用此配置;本地恢复时不抢回当前任务。`}),(0,$.jsx)(`button`,{type:`button`,className:`team-button`,disabled:o||!i,onClick:()=>void p(),children:o?`正在校验…`:`配置备用节点`})]}),c&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:c})]})}function di({authorityRef:e,groupId:t,teamRunId:n,watermark:r,load:i,...a}){let o=(0,I.useRef)(i),s=!!i;(0,I.useEffect)(()=>{o.current=i},[i]);let[c,l]=(0,I.useState)(null),[u,d]=(0,I.useState)(``),[f,p]=(0,I.useState)(!!i),[m,h]=(0,I.useState)(0);return(0,I.useEffect)(()=>{if(!o.current||!n)return;let r=new AbortController;return o.current(n,r.signal).then(i=>{if(!r.signal.aborted){if(i.groupId!==t||i.teamRunId!==n||i.nodes.some(t=>t.source&&t.source.authorityRef!==e))throw Error(`执行视图不属于当前协作轮次。`);l(i),d(``)}}).catch(e=>{r.signal.aborted||d(e instanceof Error?e.message:`执行视图加载失败。`)}).finally(()=>{r.signal.aborted||p(!1)}),()=>r.abort()},[e,t,n,r,m,s]),(0,$.jsx)(Ur,{...a,execution:c,executionLoading:f,executionError:u,onRetryExecution:i?()=>{d(``),p(!0),h(e=>e+1)}:void 0})}var fi=e=>`${e.binding.kind}:${e.binding.agentId}`,pi=e=>e.binding.capabilities.enqueue&&e.binding.availability?.state!==`unavailable`;function mi(e){let t=new Map;for(let n of e)t.set(fi(n),[...t.get(fi(n))||[],n]);return[...t.values()].map(e=>e.sort((e,t)=>Number(pi(t))-Number(pi(e))||(t.binding.createdAt||``).localeCompare(e.binding.createdAt||``)))}function hi({open:e,candidates:t,serverAuthority:n,loading:r,error:i,onRefresh:a,hasMore:o,onLoadMore:s,onClose:c,onCreate:l}){let u=(0,I.useRef)(null),d=(0,I.useId)(),[f,p]=(0,I.useState)(``),[m,h]=(0,I.useState)(``),[g,_]=(0,I.useState)([]),[v,y]=(0,I.useState)(``),[b,x]=(0,I.useState)(``),[S,C]=(0,I.useState)(!1),[w,T]=(0,I.useState)(``),E=(0,I.useRef)(null),D=e=>!!(n&&e.binding.availability?.state===`unchecked`),O=e=>pi(e)||D(e),ee=e=>O(e)&&(e.binding.capabilities.leader||D(e)),k=g.map(e=>{let n=t.find(t=>t.binding.bindingRef===e.binding.bindingRef);return n?{...n,memberId:e.memberId,responsibility:e.responsibility}:e}),A=k.filter(ee),j=A.some(e=>e.memberId===v)?v:A[0]?.memberId??``,M=k.find(e=>e.memberId===j)?.binding.kind===`local_build`,N=t.filter(e=>e.binding.kind===`cloud`&&ee(e)),P=N.some(e=>e.binding.bindingRef===b)?b:``,F=mi(t).map(e=>e.sort((e,t)=>Number(O(t))-Number(O(e)))).filter(e=>e.some(e=>`${e.name} ${e.description||``} ${e.binding.agentId}`.toLowerCase().includes(m.toLowerCase())));(0,I.useEffect)(()=>{let t=u.current;if(!t)return;let n=document.activeElement;return e&&!t.open&&t.showModal(),!e&&t.open&&t.close(),()=>{t.open&&t.close(),n?.focus()}},[e]);function te(e,t){_(n=>t?[...n,e]:n.filter(t=>fi(t)!==fi(e)))}async function ne(){if(S||r)return;T(``);let e={name:f.trim(),members:k.map(e=>({memberId:e.memberId,name:e.name,bindingRef:e.binding.bindingRef,...e.responsibility?.trim()?{responsibility:e.responsibility.trim()}:{}})),leaderMemberId:j,...n&&M&&P?{leaderStandbyBindingRef:P}:{}};try{if(Oe(e),k.length<2)throw Error(`请选择至少 2 位成员,一起组成团队。`);if(k.some(e=>!t.some(t=>t.binding.bindingRef===e.binding.bindingRef&&O(t))))throw Error(`已选成员中有 Agent 暂不可用,请更换版本或移除后重试。`);if(!j)throw Error(`所选成员中至少需要一位支持 Leader 的 Agent。`)}catch(e){T(e instanceof Error?e.message:`团队配置无效。`);return}let i=JSON.stringify(e);E.current?.digest!==i&&(E.current={digest:i,idempotencyKey:`group-${globalThis.crypto.randomUUID()}`}),C(!0);try{await l({...e,idempotencyKey:E.current.idempotencyKey}),p(``),h(``),_([]),y(``),x(``),E.current=null,c()}catch(e){T(e instanceof Error?e.message:`创建团队失败,已保留你的选择。`)}finally{C(!1)}}return(0,$.jsx)(`dialog`,{ref:u,className:`ksadk-teams team-create-dialog`,"aria-labelledby":d,onCancel:e=>{e.preventDefault(),S||c()},children:(0,$.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),ne()},children:[(0,$.jsxs)(`header`,{children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`team-eyebrow`,children:`新的协作空间`}),(0,$.jsx)(`h2`,{id:d,children:`组建团队`}),(0,$.jsx)(`p`,{children:`选择搭档,让 Leader 组织分工与复核。`})]}),(0,$.jsx)(`button`,{type:`button`,className:`team-button team-icon-button`,"aria-label":`关闭创建团队`,onClick:c,disabled:S,children:`×`})]}),(0,$.jsxs)(`div`,{className:`team-create-body`,children:[(0,$.jsxs)(`label`,{className:`team-field`,children:[`团队名称`,(0,$.jsx)(`input`,{value:f,onChange:e=>p(e.target.value),placeholder:`例如:产品交付团队`,maxLength:100,disabled:S,required:!0})]}),(0,$.jsxs)(`fieldset`,{disabled:S,children:[(0,$.jsxs)(`legend`,{children:[`选择成员 `,(0,$.jsxs)(`span`,{children:[g.length,` / 8`]})]}),(0,$.jsxs)(`div`,{className:`team-directory-search`,children:[(0,$.jsx)(`input`,{"aria-label":`搜索 Agent`,value:m,onChange:e=>h(e.target.value),placeholder:`搜索名称或职责`}),a&&(0,$.jsx)(`button`,{type:`button`,className:`team-text-button`,disabled:r,onClick:a,children:`刷新`})]}),r&&(0,$.jsx)(`p`,{role:`status`,className:`team-muted`,children:`正在读取 Agent…`}),i&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:i}),!r&&!t.length?(0,$.jsx)(`p`,{className:`team-muted`,children:`还没有 Agent。先创建 Agent 并完成构建,再回来组队。`}):(0,$.jsxs)(`div`,{className:`team-candidate-list`,children:[F.map(e=>{let t=k.find(t=>fi(t)===fi(e[0])),n=t||e[0],i=n.binding.kind===`local_build`?`本地`:`云端`,a=D(n)?`创建时验证执行能力`:n.description||n.binding.description||(n.binding.capabilities.leader?`可担任 Leader`:`任务成员`);return(0,$.jsxs)(`div`,{className:`team-candidate-group`,children:[(0,$.jsxs)(`label`,{className:`team-candidate`,"data-selected":!!t,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:!!t,disabled:r||!t&&(!O(n)||g.length>=8),onChange:e=>te(n,e.target.checked)}),(0,$.jsx)(`span`,{className:`team-avatar`,"aria-hidden":`true`,children:Array.from(n.name)[0]}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{title:n.name,children:n.name}),(0,$.jsx)(`small`,{className:`team-candidate-description`,title:a,children:a}),!O(n)&&(0,$.jsx)(`small`,{className:`team-candidate-reason`,children:n.binding.availability?.reason||`当前不支持团队执行`})]}),(0,$.jsx)(`span`,{className:`team-source`,"data-available":O(n),"data-state":n.binding.availability?.state,title:n.binding.availability?.reason||(n.binding.availability?.state===`unchecked`?`创建时检查执行环境`:void 0),children:i})]}),t&&(0,$.jsxs)(`details`,{className:`team-version-choice`,children:[(0,$.jsx)(`summary`,{children:`职责与版本`}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`工作职责`,(0,$.jsx)(`textarea`,{"aria-label":`${n.name} 的工作职责`,rows:2,maxLength:2e3,value:n.responsibility||``,onChange:e=>{let t=e.target.value;_(e=>e.map(e=>fi(e)===fi(n)?{...e,responsibility:t}:e))},placeholder:`例如:核对实现边界,补充测试证据`})]}),(0,$.jsxs)(`p`,{children:[`模型:`,n.binding.modelName||`沿用固定版本配置`]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`执行版本`,(0,$.jsx)(`select`,{"aria-label":`${n.name} 的执行版本`,value:n.binding.bindingRef,onChange:t=>{let r=e.find(e=>e.binding.bindingRef===t.target.value);_(e=>e.map(e=>fi(e)===fi(n)?{...r,memberId:e.memberId,responsibility:e.responsibility}:e))},children:e.map(e=>(0,$.jsxs)(`option`,{value:e.binding.bindingRef,disabled:!O(e),children:[e.binding.version||e.binding.buildId||e.binding.bindingRef,O(e)?``:` · 不可用`]},e.binding.bindingRef))})]})]})]},fi(n))}),!F.length&&!!t.length&&(0,$.jsx)(`p`,{className:`team-muted`,children:`没有匹配的 Agent。`})]}),o&&s&&(0,$.jsx)(`button`,{type:`button`,className:`team-button`,disabled:r||S,onClick:s,children:`加载更多成员`}),g.filter(e=>!t.some(t=>t.binding.bindingRef===e.binding.bindingRef)).map(e=>(0,$.jsxs)(`p`,{className:`team-inline-error`,children:[e.name,` · 当前目录中不可用 `,(0,$.jsx)(`button`,{type:`button`,className:`team-text-button`,onClick:()=>te(e,!1),children:`移除`})]},e.memberId))]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`指定 Leader`,(0,$.jsxs)(`select`,{value:j,onChange:e=>y(e.target.value),disabled:S||!A.length,children:[(0,$.jsx)(`option`,{value:``,disabled:!0,children:`从已选成员中指定`}),A.map(e=>(0,$.jsxs)(`option`,{value:e.memberId,children:[e.name,D(e)?` · 创建时验证`:``]},e.memberId))]}),(0,$.jsxs)(`small`,{children:[`Leader 审核成员成果,你处理工具审批和最终验收。`,A.some(D)&&` 待检查候选需通过服务端能力验证后才能担任 Leader。`]})]}),n&&M&&(0,$.jsxs)(`details`,{className:`team-version-choice`,children:[(0,$.jsx)(`summary`,{children:`本地离线时继续协作`}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`Leader 云端备用`,(0,$.jsxs)(`select`,{value:P,onChange:e=>x(e.target.value),disabled:S||r,children:[(0,$.jsx)(`option`,{value:``,children:`暂不配置`}),N.map(e=>(0,$.jsxs)(`option`,{value:e.binding.bindingRef,children:[e.name,` · `,D(e)?`创建时验证`:e.binding.version||e.binding.buildId||`固定版本`]},e.binding.bindingRef))]})]}),(0,$.jsx)(`p`,{className:`team-muted`,children:`服务端验证同一发布及实际执行能力后,备用才可启用。云端模型、工具和任务资料需预先准备;本地凭据不会复制到云端。`}),!N.length&&(0,$.jsx)(`p`,{className:`team-muted`,children:`还没有可用的云端 Leader 候选。可以先创建团队,接入节点后再配置。`})]}),(0,$.jsx)(`p`,{className:`team-create-footnote`,children:`创建时检查选中成员的执行环境;配置失败会保留草稿。`}),w&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:w})]}),(0,$.jsxs)(`footer`,{children:[(0,$.jsx)(`button`,{type:`button`,className:`team-button`,onClick:c,disabled:S,children:`稍后继续`}),(0,$.jsx)(`button`,{type:`submit`,className:`team-button team-primary`,disabled:S||r||k.length<2,children:S?`正在检查并创建…`:`创建团队`})]})]})})}var gi=class{value={snapshot:null,connection:`closed`,error:null,draft:``};listeners=new Set;abort;generation=0;client;groupId;authorityRef;constructor(e,t,n){this.client=e,this.groupId=t,this.authorityRef=n}getSnapshot=()=>this.value;subscribe=e=>(this.listeners.add(e),()=>this.listeners.delete(e));update(e){this.value={...this.value,...e},this.listeners.forEach(e=>e())}setDraft=e=>this.update({draft:e});start=()=>{this.disconnect();let e=++this.generation,t=new AbortController;this.abort=t;let n=()=>e===this.generation&&!t.signal.aborted;this.update({error:null,connection:`connecting`}),this.client.watch(this.groupId,{signal:t.signal,onSnapshot:e=>{if(n()){if(e.group.authorityRef!==this.authorityRef)throw new U(`scope_mismatch`,`群授权域发生变化,请重新打开。`);this.update({snapshot:e})}},onConnection:e=>{n()&&this.update({connection:e})},onError:e=>{n()&&this.update({error:e.message})}}).catch(e=>{n()&&this.update({connection:`offline`,error:e instanceof Error?e.message:`群连接失败。`})})};disconnect=()=>{this.generation++,this.abort?.abort(),this.abort=void 0};send=e=>this.client.send(this.groupId,e)};function _i(e){let t=(0,I.useMemo)(()=>new gi(e.client,e.groupId,e.authorityRef),[e.client,e.groupId,e.authorityRef]),n=(0,I.useSyncExternalStore)(t.subscribe,t.getSnapshot,t.getSnapshot);return(0,I.useEffect)(()=>(t.start(),t.disconnect),[t]),{...n,loading:!n.snapshot&&n.connection===`connecting`,setDraft:t.setDraft,send:t.send,reconnect:t.start}}function vi({scope:e,teamRunId:t,product:n,canWrite:r,refreshKey:i,pendingEffectKeys:a,command:o}){let[s,c]=(0,I.useState)([]),[l,u]=(0,I.useState)(null),[d,f]=(0,I.useState)(!1),[p,m]=(0,I.useState)(!1),[h,g]=(0,I.useState)(``),[_,v]=(0,I.useState)(null),[y,b]=(0,I.useState)(``),[x,S]=(0,I.useState)(!1),[C,w]=(0,I.useState)(!1),[T,E]=(0,I.useState)(``),D=(0,I.useRef)(null),O=(0,I.useRef)(0),ee=(0,I.useRef)(null),k=hn(e),A=(0,I.useId)(),j=(0,I.useCallback)(async(r=0)=>{D.current?.abort();let i=new AbortController;D.current=i;let a=++O.current;f(!0),g(``);try{let o=await n.effects(e,t,i.signal,r);if(i.signal.aborted||a!==O.current)return;c(e=>r?[...e.filter(e=>!o.items.some(t=>t.effectKey===e.effectKey)),...o.items]:o.items),u(o.nextCursor),m(!0)}catch{!i.signal.aborted&&a===O.current&&g(`执行记录读取失败,请重试。当前不能据此判断外部操作是否完成。`)}finally{!i.signal.aborted&&a===O.current&&f(!1)}},[k,t,n]);(0,I.useEffect)(()=>(j(),()=>D.current?.abort()),[j,i]),(0,I.useEffect)(()=>{_&&ee.current?.scrollIntoView?.({block:`nearest`})},[_?.effect.effectKey]);let M=_?s.find(e=>e.effectKey===_.effect.effectKey):void 0,N=!!(_&&p&&(!M||M.revision!==_.effect.revision||M.evidenceDigest!==_.effect.evidenceDigest)),P=!!(_&&a.includes(_.effect.effectKey));async function F(){if(!(!_||!r||h||d||C||N||P||!x||!y.trim())){w(!0),E(``);try{await o(`effects/${_.effect.effectKey}/reconcile`,{expectedRevision:_.effect.revision,expectedEvidenceDigest:_.effect.evidenceDigest,decision:`accept_risk`,evidenceRef:_.evidenceRef,reason:y.trim()}),v(null),b(``),S(!1),j()}catch(e){E(e instanceof Error?e.message:`核查决定尚未确认,请核对原单。`),j()}finally{w(!1)}}}return(0,$.jsxs)(`section`,{className:`team-effect-review`,"aria-label":`外部操作核查`,children:[(0,$.jsxs)(`header`,{className:`team-effect-review-header`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{children:`外部操作核查`}),(0,$.jsx)(`p`,{className:`team-muted`,children:`结果未确认的操作需要核查后再继续。核查决定会保留记录。`})]}),(0,$.jsx)(`button`,{type:`button`,className:`team-button`,disabled:d,onClick:()=>void j(),children:`刷新记录`})]}),h&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:h}),d&&(0,$.jsx)(`p`,{role:`status`,className:`team-muted`,children:`正在读取原执行记录…`}),p&&!d&&!h&&!s.length&&(0,$.jsx)(`p`,{className:`team-muted`,children:l?`这一页没有待核查操作,请继续读取后续记录。`:`当前任务没有待核查的外部操作。`}),s.map(e=>(0,$.jsxs)(`article`,{className:`team-effect-card`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`strong`,{children:e.toolName}),(0,$.jsx)(`span`,{className:`team-effect-state`,children:e.resolutionConflict?`核查后收到不同证据`:e.phase===`prepared`?`执行结果待核对`:`外部结果未确认`})]}),(0,$.jsx)(`p`,{className:`team-muted`,children:e.resolutionConflict?`新证据与已有核查决定不一致,后续处理保持暂停。请重新核对原记录,并记录新的决定。`:`系统保留了原操作,不会因断线或重启自动重复发送。请先查看外部系统。`}),e.outcome?.evidence_ref&&(0,$.jsxs)(`p`,{className:`team-muted`,children:[`原执行证据:`,e.outcome.evidence_ref]}),(0,$.jsx)(`button`,{type:`button`,className:`team-button`,disabled:!r||!!h||C||a.includes(e.effectKey),onClick:()=>{v({effect:e,evidenceRef:`manual-review:${crypto.randomUUID()}`}),b(``),S(!1),E(``)},children:a.includes(e.effectKey)?`等待核对原单`:`记录核查决定`})]},e.effectKey)),l!==null&&(0,$.jsx)(`button`,{className:`team-button team-history-more`,type:`button`,disabled:d,onClick:()=>void j(l),children:`更多执行记录`}),_&&(0,$.jsxs)(`form`,{ref:ee,className:`team-effect-form`,onSubmit:e=>{e.preventDefault(),F()},children:[(0,$.jsxs)(`h3`,{children:[`核查 `,_.effect.toolName]}),(0,$.jsx)(`p`,{className:`team-muted`,children:`此操作记录你接受剩余不确定性的决定,不会重新调用外部工具,也不会将原执行标记为成功。`}),(0,$.jsxs)(`label`,{className:`team-field`,htmlFor:A,children:[`核查说明`,(0,$.jsx)(`textarea`,{id:A,value:y,maxLength:1e3,rows:3,disabled:C||P,onChange:e=>b(e.target.value),placeholder:`说明查验了什么、得到什么结果,以及继续处理的依据。`})]}),(0,$.jsxs)(`label`,{className:`team-effect-consent`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:x,disabled:C||P,onChange:e=>S(e.target.checked)}),(0,$.jsx)(`span`,{children:`我已核对外部记录,接受剩余不确定性并允许后续处理。`})]}),N&&(0,$.jsxs)(`p`,{role:`alert`,children:[`记录已更新,核查说明已保留。`,M&&(0,$.jsx)(`button`,{type:`button`,className:`team-text-button`,onClick:()=>{v({..._,effect:M}),S(!1)},children:`读取最新证据后重新核对`})]}),P&&(0,$.jsx)(`p`,{role:`status`,children:`决定已保存在本地,服务端接收结果仍待确认。请在操作记录中核对原单。`}),T&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:T}),(0,$.jsxs)(`div`,{className:`team-task-actions`,children:[(0,$.jsx)(`button`,{type:`button`,className:`team-button`,disabled:C,onClick:()=>v(null),children:`收起`}),(0,$.jsx)(`button`,{type:`submit`,className:`team-button team-primary`,disabled:!r||!!h||d||C||N||P||!x||!y.trim(),children:C?`正在记录…`:`记录核查决定`})]})]})]})}var yi={operations:[],recovering:!1,errorCode:null},bi=()=>()=>{},xi=()=>yi,Si=e=>e.endsWith(`/messages`)?`团队消息`:e.endsWith(`/control`)?`任务控制`:e.endsWith(`/interactions`)?`审批回复`:e.endsWith(`/acceptance`)?`任务验收`:e.endsWith(`/actions`)?`子任务操作`:e.endsWith(`/reconcile`)?`执行核查决定`:`创建团队`,Ci={queued:`等待提交`,sending:`正在核对原单`,confirmed:`服务端已接收`,rejected:`请求被拒绝`,uncertain:`接收结果未确认`},wi={connecting:`正在读取工作区`,connected:`实时连接`,reconnecting:`正在恢复连接 · 执行状态待同步`,offline:`连接中断 · 显示最后同步状态`,closed:`尚未连接`},Ti={idle:`空闲`,queued:`排队中`,running:`执行中`,waiting:`等待中`,needs_attention:`需要处理`,unavailable:`不可用`},Ei=e=>e===`execution_preparation_expired`?`准备时间过长,执行授权已过期。尚未开始执行,可重新提交请求或重试任务。`:e,Di={armed:{label:`已配置备用 Leader`,description:`已配置备用执行端,当前仍由原 Leader 负责。`},fencing_old:{label:`正在停止原 Leader`,description:`正在撤销原执行授权,确认后再启动备用 Leader。`},waiting_old_grant:{label:`等待原授权失效`,description:`原执行授权尚未确认结束,备用 Leader 暂不执行。`},activating:{label:`正在启动备用 Leader`,description:`原授权已隔离,正在恢复本轮任务上下文。`},active:{label:`备用 Leader 已接管`,description:`当前由备用 Leader 继续处理本轮任务。`},blocked:{label:`Leader 接管暂时受阻`,description:`接管条件尚未满足,需要先处理以下原因。`}},Oi={effect_reconciliation_required:`存在结果未确认的外部操作,核对后才能继续接管。`,release_verification_required:`尚未确认备用执行端与原 Leader 使用相同的发布内容。`,standby_probe_unavailable:`暂时无法确认备用执行端的可用状态。`,standby_capability_unavailable:`备用执行端暂不具备本轮任务所需的能力。`,binding_revision_mismatch:`执行端配置已变化,需要重新验证。`,standby_binding_mismatch:`备用执行端与本轮任务的预设配置不一致。`,original_context_unavailable:`原执行上下文暂不可用。`,grant_lookup_uncertain:`原执行授权的状态尚未确认。`,material_not_ready:`任务材料尚未准备就绪。`,leader_takeover_conflict:`本轮任务状态已变化,暂时不能接管。`};function ki({value:e}){let t=Di[e.state];return(0,$.jsxs)(`section`,{className:`team-cloud-standby`,"aria-label":`Leader 接管状态`,"data-state":e.state,role:`status`,children:[(0,$.jsx)(`strong`,{children:t.label}),(0,$.jsx)(`p`,{children:t.description}),e.reason&&(0,$.jsx)(`p`,{className:`team-cloud-standby-reason`,children:Oi[e.reason]||`服务端原因:${e.reason}`})]})}function Ai(e){let[t,n]=(0,I.useState)(null),[r,i]=(0,I.useState)(``),a=hn(e.scope);return(0,I.useEffect)(()=>{let t,r=!0,a=new Fn(e.scope,e.transport);return(async()=>{try{t=new In({scope:e.scope},e.product),t.setWritable(!1),await t.refresh(),r&&(n({observer:a,operations:t}),i(``))}catch{t?.dispose(),r&&(i(`当前浏览器无法打开持久操作存储,工作区仅供查看。`),n({observer:a,operations:null}))}})(),a.observe(e.initialRunId),()=>{r=!1,a.dispose(),t?.dispose()}},[a,e.transport,e.product]),!t||hn(t.observer.scope)!==a?(0,$.jsx)(`section`,{className:`ksadk-teams team-workspace`,children:(0,$.jsx)(`p`,{role:r?`alert`:`status`,className:`team-cloud-notice`,children:r||`正在准备团队工作区…`})}):(0,$.jsx)(ji,{...e,readOnlyReason:r||e.readOnlyReason,resources:t})}function ji({resources:e,...t}){let{observer:n,operations:r}=e,{onSelectionChange:i,onChanged:a}=t,o=(0,I.useSyncExternalStore)(n.subscribe,n.getSnapshot,n.getSnapshot),s=(0,I.useSyncExternalStore)(r?.subscribe??bi,r?.getSnapshot??xi,r?.getSnapshot??xi),[c,l]=(0,I.useState)(``),[u,d]=(0,I.useState)(!1),[f,p]=(0,I.useState)(``),[m,h]=(0,I.useState)(null),g=(0,I.useRef)(0),[_,v]=(0,I.useState)(()=>typeof navigator>`u`||navigator.onLine);(0,I.useEffect)(()=>{let e=()=>v(navigator.onLine);return window.addEventListener(`online`,e),window.addEventListener(`offline`,e),()=>{window.removeEventListener(`online`,e),window.removeEventListener(`offline`,e)}},[]);let y=o.projection?.snapshot.group.status===`archived`,b=!!r&&_&&!y&&t.canWrite&&o.connection===`connected`;(0,I.useEffect)(()=>{r&&(r.setWritable(b),b?r.recover():r.refresh())},[r,b]),(0,I.useEffect)(()=>{if(!r)return;let e=()=>{r.refresh(),document.visibilityState===`visible`&&navigator.onLine&&b&&r.recover()};window.addEventListener(`online`,e),window.addEventListener(`focus`,e);let t=window.setInterval(e,15e3);return()=>{window.removeEventListener(`online`,e),window.removeEventListener(`focus`,e),clearInterval(t)}},[r,b]);async function x(e,i){if(!b||!r)throw Error(`当前为只读状态,请恢复连接后重试。`);l(``);let a=await r.submit({operation:`groups/${t.scope.groupId}/${e}`,payload:i});if(e===`messages`&&![`confirmed`,`rejected`].includes(a.status)&&h(a.operationId),a.status!==`confirmed`)throw Error(a.status===`rejected`?`请求未被接受(${a.errorCode||`operation_rejected`})。`:`已保存操作,接收结果尚未确认。请在操作记录中核对原单,不要重复创建目标。`);return t.onChanged?.(),n.refresh(),a}(0,I.useEffect)(()=>{if(!(!r||!m))return r.subscribe(()=>{let e=r.getSnapshot().operations.find(e=>e.operationId===m);if(!e||![`confirmed`,`rejected`].includes(e.status)||(h(null),e.status===`rejected`))return;l(``);let t=n.getSnapshot(),o=e.payload.parts,s=Array.isArray(o)?o.filter(e=>e&&typeof e==`object`&&!Array.isArray(e)&&e.kind===`text`).map(e=>e.text).join(``):``,c=e.payload.intent===`start_goal`,g=c?f.trim()===s:t.selectedRunId===e.payload.teamRunId&&t.draft.trim()===s;c&&g&&(p(``),d(!1)),!c&&typeof e.payload.teamRunId==`string`&&n.acknowledgeDraft(e.payload.teamRunId,s);let _=e.receipt?.teamRunId;typeof _==`string`&&g&&(!c||u)?(n.observe(_),i?.(_)):n.refresh(),a?.()})},[r,n,m,f,u,i,a]);let S=s.operations.some(e=>e.operation.endsWith(`/messages`)&&![`confirmed`,`rejected`].includes(e.status)&&(u?e.payload.intent===`start_goal`:e.payload.teamRunId===o.selectedRunId||!o.selectedRunId&&e.payload.intent===`start_goal`)),C=e=>{g.current++,d(!1),l(``),n.observe(e),t.onSelectionChange?.(e)};return(0,$.jsx)(Mi,{observation:o,canWrite:b,readOnlyReason:_?y?`团队已归档,历史记录仍可查看。`:t.readOnlyReason:`浏览器已离线,草稿与待确认操作会保留。`,onRetry:()=>n.refresh(),onLoadMore:e=>{n.loadMore(e).catch(()=>l(`分页读取失败。可重试;快照过期时会自动重新同步。`))},onChooseRun:C,onNewGoal:()=>{g.current++,d(!0)},newGoal:u,composer:(0,$.jsx)(Ni,{scope:t.scope,product:t.product,observation:o,newGoal:u,pendingMessage:S,canWrite:b,value:u?f:o.draft,onChange:e=>u?p(e):n.setDraft(e),onCancelNew:()=>{g.current++,d(!1)},onSubmit:async e=>{let t=g.current,r=Array.isArray(e.parts)?e.parts.map(e=>e&&typeof e==`object`&&!Array.isArray(e)&&e.kind===`text`?e.text:``).join(``):``,i=await x(`messages`,e);if(typeof e.teamRunId==`string`&&n.acknowledgeDraft(e.teamRunId,r),g.current!==t)return;u&&p(e=>e.trim()===r?``:e);let a=i.receipt?.teamRunId;typeof a==`string`&&C(a)}},u?`new`:o.selectedRunId??`empty`),operations:(0,$.jsxs)(`section`,{className:`team-cloud-operations`,"aria-label":`操作记录`,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`strong`,{children:`操作记录`}),(0,$.jsx)(`button`,{className:`team-text-button`,type:`button`,disabled:!b||s.recovering,onClick:()=>void r?.recover(),children:s.recovering?`正在核对…`:`核对待确认操作`})]}),s.errorCode&&(0,$.jsxs)(`p`,{role:`alert`,children:[`持久操作存储暂不可用(`,s.errorCode,`)。`]}),s.operations.slice(-8).reverse().map(e=>(0,$.jsxs)(`p`,{"data-status":e.status,children:[(0,$.jsx)(`span`,{children:Si(e.operation)}),(0,$.jsx)(`span`,{children:Ci[e.status]})]},e.operationId)),!s.operations.length&&(0,$.jsx)(`p`,{className:`team-muted`,children:`操作在发送前保存;刷新后继续核对。`})]}),error:c,renderTasks:e=>(0,$.jsx)(Pi,{task:e,scope:t.scope,product:t.product,canWrite:b,command:x},`${e.taskId}:${e.revision}`),effects:t.effectsEnabled&&o.selectedRunId?(0,$.jsx)(vi,{scope:t.scope,teamRunId:o.selectedRunId,product:t.product,canWrite:b,command:x,refreshKey:`${o.projection?.snapshot.watermark??0}:${s.operations.map(e=>`${e.operationId}:${e.status}`).join(`|`)}`,pendingEffectKeys:s.operations.filter(e=>![`confirmed`,`rejected`].includes(e.status)).map(e=>/^groups\/[^/]+\/effects\/([^/]+)\/reconcile$/.exec(e.operation)?.[1]).filter(e=>!!e)},`${hn(t.scope)}:${o.selectedRunId}`):void 0,renderInteraction:e=>(0,$.jsx)(Ii,{summary:e,scope:t.scope,product:t.product,canWrite:b,command:x},`${gn(e)}:${e.revision}`),artifactUrl:(e,n)=>t.product.artifactUrl(t.scope,e,n),onControl:e=>{let t=o.projection?.snapshot.selectedRun;t&&x(`team-runs/${t.teamRunId}/control`,{action:e,expectedRevision:t.revision}).catch(e=>l(e instanceof Error?e.message:`操作失败。`))},onAcceptance:(e,t)=>{let n=o.projection?.snapshot.selectedRun;n&&x(`team-runs/${n.teamRunId}/acceptance`,{action:e,expectedRevision:n.revision,...t?{reason:t}:{}}).catch(e=>l(e instanceof Error?e.message:`操作失败。`))}})}function Mi(e){let{observation:t,canWrite:n,onLoadMore:r}=e,a=t.projection?.snapshot,[o,s]=(0,I.useState)(`messages`),[c,l]=(0,I.useState)(``),u=(0,I.useId)(),d=(0,I.useRef)(null),f=(0,I.useRef)(null),p=`${a?.selectedRun?.teamRunId??``}:${o}:${!!e.newGoal}`,m=()=>{let e=d.current;if(!e||o!==`messages`)return;let t=e.getBoundingClientRect().top,n=Array.from(e.querySelectorAll(`[data-message-id]`)).find(e=>e.getBoundingClientRect().bottom>t);f.current={context:p,bottom:e.scrollHeight-e.clientHeight-e.scrollTop<48,anchorId:n?.dataset.messageId,anchorOffset:n?n.getBoundingClientRect().top-t:void 0}};(0,I.useLayoutEffect)(()=>{let e=d.current;if(!e||o!==`messages`){f.current=null;return}let t=f.current;if(!t||t.context!==p||t.bottom)e.scrollTop=e.scrollHeight;else if(t.anchorId&&t.anchorOffset!==void 0){let n=Array.from(e.querySelectorAll(`[data-message-id]`)).find(e=>e.dataset.messageId===t.anchorId);n&&(e.scrollTop+=n.getBoundingClientRect().top-e.getBoundingClientRect().top-t.anchorOffset)}m()},[p,a?.recentMessages]);let h=(e,n=`加载更多`)=>a?.cursors[e]&&(0,$.jsx)(`button`,{className:`team-button team-history-more`,type:`button`,disabled:t.loadingPages.includes(e)||t.connection!==`connected`,onClick:()=>r(e),children:t.loadingPages.includes(e)?`正在读取…`:n});if(!a)return(0,$.jsx)(`section`,{className:`ksadk-teams team-workspace`,children:(0,$.jsxs)(`div`,{className:`team-empty`,children:[(0,$.jsx)(`h2`,{children:t.connection===`offline`?`暂时无法读取团队`:`正在打开工作区`}),(0,$.jsx)(`p`,{role:`status`,children:wi[t.connection]}),t.errorCode&&(0,$.jsx)(`p`,{role:`alert`,children:t.errorCode}),(0,$.jsx)(`button`,{type:`button`,className:`team-button`,onClick:e.onRetry,children:`重新连接`})]})});let g=a.selectedRun,_=g?a.selectedRunMembers:a.members;return(0,$.jsxs)(`section`,{className:`ksadk-teams team-workspace team-cloud-workspace`,"aria-label":`云端团队工作区`,children:[(0,$.jsxs)(`header`,{className:`team-header`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`team-eyebrow`,children:`云端协作空间`}),(0,$.jsx)(`h1`,{children:a.group.name})]}),(0,$.jsxs)(`div`,{className:`team-header-actions`,children:[(0,$.jsx)(`span`,{className:`team-connection`,role:`status`,children:wi[t.connection]}),(0,$.jsx)(`button`,{type:`button`,className:`team-button`,onClick:e.onRetry,children:`刷新`})]})]}),!n&&(0,$.jsxs)(`p`,{className:`team-cloud-notice`,role:`status`,children:[`只读 · `,e.readOnlyReason||(t.connection===`connected`?`服务暂未开放写入,已有历史仍可查看。`:`等待连接恢复后再提交操作。`)]}),e.error&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error team-cloud-notice`,children:e.error}),(0,$.jsxs)(`div`,{className:`team-cloud-layout`,children:[(0,$.jsxs)(`aside`,{className:`team-cloud-runs`,"aria-label":`团队任务`,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`h2`,{children:`团队任务`}),(0,$.jsx)(`button`,{className:`team-text-button`,type:`button`,disabled:!n,onClick:e.onNewGoal,children:`新任务`})]}),a.runSummaries.map(t=>(0,$.jsxs)(`button`,{type:`button`,className:`team-cloud-run`,"aria-current":!e.newGoal&&g?.teamRunId===t.teamRunId?`page`:void 0,onClick:()=>e.onChooseRun(t.teamRunId),children:[(0,$.jsx)(`strong`,{children:t.goal}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(Yr,{status:t.status}),` · `,t.taskCount,` 项任务`]}),t.pendingCount>0&&(0,$.jsxs)(`small`,{children:[t.pendingCount,` 项待处理`]})]},t.teamRunId)),!a.runSummaries.length&&(0,$.jsx)(`p`,{className:`team-muted`,children:`还没有协作任务。从一个目标开始。`}),h(`runSummaries`,`更多团队任务`),e.operations]}),(0,$.jsxs)(`div`,{className:`team-cloud-main`,children:[e.newGoal?(0,$.jsxs)(`div`,{className:`team-cloud-goal`,children:[(0,$.jsx)(`span`,{className:`team-eyebrow`,children:`新的协作任务`}),(0,$.jsx)(`h2`,{children:`这次需要团队完成什么?`}),(0,$.jsx)(`p`,{children:`描述目标和交付要求。任务记录与其他协作独立保存。`})]}):(0,$.jsxs)($.Fragment,{children:[g&&(0,$.jsxs)(`header`,{className:`team-cloud-run-header`,children:[(0,$.jsx)(`h2`,{children:g.goal}),(0,$.jsxs)(`div`,{className:`team-task-actions`,children:[(0,$.jsx)(Yr,{status:g.status}),g.dispatchSuspended&&(0,$.jsx)(`span`,{children:`已暂停派发`}),re(g.status)&&g.status!==`cancel_requested`&&e.onControl&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`team-button`,type:`button`,disabled:!n,onClick:()=>e.onControl?.(g.dispatchSuspended?`resume_dispatch`:`suspend_dispatch`),children:g.dispatchSuspended?`恢复派发`:`暂停派发`}),(0,$.jsx)(`button`,{className:`team-button team-danger`,type:`button`,disabled:!n,onClick:()=>e.onControl?.(`stop`),children:`停止任务`})]})]}),g.reason&&(0,$.jsx)(`p`,{className:`team-muted`,children:Ei(g.reason)}),g.status===`awaiting_acceptance`&&e.onAcceptance&&(0,$.jsxs)(`div`,{className:`team-cloud-acceptance`,children:[(0,$.jsx)(`p`,{children:`请查看成果后验收。`}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`修改意见`,(0,$.jsx)(`textarea`,{rows:2,value:c,maxLength:2e3,onChange:e=>l(e.target.value),disabled:!n})]}),(0,$.jsx)(`button`,{className:`team-button`,disabled:!n||!c.trim(),onClick:()=>e.onAcceptance?.(`request_changes`,c.trim()),children:`提出修改`}),(0,$.jsx)(`button`,{className:`team-button team-primary`,disabled:!n,onClick:()=>e.onAcceptance?.(`accept`),children:`验收通过`})]}),g.leaderStandby&&(0,$.jsx)(ki,{value:g.leaderStandby})]}),(0,$.jsx)(`div`,{className:`team-cloud-tabs`,role:`tablist`,"aria-label":`任务工作区`,children:[`messages`,`tasks`,`artifacts`,`approvals`,`members`,`effects`].filter(t=>t!==`effects`||e.effects).map(e=>(0,$.jsxs)(`button`,{type:`button`,role:`tab`,id:`${u}-${e}`,"aria-controls":`${u}-panel`,"aria-selected":o===e,onClick:()=>s(e),children:[{messages:`消息`,tasks:`任务`,artifacts:`交付物`,approvals:`待处理`,members:`成员`,effects:`执行核查`}[e],e===`approvals`&&g?.pendingCount?` (${g.pendingCount})`:``]},e))}),(0,$.jsxs)(`div`,{ref:d,onScroll:m,className:`team-cloud-panel`,role:`tabpanel`,id:`${u}-panel`,"aria-labelledby":`${u}-${o}`,tabIndex:0,children:[o===`effects`&&e.effects,o===`messages`&&(0,$.jsxs)($.Fragment,{children:[h(`recentMessages`,`查看更早的消息`),a.recentMessages.filter(e=>e.visibility===`public`).map(e=>(0,$.jsx)(`article`,{className:`team-message`,"data-message-id":e.messageId,"data-role":e.groupRole,children:(0,$.jsxs)(`div`,{className:`team-message-main`,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`strong`,{children:e.senderName}),(0,$.jsx)(`time`,{dateTime:e.createdAt,children:new Date(e.createdAt).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})})]}),(0,$.jsx)(`div`,{className:`team-message-body`,children:e.parts.map((e,t)=>e.kind===`text`?(0,$.jsx)(i,{content:e.text},t):(0,$.jsx)(`span`,{className:`team-attachment`,children:e.name||`附件`},t))})]})},e.messageId)),!a.recentMessages.length&&(0,$.jsx)(`p`,{className:`team-muted`,children:g?`这项协作还没有公开消息。`:`选择任务查看消息,或新建协作目标。`})]}),o===`tasks`&&(0,$.jsxs)($.Fragment,{children:[a.taskSummaries.map(t=>e.renderTasks?.(t)??(0,$.jsxs)(`article`,{children:[(0,$.jsx)(`h3`,{children:t.title}),(0,$.jsx)(Yr,{status:t.status})]},t.taskId)),!a.taskSummaries.length&&(0,$.jsx)(`p`,{className:`team-muted`,children:`尚无分工任务。`}),h(`taskSummaries`)]}),o===`approvals`&&(0,$.jsxs)($.Fragment,{children:[a.pendingInteractions.map(t=>e.renderInteraction?.(t)??(0,$.jsx)(`p`,{children:t.title},gn(t))),!a.pendingInteractions.length&&(0,$.jsx)(`p`,{className:`team-muted`,children:`当前任务没有待处理事项。`}),h(`pendingInteractions`)]}),o===`artifacts`&&(0,$.jsxs)($.Fragment,{children:[a.artifactSummaries.map(t=>(0,$.jsxs)(`article`,{className:`team-cloud-artifact`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`strong`,{children:t.name}),(0,$.jsxs)(`p`,{className:`team-muted`,children:[t.mediaType,` · `,t.sizeBytes.toLocaleString(),` 字节 · `,t.state===`ready`?`已就绪`:t.state===`failed`?`准备失败`:`准备中`]})]}),t.state===`ready`&&e.artifactUrl&&(0,$.jsx)(`a`,{href:e.artifactUrl(t.artifactId,t.teamRunId),download:t.name,children:`下载`})]},t.artifactId)),!a.artifactSummaries.length&&(0,$.jsx)(`p`,{className:`team-muted`,children:`交付物准备好后会显示在这里。`}),h(`artifactSummaries`)]}),o===`members`&&(0,$.jsxs)($.Fragment,{children:[_.map(e=>(0,$.jsx)(`article`,{className:`team-cloud-member`,children:(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`strong`,{children:e.name}),(0,$.jsxs)(`span`,{className:`team-muted`,children:[` `,e.role===`leader`?`Leader`:`成员`,` · `,e.binding.kind===`local_build`?`本地节点`:`云端节点`]}),(0,$.jsx)(`p`,{children:e.responsibility}),(0,$.jsxs)(`p`,{className:`team-muted`,children:[e.binding.availability.state===`ready`?`执行环境就绪`:e.binding.availability.state===`unchecked`?`执行环境待检查`:`执行环境不可用`,` · `,Ti[e.executionStatus]]}),(e.reason||e.binding.availability.reason)&&(0,$.jsx)(`p`,{role:`status`,children:e.reason||e.binding.availability.reason})]})},e.memberId)),(0,$.jsx)(`p`,{className:`team-muted`,children:`节点环境与执行状态来自最近同步;离开页面只停止观察。`})]})]})]}),e.composer]})]})]})}function Ni({scope:e,product:t,observation:n,newGoal:r,pendingMessage:i,value:a,onChange:o,canWrite:s,onSubmit:c,onCancelNew:l}){let u=(0,I.useId)(),d=(0,I.useRef)(null),f=_(),[p]=(0,I.useState)(()=>new Kn(t,e)),m=(0,I.useSyncExternalStore)(p.subscribe,p.getSnapshot,p.getSnapshot);(0,I.useEffect)(()=>()=>p.dispose(),[p]),(0,I.useEffect)(()=>{s||p.cancel()},[s,p]);let[h,g]=(0,I.useState)(``),[v,y]=(0,I.useState)(!1),[b,x]=(0,I.useState)(``),S=n.projection?.snapshot,C=r?null:S?.selectedRun,w=r||!C,T=s&&!i&&(w||re(C.status)&&C.status!==`cancel_requested`),E=!w||m.files.length===0||m.state===`ready`,D=Wn(m.state);async function O(){if(!(!T||v||!a.trim()||!E)){y(!0),x(``);try{await c({parts:[{kind:`text`,text:a.trim()}],mentions:w||!h?[]:[h],intent:w?`start_goal`:h?`directed`:`followup`,...w?{}:{teamRunId:C.teamRunId},...w&&m.material?.state===`ready`?{materialManifestRef:m.material.materialId}:{}})}catch(e){x(e instanceof Error?e.message:`提交未完成,草稿已保留。`)}finally{y(!1)}}}return(0,$.jsxs)(`form`,{className:`team-composer-wrap`,onSubmit:e=>{e.preventDefault(),O()},children:[i&&(0,$.jsx)(`p`,{className:`team-cloud-notice`,role:`status`,children:`上一条消息的接收结果未确认,请先在操作记录中核对原单。`}),b&&(0,$.jsx)(`p`,{className:`team-inline-error`,role:`alert`,children:b}),(0,$.jsxs)(`div`,{className:`team-composer`,children:[(0,$.jsx)(`label`,{className:`team-sr-only`,htmlFor:u,children:w?`团队协作目标`:`给团队的消息`}),(0,$.jsx)(`textarea`,{id:u,rows:3,value:a,onChange:e=>o(e.target.value),disabled:v,placeholder:w?`描述目标、预期成果和约束…`:C&&!re(C.status)?`此任务已结束,可新建任务继续协作`:s?`补充要求,或向成员提问…`:`可先整理草稿,恢复连接后再发送…`,onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!f(e)&&(e.preventDefault(),O())}}),w&&m.files.length>0&&(0,$.jsxs)(`section`,{className:`team-cloud-materials`,"aria-label":`任务材料`,children:[(0,$.jsxs)(`div`,{className:`team-cloud-material-status`,children:[(0,$.jsxs)(`span`,{role:`status`,children:[{idle:``,hashing:`正在校验文件`,creating:`正在准备上传`,uploading:`正在上传`,verifying:`服务端正在校验`,ready:`材料已就绪`,failed:`上传未完成`,cancelled:`上传已取消`}[m.state],D?` · ${m.completed}/${m.files.length}`:``]}),(0,$.jsxs)(`span`,{children:[m.files.length,` 个文件`]})]}),(0,$.jsx)(`ul`,{children:m.files.map((e,t)=>(0,$.jsxs)(`li`,{children:[(0,$.jsx)(`span`,{children:e.name}),(0,$.jsxs)(`span`,{children:[e.size.toLocaleString(),` 字节`]})]},`${t}:${e.name}`))}),m.error&&(0,$.jsx)(`p`,{className:`team-inline-error`,role:`alert`,children:m.error}),(0,$.jsxs)(`div`,{className:`team-task-actions`,children:[D&&(0,$.jsx)(`button`,{type:`button`,className:`team-text-button`,onClick:()=>p.cancel(),children:`取消上传`}),[`failed`,`cancelled`].includes(m.state)&&(0,$.jsx)(`button`,{type:`button`,className:`team-text-button`,disabled:!T||v,onClick:()=>void p.retry(),children:`重试上传`}),(0,$.jsx)(`button`,{type:`button`,className:`team-text-button`,disabled:v||i,onClick:()=>p.clear(),children:`移除材料`})]})]}),(0,$.jsxs)(`div`,{className:`team-composer-toolbar`,children:[(0,$.jsxs)(`div`,{children:[!w&&(0,$.jsxs)(`select`,{"aria-label":`接收成员`,value:h,onChange:e=>g(e.target.value),disabled:v||!T,children:[(0,$.jsx)(`option`,{value:``,children:`发给 Leader`}),S?.selectedRunMembers.filter(e=>e.status===`active`).map(e=>(0,$.jsxs)(`option`,{value:e.memberId,children:[`@`,e.name]},e.memberId))]}),w&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`input`,{ref:d,type:`file`,multiple:!0,hidden:!0,"aria-label":`选择任务材料`,onChange:e=>{let t=Array.from(e.target.files??[]);e.target.value=``,T&&!v&&t.length&&p.select(t)}}),(0,$.jsx)(`button`,{className:`team-text-button`,type:`button`,disabled:!T||v||D,onClick:()=>d.current?.click(),children:m.files.length?`重新选择材料`:`添加材料`})]}),r&&(0,$.jsx)(`button`,{className:`team-text-button`,type:`button`,disabled:v||i,onClick:l,children:`返回任务`})]}),(0,$.jsx)(`button`,{className:`team-button team-primary`,type:`submit`,disabled:!T||v||!a.trim()||!E,children:v?`正在核对`:w?`开始协作`:`发送`})]})]}),(0,$.jsxs)(`p`,{className:`team-composer-help`,children:[`Enter 发送 · Shift + Enter 换行`,w?` · 单个材料 ≤20 MiB,总计 ≤64 MiB`:` · 接收回执不代表执行完成`]})]})}function Pi({task:e,scope:t,product:n,canWrite:r,command:i}){let[a,o]=(0,I.useState)(!1),[s,c]=(0,I.useState)(null),[l,u]=(0,I.useState)(``);return(0,I.useEffect)(()=>{if(!a)return;let r=new AbortController;return n.task(t,e.taskId,e.teamRunId,r.signal).then(t=>{if(!r.signal.aborted){if(t.taskId!==e.taskId||t.revision!==e.revision)throw Error(`任务已更新,请刷新后重试。`);c(t)}}).catch(()=>{r.signal.aborted||u(`任务详情读取失败,请关闭后重新打开。`)}),()=>r.abort()},[a,n,t,e]),(0,$.jsxs)(`article`,{className:`team-cloud-task`,children:[(0,$.jsxs)(`button`,{className:`team-cloud-task-title`,type:`button`,"aria-expanded":a,onClick:()=>{o(!a),u(``)},children:[(0,$.jsx)(`strong`,{children:e.title}),(0,$.jsx)(Yr,{status:e.status})]}),e.reason&&(0,$.jsx)(`p`,{className:`team-muted`,children:Ei(e.reason)}),a&&(s?(0,$.jsx)(ri,{task:s,members:[],onAction:r?(t,n,r)=>i(`tasks/${e.taskId}/actions`,{action:n,expectedRevision:e.revision,...r?{reason:r}:{}}):void 0}):(0,$.jsx)(`p`,{role:l?`alert`:`status`,children:l||`正在读取任务详情…`}))]})}function Fi(e){if(!e||typeof e!=`object`)return!1;if(Array.isArray(e))return e.some(Fi);let t=e;return t.secret===!0||t.writeOnly===!0||t.format===`password`||Object.values(t).some(Fi)}function Ii({summary:e,scope:t,product:n,canWrite:r,command:i}){let[o,s]=(0,I.useState)(null),[c,l]=(0,I.useState)(!1),[d,f]=(0,I.useState)({}),[p,m]=(0,I.useState)(``),[h,g]=(0,I.useState)(!1),[_,v]=(0,I.useState)(!1);(0,I.useEffect)(()=>{if(!c)return;let r=new AbortController;return n.interaction(t,e,r.signal).then(e=>{r.signal.aborted||s(e)}).catch(()=>{r.signal.aborted||m(`审批详情读取失败,请关闭后重试或刷新。`)}),()=>r.abort()},[c,t,n,e]);async function y(e,t){if(!(!r||!o||o.status!==`pending`||h||_||Fi(o.requestSchema))){g(!0),m(``);try{await i(`interactions`,{ref:o.ref,expectedRevision:o.revision,action:e,response:t}),v(!0)}catch(e){m(e instanceof Error?e.message:`审批提交失败。`)}finally{g(!1)}}}return(0,$.jsxs)(`article`,{className:`team-interaction-card`,children:[(0,$.jsx)(`h3`,{children:e.title}),(0,$.jsx)(`button`,{className:`team-text-button`,type:`button`,"aria-expanded":c,onClick:()=>{l(!c),m(``)},children:c?`收起详情`:`查看并处理`}),c&&(o?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Vr,{message:o.message}),_||o.status!==`pending`?(0,$.jsx)(`p`,{role:`status`,children:_||o.status===`resolving`?`服务端已接收,等待执行端确认。`:o.status===`expired`?`该事项已过期。`:o.status===`cancelled`?`该事项已取消。`:`该事项已处理。`}):Fi(o.requestSchema)?(0,$.jsx)(`p`,{role:`status`,children:`此表单包含敏感字段,无法通过浏览器持久队列提交,请使用安全凭据配置入口。`}):o.kind===`input`?o.requestSchema&&a(o.requestSchema).length>0?(0,$.jsx)(u,{schema:o.requestSchema,values:d,onChange:f,disabled:!r||h,onSubmit:()=>void y(`submit`,d),onCancel:()=>void y(`cancel`,{})}):(0,$.jsx)(`p`,{role:`status`,children:`缺少输入表单,暂不能提交。`}):(0,$.jsxs)(`div`,{className:`team-task-actions`,children:[(0,$.jsx)(`button`,{className:`team-button`,disabled:!r||h,onClick:()=>void y(`reject`,{approved:!1}),children:`拒绝`}),(0,$.jsx)(`button`,{className:`team-button team-primary`,disabled:!r||h,onClick:()=>void y(`approve`,{approved:!0}),children:`同意`})]})]}):(0,$.jsx)(`p`,{role:`status`,children:p||`正在读取审批详情…`})),p&&o&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:p})]})}function Li(){return new URLSearchParams(window.location.hash.split(`?`)[1]||``)}function Ri(e,t){let n=new URLSearchParams;e&&n.set(`groupId`,e),t&&n.set(`teamRunId`,t),window.history.replaceState(null,``,`#/workspace/teams?${n}`)}var zi=e=>e instanceof Error?e.message:`读取失败,请重试。`;function Bi({lifecycle:e,onRetry:t}){return e.apiVersion!==`teams.ksadk.io/v1`||typeof e.authorityId!=`string`||!e.authorityId||typeof e.ownerScopeRef!=`string`||!e.ownerScopeRef||!(Array.isArray(e.features)&&e.features.includes(`workspace-projection.v1`))?(0,$.jsxs)(`section`,{className:`studio-plugin-empty`,"aria-label":`云端团队初始化`,children:[(0,$.jsx)(`h2`,{children:`云端团队正在准备`}),(0,$.jsx)(`p`,{role:`status`,children:e.reason||`服务尚未开放分页工作区。历史与执行状态将在服务准备好后显示。`}),(0,$.jsxs)(`p`,{children:[`当前状态:`,e.health]}),(0,$.jsx)(`button`,{className:`button secondary`,onClick:t,children:`刷新服务状态`}),(0,$.jsx)(`a`,{href:`#/plugins`,children:`查看插件配置`})]}):(0,$.jsx)(Vi,{lifecycle:e,authorityId:e.authorityId,ownerScopeRef:e.ownerScopeRef,onRetry:t},`${window.location.origin}:${e.ownerScopeRef}:${e.authorityId}`)}function Vi({lifecycle:e,authorityId:t,ownerScopeRef:n,onRetry:r}){let[i]=(0,I.useState)(()=>new Br({origin:window.location.origin,fetch:l})),[a]=(0,I.useState)(()=>new kr({origin:window.location.origin,fetch:l})),[o,s]=(0,I.useState)([]),[c,u]=(0,I.useState)(null),[f,p]=(0,I.useState)(()=>Li().get(`groupId`)||``),[_,v]=(0,I.useState)(``),[y,b]=(0,I.useState)(``),[x,S]=(0,I.useState)(!1),[C,w]=(0,I.useState)(!1),[T,E]=(0,I.useState)([]),[D,O]=(0,I.useState)(!1),[ee,k]=(0,I.useState)(``),[A,j]=(0,I.useState)(null),[M,N]=(0,I.useState)(null),[P,F]=(0,I.useState)(``),te=(0,I.useRef)(new Map),ne=(0,I.useRef)(null),re=(0,I.useRef)(0),ie=(0,I.useRef)(null),ae={origin:window.location.origin,authorityId:t,ownerScopeRef:n},[L,R]=(0,I.useState)(()=>navigator.onLine);(0,I.useEffect)(()=>{let e=()=>R(navigator.onLine);return window.addEventListener(`online`,e),window.addEventListener(`offline`,e),()=>{window.removeEventListener(`online`,e),window.removeEventListener(`offline`,e)}},[]);let z=L&&e.enabled&&e.health===`ready`&&Array.isArray(e.features)&&e.features.includes(`durable-operations.v1`)&&!P;(0,I.useEffect)(()=>{let e,r=!0;return(async()=>{try{e=new In({scope:{origin:window.location.origin,authorityId:t,ownerScopeRef:n,groupId:``}},i),e.setWritable(!1),await e.refresh(),r&&(N(e),F(``))}catch{e?.dispose(),r&&F(`浏览器持久操作存储不可用,当前仅供查看。`)}})(),()=>{r=!1,e?.dispose()}},[t,n,i]),(0,I.useEffect)(()=>{M&&(M.setWritable(z),z?M.recover():M.refresh())},[M,z]);let B=(0,I.useCallback)(async e=>{ie.current?.abort();let r=new AbortController;ie.current=r;let a=++re.current;S(!0),b(``);try{let o=await i.list({origin:window.location.origin,authorityId:t,ownerScopeRef:n},r.signal,e);if(a!==re.current||r.signal.aborted)return;s(t=>e?[...t.filter(e=>!o.items.some(t=>e.groupId===t.groupId)),...o.items]:o.items),u(o.nextCursor)}catch(e){r.signal.aborted||b(zi(e))}finally{r.signal.aborted||S(!1)}},[t,n,i]);(0,I.useEffect)(()=>{B();let e=()=>p(Li().get(`groupId`)||``);return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{ie.current?.abort(),window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[B]);let oe=(0,I.useCallback)(async e=>{ne.current?.abort();let r=new AbortController;ne.current=r,O(!0),k(``);try{let a=await i.bindings({origin:window.location.origin,authorityId:t,ownerScopeRef:n},r.signal,e);if(r.signal.aborted)return;let o=a.items.map(e=>{let t=te.current.get(e.bindingRef);return t||(t=`member-${crypto.randomUUID()}`,te.current.set(e.bindingRef,t)),{memberId:t,name:e.name,binding:{...e,availability:{state:e.availability.state,code:e.availability.code??void 0,reason:e.availability.reason??void 0,action:e.availability.action??void 0}}}});E(t=>e?[...t.filter(e=>!o.some(t=>t.binding.bindingRef===e.binding.bindingRef)),...o]:o),j(a.nextCursor||null)}catch(e){r.signal.aborted||k(zi(e))}finally{r.signal.aborted||O(!1)}},[t,n,i]);(0,I.useEffect)(()=>(C&&oe(),()=>ne.current?.abort()),[C,oe]);let V=e=>{p(e),Ri(e)},se=o.filter(e=>`${e.name} ${e.lastMessage}`.toLowerCase().includes(_.toLowerCase()));return(0,$.jsxs)(`div`,{className:`studio-teams-browser`,"data-selected":!!f,children:[(0,$.jsxs)(`aside`,{className:`studio-team-directory`,"aria-label":`团队列表`,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`studio-teams-eyebrow`,children:`云端协作空间`}),(0,$.jsx)(`h2`,{children:`团队`})]}),(0,$.jsx)(`button`,{className:`icon-button tertiary`,"aria-label":`创建团队`,disabled:!z||!M,onClick:()=>w(!0),children:(0,$.jsx)(m,{size:19})})]}),(0,$.jsxs)(`label`,{className:`studio-team-search`,children:[(0,$.jsx)(h,{size:15}),(0,$.jsx)(`input`,{"aria-label":`搜索已加载的团队`,placeholder:`搜索已加载的团队`,value:_,onChange:e=>v(e.target.value)})]}),(!z||P)&&(0,$.jsxs)(`div`,{className:`studio-team-list-error`,role:`status`,children:[(0,$.jsx)(`p`,{children:P||`只读模式 · 服务准备或恢复中`}),(0,$.jsx)(`button`,{className:`button tertiary`,onClick:r,children:`刷新服务状态`})]}),y&&(0,$.jsxs)(`div`,{className:`studio-team-list-error`,role:`alert`,children:[(0,$.jsx)(`p`,{children:y}),(0,$.jsx)(`button`,{className:`button tertiary`,onClick:()=>void B(),children:`重试`})]}),(0,$.jsxs)(`div`,{className:`studio-team-list`,children:[se.map(e=>(0,$.jsxs)(`button`,{className:`studio-team-list-item`,"aria-current":f===e.groupId?`page`:void 0,onClick:()=>V(e.groupId),children:[(0,$.jsx)(`span`,{className:`studio-team-monogram`,"aria-hidden":`true`,children:Array.from(e.name)[0]}),(0,$.jsxs)(`span`,{className:`studio-team-list-copy`,children:[(0,$.jsx)(`strong`,{children:e.name}),(0,$.jsx)(`span`,{children:e.lastMessage||`${e.memberCount} 位成员`}),e.pendingCount>0&&(0,$.jsxs)(`small`,{children:[e.pendingCount,` 项待处理`]})]})]},e.groupId)),x&&(0,$.jsx)(`p`,{role:`status`,children:`正在读取团队…`}),!x&&!se.length&&(0,$.jsx)(`div`,{className:`studio-team-list-empty`,children:(0,$.jsx)(`p`,{children:_?`已加载团队中没有匹配项`:`还没有团队`})}),c&&(0,$.jsx)(`button`,{className:`button tertiary`,disabled:x,onClick:()=>void B(c),children:`加载更多团队`})]}),M&&(0,$.jsx)(Hi,{operations:M,canWrite:z,onConfirmed:e=>{V(e),B()}}),(0,$.jsxs)(`footer`,{children:[(0,$.jsx)(`a`,{href:`#/agents`,children:`管理 Agent`}),(0,$.jsx)(`a`,{href:`#/plugins`,children:`插件设置`})]})]}),(0,$.jsx)(`div`,{className:`studio-team-content`,children:f?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`button`,{className:`studio-team-directory-back`,onClick:()=>V(``),children:[(0,$.jsx)(g,{size:16}),`团队列表`]}),(0,$.jsx)(Ai,{scope:{...ae,groupId:f},transport:a,product:i,canWrite:z,effectsEnabled:e.features?.includes(`effects.reconcile`),initialRunId:Li().get(`teamRunId`)||void 0,onSelectionChange:e=>Ri(f,e),onChanged:()=>void B(),readOnlyReason:e.health===`degraded`?`服务恢复中,已有历史仍可查看。`:void 0},f)]}):(0,$.jsxs)(`div`,{className:`studio-team-welcome`,children:[(0,$.jsx)(`span`,{className:`studio-teams-symbol`,children:(0,$.jsx)(d,{size:26})}),(0,$.jsx)(`span`,{className:`studio-teams-eyebrow`,children:`AGENT TEAMS`}),(0,$.jsx)(`h2`,{children:`一个目标,团队一起完成`}),(0,$.jsx)(`p`,{children:`选择团队,跟进协作任务、待处理事项和交付物。`}),(0,$.jsxs)(`button`,{className:`button primary`,disabled:!z||!M,onClick:()=>w(!0),children:[(0,$.jsx)(m,{size:16}),`创建团队`]})]})}),(0,$.jsx)(hi,{open:C,serverAuthority:!0,candidates:T,loading:D,error:ee,onRefresh:()=>void oe(),hasMore:!!A,onLoadMore:()=>{A&&oe(A)},onClose:()=>w(!1),onCreate:async({idempotencyKey:e,...t})=>{if(!M||!z)throw Error(`当前无法创建团队,请恢复服务后重试。`);let n=await M.submit({operation:`groups`,idempotencyKey:e,payload:t});if(n.status!==`confirmed`)throw Error(n.status===`rejected`?`服务端未接受创建请求,请核对成员配置。`:`创建结果尚未确认。已保留原单,请在团队列表下方核对。`);typeof n.receipt?.groupId==`string`&&V(n.receipt.groupId),await B()}})]})}function Hi({operations:e,canWrite:t,onConfirmed:n}){let r=(0,I.useSyncExternalStore)(e.subscribe,e.getSnapshot,e.getSnapshot),i=r.operations.filter(e=>![`confirmed`,`rejected`].includes(e.status)),a=r.operations.filter(e=>e.status===`confirmed`).at(-1);return(0,$.jsxs)(`div`,{className:`studio-team-list-error`,"aria-label":`创建团队操作记录`,children:[i.length>0&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`p`,{role:`status`,children:[i.length,` 项创建操作等待确认`]}),(0,$.jsx)(`button`,{className:`button tertiary`,disabled:!t||r.recovering,onClick:()=>void e.recover(),children:r.recovering?`正在核对…`:`核对原单`})]}),typeof a?.receipt?.groupId==`string`&&(0,$.jsx)(`button`,{className:`button tertiary`,onClick:()=>n(a.receipt.groupId),children:`打开最近创建的团队`}),r.errorCode&&(0,$.jsxs)(`p`,{role:`alert`,children:[`操作存储暂不可用(`,r.errorCode,`)。`]})]})}var Ui=()=>`studio-${crypto.randomUUID()}`,Wi=e=>e instanceof Error?e.message:`请求失败,请重试。`;function Gi({client:e,snapshot:t,onClose:n,onSaved:r}){let i=(0,I.useRef)(null),[a,o]=(0,I.useState)(t),[s,c]=(0,I.useState)(t.group.name),[l,u]=(0,I.useState)(t.group.leaderMemberId),[d,f]=(0,I.useState)(!1),[p,m]=(0,I.useState)(``),[h,g]=(0,I.useState)(``),[_,v]=(0,I.useState)(`none`),[y,b]=(0,I.useState)(``),[x,S]=(0,I.useState)(``),[C,w]=(0,I.useState)(``),[T,E]=(0,I.useState)(``),[D,O]=(0,I.useState)([]),ee=(0,I.useRef)(`member-${crypto.randomUUID()}`).current,[A,j]=(0,I.useState)(t.group.policy?.taskAcceptance||`human`),[M,N]=(0,I.useState)(t.group.policy?.peerWake||!1),P=t.teamRuns.some(e=>![`succeeded`,`failed`,`cancelled`].includes(e.status)),F=(0,I.useRef)(null);(0,I.useEffect)(()=>{let e=new AbortController;return k(`/api/v1/groups/bindings`,{signal:e.signal}).then(e=>O(e.items)).catch(t=>{e.signal.aborted||m(Wi(t))}),()=>e.abort()},[]),(0,I.useEffect)(()=>{let e=document.activeElement;return i.current?.showModal(),()=>{i.current?.close(),e?.focus()}},[]);async function te(){if(!s.trim()||d)return;if(f(!0),m(``),_!==`none`&&(!x||!C.trim()||_===`rebind`&&!y)){m(`请选择成员和可用 Agent,并填写成员名称。`),f(!1);return}let i={memberId:_===`rebind`?y:ee,name:C.trim(),bindingRef:x,...T.trim()?{responsibility:T.trim()}:{}},c={..._===`add`?{addMember:i}:_===`rebind`?{rebindMember:i}:{},...s.trim()===a.group.name?{}:{name:s.trim()},...l===a.group.leaderMemberId?{}:{leaderMemberId:l},...h?{removeMemberId:h}:{},...A===(a.group.policy?.taskAcceptance||`human`)?{}:{taskAcceptance:A},...M===(a.group.policy?.peerWake||!1)?{}:{peerWake:M}},u=JSON.stringify([c,a.group.revision]);F.current?.digest!==u&&(F.current={digest:u,key:Ui()});try{await e.update(t.group.groupId,{...c,expectedRevision:a.group.revision,idempotencyKey:F.current.key}),r(),n()}catch(n){if(n instanceof U&&n.code===`revision_conflict`)try{o(await e.snapshot(t.group.groupId)),m(`团队配置已更新。已保留你的修改,请核对后再次保存。`)}catch{m(`团队配置已更新,暂时无法读取最新版本。请稍后重试,当前草稿已保留。`)}else m(Wi(n))}finally{f(!1)}}return(0,$.jsx)(`dialog`,{ref:i,className:`ksadk-teams team-create-dialog`,"aria-label":`团队设置`,onCancel:e=>{e.preventDefault(),d||n()},children:(0,$.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),te()},children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`h2`,{children:`团队设置`}),(0,$.jsx)(`button`,{type:`button`,className:`team-button team-icon-button`,"aria-label":`关闭团队设置`,disabled:d,onClick:n,children:`×`})]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`群组名称`,(0,$.jsx)(`input`,{value:s,maxLength:100,required:!0,onChange:e=>c(e.target.value),disabled:d})]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`Leader`,(0,$.jsx)(`select`,{value:l,onChange:e=>u(e.target.value),disabled:d,children:t.members.filter(e=>e.status===`active`&&e.binding.capabilities.leader).map(e=>(0,$.jsx)(`option`,{value:e.memberId,children:e.name},e.memberId))})]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`任务验收`,(0,$.jsxs)(`select`,{value:A,onChange:e=>j(e.target.value),disabled:d,children:[(0,$.jsx)(`option`,{value:`leader`,children:`由 Leader 审核成员成果`}),(0,$.jsx)(`option`,{value:`human`,children:`由我逐项验收`}),(0,$.jsx)(`option`,{value:`result`,children:`以执行结果验收任务`})]}),(0,$.jsx)(`small`,{children:`本轮最终成果始终由你验收。`})]}),(0,$.jsxs)(`label`,{className:`team-field team-policy-checkbox`,children:[(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:M,onChange:e=>N(e.target.checked),disabled:d}),`允许成员互相唤醒`]}),(0,$.jsx)(`small`,{children:`成员之间的协作仍受本轮预算和停止操作约束。`})]}),(0,$.jsxs)(`fieldset`,{className:`studio-team-member-settings`,disabled:d,children:[(0,$.jsx)(`legend`,{children:`添加成员或更换 Agent`}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`成员变更`,(0,$.jsxs)(`select`,{value:_,onChange:e=>{v(e.target.value),S(``),w(``),E(``)},children:[(0,$.jsx)(`option`,{value:`none`,children:`保留当前绑定`}),(0,$.jsx)(`option`,{value:`add`,disabled:t.members.filter(e=>e.status!==`removed`).length>=8,children:`添加一位成员`}),(0,$.jsx)(`option`,{value:`rebind`,children:`为成员更换 Agent`})]})]}),_!==`none`&&(0,$.jsxs)($.Fragment,{children:[_===`rebind`&&(0,$.jsxs)(`label`,{className:`team-field`,children:[`选择要更换的成员`,(0,$.jsxs)(`select`,{value:y,onChange:e=>{b(e.target.value);let n=t.members.find(t=>t.memberId===e.target.value);S(n?.bindingRef||``),w(n?.name||``),E(n?.responsibility||``)},children:[(0,$.jsx)(`option`,{value:``,children:`请选择成员`}),t.members.filter(e=>e.status!==`removed`).map(e=>(0,$.jsx)(`option`,{value:e.memberId,children:e.name},e.memberId))]})]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`可用 Agent`,(0,$.jsxs)(`select`,{value:x,onChange:e=>{S(e.target.value);let t=D.find(t=>t.bindingRef===e.target.value);w(t?.name||t?.agentId||``)},children:[(0,$.jsx)(`option`,{value:``,children:`选择支持团队执行的 Agent`}),D.filter(e=>e.capabilities.enqueue&&(_!==`rebind`||y!==l||e.capabilities.leader)).map(e=>(0,$.jsxs)(`option`,{value:e.bindingRef,children:[e.name||e.agentId,e.buildId?` · ${e.buildId}`:``]},e.bindingRef))]})]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`成员名称`,(0,$.jsx)(`input`,{value:C,maxLength:80,onChange:e=>w(e.target.value)})]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`工作职责`,(0,$.jsx)(`textarea`,{rows:3,maxLength:2e3,value:T,onChange:e=>E(e.target.value),placeholder:`说明这位成员负责什么,以及预期交付`})]}),(0,$.jsx)(`p`,{className:`team-muted`,children:`更换 Agent 会使用新的独立会话,历史执行记录仍可查看。`})]})]}),(0,$.jsxs)(`label`,{className:`team-field`,children:[`移除成员`,(0,$.jsxs)(`select`,{value:h,onChange:e=>g(e.target.value),disabled:d,children:[(0,$.jsx)(`option`,{value:``,children:`保留当前成员`}),t.members.filter(e=>e.status===`active`&&e.memberId!==l).map(e=>(0,$.jsx)(`option`,{value:e.memberId,children:e.name},e.memberId))]})]}),(0,$.jsx)(`p`,{className:`team-muted`,children:P?`新配置用于之后创建的任务。正在执行的任务保留原来的成员和策略。`:`配置变化不会重置已有任务记录。`}),p&&(0,$.jsx)(`p`,{className:`team-inline-error`,role:`alert`,children:p}),(0,$.jsxs)(`footer`,{children:[(0,$.jsx)(`button`,{className:`team-button`,type:`button`,disabled:d,onClick:n,children:`取消`}),(0,$.jsx)(`button`,{className:`team-button team-primary`,disabled:d,children:d?`正在保存`:`保存设置`})]})]})})}var Ki=new Ie({fetch:l}),qi=Yn({fetch:l});function Ji({member:e,snapshot:t,onDirectedMessage:n,requestedSource:r,teamRunId:i}){let a=r?ke(r):``,[o,s]=(0,I.useState)(a);(0,I.useEffect)(()=>{a&&s(a)},[a]);let c=[...t.tasks.filter(e=>!i||e.teamRunId===i).flatMap(e=>e.attempts.map(e=>e.source)),...t.messages.filter(e=>!i||e.teamRunId===i||!t.runMembers&&t.teamRuns.length===1&&!e.teamRunId).flatMap(e=>e.sourceRefs||[]),...t.interactions.filter(t=>!i||t.ref.sessionId===e.sessionId).map(e=>e.ref)].filter(t=>!!(t&&t.memberId===e.memberId&&(!e.teamRunId||t.sessionId===e.sessionId)));e.activeRunId&&c.push({authorityRef:t.group.authorityRef,groupId:t.group.groupId,memberId:e.memberId,bindingRef:e.bindingRef,providerRef:e.binding.providerRef,sessionId:e.sessionId,runId:e.activeRunId}),r&&c.push(r);let l=[...new Map(c.map(e=>[ke(e),e])).values()],u=l.find(e=>ke(e)===o)||l.at(-1);return u?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`p`,{className:`team-observer-note`,children:[`模型:`,e.binding.modelName||`沿用固定版本配置`,` `,(0,$.jsx)(`a`,{href:e.binding.kind===`local_build`?`#/agents/${encodeURIComponent(e.binding.agentId)}/edit`:`#/agents`,children:`查看 Agent 配置`})]}),l.length>1&&(0,$.jsxs)(`label`,{className:`team-field`,children:[`成员执行记录`,(0,$.jsx)(`select`,{value:ke(u),onChange:e=>s(e.target.value),children:l.map((t,n)=>(0,$.jsxs)(`option`,{value:ke(t),children:[t.runId===e.activeRunId?`当前执行`:`历史执行 ${n+1}`,` `,`· `,t.runId.slice(-10)]},ke(t)))})]}),(0,$.jsx)(Yi,{member:e,streamRef:u,onDirectedMessage:n},ke(u))]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`p`,{className:`team-observer-note`,children:[`模型:`,e.binding.modelName||`沿用固定版本配置`,` `,(0,$.jsx)(`a`,{href:e.binding.kind===`local_build`?`#/agents/${encodeURIComponent(e.binding.agentId)}/edit`:`#/agents`,children:`查看 Agent 配置`})]}),(0,$.jsx)(si,{member:e,onDirectedMessage:n})]})}function Yi({member:e,streamRef:t,onDirectedMessage:n}){let r=(0,I.useMemo)(()=>Jn(t),[t.authorityRef,t.groupId,t.memberId,t.bindingRef,t.providerRef,t.sessionId,t.runId]),i=(0,I.useSyncExternalStore)(r.subscribe,r.getSnapshot,r.getSnapshot);(0,I.useEffect)(()=>(r.observe(qi),()=>r.disconnect()),[r]);let[a,o]=(0,I.useState)(!1),[s,c]=(0,I.useState)(!1),[l,u]=(0,I.useState)(null),d=(0,I.useRef)(!1),f=(0,I.useRef)(crypto.randomUUID()),p=e.status===`active`&&e.binding.capabilities.cancel&&t.runId===e.activeRunId&&t.bindingRef===e.bindingRef&&t.providerRef===e.binding.providerRef&&t.sessionId===e.sessionId;async function m(){if(!(!p||d.current||s)){d.current=!0,o(!0),u(null);try{let n=await Ki.cancelMember(t.groupId,e.memberId,{ref:t,idempotencyKey:f.current});if(n.status!==`cancel_requested`||n.runId!==t.runId)throw Error(`停止回执与当前执行不一致,请重新读取群状态。`);c(!0)}catch(e){u(e instanceof Error?e.message:`停止请求提交失败,请重试。`)}finally{d.current=!1,o(!1)}}}return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(si,{member:e,observation:i,onCancel:p?()=>void m():void 0,cancelBusy:a,cancelPending:s,onDirectedMessage:n,onRetry:()=>void r.observe(qi)}),p&&s&&(0,$.jsx)(`p`,{role:`status`,className:`team-observer-note`,children:`已请求停止,等待执行端确认。后续排队消息仍会保留。`}),l&&(0,$.jsx)(`p`,{role:`alert`,className:`team-inline-error`,children:l})]})}var Xi=new Ie({fetch:l}),Zi=()=>`studio-${crypto.randomUUID()}`,Qi=e=>e instanceof Error?e.message:`请求失败,请重试。`;function $i(e){if(e.status===`rejected`||e.status===`uncertain`)throw Error(e.reason||`执行端尚未确认,请核对后重试。`);return e}function ea(){return new URLSearchParams(window.location.hash.split(`?`)[1]||``)}function ta(e,t={}){let n=new URLSearchParams({groupId:e});t.teamRunId&&n.set(`teamRunId`,t.teamRunId),t.taskId&&n.set(`taskId`,t.taskId),window.history.replaceState(null,``,`#/workspace/teams?${n}`)}function na(){let[e,t]=(0,I.useState)(null),[n,r]=(0,I.useState)(``),[i,a]=(0,I.useState)(0),o=(0,I.useRef)(0);if((0,I.useEffect)(()=>{let e=new AbortController,n=++o.current;return r(``),D(e.signal).then(r=>{if(!(e.signal.aborted||n!==o.current)){if(r.apiVersion!==`teams.ksadk.io/v1`)throw Error(`团队插件版本与当前界面不兼容,请更新插件。`);t(r)}}).catch(t=>{!e.signal.aborted&&n===o.current&&r(Qi(t))}),()=>e.abort()},[i]),(0,I.useEffect)(()=>{if(e?.mode!==`server`&&e?.authorityLocation!==`server`)return;let n=new AbortController,i=()=>{if(document.visibilityState!==`visible`)return;let e=++o.current;D(n.signal).then(r=>{!n.signal.aborted&&e===o.current&&t(r)}).catch(i=>{if(!(n.signal.aborted||e!==o.current)){if(i instanceof w&&[401,403].includes(i.status||0)){t(null),r(`登录状态已失效,请重新连接团队服务。`);return}n.signal.aborted||t(e=>e&&{...e,health:`degraded`})}})},a=window.setInterval(i,15e3);return window.addEventListener(`focus`,i),()=>{n.abort(),clearInterval(a),window.removeEventListener(`focus`,i)}},[e?.mode,e?.authorityLocation]),n)return(0,$.jsxs)(`div`,{className:`studio-plugin-empty`,children:[(0,$.jsx)(`h2`,{children:`团队服务暂不可用`}),(0,$.jsx)(`p`,{role:`alert`,children:n}),(0,$.jsx)(`button`,{className:`button secondary`,onClick:()=>a(e=>e+1),children:`重试`})]});if(!e)return(0,$.jsx)(`p`,{className:`studio-plugin-loading`,role:`status`,children:`正在连接团队服务…`});let s=e.mode===`server`||e.authorityLocation===`server`;return s?(0,$.jsx)(Bi,{lifecycle:e,onRetry:()=>a(e=>e+1)}):!e.enabled||e.health!==`ready`&&!(s&&e.health===`degraded`)?(0,$.jsx)(y,{}):(0,$.jsx)(ra,{authorityRef:e.authorityRef,serverAuthority:e.mode===`server`||e.authorityLocation===`server`},e.authorityRef)}function ra({authorityRef:e,serverAuthority:t}){let[n,r]=(0,I.useState)([]),[i,a]=(0,I.useState)(),[o,s]=(0,I.useState)(()=>ea().get(`groupId`)||``),[c,l]=(0,I.useState)(``),[u,f]=(0,I.useState)(!0),[p,_]=(0,I.useState)(``),[v,y]=(0,I.useState)(!1),[b,x]=(0,I.useState)([]),[S,C]=(0,I.useState)(!1),[w,T]=(0,I.useState)(``),[E,D]=(0,I.useState)(``),[O,ee]=(0,I.useState)(0),A=(0,I.useRef)(new Map),j=(0,I.useRef)(new Map),M=(0,I.useRef)(0),N=(0,I.useCallback)(async(t,n)=>{let i=++M.current;try{let o=await Xi.list({signal:t,cursor:n,limit:50});if(t?.aborted||i!==M.current)return;let s=o.items.filter(t=>t.authorityRef===e);r(e=>n?[...e.filter(e=>!s.some(t=>t.groupId===e.groupId)),...s]:s),a(o.nextCursor||void 0),_(``)}catch(e){t?.aborted||_(Qi(e))}finally{t?.aborted||f(!1)}},[e]);(0,I.useEffect)(()=>{let e=new AbortController;N(e.signal);let t=window.setInterval(()=>{document.visibilityState===`visible`&&N(e.signal)},15e3),n=()=>s(ea().get(`groupId`)||``);return window.addEventListener(`hashchange`,n),window.addEventListener(`popstate`,n),()=>{e.abort(),clearInterval(t),window.removeEventListener(`hashchange`,n),window.removeEventListener(`popstate`,n)}},[N]),(0,I.useEffect)(()=>{if(!v&&!t)return;let e=new AbortController;return C(!0),D(``),k(`/api/v1/groups/bindings`,{signal:e.signal}).then(e=>{x(e.items.map(e=>({memberId:A.current.get(e.bindingRef)||(()=>{let t=`member-${crypto.randomUUID()}`;return A.current.set(e.bindingRef,t),t})(),name:e.name||e.displayName||e.agentId,description:e.description||(e.capabilities.leader?`可担任 Leader`:`任务成员`),binding:e})));let t=e.unavailableBuilds??0;e.items.length?T(t?`${t} 个本地 Agent 构建不可用,已从候选中排除。`:``):T(t?`没有可用的团队成员候选:${t} 个本地 Agent 构建不可用,请先在 Agent 页面重新构建。`:`没有可用的团队成员候选:本地还没有已构建的 Agent,请先创建并构建一个 Agent。`)}).catch(t=>{e.signal.aborted||D(Qi(t))}).finally(()=>{e.signal.aborted||C(!1)}),()=>e.abort()},[v,O,t]);let P=e=>{s(e),ta(e)},F=n.filter(e=>`${e.name} ${e.lastMessage||``}`.toLowerCase().includes(c.toLowerCase()));return(0,$.jsxs)(`div`,{className:`studio-teams-browser`,"data-selected":!!o,children:[(0,$.jsxs)(`aside`,{className:`studio-team-directory`,"aria-label":`团队列表`,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`studio-teams-eyebrow`,children:`协作空间`}),(0,$.jsx)(`h2`,{children:`团队`})]}),(0,$.jsx)(`button`,{className:`icon-button tertiary`,"aria-label":`创建团队`,onClick:()=>y(!0),children:(0,$.jsx)(m,{size:19})})]}),(0,$.jsxs)(`label`,{className:`studio-team-search`,children:[(0,$.jsx)(h,{size:15}),(0,$.jsx)(`input`,{"aria-label":`搜索团队`,placeholder:`搜索团队`,value:c,onChange:e=>l(e.target.value)})]}),p&&(0,$.jsxs)(`div`,{className:`studio-team-list-error`,role:`alert`,children:[(0,$.jsx)(`p`,{children:p}),(0,$.jsx)(`button`,{className:`button tertiary`,onClick:()=>void N(),children:`重试`})]}),(0,$.jsxs)(`div`,{className:`studio-team-list`,children:[u?(0,$.jsx)(`p`,{role:`status`,children:`正在读取团队…`}):F.length?F.map(e=>(0,$.jsxs)(`button`,{className:`studio-team-list-item`,"aria-current":o===e.groupId?`page`:void 0,onClick:()=>P(e.groupId),children:[(0,$.jsx)(`span`,{className:`studio-team-monogram`,"aria-hidden":`true`,children:Array.from(e.name)[0]}),(0,$.jsxs)(`span`,{className:`studio-team-list-copy`,children:[(0,$.jsx)(`strong`,{children:e.name}),(0,$.jsx)(`span`,{children:e.lastMessage||`${e.memberCount} 位成员 · 准备好开始协作`}),e.pendingCount>0&&(0,$.jsxs)(`small`,{children:[e.pendingCount,` 项待处理`]})]}),e.unreadCount>0&&(0,$.jsx)(`span`,{className:`studio-team-unread`,"aria-label":`${e.unreadCount} 条未读`,children:Math.min(e.unreadCount,99)})]},e.groupId)):(0,$.jsxs)(`div`,{className:`studio-team-list-empty`,children:[(0,$.jsx)(`p`,{children:c?`没有匹配的团队`:`还没有团队`}),!c&&(0,$.jsx)(`span`,{children:`把合适的 Agent 召集到一起。`})]}),i&&(0,$.jsx)(`button`,{className:`button tertiary`,onClick:()=>void N(void 0,i),children:`加载更多团队`})]}),(0,$.jsxs)(`footer`,{children:[(0,$.jsx)(`a`,{href:`#/agents`,children:`管理 Agent`}),(0,$.jsx)(`a`,{href:`#/plugins`,children:`插件设置`})]})]}),(0,$.jsx)(`div`,{className:`studio-team-content`,children:o?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`button`,{className:`studio-team-directory-back`,onClick:()=>P(``),children:[(0,$.jsx)(g,{size:16}),`团队列表`]}),(0,$.jsx)(ia,{authorityRef:e,groupId:o,serverAuthority:t,standbyCandidates:b.map(e=>e.binding),initialDrafts:j.current.get(o)||{},onDraft:(e,t=``)=>j.current.set(o,{...j.current.get(o)||{},[t]:e}),onChanged:()=>void N()},`${e}:${o}`)]}):(0,$.jsxs)(`div`,{className:`studio-team-welcome`,children:[(0,$.jsx)(`span`,{className:`studio-teams-symbol`,children:(0,$.jsx)(d,{size:26})}),(0,$.jsx)(`span`,{className:`studio-teams-eyebrow`,children:`AGENT TEAMS`}),(0,$.jsx)(`h2`,{children:`一个目标,团队一起完成`}),(0,$.jsxs)(`p`,{children:[`让 Leader 组织分工,让成员专注任务。`,(0,$.jsx)(`br`,{}),`在群聊中跟进过程、处理审批和验收成果。`]}),(0,$.jsxs)(`button`,{className:`button primary`,onClick:()=>y(!0),children:[(0,$.jsx)(m,{size:16}),`创建团队`]}),w&&(0,$.jsx)(`p`,{className:`studio-team-bindings-notice`,role:`status`,children:w}),(0,$.jsx)(`a`,{href:`#/agents`,children:`查看可用 Agent`})]})}),(0,$.jsx)(hi,{serverAuthority:t,open:v,loading:S,error:E,onRefresh:()=>ee(e=>e+1),candidates:b,onClose:()=>y(!1),onCreate:async e=>{let t=await Xi.create(e);P(t.group.groupId),await N()}})]})}function ia({groupId:e,authorityRef:t,initialDrafts:n,serverAuthority:r,standbyCandidates:i,onDraft:a,onChanged:o}){let s=_i({client:Xi,groupId:e,authorityRef:t}),[c,l]=(0,I.useState)(!1),[u,d]=(0,I.useState)(``),f=(0,I.useRef)({teamRunId:ea().get(`teamRunId`)||``,taskId:ea().get(`taskId`)||``}),p=(0,I.useRef)(new Map),m=e=>{let t=JSON.stringify(e);return p.current.has(t)||p.current.set(t,Zi()),p.current.get(t)};(0,I.useEffect)(()=>{if(!s.snapshot)return;let t=new AbortController,n=setTimeout(()=>{document.visibilityState===`visible`&&Xi.markRead(e,s.snapshot.watermark,t.signal).catch(()=>{})},500);return()=>{clearTimeout(n),t.abort()}},[e,s.snapshot?.watermark]);async function h(t){let n=$i(await Xi.send(e,t));return o(),n}return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ci,{snapshot:s.snapshot,connection:s.connection,loading:s.loading,error:u||s.error,initialDrafts:n,onDraftChange:a,onSend:h,onRetry:s.reconnect,initialSelection:f.current,onSelectionChange:t=>ta(e,t),onManage:()=>l(!0),serverAuthority:r,standbyCandidates:i,onConfigureStandby:(t,n)=>Xi.configureLeaderStandby(e,t.teamRunId,{bindingRef:n,idempotencyKey:m([`standby`,t.teamRunId,n])}),onLoadReconciliation:t=>Xi.reconciliation(e,t.teamRunId),onReconcile:(t,n,r)=>Xi.reconcile(e,t.commandId,{receiptDigest:t.receiptDigest,action:n,reason:r,idempotencyKey:m([`reconcile`,t.commandId,t.receiptDigest,n,r])}),onControl:async(t,n)=>$i(await Xi.control(e,t.teamRunId,{action:n,expectedRevision:t.revision,idempotencyKey:m([`control`,t.teamRunId,t.revision,n])})),onAcceptRun:async(t,n,r)=>$i(await Xi.acceptRun(e,t.teamRunId,{action:n?`accept`:`request_changes`,...r?{reason:r}:{},expectedRevision:t.revision,idempotencyKey:m([`accept`,t.teamRunId,t.revision,n,r])})),onTaskAction:async(t,n,r)=>$i(await Xi.taskAction(e,t.taskId,{action:n,...r?{reason:r}:{},expectedRevision:t.revision,idempotencyKey:m([`task`,t.taskId,t.revision,n,r])})),onRespondInteraction:async t=>$i(await Xi.interaction(e,t)),onOpenArtifact:n=>{let r=`/api/v1/groups/${encodeURIComponent(e)}/artifacts/${encodeURIComponent(n.artifactId)}/download`;if(n.source.groupId!==e||n.source.authorityRef!==t||n.uri!==r){d(`交付物尚无有效的团队下载链接。`);return}d(``);let i=document.createElement(`a`);i.href=r,i.download=n.name,i.rel=`noopener`,i.click()},onLoadExecution:(t,n)=>Xi.execution(e,t,n),renderMember:(e,t,n)=>(0,$.jsx)(Ji,{teamRunId:t.teamRunId,member:e,snapshot:s.snapshot,requestedSource:n,onDirectedMessage:t.directedMessage},`${t.teamRunId||`group`}:${e.memberId}`)}),c&&s.snapshot&&(0,$.jsx)(Gi,{client:Xi,snapshot:s.snapshot,onClose:()=>l(!1),onSaved:()=>{s.reconnect(),o()}})]})}export{na as TeamsPage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as t}from"./src-B6xuSHsQ.js";import"./chunk-DU6HZSFF-CpEZCUgg.js";import"./chunk-CLGD4ZFX-D-GTtyKs.js";import{n}from"./chunk-XHIXRSVI-BFQ6B8BE.js";import{n as r,r as i,t as a}from"./chunk-SVP7TREG-DljApgRX.js";import{t as o}from"./chunk-JWPE2WC7-DVXcaiue.js";import{t as s}from"./mermaid-parser.core-Cj5mYdBi.js";var c=n().RailroadAbnf.parser.LangiumParser,l=e(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=e(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=e(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=e(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=e(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=e(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=e(e=>{o(e,a),e.title&&a.setTitle(e.title),e.rules.map(e=>a.addRule(m(e)))},`populateDb`),g={parser:{parse:e(e=>{a.clear(),t.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new s(n);let r=n.value;t.debug(`[ABNF Parser] Parsed rules:`,r.rules.length),h(r),t.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:a}},db:a,renderer:i,styles:r};export{g as diagram};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-FOHPRMQF-DHwB1DNv.js";import{n as e}from"./chunk-6AZGARVD-BB6FqMl-.js";export{e as createArchitectureServices};
|