flock-core 0.4.543__py3-none-any.whl → 0.5.0__py3-none-any.whl
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/__init__.py +12 -217
- flock/agent.py +1079 -0
- flock/api/themes.py +71 -0
- flock/artifacts.py +86 -0
- flock/cli.py +147 -0
- flock/components.py +189 -0
- flock/dashboard/__init__.py +30 -0
- flock/dashboard/collector.py +559 -0
- flock/dashboard/events.py +188 -0
- flock/dashboard/graph_builder.py +563 -0
- flock/dashboard/launcher.py +235 -0
- flock/dashboard/models/graph.py +156 -0
- flock/dashboard/service.py +991 -0
- flock/dashboard/static_v2/assets/index-DFRnI_mt.js +111 -0
- flock/dashboard/static_v2/assets/index-fPLNdmp1.css +1 -0
- flock/dashboard/static_v2/index.html +13 -0
- flock/dashboard/websocket.py +246 -0
- flock/engines/__init__.py +6 -0
- flock/engines/dspy_engine.py +932 -0
- flock/examples.py +131 -0
- flock/frontend/README.md +778 -0
- flock/frontend/docs/DESIGN_SYSTEM.md +1980 -0
- flock/frontend/index.html +12 -0
- flock/frontend/package-lock.json +4337 -0
- flock/frontend/package.json +48 -0
- flock/frontend/src/App.tsx +139 -0
- flock/frontend/src/__tests__/integration/graph-snapshot.test.tsx +647 -0
- flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +699 -0
- flock/frontend/src/components/common/BuildInfo.tsx +39 -0
- flock/frontend/src/components/common/EmptyState.module.css +115 -0
- flock/frontend/src/components/common/EmptyState.tsx +128 -0
- flock/frontend/src/components/common/ErrorBoundary.module.css +169 -0
- flock/frontend/src/components/common/ErrorBoundary.tsx +118 -0
- flock/frontend/src/components/common/KeyboardShortcutsDialog.css +251 -0
- flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +151 -0
- flock/frontend/src/components/common/LoadingSpinner.module.css +97 -0
- flock/frontend/src/components/common/LoadingSpinner.tsx +29 -0
- flock/frontend/src/components/controls/PublishControl.css +547 -0
- flock/frontend/src/components/controls/PublishControl.test.tsx +543 -0
- flock/frontend/src/components/controls/PublishControl.tsx +432 -0
- flock/frontend/src/components/details/DetailWindowContainer.tsx +58 -0
- flock/frontend/src/components/details/LiveOutputTab.test.tsx +792 -0
- flock/frontend/src/components/details/LiveOutputTab.tsx +220 -0
- flock/frontend/src/components/details/MessageDetailWindow.tsx +439 -0
- flock/frontend/src/components/details/MessageHistoryTab.tsx +374 -0
- flock/frontend/src/components/details/NodeDetailWindow.test.tsx +501 -0
- flock/frontend/src/components/details/NodeDetailWindow.tsx +218 -0
- flock/frontend/src/components/details/RunStatusTab.tsx +348 -0
- flock/frontend/src/components/details/tabs.test.tsx +1015 -0
- flock/frontend/src/components/filters/ArtifactTypeFilter.tsx +21 -0
- flock/frontend/src/components/filters/CorrelationIDFilter.module.css +102 -0
- flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +197 -0
- flock/frontend/src/components/filters/CorrelationIDFilter.tsx +121 -0
- flock/frontend/src/components/filters/FilterFlyout.module.css +104 -0
- flock/frontend/src/components/filters/FilterFlyout.tsx +80 -0
- flock/frontend/src/components/filters/FilterPills.module.css +220 -0
- flock/frontend/src/components/filters/FilterPills.test.tsx +189 -0
- flock/frontend/src/components/filters/FilterPills.tsx +143 -0
- flock/frontend/src/components/filters/ProducerFilter.tsx +21 -0
- flock/frontend/src/components/filters/SavedFiltersControl.module.css +60 -0
- flock/frontend/src/components/filters/SavedFiltersControl.test.tsx +158 -0
- flock/frontend/src/components/filters/SavedFiltersControl.tsx +159 -0
- flock/frontend/src/components/filters/TagFilter.tsx +21 -0
- flock/frontend/src/components/filters/TimeRangeFilter.module.css +115 -0
- flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +154 -0
- flock/frontend/src/components/filters/TimeRangeFilter.tsx +110 -0
- flock/frontend/src/components/filters/VisibilityFilter.tsx +21 -0
- flock/frontend/src/components/graph/AgentNode.test.tsx +77 -0
- flock/frontend/src/components/graph/AgentNode.tsx +324 -0
- flock/frontend/src/components/graph/GraphCanvas.tsx +613 -0
- flock/frontend/src/components/graph/MessageFlowEdge.tsx +128 -0
- flock/frontend/src/components/graph/MessageNode.test.tsx +64 -0
- flock/frontend/src/components/graph/MessageNode.tsx +129 -0
- flock/frontend/src/components/graph/MiniMap.tsx +47 -0
- flock/frontend/src/components/graph/TransformEdge.tsx +123 -0
- flock/frontend/src/components/layout/DashboardLayout.css +420 -0
- flock/frontend/src/components/layout/DashboardLayout.tsx +287 -0
- flock/frontend/src/components/layout/Header.module.css +88 -0
- flock/frontend/src/components/layout/Header.tsx +52 -0
- flock/frontend/src/components/modules/HistoricalArtifactsModule.module.css +288 -0
- flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx +450 -0
- flock/frontend/src/components/modules/HistoricalArtifactsModuleWrapper.tsx +13 -0
- flock/frontend/src/components/modules/JsonAttributeRenderer.tsx +140 -0
- flock/frontend/src/components/modules/ModuleRegistry.test.ts +333 -0
- flock/frontend/src/components/modules/ModuleRegistry.ts +93 -0
- flock/frontend/src/components/modules/ModuleWindow.tsx +223 -0
- flock/frontend/src/components/modules/TraceModuleJaeger.tsx +1971 -0
- flock/frontend/src/components/modules/TraceModuleJaegerWrapper.tsx +13 -0
- flock/frontend/src/components/modules/registerModules.ts +29 -0
- flock/frontend/src/components/settings/AdvancedSettings.tsx +175 -0
- flock/frontend/src/components/settings/AppearanceSettings.tsx +185 -0
- flock/frontend/src/components/settings/GraphSettings.tsx +110 -0
- flock/frontend/src/components/settings/MultiSelect.tsx +235 -0
- flock/frontend/src/components/settings/SettingsPanel.css +327 -0
- flock/frontend/src/components/settings/SettingsPanel.tsx +131 -0
- flock/frontend/src/components/settings/ThemeSelector.tsx +298 -0
- flock/frontend/src/components/settings/TracingSettings.tsx +404 -0
- flock/frontend/src/hooks/useKeyboardShortcuts.ts +148 -0
- flock/frontend/src/hooks/useModulePersistence.test.ts +442 -0
- flock/frontend/src/hooks/useModulePersistence.ts +154 -0
- flock/frontend/src/hooks/useModules.ts +157 -0
- flock/frontend/src/hooks/usePersistence.ts +141 -0
- flock/frontend/src/main.tsx +13 -0
- flock/frontend/src/services/api.ts +337 -0
- flock/frontend/src/services/graphService.test.ts +330 -0
- flock/frontend/src/services/graphService.ts +75 -0
- flock/frontend/src/services/indexeddb.test.ts +793 -0
- flock/frontend/src/services/indexeddb.ts +848 -0
- flock/frontend/src/services/layout.test.ts +437 -0
- flock/frontend/src/services/layout.ts +357 -0
- flock/frontend/src/services/themeApplicator.ts +140 -0
- flock/frontend/src/services/themeService.ts +77 -0
- flock/frontend/src/services/websocket.ts +650 -0
- flock/frontend/src/store/filterStore.test.ts +250 -0
- flock/frontend/src/store/filterStore.ts +272 -0
- flock/frontend/src/store/graphStore.test.ts +570 -0
- flock/frontend/src/store/graphStore.ts +462 -0
- flock/frontend/src/store/moduleStore.test.ts +253 -0
- flock/frontend/src/store/moduleStore.ts +75 -0
- flock/frontend/src/store/settingsStore.ts +188 -0
- flock/frontend/src/store/streamStore.ts +68 -0
- flock/frontend/src/store/uiStore.test.ts +54 -0
- flock/frontend/src/store/uiStore.ts +122 -0
- flock/frontend/src/store/wsStore.ts +34 -0
- flock/frontend/src/styles/index.css +15 -0
- flock/frontend/src/styles/scrollbar.css +47 -0
- flock/frontend/src/styles/variables.css +488 -0
- flock/frontend/src/test/setup.ts +1 -0
- flock/frontend/src/types/filters.ts +47 -0
- flock/frontend/src/types/graph.ts +95 -0
- flock/frontend/src/types/modules.ts +10 -0
- flock/frontend/src/types/theme.ts +55 -0
- flock/frontend/src/utils/artifacts.ts +24 -0
- flock/frontend/src/utils/mockData.ts +98 -0
- flock/frontend/src/utils/performance.ts +16 -0
- flock/frontend/src/vite-env.d.ts +17 -0
- flock/frontend/tsconfig.json +27 -0
- flock/frontend/tsconfig.node.json +11 -0
- flock/frontend/vite.config.ts +25 -0
- flock/frontend/vitest.config.ts +11 -0
- flock/{core/util → helper}/cli_helper.py +9 -5
- flock/{core/logging → logging}/__init__.py +2 -3
- flock/logging/auto_trace.py +159 -0
- flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
- flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
- flock/{core/logging → logging}/formatters/themed_formatter.py +69 -107
- flock/{core/logging → logging}/logging.py +78 -61
- flock/{core/logging → logging}/telemetry.py +66 -26
- flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
- flock/logging/telemetry_exporter/duckdb_exporter.py +216 -0
- flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +13 -10
- flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
- flock/logging/trace_and_logged.py +304 -0
- flock/mcp/__init__.py +91 -0
- flock/{core/mcp/mcp_client.py → mcp/client.py} +131 -158
- flock/{core/mcp/mcp_config.py → mcp/config.py} +86 -132
- flock/mcp/manager.py +286 -0
- flock/mcp/servers/sse/__init__.py +1 -1
- flock/mcp/servers/sse/flock_sse_server.py +16 -58
- flock/mcp/servers/stdio/__init__.py +1 -1
- flock/mcp/servers/stdio/flock_stdio_server.py +13 -53
- flock/mcp/servers/streamable_http/flock_streamable_http_server.py +22 -67
- flock/mcp/servers/websockets/flock_websocket_server.py +12 -45
- flock/{core/mcp/flock_mcp_tool_base.py → mcp/tool.py} +24 -78
- flock/mcp/types/__init__.py +42 -0
- flock/{core/mcp → mcp}/types/callbacks.py +12 -15
- flock/{core/mcp → mcp}/types/factories.py +7 -6
- flock/{core/mcp → mcp}/types/handlers.py +13 -18
- flock/{core/mcp → mcp}/types/types.py +70 -74
- flock/{core/mcp → mcp}/util/helpers.py +3 -3
- flock/orchestrator.py +970 -0
- flock/registry.py +148 -0
- flock/runtime.py +262 -0
- flock/service.py +277 -0
- flock/store.py +1214 -0
- flock/subscription.py +111 -0
- flock/themes/andromeda.toml +1 -1
- flock/themes/apple-system-colors.toml +1 -1
- flock/themes/arcoiris.toml +1 -1
- flock/themes/atomonelight.toml +1 -1
- flock/themes/ayu copy.toml +1 -1
- flock/themes/ayu-light.toml +1 -1
- flock/themes/belafonte-day.toml +1 -1
- flock/themes/belafonte-night.toml +1 -1
- flock/themes/blulocodark.toml +1 -1
- flock/themes/breeze.toml +1 -1
- flock/themes/broadcast.toml +1 -1
- flock/themes/brogrammer.toml +1 -1
- flock/themes/builtin-dark.toml +1 -1
- flock/themes/builtin-pastel-dark.toml +1 -1
- flock/themes/catppuccin-latte.toml +1 -1
- flock/themes/catppuccin-macchiato.toml +1 -1
- flock/themes/catppuccin-mocha.toml +1 -1
- flock/themes/cga.toml +1 -1
- flock/themes/chalk.toml +1 -1
- flock/themes/ciapre.toml +1 -1
- flock/themes/coffee-theme.toml +1 -1
- flock/themes/cyberpunkscarletprotocol.toml +1 -1
- flock/themes/dark+.toml +1 -1
- flock/themes/darkermatrix.toml +1 -1
- flock/themes/darkmatrix.toml +2 -2
- flock/themes/darkside.toml +1 -1
- flock/themes/deep.toml +2 -2
- flock/themes/desert.toml +1 -1
- flock/themes/django.toml +1 -1
- flock/themes/djangosmooth.toml +1 -1
- flock/themes/doomone.toml +1 -1
- flock/themes/dotgov.toml +1 -1
- flock/themes/dracula+.toml +1 -1
- flock/themes/duckbones.toml +1 -1
- flock/themes/encom.toml +1 -1
- flock/themes/espresso.toml +1 -1
- flock/themes/everblush.toml +1 -1
- flock/themes/fairyfloss.toml +1 -1
- flock/themes/fideloper.toml +1 -1
- flock/themes/fishtank.toml +1 -1
- flock/themes/flexoki-light.toml +1 -1
- flock/themes/floraverse.toml +1 -1
- flock/themes/framer.toml +1 -1
- flock/themes/galizur.toml +1 -1
- flock/themes/github.toml +1 -1
- flock/themes/grass.toml +1 -1
- flock/themes/grey-green.toml +1 -1
- flock/themes/gruvboxlight.toml +1 -1
- flock/themes/guezwhoz.toml +1 -1
- flock/themes/harper.toml +1 -1
- flock/themes/hax0r-blue.toml +1 -1
- flock/themes/hopscotch.256.toml +1 -1
- flock/themes/ic-green-ppl.toml +1 -1
- flock/themes/iceberg-dark.toml +1 -1
- flock/themes/japanesque.toml +1 -1
- flock/themes/jubi.toml +1 -1
- flock/themes/kibble.toml +1 -1
- flock/themes/kolorit.toml +1 -1
- flock/themes/kurokula.toml +1 -1
- flock/themes/materialdesigncolors.toml +1 -1
- flock/themes/matrix.toml +1 -1
- flock/themes/mellifluous.toml +1 -1
- flock/themes/midnight-in-mojave.toml +1 -1
- flock/themes/monokai-remastered.toml +1 -1
- flock/themes/monokai-soda.toml +1 -1
- flock/themes/neon.toml +1 -1
- flock/themes/neopolitan.toml +5 -5
- flock/themes/nord-light.toml +1 -1
- flock/themes/ocean.toml +1 -1
- flock/themes/onehalfdark.toml +1 -1
- flock/themes/onehalflight.toml +1 -1
- flock/themes/palenighthc.toml +1 -1
- flock/themes/paulmillr.toml +1 -1
- flock/themes/pencildark.toml +1 -1
- flock/themes/pnevma.toml +1 -1
- flock/themes/purple-rain.toml +1 -1
- flock/themes/purplepeter.toml +1 -1
- flock/themes/raycast-dark.toml +1 -1
- flock/themes/red-sands.toml +1 -1
- flock/themes/relaxed.toml +1 -1
- flock/themes/retro.toml +1 -1
- flock/themes/rose-pine.toml +1 -1
- flock/themes/royal.toml +1 -1
- flock/themes/ryuuko.toml +1 -1
- flock/themes/sakura.toml +1 -1
- flock/themes/scarlet-protocol.toml +1 -1
- flock/themes/seoulbones-dark.toml +1 -1
- flock/themes/shades-of-purple.toml +1 -1
- flock/themes/smyck.toml +1 -1
- flock/themes/softserver.toml +1 -1
- flock/themes/solarized-darcula.toml +1 -1
- flock/themes/square.toml +1 -1
- flock/themes/sugarplum.toml +1 -1
- flock/themes/thayer-bright.toml +1 -1
- flock/themes/tokyonight.toml +1 -1
- flock/themes/tomorrow.toml +1 -1
- flock/themes/ubuntu.toml +1 -1
- flock/themes/ultradark.toml +1 -1
- flock/themes/ultraviolent.toml +1 -1
- flock/themes/unikitty.toml +1 -1
- flock/themes/urple.toml +1 -1
- flock/themes/vesper.toml +1 -1
- flock/themes/vimbones.toml +1 -1
- flock/themes/wildcherry.toml +1 -1
- flock/themes/wilmersdorf.toml +1 -1
- flock/themes/wryan.toml +1 -1
- flock/themes/xcodedarkhc.toml +1 -1
- flock/themes/xcodelight.toml +1 -1
- flock/themes/zenbones-light.toml +1 -1
- flock/themes/zenwritten-dark.toml +1 -1
- flock/utilities.py +301 -0
- flock/utility/output_utility_component.py +226 -0
- flock/visibility.py +107 -0
- flock_core-0.5.0.dist-info/METADATA +964 -0
- flock_core-0.5.0.dist-info/RECORD +525 -0
- flock_core-0.5.0.dist-info/entry_points.txt +2 -0
- {flock_core-0.4.543.dist-info → flock_core-0.5.0.dist-info}/licenses/LICENSE +1 -1
- flock/adapter/__init__.py +0 -14
- flock/adapter/azure_adapter.py +0 -68
- flock/adapter/chroma_adapter.py +0 -73
- flock/adapter/faiss_adapter.py +0 -97
- flock/adapter/pinecone_adapter.py +0 -51
- flock/adapter/vector_base.py +0 -47
- flock/cli/assets/release_notes.md +0 -140
- flock/cli/config.py +0 -8
- flock/cli/constants.py +0 -36
- flock/cli/create_agent.py +0 -1
- flock/cli/create_flock.py +0 -280
- flock/cli/execute_flock.py +0 -620
- flock/cli/load_agent.py +0 -1
- flock/cli/load_examples.py +0 -1
- flock/cli/load_flock.py +0 -192
- flock/cli/load_release_notes.py +0 -20
- flock/cli/loaded_flock_cli.py +0 -254
- flock/cli/manage_agents.py +0 -459
- flock/cli/registry_management.py +0 -889
- flock/cli/runner.py +0 -41
- flock/cli/settings.py +0 -857
- flock/cli/utils.py +0 -135
- flock/cli/view_results.py +0 -29
- flock/cli/yaml_editor.py +0 -396
- flock/config.py +0 -56
- flock/core/__init__.py +0 -44
- flock/core/api/__init__.py +0 -10
- flock/core/api/custom_endpoint.py +0 -45
- flock/core/api/endpoints.py +0 -262
- flock/core/api/main.py +0 -162
- flock/core/api/models.py +0 -101
- flock/core/api/run_store.py +0 -224
- flock/core/api/runner.py +0 -44
- flock/core/api/service.py +0 -214
- flock/core/config/flock_agent_config.py +0 -11
- flock/core/config/scheduled_agent_config.py +0 -40
- flock/core/context/context.py +0 -214
- flock/core/context/context_manager.py +0 -40
- flock/core/context/context_vars.py +0 -11
- flock/core/evaluation/utils.py +0 -395
- flock/core/execution/batch_executor.py +0 -369
- flock/core/execution/evaluation_executor.py +0 -438
- flock/core/execution/local_executor.py +0 -31
- flock/core/execution/opik_executor.py +0 -103
- flock/core/execution/temporal_executor.py +0 -166
- flock/core/flock.py +0 -1003
- flock/core/flock_agent.py +0 -1258
- flock/core/flock_evaluator.py +0 -60
- flock/core/flock_factory.py +0 -513
- flock/core/flock_module.py +0 -207
- flock/core/flock_registry.py +0 -702
- flock/core/flock_router.py +0 -83
- flock/core/flock_scheduler.py +0 -166
- flock/core/flock_server_manager.py +0 -136
- flock/core/interpreter/python_interpreter.py +0 -689
- flock/core/logging/live_capture.py +0 -137
- flock/core/logging/trace_and_logged.py +0 -59
- flock/core/mcp/__init__.py +0 -1
- flock/core/mcp/flock_mcp_server.py +0 -640
- flock/core/mcp/mcp_client_manager.py +0 -201
- flock/core/mcp/types/__init__.py +0 -1
- flock/core/mixin/dspy_integration.py +0 -445
- flock/core/mixin/prompt_parser.py +0 -125
- flock/core/serialization/__init__.py +0 -13
- flock/core/serialization/callable_registry.py +0 -52
- flock/core/serialization/flock_serializer.py +0 -854
- flock/core/serialization/json_encoder.py +0 -41
- flock/core/serialization/secure_serializer.py +0 -175
- flock/core/serialization/serializable.py +0 -342
- flock/core/serialization/serialization_utils.py +0 -409
- flock/core/util/file_path_utils.py +0 -223
- flock/core/util/hydrator.py +0 -309
- flock/core/util/input_resolver.py +0 -141
- flock/core/util/loader.py +0 -59
- flock/core/util/splitter.py +0 -219
- flock/di.py +0 -41
- flock/evaluators/__init__.py +0 -1
- flock/evaluators/declarative/__init__.py +0 -1
- flock/evaluators/declarative/declarative_evaluator.py +0 -217
- flock/evaluators/memory/memory_evaluator.py +0 -90
- flock/evaluators/test/test_case_evaluator.py +0 -38
- flock/evaluators/zep/zep_evaluator.py +0 -59
- flock/modules/__init__.py +0 -1
- flock/modules/assertion/__init__.py +0 -1
- flock/modules/assertion/assertion_module.py +0 -286
- flock/modules/callback/__init__.py +0 -1
- flock/modules/callback/callback_module.py +0 -91
- flock/modules/enterprise_memory/README.md +0 -99
- flock/modules/enterprise_memory/enterprise_memory_module.py +0 -526
- flock/modules/mem0/__init__.py +0 -1
- flock/modules/mem0/mem0_module.py +0 -126
- flock/modules/mem0_async/__init__.py +0 -1
- flock/modules/mem0_async/async_mem0_module.py +0 -126
- flock/modules/memory/__init__.py +0 -1
- flock/modules/memory/memory_module.py +0 -429
- flock/modules/memory/memory_parser.py +0 -125
- flock/modules/memory/memory_storage.py +0 -736
- flock/modules/output/__init__.py +0 -1
- flock/modules/output/output_module.py +0 -196
- flock/modules/performance/__init__.py +0 -1
- flock/modules/performance/metrics_module.py +0 -678
- flock/modules/zep/__init__.py +0 -1
- flock/modules/zep/zep_module.py +0 -192
- flock/platform/docker_tools.py +0 -49
- flock/platform/jaeger_install.py +0 -86
- flock/routers/__init__.py +0 -1
- flock/routers/agent/__init__.py +0 -1
- flock/routers/agent/agent_router.py +0 -236
- flock/routers/agent/handoff_agent.py +0 -58
- flock/routers/conditional/conditional_router.py +0 -486
- flock/routers/default/__init__.py +0 -1
- flock/routers/default/default_router.py +0 -80
- flock/routers/feedback/feedback_router.py +0 -114
- flock/routers/list_generator/list_generator_router.py +0 -166
- flock/routers/llm/__init__.py +0 -1
- flock/routers/llm/llm_router.py +0 -365
- flock/tools/__init__.py +0 -0
- flock/tools/azure_tools.py +0 -781
- flock/tools/code_tools.py +0 -167
- flock/tools/file_tools.py +0 -149
- flock/tools/github_tools.py +0 -157
- flock/tools/markdown_tools.py +0 -205
- flock/tools/system_tools.py +0 -9
- flock/tools/text_tools.py +0 -810
- flock/tools/web_tools.py +0 -92
- flock/tools/zendesk_tools.py +0 -501
- flock/webapp/__init__.py +0 -1
- flock/webapp/app/__init__.py +0 -0
- flock/webapp/app/api/__init__.py +0 -0
- flock/webapp/app/api/agent_management.py +0 -237
- flock/webapp/app/api/execution.py +0 -503
- flock/webapp/app/api/flock_management.py +0 -125
- flock/webapp/app/api/registry_viewer.py +0 -29
- flock/webapp/app/chat.py +0 -662
- flock/webapp/app/config.py +0 -104
- flock/webapp/app/dependencies.py +0 -117
- flock/webapp/app/main.py +0 -1086
- flock/webapp/app/middleware.py +0 -113
- flock/webapp/app/models_ui.py +0 -7
- flock/webapp/app/services/__init__.py +0 -0
- flock/webapp/app/services/feedback_file_service.py +0 -363
- flock/webapp/app/services/flock_service.py +0 -345
- flock/webapp/app/services/sharing_models.py +0 -81
- flock/webapp/app/services/sharing_store.py +0 -597
- flock/webapp/app/templates/theme_mapper.html +0 -326
- flock/webapp/app/theme_mapper.py +0 -811
- flock/webapp/app/utils.py +0 -85
- flock/webapp/run.py +0 -219
- flock/webapp/static/css/chat.css +0 -301
- flock/webapp/static/css/components.css +0 -167
- flock/webapp/static/css/header.css +0 -39
- flock/webapp/static/css/layout.css +0 -281
- flock/webapp/static/css/sidebar.css +0 -127
- flock/webapp/static/css/two-pane.css +0 -48
- flock/webapp/templates/base.html +0 -389
- flock/webapp/templates/chat.html +0 -152
- flock/webapp/templates/chat_settings.html +0 -19
- flock/webapp/templates/flock_editor.html +0 -16
- flock/webapp/templates/index.html +0 -12
- flock/webapp/templates/partials/_agent_detail_form.html +0 -93
- flock/webapp/templates/partials/_agent_list.html +0 -18
- flock/webapp/templates/partials/_agent_manager_view.html +0 -51
- flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
- flock/webapp/templates/partials/_chat_container.html +0 -15
- flock/webapp/templates/partials/_chat_messages.html +0 -57
- flock/webapp/templates/partials/_chat_settings_form.html +0 -85
- flock/webapp/templates/partials/_create_flock_form.html +0 -50
- flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
- flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
- flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
- flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
- flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
- flock/webapp/templates/partials/_env_vars_table.html +0 -23
- flock/webapp/templates/partials/_execution_form.html +0 -127
- flock/webapp/templates/partials/_execution_view_container.html +0 -28
- flock/webapp/templates/partials/_flock_file_list.html +0 -23
- flock/webapp/templates/partials/_flock_properties_form.html +0 -52
- flock/webapp/templates/partials/_flock_upload_form.html +0 -16
- flock/webapp/templates/partials/_header_flock_status.html +0 -5
- flock/webapp/templates/partials/_live_logs.html +0 -13
- flock/webapp/templates/partials/_load_manager_view.html +0 -49
- flock/webapp/templates/partials/_registry_table.html +0 -25
- flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
- flock/webapp/templates/partials/_results_display.html +0 -78
- flock/webapp/templates/partials/_settings_env_content.html +0 -9
- flock/webapp/templates/partials/_settings_theme_content.html +0 -14
- flock/webapp/templates/partials/_settings_view.html +0 -36
- flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
- flock/webapp/templates/partials/_share_link_snippet.html +0 -35
- flock/webapp/templates/partials/_sidebar.html +0 -74
- flock/webapp/templates/partials/_structured_data_view.html +0 -40
- flock/webapp/templates/partials/_theme_preview.html +0 -36
- flock/webapp/templates/registry_viewer.html +0 -84
- flock/webapp/templates/shared_run_page.html +0 -140
- flock/workflow/__init__.py +0 -0
- flock/workflow/activities.py +0 -237
- flock/workflow/agent_activities.py +0 -24
- flock/workflow/agent_execution_activity.py +0 -240
- flock/workflow/flock_workflow.py +0 -225
- flock/workflow/temporal_config.py +0 -96
- flock/workflow/temporal_setup.py +0 -60
- flock_core-0.4.543.dist-info/METADATA +0 -676
- flock_core-0.4.543.dist-info/RECORD +0 -572
- flock_core-0.4.543.dist-info/entry_points.txt +0 -2
- /flock/{core/logging → logging}/formatters/themes.py +0 -0
- /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
- /flock/{core/mcp → mcp}/util/__init__.py +0 -0
- {flock_core-0.4.543.dist-info → flock_core-0.5.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export type TimeRangePreset = 'last5min' | 'last10min' | 'last1hour' | 'custom' | 'all';
|
|
2
|
+
|
|
3
|
+
export interface TimeRange {
|
|
4
|
+
preset: TimeRangePreset;
|
|
5
|
+
start?: number;
|
|
6
|
+
end?: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface CorrelationIdMetadata {
|
|
10
|
+
correlation_id: string;
|
|
11
|
+
first_seen: number;
|
|
12
|
+
artifact_count: number;
|
|
13
|
+
run_count: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface FilterFacets {
|
|
17
|
+
artifactTypes: string[];
|
|
18
|
+
producers: string[];
|
|
19
|
+
tags: string[];
|
|
20
|
+
visibilities: string[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface ArtifactSummary {
|
|
24
|
+
total: number;
|
|
25
|
+
by_type: Record<string, number>;
|
|
26
|
+
by_producer: Record<string, number>;
|
|
27
|
+
by_visibility: Record<string, number>;
|
|
28
|
+
tag_counts: Record<string, number>;
|
|
29
|
+
earliest_created_at: string | null;
|
|
30
|
+
latest_created_at: string | null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface FilterSnapshot {
|
|
34
|
+
correlationId: string | null;
|
|
35
|
+
timeRange: TimeRange;
|
|
36
|
+
artifactTypes: string[];
|
|
37
|
+
producers: string[];
|
|
38
|
+
tags: string[];
|
|
39
|
+
visibility: string[];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface SavedFilterMeta {
|
|
43
|
+
filter_id: string;
|
|
44
|
+
name: string;
|
|
45
|
+
created_at: number;
|
|
46
|
+
filters: FilterSnapshot;
|
|
47
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Legacy types (still used during migration for events, WebSocket handlers)
|
|
2
|
+
export interface Message {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
payload: any;
|
|
6
|
+
timestamp: number;
|
|
7
|
+
correlationId: string;
|
|
8
|
+
producedBy: string;
|
|
9
|
+
tags?: string[];
|
|
10
|
+
visibilityKind?: string;
|
|
11
|
+
partitionKey?: string | null;
|
|
12
|
+
version?: number;
|
|
13
|
+
isStreaming?: boolean;
|
|
14
|
+
streamingText?: string;
|
|
15
|
+
consumedBy?: string[];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// New backend API types (Phase 1 - Spec 002)
|
|
19
|
+
export interface GraphRequest {
|
|
20
|
+
viewMode: 'agent' | 'blackboard';
|
|
21
|
+
filters: GraphFilters;
|
|
22
|
+
options?: GraphRequestOptions;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface GraphFilters {
|
|
26
|
+
correlation_id?: string | null;
|
|
27
|
+
time_range: TimeRangeFilter;
|
|
28
|
+
artifactTypes: string[];
|
|
29
|
+
producers: string[];
|
|
30
|
+
tags: string[];
|
|
31
|
+
visibility: string[];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface TimeRangeFilter {
|
|
35
|
+
preset: 'last10min' | 'last5min' | 'last1hour' | 'all' | 'custom';
|
|
36
|
+
start?: string | null;
|
|
37
|
+
end?: string | null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface GraphRequestOptions {
|
|
41
|
+
include_statistics?: boolean;
|
|
42
|
+
label_offset_strategy?: 'stack' | 'none';
|
|
43
|
+
limit?: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface GraphSnapshot {
|
|
47
|
+
generatedAt: string;
|
|
48
|
+
viewMode: 'agent' | 'blackboard';
|
|
49
|
+
filters: GraphFilters;
|
|
50
|
+
nodes: GraphNode[];
|
|
51
|
+
edges: GraphEdge[];
|
|
52
|
+
statistics: GraphStatistics | null;
|
|
53
|
+
totalArtifacts: number;
|
|
54
|
+
truncated: boolean;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface GraphNode {
|
|
58
|
+
id: string;
|
|
59
|
+
type: 'agent' | 'message';
|
|
60
|
+
data: Record<string, any>;
|
|
61
|
+
position: { x: number; y: number };
|
|
62
|
+
hidden: boolean;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface GraphEdge {
|
|
66
|
+
id: string;
|
|
67
|
+
source: string;
|
|
68
|
+
target: string;
|
|
69
|
+
type: 'message_flow' | 'transformation';
|
|
70
|
+
label?: string | null;
|
|
71
|
+
data: Record<string, any>;
|
|
72
|
+
markerEnd?: { type: string; width: number; height: number };
|
|
73
|
+
hidden: boolean;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface GraphStatistics {
|
|
77
|
+
producedByAgent: Record<string, GraphAgentMetrics>;
|
|
78
|
+
consumedByAgent: Record<string, GraphAgentMetrics>;
|
|
79
|
+
artifactSummary: ArtifactSummary;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface GraphAgentMetrics {
|
|
83
|
+
total: number;
|
|
84
|
+
byType: Record<string, number>;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface ArtifactSummary {
|
|
88
|
+
total: number;
|
|
89
|
+
by_type: Record<string, number>;
|
|
90
|
+
by_producer: Record<string, number>;
|
|
91
|
+
by_visibility: Record<string, number>;
|
|
92
|
+
tag_counts: Record<string, number>;
|
|
93
|
+
earliest_created_at: string;
|
|
94
|
+
latest_created_at: string;
|
|
95
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ModuleInstance {
|
|
2
|
+
id: string; // unique instance ID
|
|
3
|
+
type: string; // module definition ID
|
|
4
|
+
position: { x: number; y: number };
|
|
5
|
+
size: { width: number; height: number };
|
|
6
|
+
visible: boolean;
|
|
7
|
+
maximized?: boolean;
|
|
8
|
+
preMaximizePosition?: { x: number; y: number };
|
|
9
|
+
preMaximizeSize?: { width: number; height: number };
|
|
10
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Terminal theme format matching TOML structure from src/flock/themes/
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export interface TerminalColors {
|
|
8
|
+
black: string;
|
|
9
|
+
red: string;
|
|
10
|
+
green: string;
|
|
11
|
+
yellow: string;
|
|
12
|
+
blue: string;
|
|
13
|
+
magenta: string;
|
|
14
|
+
cyan: string;
|
|
15
|
+
white: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface PrimaryColors {
|
|
19
|
+
background: string;
|
|
20
|
+
foreground: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface SelectionColors {
|
|
24
|
+
background: string;
|
|
25
|
+
text: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface CursorColors {
|
|
29
|
+
cursor: string;
|
|
30
|
+
text: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface ThemeColors {
|
|
34
|
+
primary: PrimaryColors;
|
|
35
|
+
normal: TerminalColors;
|
|
36
|
+
bright: TerminalColors;
|
|
37
|
+
selection: SelectionColors;
|
|
38
|
+
cursor: CursorColors;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface TerminalTheme {
|
|
42
|
+
name: string;
|
|
43
|
+
colors: ThemeColors;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface ThemeListResponse {
|
|
47
|
+
themes: string[];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface ThemeDataResponse {
|
|
51
|
+
name: string;
|
|
52
|
+
data: {
|
|
53
|
+
colors: ThemeColors;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ArtifactListItem } from '../services/api';
|
|
2
|
+
import type { Message } from '../types/graph';
|
|
3
|
+
|
|
4
|
+
export function mapArtifactToMessage(item: ArtifactListItem): Message {
|
|
5
|
+
const consumedBy =
|
|
6
|
+
item.consumed_by ??
|
|
7
|
+
(item.consumptions ? Array.from(new Set(item.consumptions.map((record) => record.consumer))) : []);
|
|
8
|
+
|
|
9
|
+
return {
|
|
10
|
+
id: item.id,
|
|
11
|
+
type: item.type,
|
|
12
|
+
payload: item.payload,
|
|
13
|
+
timestamp: new Date(item.created_at).getTime(),
|
|
14
|
+
correlationId: item.correlation_id ?? '',
|
|
15
|
+
producedBy: item.produced_by,
|
|
16
|
+
tags: item.tags || [],
|
|
17
|
+
visibilityKind: item.visibility_kind || item.visibility?.kind || 'Unknown',
|
|
18
|
+
partitionKey: item.partition_key ?? null,
|
|
19
|
+
version: item.version ?? 1,
|
|
20
|
+
isStreaming: false,
|
|
21
|
+
streamingText: '',
|
|
22
|
+
consumedBy,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Message } from '../types/graph';
|
|
2
|
+
|
|
3
|
+
// UI Optimization Migration (Phase 4.1 - Spec 002): OLD Phase 1 mock data (unused)
|
|
4
|
+
// Kept for potential future testing, but Agent type no longer exists
|
|
5
|
+
type LegacyAgent = {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
status: string;
|
|
9
|
+
subscriptions: string[];
|
|
10
|
+
lastActive: number;
|
|
11
|
+
sentCount: number;
|
|
12
|
+
recvCount: number;
|
|
13
|
+
position: { x: number; y: number };
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const mockAgents: LegacyAgent[] = [
|
|
17
|
+
{
|
|
18
|
+
id: 'movie',
|
|
19
|
+
name: 'movie',
|
|
20
|
+
status: 'idle',
|
|
21
|
+
subscriptions: [],
|
|
22
|
+
lastActive: Date.now() - 5000,
|
|
23
|
+
sentCount: 3,
|
|
24
|
+
recvCount: 0,
|
|
25
|
+
position: { x: 100, y: 100 },
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: 'tagline',
|
|
29
|
+
name: 'tagline',
|
|
30
|
+
status: 'running',
|
|
31
|
+
subscriptions: ['Movie'],
|
|
32
|
+
lastActive: Date.now() - 2000,
|
|
33
|
+
sentCount: 2,
|
|
34
|
+
recvCount: 3,
|
|
35
|
+
position: { x: 400, y: 100 },
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'reviewer',
|
|
39
|
+
name: 'reviewer',
|
|
40
|
+
status: 'idle',
|
|
41
|
+
subscriptions: ['Tagline'],
|
|
42
|
+
lastActive: Date.now() - 1000,
|
|
43
|
+
sentCount: 0,
|
|
44
|
+
recvCount: 2,
|
|
45
|
+
position: { x: 700, y: 100 },
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
export const mockMessages: Message[] = [
|
|
50
|
+
{
|
|
51
|
+
id: 'msg-1',
|
|
52
|
+
type: 'Movie',
|
|
53
|
+
payload: { title: 'The Matrix', year: 1999, genre: 'Sci-Fi' },
|
|
54
|
+
timestamp: Date.now() - 10000,
|
|
55
|
+
correlationId: 'corr-123',
|
|
56
|
+
producedBy: 'movie',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 'msg-2',
|
|
60
|
+
type: 'Movie',
|
|
61
|
+
payload: { title: 'Inception', year: 2010, genre: 'Sci-Fi' },
|
|
62
|
+
timestamp: Date.now() - 8344,
|
|
63
|
+
correlationId: 'corr-123',
|
|
64
|
+
producedBy: 'movie',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: 'msg-3',
|
|
68
|
+
type: 'Movie',
|
|
69
|
+
payload: { title: 'Interstellar', year: 2014, genre: 'Sci-Fi' },
|
|
70
|
+
timestamp: Date.now() - 6000,
|
|
71
|
+
correlationId: 'corr-123',
|
|
72
|
+
producedBy: 'movie',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'msg-4',
|
|
76
|
+
type: 'Tagline',
|
|
77
|
+
payload: { movie: 'The Matrix', tagline: 'Reality is not what it seems' },
|
|
78
|
+
timestamp: Date.now() - 5000,
|
|
79
|
+
correlationId: 'corr-123',
|
|
80
|
+
producedBy: 'tagline',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'msg-5',
|
|
84
|
+
type: 'Tagline',
|
|
85
|
+
payload: { movie: 'Inception', tagline: 'Your mind is the scene of the crime' },
|
|
86
|
+
timestamp: Date.now() - 3000,
|
|
87
|
+
correlationId: 'corr-123',
|
|
88
|
+
producedBy: 'tagline',
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
export function initializeMockData() {
|
|
93
|
+
// This will be called from main.tsx to populate stores
|
|
94
|
+
return {
|
|
95
|
+
agents: mockAgents,
|
|
96
|
+
messages: mockMessages,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function measureRenderTime(componentName: string, startMark: string, endMark: string) {
|
|
2
|
+
performance.mark(endMark);
|
|
3
|
+
const measure = performance.measure(
|
|
4
|
+
`${componentName}-render`,
|
|
5
|
+
startMark,
|
|
6
|
+
endMark
|
|
7
|
+
);
|
|
8
|
+
console.log(`[Performance] ${componentName} render time: ${measure.duration.toFixed(2)}ms`);
|
|
9
|
+
return measure.duration;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function startRenderMeasure(componentName: string) {
|
|
13
|
+
const markName = `${componentName}-start`;
|
|
14
|
+
performance.mark(markName);
|
|
15
|
+
return markName;
|
|
16
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
|
2
|
+
|
|
3
|
+
interface ImportMetaEnv {
|
|
4
|
+
readonly VITE_WS_URL?: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
interface ImportMeta {
|
|
8
|
+
readonly env: ImportMetaEnv;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
declare const __BUILD_TIMESTAMP__: string;
|
|
12
|
+
declare const __BUILD_HASH__: string;
|
|
13
|
+
|
|
14
|
+
declare module '*.module.css' {
|
|
15
|
+
const classes: { [key: string]: string };
|
|
16
|
+
export default classes;
|
|
17
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"useDefineForClassFields": true,
|
|
5
|
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
6
|
+
"module": "ESNext",
|
|
7
|
+
"skipLibCheck": true,
|
|
8
|
+
|
|
9
|
+
/* Bundler mode */
|
|
10
|
+
"moduleResolution": "bundler",
|
|
11
|
+
"allowImportingTsExtensions": true,
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"noEmit": true,
|
|
15
|
+
"jsx": "react-jsx",
|
|
16
|
+
|
|
17
|
+
/* Linting */
|
|
18
|
+
"strict": true,
|
|
19
|
+
"noUnusedLocals": true,
|
|
20
|
+
"noUnusedParameters": true,
|
|
21
|
+
"noFallthroughCasesInSwitch": true,
|
|
22
|
+
"noUncheckedIndexedAccess": true,
|
|
23
|
+
"types": ["vitest/globals", "@testing-library/jest-dom"]
|
|
24
|
+
},
|
|
25
|
+
"include": ["src"],
|
|
26
|
+
"references": [{ "path": "./tsconfig.node.json" }]
|
|
27
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { defineConfig } from 'vite';
|
|
2
|
+
import react from '@vitejs/plugin-react';
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
plugins: [react()],
|
|
6
|
+
define: {
|
|
7
|
+
__BUILD_TIMESTAMP__: JSON.stringify(new Date().toISOString()),
|
|
8
|
+
__BUILD_HASH__: JSON.stringify(
|
|
9
|
+
Date.now().toString(36) + Math.random().toString(36).substring(2, 9)
|
|
10
|
+
),
|
|
11
|
+
},
|
|
12
|
+
server: {
|
|
13
|
+
port: 5173,
|
|
14
|
+
proxy: {
|
|
15
|
+
'/api': {
|
|
16
|
+
target: 'http://localhost:8344',
|
|
17
|
+
changeOrigin: true,
|
|
18
|
+
},
|
|
19
|
+
'/ws': {
|
|
20
|
+
target: 'ws://localhost:8344',
|
|
21
|
+
ws: true,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from importlib.metadata import PackageNotFoundError, version
|
|
2
2
|
|
|
3
|
+
|
|
3
4
|
try:
|
|
4
|
-
__version__ = version("flock-
|
|
5
|
+
__version__ = version("flock-flow")
|
|
5
6
|
except PackageNotFoundError:
|
|
6
|
-
__version__ = "0.
|
|
7
|
+
__version__ = "0.5.0b"
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
def display_hummingbird():
|
|
@@ -38,7 +39,7 @@ def display_hummingbird():
|
|
|
38
39
|
""")
|
|
39
40
|
|
|
40
41
|
|
|
41
|
-
def init_console(clear_screen: bool = True, show_banner: bool = True):
|
|
42
|
+
def init_console(clear_screen: bool = True, show_banner: bool = True, model: str = ""):
|
|
42
43
|
"""Display the Flock banner."""
|
|
43
44
|
from rich.console import Console
|
|
44
45
|
from rich.syntax import Text
|
|
@@ -51,7 +52,7 @@ def init_console(clear_screen: bool = True, show_banner: bool = True):
|
|
|
51
52
|
│ ▒█▀▀▀ █░░ █▀▀█ █▀▀ █░█ │
|
|
52
53
|
│ ▒█▀▀▀ █░░ █░░█ █░░ █▀▄ │
|
|
53
54
|
│ ▒█░░░ ▀▀▀ ▀▀▀▀ ▀▀▀ ▀░▀ │
|
|
54
|
-
╰━━━━━━━━v{__version__}
|
|
55
|
+
╰━━━━━━━━v{__version__}━━━━━━━━━╯
|
|
55
56
|
🦆 🐤 🐧 🐓
|
|
56
57
|
""",
|
|
57
58
|
justify="center",
|
|
@@ -63,9 +64,12 @@ def init_console(clear_screen: bool = True, show_banner: bool = True):
|
|
|
63
64
|
if show_banner:
|
|
64
65
|
console.print(banner_text)
|
|
65
66
|
console.print(
|
|
66
|
-
"[italic]'
|
|
67
|
+
"[italic]'Raven'[/] milestone - [bold]white duck GmbH[/] - [cyan]https://whiteduck.de[/]\n"
|
|
67
68
|
)
|
|
68
69
|
|
|
70
|
+
if model:
|
|
71
|
+
console.print(f"[italic]Global Model:[/] {model}\n")
|
|
72
|
+
|
|
69
73
|
|
|
70
74
|
def display_banner_no_version():
|
|
71
75
|
"""Display the Flock banner."""
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"""Metaclass for automatic method tracing via OpenTelemetry."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
from flock.logging.trace_and_logged import _trace_filter_config, traced_and_logged
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# Check if auto-tracing is enabled via environment variable
|
|
12
|
+
ENABLE_AUTO_TRACE = os.getenv("FLOCK_AUTO_TRACE", "true").lower() in {"true", "1", "yes", "on"}
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# Parse trace filter configuration from environment variables
|
|
16
|
+
def _parse_trace_filters():
|
|
17
|
+
"""Parse FLOCK_TRACE_SERVICES and FLOCK_TRACE_IGNORE from environment."""
|
|
18
|
+
# Parse FLOCK_TRACE_SERVICES (whitelist)
|
|
19
|
+
services_env = os.getenv("FLOCK_TRACE_SERVICES", "")
|
|
20
|
+
if services_env:
|
|
21
|
+
try:
|
|
22
|
+
services_list = json.loads(services_env)
|
|
23
|
+
if isinstance(services_list, list):
|
|
24
|
+
# Store as lowercase set for case-insensitive matching
|
|
25
|
+
_trace_filter_config.services = {
|
|
26
|
+
s.lower() for s in services_list if isinstance(s, str)
|
|
27
|
+
}
|
|
28
|
+
except (json.JSONDecodeError, ValueError):
|
|
29
|
+
print(f"Warning: Invalid FLOCK_TRACE_SERVICES format: {services_env}")
|
|
30
|
+
|
|
31
|
+
# Parse FLOCK_TRACE_IGNORE (blacklist)
|
|
32
|
+
ignore_env = os.getenv("FLOCK_TRACE_IGNORE", "")
|
|
33
|
+
if ignore_env:
|
|
34
|
+
try:
|
|
35
|
+
ignore_list = json.loads(ignore_env)
|
|
36
|
+
if isinstance(ignore_list, list):
|
|
37
|
+
_trace_filter_config.ignore_operations = {
|
|
38
|
+
op for op in ignore_list if isinstance(op, str)
|
|
39
|
+
}
|
|
40
|
+
except (json.JSONDecodeError, ValueError):
|
|
41
|
+
print(f"Warning: Invalid FLOCK_TRACE_IGNORE format: {ignore_env}")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# Auto-configure logging and telemetry when auto-tracing is enabled
|
|
45
|
+
if ENABLE_AUTO_TRACE:
|
|
46
|
+
# Configure trace filters first
|
|
47
|
+
_parse_trace_filters()
|
|
48
|
+
from flock.logging.logging import configure_logging
|
|
49
|
+
from flock.logging.telemetry import TelemetryConfig
|
|
50
|
+
|
|
51
|
+
# Configure logging to DEBUG
|
|
52
|
+
configure_logging(
|
|
53
|
+
flock_level="DEBUG",
|
|
54
|
+
external_level="WARNING",
|
|
55
|
+
specific_levels={
|
|
56
|
+
"tools": "DEBUG",
|
|
57
|
+
"agent": "DEBUG",
|
|
58
|
+
"flock": "DEBUG",
|
|
59
|
+
},
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
# Initialize telemetry for OTEL trace context
|
|
63
|
+
# Only enable exporters if explicitly configured via env vars
|
|
64
|
+
enable_file_export = os.getenv("FLOCK_TRACE_FILE", "false").lower() in {
|
|
65
|
+
"true",
|
|
66
|
+
"1",
|
|
67
|
+
"yes",
|
|
68
|
+
"on",
|
|
69
|
+
}
|
|
70
|
+
enable_otlp_export = os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT") is not None
|
|
71
|
+
|
|
72
|
+
# Parse TTL (Time To Live) for trace cleanup
|
|
73
|
+
trace_ttl_days = None
|
|
74
|
+
ttl_env = os.getenv("FLOCK_TRACE_TTL_DAYS", "")
|
|
75
|
+
if ttl_env:
|
|
76
|
+
try:
|
|
77
|
+
trace_ttl_days = int(ttl_env)
|
|
78
|
+
except ValueError:
|
|
79
|
+
print(f"Warning: Invalid FLOCK_TRACE_TTL_DAYS value: {ttl_env}")
|
|
80
|
+
|
|
81
|
+
telemetry_config = TelemetryConfig(
|
|
82
|
+
service_name="flock-auto-trace",
|
|
83
|
+
enable_jaeger=False,
|
|
84
|
+
enable_file=False, # Disable file export, use DuckDB instead
|
|
85
|
+
enable_sql=False,
|
|
86
|
+
enable_duckdb=enable_file_export, # Use DuckDB when file export is enabled
|
|
87
|
+
enable_otlp=enable_otlp_export,
|
|
88
|
+
otlp_endpoint=os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317"),
|
|
89
|
+
local_logging_dir=".flock",
|
|
90
|
+
duckdb_name="traces.duckdb",
|
|
91
|
+
duckdb_ttl_days=trace_ttl_days,
|
|
92
|
+
)
|
|
93
|
+
telemetry_config.setup_tracing()
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class AutoTracedMeta(type):
|
|
97
|
+
"""Metaclass that automatically applies @traced_and_logged to all public methods.
|
|
98
|
+
|
|
99
|
+
This enables automatic OpenTelemetry span creation and debug logging for all
|
|
100
|
+
method calls on classes using this metaclass.
|
|
101
|
+
|
|
102
|
+
Control via environment variable:
|
|
103
|
+
FLOCK_AUTO_TRACE=true - Enable auto-tracing (default)
|
|
104
|
+
FLOCK_AUTO_TRACE=false - Disable auto-tracing
|
|
105
|
+
|
|
106
|
+
Example:
|
|
107
|
+
class Agent(metaclass=AutoTracedMeta):
|
|
108
|
+
def execute(self, ctx, artifacts):
|
|
109
|
+
# Automatically traced and logged
|
|
110
|
+
...
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
def __new__(mcs, name, bases, namespace, **kwargs):
|
|
114
|
+
"""Create a new class with auto-traced methods."""
|
|
115
|
+
if not ENABLE_AUTO_TRACE:
|
|
116
|
+
# If auto-tracing is disabled, return the class unchanged
|
|
117
|
+
return super().__new__(mcs, name, bases, namespace, **kwargs)
|
|
118
|
+
|
|
119
|
+
# Apply @traced_and_logged to all public methods
|
|
120
|
+
for attr_name, attr_value in list(namespace.items()):
|
|
121
|
+
# Skip private methods (starting with _)
|
|
122
|
+
if attr_name.startswith("_"):
|
|
123
|
+
continue
|
|
124
|
+
|
|
125
|
+
# Skip non-callables
|
|
126
|
+
if not callable(attr_value):
|
|
127
|
+
continue
|
|
128
|
+
|
|
129
|
+
# Skip if already traced
|
|
130
|
+
if getattr(attr_value, "_traced", False):
|
|
131
|
+
continue
|
|
132
|
+
|
|
133
|
+
# Skip if explicitly marked to skip tracing
|
|
134
|
+
if getattr(attr_value, "_skip_trace", False):
|
|
135
|
+
continue
|
|
136
|
+
|
|
137
|
+
# Apply the decorator
|
|
138
|
+
traced_func = traced_and_logged(attr_value)
|
|
139
|
+
traced_func._traced = True # Mark as traced to avoid double-wrapping
|
|
140
|
+
namespace[attr_name] = traced_func
|
|
141
|
+
|
|
142
|
+
return super().__new__(mcs, name, bases, namespace, **kwargs)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def skip_trace(func):
|
|
146
|
+
"""Decorator to mark a method to skip auto-tracing.
|
|
147
|
+
|
|
148
|
+
Use this for methods that are called very frequently or are not
|
|
149
|
+
interesting for debugging purposes.
|
|
150
|
+
|
|
151
|
+
Example:
|
|
152
|
+
class Agent(metaclass=AutoTracedMeta):
|
|
153
|
+
@skip_trace
|
|
154
|
+
def _internal_helper(self):
|
|
155
|
+
# Not traced
|
|
156
|
+
...
|
|
157
|
+
"""
|
|
158
|
+
func._skip_trace = True
|
|
159
|
+
return func
|
|
@@ -4,14 +4,13 @@ import os
|
|
|
4
4
|
import pathlib
|
|
5
5
|
import re
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
theme_folder = pathlib.Path(__file__).parent.parent.parent / "themes"
|
|
8
9
|
|
|
9
10
|
if not theme_folder.exists():
|
|
10
11
|
raise FileNotFoundError(f"Theme folder not found: {theme_folder}")
|
|
11
12
|
|
|
12
|
-
theme_files = [
|
|
13
|
-
pathlib.Path(f.path).stem for f in os.scandir(theme_folder) if f.is_file()
|
|
14
|
-
]
|
|
13
|
+
theme_files = [pathlib.Path(f.path).stem for f in os.scandir(theme_folder) if f.is_file()]
|
|
15
14
|
|
|
16
15
|
theme_enum_entries = {}
|
|
17
16
|
for theme in theme_files:
|