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