myagent-ai 1.25.1 → 1.25.4

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 (743) hide show
  1. package/core/tool_dispatcher.py +310 -2
  2. package/core/web_control.py +218 -15
  3. package/myagent/Dockerfile +54 -0
  4. package/myagent/README.md +378 -0
  5. package/myagent/agents/__init__.py +6 -0
  6. package/myagent/agents/base.py +442 -0
  7. package/myagent/agents/main_agent.py +1711 -0
  8. package/myagent/agents/memory_agent.py +423 -0
  9. package/myagent/agents/tool_agent.py +248 -0
  10. package/myagent/chatbot/__init__.py +5 -0
  11. package/myagent/chatbot/base.py +124 -0
  12. package/myagent/chatbot/discord_bot.py +146 -0
  13. package/myagent/chatbot/feishu_bot.py +548 -0
  14. package/myagent/chatbot/manager.py +271 -0
  15. package/myagent/chatbot/qq_bot.py +189 -0
  16. package/myagent/chatbot/telegram_bot.py +167 -0
  17. package/myagent/chatbot/wechat_bot.py +558 -0
  18. package/myagent/chatbot/whatsapp_bot.py +330 -0
  19. package/myagent/chatbot/whatsapp_bridge/bridge.mjs +192 -0
  20. package/myagent/chatbot/whatsapp_bridge/package.json +11 -0
  21. package/myagent/communication/__init__.py +66 -0
  22. package/myagent/communication/channel.py +576 -0
  23. package/myagent/communication/crypto.py +347 -0
  24. package/myagent/communication/manager.py +417 -0
  25. package/myagent/communication/peer.py +156 -0
  26. package/myagent/config.py +533 -0
  27. package/myagent/core/__init__.py +4 -0
  28. package/myagent/core/agent_storage.py +497 -0
  29. package/myagent/core/config_broadcast.py +307 -0
  30. package/myagent/core/config_validator.py +740 -0
  31. package/myagent/core/context_builder.py +955 -0
  32. package/myagent/core/context_manager.py +506 -0
  33. package/myagent/core/deps_checker.py +542 -0
  34. package/myagent/core/llm.py +1046 -0
  35. package/myagent/core/logger.py +295 -0
  36. package/myagent/core/output_parser.py +694 -0
  37. package/myagent/core/permissions.py +372 -0
  38. package/myagent/core/stt.py +320 -0
  39. package/myagent/core/task_persistence.py +359 -0
  40. package/myagent/core/task_queue.py +440 -0
  41. package/myagent/core/tool_dispatcher.py +1066 -0
  42. package/myagent/core/update_manager.py +1392 -0
  43. package/myagent/core/utils.py +202 -0
  44. package/myagent/core/version.py +71 -0
  45. package/myagent/core/vnc_manager.py +1211 -0
  46. package/myagent/core/web_control.py +932 -0
  47. package/myagent/data/novnc/lib/base64.js +101 -0
  48. package/myagent/data/novnc/lib/decoders/copyrect.js +42 -0
  49. package/myagent/data/novnc/lib/decoders/hextile.js +199 -0
  50. package/myagent/data/novnc/lib/decoders/jpeg.js +149 -0
  51. package/myagent/data/novnc/lib/decoders/raw.js +74 -0
  52. package/myagent/data/novnc/lib/decoders/rre.js +54 -0
  53. package/myagent/data/novnc/lib/decoders/tight.js +302 -0
  54. package/myagent/data/novnc/lib/decoders/tightpng.js +47 -0
  55. package/myagent/data/novnc/lib/decoders/zrle.js +188 -0
  56. package/myagent/data/novnc/lib/deflator.js +85 -0
  57. package/myagent/data/novnc/lib/des.js +301 -0
  58. package/myagent/data/novnc/lib/display.js +520 -0
  59. package/myagent/data/novnc/lib/encodings.js +63 -0
  60. package/myagent/data/novnc/lib/inflator.js +74 -0
  61. package/myagent/data/novnc/lib/input/domkeytable.js +314 -0
  62. package/myagent/data/novnc/lib/input/fixedkeys.js +128 -0
  63. package/myagent/data/novnc/lib/input/gesturehandler.js +575 -0
  64. package/myagent/data/novnc/lib/input/keyboard.js +280 -0
  65. package/myagent/data/novnc/lib/input/keysym.js +879 -0
  66. package/myagent/data/novnc/lib/input/keysymdef.js +1352 -0
  67. package/myagent/data/novnc/lib/input/util.js +217 -0
  68. package/myagent/data/novnc/lib/input/vkeys.js +122 -0
  69. package/myagent/data/novnc/lib/input/xtscancodes.js +344 -0
  70. package/myagent/data/novnc/lib/ra2.js +1005 -0
  71. package/myagent/data/novnc/lib/rfb.js +3324 -0
  72. package/myagent/data/novnc/lib/util/browser.js +150 -0
  73. package/myagent/data/novnc/lib/util/cursor.js +265 -0
  74. package/myagent/data/novnc/lib/util/element.js +41 -0
  75. package/myagent/data/novnc/lib/util/events.js +133 -0
  76. package/myagent/data/novnc/lib/util/eventtarget.js +55 -0
  77. package/myagent/data/novnc/lib/util/int.js +21 -0
  78. package/myagent/data/novnc/lib/util/logging.js +61 -0
  79. package/myagent/data/novnc/lib/util/md5.js +77 -0
  80. package/myagent/data/novnc/lib/util/strings.js +36 -0
  81. package/myagent/data/novnc/lib/vendor/pako/lib/utils/common.js +58 -0
  82. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/adler32.js +29 -0
  83. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/constants.js +48 -0
  84. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/crc32.js +35 -0
  85. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/deflate.js +1755 -0
  86. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/gzheader.js +41 -0
  87. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/inffast.js +329 -0
  88. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/inflate.js +1626 -0
  89. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/inftrees.js +312 -0
  90. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/messages.js +26 -0
  91. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/trees.js +1157 -0
  92. package/myagent/data/novnc/lib/vendor/pako/lib/zlib/zstream.js +30 -0
  93. package/myagent/data/novnc/lib/websock.js +384 -0
  94. package/myagent/data/uploads/2026-04/32c9e9d3-8cf_test.pdf.pdf +1 -0
  95. package/myagent/departments/__init__.py +4 -0
  96. package/myagent/departments/manager.py +1015 -0
  97. package/myagent/docs//351/205/215/347/275/256/344/275/277/347/224/250/350/257/264/346/230/216.md +815 -0
  98. package/myagent/download/README.md +1 -0
  99. package/myagent/executor/__init__.py +4 -0
  100. package/myagent/executor/engine.py +1591 -0
  101. package/myagent/groups/__init__.py +15 -0
  102. package/myagent/groups/manager.py +881 -0
  103. package/myagent/install/install.ps1 +171 -0
  104. package/myagent/install/install.sh +258 -0
  105. package/myagent/install/uninstall.ps1 +142 -0
  106. package/myagent/install/uninstall.sh +149 -0
  107. package/myagent/install.ps1 +97 -0
  108. package/myagent/knowledge/__init__.py +4 -0
  109. package/myagent/knowledge/rag.py +444 -0
  110. package/myagent/main.py +1808 -0
  111. package/myagent/memory/__init__.py +4 -0
  112. package/myagent/memory/manager.py +1140 -0
  113. package/myagent/myagent_start.ps1 +26 -0
  114. package/myagent/organization/__init__.py +4 -0
  115. package/myagent/organization/manager.py +366 -0
  116. package/myagent/package.json +46 -0
  117. package/myagent/requirements-optional.txt +16 -0
  118. package/myagent/requirements.txt +90 -0
  119. package/myagent/scripts/cli.py +1384 -0
  120. package/myagent/scripts/setup_helper.py +33 -0
  121. package/myagent/setup.py +72 -0
  122. package/myagent/skills/example-skill/SKILL.md +33 -0
  123. package/myagent/skills/example-skill/run.sh +11 -0
  124. package/myagent/skills/frontend-dev/SKILL.md +567 -0
  125. package/myagent/skills/frontend-dev/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  126. package/myagent/skills/frontend-dev/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  127. package/myagent/skills/frontend-dev/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  128. package/myagent/skills/frontend-dev/canvas-fonts/BigShoulders-OFL.txt +93 -0
  129. package/myagent/skills/frontend-dev/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  130. package/myagent/skills/frontend-dev/canvas-fonts/Boldonse-OFL.txt +93 -0
  131. package/myagent/skills/frontend-dev/canvas-fonts/Boldonse-Regular.ttf +0 -0
  132. package/myagent/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  133. package/myagent/skills/frontend-dev/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  134. package/myagent/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  135. package/myagent/skills/frontend-dev/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  136. package/myagent/skills/frontend-dev/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  137. package/myagent/skills/frontend-dev/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  138. package/myagent/skills/frontend-dev/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  139. package/myagent/skills/frontend-dev/canvas-fonts/DMMono-OFL.txt +93 -0
  140. package/myagent/skills/frontend-dev/canvas-fonts/DMMono-Regular.ttf +0 -0
  141. package/myagent/skills/frontend-dev/canvas-fonts/EricaOne-OFL.txt +94 -0
  142. package/myagent/skills/frontend-dev/canvas-fonts/EricaOne-Regular.ttf +0 -0
  143. package/myagent/skills/frontend-dev/canvas-fonts/GeistMono-Bold.ttf +0 -0
  144. package/myagent/skills/frontend-dev/canvas-fonts/GeistMono-OFL.txt +93 -0
  145. package/myagent/skills/frontend-dev/canvas-fonts/GeistMono-Regular.ttf +0 -0
  146. package/myagent/skills/frontend-dev/canvas-fonts/Gloock-OFL.txt +93 -0
  147. package/myagent/skills/frontend-dev/canvas-fonts/Gloock-Regular.ttf +0 -0
  148. package/myagent/skills/frontend-dev/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  149. package/myagent/skills/frontend-dev/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  150. package/myagent/skills/frontend-dev/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  151. package/myagent/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  152. package/myagent/skills/frontend-dev/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  153. package/myagent/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  154. package/myagent/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  155. package/myagent/skills/frontend-dev/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  156. package/myagent/skills/frontend-dev/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  157. package/myagent/skills/frontend-dev/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  158. package/myagent/skills/frontend-dev/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  159. package/myagent/skills/frontend-dev/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  160. package/myagent/skills/frontend-dev/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  161. package/myagent/skills/frontend-dev/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  162. package/myagent/skills/frontend-dev/canvas-fonts/Italiana-OFL.txt +93 -0
  163. package/myagent/skills/frontend-dev/canvas-fonts/Italiana-Regular.ttf +0 -0
  164. package/myagent/skills/frontend-dev/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  165. package/myagent/skills/frontend-dev/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  166. package/myagent/skills/frontend-dev/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  167. package/myagent/skills/frontend-dev/canvas-fonts/Jura-Light.ttf +0 -0
  168. package/myagent/skills/frontend-dev/canvas-fonts/Jura-Medium.ttf +0 -0
  169. package/myagent/skills/frontend-dev/canvas-fonts/Jura-OFL.txt +93 -0
  170. package/myagent/skills/frontend-dev/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  171. package/myagent/skills/frontend-dev/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  172. package/myagent/skills/frontend-dev/canvas-fonts/Lora-Bold.ttf +0 -0
  173. package/myagent/skills/frontend-dev/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  174. package/myagent/skills/frontend-dev/canvas-fonts/Lora-Italic.ttf +0 -0
  175. package/myagent/skills/frontend-dev/canvas-fonts/Lora-OFL.txt +93 -0
  176. package/myagent/skills/frontend-dev/canvas-fonts/Lora-Regular.ttf +0 -0
  177. package/myagent/skills/frontend-dev/canvas-fonts/NationalPark-Bold.ttf +0 -0
  178. package/myagent/skills/frontend-dev/canvas-fonts/NationalPark-OFL.txt +93 -0
  179. package/myagent/skills/frontend-dev/canvas-fonts/NationalPark-Regular.ttf +0 -0
  180. package/myagent/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  181. package/myagent/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  182. package/myagent/skills/frontend-dev/canvas-fonts/Outfit-Bold.ttf +0 -0
  183. package/myagent/skills/frontend-dev/canvas-fonts/Outfit-OFL.txt +93 -0
  184. package/myagent/skills/frontend-dev/canvas-fonts/Outfit-Regular.ttf +0 -0
  185. package/myagent/skills/frontend-dev/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  186. package/myagent/skills/frontend-dev/canvas-fonts/PixelifySans-OFL.txt +93 -0
  187. package/myagent/skills/frontend-dev/canvas-fonts/PoiretOne-OFL.txt +93 -0
  188. package/myagent/skills/frontend-dev/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  189. package/myagent/skills/frontend-dev/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  190. package/myagent/skills/frontend-dev/canvas-fonts/RedHatMono-OFL.txt +93 -0
  191. package/myagent/skills/frontend-dev/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  192. package/myagent/skills/frontend-dev/canvas-fonts/Silkscreen-OFL.txt +93 -0
  193. package/myagent/skills/frontend-dev/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  194. package/myagent/skills/frontend-dev/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  195. package/myagent/skills/frontend-dev/canvas-fonts/SmoochSans-OFL.txt +93 -0
  196. package/myagent/skills/frontend-dev/canvas-fonts/Tektur-Medium.ttf +0 -0
  197. package/myagent/skills/frontend-dev/canvas-fonts/Tektur-OFL.txt +93 -0
  198. package/myagent/skills/frontend-dev/canvas-fonts/Tektur-Regular.ttf +0 -0
  199. package/myagent/skills/frontend-dev/canvas-fonts/WorkSans-Bold.ttf +0 -0
  200. package/myagent/skills/frontend-dev/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  201. package/myagent/skills/frontend-dev/canvas-fonts/WorkSans-Italic.ttf +0 -0
  202. package/myagent/skills/frontend-dev/canvas-fonts/WorkSans-OFL.txt +93 -0
  203. package/myagent/skills/frontend-dev/canvas-fonts/WorkSans-Regular.ttf +0 -0
  204. package/myagent/skills/frontend-dev/canvas-fonts/YoungSerif-OFL.txt +93 -0
  205. package/myagent/skills/frontend-dev/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  206. package/myagent/skills/frontend-dev/references/asset-prompt-guide.md +43 -0
  207. package/myagent/skills/frontend-dev/references/env-setup.md +33 -0
  208. package/myagent/skills/frontend-dev/references/minimax-cli-reference.md +133 -0
  209. package/myagent/skills/frontend-dev/references/minimax-image-guide.md +65 -0
  210. package/myagent/skills/frontend-dev/references/minimax-music-guide.md +216 -0
  211. package/myagent/skills/frontend-dev/references/minimax-tts-guide.md +78 -0
  212. package/myagent/skills/frontend-dev/references/minimax-video-guide.md +82 -0
  213. package/myagent/skills/frontend-dev/references/minimax-voice-catalog.md +686 -0
  214. package/myagent/skills/frontend-dev/references/motion-recipes.md +407 -0
  215. package/myagent/skills/frontend-dev/references/troubleshooting.md +85 -0
  216. package/myagent/skills/frontend-dev/scripts/minimax_image.py +137 -0
  217. package/myagent/skills/frontend-dev/scripts/minimax_music.py +157 -0
  218. package/myagent/skills/frontend-dev/scripts/minimax_tts.py +127 -0
  219. package/myagent/skills/frontend-dev/scripts/minimax_video.py +187 -0
  220. package/myagent/skills/frontend-dev/templates/generator_template.js +223 -0
  221. package/myagent/skills/frontend-dev/templates/viewer.html +599 -0
  222. package/myagent/skills/pptx/LICENSE.txt +30 -0
  223. package/myagent/skills/pptx/SKILL.md +507 -0
  224. package/myagent/skills/pptx/html2pptx.md +625 -0
  225. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  226. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  227. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  228. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  229. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  230. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  231. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  232. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  233. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  234. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  235. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  236. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  237. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  238. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  239. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  240. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  241. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  242. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  243. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  244. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  245. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  246. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  247. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  248. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  249. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  250. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  251. package/myagent/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  252. package/myagent/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  253. package/myagent/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  254. package/myagent/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  255. package/myagent/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  256. package/myagent/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  257. package/myagent/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  258. package/myagent/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  259. package/myagent/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  260. package/myagent/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  261. package/myagent/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  262. package/myagent/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  263. package/myagent/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  264. package/myagent/skills/pptx/ooxml/scripts/pack.py +159 -0
  265. package/myagent/skills/pptx/ooxml/scripts/unpack.py +29 -0
  266. package/myagent/skills/pptx/ooxml/scripts/validate.py +69 -0
  267. package/myagent/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  268. package/myagent/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  269. package/myagent/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  270. package/myagent/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  271. package/myagent/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  272. package/myagent/skills/pptx/ooxml.md +427 -0
  273. package/myagent/skills/pptx/scripts/html2pptx.js +1044 -0
  274. package/myagent/skills/pptx/scripts/inventory.py +1020 -0
  275. package/myagent/skills/pptx/scripts/rearrange.py +231 -0
  276. package/myagent/skills/pptx/scripts/replace.py +385 -0
  277. package/myagent/skills/pptx/scripts/thumbnail.py +450 -0
  278. package/{skills → myagent/skills}/registry.py +12 -6
  279. package/{web → myagent/web}/api_server.py +227 -0
  280. package/{web → myagent/web}/ui/chat/chat_main.js +224 -15
  281. package/myagent/worklog.md +21 -0
  282. package/package.json +1 -1
  283. package/skills/frontend-dev/SKILL.md +42 -44
  284. package/worklog.md +97 -14
  285. /package/{skills → myagent/skills}/ASR/LICENSE.txt +0 -0
  286. /package/{skills → myagent/skills}/ASR/SKILL.md +0 -0
  287. /package/{skills → myagent/skills}/ASR/scripts/asr.ts +0 -0
  288. /package/{skills → myagent/skills}/LLM/LICENSE.txt +0 -0
  289. /package/{skills → myagent/skills}/LLM/SKILL.md +0 -0
  290. /package/{skills → myagent/skills}/LLM/scripts/chat.ts +0 -0
  291. /package/{skills → myagent/skills}/TTS/LICENSE.txt +0 -0
  292. /package/{skills → myagent/skills}/TTS/SKILL.md +0 -0
  293. /package/{skills → myagent/skills}/TTS/tts.ts +0 -0
  294. /package/{skills → myagent/skills}/VLM/LICENSE.txt +0 -0
  295. /package/{skills → myagent/skills}/VLM/SKILL.md +0 -0
  296. /package/{skills → myagent/skills}/VLM/scripts/vlm.ts +0 -0
  297. /package/{skills → myagent/skills}/__init__.py +0 -0
  298. /package/{skills → myagent/skills}/admin-manager/SKILL.md +0 -0
  299. /package/{skills → myagent/skills}/agent-browser/SKILL.md +0 -0
  300. /package/{skills → myagent/skills}/agent_tool_skill.py +0 -0
  301. /package/{skills → myagent/skills}/ai-news-collectors/SKILL.md +0 -0
  302. /package/{skills → myagent/skills}/ai-news-collectors/_meta.json +0 -0
  303. /package/{skills → myagent/skills}/ai-news-collectors/references/sources.md +0 -0
  304. /package/{skills → myagent/skills}/aminer-open-academic/SKILL.md +0 -0
  305. /package/{skills → myagent/skills}/aminer-open-academic/_meta.json +0 -0
  306. /package/{skills → myagent/skills}/aminer-open-academic/evals/evals.json +0 -0
  307. /package/{skills → myagent/skills}/aminer-open-academic/references/api-catalog.md +0 -0
  308. /package/{skills → myagent/skills}/aminer-open-academic/scripts/aminer_client.py +0 -0
  309. /package/{skills → myagent/skills}/auto-target-tracker/SKILL.md +0 -0
  310. /package/{skills → myagent/skills}/base.py +0 -0
  311. /package/{skills → myagent/skills}/blog-writer/2024-02-17-radical-transparency-sales.md +0 -0
  312. /package/{skills → myagent/skills}/blog-writer/2024-02-17-raycast-spotlight-superpowers.md +0 -0
  313. /package/{skills → myagent/skills}/blog-writer/2024-02-17-short-form-content-marketing.md +0 -0
  314. /package/{skills → myagent/skills}/blog-writer/2024-02-17-typing-speed-benefits.md +0 -0
  315. /package/{skills → myagent/skills}/blog-writer/2024-03-14-effective-ai-prompts.md +0 -0
  316. /package/{skills → myagent/skills}/blog-writer/2024-11-08-ai-revolutionizing-entry-level-sales.md +0 -0
  317. /package/{skills → myagent/skills}/blog-writer/2025-11-12-why-ai-art-is-useless.md +0 -0
  318. /package/{skills → myagent/skills}/blog-writer/README.md +0 -0
  319. /package/{skills → myagent/skills}/blog-writer/SKILL.md +0 -0
  320. /package/{skills → myagent/skills}/blog-writer/_meta.json +0 -0
  321. /package/{skills → myagent/skills}/blog-writer/manage_examples.py +0 -0
  322. /package/{skills → myagent/skills}/blog-writer/style-guide.md +0 -0
  323. /package/{skills → myagent/skills}/browser_skill.py +0 -0
  324. /package/{skills → myagent/skills}/charts/LICENSE.txt +0 -0
  325. /package/{skills → myagent/skills}/charts/SKILL.md +0 -0
  326. /package/{skills → myagent/skills}/charts/references/_rules.md +0 -0
  327. /package/{skills → myagent/skills}/charts/references/d3.md +0 -0
  328. /package/{skills → myagent/skills}/charts/references/echarts.md +0 -0
  329. /package/{skills → myagent/skills}/charts/references/matplotlib.md +0 -0
  330. /package/{skills → myagent/skills}/charts/references/mermaid.md +0 -0
  331. /package/{skills → myagent/skills}/charts/references/mindmap-css.md +0 -0
  332. /package/{skills → myagent/skills}/charts/references/playwright-css.md +0 -0
  333. /package/{skills → myagent/skills}/charts/references/radial-grid.md +0 -0
  334. /package/{skills → myagent/skills}/charts/references/seaborn.md +0 -0
  335. /package/{skills → myagent/skills}/charts/setup.sh +0 -0
  336. /package/{skills → myagent/skills}/chromedev_mcp.py +0 -0
  337. /package/{skills → myagent/skills}/coding-agent/SKILL.md +0 -0
  338. /package/{skills → myagent/skills}/coding-agent/_meta.json +0 -0
  339. /package/{skills → myagent/skills}/coding-agent/criteria.md +0 -0
  340. /package/{skills → myagent/skills}/coding-agent/execution.md +0 -0
  341. /package/{skills → myagent/skills}/coding-agent/memory-template.md +0 -0
  342. /package/{skills → myagent/skills}/coding-agent/planning.md +0 -0
  343. /package/{skills → myagent/skills}/coding-agent/state.md +0 -0
  344. /package/{skills → myagent/skills}/coding-agent/verification.md +0 -0
  345. /package/{skills → myagent/skills}/content-strategy/SKILL.md +0 -0
  346. /package/{skills → myagent/skills}/content-strategy/_meta.json +0 -0
  347. /package/{skills → myagent/skills}/contentanalysis/ExtractWisdom/SKILL.md +0 -0
  348. /package/{skills → myagent/skills}/contentanalysis/ExtractWisdom/Workflows/Extract.md +0 -0
  349. /package/{skills → myagent/skills}/contentanalysis/SKILL.md +0 -0
  350. /package/{skills → myagent/skills}/docx/LICENSE.txt +0 -0
  351. /package/{skills → myagent/skills}/docx/SKILL.md +0 -0
  352. /package/{skills → myagent/skills}/docx/references/chart-templates.md +0 -0
  353. /package/{skills → myagent/skills}/docx/references/common-rules.md +0 -0
  354. /package/{skills → myagent/skills}/docx/references/decorations.md +0 -0
  355. /package/{skills → myagent/skills}/docx/references/design-system.md +0 -0
  356. /package/{skills → myagent/skills}/docx/references/docx-js-advanced.md +0 -0
  357. /package/{skills → myagent/skills}/docx/references/docx-js-core.md +0 -0
  358. /package/{skills → myagent/skills}/docx/references/faq.md +0 -0
  359. /package/{skills → myagent/skills}/docx/references/math-formulas.md +0 -0
  360. /package/{skills → myagent/skills}/docx/references/ooxml.md +0 -0
  361. /package/{skills → myagent/skills}/docx/references/toc.md +0 -0
  362. /package/{skills → myagent/skills}/docx/routes/comment.md +0 -0
  363. /package/{skills → myagent/skills}/docx/routes/create.md +0 -0
  364. /package/{skills → myagent/skills}/docx/routes/edit.md +0 -0
  365. /package/{skills → myagent/skills}/docx/routes/format.md +0 -0
  366. /package/{skills → myagent/skills}/docx/routes/read.md +0 -0
  367. /package/{skills → myagent/skills}/docx/scenes/academic.md +0 -0
  368. /package/{skills → myagent/skills}/docx/scenes/contract.md +0 -0
  369. /package/{skills → myagent/skills}/docx/scenes/copywriting.md +0 -0
  370. /package/{skills → myagent/skills}/docx/scenes/exam.md +0 -0
  371. /package/{skills → myagent/skills}/docx/scenes/official-doc.md +0 -0
  372. /package/{skills → myagent/skills}/docx/scenes/report.md +0 -0
  373. /package/{skills → myagent/skills}/docx/scenes/resume.md +0 -0
  374. /package/{skills → myagent/skills}/docx/scripts/__init__.py +0 -0
  375. /package/{skills → myagent/skills}/docx/scripts/add_toc_placeholders.py +0 -0
  376. /package/{skills → myagent/skills}/docx/scripts/document.py +0 -0
  377. /package/{skills → myagent/skills}/docx/scripts/postcheck.py +0 -0
  378. /package/{skills → myagent/skills}/docx/scripts/templates/comments.xml +0 -0
  379. /package/{skills → myagent/skills}/docx/scripts/templates/commentsExtended.xml +0 -0
  380. /package/{skills → myagent/skills}/docx/scripts/templates/commentsExtensible.xml +0 -0
  381. /package/{skills → myagent/skills}/docx/scripts/templates/commentsIds.xml +0 -0
  382. /package/{skills → myagent/skills}/docx/scripts/templates/people.xml +0 -0
  383. /package/{skills → myagent/skills}/docx/scripts/utilities.py +0 -0
  384. /package/{skills → myagent/skills}/docx/setup.sh +0 -0
  385. /package/{skills → myagent/skills}/docx_skill.py +0 -0
  386. /package/{skills → myagent/skills}/dream-interpreter/SKILL.md +0 -0
  387. /package/{skills → myagent/skills}/dream-interpreter/assets/example_asset.txt +0 -0
  388. /package/{skills → myagent/skills}/dream-interpreter/references/api_reference.md +0 -0
  389. /package/{skills → myagent/skills}/dream-interpreter/references/interpretation-guide.md +0 -0
  390. /package/{skills → myagent/skills}/dream-interpreter/references/output-schema.md +0 -0
  391. /package/{skills → myagent/skills}/dream-interpreter/references/questioning-strategy.md +0 -0
  392. /package/{skills → myagent/skills}/dream-interpreter/references/visual-mapping.md +0 -0
  393. /package/{skills → myagent/skills}/dream-interpreter/scripts/example.py +0 -0
  394. /package/{skills → myagent/skills}/dream-interpreter/skill.json +0 -0
  395. /package/{skills → myagent/skills}/file_send.py +0 -0
  396. /package/{skills → myagent/skills}/file_skill.py +0 -0
  397. /package/{skills → myagent/skills}/finance/Finance_API_Doc.md +0 -0
  398. /package/{skills → myagent/skills}/finance/SKILL.md +0 -0
  399. /package/{skills → myagent/skills}/fullstack-dev/SKILL.md +0 -0
  400. /package/{skills → myagent/skills}/fullstack-dev/references/api-design.md +0 -0
  401. /package/{skills → myagent/skills}/fullstack-dev/references/auth-flow.md +0 -0
  402. /package/{skills → myagent/skills}/fullstack-dev/references/db-schema.md +0 -0
  403. /package/{skills → myagent/skills}/fullstack-dev/references/django-best-practices.md +0 -0
  404. /package/{skills → myagent/skills}/fullstack-dev/references/environment-management.md +0 -0
  405. /package/{skills → myagent/skills}/fullstack-dev/references/release-checklist.md +0 -0
  406. /package/{skills → myagent/skills}/fullstack-dev/references/technology-selection.md +0 -0
  407. /package/{skills → myagent/skills}/fullstack-dev/references/testing-strategy.md +0 -0
  408. /package/{skills → myagent/skills}/get-fortune-analysis/SKILL.md +0 -0
  409. /package/{skills → myagent/skills}/get-fortune-analysis/lunar_python.py +0 -0
  410. /package/{skills → myagent/skills}/gift-evaluator/SKILL.md +0 -0
  411. /package/{skills → myagent/skills}/gift-evaluator/html_tools.py +0 -0
  412. /package/{skills → myagent/skills}/gui_skill.py +0 -0
  413. /package/{skills → myagent/skills}/image-edit/LICENSE.txt +0 -0
  414. /package/{skills → myagent/skills}/image-edit/SKILL.md +0 -0
  415. /package/{skills → myagent/skills}/image-edit/scripts/image-edit.ts +0 -0
  416. /package/{skills → myagent/skills}/image-generation/LICENSE.txt +0 -0
  417. /package/{skills → myagent/skills}/image-generation/SKILL.md +0 -0
  418. /package/{skills → myagent/skills}/image-generation/scripts/image-generation.ts +0 -0
  419. /package/{skills → myagent/skills}/image-understand/LICENSE.txt +0 -0
  420. /package/{skills → myagent/skills}/image-understand/SKILL.md +0 -0
  421. /package/{skills → myagent/skills}/image-understand/scripts/image-understand.ts +0 -0
  422. /package/{skills → myagent/skills}/interview-designer/README.md +0 -0
  423. /package/{skills → myagent/skills}/interview-designer/SKILL.md +0 -0
  424. /package/{skills → myagent/skills}/interview-designer/_meta.json +0 -0
  425. /package/{skills → myagent/skills}/interview-designer/references/design_rationale.md +0 -0
  426. /package/{skills → myagent/skills}/interview-designer/templates/interview_guide_template.md +0 -0
  427. /package/{skills → myagent/skills}/market-research-reports/SKILL.md +0 -0
  428. /package/{skills → myagent/skills}/market-research-reports/assets/FORMATTING_GUIDE.md +0 -0
  429. /package/{skills → myagent/skills}/market-research-reports/assets/market_report_template.tex +0 -0
  430. /package/{skills → myagent/skills}/market-research-reports/assets/market_research.sty +0 -0
  431. /package/{skills → myagent/skills}/market-research-reports/references/data_analysis_patterns.md +0 -0
  432. /package/{skills → myagent/skills}/market-research-reports/references/report_structure_guide.md +0 -0
  433. /package/{skills → myagent/skills}/market-research-reports/references/visual_generation_guide.md +0 -0
  434. /package/{skills → myagent/skills}/market-research-reports/scripts/generate_market_visuals.py +0 -0
  435. /package/{skills → myagent/skills}/marketing-mode/README.md +0 -0
  436. /package/{skills → myagent/skills}/marketing-mode/SKILL.md +0 -0
  437. /package/{skills → myagent/skills}/marketing-mode/_meta.json +0 -0
  438. /package/{skills → myagent/skills}/marketing-mode/mode-prompt.md +0 -0
  439. /package/{skills → myagent/skills}/marketing-mode/skill.json +0 -0
  440. /package/{skills → myagent/skills}/mindfulness-meditation/SKILL.md +0 -0
  441. /package/{skills → myagent/skills}/mindfulness-meditation/_meta.json +0 -0
  442. /package/{skills → myagent/skills}/multi-search-engine/CHANGELOG.md +0 -0
  443. /package/{skills → myagent/skills}/multi-search-engine/CHANNELLOG.md +0 -0
  444. /package/{skills → myagent/skills}/multi-search-engine/SKILL.md +0 -0
  445. /package/{skills → myagent/skills}/multi-search-engine/_meta.json +0 -0
  446. /package/{skills → myagent/skills}/multi-search-engine/config.json +0 -0
  447. /package/{skills → myagent/skills}/multi-search-engine/metadata.json +0 -0
  448. /package/{skills → myagent/skills}/multi-search-engine/references/international-search.md +0 -0
  449. /package/{skills → myagent/skills}/pdf/LICENSE.txt +0 -0
  450. /package/{skills → myagent/skills}/pdf/SKILL.md +0 -0
  451. /package/{skills → myagent/skills}/pdf/briefs/academic.md +0 -0
  452. /package/{skills → myagent/skills}/pdf/briefs/creative.md +0 -0
  453. /package/{skills → myagent/skills}/pdf/briefs/poster.md +0 -0
  454. /package/{skills → myagent/skills}/pdf/briefs/process-advanced.md +0 -0
  455. /package/{skills → myagent/skills}/pdf/briefs/process.md +0 -0
  456. /package/{skills → myagent/skills}/pdf/briefs/report.md +0 -0
  457. /package/{skills → myagent/skills}/pdf/configs/components.md +0 -0
  458. /package/{skills → myagent/skills}/pdf/configs/fonts.md +0 -0
  459. /package/{skills → myagent/skills}/pdf/configs/visual_framework.md +0 -0
  460. /package/{skills → myagent/skills}/pdf/references/resume-academic.tex +0 -0
  461. /package/{skills → myagent/skills}/pdf/references/resume-altacv.tex +0 -0
  462. /package/{skills → myagent/skills}/pdf/scripts/cover_validate.js +0 -0
  463. /package/{skills → myagent/skills}/pdf/scripts/design_engine.py +0 -0
  464. /package/{skills → myagent/skills}/pdf/scripts/html2pdf-next.js +0 -0
  465. /package/{skills → myagent/skills}/pdf/scripts/html2poster.js +0 -0
  466. /package/{skills → myagent/skills}/pdf/scripts/pdf.py +0 -0
  467. /package/{skills → myagent/skills}/pdf/scripts/pdf_qa.py +0 -0
  468. /package/{skills → myagent/skills}/pdf/scripts/poster_validate.py +0 -0
  469. /package/{skills → myagent/skills}/pdf/scripts/setup.sh +0 -0
  470. /package/{skills → myagent/skills}/pdf/scripts/toc_validate.py +0 -0
  471. /package/{skills → myagent/skills}/pdf/typesetting/charts.md +0 -0
  472. /package/{skills → myagent/skills}/pdf/typesetting/cover-backgrounds.md +0 -0
  473. /package/{skills → myagent/skills}/pdf/typesetting/cover.md +0 -0
  474. /package/{skills → myagent/skills}/pdf/typesetting/fill-engine.md +0 -0
  475. /package/{skills → myagent/skills}/pdf/typesetting/geometry.md +0 -0
  476. /package/{skills → myagent/skills}/pdf/typesetting/overflow.md +0 -0
  477. /package/{skills → myagent/skills}/pdf/typesetting/pagination.md +0 -0
  478. /package/{skills → myagent/skills}/pdf/typesetting/palette.md +0 -0
  479. /package/{skills → myagent/skills}/pdf/typesetting/typography.md +0 -0
  480. /package/{skills → myagent/skills}/pdf_skill.py +0 -0
  481. /package/{skills → myagent/skills}/podcast-generate/LICENSE.txt +0 -0
  482. /package/{skills → myagent/skills}/podcast-generate/SKILL.md +0 -0
  483. /package/{skills → myagent/skills}/podcast-generate/generate.ts +0 -0
  484. /package/{skills → myagent/skills}/podcast-generate/package.json +0 -0
  485. /package/{skills → myagent/skills}/podcast-generate/readme.md +0 -0
  486. /package/{skills → myagent/skills}/podcast-generate/test_data/segments.jsonl +0 -0
  487. /package/{skills → myagent/skills}/podcast-generate/tsconfig.json +0 -0
  488. /package/{skills → myagent/skills}/ppt/.claude/settings.local.json +0 -0
  489. /package/{skills → myagent/skills}/ppt/LICENSE.txt +0 -0
  490. /package/{skills → myagent/skills}/ppt/SKILL.md +0 -0
  491. /package/{skills → myagent/skills}/ppt/beamer.md +0 -0
  492. /package/{skills → myagent/skills}/ppt/components.md +0 -0
  493. /package/{skills → myagent/skills}/ppt/data-viz-components.md +0 -0
  494. /package/{skills → myagent/skills}/ppt/design-system.md +0 -0
  495. /package/{skills → myagent/skills}/ppt/html2pptx.md +0 -0
  496. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  497. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  498. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  499. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  500. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  501. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  502. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  503. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  504. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  505. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  506. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  507. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  508. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  509. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  510. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  511. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  512. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  513. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  514. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  515. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  516. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  517. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  518. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  519. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  520. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  521. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  522. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  523. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  524. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  525. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  526. /package/{skills → myagent/skills}/ppt/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  527. /package/{skills → myagent/skills}/ppt/ooxml/schemas/mce/mc.xsd +0 -0
  528. /package/{skills → myagent/skills}/ppt/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  529. /package/{skills → myagent/skills}/ppt/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  530. /package/{skills → myagent/skills}/ppt/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  531. /package/{skills → myagent/skills}/ppt/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  532. /package/{skills → myagent/skills}/ppt/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  533. /package/{skills → myagent/skills}/ppt/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  534. /package/{skills → myagent/skills}/ppt/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  535. /package/{skills → myagent/skills}/ppt/ooxml/scripts/pack.py +0 -0
  536. /package/{skills → myagent/skills}/ppt/ooxml/scripts/unpack.py +0 -0
  537. /package/{skills → myagent/skills}/ppt/ooxml/scripts/validate.py +0 -0
  538. /package/{skills → myagent/skills}/ppt/ooxml/scripts/validation/__init__.py +0 -0
  539. /package/{skills → myagent/skills}/ppt/ooxml/scripts/validation/base.py +0 -0
  540. /package/{skills → myagent/skills}/ppt/ooxml/scripts/validation/docx.py +0 -0
  541. /package/{skills → myagent/skills}/ppt/ooxml/scripts/validation/pptx.py +0 -0
  542. /package/{skills → myagent/skills}/ppt/ooxml/scripts/validation/redlining.py +0 -0
  543. /package/{skills → myagent/skills}/ppt/ooxml.md +0 -0
  544. /package/{skills → myagent/skills}/ppt/references/beamer.md +0 -0
  545. /package/{skills → myagent/skills}/ppt/references/latex.md +0 -0
  546. /package/{skills → myagent/skills}/ppt/references/paper-navbar.tex +0 -0
  547. /package/{skills → myagent/skills}/ppt/references/progress-navbar.tex +0 -0
  548. /package/{skills → myagent/skills}/ppt/scripts/html2pptx.js +0 -0
  549. /package/{skills → myagent/skills}/ppt/scripts/inventory.py +0 -0
  550. /package/{skills → myagent/skills}/ppt/scripts/pdf.py +0 -0
  551. /package/{skills → myagent/skills}/ppt/scripts/rearrange.py +0 -0
  552. /package/{skills → myagent/skills}/ppt/scripts/replace.py +0 -0
  553. /package/{skills → myagent/skills}/ppt/scripts/tectonic +0 -0
  554. /package/{skills → myagent/skills}/ppt/scripts/thumbnail.py +0 -0
  555. /package/{skills → myagent/skills}/ppt/setup.sh +0 -0
  556. /package/{skills → myagent/skills}/ppt/themes.md +0 -0
  557. /package/{skills → myagent/skills}/ppt_skill.py +0 -0
  558. /package/{skills → myagent/skills}/qingyan-research/SKILL.md +0 -0
  559. /package/{skills → myagent/skills}/qingyan-research/generate_html.py +0 -0
  560. /package/{skills → myagent/skills}/search_skill.py +0 -0
  561. /package/{skills → myagent/skills}/seo-content-writer/SKILL.md +0 -0
  562. /package/{skills → myagent/skills}/seo-content-writer/_meta.json +0 -0
  563. /package/{skills → myagent/skills}/seo-content-writer/references/content-structure-templates.md +0 -0
  564. /package/{skills → myagent/skills}/seo-content-writer/references/title-formulas.md +0 -0
  565. /package/{skills → myagent/skills}/skill-creator/LICENSE.txt +0 -0
  566. /package/{skills → myagent/skills}/skill-creator/SKILL.md +0 -0
  567. /package/{skills → myagent/skills}/skill-creator/agents/analyzer.md +0 -0
  568. /package/{skills → myagent/skills}/skill-creator/agents/comparator.md +0 -0
  569. /package/{skills → myagent/skills}/skill-creator/agents/grader.md +0 -0
  570. /package/{skills → myagent/skills}/skill-creator/assets/eval_review.html +0 -0
  571. /package/{skills → myagent/skills}/skill-creator/eval-viewer/generate_review.py +0 -0
  572. /package/{skills → myagent/skills}/skill-creator/eval-viewer/viewer.html +0 -0
  573. /package/{skills → myagent/skills}/skill-creator/references/schemas.md +0 -0
  574. /package/{skills → myagent/skills}/skill-creator/scripts/__init__.py +0 -0
  575. /package/{skills → myagent/skills}/skill-creator/scripts/aggregate_benchmark.py +0 -0
  576. /package/{skills → myagent/skills}/skill-creator/scripts/generate_report.py +0 -0
  577. /package/{skills → myagent/skills}/skill-creator/scripts/improve_description.py +0 -0
  578. /package/{skills → myagent/skills}/skill-creator/scripts/package_skill.py +0 -0
  579. /package/{skills → myagent/skills}/skill-creator/scripts/quick_validate.py +0 -0
  580. /package/{skills → myagent/skills}/skill-creator/scripts/run_eval.py +0 -0
  581. /package/{skills → myagent/skills}/skill-creator/scripts/run_loop.py +0 -0
  582. /package/{skills → myagent/skills}/skill-creator/scripts/utils.py +0 -0
  583. /package/{skills → myagent/skills}/skill-finder-cn/SKILL.md +0 -0
  584. /package/{skills → myagent/skills}/skill-finder-cn/_meta.json +0 -0
  585. /package/{skills → myagent/skills}/skill-finder-cn/package.json +0 -0
  586. /package/{skills → myagent/skills}/skill-finder-cn/scripts/search.sh +0 -0
  587. /package/{skills → myagent/skills}/skill-vetter/SKILL.md +0 -0
  588. /package/{skills → myagent/skills}/stock-analysis-skill/SKILL.md +0 -0
  589. /package/{skills → myagent/skills}/stock-analysis-skill/package.json +0 -0
  590. /package/{skills → myagent/skills}/stock-analysis-skill/src/analyzer.ts +0 -0
  591. /package/{skills → myagent/skills}/stock-analysis-skill/src/dataFetcher.ts +0 -0
  592. /package/{skills → myagent/skills}/stock-analysis-skill/src/dividend.ts +0 -0
  593. /package/{skills → myagent/skills}/stock-analysis-skill/src/index.ts +0 -0
  594. /package/{skills → myagent/skills}/stock-analysis-skill/src/rumorScanner.ts +0 -0
  595. /package/{skills → myagent/skills}/stock-analysis-skill/src/types.ts +0 -0
  596. /package/{skills → myagent/skills}/stock-analysis-skill/src/watchlist.ts +0 -0
  597. /package/{skills → myagent/skills}/stock-analysis-skill/tsconfig.json +0 -0
  598. /package/{skills → myagent/skills}/storyboard-manager/SKILL.md +0 -0
  599. /package/{skills → myagent/skills}/storyboard-manager/index.js +0 -0
  600. /package/{skills → myagent/skills}/storyboard-manager/package.json +0 -0
  601. /package/{skills → myagent/skills}/storyboard-manager/references/character_development.md +0 -0
  602. /package/{skills → myagent/skills}/storyboard-manager/references/story_structures.md +0 -0
  603. /package/{skills → myagent/skills}/storyboard-manager/scripts/consistency_checker.py +0 -0
  604. /package/{skills → myagent/skills}/storyboard-manager/scripts/timeline_tracker.py +0 -0
  605. /package/{skills → myagent/skills}/system_skill.py +0 -0
  606. /package/{skills → myagent/skills}/ui-ux-pro-max/SKILL.md +0 -0
  607. /package/{skills → myagent/skills}/ui-ux-pro-max/_meta.json +0 -0
  608. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/charts.csv +0 -0
  609. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/colors.csv +0 -0
  610. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/icons.csv +0 -0
  611. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/landing.csv +0 -0
  612. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/products.csv +0 -0
  613. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/react-performance.csv +0 -0
  614. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/astro.csv +0 -0
  615. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/flutter.csv +0 -0
  616. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/html-tailwind.csv +0 -0
  617. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/jetpack-compose.csv +0 -0
  618. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/nextjs.csv +0 -0
  619. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/nuxt-ui.csv +0 -0
  620. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/nuxtjs.csv +0 -0
  621. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/react-native.csv +0 -0
  622. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/react.csv +0 -0
  623. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/shadcn.csv +0 -0
  624. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/svelte.csv +0 -0
  625. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/swiftui.csv +0 -0
  626. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/stacks/vue.csv +0 -0
  627. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/styles.csv +0 -0
  628. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/typography.csv +0 -0
  629. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/ui-reasoning.csv +0 -0
  630. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/ux-guidelines.csv +0 -0
  631. /package/{skills → myagent/skills}/ui-ux-pro-max/assets/data/web-interface.csv +0 -0
  632. /package/{skills → myagent/skills}/ui-ux-pro-max/data/charts.csv +0 -0
  633. /package/{skills → myagent/skills}/ui-ux-pro-max/data/colors.csv +0 -0
  634. /package/{skills → myagent/skills}/ui-ux-pro-max/data/icons.csv +0 -0
  635. /package/{skills → myagent/skills}/ui-ux-pro-max/data/landing.csv +0 -0
  636. /package/{skills → myagent/skills}/ui-ux-pro-max/data/products.csv +0 -0
  637. /package/{skills → myagent/skills}/ui-ux-pro-max/data/react-performance.csv +0 -0
  638. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/astro.csv +0 -0
  639. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/flutter.csv +0 -0
  640. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -0
  641. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -0
  642. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/nextjs.csv +0 -0
  643. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -0
  644. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -0
  645. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/react-native.csv +0 -0
  646. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/react.csv +0 -0
  647. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/shadcn.csv +0 -0
  648. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/svelte.csv +0 -0
  649. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/swiftui.csv +0 -0
  650. /package/{skills → myagent/skills}/ui-ux-pro-max/data/stacks/vue.csv +0 -0
  651. /package/{skills → myagent/skills}/ui-ux-pro-max/data/styles.csv +0 -0
  652. /package/{skills → myagent/skills}/ui-ux-pro-max/data/typography.csv +0 -0
  653. /package/{skills → myagent/skills}/ui-ux-pro-max/data/ui-reasoning.csv +0 -0
  654. /package/{skills → myagent/skills}/ui-ux-pro-max/data/ux-guidelines.csv +0 -0
  655. /package/{skills → myagent/skills}/ui-ux-pro-max/data/web-interface.csv +0 -0
  656. /package/{skills → myagent/skills}/ui-ux-pro-max/references/upstream-README.md +0 -0
  657. /package/{skills → myagent/skills}/ui-ux-pro-max/references/upstream-skill-content.md +0 -0
  658. /package/{skills → myagent/skills}/ui-ux-pro-max/scripts/__init__.py +0 -0
  659. /package/{skills → myagent/skills}/ui-ux-pro-max/scripts/core.py +0 -0
  660. /package/{skills → myagent/skills}/ui-ux-pro-max/scripts/design_system.py +0 -0
  661. /package/{skills → myagent/skills}/ui-ux-pro-max/scripts/search.py +0 -0
  662. /package/{skills → myagent/skills}/video-generation/LICENSE.txt +0 -0
  663. /package/{skills → myagent/skills}/video-generation/SKILL.md +0 -0
  664. /package/{skills → myagent/skills}/video-generation/scripts/video.ts +0 -0
  665. /package/{skills → myagent/skills}/video-understand/LICENSE.txt +0 -0
  666. /package/{skills → myagent/skills}/video-understand/SKILL.md +0 -0
  667. /package/{skills → myagent/skills}/video-understand/scripts/video-understand.ts +0 -0
  668. /package/{skills → myagent/skills}/visual-design-foundations/SKILL.md +0 -0
  669. /package/{skills → myagent/skills}/visual-design-foundations/references/color-systems.md +0 -0
  670. /package/{skills → myagent/skills}/visual-design-foundations/references/spacing-iconography.md +0 -0
  671. /package/{skills → myagent/skills}/visual-design-foundations/references/typography-systems.md +0 -0
  672. /package/{skills → myagent/skills}/web-reader/LICENSE.txt +0 -0
  673. /package/{skills → myagent/skills}/web-reader/SKILL.md +0 -0
  674. /package/{skills → myagent/skills}/web-reader/scripts/web-reader.ts +0 -0
  675. /package/{skills → myagent/skills}/web-search/LICENSE.txt +0 -0
  676. /package/{skills → myagent/skills}/web-search/SKILL.md +0 -0
  677. /package/{skills → myagent/skills}/web-search/scripts/web_search.ts +0 -0
  678. /package/{skills → myagent/skills}/web-shader-extractor/SKILL.md +0 -0
  679. /package/{skills → myagent/skills}/web-shader-extractor/references/config-extraction.md +0 -0
  680. /package/{skills → myagent/skills}/web-shader-extractor/references/encoded-definitions.md +0 -0
  681. /package/{skills → myagent/skills}/web-shader-extractor/references/extraction-workflow.md +0 -0
  682. /package/{skills → myagent/skills}/web-shader-extractor/references/porting-strategy.md +0 -0
  683. /package/{skills → myagent/skills}/web-shader-extractor/references/shader-injection.md +0 -0
  684. /package/{skills → myagent/skills}/web-shader-extractor/references/shaders-com.md +0 -0
  685. /package/{skills → myagent/skills}/web-shader-extractor/references/tech-signatures.md +0 -0
  686. /package/{skills → myagent/skills}/web-shader-extractor/references/tsl-extraction.md +0 -0
  687. /package/{skills → myagent/skills}/web-shader-extractor/references/unicorn-studio.md +0 -0
  688. /package/{skills → myagent/skills}/web-shader-extractor/scripts/fetch-rendered-dom.mjs +0 -0
  689. /package/{skills → myagent/skills}/web-shader-extractor/scripts/scan-bundle.sh +0 -0
  690. /package/{skills → myagent/skills}/writing-plans/SKILL.md +0 -0
  691. /package/{skills → myagent/skills}/writing-plans/_meta.json +0 -0
  692. /package/{skills → myagent/skills}/xlsx/LICENSE.txt +0 -0
  693. /package/{skills → myagent/skills}/xlsx/SKILL.md +0 -0
  694. /package/{skills → myagent/skills}/xlsx/engines/chart-templates.md +0 -0
  695. /package/{skills → myagent/skills}/xlsx/engines/chart.md +0 -0
  696. /package/{skills → myagent/skills}/xlsx/engines/design.md +0 -0
  697. /package/{skills → myagent/skills}/xlsx/engines/vba-templates.md +0 -0
  698. /package/{skills → myagent/skills}/xlsx/quality/pipeline.md +0 -0
  699. /package/{skills → myagent/skills}/xlsx/scenes/advanced.md +0 -0
  700. /package/{skills → myagent/skills}/xlsx/scenes/analyze-recipes.md +0 -0
  701. /package/{skills → myagent/skills}/xlsx/scenes/analyze.md +0 -0
  702. /package/{skills → myagent/skills}/xlsx/scenes/convert.md +0 -0
  703. /package/{skills → myagent/skills}/xlsx/scenes/create.md +0 -0
  704. /package/{skills → myagent/skills}/xlsx/scenes/edit-patterns.md +0 -0
  705. /package/{skills → myagent/skills}/xlsx/scenes/edit.md +0 -0
  706. /package/{skills → myagent/skills}/xlsx/scenes/finance.md +0 -0
  707. /package/{skills → myagent/skills}/xlsx/scenes/finance_lite.md +0 -0
  708. /package/{skills → myagent/skills}/xlsx/scenes/vba.md +0 -0
  709. /package/{skills → myagent/skills}/xlsx/setup.sh +0 -0
  710. /package/{skills → myagent/skills}/xlsx/templates/base.py +0 -0
  711. /package/{skills → myagent/skills}/xlsx/templates/palettes.py +0 -0
  712. /package/{skills → myagent/skills}/xlsx/xlsx.py +0 -0
  713. /package/{skills → myagent/skills}/xlsx_skill.py +0 -0
  714. /package/{start.js → myagent/start.js} +0 -0
  715. /package/{start.sh → myagent/start.sh} +0 -0
  716. /package/{web → myagent/web}/__init__.py +0 -0
  717. /package/{web → myagent/web}/tts_handler.py +0 -0
  718. /package/{web → myagent/web}/ui/admin/admin-agentchat.js +0 -0
  719. /package/{web → myagent/web}/ui/admin/admin-agents.js +0 -0
  720. /package/{web → myagent/web}/ui/admin/admin-core.js +0 -0
  721. /package/{web → myagent/web}/ui/admin/admin-dashboard.js +0 -0
  722. /package/{web → myagent/web}/ui/admin/admin-executor.js +0 -0
  723. /package/{web → myagent/web}/ui/admin/admin-files.js +0 -0
  724. /package/{web → myagent/web}/ui/admin/admin-llm.js +0 -0
  725. /package/{web → myagent/web}/ui/admin/admin-logs.js +0 -0
  726. /package/{web → myagent/web}/ui/admin/admin-memory.js +0 -0
  727. /package/{web → myagent/web}/ui/admin/admin-org.js +0 -0
  728. /package/{web → myagent/web}/ui/admin/admin-permissions.js +0 -0
  729. /package/{web → myagent/web}/ui/admin/admin-platforms.js +0 -0
  730. /package/{web → myagent/web}/ui/admin/admin-sessions.js +0 -0
  731. /package/{web → myagent/web}/ui/admin/admin-skills.js +0 -0
  732. /package/{web → myagent/web}/ui/admin/admin-system.js +0 -0
  733. /package/{web → myagent/web}/ui/admin/admin-tasks.js +0 -0
  734. /package/{web → myagent/web}/ui/chat/chat.css +0 -0
  735. /package/{web → myagent/web}/ui/chat/chat.js +0 -0
  736. /package/{web → myagent/web}/ui/chat/chat_container.html +0 -0
  737. /package/{web → myagent/web}/ui/chat/flow_engine.js +0 -0
  738. /package/{web → myagent/web}/ui/chat/groupchat.js +0 -0
  739. /package/{web → myagent/web}/ui/chat/left_sessions.html +0 -0
  740. /package/{web → myagent/web}/ui/chat/middle_chat.html +0 -0
  741. /package/{web → myagent/web}/ui/chat/right_agents.html +0 -0
  742. /package/{web → myagent/web}/ui/index.html +0 -0
  743. /package/{worklog-v1.22.md → myagent/worklog-v1.22.md} +0 -0
