infiagent 3.2.0__tar.gz → 3.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (433) hide show
  1. {infiagent-3.2.0/infiagent.egg-info → infiagent-3.2.2}/PKG-INFO +3 -3
  2. {infiagent-3.2.0 → infiagent-3.2.2}/README.md +2 -2
  3. {infiagent-3.2.0 → infiagent-3.2.2/infiagent.egg-info}/PKG-INFO +3 -3
  4. {infiagent-3.2.0 → infiagent-3.2.2}/infiagent.egg-info/SOURCES.txt +2 -0
  5. {infiagent-3.2.0 → infiagent-3.2.2}/setup.py +1 -1
  6. infiagent-3.2.2/tests/test_web_ui_config_api.py +78 -0
  7. infiagent-3.2.2/tests/test_windows_compat.py +42 -0
  8. infiagent-3.2.2/utils/windows_compat.py +57 -0
  9. infiagent-3.2.0/utils/windows_compat.py +0 -40
  10. {infiagent-3.2.0 → infiagent-3.2.2}/LICENSE +0 -0
  11. {infiagent-3.2.0 → infiagent-3.2.2}/MANIFEST.in +0 -0
  12. {infiagent-3.2.0 → infiagent-3.2.2}/config/agent_library/OpenCowork/general_prompts.yaml +0 -0
  13. {infiagent-3.2.0 → infiagent-3.2.2}/config/agent_library/OpenCowork/level_-1_judge_agent.yaml +0 -0
  14. {infiagent-3.2.0 → infiagent-3.2.2}/config/agent_library/OpenCowork/level_0_tools.yaml +0 -0
  15. {infiagent-3.2.0 → infiagent-3.2.2}/config/agent_library/OpenCowork/level_3_agents.yaml +0 -0
  16. {infiagent-3.2.0 → infiagent-3.2.2}/config/agent_library/Researcher/general_prompts.yaml +0 -0
  17. {infiagent-3.2.0 → infiagent-3.2.2}/config/agent_library/Researcher/level_-1_judge_agent.yaml +0 -0
  18. {infiagent-3.2.0 → infiagent-3.2.2}/config/agent_library/Researcher/level_0_tools.yaml +0 -0
  19. {infiagent-3.2.0 → infiagent-3.2.2}/config/agent_library/Researcher/level_1_agents.yaml +0 -0
  20. {infiagent-3.2.0 → infiagent-3.2.2}/config/agent_library/Researcher/level_2_agents.yaml +0 -0
  21. {infiagent-3.2.0 → infiagent-3.2.2}/config/agent_library/Researcher/level_3_agents.yaml +0 -0
  22. {infiagent-3.2.0 → infiagent-3.2.2}/config/run_env_config/ali_qwen_llm_config.yaml +0 -0
  23. {infiagent-3.2.0 → infiagent-3.2.2}/config/run_env_config/document_convert_api.yaml +0 -0
  24. {infiagent-3.2.0 → infiagent-3.2.2}/config/run_env_config/gemini_config_version.yaml +0 -0
  25. {infiagent-3.2.0 → infiagent-3.2.2}/config/run_env_config/kimi_config_version copy.yaml +0 -0
  26. {infiagent-3.2.0 → infiagent-3.2.2}/config/run_env_config/llm_config.example.yaml +0 -0
  27. {infiagent-3.2.0 → infiagent-3.2.2}/config/run_env_config/llm_config.yaml +0 -0
  28. {infiagent-3.2.0 → infiagent-3.2.2}/config/run_env_config/third_part_api.yaml +0 -0
  29. {infiagent-3.2.0 → infiagent-3.2.2}/core/__init__.py +0 -0
  30. {infiagent-3.2.0 → infiagent-3.2.2}/core/agent_event_emitter.py +0 -0
  31. {infiagent-3.2.0 → infiagent-3.2.2}/core/agent_executor.py +0 -0
  32. {infiagent-3.2.0 → infiagent-3.2.2}/core/context_builder.py +0 -0
  33. {infiagent-3.2.0 → infiagent-3.2.2}/core/event_handlers.py +0 -0
  34. {infiagent-3.2.0 → infiagent-3.2.2}/core/events.py +0 -0
  35. {infiagent-3.2.0 → infiagent-3.2.2}/core/hierarchy_manager.py +0 -0
  36. {infiagent-3.2.0 → infiagent-3.2.2}/core/runtime_exceptions.py +0 -0
  37. {infiagent-3.2.0 → infiagent-3.2.2}/core/state_cleaner.py +0 -0
  38. {infiagent-3.2.0 → infiagent-3.2.2}/core/tool_executor.py +0 -0
  39. {infiagent-3.2.0 → infiagent-3.2.2}/infiagent/__init__.py +0 -0
  40. {infiagent-3.2.0 → infiagent-3.2.2}/infiagent/sdk.py +0 -0
  41. {infiagent-3.2.0 → infiagent-3.2.2}/infiagent.egg-info/dependency_links.txt +0 -0
  42. {infiagent-3.2.0 → infiagent-3.2.2}/infiagent.egg-info/entry_points.txt +0 -0
  43. {infiagent-3.2.0 → infiagent-3.2.2}/infiagent.egg-info/requires.txt +0 -0
  44. {infiagent-3.2.0 → infiagent-3.2.2}/infiagent.egg-info/top_level.txt +0 -0
  45. {infiagent-3.2.0 → infiagent-3.2.2}/pyproject.toml +0 -0
  46. {infiagent-3.2.0 → infiagent-3.2.2}/requirements.txt +0 -0
  47. {infiagent-3.2.0 → infiagent-3.2.2}/services/__init__.py +0 -0
  48. {infiagent-3.2.0 → infiagent-3.2.2}/services/action_compressor.py +0 -0
  49. {infiagent-3.2.0 → infiagent-3.2.2}/services/context_compressor_backup.py +0 -0
  50. {infiagent-3.2.0 → infiagent-3.2.2}/services/llm_client.py +0 -0
  51. {infiagent-3.2.0 → infiagent-3.2.2}/services/thinking_agent.py +0 -0
  52. {infiagent-3.2.0 → infiagent-3.2.2}/setup.cfg +0 -0
  53. {infiagent-3.2.0 → infiagent-3.2.2}/skills/algorithmic-art/LICENSE.txt +0 -0
  54. {infiagent-3.2.0 → infiagent-3.2.2}/skills/algorithmic-art/SKILL.md +0 -0
  55. {infiagent-3.2.0 → infiagent-3.2.2}/skills/algorithmic-art/templates/generator_template.js +0 -0
  56. {infiagent-3.2.0 → infiagent-3.2.2}/skills/algorithmic-art/templates/viewer.html +0 -0
  57. {infiagent-3.2.0 → infiagent-3.2.2}/skills/brand-guidelines/LICENSE.txt +0 -0
  58. {infiagent-3.2.0 → infiagent-3.2.2}/skills/brand-guidelines/SKILL.md +0 -0
  59. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/LICENSE.txt +0 -0
  60. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/SKILL.md +0 -0
  61. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -0
  62. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  63. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  64. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -0
  65. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  66. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -0
  67. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  68. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  69. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -0
  70. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  71. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  72. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  73. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -0
  74. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  75. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -0
  76. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  77. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -0
  78. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  79. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  80. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -0
  81. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  82. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -0
  83. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  84. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  85. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -0
  86. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  87. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  88. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  89. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  90. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  91. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  92. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  93. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  94. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -0
  95. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  96. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  97. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  98. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -0
  99. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  100. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  101. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -0
  102. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  103. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  104. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  105. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -0
  106. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -0
  107. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  108. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  109. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  110. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  111. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -0
  112. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  113. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  114. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -0
  115. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  116. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -0
  117. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  118. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  119. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -0
  120. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  121. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  122. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -0
  123. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -0
  124. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  125. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  126. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -0
  127. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  128. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -0
  129. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  130. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  131. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -0
  132. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  133. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -0
  134. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  135. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  136. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  137. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  138. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -0
  139. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  140. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -0
  141. {infiagent-3.2.0 → infiagent-3.2.2}/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  142. {infiagent-3.2.0 → infiagent-3.2.2}/skills/doc-coauthoring/SKILL.md +0 -0
  143. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/LICENSE.txt +0 -0
  144. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/SKILL.md +0 -0
  145. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/__init__.py +0 -0
  146. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/accept_changes.py +0 -0
  147. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/comment.py +0 -0
  148. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/helpers/__init__.py +0 -0
  149. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/helpers/merge_runs.py +0 -0
  150. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/helpers/simplify_redlines.py +0 -0
  151. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/pack.py +0 -0
  152. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  153. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  154. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  155. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  156. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  157. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  158. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  159. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  160. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  161. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  162. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  163. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  164. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  165. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  166. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  167. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  168. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  169. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  170. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  171. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  172. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  173. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  174. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  175. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  176. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  177. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  178. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  179. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  180. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  181. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  182. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  183. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/mce/mc.xsd +0 -0
  184. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  185. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  186. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  187. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  188. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  189. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  190. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  191. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/soffice.py +0 -0
  192. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/unpack.py +0 -0
  193. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/validate.py +0 -0
  194. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/validators/__init__.py +0 -0
  195. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/validators/base.py +0 -0
  196. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/validators/docx.py +0 -0
  197. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/validators/pptx.py +0 -0
  198. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/office/validators/redlining.py +0 -0
  199. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/templates/comments.xml +0 -0
  200. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/templates/commentsExtended.xml +0 -0
  201. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/templates/commentsExtensible.xml +0 -0
  202. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/templates/commentsIds.xml +0 -0
  203. {infiagent-3.2.0 → infiagent-3.2.2}/skills/docx/scripts/templates/people.xml +0 -0
  204. {infiagent-3.2.0 → infiagent-3.2.2}/skills/frontend-design/LICENSE.txt +0 -0
  205. {infiagent-3.2.0 → infiagent-3.2.2}/skills/frontend-design/SKILL.md +0 -0
  206. {infiagent-3.2.0 → infiagent-3.2.2}/skills/internal-comms/LICENSE.txt +0 -0
  207. {infiagent-3.2.0 → infiagent-3.2.2}/skills/internal-comms/SKILL.md +0 -0
  208. {infiagent-3.2.0 → infiagent-3.2.2}/skills/internal-comms/examples/3p-updates.md +0 -0
  209. {infiagent-3.2.0 → infiagent-3.2.2}/skills/internal-comms/examples/company-newsletter.md +0 -0
  210. {infiagent-3.2.0 → infiagent-3.2.2}/skills/internal-comms/examples/faq-answers.md +0 -0
  211. {infiagent-3.2.0 → infiagent-3.2.2}/skills/internal-comms/examples/general-comms.md +0 -0
  212. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mac-use/SKILL.md +0 -0
  213. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mac-use/requirements.txt +0 -0
  214. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mac-use/scripts/mac_use.py +0 -0
  215. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mcp-builder/LICENSE.txt +0 -0
  216. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mcp-builder/SKILL.md +0 -0
  217. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mcp-builder/reference/evaluation.md +0 -0
  218. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mcp-builder/reference/mcp_best_practices.md +0 -0
  219. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mcp-builder/reference/node_mcp_server.md +0 -0
  220. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mcp-builder/reference/python_mcp_server.md +0 -0
  221. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mcp-builder/scripts/connections.py +0 -0
  222. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mcp-builder/scripts/evaluation.py +0 -0
  223. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mcp-builder/scripts/example_evaluation.xml +0 -0
  224. {infiagent-3.2.0 → infiagent-3.2.2}/skills/mcp-builder/scripts/requirements.txt +0 -0
  225. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/LICENSE.txt +0 -0
  226. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/SKILL.md +0 -0
  227. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/forms.md +0 -0
  228. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/reference.md +0 -0
  229. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/scripts/check_bounding_boxes.py +0 -0
  230. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/scripts/check_fillable_fields.py +0 -0
  231. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/scripts/convert_pdf_to_images.py +0 -0
  232. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/scripts/create_validation_image.py +0 -0
  233. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/scripts/extract_form_field_info.py +0 -0
  234. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/scripts/extract_form_structure.py +0 -0
  235. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/scripts/fill_fillable_fields.py +0 -0
  236. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  237. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/LICENSE.txt +0 -0
  238. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/SKILL.md +0 -0
  239. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/editing.md +0 -0
  240. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/pptxgenjs.md +0 -0
  241. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/__init__.py +0 -0
  242. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/add_slide.py +0 -0
  243. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/clean.py +0 -0
  244. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  245. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/helpers/merge_runs.py +0 -0
  246. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/helpers/simplify_redlines.py +0 -0
  247. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/pack.py +0 -0
  248. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  249. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  250. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  251. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  252. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  253. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  254. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  255. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  256. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  257. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  258. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  259. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  260. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  261. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  262. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  263. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  264. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  265. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  266. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  267. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  268. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  269. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  270. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  271. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  272. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  273. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  274. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  275. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  276. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  277. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  278. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  279. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/mce/mc.xsd +0 -0
  280. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  281. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  282. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  283. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  284. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  285. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  286. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  287. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/soffice.py +0 -0
  288. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/unpack.py +0 -0
  289. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/validate.py +0 -0
  290. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/validators/__init__.py +0 -0
  291. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/validators/base.py +0 -0
  292. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/validators/docx.py +0 -0
  293. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/validators/pptx.py +0 -0
  294. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/office/validators/redlining.py +0 -0
  295. {infiagent-3.2.0 → infiagent-3.2.2}/skills/pptx/scripts/thumbnail.py +0 -0
  296. {infiagent-3.2.0 → infiagent-3.2.2}/skills/slack-gif-creator/LICENSE.txt +0 -0
  297. {infiagent-3.2.0 → infiagent-3.2.2}/skills/slack-gif-creator/SKILL.md +0 -0
  298. {infiagent-3.2.0 → infiagent-3.2.2}/skills/slack-gif-creator/core/easing.py +0 -0
  299. {infiagent-3.2.0 → infiagent-3.2.2}/skills/slack-gif-creator/core/frame_composer.py +0 -0
  300. {infiagent-3.2.0 → infiagent-3.2.2}/skills/slack-gif-creator/core/gif_builder.py +0 -0
  301. {infiagent-3.2.0 → infiagent-3.2.2}/skills/slack-gif-creator/core/validators.py +0 -0
  302. {infiagent-3.2.0 → infiagent-3.2.2}/skills/slack-gif-creator/requirements.txt +0 -0
  303. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/LICENSE.txt +0 -0
  304. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/SKILL.md +0 -0
  305. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/theme-showcase.pdf +0 -0
  306. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/themes/arctic-frost.md +0 -0
  307. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/themes/botanical-garden.md +0 -0
  308. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/themes/desert-rose.md +0 -0
  309. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/themes/forest-canopy.md +0 -0
  310. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/themes/golden-hour.md +0 -0
  311. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/themes/midnight-galaxy.md +0 -0
  312. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/themes/modern-minimalist.md +0 -0
  313. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/themes/ocean-depths.md +0 -0
  314. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/themes/sunset-boulevard.md +0 -0
  315. {infiagent-3.2.0 → infiagent-3.2.2}/skills/theme-factory/themes/tech-innovation.md +0 -0
  316. {infiagent-3.2.0 → infiagent-3.2.2}/skills/web-artifacts-builder/LICENSE.txt +0 -0
  317. {infiagent-3.2.0 → infiagent-3.2.2}/skills/web-artifacts-builder/SKILL.md +0 -0
  318. {infiagent-3.2.0 → infiagent-3.2.2}/skills/web-artifacts-builder/scripts/bundle-artifact.sh +0 -0
  319. {infiagent-3.2.0 → infiagent-3.2.2}/skills/web-artifacts-builder/scripts/init-artifact.sh +0 -0
  320. {infiagent-3.2.0 → infiagent-3.2.2}/skills/webapp-testing/LICENSE.txt +0 -0
  321. {infiagent-3.2.0 → infiagent-3.2.2}/skills/webapp-testing/SKILL.md +0 -0
  322. {infiagent-3.2.0 → infiagent-3.2.2}/skills/webapp-testing/examples/console_logging.py +0 -0
  323. {infiagent-3.2.0 → infiagent-3.2.2}/skills/webapp-testing/examples/element_discovery.py +0 -0
  324. {infiagent-3.2.0 → infiagent-3.2.2}/skills/webapp-testing/examples/static_html_automation.py +0 -0
  325. {infiagent-3.2.0 → infiagent-3.2.2}/skills/webapp-testing/scripts/with_server.py +0 -0
  326. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/LICENSE.txt +0 -0
  327. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/SKILL.md +0 -0
  328. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  329. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/helpers/merge_runs.py +0 -0
  330. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/helpers/simplify_redlines.py +0 -0
  331. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/pack.py +0 -0
  332. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  333. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  334. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  335. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  336. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  337. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  338. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  339. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  340. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  341. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  342. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  343. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  344. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  345. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  346. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  347. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  348. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  349. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  350. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  351. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  352. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  353. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  354. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  355. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  356. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  357. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  358. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  359. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  360. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  361. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  362. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  363. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/mce/mc.xsd +0 -0
  364. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  365. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  366. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  367. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  368. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  369. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  370. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  371. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/soffice.py +0 -0
  372. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/unpack.py +0 -0
  373. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/validate.py +0 -0
  374. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/validators/__init__.py +0 -0
  375. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/validators/base.py +0 -0
  376. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/validators/docx.py +0 -0
  377. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/validators/pptx.py +0 -0
  378. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/office/validators/redlining.py +0 -0
  379. {infiagent-3.2.0 → infiagent-3.2.2}/skills/xlsx/scripts/recalc.py +0 -0
  380. {infiagent-3.2.0 → infiagent-3.2.2}/start.py +0 -0
  381. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_cheapclaw_service.py +0 -0
  382. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_code_tools_system_terminal.py +0 -0
  383. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_context_hooks.py +0 -0
  384. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_file_tools.py +0 -0
  385. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_image_read_message.py +0 -0
  386. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_kimi_stream_compat.py +0 -0
  387. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_llm_client_lite_openrouter.py +0 -0
  388. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_llm_client_resilience.py +0 -0
  389. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_llm_config_builder.py +0 -0
  390. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_llm_debug_output.py +0 -0
  391. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_reasoning_modes.py +0 -0
  392. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_sdk_observability.py +0 -0
  393. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_sdk_runtime_paths.py +0 -0
  394. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_task_history_index.py +0 -0
  395. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_thinking_prompt_contract.py +0 -0
  396. {infiagent-3.2.0 → infiagent-3.2.2}/tests/test_tool_hooks.py +0 -0
  397. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/__init__.py +0 -0
  398. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/llm_client_lite.py +0 -0
  399. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/registry.py +0 -0
  400. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/requirements.txt +0 -0
  401. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/BROWSER_IMPROVEMENTS.md +0 -0
  402. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/FILE_READ_USAGE.md +0 -0
  403. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/__init__.py +0 -0
  404. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/arxiv_tools.py +0 -0
  405. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/audio_tools.py +0 -0
  406. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/browser_tools.py +0 -0
  407. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/code_tools.py +0 -0
  408. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/convert_tools.py +0 -0
  409. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/document_tools.py +0 -0
  410. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/file_tools.py +0 -0
  411. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/human_tools.py +0 -0
  412. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/paper_tools.py +0 -0
  413. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/powerpoint_tools.py +0 -0
  414. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/reference_tools.py +0 -0
  415. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/skill_tools.py +0 -0
  416. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/task_tools.py +0 -0
  417. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/vision_tools.py +0 -0
  418. {infiagent-3.2.0 → infiagent-3.2.2}/tool_server_lite/tools/web_tools.py +0 -0
  419. {infiagent-3.2.0 → infiagent-3.2.2}/utils/__init__.py +0 -0
  420. {infiagent-3.2.0 → infiagent-3.2.2}/utils/cli_mode.py +0 -0
  421. {infiagent-3.2.0 → infiagent-3.2.2}/utils/config_loader.py +0 -0
  422. {infiagent-3.2.0 → infiagent-3.2.2}/utils/config_manager.py +0 -0
  423. {infiagent-3.2.0 → infiagent-3.2.2}/utils/context_hooks.py +0 -0
  424. {infiagent-3.2.0 → infiagent-3.2.2}/utils/conversation_storage.py +0 -0
  425. {infiagent-3.2.0 → infiagent-3.2.2}/utils/event_emitter.py +0 -0
  426. {infiagent-3.2.0 → infiagent-3.2.2}/utils/llm_config_builder.py +0 -0
  427. {infiagent-3.2.0 → infiagent-3.2.2}/utils/mcp_manager.py +0 -0
  428. {infiagent-3.2.0 → infiagent-3.2.2}/utils/runtime_control.py +0 -0
  429. {infiagent-3.2.0 → infiagent-3.2.2}/utils/skill_loader.py +0 -0
  430. {infiagent-3.2.0 → infiagent-3.2.2}/utils/task_history_index.py +0 -0
  431. {infiagent-3.2.0 → infiagent-3.2.2}/utils/task_runtime.py +0 -0
  432. {infiagent-3.2.0 → infiagent-3.2.2}/utils/tool_hooks.py +0 -0
  433. {infiagent-3.2.0 → infiagent-3.2.2}/utils/user_paths.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: infiagent
