flock-core 0.3.40__tar.gz → 0.4.0b1__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.
Potentially problematic release.
This version of flock-core might be problematic. Click here for more details.
- flock_core-0.4.0b1/.project/implementation.md +639 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/PKG-INFO +1 -1
- flock_core-0.4.0b1/docs/file_path_support.md +158 -0
- flock_core-0.4.0b1/docs/serialization.md +191 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/01_introduction/01_simple_example.py +1 -1
- flock_core-0.4.0b1/examples/01_introduction/05_typed_output2.py +84 -0
- flock_core-0.4.0b1/examples/01_introduction/08_serialization.py +159 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/pyproject.toml +1 -1
- flock_core-0.4.0b1/requirements.txt +78 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/__init__.py +31 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/create_flock.py +58 -3
- flock_core-0.4.0b1/src/flock/cli/load_flock.py +192 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/registry_management.py +367 -96
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/yaml_editor.py +119 -6
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/__init__.py +13 -1
- flock_core-0.4.0b1/src/flock/core/flock.py +1458 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/flock_agent.py +114 -22
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/flock_registry.py +36 -4
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/serialization/serializable.py +35 -8
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/util/cli_helper.py +2 -2
- flock_core-0.4.0b1/src/flock/core/util/file_path_utils.py +223 -0
- flock_core-0.4.0b1/tests/serialization/test_enhanced_serialization.py +132 -0
- flock_core-0.4.0b1/tests/serialization/test_file_path_serialization.py +107 -0
- flock_core-0.4.0b1/tests/serialization/test_nested_serialization.py +95 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/tests/serialization/test_yaml_serialization.py +2 -43
- {flock_core-0.3.40 → flock_core-0.4.0b1}/uv.lock +1 -1
- flock_core-0.3.40/examples/01_introduction/05_typed_output2.py +0 -57
- flock_core-0.3.40/requirements.txt +0 -72
- flock_core-0.3.40/src/flock/cli/load_flock.py +0 -58
- flock_core-0.3.40/src/flock/core/flock.py +0 -619
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.cursorignore +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.devcontainer/devcontainer.json +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.env_template +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.github/workflows/.gitkeep +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.github/workflows/deploy-documentation.yml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.github/workflows/deploy-whiteduck-pypi.yml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.gitignore +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/SPECS.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/TASKS.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/USERSTORIES.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/analyze_repo_prompt.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/llm/code-04-04-2025.txt +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/llm/flock-02-04-25-dynamic-ui.txt +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/llm/flock-29_03_2025-yaml.txt +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/llm/llms-ctx-fasthtml.txt +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/llm/llms-ctx-full_monsterui.txt +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/llm/old_ui_poc.txt +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/planning_prompt.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/01_core_architecture.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/02_agent_factory.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/03_module_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/04_evaluator_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/05_router_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/06_tool_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/07_execution_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/08_context_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/09_cli_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/10_workflow_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/11_memory_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/12_platform_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/13_registry_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/specs/14_serialization_system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/US007-T005-YAML-Documentation-and-Examples.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/US007-T006-YAML-Editor-CLI.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US001-001-env-settings-editor.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US001-002-env-settings-ui-components.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US001-003-env-settings-file-operations.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US001-004-settings-security-features.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US001-005-env-profile-switching.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US007-T001-YAML-Serializable-Base.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US007-T002.1-FlockAgent-YAML-Formatting.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US007-T002.2-FlockAgent-YAML-Examples.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US007-T003.1-Flock-System-YAML-Formatting.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US007-T003.2-YAML-Schema-Documentation.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US007-T004-Callable-Reference-System.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/tasks/done/US007-T007-YAML-Serialization-Tests.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/userstories/US007-YAML-Serialization.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.project/userstories/done/US001-Settings-Editor.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.sesskey +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.vscode/launch.json +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.vscode/settings.json +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/.vscode/tasks.json +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/LICENSE +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/README.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/advanced/complex-workflows.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/advanced/custom-agents.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/advanced/performance.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/advanced/testing.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/api/flock-core.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/api/flockagent.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/api/types.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/api/utilities.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/architecture/components.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/architecture/design-decisions.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/architecture/overview.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/drawio/architecture.drawio +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/cli_outputs/out.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/components_chart.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/examples/01_01.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/examples/01_02.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/examples/01_03.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/examples/01_04.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/examples/01_05.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/examples/01_06.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/flock.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/flock_cli.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/flow_chart.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/getting-started/first_agent_00.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/hummingbird.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/icon.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/icon.png~ +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/logo.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/memory_concepts.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/memory_flow.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/assets/images/memory_flow_chart.png +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/changelog.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/cli/index.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/cli/settings-editor.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/contributing/code-style.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/contributing/development.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/contributing/documentation.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/contributing/testing.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/agents.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/declarative.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/error-handling.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/evaluators.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/memory.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/modules/memory.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/modules/metrics.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/modules/output.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/modules.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/routers/agent.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/routers/default.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/routers/llm.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/routers.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/tools/azure-tools.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/tools/overview.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/type-system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/core-concepts/workflows.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/create_doc_boilerplate.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/deployment/monitoring.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/deployment/production-setup.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/deployment/scalability.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/deployment/security.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/development/dev.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/development/replace-dspy/implementation_plan.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/development/topics.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/examples/chain-gang.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/examples/hello-flock.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/examples/pydantic.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/examples/type-system.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/features/agent-chaining.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/features/agent-definition.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/features/lifecycle-hooks.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/features/pydantic.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/features/type-safety.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/getting-started/concepts.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/getting-started/configuration.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/getting-started/installation.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/getting-started/quickstart.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/index.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/integrations/dspy.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/integrations/litellm.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/integrations/rest-api.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/integrations/tavily.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/integrations/temporal.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/release-notes/release_notes.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/stylesheets/extra.css +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/tutorials/blog-generator.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/tutorials/custom-tools.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/tutorials/error-recovery.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/docs/tutorials/multi-agent.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/01_introduction/02_typed_output.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/01_introduction/03_tool_and_code_agent.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/01_introduction/04_descriptions.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/01_introduction/06_simple_hand_off.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/01_introduction/07_all_base_concepts.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/02_concepts/api/api_client.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/02_concepts/api/api_server.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/02_concepts/context/context.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/02_concepts/evaluator/multi_hops_memory.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/02_concepts/evaluator/multi_hops_zep.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/02_concepts/modules/use_modules.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/02_concepts/router/router_example.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/02_concepts/tools/azure_tools_example.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/02_concepts/tools/own_tools.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/03_apps/dynamic_apps/main.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/03_apps/gemini_dev/main.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/03_apps/roguelike/game.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/03_apps/story_gen/cursor.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/03_apps/story_gen/main.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/04_comparison/rag_comparison/rag.ipynb +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/05_documentation/getting-started/first_agent_01.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/05_documentation/getting-started/first_agent_02.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/05_documentation/getting-started/first_agent_03.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/README.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/flock_without_llms.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/long_research_no_handoff.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/painting_by_numbers.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/project_manager.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/repo_analyzer/repo_analyzer.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/repo_analyzer/repo_analyzer_llm.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/save_and_load/load_01.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/save_and_load/load_02.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/save_and_load/load_03.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/save_and_load/load_04.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/save_and_load/save_01.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/save_and_load/save_02.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/save_and_load/save_03.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/02_cook_book/self_improvement_with_memory.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/hier/her_vis.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/hier/hier_mem.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/misc/memory.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/misc/self_learner.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/misc/self_learner2.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/examples/playground/website/app.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/mkdocs.yml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/scripts/code_collector.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/assets/release_notes.md +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/constants.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/create_agent.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/execute_flock.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/load_agent.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/load_examples.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/load_release_notes.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/loaded_flock_cli.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/manage_agents.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/settings.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/cli/view_results.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/config.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/api/__init__.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/api/endpoints.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/api/main.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/api/models.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/api/run_store.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/api/ui/__init__.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/api/ui/routes.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/api/ui/utils.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/context/context.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/context/context_manager.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/context/context_vars.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/execution/local_executor.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/execution/temporal_executor.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/flock_evaluator.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/flock_factory.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/flock_module.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/flock_router.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/interpreter/python_interpreter.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/__init__.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/formatters/enum_builder.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/formatters/theme_builder.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/formatters/themed_formatter.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/formatters/themes.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/logging.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/span_middleware/baggage_span_processor.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/telemetry.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/telemetry_exporter/base_exporter.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/telemetry_exporter/file_exporter.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/telemetry_exporter/sqlite_exporter.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/logging/trace_and_logged.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/mixin/dspy_integration.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/mixin/prompt_parser.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/serialization/__init__.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/serialization/callable_registry.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/serialization/json_encoder.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/serialization/secure_serializer.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/serialization/serialization_utils.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/tools/azure_tools.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/tools/basic_tools.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/tools/dev_tools/github.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/tools/llm_tools.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/tools/markdown_tools.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/util/hydrator.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/core/util/input_resolver.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/evaluators/declarative/declarative_evaluator.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/evaluators/memory/azure_search_evaluator.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/evaluators/memory/memory_evaluator.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/evaluators/natural_language/natural_language_evaluator.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/evaluators/zep/zep_evaluator.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/modules/azure-search/azure_search_module.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/modules/callback/callback_module.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/modules/memory/memory_module.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/modules/memory/memory_parser.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/modules/memory/memory_storage.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/modules/output/output_module.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/modules/performance/metrics_module.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/modules/zep/zep_module.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/platform/docker_tools.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/platform/jaeger_install.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/routers/__init__.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/routers/agent/__init__.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/routers/agent/agent_router.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/routers/agent/handoff_agent.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/routers/default/__init__.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/routers/default/default_router.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/routers/llm/__init__.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/routers/llm/llm_router.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/3024-day.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/3024-night.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/aardvark-blue.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/abernathy.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/adventure.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/adventuretime.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/afterglow.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/alabaster.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/alienblood.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/andromeda.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/apple-classic.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/apple-system-colors.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/arcoiris.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/argonaut copy.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/argonaut.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/arthur.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ateliersulphurpool.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/atom.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/atom_test.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/atomonelight.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/aurora.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ayu copy.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ayu-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ayu-mirage.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ayu.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/banana-blueberry.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/batman.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/belafonte-day.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/belafonte-night.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/birdsofparadise.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/blazer.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/blue-matrix.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/blueberrypie.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/bluedolphin.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/blulocodark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/blulocolight.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/borland.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/breeze.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/bright-lights.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/broadcast.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/brogrammer.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/builtin-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/builtin-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/builtin-pastel-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/builtin-solarized-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/builtin-solarized-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/builtin-tango-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/builtin-tango-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/c64.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/calamity.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/catppuccin-frappe.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/catppuccin-latte.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/catppuccin-macchiato.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/catppuccin-mocha.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/cga.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/chalk.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/chalkboard.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/challengerdeep.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/chester.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ciapre.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/clrs.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/cobalt-neon.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/cobalt2.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/coffee-theme.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/crayonponyfish.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/cutiepro.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/cyberdyne.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/cyberpunk.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/cyberpunkscarletprotocol.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/dark+.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/dark-pastel.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/darkermatrix.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/darkmatrix.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/darkside.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/dayfox.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/deep.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/desert.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/dimidium.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/dimmedmonokai.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/django.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/djangorebornagain.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/djangosmooth.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/doom-peacock.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/doomone.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/dotgov.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/dracula+.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/dracula.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/duckbones.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/duotone-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/earthsong.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/elemental.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/elementary.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/encom.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/espresso-libre.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/espresso.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/everblush.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/fahrenheit.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/fairyfloss.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/farmhouse-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/farmhouse-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/fideloper.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/firefly-traditional.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/firefoxdev.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/firewatch.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/fishtank.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/flat.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/flatland.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/flexoki-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/flexoki-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/floraverse.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/forestblue.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/framer.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/frontenddelight.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/funforrest.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/galaxy.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/galizur.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/github-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/github.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/glacier.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/grape.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/grass.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/grey-green.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/gruber-darker.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/gruvboxdark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/gruvboxdarkhard.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/gruvboxlight.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/guezwhoz.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/hacktober.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/hardcore.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/harper.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/hax0r-blue.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/hax0r-gr33n.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/hax0r-r3d.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/highway.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/hipster-green.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/hivacruz.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/homebrew.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/hopscotch.256.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/hopscotch.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/hurtado.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/hybrid.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ic-green-ppl.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ic-orange-ppl.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/iceberg-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/iceberg-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/idea.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/idletoes.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ir-black.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/iterm2-dark-background.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/iterm2-default.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/iterm2-light-background.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/iterm2-pastel-dark-background.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/iterm2-smoooooth.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/iterm2-solarized-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/iterm2-solarized-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/iterm2-tango-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/iterm2-tango-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/jackie-brown.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/japanesque.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/jellybeans.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/jetbrains-darcula.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/jubi.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/kanagawabones.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/kibble.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/kolorit.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/konsolas.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/kurokula.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/lab-fox.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/laser.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/later-this-evening.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/lavandula.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/liquidcarbon.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/liquidcarbontransparent.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/liquidcarbontransparentinverse.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/lovelace.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/man-page.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/mariana.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/material.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/materialdark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/materialdarker.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/materialdesigncolors.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/materialocean.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/mathias.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/matrix.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/medallion.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/mellifluous.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/midnight-in-mojave.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/mirage.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/misterioso.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/molokai.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/monalisa.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/monokai-remastered.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/monokai-soda.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/monokai-vivid.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/n0tch2k.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/neobones-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/neobones-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/neon.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/neopolitan.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/neutron.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/night-owlish-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/nightfox.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/nightlion-v1.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/nightlion-v2.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/niji.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/nocturnal-winter.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/nord-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/nord.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/novel.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/nvimdark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/nvimlight.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/obsidian.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ocean.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/oceanic-next.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/oceanicmaterial.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ollie.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/onehalfdark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/onehalflight.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/operator-mono-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/overnight-slumber.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/oxocarbon.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/palenighthc.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/pandora.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/paraiso-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/paulmillr.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/pencildark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/pencillight.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/peppermint.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/piatto-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/pnevma.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/popping-and-locking.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/primary.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/pro-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/pro.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/purple-rain.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/purplepeter.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/rapture.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/raycast-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/raycast-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/rebecca.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/red-alert.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/red-planet.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/red-sands.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/relaxed.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/retro.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/rippedcasts.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/rose-pine-dawn.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/rose-pine-moon.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/rose-pine.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/rouge-2.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/royal.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ryuuko.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/sakura.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/scarlet-protocol.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/seafoam-pastel.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/seashells.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/seoulbones-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/seoulbones-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/seti.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/shades-of-purple.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/shaman.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/slate.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/sleepyhollow.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/smyck.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/snazzy.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/softserver.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/solarized-darcula.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/solarized-dark---patched.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/solarized-dark-higher-contrast.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/spacedust.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/spacegray-eighties-dull.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/spacegray-eighties.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/spacegray.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/spiderman.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/spring.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/square.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/sublette.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/subliminal.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/sugarplum.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/sundried.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/symfonic.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/synthwave-everything.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/synthwave.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/synthwavealpha.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tango-adapted.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tango-half-adapted.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/teerb.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/terafox.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/terminal-basic.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/thayer-bright.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/the-hulk.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tinacious-design-(dark).toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tinacious-design-(light).toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tokyonight-day.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tokyonight-storm.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tokyonight.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tomorrow-night-blue.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tomorrow-night-bright.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tomorrow-night-burns.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tomorrow-night-eighties.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tomorrow-night.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/tomorrow.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/toychest.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/treehouse.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/twilight.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ubuntu.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ultradark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/ultraviolent.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/underthesea.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/unikitty.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/urple.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/vaughn.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/vesper.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/vibrantink.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/vimbones.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/violet-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/violet-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/warmneon.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/wez.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/whimsy.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/wildcherry.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/wilmersdorf.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/wombat.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/wryan.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/xcodedark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/xcodedarkhc.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/xcodelight.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/xcodelighthc.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/xcodewwdc.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/zenbones-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/zenbones-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/zenbones.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/zenburn.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/zenburned.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/zenwritten-dark.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/themes/zenwritten-light.toml +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/workflow/__init__.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/workflow/activities.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/workflow/agent_activities.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/workflow/temporal_setup.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/src/flock/workflow/workflow.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/tests/__init__.py +0 -0
- {flock_core-0.3.40 → flock_core-0.4.0b1}/tests/serialization/__init__.py +0 -0
|
@@ -0,0 +1,639 @@
|
|
|
1
|
+
# Enhanced Flock Serialization Implementation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
We've implemented a comprehensive serialization system for the Flock framework that enables fully self-contained YAML exports. The key innovation is the inclusion of type definitions, component references, and dependencies directly in the serialized output, making Flock configurations portable across different environments.
|
|
6
|
+
|
|
7
|
+
## Problem Statement
|
|
8
|
+
|
|
9
|
+
Previously, when serializing a Flock to YAML, the configuration would reference custom types (like `RandomPerson`) without including their definitions. This meant that systems loading the YAML needed to already have these types defined, limiting portability.
|
|
10
|
+
|
|
11
|
+
Example issue:
|
|
12
|
+
```yaml
|
|
13
|
+
# Before: References type but doesn't define it
|
|
14
|
+
output: 'random_user_list: list[RandomPerson]'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Solution Architecture
|
|
18
|
+
|
|
19
|
+
Our solution enhances the serialization process to create self-contained configurations by:
|
|
20
|
+
|
|
21
|
+
1. **Detecting Custom Types**: Analyzing agent input/output signatures to identify custom types
|
|
22
|
+
2. **Extracting Type Definitions**: Capturing full schema definitions of custom types
|
|
23
|
+
3. **Including Component References**: Documenting the modules that provide components
|
|
24
|
+
4. **Specifying Dependencies**: Listing required packages and versions
|
|
25
|
+
|
|
26
|
+
### Key Components
|
|
27
|
+
|
|
28
|
+
1. **Enhanced Serialization**:
|
|
29
|
+
- `Flock.to_dict()`: Now extracts and includes types and components
|
|
30
|
+
- Type extraction from signatures via `_extract_types_from_signature()`
|
|
31
|
+
- Schema generation via Pydantic's `model_json_schema()`
|
|
32
|
+
|
|
33
|
+
2. **Enhanced Deserialization**:
|
|
34
|
+
- `Flock.from_dict()`: First processes types, then components, then agents
|
|
35
|
+
- Dynamic type recreation for missing types
|
|
36
|
+
- Component registration from module paths
|
|
37
|
+
|
|
38
|
+
3. **Type Handling**:
|
|
39
|
+
- Support for Pydantic models and dataclasses
|
|
40
|
+
- Nested type structures via schema references
|
|
41
|
+
- Generic types like List and Dict
|
|
42
|
+
|
|
43
|
+
4. **File Path Support**:
|
|
44
|
+
- Storing both module paths and file system paths for components
|
|
45
|
+
- Fallback mechanism that tries module import first, then file path loading
|
|
46
|
+
- Flexibility for CLI and non-package environments
|
|
47
|
+
|
|
48
|
+
5. **Improved Tool Serialization** (NEW):
|
|
49
|
+
- Tools are now serialized as simple function names in agent's tools list
|
|
50
|
+
- Tools are included in the components section with type "flock_callable"
|
|
51
|
+
- Better integrated with the component-based architecture
|
|
52
|
+
|
|
53
|
+
## Implementation Details
|
|
54
|
+
|
|
55
|
+
### Type Detection and Extraction
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
def _extract_types_from_signature(self, signature: str) -> list[str]:
|
|
59
|
+
"""Extract type names from an input/output signature string."""
|
|
60
|
+
# Basic type extraction from strings like "result: TypeName" or "list[TypeName]"
|
|
61
|
+
custom_types = []
|
|
62
|
+
|
|
63
|
+
# Look for type annotations (everything after ":")
|
|
64
|
+
parts = signature.split(":")
|
|
65
|
+
if len(parts) > 1:
|
|
66
|
+
type_part = parts[1].strip()
|
|
67
|
+
|
|
68
|
+
# Extract from list[Type]
|
|
69
|
+
if "list[" in type_part:
|
|
70
|
+
inner_type = type_part.split("list[")[1].split("]")[0].strip()
|
|
71
|
+
if inner_type and not inner_type.lower() in ["str", "int", "float", "bool", "dict", "list"]:
|
|
72
|
+
custom_types.append(inner_type)
|
|
73
|
+
|
|
74
|
+
# Extract direct type references
|
|
75
|
+
elif type_part and not type_part.lower() in ["str", "int", "float", "bool", "dict", "list"]:
|
|
76
|
+
custom_types.append(type_part.split()[0])
|
|
77
|
+
|
|
78
|
+
return custom_types
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Type Definition Extraction
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
def _extract_type_definition(self, type_name: str, type_obj: type) -> dict[str, Any]:
|
|
85
|
+
"""Extract a definition for a custom type."""
|
|
86
|
+
type_def = {
|
|
87
|
+
"module_path": type_obj.__module__,
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
# Handle Pydantic models
|
|
91
|
+
if hasattr(type_obj, "model_json_schema") and callable(getattr(type_obj, "model_json_schema")):
|
|
92
|
+
type_def["type"] = "pydantic.BaseModel"
|
|
93
|
+
try:
|
|
94
|
+
schema = type_obj.model_json_schema()
|
|
95
|
+
# Clean up schema to remove unnecessary fields
|
|
96
|
+
if "title" in schema and schema["title"] == type_name:
|
|
97
|
+
del schema["title"]
|
|
98
|
+
type_def["schema"] = schema
|
|
99
|
+
except Exception as e:
|
|
100
|
+
logger.warning(f"Could not extract schema for Pydantic model {type_name}: {e}")
|
|
101
|
+
|
|
102
|
+
# Handle dataclasses
|
|
103
|
+
elif is_dataclass(type_obj):
|
|
104
|
+
type_def["type"] = "dataclass"
|
|
105
|
+
fields = {}
|
|
106
|
+
for field_name, field in type_obj.__dataclass_fields__.items():
|
|
107
|
+
fields[field_name] = {
|
|
108
|
+
"type": str(field.type),
|
|
109
|
+
"default": str(field.default) if field.default is not inspect.Parameter.empty else None
|
|
110
|
+
}
|
|
111
|
+
type_def["fields"] = fields
|
|
112
|
+
|
|
113
|
+
# Handle other types
|
|
114
|
+
else:
|
|
115
|
+
type_def["type"] = "custom"
|
|
116
|
+
|
|
117
|
+
# Extract import statement
|
|
118
|
+
type_def["imports"] = [f"from {type_obj.__module__} import {type_name}"]
|
|
119
|
+
|
|
120
|
+
return type_def
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Component Definition with File Paths
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
def _get_component_definition(self, component_type: str) -> dict[str, Any]:
|
|
127
|
+
"""Get definition for a component type."""
|
|
128
|
+
from flock.core.flock_registry import get_registry
|
|
129
|
+
import inspect
|
|
130
|
+
import os
|
|
131
|
+
import sys
|
|
132
|
+
|
|
133
|
+
registry = get_registry()
|
|
134
|
+
component_def = {}
|
|
135
|
+
|
|
136
|
+
try:
|
|
137
|
+
# Try to get the component class from registry
|
|
138
|
+
component_class = registry._components.get(component_type)
|
|
139
|
+
if component_class:
|
|
140
|
+
# Get the standard module path
|
|
141
|
+
module_path = component_class.__module__
|
|
142
|
+
|
|
143
|
+
# Get the actual file system path if possible
|
|
144
|
+
file_path = None
|
|
145
|
+
try:
|
|
146
|
+
if hasattr(component_class, "__module__") and component_class.__module__:
|
|
147
|
+
module = sys.modules.get(component_class.__module__)
|
|
148
|
+
if module and hasattr(module, "__file__"):
|
|
149
|
+
file_path = os.path.abspath(module.__file__)
|
|
150
|
+
except Exception:
|
|
151
|
+
# If we can't get the file path, we'll just use the module path
|
|
152
|
+
pass
|
|
153
|
+
|
|
154
|
+
component_def = {
|
|
155
|
+
"type": "flock_component",
|
|
156
|
+
"module_path": module_path,
|
|
157
|
+
"file_path": file_path, # Include actual file system path
|
|
158
|
+
"description": getattr(component_class, "__doc__", "").strip() or f"{component_type} component"
|
|
159
|
+
}
|
|
160
|
+
except Exception as e:
|
|
161
|
+
logger.warning(f"Could not extract definition for component {component_type}: {e}")
|
|
162
|
+
# Provide minimal information if we can't extract details
|
|
163
|
+
component_def = {
|
|
164
|
+
"type": "flock_component",
|
|
165
|
+
"module_path": "unknown",
|
|
166
|
+
"file_path": None,
|
|
167
|
+
"description": f"{component_type} component (definition incomplete)"
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return component_def
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Tool Callable Definition (NEW)
|
|
174
|
+
|
|
175
|
+
```python
|
|
176
|
+
def _get_callable_definition(self, callable_ref: str, func_name: str) -> dict[str, Any]:
|
|
177
|
+
"""Get definition for a callable reference.
|
|
178
|
+
|
|
179
|
+
Args:
|
|
180
|
+
callable_ref: The fully qualified path to the callable
|
|
181
|
+
func_name: The simple function name (for display purposes)
|
|
182
|
+
"""
|
|
183
|
+
import os
|
|
184
|
+
import sys
|
|
185
|
+
import inspect
|
|
186
|
+
from flock.core.flock_registry import get_registry
|
|
187
|
+
|
|
188
|
+
registry = get_registry()
|
|
189
|
+
callable_def = {}
|
|
190
|
+
|
|
191
|
+
try:
|
|
192
|
+
# Try to get the callable from registry
|
|
193
|
+
func = registry.get_callable(callable_ref)
|
|
194
|
+
if func:
|
|
195
|
+
# Get the standard module path
|
|
196
|
+
module_path = func.__module__
|
|
197
|
+
|
|
198
|
+
# Get the actual file system path if possible
|
|
199
|
+
file_path = None
|
|
200
|
+
try:
|
|
201
|
+
if func.__module__ and func.__module__ != "builtins":
|
|
202
|
+
module = sys.modules.get(func.__module__)
|
|
203
|
+
if module and hasattr(module, "__file__"):
|
|
204
|
+
file_path = os.path.abspath(module.__file__)
|
|
205
|
+
except Exception:
|
|
206
|
+
# If we can't get the file path, just use the module path
|
|
207
|
+
pass
|
|
208
|
+
|
|
209
|
+
# Get the docstring for description
|
|
210
|
+
docstring = inspect.getdoc(func) or f"Callable function {func_name}"
|
|
211
|
+
|
|
212
|
+
callable_def = {
|
|
213
|
+
"type": "flock_callable",
|
|
214
|
+
"module_path": module_path,
|
|
215
|
+
"file_path": file_path,
|
|
216
|
+
"description": docstring.strip(),
|
|
217
|
+
}
|
|
218
|
+
except Exception as e:
|
|
219
|
+
logger.warning(
|
|
220
|
+
f"Could not extract definition for callable {callable_ref}: {e}"
|
|
221
|
+
)
|
|
222
|
+
# Provide minimal information
|
|
223
|
+
callable_def = {
|
|
224
|
+
"type": "flock_callable",
|
|
225
|
+
"module_path": callable_ref.split(".")[0] if "." in callable_ref else "unknown",
|
|
226
|
+
"file_path": None,
|
|
227
|
+
"description": f"Callable {func_name} (definition incomplete)",
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return callable_def
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Tool Serialization for Agents (NEW)
|
|
234
|
+
|
|
235
|
+
```python
|
|
236
|
+
# --- Serialize Tools (Callables) ---
|
|
237
|
+
if self.tools:
|
|
238
|
+
logger.debug(f"Serializing {len(self.tools)} tools for agent '{self.name}'")
|
|
239
|
+
serialized_tools = []
|
|
240
|
+
for tool in self.tools:
|
|
241
|
+
if callable(tool) and not isinstance(tool, type):
|
|
242
|
+
path_str = FlockRegistry.get_callable_path_string(tool)
|
|
243
|
+
if path_str:
|
|
244
|
+
# Get just the function name from the path string
|
|
245
|
+
# If it's a namespaced path like module.submodule.function_name
|
|
246
|
+
# Just use the function_name part
|
|
247
|
+
func_name = path_str.split(".")[-1]
|
|
248
|
+
serialized_tools.append(func_name)
|
|
249
|
+
logger.debug(f"Added tool '{func_name}' to agent '{self.name}'")
|
|
250
|
+
else:
|
|
251
|
+
logger.warning(
|
|
252
|
+
f"Could not get path string for tool {tool} in agent '{self.name}'. Skipping."
|
|
253
|
+
)
|
|
254
|
+
else:
|
|
255
|
+
logger.warning(f"Non-callable item found in tools list for agent '{self.name}': {tool}. Skipping.")
|
|
256
|
+
if serialized_tools:
|
|
257
|
+
data["tools"] = serialized_tools
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Extracting Tools for Component Registration (NEW)
|
|
261
|
+
|
|
262
|
+
```python
|
|
263
|
+
# Extract tool (callable) information from agent data
|
|
264
|
+
if "tools" in agent_data and agent_data["tools"]:
|
|
265
|
+
logger.debug(f"Extracting tool information from agent '{name}': {agent_data['tools']}")
|
|
266
|
+
# Get references to the actual tool objects
|
|
267
|
+
tool_objs = agent_instance.tools if agent_instance.tools else []
|
|
268
|
+
for i, tool_name in enumerate(agent_data["tools"]):
|
|
269
|
+
if i < len(tool_objs):
|
|
270
|
+
tool = tool_objs[i]
|
|
271
|
+
if callable(tool) and not isinstance(tool, type):
|
|
272
|
+
# Get the fully qualified name for registry lookup
|
|
273
|
+
path_str = get_registry().get_callable_path_string(tool)
|
|
274
|
+
if path_str:
|
|
275
|
+
logger.debug(f"Adding tool '{tool_name}' to components")
|
|
276
|
+
# Add definition using just the function name as the key
|
|
277
|
+
components[tool_name] = self._get_callable_definition(path_str, tool_name)
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Component Loading with File Path Fallback
|
|
281
|
+
|
|
282
|
+
```python
|
|
283
|
+
@classmethod
|
|
284
|
+
def _register_component_definitions(cls, component_defs: dict[str, Any]) -> None:
|
|
285
|
+
"""Register component definitions from serialized data."""
|
|
286
|
+
from flock.core.flock_registry import get_registry
|
|
287
|
+
import importlib
|
|
288
|
+
import importlib.util
|
|
289
|
+
import sys
|
|
290
|
+
import os
|
|
291
|
+
|
|
292
|
+
registry = get_registry()
|
|
293
|
+
|
|
294
|
+
for component_name, component_def in component_defs.items():
|
|
295
|
+
logger.debug(f"Registering component: {component_name}")
|
|
296
|
+
component_type = component_def.get("type", "flock_component")
|
|
297
|
+
|
|
298
|
+
try:
|
|
299
|
+
# Handle callables differently than components
|
|
300
|
+
if component_type == "flock_callable":
|
|
301
|
+
# For callables, component_name is just the function name
|
|
302
|
+
func_name = component_name
|
|
303
|
+
module_path = component_def.get("module_path")
|
|
304
|
+
file_path = component_def.get("file_path")
|
|
305
|
+
logger.debug(f"Processing callable '{func_name}' from module '{module_path}', file: {file_path}")
|
|
306
|
+
|
|
307
|
+
# Try direct import first
|
|
308
|
+
if module_path:
|
|
309
|
+
try:
|
|
310
|
+
logger.debug(f"Attempting to import module: {module_path}")
|
|
311
|
+
module = importlib.import_module(module_path)
|
|
312
|
+
if hasattr(module, func_name):
|
|
313
|
+
callable_obj = getattr(module, func_name)
|
|
314
|
+
# Register with just the name for easier lookup
|
|
315
|
+
registry.register_callable(callable_obj, func_name)
|
|
316
|
+
logger.info(f"Registered callable with name: {func_name}")
|
|
317
|
+
# Also register with fully qualified path for compatibility
|
|
318
|
+
if module_path != "__main__":
|
|
319
|
+
full_path = f"{module_path}.{func_name}"
|
|
320
|
+
registry.register_callable(callable_obj, full_path)
|
|
321
|
+
logger.info(f"Also registered callable with full path: {full_path}")
|
|
322
|
+
logger.info(f"Successfully registered callable {func_name} from module {module_path}")
|
|
323
|
+
continue
|
|
324
|
+
else:
|
|
325
|
+
logger.warning(f"Function '{func_name}' not found in module {module_path}")
|
|
326
|
+
except ImportError:
|
|
327
|
+
logger.debug(f"Could not import module {module_path}, trying file path")
|
|
328
|
+
|
|
329
|
+
# Try file path if module import fails
|
|
330
|
+
if file_path and os.path.exists(file_path):
|
|
331
|
+
try:
|
|
332
|
+
logger.debug(f"Attempting to load file: {file_path}")
|
|
333
|
+
# Create a module name from file path
|
|
334
|
+
mod_name = f"{func_name}_module"
|
|
335
|
+
spec = importlib.util.spec_from_file_location(mod_name, file_path)
|
|
336
|
+
if spec and spec.loader:
|
|
337
|
+
module = importlib.util.module_from_spec(spec)
|
|
338
|
+
sys.modules[spec.name] = module
|
|
339
|
+
spec.loader.exec_module(module)
|
|
340
|
+
logger.debug(f"Successfully loaded module from file, searching for function '{func_name}'")
|
|
341
|
+
|
|
342
|
+
# Look for the function in the loaded module
|
|
343
|
+
if hasattr(module, func_name):
|
|
344
|
+
callable_obj = getattr(module, func_name)
|
|
345
|
+
registry.register_callable(callable_obj, func_name)
|
|
346
|
+
logger.info(f"Successfully registered callable {func_name} from file {file_path}")
|
|
347
|
+
else:
|
|
348
|
+
logger.warning(f"Function {func_name} not found in file {file_path}")
|
|
349
|
+
else:
|
|
350
|
+
logger.warning(f"Could not create import spec for {file_path}")
|
|
351
|
+
except Exception as e:
|
|
352
|
+
logger.error(f"Error loading callable {func_name} from file {file_path}: {e}")
|
|
353
|
+
|
|
354
|
+
# Handle regular components (existing code)
|
|
355
|
+
else:
|
|
356
|
+
# ... existing component loading code ...
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### Dynamic Type Recreation
|
|
360
|
+
|
|
361
|
+
```python
|
|
362
|
+
@classmethod
|
|
363
|
+
def _create_pydantic_model(cls, type_name: str, type_def: dict[str, Any]) -> None:
|
|
364
|
+
"""Dynamically create a Pydantic model from a schema definition."""
|
|
365
|
+
from pydantic import create_model
|
|
366
|
+
|
|
367
|
+
schema = type_def.get("schema", {})
|
|
368
|
+
|
|
369
|
+
try:
|
|
370
|
+
# Extract field definitions from schema
|
|
371
|
+
fields = {}
|
|
372
|
+
properties = schema.get("properties", {})
|
|
373
|
+
required = schema.get("required", [])
|
|
374
|
+
|
|
375
|
+
for field_name, field_schema in properties.items():
|
|
376
|
+
# Determine the field type based on schema
|
|
377
|
+
field_type = cls._get_type_from_schema(field_schema)
|
|
378
|
+
|
|
379
|
+
# Determine if field is required
|
|
380
|
+
default = ... if field_name in required else None
|
|
381
|
+
|
|
382
|
+
# Add to fields dict
|
|
383
|
+
fields[field_name] = (field_type, default)
|
|
384
|
+
|
|
385
|
+
# Create the model
|
|
386
|
+
DynamicModel = create_model(type_name, **fields)
|
|
387
|
+
|
|
388
|
+
# Register it
|
|
389
|
+
registry.register_type(DynamicModel, type_name)
|
|
390
|
+
logger.info(f"Created and registered Pydantic model: {type_name}")
|
|
391
|
+
|
|
392
|
+
except Exception as e:
|
|
393
|
+
logger.error(f"Failed to create Pydantic model {type_name}: {e}")
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
## Nested Type Support
|
|
397
|
+
|
|
398
|
+
One of the advanced features is support for complex nested type structures:
|
|
399
|
+
|
|
400
|
+
```python
|
|
401
|
+
# Define nested custom types
|
|
402
|
+
@flock_type
|
|
403
|
+
class Address(BaseModel):
|
|
404
|
+
street: str
|
|
405
|
+
city: str
|
|
406
|
+
zip_code: str
|
|
407
|
+
|
|
408
|
+
@flock_type
|
|
409
|
+
class Contact(BaseModel):
|
|
410
|
+
email: str
|
|
411
|
+
phone: str
|
|
412
|
+
address: Address # Nested model
|
|
413
|
+
|
|
414
|
+
@flock_type
|
|
415
|
+
class Company(BaseModel):
|
|
416
|
+
name: str
|
|
417
|
+
headquarters: Address # Nested model
|
|
418
|
+
contacts: List[Contact] # List of nested models
|
|
419
|
+
departments: Dict[str, List[str]] # Dictionary with nested list
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
The serialization correctly handles these nested structures by leveraging Pydantic's JSON schema generation, which includes:
|
|
423
|
+
|
|
424
|
+
1. Definitions for all nested types in the `$defs` section
|
|
425
|
+
2. References to these definitions using `$ref`
|
|
426
|
+
3. Proper representation of complex structures like lists and dictionaries
|
|
427
|
+
|
|
428
|
+
## Testing
|
|
429
|
+
|
|
430
|
+
We've implemented comprehensive tests:
|
|
431
|
+
|
|
432
|
+
1. **Basic Type Tests**: Verify serialization of simple custom types
|
|
433
|
+
2. **Multiple Type Tests**: Verify handling of multiple custom types in a Flock
|
|
434
|
+
3. **Nested Structure Tests**: Verify correct handling of complex nested type structures
|
|
435
|
+
|
|
436
|
+
All tests passed, confirming the robustness of our implementation.
|
|
437
|
+
|
|
438
|
+
## Example Output
|
|
439
|
+
|
|
440
|
+
The enhanced serialization produces YAMLs with this structure:
|
|
441
|
+
|
|
442
|
+
```yaml
|
|
443
|
+
# Main Flock configuration
|
|
444
|
+
name: my_flock
|
|
445
|
+
model: openai/gpt-4o
|
|
446
|
+
enable_temporal: false
|
|
447
|
+
|
|
448
|
+
# Types section with full definitions
|
|
449
|
+
types:
|
|
450
|
+
RandomPerson:
|
|
451
|
+
module_path: examples.01_introduction.05_typed_output2
|
|
452
|
+
type: pydantic.BaseModel
|
|
453
|
+
schema:
|
|
454
|
+
properties:
|
|
455
|
+
name:
|
|
456
|
+
type: string
|
|
457
|
+
age:
|
|
458
|
+
type: integer
|
|
459
|
+
# ... other properties
|
|
460
|
+
required: [name, age, ...]
|
|
461
|
+
imports:
|
|
462
|
+
- from examples.01_introduction.05_typed_output2 import RandomPerson
|
|
463
|
+
|
|
464
|
+
# Component definitions with module paths AND file paths
|
|
465
|
+
components:
|
|
466
|
+
DeclarativeEvaluator:
|
|
467
|
+
type: flock_component
|
|
468
|
+
module_path: flock.evaluators.declarative.declarative_evaluator
|
|
469
|
+
file_path: /path/to/flock/evaluators/declarative/declarative_evaluator.py
|
|
470
|
+
description: Standard evaluator for declarative agent definitions
|
|
471
|
+
|
|
472
|
+
# Tool definition with flock_callable type (NEW)
|
|
473
|
+
get_mobile_number:
|
|
474
|
+
type: flock_callable
|
|
475
|
+
module_path: __main__
|
|
476
|
+
file_path: /path/to/file.py
|
|
477
|
+
description: A tool that returns a mobile number to a name.
|
|
478
|
+
|
|
479
|
+
# Dependencies section
|
|
480
|
+
dependencies:
|
|
481
|
+
- pydantic>=2.0.0
|
|
482
|
+
- flock-framework>=1.0.0
|
|
483
|
+
|
|
484
|
+
# Agents section
|
|
485
|
+
agents:
|
|
486
|
+
greeter:
|
|
487
|
+
name: greeter
|
|
488
|
+
# ... agent definition ...
|
|
489
|
+
# Simple function names in tools list (NEW)
|
|
490
|
+
tools:
|
|
491
|
+
- get_mobile_number
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
## Advantages of This Approach
|
|
495
|
+
|
|
496
|
+
1. **Portability**: Flock YAMLs are now self-contained and can be shared across systems
|
|
497
|
+
2. **Self-Documentation**: Type definitions serve as documentation
|
|
498
|
+
3. **Dynamic Recreation**: Types can be recreated dynamically even if not available in the target system
|
|
499
|
+
4. **Complex Type Support**: Works with nested structures, generics, and complex types
|
|
500
|
+
5. **Extensibility**: Architecture allows for additional type support in the future
|
|
501
|
+
6. **File Path Support**: Enables CLI use and non-package environments
|
|
502
|
+
7. **Tool Integration**: Tools are now properly integrated in the component system (NEW)
|
|
503
|
+
|
|
504
|
+
## Limitations and Future Work
|
|
505
|
+
|
|
506
|
+
1. **Custom Methods**: Dynamic recreation doesn't preserve custom methods on types
|
|
507
|
+
2. **Circular References**: May need additional handling for types that reference each other
|
|
508
|
+
3. **Advanced Type Annotations**: Some very complex type annotations might need special handling
|
|
509
|
+
4. **Performance**: For very large type hierarchies, serialization/deserialization could be optimized
|
|
510
|
+
|
|
511
|
+
## File Path Support
|
|
512
|
+
|
|
513
|
+
To improve portability and usability in CLI and non-package environments, the implementation now supports loading components from file system paths, in addition to module paths:
|
|
514
|
+
|
|
515
|
+
### Core Functionality
|
|
516
|
+
|
|
517
|
+
1. **Dual Path Storage**:
|
|
518
|
+
- Components are registered with both module paths and file system paths
|
|
519
|
+
- The serialization system records both paths when available
|
|
520
|
+
- During deserialization, a fallback mechanism tries file paths when module imports fail
|
|
521
|
+
|
|
522
|
+
2. **Registry Enhancement**:
|
|
523
|
+
- The `FlockRegistry` now maintains a `_component_file_paths` dictionary mapping component names to file paths
|
|
524
|
+
- This mapping is preserved during serialization and deserialization operations
|
|
525
|
+
|
|
526
|
+
3. **CLI Integration**:
|
|
527
|
+
- Registry management displays file paths for components
|
|
528
|
+
- Auto-registration scanner captures file paths during component discovery
|
|
529
|
+
- YAML editor preserves file paths during editing
|
|
530
|
+
- Load mechanism includes fallback for loading from file paths
|
|
531
|
+
|
|
532
|
+
4. **Callable/Tool Improvements** (NEW):
|
|
533
|
+
- Tools are now registered as components with type "flock_callable"
|
|
534
|
+
- Tools are listed by their simple function name in agent tool lists
|
|
535
|
+
- The same file path support applies to callables as to other components
|
|
536
|
+
|
|
537
|
+
### Implementation Details
|
|
538
|
+
|
|
539
|
+
```python
|
|
540
|
+
# Component definition now includes file path
|
|
541
|
+
def _get_component_definition(self, component_class: Type) -> Dict[str, Any]:
|
|
542
|
+
"""Get the definition of a component class."""
|
|
543
|
+
module_path = f"{component_class.__module__}.{component_class.__name__}"
|
|
544
|
+
|
|
545
|
+
# Try to get the file path
|
|
546
|
+
file_path = None
|
|
547
|
+
try:
|
|
548
|
+
file_path = inspect.getfile(component_class)
|
|
549
|
+
except (TypeError, ValueError):
|
|
550
|
+
pass
|
|
551
|
+
|
|
552
|
+
return {
|
|
553
|
+
"module_path": module_path,
|
|
554
|
+
"file_path": file_path
|
|
555
|
+
}
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
```python
|
|
559
|
+
# Loading with file path fallback
|
|
560
|
+
def _register_component_definitions(self, component_defs: List[Dict[str, Any]]) -> None:
|
|
561
|
+
"""Register component definitions from a serialized Flock."""
|
|
562
|
+
for component_def in component_defs:
|
|
563
|
+
module_path = component_def.get("module_path")
|
|
564
|
+
file_path = component_def.get("file_path")
|
|
565
|
+
|
|
566
|
+
# Try loading from module path first
|
|
567
|
+
try:
|
|
568
|
+
module_name, class_name = module_path.rsplit(".", 1)
|
|
569
|
+
module = importlib.import_module(module_name)
|
|
570
|
+
component_class = getattr(module, class_name)
|
|
571
|
+
self._registry.register_component(component_class)
|
|
572
|
+
logger.info(f"Registered component {module_path} from module path")
|
|
573
|
+
|
|
574
|
+
except (ImportError, AttributeError) as e:
|
|
575
|
+
# If module path fails, try file path
|
|
576
|
+
if file_path and os.path.exists(file_path):
|
|
577
|
+
try:
|
|
578
|
+
spec = importlib.util.spec_from_file_location(
|
|
579
|
+
f"flock_dynamic_{hash(file_path)}", file_path
|
|
580
|
+
)
|
|
581
|
+
if spec and spec.loader:
|
|
582
|
+
module = importlib.util.module_from_spec(spec)
|
|
583
|
+
spec.loader.exec_module(module)
|
|
584
|
+
if hasattr(module, class_name):
|
|
585
|
+
component_class = getattr(module, class_name)
|
|
586
|
+
self._registry.register_component(component_class)
|
|
587
|
+
logger.info(f"Registered component {module_path} from file path {file_path}")
|
|
588
|
+
continue
|
|
589
|
+
except Exception as file_err:
|
|
590
|
+
logger.warning(f"Failed to load component from file: {file_err}")
|
|
591
|
+
|
|
592
|
+
# If we got here, we couldn't load the component
|
|
593
|
+
logger.warning(f"Could not register component {module_path}: {e}")
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
### Utility Functions
|
|
597
|
+
|
|
598
|
+
A new module `file_path_utils.py` provides utilities for working with file paths:
|
|
599
|
+
|
|
600
|
+
```python
|
|
601
|
+
def load_class_from_file(file_path: str, class_name: str) -> Optional[Type]:
|
|
602
|
+
"""Load a class from a file path."""
|
|
603
|
+
try:
|
|
604
|
+
module_name = f"flock_dynamic_import_{hash(file_path)}"
|
|
605
|
+
spec = importlib.util.spec_from_file_location(module_name, file_path)
|
|
606
|
+
if not spec or not spec.loader:
|
|
607
|
+
return None
|
|
608
|
+
module = importlib.util.module_from_spec(spec)
|
|
609
|
+
sys.modules[module_name] = module
|
|
610
|
+
spec.loader.exec_module(module)
|
|
611
|
+
if not hasattr(module, class_name):
|
|
612
|
+
return None
|
|
613
|
+
return getattr(module, class_name)
|
|
614
|
+
except Exception:
|
|
615
|
+
return None
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
### Benefits
|
|
619
|
+
|
|
620
|
+
1. **CLI & Direct Execution**: Components can be loaded directly from file paths, enabling CLI usage without package installation
|
|
621
|
+
2. **Development Flexibility**: Easier development workflow using local files and paths
|
|
622
|
+
3. **Improved Portability**: Flock configurations can be shared with both module paths and file paths, improving compatibility across environments
|
|
623
|
+
4. **Graceful Fallbacks**: When module imports fail, the system attempts to load from file paths
|
|
624
|
+
5. **Consistent Treatment of Tools**: Tools/callables now follow the same component-based pattern (NEW)
|
|
625
|
+
|
|
626
|
+
### Example Use Case
|
|
627
|
+
|
|
628
|
+
A user develops a Flock application on their local machine:
|
|
629
|
+
|
|
630
|
+
1. Components are defined in local Python files
|
|
631
|
+
2. The Flock is serialized to YAML including file paths
|
|
632
|
+
3. The YAML is shared with another user
|
|
633
|
+
4. The second user can load the Flock directly from file paths without needing to install packages
|
|
634
|
+
|
|
635
|
+
This enhancement significantly improves the portability and usability of Flock configurations in various environments, particularly for CLI usage and non-package deployments.
|
|
636
|
+
|
|
637
|
+
## Conclusion
|
|
638
|
+
|
|
639
|
+
The enhanced serialization system significantly improves the portability and usability of Flock configurations by making them self-contained. The addition of file path support further enhances flexibility, allowing for CLI usage and operation in non-package environments. The improved tool serialization integrates callable functions more seamlessly into the component architecture. These changes enable easier sharing of agent systems across environments and simplify deployment.
|