controlmesh 0.40.2__tar.gz → 0.41.0__tar.gz
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.
- {controlmesh-0.40.2 → controlmesh-0.41.0}/PKG-INFO +17 -2
- {controlmesh-0.40.2 → controlmesh-0.41.0}/README.md +16 -1
- {controlmesh-0.40.2 → controlmesh-0.41.0}/config.example.json +21 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/__init__.py +1 -1
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/__main__.py +13 -0
- controlmesh-0.41.0/controlmesh/cli_commands/terminal.py +20 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/config.py +58 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/bot.py +157 -9
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/bus.py +27 -3
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/models.py +6 -2
- controlmesh-0.41.0/controlmesh/multiagent/stack.py +175 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/supervisor.py +135 -60
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/session/key.py +9 -0
- controlmesh-0.41.0/controlmesh/terminal/__init__.py +6 -0
- controlmesh-0.41.0/controlmesh/terminal/app.py +47 -0
- controlmesh-0.41.0/controlmesh/terminal/command_router.py +103 -0
- controlmesh-0.41.0/controlmesh/terminal/config.py +36 -0
- controlmesh-0.41.0/controlmesh/terminal/enhanced_shell.py +85 -0
- controlmesh-0.41.0/controlmesh/terminal/errors.py +11 -0
- controlmesh-0.41.0/controlmesh/terminal/inbox.py +87 -0
- controlmesh-0.41.0/controlmesh/terminal/memory_context.py +46 -0
- controlmesh-0.41.0/controlmesh/terminal/modes.py +12 -0
- controlmesh-0.41.0/controlmesh/terminal/native_pty.py +79 -0
- controlmesh-0.41.0/controlmesh/terminal/providers.py +28 -0
- controlmesh-0.41.0/controlmesh/terminal/rendering.py +19 -0
- controlmesh-0.41.0/controlmesh/terminal/runtime.py +123 -0
- controlmesh-0.41.0/controlmesh/terminal/session.py +15 -0
- controlmesh-0.41.0/controlmesh/terminal/tasks_view.py +16 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/docs/README.md +22 -17
- {controlmesh-0.40.2 → controlmesh-0.41.0}/pyproject.toml +1 -1
- controlmesh-0.40.2/controlmesh/multiagent/stack.py +0 -74
- {controlmesh-0.40.2 → controlmesh-0.41.0}/.gitignore +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/Dockerfile.sandbox +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/LICENSE +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_banner.txt +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/RULES.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/config/RULES-all-clis.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/config/RULES-claude-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/config/RULES-codex-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/config/RULES-gemini-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/JOIN_NOTIFICATION.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/RULES.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-all-clis.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-claude-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-codex-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-gemini-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/cron_tasks/flow-triggered-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/cron_tasks/release-ci-monitor-template/RULES-template.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/cron_tasks/release-ci-monitor-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/cron_tasks/scheduled-recurring-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/cron_tasks/webhook-triggered-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/output_to_user/RULES.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/routing/activation_policies.yaml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/routing/capabilities.yaml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/skills/RULES.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/skills/skill-creator/LICENSE.txt +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/skills/skill-creator/SKILL.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/skills/skill-creator/references/output-patterns.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/skills/skill-creator/references/workflows.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/init_skill.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/package_skill.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/quick_validate.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tasks/RULES.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/telegram_files/RULES.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/RULES.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/_tool_shared.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/agent_tools/RULES.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/agent_tools/ask_agent.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/agent_tools/ask_agent_async.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/agent_tools/create_agent.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/agent_tools/edit_shared_knowledge.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/agent_tools/list_agents.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/agent_tools/remove_agent.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-all-clis.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-claude-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-codex-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-gemini-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/cron_tools/_shared.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_add.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_edit.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_list.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_monitor.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_remove.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_time.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/media_tools/RULES.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/media_tools/file_info.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/media_tools/list_files.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/media_tools/process_video.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/media_tools/read_document.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/media_tools/transcribe_audio.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/RULES.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/_shared.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/ask_parent.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/attach_task.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/cancel_task.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/check_task_updates.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/create_task.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/delete_task.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/list_tasks.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/release_task.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/resume_task.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/route_task.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/task_tools/tell_task.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/user_tools/RULES.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-all-clis.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-claude-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-codex-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-gemini-only.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/_shared.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/setup_ci_failure_webhook.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_add.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_edit.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_list.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_remove.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_rotate_token.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_test.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/VENDORED_FROM.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/agent_runtime.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/app_registration.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/cardkit.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/claude_adapter.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/cli.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/client.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/device_flow.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/domains.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/message_context.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/models.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/native_agent_tools.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/native_contract.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/orchestration.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/owner_policy.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/probe.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/runtime_cards.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/scopes.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/token_store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/_plugins/feishu_auth_kit/runner.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/agents_runtime/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/agents_runtime/context.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/agents_runtime/manager.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/agents_runtime/progress.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/agents_runtime/results.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/agents_runtime/tools.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/api/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/api/admin_read.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/api/catalog_http.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/api/crypto.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/api/server.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/background/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/background/models.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/background/observer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/bus/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/bus/adapters.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/bus/bus.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/bus/cron_sanitize.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/bus/envelope.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/bus/lock_pool.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/case_pack/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/case_pack/__main__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/case_pack/io.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/case_pack/lint.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/case_pack/models.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/case_pack/render.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cleanup/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cleanup/observer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/auth.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/base.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/claude_provider.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/claw_provider.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/coalescer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/codex_cache.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/codex_cache_observer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/codex_discovery.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/codex_events.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/codex_hooks.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/codex_provider.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/diagnostics.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/events.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/executor.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/factory.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/gemini_cache.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/gemini_cache_observer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/gemini_events.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/gemini_provider.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/gemini_utils.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/init_wizard.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/introspection.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/liveness.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/model_cache.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/openai_agents_provider.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/opencode_discovery.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/opencode_provider.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/param_resolver.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/process_registry.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/service.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/stream_events.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/supervisor.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/timeout_controller.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli/types.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/agents.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/api_cmd.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/auth.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/cron.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/docker.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/feishu.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/install.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/lifecycle.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/runtime.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/service.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/status.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cli_commands/tasks.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/command_registry.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/commands.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/config_reload.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cron/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cron/dependency_queue.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cron/execution.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cron/manager.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cron/observer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/cron/policy.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/errors.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/files/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/files/allowed_roots.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/files/browser.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/files/image_processor.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/files/prompt.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/files/storage.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/files/tags.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/gateways/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/gateways/config.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/gateways/types.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/heartbeat/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/heartbeat/observer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/history/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/history/catalog.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/history/index.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/history/models.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/history/store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/de/chat.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/de/cli.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/de/commands.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/de/wizard.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/en/chat.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/en/cli.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/en/commands.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/en/wizard.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/es/chat.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/es/cli.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/es/commands.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/es/wizard.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/fr/chat.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/fr/cli.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/fr/commands.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/fr/wizard.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/loader.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/nl/chat.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/nl/cli.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/nl/commands.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/nl/wizard.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/pt/chat.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/pt/cli.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/pt/commands.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/pt/wizard.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/ru/chat.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/ru/cli.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/ru/commands.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/ru/wizard.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/zh/chat.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/zh/cli.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/zh/commands.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/i18n/zh/wizard.toml +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/atomic_io.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/base_observer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/base_task_observer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/boot_id.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/docker.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/docker_extras.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/env_secrets.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/file_watcher.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/fs.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/inflight.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/install.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/json_store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/pidlock.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/platform.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/process_tree.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/recovery.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/restart.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/service.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/service_base.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/service_linux.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/service_logs.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/service_macos.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/service_windows.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/startup_state.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/task_runner.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/updater.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/infra/version.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/integrations/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/integrations/feishu_auth_kit.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/log_context.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/logging_config.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/capture.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/commands.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/dreaming.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/events.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/frequency.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/models.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/promotion.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/runtime_capture.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/search.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/semantic.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/memory/store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/address.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/callback_router.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/capabilities.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/commands.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/app_info.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/auth_cards.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/brand.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/card_auth.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/card_auth_context.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/card_auth_runner.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/device_flow.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/errors.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/feishu_card_sender.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/native_auth_all_runner.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/native_auth_useful_runner.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/orchestration_runner.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/runtime_auth.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/runtime_continuation.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/token_store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/auth/uat_client.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/bundled_runtime.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/card_action_payload.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/card_stream.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/command_center_card.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/id_map.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/inbound.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/long_connection.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/media.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/media_meta.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/message_context.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/native_tools/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/native_tools/agent_runtime.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/native_tools/client.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/native_tools/executor.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/progress_preview.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/runtime_state.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/sender.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/settings_card.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/startup.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/tool_auth.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/feishu/transport.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/bot.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/buttons.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/credentials.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/file_browser.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/formatting.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/id_map.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/media.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/sender.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/startup.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/streaming.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/streaming_mode.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/transport.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/matrix/typing.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/multi.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/notifications.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/protocol.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/api.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/bot.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/gateway.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/inbound.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/known_targets.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/media.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/outbound.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/ref_index.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/session_store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/target.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/token_manager.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/transport.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/types.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/qqbot/typing_keepalive.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/registry.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/send_opts.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/abort.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/app.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/buttons.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/callbacks.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/chat_tracker.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/controlmesh_images/logo_text.png +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/controlmesh_images/welcome.png +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/dedup.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/edit_streaming.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/file_browser.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/formatting.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/handlers.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/inbound_spool.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/lane_state.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/media.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/message_dispatch.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/middleware.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/runtime_state.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/sender.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/startup.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/streaming.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/topic.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/transport.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/typing.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/upgrade_handler.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/telegram/welcome.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/weixin/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/weixin/api.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/weixin/auth_state.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/weixin/auth_store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/weixin/bot.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/weixin/id_map.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/weixin/inbound_spool.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/weixin/runtime.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/weixin/runtime_state.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/messenger/weixin/transport.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/approval_intent.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/commands.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/health.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/internal_api.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/plan_review_loop.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/registry.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/release_gate.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/multiagent/shared_knowledge.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/native_commands/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/native_commands/fallbacks.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/native_commands/render.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/commands.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/core.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/directives.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/flows.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/hooks.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/injection.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/lifecycle.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/observers.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/presentation.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/providers.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/registry.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/selectors/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/selectors/agent_router.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/selectors/capability_registry.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/selectors/cron_selector.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/selectors/model_selector.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/selectors/models.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/selectors/session_selector.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/selectors/settings_selector.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/selectors/task_selector.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/orchestrator/selectors/utils.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/planning_files.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/provider_binding.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/provider_health.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/routing/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/routing/activation.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/routing/capabilities.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/routing/policy.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/routing/router.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/routing/score_events.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/routing/scorer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/routing/workunit.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/run.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/runtime/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/runtime/agent_inbox.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/runtime/host_jobs.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/runtime/models.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/runtime/registry.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/runtime/store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/security/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/security/content.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/security/paths.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/session/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/session/manager.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/session/named.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/tasks/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/tasks/evaluator.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/tasks/evidence.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/tasks/host_execution.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/tasks/hub.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/tasks/models.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/tasks/registry.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/tasks/task_policy.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/api.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/contracts.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/execution.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/live.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/models.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/orchestrator.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/phases.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/presentation.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/runtime_attachment.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/runtime_control.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/base.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/dispatch.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/events.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/mailbox.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/manifest.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/phase.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/recovery.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/runtime.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/snapshot.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/team/state/tasks.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/text/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/text/frontstage_delivery.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/text/response_format.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/text/tool_event_format.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/utils/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/utils/quiet_hours.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/webhook/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/webhook/auth.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/webhook/manager.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/webhook/models.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/webhook/observer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/webhook/server.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/workspace/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/workspace/cron_tasks.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/workspace/init.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/workspace/loader.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/workspace/paths.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/workspace/rules_selector.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh/workspace/skill_sync.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/autonomous_runtime_loop.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/canonical_section_writer.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/contracts.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/engine.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/events.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/evidence_identity.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/execution_event_shape.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/execution_evidence_replay_query.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/execution_evidence_replay_query_boundary.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/execution_payload_seam.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/execution_payloads.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/execution_read_surface.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/execution_runtime_events.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/execution_wiring_boundary.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/file_backed_primary_boundary.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/first_engine_boundary.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/first_engine_contract_surface.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/first_engine_test_matrix.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/first_engine_trace_examples.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/orchestrator_boundary.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/promotion_bridge.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/promotion_controller.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/promotion_receipt.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/py.typed +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/records.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/recovery/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/recovery/contracts.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/recovery/execution.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/recovery/policy.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/recovery_execution_boundary.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/recovery_thin_loop.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/review.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/review_handoff_packet.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/review_query_read_surface_boundary.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/runtime.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/runtime_execution_checkpoint.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/runtime_message_api.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/serde.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/summary/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/summary/contracts.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/summary/policy.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/summary/runtime.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/summary_trigger_landing_boundary.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/task_packet.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/thin_orchestrator.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/thin_runtime_loop.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/tracing.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/worker_controller.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/controlmesh_runtime/worker_state.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/docs/case-pack/README.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/examples/case-pack/README.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/plans/README.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/plans/tasks/README.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/plans/tasks/_template/artifacts/README.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/plans/tasks/_template/logs/README.md +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/summary/__init__.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/summary/test_contracts.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/summary/test_policy.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/summary/test_runtime.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_autonomous_runtime_loop.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_events.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_execution_evidence_replay_query.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_execution_evidence_store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_execution_payloads.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_execution_read_surface.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_execution_runtime_events.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_first_engine.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_promotion_bridge.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_recovery_contracts.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_recovery_execution.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_recovery_policy.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_recovery_thin_loop.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_review.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_review_handoff_packet.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_runtime_execution_checkpoint.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_runtime_message_api.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_store.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_task_packet.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_thin_orchestrator.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_thin_runtime_loop.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_worker_controller.py +0 -0
- {controlmesh-0.40.2 → controlmesh-0.41.0}/tests/controlmesh_runtime/test_worker_state.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: controlmesh
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.41.0
|
|
4
4
|
Summary: ControlMesh brings official coding CLIs into Telegram, Matrix, and Feishu with persistent workspaces, long-running jobs, and production-friendly bot operations.
|
|
5
5
|
Project-URL: Homepage, https://github.com/muqiao215/ControlMesh
|
|
6
6
|
Project-URL: Repository, https://github.com/muqiao215/ControlMesh
|
|
@@ -74,12 +74,20 @@ ControlMesh is a chat-native task runtime for official coding CLIs, with a
|
|
|
74
74
|
file-backed memory layer, a first-class multi-agent runtime
|
|
75
75
|
## 中文
|
|
76
76
|
|
|
77
|
-
###
|
|
77
|
+
### Enhanced Terminal 与手机端多代理平台
|
|
78
78
|
|
|
79
79
|
ControlMesh 是一个开源的 chat-native task runtime:把 Claude、Codex、
|
|
80
80
|
Gemini 等官方编码 CLI 接进飞书、Telegram 和微信,让它们像长期在线的任务
|
|
81
81
|
机器人一样执行工作,并带上文件型记忆层和多代理运行时。
|
|
82
82
|
|
|
83
|
+
从 0.41.0 开始,在交互式终端直接运行 `controlmesh` 会进入
|
|
84
|
+
ControlMesh Enhanced Terminal:
|
|
85
|
+
|
|
86
|
+
- 默认提示符是 `cm>`,普通输入复用 ControlMesh Orchestrator、记忆、任务和路由能力。
|
|
87
|
+
- 输入 `/cm` 进入真实 Codex/Claude/OpenCode 等 provider 原生 CLI。
|
|
88
|
+
- 在原生模式输入 `/back` 回到 `cm>`。
|
|
89
|
+
- 旧聊天机器人 runtime 仍保留为 `controlmesh bot`。
|
|
90
|
+
|
|
83
91
|
它不是一次性的聊天壳。主线是飞书里的后台任务闭环:创建任务、任务后台执行、
|
|
84
92
|
任务缺信息时通过 `ask_parent` 回问飞书、父会话恢复任务、结果回到同一聊天上下文。
|
|
85
93
|
支持对接Telegram 和微信/WeChat ;Matrix 保留为次级兼容 transport。
|
|
@@ -183,6 +191,13 @@ pipx install controlmesh
|
|
|
183
191
|
controlmesh
|
|
184
192
|
```
|
|
185
193
|
|
|
194
|
+
交互式 `controlmesh` 会进入 enhanced terminal。要启动旧的聊天 transport
|
|
195
|
+
runtime,使用:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
controlmesh bot
|
|
199
|
+
```
|
|
200
|
+
|
|
186
201
|
如果你想直接跟踪 GitHub 最新 `main`,不用等下一次 PyPI 发布:
|
|
187
202
|
|
|
188
203
|
```bash
|
|
@@ -6,12 +6,20 @@ ControlMesh is a chat-native task runtime for official coding CLIs, with a
|
|
|
6
6
|
file-backed memory layer, a first-class multi-agent runtime
|
|
7
7
|
## 中文
|
|
8
8
|
|
|
9
|
-
###
|
|
9
|
+
### Enhanced Terminal 与手机端多代理平台
|
|
10
10
|
|
|
11
11
|
ControlMesh 是一个开源的 chat-native task runtime:把 Claude、Codex、
|
|
12
12
|
Gemini 等官方编码 CLI 接进飞书、Telegram 和微信,让它们像长期在线的任务
|
|
13
13
|
机器人一样执行工作,并带上文件型记忆层和多代理运行时。
|
|
14
14
|
|
|
15
|
+
从 0.41.0 开始,在交互式终端直接运行 `controlmesh` 会进入
|
|
16
|
+
ControlMesh Enhanced Terminal:
|
|
17
|
+
|
|
18
|
+
- 默认提示符是 `cm>`,普通输入复用 ControlMesh Orchestrator、记忆、任务和路由能力。
|
|
19
|
+
- 输入 `/cm` 进入真实 Codex/Claude/OpenCode 等 provider 原生 CLI。
|
|
20
|
+
- 在原生模式输入 `/back` 回到 `cm>`。
|
|
21
|
+
- 旧聊天机器人 runtime 仍保留为 `controlmesh bot`。
|
|
22
|
+
|
|
15
23
|
它不是一次性的聊天壳。主线是飞书里的后台任务闭环:创建任务、任务后台执行、
|
|
16
24
|
任务缺信息时通过 `ask_parent` 回问飞书、父会话恢复任务、结果回到同一聊天上下文。
|
|
17
25
|
支持对接Telegram 和微信/WeChat ;Matrix 保留为次级兼容 transport。
|
|
@@ -115,6 +123,13 @@ pipx install controlmesh
|
|
|
115
123
|
controlmesh
|
|
116
124
|
```
|
|
117
125
|
|
|
126
|
+
交互式 `controlmesh` 会进入 enhanced terminal。要启动旧的聊天 transport
|
|
127
|
+
runtime,使用:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
controlmesh bot
|
|
131
|
+
```
|
|
132
|
+
|
|
118
133
|
如果你想直接跟踪 GitHub 最新 `main`,不用等下一次 PyPI 发布:
|
|
119
134
|
|
|
120
135
|
```bash
|
|
@@ -28,6 +28,27 @@
|
|
|
28
28
|
"transport": "telegram",
|
|
29
29
|
"transports": ["telegram"],
|
|
30
30
|
|
|
31
|
+
"terminal": {
|
|
32
|
+
"enabled": true,
|
|
33
|
+
"default_provider": "codex",
|
|
34
|
+
"default_model": "gpt-5.5",
|
|
35
|
+
"default_mode": "enhanced",
|
|
36
|
+
"prompt": "cm> ",
|
|
37
|
+
"native_escape_command": "/cm",
|
|
38
|
+
"back_command": "/back",
|
|
39
|
+
"show_background_notifications": true,
|
|
40
|
+
"background_notification_interval_seconds": 2.0,
|
|
41
|
+
"inbox_enabled": true,
|
|
42
|
+
"memory_auto_context": false,
|
|
43
|
+
"memory_inject_requires_confirmation": true,
|
|
44
|
+
"pty_raw_mode": true,
|
|
45
|
+
"pty_line_mode_fallback": true,
|
|
46
|
+
"foreground_provider_reuse": true,
|
|
47
|
+
"foreground_session_name": "terminal-main",
|
|
48
|
+
"enable_background_agents": true,
|
|
49
|
+
"native_provider_args": {}
|
|
50
|
+
},
|
|
51
|
+
|
|
31
52
|
"telegram_token": "YOUR_BOT_TOKEN_HERE",
|
|
32
53
|
"allowed_user_ids": [
|
|
33
54
|
123456789
|
|
@@ -47,6 +47,7 @@ from controlmesh.cli_commands.status import (
|
|
|
47
47
|
print_usage as _print_usage,
|
|
48
48
|
)
|
|
49
49
|
from controlmesh.cli_commands.tasks import cmd_tasks as _cmd_tasks
|
|
50
|
+
from controlmesh.cli_commands.terminal import cmd_terminal as _cmd_terminal
|
|
50
51
|
from controlmesh.config import (
|
|
51
52
|
DEFAULT_EMPTY_GEMINI_API_KEY,
|
|
52
53
|
AgentConfig,
|
|
@@ -557,6 +558,11 @@ def _default_action(verbose: bool) -> None:
|
|
|
557
558
|
_start_bot(verbose)
|
|
558
559
|
|
|
559
560
|
|
|
561
|
+
def _cmd_bot(verbose: bool) -> None:
|
|
562
|
+
"""Run the legacy chat transport runtime."""
|
|
563
|
+
_default_action(verbose)
|
|
564
|
+
|
|
565
|
+
|
|
560
566
|
def _print_version() -> None:
|
|
561
567
|
"""Print the installed ControlMesh version."""
|
|
562
568
|
_console.print(get_current_version())
|
|
@@ -617,6 +623,9 @@ _COMMANDS: dict[str, str] = {
|
|
|
617
623
|
"auth": "auth",
|
|
618
624
|
"runtime": "runtime",
|
|
619
625
|
"tasks": "tasks",
|
|
626
|
+
"terminal": "terminal",
|
|
627
|
+
"term": "terminal",
|
|
628
|
+
"bot": "bot",
|
|
620
629
|
"feishu": "feishu",
|
|
621
630
|
"qq": "qq",
|
|
622
631
|
}
|
|
@@ -661,12 +670,16 @@ def main() -> None:
|
|
|
661
670
|
"auth": lambda: _cmd_auth(args),
|
|
662
671
|
"runtime": lambda: _cmd_runtime(args),
|
|
663
672
|
"tasks": lambda: _cmd_tasks(args),
|
|
673
|
+
"terminal": lambda: _cmd_terminal(args),
|
|
674
|
+
"bot": lambda: _cmd_bot(verbose),
|
|
664
675
|
"feishu": lambda: _cmd_feishu(args),
|
|
665
676
|
}
|
|
666
677
|
|
|
667
678
|
handler = dispatch.get(action) if action else None
|
|
668
679
|
if handler is not None:
|
|
669
680
|
handler()
|
|
681
|
+
elif sys.stdin.isatty() and sys.stdout.isatty():
|
|
682
|
+
_cmd_terminal(args)
|
|
670
683
|
else:
|
|
671
684
|
_default_action(verbose)
|
|
672
685
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""CLI command for the ControlMesh enhanced terminal."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
from collections.abc import Sequence
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def cmd_terminal(args: Sequence[str]) -> None:
|
|
10
|
+
"""Run the enhanced terminal."""
|
|
11
|
+
asyncio.run(_run(args))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
async def _run(args: Sequence[str]) -> None:
|
|
15
|
+
from controlmesh.__main__ import load_config
|
|
16
|
+
from controlmesh.terminal.app import TerminalApp
|
|
17
|
+
|
|
18
|
+
config = load_config()
|
|
19
|
+
app = TerminalApp.from_args(config=config, args=args)
|
|
20
|
+
await app.run()
|
|
@@ -166,6 +166,29 @@ class CLIParametersConfig(BaseModel):
|
|
|
166
166
|
gemini: list[str] = Field(default_factory=list)
|
|
167
167
|
|
|
168
168
|
|
|
169
|
+
class TerminalConfig(BaseModel):
|
|
170
|
+
"""Settings for the local ControlMesh enhanced terminal."""
|
|
171
|
+
|
|
172
|
+
enabled: bool = True
|
|
173
|
+
default_provider: str = "codex"
|
|
174
|
+
default_model: str = "gpt-5.5"
|
|
175
|
+
default_mode: Literal["enhanced", "native"] = "enhanced"
|
|
176
|
+
prompt: str = "cm> "
|
|
177
|
+
native_escape_command: str = "/cm"
|
|
178
|
+
back_command: str = "/back"
|
|
179
|
+
show_background_notifications: bool = True
|
|
180
|
+
background_notification_interval_seconds: float = 2.0
|
|
181
|
+
inbox_enabled: bool = True
|
|
182
|
+
memory_auto_context: bool = False
|
|
183
|
+
memory_inject_requires_confirmation: bool = True
|
|
184
|
+
pty_raw_mode: bool = True
|
|
185
|
+
pty_line_mode_fallback: bool = True
|
|
186
|
+
foreground_provider_reuse: bool = True
|
|
187
|
+
foreground_session_name: str = "terminal-main"
|
|
188
|
+
enable_background_agents: bool = True
|
|
189
|
+
native_provider_args: dict[str, list[str]] = Field(default_factory=dict)
|
|
190
|
+
|
|
191
|
+
|
|
169
192
|
class MatrixConfig(BaseModel):
|
|
170
193
|
"""Matrix homeserver connection settings."""
|
|
171
194
|
|
|
@@ -207,6 +230,40 @@ class FeishuGroupConfig(BaseModel):
|
|
|
207
230
|
default_factory=list,
|
|
208
231
|
validation_alias=AliasChoices("allow_from_users", "allowFromUsers"),
|
|
209
232
|
)
|
|
233
|
+
agent_roster: list[str] = Field(
|
|
234
|
+
default_factory=list,
|
|
235
|
+
validation_alias=AliasChoices("agent_roster", "agentRoster"),
|
|
236
|
+
)
|
|
237
|
+
default_agent: str = Field(
|
|
238
|
+
default="",
|
|
239
|
+
validation_alias=AliasChoices("default_agent", "defaultAgent"),
|
|
240
|
+
)
|
|
241
|
+
allow_interagent_handoff: bool = Field(
|
|
242
|
+
default=False,
|
|
243
|
+
validation_alias=AliasChoices("allow_interagent_handoff", "allowInteragentHandoff"),
|
|
244
|
+
)
|
|
245
|
+
max_handoff_depth: int = Field(
|
|
246
|
+
default=1,
|
|
247
|
+
validation_alias=AliasChoices("max_handoff_depth", "maxHandoffDepth"),
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
@field_validator("agent_roster")
|
|
251
|
+
@classmethod
|
|
252
|
+
def _validate_agent_roster(cls, value: list[str]) -> list[str]:
|
|
253
|
+
return [item.strip() for item in value if item.strip()]
|
|
254
|
+
|
|
255
|
+
@field_validator("default_agent")
|
|
256
|
+
@classmethod
|
|
257
|
+
def _validate_default_agent(cls, value: str) -> str:
|
|
258
|
+
return value.strip()
|
|
259
|
+
|
|
260
|
+
@field_validator("max_handoff_depth")
|
|
261
|
+
@classmethod
|
|
262
|
+
def _validate_max_handoff_depth(cls, value: int) -> int:
|
|
263
|
+
if value < 0:
|
|
264
|
+
msg = "Feishu group max_handoff_depth must be >= 0"
|
|
265
|
+
raise ValueError(msg)
|
|
266
|
+
return value
|
|
210
267
|
|
|
211
268
|
|
|
212
269
|
class FeishuConfig(BaseModel):
|
|
@@ -617,6 +674,7 @@ class AgentConfig(BaseModel):
|
|
|
617
674
|
webhooks: WebhookConfig = Field(default_factory=WebhookConfig)
|
|
618
675
|
api: ApiConfig = Field(default_factory=ApiConfig)
|
|
619
676
|
cli_parameters: CLIParametersConfig = Field(default_factory=CLIParametersConfig)
|
|
677
|
+
terminal: TerminalConfig = Field(default_factory=TerminalConfig)
|
|
620
678
|
image: ImageConfig = Field(default_factory=ImageConfig)
|
|
621
679
|
timeouts: TimeoutConfig = Field(default_factory=TimeoutConfig)
|
|
622
680
|
tasks: TasksConfig = Field(default_factory=TasksConfig)
|
|
@@ -118,6 +118,24 @@ _TextStreamCallback = Callable[[str], Awaitable[None]]
|
|
|
118
118
|
_StatusStreamCallback = Callable[[str | None], Awaitable[None]]
|
|
119
119
|
_ToolEventStreamCallback = Callable[[ToolUseEvent | ToolResultEvent], Awaitable[None]]
|
|
120
120
|
_FEISHU_COMMAND_GUIDE_VERSION = 3
|
|
121
|
+
_FEISHU_AGENT_TARGET_PREFIXES = ("agent:", "agent=", "@agent:")
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
@dataclass(frozen=True, slots=True)
|
|
125
|
+
class FeishuAgentRoute:
|
|
126
|
+
"""Resolved Feishu group routing target."""
|
|
127
|
+
|
|
128
|
+
agent: str
|
|
129
|
+
text: str
|
|
130
|
+
via_default: bool = False
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
@dataclass(frozen=True, slots=True)
|
|
134
|
+
class SimpleTextResult:
|
|
135
|
+
"""Small result adapter for Feishu delivery paths."""
|
|
136
|
+
|
|
137
|
+
text: str
|
|
138
|
+
status: str = "completed"
|
|
121
139
|
|
|
122
140
|
|
|
123
141
|
def _stream_callbacks_for_output_mode(
|
|
@@ -472,12 +490,20 @@ class FeishuBot:
|
|
|
472
490
|
progress.start()
|
|
473
491
|
if content_key:
|
|
474
492
|
self._inflight_content_keys.add(content_key)
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
493
|
+
route = self._resolve_group_agent_route(message)
|
|
494
|
+
if route is not None:
|
|
495
|
+
result = await self._run_group_agent_route(
|
|
496
|
+
message,
|
|
497
|
+
route=route,
|
|
498
|
+
)
|
|
499
|
+
auth_routed = False
|
|
500
|
+
else:
|
|
501
|
+
auth_routed, result = await self._run_streaming_turn(
|
|
502
|
+
message,
|
|
503
|
+
chat_id=chat_id,
|
|
504
|
+
topic_id=topic_id,
|
|
505
|
+
progress=progress,
|
|
506
|
+
)
|
|
481
507
|
except Exception as exc:
|
|
482
508
|
await progress.finish_failure(str(exc))
|
|
483
509
|
raise
|
|
@@ -1033,6 +1059,131 @@ class FeishuBot:
|
|
|
1033
1059
|
return True, None
|
|
1034
1060
|
return False, result
|
|
1035
1061
|
|
|
1062
|
+
async def _run_group_agent_route(
|
|
1063
|
+
self,
|
|
1064
|
+
message: FeishuIncomingText,
|
|
1065
|
+
*,
|
|
1066
|
+
route: FeishuAgentRoute,
|
|
1067
|
+
) -> Any:
|
|
1068
|
+
bus = self._interagent_bus()
|
|
1069
|
+
if bus is None:
|
|
1070
|
+
return SimpleTextResult(
|
|
1071
|
+
text="Agent handoff is unavailable: multi-agent runtime is not active.",
|
|
1072
|
+
status="failed",
|
|
1073
|
+
)
|
|
1074
|
+
prompt = self._build_group_agent_handoff_prompt(message, route=route)
|
|
1075
|
+
response = await bus.send(
|
|
1076
|
+
sender=self._agent_name,
|
|
1077
|
+
recipient=route.agent,
|
|
1078
|
+
message=prompt,
|
|
1079
|
+
new_session=False,
|
|
1080
|
+
)
|
|
1081
|
+
if not response.success:
|
|
1082
|
+
error = response.error or f"Agent `{route.agent}` did not return a result."
|
|
1083
|
+
return SimpleTextResult(text=error, status="failed")
|
|
1084
|
+
visible = f"[{route.agent}]\n{response.text.strip()}" if response.text.strip() else ""
|
|
1085
|
+
return SimpleTextResult(text=visible, status="completed")
|
|
1086
|
+
|
|
1087
|
+
def _interagent_bus(self) -> Any | None:
|
|
1088
|
+
if self._orchestrator is None:
|
|
1089
|
+
return None
|
|
1090
|
+
supervisor = getattr(self._orchestrator, "supervisor", None)
|
|
1091
|
+
return getattr(supervisor, "bus", None)
|
|
1092
|
+
|
|
1093
|
+
def _resolve_group_agent_route(self, message: FeishuIncomingText) -> FeishuAgentRoute | None:
|
|
1094
|
+
if not self._is_group_message(message):
|
|
1095
|
+
return None
|
|
1096
|
+
overrides = self._group_overrides_for_message(message)
|
|
1097
|
+
if overrides is None:
|
|
1098
|
+
return None
|
|
1099
|
+
roster = self._group_agent_roster_for_message(message)
|
|
1100
|
+
if not roster:
|
|
1101
|
+
return None
|
|
1102
|
+
|
|
1103
|
+
explicit = self._extract_explicit_agent_target(message.text, roster)
|
|
1104
|
+
if explicit is not None:
|
|
1105
|
+
agent, routed_text = explicit
|
|
1106
|
+
if agent == self._agent_name:
|
|
1107
|
+
return None
|
|
1108
|
+
return FeishuAgentRoute(agent=agent, text=routed_text)
|
|
1109
|
+
|
|
1110
|
+
default_agent = overrides.default_agent
|
|
1111
|
+
if default_agent and default_agent in roster and default_agent != self._agent_name:
|
|
1112
|
+
return FeishuAgentRoute(agent=default_agent, text=message.text.strip(), via_default=True)
|
|
1113
|
+
return None
|
|
1114
|
+
|
|
1115
|
+
def _group_agent_roster_for_message(self, message: FeishuIncomingText) -> list[str]:
|
|
1116
|
+
overrides = self._group_overrides_for_message(message)
|
|
1117
|
+
if overrides is None:
|
|
1118
|
+
return []
|
|
1119
|
+
return [name for name in overrides.agent_roster if name != self._agent_name]
|
|
1120
|
+
|
|
1121
|
+
def _extract_explicit_agent_target(
|
|
1122
|
+
self,
|
|
1123
|
+
text: str,
|
|
1124
|
+
roster: list[str],
|
|
1125
|
+
) -> tuple[str, str] | None:
|
|
1126
|
+
stripped = text.strip()
|
|
1127
|
+
if not stripped:
|
|
1128
|
+
return None
|
|
1129
|
+
words = stripped.split(maxsplit=1)
|
|
1130
|
+
first = words[0]
|
|
1131
|
+
rest = words[1].strip() if len(words) > 1 else ""
|
|
1132
|
+
for prefix in _FEISHU_AGENT_TARGET_PREFIXES:
|
|
1133
|
+
if first.lower().startswith(prefix):
|
|
1134
|
+
candidate = first[len(prefix) :].strip()
|
|
1135
|
+
if candidate in roster:
|
|
1136
|
+
return candidate, rest
|
|
1137
|
+
if first.startswith("@"):
|
|
1138
|
+
candidate = first[1:].strip()
|
|
1139
|
+
if candidate in roster:
|
|
1140
|
+
return candidate, rest
|
|
1141
|
+
return None
|
|
1142
|
+
|
|
1143
|
+
def _build_group_agent_handoff_prompt(
|
|
1144
|
+
self,
|
|
1145
|
+
message: FeishuIncomingText,
|
|
1146
|
+
*,
|
|
1147
|
+
route: FeishuAgentRoute,
|
|
1148
|
+
) -> str:
|
|
1149
|
+
overrides = self._group_overrides_for_message(message)
|
|
1150
|
+
allow_handoff = bool(overrides and overrides.allow_interagent_handoff)
|
|
1151
|
+
configured_depth = overrides.max_handoff_depth if allow_handoff and overrides else 0
|
|
1152
|
+
handoff_depth_used = 1 if allow_handoff and configured_depth > 0 else 0
|
|
1153
|
+
remaining_depth = max(configured_depth - handoff_depth_used, 0)
|
|
1154
|
+
|
|
1155
|
+
routed_message = FeishuIncomingText(
|
|
1156
|
+
sender_id=message.sender_id,
|
|
1157
|
+
chat_id=message.chat_id,
|
|
1158
|
+
message_id=message.message_id,
|
|
1159
|
+
text=route.text or message.text,
|
|
1160
|
+
thread_id=message.thread_id,
|
|
1161
|
+
create_time_ms=message.create_time_ms,
|
|
1162
|
+
message_type=message.message_type,
|
|
1163
|
+
root_id=message.root_id,
|
|
1164
|
+
parent_id=message.parent_id,
|
|
1165
|
+
quote_summary=message.quote_summary,
|
|
1166
|
+
post_title=message.post_title,
|
|
1167
|
+
chat_type=message.chat_type,
|
|
1168
|
+
mentions_bot=message.mentions_bot,
|
|
1169
|
+
replies_to_bot=message.replies_to_bot,
|
|
1170
|
+
)
|
|
1171
|
+
user_text = build_feishu_agent_input(routed_message)
|
|
1172
|
+
return (
|
|
1173
|
+
"[Feishu controlled group handoff]\n"
|
|
1174
|
+
f"source_agent={self._agent_name}\n"
|
|
1175
|
+
f"target_agent={route.agent}\n"
|
|
1176
|
+
f"chat_id={message.chat_id}\n"
|
|
1177
|
+
f"thread_id={message.thread_id or ''}\n"
|
|
1178
|
+
f"reply_target=original_feishu_group_thread\n"
|
|
1179
|
+
f"handoff_allowed={'true' if allow_handoff else 'false'}\n"
|
|
1180
|
+
f"remaining_handoff_depth={remaining_depth}\n"
|
|
1181
|
+
"Do not start a free bot-to-bot conversation. Answer this delegated request and "
|
|
1182
|
+
"return the final answer here.\n"
|
|
1183
|
+
"[/Feishu controlled group handoff]\n\n"
|
|
1184
|
+
f"{user_text}"
|
|
1185
|
+
)
|
|
1186
|
+
|
|
1036
1187
|
def _should_use_bundled_native_runtime(self) -> bool:
|
|
1037
1188
|
if self._config.feishu.runtime_mode != "native" or self._orchestrator is None:
|
|
1038
1189
|
return False
|
|
@@ -2079,9 +2230,6 @@ class FeishuBot:
|
|
|
2079
2230
|
open_id = mention_id.get("open_id")
|
|
2080
2231
|
if isinstance(open_id, str) and open_id and open_id == bot_sender_id:
|
|
2081
2232
|
return True
|
|
2082
|
-
key = item.get("key")
|
|
2083
|
-
if isinstance(key, str) and key.lower() == "@all":
|
|
2084
|
-
return True
|
|
2085
2233
|
return False
|
|
2086
2234
|
|
|
2087
2235
|
def _message_replies_to_bot(self, message: dict[str, Any]) -> bool:
|
|
@@ -100,6 +100,28 @@ class AsyncInterAgentResult:
|
|
|
100
100
|
AsyncResultCallback = Callable[["AsyncInterAgentResult"], Awaitable[None]]
|
|
101
101
|
|
|
102
102
|
|
|
103
|
+
def _stack_orchestrator(stack: AgentStack):
|
|
104
|
+
"""Return an orchestrator from real AgentStack or legacy test doubles."""
|
|
105
|
+
bot = getattr(stack, "bot", None)
|
|
106
|
+
if bot is not None:
|
|
107
|
+
try:
|
|
108
|
+
return bot.orchestrator
|
|
109
|
+
except AttributeError:
|
|
110
|
+
pass
|
|
111
|
+
return getattr(stack, "orchestrator", None)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _stack_notification_service(stack: AgentStack):
|
|
115
|
+
"""Return a notification service from real AgentStack or test doubles."""
|
|
116
|
+
bot = getattr(stack, "bot", None)
|
|
117
|
+
if bot is not None:
|
|
118
|
+
try:
|
|
119
|
+
return bot.notification_service
|
|
120
|
+
except AttributeError:
|
|
121
|
+
pass
|
|
122
|
+
return getattr(stack, "notification_service", None)
|
|
123
|
+
|
|
124
|
+
|
|
103
125
|
class InterAgentBus:
|
|
104
126
|
"""In-memory async bus for agent-to-agent communication.
|
|
105
127
|
|
|
@@ -161,7 +183,7 @@ class InterAgentBus:
|
|
|
161
183
|
logger.info("Bus: %s -> %s (%d chars)", sender, recipient, len(message))
|
|
162
184
|
|
|
163
185
|
try:
|
|
164
|
-
orch = target
|
|
186
|
+
orch = _stack_orchestrator(target)
|
|
165
187
|
if orch is None:
|
|
166
188
|
return InterAgentResponse(
|
|
167
189
|
sender=recipient,
|
|
@@ -272,7 +294,7 @@ class InterAgentBus:
|
|
|
272
294
|
t0 = time.time()
|
|
273
295
|
try:
|
|
274
296
|
target = self._agents[task.recipient]
|
|
275
|
-
orch = target
|
|
297
|
+
orch = _stack_orchestrator(target)
|
|
276
298
|
if orch is None:
|
|
277
299
|
await self._deliver_async_result(
|
|
278
300
|
AsyncInterAgentResult(
|
|
@@ -381,7 +403,9 @@ class InterAgentBus:
|
|
|
381
403
|
if target is None:
|
|
382
404
|
return
|
|
383
405
|
|
|
384
|
-
ns = target
|
|
406
|
+
ns = _stack_notification_service(target)
|
|
407
|
+
if ns is None:
|
|
408
|
+
return
|
|
385
409
|
|
|
386
410
|
# Use explicit summary if provided, otherwise truncate message
|
|
387
411
|
if task.summary:
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from pathlib import Path
|
|
6
|
+
from typing import Literal
|
|
6
7
|
|
|
7
8
|
from pydantic import BaseModel
|
|
8
9
|
|
|
@@ -28,14 +29,17 @@ class SubAgentConfig(BaseModel):
|
|
|
28
29
|
"""
|
|
29
30
|
|
|
30
31
|
name: str
|
|
32
|
+
mode: Literal["transport", "headless"] = "transport"
|
|
31
33
|
transport: str = "telegram" # "telegram" | "matrix"
|
|
34
|
+
workspace_policy: Literal["isolated", "shared", "shared_readonly"] = "isolated"
|
|
35
|
+
terminal_visible: bool = True
|
|
32
36
|
|
|
33
|
-
# Telegram credentials (required when transport=telegram)
|
|
37
|
+
# Telegram credentials (required when mode=transport and transport=telegram)
|
|
34
38
|
telegram_token: str = ""
|
|
35
39
|
allowed_user_ids: list[int] | None = None
|
|
36
40
|
allowed_group_ids: list[int] | None = None
|
|
37
41
|
|
|
38
|
-
# Matrix credentials (required when transport=matrix)
|
|
42
|
+
# Matrix credentials (required when mode=transport and transport=matrix)
|
|
39
43
|
matrix: MatrixConfig | None = None
|
|
40
44
|
|
|
41
45
|
# Group behaviour
|