3
- Version: 3.2.0
3
+ Version: 3.2.2
4
4
  Summary: InfiAgent multi-agent framework for long-running task automation
5
5
  Home-page: https://github.com/ChenglinPoly/Multi-Level-Agent
6
6
  Author: Chenglin Yu
@@ -55,7 +55,7 @@ Requires-Dist: psutil>=5.9.0
55
55
  <h1>MLA V3 - Build Domain-Specific SOTA-Level AI Agents</h1>
56
56
 
57
57
  <p>
58
- <img src="https://img.shields.io/badge/version-3.2.0-blue.svg" alt="Version">
58
+ <img src="https://img.shields.io/badge/version-3.2.2-blue.svg" alt="Version">
59
59
  <img src="https://img.shields.io/badge/python-3.9+-green.svg" alt="Python">
60
60
  <img src="https://img.shields.io/badge/license-GPL-blue.svg" alt="License: GPL">
61
61
  </p>
@@ -84,7 +84,7 @@ If you pulled the image or code before the latest update date, please refer to t
84
84
 
85
85
  - [2026/03/31] **Switchable Thinking / ReAct execution mode + task-history database retrieval:** Runtime now supports a switchable cadence model. You can keep the original ThinkingAgent-style “plan first, then execute N steps” workflow, or disable thinking and fall back to an explicit ReAct loop where reflection text is persisted directly inside the message history. Historical task records are also indexed into a local SQLite database, and agents now get a built-in `task_history_search` tool by default. The SDK can expose only the most recent N historical tasks into prompt context, and agents are explicitly instructed to retrieve older task history from the database when recent context is not enough.
