iamt 1.1.27__py3-none-any.whl

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 (482) hide show
  1. iamt/__init__.py +67 -0
  2. iamt/__main__.py +5 -0
  3. iamt/client_config/client_config.py +354 -0
  4. iamt/completers/customCompleter.py +143 -0
  5. iamt/composes/5425CICD/gitea/.rdm.md +4 -0
  6. iamt/composes/5425CICD/gitea/docker-compose.yml +52 -0
  7. iamt/composes/5425CICD/gitlab/.rdm.md +20 -0
  8. iamt/composes/5425CICD/gitlab/config/ssl/.gitkeep +0 -0
  9. iamt/composes/5425CICD/gitlab/docker-compose.yml +32 -0
  10. iamt/composes/5425CICD/gitlabDocs/.rdm.md +3 -0
  11. iamt/composes/5425CICD/gitlabRunner/.rdm.md +5 -0
  12. iamt/composes/5425CICD/sonarQube/.rdm.md +14 -0
  13. iamt/composes/5425CICD/sonarQube/docker-compose.yml +46 -0
  14. iamt/composes/5425CICD/sonarQube/docker-compose3.yml +41 -0
  15. iamt/composes/5425CICD/sonarQube/docker-compose4.yml +33 -0
  16. iamt/composes/5425CICD/sonarQube/sonarqube_conf/.gitkeep +0 -0
  17. iamt/composes/5425CICD/sonarQube/sonarqube_data/.gitkeep +0 -0
  18. iamt/composes/5425CICD/sonarQube/sonarqube_extensions/.gitkeep +0 -0
  19. iamt/composes/5425CICD/sonarQube/sonarqube_logs/.gitkeep +0 -0
  20. iamt/composes/5425CICD/sonarQube/sonarqube_temp/.gitkeep +0 -0
  21. iamt/composes/5435PROMPT/.rdm.md +11 -0
  22. iamt/composes/5435PROMPT/langfuse/.env +276 -0
  23. iamt/composes/5435PROMPT/langfuse/.rdm.md +3 -0
  24. iamt/composes/5435PROMPT/langfuse/docker-compose.yml +166 -0
  25. iamt/composes/5435PROMPT/prompt-optimizer/.rdm.md +3 -0
  26. iamt/composes/5465BASE/alpine/.rdm.md +6 -0
  27. iamt/composes/5465BASE/mysql/.rdm.md +40 -0
  28. iamt/composes/5465BASE/mysql/conf/my.cnf +52 -0
  29. iamt/composes/5465BASE/mysql/docker-compose.yml +31 -0
  30. iamt/composes/5465BASE/mysql/init/01-init.sql +14 -0
  31. iamt/composes/5465BASE/nginx/.rdm.md +16 -0
  32. iamt/composes/5465BASE/nginx/docker-compose.yml +29 -0
  33. iamt/composes/5465BASE/nginx/html/index.html +11 -0
  34. iamt/composes/5465BASE/nginx/nginx/conf.d/default.conf +22 -0
  35. iamt/composes/5465BASE/nginx/nginx/nginx.conf +35 -0
  36. iamt/composes/5465BASE/node/.rdm.md +0 -0
  37. iamt/composes/5465BASE/node/docker-compose.yml +0 -0
  38. iamt/composes/5465BASE/php/.rdm.md +0 -0
  39. iamt/composes/5465BASE/php/docker-compose.yml +0 -0
  40. iamt/composes/5465BASE/redis/.env +11 -0
  41. iamt/composes/5465BASE/redis/.rdm.md +7 -0
  42. iamt/composes/5465BASE/redis/config/redis.conf +57 -0
  43. iamt/composes/5465BASE/redis/docker-compose.yml +35 -0
  44. iamt/composes/5475TTS/GPTsovits/.rdm.md +4 -0
  45. iamt/composes/5475TTS/GPTsovits/docker-compose.yml +34 -0
  46. iamt/composes/5475TTS/indexTTS/.rdm.md +3 -0
  47. iamt/composes/5485MCP/.rdm.md +5 -0
  48. iamt/composes/5485MCP/mcpGateway/.rdm.md +2 -0
  49. iamt/composes/5485MCP/mcpGateway/docker-compose.yml +0 -0
  50. iamt/composes/5485MCP/mcpProxy/.rdm.md +2 -0
  51. iamt/composes/5485MCP/mcpProxy/config.json +53 -0
  52. iamt/composes/5485MCP/mcpProxy/docker-compose.yml +34 -0
  53. iamt/composes/5485MCP/superGateway/.env +2 -0
  54. iamt/composes/5485MCP/superGateway/.rdm.md +17 -0
  55. iamt/composes/5485MCP/superGateway/docker-compose.yml +21 -0
  56. iamt/composes/5495LLM/ollama_nvidia/.rdm.md +21 -0
  57. iamt/composes/5495LLM/ollama_nvidia/docker-compose.yml +24 -0
  58. iamt/composes/5555RAG/QAnything/.rdm.md +5 -0
  59. iamt/composes/5555RAG/bisheng/.rdm.md +4 -0
  60. iamt/composes/5555RAG/devdocs/.rdm.md +4 -0
  61. iamt/composes/5555RAG/devdocs/docker-compose.yml +81 -0
  62. iamt/composes/5555RAG/kotaemon/.rdm.md +3 -0
  63. iamt/composes/5555RAG/kotaemon/docker-compose.yml +3 -0
  64. iamt/composes/5555RAG/llama_index/.rdm.md +3 -0
  65. iamt/composes/5555RAG/ragflow/.rdm.md +4 -0
  66. iamt/composes/5555RAG/ragflow/docker-compose.yml +0 -0
  67. iamt/composes/5556LLMAPI/litellm/.env +29 -0
  68. iamt/composes/5556LLMAPI/litellm/.rdm.md +17 -0
  69. iamt/composes/5556LLMAPI/litellm/config.yaml +211 -0
  70. iamt/composes/5556LLMAPI/litellm/docker-compose.yml +68 -0
  71. iamt/composes/5556LLMAPI/litellm/prometheus.yml +9 -0
  72. iamt/composes/5556LLMAPI/newapi/.env +7 -0
  73. iamt/composes/5556LLMAPI/newapi/docker-compose.yml +54 -0
  74. iamt/composes/5556LLMAPI/newapi_sqlite/.env +3 -0
  75. iamt/composes/5556LLMAPI/newapi_sqlite/.rdm.md +15 -0
  76. iamt/composes/5556LLMAPI/newapi_sqlite/docker-compose.yml +15 -0
  77. iamt/composes/5556LLMAPI/oneapi/.env +5 -0
  78. iamt/composes/5556LLMAPI/oneapi/docker-compose.yml +51 -0
  79. iamt/composes/5556LLMAPI/oneapi_postgresql/docker-compose.yml +51 -0
  80. iamt/composes/5556LLMAPI/oneapi_sqlite/.rdm.md +10 -0
  81. iamt/composes/5556LLMAPI/oneapi_sqlite/docker-compose.yml +15 -0
  82. iamt/composes/5557AICLIENT/chatgpt-web-midjourney-proxy/.rdm.md +4 -0
  83. iamt/composes/5557AICLIENT/librechat/.env +511 -0
  84. iamt/composes/5557AICLIENT/librechat/.env.example +509 -0
  85. iamt/composes/5557AICLIENT/librechat/README.md +10 -0
  86. iamt/composes/5557AICLIENT/librechat/docker-compose.override.yml +21 -0
  87. iamt/composes/5557AICLIENT/librechat/docker-compose.yml +70 -0
  88. iamt/composes/5557AICLIENT/librechat/librechat.yaml +19 -0
  89. iamt/composes/5557AICLIENT/librechat/litellm-config.yml +21 -0
  90. iamt/composes/5557AICLIENT/librechat_oneapi/.env +535 -0
  91. iamt/composes/5557AICLIENT/librechat_oneapi/.rdm.md +19 -0
  92. iamt/composes/5557AICLIENT/librechat_oneapi/docker-compose.override.yml +14 -0
  93. iamt/composes/5557AICLIENT/librechat_oneapi/docker-compose.yml +72 -0
  94. iamt/composes/5557AICLIENT/librechat_oneapi/librechat.yaml +42 -0
  95. iamt/composes/5557AICLIENT/nextChat/.rdm.md +13 -0
  96. iamt/composes/5557AICLIENT/nextChat/docker-compose.yml +2 -0
  97. iamt/composes/5557AICLIENT/openwebui/.env +15 -0
  98. iamt/composes/5557AICLIENT/openwebui/.rdm.md +6 -0
  99. iamt/composes/5557AICLIENT/openwebui/docker-compose.yml +33 -0
  100. iamt/composes/5558AIWORKFLOW/coze_studio/.env +193 -0
  101. iamt/composes/5558AIWORKFLOW/coze_studio/.rdm.md +15 -0
  102. iamt/composes/5558AIWORKFLOW/coze_studio/atlas/README.md +71 -0
  103. iamt/composes/5558AIWORKFLOW/coze_studio/atlas/atlas.hcl +12 -0
  104. iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250703095335_initial.sql +90 -0
  105. iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250703115304_update.sql +2 -0
  106. iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250704040445_update.sql +2 -0
  107. iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250708075302_update.sql +10 -0
  108. iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250710100212_update.sql +38 -0
  109. iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250711034533_update.sql +8 -0
  110. iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250717125913_update.sql +12 -0
  111. iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/atlas.sum +8 -0
  112. iamt/composes/5558AIWORKFLOW/coze_studio/atlas/opencoze_latest_schema.hcl +4057 -0
  113. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/model_template_qwen.yaml +106 -0
  114. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark.yaml +133 -0
  115. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-lite.yaml +108 -0
  116. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-pro-256k.yaml +108 -0
  117. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-pro-32k.yaml +108 -0
  118. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-thinking-pro.yaml +131 -0
  119. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-thinking-vision-pro.yaml +132 -0
  120. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-vision-lite.yaml +131 -0
  121. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-vision-pro.yaml +132 -0
  122. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-seed-1.6-flash.yaml +132 -0
  123. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-seed-1.6-thinking.yaml +132 -0
  124. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-seed-1.6.yaml +132 -0
  125. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_volc_deepseek-r1.yaml +108 -0
  126. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_volc_deepseek-v3.yaml +108 -0
  127. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_basic.yaml +201 -0
  128. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_claude.yaml +90 -0
  129. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_deepseek.yaml +107 -0
  130. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_gemini.yaml +139 -0
  131. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ollama.yaml +84 -0
  132. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_openai.yaml +171 -0
  133. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_qwen.yaml +106 -0
  134. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/common/oauth_schema.json +42 -0
  135. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/bocha_search.yaml +179 -0
  136. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/chestnut_sign.yaml +50 -0
  137. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/gaode_map.yaml +754 -0
  138. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/image_compression.yaml +58 -0
  139. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_authentication_authorization.yaml +56 -0
  140. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_base.yaml +1172 -0
  141. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_calendar.yaml +479 -0
  142. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_docx.yaml +552 -0
  143. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_message.yaml +499 -0
  144. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_sheet.yaml +795 -0
  145. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_task.yaml +409 -0
  146. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_wiki.yaml +95 -0
  147. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/library_search.yaml +73 -0
  148. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/maker_smart_design.yaml +82 -0
  149. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/plugin_meta.yaml +913 -0
  150. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/sky_eye_check.yaml +431 -0
  151. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/sohu_hot_news.yaml +69 -0
  152. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/wolfram_alpha.yaml +100 -0
  153. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/worth_buying.yaml +77 -0
  154. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/prompt/messages_to_query_template_jinja2.json +10 -0
  155. iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/prompt/nl2sql_template_jinja2.json +10 -0
  156. iamt/composes/5558AIWORKFLOW/coze_studio/docker-compose.yml +549 -0
  157. iamt/composes/5558AIWORKFLOW/coze_studio/proxy/go.mod +3 -0
  158. iamt/composes/5558AIWORKFLOW/coze_studio/proxy/proxy.go +100 -0
  159. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/elasticsearch/analysis-smartcn.zip +0 -0
  160. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/elasticsearch/elasticsearch.yml +14 -0
  161. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/elasticsearch/es_index_schema/coze_resource.index-template.json +74 -0
  162. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/elasticsearch/es_index_schema/project_draft.index-template.json +79 -0
  163. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/elasticsearch/setup_es.sh +142 -0
  164. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/etcd/etcd.conf.yml +0 -0
  165. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/.mc/config.json +1 -0
  166. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/claude_v2.png +0 -0
  167. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/connector-api.jpg +0 -0
  168. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/connector-chat-sdk.jpg +0 -0
  169. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/connector-coze.png +0 -0
  170. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/deepseek_v2.png +0 -0
  171. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_agent_icon.png +0 -0
  172. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_app_icon.png +0 -0
  173. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_database_icon.png +0 -0
  174. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_dataset_icon.png +0 -0
  175. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_prompt_icon.png +0 -0
  176. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_workflow_icon.png +0 -0
  177. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/doubao_v2.png +0 -0
  178. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/gemini_v2.png +0 -0
  179. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/image_kn_default_icon.png +0 -0
  180. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/ollama.png +0 -0
  181. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/openai_v2.png +0 -0
  182. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/plugin_default_icon.png +0 -0
  183. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/qwen_v2.png +0 -0
  184. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_10coz_folder.png +0 -0
  185. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_11coz_trans_switch.png +0 -0
  186. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_12coz_location.png +0 -0
  187. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_13coz_link.png +0 -0
  188. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_14coz_clock.png +0 -0
  189. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_1coz_ai.png +0 -0
  190. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_2icon_ai_writing.png +0 -0
  191. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_3coz_imageflow.png +0 -0
  192. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_4icon_aisearch.png +0 -0
  193. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_5icon_summary.png +0 -0
  194. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_6icon_digest.png +0 -0
  195. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_7icon_video.png +0 -0
  196. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_8icon_audio.png +0 -0
  197. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_9coz_variables.png +0 -0
  198. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/table_kn_default_icon.png +0 -0
  199. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/team_default_icon.png +0 -0
  200. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/template_7416518827749425204.png +0 -0
  201. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/template_7418535986059067392.png +0 -0
  202. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/text_kn_default_icon.png +0 -0
  203. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/user_default_icon.png +0 -0
  204. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_ai_ppt.jpeg +0 -0
  205. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_bocha_search.jpeg +0 -0
  206. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_chat_ppt.png +0 -0
  207. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_chestnut_sign.png +0 -0
  208. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_constellation.png +0 -0
  209. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_gaode_map.jpeg +0 -0
  210. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_image_compression.jpeg +0 -0
  211. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_authentication_authorization.png +0 -0
  212. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_base.png +0 -0
  213. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_calendar.png +0 -0
  214. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_docx.png +0 -0
  215. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_message.png +0 -0
  216. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_sheet.png +0 -0
  217. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_task.png +0 -0
  218. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_wiki.png +0 -0
  219. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_library_search.png +0 -0
  220. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_liepin.png +0 -0
  221. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_maker_smart_design.png +0 -0
  222. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_sky_eye_check.jpeg +0 -0
  223. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_sohu_hot_news.png +0 -0
  224. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_wolfram_alpha.png +0 -0
  225. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_worth_buying.jpeg +0 -0
  226. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/mysql/schema.sql +836 -0
  227. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/mysql/sql_init.sql +666 -0
  228. iamt/composes/5558AIWORKFLOW/coze_studio/volumes/rocketmq/broker.conf +28 -0
  229. iamt/composes/5558AIWORKFLOW/dify/.env +1090 -0
  230. iamt/composes/5558AIWORKFLOW/dify/.rdm.md +11 -0
  231. iamt/composes/5558AIWORKFLOW/dify/certbot/README.md +76 -0
  232. iamt/composes/5558AIWORKFLOW/dify/certbot/docker-entrypoint.sh +30 -0
  233. iamt/composes/5558AIWORKFLOW/dify/certbot/update-cert.template.txt +19 -0
  234. iamt/composes/5558AIWORKFLOW/dify/couchbase-server/Dockerfile +4 -0
  235. iamt/composes/5558AIWORKFLOW/dify/couchbase-server/init-cbserver.sh +44 -0
  236. iamt/composes/5558AIWORKFLOW/dify/docker-compose.yml +1174 -0
  237. iamt/composes/5558AIWORKFLOW/dify/elasticsearch/docker-entrypoint.sh +25 -0
  238. iamt/composes/5558AIWORKFLOW/dify/image.png +0 -0
  239. iamt/composes/5558AIWORKFLOW/dify/nginx/conf.d/default.conf.template +48 -0
  240. iamt/composes/5558AIWORKFLOW/dify/nginx/docker-entrypoint.sh +42 -0
  241. iamt/composes/5558AIWORKFLOW/dify/nginx/https.conf.template +9 -0
  242. iamt/composes/5558AIWORKFLOW/dify/nginx/nginx.conf.template +34 -0
  243. iamt/composes/5558AIWORKFLOW/dify/nginx/proxy.conf.template +11 -0
  244. iamt/composes/5558AIWORKFLOW/dify/nginx/ssl/.gitkeep +0 -0
  245. iamt/composes/5558AIWORKFLOW/dify/pgvector/docker-entrypoint.sh +24 -0
  246. iamt/composes/5558AIWORKFLOW/dify/ssrf_proxy/docker-entrypoint.sh +42 -0
  247. iamt/composes/5558AIWORKFLOW/dify/ssrf_proxy/squid.conf.template +56 -0
  248. iamt/composes/5558AIWORKFLOW/dify/startupscripts/init.sh +13 -0
  249. iamt/composes/5558AIWORKFLOW/dify/startupscripts/init_user.script +10 -0
  250. iamt/composes/5558AIWORKFLOW/dify/tidb/config/pd.toml +4 -0
  251. iamt/composes/5558AIWORKFLOW/dify/tidb/config/tiflash-learner.toml +13 -0
  252. iamt/composes/5558AIWORKFLOW/dify/tidb/config/tiflash.toml +19 -0
  253. iamt/composes/5558AIWORKFLOW/dify/tidb/docker-compose.yaml +62 -0
  254. iamt/composes/5558AIWORKFLOW/dify/volumes/myscale/config/users.d/custom_users_config.xml +17 -0
  255. iamt/composes/5558AIWORKFLOW/dify/volumes/oceanbase/init.d/vec_memory.sql +1 -0
  256. iamt/composes/5558AIWORKFLOW/dify/volumes/opensearch/opensearch_dashboards.yml +222 -0
  257. iamt/composes/5558AIWORKFLOW/dify/volumes/sandbox/conf/config.yaml +14 -0
  258. iamt/composes/5558AIWORKFLOW/dify/volumes/sandbox/conf/config.yaml.example +35 -0
  259. iamt/composes/5558AIWORKFLOW/dify/volumes/sandbox/dependencies/python-requirements.txt +0 -0
  260. iamt/composes/5558AIWORKFLOW/fastgpt/.rdm.md +14 -0
  261. iamt/composes/5558AIWORKFLOW/fastgpt/docker-compose-pgvector.yml +177 -0
  262. iamt/composes/5558AIWORKFLOW/langflow/.rdm.md +9 -0
  263. iamt/composes/5558AIWORKFLOW/langflow/docker-compose.yml +30 -0
  264. iamt/composes/5558AIWORKFLOW/n8n/.env +6 -0
  265. iamt/composes/5558AIWORKFLOW/n8n/.rdm.md +24 -0
  266. iamt/composes/5558AIWORKFLOW/n8n/docker-compose.yml +52 -0
  267. iamt/composes/5558AIWORKFLOW/n8n/init-data.sh +13 -0
  268. iamt/composes/5558AIWORKFLOW/n8n/n8n_storage/.gitkeep +0 -0
  269. iamt/composes/5559MJAPI/midjourney-proxy/.rdm.md +10 -0
  270. iamt/composes/5559MJAPI/midjourney-proxy/docker-compose.yml +0 -0
  271. iamt/composes/5559MJAPI/midjourney-proxy2/.rdm.md +5 -0
  272. iamt/composes/5559MJAPI/midjourney-proxy2/docker-compose.yml +21 -0
  273. iamt/composes/5655PROXY/3xui/.rdm.md +12 -0
  274. iamt/composes/5655PROXY/3xui/docker-compose.yml +15 -0
  275. iamt/composes/5655PROXY/hui/.rdm.md +6 -0
  276. iamt/composes/5655PROXY/hui/docker-compose.yml +18 -0
  277. iamt/composes/5655PROXY/mihomo/.rdm.config.md +17 -0
  278. iamt/composes/5655PROXY/mihomo/.rdm.md +40 -0
  279. iamt/composes/5655PROXY/mihomo/clash_meta_config/config.yaml +584 -0
  280. iamt/composes/5655PROXY/mihomo/clash_meta_config/geoip.metadb +0 -0
  281. iamt/composes/5655PROXY/mihomo/clash_meta_config/sub1.yaml +7 -0
  282. iamt/composes/5655PROXY/mihomo/clash_meta_config/sub2.yaml +56 -0
  283. iamt/composes/5655PROXY/mihomo/docker-compose.yml +33 -0
  284. iamt/composes/5655PROXY/nginx/.rdm +2 -0
  285. iamt/composes/5655PROXY/nginx/docker-compose.yml +21 -0
  286. iamt/composes/5655PROXY/sub-web/.rdm.md +9 -0
  287. iamt/composes/5655PROXY/sub2clash/.rdm.md +3 -0
  288. iamt/composes/5655PROXY/sub2clash/docker-compose.yml +21 -0
  289. iamt/composes/5655PROXY/subconverter/.rdm.md +4 -0
  290. iamt/composes/5655PROXY/v2ray/.rdm.md +3 -0
  291. iamt/composes/5655PROXY/v2raya/.rdm.md +33 -0
  292. iamt/composes/5655PROXY/v2raya/docker-compose.yml +19 -0
  293. iamt/composes/5655PROXY/xui/.rdm.md +3 -0
  294. iamt/composes/5755COMFYUI/akegarasu_lora-scripts/.rdm.md +18 -0
  295. iamt/composes/5755COMFYUI/akegarasu_lora-scripts/Dockerfile-for-Mainland-China +42 -0
  296. iamt/composes/5755COMFYUI/akegarasu_lora-scripts/docker-compose.yml +39 -0
  297. iamt/composes/5755COMFYUI/comfyui_boot/.rdm.md +29 -0
  298. iamt/composes/5755COMFYUI/comfyui_boot/docker-compose.yml +0 -0
  299. iamt/composes/5755COMFYUI/comfyui_boot_cu121/.env +1 -0
  300. iamt/composes/5755COMFYUI/comfyui_boot_cu121/.rdm.md +20 -0
  301. iamt/composes/5755COMFYUI/comfyui_boot_cu121/docker-compose.yml +45 -0
  302. iamt/composes/5755COMFYUI/comfyui_boot_cu121/storage/.gitkeep +0 -0
  303. iamt/composes/5755COMFYUI/comfyui_boot_cu124-cn/.rdm.md +22 -0
  304. iamt/composes/5755COMFYUI/comfyui_boot_cu124-cn/docker-compose.yml +31 -0
  305. iamt/composes/5755COMFYUI/comfyui_boot_minimal/.rdm.md +26 -0
  306. iamt/composes/5755COMFYUI/comfyui_boot_minimal/docker-compose.yml +0 -0
  307. iamt/composes/5755COMFYUI/comfyui_boot_slim/.env +0 -0
  308. iamt/composes/5755COMFYUI/comfyui_boot_slim/.rdm.md +23 -0
  309. iamt/composes/5755COMFYUI/comfyui_boot_slim/docker-compose.yml +24 -0
  310. iamt/composes/5755COMFYUI/swarmui/.rdm.md +5 -0
  311. iamt/composes/5755COMFYUI/swarmui/docker-compose.yml +38 -0
  312. iamt/composes/5855MEDIA/any-listen/.rdm.md +7 -0
  313. iamt/composes/5855MEDIA/any-listen/data/config.cjs +20 -0
  314. iamt/composes/5855MEDIA/any-listen/docker-compose.yml +10 -0
  315. iamt/composes/5855MEDIA/blackcandy/.rdm.md +1 -0
  316. iamt/composes/5855MEDIA/koel/.rdm.md +17 -0
  317. iamt/composes/5855MEDIA/koel/docker-compose.yml +41 -0
  318. iamt/composes/5855MEDIA/navidrome/.rdm.md +15 -0
  319. iamt/composes/5855MEDIA/navidrome/docker-compose.yml +15 -0
  320. iamt/composes/5955BACKUP/gobackup/.rdm.md +9 -0
  321. iamt/composes/5955BACKUP/gobackup/docker-compose.yml +19 -0
  322. iamt/composes/5955BACKUP/gobackup/gobackup/gobackup.yml +5 -0
  323. iamt/composes/5955BACKUP/rclone/.rdm.md +6 -0
  324. iamt/composes/5955BACKUP/rclone/docker-compose.yml +0 -0
  325. iamt/composes/5965SYNC/verysync/.rdm.md +16 -0
  326. iamt/composes/5965SYNC/verysync/docker-compose.yml +22 -0
  327. iamt/composes/6055DATABASE/adminer/.rdm.md +13 -0
  328. iamt/composes/6055DATABASE/cloudbeaver/.rdm.md +10 -0
  329. iamt/composes/6055DATABASE/mongodb/.env +7 -0
  330. iamt/composes/6055DATABASE/mongodb/.rdm.md +8 -0
  331. iamt/composes/6055DATABASE/mongodb/docker-compose.yml +24 -0
  332. iamt/composes/6055DATABASE/mongodbExpress/.env +10 -0
  333. iamt/composes/6055DATABASE/mongodbExpress/.rdm.md +14 -0
  334. iamt/composes/6055DATABASE/mongodbExpress/docker-compose.yml +24 -0
  335. iamt/composes/6055DATABASE/mysql/.env +0 -0
  336. iamt/composes/6055DATABASE/mysql/.rdm.md +0 -0
  337. iamt/composes/6055DATABASE/mysql/docker-compose.yml +26 -0
  338. iamt/composes/6055DATABASE/mysql/my.cnf +107 -0
  339. iamt/composes/6155AUTH/authentik/.env +10 -0
  340. iamt/composes/6155AUTH/authentik/.rdm.md +7 -0
  341. iamt/composes/6155AUTH/authentik/docker-compose.yml +90 -0
  342. iamt/composes/6155AUTH/casdoor/conf/app.conf +30 -0
  343. iamt/composes/6155AUTH/casdoor/docker-compose.yml +20 -0
  344. iamt/composes/6255Monitor/dcgm_exporter/.rdm.md +5 -0
  345. iamt/composes/6255Monitor/dcgm_exporter/docker-compose.yml +34 -0
  346. iamt/composes/6255Monitor/grafana/.env +5 -0
  347. iamt/composes/6255Monitor/grafana/.rdm.md +0 -0
  348. iamt/composes/6255Monitor/grafana/docker-compose.yml +22 -0
  349. iamt/composes/6255Monitor/node_exporter/.env +1 -0
  350. iamt/composes/6255Monitor/node_exporter/docker-compose.yml +19 -0
  351. iamt/composes/6255Monitor/prometheus/.env +6 -0
  352. iamt/composes/6255Monitor/prometheus/.rdm.md +8 -0
  353. iamt/composes/6255Monitor/prometheus/conf/prometheus.yml +39 -0
  354. iamt/composes/6255Monitor/prometheus/docker-compose.yml +28 -0
  355. iamt/composes/6255Monitor/prometheus/prometheus/.gitkeep +0 -0
  356. iamt/composes/6355SSL/certbot/.rdm.md +4 -0
  357. iamt/composes/6355SSL/certd/.rdm.md +4 -0
  358. iamt/composes/6355SSL/certimate/.rdm.md +23 -0
  359. iamt/composes/6355SSL/certimate/docker-compose.yml +17 -0
  360. iamt/composes/6455Storage/fileBrowser/.env +5 -0
  361. iamt/composes/6455Storage/fileBrowser/.rdm.md +17 -0
  362. iamt/composes/6455Storage/fileBrowser/docker-compose.yml +14 -0
  363. iamt/composes/6455Storage/fileBrowser/filebrowser.db +0 -0
  364. iamt/composes/6455Storage/fileBrowser/settings.json +8 -0
  365. iamt/composes/6455Storage/kskypro/.env +3 -0
  366. iamt/composes/6455Storage/kskypro/.rdm.md +30 -0
  367. iamt/composes/6455Storage/kskypro/buildimg/000-default.conf.template +45 -0
  368. iamt/composes/6455Storage/kskypro/buildimg/Dockerfile +97 -0
  369. iamt/composes/6455Storage/kskypro/buildimg/LICENSE +661 -0
  370. iamt/composes/6455Storage/kskypro/buildimg/entrypoint.sh +29 -0
  371. iamt/composes/6455Storage/kskypro/buildimg/ports.conf.template +2 -0
  372. iamt/composes/6455Storage/kskypro/buildimg/ssl/certs/ssl-cert-snakeoil.pem +21 -0
  373. iamt/composes/6455Storage/kskypro/buildimg/ssl/private/ssl-cert-snakeoil.key +28 -0
  374. iamt/composes/6455Storage/kskypro/docker-compose.yml +43 -0
  375. iamt/composes/6455Storage/kskypro/env.conf +43 -0
  376. iamt/composes/6455Storage/kskypro/mysql/conf/.gitkeep +0 -0
  377. iamt/composes/6455Storage/kskypro/mysql/data/.gitkeep +0 -0
  378. iamt/composes/6455Storage/kskypro/mysql/log/.gitkeep +0 -0
  379. iamt/composes/6455Storage/lskypro/.rdm.md +15 -0
  380. iamt/composes/6455Storage/lskypro/Dockerfile +12 -0
  381. iamt/composes/6455Storage/lskypro/docker-compose.yml +51 -0
  382. iamt/composes/6455Storage/minio/.rdm.md +1 -0
  383. iamt/composes/6455Storage/minio/docker-compose.yml +31 -0
  384. iamt/composes/6455Storage/nextcloud/.rdm.md +0 -0
  385. iamt/composes/6455Storage/nextcloud/docker-compose.yml +25 -0
  386. iamt/composes/6455Storage/seafile/.env +46 -0
  387. iamt/composes/6455Storage/seafile/.rdm.md +31 -0
  388. iamt/composes/6455Storage/seafile/caddy.yml +26 -0
  389. iamt/composes/6455Storage/seafile/seadoc.yml +39 -0
  390. iamt/composes/6455Storage/seafile/seafile-server.yml +79 -0
  391. iamt/composes/6555DNS/ddnsgo/.env +8 -0
  392. iamt/composes/6555DNS/ddnsgo/.rdm.md +7 -0
  393. iamt/composes/6555DNS/ddnsgo/docker-compose.yml +17 -0
  394. iamt/composes/6555DNS/lucky/.rdm.md +4 -0
  395. iamt/composes/6555DNS/lucky/docker-compose.yml +14 -0
  396. iamt/composes/6655CONTAINER/harbor/.rdm.md +1 -0
  397. iamt/composes/6755SHOP/dujiaoka/.rdm.md +10 -0
  398. iamt/composes/6755SHOP/dujiaoka/docker-compose.yml +37 -0
  399. iamt/composes/6755SHOP/dujiaoka/env.conf +46 -0
  400. iamt/composes/6755SHOP/dujiaoka/storage/.gitkeep +0 -0
  401. iamt/composes/6755SHOP/dujiaoka/uploads/.gitkeep +0 -0
  402. iamt/composes/6755SHOP/dujiaoka2/.rdm.md +3 -0
  403. iamt/composes/8888Others/apitable/docker-compose.yml +233 -0
  404. iamt/composes/8888Others/changeDetect/README +18 -0
  405. iamt/composes/8888Others/changeDetect/docker-compose.yml +44 -0
  406. iamt/composes/8888Others/codeServer/.rdm.md +7 -0
  407. iamt/composes/8888Others/codeServer/docker-compose.yml +39 -0
  408. iamt/composes/8888Others/douyin_tiktok_download_api/.rdm.md +19 -0
  409. iamt/composes/8888Others/douyin_tiktok_download_api/config.yaml +32 -0
  410. iamt/composes/8888Others/douyin_tiktok_download_api/docker-compose.yml +17 -0
  411. iamt/composes/8888Others/kasmweb_chrome/.rdm.md +19 -0
  412. iamt/composes/8888Others/kasmweb_chrome/docker-compose.yml +17 -0
  413. iamt/composes/8888Others/meilisearch/.env +10 -0
  414. iamt/composes/8888Others/meilisearch/config/config.toml +132 -0
  415. iamt/composes/8888Others/meilisearch/docker-compose.yml +34 -0
  416. iamt/composes/8888Others/memcached/.env +8 -0
  417. iamt/composes/8888Others/memcached/docker-compose.yml +20 -0
  418. iamt/composes/8888Others/minio/docker-compose.yml +20 -0
  419. iamt/composes/8888Others/minio/minio +9 -0
  420. iamt/composes/8888Others/neko/README.md +11 -0
  421. iamt/composes/8888Others/neko/docker-compose.yml +16 -0
  422. iamt/composes/8888Others/ocrmypdf/README.md +14 -0
  423. iamt/composes/8888Others/outline/docker-compose.yml +76 -0
  424. iamt/composes/8888Others/outline/docker.env +164 -0
  425. iamt/composes/8888Others/outline/redis.conf +0 -0
  426. iamt/composes/8888Others/pandas_ai/.rdm.md +5 -0
  427. iamt/composes/8888Others/pandas_ai/docker-compose.yml +49 -0
  428. iamt/composes/8888Others/rancher/.rdm.md +4 -0
  429. iamt/composes/8888Others/rustdesk/.env +10 -0
  430. iamt/composes/8888Others/rustdesk/docker-compose.yml +29 -0
  431. iamt/composes/8888Others/ttrss/docker-compose.yml +74 -0
  432. iamt/composes/8888Others/vultrCLI/.rdm.md +9 -0
  433. iamt/composes/8888Others/wewerss/docker-compose.yml +44 -0
  434. iamt/dcd/dcd.py +337 -0
  435. iamt/decorators/singleton.py +224 -0
  436. iamt/modules/_utils/_utils.py +1 -0
  437. iamt/modules/_utils/arch.py +22 -0
  438. iamt/modules/_utils/cleanup_network_config.py +68 -0
  439. iamt/modules/_utils/github.py +123 -0
  440. iamt/modules/_utils/setup_apt_sources.py +94 -0
  441. iamt/modules/_utils/steps.py +26 -0
  442. iamt/modules/claudecode/claudecode.py +0 -0
  443. iamt/modules/dcdtask/dcdtask.py +164 -0
  444. iamt/modules/docker/docker.py +370 -0
  445. iamt/modules/docker/roles/role.py +54 -0
  446. iamt/modules/docker/templates/daemon/daemon_multi_mirrors.json +21 -0
  447. iamt/modules/docker/templates/gpgkey/debian_gpgkey +62 -0
  448. iamt/modules/docker/templates/gpgkey/ubuntu_gpgkey +62 -0
  449. iamt/modules/github/ghcli.py +197 -0
  450. iamt/modules/nvm/nvm.py +183 -0
  451. iamt/modules/nvm/roles/role.py +24 -0
  452. iamt/modules/runlinetask/runlinetask.py +22 -0
  453. iamt/modules/ubuntud/antigravity.py +191 -0
  454. iamt/modules/ubuntud/chrome.py +111 -0
  455. iamt/modules/ubuntud/fcitx5.py +0 -0
  456. iamt/modules/ubuntud/ibus.py +53 -0
  457. iamt/modules/ubuntud/kiro.py +41 -0
  458. iamt/modules/ubuntud/rime_ice.py +173 -0
  459. iamt/modules/ubuntud/roles/role.py +28 -0
  460. iamt/modules/ubuntud/templates/ibus/ibus_rime.custom.yaml +3 -0
  461. iamt/modules/ubuntud/v2ray-core.py +238 -0
  462. iamt/modules/ubuntud/v2rayN.py +127 -0
  463. iamt/modules/ubuntud/vscode.py +162 -0
  464. iamt/modules/uv/roles/role.py +56 -0
  465. iamt/modules/uv/templates/uv.toml +5 -0
  466. iamt/modules/uv/uv.py +315 -0
  467. iamt/modules/vagrant/templates/Vagrantfile +25 -0
  468. iamt/modules/vagrant/vagrant.py +91 -0
  469. iamt/modules/vboxinit/base_box_init.py +142 -0
  470. iamt/modules/vboxinit/roles/role.py +15 -0
  471. iamt/role/role.py +134 -0
  472. iamt/run_file/run_file.py +121 -0
  473. iamt/run_line/commands.py +70 -0
  474. iamt/run_line/run_line.py +78 -0
  475. iamt/task/task.py +108 -0
  476. iamt/utils/__init__.py +6 -0
  477. iamt/utils/config_saver.py +90 -0
  478. iamt/utils/task_tracker.py +136 -0
  479. iamt-1.1.27.dist-info/METADATA +19 -0
  480. iamt-1.1.27.dist-info/RECORD +482 -0
  481. iamt-1.1.27.dist-info/WHEEL +4 -0
  482. iamt-1.1.27.dist-info/entry_points.txt +5 -0
