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