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.
- {infiagent-3.2.2/infiagent.egg-info → infiagent-3.2.4}/PKG-INFO +2 -2
- {infiagent-3.2.2 → infiagent-3.2.4}/README.md +1 -1
- {infiagent-3.2.2 → infiagent-3.2.4}/core/event_handlers.py +37 -1
- {infiagent-3.2.2 → infiagent-3.2.4}/core/events.py +5 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/core/tool_executor.py +39 -11
- {infiagent-3.2.2 → infiagent-3.2.4}/infiagent/sdk.py +10 -0
- {infiagent-3.2.2 → infiagent-3.2.4/infiagent.egg-info}/PKG-INFO +2 -2
- {infiagent-3.2.2 → infiagent-3.2.4}/infiagent.egg-info/SOURCES.txt +2 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/services/action_compressor.py +72 -11
- {infiagent-3.2.2 → infiagent-3.2.4}/services/llm_client.py +193 -194
- {infiagent-3.2.2 → infiagent-3.2.4}/services/thinking_agent.py +8 -3
- {infiagent-3.2.2 → infiagent-3.2.4}/setup.py +1 -1
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_sdk_runtime_paths.py +15 -124
- infiagent-3.2.4/tests/test_token_budgeting.py +138 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_tool_hooks.py +21 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/cli_mode.py +187 -16
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/task_runtime.py +3 -35
- infiagent-3.2.4/utils/token_budget.py +212 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/LICENSE +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/MANIFEST.in +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/OpenCowork/general_prompts.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/OpenCowork/level_-1_judge_agent.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/OpenCowork/level_0_tools.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/OpenCowork/level_3_agents.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/general_prompts.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/level_-1_judge_agent.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/level_0_tools.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/level_1_agents.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/level_2_agents.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/agent_library/Researcher/level_3_agents.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/ali_qwen_llm_config.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/document_convert_api.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/gemini_config_version.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/kimi_config_version copy.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/llm_config.example.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/llm_config.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/config/run_env_config/third_part_api.yaml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/core/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/core/agent_event_emitter.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/core/agent_executor.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/core/context_builder.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/core/hierarchy_manager.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/core/runtime_exceptions.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/core/state_cleaner.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/infiagent/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/infiagent.egg-info/dependency_links.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/infiagent.egg-info/entry_points.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/infiagent.egg-info/requires.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/infiagent.egg-info/top_level.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/pyproject.toml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/requirements.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/services/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/services/context_compressor_backup.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/setup.cfg +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/algorithmic-art/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/algorithmic-art/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/algorithmic-art/templates/generator_template.js +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/algorithmic-art/templates/viewer.html +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/brand-guidelines/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/brand-guidelines/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/doc-coauthoring/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/accept_changes.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/comment.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/helpers/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/helpers/merge_runs.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/helpers/simplify_redlines.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/pack.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/mce/mc.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/soffice.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/unpack.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validate.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validators/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validators/base.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validators/docx.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validators/pptx.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/office/validators/redlining.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/templates/comments.xml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/templates/commentsExtended.xml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/templates/commentsExtensible.xml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/templates/commentsIds.xml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/docx/scripts/templates/people.xml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/frontend-design/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/frontend-design/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/examples/3p-updates.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/examples/company-newsletter.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/examples/faq-answers.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/internal-comms/examples/general-comms.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mac-use/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mac-use/requirements.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mac-use/scripts/mac_use.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/reference/evaluation.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/reference/mcp_best_practices.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/reference/node_mcp_server.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/reference/python_mcp_server.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/scripts/connections.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/scripts/evaluation.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/scripts/example_evaluation.xml +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/mcp-builder/scripts/requirements.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/forms.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/reference.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/check_bounding_boxes.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/check_fillable_fields.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/convert_pdf_to_images.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/create_validation_image.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/extract_form_field_info.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/extract_form_structure.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/fill_fillable_fields.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/editing.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/pptxgenjs.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/add_slide.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/clean.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/helpers/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/helpers/merge_runs.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/helpers/simplify_redlines.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/pack.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/mce/mc.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/soffice.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/unpack.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validate.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validators/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validators/base.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validators/docx.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validators/pptx.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/office/validators/redlining.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/pptx/scripts/thumbnail.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/core/easing.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/core/frame_composer.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/core/gif_builder.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/core/validators.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/slack-gif-creator/requirements.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/theme-showcase.pdf +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/arctic-frost.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/botanical-garden.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/desert-rose.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/forest-canopy.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/golden-hour.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/midnight-galaxy.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/modern-minimalist.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/ocean-depths.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/sunset-boulevard.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/theme-factory/themes/tech-innovation.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/web-artifacts-builder/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/web-artifacts-builder/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/web-artifacts-builder/scripts/bundle-artifact.sh +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/web-artifacts-builder/scripts/init-artifact.sh +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/examples/console_logging.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/examples/element_discovery.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/examples/static_html_automation.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/webapp-testing/scripts/with_server.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/LICENSE.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/SKILL.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/helpers/merge_runs.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/helpers/simplify_redlines.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/pack.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/mce/mc.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/soffice.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/unpack.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validate.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validators/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validators/base.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validators/docx.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validators/pptx.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/office/validators/redlining.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/skills/xlsx/scripts/recalc.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/start.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_cheapclaw_service.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_code_tools_system_terminal.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_context_hooks.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_file_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_image_read_message.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_kimi_stream_compat.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_llm_client_lite_openrouter.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_llm_client_resilience.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_llm_config_builder.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_llm_debug_output.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_reasoning_modes.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_sdk_observability.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_task_history_index.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_thinking_prompt_contract.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_web_ui_config_api.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tests/test_windows_compat.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/llm_client_lite.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/registry.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/requirements.txt +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/BROWSER_IMPROVEMENTS.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/FILE_READ_USAGE.md +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/arxiv_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/audio_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/browser_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/code_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/convert_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/document_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/file_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/human_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/paper_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/powerpoint_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/reference_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/skill_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/task_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/vision_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/tool_server_lite/tools/web_tools.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/__init__.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/config_loader.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/config_manager.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/context_hooks.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/conversation_storage.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/event_emitter.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/llm_config_builder.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/mcp_manager.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/runtime_control.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/skill_loader.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/task_history_index.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/tool_hooks.py +0 -0
- {infiagent-3.2.2 → infiagent-3.2.4}/utils/user_paths.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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=
|
|
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":
|
|
275
|
-
"output":
|
|
276
|
-
"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,
|
|
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,
|
|
316
|
+
result = call_mcp_tool(tool_config, merged_arguments)
|
|
289
317
|
else:
|
|
290
|
-
result = self._call_direct(tool_name,
|
|
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,
|
|
320
|
+
result = call_mcp_tool(tool_config, merged_arguments)
|
|
293
321
|
else:
|
|
294
|
-
result = self._call_direct(tool_name,
|
|
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,
|
|
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=
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
104
|
-
|
|
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 <=
|
|
139
|
+
if total_tokens <= effective_budget:
|
|
108
140
|
return action_history
|
|
109
141
|
|
|
110
|
-
safe_print(f"🔄 历史动作需要压缩: {total_tokens} tokens > {
|
|
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=
|
|
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
|
|
160
|
+
# 压缩最新action的大字段(优先保留最近动作)
|
|
126
161
|
compressed_recent = self._compress_action_fields(
|
|
127
162
|
recent_action,
|
|
128
|
-
|
|
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("&", "&").replace("<", "<").replace(">", ">")
|
|
192
|
+
action_xml += f" <assistant_content>{escaped_content}</assistant_content>\n"
|
|
193
|
+
if reasoning_content:
|
|
194
|
+
escaped_reasoning = reasoning_content.replace("&", "&").replace("<", "<").replace(">", ">")
|
|
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
|
|