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,111 @@
1
+ """Google Chrome 模块 - 在远程 Ubuntu 主机上安装和配置 Chrome 浏览器
2
+
3
+ 该模块通过 SSH 连接执行远程命令,实现 Chrome 浏览器的自动化部署。
4
+ """
5
+
6
+ from fabric import Connection, task
7
+
8
+ from .._utils.arch import normalize_arch
9
+ from .._utils.github import download_file
10
+
11
+
12
+ # region 模块常量配置
13
+
14
+ # Chrome 下载 URL 模板
15
+ CHROME_DOWNLOAD_URL_TEMPLATE = "https://dl.google.com/linux/direct/google-chrome-stable_current_{arch}.deb"
16
+
17
+ # 架构映射 (dpkg -> Chrome 架构名称)
18
+ CHROME_ARCH_MAP = {
19
+ "amd64": "amd64",
20
+ "arm64": "arm64",
21
+ }
22
+
23
+ # 环境变量 (使用英文输出避免中文乱码)
24
+ ENV_LANG_C = {"LANG": "C", "LC_ALL": "C"}
25
+
26
+ # endregion
27
+
28
+
29
+ # region 辅助函数
30
+
31
+ def _get_remote_arch(conn: Connection) -> str:
32
+ """获取远程主机的架构标识
33
+
34
+ 优先使用 hostvars 中已收集的架构信息,避免重复执行命令
35
+
36
+ Args:
37
+ conn: Fabric 连接对象
38
+
39
+ Returns:
40
+ Chrome 架构名称 (如 amd64, arm64)
41
+ """
42
+ # 优先从 hostvars 获取架构信息
43
+ if hasattr(conn, "hostvars") and conn.hostvars:
44
+ arch = conn.hostvars.get("architecture", "")
45
+ if arch:
46
+ dpkg_arch = normalize_arch(arch)
47
+ return CHROME_ARCH_MAP.get(dpkg_arch, "amd64")
48
+
49
+ # 回退方案:直接执行命令获取
50
+ result = conn.run("uname -m", hide=True)
51
+ arch = result.stdout.strip()
52
+ dpkg_arch = normalize_arch(arch)
53
+ return CHROME_ARCH_MAP.get(dpkg_arch, "amd64")
54
+
55
+ # endregion
56
+
57
+
58
+ # region Task 函数
59
+
60
+ @task
61
+ def install_chrome(conn: Connection) -> None:
62
+ """下载并安装 Google Chrome 浏览器 (本地下载模式)
63
+
64
+ 先将 Chrome 安装包下载到本地,然后上传到服务器并安装。
65
+ 适用于本地网络条件较好的场景。
66
+
67
+ Args:
68
+ conn: Fabric 连接对象
69
+ """
70
+ arch = _get_remote_arch(conn)
71
+ print(f"[INFO] 目标架构: {arch}")
72
+
73
+ remote_tmp_dir = "/tmp/chrome_install"
74
+ remote_deb = f"{remote_tmp_dir}/google-chrome-stable.deb"
75
+
76
+ # region 下载并上传安装包
77
+ print("\n[任务] 下载 Google Chrome")
78
+ url = CHROME_DOWNLOAD_URL_TEMPLATE.format(arch=arch)
79
+ filename = f"google-chrome-stable_{arch}.deb"
80
+ deb_path = download_file(url, conn.artifacts_dir, filename)
81
+
82
+ print("\n[任务] 上传安装包到远程主机")
83
+ conn.run(f"mkdir -p {remote_tmp_dir}", env=ENV_LANG_C)
84
+ conn.put(deb_path, remote_deb)
85
+ print(f" 上传完成: {remote_deb}")
86
+ # endregion
87
+
88
+ # region 安装依赖和 Chrome
89
+ print("\n[任务] 安装 Google Chrome")
90
+ # 更新包索引
91
+ conn.sudo("apt-get update", env=ENV_LANG_C)
92
+ # 安装 .deb 包及其依赖
93
+ conn.sudo(f"apt-get install -y {remote_deb}", env=ENV_LANG_C)
94
+ print(" Chrome 已安装")
95
+ # endregion
96
+
97
+ # region 清理临时文件
98
+ print("\n[任务] 清理临时文件")
99
+ conn.run(f"rm -rf {remote_tmp_dir}", env=ENV_LANG_C)
100
+ print(" 清理完成")
101
+ # endregion
102
+
103
+ # region 验证安装
104
+ print("\n[任务] 验证安装")
105
+ result = conn.run("google-chrome --version", hide=True)
106
+ print(f" {result.stdout.strip()}")
107
+ # endregion
108
+
109
+ print("\n[OK] Google Chrome 安装完成 (本地下载模式)")
110
+
111
+ # endregion
File without changes
@@ -0,0 +1,53 @@
1
+ """IBus 输入法模块 - 在远程 Ubuntu 主机上安装和配置 IBus 输入法框架
2
+
3
+ 该模块通过 SSH 连接执行远程命令,实现 IBus 及中文输入法的自动化部署。
4
+ """
5
+
6
+ from fabric import Connection, task
7
+
8
+
9
+ # region 模块常量配置
10
+
11
+ # 需要安装的 IBus 相关包
12
+ IBUS_PACKAGES = [
13
+ "ibus",
14
+ "ibus-libpinyin",
15
+ "ibus-rime",
16
+ ]
17
+
18
+ # 环境变量 (使用英文输出避免中文乱码)
19
+ ENV_LANG_C = {"LANG": "C", "LC_ALL": "C"}
20
+
21
+ # endregion
22
+
23
+
24
+ # region Task 函数
25
+
26
+ @task
27
+ def install_ibus(conn: Connection) -> None:
28
+ """安装 IBus 输入法框架及中文输入法
29
+
30
+ 安装 ibus、ibus-libpinyin 和 ibus-rime,并重启 ibus 服务。
31
+
32
+ Args:
33
+ conn: Fabric 连接对象
34
+ """
35
+ packages_str = " ".join(IBUS_PACKAGES)
36
+
37
+ # region 安装 IBus 及输入法
38
+ print("[任务] 安装 IBus 输入法框架")
39
+ conn.sudo("apt-get update", env=ENV_LANG_C)
40
+ conn.sudo(f"apt-get install -y {packages_str}", env=ENV_LANG_C)
41
+ print(" IBus 及输入法已安装")
42
+ # endregion
43
+
44
+ # region 重启 IBus
45
+ print("\n[任务] 重启 IBus 服务")
46
+ conn.run("ibus restart || true", env=ENV_LANG_C, warn=True)
47
+ print(" IBus 已重启")
48
+ # endregion
49
+
50
+ print("\n[OK] IBus 输入法安装完成")
51
+ print("[提示] 请通过「设置 -> 键盘 -> 输入源」添加已安装的输入法")
52
+
53
+ # endregion
@@ -0,0 +1,41 @@
1
+ from fabric import Connection, task
2
+
3
+ from .._utils.github import download_file
4
+
5
+
6
+ # region Kiro IDE 安装任务
7
+
8
+
9
+ @task
10
+ def install_kiro(conn: Connection, version: str = "0.8.86") -> None:
11
+ """下载、上传并安装 Kiro IDE deb 包
12
+
13
+ Args:
14
+ conn: Fabric 连接对象
15
+ version: Kiro IDE 版本号,默认为 0.8.86
16
+ """
17
+ deb_filename = f"kiro-ide-{version}-stable-linux-x64.deb"
18
+
19
+ # region 下载 deb 包到本地
20
+ print(f"\n[任务] 下载 Kiro IDE {version}")
21
+ download_url = f"https://prod.download.desktop.kiro.dev/releases/stable/linux-x64/signed/{version}/deb/{deb_filename}"
22
+ deb_path = download_file(download_url, conn.artifacts_dir, deb_filename)
23
+ # endregion
24
+
25
+ # region 上传 deb 包到服务器
26
+ print("\n[任务] 上传 deb 包到服务器")
27
+ remote_deb_path = f"/tmp/{deb_filename}"
28
+ conn.put(deb_path, remote_deb_path)
29
+ print(f" 上传完成: {remote_deb_path}")
30
+ # endregion
31
+
32
+ # region 安装 deb 包
33
+ print("\n[任务] 安装 Kiro IDE")
34
+ # 使用 dpkg 安装,如果有依赖问题则用 apt-get -f install 修复
35
+ conn.sudo(f"dpkg -i {remote_deb_path}", warn=True)
36
+ conn.sudo("apt-get install -f -y", warn=True)
37
+ print(" 安装完成")
38
+ # endregion
39
+
40
+
41
+ # endregion
@@ -0,0 +1,173 @@
1
+ """Rime Ice 模块 - 在远程 Ubuntu 主机上安装 rime-ice 输入法配置
2
+
3
+ 该模块通过 SSH 连接执行远程命令,实现 rime-ice 配置的自动化部署。
4
+ rime-ice 是一个开源的 Rime 输入法配置方案。
5
+ """
6
+
7
+ from datetime import datetime
8
+ from pathlib import Path
9
+ from fabric import Connection, task
10
+
11
+ from .._utils.github import download_file
12
+
13
+
14
+ # region 模块常量配置
15
+
16
+ # rime-ice 仓库下载 URL
17
+ RIME_ICE_DOWNLOAD_URL = "https://github.com/iDvel/rime-ice/archive/refs/heads/main.zip"
18
+
19
+ # 环境变量 (使用英文输出避免中文乱码)
20
+ ENV_LANG_C = {"LANG": "C", "LC_ALL": "C"}
21
+
22
+ # 模板目录
23
+ TEMPLATES_DIR = Path(__file__).parent / "templates"
24
+
25
+ # endregion
26
+
27
+
28
+ # region 辅助函数
29
+
30
+ def _find_rime_config_dir(conn: Connection) -> str | None:
31
+ """查找 rime 配置目录
32
+
33
+ 按优先级检查常见的 rime 配置目录位置
34
+
35
+ Args:
36
+ conn: Fabric 连接对象
37
+
38
+ Returns:
39
+ rime 配置目录路径,未找到返回 None
40
+ """
41
+ user_home = conn.hostvars.get("user_home", "~")
42
+
43
+ # 常见的 rime 配置目录位置
44
+ candidates = [
45
+ f"{user_home}/.local/share/fcitx5/rime", # fcitx5
46
+ f"{user_home}/.config/ibus/rime", # ibus
47
+ f"{user_home}/.config/fcitx/rime", # fcitx4
48
+ ]
49
+
50
+ for path in candidates:
51
+ result = conn.run(f"test -d {path} && echo exists", hide=True, warn=True)
52
+ if result.ok and "exists" in result.stdout:
53
+ return path
54
+
55
+ return None
56
+
57
+
58
+ def _get_rime_parent_dir(rime_dir: str) -> str:
59
+ """获取 rime 配置目录的父目录"""
60
+ return "/".join(rime_dir.rsplit("/", 1)[:-1]) or "/"
61
+
62
+ # endregion
63
+
64
+
65
+ # region Task 函数
66
+
67
+ @task
68
+ def install_rime_ice(conn: Connection) -> None:
69
+ """安装 rime-ice 输入法配置
70
+
71
+ 执行以下步骤:
72
+ 1. 查找 rime 配置目录
73
+ 2. 备份现有 rime 文件夹 (格式: 日期_rime_bak)
74
+ 3. 创建新的空 rime 文件夹
75
+ 4. 下载 rime-ice 仓库并上传到远程服务器
76
+ 5. 解压并复制内容到 rime 文件夹
77
+
78
+ Args:
79
+ conn: Fabric 连接对象
80
+ """
81
+ # region 查找 rime 配置目录
82
+ print("\n[任务] 查找 rime 配置目录")
83
+ rime_dir = _find_rime_config_dir(conn)
84
+ if rime_dir is None:
85
+ print(" [错误] 未找到 rime 配置目录,请先安装 fcitx5-rime 或 ibus-rime")
86
+ return
87
+ print(f" 找到配置目录: {rime_dir}")
88
+ # endregion
89
+
90
+ # region 备份现有 rime 文件夹
91
+ print("\n[任务] 备份现有 rime 配置")
92
+ parent_dir = _get_rime_parent_dir(rime_dir)
93
+ backup_name = f"{datetime.now().strftime('%Y%m%d')}_rime_bak"
94
+ backup_path = f"{parent_dir}/{backup_name}"
95
+
96
+ # 检查是否已存在同名备份
97
+ result = conn.run(f"test -d {backup_path} && echo exists", hide=True, warn=True)
98
+ if result.ok and "exists" in result.stdout:
99
+ print(f" [警告] 备份目录已存在: {backup_path},将覆盖")
100
+ conn.run(f"rm -rf {backup_path}", env=ENV_LANG_C)
101
+
102
+ conn.run(f"mv {rime_dir} {backup_path}", env=ENV_LANG_C)
103
+ print(f" 备份完成: {backup_path}")
104
+ # endregion
105
+
106
+ # region 创建新的空 rime 文件夹
107
+ print("\n[任务] 创建新的 rime 配置目录")
108
+ conn.run(f"mkdir -p {rime_dir}", env=ENV_LANG_C)
109
+ print(f" 创建完成: {rime_dir}")
110
+ # endregion
111
+
112
+ # region 下载并上传 rime-ice
113
+ print("\n[任务] 下载 rime-ice")
114
+ local_zip = download_file(
115
+ RIME_ICE_DOWNLOAD_URL,
116
+ conn.artifacts_dir,
117
+ "rime-ice-main.zip",
118
+ )
119
+
120
+ print("\n[任务] 上传 rime-ice 到远程主机")
121
+ remote_tmp_dir = "/tmp/rime_ice_install"
122
+ remote_zip = f"{remote_tmp_dir}/rime-ice-main.zip"
123
+
124
+ conn.run(f"mkdir -p {remote_tmp_dir}", env=ENV_LANG_C)
125
+ conn.put(local_zip, remote_zip)
126
+ print(f" 上传完成: {remote_zip}")
127
+ # endregion
128
+
129
+ # region 解压并复制内容
130
+ print("\n[任务] 解压并安装 rime-ice")
131
+ conn.run(f"unzip -q -o {remote_zip} -d {remote_tmp_dir}", env=ENV_LANG_C)
132
+ # 复制 rime-ice-main 目录下的所有内容到 rime 配置目录
133
+ conn.run(f"cp -r {remote_tmp_dir}/rime-ice-main/* {rime_dir}/", env=ENV_LANG_C)
134
+ print(f" 安装完成: {rime_dir}")
135
+ # endregion
136
+
137
+ # region 复制用户自定义配置文件
138
+ print("\n[任务] 复制用户自定义配置文件")
139
+ if "ibus" in rime_dir:
140
+ custom_file = TEMPLATES_DIR / "ibus" / "ibus_rime.custom.yaml"
141
+ if custom_file.exists():
142
+ conn.put(str(custom_file), f"{rime_dir}/ibus_rime.custom.yaml")
143
+ print(" 已复制: ibus_rime.custom.yaml")
144
+ else:
145
+ print(f" [警告] 自定义配置文件不存在: {custom_file}")
146
+ # endregion
147
+
148
+ # region 重启输入法框架
149
+ print("\n[任务] 重启输入法框架")
150
+ # 根据配置目录判断使用的输入法框架
151
+ if "fcitx5" in rime_dir:
152
+ conn.run("fcitx5 -r -d 2>/dev/null || true", env=ENV_LANG_C, warn=True)
153
+ print(" fcitx5 已重启")
154
+ elif "ibus" in rime_dir:
155
+ conn.run("ibus restart 2>/dev/null || true", env=ENV_LANG_C, warn=True)
156
+ print(" ibus 已重启")
157
+ elif "fcitx" in rime_dir:
158
+ conn.run("fcitx -r -d 2>/dev/null || true", env=ENV_LANG_C, warn=True)
159
+ print(" fcitx 已重启")
160
+ # endregion
161
+
162
+ # region 清理临时文件
163
+ print("\n[任务] 清理临时文件")
164
+ conn.run(f"rm -rf {remote_tmp_dir}", env=ENV_LANG_C)
165
+ print(" 清理完成")
166
+ # endregion
167
+
168
+ print("\n[OK] rime-ice 安装完成")
169
+ print(f" 配置目录: {rime_dir}")
170
+ print(f" 备份位置: {backup_path}")
171
+ print(" 请重新部署 rime 输入法以使配置生效")
172
+
173
+ # endregion
@@ -0,0 +1,28 @@
1
+ from rich.console import Console
2
+
3
+ from ..v2rayN import Connection, install_v2rayn
4
+ from ..vscode import install_vscode
5
+ from ..kiro import install_kiro
6
+ from ..chrome import install_chrome
7
+ from ..ibus import install_ibus
8
+ from ..._utils.steps import Step, run_steps
9
+ from ...github.ghcli import install_gh
10
+
11
+ console = Console()
12
+
13
+
14
+ def setup_ubuntu_desktop(c: Connection):
15
+ """配置 Ubuntu 桌面开发环境
16
+
17
+ 安装 v2rayN、VSCode、Kiro、Chrome
18
+ """
19
+ steps: list[Step] = [
20
+ # ("安装 v2rayN", install_v2rayn),
21
+ ("安装 VSCode", install_vscode),
22
+ # ("安装 Kiro IDE", install_kiro),
23
+ ("安装 Google Chrome", install_chrome),
24
+ ("安装 ghcli",install_gh),
25
+ # ("安装中文输入法",install_ibus)
26
+ ]
27
+ run_steps(c, steps)
28
+ console.print("[bold green]✓ Ubuntu 桌面开发环境配置完成[/bold green]")
@@ -0,0 +1,3 @@
1
+ patch:
2
+ style:
3
+ horizontal: true
@@ -0,0 +1,238 @@
1
+ """V2Ray 模块 - 在远程 Linux 主机上安装和配置 V2Ray Core
2
+
3
+ 该模块通过 SSH 连接执行远程命令,实现 V2Ray Core 的自动化部署。
4
+ 注意: v2rayN 是 Windows GUI 客户端,Linux 服务器应安装 v2ray-core。
5
+ # https://github.com/v2fly/v2ray-core
6
+ """
7
+
8
+ import tempfile
9
+
10
+ from fabric import Connection, task
11
+
12
+ from .._utils.arch import normalize_arch
13
+ from .._utils.github import download_file, resolve_version_via_api
14
+
15
+
16
+ # region 模块常量配置
17
+
18
+ # V2Ray Core 下载 URL 模板
19
+ V2RAY_DOWNLOAD_URL_TEMPLATE = "https://github.com/v2fly/v2ray-core/releases/download/v{version}/v2ray-linux-{arch}.zip"
20
+
21
+ # V2Ray latest release API URL
22
+ V2RAY_LATEST_RELEASE_API = "https://api.github.com/repos/v2fly/v2ray-core/releases/latest"
23
+
24
+ # 架构映射 (dpkg -> V2Ray 架构名称)
25
+ V2RAY_ARCH_MAP = {
26
+ "amd64": "64",
27
+ "arm64": "arm64-v8a",
28
+ "armhf": "arm32-v7a",
29
+ }
30
+
31
+ # 默认安装目录
32
+ V2RAY_INSTALL_DIR = "/usr/local/bin"
33
+ V2RAY_CONFIG_DIR = "/usr/local/etc/v2ray"
34
+
35
+ # 环境变量 (使用英文输出避免中文乱码)
36
+ ENV_LANG_C = {"LANG": "C", "LC_ALL": "C"}
37
+
38
+ # endregion
39
+
40
+
41
+ # region 辅助函数
42
+
43
+ def _get_remote_arch(conn: Connection) -> str:
44
+ """获取远程主机的架构标识
45
+
46
+ 优先使用 hostvars 中已收集的架构信息,避免重复执行命令
47
+
48
+ Args:
49
+ conn: Fabric 连接对象
50
+
51
+ Returns:
52
+ V2Ray 架构名称 (如 64, arm64-v8a)
53
+ """
54
+ # 优先从 hostvars 获取架构信息
55
+ if hasattr(conn, "hostvars") and conn.hostvars:
56
+ arch = conn.hostvars.get("architecture", "")
57
+ if arch:
58
+ dpkg_arch = normalize_arch(arch)
59
+ return V2RAY_ARCH_MAP.get(dpkg_arch, "64")
60
+
61
+ # 回退方案:直接执行命令获取
62
+ result = conn.run("uname -m", hide=True)
63
+ arch = result.stdout.strip()
64
+ dpkg_arch = normalize_arch(arch)
65
+ return V2RAY_ARCH_MAP.get(dpkg_arch, "64")
66
+
67
+
68
+ def _download_v2ray_zip(version: str, arch: str, dest_dir: str) -> str:
69
+ """下载 V2Ray Core 压缩包到本地
70
+
71
+ Args:
72
+ version: 版本号
73
+ arch: 架构标识
74
+ dest_dir: 下载目标目录
75
+
76
+ Returns:
77
+ 下载后的压缩包路径
78
+ """
79
+ version_number = resolve_version_via_api(version, V2RAY_LATEST_RELEASE_API)
80
+ url = V2RAY_DOWNLOAD_URL_TEMPLATE.format(version=version_number, arch=arch)
81
+ filename = f"v2ray-{version_number}-linux-{arch}.zip"
82
+ return download_file(url, dest_dir, filename)
83
+
84
+ # endregion
85
+
86
+
87
+ # region Task 函数
88
+
89
+ @task
90
+ def install_v2ray(conn: Connection, version: str = "latest") -> None:
91
+ """下载并安装 V2Ray Core (本地下载模式)
92
+
93
+ 先将 V2Ray 安装包下载到本地,然后上传到服务器并安装。
94
+ 适用于本地网络条件较好的场景。
95
+
96
+ Args:
97
+ conn: Fabric 连接对象
98
+ version: 版本号,默认为 "latest",也可以指定具体版本如 "5.12.1"
99
+ """
100
+ arch = _get_remote_arch(conn)
101
+ print(f"[INFO] 目标架构: {arch}")
102
+ print(f"[INFO] 安装版本: {version}")
103
+
104
+ remote_tmp_dir = "/tmp/v2ray_install"
105
+ remote_zip = f"{remote_tmp_dir}/v2ray.zip"
106
+
107
+ # region 下载并上传压缩包
108
+ print(f"\n[任务] 下载 V2Ray Core {version}")
109
+ with tempfile.TemporaryDirectory() as temp_dir:
110
+ zip_path = _download_v2ray_zip(version, arch, temp_dir)
111
+
112
+ print("\n[任务] 上传压缩包到远程主机")
113
+ conn.run(f"mkdir -p {remote_tmp_dir}", env=ENV_LANG_C)
114
+ conn.put(zip_path, remote_zip)
115
+ print(f" 上传完成: {remote_zip}")
116
+ # endregion
117
+
118
+ # region 解压并安装
119
+ print("\n[任务] 解压并安装 V2Ray Core")
120
+ # 确保 unzip 已安装
121
+ conn.sudo("bash -c 'apt-get update && apt-get install -y unzip'", env=ENV_LANG_C, hide=True)
122
+
123
+ conn.run(f"unzip -o {remote_zip} -d {remote_tmp_dir}", env=ENV_LANG_C)
124
+
125
+ # 创建配置目录
126
+ conn.sudo(f"mkdir -p {V2RAY_CONFIG_DIR}", env=ENV_LANG_C)
127
+
128
+ # 安装二进制文件
129
+ conn.sudo(f"cp {remote_tmp_dir}/v2ray {V2RAY_INSTALL_DIR}/v2ray", env=ENV_LANG_C)
130
+ conn.sudo(f"chmod +x {V2RAY_INSTALL_DIR}/v2ray", env=ENV_LANG_C)
131
+ print(f" v2ray 已安装到: {V2RAY_INSTALL_DIR}/v2ray")
132
+
133
+ # 复制配置文件示例 (如果不存在)
134
+ result = conn.run(f"test -f {V2RAY_CONFIG_DIR}/config.json", warn=True, hide=True)
135
+ if result.failed:
136
+ conn.sudo(f"cp {remote_tmp_dir}/config.json {V2RAY_CONFIG_DIR}/config.json", env=ENV_LANG_C)
137
+ print(f" 配置文件已复制到: {V2RAY_CONFIG_DIR}/config.json")
138
+ else:
139
+ print(" 配置文件已存在,跳过复制")
140
+
141
+ # 复制 geoip 和 geosite 数据文件
142
+ conn.sudo(f"cp {remote_tmp_dir}/geoip.dat {V2RAY_CONFIG_DIR}/geoip.dat", env=ENV_LANG_C)
143
+ conn.sudo(f"cp {remote_tmp_dir}/geosite.dat {V2RAY_CONFIG_DIR}/geosite.dat", env=ENV_LANG_C)
144
+ print(" 地理位置数据文件已安装")
145
+ # endregion
146
+
147
+ # region 清理临时文件
148
+ print("\n[任务] 清理临时文件")
149
+ conn.run(f"rm -rf {remote_tmp_dir}", env=ENV_LANG_C)
150
+ print(" 清理完成")
151
+ # endregion
152
+
153
+ # region 验证安装
154
+ print("\n[任务] 验证安装")
155
+ result = conn.run(f"{V2RAY_INSTALL_DIR}/v2ray version", hide=True)
156
+ print(f" {result.stdout.strip()}")
157
+ # endregion
158
+
159
+ print(f"\n[OK] V2Ray Core {version} 安装完成 (本地下载模式)")
160
+ print(f"[提示] 配置文件位置: {V2RAY_CONFIG_DIR}/config.json")
161
+ print(f"[提示] 启动命令: {V2RAY_INSTALL_DIR}/v2ray run -c {V2RAY_CONFIG_DIR}/config.json")
162
+
163
+
164
+ @task
165
+ def install_v2ray_remote(conn: Connection, version: str = "latest") -> None:
166
+ """下载并安装 V2Ray Core (远程下载模式)
167
+
168
+ 直接在远程主机上下载安装包并安装。
169
+ 适用于远程主机网络条件较好的场景。
170
+
171
+ Args:
172
+ conn: Fabric 连接对象
173
+ version: 版本号,默认为 "latest",也可以指定具体版本如 "5.12.1"
174
+ """
175
+ arch = _get_remote_arch(conn)
176
+ version_number = resolve_version_via_api(version, V2RAY_LATEST_RELEASE_API)
177
+ print(f"[INFO] 目标架构: {arch}")
178
+ print(f"[INFO] 安装版本: {version_number}")
179
+
180
+ download_url = V2RAY_DOWNLOAD_URL_TEMPLATE.format(version=version_number, arch=arch)
181
+ print(f"[INFO] 下载地址: {download_url}")
182
+
183
+ remote_tmp_dir = "/tmp/v2ray_install"
184
+ remote_zip = f"{remote_tmp_dir}/v2ray.zip"
185
+
186
+ # region 在远程主机上下载压缩包
187
+ print(f"\n[任务] 在远程主机上下载 V2Ray Core {version}")
188
+ conn.run(f"mkdir -p {remote_tmp_dir}", env=ENV_LANG_C)
189
+ conn.run(f"curl -fsSL -o {remote_zip} '{download_url}'", env=ENV_LANG_C)
190
+ print(f" 下载完成: {remote_zip}")
191
+ # endregion
192
+
193
+ # region 解压并安装
194
+ print("\n[任务] 解压并安装 V2Ray Core")
195
+ # 确保 unzip 已安装
196
+ conn.sudo("apt-get update && apt-get install -y unzip", env=ENV_LANG_C, hide=True)
197
+
198
+ conn.run(f"unzip -o {remote_zip} -d {remote_tmp_dir}", env=ENV_LANG_C)
199
+
200
+ # 创建配置目录
201
+ conn.sudo(f"mkdir -p {V2RAY_CONFIG_DIR}", env=ENV_LANG_C)
202
+
203
+ # 安装二进制文件
204
+ conn.sudo(f"cp {remote_tmp_dir}/v2ray {V2RAY_INSTALL_DIR}/v2ray", env=ENV_LANG_C)
205
+ conn.sudo(f"chmod +x {V2RAY_INSTALL_DIR}/v2ray", env=ENV_LANG_C)
206
+ print(f" v2ray 已安装到: {V2RAY_INSTALL_DIR}/v2ray")
207
+
208
+ # 复制配置文件示例 (如果不存在)
209
+ result = conn.run(f"test -f {V2RAY_CONFIG_DIR}/config.json", warn=True, hide=True)
210
+ if result.failed:
211
+ conn.sudo(f"cp {remote_tmp_dir}/config.json {V2RAY_CONFIG_DIR}/config.json", env=ENV_LANG_C)
212
+ print(f" 配置文件已复制到: {V2RAY_CONFIG_DIR}/config.json")
213
+ else:
214
+ print(" 配置文件已存在,跳过复制")
215
+
216
+ # 复制 geoip 和 geosite 数据文件
217
+ conn.sudo(f"cp {remote_tmp_dir}/geoip.dat {V2RAY_CONFIG_DIR}/geoip.dat", env=ENV_LANG_C)
218
+ conn.sudo(f"cp {remote_tmp_dir}/geosite.dat {V2RAY_CONFIG_DIR}/geosite.dat", env=ENV_LANG_C)
219
+ print(" 地理位置数据文件已安装")
220
+ # endregion
221
+
222
+ # region 清理临时文件
223
+ print("\n[任务] 清理临时文件")
224
+ conn.run(f"rm -rf {remote_tmp_dir}", env=ENV_LANG_C)
225
+ print(" 清理完成")
226
+ # endregion
227
+
228
+ # region 验证安装
229
+ print("\n[任务] 验证安装")
230
+ result = conn.run(f"{V2RAY_INSTALL_DIR}/v2ray version", hide=True)
231
+ print(f" {result.stdout.strip()}")
232
+ # endregion
233
+
234
+ print(f"\n[OK] V2Ray Core {version} 安装完成 (远程下载模式)")
235
+ print(f"[提示] 配置文件位置: {V2RAY_CONFIG_DIR}/config.json")
236
+ print(f"[提示] 启动命令: {V2RAY_INSTALL_DIR}/v2ray run -c {V2RAY_CONFIG_DIR}/config.json")
237
+
238
+ # endregion