controlmesh 0.31.2__tar.gz → 0.32.3__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.31.2 → controlmesh-0.32.3}/PKG-INFO +54 -10
- {controlmesh-0.31.2 → controlmesh-0.32.3}/README.md +53 -9
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/__init__.py +1 -1
- controlmesh-0.32.3/controlmesh/_home_defaults/workspace/cron_tasks/release-ci-monitor-template/RULES-template.md +28 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_monitor.py +2 -1
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/create_task.py +11 -2
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/release_task.py +43 -2
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/base.py +2 -2
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_provider.py +34 -1
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/param_resolver.py +2 -2
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/service.py +4 -2
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/types.py +2 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/config.py +2 -2
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/integrations/feishu_auth_kit.py +4 -4
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/progress_preview.py +44 -1
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/app.py +87 -12
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/startup.py +1 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/plan_review_loop.py +1 -1
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/model_selector.py +7 -1
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/task_selector.py +16 -2
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/security/content.py +7 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/hub.py +27 -5
- {controlmesh-0.31.2 → controlmesh-0.32.3}/docs/README.md +4 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/pyproject.toml +1 -1
- {controlmesh-0.31.2 → controlmesh-0.32.3}/.gitignore +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/Dockerfile.sandbox +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/LICENSE +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/config.example.json +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/__main__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_banner.txt +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/RULES.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/config/RULES-all-clis.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/config/RULES-claude-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/config/RULES-codex-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/config/RULES-gemini-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/JOIN_NOTIFICATION.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/RULES.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-all-clis.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-claude-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-codex-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-gemini-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/flow-triggered-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/release-ci-monitor-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/scheduled-recurring-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/webhook-triggered-template/TASK_DESCRIPTION.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/output_to_user/RULES.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/routing/activation_policies.yaml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/routing/capabilities.yaml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/RULES.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/LICENSE.txt +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/SKILL.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/references/output-patterns.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/references/workflows.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/init_skill.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/package_skill.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/quick_validate.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tasks/RULES.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/telegram_files/RULES.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/RULES.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/_tool_shared.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/RULES.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/ask_agent.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/ask_agent_async.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/create_agent.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/edit_shared_knowledge.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/list_agents.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/remove_agent.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-all-clis.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-claude-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-codex-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-gemini-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/_shared.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_add.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_edit.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_list.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_remove.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_time.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/RULES.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/file_info.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/list_files.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/process_video.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/read_document.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/transcribe_audio.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/RULES.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/_shared.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/ask_parent.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/attach_task.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/cancel_task.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/check_task_updates.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/delete_task.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/list_tasks.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/resume_task.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/route_task.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/tell_task.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/user_tools/RULES.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-all-clis.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-claude-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-codex-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-gemini-only.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/_shared.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/setup_ci_failure_webhook.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_add.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_edit.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_list.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_remove.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_rotate_token.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_test.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/VENDORED_FROM.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/agent_runtime.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/app_registration.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/cardkit.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/claude_adapter.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/cli.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/client.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/device_flow.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/domains.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/message_context.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/models.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/native_agent_tools.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/native_contract.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/orchestration.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/owner_policy.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/probe.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/runtime_cards.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/scopes.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/token_store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/runner.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/context.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/manager.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/progress.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/results.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/tools.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/api/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/api/admin_read.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/api/catalog_http.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/api/crypto.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/api/server.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/background/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/background/models.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/background/observer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/adapters.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/bus.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/cron_sanitize.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/envelope.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/lock_pool.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/__main__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/io.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/lint.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/models.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/render.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cleanup/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cleanup/observer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/auth.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/claude_provider.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/claw_provider.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/coalescer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_cache.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_cache_observer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_discovery.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_events.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_hooks.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/executor.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/factory.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/gemini_cache.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/gemini_cache_observer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/gemini_events.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/gemini_provider.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/gemini_utils.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/init_wizard.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/introspection.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/model_cache.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/openai_agents_provider.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/opencode_discovery.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/opencode_provider.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/process_registry.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/stream_events.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/timeout_controller.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/agents.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/api_cmd.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/auth.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/cron.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/docker.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/feishu.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/install.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/lifecycle.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/runtime.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/service.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/status.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/tasks.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/command_registry.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/commands.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/config_reload.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/dependency_queue.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/execution.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/manager.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/observer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/policy.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/errors.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/allowed_roots.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/browser.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/image_processor.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/prompt.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/storage.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/tags.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/gateways/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/gateways/config.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/gateways/types.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/heartbeat/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/heartbeat/observer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/history/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/history/catalog.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/history/index.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/history/models.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/history/store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/de/chat.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/de/cli.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/de/commands.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/de/wizard.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/en/chat.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/en/cli.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/en/commands.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/en/wizard.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/es/chat.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/es/cli.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/es/commands.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/es/wizard.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/fr/chat.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/fr/cli.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/fr/commands.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/fr/wizard.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/loader.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/nl/chat.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/nl/cli.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/nl/commands.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/nl/wizard.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/pt/chat.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/pt/cli.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/pt/commands.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/pt/wizard.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/ru/chat.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/ru/cli.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/ru/commands.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/ru/wizard.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/zh/chat.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/zh/cli.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/zh/commands.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/zh/wizard.toml +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/atomic_io.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/base_observer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/base_task_observer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/boot_id.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/docker.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/docker_extras.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/env_secrets.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/file_watcher.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/fs.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/inflight.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/install.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/json_store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/pidlock.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/platform.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/process_tree.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/recovery.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/restart.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service_base.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service_linux.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service_logs.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service_macos.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service_windows.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/startup_state.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/task_runner.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/updater.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/version.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/integrations/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/log_context.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/logging_config.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/capture.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/commands.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/dreaming.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/events.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/frequency.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/models.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/promotion.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/runtime_capture.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/search.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/semantic.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/address.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/callback_router.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/capabilities.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/commands.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/app_info.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/auth_cards.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/brand.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/card_auth.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/card_auth_context.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/card_auth_runner.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/device_flow.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/errors.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/feishu_card_sender.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/native_auth_all_runner.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/native_auth_useful_runner.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/orchestration_runner.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/runtime_auth.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/runtime_continuation.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/token_store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/uat_client.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/bot.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/bundled_runtime.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/card_action_payload.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/card_stream.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/command_center_card.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/id_map.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/inbound.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/long_connection.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/media.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/media_meta.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/message_context.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/native_tools/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/native_tools/agent_runtime.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/native_tools/client.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/native_tools/executor.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/sender.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/settings_card.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/startup.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/tool_auth.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/transport.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/bot.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/buttons.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/credentials.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/file_browser.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/formatting.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/id_map.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/media.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/sender.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/startup.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/streaming.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/streaming_mode.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/transport.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/typing.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/multi.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/notifications.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/protocol.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/api.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/bot.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/gateway.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/inbound.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/known_targets.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/media.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/outbound.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/ref_index.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/session_store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/target.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/token_manager.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/transport.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/types.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/typing_keepalive.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/registry.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/send_opts.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/abort.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/buttons.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/callbacks.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/chat_tracker.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/controlmesh_images/logo_text.png +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/controlmesh_images/welcome.png +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/dedup.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/edit_streaming.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/file_browser.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/formatting.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/handlers.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/media.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/message_dispatch.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/middleware.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/sender.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/streaming.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/topic.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/transport.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/typing.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/upgrade_handler.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/welcome.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/api.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/auth_state.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/auth_store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/bot.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/id_map.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/runtime.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/runtime_state.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/transport.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/approval_intent.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/bus.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/commands.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/health.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/internal_api.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/models.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/registry.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/release_gate.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/shared_knowledge.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/stack.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/supervisor.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/native_commands/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/native_commands/fallbacks.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/native_commands/render.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/commands.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/core.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/directives.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/flows.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/hooks.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/injection.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/lifecycle.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/observers.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/providers.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/registry.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/agent_router.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/capability_registry.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/cron_selector.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/models.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/session_selector.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/settings_selector.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/utils.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/planning_files.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/provider_binding.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/provider_health.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/activation.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/capabilities.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/policy.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/router.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/score_events.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/scorer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/workunit.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/run.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/agent_inbox.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/host_jobs.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/models.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/registry.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/security/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/security/paths.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/session/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/session/key.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/session/manager.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/session/named.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/evaluator.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/evidence.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/host_execution.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/models.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/registry.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/task_policy.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/api.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/contracts.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/execution.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/live.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/models.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/orchestrator.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/phases.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/presentation.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/runtime_attachment.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/runtime_control.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/base.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/dispatch.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/events.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/mailbox.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/manifest.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/phase.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/recovery.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/runtime.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/snapshot.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/tasks.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/text/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/text/frontstage_delivery.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/text/response_format.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/text/tool_event_format.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/utils/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/utils/quiet_hours.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/auth.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/manager.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/models.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/observer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/server.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/cron_tasks.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/init.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/loader.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/paths.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/rules_selector.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/skill_sync.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/autonomous_runtime_loop.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/canonical_section_writer.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/contracts.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/engine.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/events.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/evidence_identity.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_event_shape.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_evidence_replay_query.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_evidence_replay_query_boundary.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_payload_seam.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_payloads.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_read_surface.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_runtime_events.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_wiring_boundary.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/file_backed_primary_boundary.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/first_engine_boundary.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/first_engine_contract_surface.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/first_engine_test_matrix.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/first_engine_trace_examples.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/orchestrator_boundary.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/promotion_bridge.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/promotion_controller.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/promotion_receipt.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/py.typed +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/records.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery/contracts.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery/execution.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery/policy.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery_execution_boundary.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery_thin_loop.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/review.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/review_handoff_packet.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/review_query_read_surface_boundary.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/runtime.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/runtime_execution_checkpoint.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/runtime_message_api.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/serde.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/summary/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/summary/contracts.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/summary/policy.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/summary/runtime.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/summary_trigger_landing_boundary.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/task_packet.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/thin_orchestrator.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/thin_runtime_loop.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/tracing.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/worker_controller.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/worker_state.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/docs/case-pack/README.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/examples/case-pack/README.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/plans/README.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/plans/tasks/README.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/plans/tasks/_template/artifacts/README.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/plans/tasks/_template/logs/README.md +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/summary/__init__.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/summary/test_contracts.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/summary/test_policy.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/summary/test_runtime.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_autonomous_runtime_loop.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_events.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_execution_evidence_replay_query.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_execution_evidence_store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_execution_payloads.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_execution_read_surface.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_execution_runtime_events.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_first_engine.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_promotion_bridge.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_recovery_contracts.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_recovery_execution.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_recovery_policy.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_recovery_thin_loop.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_review.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_review_handoff_packet.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_runtime_execution_checkpoint.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_runtime_message_api.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_store.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_task_packet.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_thin_orchestrator.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_thin_runtime_loop.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_worker_controller.py +0 -0
- {controlmesh-0.31.2 → controlmesh-0.32.3}/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.32.3
|
|
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
|
|
@@ -97,7 +97,7 @@ Gemini 等官方编码 CLI 接进飞书、Telegram 和微信,让它们像长
|
|
|
97
97
|
|
|
98
98
|
| 能力 | 说明 |
|
|
99
99
|
|---|---|
|
|
100
|
-
| Feishu Native Runtime | 内置 `feishu-auth-kit`
|
|
100
|
+
| Feishu Native Runtime | 内置 `feishu-auth-kit` 第一方模块快照,提供扫码创建机器人、CardKit 单卡、权限引导、原生 OAPI 工具 |
|
|
101
101
|
| 后台任务闭环 | `/tasks/create`、`tell`、`ask_parent`、`resume`、`list` 构成可演示任务 runtime |
|
|
102
102
|
| 官方 CLI worker | 复用 Claude、Codex、Gemini 等官方命令行工具执行任务 |
|
|
103
103
|
| 记忆层 | `MEMORY.md` 作为持久权威记忆,配合 `memory/YYYY-MM-DD.md`、`DREAMS.md` 和确定性 promotion/search |
|
|
@@ -127,8 +127,8 @@ ControlMesh 当前公开主线是 Feishu Native 模式。
|
|
|
127
127
|
最小闭环:
|
|
128
128
|
|
|
129
129
|
- `controlmesh feishu native bootstrap` 进入友好的飞书原生启动入口。
|
|
130
|
-
- 内置 [`feishu-auth-kit`](https://github.com/muqiao215/feishu-auth-kit)
|
|
131
|
-
- `feishu-auth-kit`
|
|
130
|
+
- 内置 [`feishu-auth-kit`](https://github.com/muqiao215/feishu-auth-kit) 作为从 ControlMesh 抽取出来的 Feishu 第一方模块,完成扫码创建、凭证写回、权限引导、消息上下文、CardKit 和 retry contract。
|
|
131
|
+
- `feishu-auth-kit` 的公开仓库是这套第一方模块的独立同步形态;ControlMesh 发布包必须包含这套模块,外部 CLI 只作为开发覆盖或故障 fallback。
|
|
132
132
|
- 当 Feishu native 使用 Codex provider 时,agent turn 主路径直接消费内置 plugin 的 `CodexCliRunner`、`AgentEvent` 和 `SingleCardRun`,再由 ControlMesh 负责飞书发送与卡片更新。
|
|
133
133
|
- Feishu 卡片展示任务状态、工具步骤和最终结果。
|
|
134
134
|
- 长任务通过 task runtime 后台执行,缺信息时走 `/tasks/ask_parent`,父会话再 `/tasks/resume`。
|
|
@@ -220,6 +220,26 @@ controlmesh auth feishu doctor
|
|
|
220
220
|
controlmesh auth feishu probe
|
|
221
221
|
```
|
|
222
222
|
|
|
223
|
+
Feishu-only 安装是支持的,不需要 Telegram 或 Matrix。最短路径是:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
pipx install controlmesh
|
|
227
|
+
npm install -g @anthropic-ai/claude-code
|
|
228
|
+
claude auth
|
|
229
|
+
|
|
230
|
+
controlmesh feishu native bootstrap
|
|
231
|
+
controlmesh auth feishu register-begin
|
|
232
|
+
controlmesh auth feishu register-poll --device-code "<device_code>" --interval 5 --expires-in 600
|
|
233
|
+
controlmesh service install
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
这条路径里:
|
|
237
|
+
|
|
238
|
+
- 聊天入口只有 Feishu
|
|
239
|
+
- 不需要 `telegram_token`
|
|
240
|
+
- 不需要 Matrix 配置
|
|
241
|
+
- Claude Code / Codex / Gemini / OpenCode 负责模型 runtime,Feishu 负责聊天入口
|
|
242
|
+
|
|
223
243
|
任务 runtime:
|
|
224
244
|
|
|
225
245
|
```bash
|
|
@@ -326,7 +346,7 @@ compatibility transport.
|
|
|
326
346
|
|
|
327
347
|
| Feature | Description |
|
|
328
348
|
|---|---|
|
|
329
|
-
| Feishu Native Runtime | Bundled `feishu-auth-kit`
|
|
349
|
+
| Feishu Native Runtime | Bundled first-party `feishu-auth-kit` snapshot for scan-created bots, CardKit cards, permission onboarding, and native OAPI tools |
|
|
330
350
|
| Background task loop | `/tasks/create`, `ask_parent`, `resume`, and `list` form the runtime loop |
|
|
331
351
|
| Official CLI workers | Run Claude, Codex, Gemini, and other local CLI agents |
|
|
332
352
|
| Memory layer | `MEMORY.md` as durable authority, plus `memory/YYYY-MM-DD.md`, `DREAMS.md`, and deterministic promotion/search |
|
|
@@ -355,11 +375,13 @@ ControlMesh is no longer just a chat wrapper with a little persistence:
|
|
|
355
375
|
|
|
356
376
|
- `controlmesh feishu native bootstrap` is the product-friendly entrypoint.
|
|
357
377
|
- Bundles [`feishu-auth-kit`](https://github.com/muqiao215/feishu-auth-kit)
|
|
358
|
-
as
|
|
359
|
-
write-back, permission flows, message context,
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
378
|
+
as a first-party Feishu module extracted from ControlMesh for scan-to-create
|
|
379
|
+
onboarding, credential write-back, permission flows, message context,
|
|
380
|
+
CardKit, and retry contracts.
|
|
381
|
+
- The standalone `feishu-auth-kit` repo is the synced reusable form of the
|
|
382
|
+
same first-party module. ControlMesh includes a vendored snapshot; external
|
|
383
|
+
CLI resolution is a development override or fallback, not the product
|
|
384
|
+
dependency.
|
|
363
385
|
- Shows status, tool steps, and final output in a single Feishu card.
|
|
364
386
|
- Provides `/feishu_auth_all` for guided authorization of the current MVP tools.
|
|
365
387
|
- Includes first read-only native tools for contacts, users, group messages, and Drive files.
|
|
@@ -445,6 +467,28 @@ controlmesh auth feishu doctor
|
|
|
445
467
|
controlmesh auth feishu probe
|
|
446
468
|
```
|
|
447
469
|
|
|
470
|
+
Feishu-only is a first-class path. You do not need Telegram or Matrix if your
|
|
471
|
+
deployment only uses Feishu. The shortest setup is:
|
|
472
|
+
|
|
473
|
+
```bash
|
|
474
|
+
pipx install controlmesh
|
|
475
|
+
npm install -g @anthropic-ai/claude-code
|
|
476
|
+
claude auth
|
|
477
|
+
|
|
478
|
+
controlmesh feishu native bootstrap
|
|
479
|
+
controlmesh auth feishu register-begin
|
|
480
|
+
controlmesh auth feishu register-poll --device-code "<device_code>" --interval 5 --expires-in 600
|
|
481
|
+
controlmesh service install
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
In that setup:
|
|
485
|
+
|
|
486
|
+
- Feishu is the only chat surface
|
|
487
|
+
- Telegram is not required
|
|
488
|
+
- Matrix is not required
|
|
489
|
+
- Claude Code / Codex / Gemini / OpenCode provide the model runtime behind the
|
|
490
|
+
Feishu transport
|
|
491
|
+
|
|
448
492
|
Task runtime:
|
|
449
493
|
|
|
450
494
|
```bash
|
|
@@ -29,7 +29,7 @@ Gemini 等官方编码 CLI 接进飞书、Telegram 和微信,让它们像长
|
|
|
29
29
|
|
|
30
30
|
| 能力 | 说明 |
|
|
31
31
|
|---|---|
|
|
32
|
-
| Feishu Native Runtime | 内置 `feishu-auth-kit`
|
|
32
|
+
| Feishu Native Runtime | 内置 `feishu-auth-kit` 第一方模块快照,提供扫码创建机器人、CardKit 单卡、权限引导、原生 OAPI 工具 |
|
|
33
33
|
| 后台任务闭环 | `/tasks/create`、`tell`、`ask_parent`、`resume`、`list` 构成可演示任务 runtime |
|
|
34
34
|
| 官方 CLI worker | 复用 Claude、Codex、Gemini 等官方命令行工具执行任务 |
|
|
35
35
|
| 记忆层 | `MEMORY.md` 作为持久权威记忆,配合 `memory/YYYY-MM-DD.md`、`DREAMS.md` 和确定性 promotion/search |
|
|
@@ -59,8 +59,8 @@ ControlMesh 当前公开主线是 Feishu Native 模式。
|
|
|
59
59
|
最小闭环:
|
|
60
60
|
|
|
61
61
|
- `controlmesh feishu native bootstrap` 进入友好的飞书原生启动入口。
|
|
62
|
-
- 内置 [`feishu-auth-kit`](https://github.com/muqiao215/feishu-auth-kit)
|
|
63
|
-
- `feishu-auth-kit`
|
|
62
|
+
- 内置 [`feishu-auth-kit`](https://github.com/muqiao215/feishu-auth-kit) 作为从 ControlMesh 抽取出来的 Feishu 第一方模块,完成扫码创建、凭证写回、权限引导、消息上下文、CardKit 和 retry contract。
|
|
63
|
+
- `feishu-auth-kit` 的公开仓库是这套第一方模块的独立同步形态;ControlMesh 发布包必须包含这套模块,外部 CLI 只作为开发覆盖或故障 fallback。
|
|
64
64
|
- 当 Feishu native 使用 Codex provider 时,agent turn 主路径直接消费内置 plugin 的 `CodexCliRunner`、`AgentEvent` 和 `SingleCardRun`,再由 ControlMesh 负责飞书发送与卡片更新。
|
|
65
65
|
- Feishu 卡片展示任务状态、工具步骤和最终结果。
|
|
66
66
|
- 长任务通过 task runtime 后台执行,缺信息时走 `/tasks/ask_parent`,父会话再 `/tasks/resume`。
|
|
@@ -152,6 +152,26 @@ controlmesh auth feishu doctor
|
|
|
152
152
|
controlmesh auth feishu probe
|
|
153
153
|
```
|
|
154
154
|
|
|
155
|
+
Feishu-only 安装是支持的,不需要 Telegram 或 Matrix。最短路径是:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
pipx install controlmesh
|
|
159
|
+
npm install -g @anthropic-ai/claude-code
|
|
160
|
+
claude auth
|
|
161
|
+
|
|
162
|
+
controlmesh feishu native bootstrap
|
|
163
|
+
controlmesh auth feishu register-begin
|
|
164
|
+
controlmesh auth feishu register-poll --device-code "<device_code>" --interval 5 --expires-in 600
|
|
165
|
+
controlmesh service install
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
这条路径里:
|
|
169
|
+
|
|
170
|
+
- 聊天入口只有 Feishu
|
|
171
|
+
- 不需要 `telegram_token`
|
|
172
|
+
- 不需要 Matrix 配置
|
|
173
|
+
- Claude Code / Codex / Gemini / OpenCode 负责模型 runtime,Feishu 负责聊天入口
|
|
174
|
+
|
|
155
175
|
任务 runtime:
|
|
156
176
|
|
|
157
177
|
```bash
|
|
@@ -258,7 +278,7 @@ compatibility transport.
|
|
|
258
278
|
|
|
259
279
|
| Feature | Description |
|
|
260
280
|
|---|---|
|
|
261
|
-
| Feishu Native Runtime | Bundled `feishu-auth-kit`
|
|
281
|
+
| Feishu Native Runtime | Bundled first-party `feishu-auth-kit` snapshot for scan-created bots, CardKit cards, permission onboarding, and native OAPI tools |
|
|
262
282
|
| Background task loop | `/tasks/create`, `ask_parent`, `resume`, and `list` form the runtime loop |
|
|
263
283
|
| Official CLI workers | Run Claude, Codex, Gemini, and other local CLI agents |
|
|
264
284
|
| Memory layer | `MEMORY.md` as durable authority, plus `memory/YYYY-MM-DD.md`, `DREAMS.md`, and deterministic promotion/search |
|
|
@@ -287,11 +307,13 @@ ControlMesh is no longer just a chat wrapper with a little persistence:
|
|
|
287
307
|
|
|
288
308
|
- `controlmesh feishu native bootstrap` is the product-friendly entrypoint.
|
|
289
309
|
- Bundles [`feishu-auth-kit`](https://github.com/muqiao215/feishu-auth-kit)
|
|
290
|
-
as
|
|
291
|
-
write-back, permission flows, message context,
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
310
|
+
as a first-party Feishu module extracted from ControlMesh for scan-to-create
|
|
311
|
+
onboarding, credential write-back, permission flows, message context,
|
|
312
|
+
CardKit, and retry contracts.
|
|
313
|
+
- The standalone `feishu-auth-kit` repo is the synced reusable form of the
|
|
314
|
+
same first-party module. ControlMesh includes a vendored snapshot; external
|
|
315
|
+
CLI resolution is a development override or fallback, not the product
|
|
316
|
+
dependency.
|
|
295
317
|
- Shows status, tool steps, and final output in a single Feishu card.
|
|
296
318
|
- Provides `/feishu_auth_all` for guided authorization of the current MVP tools.
|
|
297
319
|
- Includes first read-only native tools for contacts, users, group messages, and Drive files.
|
|
@@ -377,6 +399,28 @@ controlmesh auth feishu doctor
|
|
|
377
399
|
controlmesh auth feishu probe
|
|
378
400
|
```
|
|
379
401
|
|
|
402
|
+
Feishu-only is a first-class path. You do not need Telegram or Matrix if your
|
|
403
|
+
deployment only uses Feishu. The shortest setup is:
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
pipx install controlmesh
|
|
407
|
+
npm install -g @anthropic-ai/claude-code
|
|
408
|
+
claude auth
|
|
409
|
+
|
|
410
|
+
controlmesh feishu native bootstrap
|
|
411
|
+
controlmesh auth feishu register-begin
|
|
412
|
+
controlmesh auth feishu register-poll --device-code "<device_code>" --interval 5 --expires-in 600
|
|
413
|
+
controlmesh service install
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
In that setup:
|
|
417
|
+
|
|
418
|
+
- Feishu is the only chat surface
|
|
419
|
+
- Telegram is not required
|
|
420
|
+
- Matrix is not required
|
|
421
|
+
- Claude Code / Codex / Gemini / OpenCode provide the model runtime behind the
|
|
422
|
+
Feishu transport
|
|
423
|
+
|
|
380
424
|
Task runtime:
|
|
381
425
|
|
|
382
426
|
```bash
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Your Mission
|
|
2
|
+
|
|
3
|
+
You are a **temporary release-phase monitor agent**.
|
|
4
|
+
|
|
5
|
+
This task exists to watch a specific CI or publish step at high frequency for a short bounded period, then return control to the main release conversation.
|
|
6
|
+
|
|
7
|
+
## Workflow
|
|
8
|
+
|
|
9
|
+
1. Read the whole `TASK_DESCRIPTION.md`.
|
|
10
|
+
2. Read any task-local memory file if present.
|
|
11
|
+
3. Read the injected release context carefully.
|
|
12
|
+
4. Poll only the specific target you were assigned.
|
|
13
|
+
5. Stop yourself as soon as the target reaches a useful terminal state.
|
|
14
|
+
6. On success: resume or hand back the exact next release step.
|
|
15
|
+
7. On failure: prefer direct narrow repair first, then resume or hand back the result.
|
|
16
|
+
|
|
17
|
+
## Rules
|
|
18
|
+
|
|
19
|
+
- Do not behave like a permanent cron job.
|
|
20
|
+
- Do not drift into unrelated repo work.
|
|
21
|
+
- Do not keep polling after a clear terminal state.
|
|
22
|
+
- Do not wait for a human if the failure has an obvious narrow repair inside the current boundary.
|
|
23
|
+
- Keep the final handoff concise and operational.
|
|
24
|
+
|
|
25
|
+
## Important
|
|
26
|
+
|
|
27
|
+
This monitor is meant to replace foreground watch loops during release waiting phases.
|
|
28
|
+
It should be fast to trigger, fast to stop, and explicit about what resumes next.
|
|
@@ -21,6 +21,7 @@ from _shared import CRON_TASKS_DIR, JOBS_PATH, load_jobs_or_default, save_jobs
|
|
|
21
21
|
_TEMPLATE_DIR = (
|
|
22
22
|
Path(__file__).resolve().parents[2] / "cron_tasks" / "release-ci-monitor-template"
|
|
23
23
|
)
|
|
24
|
+
_RULES_TEMPLATE = "RULES-template.md"
|
|
24
25
|
_TUTORIAL = """\
|
|
25
26
|
CRON MONITOR -- Create a short-lived release/CI monitor.
|
|
26
27
|
|
|
@@ -81,7 +82,7 @@ def _parser() -> argparse.ArgumentParser:
|
|
|
81
82
|
|
|
82
83
|
|
|
83
84
|
def _apply_monitor_template(task_dir: Path, *, description: str, schedule: str) -> None:
|
|
84
|
-
rules_source = (_TEMPLATE_DIR /
|
|
85
|
+
rules_source = (_TEMPLATE_DIR / _RULES_TEMPLATE).read_text(encoding="utf-8")
|
|
85
86
|
for name in ("CLAUDE.md", "AGENTS.md", "GEMINI.md"):
|
|
86
87
|
path = task_dir / name
|
|
87
88
|
if path.exists():
|
|
@@ -24,6 +24,7 @@ Options:
|
|
|
24
24
|
--evaluator NAME Evaluator hint, e.g. foreground
|
|
25
25
|
--plan-id ID PlanFiles plan id
|
|
26
26
|
--plan-file PATH Read PLAN.md content from file
|
|
27
|
+
--prompt-file PATH Read the task prompt from file
|
|
27
28
|
--phase-id ID PlanFiles phase id
|
|
28
29
|
--phase-title TXT PlanFiles phase title
|
|
29
30
|
|
|
@@ -89,6 +90,7 @@ def main() -> None:
|
|
|
89
90
|
evaluator = ""
|
|
90
91
|
plan_id = ""
|
|
91
92
|
plan_file = ""
|
|
93
|
+
prompt_file = ""
|
|
92
94
|
phase_id = ""
|
|
93
95
|
phase_title = ""
|
|
94
96
|
|
|
@@ -139,6 +141,9 @@ def main() -> None:
|
|
|
139
141
|
elif args[0] == "--plan-file" and len(args) >= 2:
|
|
140
142
|
plan_file = args[1]
|
|
141
143
|
args = args[2:]
|
|
144
|
+
elif args[0] == "--prompt-file" and len(args) >= 2:
|
|
145
|
+
prompt_file = args[1]
|
|
146
|
+
args = args[2:]
|
|
142
147
|
elif args[0] == "--phase-id" and len(args) >= 2:
|
|
143
148
|
phase_id = args[1]
|
|
144
149
|
args = args[2:]
|
|
@@ -148,7 +153,7 @@ def main() -> None:
|
|
|
148
153
|
else:
|
|
149
154
|
break
|
|
150
155
|
|
|
151
|
-
if not args:
|
|
156
|
+
if not prompt_file and not args:
|
|
152
157
|
print(
|
|
153
158
|
'Usage: python3 create_task.py [--name NAME] [--slot SLOT] [--provider P] '
|
|
154
159
|
'[--model M] [--thinking L] [--route auto] [--kind KIND] "prompt"',
|
|
@@ -156,7 +161,11 @@ def main() -> None:
|
|
|
156
161
|
)
|
|
157
162
|
sys.exit(1)
|
|
158
163
|
|
|
159
|
-
|
|
164
|
+
if prompt_file:
|
|
165
|
+
with open(prompt_file, encoding="utf-8") as handle:
|
|
166
|
+
prompt = handle.read()
|
|
167
|
+
else:
|
|
168
|
+
prompt = args[0]
|
|
160
169
|
sender = detect_agent_name()
|
|
161
170
|
|
|
162
171
|
url = get_api_url("/tasks/create")
|
|
@@ -6,6 +6,10 @@ default phases, then submits each phase as a background task using plan_id/
|
|
|
6
6
|
phase_id metadata. Publish phases are tagged with ``evaluator=foreground`` so
|
|
7
7
|
the foreground controller can review and approve before external side effects.
|
|
8
8
|
|
|
9
|
+
This is the preferred ControlMesh release path. Local preflight work such as
|
|
10
|
+
pytest/build runs inside the background release workflow; short-lived release
|
|
11
|
+
monitor cron jobs are only armed after publish-side remote waits exist.
|
|
12
|
+
|
|
9
13
|
Usage:
|
|
10
14
|
python3 release_task.py [options] "Release description"
|
|
11
15
|
|
|
@@ -46,6 +50,7 @@ import os
|
|
|
46
50
|
import sys
|
|
47
51
|
from datetime import datetime
|
|
48
52
|
from pathlib import Path
|
|
53
|
+
from urllib.parse import urlparse
|
|
49
54
|
|
|
50
55
|
|
|
51
56
|
_HELP_FLAGS = {"--help", "-h"}
|
|
@@ -180,6 +185,8 @@ def _build_plan_markdown(
|
|
|
180
185
|
"",
|
|
181
186
|
"- The `publish` phase (and any `github_release` phases) require explicit "
|
|
182
187
|
"foreground approval before external side effects.",
|
|
188
|
+
"- Local preflight stays inside background release phases; the release "
|
|
189
|
+
"monitor cron is only used for remote CI/PyPI waits after push/tag.",
|
|
183
190
|
"- Use `python3 tools/task_tools/list_tasks.py` to monitor phase progress.",
|
|
184
191
|
"- Approve publish-side host steps from the foreground controller with `/mesh approve <plan-id>`.",
|
|
185
192
|
"- Use `python3 tools/task_tools/cancel_task.py TASK_ID` to abort a phase.",
|
|
@@ -226,6 +233,30 @@ def _host_job_metadata(repo_url: str, version: str) -> dict[str, object]:
|
|
|
226
233
|
}
|
|
227
234
|
|
|
228
235
|
|
|
236
|
+
def _resolve_repo_root(repo_url: str) -> str:
|
|
237
|
+
"""Best-effort local checkout path for a repository URL."""
|
|
238
|
+
normalized = str(repo_url or "").strip()
|
|
239
|
+
if not normalized:
|
|
240
|
+
return ""
|
|
241
|
+
parsed = urlparse(normalized)
|
|
242
|
+
repo_name = Path(parsed.path.rstrip("/")).name
|
|
243
|
+
if repo_name.endswith(".git"):
|
|
244
|
+
repo_name = repo_name[:-4]
|
|
245
|
+
if not repo_name:
|
|
246
|
+
return ""
|
|
247
|
+
candidates = (
|
|
248
|
+
Path("/root/.controlmesh/dev") / repo_name,
|
|
249
|
+
Path.home() / repo_name,
|
|
250
|
+
)
|
|
251
|
+
for candidate in candidates:
|
|
252
|
+
try:
|
|
253
|
+
if (candidate / ".git").exists():
|
|
254
|
+
return str(candidate)
|
|
255
|
+
except PermissionError:
|
|
256
|
+
continue
|
|
257
|
+
return ""
|
|
258
|
+
|
|
259
|
+
|
|
229
260
|
def _submit_phase(
|
|
230
261
|
post_json: object,
|
|
231
262
|
get_api_url: object,
|
|
@@ -409,6 +440,7 @@ def main() -> None:
|
|
|
409
440
|
# Submit only the first phase. The foreground-controlled plan loop is
|
|
410
441
|
# responsible for advancing later phases one at a time.
|
|
411
442
|
sender = detect_agent_name()
|
|
443
|
+
repo_root = _resolve_repo_root(repo_url)
|
|
412
444
|
|
|
413
445
|
# Propagate sender context
|
|
414
446
|
chat_id_str = os.environ.get("CONTROLMESH_CHAT_ID", "")
|
|
@@ -430,12 +462,20 @@ def main() -> None:
|
|
|
430
462
|
"phase_id": first_phase["id"],
|
|
431
463
|
"phase_title": first_phase["title"],
|
|
432
464
|
}
|
|
433
|
-
|
|
465
|
+
first_phase_provider = str(first_phase.get("provider") or "").strip()
|
|
466
|
+
first_phase_model = str(first_phase.get("model") or "").strip()
|
|
467
|
+
if first_phase_provider:
|
|
468
|
+
first_body["provider"] = first_phase_provider
|
|
469
|
+
elif provider:
|
|
434
470
|
first_body["provider"] = provider
|
|
435
|
-
if
|
|
471
|
+
if first_phase_model:
|
|
472
|
+
first_body["model"] = first_phase_model
|
|
473
|
+
elif model:
|
|
436
474
|
first_body["model"] = model
|
|
437
475
|
if first_phase["evaluator"]:
|
|
438
476
|
first_body["evaluator"] = first_phase["evaluator"]
|
|
477
|
+
if repo_root:
|
|
478
|
+
first_body["repo_root"] = repo_root
|
|
439
479
|
if chat_id:
|
|
440
480
|
first_body["chat_id"] = chat_id
|
|
441
481
|
if topic_id:
|
|
@@ -454,6 +494,7 @@ def main() -> None:
|
|
|
454
494
|
print()
|
|
455
495
|
print(f"Release workflow '{plan_id}' submitted.")
|
|
456
496
|
print("Later phases will be started by the foreground-controlled review loop, one at a time.")
|
|
497
|
+
print("Local preflight runs in background release phases; monitor cron is reserved for remote CI/PyPI waits.")
|
|
457
498
|
print("Use `python3 tools/task_tools/list_tasks.py` to monitor progress.")
|
|
458
499
|
print()
|
|
459
500
|
print("PlanFiles artifacts:")
|
|
@@ -85,8 +85,8 @@ class CLIConfig:
|
|
|
85
85
|
allowed_tools: list[str] = field(default_factory=list)
|
|
86
86
|
disallowed_tools: list[str] = field(default_factory=list)
|
|
87
87
|
permission_mode: str = "bypassPermissions"
|
|
88
|
-
claude_root_permission_mode: str = "
|
|
89
|
-
claude_root_force_bypass_via_is_sandbox: bool =
|
|
88
|
+
claude_root_permission_mode: str = "bypassPermissions"
|
|
89
|
+
claude_root_force_bypass_via_is_sandbox: bool = True
|
|
90
90
|
docker_container: str = ""
|
|
91
91
|
# Codex-specific fields (ignored by Claude provider):
|
|
92
92
|
sandbox_mode: str = "read-only"
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import json
|
|
5
6
|
import logging
|
|
6
7
|
import time
|
|
7
8
|
from collections.abc import AsyncGenerator
|
|
@@ -276,9 +277,17 @@ class CodexCLI(BaseCLI):
|
|
|
276
277
|
|
|
277
278
|
is_error = returncode != 0
|
|
278
279
|
result_text, thread_id, usage = parse_codex_jsonl(raw)
|
|
280
|
+
structured_event_only = _looks_like_codex_event_stream(raw) and not result_text
|
|
279
281
|
response = CLIResponse(
|
|
280
282
|
session_id=thread_id,
|
|
281
|
-
result=
|
|
283
|
+
result=(
|
|
284
|
+
result_text
|
|
285
|
+
or (
|
|
286
|
+
"Codex returned structured event output without a final assistant message."
|
|
287
|
+
if structured_event_only
|
|
288
|
+
else raw
|
|
289
|
+
)
|
|
290
|
+
),
|
|
282
291
|
is_error=is_error or not result_text,
|
|
283
292
|
returncode=returncode,
|
|
284
293
|
stderr=stderr_text,
|
|
@@ -333,3 +342,27 @@ def _log_cmd(cmd: list[str], *, streaming: bool = False) -> None:
|
|
|
333
342
|
safe_cmd = [(c[:80] + "...") if len(c) > 80 else c for c in cmd]
|
|
334
343
|
prefix = "Codex stream cmd" if streaming else "Codex cmd"
|
|
335
344
|
logger.info("%s: %s", prefix, " ".join(safe_cmd))
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
def _looks_like_codex_event_stream(raw: str) -> bool:
|
|
348
|
+
"""Return True when *raw* looks like Codex JSONL event output."""
|
|
349
|
+
saw_event = False
|
|
350
|
+
for line in raw.splitlines():
|
|
351
|
+
stripped = line.strip()
|
|
352
|
+
if not stripped:
|
|
353
|
+
continue
|
|
354
|
+
try:
|
|
355
|
+
data = json.loads(stripped)
|
|
356
|
+
except json.JSONDecodeError:
|
|
357
|
+
return False
|
|
358
|
+
if not isinstance(data, dict):
|
|
359
|
+
return False
|
|
360
|
+
event_type = str(data.get("type") or "")
|
|
361
|
+
if event_type.startswith(("thread.", "turn.", "item.", "message")):
|
|
362
|
+
saw_event = True
|
|
363
|
+
continue
|
|
364
|
+
if isinstance(data.get("item"), dict):
|
|
365
|
+
saw_event = True
|
|
366
|
+
continue
|
|
367
|
+
return False
|
|
368
|
+
return saw_event
|
|
@@ -56,8 +56,8 @@ class TaskExecutionConfig:
|
|
|
56
56
|
permission_mode: str
|
|
57
57
|
working_dir: str
|
|
58
58
|
file_access: str
|
|
59
|
-
claude_root_permission_mode: str = "
|
|
60
|
-
claude_root_force_bypass_via_is_sandbox: bool =
|
|
59
|
+
claude_root_permission_mode: str = "bypassPermissions"
|
|
60
|
+
claude_root_force_bypass_via_is_sandbox: bool = True
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
def resolve_cli_config(
|
|
@@ -118,8 +118,8 @@ class CLIServiceConfig:
|
|
|
118
118
|
max_turns: int | None
|
|
119
119
|
max_budget_usd: float | None
|
|
120
120
|
permission_mode: str
|
|
121
|
-
claude_root_permission_mode: str = "
|
|
122
|
-
claude_root_force_bypass_via_is_sandbox: bool =
|
|
121
|
+
claude_root_permission_mode: str = "bypassPermissions"
|
|
122
|
+
claude_root_force_bypass_via_is_sandbox: bool = True
|
|
123
123
|
reasoning_effort: str = "medium"
|
|
124
124
|
gemini_api_key: str | None = None
|
|
125
125
|
docker_container: str = ""
|
|
@@ -532,6 +532,8 @@ class CLIService:
|
|
|
532
532
|
append_system_prompt=request.append_system_prompt,
|
|
533
533
|
max_turns=self._config.max_turns,
|
|
534
534
|
max_budget_usd=self._config.max_budget_usd,
|
|
535
|
+
allowed_tools=list(request.allowed_tools),
|
|
536
|
+
disallowed_tools=list(request.disallowed_tools),
|
|
535
537
|
permission_mode=self._config.permission_mode,
|
|
536
538
|
claude_root_permission_mode=self._config.claude_root_permission_mode,
|
|
537
539
|
claude_root_force_bypass_via_is_sandbox=self._config.claude_root_force_bypass_via_is_sandbox,
|
|
@@ -56,6 +56,8 @@ class AgentRequest:
|
|
|
56
56
|
chat_id: int = 0
|
|
57
57
|
topic_id: int | None = None
|
|
58
58
|
process_label: str = "main"
|
|
59
|
+
allowed_tools: tuple[str, ...] = ()
|
|
60
|
+
disallowed_tools: tuple[str, ...] = ()
|
|
59
61
|
resume_session: str | None = None
|
|
60
62
|
continue_session: bool = False
|
|
61
63
|
timeout_seconds: float | None = None
|
|
@@ -534,8 +534,8 @@ class AgentConfig(BaseModel):
|
|
|
534
534
|
max_turns: int | None = None
|
|
535
535
|
max_session_messages: int | None = None
|
|
536
536
|
permission_mode: str = "bypassPermissions"
|
|
537
|
-
claude_root_permission_mode: str = "
|
|
538
|
-
claude_root_force_bypass_via_is_sandbox: bool =
|
|
537
|
+
claude_root_permission_mode: str = "bypassPermissions"
|
|
538
|
+
claude_root_force_bypass_via_is_sandbox: bool = True
|
|
539
539
|
cli_timeout: float = 1800.0
|
|
540
540
|
reasoning_effort: str = "medium"
|
|
541
541
|
file_access: str = "all"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Adapter for ControlMesh's bundled Feishu
|
|
1
|
+
"""Adapter for ControlMesh's bundled first-party Feishu module snapshot."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -24,7 +24,7 @@ def _sibling_repo_root() -> Path:
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def resolve_feishu_auth_kit_command() -> tuple[list[str], Path | None]:
|
|
27
|
-
"""Resolve the command used to invoke ControlMesh's Feishu
|
|
27
|
+
"""Resolve the command used to invoke ControlMesh's Feishu module snapshot."""
|
|
28
28
|
configured = os.getenv("CONTROLMESH_FEISHU_AUTH_KIT_BIN", "").strip()
|
|
29
29
|
if configured:
|
|
30
30
|
configured_command = shlex.split(configured)
|
|
@@ -48,8 +48,8 @@ def resolve_feishu_auth_kit_command() -> tuple[list[str], Path | None]:
|
|
|
48
48
|
return [uv_bin, "run", "feishu-auth-kit"], sibling_repo
|
|
49
49
|
|
|
50
50
|
msg = (
|
|
51
|
-
"feishu-auth-kit
|
|
52
|
-
"Feishu
|
|
51
|
+
"feishu-auth-kit module not found. ControlMesh should include its bundled "
|
|
52
|
+
"first-party Feishu module snapshot; otherwise set CONTROLMESH_FEISHU_AUTH_KIT_BIN, "
|
|
53
53
|
"install feishu-auth-kit in PATH, or keep the sibling repo with uv available."
|
|
54
54
|
)
|
|
55
55
|
raise FileNotFoundError(msg)
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
|
-
from
|
|
6
|
+
from collections.abc import Mapping
|
|
7
|
+
from typing import Any, Protocol
|
|
7
8
|
|
|
8
9
|
_SYSTEM_LABELS: dict[str, str] = {
|
|
9
10
|
"thinking": "处理中...",
|
|
@@ -30,6 +31,9 @@ _STATUS_TEMPLATES: dict[str, str] = {
|
|
|
30
31
|
"failed": "red",
|
|
31
32
|
}
|
|
32
33
|
|
|
34
|
+
_KIT_SUCCESS_STATES = {"completed", "success", "succeeded", "done"}
|
|
35
|
+
_KIT_FAILED_STATES = {"failed", "failure", "error", "cancelled"}
|
|
36
|
+
|
|
33
37
|
|
|
34
38
|
class _FeishuCardPreviewTransport(Protocol):
|
|
35
39
|
async def _send_card_to_chat_ref(
|
|
@@ -75,6 +79,7 @@ class FeishuCardPreviewReporter:
|
|
|
75
79
|
self._progress_count = 0
|
|
76
80
|
self._start_task: asyncio.Task[None] | None = None
|
|
77
81
|
self._preview_unavailable = False
|
|
82
|
+
self._terminal = False
|
|
78
83
|
|
|
79
84
|
@property
|
|
80
85
|
def handles_final_response(self) -> bool:
|
|
@@ -104,16 +109,54 @@ class FeishuCardPreviewReporter:
|
|
|
104
109
|
async def on_text_delta(self, _text: str) -> None:
|
|
105
110
|
return None
|
|
106
111
|
|
|
112
|
+
async def on_agent_event(self, event: Mapping[str, Any]) -> None:
|
|
113
|
+
kind = str(event.get("kind") or "")
|
|
114
|
+
if kind == "tool_call":
|
|
115
|
+
await self.on_tool(str(event.get("tool_name") or "unknown"))
|
|
116
|
+
return
|
|
117
|
+
if kind == "assistant_message":
|
|
118
|
+
text = event.get("text")
|
|
119
|
+
if isinstance(text, str) and text:
|
|
120
|
+
await self._set_body(text, status="running")
|
|
121
|
+
return
|
|
122
|
+
if kind in {"running", "start", "status"}:
|
|
123
|
+
text = event.get("text")
|
|
124
|
+
if isinstance(text, str) and text:
|
|
125
|
+
await self._set_body(text, status="running")
|
|
126
|
+
|
|
127
|
+
async def finish_with_single_card_run(self, run: Mapping[str, Any]) -> None:
|
|
128
|
+
status = str(run.get("status") or "")
|
|
129
|
+
body = str(
|
|
130
|
+
run.get("final_text")
|
|
131
|
+
or run.get("output_text")
|
|
132
|
+
or run.get("answer")
|
|
133
|
+
or run.get("summary")
|
|
134
|
+
or ""
|
|
135
|
+
).strip()
|
|
136
|
+
if status in _KIT_SUCCESS_STATES:
|
|
137
|
+
await self.finish_success(body or "_No output._")
|
|
138
|
+
return
|
|
139
|
+
if status in _KIT_FAILED_STATES:
|
|
140
|
+
await self.finish_failure(body or "处理失败")
|
|
141
|
+
return
|
|
142
|
+
await self._set_body(body or "处理中...", status="running")
|
|
143
|
+
|
|
107
144
|
async def finish_success(self, text: str) -> None:
|
|
145
|
+
self._terminal = True
|
|
108
146
|
await self._set_body(text or "_No output._", status="complete")
|
|
109
147
|
|
|
110
148
|
async def finish_failure(self, error_text: str) -> None:
|
|
149
|
+
self._terminal = True
|
|
111
150
|
await self._set_body(error_text or "处理失败", status="failed")
|
|
112
151
|
|
|
113
152
|
async def _emit_initial_preview(self) -> None:
|
|
153
|
+
if self._message_id is not None or self._preview_unavailable or self._terminal:
|
|
154
|
+
return
|
|
114
155
|
await self._emit("处理中...")
|
|
115
156
|
|
|
116
157
|
async def _emit(self, label: str) -> None:
|
|
158
|
+
if self._terminal:
|
|
159
|
+
return
|
|
117
160
|
if not label or label in self._sent_labels:
|
|
118
161
|
return
|
|
119
162
|
if self._progress_count >= self._max_messages:
|