86
86
 
87
- - [2026/03/30] **SDK / mac model configuration is now much easier for non-experts:** The SDK now accepts structured model profiles directly instead of forcing every integration to hand-write `llm_config.yaml`, while the mac desktop settings page has been upgraded with guided provider-based model configuration, a thinking toggle, `thinking_steps`, recent-history controls, visible-skills controls, and the new runtime knobs introduced in this release. Raw YAML remains available as an advanced fallback, but most users no longer need to manually type provider prefixes or JSON model objects.
87
+ - [2026/03/30] **SDK / mac / Web UI model configuration is now much easier for non-experts:** The SDK now accepts structured model profiles directly instead of forcing every integration to hand-write `llm_config.yaml`. The mac desktop app and Docker Web UI both now expose a source-based model editor: you configure the default `base_url` / `api_key` once, then add multiple shared or per-slot models, and each row can either reuse the default source or switch to a custom URL / key. Raw YAML / JSON remain available as advanced fallbacks, but most users no longer need to manually type prefixes or JSON model objects.
88
88
 
89
89
  - [2026/03/23] **Docker Web UI now supports multi-user registration and account management:** The latest `chenglinhku/mlav3:latest` image runs the SDK-based Web UI directly with the new `webui` startup command on port `4242`. Users can register from the login page, and the bootstrap admin account can manage users inside the Web UI. Please follow the updated Docker command in Quick Start / `docs/DOCKER_GUIDE.md`: mount `~/.mla_v3` to `/root/mla_v3`, publish `4242`, and use `chenglinhku/mlav3:latest webui`. The old standalone config page flow on `9641` is no longer required.