@@ -539,7 +539,7 @@ class ToolDispatcher:
539
539
  ) -> Dict:
540
540
  """网页控制器 — 浏览器面板"""
541
541
  try:
542
- from core.web_control import get_web_control_manager
542
+ from core.web_control import get_web_control_manager, LOGIN_URLS
543
543
  wc_mgr = get_web_control_manager()
544
544
  action = params.get("action", "open")
545
545
  session_id = params.get("session_id", "").strip()
@@ -604,7 +604,7 @@ class ToolDispatcher:
604
604
 
605
605
  elif action in ("get_content", "click", "fill", "scroll", "evaluate", "wait", "screenshot"):
606
606
  # 这些 action 通过命令队列由浏览器面板执行
607
- cmd_result = await session.execute_command(action, params)
607
+ cmd_result = await wc_mgr.queue_command(session_id, action, params, timeout=30)
608
608
  return {
609
609
  "success": cmd_result.get("success", False),
610
610
  "output": cmd_result.get("output", cmd_result.get("result", "")),
@@ -612,6 +612,314 @@ class ToolDispatcher:
612
612
  "data": cmd_result.get("data"),
613
613
  }
614
614
 
615
+ elif action == "human_interact":
616
+ # [v1.25.3] 人机交互模式 — Agent 暂停, 用户手动操作
617
+ prompt = params.get("prompt", "请在上方网页中完成登录或验证操作")
618
+ platform = params.get("platform", "")
619
+ timeout = int(params.get("timeout", 0)) or 300 # 默认5分钟
620
+ auto_save = params.get("auto_save_cookies", True)
621
+
622
+ # 1. 向面板发送 human_interact 命令(切换到人机模式)
623
+ session.human_mode = True
624
+ cmd_result = await wc_mgr.queue_command(
625
+ session_id, "human_interact",
626
+ {"prompt": prompt, "platform": platform},
627
+ timeout=15
628
+ )
629
+
630
+ # 2. 通知前端显示人机交互 UI
631
+ if stream_callback:
632
+ await self._emit_sse("v2_web_control", {
633
+ "action": "human_interact",
634
+ "session_id": session_id,
635
+ "prompt": prompt,
636
+ "platform": platform,
637
+ "timeout": timeout,
638
+ }, stream_callback)
639
+
640
+ # 3. 创建 human_event 并等待用户完成
641
+ loop = asyncio.get_event_loop()
642
+ session.human_event = asyncio.Event()
643
+ session.human_result = None
644
+
645
+ try:
646
+ await asyncio.wait_for(session.human_event.wait(), timeout=timeout)
647
+ except asyncio.TimeoutError:
648
+ session.human_mode = False
649
+ # 恢复 agent 模式
650
+ try:
651
+ await wc_mgr.queue_command(session_id, "agent_mode", {}, timeout=5)
652
+ except Exception:
653
+ pass
654
+ if stream_callback:
655
+ await self._emit_sse("v2_web_control", {
656
+ "action": "human_done",
657
+ "session_id": session_id,
658
+ "timed_out": True,
659
+ }, stream_callback)
660
+ return {"success": False, "error": f"人机交互超时 ({timeout}s)"}
661
+
662
+ # 4. 用户完成, 恢复 agent 模式
663
+ session.human_mode = False
664
+ try:
665
+ await wc_mgr.queue_command(session_id, "agent_mode", {}, timeout=5)
666
+ except Exception:
667
+ pass
668
+
669
+ # 5. 自动保存 cookies
670
+ cookie_file = ""
671
+ if auto_save:
672
+ try:
673
+ cookie_file = session.save_cookies_to_file()
674
+ except Exception as e:
675
+ cookie_file = f"(保存失败: {e})"
676
+
677
+ # 6. 获取当前页面信息
678
+ page_info = ""
679
+ try:
680
+ info_result = await wc_mgr.queue_command(session_id, "get_content", {"what": "url,title"}, timeout=10)
681
+ if info_result.get("success"):
682
+ page_info = info_result.get("result", "")
683
+ except Exception:
684
+ pass
685
+
686
+ result_data = session.human_result or {}
687
+ if stream_callback:
688
+ await self._emit_sse("v2_web_control", {
689
+ "action": "human_done",
690
+ "session_id": session_id,
691
+ }, stream_callback)
692
+
693
+ output_parts = [f"用户已完成人机交互操作"]
694
+ if page_info:
695
+ output_parts.append(f"当前页面: {page_info}")
696
+ if cookie_file:
697
+ output_parts.append(f"Cookies 已保存: {cookie_file}")
698
+ if result_data.get("note"):
699
+ output_parts.append(f"用户备注: {result_data['note']}")
700
+
701
+ return {
702
+ "success": True,
703
+ "output": "\n".join(output_parts),
704
+ "session_id": session_id,
705
+ "cookies_saved": bool(cookie_file) and not cookie_file.startswith("("),
706
+ "cookie_file": cookie_file,
707
+ "data": result_data,
708
+ }
709
+
710
+ elif action == "login":
711
+ # [v1.25.4] 一站式登录流程: 导航 → 人机交互 → 自动保存凭证
712
+ platform = params.get("platform", "").strip().lower()
713
+ login_url = params.get("url", "").strip()
714
+ prompt = params.get("prompt", "")
715
+ timeout = int(params.get("timeout", 0)) or 300
716
+ label = params.get("label", "")
717
+
718
+ # 查找平台登录 URL
719
+ if not login_url and platform:
720
+ login_url = LOGIN_URLS.get(platform, "")
721
+ if not login_url:
722
+ return {"success": False, "error": f"未知平台 '{platform}',未找到预置登录 URL,请通过 url 参数指定登录页地址"}
723
+
724
+ if not login_url:
725
+ return {"success": False, "error": "请提供 platform (平台名称) 或 url (登录页地址) 参数"}
726
+
727
+ # 构建默认提示
728
+ platform_names = {
729
+ "qq": "QQ", "qq_mail": "QQ邮箱", "wechat_work": "企业微信",
730
+ "wechat_mp": "微信公众号", "telegram": "Telegram", "telegram_web": "Telegram Web",
731
+ "discord": "Discord", "feishu": "飞书", "feishu_admin": "飞书管理后台",
732
+ "lark": "Lark", "dingtalk": "钉钉", "github": "GitHub",
733
+ "google": "Google", "bilibili": "B站", "taobao": "淘宝",
734
+ "zhihu": "知乎", "weibo": "微博",
735
+ }
736
+ display_name = platform_names.get(platform, platform) if platform else ""
737
+ if not prompt:
738
+ prompt = f"请在上方页面完成 {display_name} 登录操作" if display_name else "请在上方页面完成登录操作"
739
+ # 添加平台特定提示
740
+ if platform in ("qq", "wechat_mp", "telegram", "discord", "dingtalk"):
741
+ prompt += "(可能需要扫码或输入账号密码)"
742
+ elif platform in ("wechat_work", "feishu", "feishu_admin", "lark"):
743
+ prompt += "(请使用管理员账号扫码登录)"
744
+
745
+ # Step 1: 打开面板
746
+ session.current_url = login_url
747
+ if stream_callback:
748
+ await self._emit_sse("v2_web_control", {
749
+ "action": "login",
750
+ "session_id": session_id,
751
+ "url": login_url,
752
+ "panel_url": f"/api/web_control/panel?sid={session_id}",
753
+ "platform": platform,
754
+ "prompt": prompt,
755
+ "timeout": timeout,
756
+ }, stream_callback)
757
+
758
+ # Step 2: 等待面板打开
759
+ if not session.is_panel_open:
760
+ waited = 0
761
+ while waited < 15:
762
+ await asyncio.sleep(1)
763
+ waited += 1
764
+ if session.is_panel_open:
765
+ break
766
+ if session._closed:
767
+ return {"success": False, "error": "会话已关闭"}
768
+
769
+ # Step 3: 切换人机交互模式
770
+ session.human_mode = True
771
+ try:
772
+ await wc_mgr.queue_command(
773
+ session_id, "human_interact",
774
+ {"prompt": prompt, "platform": display_name},
775
+ timeout=15
776
+ )
777
+ except Exception as e:
778
+ logger.warning(f"[WebControl] human_interact 命令发送失败: {e}")
779
+
780
+ # Step 4: 等待用户完成
781
+ loop = asyncio.get_event_loop()
782
+ session.human_event = asyncio.Event()
783
+ session.human_result = None
784
+
785
+ try:
786
+ await asyncio.wait_for(session.human_event.wait(), timeout=timeout)
787
+ except asyncio.TimeoutError:
788
+ session.human_mode = False
789
+ try:
790
+ await wc_mgr.queue_command(session_id, "agent_mode", {}, timeout=5)
791
+ except Exception:
792
+ pass
793
+ if stream_callback:
794
+ await self._emit_sse("v2_web_control", {
795
+ "action": "human_done", "session_id": session_id, "timed_out": True,
796
+ }, stream_callback)
797
+ return {"success": False, "error": f"登录超时 ({timeout}s),请重试"}
798
+
799
+ # Step 5: 用户完成,恢复 agent 模式
800
+ session.human_mode = False
801
+ try:
802
+ await wc_mgr.queue_command(session_id, "agent_mode", {}, timeout=5)
803
+ except Exception:
804
+ pass
805
+
806
+ # Step 6: 获取当前页面信息
807
+ page_info = ""
808
+ try:
809
+ info_result = await wc_mgr.queue_command(session_id, "get_content", {"what": "url,title"}, timeout=10)
810
+ if info_result.get("success"):
811
+ page_info = info_result.get("result", "")
812
+ except Exception:
813
+ pass
814
+
815
+ # Step 7: 自动保存 cookies + 凭证
816
+ cookie_file = ""
817
+ cred_file = ""
818
+ result_data = session.human_result or {}
819
+
820
+ try:
821
+ cookie_file = session.save_cookies_to_file()
822
+ except Exception as e:
823
+ cookie_file = f"(保存失败: {e})"
824
+
825
+ # 保存到凭证库
826
+ if platform:
827
+ try:
828
+ extra = {"note": result_data.get("note", ""), "login_url": login_url}
829
+ cred_file = session.save_credentials_to_file(platform, label=label, extra=extra)
830
+ except Exception as e:
831
+ cred_file = f"(保存失败: {e})"
832
+
833
+ # 检测是否登录成功 (URL 发生了变化)
834
+ login_success = False
835
+ if page_info and login_url:
836
+ current_url = page_info.split(",")[0].strip() if "," in page_info else page_info
837
+ login_success = (current_url != login_url and "login" not in current_url.lower())
838
+
839
+ if stream_callback:
840
+ await self._emit_sse("v2_web_control", {
841
+ "action": "login_done",
842
+ "session_id": session_id,
843
+ "platform": platform,
844
+ "login_success": login_success,
845
+ }, stream_callback)
846
+
847
+ output_parts = []
848
+ if login_success:
849
+ output_parts.append(f"{display_name} 登录成功")
850
+ else:
851
+ output_parts.append(f"用户已完成 {display_name} 登录操作")
852
+ if page_info:
853
+ output_parts.append(f"当前页面: {page_info}")
854
+ if cookie_file and not cookie_file.startswith("("):
855
+ output_parts.append(f"Cookies 已保存: {cookie_file}")
856
+ if cred_file and not cred_file.startswith("("):
857
+ output_parts.append(f"凭证已保存: {cred_file}")
858
+ if result_data.get("note"):
859
+ output_parts.append(f"用户备注: {result_data['note']}")
860
+
861
+ return {
862
+ "success": True,
863
+ "output": "\n".join(output_parts),
864
+ "session_id": session_id,
865
+ "login_success": login_success,
866
+ "platform": platform,
867
+ "cookie_file": cookie_file,
868
+ "credential_file": cred_file,
869
+ "data": result_data,
870
+ }
871
+
872
+ elif action == "save_credentials":
873
+ # [v1.25.4] 保存凭证到凭证库
874
+ platform = params.get("platform", "").strip()
875
+ label = params.get("label", "").strip()
876
+ if not platform:
877
+ return {"success": False, "error": "请提供 platform 参数 (平台名称)"}
878
+ try:
879
+ filepath = session.save_credentials_to_file(platform, label=label)
880
+ return {"success": True, "output": f"凭证已保存到: {filepath}", "credential_file": filepath}
881
+ except Exception as e:
882
+ return {"success": False, "error": f"保存凭证失败: {e}"}
883
+
884
+ elif action == "list_credentials":
885
+ # [v1.25.4] 列出所有已保存的凭证
886
+ creds = WebControlSession.list_credentials()
887
+ if not creds:
888
+ return {"success": True, "output": "暂无已保存的登录凭证", "data": []}
889
+ lines = [f"已保存 {len(creds)} 个凭证:"]
890
+ for c in creds:
891
+ lines.append(f" - {c['platform']} ({c.get('label', '无标签')}) | 保存时间: {c['saved_at']} | Cookies: {c['cookie_count']}个")
892
+ return {"success": True, "output": "\n".join(lines), "data": creds}
893
+
894
+ elif action == "delete_credentials":
895
+ # [v1.25.4] 删除凭证
896
+ platform = params.get("platform", "").strip()
897
+ if not platform:
898
+ return {"success": False, "error": "请提供 platform 参数"}
899
+ deleted = WebControlSession.delete_credentials(platform)
900
+ if deleted:
901
+ return {"success": True, "output": f"已删除 {platform} 的凭证"}
902
+ else:
903
+ return {"success": False, "error": f"未找到 {platform} 的凭证"}
904
+
905
+ elif action == "save_cookies":
906
+ # [v1.25.3] 保存 cookies 到文件
907
+ label = params.get("label", "")
908
+ try:
909
+ filepath = session.save_cookies_to_file(label)
910
+ return {"success": True, "output": f"Cookies 已保存到: {filepath} ({len(session.cookies)} 个)", "cookie_file": filepath}
911
+ except Exception as e:
912
+ return {"success": False, "error": f"保存 cookies 失败: {e}"}
913
+
914
+ elif action == "load_cookies":
915
+ # [v1.25.3] 从文件加载 cookies
916
+ label = params.get("label", "")
917
+ count = session.load_cookies_from_file(label)
918
+ if count > 0:
919
+ return {"success": True, "output": f"已加载 {count} 个 Cookies"}
920
+ else:
921
+ return {"success": False, "error": f"未找到匹配的 Cookie 文件 (label: {label or '自动'})"}
922
+
615
923
  else:
616
924
  return {"success": False, "error": f"未知 web_control action: {action}"}
617
925
 
@@ -1,27 +1,57 @@
1
1
  """
2
- [v1.21.0] Web Control — 聊天内嵌网页控制器
2
+ [v1.25.4] Web Control — 聊天内嵌网页控制器
3
3
 
4
4
  架构说明:
5
5
  - 服务端代理: 通过 /api/web_control/proxy 获取并改写网页内容, 注入控制脚本
6
6
  - 会话管理: 每个聊天会话可创建一个 web_control 会话, 维护 cookie/命令队列/结果 Future
7
7
  - 双向通信: Agent → 命令队列 → 客户端轮询 → 执行 → POST 结果 → Agent 阻塞等待
8
8
  - 前端面板: 基础JS框架 + 动态容器(iframe), 服务端下发控制脚本在容器内执行
9
+ - [v1.25.3] 人机交互: human_interact action 允许 Agent 暂停控制, 用户手动登录后继续
10
+ - [v1.25.4] 登录流程: login action 提供一站式登录编排 + 凭证管理
9
11
 
10
12
  工具 web_control 支持的 action:
11
- open — 打开 URL (发送 v2_web_control SSE 事件, 前端打开面板)
12
- navigate — 在已打开的面板中导航到新 URL
13
- click — 点击元素 (selector: CSS 选择器)
14
- fill — 填写输入框 (selector + value)
15
- scroll — 滚动页面 (direction: up/down/top/bottom, distance: px)
16
- evaluate — 执行 JavaScript (script: JS 代码)
17
- get_content — 获取页面内容 (what: text/html/url/title/cookies/links)
18
- set_cookies — 设置 cookie (cookies: [{name, value, domain, path}])
19
- get_cookies — 获取当前 cookie
20
- wait — 等待 (time: 毫秒 或 selector: CSS选择器, timeout: 秒)
21
- screenshot — 截图 (返回 base64 PNG)
22
- close 关闭 web_control 面板
13
+ open — 打开 URL (发送 v2_web_control SSE 事件, 前端打开面板)
14
+ navigate — 在已打开的面板中导航到新 URL
15
+ click — 点击元素 (selector: CSS 选择器)
16
+ fill — 填写输入框 (selector + value)
17
+ scroll — 滚动页面 (direction: up/down/top/bottom, distance: px)
18
+ evaluate — 执行 JavaScript (script: JS 代码)
19
+ get_content — 获取页面内容 (what: text/html/url/title/cookies/links)
20
+ set_cookies — 设置 cookie (cookies: [{name, value, domain, path}])
21
+ get_cookies — 获取当前 cookie
22
+ wait — 等待 (time: 毫秒 或 selector: CSS选择器, timeout: 秒)
23
+ screenshot — 截图 (返回 base64 PNG)
24
+ human_interact [v1.25.3] 切换为人机交互模式, 用户可手动操作页面 (登录/验证码等)
25
+ save_cookies — [v1.25.3] 保存当前会话 cookies 到持久化文件
26
+ load_cookies — [v1.25.3] 从持久化文件加载 cookies
27
+ login — [v1.25.4] 一站式登录流程: 导航到登录页 → 人机交互 → 自动保存凭证
28
+ save_credentials — [v1.25.4] 保存登录凭证 (cookies + 元信息) 到凭证库
29
+ list_credentials — [v1.25.4] 列出已保存的凭证
30
+ delete_credentials — [v1.25.4] 删除指定凭证
31
+ close — 关闭 web_control 面板
23
32
  """