@@ -0,0 +1,91 @@
1
+ from pathlib import Path
2
+
3
+ import questionary
4
+ from fabric import task
5
+ from jinja2 import Template
6
+
7
+
8
+ # 模板目录路径
9
+ TEMPLATES_DIR = Path(__file__).parent / "templates"
10
+
11
+
12
+ @task
13
+ def gen_vagrantfile_interactive(_) -> None:
14
+ """通过交互式问答生成 Vagrantfile"""
15
+ # region 交互式获取参数
16
+ hostname = questionary.text("虚拟机主机名:", default="u13").ask()
17
+ hostip = questionary.text("私有网络 IP:", default="10.10.10.13").ask()
18
+ hostcpu = questionary.text("CPU 核心数:", default="8").ask()
19
+ hostmem = questionary.text("内存大小 (MB):", default="8192").ask()
20
+ hostimg = questionary.text("Vagrant box 镜像:", default="vb/ubuntu_desktop2404").ask()
21
+ hostport = questionary.text("SSH 端口转发:", default="10013").ask()
22
+ output = questionary.text("输出文件名:", default="Vagrantfile").ask()
23
+ create_dir = questionary.confirm("是否创建 hostname 文件夹:", default=False).ask()
24
+ # endregion
25
+
26
+ # region 调用 gen_vagrantfile 生成文件
27
+ gen_vagrantfile(
28
+ _,
29
+ hostname=hostname,
30
+ hostip=hostip,
31
+ hostcpu=hostcpu,
32
+ hostmem=hostmem,
33
+ hostimg=hostimg,
34
+ hostport=hostport,
35
+ output=output,
36
+ create_dir=create_dir,
37
+ )
38
+ # endregion
39
+
40
+
41
+ @task
42
+ def gen_vagrantfile(
43
+ _,
44
+ hostname: str = "vagrant-vm",
45
+ hostip: str = "10.10.10.100",
46
+ hostcpu: str = "2",
47
+ hostmem: str = "2048",
48
+ hostimg: str = "ubuntu/jammy64",
49
+ hostport: str = "2222",
50
+ output: str = "Vagrantfile",
51
+ create_dir: bool = False,
52
+ ) -> None:
53
+ """根据模板在当前目录下生成 Vagrantfile
54
+
55
+ Args:
56
+ _: Fabric Context 对象 (本地任务不使用)
57
+ hostname: 虚拟机主机名
58
+ hostip: 虚拟机私有网络 IP
59
+ hostcpu: CPU 核心数
60
+ hostmem: 内存大小 (MB)
61
+ hostimg: Vagrant box 镜像名称
62
+ hostport: SSH 端口转发的主机端口
63
+ output: 输出文件名
64
+ create_dir: 是否在当前目录下创建以 hostname 命名的文件夹
65
+ """
66
+ # region 读取并渲染模板
67
+ template_path = TEMPLATES_DIR / "Vagrantfile"
68
+ template_content = template_path.read_text(encoding="utf-8")
69
+ template = Template(template_content)
70
+
71
+ rendered = template.render(
72
+ hostname=hostname,
73
+ hostip=hostip,
74
+ hostcpu=hostcpu,
75
+ hostmem=hostmem,
76
+ hostimg=hostimg,
77
+ hostport=hostport,
78
+ )
79
+ # endregion
80
+
81
+ # region 确定输出路径并写入文件
82
+ if create_dir:
83
+ host_dir = Path(hostname)
84
+ host_dir.mkdir(exist_ok=True)
85
+ output_path = host_dir / output
86
+ else:
87
+ output_path = Path(output)
88
+
89
+ output_path.write_text(rendered, encoding="utf-8", newline="\r\n")
90
+ print(f"[OK] Vagrantfile 已生成: {output_path.absolute()}")
91
+ # endregion
@@ -0,0 +1,142 @@
1
+ import questionary
2
+ from fabric import Connection, task
3
+ from invoke import Config
4
+ from .._utils.setup_apt_sources import setup_apt_sources
5
+ from .._utils.setup_apt_sources import select_apt_sources
6
+ from .._utils.cleanup_network_config import cleanup_network_config
7
+
8
+ # 设置远程命令环境变量,使用英文输出避免中文乱码
9
+ ENV_LANG_C = {"LANG": "C", "LC_ALL": "C"}
10
+
11
+
12
+ # region Debian 初始化任务
13
+
14
+
15
+
16
+ @task
17
+ def apt_update_and_install_base_package(conn: Connection) -> None:
18
+ """apt update 和 安装依赖包 """
19
+ conn.sudo("apt-get update -y", env=ENV_LANG_C)
20
+ # conn.sudo("apt-get upgrade -y", env=ENV_LANG_C)
21
+ conn.sudo("apt-get install -y vim sudo curl wget sshpass", env=ENV_LANG_C)
22
+
23
+
24
+ @task
25
+ def setup_vagrant_user(conn: Connection) -> None:
26
+ """确保 vagrant 用户存在并配置SSH"""
27
+
28
+ # 创建用户
29
+ conn.sudo("id vagrant || useradd -m -s /bin/bash vagrant", warn=True, env=ENV_LANG_C)
30
+
31
+ # 设置密码
32
+ conn.run("echo 'vagrant:vagrant' > /tmp/vagrant_passwd")
33
+ conn.sudo("chpasswd < /tmp/vagrant_passwd")
34
+ conn.run("rm -f /tmp/vagrant_passwd")
35
+
36
+ # 无密码 sudo
37
+ conn.run("echo 'vagrant ALL=(ALL) NOPASSWD:ALL' > /tmp/no-password-sudo")
38
+ conn.sudo("mv /tmp/no-password-sudo /etc/sudoers.d/no-password-sudo")
39
+ conn.sudo("chmod 440 /etc/sudoers.d/no-password-sudo")
40
+
41
+ # 配置 .ssh 目录
42
+ conn.sudo("mkdir -p /home/vagrant/.ssh")
43
+ conn.sudo("chmod 700 /home/vagrant/.ssh")
44
+ conn.sudo("chown vagrant:vagrant /home/vagrant/.ssh")
45
+
46
+ # 添加 vagrant insecure key
47
+ insecure_keys = """ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key
48
+ ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN1YdxBpNlzxDqfJyw/QKow1F+wvG9hXGoqiysfJOn5Y vagrant insecure public key"""
49
+ conn.run(f"echo '{insecure_keys}' > /tmp/vagrant_authorized_keys")
50
+ conn.sudo("mv /tmp/vagrant_authorized_keys /home/vagrant/.ssh/authorized_keys")
51
+ conn.sudo("chmod 600 /home/vagrant/.ssh/authorized_keys")
52
+ conn.sudo("chown vagrant:vagrant /home/vagrant/.ssh/authorized_keys")
53
+
54
+
55
+ @task
56
+ def install_kernel_dev_packages(conn: Connection) -> None:
57
+ """安装内核开发相关包 (用于 VirtualBox Guest Additions)"""
58
+ # 获取当前内核版本
59
+ result = conn.run("uname -r", hide=True)
60
+ kernel_version = result.stdout.strip()
61
+
62
+ conn.sudo("apt-get install -y build-essential dkms", env=ENV_LANG_C)
63
+ conn.sudo(f"apt-get install -y linux-headers-{kernel_version}", warn=True, env=ENV_LANG_C)
64
+
65
+
66
+ def download_vbox_guest_additions(version: str, dest_dir: str = ".") -> str:
67
+ """下载 VirtualBox Guest Additions ISO 到本地主机
68
+
69
+ Args:
70
+ version: VirtualBox 版本号 (如 "7.0.14")
71
+ dest_dir: 下载目标目录,默认为当前目录
72
+
73
+ Returns:
74
+ 下载后的 ISO 文件路径
75
+ """
76
+ import urllib.request
77
+ import os
78
+
79
+ print(f"\n[任务] 下载 VirtualBox Guest Additions {version}")
80
+
81
+ iso_filename = f"VBoxGuestAdditions_{version}.iso"
82
+ iso_path = os.path.join(dest_dir, iso_filename)
83
+ download_url = f"https://download.virtualbox.org/virtualbox/{version}/{iso_filename}"
84
+
85
+ # 检查文件是否已存在
86
+ if os.path.exists(iso_path):
87
+ print(f" ISO 文件已存在: {iso_path}")
88
+ return iso_path
89
+
90
+ # 下载 ISO 并显示进度
91
+ print(f" 正在下载: {download_url}")
92
+
93
+ def progress_hook(block_num: int, block_size: int, total_size: int) -> None:
94
+ if total_size > 0:
95
+ percent = min(100, block_num * block_size * 100 // total_size)
96
+ print(f"\r 下载进度: {percent}%", end="", flush=True)
97
+
98
+ urllib.request.urlretrieve(download_url, iso_path, progress_hook)
99
+ print(f"\n 下载完成: {iso_path}")
100
+
101
+ return iso_path
102
+
103
+
104
+ @task
105
+ def install_vbox_guest_additions(conn: Connection, version: str = "7.2.4") -> None:
106
+ """下载 上传 挂载并安装 VirtualBox Guest Additions
107
+
108
+ Args:
109
+ conn: Fabric Connection 对象
110
+ version: VirtualBox Guest Additions 版本号,默认为 "7.2.4"
111
+ """
112
+ iso_path=download_vbox_guest_additions(version=version)
113
+ # 上传 ISO
114
+ conn.put(iso_path, "/tmp/VBoxGuestAdditions.iso")
115
+
116
+ # 挂载
117
+ conn.sudo("mkdir -p /media/VBoxGuestAdditions")
118
+ conn.sudo("mount -o loop,ro /tmp/VBoxGuestAdditions.iso /media/VBoxGuestAdditions", warn=True)
119
+
120
+ # 执行安装
121
+ try:
122
+ conn.sudo("sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run --nox11", warn=True)
123
+ finally:
124
+ # 卸载
125
+ conn.sudo("umount /media/VBoxGuestAdditions", warn=True)
126
+
127
+ # 验证安装
128
+ result = conn.sudo("/sbin/rcvboxadd status", warn=True)
129
+ print(f" Guest Additions 状态: {result.stdout.strip()}")
130
+
131
+ @task
132
+ def testssh(conn: Connection):
133
+ """SSH 连通测试"""
134
+ result = conn.run("echo 'SSH connection OK'", hide=True)
135
+ print(f"✓ {result.stdout.strip()}")
136
+
137
+
138
+ # endregion
139
+
140
+
141
+
142
+
@@ -0,0 +1,15 @@
1
+ from fabric import Connection
2
+
3
+ from ..._utils.setup_apt_sources import setup_apt_sources
4
+ from ..._utils.cleanup_network_config import cleanup_network_config
5
+ from ..base_box_init import *
6
+
7
+
8
+
9
+ def create_vagrant_base_box(c:Connection):
10
+ setup_apt_sources(c)
11
+ apt_update_and_install_base_package(c)
12
+ setup_vagrant_user(c)
13
+ install_kernel_dev_packages(c)
14
+ install_vbox_guest_additions(c)
15
+ cleanup_network_config(c)
iamt/role/role.py ADDED
@@ -0,0 +1,134 @@
1
+ import inspect
2
+ import importlib
3
+ from pathlib import Path
4
+
5
+
6
+ class Role:
7
+
8
+ def _scan_roles(self) -> dict[str, dict]:
9
+ """扫描 modules 目录下所有 roles 文件夹中定义的函数"""
10
+ roles = {}
11
+ modules_path = Path(__file__).parent.parent / "modules"
12
+
13
+ # region 遍历 modules 目录下的非下划线开头的文件夹
14
+ for module_dir in modules_path.iterdir():
15
+ if not module_dir.is_dir() or module_dir.name.startswith("_"):
16
+ continue
17
+
18
+ roles_dir = module_dir / "roles"
19
+ if not roles_dir.exists() or not roles_dir.is_dir():
20
+ continue
21
+
22
+ # region 扫描 roles 目录下的所有 Python 文件
23
+ for py_file in roles_dir.glob("*.py"):
24
+ if py_file.name.startswith("_"):
25
+ continue
26
+
27
+ # 构建模块导入路径
28
+ relative_path = py_file.relative_to(Path(__file__).parent.parent)
29
+ module_name = ".".join(relative_path.with_suffix("").parts)
30
+
31
+ try:
32
+ module = importlib.import_module(f".{module_name}", package="iamt")
33
+ # 查找在该模块中定义的函数(排除导入的函数)
34
+ for name, obj in vars(module).items():
35
+ if inspect.isfunction(obj) and obj.__module__ == module.__name__:
36
+ roles[name] = {
37
+ "func": obj,
38
+ "module": module_dir.name,
39
+ "source": py_file.name
40
+ }
41
+ except ImportError as e:
42
+ print(f"警告: 无法导入模块 {module_name}: {e}")
43
+ # endregion
44
+ # endregion
45
+
46
+ return roles
47
+
48
+ def ls(self):
49
+ """列出所有可用的 roles"""
50
+ print("可用 roles:")
51
+ for name, info in (self._scan_roles()).items():
52
+ print(f" {name} @ {info['module']}/roles/{info['source']}")
53
+
54
+ def run(self):
55
+ """交互式选择并运行 role"""
56
+ from prompt_toolkit import prompt
57
+ from prompt_toolkit.completion import FuzzyWordCompleter
58
+ from rich.console import Console
59
+ from ..client_config.client_config import ClientConfig
60
+
61
+ console = Console()
62
+
63
+ if not self._scan_roles():
64
+ print("没有可用的 roles")
65
+ return
66
+
67
+ # region 构建模块名.函数名格式的选项列表
68
+ role_options = {
69
+ f"{info['module']}.{name}": name
70
+ for name, info in (self._scan_roles()).items()
71
+ }
72
+ completer = FuzzyWordCompleter(list(role_options.keys()))
73
+ # endregion
74
+
75
+ # region 模糊搜索选择
76
+ try:
77
+ selected_key = prompt(
78
+ "请选择要运行的 role (Tab补全, 支持模糊搜索): ",
79
+ completer=completer
80
+ ).strip()
81
+ except (KeyboardInterrupt, EOFError):
82
+ print("\n已取消选择")
83
+ return
84
+
85
+ if not selected_key or selected_key not in role_options:
86
+ print(f"无效的选择: {selected_key}")
87
+ return
88
+ # endregion
89
+
90
+ # region 执行选中的 role
91
+ selected = role_options[selected_key]
92
+ role_info = (self._scan_roles())[selected]
93
+ role_func = role_info["func"]
94
+ config = ClientConfig()
95
+ conn = config.connect()
96
+ if conn is None:
97
+ return
98
+
99
+ # region 询问是否保存配置
100
+ import questionary
101
+ from ..utils.config_saver import save_task_config
102
+ from ..utils.task_tracker import TaskTracker
103
+
104
+ save_config = questionary.confirm(
105
+ "是否在执行后保存运行配置?",
106
+ default=False,
107
+ ).ask()
108
+ # endregion
109
+
110
+ # region 使用 TaskTracker 追踪 task 调用
111
+ tracker = TaskTracker()
112
+ if save_config:
113
+ tracker.patch_all_modules()
114
+
115
+ try:
116
+ role_func(conn)
117
+ except Exception as e:
118
+ console.print(f"[red]Role '{selected}' 执行失败: {e}[/red]")
119
+ tracker.unpatch_all()
120
+ return
121
+ finally:
122
+ tracker.unpatch_all()
123
+ # endregion
124
+
125
+ # region 保存配置文件
126
+ if save_config and tracker.calls:
127
+ save_task_config(
128
+ hostname=config._current_host or "",
129
+ tasks=tracker.calls,
130
+ config_name=selected,
131
+ suffix=".role.yaml",
132
+ )
133
+ # endregion
134
+ # endregion
@@ -0,0 +1,121 @@
1
+ from pathlib import Path
2
+
3
+ import yaml
4
+ import questionary
5
+ from rich.console import Console
6
+
7
+ from ..client_config.client_config import ClientConfig
8
+ from ..task.task import Task
9
+
10
+
11
+ class RunFile:
12
+ """从配置文件执行 task 函数"""
13
+
14
+ def x(self) -> None:
15
+ """从当前目录的配置文件执行 task 函数"""
16
+
17
+ console = Console()
18
+
19
+ # region 扫描配置文件
20
+ config_suffixes = [".dcd.yaml", ".role.yaml"]
21
+ task_config_files: list[Path] = []
22
+ for suffix in config_suffixes:
23
+ task_config_files.extend(Path.cwd().glob(f"*{suffix}"))
24
+
25
+ if not task_config_files:
26
+ console.print(f"[yellow]当前目录未找到配置文件 ({', '.join(config_suffixes)})[/yellow]")
27
+ return
28
+ # endregion
29
+
30
+ # region 选择配置文件
31
+ if len(task_config_files) == 1:
32
+ selected_file = task_config_files[0]
33
+ else:
34
+ file_choices = [f.name for f in task_config_files]
35
+ selected_name = questionary.select("请选择配置文件:", choices=file_choices).ask()
36
+ if selected_name is None:
37
+ console.print("[yellow]已取消[/yellow]")
38
+ return
39
+ selected_file = Path.cwd() / selected_name
40
+ # endregion
41
+
42
+ # region 读取并验证配置
43
+ try:
44
+ config_data = yaml.safe_load(selected_file.read_text(encoding="utf-8"))
45
+ except Exception as e:
46
+ console.print(f"[red]读取配置文件失败: {e}[/red]")
47
+ return
48
+
49
+ hostname = config_data.get("hostname", "")
50
+ tasks = config_data.get("tasks", [])
51
+
52
+ if not hostname:
53
+ console.print("[red]配置文件缺少 hostname[/red]")
54
+ return
55
+ if not tasks:
56
+ console.print("[red]配置文件缺少 tasks[/red]")
57
+ return
58
+ # endregion
59
+
60
+ # region 验证 hostname 并创建连接
61
+ client_config = ClientConfig()
62
+ if not client_config.config_file.exists():
63
+ console.print("[red]未找到 iamt.yaml 配置文件[/red]")
64
+ return
65
+
66
+ iamt_config = yaml.safe_load(client_config.config_file.read_text(encoding="utf-8"))
67
+ if hostname not in iamt_config.get("hosts", {}):
68
+ console.print(f"[red]iamt.yaml 中未找到主机: {hostname}[/red]")
69
+ return
70
+
71
+ conn = client_config.connect(hostname)
72
+ if conn is None:
73
+ console.print("[red]无法连接到服务器[/red]")
74
+ return
75
+ # endregion
76
+
77
+ # region 显示配置信息并确认
78
+ console.print(f"[cyan]配置文件: {selected_file.name}[/cyan]")
79
+ console.print(f"[cyan]目标主机: {hostname}[/cyan]")
80
+ console.print("[cyan]待执行任务:[/cyan]")
81
+ for t in tasks:
82
+ console.print(f" - {t['task']}: {t['args']}")
83
+
84
+ if not questionary.confirm("确认执行?", default=True).ask():
85
+ console.print("[yellow]已取消[/yellow]")
86
+ return
87
+ # endregion
88
+
89
+ # region 执行 tasks
90
+ task_scanner = Task()
91
+ scanned_tasks = task_scanner._scan_tasks()
92
+
93
+ for task_call in tasks:
94
+ task_name = task_call["task"]
95
+ task_args = task_call.get("args", {}).copy()
96
+
97
+ # 解析 task 名称 (格式: module.function)
98
+ parts = task_name.split(".")
99
+ if len(parts) != 2:
100
+ console.print(f"[red]无效的 task 名称: {task_name}[/red]")
101
+ continue
102
+
103
+ func_name = parts[1]
104
+
105
+ # 从扫描结果中获取 task
106
+ if func_name not in scanned_tasks:
107
+ console.print(f"[red]未找到 task 函数: {task_name}[/red]")
108
+ continue
109
+
110
+ task_obj = scanned_tasks[func_name]["task"]
111
+
112
+ # 执行 task
113
+ console.print(f"[cyan]执行: {task_name}[/cyan]")
114
+ try:
115
+ task_obj(conn, **task_args)
116
+ except Exception as e:
117
+ console.print(f"[red]执行失败: {e}[/red]")
118
+ return
119
+
120
+ console.print("[green]所有任务执行完成[/green]")
121
+ # endregion
@@ -0,0 +1,70 @@
1
+ """命令字典定义模块"""
2
+
3
+ python_pkgs = {
4
+ "uv tool install -U dlght": "免代理 gitub下载工具 dlght",
5
+ "uv tool install -U envvm": "环境变量管理工具 envvm",
6
+ "uv tool install -U ali-ops": "aliyun命令行工具ali-ops",
7
+ "uv tool install -U iamt": "自动化运维工具iamt",
8
+ "uv tool install -U cpdts": "脚手架 cpdts",
9
+ "uv tool install -U tschm": "windows定时任务工具",
10
+ "uv tool install -U fastdjt": "django项目脚手架",
11
+ "uv tool install -U ptlearn": "ptlearn",
12
+ "uv tool install -U ptpython": "install ptpython",
13
+ "uv tool install -U ningfastforge":"fastapi 脚手架 forge"
14
+ }
15
+
16
+ node_pkgs = {
17
+ "npm install -g opencode-ai@latest": "opencode",
18
+ "npm install -g @iflow-ai/iflow-cli@latest":"iflow",
19
+ "npm install -g @google/gemini-cli@latest":"gemini",
20
+ "npm install -g @openai/codex@latest":"codex"
21
+ }
22
+ # https://github.com/google-gemini/gemini-cli
23
+
24
+
25
+
26
+ cmds = {
27
+ "bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)": "安装3xui",
28
+ }
29
+
30
+
31
+ winget_pkgs = {
32
+ "winget install --id Python.Python.3.13 --custom 'PrependPath=1'":"(win)install python",
33
+ "winget install --id=SQLite.SQLite": "(win) install sqlite",
34
+ "winget install --id=Google.Chrome.Beta.EXE": "(win) install Google Chrome Beta",
35
+ "winget install --id=7zip.7zip": "(win) install 7-Zip",
36
+ "winget install --id=Notion.Notion -e": "(win) install Notion",
37
+ "winget install --id=Yuanli.uTools -e": "(win) install uTools",
38
+ "winget install --id=liule.Snipaste -e": "(win) install Snipaste",
39
+ "winget install --id=File-New-Project.EarTrumpet -e": "(win) install EarTrumpet",
40
+ "winget install --id=JiLuo.Xterminal -e": "(win) install Xterminal",
41
+ "winget install --id=Git.Git -e": "(win) install Git",
42
+ "winget install --id=GitHub.GitHubDesktop -e": "(win) install GitHub Desktop",
43
+ "winget install --id=TortoiseGit.TortoiseGit -e": "(win) install TortoiseGit",
44
+ "winget install --id=Microsoft.WindowsTerminal.Preview": "(win) install Windows Terminal Preview",
45
+ "winget install --id=SublimeHQ.SublimeText.4 -e": "(win) install Sublime Text 4",
46
+ "winget install --id=Microsoft.Edit -e": "(win) install Microsoft Edit",
47
+ "winget install --force Microsoft.VisualStudioCode --override '/VERYSILENT /SP- /MERGETASKS=\"addcontextmenufiles,addcontextmenufolders,associatewithfiles,addtopath\"'": "(win) install VS Code with context menu",
48
+ "winget install --id=Amazon.Kiro -e --override '/VERYSILENT /SP- /MERGETASKS=\"addcontextmenufiles,addcontextmenufolders,addtopath\"'": "(win) install Kiro with context menu",
49
+ "winget install --id=kangfenmao.CherryStudio -e": "(win) install Cherry Studio",
50
+ "winget install --id=ByteDance.Doubao -e": "(win) install Doubao",
51
+ "winget install --id=Hashicorp.Vagrant -e": "(win) install Vagrant",
52
+ "winget install --id=Oracle.VirtualBox -e": "(win) install VirtualBox",
53
+ "winget install --id=astral-sh.uv -e": "(win) install uv",
54
+ "winget install --id=CoreyButler.NVMforWindows -e": "(win) install NVM for Windows",
55
+ "winget install --id=Tyrrrz.LightBulb -e": "(win) install LightBulb",
56
+ "winget install --id=JetBrains.DataGrip -e": "(win) install DataGrip (free for non-commercial use)",
57
+ "winget install --id=Microsoft.PowerShell -e": "(win) install PowerShell",
58
+ "winget install --id=Warp.Warp -e": "(win) install Warp",
59
+ "winget install --id=XiaoweiCloud.CalendarTask -e": "(win) install Calendar Task",
60
+ "winget install --id voidtools.Everything -e":"(win) install everything",
61
+ "winget install --id=Anthropic.Claude -e": "(win) install Claude",
62
+
63
+
64
+ "winget install --id=XPDNH1FMW7NB40 -e --accept-package-agreements":"(win) install huorong",
65
+ "winget install XPFCKBRNFZQ62G --accept-package-agreements":"(win) install wechat",
66
+ "winget install Tencent.Foxmail":"(win) install foxmail",
67
+ "winget install XP88XQLH1SDG81 --accept-package-agreements":"(win) install wangyimail",
68
+ }
69
+
70
+ # key 当中不能存在空格 要不然就是无效选择
@@ -0,0 +1,78 @@
1
+ import sys
2
+ import subprocess
3
+ from prompt_toolkit import prompt
4
+
5
+ from ..client_config.client_config import ClientConfig
6
+ from ..completers.customCompleter import CustomCompleter, CustomValidator
7
+ from ..modules.runlinetask.runlinetask import run_line
8
+ from .commands import python_pkgs, node_pkgs, cmds, winget_pkgs
9
+
10
+
11
+ class RunLine:
12
+
13
+ def select_and_exec_remote(self):
14
+ """交互式选择命令并在远程服务器上执行"""
15
+ # region 合并命令字典并创建补全器
16
+ all_commands = {**python_pkgs, **node_pkgs, **cmds}
17
+ completer = CustomCompleter(all_commands)
18
+ validator = CustomValidator(completer, error_msg="无效的命令,请从补全列表中选择")
19
+ # endregion
20
+
21
+ # region 交互式选择命令
22
+ try:
23
+ selected_cmd = prompt(
24
+ "请选择要执行的命令 (Tab补全, 支持模糊搜索): ",
25
+ completer=completer,
26
+ validator=validator
27
+ ).strip()
28
+ except (KeyboardInterrupt, EOFError):
29
+ print("\n已取消选择")
30
+ return
31
+
32
+ if not selected_cmd or selected_cmd not in all_commands:
33
+ print(f"无效的选择: {selected_cmd}")
34
+ return
35
+ # endregion
36
+
37
+ # region 连接服务器并执行命令
38
+ config = ClientConfig()
39
+ conn = config.connect()
40
+ if conn is None:
41
+ return
42
+ print(f"\n执行命令: {selected_cmd}\n")
43
+ run_line(conn, selected_cmd)
44
+ # endregion
45
+
46
+ def select_and_exec_local(self):
47
+ """交互式选择命令并在当前 shell 中执行"""
48
+ # region 合并命令字典并创建补全器
49
+ all_commands = {**python_pkgs, **node_pkgs, **cmds, **winget_pkgs}
50
+ completer = CustomCompleter(all_commands)
51
+ # validator = CustomValidator(completer, error_msg="无效的命令,请从补全列表中选择")
52
+ # endregion
53
+
54
+ # region 交互式选择命令
55
+ try:
56
+ selected_cmd = prompt(
57
+ "请选择要执行的命令 (Tab补全, 支持模糊搜索): ",
58
+ completer=completer,
59
+ # validator=validator
60
+ ).strip()
61
+ except (KeyboardInterrupt, EOFError):
62
+ sys.stderr.write("\n已取消选择\n")
63
+ return
64
+
65
+ if not selected_cmd or selected_cmd not in all_commands:
66
+ sys.stderr.write(f"无效的选择: {selected_cmd}\n")
67
+ return
68
+ # endregion
69
+
70
+ # region 在当前 shell 中执行命令
71
+ sys.stderr.write(f"\n执行命令: {selected_cmd}\n\n")
72
+ try:
73
+ subprocess.run(selected_cmd, shell=True, check=True)
74
+ except subprocess.CalledProcessError as e:
75
+ sys.stderr.write(f"\n命令执行失败,退出码: {e.returncode}\n")
76
+ except KeyboardInterrupt:
77
+ sys.stderr.write("\n命令执行被中断\n")
78
+ # endregion