flock-core 0.5.0b52__tar.gz → 0.5.0b54__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.5.0b54/.envtemplate +68 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/.github/workflows/quality.yml +6 -6
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/.gitignore +1 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/AGENTS.md +522 -1
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/PKG-INFO +187 -18
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/README.md +185 -17
- flock_core-0.5.0b54/docs/AUTO_TRACING.md +529 -0
- flock_core-0.5.0b54/docs/IMPLEMENTATION_SUMMARY.md +284 -0
- flock_core-0.5.0b54/docs/TRACE_MODULE.md +379 -0
- flock_core-0.5.0b54/docs/TRACING_PRODUCTION_READINESS.md +986 -0
- flock_core-0.5.0b54/docs/UNIFIED_TRACING.md +373 -0
- flock_core-0.5.0b54/docs/UNIFIED_TRACING_DELIVERY.md +589 -0
- flock_core-0.5.0b54/docs/how_to_use_tracing_effectively.md +1402 -0
- flock_core-0.5.0b54/examples/showcase/01_declarative_pizza.py +51 -0
- flock_core-0.5.0b54/examples/showcase/06_researcher.py +62 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/pyproject.toml +2 -1
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/agent.py +6 -2
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/components.py +17 -1
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/dashboard/service.py +293 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/README.md +86 -0
- flock_core-0.5.0b54/src/flock/frontend/src/components/modules/JsonAttributeRenderer.tsx +140 -0
- flock_core-0.5.0b54/src/flock/frontend/src/components/modules/ModuleWindow.tsx +223 -0
- flock_core-0.5.0b54/src/flock/frontend/src/components/modules/TraceModuleJaeger.tsx +1971 -0
- flock_core-0.5.0b54/src/flock/frontend/src/components/modules/TraceModuleJaegerWrapper.tsx +13 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/modules/registerModules.ts +10 -0
- flock_core-0.5.0b54/src/flock/frontend/src/components/settings/MultiSelect.tsx +235 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/settings/SettingsPanel.css +1 -1
- flock_core-0.5.0b54/src/flock/frontend/src/components/settings/TracingSettings.tsx +404 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/types/modules.ts +3 -0
- flock_core-0.5.0b54/src/flock/logging/auto_trace.py +159 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/logging/telemetry.py +17 -0
- flock_core-0.5.0b54/src/flock/logging/telemetry_exporter/duckdb_exporter.py +216 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/logging/telemetry_exporter/file_exporter.py +7 -1
- flock_core-0.5.0b54/src/flock/logging/trace_and_logged.py +304 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/util/helpers.py +3 -3
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/orchestrator.py +130 -1
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_cli_helper.py +1 -1
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_telemetry.py +18 -6
- flock_core-0.5.0b54/tests/test_trace_clearing.py +313 -0
- flock_core-0.5.0b54/tests/test_unified_tracing.py +195 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/uv.lock +35 -1
- flock_core-0.5.0b52/.envtemplate +0 -7
- flock_core-0.5.0b52/examples/showcase/01_declarative_pizza.py +0 -42
- flock_core-0.5.0b52/src/flock/frontend/src/components/modules/ModuleWindow.tsx +0 -155
- flock_core-0.5.0b52/src/flock/logging/trace_and_logged.py +0 -55
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/.devcontainer/devcontainer.json +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/.github/workflows/deploy-whiteduck-pypi.yml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/.pre-commit-config.yaml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/.python-version +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/.vscode/settings.json +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/CONTRIBUTING.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/LICENSE +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/PRE_COMMIT_HOOKS.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/VERSIONING.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/design_and_goals/landscape_analysis.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/design_and_goals/motivation.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/design_and_goals/review.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/design_and_goals/technical_design.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/domain/test-improvement-roadmap.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/img/flock_ui_1.png +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/img/flock_ui_agent_view.png +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/img/flock_ui_blackboard_view.png +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/img/pizza.png +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/patterns/auto-layout-auto-zoom-removal.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/patterns/core-architecture.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/patterns/development-workflow.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/patterns/project-configuration.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/patterns/repository-structure.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/specs/001-test-coverage-improvement/PLAN.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/specs/001-test-coverage-improvement/PRD.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/specs/001-test-coverage-improvement/SDD.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/troubleshooting/codex_bug_analysis.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/docs/troubleshooting/event-log-memory-leak-analysis.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/features/README.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/features/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/features/feedback_prevention.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/features/subscription_predicates.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/features/visibility/public_visibility.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/showcase/02_hello_flock.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/showcase/03_blog_review.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/showcase/04_mcp_tools.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/showcase/05_dashboard.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/showcase/05b_dashboard_edge_cases.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/showcase/README.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/examples/showcase/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/requirements.txt +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/scripts/build_dashboard.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/scripts/bump_version.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/scripts/check_version_bump.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/scripts/generate_llm_codebase.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/api/themes.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/artifacts.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/cli.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/dashboard/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/dashboard/collector.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/dashboard/events.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/dashboard/launcher.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/dashboard/websocket.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/engines/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/engines/dspy_engine.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/examples.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/docs/DESIGN_SYSTEM.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/index.html +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/package-lock.json +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/package.json +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/App.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/__tests__/e2e/critical-scenarios.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/__tests__/integration/graph-rendering.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/common/BuildInfo.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/common/EmptyState.module.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/common/EmptyState.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/common/ErrorBoundary.module.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/common/ErrorBoundary.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/common/KeyboardShortcutsDialog.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/common/LoadingSpinner.module.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/common/LoadingSpinner.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/controls/PublishControl.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/controls/PublishControl.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/controls/PublishControl.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/details/DetailWindowContainer.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/details/LiveOutputTab.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/details/LiveOutputTab.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/details/MessageHistoryTab.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/details/NodeDetailWindow.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/details/NodeDetailWindow.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/details/RunStatusTab.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/details/tabs.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/CorrelationIDFilter.module.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/CorrelationIDFilter.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/FilterBar.module.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/FilterBar.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/FilterBar.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/FilterPills.module.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/FilterPills.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/FilterPills.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/TimeRangeFilter.module.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/filters/TimeRangeFilter.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/graph/AgentNode.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/graph/AgentNode.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/graph/GraphCanvas.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/graph/MessageFlowEdge.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/graph/MessageNode.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/graph/MessageNode.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/graph/MiniMap.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/graph/TransformEdge.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/layout/DashboardLayout.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/layout/DashboardLayout.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/layout/Header.module.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/layout/Header.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/modules/EventLogModule.test.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/modules/EventLogModule.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/modules/EventLogModuleWrapper.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/modules/ModuleRegistry.test.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/modules/ModuleRegistry.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/settings/AdvancedSettings.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/settings/AppearanceSettings.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/settings/GraphSettings.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/settings/SettingsPanel.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/components/settings/ThemeSelector.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/hooks/useKeyboardShortcuts.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/hooks/useModulePersistence.test.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/hooks/useModulePersistence.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/hooks/useModules.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/hooks/usePersistence.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/main.tsx +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/services/api.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/services/indexeddb.test.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/services/indexeddb.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/services/layout.test.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/services/layout.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/services/themeApplicator.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/services/themeService.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/services/websocket.test.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/services/websocket.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/store/filterStore.test.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/store/filterStore.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/store/graphStore.test.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/store/graphStore.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/store/moduleStore.test.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/store/moduleStore.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/store/settingsStore.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/store/streamStore.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/store/uiStore.test.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/store/uiStore.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/store/wsStore.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/styles/index.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/styles/scrollbar.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/styles/variables.css +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/test/setup.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/types/filters.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/types/graph.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/types/theme.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/utils/mockData.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/utils/performance.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/utils/transforms.test.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/utils/transforms.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/src/vite-env.d.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/tsconfig.json +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/tsconfig.node.json +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/vite.config.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/frontend/vitest.config.ts +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/helper/cli_helper.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/logging/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/logging/formatters/enum_builder.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/logging/formatters/theme_builder.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/logging/formatters/themed_formatter.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/logging/formatters/themes.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/logging/logging.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/logging/span_middleware/baggage_span_processor.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/logging/telemetry_exporter/base_exporter.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/logging/telemetry_exporter/sqlite_exporter.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/client.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/config.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/manager.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/servers/sse/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/servers/sse/flock_sse_server.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/servers/stdio/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/servers/stdio/flock_stdio_server.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/servers/streamable_http/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/servers/streamable_http/flock_streamable_http_server.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/servers/websockets/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/servers/websockets/flock_websocket_server.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/tool.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/types/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/types/callbacks.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/types/factories.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/types/handlers.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/types/types.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/mcp/util/__init__.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/registry.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/runtime.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/service.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/store.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/subscription.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/3024-day.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/3024-night.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/aardvark-blue.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/abernathy.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/adventure.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/adventuretime.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/afterglow.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/alabaster.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/alienblood.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/andromeda.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/apple-classic.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/apple-system-colors.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/arcoiris.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/argonaut copy.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/argonaut.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/arthur.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ateliersulphurpool.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/atom.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/atom_test.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/atomonelight.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/aurora.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ayu copy.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ayu-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ayu-mirage.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ayu.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/banana-blueberry.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/batman.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/belafonte-day.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/belafonte-night.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/birdsofparadise.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/blazer.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/blue-matrix.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/blueberrypie.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/bluedolphin.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/blulocodark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/blulocolight.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/borland.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/breeze.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/bright-lights.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/broadcast.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/brogrammer.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/builtin-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/builtin-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/builtin-pastel-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/builtin-solarized-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/builtin-solarized-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/builtin-tango-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/builtin-tango-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/c64.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/calamity.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/catppuccin-frappe.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/catppuccin-latte.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/catppuccin-macchiato.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/catppuccin-mocha.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/cga.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/chalk.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/chalkboard.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/challengerdeep.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/chester.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ciapre.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/clrs.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/cobalt-neon.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/cobalt2.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/coffee-theme.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/crayonponyfish.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/cutiepro.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/cyberdyne.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/cyberpunk.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/cyberpunkscarletprotocol.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/dark+.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/dark-pastel.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/darkermatrix.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/darkmatrix.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/darkside.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/dayfox.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/deep.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/desert.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/dimidium.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/dimmedmonokai.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/django.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/djangorebornagain.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/djangosmooth.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/doom-peacock.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/doomone.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/dotgov.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/dracula+.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/dracula.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/duckbones.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/duotone-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/earthsong.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/elemental.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/elementary.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/encom.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/espresso-libre.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/espresso.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/everblush.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/fahrenheit.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/fairyfloss.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/farmhouse-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/farmhouse-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/fideloper.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/firefly-traditional.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/firefoxdev.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/firewatch.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/fishtank.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/flat.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/flatland.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/flexoki-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/flexoki-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/floraverse.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/forestblue.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/framer.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/frontenddelight.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/funforrest.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/galaxy.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/galizur.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/github-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/github.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/glacier.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/grape.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/grass.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/grey-green.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/gruber-darker.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/gruvboxdark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/gruvboxdarkhard.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/gruvboxlight.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/guezwhoz.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/hacktober.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/hardcore.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/harper.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/hax0r-blue.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/hax0r-gr33n.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/hax0r-r3d.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/highway.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/hipster-green.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/hivacruz.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/homebrew.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/hopscotch.256.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/hopscotch.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/hurtado.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/hybrid.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ic-green-ppl.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ic-orange-ppl.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/iceberg-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/iceberg-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/idea.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/idletoes.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ir-black.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/iterm2-dark-background.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/iterm2-default.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/iterm2-light-background.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/iterm2-pastel-dark-background.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/iterm2-smoooooth.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/iterm2-solarized-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/iterm2-solarized-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/iterm2-tango-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/iterm2-tango-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/jackie-brown.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/japanesque.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/jellybeans.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/jetbrains-darcula.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/jubi.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/kanagawabones.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/kibble.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/kolorit.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/konsolas.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/kurokula.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/lab-fox.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/laser.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/later-this-evening.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/lavandula.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/liquidcarbon.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/liquidcarbontransparent.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/liquidcarbontransparentinverse.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/lovelace.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/man-page.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/mariana.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/material.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/materialdark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/materialdarker.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/materialdesigncolors.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/materialocean.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/mathias.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/matrix.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/medallion.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/mellifluous.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/midnight-in-mojave.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/mirage.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/misterioso.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/molokai.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/monalisa.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/monokai-remastered.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/monokai-soda.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/monokai-vivid.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/n0tch2k.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/neobones-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/neobones-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/neon.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/neopolitan.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/neutron.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/night-owlish-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/nightfox.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/nightlion-v1.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/nightlion-v2.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/niji.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/nocturnal-winter.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/nord-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/nord.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/novel.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/nvimdark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/nvimlight.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/obsidian.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ocean.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/oceanic-next.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/oceanicmaterial.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ollie.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/onehalfdark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/onehalflight.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/operator-mono-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/overnight-slumber.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/oxocarbon.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/palenighthc.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/pandora.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/paraiso-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/paulmillr.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/pencildark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/pencillight.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/peppermint.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/piatto-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/pnevma.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/popping-and-locking.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/primary.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/pro-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/pro.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/purple-rain.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/purplepeter.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/rapture.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/raycast-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/raycast-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/rebecca.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/red-alert.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/red-planet.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/red-sands.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/relaxed.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/retro.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/rippedcasts.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/rose-pine-dawn.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/rose-pine-moon.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/rose-pine.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/rouge-2.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/royal.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ryuuko.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/sakura.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/scarlet-protocol.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/seafoam-pastel.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/seashells.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/seoulbones-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/seoulbones-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/seti.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/shades-of-purple.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/shaman.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/slate.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/sleepyhollow.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/smyck.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/snazzy.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/softserver.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/solarized-darcula.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/solarized-dark---patched.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/solarized-dark-higher-contrast.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/spacedust.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/spacegray-eighties-dull.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/spacegray-eighties.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/spacegray.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/spiderman.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/spring.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/square.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/sublette.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/subliminal.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/sugarplum.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/sundried.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/symfonic.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/synthwave-everything.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/synthwave.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/synthwavealpha.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tango-adapted.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tango-half-adapted.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/teerb.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/terafox.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/terminal-basic.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/thayer-bright.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/the-hulk.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tinacious-design-(dark).toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tinacious-design-(light).toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tokyonight-day.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tokyonight-storm.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tokyonight.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tomorrow-night-blue.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tomorrow-night-bright.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tomorrow-night-burns.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tomorrow-night-eighties.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tomorrow-night.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/tomorrow.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/toychest.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/treehouse.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/twilight.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ubuntu.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ultradark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/ultraviolent.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/underthesea.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/unikitty.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/urple.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/vaughn.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/vesper.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/vibrantink.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/vimbones.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/violet-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/violet-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/warmneon.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/wez.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/whimsy.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/wildcherry.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/wilmersdorf.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/wombat.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/wryan.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/xcodedark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/xcodedarkhc.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/xcodelight.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/xcodelighthc.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/xcodewwdc.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/zenbones-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/zenbones-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/zenbones.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/zenburn.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/zenburned.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/zenwritten-dark.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/themes/zenwritten-light.toml +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/utilities.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/utility/output_utility_component.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/src/flock/visibility.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/conftest.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/contract/test_agent_payload_selection_contract.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/contract/test_artifact_storage_contract.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/contract/test_type_normalization_contract.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/e2e/README.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/e2e/TESTING_SUMMARY.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/e2e/test_critical_scenarios.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/integration/test_collector_orchestrator.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/integration/test_orchestrator_dashboard.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/integration/test_websocket_protocol.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_agent.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_agent_mcp.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_artifacts.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_cli.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_components.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_dashboard_api.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_dashboard_collector.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_dashboard_launcher.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_dashboard_service.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_dspy_engine.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_dspy_engine_mcp.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_dspy_streaming_events.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_engines.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_logging_config.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_mcp_client.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_mcp_config.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_mcp_coverage_summary.md +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_mcp_imports.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_mcp_manager.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_mcp_tool_handlers.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_orchestrator.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_orchestrator_mcp.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_registry.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_runtime.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_service.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_service_extended.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_store.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_subscription.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_utilities.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_version_endpoint.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_visibility.py +0 -0
- {flock_core-0.5.0b52 → flock_core-0.5.0b54}/tests/test_websocket_manager.py +0 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
AZURE_API_KEY=xxx
|
|
2
|
+
AZURE_API_BASE=https://xxx-foundry.cognitiveservices.azure.com/
|
|
3
|
+
AZURE_API_VERSION="2024-12-01-preview"
|
|
4
|
+
|
|
5
|
+
# ============================================================================
|
|
6
|
+
# OpenTelemetry Tracing Configuration
|
|
7
|
+
# ============================================================================
|
|
8
|
+
|
|
9
|
+
# Enable auto-tracing for all agents and operations
|
|
10
|
+
# Set to "true" to enable OpenTelemetry distributed tracing
|
|
11
|
+
# Traces are stored in DuckDB for fast analytical queries
|
|
12
|
+
FLOCK_AUTO_TRACE=true
|
|
13
|
+
|
|
14
|
+
# Store traces in DuckDB database (recommended for production)
|
|
15
|
+
# Creates .flock/traces.duckdb with full input/output capture
|
|
16
|
+
# Set to "true" to enable DuckDB storage
|
|
17
|
+
FLOCK_TRACE_FILE=true
|
|
18
|
+
|
|
19
|
+
# 🆕 Unified Workflow Tracing (v0.5.0+)
|
|
20
|
+
# Automatically wrap operations in workflow traces for better observability
|
|
21
|
+
# When disabled (default), use explicit `async with flock.traced_run("name")`
|
|
22
|
+
# Set to "true" to enable automatic workflow trace detection
|
|
23
|
+
# FLOCK_AUTO_WORKFLOW_TRACE=true
|
|
24
|
+
|
|
25
|
+
# Filter: Trace only specific services (whitelist)
|
|
26
|
+
# Format: JSON array of service names (case-insensitive)
|
|
27
|
+
# If not set or empty, all services are traced
|
|
28
|
+
# Recommended: Trace core services, avoid streaming token overhead
|
|
29
|
+
# Example: FLOCK_TRACE_SERVICES=["flock", "agent", "dspyengine", "outpututilitycomponent"]
|
|
30
|
+
FLOCK_TRACE_SERVICES=["flock", "agent", "dspyengine", "outpututilitycomponent"]
|
|
31
|
+
|
|
32
|
+
# Filter: Ignore specific operations (blacklist)
|
|
33
|
+
# Format: JSON array of operation names in "Service.method" format
|
|
34
|
+
# Use this to exclude noisy or low-value operations from traces
|
|
35
|
+
# Example: FLOCK_TRACE_IGNORE=["DashboardEventCollector.set_websocket_manager"]
|
|
36
|
+
FLOCK_TRACE_IGNORE=["DashboardEventCollector.set_websocket_manager"]
|
|
37
|
+
|
|
38
|
+
# Trace Time-To-Live (TTL): Auto-delete old traces
|
|
39
|
+
# Deletes traces older than specified days on application startup
|
|
40
|
+
# Keeps database size manageable and removes stale debugging data
|
|
41
|
+
# Set to empty or comment out to keep traces forever
|
|
42
|
+
# Example: FLOCK_TRACE_TTL_DAYS=30
|
|
43
|
+
FLOCK_TRACE_TTL_DAYS=30
|
|
44
|
+
|
|
45
|
+
# ============================================================================
|
|
46
|
+
# Unified Tracing Usage (Code-based approach - RECOMMENDED)
|
|
47
|
+
# ============================================================================
|
|
48
|
+
#
|
|
49
|
+
# Instead of using FLOCK_AUTO_WORKFLOW_TRACE, use explicit traced_run():
|
|
50
|
+
#
|
|
51
|
+
# async with flock.traced_run("workflow_name"):
|
|
52
|
+
# await flock.publish(data)
|
|
53
|
+
# await flock.run_until_idle()
|
|
54
|
+
#
|
|
55
|
+
# Benefits:
|
|
56
|
+
# ✅ Single trace for entire workflow (all operations share trace_id)
|
|
57
|
+
# ✅ Proper parent-child span hierarchy
|
|
58
|
+
# ✅ Custom workflow names for better organization
|
|
59
|
+
# ✅ Add custom attributes: span.set_attribute("key", "value")
|
|
60
|
+
# ✅ Nested workflow support
|
|
61
|
+
#
|
|
62
|
+
# Clearing traces for fresh debug sessions:
|
|
63
|
+
# result = Flock.clear_traces() # Deletes all spans, runs VACUUM
|
|
64
|
+
#
|
|
65
|
+
# See docs/UNIFIED_TRACING.md for complete guide
|
|
66
|
+
# ============================================================================
|
|
67
|
+
|
|
68
|
+
OPENAI_API_KEY=xxx
|
|
@@ -6,7 +6,7 @@ name: Quality Gates
|
|
|
6
6
|
|
|
7
7
|
on:
|
|
8
8
|
push:
|
|
9
|
-
branches:
|
|
9
|
+
branches:
|
|
10
10
|
- main # Replace with your default branch
|
|
11
11
|
- 0.5.0b
|
|
12
12
|
pull_request:
|
|
@@ -76,18 +76,18 @@ jobs:
|
|
|
76
76
|
with:
|
|
77
77
|
node-version: '22'
|
|
78
78
|
cache: 'npm'
|
|
79
|
-
cache-dependency-path: frontend/package-lock.json
|
|
79
|
+
cache-dependency-path: src/flock/frontend/package-lock.json
|
|
80
80
|
|
|
81
81
|
- name: Install dependencies
|
|
82
|
-
working-directory: frontend
|
|
82
|
+
working-directory: src/flock/frontend
|
|
83
83
|
run: npm ci
|
|
84
84
|
|
|
85
85
|
- name: Type check
|
|
86
|
-
working-directory: frontend
|
|
86
|
+
working-directory: src/flock/frontend
|
|
87
87
|
run: npm run type-check
|
|
88
88
|
|
|
89
89
|
- name: Run tests
|
|
90
|
-
working-directory: frontend
|
|
90
|
+
working-directory: src/flock/frontend
|
|
91
91
|
run: npm test
|
|
92
92
|
|
|
93
93
|
# Coverage disabled until vitest.config.ts is properly configured
|
|
@@ -99,7 +99,7 @@ jobs:
|
|
|
99
99
|
# name: frontend-coverage
|
|
100
100
|
|
|
101
101
|
- name: Frontend build check
|
|
102
|
-
working-directory: frontend
|
|
102
|
+
working-directory: src/flock/frontend
|
|
103
103
|
run: npm run build
|
|
104
104
|
|
|
105
105
|
# Security scanning
|
|
@@ -1080,6 +1080,501 @@ def pytest_collection_modifyitems(config, items):
|
|
|
1080
1080
|
|
|
1081
1081
|
---
|
|
1082
1082
|
|
|
1083
|
+
## 🔍 Observability & Debugging with OpenTelemetry + DuckDB
|
|
1084
|
+
|
|
1085
|
+
Flock includes **production-grade distributed tracing** that captures every operation with full input/output data—enabling both human and AI-assisted debugging.
|
|
1086
|
+
|
|
1087
|
+
### Quick Start: Enable Tracing
|
|
1088
|
+
|
|
1089
|
+
```bash
|
|
1090
|
+
# Enable auto-tracing (add to .env or export)
|
|
1091
|
+
FLOCK_AUTO_TRACE=true # Enable tracing for all operations
|
|
1092
|
+
FLOCK_TRACE_FILE=true # Store traces in DuckDB
|
|
1093
|
+
|
|
1094
|
+
# Run your application
|
|
1095
|
+
python examples/showcase/01_declarative_pizza.py
|
|
1096
|
+
|
|
1097
|
+
# Traces stored in: .flock/traces.duckdb
|
|
1098
|
+
```
|
|
1099
|
+
|
|
1100
|
+
### 🆕 Unified Tracing with traced_run()
|
|
1101
|
+
|
|
1102
|
+
**New in v0.5.0**: Wrap entire workflows in a single parent trace for better observability!
|
|
1103
|
+
|
|
1104
|
+
**The Problem**: By default, each top-level operation (`publish()`, `run_until_idle()`) creates separate root traces, making it difficult to see the complete workflow.
|
|
1105
|
+
|
|
1106
|
+
**The Solution**: Use `traced_run()` context manager to group all operations under one parent trace:
|
|
1107
|
+
|
|
1108
|
+
```python
|
|
1109
|
+
# ❌ Before: Separate traces
|
|
1110
|
+
await flock.publish(pizza_idea) # ← Trace 1
|
|
1111
|
+
await flock.run_until_idle() # ← Trace 2
|
|
1112
|
+
|
|
1113
|
+
# ✅ After: Unified trace
|
|
1114
|
+
async with flock.traced_run("pizza_workflow"):
|
|
1115
|
+
await flock.publish(pizza_idea) # ← Part of "pizza_workflow"
|
|
1116
|
+
await flock.run_until_idle() # ← Part of "pizza_workflow"
|
|
1117
|
+
```
|
|
1118
|
+
|
|
1119
|
+
**Result**: Single trace with proper hierarchy:
|
|
1120
|
+
```
|
|
1121
|
+
pizza_workflow (5319ms) ← ROOT
|
|
1122
|
+
├─ Flock.publish (3ms)
|
|
1123
|
+
│ └─ Agent.execute (5218ms)
|
|
1124
|
+
└─ Flock.run_until_idle (5268ms)
|
|
1125
|
+
```
|
|
1126
|
+
|
|
1127
|
+
**Key Features**:
|
|
1128
|
+
- ✅ Single `trace_id` for entire workflow
|
|
1129
|
+
- ✅ Proper parent-child span hierarchy
|
|
1130
|
+
- ✅ Custom workflow names
|
|
1131
|
+
- ✅ Add custom attributes
|
|
1132
|
+
- ✅ Nested workflow support
|
|
1133
|
+
- ✅ 100% backward compatible (opt-in)
|
|
1134
|
+
|
|
1135
|
+
**Advanced Usage**:
|
|
1136
|
+
```python
|
|
1137
|
+
# Custom attributes
|
|
1138
|
+
async with flock.traced_run("ml_pipeline") as span:
|
|
1139
|
+
span.set_attribute("pipeline.version", "2.0")
|
|
1140
|
+
span.set_attribute("dataset.size", 10000)
|
|
1141
|
+
await flock.publish(training_data)
|
|
1142
|
+
await flock.run_until_idle()
|
|
1143
|
+
|
|
1144
|
+
# Nested workflows
|
|
1145
|
+
async with flock.traced_run("outer_workflow"):
|
|
1146
|
+
await flock.publish(data)
|
|
1147
|
+
async with flock.traced_run("inner_task"):
|
|
1148
|
+
await flock.publish(sub_data)
|
|
1149
|
+
await flock.run_until_idle()
|
|
1150
|
+
await flock.run_until_idle()
|
|
1151
|
+
```
|
|
1152
|
+
|
|
1153
|
+
📖 **Full documentation**: [docs/UNIFIED_TRACING.md](docs/UNIFIED_TRACING.md)
|
|
1154
|
+
|
|
1155
|
+
### 🗑️ Clearing Traces
|
|
1156
|
+
|
|
1157
|
+
Clear trace database for fresh debug sessions:
|
|
1158
|
+
|
|
1159
|
+
```python
|
|
1160
|
+
# Clear all traces
|
|
1161
|
+
result = Flock.clear_traces()
|
|
1162
|
+
print(f"Deleted {result['deleted_count']} spans")
|
|
1163
|
+
|
|
1164
|
+
# Custom database path
|
|
1165
|
+
result = Flock.clear_traces(".flock/custom_traces.duckdb")
|
|
1166
|
+
|
|
1167
|
+
# Check success
|
|
1168
|
+
if result['success']:
|
|
1169
|
+
print("✅ Traces cleared!")
|
|
1170
|
+
else:
|
|
1171
|
+
print(f"❌ Error: {result['error']}")
|
|
1172
|
+
```
|
|
1173
|
+
|
|
1174
|
+
**What it does**:
|
|
1175
|
+
- Deletes all spans from DuckDB
|
|
1176
|
+
- Runs VACUUM to reclaim disk space
|
|
1177
|
+
- Preserves table schema
|
|
1178
|
+
- Returns detailed operation result
|
|
1179
|
+
|
|
1180
|
+
**Use cases**:
|
|
1181
|
+
- Resetting debug sessions
|
|
1182
|
+
- Cleaning up test data
|
|
1183
|
+
- Reducing database file size
|
|
1184
|
+
- Starting fresh trace analysis
|
|
1185
|
+
|
|
1186
|
+
### Filtering: Control What Gets Traced
|
|
1187
|
+
|
|
1188
|
+
**Important:** Use filtering to avoid tracing noisy operations (especially streaming tokens) which can cause performance issues.
|
|
1189
|
+
|
|
1190
|
+
```bash
|
|
1191
|
+
# Recommended: Trace only core services
|
|
1192
|
+
FLOCK_TRACE_SERVICES=["flock", "agent", "dspyengine", "outpututilitycomponent"]
|
|
1193
|
+
|
|
1194
|
+
# Exclude specific operations
|
|
1195
|
+
FLOCK_TRACE_IGNORE=["DashboardEventCollector.set_websocket_manager"]
|
|
1196
|
+
```
|
|
1197
|
+
|
|
1198
|
+
**How Filtering Works (Two-Stage Process):**
|
|
1199
|
+
|
|
1200
|
+
1. **Stage 1 (Compile Time):** Metaclasses (`AutoTracedMeta`, `TracedModelMeta`) wrap all public methods
|
|
1201
|
+
- Applied to: `Agent`, `Flock`, `AgentComponent` and all subclasses
|
|
1202
|
+
- Methods NOT wrapped (plain functions, non-component classes) are never traced
|
|
1203
|
+
|
|
1204
|
+
2. **Stage 2 (Runtime):** Filter check before span creation
|
|
1205
|
+
- **Whitelist** (`FLOCK_TRACE_SERVICES`): Only trace specified classes (case-insensitive)
|
|
1206
|
+
- **Blacklist** (`FLOCK_TRACE_IGNORE`): Never trace specific operations (exact match)
|
|
1207
|
+
- Filter check happens **before** span creation → near-zero overhead for filtered ops
|
|
1208
|
+
|
|
1209
|
+
**Example:** With `FLOCK_TRACE_SERVICES=["agent", "flock"]`:
|
|
1210
|
+
- ✅ `Agent.execute` - traced (in whitelist)
|
|
1211
|
+
- ✅ `Flock.publish` - traced (in whitelist)
|
|
1212
|
+
- ❌ `DSPyEngine.evaluate` - NOT traced (not in whitelist)
|
|
1213
|
+
- ❌ `OutputUtilityComponent.on_post_evaluate` - NOT traced (not in whitelist)
|
|
1214
|
+
|
|
1215
|
+
📖 **Full filtering documentation:** [docs/AUTO_TRACING.md](docs/AUTO_TRACING.md)
|
|
1216
|
+
|
|
1217
|
+
### Why DuckDB for Traces?
|
|
1218
|
+
|
|
1219
|
+
**DuckDB is 10-100x faster than SQLite for analytical queries:**
|
|
1220
|
+
- ✅ **Columnar storage** optimized for OLAP workloads
|
|
1221
|
+
- ✅ **Zero configuration** - single embedded file, no external services
|
|
1222
|
+
- ✅ **SQL interface** - AI agents can query traces directly
|
|
1223
|
+
- ✅ **Out-of-the-box** - no Docker, no complex setup
|
|
1224
|
+
- ✅ **Analytical queries** - aggregations, p95/p99, time-series analysis
|
|
1225
|
+
|
|
1226
|
+
**File-based storage (JSONL) vs DuckDB:**
|
|
1227
|
+
```python
|
|
1228
|
+
# ❌ Old way (JSONL)
|
|
1229
|
+
with open('traces.jsonl') as f:
|
|
1230
|
+
for line in f:
|
|
1231
|
+
span = json.loads(line)
|
|
1232
|
+
if span['duration_ms'] > 1000: # Manual filtering
|
|
1233
|
+
slow_spans.append(span)
|
|
1234
|
+
|
|
1235
|
+
# ✅ New way (DuckDB)
|
|
1236
|
+
conn.execute("""
|
|
1237
|
+
SELECT name, AVG(duration_ms), COUNT(*)
|
|
1238
|
+
FROM spans
|
|
1239
|
+
WHERE duration_ms > 1000
|
|
1240
|
+
GROUP BY name
|
|
1241
|
+
""").fetchall()
|
|
1242
|
+
```
|
|
1243
|
+
|
|
1244
|
+
### Trace Viewer UI
|
|
1245
|
+
|
|
1246
|
+
The dashboard includes a **Jaeger-style trace viewer** at `http://localhost:8000`:
|
|
1247
|
+
|
|
1248
|
+
**Features:**
|
|
1249
|
+
- 🔍 **Timeline View**: Waterfall visualization with span hierarchies
|
|
1250
|
+
- 📊 **Statistics View**: Tabular view with durations, status codes
|
|
1251
|
+
- 📥 **Full I/O Capture**: Complete input/output data for every operation
|
|
1252
|
+
- 🎨 **JSON Viewer**: Collapsible, syntax-highlighted with expand/collapse all
|
|
1253
|
+
- 🎨 **Service Colors**: Visual distinction between services
|
|
1254
|
+
- 🔀 **Multi-Trace Support**: Compare multiple traces side-by-side
|
|
1255
|
+
|
|
1256
|
+
### AI-Powered Debugging
|
|
1257
|
+
|
|
1258
|
+
**AI agents (including Claude Code) can analyze traces with SQL:**
|
|
1259
|
+
|
|
1260
|
+
```python
|
|
1261
|
+
import duckdb
|
|
1262
|
+
|
|
1263
|
+
conn = duckdb.connect('.flock/traces.duckdb', read_only=True)
|
|
1264
|
+
|
|
1265
|
+
# Example 1: Find slow operations
|
|
1266
|
+
slow_ops = conn.execute("""
|
|
1267
|
+
SELECT name, AVG(duration_ms) as avg_ms, COUNT(*) as count
|
|
1268
|
+
FROM spans
|
|
1269
|
+
WHERE duration_ms > 1000
|
|
1270
|
+
GROUP BY name
|
|
1271
|
+
ORDER BY avg_ms DESC
|
|
1272
|
+
""").fetchall()
|
|
1273
|
+
|
|
1274
|
+
# Example 2: Find errors with their inputs
|
|
1275
|
+
errors = conn.execute("""
|
|
1276
|
+
SELECT
|
|
1277
|
+
name,
|
|
1278
|
+
status_description,
|
|
1279
|
+
json_extract(attributes, '$.input.message') as input_msg,
|
|
1280
|
+
json_extract(attributes, '$.input.artifacts') as input_artifacts
|
|
1281
|
+
FROM spans
|
|
1282
|
+
WHERE status_code = 'ERROR'
|
|
1283
|
+
ORDER BY start_time DESC
|
|
1284
|
+
""").fetchall()
|
|
1285
|
+
|
|
1286
|
+
# Example 3: Performance by service
|
|
1287
|
+
perf = conn.execute("""
|
|
1288
|
+
SELECT
|
|
1289
|
+
service,
|
|
1290
|
+
COUNT(*) as total_calls,
|
|
1291
|
+
AVG(duration_ms) as avg_ms,
|
|
1292
|
+
MAX(duration_ms) as max_ms,
|
|
1293
|
+
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY duration_ms) as p95_ms,
|
|
1294
|
+
PERCENTILE_CONT(0.99) WITHIN GROUP (ORDER BY duration_ms) as p99_ms
|
|
1295
|
+
FROM spans
|
|
1296
|
+
GROUP BY service
|
|
1297
|
+
ORDER BY avg_ms DESC
|
|
1298
|
+
""").fetchall()
|
|
1299
|
+
|
|
1300
|
+
# Example 4: Trace full execution path
|
|
1301
|
+
trace_path = conn.execute("""
|
|
1302
|
+
SELECT
|
|
1303
|
+
name,
|
|
1304
|
+
duration_ms,
|
|
1305
|
+
status_code,
|
|
1306
|
+
json_extract(attributes, '$.correlation_id') as correlation_id
|
|
1307
|
+
FROM spans
|
|
1308
|
+
WHERE trace_id = '<trace_id_here>'
|
|
1309
|
+
ORDER BY start_time ASC
|
|
1310
|
+
""").fetchall()
|
|
1311
|
+
|
|
1312
|
+
conn.close()
|
|
1313
|
+
```
|
|
1314
|
+
|
|
1315
|
+
### Common Debugging Scenarios
|
|
1316
|
+
|
|
1317
|
+
#### Scenario 1: "Agent is slow, why?"
|
|
1318
|
+
|
|
1319
|
+
```python
|
|
1320
|
+
# Find which operations are bottlenecks
|
|
1321
|
+
import duckdb
|
|
1322
|
+
conn = duckdb.connect('.flock/traces.duckdb', read_only=True)
|
|
1323
|
+
|
|
1324
|
+
# Analyze average duration by operation
|
|
1325
|
+
result = conn.execute("""
|
|
1326
|
+
SELECT
|
|
1327
|
+
service,
|
|
1328
|
+
operation,
|
|
1329
|
+
COUNT(*) as calls,
|
|
1330
|
+
AVG(duration_ms) as avg_ms,
|
|
1331
|
+
MAX(duration_ms) as max_ms
|
|
1332
|
+
FROM spans
|
|
1333
|
+
WHERE service = 'DSPyEngine' -- Focus on LLM engine
|
|
1334
|
+
GROUP BY service, operation
|
|
1335
|
+
ORDER BY avg_ms DESC
|
|
1336
|
+
""").fetchall()
|
|
1337
|
+
|
|
1338
|
+
print("Slowest operations:")
|
|
1339
|
+
for row in result:
|
|
1340
|
+
print(f" {row[1]}: {row[3]:.1f}ms avg ({row[2]} calls)")
|
|
1341
|
+
```
|
|
1342
|
+
|
|
1343
|
+
**AI-assisted analysis:**
|
|
1344
|
+
```
|
|
1345
|
+
You: "My pizza agent is slow"
|
|
1346
|
+
AI Agent: [queries DuckDB]
|
|
1347
|
+
"Found bottleneck: DSPyEngine.evaluate takes 23s on average.
|
|
1348
|
+
Checking input data... You're passing 50KB conversation history.
|
|
1349
|
+
Recommendation: Limit context to last 5 messages using:
|
|
1350
|
+
agent.consumes(Message, where=lambda m: m.created_at > recent_time)"
|
|
1351
|
+
```
|
|
1352
|
+
|
|
1353
|
+
#### Scenario 2: "Agent crashed, what input caused it?"
|
|
1354
|
+
|
|
1355
|
+
```python
|
|
1356
|
+
# Find the error and its input
|
|
1357
|
+
conn.execute("""
|
|
1358
|
+
SELECT
|
|
1359
|
+
name,
|
|
1360
|
+
status_description,
|
|
1361
|
+
json_extract(attributes, '$.input.message') as input,
|
|
1362
|
+
json_extract(attributes, '$.input.artifacts') as artifacts
|
|
1363
|
+
FROM spans
|
|
1364
|
+
WHERE status_code = 'ERROR'
|
|
1365
|
+
AND name LIKE '%pizza_master%'
|
|
1366
|
+
ORDER BY start_time DESC
|
|
1367
|
+
LIMIT 1
|
|
1368
|
+
""").fetchone()
|
|
1369
|
+
```
|
|
1370
|
+
|
|
1371
|
+
#### Scenario 3: "Performance regression after code change"
|
|
1372
|
+
|
|
1373
|
+
```python
|
|
1374
|
+
# Compare before/after performance
|
|
1375
|
+
baseline_start = 1728000000000000000 # nanoseconds
|
|
1376
|
+
current_start = 1728086400000000000
|
|
1377
|
+
|
|
1378
|
+
baseline = conn.execute("""
|
|
1379
|
+
SELECT AVG(duration_ms) as avg_ms
|
|
1380
|
+
FROM spans
|
|
1381
|
+
WHERE start_time BETWEEN ? AND ?
|
|
1382
|
+
AND name = 'DSPyEngine.evaluate'
|
|
1383
|
+
""", [baseline_start, baseline_start + 3600000000000]).fetchone()
|
|
1384
|
+
|
|
1385
|
+
current = conn.execute("""
|
|
1386
|
+
SELECT AVG(duration_ms) as avg_ms
|
|
1387
|
+
FROM spans
|
|
1388
|
+
WHERE start_time BETWEEN ? AND ?
|
|
1389
|
+
AND name = 'DSPyEngine.evaluate'
|
|
1390
|
+
""", [current_start, current_start + 3600000000000]).fetchone()
|
|
1391
|
+
|
|
1392
|
+
print(f"Baseline: {baseline[0]:.1f}ms")
|
|
1393
|
+
print(f"Current: {current[0]:.1f}ms")
|
|
1394
|
+
print(f"Change: {((current[0] / baseline[0]) - 1) * 100:+.1f}%")
|
|
1395
|
+
```
|
|
1396
|
+
|
|
1397
|
+
#### Scenario 4: "Which agents are called most frequently?"
|
|
1398
|
+
|
|
1399
|
+
```python
|
|
1400
|
+
# Agent execution frequency
|
|
1401
|
+
conn.execute("""
|
|
1402
|
+
SELECT
|
|
1403
|
+
service,
|
|
1404
|
+
COUNT(*) as executions,
|
|
1405
|
+
AVG(duration_ms) as avg_duration,
|
|
1406
|
+
SUM(CASE WHEN status_code = 'ERROR' THEN 1 ELSE 0 END) as errors
|
|
1407
|
+
FROM spans
|
|
1408
|
+
WHERE name LIKE '%.execute' -- Agent execution spans
|
|
1409
|
+
GROUP BY service
|
|
1410
|
+
ORDER BY executions DESC
|
|
1411
|
+
""").fetchall()
|
|
1412
|
+
```
|
|
1413
|
+
|
|
1414
|
+
### DuckDB Schema Reference
|
|
1415
|
+
|
|
1416
|
+
**Spans Table:**
|
|
1417
|
+
```sql
|
|
1418
|
+
CREATE TABLE spans (
|
|
1419
|
+
trace_id VARCHAR NOT NULL, -- Trace identifier
|
|
1420
|
+
span_id VARCHAR PRIMARY KEY, -- Unique span ID
|
|
1421
|
+
parent_id VARCHAR, -- Parent span ID (for hierarchy)
|
|
1422
|
+
name VARCHAR NOT NULL, -- Operation name (e.g., "Flock.publish")
|
|
1423
|
+
service VARCHAR, -- Service name (e.g., "Flock")
|
|
1424
|
+
operation VARCHAR, -- Operation name (e.g., "publish")
|
|
1425
|
+
kind VARCHAR, -- Span kind (INTERNAL, CLIENT, etc.)
|
|
1426
|
+
start_time BIGINT NOT NULL, -- Start timestamp (nanoseconds)
|
|
1427
|
+
end_time BIGINT NOT NULL, -- End timestamp (nanoseconds)
|
|
1428
|
+
duration_ms DOUBLE NOT NULL, -- Duration in milliseconds
|
|
1429
|
+
status_code VARCHAR NOT NULL, -- Status (OK, ERROR, UNSET)
|
|
1430
|
+
status_description VARCHAR, -- Error message if failed
|
|
1431
|
+
attributes JSON, -- All span attributes (input/output)
|
|
1432
|
+
events JSON, -- Span events
|
|
1433
|
+
links JSON, -- Span links
|
|
1434
|
+
resource JSON, -- Resource attributes
|
|
1435
|
+
created_at TIMESTAMP DEFAULT NOW() -- Database insert time
|
|
1436
|
+
);
|
|
1437
|
+
|
|
1438
|
+
-- Indexes for fast queries
|
|
1439
|
+
CREATE INDEX idx_trace_id ON spans(trace_id);
|
|
1440
|
+
CREATE INDEX idx_service ON spans(service);
|
|
1441
|
+
CREATE INDEX idx_start_time ON spans(start_time);
|
|
1442
|
+
CREATE INDEX idx_name ON spans(name);
|
|
1443
|
+
```
|
|
1444
|
+
|
|
1445
|
+
**Attributes JSON Structure:**
|
|
1446
|
+
```json
|
|
1447
|
+
{
|
|
1448
|
+
"function": "publish",
|
|
1449
|
+
"module": "flock.orchestrator",
|
|
1450
|
+
"class": "Flock",
|
|
1451
|
+
"input.obj": "{\"__class__\": \"MyDreamPizza\", \"pizza_idea\": \"...\"}"
|
|
1452
|
+
,
|
|
1453
|
+
"input.correlation_id": "null",
|
|
1454
|
+
"output.value": "{\"__class__\": \"Artifact\", \"id\": \"...\", ...}",
|
|
1455
|
+
"output.type": "Artifact",
|
|
1456
|
+
"correlation_id": "d1da07d1-9f73-4ff9-ac86-ddea29c8cc06"
|
|
1457
|
+
}
|
|
1458
|
+
```
|
|
1459
|
+
|
|
1460
|
+
### Advanced Query Examples
|
|
1461
|
+
|
|
1462
|
+
**1. Find longest trace execution:**
|
|
1463
|
+
```sql
|
|
1464
|
+
SELECT
|
|
1465
|
+
trace_id,
|
|
1466
|
+
COUNT(*) as span_count,
|
|
1467
|
+
MIN(start_time) as trace_start,
|
|
1468
|
+
MAX(end_time) as trace_end,
|
|
1469
|
+
(MAX(end_time) - MIN(start_time)) / 1000000.0 as total_duration_ms
|
|
1470
|
+
FROM spans
|
|
1471
|
+
GROUP BY trace_id
|
|
1472
|
+
ORDER BY total_duration_ms DESC
|
|
1473
|
+
LIMIT 10;
|
|
1474
|
+
```
|
|
1475
|
+
|
|
1476
|
+
**2. Analyze input sizes (detect large payloads):**
|
|
1477
|
+
```sql
|
|
1478
|
+
SELECT
|
|
1479
|
+
name,
|
|
1480
|
+
AVG(LENGTH(attributes->>'input.message')) as avg_input_size,
|
|
1481
|
+
MAX(LENGTH(attributes->>'input.message')) as max_input_size
|
|
1482
|
+
FROM spans
|
|
1483
|
+
WHERE attributes->>'input.message' IS NOT NULL
|
|
1484
|
+
GROUP BY name
|
|
1485
|
+
ORDER BY max_input_size DESC;
|
|
1486
|
+
```
|
|
1487
|
+
|
|
1488
|
+
**3. Error patterns by time of day:**
|
|
1489
|
+
```sql
|
|
1490
|
+
SELECT
|
|
1491
|
+
strftime(TIMESTAMP 'epoch' + (start_time / 1000000000) * INTERVAL '1 second', '%H') as hour,
|
|
1492
|
+
COUNT(*) as total_spans,
|
|
1493
|
+
SUM(CASE WHEN status_code = 'ERROR' THEN 1 ELSE 0 END) as errors,
|
|
1494
|
+
(errors * 100.0 / total_spans) as error_rate
|
|
1495
|
+
FROM spans
|
|
1496
|
+
GROUP BY hour
|
|
1497
|
+
ORDER BY hour;
|
|
1498
|
+
```
|
|
1499
|
+
|
|
1500
|
+
**4. Agent dependency graph (what consumes what):**
|
|
1501
|
+
```sql
|
|
1502
|
+
WITH agent_outputs AS (
|
|
1503
|
+
SELECT DISTINCT
|
|
1504
|
+
service as producer,
|
|
1505
|
+
json_extract(attributes, '$.output.type') as artifact_type
|
|
1506
|
+
FROM spans
|
|
1507
|
+
WHERE attributes->>'output.type' IS NOT NULL
|
|
1508
|
+
),
|
|
1509
|
+
agent_inputs AS (
|
|
1510
|
+
SELECT DISTINCT
|
|
1511
|
+
service as consumer,
|
|
1512
|
+
json_extract(attributes, '$.input.artifacts[0].type') as artifact_type
|
|
1513
|
+
FROM spans
|
|
1514
|
+
WHERE attributes->>'input.artifacts' IS NOT NULL
|
|
1515
|
+
)
|
|
1516
|
+
SELECT
|
|
1517
|
+
ao.producer,
|
|
1518
|
+
ao.artifact_type,
|
|
1519
|
+
ai.consumer
|
|
1520
|
+
FROM agent_outputs ao
|
|
1521
|
+
JOIN agent_inputs ai ON ao.artifact_type = ai.artifact_type
|
|
1522
|
+
ORDER BY ao.producer, ai.consumer;
|
|
1523
|
+
```
|
|
1524
|
+
|
|
1525
|
+
### Integration with External Tools
|
|
1526
|
+
|
|
1527
|
+
**Export to Parquet for BigQuery/Snowflake:**
|
|
1528
|
+
```python
|
|
1529
|
+
import duckdb
|
|
1530
|
+
|
|
1531
|
+
conn = duckdb.connect('.flock/traces.duckdb')
|
|
1532
|
+
conn.execute("""
|
|
1533
|
+
COPY (SELECT * FROM spans)
|
|
1534
|
+
TO 'traces.parquet' (FORMAT PARQUET)
|
|
1535
|
+
""")
|
|
1536
|
+
```
|
|
1537
|
+
|
|
1538
|
+
**Send to Grafana Tempo/Jaeger:**
|
|
1539
|
+
```bash
|
|
1540
|
+
# Use OTLP exporter instead of DuckDB
|
|
1541
|
+
export OTEL_EXPORTER_OTLP_ENDPOINT="http://tempo:4317"
|
|
1542
|
+
export FLOCK_AUTO_TRACE=true
|
|
1543
|
+
# Don't set FLOCK_TRACE_FILE=true
|
|
1544
|
+
```
|
|
1545
|
+
|
|
1546
|
+
### Performance Tips
|
|
1547
|
+
|
|
1548
|
+
1. **Limit trace retention:**
|
|
1549
|
+
```sql
|
|
1550
|
+
DELETE FROM spans WHERE start_time < (EXTRACT(EPOCH FROM NOW()) * 1000000000) - 604800000000000; -- Keep 7 days
|
|
1551
|
+
```
|
|
1552
|
+
|
|
1553
|
+
2. **Vacuum database periodically:**
|
|
1554
|
+
```python
|
|
1555
|
+
conn.execute("VACUUM")
|
|
1556
|
+
```
|
|
1557
|
+
|
|
1558
|
+
3. **Use read-only connections for queries:**
|
|
1559
|
+
```python
|
|
1560
|
+
conn = duckdb.connect('.flock/traces.duckdb', read_only=True)
|
|
1561
|
+
```
|
|
1562
|
+
|
|
1563
|
+
### Debugging Checklist
|
|
1564
|
+
|
|
1565
|
+
When debugging a Flock application:
|
|
1566
|
+
|
|
1567
|
+
- [ ] **Enable tracing:** `FLOCK_AUTO_TRACE=true FLOCK_TRACE_FILE=true`
|
|
1568
|
+
- [ ] **Reproduce the issue** to capture trace data
|
|
1569
|
+
- [ ] **Open trace viewer:** Visit `http://localhost:8000` → Trace Viewer tab
|
|
1570
|
+
- [ ] **Check Timeline View:** Look for unusually long spans
|
|
1571
|
+
- [ ] **Check Statistics View:** Sort by duration to find bottlenecks
|
|
1572
|
+
- [ ] **Examine I/O data:** Expand JSON attributes to see full inputs/outputs
|
|
1573
|
+
- [ ] **Query DuckDB:** Use SQL for deeper analysis
|
|
1574
|
+
- [ ] **Ask AI agent:** Provide trace_id and description, let AI query and diagnose
|
|
1575
|
+
|
|
1576
|
+
---
|
|
1577
|
+
|
|
1083
1578
|
## ❓ FAQ for AI Agents
|
|
1084
1579
|
|
|
1085
1580
|
### Q: Where should I save new files?
|
|
@@ -1121,6 +1616,20 @@ cd frontend && npm test -- test_name
|
|
|
1121
1616
|
await orchestrator.serve(dashboard=True)
|
|
1122
1617
|
```
|
|
1123
1618
|
|
|
1619
|
+
### Q: How do I use unified tracing?
|
|
1620
|
+
|
|
1621
|
+
```python
|
|
1622
|
+
# Wrap workflows in a single trace
|
|
1623
|
+
async with flock.traced_run("workflow_name"):
|
|
1624
|
+
await flock.publish(data)
|
|
1625
|
+
await flock.run_until_idle()
|
|
1626
|
+
|
|
1627
|
+
# Clear traces for fresh debug session
|
|
1628
|
+
result = Flock.clear_traces()
|
|
1629
|
+
```
|
|
1630
|
+
|
|
1631
|
+
See [docs/UNIFIED_TRACING.md](docs/UNIFIED_TRACING.md) for complete guide.
|
|
1632
|
+
|
|
1124
1633
|
### Q: Where should I add new tests?
|
|
1125
1634
|
|
|
1126
1635
|
Add to existing test file if relevant, or create new file following naming convention `test_<module>.py` for backend, `<name>.test.tsx` for frontend.
|
|
@@ -1186,6 +1695,17 @@ agent = (
|
|
|
1186
1695
|
await orchestrator.arun(agent, input_data)
|
|
1187
1696
|
```
|
|
1188
1697
|
|
|
1698
|
+
**Unified tracing:**
|
|
1699
|
+
```python
|
|
1700
|
+
# Wrap workflow in single trace
|
|
1701
|
+
async with flock.traced_run("workflow_name"):
|
|
1702
|
+
await flock.publish(data)
|
|
1703
|
+
await flock.run_until_idle()
|
|
1704
|
+
|
|
1705
|
+
# Clear traces
|
|
1706
|
+
Flock.clear_traces()
|
|
1707
|
+
```
|
|
1708
|
+
|
|
1189
1709
|
**Start dashboard:**
|
|
1190
1710
|
```python
|
|
1191
1711
|
await orchestrator.serve(dashboard=True)
|
|
@@ -1201,6 +1721,7 @@ await orchestrator.serve(dashboard=True)
|
|
|
1201
1721
|
- **Versioning Guide:** [`docs/VERSIONING.md`](docs/VERSIONING.md) - Smart version bumping
|
|
1202
1722
|
- **Pre-commit Hooks:** [`docs/PRE_COMMIT_HOOKS.md`](docs/PRE_COMMIT_HOOKS.md) - Quality automation
|
|
1203
1723
|
- **Architecture:** [`docs/patterns/core-architecture.md`](docs/patterns/core-architecture.md)
|
|
1724
|
+
- **Unified Tracing:** [`docs/UNIFIED_TRACING.md`](docs/UNIFIED_TRACING.md) - Workflow tracing & trace management
|
|
1204
1725
|
- **Examples:** [`examples/`](examples/) - Working code examples
|
|
1205
1726
|
- **Analysis Documents:** [`docs/patterns/`](docs/patterns/)
|
|
1206
1727
|
|
|
@@ -1210,5 +1731,5 @@ await orchestrator.serve(dashboard=True)
|
|
|
1210
1731
|
|
|
1211
1732
|
---
|
|
1212
1733
|
|
|
1213
|
-
*Last updated: October
|
|
1734
|
+
*Last updated: October 7, 2025*
|
|
1214
1735
|
*This file follows the modern AGENTS.md format for AI coding agents.*
|