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.
Files changed (601) hide show
  1. {controlmesh-0.31.2 → controlmesh-0.32.3}/PKG-INFO +54 -10
  2. {controlmesh-0.31.2 → controlmesh-0.32.3}/README.md +53 -9
  3. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/__init__.py +1 -1
  4. controlmesh-0.32.3/controlmesh/_home_defaults/workspace/cron_tasks/release-ci-monitor-template/RULES-template.md +28 -0
  5. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_monitor.py +2 -1
  6. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/create_task.py +11 -2
  7. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/release_task.py +43 -2
  8. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/base.py +2 -2
  9. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_provider.py +34 -1
  10. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/param_resolver.py +2 -2
  11. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/service.py +4 -2
  12. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/types.py +2 -0
  13. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/config.py +2 -2
  14. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/integrations/feishu_auth_kit.py +4 -4
  15. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/progress_preview.py +44 -1
  16. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/app.py +87 -12
  17. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/startup.py +1 -0
  18. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/plan_review_loop.py +1 -1
  19. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/model_selector.py +7 -1
  20. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/task_selector.py +16 -2
  21. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/security/content.py +7 -0
  22. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/hub.py +27 -5
  23. {controlmesh-0.31.2 → controlmesh-0.32.3}/docs/README.md +4 -0
  24. {controlmesh-0.31.2 → controlmesh-0.32.3}/pyproject.toml +1 -1
  25. {controlmesh-0.31.2 → controlmesh-0.32.3}/.gitignore +0 -0
  26. {controlmesh-0.31.2 → controlmesh-0.32.3}/Dockerfile.sandbox +0 -0
  27. {controlmesh-0.31.2 → controlmesh-0.32.3}/LICENSE +0 -0
  28. {controlmesh-0.31.2 → controlmesh-0.32.3}/config.example.json +0 -0
  29. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/__main__.py +0 -0
  30. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_banner.txt +0 -0
  31. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/RULES.md +0 -0
  32. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/config/RULES-all-clis.md +0 -0
  33. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/config/RULES-claude-only.md +0 -0
  34. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/config/RULES-codex-only.md +0 -0
  35. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/config/RULES-gemini-only.md +0 -0
  36. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/JOIN_NOTIFICATION.md +0 -0
  37. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/RULES.md +0 -0
  38. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-all-clis.md +0 -0
  39. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-claude-only.md +0 -0
  40. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-codex-only.md +0 -0
  41. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-gemini-only.md +0 -0
  42. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/flow-triggered-template/TASK_DESCRIPTION.md +0 -0
  43. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/release-ci-monitor-template/TASK_DESCRIPTION.md +0 -0
  44. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/scheduled-recurring-template/TASK_DESCRIPTION.md +0 -0
  45. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/cron_tasks/webhook-triggered-template/TASK_DESCRIPTION.md +0 -0
  46. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/output_to_user/RULES.md +0 -0
  47. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/routing/activation_policies.yaml +0 -0
  48. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/routing/capabilities.yaml +0 -0
  49. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/RULES.md +0 -0
  50. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/LICENSE.txt +0 -0
  51. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/SKILL.md +0 -0
  52. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/references/output-patterns.md +0 -0
  53. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/references/workflows.md +0 -0
  54. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/init_skill.py +0 -0
  55. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/package_skill.py +0 -0
  56. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/quick_validate.py +0 -0
  57. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tasks/RULES.md +0 -0
  58. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/telegram_files/RULES.md +0 -0
  59. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/RULES.md +0 -0
  60. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/_tool_shared.py +0 -0
  61. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/RULES.md +0 -0
  62. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/ask_agent.py +0 -0
  63. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/ask_agent_async.py +0 -0
  64. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/create_agent.py +0 -0
  65. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/edit_shared_knowledge.py +0 -0
  66. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/list_agents.py +0 -0
  67. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/agent_tools/remove_agent.py +0 -0
  68. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-all-clis.md +0 -0
  69. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-claude-only.md +0 -0
  70. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-codex-only.md +0 -0
  71. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-gemini-only.md +0 -0
  72. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/_shared.py +0 -0
  73. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_add.py +0 -0
  74. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_edit.py +0 -0
  75. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_list.py +0 -0
  76. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_remove.py +0 -0
  77. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_time.py +0 -0
  78. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/RULES.md +0 -0
  79. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/file_info.py +0 -0
  80. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/list_files.py +0 -0
  81. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/process_video.py +0 -0
  82. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/read_document.py +0 -0
  83. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/media_tools/transcribe_audio.py +0 -0
  84. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/RULES.md +0 -0
  85. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/_shared.py +0 -0
  86. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/ask_parent.py +0 -0
  87. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/attach_task.py +0 -0
  88. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/cancel_task.py +0 -0
  89. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/check_task_updates.py +0 -0
  90. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/delete_task.py +0 -0
  91. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/list_tasks.py +0 -0
  92. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/resume_task.py +0 -0
  93. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/route_task.py +0 -0
  94. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/task_tools/tell_task.py +0 -0
  95. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/user_tools/RULES.md +0 -0
  96. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-all-clis.md +0 -0
  97. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-claude-only.md +0 -0
  98. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-codex-only.md +0 -0
  99. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-gemini-only.md +0 -0
  100. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/_shared.py +0 -0
  101. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/setup_ci_failure_webhook.py +0 -0
  102. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_add.py +0 -0
  103. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_edit.py +0 -0
  104. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_list.py +0 -0
  105. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_remove.py +0 -0
  106. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_rotate_token.py +0 -0
  107. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_test.py +0 -0
  108. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/__init__.py +0 -0
  109. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/VENDORED_FROM.md +0 -0
  110. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/__init__.py +0 -0
  111. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/__init__.py +0 -0
  112. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/agent_runtime.py +0 -0
  113. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/app_registration.py +0 -0
  114. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/cardkit.py +0 -0
  115. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/claude_adapter.py +0 -0
  116. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/cli.py +0 -0
  117. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/client.py +0 -0
  118. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/device_flow.py +0 -0
  119. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/domains.py +0 -0
  120. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/message_context.py +0 -0
  121. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/models.py +0 -0
  122. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/native_agent_tools.py +0 -0
  123. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/native_contract.py +0 -0
  124. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/orchestration.py +0 -0
  125. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/owner_policy.py +0 -0
  126. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/probe.py +0 -0
  127. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/runtime_cards.py +0 -0
  128. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/scopes.py +0 -0
  129. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/token_store.py +0 -0
  130. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/_plugins/feishu_auth_kit/runner.py +0 -0
  131. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/__init__.py +0 -0
  132. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/context.py +0 -0
  133. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/manager.py +0 -0
  134. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/progress.py +0 -0
  135. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/results.py +0 -0
  136. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/agents_runtime/tools.py +0 -0
  137. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/api/__init__.py +0 -0
  138. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/api/admin_read.py +0 -0
  139. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/api/catalog_http.py +0 -0
  140. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/api/crypto.py +0 -0
  141. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/api/server.py +0 -0
  142. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/background/__init__.py +0 -0
  143. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/background/models.py +0 -0
  144. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/background/observer.py +0 -0
  145. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/__init__.py +0 -0
  146. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/adapters.py +0 -0
  147. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/bus.py +0 -0
  148. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/cron_sanitize.py +0 -0
  149. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/envelope.py +0 -0
  150. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/bus/lock_pool.py +0 -0
  151. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/__init__.py +0 -0
  152. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/__main__.py +0 -0
  153. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/io.py +0 -0
  154. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/lint.py +0 -0
  155. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/models.py +0 -0
  156. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/case_pack/render.py +0 -0
  157. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cleanup/__init__.py +0 -0
  158. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cleanup/observer.py +0 -0
  159. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/__init__.py +0 -0
  160. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/auth.py +0 -0
  161. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/claude_provider.py +0 -0
  162. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/claw_provider.py +0 -0
  163. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/coalescer.py +0 -0
  164. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_cache.py +0 -0
  165. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_cache_observer.py +0 -0
  166. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_discovery.py +0 -0
  167. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_events.py +0 -0
  168. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/codex_hooks.py +0 -0
  169. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/executor.py +0 -0
  170. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/factory.py +0 -0
  171. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/gemini_cache.py +0 -0
  172. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/gemini_cache_observer.py +0 -0
  173. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/gemini_events.py +0 -0
  174. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/gemini_provider.py +0 -0
  175. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/gemini_utils.py +0 -0
  176. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/init_wizard.py +0 -0
  177. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/introspection.py +0 -0
  178. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/model_cache.py +0 -0
  179. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/openai_agents_provider.py +0 -0
  180. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/opencode_discovery.py +0 -0
  181. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/opencode_provider.py +0 -0
  182. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/process_registry.py +0 -0
  183. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/stream_events.py +0 -0
  184. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli/timeout_controller.py +0 -0
  185. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/__init__.py +0 -0
  186. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/agents.py +0 -0
  187. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/api_cmd.py +0 -0
  188. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/auth.py +0 -0
  189. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/cron.py +0 -0
  190. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/docker.py +0 -0
  191. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/feishu.py +0 -0
  192. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/install.py +0 -0
  193. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/lifecycle.py +0 -0
  194. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/runtime.py +0 -0
  195. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/service.py +0 -0
  196. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/status.py +0 -0
  197. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cli_commands/tasks.py +0 -0
  198. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/command_registry.py +0 -0
  199. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/commands.py +0 -0
  200. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/config_reload.py +0 -0
  201. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/__init__.py +0 -0
  202. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/dependency_queue.py +0 -0
  203. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/execution.py +0 -0
  204. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/manager.py +0 -0
  205. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/observer.py +0 -0
  206. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/cron/policy.py +0 -0
  207. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/errors.py +0 -0
  208. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/__init__.py +0 -0
  209. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/allowed_roots.py +0 -0
  210. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/browser.py +0 -0
  211. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/image_processor.py +0 -0
  212. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/prompt.py +0 -0
  213. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/storage.py +0 -0
  214. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/files/tags.py +0 -0
  215. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/gateways/__init__.py +0 -0
  216. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/gateways/config.py +0 -0
  217. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/gateways/types.py +0 -0
  218. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/heartbeat/__init__.py +0 -0
  219. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/heartbeat/observer.py +0 -0
  220. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/history/__init__.py +0 -0
  221. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/history/catalog.py +0 -0
  222. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/history/index.py +0 -0
  223. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/history/models.py +0 -0
  224. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/history/store.py +0 -0
  225. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/__init__.py +0 -0
  226. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/de/chat.toml +0 -0
  227. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/de/cli.toml +0 -0
  228. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/de/commands.toml +0 -0
  229. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/de/wizard.toml +0 -0
  230. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/en/chat.toml +0 -0
  231. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/en/cli.toml +0 -0
  232. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/en/commands.toml +0 -0
  233. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/en/wizard.toml +0 -0
  234. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/es/chat.toml +0 -0
  235. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/es/cli.toml +0 -0
  236. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/es/commands.toml +0 -0
  237. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/es/wizard.toml +0 -0
  238. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/fr/chat.toml +0 -0
  239. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/fr/cli.toml +0 -0
  240. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/fr/commands.toml +0 -0
  241. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/fr/wizard.toml +0 -0
  242. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/loader.py +0 -0
  243. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/nl/chat.toml +0 -0
  244. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/nl/cli.toml +0 -0
  245. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/nl/commands.toml +0 -0
  246. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/nl/wizard.toml +0 -0
  247. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/pt/chat.toml +0 -0
  248. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/pt/cli.toml +0 -0
  249. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/pt/commands.toml +0 -0
  250. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/pt/wizard.toml +0 -0
  251. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/ru/chat.toml +0 -0
  252. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/ru/cli.toml +0 -0
  253. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/ru/commands.toml +0 -0
  254. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/ru/wizard.toml +0 -0
  255. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/zh/chat.toml +0 -0
  256. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/zh/cli.toml +0 -0
  257. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/zh/commands.toml +0 -0
  258. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/i18n/zh/wizard.toml +0 -0
  259. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/__init__.py +0 -0
  260. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/atomic_io.py +0 -0
  261. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/base_observer.py +0 -0
  262. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/base_task_observer.py +0 -0
  263. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/boot_id.py +0 -0
  264. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/docker.py +0 -0
  265. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/docker_extras.py +0 -0
  266. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/env_secrets.py +0 -0
  267. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/file_watcher.py +0 -0
  268. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/fs.py +0 -0
  269. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/inflight.py +0 -0
  270. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/install.py +0 -0
  271. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/json_store.py +0 -0
  272. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/pidlock.py +0 -0
  273. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/platform.py +0 -0
  274. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/process_tree.py +0 -0
  275. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/recovery.py +0 -0
  276. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/restart.py +0 -0
  277. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service.py +0 -0
  278. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service_base.py +0 -0
  279. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service_linux.py +0 -0
  280. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service_logs.py +0 -0
  281. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service_macos.py +0 -0
  282. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/service_windows.py +0 -0
  283. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/startup_state.py +0 -0
  284. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/task_runner.py +0 -0
  285. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/updater.py +0 -0
  286. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/infra/version.py +0 -0
  287. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/integrations/__init__.py +0 -0
  288. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/log_context.py +0 -0
  289. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/logging_config.py +0 -0
  290. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/__init__.py +0 -0
  291. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/capture.py +0 -0
  292. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/commands.py +0 -0
  293. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/dreaming.py +0 -0
  294. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/events.py +0 -0
  295. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/frequency.py +0 -0
  296. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/models.py +0 -0
  297. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/promotion.py +0 -0
  298. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/runtime_capture.py +0 -0
  299. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/search.py +0 -0
  300. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/semantic.py +0 -0
  301. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/memory/store.py +0 -0
  302. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/__init__.py +0 -0
  303. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/address.py +0 -0
  304. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/callback_router.py +0 -0
  305. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/capabilities.py +0 -0
  306. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/commands.py +0 -0
  307. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/__init__.py +0 -0
  308. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/__init__.py +0 -0
  309. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/app_info.py +0 -0
  310. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/auth_cards.py +0 -0
  311. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/brand.py +0 -0
  312. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/card_auth.py +0 -0
  313. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/card_auth_context.py +0 -0
  314. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/card_auth_runner.py +0 -0
  315. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/device_flow.py +0 -0
  316. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/errors.py +0 -0
  317. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/feishu_card_sender.py +0 -0
  318. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/native_auth_all_runner.py +0 -0
  319. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/native_auth_useful_runner.py +0 -0
  320. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/orchestration_runner.py +0 -0
  321. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/runtime_auth.py +0 -0
  322. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/runtime_continuation.py +0 -0
  323. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/token_store.py +0 -0
  324. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/auth/uat_client.py +0 -0
  325. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/bot.py +0 -0
  326. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/bundled_runtime.py +0 -0
  327. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/card_action_payload.py +0 -0
  328. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/card_stream.py +0 -0
  329. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/command_center_card.py +0 -0
  330. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/id_map.py +0 -0
  331. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/inbound.py +0 -0
  332. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/long_connection.py +0 -0
  333. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/media.py +0 -0
  334. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/media_meta.py +0 -0
  335. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/message_context.py +0 -0
  336. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/native_tools/__init__.py +0 -0
  337. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/native_tools/agent_runtime.py +0 -0
  338. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/native_tools/client.py +0 -0
  339. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/native_tools/executor.py +0 -0
  340. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/sender.py +0 -0
  341. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/settings_card.py +0 -0
  342. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/startup.py +0 -0
  343. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/tool_auth.py +0 -0
  344. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/feishu/transport.py +0 -0
  345. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/__init__.py +0 -0
  346. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/bot.py +0 -0
  347. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/buttons.py +0 -0
  348. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/credentials.py +0 -0
  349. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/file_browser.py +0 -0
  350. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/formatting.py +0 -0
  351. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/id_map.py +0 -0
  352. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/media.py +0 -0
  353. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/sender.py +0 -0
  354. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/startup.py +0 -0
  355. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/streaming.py +0 -0
  356. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/streaming_mode.py +0 -0
  357. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/transport.py +0 -0
  358. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/matrix/typing.py +0 -0
  359. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/multi.py +0 -0
  360. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/notifications.py +0 -0
  361. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/protocol.py +0 -0
  362. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/__init__.py +0 -0
  363. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/api.py +0 -0
  364. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/bot.py +0 -0
  365. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/gateway.py +0 -0
  366. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/inbound.py +0 -0
  367. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/known_targets.py +0 -0
  368. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/media.py +0 -0
  369. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/outbound.py +0 -0
  370. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/ref_index.py +0 -0
  371. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/session_store.py +0 -0
  372. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/target.py +0 -0
  373. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/token_manager.py +0 -0
  374. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/transport.py +0 -0
  375. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/types.py +0 -0
  376. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/qqbot/typing_keepalive.py +0 -0
  377. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/registry.py +0 -0
  378. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/send_opts.py +0 -0
  379. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/__init__.py +0 -0
  380. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/abort.py +0 -0
  381. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/buttons.py +0 -0
  382. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/callbacks.py +0 -0
  383. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/chat_tracker.py +0 -0
  384. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/controlmesh_images/logo_text.png +0 -0
  385. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/controlmesh_images/welcome.png +0 -0
  386. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/dedup.py +0 -0
  387. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/edit_streaming.py +0 -0
  388. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/file_browser.py +0 -0
  389. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/formatting.py +0 -0
  390. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/handlers.py +0 -0
  391. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/media.py +0 -0
  392. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/message_dispatch.py +0 -0
  393. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/middleware.py +0 -0
  394. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/sender.py +0 -0
  395. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/streaming.py +0 -0
  396. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/topic.py +0 -0
  397. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/transport.py +0 -0
  398. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/typing.py +0 -0
  399. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/upgrade_handler.py +0 -0
  400. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/telegram/welcome.py +0 -0
  401. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/__init__.py +0 -0
  402. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/api.py +0 -0
  403. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/auth_state.py +0 -0
  404. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/auth_store.py +0 -0
  405. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/bot.py +0 -0
  406. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/id_map.py +0 -0
  407. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/runtime.py +0 -0
  408. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/runtime_state.py +0 -0
  409. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/messenger/weixin/transport.py +0 -0
  410. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/__init__.py +0 -0
  411. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/approval_intent.py +0 -0
  412. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/bus.py +0 -0
  413. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/commands.py +0 -0
  414. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/health.py +0 -0
  415. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/internal_api.py +0 -0
  416. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/models.py +0 -0
  417. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/registry.py +0 -0
  418. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/release_gate.py +0 -0
  419. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/shared_knowledge.py +0 -0
  420. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/stack.py +0 -0
  421. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/multiagent/supervisor.py +0 -0
  422. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/native_commands/__init__.py +0 -0
  423. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/native_commands/fallbacks.py +0 -0
  424. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/native_commands/render.py +0 -0
  425. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/__init__.py +0 -0
  426. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/commands.py +0 -0
  427. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/core.py +0 -0
  428. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/directives.py +0 -0
  429. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/flows.py +0 -0
  430. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/hooks.py +0 -0
  431. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/injection.py +0 -0
  432. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/lifecycle.py +0 -0
  433. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/observers.py +0 -0
  434. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/providers.py +0 -0
  435. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/registry.py +0 -0
  436. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/__init__.py +0 -0
  437. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/agent_router.py +0 -0
  438. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/capability_registry.py +0 -0
  439. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/cron_selector.py +0 -0
  440. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/models.py +0 -0
  441. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/session_selector.py +0 -0
  442. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/settings_selector.py +0 -0
  443. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/orchestrator/selectors/utils.py +0 -0
  444. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/planning_files.py +0 -0
  445. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/provider_binding.py +0 -0
  446. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/provider_health.py +0 -0
  447. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/__init__.py +0 -0
  448. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/activation.py +0 -0
  449. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/capabilities.py +0 -0
  450. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/policy.py +0 -0
  451. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/router.py +0 -0
  452. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/score_events.py +0 -0
  453. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/scorer.py +0 -0
  454. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/routing/workunit.py +0 -0
  455. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/run.py +0 -0
  456. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/__init__.py +0 -0
  457. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/agent_inbox.py +0 -0
  458. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/host_jobs.py +0 -0
  459. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/models.py +0 -0
  460. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/registry.py +0 -0
  461. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/runtime/store.py +0 -0
  462. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/security/__init__.py +0 -0
  463. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/security/paths.py +0 -0
  464. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/session/__init__.py +0 -0
  465. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/session/key.py +0 -0
  466. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/session/manager.py +0 -0
  467. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/session/named.py +0 -0
  468. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/__init__.py +0 -0
  469. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/evaluator.py +0 -0
  470. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/evidence.py +0 -0
  471. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/host_execution.py +0 -0
  472. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/models.py +0 -0
  473. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/registry.py +0 -0
  474. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/tasks/task_policy.py +0 -0
  475. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/__init__.py +0 -0
  476. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/api.py +0 -0
  477. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/contracts.py +0 -0
  478. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/execution.py +0 -0
  479. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/live.py +0 -0
  480. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/models.py +0 -0
  481. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/orchestrator.py +0 -0
  482. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/phases.py +0 -0
  483. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/presentation.py +0 -0
  484. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/runtime_attachment.py +0 -0
  485. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/runtime_control.py +0 -0
  486. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/__init__.py +0 -0
  487. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/base.py +0 -0
  488. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/dispatch.py +0 -0
  489. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/events.py +0 -0
  490. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/mailbox.py +0 -0
  491. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/manifest.py +0 -0
  492. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/phase.py +0 -0
  493. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/recovery.py +0 -0
  494. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/runtime.py +0 -0
  495. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/snapshot.py +0 -0
  496. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/store.py +0 -0
  497. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/team/state/tasks.py +0 -0
  498. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/text/__init__.py +0 -0
  499. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/text/frontstage_delivery.py +0 -0
  500. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/text/response_format.py +0 -0
  501. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/text/tool_event_format.py +0 -0
  502. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/utils/__init__.py +0 -0
  503. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/utils/quiet_hours.py +0 -0
  504. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/__init__.py +0 -0
  505. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/auth.py +0 -0
  506. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/manager.py +0 -0
  507. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/models.py +0 -0
  508. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/observer.py +0 -0
  509. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/webhook/server.py +0 -0
  510. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/__init__.py +0 -0
  511. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/cron_tasks.py +0 -0
  512. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/init.py +0 -0
  513. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/loader.py +0 -0
  514. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/paths.py +0 -0
  515. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/rules_selector.py +0 -0
  516. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh/workspace/skill_sync.py +0 -0
  517. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/__init__.py +0 -0
  518. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/autonomous_runtime_loop.py +0 -0
  519. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/canonical_section_writer.py +0 -0
  520. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/contracts.py +0 -0
  521. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/engine.py +0 -0
  522. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/events.py +0 -0
  523. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/evidence_identity.py +0 -0
  524. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_event_shape.md +0 -0
  525. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_evidence_replay_query.py +0 -0
  526. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_evidence_replay_query_boundary.md +0 -0
  527. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_payload_seam.md +0 -0
  528. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_payloads.py +0 -0
  529. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_read_surface.py +0 -0
  530. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_runtime_events.py +0 -0
  531. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/execution_wiring_boundary.md +0 -0
  532. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/file_backed_primary_boundary.md +0 -0
  533. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/first_engine_boundary.md +0 -0
  534. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/first_engine_contract_surface.md +0 -0
  535. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/first_engine_test_matrix.md +0 -0
  536. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/first_engine_trace_examples.md +0 -0
  537. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/orchestrator_boundary.md +0 -0
  538. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/promotion_bridge.py +0 -0
  539. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/promotion_controller.py +0 -0
  540. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/promotion_receipt.py +0 -0
  541. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/py.typed +0 -0
  542. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/records.py +0 -0
  543. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery/__init__.py +0 -0
  544. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery/contracts.py +0 -0
  545. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery/execution.py +0 -0
  546. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery/policy.py +0 -0
  547. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery_execution_boundary.md +0 -0
  548. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/recovery_thin_loop.py +0 -0
  549. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/review.py +0 -0
  550. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/review_handoff_packet.py +0 -0
  551. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/review_query_read_surface_boundary.md +0 -0
  552. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/runtime.py +0 -0
  553. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/runtime_execution_checkpoint.py +0 -0
  554. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/runtime_message_api.py +0 -0
  555. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/serde.py +0 -0
  556. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/store.py +0 -0
  557. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/summary/__init__.py +0 -0
  558. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/summary/contracts.py +0 -0
  559. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/summary/policy.py +0 -0
  560. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/summary/runtime.py +0 -0
  561. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/summary_trigger_landing_boundary.md +0 -0
  562. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/task_packet.py +0 -0
  563. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/thin_orchestrator.py +0 -0
  564. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/thin_runtime_loop.py +0 -0
  565. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/tracing.py +0 -0
  566. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/worker_controller.py +0 -0
  567. {controlmesh-0.31.2 → controlmesh-0.32.3}/controlmesh_runtime/worker_state.py +0 -0
  568. {controlmesh-0.31.2 → controlmesh-0.32.3}/docs/case-pack/README.md +0 -0
  569. {controlmesh-0.31.2 → controlmesh-0.32.3}/examples/case-pack/README.md +0 -0
  570. {controlmesh-0.31.2 → controlmesh-0.32.3}/plans/README.md +0 -0
  571. {controlmesh-0.31.2 → controlmesh-0.32.3}/plans/tasks/README.md +0 -0
  572. {controlmesh-0.31.2 → controlmesh-0.32.3}/plans/tasks/_template/artifacts/README.md +0 -0
  573. {controlmesh-0.31.2 → controlmesh-0.32.3}/plans/tasks/_template/logs/README.md +0 -0
  574. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/__init__.py +0 -0
  575. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/summary/__init__.py +0 -0
  576. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/summary/test_contracts.py +0 -0
  577. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/summary/test_policy.py +0 -0
  578. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/summary/test_runtime.py +0 -0
  579. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_autonomous_runtime_loop.py +0 -0
  580. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_events.py +0 -0
  581. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_execution_evidence_replay_query.py +0 -0
  582. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_execution_evidence_store.py +0 -0
  583. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_execution_payloads.py +0 -0
  584. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_execution_read_surface.py +0 -0
  585. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_execution_runtime_events.py +0 -0
  586. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_first_engine.py +0 -0
  587. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_promotion_bridge.py +0 -0
  588. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_recovery_contracts.py +0 -0
  589. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_recovery_execution.py +0 -0
  590. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_recovery_policy.py +0 -0
  591. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_recovery_thin_loop.py +0 -0
  592. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_review.py +0 -0
  593. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_review_handoff_packet.py +0 -0
  594. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_runtime_execution_checkpoint.py +0 -0
  595. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_runtime_message_api.py +0 -0
  596. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_store.py +0 -0
  597. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_task_packet.py +0 -0
  598. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_thin_orchestrator.py +0 -0
  599. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_thin_runtime_loop.py +0 -0
  600. {controlmesh-0.31.2 → controlmesh-0.32.3}/tests/controlmesh_runtime/test_worker_controller.py +0 -0
  601. {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.31.2
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` 插件,提供扫码创建机器人、CardKit 单卡、权限引导、原生 OAPI 工具 |
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) 作为 Feishu native plugin,完成扫码创建、凭证写回、权限引导、消息上下文、CardKit 和 retry contract。
131
- - `feishu-auth-kit` 的公开仓库是上游元能力仓库;ControlMesh 发布包必须包含这套插件,外部 CLI 只作为开发覆盖或故障 fallback。
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` plugin for scan-created bots, CardKit cards, permission onboarding, and native OAPI tools |
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 the Feishu native plugin for scan-to-create onboarding, credential
359
- write-back, permission flows, message context, CardKit, and retry contracts.
360
- - The standalone `feishu-auth-kit` repo is the upstream reusable capability
361
- source. ControlMesh includes a vendored plugin copy; external CLI resolution
362
- is a development override or fallback, not the product dependency.
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` 插件,提供扫码创建机器人、CardKit 单卡、权限引导、原生 OAPI 工具 |
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) 作为 Feishu native plugin,完成扫码创建、凭证写回、权限引导、消息上下文、CardKit 和 retry contract。
63
- - `feishu-auth-kit` 的公开仓库是上游元能力仓库;ControlMesh 发布包必须包含这套插件,外部 CLI 只作为开发覆盖或故障 fallback。
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` plugin for scan-created bots, CardKit cards, permission onboarding, and native OAPI tools |
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 the Feishu native plugin for scan-to-create onboarding, credential
291
- write-back, permission flows, message context, CardKit, and retry contracts.
292
- - The standalone `feishu-auth-kit` repo is the upstream reusable capability
293
- source. ControlMesh includes a vendored plugin copy; external CLI resolution
294
- is a development override or fallback, not the product dependency.
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
@@ -1,3 +1,3 @@
1
1
  """ControlMesh public package and CLI entrypoint surface."""
2
2
 
3
- __version__ = "0.31.2"
3
+ __version__ = "0.32.3"
@@ -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 / "AGENTS.md").read_text(encoding="utf-8")
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
- prompt = args[0]
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
- if provider:
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 model:
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 = "dontAsk"
89
- claude_root_force_bypass_via_is_sandbox: bool = False
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=result_text or raw,
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 = "dontAsk"
60
- claude_root_force_bypass_via_is_sandbox: bool = False
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 = "dontAsk"
122
- claude_root_force_bypass_via_is_sandbox: bool = False
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 = "dontAsk"
538
- claude_root_force_bypass_via_is_sandbox: bool = False
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 native plugin."""
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 native plugin."""
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 plugin not found. ControlMesh should include its bundled "
52
- "Feishu native plugin; otherwise set CONTROLMESH_FEISHU_AUTH_KIT_BIN, "
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 typing import Protocol
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: