infiagent 3.2.3__tar.gz → 3.2.5__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 (434) hide show
  1. {infiagent-3.2.3/infiagent.egg-info → infiagent-3.2.5}/PKG-INFO +2 -2
  2. {infiagent-3.2.3 → infiagent-3.2.5}/README.md +1 -1
  3. {infiagent-3.2.3 → infiagent-3.2.5}/core/agent_executor.py +201 -158
  4. {infiagent-3.2.3 → infiagent-3.2.5}/core/context_builder.py +53 -35
  5. {infiagent-3.2.3 → infiagent-3.2.5}/core/tool_executor.py +79 -4
  6. {infiagent-3.2.3 → infiagent-3.2.5}/infiagent/sdk.py +114 -64
  7. {infiagent-3.2.3 → infiagent-3.2.5/infiagent.egg-info}/PKG-INFO +2 -2
  8. {infiagent-3.2.3 → infiagent-3.2.5}/setup.py +1 -1
  9. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_sdk_runtime_paths.py +24 -0
  10. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_tool_hooks.py +45 -0
  11. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/task_tools.py +64 -46
  12. {infiagent-3.2.3 → infiagent-3.2.5}/utils/cli_mode.py +134 -1
  13. {infiagent-3.2.3 → infiagent-3.2.5}/utils/task_runtime.py +6 -0
  14. {infiagent-3.2.3 → infiagent-3.2.5}/LICENSE +0 -0
  15. {infiagent-3.2.3 → infiagent-3.2.5}/MANIFEST.in +0 -0
  16. {infiagent-3.2.3 → infiagent-3.2.5}/config/agent_library/OpenCowork/general_prompts.yaml +0 -0
  17. {infiagent-3.2.3 → infiagent-3.2.5}/config/agent_library/OpenCowork/level_-1_judge_agent.yaml +0 -0
  18. {infiagent-3.2.3 → infiagent-3.2.5}/config/agent_library/OpenCowork/level_0_tools.yaml +0 -0
  19. {infiagent-3.2.3 → infiagent-3.2.5}/config/agent_library/OpenCowork/level_3_agents.yaml +0 -0
  20. {infiagent-3.2.3 → infiagent-3.2.5}/config/agent_library/Researcher/general_prompts.yaml +0 -0
  21. {infiagent-3.2.3 → infiagent-3.2.5}/config/agent_library/Researcher/level_-1_judge_agent.yaml +0 -0
  22. {infiagent-3.2.3 → infiagent-3.2.5}/config/agent_library/Researcher/level_0_tools.yaml +0 -0
  23. {infiagent-3.2.3 → infiagent-3.2.5}/config/agent_library/Researcher/level_1_agents.yaml +0 -0
  24. {infiagent-3.2.3 → infiagent-3.2.5}/config/agent_library/Researcher/level_2_agents.yaml +0 -0
  25. {infiagent-3.2.3 → infiagent-3.2.5}/config/agent_library/Researcher/level_3_agents.yaml +0 -0
  26. {infiagent-3.2.3 → infiagent-3.2.5}/config/run_env_config/ali_qwen_llm_config.yaml +0 -0
  27. {infiagent-3.2.3 → infiagent-3.2.5}/config/run_env_config/document_convert_api.yaml +0 -0
  28. {infiagent-3.2.3 → infiagent-3.2.5}/config/run_env_config/gemini_config_version.yaml +0 -0
  29. {infiagent-3.2.3 → infiagent-3.2.5}/config/run_env_config/kimi_config_version copy.yaml +0 -0
  30. {infiagent-3.2.3 → infiagent-3.2.5}/config/run_env_config/llm_config.example.yaml +0 -0
  31. {infiagent-3.2.3 → infiagent-3.2.5}/config/run_env_config/llm_config.yaml +0 -0
  32. {infiagent-3.2.3 → infiagent-3.2.5}/config/run_env_config/third_part_api.yaml +0 -0
  33. {infiagent-3.2.3 → infiagent-3.2.5}/core/__init__.py +0 -0
  34. {infiagent-3.2.3 → infiagent-3.2.5}/core/agent_event_emitter.py +0 -0
  35. {infiagent-3.2.3 → infiagent-3.2.5}/core/event_handlers.py +0 -0
  36. {infiagent-3.2.3 → infiagent-3.2.5}/core/events.py +0 -0
  37. {infiagent-3.2.3 → infiagent-3.2.5}/core/hierarchy_manager.py +0 -0
  38. {infiagent-3.2.3 → infiagent-3.2.5}/core/runtime_exceptions.py +0 -0
  39. {infiagent-3.2.3 → infiagent-3.2.5}/core/state_cleaner.py +0 -0
  40. {infiagent-3.2.3 → infiagent-3.2.5}/infiagent/__init__.py +0 -0
  41. {infiagent-3.2.3 → infiagent-3.2.5}/infiagent.egg-info/SOURCES.txt +0 -0
  42. {infiagent-3.2.3 → infiagent-3.2.5}/infiagent.egg-info/dependency_links.txt +0 -0
  43. {infiagent-3.2.3 → infiagent-3.2.5}/infiagent.egg-info/entry_points.txt +0 -0
  44. {infiagent-3.2.3 → infiagent-3.2.5}/infiagent.egg-info/requires.txt +0 -0
  45. {infiagent-3.2.3 → infiagent-3.2.5}/infiagent.egg-info/top_level.txt +0 -0
  46. {infiagent-3.2.3 → infiagent-3.2.5}/pyproject.toml +0 -0
  47. {infiagent-3.2.3 → infiagent-3.2.5}/requirements.txt +0 -0
  48. {infiagent-3.2.3 → infiagent-3.2.5}/services/__init__.py +0 -0
  49. {infiagent-3.2.3 → infiagent-3.2.5}/services/action_compressor.py +0 -0
  50. {infiagent-3.2.3 → infiagent-3.2.5}/services/context_compressor_backup.py +0 -0
  51. {infiagent-3.2.3 → infiagent-3.2.5}/services/llm_client.py +0 -0
  52. {infiagent-3.2.3 → infiagent-3.2.5}/services/thinking_agent.py +0 -0
  53. {infiagent-3.2.3 → infiagent-3.2.5}/setup.cfg +0 -0
  54. {infiagent-3.2.3 → infiagent-3.2.5}/skills/algorithmic-art/LICENSE.txt +0 -0
  55. {infiagent-3.2.3 → infiagent-3.2.5}/skills/algorithmic-art/SKILL.md +0 -0
  56. {infiagent-3.2.3 → infiagent-3.2.5}/skills/algorithmic-art/templates/generator_template.js +0 -0
  57. {infiagent-3.2.3 → infiagent-3.2.5}/skills/algorithmic-art/templates/viewer.html +0 -0
  58. {infiagent-3.2.3 → infiagent-3.2.5}/skills/brand-guidelines/LICENSE.txt +0 -0
  59. {infiagent-3.2.3 → infiagent-3.2.5}/skills/brand-guidelines/SKILL.md +0 -0
  60. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/LICENSE.txt +0 -0
  61. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/SKILL.md +0 -0
  62. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -0
  63. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  64. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  65. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -0
  66. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  67. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -0
  68. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  69. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  70. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -0
  71. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  72. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  73. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  74. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -0
  75. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  76. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -0
  77. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  78. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -0
  79. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  80. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  81. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -0
  82. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  83. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -0
  84. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  85. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  86. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -0
  87. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  88. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  89. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  90. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  91. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  92. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  93. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  94. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  95. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -0
  96. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  97. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  98. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  99. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -0
  100. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  101. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  102. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -0
  103. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  104. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  105. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  106. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -0
  107. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -0
  108. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  109. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  110. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  111. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  112. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -0
  113. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  114. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  115. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -0
  116. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  117. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -0
  118. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  119. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  120. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -0
  121. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  122. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  123. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -0
  124. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -0
  125. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  126. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  127. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -0
  128. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  129. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -0
  130. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  131. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  132. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -0
  133. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  134. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -0
  135. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  136. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  137. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  138. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  139. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -0
  140. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  141. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -0
  142. {infiagent-3.2.3 → infiagent-3.2.5}/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  143. {infiagent-3.2.3 → infiagent-3.2.5}/skills/doc-coauthoring/SKILL.md +0 -0
  144. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/LICENSE.txt +0 -0
  145. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/SKILL.md +0 -0
  146. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/__init__.py +0 -0
  147. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/accept_changes.py +0 -0
  148. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/comment.py +0 -0
  149. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/helpers/__init__.py +0 -0
  150. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/helpers/merge_runs.py +0 -0
  151. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/helpers/simplify_redlines.py +0 -0
  152. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/pack.py +0 -0
  153. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  154. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  155. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  156. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  157. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  158. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  159. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  160. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  161. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  162. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  163. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  164. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  165. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  166. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  167. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  168. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  169. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  170. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  171. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  172. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  173. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  174. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  175. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  176. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  177. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  178. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  179. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  180. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  181. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  182. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  183. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  184. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/mce/mc.xsd +0 -0
  185. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  186. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  187. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  188. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  189. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  190. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  191. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  192. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/soffice.py +0 -0
  193. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/unpack.py +0 -0
  194. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/validate.py +0 -0
  195. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/validators/__init__.py +0 -0
  196. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/validators/base.py +0 -0
  197. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/validators/docx.py +0 -0
  198. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/validators/pptx.py +0 -0
  199. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/office/validators/redlining.py +0 -0
  200. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/templates/comments.xml +0 -0
  201. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/templates/commentsExtended.xml +0 -0
  202. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/templates/commentsExtensible.xml +0 -0
  203. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/templates/commentsIds.xml +0 -0
  204. {infiagent-3.2.3 → infiagent-3.2.5}/skills/docx/scripts/templates/people.xml +0 -0
  205. {infiagent-3.2.3 → infiagent-3.2.5}/skills/frontend-design/LICENSE.txt +0 -0
  206. {infiagent-3.2.3 → infiagent-3.2.5}/skills/frontend-design/SKILL.md +0 -0
  207. {infiagent-3.2.3 → infiagent-3.2.5}/skills/internal-comms/LICENSE.txt +0 -0
  208. {infiagent-3.2.3 → infiagent-3.2.5}/skills/internal-comms/SKILL.md +0 -0
  209. {infiagent-3.2.3 → infiagent-3.2.5}/skills/internal-comms/examples/3p-updates.md +0 -0
  210. {infiagent-3.2.3 → infiagent-3.2.5}/skills/internal-comms/examples/company-newsletter.md +0 -0
  211. {infiagent-3.2.3 → infiagent-3.2.5}/skills/internal-comms/examples/faq-answers.md +0 -0
  212. {infiagent-3.2.3 → infiagent-3.2.5}/skills/internal-comms/examples/general-comms.md +0 -0
  213. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mac-use/SKILL.md +0 -0
  214. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mac-use/requirements.txt +0 -0
  215. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mac-use/scripts/mac_use.py +0 -0
  216. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mcp-builder/LICENSE.txt +0 -0
  217. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mcp-builder/SKILL.md +0 -0
  218. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mcp-builder/reference/evaluation.md +0 -0
  219. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mcp-builder/reference/mcp_best_practices.md +0 -0
  220. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mcp-builder/reference/node_mcp_server.md +0 -0
  221. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mcp-builder/reference/python_mcp_server.md +0 -0
  222. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mcp-builder/scripts/connections.py +0 -0
  223. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mcp-builder/scripts/evaluation.py +0 -0
  224. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mcp-builder/scripts/example_evaluation.xml +0 -0
  225. {infiagent-3.2.3 → infiagent-3.2.5}/skills/mcp-builder/scripts/requirements.txt +0 -0
  226. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/LICENSE.txt +0 -0
  227. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/SKILL.md +0 -0
  228. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/forms.md +0 -0
  229. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/reference.md +0 -0
  230. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/scripts/check_bounding_boxes.py +0 -0
  231. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/scripts/check_fillable_fields.py +0 -0
  232. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/scripts/convert_pdf_to_images.py +0 -0
  233. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/scripts/create_validation_image.py +0 -0
  234. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/scripts/extract_form_field_info.py +0 -0
  235. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/scripts/extract_form_structure.py +0 -0
  236. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/scripts/fill_fillable_fields.py +0 -0
  237. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  238. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/LICENSE.txt +0 -0
  239. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/SKILL.md +0 -0
  240. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/editing.md +0 -0
  241. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/pptxgenjs.md +0 -0
  242. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/__init__.py +0 -0
  243. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/add_slide.py +0 -0
  244. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/clean.py +0 -0
  245. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  246. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/helpers/merge_runs.py +0 -0
  247. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/helpers/simplify_redlines.py +0 -0
  248. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/pack.py +0 -0
  249. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  250. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  251. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  252. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  253. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  254. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  255. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  256. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  257. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  258. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  259. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  260. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  261. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  262. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  263. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  264. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  265. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  266. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  267. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  268. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  269. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  270. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  271. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  272. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  273. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  274. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  275. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  276. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  277. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  278. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  279. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  280. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/mce/mc.xsd +0 -0
  281. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  282. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  283. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  284. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  285. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  286. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  287. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  288. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/soffice.py +0 -0
  289. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/unpack.py +0 -0
  290. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/validate.py +0 -0
  291. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/validators/__init__.py +0 -0
  292. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/validators/base.py +0 -0
  293. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/validators/docx.py +0 -0
  294. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/validators/pptx.py +0 -0
  295. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/office/validators/redlining.py +0 -0
  296. {infiagent-3.2.3 → infiagent-3.2.5}/skills/pptx/scripts/thumbnail.py +0 -0
  297. {infiagent-3.2.3 → infiagent-3.2.5}/skills/slack-gif-creator/LICENSE.txt +0 -0
  298. {infiagent-3.2.3 → infiagent-3.2.5}/skills/slack-gif-creator/SKILL.md +0 -0
  299. {infiagent-3.2.3 → infiagent-3.2.5}/skills/slack-gif-creator/core/easing.py +0 -0
  300. {infiagent-3.2.3 → infiagent-3.2.5}/skills/slack-gif-creator/core/frame_composer.py +0 -0
  301. {infiagent-3.2.3 → infiagent-3.2.5}/skills/slack-gif-creator/core/gif_builder.py +0 -0
  302. {infiagent-3.2.3 → infiagent-3.2.5}/skills/slack-gif-creator/core/validators.py +0 -0
  303. {infiagent-3.2.3 → infiagent-3.2.5}/skills/slack-gif-creator/requirements.txt +0 -0
  304. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/LICENSE.txt +0 -0
  305. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/SKILL.md +0 -0
  306. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/theme-showcase.pdf +0 -0
  307. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/themes/arctic-frost.md +0 -0
  308. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/themes/botanical-garden.md +0 -0
  309. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/themes/desert-rose.md +0 -0
  310. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/themes/forest-canopy.md +0 -0
  311. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/themes/golden-hour.md +0 -0
  312. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/themes/midnight-galaxy.md +0 -0
  313. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/themes/modern-minimalist.md +0 -0
  314. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/themes/ocean-depths.md +0 -0
  315. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/themes/sunset-boulevard.md +0 -0
  316. {infiagent-3.2.3 → infiagent-3.2.5}/skills/theme-factory/themes/tech-innovation.md +0 -0
  317. {infiagent-3.2.3 → infiagent-3.2.5}/skills/web-artifacts-builder/LICENSE.txt +0 -0
  318. {infiagent-3.2.3 → infiagent-3.2.5}/skills/web-artifacts-builder/SKILL.md +0 -0
  319. {infiagent-3.2.3 → infiagent-3.2.5}/skills/web-artifacts-builder/scripts/bundle-artifact.sh +0 -0
  320. {infiagent-3.2.3 → infiagent-3.2.5}/skills/web-artifacts-builder/scripts/init-artifact.sh +0 -0
  321. {infiagent-3.2.3 → infiagent-3.2.5}/skills/webapp-testing/LICENSE.txt +0 -0
  322. {infiagent-3.2.3 → infiagent-3.2.5}/skills/webapp-testing/SKILL.md +0 -0
  323. {infiagent-3.2.3 → infiagent-3.2.5}/skills/webapp-testing/examples/console_logging.py +0 -0
  324. {infiagent-3.2.3 → infiagent-3.2.5}/skills/webapp-testing/examples/element_discovery.py +0 -0
  325. {infiagent-3.2.3 → infiagent-3.2.5}/skills/webapp-testing/examples/static_html_automation.py +0 -0
  326. {infiagent-3.2.3 → infiagent-3.2.5}/skills/webapp-testing/scripts/with_server.py +0 -0
  327. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/LICENSE.txt +0 -0
  328. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/SKILL.md +0 -0
  329. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  330. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/helpers/merge_runs.py +0 -0
  331. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/helpers/simplify_redlines.py +0 -0
  332. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/pack.py +0 -0
  333. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  334. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  335. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  336. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  337. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  338. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  339. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  340. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  341. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  342. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  343. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  344. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  345. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  346. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  347. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  348. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  349. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  350. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  351. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  352. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  353. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  354. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  355. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  356. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  357. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  358. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  359. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  360. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  361. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  362. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  363. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  364. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/mce/mc.xsd +0 -0
  365. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  366. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  367. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  368. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  369. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  370. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  371. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  372. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/soffice.py +0 -0
  373. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/unpack.py +0 -0
  374. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/validate.py +0 -0
  375. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/validators/__init__.py +0 -0
  376. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/validators/base.py +0 -0
  377. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/validators/docx.py +0 -0
  378. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/validators/pptx.py +0 -0
  379. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/office/validators/redlining.py +0 -0
  380. {infiagent-3.2.3 → infiagent-3.2.5}/skills/xlsx/scripts/recalc.py +0 -0
  381. {infiagent-3.2.3 → infiagent-3.2.5}/start.py +0 -0
  382. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_cheapclaw_service.py +0 -0
  383. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_code_tools_system_terminal.py +0 -0
  384. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_context_hooks.py +0 -0
  385. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_file_tools.py +0 -0
  386. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_image_read_message.py +0 -0
  387. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_kimi_stream_compat.py +0 -0
  388. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_llm_client_lite_openrouter.py +0 -0
  389. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_llm_client_resilience.py +0 -0
  390. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_llm_config_builder.py +0 -0
  391. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_llm_debug_output.py +0 -0
  392. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_reasoning_modes.py +0 -0
  393. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_sdk_observability.py +0 -0
  394. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_task_history_index.py +0 -0
  395. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_thinking_prompt_contract.py +0 -0
  396. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_token_budgeting.py +0 -0
  397. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_web_ui_config_api.py +0 -0
  398. {infiagent-3.2.3 → infiagent-3.2.5}/tests/test_windows_compat.py +0 -0
  399. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/__init__.py +0 -0
  400. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/llm_client_lite.py +0 -0
  401. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/registry.py +0 -0
  402. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/requirements.txt +0 -0
  403. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/BROWSER_IMPROVEMENTS.md +0 -0
  404. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/FILE_READ_USAGE.md +0 -0
  405. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/__init__.py +0 -0
  406. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/arxiv_tools.py +0 -0
  407. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/audio_tools.py +0 -0
  408. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/browser_tools.py +0 -0
  409. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/code_tools.py +0 -0
  410. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/convert_tools.py +0 -0
  411. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/document_tools.py +0 -0
  412. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/file_tools.py +0 -0
  413. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/human_tools.py +0 -0
  414. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/paper_tools.py +0 -0
  415. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/powerpoint_tools.py +0 -0
  416. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/reference_tools.py +0 -0
  417. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/skill_tools.py +0 -0
  418. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/vision_tools.py +0 -0
  419. {infiagent-3.2.3 → infiagent-3.2.5}/tool_server_lite/tools/web_tools.py +0 -0
  420. {infiagent-3.2.3 → infiagent-3.2.5}/utils/__init__.py +0 -0
  421. {infiagent-3.2.3 → infiagent-3.2.5}/utils/config_loader.py +0 -0
  422. {infiagent-3.2.3 → infiagent-3.2.5}/utils/config_manager.py +0 -0
  423. {infiagent-3.2.3 → infiagent-3.2.5}/utils/context_hooks.py +0 -0
  424. {infiagent-3.2.3 → infiagent-3.2.5}/utils/conversation_storage.py +0 -0
  425. {infiagent-3.2.3 → infiagent-3.2.5}/utils/event_emitter.py +0 -0
  426. {infiagent-3.2.3 → infiagent-3.2.5}/utils/llm_config_builder.py +0 -0
  427. {infiagent-3.2.3 → infiagent-3.2.5}/utils/mcp_manager.py +0 -0
  428. {infiagent-3.2.3 → infiagent-3.2.5}/utils/runtime_control.py +0 -0
  429. {infiagent-3.2.3 → infiagent-3.2.5}/utils/skill_loader.py +0 -0
  430. {infiagent-3.2.3 → infiagent-3.2.5}/utils/task_history_index.py +0 -0
  431. {infiagent-3.2.3 → infiagent-3.2.5}/utils/token_budget.py +0 -0
  432. {infiagent-3.2.3 → infiagent-3.2.5}/utils/tool_hooks.py +0 -0
  433. {infiagent-3.2.3 → infiagent-3.2.5}/utils/user_paths.py +0 -0
  434. {infiagent-3.2.3 → infiagent-3.2.5}/utils/windows_compat.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: infiagent
3
- Version: 3.2.3
3
+ Version: 3.2.5
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.3-blue.svg" alt="Version">
58
+ <img src="https://img.shields.io/badge/version-3.2.5-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>
@@ -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.3-blue.svg" alt="Version">
7
+ <img src="https://img.shields.io/badge/version-3.2.5-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>
@@ -75,6 +75,8 @@ class AgentExecutor:
75
75
 
76
76
  # 从配置中提取信息
77
77
  self.available_tools = list(agent_config.get("available_tools", []))
78
+ if "task_history_search" not in self.available_tools and "task_history_search" in config_loader.all_tools:
79
+ self.available_tools.append("task_history_search")
78
80
  self.max_turns = self._resolve_max_turns()
79
81
  requested_model = self._get_agent_model_preference("execution")
80
82
  self._inject_mcp_tools()
@@ -132,20 +134,23 @@ class AgentExecutor:
132
134
  self.latest_thinking = ""
133
135
  self.first_thinking_done = False
134
136
  runtime = get_runtime_settings()
135
- self.action_window_steps = int(self.agent_config.get("action_window_steps") or runtime.get("action_window_steps", 30))
136
- self.thinking_interval = int(self.agent_config.get("thinking_interval") or runtime.get("thinking_interval", self.action_window_steps))
137
+ self.thinking_enabled = bool(self.agent_config.get("thinking_enabled", runtime.get("thinking_enabled", True)))
138
+ self.thinking_steps = int(
139
+ self.agent_config.get("thinking_steps")
140
+ or runtime.get("thinking_steps", runtime.get("thinking_interval", runtime.get("action_window_steps", 30)))
141
+ )
142
+ self.action_window_steps = self.thinking_steps
143
+ self.thinking_interval = self.thinking_steps
144
+ self.no_tool_retry_limit = int(
145
+ self.agent_config.get("no_tool_retry_limit")
146
+ or runtime.get("no_tool_retry_limit", 7)
147
+ )
137
148
  self.fresh_enabled = runtime.get("fresh_enabled", False)
138
149
  self.fresh_interval_sec = runtime.get("fresh_interval_sec", 0)
139
150
  self.last_fresh_at = time.time()
140
151
  self.tool_call_counter = 0
141
152
  self.llm_turn_counter = 0 # LLM调用轮次计数器(用于消息分组)
142
153
  self.current_task_id = None
143
- self.token_usage_totals = {
144
- "prompt_tokens": 0,
145
- "completion_tokens": 0,
146
- "total_tokens": 0,
147
- "reasoning_tokens": 0,
148
- }
149
154
 
150
155
  def _get_agent_model_preference(self, category: str) -> Optional[str]:
151
156
  field_map = {
@@ -248,7 +253,7 @@ class AgentExecutor:
248
253
 
249
254
  try:
250
255
  # 首次thinking(初始规划)
251
- if start_turn == 0 and not self.first_thinking_done:
256
+ if self.thinking_enabled and start_turn == 0 and not self.first_thinking_done:
252
257
  thinking_result = self._trigger_thinking(
253
258
  task_id,
254
259
  user_input,
@@ -294,13 +299,16 @@ class AgentExecutor:
294
299
  # 从 action_history 构建标准 messages 数组
295
300
  messages = self._build_messages_from_action_history()
296
301
 
297
- # 基于真实预算做一次动作历史压缩,再调用 LLM
298
- full_system_prompt, messages = self._fit_request_to_budget(
299
- task_id,
300
- user_input,
301
- full_system_prompt,
302
- messages,
303
- )
302
+ # thinking 模式:在动作调用前先进行一轮 ReAct 反思(纯文本,不调用工具)
303
+ if not self.thinking_enabled:
304
+ self._run_react_reflection(
305
+ task_id=task_id,
306
+ task_input=user_input,
307
+ system_prompt=full_system_prompt,
308
+ messages=messages,
309
+ turn=turn,
310
+ )
311
+ messages = self._build_messages_from_action_history()
304
312
 
305
313
  # 调用LLM(使用标准 messages 格式)
306
314
  llm_response = self._execute_llm_call(full_system_prompt, messages, task_id=task_id)
@@ -317,33 +325,32 @@ class AgentExecutor:
317
325
  return error_result
318
326
 
319
327
  if not llm_response.tool_calls:
320
- # 强制工具调用机制
321
-
322
- if max_tool_try < 5:
323
- max_tool_try += 1
324
- self.event_emitter.dispatch(CliDisplayEvent(
325
- message=f"⚠️ LLM未调用工具,第{max_tool_try}/5次提醒",
326
- style='warning'
327
- ))
328
- self.action_history.append({
329
- "_turn": self.llm_turn_counter,
330
- "tool_name": "_no_tool_call",
331
- "arguments": {},
332
- "result": {
333
- "status": "error",
334
- "output": f"第{max_tool_try}次:LLM未调用工具,请在下一轮中必须调用工具"
335
- },
336
- "assistant_content": llm_response.output or ""
337
- })
338
- self.llm_turn_counter += 1
339
- self._save_state(task_id, user_input, turn)
340
- continue
341
- else:
342
- # 5次后仍不调用,触发thinking并报错
328
+ if self.thinking_enabled:
329
+ if max_tool_try < self.no_tool_retry_limit:
330
+ max_tool_try += 1
331
+ self.event_emitter.dispatch(CliDisplayEvent(
332
+ message=f"⚠️ LLM未调用工具,第{max_tool_try}/{self.no_tool_retry_limit}次提醒",
333
+ style='warning'
334
+ ))
335
+ self.action_history.append({
336
+ "_turn": self.llm_turn_counter,
337
+ "tool_name": "_no_tool_call",
338
+ "arguments": {},
339
+ "result": {
340
+ "status": "error",
341
+ "output": f"第{max_tool_try}次:LLM未调用工具,请在下一轮中必须调用工具"
342
+ },
343
+ "assistant_content": llm_response.output or "",
344
+ "reasoning_content": llm_response.reasoning_content or "",
345
+ })
346
+ self.llm_turn_counter += 1
347
+ self._save_state(task_id, user_input, turn)
348
+ continue
349
+
343
350
  thinking_result = self._trigger_thinking(
344
- task_id,
345
- user_input,
346
- is_initial=False,
351
+ task_id,
352
+ user_input,
353
+ is_initial=False,
347
354
  is_forced=True
348
355
  )
349
356
  error_output = thinking_result or "多次未调用工具"
@@ -357,6 +364,28 @@ class AgentExecutor:
357
364
  self.event_emitter.dispatch(AgentEndEvent(status='error', result=error_result))
358
365
  self.event_emitter.dispatch(ThinkingFailEvent(agent_name=self.agent_name, error_message=f"[{self.agent_name}] 强制thinking: {thinking_result if thinking_result else '分析失败'}"))
359
366
  return error_result
367
+
368
+ text_response = (llm_response.output or "").strip()
369
+ if text_response:
370
+ self._record_text_response(
371
+ tool_name="_assistant_text",
372
+ text=text_response,
373
+ llm_turn=self.llm_turn_counter,
374
+ reasoning_content=llm_response.reasoning_content or "",
375
+ )
376
+ self.llm_turn_counter += 1
377
+ self._save_state(task_id, user_input, turn)
378
+ continue
379
+
380
+ error_result = {
381
+ "status": "error",
382
+ "output": "",
383
+ "error_information": "ReAct模式下模型既未调用工具,也未返回可用文本"
384
+ }
385
+ error_result = self._with_model_outputs(error_result)
386
+ self.hierarchy_manager.pop_agent(self.agent_id, str(error_result))
387
+ self.event_emitter.dispatch(AgentEndEvent(status='error', result=error_result))
388
+ return error_result
360
389
  # 重置计数器(成功调用了工具)
361
390
  max_tool_try = 0
362
391
 
@@ -386,7 +415,7 @@ class AgentExecutor:
386
415
  # 检查是否该触发thinking(每 N 轮工具调用)
387
416
  # 用整除判断是否跨过了 thinking_interval 边界(避免多 tool_call 跳过边界值)
388
417
  crossed_boundary = (counter_before // self.thinking_interval) < (self.tool_call_counter // self.thinking_interval)
389
- if self.tool_call_counter > 0 and crossed_boundary:
418
+ if self.thinking_enabled and self.tool_call_counter > 0 and crossed_boundary:
390
419
  thinking_result = self._trigger_thinking(task_id, user_input, is_initial=False)
391
420
  if thinking_result:
392
421
  self.latest_thinking = thinking_result
@@ -395,7 +424,7 @@ class AgentExecutor:
395
424
 
396
425
  # 检查动作窗口是否跨过边界:thinking 完成后再清空当前可见动作窗口
397
426
  crossed_action_window = (counter_before // self.action_window_steps) < (self.tool_call_counter // self.action_window_steps)
398
- if self.tool_call_counter > 0 and crossed_action_window:
427
+ if self.thinking_enabled and self.tool_call_counter > 0 and crossed_action_window:
399
428
  self.action_history = []
400
429
  self.llm_turn_counter = 0
401
430
 
@@ -492,6 +521,15 @@ class AgentExecutor:
492
521
  "content": f"[Previous actions summary]\n{action['result']['output']}"
493
522
  })
494
523
  continue
524
+
525
+ if tool_name in {"_react_reflection", "_assistant_text"}:
526
+ assistant_content = action.get("assistant_content", "") or action.get("result", {}).get("output", "")
527
+ if assistant_content:
528
+ assistant_msg = {"role": "assistant", "content": assistant_content}
529
+ if action.get("reasoning_content"):
530
+ assistant_msg["reasoning_content"] = action["reasoning_content"]
531
+ messages.append(assistant_msg)
532
+ continue
495
533
 
496
534
  # 特殊处理:LLM 未调用工具
497
535
  if tool_name == "_no_tool_call":
@@ -611,7 +649,17 @@ class AgentExecutor:
611
649
  def _format_kimi_history_tool_call_id(tool_name: str, sequence_index: int) -> str:
612
650
  safe_tool_name = str(tool_name or "").strip() or "tool"
613
651
  return f"functions.{safe_tool_name}:{max(0, int(sequence_index))}"
614
- def _execute_llm_call(self, system_prompt: str, messages: List[Dict] = None, task_id: Optional[str] = None):
652
+ def _execute_llm_call(
653
+ self,
654
+ system_prompt: str,
655
+ messages: List[Dict] = None,
656
+ task_id: Optional[str] = None,
657
+ *,
658
+ tool_list: Optional[List[str]] = None,
659
+ tool_choice: Optional[str] = None,
660
+ debug_label: str = "execution",
661
+ stream_tokens: bool = True,
662
+ ):
615
663
  """
616
664
  执行LLM调用并分发事件
617
665
 
@@ -629,7 +677,8 @@ class AgentExecutor:
629
677
  system_prompt=system_prompt
630
678
  ))
631
679
 
632
- execution_tool_choice = self.llm_client.resolve_tool_choice(
680
+ effective_tool_list = list(self.available_tools if tool_list is None else tool_list)
681
+ execution_tool_choice = tool_choice or self.llm_client.resolve_tool_choice(
633
682
  category="execution",
634
683
  model=self.execution_model,
635
684
  )
@@ -639,26 +688,27 @@ class AgentExecutor:
639
688
  history=messages,
640
689
  model=self.execution_model,
641
690
  system_prompt=system_prompt,
642
- tool_list=self.available_tools,
691
+ tool_list=effective_tool_list,
643
692
  tool_choice=execution_tool_choice,
644
693
  max_tokens=max_tokens_override,
645
694
  emit_tokens="token", # 主 Agent 调用:流式发送 content token
646
695
  debug_task_id=task_id,
647
- debug_label="execution",
696
+ debug_label=debug_label,
648
697
  stream_callback=self._build_llm_stream_callback(
649
698
  stream_group="llm",
650
699
  agent_name=self.agent_name,
651
700
  model=self.execution_model,
652
- ) if self.stream_llm_tokens else None,
701
+ ) if self.stream_llm_tokens and stream_tokens else None,
653
702
  )
654
703
 
655
704
  llm_record = {
656
705
  "turn_index": self.llm_turn_counter,
706
+ "debug_label": debug_label,
707
+ "tool_choice": execution_tool_choice,
657
708
  "model": llm_response.model or self.execution_model,
658
709
  "content": llm_response.output or "",
659
710
  "reasoning_content": llm_response.reasoning_content or "",
660
711
  "finish_reason": llm_response.finish_reason or "",
661
- "usage": dict(llm_response.usage or {}),
662
712
  "tool_calls": [
663
713
  {
664
714
  "id": tool_call.id,
@@ -670,7 +720,6 @@ class AgentExecutor:
670
720
  "status": llm_response.status,
671
721
  }
672
722
  self.execution_traces.append(llm_record)
673
- current_usage, cumulative_usage = self._accumulate_usage(llm_response.usage)
674
723
 
675
724
  self.event_emitter.dispatch(LlmCallEndEvent(
676
725
  llm_output=llm_response.output,
@@ -678,111 +727,84 @@ class AgentExecutor:
678
727
  model=llm_record["model"],
679
728
  reasoning_content=llm_record["reasoning_content"],
680
729
  finish_reason=llm_record["finish_reason"],
681
- usage=current_usage,
682
- cumulative_usage=cumulative_usage,
683
- request_budget=dict(llm_response.request_budget or {}),
684
730
  ))
685
731
  return llm_response
686
732
 
687
- def _accumulate_usage(self, usage: Optional[Dict[str, Any]]) -> tuple[Dict[str, Any], Dict[str, Any]]:
688
- current = dict(usage or {})
689
- for key in ("prompt_tokens", "completion_tokens", "total_tokens", "reasoning_tokens"):
690
- value = int(current.get(key, 0) or 0)
691
- current[key] = value
692
- self.token_usage_totals[key] = int(self.token_usage_totals.get(key, 0) or 0) + value
693
- cumulative = dict(self.token_usage_totals)
694
- if "cost" in current:
695
- cumulative["last_cost"] = current.get("cost")
696
- return current, cumulative
697
-
698
- def _fit_request_to_budget(self, task_id: str, task_input: str, system_prompt: str, messages: List[Dict]) -> tuple[str, List[Dict]]:
699
- """
700
- 在真正调用 LLM 之前,按实际请求预算动态压缩 action_history。
701
- 这一步是软压缩;最终是否超窗由 llm_client 内的硬预算检查兜底。
702
- """
703
- max_tokens_override = self.agent_config.get("max_tokens")
704
-
705
- for _ in range(3):
706
- tools_definition = self.llm_client._build_tools_definition(self.available_tools)
707
- budget = self.llm_client.build_request_budget(
708
- system_prompt=system_prompt,
709
- messages=messages,
710
- tools_definition=tools_definition,
711
- max_tokens=max_tokens_override,
712
- force_exact=False,
713
- )
714
- if budget.total_with_reserved_tokens >= int(self.llm_client.max_context_window * 0.7):
715
- budget = self.llm_client.build_request_budget(
716
- system_prompt=system_prompt,
717
- messages=messages,
718
- tools_definition=tools_definition,
719
- max_tokens=max_tokens_override,
720
- force_exact=True,
721
- )
722
-
723
- if not budget.over_budget or not self.action_history:
724
- return system_prompt, messages
725
-
726
- from services.action_compressor import ActionCompressor
727
-
728
- if not hasattr(self, "action_compressor"):
729
- self.action_compressor = ActionCompressor(
730
- self.llm_client,
731
- preferred_model=self._get_agent_model_preference("compressor"),
732
- max_tokens=self.agent_config.get("max_tokens"),
733
- debug_task_id=self.current_task_id,
734
- )
735
- else:
736
- self.action_compressor.debug_task_id = self.current_task_id
737
-
738
- available_action_tokens = max(
739
- 256,
740
- budget.available_input_tokens
741
- - budget.system_prompt_tokens
742
- - budget.tool_tokens
743
- - budget.image_surcharge_tokens,
744
- )
745
- before_tokens = self.action_compressor.count_action_context_tokens(
746
- self.action_history,
747
- thinking=self.latest_thinking,
748
- task_input=self.current_task_input,
749
- )
750
- compressed = self.action_compressor.compress_if_needed(
751
- self.action_history,
752
- self.llm_client.max_context_window,
753
- thinking=self.latest_thinking,
754
- task_input=self.current_task_input,
755
- max_action_tokens=available_action_tokens,
756
- )
757
- after_tokens = self.action_compressor.count_action_context_tokens(
758
- compressed,
759
- thinking=self.latest_thinking,
760
- task_input=self.current_task_input,
761
- )
762
-
763
- if after_tokens >= before_tokens:
764
- return system_prompt, messages
733
+ def _record_text_response(
734
+ self,
735
+ *,
736
+ tool_name: str,
737
+ text: str,
738
+ llm_turn: int,
739
+ reasoning_content: str = "",
740
+ ) -> None:
741
+ action_record = {
742
+ "_turn": llm_turn,
743
+ "tool_name": tool_name,
744
+ "arguments": {},
745
+ "result": {
746
+ "status": "success",
747
+ "output": text,
748
+ },
749
+ "assistant_content": text,
750
+ "reasoning_content": reasoning_content,
751
+ "_has_image": False,
752
+ "_image_base64": None,
753
+ }
754
+ fact_record = dict(action_record)
755
+ fact_record["_image_base64"] = None
756
+ self.action_history_fact.append(fact_record)
757
+ self.action_history.append(action_record)
765
758
 
766
- self.event_emitter.dispatch(CliDisplayEvent(
767
- message=(
768
- "🔐 请求接近上下文上限,按真实预算压缩动作历史: "
769
- f"{before_tokens} {after_tokens} tokens "
770
- f"(可用动作预算 {available_action_tokens})"
771
- ),
772
- style='warning'
773
- ))
774
- self.action_history = compressed
775
- system_prompt = self.context_builder.build_context(
776
- task_id,
777
- self.agent_id,
778
- self.agent_name,
779
- task_input,
780
- action_history=self.action_history,
781
- include_action_history=False
782
- )
783
- messages = self._build_messages_from_action_history()
759
+ def _build_react_reflection_prompt(self) -> str:
760
+ tool_names = ", ".join(self.available_tools) if self.available_tools else "(无可用工具)"
761
+ return (
762
+ "你当前处于 ReAct 反思阶段。请先简短输出当前进展、下一步最应该采取的动作、"
763
+ "以及是否需要使用 task_history_search 检索历史任务。"
764
+ "只输出纯文本思考,不要调用工具,不要输出 JSON/XML/markdown 标记。"
765
+ f"可用工具如下:{tool_names}"
766
+ )
784
767
 
785
- return system_prompt, messages
768
+ def _run_react_reflection(
769
+ self,
770
+ *,
771
+ task_id: str,
772
+ task_input: str,
773
+ system_prompt: str,
774
+ messages: List[Dict],
775
+ turn: int,
776
+ ) -> None:
777
+ reflection_messages = list(messages or [])
778
+ reflection_messages.append({
779
+ "role": "user",
780
+ "content": self._build_react_reflection_prompt(),
781
+ })
782
+ llm_response = self._execute_llm_call(
783
+ system_prompt,
784
+ reflection_messages,
785
+ task_id=task_id,
786
+ tool_list=[],
787
+ tool_choice="none",
788
+ debug_label="react_reflection",
789
+ stream_tokens=False,
790
+ )
791
+ if llm_response.status != "success":
792
+ raise Exception(llm_response.error_information or "ReAct reflection failed")
793
+ reflection_text = str(llm_response.output or "").strip()
794
+ if not reflection_text:
795
+ return
796
+ self._record_text_response(
797
+ tool_name="_react_reflection",
798
+ text=reflection_text,
799
+ llm_turn=self.llm_turn_counter,
800
+ reasoning_content=llm_response.reasoning_content or "",
801
+ )
802
+ self.llm_turn_counter += 1
803
+ self._save_state(task_id, task_input, turn)
804
+ self.event_emitter.dispatch(CliDisplayEvent(
805
+ message=f"🤔 ReAct反思已更新: {reflection_text[:160]}",
806
+ style='info'
807
+ ))
786
808
 
787
809
  def _execute_tool_call(self, tool_call: Dict, task_id: str, user_input: str, turn: int,
788
810
  assistant_content: str = "", reasoning_content: str = "",
@@ -1002,8 +1024,17 @@ class AgentExecutor:
1002
1024
 
1003
1025
  # 重新读取运行时参数
1004
1026
  runtime = get_runtime_settings()
1005
- self.action_window_steps = int(self.agent_config.get("action_window_steps") or runtime.get("action_window_steps", 30))
1006
- self.thinking_interval = int(self.agent_config.get("thinking_interval") or runtime.get("thinking_interval", self.action_window_steps))
1027
+ self.thinking_enabled = bool(self.agent_config.get("thinking_enabled", runtime.get("thinking_enabled", True)))
1028
+ self.thinking_steps = int(
1029
+ self.agent_config.get("thinking_steps")
1030
+ or runtime.get("thinking_steps", runtime.get("thinking_interval", runtime.get("action_window_steps", 30)))
1031
+ )
1032
+ self.action_window_steps = self.thinking_steps
1033
+ self.thinking_interval = self.thinking_steps
1034
+ self.no_tool_retry_limit = int(
1035
+ self.agent_config.get("no_tool_retry_limit")
1036
+ or runtime.get("no_tool_retry_limit", 7)
1037
+ )
1007
1038
  self.fresh_enabled = runtime.get("fresh_enabled", False)
1008
1039
  self.fresh_interval_sec = runtime.get("fresh_interval_sec", 0)
1009
1040
  self.last_fresh_at = time.time()
@@ -1013,6 +1044,8 @@ class AgentExecutor:
1013
1044
  self.config_loader = loader_cls(self.config_loader.agent_system_name)
1014
1045
  self.agent_config = self.config_loader.get_tool_config(self.agent_name)
1015
1046
  self.available_tools = list(self.agent_config.get("available_tools", []))
1047
+ if "task_history_search" not in self.available_tools and "task_history_search" in self.config_loader.all_tools:
1048
+ self.available_tools.append("task_history_search")
1016
1049
  self._inject_mcp_tools()
1017
1050
 
1018
1051
  self.llm_client = SimpleLLMClient()
@@ -1207,12 +1240,10 @@ class AgentExecutor:
1207
1240
  "formatted_result": result,
1208
1241
  "finish_reason": thinking_payload.get("finish_reason", ""),
1209
1242
  "status": thinking_payload.get("status", "success"),
1210
- "usage": dict(thinking_payload.get("usage") or {}),
1211
1243
  "is_initial": bool(is_initial),
1212
1244
  "is_forced": bool(is_forced),
1213
1245
  }
1214
1246
  self.thinking_traces.append(thinking_record)
1215
- current_usage, cumulative_usage = self._accumulate_usage(thinking_record["usage"])
1216
1247
  # 发送 thinking 事件(完整内容)
1217
1248
  self.event_emitter.dispatch(ThinkingEndEvent(
1218
1249
  agent_name=self.agent_name,
@@ -1221,8 +1252,6 @@ class AgentExecutor:
1221
1252
  raw_output=thinking_record["content"],
1222
1253
  raw_reasoning_content=thinking_record["reasoning_content"],
1223
1254
  finish_reason=thinking_record["finish_reason"],
1224
- usage=current_usage,
1225
- cumulative_usage=cumulative_usage,
1226
1255
  is_initial=is_initial,
1227
1256
  is_forced=is_forced
1228
1257
  ))
@@ -1248,6 +1277,17 @@ class AgentExecutor:
1248
1277
  def _callback(chunk: Dict[str, Any]):
1249
1278
  kind = str((chunk or {}).get("kind") or "content").strip().lower()
1250
1279
  text = str((chunk or {}).get("text") or "")
1280
+ attempt = int((chunk or {}).get("attempt") or 1)
1281
+ if kind == "reset":
1282
+ event_type = "run.thinking.reset" if stream_group == "thinking" else "run.llm.reset"
1283
+ payload = {
1284
+ "agent_name": agent_name,
1285
+ "model": str((chunk or {}).get("model") or model or ""),
1286
+ "attempt": attempt,
1287
+ "reason": str((chunk or {}).get("reason") or "retry"),
1288
+ }
1289
+ self._emit_sdk_stream_event(event_type, payload)
1290
+ return
1251
1291
  if not text:
1252
1292
  return
1253
1293
  current_model = str((chunk or {}).get("model") or model or "")
@@ -1258,6 +1298,7 @@ class AgentExecutor:
1258
1298
  "model": current_model,
1259
1299
  "text": text,
1260
1300
  "token_kind": kind,
1301
+ "attempt": attempt,
1261
1302
  "is_initial": bool(is_initial),
1262
1303
  "is_forced": bool(is_forced),
1263
1304
  }
@@ -1268,6 +1309,7 @@ class AgentExecutor:
1268
1309
  "model": current_model,
1269
1310
  "text": text,
1270
1311
  "token_kind": kind,
1312
+ "attempt": attempt,
1271
1313
  }
1272
1314
  self._emit_sdk_stream_event(event_type, payload)
1273
1315
 
@@ -1276,7 +1318,8 @@ class AgentExecutor:
1276
1318
  def _build_model_outputs_payload(self) -> Dict[str, Any]:
1277
1319
  execution_traces = list(getattr(self, "execution_traces", []) or [])
1278
1320
  thinking_traces = list(getattr(self, "thinking_traces", []) or [])
1279
- last_execution = execution_traces[-1] if execution_traces else None
1321
+ execution_only = [item for item in execution_traces if str(item.get("debug_label") or "execution") == "execution"]
1322
+ last_execution = execution_only[-1] if execution_only else (execution_traces[-1] if execution_traces else None)
1280
1323
  last_thinking = thinking_traces[-1] if thinking_traces else None
1281
1324
  return {
1282
1325
  "execution_turns": execution_traces,