controlmesh 0.41.0__tar.gz → 0.41.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (627) hide show
  1. {controlmesh-0.41.0 → controlmesh-0.41.2}/PKG-INFO +1 -1
  2. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/__init__.py +1 -1
  3. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/__main__.py +2 -2
  4. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/init_wizard.py +34 -3
  5. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/auth.py +3 -2
  6. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/feishu.py +18 -1
  7. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/install.py +7 -1
  8. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/native_auth_all_runner.py +4 -3
  9. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/native_auth_useful_runner.py +54 -7
  10. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/orchestration_runner.py +5 -4
  11. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/bot.py +1 -0
  12. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/command_center_card.py +2 -2
  13. {controlmesh-0.41.0 → controlmesh-0.41.2}/pyproject.toml +1 -1
  14. {controlmesh-0.41.0 → controlmesh-0.41.2}/.gitignore +0 -0
  15. {controlmesh-0.41.0 → controlmesh-0.41.2}/Dockerfile.sandbox +0 -0
  16. {controlmesh-0.41.0 → controlmesh-0.41.2}/LICENSE +0 -0
  17. {controlmesh-0.41.0 → controlmesh-0.41.2}/README.md +0 -0
  18. {controlmesh-0.41.0 → controlmesh-0.41.2}/config.example.json +0 -0
  19. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_banner.txt +0 -0
  20. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/RULES.md +0 -0
  21. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-all-clis.md +0 -0
  22. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-claude-only.md +0 -0
  23. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-codex-only.md +0 -0
  24. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/config/RULES-gemini-only.md +0 -0
  25. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/JOIN_NOTIFICATION.md +0 -0
  26. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/RULES.md +0 -0
  27. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-all-clis.md +0 -0
  28. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-claude-only.md +0 -0
  29. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-codex-only.md +0 -0
  30. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/RULES-gemini-only.md +0 -0
  31. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/flow-triggered-template/TASK_DESCRIPTION.md +0 -0
  32. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/release-ci-monitor-template/RULES-template.md +0 -0
  33. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/release-ci-monitor-template/TASK_DESCRIPTION.md +0 -0
  34. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/scheduled-recurring-template/TASK_DESCRIPTION.md +0 -0
  35. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/cron_tasks/webhook-triggered-template/TASK_DESCRIPTION.md +0 -0
  36. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/output_to_user/RULES.md +0 -0
  37. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/routing/activation_policies.yaml +0 -0
  38. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/routing/capabilities.yaml +0 -0
  39. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/RULES.md +0 -0
  40. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/LICENSE.txt +0 -0
  41. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/SKILL.md +0 -0
  42. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/references/output-patterns.md +0 -0
  43. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/references/workflows.md +0 -0
  44. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/init_skill.py +0 -0
  45. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/package_skill.py +0 -0
  46. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/skills/skill-creator/scripts/quick_validate.py +0 -0
  47. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tasks/RULES.md +0 -0
  48. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/telegram_files/RULES.md +0 -0
  49. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/RULES.md +0 -0
  50. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/_tool_shared.py +0 -0
  51. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/RULES.md +0 -0
  52. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/ask_agent.py +0 -0
  53. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/ask_agent_async.py +0 -0
  54. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/create_agent.py +0 -0
  55. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/edit_shared_knowledge.py +0 -0
  56. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/list_agents.py +0 -0
  57. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/agent_tools/remove_agent.py +0 -0
  58. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-all-clis.md +0 -0
  59. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-claude-only.md +0 -0
  60. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-codex-only.md +0 -0
  61. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/RULES-gemini-only.md +0 -0
  62. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/_shared.py +0 -0
  63. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_add.py +0 -0
  64. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_edit.py +0 -0
  65. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_list.py +0 -0
  66. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_monitor.py +0 -0
  67. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_remove.py +0 -0
  68. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/cron_tools/cron_time.py +0 -0
  69. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/RULES.md +0 -0
  70. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/file_info.py +0 -0
  71. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/list_files.py +0 -0
  72. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/process_video.py +0 -0
  73. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/read_document.py +0 -0
  74. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/media_tools/transcribe_audio.py +0 -0
  75. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/RULES.md +0 -0
  76. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/_shared.py +0 -0
  77. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/ask_parent.py +0 -0
  78. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/attach_task.py +0 -0
  79. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/cancel_task.py +0 -0
  80. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/check_task_updates.py +0 -0
  81. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/create_task.py +0 -0
  82. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/delete_task.py +0 -0
  83. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/list_tasks.py +0 -0
  84. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/release_task.py +0 -0
  85. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/resume_task.py +0 -0
  86. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/route_task.py +0 -0
  87. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/task_tools/tell_task.py +0 -0
  88. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/user_tools/RULES.md +0 -0
  89. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-all-clis.md +0 -0
  90. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-claude-only.md +0 -0
  91. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-codex-only.md +0 -0
  92. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/RULES-gemini-only.md +0 -0
  93. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/_shared.py +0 -0
  94. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/setup_ci_failure_webhook.py +0 -0
  95. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_add.py +0 -0
  96. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_edit.py +0 -0
  97. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_list.py +0 -0
  98. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_remove.py +0 -0
  99. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_rotate_token.py +0 -0
  100. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_home_defaults/workspace/tools/webhook_tools/webhook_test.py +0 -0
  101. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/__init__.py +0 -0
  102. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/VENDORED_FROM.md +0 -0
  103. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/__init__.py +0 -0
  104. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/__init__.py +0 -0
  105. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/agent_runtime.py +0 -0
  106. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/app_registration.py +0 -0
  107. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/cardkit.py +0 -0
  108. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/claude_adapter.py +0 -0
  109. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/cli.py +0 -0
  110. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/client.py +0 -0
  111. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/device_flow.py +0 -0
  112. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/domains.py +0 -0
  113. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/message_context.py +0 -0
  114. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/models.py +0 -0
  115. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/native_agent_tools.py +0 -0
  116. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/native_contract.py +0 -0
  117. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/orchestration.py +0 -0
  118. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/owner_policy.py +0 -0
  119. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/probe.py +0 -0
  120. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/runtime_cards.py +0 -0
  121. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/scopes.py +0 -0
  122. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/feishu_auth_kit/token_store.py +0 -0
  123. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/_plugins/feishu_auth_kit/runner.py +0 -0
  124. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/__init__.py +0 -0
  125. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/context.py +0 -0
  126. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/manager.py +0 -0
  127. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/progress.py +0 -0
  128. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/results.py +0 -0
  129. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/agents_runtime/tools.py +0 -0
  130. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/api/__init__.py +0 -0
  131. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/api/admin_read.py +0 -0
  132. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/api/catalog_http.py +0 -0
  133. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/api/crypto.py +0 -0
  134. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/api/server.py +0 -0
  135. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/background/__init__.py +0 -0
  136. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/background/models.py +0 -0
  137. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/background/observer.py +0 -0
  138. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/__init__.py +0 -0
  139. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/adapters.py +0 -0
  140. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/bus.py +0 -0
  141. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/cron_sanitize.py +0 -0
  142. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/envelope.py +0 -0
  143. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/bus/lock_pool.py +0 -0
  144. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/__init__.py +0 -0
  145. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/__main__.py +0 -0
  146. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/io.py +0 -0
  147. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/lint.py +0 -0
  148. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/models.py +0 -0
  149. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/case_pack/render.py +0 -0
  150. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cleanup/__init__.py +0 -0
  151. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cleanup/observer.py +0 -0
  152. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/__init__.py +0 -0
  153. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/auth.py +0 -0
  154. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/base.py +0 -0
  155. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/claude_provider.py +0 -0
  156. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/claw_provider.py +0 -0
  157. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/coalescer.py +0 -0
  158. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_cache.py +0 -0
  159. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_cache_observer.py +0 -0
  160. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_discovery.py +0 -0
  161. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_events.py +0 -0
  162. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_hooks.py +0 -0
  163. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/codex_provider.py +0 -0
  164. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/diagnostics.py +0 -0
  165. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/events.py +0 -0
  166. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/executor.py +0 -0
  167. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/factory.py +0 -0
  168. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/gemini_cache.py +0 -0
  169. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/gemini_cache_observer.py +0 -0
  170. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/gemini_events.py +0 -0
  171. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/gemini_provider.py +0 -0
  172. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/gemini_utils.py +0 -0
  173. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/introspection.py +0 -0
  174. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/liveness.py +0 -0
  175. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/model_cache.py +0 -0
  176. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/openai_agents_provider.py +0 -0
  177. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/opencode_discovery.py +0 -0
  178. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/opencode_provider.py +0 -0
  179. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/param_resolver.py +0 -0
  180. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/process_registry.py +0 -0
  181. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/service.py +0 -0
  182. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/stream_events.py +0 -0
  183. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/supervisor.py +0 -0
  184. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/timeout_controller.py +0 -0
  185. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli/types.py +0 -0
  186. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/__init__.py +0 -0
  187. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/agents.py +0 -0
  188. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/api_cmd.py +0 -0
  189. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/cron.py +0 -0
  190. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/docker.py +0 -0
  191. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/lifecycle.py +0 -0
  192. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/runtime.py +0 -0
  193. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/service.py +0 -0
  194. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/status.py +0 -0
  195. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/tasks.py +0 -0
  196. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cli_commands/terminal.py +0 -0
  197. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/command_registry.py +0 -0
  198. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/commands.py +0 -0
  199. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/config.py +0 -0
  200. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/config_reload.py +0 -0
  201. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/__init__.py +0 -0
  202. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/dependency_queue.py +0 -0
  203. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/execution.py +0 -0
  204. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/manager.py +0 -0
  205. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/observer.py +0 -0
  206. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/cron/policy.py +0 -0
  207. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/errors.py +0 -0
  208. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/__init__.py +0 -0
  209. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/allowed_roots.py +0 -0
  210. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/browser.py +0 -0
  211. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/image_processor.py +0 -0
  212. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/prompt.py +0 -0
  213. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/storage.py +0 -0
  214. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/files/tags.py +0 -0
  215. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/gateways/__init__.py +0 -0
  216. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/gateways/config.py +0 -0
  217. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/gateways/types.py +0 -0
  218. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/heartbeat/__init__.py +0 -0
  219. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/heartbeat/observer.py +0 -0
  220. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/history/__init__.py +0 -0
  221. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/history/catalog.py +0 -0
  222. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/history/index.py +0 -0
  223. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/history/models.py +0 -0
  224. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/history/store.py +0 -0
  225. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/__init__.py +0 -0
  226. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/de/chat.toml +0 -0
  227. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/de/cli.toml +0 -0
  228. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/de/commands.toml +0 -0
  229. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/de/wizard.toml +0 -0
  230. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/en/chat.toml +0 -0
  231. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/en/cli.toml +0 -0
  232. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/en/commands.toml +0 -0
  233. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/en/wizard.toml +0 -0
  234. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/es/chat.toml +0 -0
  235. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/es/cli.toml +0 -0
  236. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/es/commands.toml +0 -0
  237. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/es/wizard.toml +0 -0
  238. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/fr/chat.toml +0 -0
  239. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/fr/cli.toml +0 -0
  240. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/fr/commands.toml +0 -0
  241. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/fr/wizard.toml +0 -0
  242. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/loader.py +0 -0
  243. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/nl/chat.toml +0 -0
  244. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/nl/cli.toml +0 -0
  245. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/nl/commands.toml +0 -0
  246. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/nl/wizard.toml +0 -0
  247. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/pt/chat.toml +0 -0
  248. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/pt/cli.toml +0 -0
  249. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/pt/commands.toml +0 -0
  250. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/pt/wizard.toml +0 -0
  251. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/ru/chat.toml +0 -0
  252. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/ru/cli.toml +0 -0
  253. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/ru/commands.toml +0 -0
  254. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/ru/wizard.toml +0 -0
  255. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/zh/chat.toml +0 -0
  256. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/zh/cli.toml +0 -0
  257. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/zh/commands.toml +0 -0
  258. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/i18n/zh/wizard.toml +0 -0
  259. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/__init__.py +0 -0
  260. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/atomic_io.py +0 -0
  261. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/base_observer.py +0 -0
  262. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/base_task_observer.py +0 -0
  263. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/boot_id.py +0 -0
  264. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/docker.py +0 -0
  265. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/docker_extras.py +0 -0
  266. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/env_secrets.py +0 -0
  267. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/file_watcher.py +0 -0
  268. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/fs.py +0 -0
  269. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/inflight.py +0 -0
  270. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/install.py +0 -0
  271. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/json_store.py +0 -0
  272. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/pidlock.py +0 -0
  273. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/platform.py +0 -0
  274. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/process_tree.py +0 -0
  275. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/recovery.py +0 -0
  276. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/restart.py +0 -0
  277. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service.py +0 -0
  278. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service_base.py +0 -0
  279. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service_linux.py +0 -0
  280. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service_logs.py +0 -0
  281. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service_macos.py +0 -0
  282. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/service_windows.py +0 -0
  283. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/startup_state.py +0 -0
  284. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/task_runner.py +0 -0
  285. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/updater.py +0 -0
  286. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/infra/version.py +0 -0
  287. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/integrations/__init__.py +0 -0
  288. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/integrations/feishu_auth_kit.py +0 -0
  289. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/log_context.py +0 -0
  290. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/logging_config.py +0 -0
  291. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/__init__.py +0 -0
  292. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/capture.py +0 -0
  293. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/commands.py +0 -0
  294. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/dreaming.py +0 -0
  295. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/events.py +0 -0
  296. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/frequency.py +0 -0
  297. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/models.py +0 -0
  298. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/promotion.py +0 -0
  299. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/runtime_capture.py +0 -0
  300. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/search.py +0 -0
  301. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/semantic.py +0 -0
  302. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/memory/store.py +0 -0
  303. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/__init__.py +0 -0
  304. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/address.py +0 -0
  305. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/callback_router.py +0 -0
  306. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/capabilities.py +0 -0
  307. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/commands.py +0 -0
  308. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/__init__.py +0 -0
  309. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/__init__.py +0 -0
  310. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/app_info.py +0 -0
  311. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/auth_cards.py +0 -0
  312. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/brand.py +0 -0
  313. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/card_auth.py +0 -0
  314. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/card_auth_context.py +0 -0
  315. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/card_auth_runner.py +0 -0
  316. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/device_flow.py +0 -0
  317. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/errors.py +0 -0
  318. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/feishu_card_sender.py +0 -0
  319. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/runtime_auth.py +0 -0
  320. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/runtime_continuation.py +0 -0
  321. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/token_store.py +0 -0
  322. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/auth/uat_client.py +0 -0
  323. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/bundled_runtime.py +0 -0
  324. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/card_action_payload.py +0 -0
  325. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/card_stream.py +0 -0
  326. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/id_map.py +0 -0
  327. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/inbound.py +0 -0
  328. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/long_connection.py +0 -0
  329. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/media.py +0 -0
  330. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/media_meta.py +0 -0
  331. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/message_context.py +0 -0
  332. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/native_tools/__init__.py +0 -0
  333. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/native_tools/agent_runtime.py +0 -0
  334. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/native_tools/client.py +0 -0
  335. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/native_tools/executor.py +0 -0
  336. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/progress_preview.py +0 -0
  337. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/runtime_state.py +0 -0
  338. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/sender.py +0 -0
  339. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/settings_card.py +0 -0
  340. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/startup.py +0 -0
  341. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/tool_auth.py +0 -0
  342. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/feishu/transport.py +0 -0
  343. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/__init__.py +0 -0
  344. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/bot.py +0 -0
  345. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/buttons.py +0 -0
  346. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/credentials.py +0 -0
  347. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/file_browser.py +0 -0
  348. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/formatting.py +0 -0
  349. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/id_map.py +0 -0
  350. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/media.py +0 -0
  351. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/sender.py +0 -0
  352. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/startup.py +0 -0
  353. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/streaming.py +0 -0
  354. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/streaming_mode.py +0 -0
  355. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/transport.py +0 -0
  356. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/matrix/typing.py +0 -0
  357. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/multi.py +0 -0
  358. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/notifications.py +0 -0
  359. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/protocol.py +0 -0
  360. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/__init__.py +0 -0
  361. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/api.py +0 -0
  362. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/bot.py +0 -0
  363. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/gateway.py +0 -0
  364. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/inbound.py +0 -0
  365. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/known_targets.py +0 -0
  366. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/media.py +0 -0
  367. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/outbound.py +0 -0
  368. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/ref_index.py +0 -0
  369. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/session_store.py +0 -0
  370. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/target.py +0 -0
  371. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/token_manager.py +0 -0
  372. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/transport.py +0 -0
  373. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/types.py +0 -0
  374. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/qqbot/typing_keepalive.py +0 -0
  375. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/registry.py +0 -0
  376. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/send_opts.py +0 -0
  377. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/__init__.py +0 -0
  378. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/abort.py +0 -0
  379. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/app.py +0 -0
  380. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/buttons.py +0 -0
  381. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/callbacks.py +0 -0
  382. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/chat_tracker.py +0 -0
  383. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/controlmesh_images/logo_text.png +0 -0
  384. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/controlmesh_images/welcome.png +0 -0
  385. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/dedup.py +0 -0
  386. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/edit_streaming.py +0 -0
  387. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/file_browser.py +0 -0
  388. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/formatting.py +0 -0
  389. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/handlers.py +0 -0
  390. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/inbound_spool.py +0 -0
  391. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/lane_state.py +0 -0
  392. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/media.py +0 -0
  393. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/message_dispatch.py +0 -0
  394. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/middleware.py +0 -0
  395. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/runtime_state.py +0 -0
  396. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/sender.py +0 -0
  397. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/startup.py +0 -0
  398. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/streaming.py +0 -0
  399. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/topic.py +0 -0
  400. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/transport.py +0 -0
  401. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/typing.py +0 -0
  402. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/upgrade_handler.py +0 -0
  403. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/telegram/welcome.py +0 -0
  404. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/__init__.py +0 -0
  405. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/api.py +0 -0
  406. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/auth_state.py +0 -0
  407. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/auth_store.py +0 -0
  408. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/bot.py +0 -0
  409. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/id_map.py +0 -0
  410. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/inbound_spool.py +0 -0
  411. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/runtime.py +0 -0
  412. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/runtime_state.py +0 -0
  413. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/messenger/weixin/transport.py +0 -0
  414. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/__init__.py +0 -0
  415. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/approval_intent.py +0 -0
  416. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/bus.py +0 -0
  417. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/commands.py +0 -0
  418. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/health.py +0 -0
  419. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/internal_api.py +0 -0
  420. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/models.py +0 -0
  421. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/plan_review_loop.py +0 -0
  422. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/registry.py +0 -0
  423. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/release_gate.py +0 -0
  424. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/shared_knowledge.py +0 -0
  425. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/stack.py +0 -0
  426. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/multiagent/supervisor.py +0 -0
  427. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/native_commands/__init__.py +0 -0
  428. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/native_commands/fallbacks.py +0 -0
  429. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/native_commands/render.py +0 -0
  430. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/__init__.py +0 -0
  431. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/commands.py +0 -0
  432. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/core.py +0 -0
  433. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/directives.py +0 -0
  434. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/flows.py +0 -0
  435. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/hooks.py +0 -0
  436. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/injection.py +0 -0
  437. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/lifecycle.py +0 -0
  438. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/observers.py +0 -0
  439. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/presentation.py +0 -0
  440. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/providers.py +0 -0
  441. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/registry.py +0 -0
  442. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/__init__.py +0 -0
  443. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/agent_router.py +0 -0
  444. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/capability_registry.py +0 -0
  445. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/cron_selector.py +0 -0
  446. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/model_selector.py +0 -0
  447. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/models.py +0 -0
  448. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/session_selector.py +0 -0
  449. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/settings_selector.py +0 -0
  450. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/task_selector.py +0 -0
  451. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/orchestrator/selectors/utils.py +0 -0
  452. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/planning_files.py +0 -0
  453. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/provider_binding.py +0 -0
  454. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/provider_health.py +0 -0
  455. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/__init__.py +0 -0
  456. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/activation.py +0 -0
  457. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/capabilities.py +0 -0
  458. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/policy.py +0 -0
  459. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/router.py +0 -0
  460. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/score_events.py +0 -0
  461. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/scorer.py +0 -0
  462. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/routing/workunit.py +0 -0
  463. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/run.py +0 -0
  464. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/__init__.py +0 -0
  465. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/agent_inbox.py +0 -0
  466. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/host_jobs.py +0 -0
  467. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/models.py +0 -0
  468. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/registry.py +0 -0
  469. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/runtime/store.py +0 -0
  470. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/security/__init__.py +0 -0
  471. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/security/content.py +0 -0
  472. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/security/paths.py +0 -0
  473. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/session/__init__.py +0 -0
  474. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/session/key.py +0 -0
  475. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/session/manager.py +0 -0
  476. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/session/named.py +0 -0
  477. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/__init__.py +0 -0
  478. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/evaluator.py +0 -0
  479. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/evidence.py +0 -0
  480. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/host_execution.py +0 -0
  481. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/hub.py +0 -0
  482. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/models.py +0 -0
  483. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/registry.py +0 -0
  484. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/tasks/task_policy.py +0 -0
  485. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/__init__.py +0 -0
  486. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/api.py +0 -0
  487. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/contracts.py +0 -0
  488. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/execution.py +0 -0
  489. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/live.py +0 -0
  490. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/models.py +0 -0
  491. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/orchestrator.py +0 -0
  492. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/phases.py +0 -0
  493. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/presentation.py +0 -0
  494. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/runtime_attachment.py +0 -0
  495. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/runtime_control.py +0 -0
  496. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/__init__.py +0 -0
  497. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/base.py +0 -0
  498. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/dispatch.py +0 -0
  499. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/events.py +0 -0
  500. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/mailbox.py +0 -0
  501. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/manifest.py +0 -0
  502. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/phase.py +0 -0
  503. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/recovery.py +0 -0
  504. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/runtime.py +0 -0
  505. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/snapshot.py +0 -0
  506. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/store.py +0 -0
  507. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/team/state/tasks.py +0 -0
  508. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/__init__.py +0 -0
  509. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/app.py +0 -0
  510. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/command_router.py +0 -0
  511. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/config.py +0 -0
  512. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/enhanced_shell.py +0 -0
  513. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/errors.py +0 -0
  514. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/inbox.py +0 -0
  515. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/memory_context.py +0 -0
  516. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/modes.py +0 -0
  517. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/native_pty.py +0 -0
  518. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/providers.py +0 -0
  519. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/rendering.py +0 -0
  520. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/runtime.py +0 -0
  521. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/session.py +0 -0
  522. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/terminal/tasks_view.py +0 -0
  523. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/text/__init__.py +0 -0
  524. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/text/frontstage_delivery.py +0 -0
  525. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/text/response_format.py +0 -0
  526. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/text/tool_event_format.py +0 -0
  527. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/utils/__init__.py +0 -0
  528. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/utils/quiet_hours.py +0 -0
  529. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/__init__.py +0 -0
  530. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/auth.py +0 -0
  531. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/manager.py +0 -0
  532. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/models.py +0 -0
  533. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/observer.py +0 -0
  534. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/webhook/server.py +0 -0
  535. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/__init__.py +0 -0
  536. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/cron_tasks.py +0 -0
  537. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/init.py +0 -0
  538. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/loader.py +0 -0
  539. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/paths.py +0 -0
  540. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/rules_selector.py +0 -0
  541. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh/workspace/skill_sync.py +0 -0
  542. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/__init__.py +0 -0
  543. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/autonomous_runtime_loop.py +0 -0
  544. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/canonical_section_writer.py +0 -0
  545. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/contracts.py +0 -0
  546. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/engine.py +0 -0
  547. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/events.py +0 -0
  548. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/evidence_identity.py +0 -0
  549. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_event_shape.md +0 -0
  550. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_evidence_replay_query.py +0 -0
  551. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_evidence_replay_query_boundary.md +0 -0
  552. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_payload_seam.md +0 -0
  553. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_payloads.py +0 -0
  554. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_read_surface.py +0 -0
  555. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_runtime_events.py +0 -0
  556. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/execution_wiring_boundary.md +0 -0
  557. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/file_backed_primary_boundary.md +0 -0
  558. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/first_engine_boundary.md +0 -0
  559. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/first_engine_contract_surface.md +0 -0
  560. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/first_engine_test_matrix.md +0 -0
  561. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/first_engine_trace_examples.md +0 -0
  562. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/orchestrator_boundary.md +0 -0
  563. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/promotion_bridge.py +0 -0
  564. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/promotion_controller.py +0 -0
  565. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/promotion_receipt.py +0 -0
  566. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/py.typed +0 -0
  567. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/records.py +0 -0
  568. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery/__init__.py +0 -0
  569. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery/contracts.py +0 -0
  570. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery/execution.py +0 -0
  571. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery/policy.py +0 -0
  572. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery_execution_boundary.md +0 -0
  573. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/recovery_thin_loop.py +0 -0
  574. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/review.py +0 -0
  575. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/review_handoff_packet.py +0 -0
  576. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/review_query_read_surface_boundary.md +0 -0
  577. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/runtime.py +0 -0
  578. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/runtime_execution_checkpoint.py +0 -0
  579. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/runtime_message_api.py +0 -0
  580. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/serde.py +0 -0
  581. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/store.py +0 -0
  582. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/summary/__init__.py +0 -0
  583. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/summary/contracts.py +0 -0
  584. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/summary/policy.py +0 -0
  585. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/summary/runtime.py +0 -0
  586. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/summary_trigger_landing_boundary.md +0 -0
  587. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/task_packet.py +0 -0
  588. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/thin_orchestrator.py +0 -0
  589. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/thin_runtime_loop.py +0 -0
  590. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/tracing.py +0 -0
  591. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/worker_controller.py +0 -0
  592. {controlmesh-0.41.0 → controlmesh-0.41.2}/controlmesh_runtime/worker_state.py +0 -0
  593. {controlmesh-0.41.0 → controlmesh-0.41.2}/docs/README.md +0 -0
  594. {controlmesh-0.41.0 → controlmesh-0.41.2}/docs/case-pack/README.md +0 -0
  595. {controlmesh-0.41.0 → controlmesh-0.41.2}/examples/case-pack/README.md +0 -0
  596. {controlmesh-0.41.0 → controlmesh-0.41.2}/plans/README.md +0 -0
  597. {controlmesh-0.41.0 → controlmesh-0.41.2}/plans/tasks/README.md +0 -0
  598. {controlmesh-0.41.0 → controlmesh-0.41.2}/plans/tasks/_template/artifacts/README.md +0 -0
  599. {controlmesh-0.41.0 → controlmesh-0.41.2}/plans/tasks/_template/logs/README.md +0 -0
  600. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/__init__.py +0 -0
  601. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/summary/__init__.py +0 -0
  602. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/summary/test_contracts.py +0 -0
  603. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/summary/test_policy.py +0 -0
  604. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/summary/test_runtime.py +0 -0
  605. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_autonomous_runtime_loop.py +0 -0
  606. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_events.py +0 -0
  607. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_execution_evidence_replay_query.py +0 -0
  608. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_execution_evidence_store.py +0 -0
  609. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_execution_payloads.py +0 -0
  610. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_execution_read_surface.py +0 -0
  611. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_execution_runtime_events.py +0 -0
  612. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_first_engine.py +0 -0
  613. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_promotion_bridge.py +0 -0
  614. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_recovery_contracts.py +0 -0
  615. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_recovery_execution.py +0 -0
  616. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_recovery_policy.py +0 -0
  617. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_recovery_thin_loop.py +0 -0
  618. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_review.py +0 -0
  619. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_review_handoff_packet.py +0 -0
  620. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_runtime_execution_checkpoint.py +0 -0
  621. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_runtime_message_api.py +0 -0
  622. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_store.py +0 -0
  623. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_task_packet.py +0 -0
  624. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_thin_orchestrator.py +0 -0
  625. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_thin_runtime_loop.py +0 -0
  626. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_worker_controller.py +0 -0
  627. {controlmesh-0.41.0 → controlmesh-0.41.2}/tests/controlmesh_runtime/test_worker_state.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: controlmesh