90
90
 
@@ -4,7 +4,7 @@
4
4
  <h1>MLA V3 - Build Domain-Specific SOTA-Level AI Agents</h1>
5
5
 
6
6
  <p>
7
- <img src="https://img.shields.io/badge/version-3.2.0-blue.svg" alt="Version">
7
+ <img src="https://img.shields.io/badge/version-3.2.2-blue.svg" alt="Version">
8
8
  <img src="https://img.shields.io/badge/python-3.9+-green.svg" alt="Python">
9
9
  <img src="https://img.shields.io/badge/license-GPL-blue.svg" alt="License: GPL">
10
10
  </p>
@@ -33,7 +33,7 @@ If you pulled the image or code before the latest update date, please refer to t
33
33
 
34
34
  - [2026/03/31] **Switchable Thinking / ReAct execution mode + task-history database retrieval:** Runtime now supports a switchable cadence model. You can keep the original ThinkingAgent-style “plan first, then execute N steps” workflow, or disable thinking and fall back to an explicit ReAct loop where reflection text is persisted directly inside the message history. Historical task records are also indexed into a local SQLite database, and agents now get a built-in `task_history_search` tool by default. The SDK can expose only the most recent N historical tasks into prompt context, and agents are explicitly instructed to retrieve older task history from the database when recent context is not enough.