24
33
 
34
+ # [v1.25.4] 常用平台登录 URL 模板
35
+ LOGIN_URLS = {
36
+ "qq": "https://qun.qq.com/",
37
+ "qq_mail": "https://mail.qq.com/",
38
+ "wechat_work": "https://work.weixin.qq.com/wework_admin/frame",
39
+ "wechat_mp": "https://mp.weixin.qq.com/",
40
+ "telegram": "https://web.telegram.org/",
41
+ "telegram_web": "https://web.telegram.org/",
42
+ "discord": "https://discord.com/login",
43
+ "feishu": "https://open.feishu.cn/",
44
+ "feishu_admin": "https://feishu.cn/admin",
45
+ "lark": "https://open.larksuite.com/",
46
+ "dingtalk": "https://login.dingtalk.com/",
47
+ "github": "https://github.com/login",
48
+ "google": "https://accounts.google.com/",
49
+ "bilibili": "https://passport.bilibili.com/login",
50
+ "taobao": "https://login.taobao.com/",
51
+ "zhihu": "https://www.zhihu.com/signin",
52
+ "weibo": "https://passport.weibo.com/sso/signin",
53
+ }
54
+
25
55
  import asyncio
26
56
  import json
27
57
  import os
@@ -107,6 +137,19 @@ CONTROL_SCRIPT = """
107
137
  case 'screenshot':
108
138
  result = await doScreenshot(cmd.params || {});
109
139
  break;
140
+ case 'human_interact':
141
+ // [v1.25.3] 切换人机模式
142
+ window.__webControlHumanMode = true;
143
+ // 显示人机模式提示横幅
144
+ showHumanModeBanner(cmd.params || {});
145
+ result = { success: true, human_mode: true, message: '已切换到人机交互模式, 用户可自由操作页面' };
146
+ break;
147
+ case 'agent_mode':
148
+ // [v1.25.3] 恢复 Agent 控制模式
149
+ window.__webControlHumanMode = false;
150
+ hideHumanModeBanner();
151
+ result = { success: true, human_mode: false, message: '已恢复 Agent 控制模式' };
152
+ break;
110
153
  default:
111
154
  result = { success: false, error: 'Unknown action: ' + cmd.action };
112
155
  }
@@ -285,6 +328,40 @@ CONTROL_SCRIPT = """
285
328
  });