3
- Version: 0.41.0
3
+ Version: 0.41.2
4
4
  Summary: ControlMesh brings official coding CLIs into Telegram, Matrix, and Feishu with persistent workspaces, long-running jobs, and production-friendly bot operations.
5
5
  Project-URL: Homepage, https://github.com/muqiao215/ControlMesh
6
6
  Project-URL: Repository, https://github.com/muqiao215/ControlMesh
@@ -1,3 +1,3 @@
1
1
  """ControlMesh public package and CLI entrypoint surface."""
2
2
 
3
- __version__ = "0.41.0"
3
+ __version__ = "0.41.2"
@@ -434,12 +434,12 @@ def _validate_feishu_config(config: AgentConfig) -> None:
434
434
  if not fs.app_id:
435
435
  _console.print("Feishu transport requires an existing Feishu self-built app.")
436
436
  _console.print("Missing field: feishu.app_id.")
437
- _console.print("Run `controlmesh auth feishu setup` for zero-app onboarding guidance.")
437
+ _console.print("Run `controlmesh feishu native setup` to start the official scan-create registration flow.")
438
438
  sys.exit(1)
439
439
  if not fs.app_secret:
440
440
  _console.print("Feishu transport requires an existing Feishu self-built app.")
441
441
  _console.print("Missing field: feishu.app_secret.")