35
35
 
36
- - [2026/03/30] **SDK / mac model configuration is now much easier for non-experts:** The SDK now accepts structured model profiles directly instead of forcing every integration to hand-write `llm_config.yaml`, while the mac desktop settings page has been upgraded with guided provider-based model configuration, a thinking toggle, `thinking_steps`, recent-history controls, visible-skills controls, and the new runtime knobs introduced in this release. Raw YAML remains available as an advanced fallback, but most users no longer need to manually type provider prefixes or JSON model objects.
36
+ - [2026/03/30] **SDK / mac / Web UI model configuration is now much easier for non-experts:** The SDK now accepts structured model profiles directly instead of forcing every integration to hand-write `llm_config.yaml`. The mac desktop app and Docker Web UI both now expose a source-based model editor: you configure the default `base_url` / `api_key` once, then add multiple shared or per-slot models, and each row can either reuse the default source or switch to a custom URL / key. Raw YAML / JSON remain available as advanced fallbacks, but most users no longer need to manually type prefixes or JSON model objects.
37
37
 
38
38
  - [2026/03/23] **Docker Web UI now supports multi-user registration and account management:** The latest `chenglinhku/mlav3:latest` image runs the SDK-based Web UI directly with the new `webui` startup command on port `4242`. Users can register from the login page, and the bootstrap admin account can manage users inside the Web UI. Please follow the updated Docker command in Quick Start / `docs/DOCKER_GUIDE.md`: mount `~/.mla_v3` to `/root/mla_v3`, publish `4242`, and use `chenglinhku/mlav3:latest webui`. The old standalone config page flow on `9641` is no longer required.
