controlmesh 0.40.2__tar.gz → 0.41.0__tar.gz

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