442
- _console.print("Run `controlmesh auth feishu setup` for zero-app onboarding guidance.")
442
+ _console.print("Run `controlmesh feishu native setup` to start the official scan-create registration flow.")
443
443
  sys.exit(1)
444
444
 
445
445
 
@@ -156,7 +156,7 @@ def _show_disclaimer(console: Console) -> None:
156
156
 
157
157
 
158
158
  def _ask_transport(console: Console) -> str:
159
- """Prompt for the messaging transport (Telegram or Matrix)."""
159
+ """Prompt for the messaging transport."""
160
160
  console.print(
161
161
  Panel(
162
162
  t_rich("wizard.transport.body"),
@@ -168,10 +168,12 @@ def _ask_transport(console: Console) -> str:
168
168
 
169
169
  selected: str | None = questionary.select(
170
170
  t_rich("wizard.transport.prompt"),
171
- choices=["Telegram", "Matrix"],
171
+ choices=["Feishu native", "Telegram", "Matrix"],
172
172
  ).ask()
173
173
  if selected is None:
174
174
  _abort()
175
+ if selected == "Feishu native":
176
+ return "feishu"
175
177
  return "matrix" if selected == "Matrix" else "telegram"
176
178
 
177
179
 
@@ -557,9 +559,20 @@ def _load_existing_config(config_path: Path) -> dict[str, object]:
557
559
 
558
560
  def _apply_transport_config(merged: dict[str, object], cfg: _WizardConfig) -> None:
559
561
  """Write transport-specific keys into *merged*."""
560
- if cfg.get("transport", "telegram") == "telegram":
562
+ transport = cfg.get("transport", "telegram")
563
+ if transport == "telegram":
561
564
  merged["telegram_token"] = cfg.get("telegram_token", "")
562
565
  merged["allowed_user_ids"] = cfg.get("allowed_user_ids") or []
566
+ elif transport == "feishu":
567
+ feishu_section = merged.get("feishu")
568
+ if not isinstance(feishu_section, dict):
569
+ feishu_section = {}
570
+ merged["feishu"] = feishu_section
571
+ feishu_section.setdefault("mode", "bot_only")
572
+ feishu_section.setdefault("brand", "feishu")
573
+ feishu_section["runtime_mode"] = "native"
574
+ feishu_section["progress_mode"] = "card_stream"
575
+ feishu_section.setdefault("domain", "https://open.feishu.cn")
563
576
  else: # matrix
564
577
  matrix_section = merged.get("matrix")
565
578
  if not isinstance(matrix_section, dict):
@@ -644,6 +657,19 @@ def run_onboarding() -> bool:
644
657
  console.print()
645
658
  allowed_user_ids = _ask_user_id(console)
646
659
  console.print()
660
+ elif transport == "feishu":
661
+ console.print(
662
+ Panel(
663
+ "Feishu native setup uses the official scan-create flow.\n\n"
664
+ "After this wizard writes the base config, run:\n\n"
665
+ " controlmesh feishu native setup\n\n"
666
+ "That command prints the Feishu QR/link and auto-completes config writeback after approval.",
667
+ title="Feishu Native",
668
+ border_style="blue",
669
+ padding=(1, 2),
670
+ )
671
+ )
672
+ console.print()
647
673
  else: # matrix
648
674
  matrix_homeserver = _ask_matrix_homeserver(console)
649
675
  console.print()
@@ -704,6 +730,11 @@ def run_onboarding() -> bool:
704
730
  + "\n"
705
731
  + t_rich("wizard.complete.logs", path=paths.logs_dir)
706
732
  + "\n\n"
733
+ + (
734
+ "Feishu next step: run `controlmesh feishu native setup` to scan-create the app bot.\n\n"
735
+ if transport == "feishu"
736
+ else ""
737
+ )
707
738
  + action,
708
739
  title=t_rich("wizard.complete.title"),
709
740
  border_style="green",
@@ -872,8 +872,8 @@ def _render_feishu_setup_guidance(config: AgentConfig) -> None:
872
872
  _console.print(f"Feishu Open Platform app console: {_FEISHU_APP_CONSOLE_URL}")
873
873
  _console.print(f"Feishu self-built app guide: {_FEISHU_APP_DEV_GUIDE_URL}")
874
874
  _console.print("Required setup for a new user with no Feishu bot:")
875
- _console.print("1. Preferred native path: run `controlmesh auth feishu register-begin` and scan the official QR flow.")
876
- _console.print("2. Then run `controlmesh auth feishu register-poll --device-code <code>` until credentials are returned.")
875
+ _console.print("1. Preferred native path: run `controlmesh feishu native setup` and scan the official QR flow.")
876
+ _console.print("2. ControlMesh saves a pending registration and auto-completes config writeback after approval.")
877
877
  _console.print("3. That path writes `runtime_mode=native` and enables CardKit streaming by default.")
878
878
  _console.print("4. Manual bridge fallback: create a Feishu self-built app in the app console.")
879
879
  _console.print("5. Put the app_id/app_secret into config.json and keep `runtime_mode=bridge`.")
@@ -883,6 +883,7 @@ def _render_feishu_setup_guidance(config: AgentConfig) -> None:
883
883
  _console.print("9. Subscribe to message receive events such as im.message.receive_v1.")
884
884
  _console.print("10. Add the bot to a chat and send a first message to validate inbound/reply wiring.")
885
885
  _console.print("Manual fallback remains valid if the official scan-to-create flow is unavailable in your environment.")
886
+ _console.print("Advanced/manual commands remain available under `controlmesh auth feishu register-begin|register-poll`.")
886
887
  _console.print("After app credentials exist, `controlmesh auth feishu login` only performs optional device-flow user auth.")
887
888
  _console.print("It does not create a new app or bot.")
888
889
 
@@ -18,32 +18,49 @@ Commands:
18
18
  """
19
19
  _FEISHU_NATIVE_USAGE = """Usage:
20
20
  controlmesh feishu native bootstrap
21
+ controlmesh feishu native setup
21
22
  controlmesh feishu native doctor
22
23
  controlmesh feishu native probe
23
24
  controlmesh feishu native register-begin
25
+ controlmesh feishu native complete
24
26
 
25
27
  Commands:
26
28
  bootstrap Start the Feishu native bootstrap flow.
29
+ setup Begin scan-create registration and arm auto-complete.
27
30
  doctor Run Feishu auth/runtime doctor checks.
28
31
  probe Probe current Feishu runtime readiness.
29
32
  register-begin Begin Feishu app registration flow.
33
+ complete Complete a pending scan-create registration.
30
34
  """
31
35
  _FEISHU_NATIVE_BOOTSTRAP_USAGE = """Usage:
32
36
  controlmesh feishu native bootstrap
33
37
 
34
38
  Start the product-friendly Feishu native bootstrap flow.
35
39
  """
40
+ _FEISHU_NATIVE_SETUP_USAGE = """Usage:
41
+ controlmesh feishu native setup [--no-start-service]
42
+
43
+ Start the stable Feishu-native setup flow:
44
+ 1. create the official scan-create registration session,
45
+ 2. print the QR/link and user code,
46
+ 3. save a pending registration file,
47
+ 4. auto-complete config writeback after the QR flow is approved.
48
+ """
36
49
  _NATIVE_AUTH_COMMANDS = {
37
50
  "bootstrap": ["auth", "feishu", "setup"],
51
+ "setup": ["auth", "feishu", "register-begin"],
38
52
  "doctor": ["auth", "feishu", "doctor"],
39
53
  "probe": ["auth", "feishu", "probe"],
40
54
  "register-begin": ["auth", "feishu", "register-begin"],
55
+ "complete": ["auth", "feishu", "register-complete"],
41
56
  }
42
57
  _NATIVE_COMMAND_USAGE = {
43
58
  "bootstrap": _FEISHU_NATIVE_BOOTSTRAP_USAGE,
59
+ "setup": _FEISHU_NATIVE_SETUP_USAGE,
44
60
  "doctor": "Usage:\n controlmesh feishu native doctor\n",
45
61
  "probe": "Usage:\n controlmesh feishu native probe\n",
46
62
  "register-begin": "Usage:\n controlmesh feishu native register-begin\n",
63
+ "complete": "Usage:\n controlmesh feishu native complete\n",
47
64
  }
48
65
 
49
66
 
@@ -87,7 +104,7 @@ def _cmd_feishu_native(args: Sequence[str]) -> None:
87
104
 
88
105
  auth_args = _NATIVE_AUTH_COMMANDS.get(action)
89
106
  if auth_args:
90
- cmd_auth(auth_args)
107
+ cmd_auth([*auth_args, *args[1:]])
91
108
  return
92
109
 
93
110
  raise SystemExit(1)
@@ -67,6 +67,7 @@ def _install_extra(name: str) -> None:
67
67
 
68
68
  def print_install_help() -> None:
69
69
  """Show available extras."""
70
+ console = Console()
70
71
  table = Table(show_header=True, header_style="bold")
71
72
  table.add_column(t_rich("install.col_extra"))
72
73
  table.add_column(t_rich("install.col_description"))
@@ -80,7 +81,12 @@ def print_install_help() -> None:
80
81
  )
81
82
  table.add_row(name, desc, status)
82
83
 
83
- Console().print(Panel(table, title="controlmesh install <extra>"))
84
+ console.print(Panel(table, title="controlmesh install <extra>"))
85
+ console.print()
86
+ console.print("After installing ControlMesh, choose a chat setup path:")
87
+ console.print(" Feishu native: controlmesh feishu native setup")
88
+ console.print(" Telegram wizard: controlmesh setup")
89
+ console.print(" Optional extras: controlmesh install matrix | controlmesh install api")
84
90
 
85
91
 
86
92
  def cmd_install(args: list[str]) -> None:
@@ -221,11 +221,12 @@ def _render_app_scope_missing_text(*, unavailable_scopes: list[str], permission_
221
221
  scope_lines = "\n".join(f"- {scope}" for scope in unavailable_scopes)
222
222
  return (
223
223
  "批量授权需要先补齐应用权限。\n\n"
224
- "请打开下面的飞书快捷授权页。页面会直接带上这次缺少的权限,不用再去开发者后台慢慢找:\n"
225
- f"{permission_url}\n\n"
224
+ "我会发一张权限申请卡。请点卡片里的“去申请权限”,它会打开飞书一键补充权限页,"
225
+ "并自动预选这次缺少的权限。\n\n"
226
226
  "缺少的应用权限:\n"
227
227
  f"{scope_lines}\n\n"
228
- "权限保存后,点卡片里的继续,或重新发 `/feishu_auth_all`。"
228
+ "申请并审核通过后,回到卡片点“已完成,继续”,或重新发 `/feishu_auth_all`。\n\n"
229
+ f"如果卡片按钮打不开,可复制这个同款一键补权限链接:\n{permission_url}"
229
230
  )
230
231
 
231
232
 
@@ -11,6 +11,7 @@ from typing import Any
11
11
  from controlmesh.config import AgentConfig
12
12
  from controlmesh.integrations.feishu_auth_kit import run_feishu_auth_kit_json
13
13
  from controlmesh.messenger.feishu.auth.app_info import AppInfoAccessError, FeishuAppInfoCache
14
+ from controlmesh.messenger.feishu.auth.brand import build_permission_url
14
15
  from controlmesh.messenger.feishu.auth.token_store import FeishuTokenStore
15
16
  from controlmesh.messenger.feishu.native_tools import all_native_user_auth_scopes
16
17
 
@@ -74,12 +75,13 @@ def filter_useful_user_auth_scopes(
74
75
 
75
76
 
76
77
  class FeishuNativeAuthUsefulRunner:
77
- """Authorize all currently granted user scopes except excluded enterprise domains."""
78
+ """Authorize useful native scopes while excluding heavy enterprise domains."""
78
79
 
79
80
  def __init__(
80
81
  self,
81
82
  config: AgentConfig,
82
83
  *,
84
+ start_app_permission_flow: Callable[..., Awaitable[None]],
83
85
  start_user_auth_flow: Callable[..., Awaitable[None]],
84
86
  text_reply: Callable[[str, str, str | None], Awaitable[None]],
85
87
  session_factory: Callable[[], Awaitable[Any]] | None = None,
@@ -91,8 +93,10 @@ class FeishuNativeAuthUsefulRunner:
91
93
  token_store: FeishuTokenStore | None = None,
92
94
  batch_size: int = 100,
93
95
  excluded_scope_keywords: Iterable[str] = _DEFAULT_EXCLUDED_SCOPE_KEYWORDS,
96
+ target_scopes: Iterable[str] | None = None,
94
97
  ) -> None:
95
98
  self._config = config
99
+ self._start_app_permission_flow = start_app_permission_flow
96
100
  self._start_user_auth_flow = start_user_auth_flow
97
101
  self._text_reply = text_reply
98
102
  self._session_factory = session_factory
@@ -105,6 +109,7 @@ class FeishuNativeAuthUsefulRunner:
105
109
  self._batch_size = batch_size
106
110
  self._excluded_scope_keywords = tuple(excluded_scope_keywords)
107
111
  self._preserve_scopes = all_native_user_auth_scopes()
112
+ self._target_scopes = tuple(target_scopes or all_native_user_auth_scopes())
108
113
 
109
114
  async def handle_message(self, message: FeishuIncomingText) -> bool:
110
115
  if self._config.feishu.runtime_mode != "native":
@@ -112,9 +117,8 @@ class FeishuNativeAuthUsefulRunner:
112
117
  if not is_native_auth_useful_command(message.text):
113
118
  return False
114
119
 
115
- app_scopes = await self._load_app_scopes()
116
120
  requested_scopes = filter_useful_user_auth_scopes(
117
- app_scopes,
121
+ self._target_scopes,
118
122
  excluded_scope_keywords=self._excluded_scope_keywords,
119
123
  preserve_scopes=self._preserve_scopes,
120
124
  )
@@ -126,12 +130,32 @@ class FeishuNativeAuthUsefulRunner:
126
130
  )
127
131
  return True
128
132
 
133
+ app_scopes = await self._load_app_scopes()
129
134
  user_scopes = self._load_user_scopes(message.sender_id)
130
135
  plan = await self._plan_scopes(
131
136
  requested_scopes=requested_scopes,
132
137
  app_scopes=app_scopes,
133
138
  user_scopes=user_scopes,
134
139
  )
140
+ unavailable_scopes = _string_list(plan.get("unavailable_scopes"))
141
+ if unavailable_scopes:
142
+ permission_url = _permission_url(self._config, unavailable_scopes)
143
+ await self._text_reply(
144
+ message.chat_id,
145
+ _render_app_scope_missing_text(
146
+ unavailable_scopes=unavailable_scopes,
147
+ permission_url=permission_url,
148
+ ),
149
+ message.message_id if self._config.feishu.reply_to_trigger else None,
150
+ )
151
+ await self._start_app_permission_flow(
152
+ message,
153
+ required_scopes=unavailable_scopes,
154
+ permission_url=permission_url,
155
+ retry_text=message.text,
156
+ )
157
+ return True
158
+
135
159
  batches = _list_of_string_lists(plan.get("batches"))
136
160
  next_batch = batches[0] if batches else _string_list(plan.get("missing_user_scopes"))
137
161
  if next_batch:
@@ -162,7 +186,7 @@ class FeishuNativeAuthUsefulRunner:
162
186
  if self._get_app_scopes is not None:
163
187
  return _string_list(await _maybe_await(self._get_app_scopes()))
164
188
  if self._session_factory is None or self._get_tenant_access_token is None:
165
- return []
189
+ return list(self._target_scopes)
166
190
  try:
167
191
  session = await self._session_factory()
168
192
  tenant_access_token = await _maybe_await(self._get_tenant_access_token())
@@ -174,8 +198,8 @@ class FeishuNativeAuthUsefulRunner:
174
198
  token_type="user",
175
199
  )
176
200
  except AppInfoAccessError:
177
- logger.warning("Feishu auth-useful could not inspect app scopes")
178
- return []
201
+ logger.warning("Feishu auth-useful could not inspect app scopes; falling back to optimistic planning")
202
+ return list(self._target_scopes)
179
203
 
180
204
  def _load_user_scopes(self, user_open_id: str) -> list[str]:
181
205
  if self._get_user_scopes is not None:
@@ -214,6 +238,16 @@ async def _maybe_await(value: Any) -> Any:
214
238
  return value
215
239
 
216
240
 
241
+ def _permission_url(config: AgentConfig, scopes: list[str]) -> str:
242
+ return build_permission_url(
243
+ app_id=config.feishu.app_id,
244
+ scopes=scopes,
245
+ brand=config.feishu.brand,
246
+ token_type="user",
247
+ op_from="controlmesh-feishu-auth-useful",
248
+ )
249
+
250
+
217
251
  def _string_list(value: Any) -> list[str]:
218
252
  if not isinstance(value, list):
219
253
  return []
@@ -234,11 +268,24 @@ def _list_of_string_lists(value: Any) -> list[list[str]]:
234
268
 
235
269
  def _render_no_scopes_text() -> str:
236
270
  return (
237
- "当前应用里没有需要补的非黑名单用户权限。\n\n"
271
+ "当前 useful 目标里没有需要补的非黑名单用户权限。\n\n"
238
272
  "这个命令会自动跳过邮件、HR、Payroll、Minutes、OKR、Tasks 这些重域。"
239
273
  )
240
274
 
241
275
 
276
+ def _render_app_scope_missing_text(*, unavailable_scopes: list[str], permission_url: str) -> str:
277
+ scope_lines = "\n".join(f"- {scope}" for scope in unavailable_scopes)
278
+ return (
279
+ "飞书 useful 授权需要先补齐应用权限。\n\n"
280
+ "我会发一张权限申请卡。请点卡片里的“去申请权限”,它会打开飞书一键补充权限页,"
281
+ "并自动预选这次缺少的权限。\n\n"
282
+ "缺少的应用权限:\n"
283
+ f"{scope_lines}\n\n"
284
+ "申请并审核通过后,回到卡片点“已完成,继续”,或重新发 `/feishu_auth_useful`。\n\n"
285
+ f"如果卡片按钮打不开,可复制这个同款一键补权限链接:\n{permission_url}"
286
+ )
287
+
288
+
242
289
  def _render_user_scope_batch_text(*, scopes: list[str], batch_index: int, total_batches: int) -> str:
243
290
  scope_lines = "\n".join(f"- {scope}" for scope in scopes)
244
291
  return (
@@ -386,8 +386,9 @@ def _feishu_card_from_auth_kit(card: object) -> dict[str, Any]:
386
386
  if card.get("type") == "permission_missing":
387
387
  message = (
388
388
  f"{message}\n\n"
389
- "This is an app-level boundary handled by the app owner/admin, not user OAuth.\n"
390
- "After the app permissions are approved, come back here and tap continue / retry."
389
+ "这是应用权限申请步骤,不是用户 OAuth 授权。\n"
390
+ "请先点“去申请权限”打开飞书一键补充权限页,缺失权限会自动预选;"
391
+ "申请并审核通过后,回到这张卡点“已完成,继续”。"
391
392
  )
392
393
  operation_id = str(card.get("operation_id") or "")
393
394
  fields = card.get("fields") if isinstance(card.get("fields"), dict) else {}
@@ -411,7 +412,7 @@ def _feishu_card_from_auth_kit(card: object) -> dict[str, Any]:
411
412
  {
412
413
  "tag": "button",
413
414
  "type": "primary",
414
- "text": {"tag": "plain_text", "content": "Open permission page"},
415
+ "text": {"tag": "plain_text", "content": "去申请权限"},
415
416
  "multi_url": {
416
417
  "url": link_url,
417
418
  "pc_url": link_url,
@@ -422,7 +423,7 @@ def _feishu_card_from_auth_kit(card: object) -> dict[str, Any]:
422
423
  {
423
424
  "tag": "button",
424
425
  "type": "default",
425
- "text": {"tag": "plain_text", "content": "I have granted permissions"},
426
+ "text": {"tag": "plain_text", "content": "已完成,继续"},
426
427
  "value": {
427
428
  "action": "permissions_granted_continue",
428
429
  "operation_id": operation_id,
@@ -1994,6 +1994,7 @@ class FeishuBot:
1994
1994
  self._config,
1995
1995
  session_factory=self._ensure_session,
1996
1996
  get_tenant_access_token=self._get_tenant_access_token,
1997
+ start_app_permission_flow=self._ensure_auth_orchestration_runner().start_permission_flow,
1997
1998
  start_user_auth_flow=self._ensure_card_auth_runner().start_retryable_auth_flow,
1998
1999
  text_reply=self._reply_card_auth_text,
1999
2000
  )
@@ -180,7 +180,7 @@ def build_command_guide_text(
180
180
  "常用命令:",
181
181
  *controlmesh_lines,
182
182
  "/feishu_auth_all — 批量补齐飞书原生权限",
183
- "/feishu_auth_useful — 除黑名单外批量补齐应用已开放权限",
183
+ "/feishu_auth_useful — 补齐常用飞书原生权限, 自动跳过重企业域",
184
184
  "",
185
185
  "Native Commands 提示:",
186
186
  "/compact — native compact context",
@@ -205,7 +205,7 @@ def _command_center_markdown(
205
205
  + "\n".join(command_lines)
206
206
  + "\n\n**Feishu**\n"
207
207
  + "- `/feishu_auth_all` narrow native auth path\n"
208
- + "- `/feishu_auth_useful` bulk auth excluding heavy enterprise domains\n\n"
208
+ + "- `/feishu_auth_useful` useful native auth path excluding heavy enterprise domains\n\n"
209
209
  + "Use `/cm` to open Native Commands for the current CLI.\n\n"
210
210
  + runtime_note
211
211
  )
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "controlmesh"
7
- version = "0.41.0"
7
+ version = "0.41.2"
8
8
  description = "ControlMesh brings official coding CLIs into Telegram, Matrix, and Feishu with persistent workspaces, long-running jobs, and production-friendly bot operations."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
File without changes
File without changes
File without changes