39
39
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: infiagent
3
- Version: 3.2.0
3
+ Version: 3.2.2
4
4
  Summary: InfiAgent multi-agent framework for long-running task automation
5
5
  Home-page: https://github.com/ChenglinPoly/Multi-Level-Agent
6
6
  Author: Chenglin Yu
@@ -55,7 +55,7 @@ Requires-Dist: psutil>=5.9.0
55
55
  <h1>MLA V3 - Build Domain-Specific SOTA-Level AI Agents</h1>
56
56
 
57
57
  <p>
58
- <img src="https://img.shields.io/badge/version-3.2.0-blue.svg" alt="Version">
58
+ <img src="https://img.shields.io/badge/version-3.2.2-blue.svg" alt="Version">
59
59
  <img src="https://img.shields.io/badge/python-3.9+-green.svg" alt="Python">
60
60
  <img src="https://img.shields.io/badge/license-GPL-blue.svg" alt="License: GPL">
61
61
  </p>
@@ -84,7 +84,7 @@ If you pulled the image or code before the latest update date, please refer to t
84
84
 
85
85
  - [2026/03/31] **Switchable Thinking / ReAct execution mode + task-history database retrieval:** Runtime now supports a switchable cadence model. You can keep the original ThinkingAgent-style “plan first, then execute N steps” workflow, or disable thinking and fall back to an explicit ReAct loop where reflection text is persisted directly inside the message history. Historical task records are also indexed into a local SQLite database, and agents now get a built-in `task_history_search` tool by default. The SDK can expose only the most recent N historical tasks into prompt context, and agents are explicitly instructed to retrieve older task history from the database when recent context is not enough.
86
86
 
87
- - [2026/03/30] **SDK / mac model configuration is now much easier for non-experts:** The SDK now accepts structured model profiles directly instead of forcing every integration to hand-write `llm_config.yaml`, while the mac desktop settings page has been upgraded with guided provider-based model configuration, a thinking toggle, `thinking_steps`, recent-history controls, visible-skills controls, and the new runtime knobs introduced in this release. Raw YAML remains available as an advanced fallback, but most users no longer need to manually type provider prefixes or JSON model objects.
87
+ - [2026/03/30] **SDK / mac / Web UI model configuration is now much easier for non-experts:** The SDK now accepts structured model profiles directly instead of forcing every integration to hand-write `llm_config.yaml`. The mac desktop app and Docker Web UI both now expose a source-based model editor: you configure the default `base_url` / `api_key` once, then add multiple shared or per-slot models, and each row can either reuse the default source or switch to a custom URL / key. Raw YAML / JSON remain available as advanced fallbacks, but most users no longer need to manually type prefixes or JSON model objects.
88
88
 
