controlmesh 0.41.0__tar.gz → 0.41.2__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.41.0 → controlmesh-0.41.2}/PKG-INFO +1 -1
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/__init__.py +1 -1
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/__main__.py +2 -2
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/init_wizard.py +34 -3
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/auth.py +3 -2
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/feishu.py +18 -1
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/install.py +7 -1
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/native_auth_all_runner.py +4 -3
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/native_auth_useful_runner.py +54 -7
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/orchestration_runner.py +5 -4
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/bot.py +1 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/command_center_card.py +2 -2
- {controlmesh-0.41.0 → controlmesh-0.41.2}/pyproject.toml +1 -1
- {controlmesh-0.41.0 → controlmesh-0.41.2}/.gitignore +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/Dockerfile.sandbox +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/LICENSE +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/README.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/config.example.json +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_banner.txt +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/RULES.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-all-clis.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-claude-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-codex-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-gemini-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/JOIN_NOTIFICATION.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/RULES.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-all-clis.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-claude-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-codex-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-gemini-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/flow-triggered-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/release-ci-monitor-template/RULES-template.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/release-ci-monitor-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/scheduled-recurring-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/webhook-triggered-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/output_to_user/RULES.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/routing/activation_policies.yaml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/routing/capabilities.yaml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/RULES.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/LICENSE.txt +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/SKILL.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/references/output-patterns.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/references/workflows.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/init_skill.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/package_skill.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/quick_validate.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tasks/RULES.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/telegram_files/RULES.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/RULES.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/_tool_shared.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/RULES.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/ask_agent.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/ask_agent_async.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/create_agent.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/edit_shared_knowledge.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/list_agents.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/remove_agent.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-all-clis.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-claude-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-codex-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-gemini-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/_shared.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_add.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_edit.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_list.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_monitor.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_remove.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_time.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/RULES.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/file_info.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/list_files.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/process_video.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/read_document.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/transcribe_audio.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/RULES.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/_shared.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/ask_parent.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/attach_task.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/cancel_task.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/check_task_updates.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/create_task.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/delete_task.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/list_tasks.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/release_task.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/resume_task.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/route_task.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/tell_task.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/user_tools/RULES.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-all-clis.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-claude-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-codex-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-gemini-only.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/_shared.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/setup_ci_failure_webhook.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_add.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_edit.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_list.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_remove.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_rotate_token.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_test.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/VENDORED_FROM.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/agent_runtime.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/app_registration.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/cardkit.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/claude_adapter.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/cli.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/client.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/device_flow.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/domains.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/message_context.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/models.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/native_agent_tools.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/native_contract.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/orchestration.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/owner_policy.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/probe.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/runtime_cards.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/scopes.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/token_store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/runner.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/context.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/manager.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/progress.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/results.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/tools.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/api/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/api/admin_read.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/api/catalog_http.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/api/crypto.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/api/server.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/background/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/background/models.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/background/observer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/adapters.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/bus.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/cron_sanitize.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/envelope.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/lock_pool.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/__main__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/io.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/lint.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/models.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/render.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cleanup/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cleanup/observer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/auth.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/base.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/claude_provider.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/claw_provider.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/coalescer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_cache.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_cache_observer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_discovery.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_events.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_hooks.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_provider.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/diagnostics.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/events.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/executor.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/factory.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/gemini_cache.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/gemini_cache_observer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/gemini_events.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/gemini_provider.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/gemini_utils.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/introspection.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/liveness.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/model_cache.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/openai_agents_provider.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/opencode_discovery.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/opencode_provider.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/param_resolver.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/process_registry.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/service.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/stream_events.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/supervisor.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/timeout_controller.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/types.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/agents.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/api_cmd.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/cron.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/docker.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/lifecycle.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/runtime.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/service.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/status.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/tasks.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/terminal.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/command_registry.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/commands.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/config.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/config_reload.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/dependency_queue.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/execution.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/manager.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/observer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/policy.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/errors.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/allowed_roots.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/browser.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/image_processor.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/prompt.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/storage.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/tags.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/gateways/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/gateways/config.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/gateways/types.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/heartbeat/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/heartbeat/observer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/history/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/history/catalog.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/history/index.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/history/models.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/history/store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/de/chat.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/de/cli.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/de/commands.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/de/wizard.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/en/chat.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/en/cli.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/en/commands.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/en/wizard.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/es/chat.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/es/cli.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/es/commands.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/es/wizard.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/fr/chat.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/fr/cli.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/fr/commands.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/fr/wizard.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/loader.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/nl/chat.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/nl/cli.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/nl/commands.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/nl/wizard.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/pt/chat.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/pt/cli.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/pt/commands.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/pt/wizard.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/ru/chat.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/ru/cli.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/ru/commands.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/ru/wizard.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/zh/chat.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/zh/cli.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/zh/commands.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/zh/wizard.toml +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/atomic_io.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/base_observer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/base_task_observer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/boot_id.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/docker.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/docker_extras.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/env_secrets.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/file_watcher.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/fs.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/inflight.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/install.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/json_store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/pidlock.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/platform.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/process_tree.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/recovery.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/restart.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service_base.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service_linux.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service_logs.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service_macos.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service_windows.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/startup_state.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/task_runner.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/updater.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/version.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/integrations/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/integrations/feishu_auth_kit.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/log_context.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/logging_config.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/capture.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/commands.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/dreaming.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/events.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/frequency.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/models.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/promotion.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/runtime_capture.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/search.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/semantic.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/address.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/callback_router.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/capabilities.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/commands.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/app_info.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/auth_cards.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/brand.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/card_auth.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/card_auth_context.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/card_auth_runner.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/device_flow.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/errors.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/feishu_card_sender.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/runtime_auth.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/runtime_continuation.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/token_store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/uat_client.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/bundled_runtime.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/card_action_payload.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/card_stream.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/id_map.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/inbound.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/long_connection.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/media.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/media_meta.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/message_context.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/native_tools/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/native_tools/agent_runtime.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/native_tools/client.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/native_tools/executor.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/progress_preview.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/runtime_state.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/sender.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/settings_card.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/startup.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/tool_auth.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/transport.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/bot.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/buttons.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/credentials.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/file_browser.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/formatting.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/id_map.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/media.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/sender.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/startup.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/streaming.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/streaming_mode.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/transport.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/typing.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/multi.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/notifications.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/protocol.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/api.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/bot.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/gateway.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/inbound.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/known_targets.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/media.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/outbound.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/ref_index.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/session_store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/target.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/token_manager.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/transport.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/types.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/typing_keepalive.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/registry.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/send_opts.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/abort.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/app.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/buttons.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/callbacks.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/chat_tracker.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/controlmesh_images/logo_text.png +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/controlmesh_images/welcome.png +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/dedup.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/edit_streaming.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/file_browser.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/formatting.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/handlers.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/inbound_spool.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/lane_state.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/media.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/message_dispatch.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/middleware.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/runtime_state.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/sender.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/startup.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/streaming.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/topic.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/transport.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/typing.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/upgrade_handler.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/welcome.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/api.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/auth_state.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/auth_store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/bot.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/id_map.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/inbound_spool.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/runtime.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/runtime_state.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/transport.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/approval_intent.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/bus.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/commands.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/health.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/internal_api.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/models.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/plan_review_loop.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/registry.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/release_gate.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/shared_knowledge.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/stack.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/supervisor.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/native_commands/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/native_commands/fallbacks.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/native_commands/render.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/commands.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/core.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/directives.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/flows.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/hooks.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/injection.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/lifecycle.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/observers.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/presentation.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/providers.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/registry.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/agent_router.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/capability_registry.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/cron_selector.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/model_selector.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/models.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/session_selector.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/settings_selector.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/task_selector.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/utils.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/planning_files.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/provider_binding.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/provider_health.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/activation.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/capabilities.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/policy.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/router.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/score_events.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/scorer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/workunit.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/run.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/agent_inbox.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/host_jobs.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/models.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/registry.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/security/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/security/content.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/security/paths.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/session/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/session/key.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/session/manager.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/session/named.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/evaluator.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/evidence.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/host_execution.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/hub.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/models.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/registry.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/task_policy.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/api.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/contracts.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/execution.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/live.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/models.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/orchestrator.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/phases.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/presentation.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/runtime_attachment.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/runtime_control.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/base.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/dispatch.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/events.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/mailbox.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/manifest.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/phase.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/recovery.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/runtime.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/snapshot.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/tasks.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/app.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/command_router.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/config.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/enhanced_shell.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/errors.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/inbox.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/memory_context.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/modes.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/native_pty.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/providers.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/rendering.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/runtime.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/session.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/tasks_view.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/text/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/text/frontstage_delivery.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/text/response_format.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/text/tool_event_format.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/utils/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/utils/quiet_hours.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/auth.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/manager.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/models.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/observer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/server.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/cron_tasks.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/init.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/loader.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/paths.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/rules_selector.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/skill_sync.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/autonomous_runtime_loop.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/canonical_section_writer.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/contracts.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/engine.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/events.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/evidence_identity.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_event_shape.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_evidence_replay_query.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_evidence_replay_query_boundary.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_payload_seam.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_payloads.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_read_surface.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_runtime_events.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_wiring_boundary.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/file_backed_primary_boundary.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/first_engine_boundary.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/first_engine_contract_surface.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/first_engine_test_matrix.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/first_engine_trace_examples.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/orchestrator_boundary.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/promotion_bridge.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/promotion_controller.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/promotion_receipt.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/py.typed +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/records.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery/contracts.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery/execution.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery/policy.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery_execution_boundary.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery_thin_loop.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/review.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/review_handoff_packet.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/review_query_read_surface_boundary.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/runtime.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/runtime_execution_checkpoint.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/runtime_message_api.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/serde.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/summary/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/summary/contracts.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/summary/policy.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/summary/runtime.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/summary_trigger_landing_boundary.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/task_packet.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/thin_orchestrator.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/thin_runtime_loop.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/tracing.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/worker_controller.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/worker_state.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/docs/README.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/docs/case-pack/README.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/examples/case-pack/README.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/plans/README.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/plans/tasks/README.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/plans/tasks/_template/artifacts/README.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/plans/tasks/_template/logs/README.md +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/summary/__init__.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/summary/test_contracts.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/summary/test_policy.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/summary/test_runtime.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_autonomous_runtime_loop.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_events.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_execution_evidence_replay_query.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_execution_evidence_store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_execution_payloads.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_execution_read_surface.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_execution_runtime_events.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_first_engine.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_promotion_bridge.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_recovery_contracts.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_recovery_execution.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_recovery_policy.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_recovery_thin_loop.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_review.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_review_handoff_packet.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_runtime_execution_checkpoint.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_runtime_message_api.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_store.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_task_packet.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_thin_orchestrator.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_thin_runtime_loop.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_worker_controller.py +0 -0
- {controlmesh-0.41.0 → controlmesh-0.41.2}/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.41.
|
|
3
|
+
Version: 0.41.2
|
|
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
|
|
@@ -434,12 +434,12 @@ def _validate_feishu_config(config: AgentConfig) -> None:
|
|
|
434
434
|
if not fs.app_id:
|
|
435
435
|
_console.print("Feishu transport requires an existing Feishu self-built app.")
|
|
436
436
|
_console.print("Missing field: feishu.app_id.")
|
|
437
|
-
_console.print("Run `controlmesh
|
|
437
|
+
_console.print("Run `controlmesh feishu native setup` to start the official scan-create registration flow.")
|
|
438
438
|
sys.exit(1)
|
|
439
439
|
if not fs.app_secret:
|
|
440
440
|
_console.print("Feishu transport requires an existing Feishu self-built app.")
|
|
441
441
|
_console.print("Missing field: feishu.app_secret.")
|
|
442
|
-
_console.print("Run `controlmesh
|
|
442
|
+
_console.print("Run `controlmesh feishu native setup` to start the official scan-create registration flow.")
|
|
443
443
|
sys.exit(1)
|
|
444
444
|
|
|
445
445
|
|
|
@@ -156,7 +156,7 @@ def _show_disclaimer(console: Console) -> None:
|
|
|
156
156
|
|
|
157
157
|
|
|
158
158
|
def _ask_transport(console: Console) -> str:
|
|
159
|
-
"""Prompt for the messaging transport
|
|
159
|
+
"""Prompt for the messaging transport."""
|
|
160
160
|
console.print(
|
|
161
161
|
Panel(
|
|
162
162
|
t_rich("wizard.transport.body"),
|
|
@@ -168,10 +168,12 @@ def _ask_transport(console: Console) -> str:
|
|
|
168
168
|
|
|
169
169
|
selected: str | None = questionary.select(
|
|
170
170
|
t_rich("wizard.transport.prompt"),
|
|
171
|
-
choices=["Telegram", "Matrix"],
|
|
171
|
+
choices=["Feishu native", "Telegram", "Matrix"],
|
|
172
172
|
).ask()
|
|
173
173
|
if selected is None:
|
|
174
174
|
_abort()
|
|
175
|
+
if selected == "Feishu native":
|
|
176
|
+
return "feishu"
|
|
175
177
|
return "matrix" if selected == "Matrix" else "telegram"
|
|
176
178
|
|
|
177
179
|
|
|
@@ -557,9 +559,20 @@ def _load_existing_config(config_path: Path) -> dict[str, object]:
|
|
|
557
559
|
|
|
558
560
|
def _apply_transport_config(merged: dict[str, object], cfg: _WizardConfig) -> None:
|
|
559
561
|
"""Write transport-specific keys into *merged*."""
|
|
560
|
-
|
|
562
|
+
transport = cfg.get("transport", "telegram")
|
|
563
|
+
if transport == "telegram":
|
|
561
564
|
merged["telegram_token"] = cfg.get("telegram_token", "")
|
|
562
565
|
merged["allowed_user_ids"] = cfg.get("allowed_user_ids") or []
|
|
566
|
+
elif transport == "feishu":
|
|
567
|
+
feishu_section = merged.get("feishu")
|
|
568
|
+
if not isinstance(feishu_section, dict):
|
|
569
|
+
feishu_section = {}
|
|
570
|
+
merged["feishu"] = feishu_section
|
|
571
|
+
feishu_section.setdefault("mode", "bot_only")
|
|
572
|
+
feishu_section.setdefault("brand", "feishu")
|
|
573
|
+
feishu_section["runtime_mode"] = "native"
|
|
574
|
+
feishu_section["progress_mode"] = "card_stream"
|
|
575
|
+
feishu_section.setdefault("domain", "https://open.feishu.cn")
|
|
563
576
|
else: # matrix
|
|
564
577
|
matrix_section = merged.get("matrix")
|
|
565
578
|
if not isinstance(matrix_section, dict):
|
|
@@ -644,6 +657,19 @@ def run_onboarding() -> bool:
|
|
|
644
657
|
console.print()
|
|
645
658
|
allowed_user_ids = _ask_user_id(console)
|
|
646
659
|
console.print()
|
|
660
|
+
elif transport == "feishu":
|
|
661
|
+
console.print(
|
|
662
|
+
Panel(
|
|
663
|
+
"Feishu native setup uses the official scan-create flow.\n\n"
|
|
664
|
+
"After this wizard writes the base config, run:\n\n"
|
|
665
|
+
" controlmesh feishu native setup\n\n"
|
|
666
|
+
"That command prints the Feishu QR/link and auto-completes config writeback after approval.",
|
|
667
|
+
title="Feishu Native",
|
|
668
|
+
border_style="blue",
|
|
669
|
+
padding=(1, 2),
|
|
670
|
+
)
|
|
671
|
+
)
|
|
672
|
+
console.print()
|
|
647
673
|
else: # matrix
|
|
648
674
|
matrix_homeserver = _ask_matrix_homeserver(console)
|
|
649
675
|
console.print()
|
|
@@ -704,6 +730,11 @@ def run_onboarding() -> bool:
|
|
|
704
730
|
+ "\n"
|
|
705
731
|
+ t_rich("wizard.complete.logs", path=paths.logs_dir)
|
|
706
732
|
+ "\n\n"
|
|
733
|
+
+ (
|
|
734
|
+
"Feishu next step: run `controlmesh feishu native setup` to scan-create the app bot.\n\n"
|
|
735
|
+
if transport == "feishu"
|
|
736
|
+
else ""
|
|
737
|
+
)
|
|
707
738
|
+ action,
|
|
708
739
|
title=t_rich("wizard.complete.title"),
|
|
709
740
|
border_style="green",
|
|
@@ -872,8 +872,8 @@ def _render_feishu_setup_guidance(config: AgentConfig) -> None:
|
|
|
872
872
|
_console.print(f"Feishu Open Platform app console: {_FEISHU_APP_CONSOLE_URL}")
|
|
873
873
|
_console.print(f"Feishu self-built app guide: {_FEISHU_APP_DEV_GUIDE_URL}")
|
|
874
874
|
_console.print("Required setup for a new user with no Feishu bot:")
|
|
875
|
-
_console.print("1. Preferred native path: run `controlmesh
|
|
876
|
-
_console.print("2.
|
|
875
|
+
_console.print("1. Preferred native path: run `controlmesh feishu native setup` and scan the official QR flow.")
|
|
876
|
+
_console.print("2. ControlMesh saves a pending registration and auto-completes config writeback after approval.")
|
|
877
877
|
_console.print("3. That path writes `runtime_mode=native` and enables CardKit streaming by default.")
|
|
878
878
|
_console.print("4. Manual bridge fallback: create a Feishu self-built app in the app console.")
|
|
879
879
|
_console.print("5. Put the app_id/app_secret into config.json and keep `runtime_mode=bridge`.")
|
|
@@ -883,6 +883,7 @@ def _render_feishu_setup_guidance(config: AgentConfig) -> None:
|
|
|
883
883
|
_console.print("9. Subscribe to message receive events such as im.message.receive_v1.")
|
|
884
884
|
_console.print("10. Add the bot to a chat and send a first message to validate inbound/reply wiring.")
|
|
885
885
|
_console.print("Manual fallback remains valid if the official scan-to-create flow is unavailable in your environment.")
|
|
886
|
+
_console.print("Advanced/manual commands remain available under `controlmesh auth feishu register-begin|register-poll`.")
|
|
886
887
|
_console.print("After app credentials exist, `controlmesh auth feishu login` only performs optional device-flow user auth.")
|
|
887
888
|
_console.print("It does not create a new app or bot.")
|
|
888
889
|
|
|
@@ -18,32 +18,49 @@ Commands:
|
|
|
18
18
|
"""
|
|
19
19
|
_FEISHU_NATIVE_USAGE = """Usage:
|
|
20
20
|
controlmesh feishu native bootstrap
|
|
21
|
+
controlmesh feishu native setup
|
|
21
22
|
controlmesh feishu native doctor
|
|
22
23
|
controlmesh feishu native probe
|
|
23
24
|
controlmesh feishu native register-begin
|
|
25
|
+
controlmesh feishu native complete
|
|
24
26
|
|
|
25
27
|
Commands:
|
|
26
28
|
bootstrap Start the Feishu native bootstrap flow.
|
|
29
|
+
setup Begin scan-create registration and arm auto-complete.
|
|
27
30
|
doctor Run Feishu auth/runtime doctor checks.
|
|
28
31
|
probe Probe current Feishu runtime readiness.
|
|
29
32
|
register-begin Begin Feishu app registration flow.
|
|
33
|
+
complete Complete a pending scan-create registration.
|
|
30
34
|
"""
|
|
31
35
|
_FEISHU_NATIVE_BOOTSTRAP_USAGE = """Usage:
|
|
32
36
|
controlmesh feishu native bootstrap
|
|
33
37
|
|
|
34
38
|
Start the product-friendly Feishu native bootstrap flow.
|
|
35
39
|
"""
|
|
40
|
+
_FEISHU_NATIVE_SETUP_USAGE = """Usage:
|
|
41
|
+
controlmesh feishu native setup [--no-start-service]
|
|
42
|
+
|
|
43
|
+
Start the stable Feishu-native setup flow:
|
|
44
|
+
1. create the official scan-create registration session,
|
|
45
|
+
2. print the QR/link and user code,
|
|
46
|
+
3. save a pending registration file,
|
|
47
|
+
4. auto-complete config writeback after the QR flow is approved.
|
|
48
|
+
"""
|
|
36
49
|
_NATIVE_AUTH_COMMANDS = {
|
|
37
50
|
"bootstrap": ["auth", "feishu", "setup"],
|
|
51
|
+
"setup": ["auth", "feishu", "register-begin"],
|
|
38
52
|
"doctor": ["auth", "feishu", "doctor"],
|
|
39
53
|
"probe": ["auth", "feishu", "probe"],
|
|
40
54
|
"register-begin": ["auth", "feishu", "register-begin"],
|
|
55
|
+
"complete": ["auth", "feishu", "register-complete"],
|
|
41
56
|
}
|
|
42
57
|
_NATIVE_COMMAND_USAGE = {
|
|
43
58
|
"bootstrap": _FEISHU_NATIVE_BOOTSTRAP_USAGE,
|
|
59
|
+
"setup": _FEISHU_NATIVE_SETUP_USAGE,
|
|
44
60
|
"doctor": "Usage:\n controlmesh feishu native doctor\n",
|
|
45
61
|
"probe": "Usage:\n controlmesh feishu native probe\n",
|
|
46
62
|
"register-begin": "Usage:\n controlmesh feishu native register-begin\n",
|
|
63
|
+
"complete": "Usage:\n controlmesh feishu native complete\n",
|
|
47
64
|
}
|
|
48
65
|
|
|
49
66
|
|
|
@@ -87,7 +104,7 @@ def _cmd_feishu_native(args: Sequence[str]) -> None:
|
|
|
87
104
|
|
|
88
105
|
auth_args = _NATIVE_AUTH_COMMANDS.get(action)
|
|
89
106
|
if auth_args:
|
|
90
|
-
cmd_auth(auth_args)
|
|
107
|
+
cmd_auth([*auth_args, *args[1:]])
|
|
91
108
|
return
|
|
92
109
|
|
|
93
110
|
raise SystemExit(1)
|
|
@@ -67,6 +67,7 @@ def _install_extra(name: str) -> None:
|
|
|
67
67
|
|
|
68
68
|
def print_install_help() -> None:
|
|
69
69
|
"""Show available extras."""
|
|
70
|
+
console = Console()
|
|
70
71
|
table = Table(show_header=True, header_style="bold")
|
|
71
72
|
table.add_column(t_rich("install.col_extra"))
|
|
72
73
|
table.add_column(t_rich("install.col_description"))
|
|
@@ -80,7 +81,12 @@ def print_install_help() -> None:
|
|
|
80
81
|
)
|
|
81
82
|
table.add_row(name, desc, status)
|
|
82
83
|
|
|
83
|
-
|
|
84
|
+
console.print(Panel(table, title="controlmesh install <extra>"))
|
|
85
|
+
console.print()
|
|
86
|
+
console.print("After installing ControlMesh, choose a chat setup path:")
|
|
87
|
+
console.print(" Feishu native: controlmesh feishu native setup")
|
|
88
|
+
console.print(" Telegram wizard: controlmesh setup")
|
|
89
|
+
console.print(" Optional extras: controlmesh install matrix | controlmesh install api")
|
|
84
90
|
|
|
85
91
|
|
|
86
92
|
def cmd_install(args: list[str]) -> None:
|
|
@@ -221,11 +221,12 @@ def _render_app_scope_missing_text(*, unavailable_scopes: list[str], permission_
|
|
|
221
221
|
scope_lines = "\n".join(f"- {scope}" for scope in unavailable_scopes)
|
|
222
222
|
return (
|
|
223
223
|
"批量授权需要先补齐应用权限。\n\n"
|
|
224
|
-
"
|
|
225
|
-
|
|
224
|
+
"我会发一张权限申请卡。请点卡片里的“去申请权限”,它会打开飞书一键补充权限页,"
|
|
225
|
+
"并自动预选这次缺少的权限。\n\n"
|
|
226
226
|
"缺少的应用权限:\n"
|
|
227
227
|
f"{scope_lines}\n\n"
|
|
228
|
-
"
|
|
228
|
+
"申请并审核通过后,回到卡片点“已完成,继续”,或重新发 `/feishu_auth_all`。\n\n"
|
|
229
|
+
f"如果卡片按钮打不开,可复制这个同款一键补权限链接:\n{permission_url}"
|
|
229
230
|
)
|
|
230
231
|
|
|
231
232
|
|
|
@@ -11,6 +11,7 @@ from typing import Any
|
|
|
11
11
|
from controlmesh.config import AgentConfig
|
|
12
12
|
from controlmesh.integrations.feishu_auth_kit import run_feishu_auth_kit_json
|
|
13
13
|
from controlmesh.messenger.feishu.auth.app_info import AppInfoAccessError, FeishuAppInfoCache
|
|
14
|
+
from controlmesh.messenger.feishu.auth.brand import build_permission_url
|
|
14
15
|
from controlmesh.messenger.feishu.auth.token_store import FeishuTokenStore
|
|
15
16
|
from controlmesh.messenger.feishu.native_tools import all_native_user_auth_scopes
|
|
16
17
|
|
|
@@ -74,12 +75,13 @@ def filter_useful_user_auth_scopes(
|
|
|
74
75
|
|
|
75
76
|
|
|
76
77
|
class FeishuNativeAuthUsefulRunner:
|
|
77
|
-
"""Authorize
|
|
78
|
+
"""Authorize useful native scopes while excluding heavy enterprise domains."""
|
|
78
79
|
|
|
79
80
|
def __init__(
|
|
80
81
|
self,
|
|
81
82
|
config: AgentConfig,
|
|
82
83
|
*,
|
|
84
|
+
start_app_permission_flow: Callable[..., Awaitable[None]],
|
|
83
85
|
start_user_auth_flow: Callable[..., Awaitable[None]],
|
|
84
86
|
text_reply: Callable[[str, str, str | None], Awaitable[None]],
|
|
85
87
|
session_factory: Callable[[], Awaitable[Any]] | None = None,
|
|
@@ -91,8 +93,10 @@ class FeishuNativeAuthUsefulRunner:
|
|
|
91
93
|
token_store: FeishuTokenStore | None = None,
|
|
92
94
|
batch_size: int = 100,
|
|
93
95
|
excluded_scope_keywords: Iterable[str] = _DEFAULT_EXCLUDED_SCOPE_KEYWORDS,
|
|
96
|
+
target_scopes: Iterable[str] | None = None,
|
|
94
97
|
) -> None:
|
|
95
98
|
self._config = config
|
|
99
|
+
self._start_app_permission_flow = start_app_permission_flow
|
|
96
100
|
self._start_user_auth_flow = start_user_auth_flow
|
|
97
101
|
self._text_reply = text_reply
|
|
98
102
|
self._session_factory = session_factory
|
|
@@ -105,6 +109,7 @@ class FeishuNativeAuthUsefulRunner:
|
|
|
105
109
|
self._batch_size = batch_size
|
|
106
110
|
self._excluded_scope_keywords = tuple(excluded_scope_keywords)
|
|
107
111
|
self._preserve_scopes = all_native_user_auth_scopes()
|
|
112
|
+
self._target_scopes = tuple(target_scopes or all_native_user_auth_scopes())
|
|
108
113
|
|
|
109
114
|
async def handle_message(self, message: FeishuIncomingText) -> bool:
|
|
110
115
|
if self._config.feishu.runtime_mode != "native":
|
|
@@ -112,9 +117,8 @@ class FeishuNativeAuthUsefulRunner:
|
|
|
112
117
|
if not is_native_auth_useful_command(message.text):
|
|
113
118
|
return False
|
|
114
119
|
|
|
115
|
-
app_scopes = await self._load_app_scopes()
|
|
116
120
|
requested_scopes = filter_useful_user_auth_scopes(
|
|
117
|
-
|
|
121
|
+
self._target_scopes,
|
|
118
122
|
excluded_scope_keywords=self._excluded_scope_keywords,
|
|
119
123
|
preserve_scopes=self._preserve_scopes,
|
|
120
124
|
)
|
|
@@ -126,12 +130,32 @@ class FeishuNativeAuthUsefulRunner:
|
|
|
126
130
|
)
|
|
127
131
|
return True
|
|
128
132
|
|
|
133
|
+
app_scopes = await self._load_app_scopes()
|
|
129
134
|
user_scopes = self._load_user_scopes(message.sender_id)
|
|
130
135
|
plan = await self._plan_scopes(
|
|
131
136
|
requested_scopes=requested_scopes,
|
|
132
137
|
app_scopes=app_scopes,
|
|
133
138
|
user_scopes=user_scopes,
|
|
134
139
|
)
|
|
140
|
+
unavailable_scopes = _string_list(plan.get("unavailable_scopes"))
|
|
141
|
+
if unavailable_scopes:
|
|
142
|
+
permission_url = _permission_url(self._config, unavailable_scopes)
|
|
143
|
+
await self._text_reply(
|
|
144
|
+
message.chat_id,
|
|
145
|
+
_render_app_scope_missing_text(
|
|
146
|
+
unavailable_scopes=unavailable_scopes,
|
|
147
|
+
permission_url=permission_url,
|
|
148
|
+
),
|
|
149
|
+
message.message_id if self._config.feishu.reply_to_trigger else None,
|
|
150
|
+
)
|
|
151
|
+
await self._start_app_permission_flow(
|
|
152
|
+
message,
|
|
153
|
+
required_scopes=unavailable_scopes,
|
|
154
|
+
permission_url=permission_url,
|
|
155
|
+
retry_text=message.text,
|
|
156
|
+
)
|
|
157
|
+
return True
|
|
158
|
+
|
|
135
159
|
batches = _list_of_string_lists(plan.get("batches"))
|
|
136
160
|
next_batch = batches[0] if batches else _string_list(plan.get("missing_user_scopes"))
|
|
137
161
|
if next_batch:
|
|
@@ -162,7 +186,7 @@ class FeishuNativeAuthUsefulRunner:
|
|
|
162
186
|
if self._get_app_scopes is not None:
|
|
163
187
|
return _string_list(await _maybe_await(self._get_app_scopes()))
|
|
164
188
|
if self._session_factory is None or self._get_tenant_access_token is None:
|
|
165
|
-
return
|
|
189
|
+
return list(self._target_scopes)
|
|
166
190
|
try:
|
|
167
191
|
session = await self._session_factory()
|
|
168
192
|
tenant_access_token = await _maybe_await(self._get_tenant_access_token())
|
|
@@ -174,8 +198,8 @@ class FeishuNativeAuthUsefulRunner:
|
|
|
174
198
|
token_type="user",
|
|
175
199
|
)
|
|
176
200
|
except AppInfoAccessError:
|
|
177
|
-
logger.warning("Feishu auth-useful could not inspect app scopes")
|
|
178
|
-
return
|
|
201
|
+
logger.warning("Feishu auth-useful could not inspect app scopes; falling back to optimistic planning")
|
|
202
|
+
return list(self._target_scopes)
|
|
179
203
|
|
|
180
204
|
def _load_user_scopes(self, user_open_id: str) -> list[str]:
|
|
181
205
|
if self._get_user_scopes is not None:
|
|
@@ -214,6 +238,16 @@ async def _maybe_await(value: Any) -> Any:
|
|
|
214
238
|
return value
|
|
215
239
|
|
|
216
240
|
|
|
241
|
+
def _permission_url(config: AgentConfig, scopes: list[str]) -> str:
|
|
242
|
+
return build_permission_url(
|
|
243
|
+
app_id=config.feishu.app_id,
|
|
244
|
+
scopes=scopes,
|
|
245
|
+
brand=config.feishu.brand,
|
|
246
|
+
token_type="user",
|
|
247
|
+
op_from="controlmesh-feishu-auth-useful",
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
|
|
217
251
|
def _string_list(value: Any) -> list[str]:
|
|
218
252
|
if not isinstance(value, list):
|
|
219
253
|
return []
|
|
@@ -234,11 +268,24 @@ def _list_of_string_lists(value: Any) -> list[list[str]]:
|
|
|
234
268
|
|
|
235
269
|
def _render_no_scopes_text() -> str:
|
|
236
270
|
return (
|
|
237
|
-
"
|
|
271
|
+
"当前 useful 目标里没有需要补的非黑名单用户权限。\n\n"
|
|
238
272
|
"这个命令会自动跳过邮件、HR、Payroll、Minutes、OKR、Tasks 这些重域。"
|
|
239
273
|
)
|
|
240
274
|
|
|
241
275
|
|
|
276
|
+
def _render_app_scope_missing_text(*, unavailable_scopes: list[str], permission_url: str) -> str:
|
|
277
|
+
scope_lines = "\n".join(f"- {scope}" for scope in unavailable_scopes)
|
|
278
|
+
return (
|
|
279
|
+
"飞书 useful 授权需要先补齐应用权限。\n\n"
|
|
280
|
+
"我会发一张权限申请卡。请点卡片里的“去申请权限”,它会打开飞书一键补充权限页,"
|
|
281
|
+
"并自动预选这次缺少的权限。\n\n"
|
|
282
|
+
"缺少的应用权限:\n"
|
|
283
|
+
f"{scope_lines}\n\n"
|
|
284
|
+
"申请并审核通过后,回到卡片点“已完成,继续”,或重新发 `/feishu_auth_useful`。\n\n"
|
|
285
|
+
f"如果卡片按钮打不开,可复制这个同款一键补权限链接:\n{permission_url}"
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
|
|
242
289
|
def _render_user_scope_batch_text(*, scopes: list[str], batch_index: int, total_batches: int) -> str:
|
|
243
290
|
scope_lines = "\n".join(f"- {scope}" for scope in scopes)
|
|
244
291
|
return (
|
{controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/orchestration_runner.py
RENAMED
|
@@ -386,8 +386,9 @@ def _feishu_card_from_auth_kit(card: object) -> dict[str, Any]:
|
|
|
386
386
|
if card.get("type") == "permission_missing":
|
|
387
387
|
message = (
|
|
388
388
|
f"{message}\n\n"
|
|
389
|
-
"
|
|
390
|
-
"
|
|
389
|
+
"这是应用权限申请步骤,不是用户 OAuth 授权。\n"
|
|
390
|
+
"请先点“去申请权限”打开飞书一键补充权限页,缺失权限会自动预选;"
|
|
391
|
+
"申请并审核通过后,回到这张卡点“已完成,继续”。"
|
|
391
392
|
)
|
|
392
393
|
operation_id = str(card.get("operation_id") or "")
|
|
393
394
|
fields = card.get("fields") if isinstance(card.get("fields"), dict) else {}
|
|
@@ -411,7 +412,7 @@ def _feishu_card_from_auth_kit(card: object) -> dict[str, Any]:
|
|
|
411
412
|
{
|
|
412
413
|
"tag": "button",
|
|
413
414
|
"type": "primary",
|
|
414
|
-
"text": {"tag": "plain_text", "content": "
|
|
415
|
+
"text": {"tag": "plain_text", "content": "去申请权限"},
|
|
415
416
|
"multi_url": {
|
|
416
417
|
"url": link_url,
|
|
417
418
|
"pc_url": link_url,
|
|
@@ -422,7 +423,7 @@ def _feishu_card_from_auth_kit(card: object) -> dict[str, Any]:
|
|
|
422
423
|
{
|
|
423
424
|
"tag": "button",
|
|
424
425
|
"type": "default",
|
|
425
|
-
"text": {"tag": "plain_text", "content": "
|
|
426
|
+
"text": {"tag": "plain_text", "content": "已完成,继续"},
|
|
426
427
|
"value": {
|
|
427
428
|
"action": "permissions_granted_continue",
|
|
428
429
|
"operation_id": operation_id,
|
|
@@ -1994,6 +1994,7 @@ class FeishuBot:
|
|
|
1994
1994
|
self._config,
|
|
1995
1995
|
session_factory=self._ensure_session,
|
|
1996
1996
|
get_tenant_access_token=self._get_tenant_access_token,
|
|
1997
|
+
start_app_permission_flow=self._ensure_auth_orchestration_runner().start_permission_flow,
|
|
1997
1998
|
start_user_auth_flow=self._ensure_card_auth_runner().start_retryable_auth_flow,
|
|
1998
1999
|
text_reply=self._reply_card_auth_text,
|
|
1999
2000
|
)
|
{controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/command_center_card.py
RENAMED
|
@@ -180,7 +180,7 @@ def build_command_guide_text(
|
|
|
180
180
|
"常用命令:",
|
|
181
181
|
*controlmesh_lines,
|
|
182
182
|
"/feishu_auth_all — 批量补齐飞书原生权限",
|
|
183
|
-
"/feishu_auth_useful —
|
|
183
|
+
"/feishu_auth_useful — 补齐常用飞书原生权限, 自动跳过重企业域",
|
|
184
184
|
"",
|
|
185
185
|
"Native Commands 提示:",
|
|
186
186
|
"/compact — native compact context",
|
|
@@ -205,7 +205,7 @@ def _command_center_markdown(
|
|
|
205
205
|
+ "\n".join(command_lines)
|
|
206
206
|
+ "\n\n**Feishu**\n"
|
|
207
207
|
+ "- `/feishu_auth_all` narrow native auth path\n"
|
|
208
|
-
+ "- `/feishu_auth_useful`
|
|
208
|
+
+ "- `/feishu_auth_useful` useful native auth path excluding heavy enterprise domains\n\n"
|
|
209
209
|
+ "Use `/cm` to open Native Commands for the current CLI.\n\n"
|
|
210
210
|
+ runtime_note
|
|
211
211
|
)
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "controlmesh"
|
|
7
|
-
version = "0.41.
|
|
7
|
+
version = "0.41.2"
|
|
8
8
|
description = "ControlMesh brings official coding CLIs into Telegram, Matrix, and Feishu with persistent workspaces, long-running jobs, and production-friendly bot operations."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-all-clis.md
RENAMED
|
File without changes
|
{controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-claude-only.md
RENAMED
|
File without changes
|
{controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-codex-only.md
RENAMED
|
File without changes
|
{controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-gemini-only.md
RENAMED
|
File without changes
|
{controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/JOIN_NOTIFICATION.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/RULES.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tasks/RULES.md
RENAMED
|
File without changes
|
|
File without changes
|
{controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/RULES.md
RENAMED
|
File without changes
|
{controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/_tool_shared.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|