286
329
  }
287
330
 
331
+ // [v1.25.3] 人机模式横幅
332
+ function showHumanModeBanner(p) {
333
+ var banner = document.createElement('div');
334
+ banner.id = '__wcHumanBanner';
335
+ var promptText = (p && p.prompt) ? p.prompt : '人机交互模式 — 请在此页面完成登录或验证操作';
336
+ var platformText = (p && p.platform) ? ' (' + p.platform + ')' : '';
337
+ banner.style.cssText = 'position:fixed;top:0;left:0;right:0;z-index:999999;padding:10px 16px;' +
338
+ 'background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;font-size:14px;font-weight:600;' +
339
+ 'display:flex;align-items:center;justify-content:space-between;box-shadow:0 2px 12px rgba(0,0,0,0.3);font-family:-apple-system,BlinkMacSystemFont,sans-serif;';
340
+ banner.innerHTML = '<span>\u{1F3AF} ' + promptText + platformText + '</span>';
341
+ document.body.appendChild(banner);
342
+ // 为页面内容添加顶部间距
343
+ document.body.style.paddingTop = '44px';
344
+ // [v1.25.4] 记录进入人机模式时的 URL, 用于检测登录成功
345
+ window.__webControlLoginStartUrl = window.location.href;
346
+ // [v1.25.4] 监听 URL 变化 (登录成功通常伴随跳转)
347
+ window.__webControlLastNotifiedUrl = window.location.href;
348
+ var _urlCheckInterval = setInterval(function() {
349
+ if (!window.__webControlHumanMode) { clearInterval(_urlCheckInterval); return; }
350
+ var currentUrl = window.location.href;
351
+ if (currentUrl !== window.__webControlLastNotifiedUrl) {
352
+ window.__webControlLastNotifiedUrl = currentUrl;
353
+ // 通知父窗口 URL 发生了变化 (可能登录成功)
354
+ notifyParent('url_change', { url: currentUrl, previous_url: window.__webControlLoginStartUrl });
355
+ }
356
+ }, 1000);
357
+ }
358
+ function hideHumanModeBanner() {
359
+ var banner = document.getElementById('__wcHumanBanner');
360
+ if (banner) banner.remove();
361
+ document.body.style.paddingTop = '';
362
+ window.__webControlLoginStartUrl = null;
363
+ }
364
+
288
365
  function doScreenshot(p) {
289
366
  // html2canvas 未加载时返回提示
290
367
  if (typeof html2canvas === 'undefined') {
@@ -296,8 +373,12 @@ CONTROL_SCRIPT = """
296
373
  });
297
374
  }
298
375
 
299
- // 拦截链接点击, 重定向到代理
376
+ // [v1.25.3] 人机交互模式标志
377
+ window.__webControlHumanMode = false;
378
+
379
+ // 拦截链接点击, 重定向到代理(人机模式下跳过拦截)
300
380
  document.addEventListener('click', function(e) {
381
+ if (window.__webControlHumanMode) return; // 人机模式不拦截
301
382
  var link = e.target.closest('a');
302
383
  if (link && link.href) {
303
384
  // 允许 target=_blank 和特殊链接
@@ -312,8 +393,9 @@ CONTROL_SCRIPT = """
312
393
  }
313
394
  }, true);
314
395
 
315
- // 拦截表单提交
396
+ // 拦截表单提交(人机模式下跳过拦截)
316
397
  document.addEventListener('submit', function(e) {
398
+ if (window.__webControlHumanMode) return; // 人机模式不拦截
317
399
  var form = e.target;
318
400
  if (form.method && form.method.toLowerCase() === 'post') {
319
401
  // POST 表单暂不代理, 仅阻止默认行为
@@ -354,6 +436,10 @@ class WebControlSession:
354
436
  self.pending_results: Dict[str, asyncio.Future] = {}
355
437
  self.is_panel_open = False
356
438
  self._closed = False
439
+ # [v1.25.3] 人机交互模式
440
+ self.human_mode = False
441
+ self.human_event: Optional[asyncio.Event] = None # Agent 等待用户完成操作
442
+ self.human_result: Optional[Dict[str, Any]] = None
357
443
 
358
444
  def is_alive(self) -> bool:
359
445
  if self._closed:
@@ -371,6 +457,123 @@ class WebControlSession:
371
457
  if not future.done():
372
458
  future.set_result({"success": False, "error": "Session closed"})
373
459
  self.pending_results.clear()
460
+ # 唤醒等待 human_event 的协程
461
+ if self.human_event and not self.human_event.is_set():
462
+ self.human_event.set()
463
+
464
+ # [v1.25.3] Cookie 持久化
465
+ def save_cookies_to_file(self, label: str = "") -> str:
466
+ """将当前 cookies 保存到文件, 返回文件路径"""
467
+ import json as _json
468
+ from pathlib import Path
469
+ cookie_dir = Path.home() / ".myagent" / "data" / "web_cookies"
470
+ cookie_dir.mkdir(parents=True, exist_ok=True)
471
+ if not label:
472
+ # 从 current_url 提取域名作为 label
473
+ parsed = urlparse(self.current_url)
474
+ label = parsed.hostname or "default"
475
+ label = re.sub(r'[^a-zA-Z0-9._-]', '_', label)
476
+ filepath = cookie_dir / f"{label}.json"
477
+ data = {
478
+ "url": self.current_url,
479
+ "saved_at": time.strftime("%Y-%m-%d %H:%M:%S"),
480
+ "cookies": [
481
+ {"key": k, "value": v} for k, v in self.cookies.items()
482
+ ]
483
+ }
484
+ filepath.write_text(_json.dumps(data, ensure_ascii=False, indent=2), encoding='utf-8')
485
+ logger.info(f"[WebControl] Cookies 已保存: {filepath} ({len(self.cookies)} 个)")
486
+ return str(filepath)
487
+
488
+ def load_cookies_from_file(self, label: str = "") -> int:
489
+ """从文件加载 cookies, 返回加载的数量"""
490
+ import json as _json
491
+ from pathlib import Path
492
+ cookie_dir = Path.home() / ".myagent" / "data" / "web_cookies"
493
+ if not label:
494
+ parsed = urlparse(self.current_url)
495
+ label = parsed.hostname or "default"
496
+ label = re.sub(r'[^a-zA-Z0-9._-]', '_', label)
497
+ filepath = cookie_dir / f"{label}.json"
498
+ if not filepath.exists():
499
+ return 0
500
+ try:
501
+ data = _json.loads(filepath.read_text(encoding='utf-8'))
502
+ count = 0
503
+ for item in data.get("cookies", []):
504
+ self.cookies[item["key"]] = item["value"]
505
+ count += 1
506
+ logger.info(f"[WebControl] Cookies 已加载: {filepath} ({count} 个)")
507
+ return count
508
+ except Exception as e:
509
+ logger.error(f"[WebControl] 加载 cookies 失败: {e}")
510
+ return 0
511
+
512
+ # [v1.25.4] 凭证管理 — 保存/列出/删除登录凭证
513
+ def save_credentials_to_file(self, platform: str, label: str = "", extra: Dict = None) -> str:
514
+ """保存完整登录凭证 (cookies + 元信息) 到凭证库, 返回文件路径"""
515
+ import json as _json
516
+ from pathlib import Path
517
+ cred_dir = Path.home() / ".myagent" / "data" / "credentials"
518
+ cred_dir.mkdir(parents=True, exist_ok=True)
519
+ # platform 作为文件名
520
+ safe_platform = re.sub(r'[^a-zA-Z0-9._-]', '_', platform).lower()
521
+ if not safe_platform:
522
+ safe_platform = "default"
523
+ filepath = cred_dir / f"{safe_platform}.json"
524
+ data = {
525
+ "platform": platform,
526
+ "url": self.current_url,
527
+ "saved_at": time.strftime("%Y-%m-%d %H:%M:%S"),
528
+ "cookie_count": len(self.cookies),
529
+ "cookies": [
530
+ {"key": k, "value": v} for k, v in self.cookies.items()
531
+ ],
532
+ }
533
+ if extra:
534
+ data["extra"] = extra
535
+ if label:
536
+ data["label"] = label
537
+ filepath.write_text(_json.dumps(data, ensure_ascii=False, indent=2), encoding='utf-8')
538
+ logger.info(f"[WebControl] 凭证已保存: {filepath} (平台: {platform}, cookies: {len(self.cookies)})")
539
+ return str(filepath)
540
+
541
+ @staticmethod
542
+ def list_credentials() -> List[Dict]:
543
+ """列出所有已保存的凭证"""
544
+ import json as _json
545
+ from pathlib import Path
546
+ cred_dir = Path.home() / ".myagent" / "data" / "credentials"
547
+ if not cred_dir.exists():
548
+ return []
549
+ results = []
550
+ for f in sorted(cred_dir.glob("*.json")):
551
+ try:
552
+ data = _json.loads(f.read_text(encoding='utf-8'))
553
+ results.append({
554
+ "platform": data.get("platform", f.stem),
555
+ "label": data.get("label", ""),
556
+ "url": data.get("url", ""),
557
+ "saved_at": data.get("saved_at", ""),
558
+ "cookie_count": data.get("cookie_count", 0),
559
+ "file": str(f),
560
+ })
561
+ except Exception:
562
+ pass
563
+ return results
564
+
565
+ @staticmethod
566
+ def delete_credentials(platform: str) -> bool:
567
+ """删除指定平台的凭证"""
568
+ from pathlib import Path
569
+ cred_dir = Path.home() / ".myagent" / "data" / "credentials"
570
+ safe_platform = re.sub(r'[^a-zA-Z0-9._-]', '_', platform).lower()
571
+ filepath = cred_dir / f"{safe_platform}.json"
572
+ if filepath.exists():
573
+ filepath.unlink()
574
+ logger.info(f"[WebControl] 凭证已删除: {filepath} (平台: {platform})")
575
+ return True
576
+ return False
374
577
 
375
578
 
376
579
  class WebControlManager:
@@ -0,0 +1,54 @@
1
+ # MyAgent - 本地桌面端执行型 AI 助手
2
+ # Docker 构建文件 (主要用于服务器部署)
3
+ FROM python:3.13-slim
4
+
5
+ WORKDIR /app
6
+
7
+ # 安装系统依赖
8
+ # [v1.16.18] 包含 poppler-utils (PDF提取)、Chrome 共享库 (浏览器自动化)
9
+ RUN apt-get update && apt-get install -y --no-install-recommends \
10
+ python3-pip \
11
+ poppler-utils \
12
+ # Chrome/Chromium 运行所需的共享库
13
+ libnss3 \
14
+ libatk1.0-0 \
15
+ libatk-bridge2.0-0 \
16
+ libcups2 \
17
+ libdrm2 \
18
+ libxkbcommon0 \
19
+ libxcomposite1 \
20
+ libxdamage1 \
21
+ libxfixes3 \
22
+ libxrandr2 \
23
+ libgbm1 \
24
+ libpango-1.0-0 \
25
+ libcairo2 \
26
+ libasound2 \
27
+ libatspi2.0-0 \
28
+ # Node.js (浏览器自动化 MCP 需要)
29
+ nodejs \
30
+ npm \
31
+ && rm -rf /var/lib/apt/lists/*
32
+
33
+ # 安装 Puppeteer 的 Chrome (自包含,容器环境最可靠)
34
+ RUN npx -y puppeteer browsers install chrome@stable || true
35
+
36
+ # 安装 Python 依赖
37
+ COPY requirements.txt .
38
+ RUN pip install --no-cache-dir -r requirements.txt
39
+
40
+ # 复制代码
41
+ COPY . .
42
+
43
+ # 创建数据目录
44
+ RUN mkdir -p data logs
45
+
46
+ # 环境变量
47
+ ENV MYAGENT_APP_DATA_DIR=data
48
+ ENV MYAGENT_APP_LOG_FILE=logs/myagent.log
49
+
50
+ # HTTP API 模式
51
+ EXPOSE 8080
52
+
53
+ # 启动
54
+ CMD ["python", "main.py", "--server", "--host", "0.0.0.0", "--port", "8080"]