89
89
  - [2026/03/23] **Docker Web UI now supports multi-user registration and account management:** The latest `chenglinhku/mlav3:latest` image runs the SDK-based Web UI directly with the new `webui` startup command on port `4242`. Users can register from the login page, and the bootstrap admin account can manage users inside the Web UI. Please follow the updated Docker command in Quick Start / `docs/DOCKER_GUIDE.md`: mount `~/.mla_v3` to `/root/mla_v3`, publish `4242`, and use `chenglinhku/mlav3:latest webui`. The old standalone config page flow on `9641` is no longer required.
90
90
 
@@ -388,6 +388,8 @@ tests/test_sdk_runtime_paths.py
388
388
  tests/test_task_history_index.py
389
389
  tests/test_thinking_prompt_contract.py
390
390
  tests/test_tool_hooks.py
391
+ tests/test_web_ui_config_api.py
392
+ tests/test_windows_compat.py
391
393
  tool_server_lite/__init__.py
392
394
  tool_server_lite/llm_client_lite.py
393
395
  tool_server_lite/registry.py
@@ -55,7 +55,7 @@ data_files.extend(_collect_data_files(project_root / "skills", "skills"))
55
55
 
56
56
  setup(
57
57
  name="infiagent",
58
- version="3.2.0",
58
+ version="3.2.2",
59
59
  author="Chenglin Yu",
60
60
  author_email="yuchenglin96@qq.com",
61
61
  license="MIT",
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ from __future__ import annotations
5
+
6
+ import importlib.util
7
+ import os
8
+ import sys
9
+ from pathlib import Path
10
+
11
+
12
+ SERVER_PATH = Path(__file__).resolve().parents[1] / "web_ui" / "server" / "server.py"
13
+
14
+
15
+ def _load_web_server(tmp_path):
16
+ os.environ["WEB_UI_USER_DATA_ROOT"] = str(tmp_path)
17
+ for key in ["user_runtime", "server", "mla_web_ui_server_test"]:
18
+ sys.modules.pop(key, None)
19
+ spec = importlib.util.spec_from_file_location("mla_web_ui_server_test", SERVER_PATH)
20
+ module = importlib.util.module_from_spec(spec)
21
+ assert spec.loader is not None
22
+ spec.loader.exec_module(module)
23
+ return module
24
+
25
+
26
+ def _auth_client(app):
27
+ client = app.test_client()
28
+ with client.session_transaction() as session:
29
+ session["logged_in"] = True
30
+ session["username"] = "tester"
31
+ session["role"] = "admin"
32
+ return client
33
+
34
+
35
+ def test_guided_config_roundtrip_and_run_env_list(tmp_path):
36
+ module = _load_web_server(tmp_path)
37
+ client = _auth_client(module.app)
38
+
39
+ list_resp = client.get("/api/config/list?type=run_env")
40
+ assert list_resp.status_code == 200
41
+ names = [item["name"] for item in list_resp.get_json()["files"]]
42
+ assert "llm_config.yaml" in names
43
+ assert "app_config.json" in names
44
+
45
+ guided_resp = client.get("/api/config/guided")
46
+ assert guided_resp.status_code == 200
47
+ payload = guided_resp.get_json()
48
+ assert "llm_config" in payload
49
+ assert "app_config" in payload
50
+
51
+ payload["llm_config"]["base_url"] = "https://openrouter.ai/api/v1"
52
+ payload["llm_config"]["models"] = [
53
+ {"name": "openrouter/google/gemini-3-flash-preview", "tool_choice": "required"}
54
+ ]
55
+ payload["app_config"].setdefault("runtime", {})["thinking_enabled"] = False
56
+ payload["app_config"].setdefault("runtime", {})["thinking_steps"] = 9
57
+ payload["app_config"].setdefault("context", {})["user_history_recent_items"] = 4
58
+
59
+ save_resp = client.post(
60
+ "/api/config/guided",
61
+ json={
62
+ "llm_config": payload["llm_config"],
63
+ "app_config": payload["app_config"],
64
+ },
65
+ )
66
+ assert save_resp.status_code == 200
67
+ assert save_resp.get_json()["success"] is True
68
+
69
+ app_cfg_resp = client.get("/api/config/read?file=app_config.json&type=run_env")
70
+ assert app_cfg_resp.status_code == 200
71
+ app_cfg_text = app_cfg_resp.get_json()["content"]
72
+ assert '"thinking_enabled": false' in app_cfg_text
73
+ assert '"user_history_recent_items": 4' in app_cfg_text
74
+
75
+ llm_cfg_resp = client.get("/api/config/read?file=llm_config.yaml&type=run_env")
76
+ assert llm_cfg_resp.status_code == 200
77
+ llm_cfg_text = llm_cfg_resp.get_json()["content"]
78
+ assert "openrouter/google/gemini-3-flash-preview" in llm_cfg_text
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ import io
5
+ import sys
6
+ import unittest
7
+ from unittest import mock
8
+
9
+ from utils import windows_compat
10
+
11
+
12
+ class _DummyStream(io.StringIO):
13
+ def __init__(self):
14
+ super().__init__()
15
+ self.reconfigure_calls = []
16
+
17
+ def reconfigure(self, **kwargs):
18
+ self.reconfigure_calls.append(kwargs)
19
+
20
+
21
+ class WindowsCompatTests(unittest.TestCase):
22
+ def test_setup_console_encoding_prefers_reconfigure(self):
23
+ stdout = _DummyStream()
24
+ stderr = _DummyStream()
25
+ with mock.patch.object(sys, "platform", "win32"):
26
+ with mock.patch.object(sys, "stdout", stdout), mock.patch.object(sys, "stderr", stderr):
27
+ windows_compat.setup_console_encoding()
28
+ self.assertEqual(len(stdout.reconfigure_calls), 1)
29
+ self.assertEqual(len(stderr.reconfigure_calls), 1)
30
+ self.assertEqual(stdout.reconfigure_calls[0]["encoding"], "utf-8")
31
+ self.assertEqual(stderr.reconfigure_calls[0]["encoding"], "utf-8")
32
+
33
+ def test_safe_print_ignores_closed_file_on_windows(self):
34
+ closed = io.StringIO()
35
+ closed.close()
36
+ with mock.patch.object(sys, "platform", "win32"):
37
+ with mock.patch.object(sys, "stdout", closed), mock.patch.object(sys, "stderr", closed):
38
+ windows_compat.safe_print("hello")
39
+
40
+
41
+ if __name__ == "__main__":
42
+ unittest.main()
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Windows兼容性工具
5
+ 确保emoji和中文字符能在Windows控制台正常显示
6
+ """
7
+ import sys
8
+
9
+
10
+ def _reconfigure_stream(stream):
11
+ """优先原位 reconfigure,避免重新包裹 stdout/stderr 导致解释器退出时报 closed file。"""
12
+ if stream is None or getattr(stream, "closed", False):
13
+ return
14
+ try:
15
+ if hasattr(stream, "reconfigure"):
16
+ stream.reconfigure(encoding="utf-8", errors="replace", line_buffering=True, write_through=True)
17
+ except Exception:
18
+ # 某些 IDE/重定向流不支持 reconfigure;此时保持原状即可
19
+ pass
20
+
21
+
22
+ def setup_console_encoding():
23
+ """设置控制台为UTF-8编码(Windows专用),并启用实时输出"""
24
+ if sys.platform == 'win32':
25
+ try:
26
+ _reconfigure_stream(sys.stdout)
27
+ _reconfigure_stream(sys.stderr)
28
+ except Exception:
29
+ # 如果设置失败,不影响程序运行
30
+ pass
31
+
32
+
33
+ def safe_print(*args, **kwargs):
34
+ """
35
+ 安全的print函数,自动flush避免Windows缓冲区问题
36
+ """
37
+ if sys.platform == 'win32' and 'flush' not in kwargs:
38
+ kwargs['flush'] = True
39
+ try:
40
+ print(*args, **kwargs)
41
+ except ValueError as exc:
42
+ # Windows 某些 IDE/关闭中的控制台在解释器收尾阶段会触发 closed file。
43
+ if sys.platform == 'win32' and 'closed file' in str(exc).lower():
44
+ return
45
+ raise
46
+ if sys.platform == 'win32':
47
+ try:
48
+ if getattr(sys.stdout, 'closed', False) is False:
49
+ sys.stdout.flush()
50
+ if getattr(sys.stderr, 'closed', False) is False:
51
+ sys.stderr.flush()
52
+ except Exception:
53
+ pass
54
+
55
+
56
+ # 自动设置(导入时执行)
57
+ setup_console_encoding()
@@ -1,40 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- """
4
- Windows兼容性工具
5
- 确保emoji和中文字符能在Windows控制台正常显示
6
- """
7
- import sys
8
-
9
-
10
- def setup_console_encoding():
11
- """设置控制台为UTF-8编码(Windows专用),并启用实时输出"""
12
- if sys.platform == 'win32':
13
- try:
14
- import io
15
- # 强制行缓冲和立即写入,避免输出延迟
16
- if hasattr(sys.stdout, 'buffer'):
17
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', line_buffering=True, write_through=True)
18
- if hasattr(sys.stderr, 'buffer'):
19
- sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', line_buffering=True, write_through=True)
20
- except Exception:
21
- # 如果设置失败,不影响程序运行
22
- pass
23
-
24
-
25
- def safe_print(*args, **kwargs):
26
- """
27
- 安全的print函数,自动flush避免Windows缓冲区问题
28
- """
29
- print(*args, **kwargs)
30
- if sys.platform == 'win32':
31
- try:
32
- sys.stdout.flush()
33
- sys.stderr.flush()
34
- except Exception:
35
- pass
36
-
37
-
38
- # 自动设置(导入时执行)
39
- setup_console_encoding()
40
-
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes