infiagent 3.2.2__tar.gz → 3.2.4__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.2/infiagent.egg-info → infiagent-3.2.4}/PKG-INFO +2 -2
  2. {infiagent-3.2.2 → infiagent-3.2.4}/README.md +1 -1
  3. {infiagent-3.2.2 → infiagent-3.2.4}/core/event_handlers.py +37 -1
  4. {infiagent-3.2.2 → infiagent-3.2.4}/core/events.py +5 -0
  5. {infiagent-3.2.2 → infiagent-3.2.4}/core/tool_executor.py +39 -11
  6. {infiagent-3.2.2 → infiagent-3.2.4}/infiagent/sdk.py +10 -0
  7. {infiagent-3.2.2 → infiagent-3.2.4/infiagent.egg-info}/PKG-INFO +2 -2
  8. {infiagent-3.2.2 → infiagent-3.2.4}/infiagent.egg-info/SOURCES.txt +2 -0
  9. {infiagent-3.2.2 → infiagent-3.2.4}/services/action_compressor.py +72 -11
  10. {infiagent-3.2.2 → infiagent-3.2.4}/services/llm_client.py +193 -194
  11. {infiagent-3.2.2 → infiagent-3.2.4}/services/thinking_agent.py +8 -3
  12. {infiagent-3.2.2 → infiagent-3.2.4}/setup.py +1 -1
  13. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_sdk_runtime_paths.py +15 -124
  14. infiagent-3.2.4/tests/test_token_budgeting.py +138 -0
  15. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_tool_hooks.py +21 -0
  16. {infiagent-3.2.2 → infiagent-3.2.4}/utils/cli_mode.py +187 -16
  17. {infiagent-3.2.2 → infiagent-3.2.4}/utils/task_runtime.py +3 -35
  18. infiagent-3.2.4/utils/token_budget.py +212 -0
  19. {infiagent-3.2.2 → infiagent-3.2.4}/LICENSE +0 -0
  20. {infiagent-3.2.2 → infiagent-3.2.4}/MANIFEST.in +0 -0
  21. {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/OpenCowork/general_prompts.yaml +0 -0
  22. {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/OpenCowork/level_-1_judge_agent.yaml +0 -0
  23. {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/OpenCowork/level_0_tools.yaml +0 -0
  24. {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/OpenCowork/level_3_agents.yaml +0 -0
  25. {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/general_prompts.yaml +0 -0
  26. {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/level_-1_judge_agent.yaml +0 -0
  27. {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/level_0_tools.yaml +0 -0
  28. {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/level_1_agents.yaml +0 -0
  29. {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/level_2_agents.yaml +0 -0
  30. {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/level_3_agents.yaml +0 -0
  31. {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/ali_qwen_llm_config.yaml +0 -0
  32. {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/document_convert_api.yaml +0 -0
  33. {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/gemini_config_version.yaml +0 -0
  34. {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/kimi_config_version copy.yaml +0 -0
  35. {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/llm_config.example.yaml +0 -0
  36. {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/llm_config.yaml +0 -0
  37. {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/third_part_api.yaml +0 -0
  38. {infiagent-3.2.2 → infiagent-3.2.4}/core/__init__.py +0 -0
  39. {infiagent-3.2.2 → infiagent-3.2.4}/core/agent_event_emitter.py +0 -0
  40. {infiagent-3.2.2 → infiagent-3.2.4}/core/agent_executor.py +0 -0
  41. {infiagent-3.2.2 → infiagent-3.2.4}/core/context_builder.py +0 -0
  42. {infiagent-3.2.2 → infiagent-3.2.4}/core/hierarchy_manager.py +0 -0
  43. {infiagent-3.2.2 → infiagent-3.2.4}/core/runtime_exceptions.py +0 -0
  44. {infiagent-3.2.2 → infiagent-3.2.4}/core/state_cleaner.py +0 -0
  45. {infiagent-3.2.2 → infiagent-3.2.4}/infiagent/__init__.py +0 -0
  46. {infiagent-3.2.2 → infiagent-3.2.4}/infiagent.egg-info/dependency_links.txt +0 -0
  47. {infiagent-3.2.2 → infiagent-3.2.4}/infiagent.egg-info/entry_points.txt +0 -0
  48. {infiagent-3.2.2 → infiagent-3.2.4}/infiagent.egg-info/requires.txt +0 -0
  49. {infiagent-3.2.2 → infiagent-3.2.4}/infiagent.egg-info/top_level.txt +0 -0
  50. {infiagent-3.2.2 → infiagent-3.2.4}/pyproject.toml +0 -0
  51. {infiagent-3.2.2 → infiagent-3.2.4}/requirements.txt +0 -0
  52. {infiagent-3.2.2 → infiagent-3.2.4}/services/__init__.py +0 -0
  53. {infiagent-3.2.2 → infiagent-3.2.4}/services/context_compressor_backup.py +0 -0
  54. {infiagent-3.2.2 → infiagent-3.2.4}/setup.cfg +0 -0
  55. {infiagent-3.2.2 → infiagent-3.2.4}/skills/algorithmic-art/LICENSE.txt +0 -0
  56. {infiagent-3.2.2 → infiagent-3.2.4}/skills/algorithmic-art/SKILL.md +0 -0
  57. {infiagent-3.2.2 → infiagent-3.2.4}/skills/algorithmic-art/templates/generator_template.js +0 -0
  58. {infiagent-3.2.2 → infiagent-3.2.4}/skills/algorithmic-art/templates/viewer.html +0 -0
  59. {infiagent-3.2.2 → infiagent-3.2.4}/skills/brand-guidelines/LICENSE.txt +0 -0
  60. {infiagent-3.2.2 → infiagent-3.2.4}/skills/brand-guidelines/SKILL.md +0 -0
  61. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/LICENSE.txt +0 -0
  62. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/SKILL.md +0 -0
  63. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -0
  64. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  65. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  66. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -0
  67. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  68. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -0
  69. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  70. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  71. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -0
  72. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  73. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  74. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  75. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -0
  76. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  77. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -0
  78. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  79. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -0
  80. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  81. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  82. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -0
  83. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  84. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -0
  85. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  86. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  87. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -0
  88. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  89. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  90. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  91. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  92. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  93. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  94. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  95. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  96. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -0
  97. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  98. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  99. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  100. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -0
  101. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  102. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  103. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -0
  104. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  105. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  106. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  107. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -0
  108. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -0
  109. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  110. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  111. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  112. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  113. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -0
  114. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  115. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  116. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -0
  117. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  118. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -0
  119. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  120. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  121. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -0
  122. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  123. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  124. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -0
  125. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -0
  126. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  127. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  128. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -0
  129. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  130. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -0
  131. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  132. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  133. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -0
  134. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  135. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -0
  136. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  137. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  138. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  139. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  140. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -0
  141. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  142. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -0
  143. {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  144. {infiagent-3.2.2 → infiagent-3.2.4}/skills/doc-coauthoring/SKILL.md +0 -0
  145. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/LICENSE.txt +0 -0
  146. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/SKILL.md +0 -0
  147. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/__init__.py +0 -0
  148. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/accept_changes.py +0 -0
  149. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/comment.py +0 -0
  150. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/helpers/__init__.py +0 -0
  151. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/helpers/merge_runs.py +0 -0
  152. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/helpers/simplify_redlines.py +0 -0
  153. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/pack.py +0 -0
  154. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  155. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  156. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  157. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  158. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  159. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  160. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  161. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  162. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  163. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  164. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  165. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  166. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  167. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  168. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  169. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  170. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  171. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  172. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  173. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  174. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  175. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  176. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  177. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  178. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  179. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  180. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  181. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  182. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  183. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  184. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  185. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/mce/mc.xsd +0 -0
  186. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  187. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  188. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  189. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  190. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  191. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  192. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  193. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/soffice.py +0 -0
  194. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/unpack.py +0 -0
  195. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validate.py +0 -0
  196. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validators/__init__.py +0 -0
  197. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validators/base.py +0 -0
  198. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validators/docx.py +0 -0
  199. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validators/pptx.py +0 -0
  200. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validators/redlining.py +0 -0
  201. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/templates/comments.xml +0 -0
  202. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/templates/commentsExtended.xml +0 -0
  203. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/templates/commentsExtensible.xml +0 -0
  204. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/templates/commentsIds.xml +0 -0
  205. {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/templates/people.xml +0 -0
  206. {infiagent-3.2.2 → infiagent-3.2.4}/skills/frontend-design/LICENSE.txt +0 -0
  207. {infiagent-3.2.2 → infiagent-3.2.4}/skills/frontend-design/SKILL.md +0 -0
  208. {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/LICENSE.txt +0 -0
  209. {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/SKILL.md +0 -0
  210. {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/examples/3p-updates.md +0 -0
  211. {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/examples/company-newsletter.md +0 -0
  212. {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/examples/faq-answers.md +0 -0
  213. {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/examples/general-comms.md +0 -0
  214. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mac-use/SKILL.md +0 -0
  215. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mac-use/requirements.txt +0 -0
  216. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mac-use/scripts/mac_use.py +0 -0
  217. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/LICENSE.txt +0 -0
  218. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/SKILL.md +0 -0
  219. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/reference/evaluation.md +0 -0
  220. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/reference/mcp_best_practices.md +0 -0
  221. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/reference/node_mcp_server.md +0 -0
  222. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/reference/python_mcp_server.md +0 -0
  223. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/scripts/connections.py +0 -0
  224. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/scripts/evaluation.py +0 -0
  225. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/scripts/example_evaluation.xml +0 -0
  226. {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/scripts/requirements.txt +0 -0
  227. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/LICENSE.txt +0 -0
  228. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/SKILL.md +0 -0
  229. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/forms.md +0 -0
  230. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/reference.md +0 -0
  231. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/check_bounding_boxes.py +0 -0
  232. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/check_fillable_fields.py +0 -0
  233. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/convert_pdf_to_images.py +0 -0
  234. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/create_validation_image.py +0 -0
  235. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/extract_form_field_info.py +0 -0
  236. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/extract_form_structure.py +0 -0
  237. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/fill_fillable_fields.py +0 -0
  238. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  239. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/LICENSE.txt +0 -0
  240. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/SKILL.md +0 -0
  241. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/editing.md +0 -0
  242. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/pptxgenjs.md +0 -0
  243. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/__init__.py +0 -0
  244. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/add_slide.py +0 -0
  245. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/clean.py +0 -0
  246. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  247. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/helpers/merge_runs.py +0 -0
  248. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/helpers/simplify_redlines.py +0 -0
  249. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/pack.py +0 -0
  250. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  251. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  252. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  253. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  254. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  255. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  256. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  257. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  258. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  259. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  260. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  261. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  262. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  263. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  264. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  265. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  266. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  267. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  268. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  269. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  270. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  271. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  272. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  273. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  274. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  275. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  276. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  277. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  278. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  279. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  280. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  281. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/mce/mc.xsd +0 -0
  282. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  283. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  284. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  285. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  286. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  287. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  288. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  289. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/soffice.py +0 -0
  290. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/unpack.py +0 -0
  291. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validate.py +0 -0
  292. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validators/__init__.py +0 -0
  293. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validators/base.py +0 -0
  294. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validators/docx.py +0 -0
  295. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validators/pptx.py +0 -0
  296. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validators/redlining.py +0 -0
  297. {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/thumbnail.py +0 -0
  298. {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/LICENSE.txt +0 -0
  299. {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/SKILL.md +0 -0
  300. {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/core/easing.py +0 -0
  301. {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/core/frame_composer.py +0 -0
  302. {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/core/gif_builder.py +0 -0
  303. {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/core/validators.py +0 -0
  304. {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/requirements.txt +0 -0
  305. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/LICENSE.txt +0 -0
  306. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/SKILL.md +0 -0
  307. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/theme-showcase.pdf +0 -0
  308. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/arctic-frost.md +0 -0
  309. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/botanical-garden.md +0 -0
  310. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/desert-rose.md +0 -0
  311. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/forest-canopy.md +0 -0
  312. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/golden-hour.md +0 -0
  313. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/midnight-galaxy.md +0 -0
  314. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/modern-minimalist.md +0 -0
  315. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/ocean-depths.md +0 -0
  316. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/sunset-boulevard.md +0 -0
  317. {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/tech-innovation.md +0 -0
  318. {infiagent-3.2.2 → infiagent-3.2.4}/skills/web-artifacts-builder/LICENSE.txt +0 -0
  319. {infiagent-3.2.2 → infiagent-3.2.4}/skills/web-artifacts-builder/SKILL.md +0 -0
  320. {infiagent-3.2.2 → infiagent-3.2.4}/skills/web-artifacts-builder/scripts/bundle-artifact.sh +0 -0
  321. {infiagent-3.2.2 → infiagent-3.2.4}/skills/web-artifacts-builder/scripts/init-artifact.sh +0 -0
  322. {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/LICENSE.txt +0 -0
  323. {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/SKILL.md +0 -0
  324. {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/examples/console_logging.py +0 -0
  325. {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/examples/element_discovery.py +0 -0
  326. {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/examples/static_html_automation.py +0 -0
  327. {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/scripts/with_server.py +0 -0
  328. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/LICENSE.txt +0 -0
  329. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/SKILL.md +0 -0
  330. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  331. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/helpers/merge_runs.py +0 -0
  332. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/helpers/simplify_redlines.py +0 -0
  333. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/pack.py +0 -0
  334. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  335. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  336. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  337. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  338. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  339. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  340. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  341. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  342. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  343. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  344. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  345. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  346. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  347. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  348. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  349. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  350. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  351. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  352. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  353. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  354. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  355. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  356. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  357. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  358. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  359. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  360. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  361. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  362. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  363. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  364. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  365. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/mce/mc.xsd +0 -0
  366. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  367. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  368. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  369. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  370. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  371. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  372. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  373. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/soffice.py +0 -0
  374. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/unpack.py +0 -0
  375. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validate.py +0 -0
  376. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validators/__init__.py +0 -0
  377. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validators/base.py +0 -0
  378. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validators/docx.py +0 -0
  379. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validators/pptx.py +0 -0
  380. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validators/redlining.py +0 -0
  381. {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/recalc.py +0 -0
  382. {infiagent-3.2.2 → infiagent-3.2.4}/start.py +0 -0
  383. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_cheapclaw_service.py +0 -0
  384. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_code_tools_system_terminal.py +0 -0
  385. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_context_hooks.py +0 -0
  386. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_file_tools.py +0 -0
  387. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_image_read_message.py +0 -0
  388. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_kimi_stream_compat.py +0 -0
  389. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_llm_client_lite_openrouter.py +0 -0
  390. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_llm_client_resilience.py +0 -0
  391. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_llm_config_builder.py +0 -0
  392. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_llm_debug_output.py +0 -0
  393. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_reasoning_modes.py +0 -0
  394. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_sdk_observability.py +0 -0
  395. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_task_history_index.py +0 -0
  396. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_thinking_prompt_contract.py +0 -0
  397. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_web_ui_config_api.py +0 -0
  398. {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_windows_compat.py +0 -0
  399. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/__init__.py +0 -0
  400. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/llm_client_lite.py +0 -0
  401. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/registry.py +0 -0
  402. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/requirements.txt +0 -0
  403. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/BROWSER_IMPROVEMENTS.md +0 -0
  404. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/FILE_READ_USAGE.md +0 -0
  405. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/__init__.py +0 -0
  406. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/arxiv_tools.py +0 -0
  407. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/audio_tools.py +0 -0
  408. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/browser_tools.py +0 -0
  409. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/code_tools.py +0 -0
  410. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/convert_tools.py +0 -0
  411. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/document_tools.py +0 -0
  412. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/file_tools.py +0 -0
  413. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/human_tools.py +0 -0
  414. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/paper_tools.py +0 -0
  415. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/powerpoint_tools.py +0 -0
  416. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/reference_tools.py +0 -0
  417. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/skill_tools.py +0 -0
  418. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/task_tools.py +0 -0
  419. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/vision_tools.py +0 -0
  420. {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/web_tools.py +0 -0
  421. {infiagent-3.2.2 → infiagent-3.2.4}/utils/__init__.py +0 -0
  422. {infiagent-3.2.2 → infiagent-3.2.4}/utils/config_loader.py +0 -0
  423. {infiagent-3.2.2 → infiagent-3.2.4}/utils/config_manager.py +0 -0
  424. {infiagent-3.2.2 → infiagent-3.2.4}/utils/context_hooks.py +0 -0
  425. {infiagent-3.2.2 → infiagent-3.2.4}/utils/conversation_storage.py +0 -0
  426. {infiagent-3.2.2 → infiagent-3.2.4}/utils/event_emitter.py +0 -0
  427. {infiagent-3.2.2 → infiagent-3.2.4}/utils/llm_config_builder.py +0 -0
  428. {infiagent-3.2.2 → infiagent-3.2.4}/utils/mcp_manager.py +0 -0
  429. {infiagent-3.2.2 → infiagent-3.2.4}/utils/runtime_control.py +0 -0
  430. {infiagent-3.2.2 → infiagent-3.2.4}/utils/skill_loader.py +0 -0
  431. {infiagent-3.2.2 → infiagent-3.2.4}/utils/task_history_index.py +0 -0
  432. {infiagent-3.2.2 → infiagent-3.2.4}/utils/tool_hooks.py +0 -0
  433. {infiagent-3.2.2 → infiagent-3.2.4}/utils/user_paths.py +0 -0
  434. {infiagent-3.2.2 → infiagent-3.2.4}/utils/windows_compat.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: infiagent
3
- Version: 3.2.2
3
+ Version: 3.2.4
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.2-blue.svg" alt="Version">
58
+ <img src="https://img.shields.io/badge/version-3.2.4-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.2-blue.svg" alt="Version">
7
+ <img src="https://img.shields.io/badge/version-3.2.4-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>
@@ -122,6 +122,18 @@ class ConsoleLogHandler:
122
122
  def _print_run_llm_end(self, event: LlmCallEndEvent):
123
123
  safe_print(f"📥 LLM输出: {event.llm_output[:100]}...")
124
124
  safe_print(f"🔧 工具调用数量: {len(event.tool_calls)}")
125
+ if event.usage:
126
+ safe_print(
127
+ f"🧮 本轮tokens: prompt={event.usage.get('prompt_tokens', 0)}, "
128
+ f"completion={event.usage.get('completion_tokens', 0)}, "
129
+ f"total={event.usage.get('total_tokens', 0)}"
130
+ )
131
+ if event.cumulative_usage:
132
+ safe_print(
133
+ f"📈 累计tokens: prompt={event.cumulative_usage.get('prompt_tokens', 0)}, "
134
+ f"completion={event.cumulative_usage.get('completion_tokens', 0)}, "
135
+ f"total={event.cumulative_usage.get('total_tokens', 0)}"
136
+ )
125
137
 
126
138
  def _print_run_tool_start(self, event: ToolCallStartEvent):
127
139
  safe_print(f"\n🔧 执行工具: {event.tool_name}")
@@ -141,6 +153,18 @@ class ConsoleLogHandler:
141
153
 
142
154
  def _print_run_thinking_end(self, event: ThinkingEndEvent):
143
155
  safe_print(f"[{event.agent_name}] Thinking分析已更新: {event.result}")
156
+ if event.usage:
157
+ safe_print(
158
+ f"🧮 Thinking本轮tokens: prompt={event.usage.get('prompt_tokens', 0)}, "
159
+ f"completion={event.usage.get('completion_tokens', 0)}, "
160
+ f"total={event.usage.get('total_tokens', 0)}"
161
+ )
162
+ if event.cumulative_usage:
163
+ safe_print(
164
+ f"📈 累计tokens: prompt={event.cumulative_usage.get('prompt_tokens', 0)}, "
165
+ f"completion={event.cumulative_usage.get('completion_tokens', 0)}, "
166
+ f"total={event.cumulative_usage.get('total_tokens', 0)}"
167
+ )
144
168
 
145
169
  def _print_run_thinking_fail(self, event: ThinkingFailEvent):
146
170
  safe_print(f"⚠️ Thinking触发失败: {event.error_message}")
@@ -230,13 +254,25 @@ class JsonlStreamHandler:
230
254
  "error": err[:1000] if err else ""
231
255
  })
232
256
 
257
+ def _stream_run_llm_end(self, event: LlmCallEndEvent):
258
+ self.jsonl_emitter.emit({
259
+ "type": "llm_end",
260
+ "model": event.model,
261
+ "finish_reason": event.finish_reason,
262
+ "usage": event.usage or {},
263
+ "cumulative_usage": event.cumulative_usage or {},
264
+ "request_budget": event.request_budget or {},
265
+ })
266
+
233
267
  def _stream_run_thinking_end(self, event: ThinkingEndEvent):
234
268
  # 发送完整 thinking 内容(thinking agent 独立 LLM 调用,token 不经过主 agent 事件流)
235
269
  self.jsonl_emitter.emit({
236
270
  "type": "thinking_end",
237
271
  "agent": event.agent_name,
238
272
  "is_initial": event.is_initial,
239
- "result": event.result
273
+ "result": event.result,
274
+ "usage": event.usage or {},
275
+ "cumulative_usage": event.cumulative_usage or {},
240
276
  })
241
277
 
242
278
  def _stream_run_thinking_fail(self, event: ThinkingFailEvent):
@@ -72,6 +72,8 @@ class ThinkingEndEvent(AgentEvent):
72
72
  raw_output: str = ""
73
73
  raw_reasoning_content: str = ""
74
74
  finish_reason: str = ""
75
+ usage: Dict[str, Any] = field(default_factory=dict)
76
+ cumulative_usage: Dict[str, Any] = field(default_factory=dict)
75
77
  # Default arguments last
76
78
  is_forced: bool = False
77
79
  timestamp: float = field(default_factory=time.time)
@@ -107,6 +109,9 @@ class LlmCallEndEvent(AgentEvent):
107
109
  model: str = ""
108
110
  reasoning_content: str = ""
109
111
  finish_reason: str = ""
112
+ usage: Dict[str, Any] = field(default_factory=dict)
113
+ cumulative_usage: Dict[str, Any] = field(default_factory=dict)
114
+ request_budget: Dict[str, Any] = field(default_factory=dict)
110
115
  # Default arguments last
111
116
  timestamp: float = field(default_factory=time.time)
112
117
 
@@ -10,6 +10,7 @@ import time
10
10
  import uuid
11
11
  import asyncio
12
12
  import threading
13
+ import os
13
14
  from typing import Dict, Any
14
15
 
15
16
  from tool_server_lite.registry import get_runtime_registry, get_runtime_registry_failures
@@ -57,6 +58,7 @@ class ToolExecutor:
57
58
  self.task_permissions = {} # {task_id: {"auto_mode": True/False}}
58
59
  self.agent_id = ""
59
60
  self.agent_name = ""
61
+ self.tool_runtime_defaults = self._load_tool_runtime_defaults()
60
62
 
61
63
  def set_agent_context(self, *, agent_id: str = "", agent_name: str = ""):
62
64
  self.agent_id = str(agent_id or "")
@@ -69,6 +71,31 @@ class ToolExecutor:
69
71
  return int(((hierarchy.get(self.agent_id) or {}).get("level")) or 0)
70
72
  except Exception:
71
73
  return 0
74
+
75
+ def _load_tool_runtime_defaults(self) -> Dict[str, Dict[str, Any]]:
76
+ raw = os.environ.get("MLA_TOOL_RUNTIME_DEFAULTS_JSON", "").strip()
77
+ if not raw:
78
+ return {}
79
+ try:
80
+ parsed = json.loads(raw)
81
+ if isinstance(parsed, dict):
82
+ result: Dict[str, Dict[str, Any]] = {}
83
+ for tool_name, defaults in parsed.items():
84
+ if isinstance(defaults, dict):
85
+ result[str(tool_name)] = dict(defaults)
86
+ return result
87
+ except Exception as exc:
88
+ safe_print(f"⚠️ 解析 MLA_TOOL_RUNTIME_DEFAULTS_JSON 失败: {exc}")
89
+ return {}
90
+
91
+ def _merge_runtime_tool_defaults(self, tool_name: str, arguments: Dict[str, Any]) -> Dict[str, Any]:
92
+ defaults = self.tool_runtime_defaults.get(str(tool_name), {})
93
+ if not defaults:
94
+ return arguments
95
+ merged = dict(arguments or {})
96
+ for key, value in defaults.items():
97
+ merged[str(key)] = value
98
+ return merged
72
99
 
73
100
  def _init_tools_registry(self):
74
101
  """
@@ -250,12 +277,13 @@ class ToolExecutor:
250
277
  Returns:
251
278
  执行结果字典
252
279
  """
280
+ merged_arguments = self._merge_runtime_tool_defaults(tool_name, arguments)
253
281
  try:
254
282
  trigger_tool_hooks(
255
283
  when="before",
256
284
  tool_name=tool_name,
257
285
  task_id=task_id,
258
- arguments=arguments,
286
+ arguments=merged_arguments,
259
287
  agent_id=self.agent_id,
260
288
  agent_name=self.agent_name,
261
289
  agent_level=self._agent_level(),
@@ -271,13 +299,13 @@ class ToolExecutor:
271
299
  # 特殊处理final_output
272
300
  if tool_name == "final_output":
273
301
  result = {
274
- "status": arguments.get("status", "success"),
275
- "output": arguments.get("output", ""),
276
- "error_information": arguments.get("error_information", "")
302
+ "status": merged_arguments.get("status", "success"),
303
+ "output": merged_arguments.get("output", ""),
304
+ "error_information": merged_arguments.get("error_information", "")
277
305
  }
278
306
  elif tool_type == "tool_call_agent":
279
307
  if tool_name in self.DANGEROUS_TOOLS and not self.is_auto_mode(task_id):
280
- approved = self._request_tool_confirmation(tool_name, arguments, task_id)
308
+ approved = self._request_tool_confirmation(tool_name, merged_arguments, task_id)
281
309
  if not approved:
282
310
  result = {
283
311
  "status": "error",
@@ -285,15 +313,15 @@ class ToolExecutor:
285
313
  "error_information": f"工具执行被用户拒绝: {tool_name}"
286
314
  }
287
315
  elif tool_config.get("_mcp"):
288
- result = call_mcp_tool(tool_config, arguments)
316
+ result = call_mcp_tool(tool_config, merged_arguments)
289
317
  else:
290
- result = self._call_direct(tool_name, arguments, task_id)
318
+ result = self._call_direct(tool_name, merged_arguments, task_id)
291
319
  elif tool_config.get("_mcp"):
292
- result = call_mcp_tool(tool_config, arguments)
320
+ result = call_mcp_tool(tool_config, merged_arguments)
293
321
  else:
294
- result = self._call_direct(tool_name, arguments, task_id)
322
+ result = self._call_direct(tool_name, merged_arguments, task_id)
295
323
  elif tool_type == "llm_call_agent":
296
- result = self._execute_sub_agent(tool_name, tool_config, arguments, task_id)
324
+ result = self._execute_sub_agent(tool_name, tool_config, merged_arguments, task_id)
297
325
  else:
298
326
  result = {
299
327
  "status": "error",
@@ -312,7 +340,7 @@ class ToolExecutor:
312
340
  when="after",
313
341
  tool_name=tool_name,
314
342
  task_id=task_id,
315
- arguments=arguments,
343
+ arguments=merged_arguments,
316
344
  result=result,
317
345
  agent_id=self.agent_id,
318
346
  agent_name=self.agent_name,
@@ -110,6 +110,7 @@ class InfiAgent:
110
110
  fresh_enabled: Optional[bool] = None,
111
111
  fresh_interval_sec: Optional[int] = None,
112
112
  mcp_servers: Optional[List[Dict[str, Any]]] = None,
113
+ tool_runtime_defaults: Optional[Dict[str, Dict[str, Any]]] = None,
113
114
  tool_hooks: Optional[List[Dict[str, Any]]] = None,
114
115
  context_hooks: Optional[List[Dict[str, Any]]] = None,
115
116
  visible_skills: Optional[List[str]] = None,
@@ -173,6 +174,8 @@ class InfiAgent:
173
174
  self.runtime_env_overrides["MLA_FRESH_INTERVAL_SEC"] = str(max(0, int(fresh_interval_sec)))
174
175
  if mcp_servers is not None:
175
176
  self.runtime_env_overrides["MLA_MCP_CONFIG_JSON"] = json.dumps({"servers": mcp_servers}, ensure_ascii=False)
177
+ if tool_runtime_defaults is not None:
178
+ self.runtime_env_overrides["MLA_TOOL_RUNTIME_DEFAULTS_JSON"] = json.dumps(tool_runtime_defaults, ensure_ascii=False)
176
179
  if tool_hooks is not None:
177
180
  self.runtime_env_overrides["MLA_TOOL_HOOKS_JSON"] = json.dumps(tool_hooks, ensure_ascii=False)
178
181
  if context_hooks is not None:
@@ -199,6 +202,7 @@ class InfiAgent:
199
202
  self.fresh_enabled = fresh_enabled if fresh_enabled is not None else None
200
203
  self.fresh_interval_sec = max(0, int(fresh_interval_sec)) if fresh_interval_sec is not None else None
201
204
  self.mcp_servers = mcp_servers
205
+ self.tool_runtime_defaults = tool_runtime_defaults
202
206
  self.tool_hooks = tool_hooks
203
207
  self.context_hooks = context_hooks
204
208
  self.visible_skills = [str(item).strip() for item in visible_skills if str(item).strip()] if visible_skills is not None else None
@@ -258,6 +262,8 @@ class InfiAgent:
258
262
  config["fresh_interval_sec"] = self.fresh_interval_sec
259
263
  if self.mcp_servers is not None:
260
264
  config["mcp_servers"] = self.mcp_servers
265
+ if self.tool_runtime_defaults is not None:
266
+ config["tool_runtime_defaults"] = self.tool_runtime_defaults
261
267
  if self.tool_hooks is not None:
262
268
  config["tool_hooks"] = self.tool_hooks
263
269
  if self.context_hooks is not None:
@@ -320,8 +326,10 @@ class InfiAgent:
320
326
  user_history_compress_threshold_tokens: Optional[int] = None,
321
327
  user_history_recent_items: Optional[int] = None,
322
328
  max_turns: Optional[int] = None,
329
+ tool_runtime_defaults: Optional[Dict[str, Dict[str, Any]]] = None,
323
330
  ) -> Dict[str, Any]:
324
331
  target_task_id = self._resolve_task_id(task_id=task_id, workspace=workspace)
332
+ Path(target_task_id).mkdir(parents=True, exist_ok=True)
325
333
  target_agent_system = agent_system or self.default_agent_system
326
334
  target_agent_name = agent_name or self.default_agent_name
327
335
 
@@ -347,6 +355,8 @@ class InfiAgent:
347
355
  )
348
356
  if max_turns is not None:
349
357
  extra_runtime_overrides["MLA_MAX_TURNS"] = str(max(1, int(max_turns)))
358
+ if tool_runtime_defaults is not None:
359
+ extra_runtime_overrides["MLA_TOOL_RUNTIME_DEFAULTS_JSON"] = json.dumps(tool_runtime_defaults, ensure_ascii=False)
350
360
 
351
361
  with self._runtime_scope(extra_runtime_overrides or None):
352
362
  extra_event_handlers, collected_events = self._build_sdk_event_handler(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: infiagent
3
- Version: 3.2.2
3
+ Version: 3.2.4
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.2-blue.svg" alt="Version">
58
+ <img src="https://img.shields.io/badge/version-3.2.4-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>
@@ -387,6 +387,7 @@ tests/test_sdk_observability.py
387
387
  tests/test_sdk_runtime_paths.py
388
388
  tests/test_task_history_index.py
389
389
  tests/test_thinking_prompt_contract.py
390
+ tests/test_token_budgeting.py
390
391
  tests/test_tool_hooks.py
391
392
  tests/test_web_ui_config_api.py
392
393
  tests/test_windows_compat.py
@@ -425,6 +426,7 @@ utils/runtime_control.py
425
426
  utils/skill_loader.py
426
427
  utils/task_history_index.py
427
428
  utils/task_runtime.py
429
+ utils/token_budget.py
428
430
  utils/tool_hooks.py
429
431
  utils/user_paths.py
430
432
  utils/windows_compat.py
@@ -3,7 +3,11 @@ from utils.windows_compat import safe_print
3
3
  # -*- coding: utf-8 -*-
4
4
  """
5
5
  历史动作压缩服务
6
- 策略:总结历史XML + 保留最新action + 压缩最新action的大字段
6
+ 策略:总结历史XML + 保留最新action + 压缩最新action的大字段。
7
+
8
+ 注意:
9
+ - 预算统计必须覆盖 assistant_content / reasoning_content,
10
+ 否则 ReAct / thinking 文本会逃逸上下文预算。
7
11
  """
8
12
 
9
13
  import json
@@ -61,6 +65,16 @@ class ActionCompressor:
61
65
  chinese_chars = sum(1 for c in text if '\u4e00' <= c <= '\u9fff')
62
66
  other_chars = len(text) - chinese_chars
63
67
  return int(chinese_chars / 1.5 + other_chars / 4)
68
+
69
+ def count_action_context_tokens(
70
+ self,
71
+ action_history: List[Dict],
72
+ *,
73
+ thinking: str = "",
74
+ task_input: str = "",
75
+ ) -> int:
76
+ serialized = self._actions_to_xml(action_history)
77
+ return self.count_tokens(serialized + str(thinking or "") + str(task_input or ""))
64
78
 
65
79
  def compress_if_needed(
66
80
  self,
@@ -68,7 +82,8 @@ class ActionCompressor:
68
82
  max_context_window: int,
69
83
  thinking: str = "",
70
84
  task_input: str = "",
71
- save_callback=None # 添加保存回调,确保压缩后立即保存
85
+ save_callback=None, # 添加保存回调,确保压缩后立即保存
86
+ max_action_tokens: Optional[int] = None,
72
87
  ) -> List[Dict]:
73
88
  """
74
89
  检查并压缩历史动作
@@ -93,39 +108,59 @@ class ActionCompressor:
93
108
  # 如果只有一条
94
109
  if len(action_history) == 1:
95
110
  # 检查是否需要压缩字段
96
- return [self._compress_action_fields(action_history[0], max_context_window // 2)]
111
+ single_budget = max(256, int(max_action_tokens or max_context_window // 2))
112
+ return [self._compress_action_fields(
113
+ action_history[0],
114
+ single_budget,
115
+ thinking=thinking,
116
+ task_input=task_input,
117
+ max_context_window=max_context_window,
118
+ )]
97
119
 
98
120
  # 分离最新和历史
99
121
  recent_action = action_history[-1]
100
122
  historical_actions = action_history[:-1]
101
123
 
102
124
  # 计算整体token数
103
- total_text = self._actions_to_xml(action_history)
104
- total_tokens = self.count_tokens(total_text+thinking+task_input)
105
-
125
+ total_tokens = self.count_action_context_tokens(
126
+ action_history,
127
+ thinking=thinking,
128
+ task_input=task_input,
129
+ )
130
+
131
+ effective_budget = int(max_action_tokens) if max_action_tokens is not None else max(
132
+ 1024,
133
+ max_context_window
134
+ - max(1024, min(4096, int(max_context_window * 0.15)))
135
+ - max(512, min(4096, int(max_context_window * 0.05))),
136
+ )
137
+
106
138
  # 如果不超限,不压缩
107
- if total_tokens <= max_context_window - 20000:
139
+ if total_tokens <= effective_budget:
108
140
  return action_history
109
141
 
110
- safe_print(f"🔄 历史动作需要压缩: {total_tokens} tokens > {max_context_window - 20000}")
142
+ safe_print(f"🔄 历史动作需要压缩: {total_tokens} tokens > {effective_budget}")
111
143
 
112
144
  # 压缩策略:
113
145
  # 1. 历史 → 基于 thinking 和 task_input 智能总结为5k tokens
114
146
  # 2. 最新 → 压缩为max_window的50%
115
147
 
148
+ summary_target = max(256, min(5000, int(effective_budget * 0.35)))
149
+ recent_target = max(256, max(0, effective_budget - summary_target))
150
+
116
151
  summary_action = self._summarize_historical_xml(
117
152
  self._actions_to_xml(historical_actions),
118
- target_tokens=5000, # 历史总结固定5k tokens
153
+ target_tokens=summary_target,
119
154
  thinking=thinking,
120
155
  task_input=task_input,
121
156
  max_context_window=max_context_window,
122
157
  actions=historical_actions # 传递原始 actions(用于提取图片)
123
158
  )
124
159
 
125
- # 压缩最新action的大字段(50% of max_window)
160
+ # 压缩最新action的大字段(优先保留最近动作)
126
161
  compressed_recent = self._compress_action_fields(
127
162
  recent_action,
128
- int(max_context_window * 0.5), # 80000 * 0.5 = 40000 tokens
163
+ recent_target,
129
164
  thinking=thinking,
130
165
  task_input=task_input,
131
166
  max_context_window=max_context_window
@@ -147,8 +182,17 @@ class ActionCompressor:
147
182
  tool_name = action.get("tool_name", "")
148
183
  arguments = action.get("arguments", {})
149
184
  result = action.get("result", {})
185
+ assistant_content = str(action.get("assistant_content", "") or "")
186
+ reasoning_content = str(action.get("reasoning_content", "") or "")
150
187
 
151
188
  action_xml = f"<action>\n <tool_name>{tool_name}</tool_name>\n"
189
+
190
+ if assistant_content:
191
+ escaped_content = assistant_content.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
192
+ action_xml += f" <assistant_content>{escaped_content}</assistant_content>\n"
193
+ if reasoning_content:
194
+ escaped_reasoning = reasoning_content.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
195
+ action_xml += f" <reasoning_content>{escaped_reasoning}</reasoning_content>\n"
152
196
 
153
197
  # 参数(跳过内部字段)
154
198
  for k, v in arguments.items():
@@ -541,6 +585,23 @@ class ActionCompressor:
541
585
  compressed_action["result"]["output"] = compressed_output
542
586
  compressed_action["result"]["_compressed"] = True
543
587
  compressed_action["result"]["_original_tokens"] = output_tokens
588
+
589
+ for field_name in ("assistant_content", "reasoning_content"):
590
+ field_value = str(compressed_action.get(field_name, "") or "")
591
+ if not field_value:
592
+ continue
593
+ field_tokens = self.count_tokens(field_value)
594
+ if field_tokens > max_field_tokens:
595
+ safe_print(f" 🤖 LLM压缩{field_name}: {field_tokens} tokens → {max_field_tokens} tokens")
596
+ compressed_action[field_name] = self._llm_compress_field(
597
+ field_value,
598
+ max_field_tokens,
599
+ action.get("tool_name", "unknown"),
600
+ thinking=thinking,
601
+ task_input=task_input,
602
+ field_context=f"动作中的 {field_name}",
603
+ max_context_window=max_context_window
604
+ )
544
605
 
545
606
  return compressed_action
546
607