flock-core 0.5.0b65__tar.gz → 0.5.0b70__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.0b65 → flock_core-0.5.0b70}/.gitignore +1 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/AGENTS.md +29 -0
- flock_core-0.5.0b65/README.md → flock_core-0.5.0b70/PKG-INFO +56 -0
- flock_core-0.5.0b65/PKG-INFO → flock_core-0.5.0b70/README.md +24 -31
- flock_core-0.5.0b70/docs/guides/persistent-blackboard.md +92 -0
- flock_core-0.5.0b70/docs/internal/sqlite-blackboard-store/README.md +24 -0
- flock_core-0.5.0b70/docs/internal/sqlite-blackboard-store/dashboard-playwright-mcp.md +44 -0
- flock_core-0.5.0b70/docs/internal/sqlite-blackboard-store/domain.md +23 -0
- flock_core-0.5.0b70/docs/internal/sqlite-blackboard-store/interfaces.md +25 -0
- flock_core-0.5.0b70/docs/internal/sqlite-blackboard-store/patterns.md +44 -0
- flock_core-0.5.0b70/docs/specs/001-sqlite-blackboard-store/PLAN.md +169 -0
- flock_core-0.5.0b70/docs/specs/001-sqlite-blackboard-store/PRD.md +146 -0
- flock_core-0.5.0b70/examples/00-clean/01-the-declarative-way/01_declarative_pizza.py +38 -0
- flock_core-0.5.0b70/examples/00-clean/01-the-declarative-way/02_input_and_output.py +96 -0
- flock_core-0.5.0b70/examples/00-clean/01-the-declarative-way/03_mcp_and_tools.py +106 -0
- flock_core-0.5.0b70/examples/00-clean/02-the-blackboard/01_persistent_pizza.py +68 -0
- flock_core-0.5.0b70/examples/00-clean/03-the-dashboard/01_declarative_pizza.py +32 -0
- flock_core-0.5.0b70/examples/00-clean/03-the-dashboard/02-dashboard-edge-cases.py +57 -0
- flock_core-0.5.0b70/examples/00-clean/03-the-dashboard/03-scale-test-100-agents.py +75 -0
- flock_core-0.5.0b70/examples/00-clean/03-the-dashboard/04_persistent_pizza_dashboard.py +62 -0
- flock_core-0.5.0b70/examples/00-clean/05-claudes-workshop/lesson_01_code_detective.py +67 -0
- flock_core-0.5.0b70/examples/00-clean/05-claudes-workshop/lesson_02_band_formation.py +93 -0
- flock_core-0.5.0b70/examples/00-clean/05-claudes-workshop/lesson_03_web_detective.py +102 -0
- flock_core-0.5.0b70/examples/00-clean/05-claudes-workshop/lesson_04_debate_club.py +98 -0
- flock_core-0.5.0b70/examples/00-clean/05-claudes-workshop/lesson_05_tracing_detective.py +100 -0
- flock_core-0.5.0b70/examples/00-clean/05-claudes-workshop/lesson_06_secret_agents.py +111 -0
- flock_core-0.5.0b70/examples/00-clean/05-claudes-workshop/lesson_07_news_agency.py +134 -0
- flock_core-0.5.0b70/examples/00-clean/06-readme/01-BugDiagnosis.py +55 -0
- flock_core-0.5.0b70/examples/00-clean/README.md +44 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/01-the-declarative-way/01_declarative_pizza.py +0 -1
- flock_core-0.5.0b70/examples/02-the-blackboard/01_persistent_pizza.py +114 -0
- flock_core-0.5.0b70/examples/03-the-dashboard/04_persistent_pizza_dashboard.py +106 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/pyproject.toml +2 -1
- flock_core-0.5.0b70/src/flock/cli.py +147 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/engines/dspy_engine.py +40 -4
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/examples.py +4 -1
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/README.md +15 -1
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/package-lock.json +2 -2
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/package.json +1 -1
- flock_core-0.5.0b70/src/flock/frontend/src/App.tsx +147 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/__tests__/e2e/critical-scenarios.test.tsx +4 -5
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx +7 -3
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/ArtifactTypeFilter.tsx +21 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/FilterFlyout.module.css +104 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/FilterFlyout.tsx +80 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/FilterPills.module.css +220 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/FilterPills.test.tsx +189 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/FilterPills.tsx +143 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/ProducerFilter.tsx +21 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/SavedFiltersControl.module.css +60 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/SavedFiltersControl.test.tsx +158 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/SavedFiltersControl.tsx +159 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/TagFilter.tsx +21 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/filters/TimeRangeFilter.module.css +24 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/filters/TimeRangeFilter.tsx +6 -1
- flock_core-0.5.0b70/src/flock/frontend/src/components/filters/VisibilityFilter.tsx +21 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/graph/GraphCanvas.tsx +24 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/layout/DashboardLayout.css +13 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/layout/DashboardLayout.tsx +8 -24
- flock_core-0.5.0b70/src/flock/frontend/src/components/modules/HistoricalArtifactsModule.module.css +288 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx +460 -0
- flock_core-0.5.0b70/src/flock/frontend/src/components/modules/HistoricalArtifactsModuleWrapper.tsx +13 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/modules/ModuleRegistry.ts +7 -1
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/modules/registerModules.ts +9 -10
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/hooks/useModules.ts +11 -1
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/services/api.ts +140 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/services/indexeddb.ts +56 -2
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/services/websocket.ts +129 -0
- flock_core-0.5.0b70/src/flock/frontend/src/store/filterStore.test.ts +162 -0
- flock_core-0.5.0b70/src/flock/frontend/src/store/filterStore.ts +250 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/store/graphStore.test.ts +19 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/store/graphStore.ts +166 -27
- flock_core-0.5.0b70/src/flock/frontend/src/types/filters.ts +47 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/types/graph.ts +7 -0
- flock_core-0.5.0b70/src/flock/frontend/src/utils/artifacts.ts +24 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/orchestrator.py +23 -1
- flock_core-0.5.0b70/src/flock/service.py +277 -0
- flock_core-0.5.0b70/src/flock/store.py +1049 -0
- flock_core-0.5.0b70/tests/contract/test_artifact_storage_contract.py +139 -0
- flock_core-0.5.0b70/tests/integration/test_sqlite_store_integration.py +37 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_cli.py +45 -2
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_service_extended.py +152 -0
- flock_core-0.5.0b70/tests/test_store.py +388 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/uv.lock +15 -1
- flock_core-0.5.0b65/src/flock/cli.py +0 -75
- flock_core-0.5.0b65/src/flock/frontend/src/App.tsx +0 -79
- flock_core-0.5.0b65/src/flock/frontend/src/components/filters/FilterBar.module.css +0 -29
- flock_core-0.5.0b65/src/flock/frontend/src/components/filters/FilterBar.test.tsx +0 -133
- flock_core-0.5.0b65/src/flock/frontend/src/components/filters/FilterBar.tsx +0 -33
- flock_core-0.5.0b65/src/flock/frontend/src/components/filters/FilterPills.module.css +0 -79
- flock_core-0.5.0b65/src/flock/frontend/src/components/filters/FilterPills.test.tsx +0 -173
- flock_core-0.5.0b65/src/flock/frontend/src/components/filters/FilterPills.tsx +0 -67
- flock_core-0.5.0b65/src/flock/frontend/src/components/modules/EventLogModule.test.tsx +0 -401
- flock_core-0.5.0b65/src/flock/frontend/src/components/modules/EventLogModule.tsx +0 -396
- flock_core-0.5.0b65/src/flock/frontend/src/components/modules/EventLogModuleWrapper.tsx +0 -17
- flock_core-0.5.0b65/src/flock/frontend/src/store/filterStore.test.ts +0 -242
- flock_core-0.5.0b65/src/flock/frontend/src/store/filterStore.ts +0 -103
- flock_core-0.5.0b65/src/flock/frontend/src/types/filters.ts +0 -14
- flock_core-0.5.0b65/src/flock/service.py +0 -140
- flock_core-0.5.0b65/src/flock/store.py +0 -102
- flock_core-0.5.0b65/tests/contract/test_artifact_storage_contract.py +0 -130
- flock_core-0.5.0b65/tests/test_store.py +0 -212
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/.devcontainer/devcontainer.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/.envtemplate +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/.github/workflows/deploy-whiteduck-pypi.yml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/.github/workflows/quality.yml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/.pre-commit-config.yaml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/.python-version +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/.vscode/settings.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/AGENTS.md.backup +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/CONTRIBUTING.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/LICENSE +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/ROADMAP.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/USECASES.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/about/changelog.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/about/contributing.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/about/roadmap.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/assets/images/bug_diagnosis.png +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/assets/images/flock_ui_1.png +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/assets/images/flock_ui_agent_view.png +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/assets/images/flock_ui_blackboard_view.png +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/assets/images/pizza.png +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/assets/images/trace_1.png +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/assets/images/trace_2.png +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/assets/images/trace_3.png +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/bugfixes/websocket-streaming-deadlock-fix.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/community/index.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/examples/index.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/getting-started/concepts.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/getting-started/index.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/getting-started/installation.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/getting-started/quick-start.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/agents.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/blackboard.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/components.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/dashboard.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/index.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/mcp-roots.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/patterns.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/testing.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/tracing/auto-tracing.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/tracing/how_to_use_tracing_effectively.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/tracing/index.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/tracing/trace-module.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/tracing/tracing-production.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/tracing/tracing-quickstart.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/tracing/unified-tracing.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/use-cases.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/guides/visibility.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/IMPLEMENTATION_SUMMARY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/PRE_COMMIT_HOOKS.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/UNIFIED_TRACING_DELIVERY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/VERSIONING.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/ai-agents/architecture.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/ai-agents/common-tasks.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/ai-agents/dependencies.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/ai-agents/development.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/ai-agents/frontend.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/design_and_goals/landscape_analysis.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/design_and_goals/motivation.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/design_and_goals/review.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/design_and_goals/technical_design.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/ANALYSIS_SUMMARY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/AUDIT_QUICKREF.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/BROKEN_LINKS_REPORT.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/DOCUMENTATION_ANALYSIS.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/DOCUMENTATION_TRANSFORMATION_CHECKLIST.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/DOCUMENTATION_TRANSFORMATION_ROADMAP.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/MKDOCS_BEST_PRACTICES_RESEARCH.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/MKDOCS_QUICK_REFERENCE.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/PHASE_1_COMPLETION_SUMMARY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/PHASE_1_FINAL_REPORT.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/PHASE_2_COMPLETION_SUMMARY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/PHASE_3_COMPLETION_SUMMARY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/examples-analysis.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/examples-quick-reference.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/documentation-analysis/examples-structure-diagram.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/domain/test-improvement-roadmap.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/implementation-summary-server-specific-mounts.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/index.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/mcp-server-config-typeddict.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/patterns/auto-layout-auto-zoom-removal.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/patterns/core-architecture.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/patterns/development-workflow.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/patterns/project-configuration.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/patterns/repository-structure.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/INDEX.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/RANKED_RESEARCH_AGENDA.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/benchmarks/BENCHMARK_DELIVERABLES.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/benchmarks/BENCHMARK_EXECUTIVE_SUMMARY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/benchmarks/BENCHMARK_RESEARCH.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/benchmarks/BENCHMARK_VISUAL_SUMMARY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/benchmarks/QUICK_START_BENCHMARKS.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/benchmarks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/01_contract_first_reliability.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/02_event_parallelism_batching.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/03_mcp_native_eval.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/04_formal_liveness_safety.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/05_stigmergic_patterns.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/06_observability_driven_scheduling.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/07_visibility_multitenant_infoflow.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/08_structured_generation_adversarial_schemas.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/09_web_agent_orchestration_bench.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/09x_alternatives_refs.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/10_distributed_blackboard_kafka.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/11_cost_optimal_bestof_cascade.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/12_human_in_the_loop_guardrails.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/13_trace_dataset_compression.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/14_mcp_latency_caching.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/15_market_bidding_blackboard.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/01_contract_first_reliability/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/01_contract_first_reliability/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/01_contract_first_reliability/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/01_contract_first_reliability/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/01_contract_first_reliability/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/01_contract_first_reliability/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/01_contract_first_reliability/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/01_contract_first_reliability/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/01_contract_first_reliability/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/01_contract_first_reliability/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/02_event_parallelism_batching/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/02_event_parallelism_batching/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/02_event_parallelism_batching/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/02_event_parallelism_batching/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/02_event_parallelism_batching/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/02_event_parallelism_batching/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/02_event_parallelism_batching/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/02_event_parallelism_batching/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/02_event_parallelism_batching/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/02_event_parallelism_batching/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/03_mcp_native_eval/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/03_mcp_native_eval/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/03_mcp_native_eval/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/03_mcp_native_eval/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/03_mcp_native_eval/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/03_mcp_native_eval/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/03_mcp_native_eval/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/03_mcp_native_eval/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/03_mcp_native_eval/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/03_mcp_native_eval/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/04_formal_liveness_safety/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/04_formal_liveness_safety/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/04_formal_liveness_safety/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/04_formal_liveness_safety/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/04_formal_liveness_safety/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/04_formal_liveness_safety/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/04_formal_liveness_safety/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/04_formal_liveness_safety/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/04_formal_liveness_safety/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/04_formal_liveness_safety/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/05_stigmergic_patterns/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/05_stigmergic_patterns/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/05_stigmergic_patterns/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/05_stigmergic_patterns/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/05_stigmergic_patterns/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/05_stigmergic_patterns/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/05_stigmergic_patterns/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/05_stigmergic_patterns/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/05_stigmergic_patterns/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/05_stigmergic_patterns/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/06_observability_driven_scheduling/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/06_observability_driven_scheduling/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/06_observability_driven_scheduling/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/06_observability_driven_scheduling/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/06_observability_driven_scheduling/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/06_observability_driven_scheduling/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/06_observability_driven_scheduling/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/06_observability_driven_scheduling/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/06_observability_driven_scheduling/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/06_observability_driven_scheduling/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/07_visibility_multitenant_infoflow/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/07_visibility_multitenant_infoflow/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/07_visibility_multitenant_infoflow/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/07_visibility_multitenant_infoflow/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/07_visibility_multitenant_infoflow/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/07_visibility_multitenant_infoflow/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/07_visibility_multitenant_infoflow/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/07_visibility_multitenant_infoflow/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/07_visibility_multitenant_infoflow/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/07_visibility_multitenant_infoflow/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/08_structured_generation_adversarial_schemas/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/08_structured_generation_adversarial_schemas/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/08_structured_generation_adversarial_schemas/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/08_structured_generation_adversarial_schemas/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/08_structured_generation_adversarial_schemas/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/08_structured_generation_adversarial_schemas/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/08_structured_generation_adversarial_schemas/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/08_structured_generation_adversarial_schemas/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/08_structured_generation_adversarial_schemas/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/08_structured_generation_adversarial_schemas/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/09_web_agent_orchestration_bench/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/09_web_agent_orchestration_bench/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/09_web_agent_orchestration_bench/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/09_web_agent_orchestration_bench/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/09_web_agent_orchestration_bench/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/09_web_agent_orchestration_bench/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/09_web_agent_orchestration_bench/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/09_web_agent_orchestration_bench/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/09_web_agent_orchestration_bench/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/09_web_agent_orchestration_bench/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/10_distributed_blackboard_kafka/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/10_distributed_blackboard_kafka/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/10_distributed_blackboard_kafka/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/10_distributed_blackboard_kafka/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/10_distributed_blackboard_kafka/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/10_distributed_blackboard_kafka/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/10_distributed_blackboard_kafka/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/10_distributed_blackboard_kafka/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/10_distributed_blackboard_kafka/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/10_distributed_blackboard_kafka/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/11_cost_optimal_bestof_cascade/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/11_cost_optimal_bestof_cascade/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/11_cost_optimal_bestof_cascade/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/11_cost_optimal_bestof_cascade/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/11_cost_optimal_bestof_cascade/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/11_cost_optimal_bestof_cascade/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/11_cost_optimal_bestof_cascade/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/11_cost_optimal_bestof_cascade/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/11_cost_optimal_bestof_cascade/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/11_cost_optimal_bestof_cascade/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/12_human_in_the_loop_guardrails/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/12_human_in_the_loop_guardrails/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/12_human_in_the_loop_guardrails/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/12_human_in_the_loop_guardrails/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/12_human_in_the_loop_guardrails/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/12_human_in_the_loop_guardrails/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/12_human_in_the_loop_guardrails/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/12_human_in_the_loop_guardrails/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/12_human_in_the_loop_guardrails/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/12_human_in_the_loop_guardrails/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/13_trace_dataset_compression/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/13_trace_dataset_compression/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/13_trace_dataset_compression/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/13_trace_dataset_compression/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/13_trace_dataset_compression/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/13_trace_dataset_compression/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/13_trace_dataset_compression/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/13_trace_dataset_compression/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/13_trace_dataset_compression/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/13_trace_dataset_compression/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/14_mcp_latency_caching/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/14_mcp_latency_caching/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/14_mcp_latency_caching/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/14_mcp_latency_caching/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/14_mcp_latency_caching/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/14_mcp_latency_caching/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/14_mcp_latency_caching/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/14_mcp_latency_caching/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/14_mcp_latency_caching/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/14_mcp_latency_caching/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/15_market_bidding_blackboard/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/15_market_bidding_blackboard/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/15_market_bidding_blackboard/configs/experiment.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/15_market_bidding_blackboard/data/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/15_market_bidding_blackboard/figures/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/15_market_bidding_blackboard/notebooks/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/15_market_bidding_blackboard/results/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/15_market_bidding_blackboard/scripts/analyze.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/15_market_bidding_blackboard/scripts/run.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/15_market_bidding_blackboard/scripts/run_local.sh +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/INDEX.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/_shared/analysis/queries.sql +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/_shared/harness/runner.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/boilerplate/_shared/scripts/analyze_template.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/extra_sources.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/kafka_implementation_plan.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/codex/needed_framework_implementation.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/emergence/EMERGENCE_RESEARCH_SUMMARY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/emergence/EMERGENT_BEHAVIOR_RESEARCH.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/emergence/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/emergence/emergence_toolkit.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/emergence/experiment_emergence_demo.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/formal-methods/FORMAL_METHODS_SUMMARY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/formal-methods/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/formal-methods/formal-methods-analysis.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/formal-methods/formal-methods-quick-ref.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/formal-methods/formal-verification-examples.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/observability/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/observability/observability_research_opportunities.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/orchestration/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/orchestration/RESEARCH_BLACKBOARD_ORCHESTRATION.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/orchestration/RESEARCH_EXAMPLES.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/research/orchestration/RESEARCH_SUMMARY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/specs/001-test-coverage-improvement/PLAN.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/specs/001-test-coverage-improvement/PRD.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/specs/001-test-coverage-improvement/SDD.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/troubleshooting/codex_bug_analysis.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/internal/troubleshooting/event-log-memory-leak-analysis.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/javascripts/extra.js +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/reference/api.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/reference/configuration.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/reference/index.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/stylesheets/extra.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/tags.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/troubleshooting/streaming-freeze-fix.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/troubleshooting/streaming-freeze-with-dashboard-fix.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/tutorials/advanced-patterns.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/tutorials/conditional-routing.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/tutorials/connect_with_ollama.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/tutorials/index.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/tutorials/multi-agent-workflow.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/tutorials/your-first-agent.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/docs/whiteducksoftware/versions.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/01-the-declarative-way/02_input_and_output.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/01-the-declarative-way/03_mcp_and_tools.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/01-the-declarative-way/04_mcp_roots.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/01-the-declarative-way/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/02-the-blackboard/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/03-the-dashboard/01_declarative_pizza.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/03-the-dashboard/02-dashboard-edge-cases.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/03-the-dashboard/03-scale-test-100-agents.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/03-the-dashboard/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/04-the-api/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/05-claudes-workshop/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/05-claudes-workshop/lesson_01_code_detective.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/05-claudes-workshop/lesson_02_band_formation.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/05-claudes-workshop/lesson_03_web_detective.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/05-claudes-workshop/lesson_04_debate_club.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/05-claudes-workshop/lesson_05_tracing_detective.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/05-claudes-workshop/lesson_06_secret_agents.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/05-claudes-workshop/lesson_07_news_agency.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/06-readme/01-BugDiagnosis.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/07-notebooks/Untitled-1.ipynb +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/examples/08-ollama/08_ollama_example.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/mkdocs.yml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/requirements.txt +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/scripts/build_dashboard.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/scripts/bump_version.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/scripts/check_version_bump.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/scripts/ensure_uv.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/scripts/gen_ref_pages.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/scripts/generate_llm_codebase.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/__init__.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/agent.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/api/themes.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/artifacts.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/components.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/dashboard/__init__.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/dashboard/collector.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/dashboard/events.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/dashboard/launcher.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/dashboard/service.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/dashboard/websocket.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/engines/__init__.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/docs/DESIGN_SYSTEM.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/index.html +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/__tests__/integration/graph-rendering.test.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/common/BuildInfo.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/common/EmptyState.module.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/common/EmptyState.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/common/ErrorBoundary.module.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/common/ErrorBoundary.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/common/KeyboardShortcutsDialog.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/common/LoadingSpinner.module.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/common/LoadingSpinner.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/controls/PublishControl.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/controls/PublishControl.test.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/controls/PublishControl.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/details/DetailWindowContainer.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/details/LiveOutputTab.test.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/details/LiveOutputTab.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/details/MessageHistoryTab.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/details/NodeDetailWindow.test.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/details/NodeDetailWindow.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/details/RunStatusTab.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/details/tabs.test.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/filters/CorrelationIDFilter.module.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/filters/CorrelationIDFilter.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/graph/AgentNode.test.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/graph/AgentNode.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/graph/MessageFlowEdge.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/graph/MessageNode.test.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/graph/MessageNode.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/graph/MiniMap.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/graph/TransformEdge.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/layout/Header.module.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/layout/Header.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/modules/JsonAttributeRenderer.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/modules/ModuleRegistry.test.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/modules/ModuleWindow.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/modules/TraceModuleJaeger.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/modules/TraceModuleJaegerWrapper.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/settings/AdvancedSettings.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/settings/AppearanceSettings.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/settings/GraphSettings.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/settings/MultiSelect.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/settings/SettingsPanel.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/settings/SettingsPanel.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/settings/ThemeSelector.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/components/settings/TracingSettings.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/hooks/useKeyboardShortcuts.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/hooks/useModulePersistence.test.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/hooks/useModulePersistence.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/hooks/usePersistence.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/main.tsx +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/services/indexeddb.test.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/services/layout.test.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/services/layout.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/services/themeApplicator.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/services/themeService.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/services/websocket.test.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/store/moduleStore.test.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/store/moduleStore.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/store/settingsStore.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/store/streamStore.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/store/uiStore.test.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/store/uiStore.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/store/wsStore.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/styles/index.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/styles/scrollbar.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/styles/variables.css +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/test/setup.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/types/modules.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/types/theme.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/utils/mockData.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/utils/performance.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/utils/transforms.test.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/utils/transforms.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/src/vite-env.d.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/tsconfig.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/tsconfig.node.json +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/vite.config.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/frontend/vitest.config.ts +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/helper/cli_helper.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/__init__.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/auto_trace.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/formatters/enum_builder.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/formatters/theme_builder.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/formatters/themed_formatter.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/formatters/themes.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/logging.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/span_middleware/baggage_span_processor.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/telemetry.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/telemetry_exporter/base_exporter.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/telemetry_exporter/duckdb_exporter.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/telemetry_exporter/file_exporter.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/telemetry_exporter/sqlite_exporter.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/logging/trace_and_logged.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/__init__.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/client.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/config.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/manager.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/servers/sse/__init__.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/servers/sse/flock_sse_server.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/servers/stdio/__init__.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/servers/stdio/flock_stdio_server.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/servers/streamable_http/__init__.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/servers/streamable_http/flock_streamable_http_server.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/servers/websockets/__init__.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/servers/websockets/flock_websocket_server.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/tool.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/types/__init__.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/types/callbacks.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/types/factories.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/types/handlers.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/types/types.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/util/__init__.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/mcp/util/helpers.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/registry.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/runtime.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/subscription.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/3024-day.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/3024-night.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/aardvark-blue.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/abernathy.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/adventure.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/adventuretime.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/afterglow.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/alabaster.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/alienblood.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/andromeda.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/apple-classic.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/apple-system-colors.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/arcoiris.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/argonaut copy.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/argonaut.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/arthur.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ateliersulphurpool.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/atom.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/atom_test.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/atomonelight.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/aurora.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ayu copy.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ayu-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ayu-mirage.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ayu.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/banana-blueberry.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/batman.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/belafonte-day.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/belafonte-night.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/birdsofparadise.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/blazer.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/blue-matrix.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/blueberrypie.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/bluedolphin.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/blulocodark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/blulocolight.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/borland.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/breeze.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/bright-lights.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/broadcast.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/brogrammer.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/builtin-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/builtin-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/builtin-pastel-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/builtin-solarized-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/builtin-solarized-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/builtin-tango-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/builtin-tango-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/c64.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/calamity.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/catppuccin-frappe.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/catppuccin-latte.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/catppuccin-macchiato.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/catppuccin-mocha.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/cga.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/chalk.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/chalkboard.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/challengerdeep.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/chester.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ciapre.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/clrs.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/cobalt-neon.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/cobalt2.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/coffee-theme.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/crayonponyfish.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/cutiepro.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/cyberdyne.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/cyberpunk.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/cyberpunkscarletprotocol.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/dark+.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/dark-pastel.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/darkermatrix.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/darkmatrix.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/darkside.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/dayfox.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/deep.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/desert.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/dimidium.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/dimmedmonokai.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/django.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/djangorebornagain.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/djangosmooth.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/doom-peacock.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/doomone.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/dotgov.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/dracula+.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/dracula.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/duckbones.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/duotone-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/earthsong.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/elemental.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/elementary.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/encom.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/espresso-libre.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/espresso.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/everblush.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/fahrenheit.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/fairyfloss.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/farmhouse-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/farmhouse-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/fideloper.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/firefly-traditional.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/firefoxdev.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/firewatch.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/fishtank.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/flat.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/flatland.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/flexoki-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/flexoki-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/floraverse.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/forestblue.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/framer.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/frontenddelight.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/funforrest.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/galaxy.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/galizur.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/github-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/github.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/glacier.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/grape.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/grass.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/grey-green.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/gruber-darker.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/gruvboxdark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/gruvboxdarkhard.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/gruvboxlight.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/guezwhoz.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/hacktober.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/hardcore.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/harper.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/hax0r-blue.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/hax0r-gr33n.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/hax0r-r3d.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/highway.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/hipster-green.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/hivacruz.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/homebrew.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/hopscotch.256.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/hopscotch.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/hurtado.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/hybrid.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ic-green-ppl.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ic-orange-ppl.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/iceberg-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/iceberg-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/idea.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/idletoes.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ir-black.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/iterm2-dark-background.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/iterm2-default.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/iterm2-light-background.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/iterm2-pastel-dark-background.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/iterm2-smoooooth.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/iterm2-solarized-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/iterm2-solarized-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/iterm2-tango-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/iterm2-tango-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/jackie-brown.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/japanesque.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/jellybeans.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/jetbrains-darcula.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/jubi.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/kanagawabones.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/kibble.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/kolorit.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/konsolas.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/kurokula.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/lab-fox.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/laser.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/later-this-evening.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/lavandula.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/liquidcarbon.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/liquidcarbontransparent.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/liquidcarbontransparentinverse.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/lovelace.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/man-page.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/mariana.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/material.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/materialdark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/materialdarker.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/materialdesigncolors.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/materialocean.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/mathias.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/matrix.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/medallion.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/mellifluous.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/midnight-in-mojave.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/mirage.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/misterioso.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/molokai.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/monalisa.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/monokai-remastered.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/monokai-soda.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/monokai-vivid.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/n0tch2k.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/neobones-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/neobones-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/neon.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/neopolitan.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/neutron.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/night-owlish-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/nightfox.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/nightlion-v1.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/nightlion-v2.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/niji.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/nocturnal-winter.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/nord-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/nord.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/novel.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/nvimdark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/nvimlight.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/obsidian.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ocean.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/oceanic-next.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/oceanicmaterial.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ollie.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/onehalfdark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/onehalflight.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/operator-mono-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/overnight-slumber.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/oxocarbon.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/palenighthc.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/pandora.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/paraiso-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/paulmillr.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/pencildark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/pencillight.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/peppermint.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/piatto-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/pnevma.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/popping-and-locking.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/primary.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/pro-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/pro.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/purple-rain.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/purplepeter.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/rapture.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/raycast-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/raycast-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/rebecca.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/red-alert.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/red-planet.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/red-sands.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/relaxed.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/retro.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/rippedcasts.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/rose-pine-dawn.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/rose-pine-moon.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/rose-pine.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/rouge-2.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/royal.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ryuuko.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/sakura.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/scarlet-protocol.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/seafoam-pastel.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/seashells.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/seoulbones-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/seoulbones-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/seti.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/shades-of-purple.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/shaman.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/slate.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/sleepyhollow.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/smyck.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/snazzy.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/softserver.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/solarized-darcula.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/solarized-dark---patched.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/solarized-dark-higher-contrast.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/spacedust.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/spacegray-eighties-dull.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/spacegray-eighties.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/spacegray.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/spiderman.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/spring.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/square.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/sublette.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/subliminal.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/sugarplum.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/sundried.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/symfonic.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/synthwave-everything.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/synthwave.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/synthwavealpha.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tango-adapted.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tango-half-adapted.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/teerb.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/terafox.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/terminal-basic.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/thayer-bright.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/the-hulk.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tinacious-design-(dark).toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tinacious-design-(light).toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tokyonight-day.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tokyonight-storm.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tokyonight.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tomorrow-night-blue.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tomorrow-night-bright.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tomorrow-night-burns.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tomorrow-night-eighties.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tomorrow-night.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/tomorrow.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/toychest.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/treehouse.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/twilight.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ubuntu.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ultradark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/ultraviolent.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/underthesea.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/unikitty.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/urple.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/vaughn.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/vesper.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/vibrantink.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/vimbones.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/violet-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/violet-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/warmneon.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/wez.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/whimsy.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/wildcherry.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/wilmersdorf.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/wombat.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/wryan.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/xcodedark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/xcodedarkhc.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/xcodelight.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/xcodelighthc.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/xcodewwdc.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/zenbones-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/zenbones-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/zenbones.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/zenburn.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/zenburned.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/zenwritten-dark.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/themes/zenwritten-light.toml +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/utilities.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/utility/output_utility_component.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/src/flock/visibility.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/test.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/conftest.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/contract/test_agent_payload_selection_contract.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/contract/test_type_normalization_contract.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/e2e/README.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/e2e/TESTING_SUMMARY.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/e2e/test_critical_scenarios.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/integration/test_collector_orchestrator.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/integration/test_orchestrator_dashboard.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/integration/test_websocket_protocol.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_agent.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_agent_mcp.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_agent_server_specific_mounts.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_artifacts.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_cli_helper.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_components.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_dashboard_api.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_dashboard_collector.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_dashboard_launcher.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_dashboard_service.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_dspy_engine.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_dspy_engine_mcp.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_dspy_streaming_events.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_engines.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_logging_config.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_mcp_client.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_mcp_config.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_mcp_coverage_summary.md +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_mcp_imports.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_mcp_manager.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_mcp_server_config_typeddict.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_mcp_tool_handlers.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_orchestrator.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_orchestrator_mcp.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_registry.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_runtime.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_service.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_subscription.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_telemetry.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_trace_clearing.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_unified_tracing.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_utilities.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_version_endpoint.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_visibility.py +0 -0
- {flock_core-0.5.0b65 → flock_core-0.5.0b70}/tests/test_websocket_manager.py +0 -0
|
@@ -234,6 +234,35 @@ The separation of `publish()` and `run_until_idle()` gives you **control over ex
|
|
|
234
234
|
|
|
235
235
|
---
|
|
236
236
|
|
|
237
|
+
### 🗄️ Persistent Blackboard History (SQLite Store)
|
|
238
|
+
|
|
239
|
+
**Production teams asked for auditability—now the blackboard can keep a full historical trail.**
|
|
240
|
+
|
|
241
|
+
#### Why this matters
|
|
242
|
+
- **Durable artifacts**: Everything on the blackboard (payloads, tags, visibility, correlation IDs) is stored on disk for replay, compliance, and debugging.
|
|
243
|
+
- **Faster postmortems**: Query `/api/v1/artifacts` with filters (`type`, `produced_by`, `tags`, `visibility`, time windows) to reconstruct agent cascades after the fact.
|
|
244
|
+
- **Operational dashboards**: The new **Historical Blackboard** module preloads persisted pages, exposes consumption metadata, and shows retention banners so operators know how far back they can scroll.
|
|
245
|
+
- **Retention policies**: CLI helpers make maintenance routine—`flock sqlite-maintenance my.db --delete-before 2025-01-01T00:00:00Z --vacuum` prunes old artifacts and compacts the store.
|
|
246
|
+
|
|
247
|
+
#### Quick start
|
|
248
|
+
```python
|
|
249
|
+
from flock import Flock
|
|
250
|
+
from flock.store import SQLiteBlackboardStore
|
|
251
|
+
|
|
252
|
+
store = SQLiteBlackboardStore(".flock/history.db")
|
|
253
|
+
await store.ensure_schema()
|
|
254
|
+
|
|
255
|
+
flock = Flock("openai/gpt-4.1", store=store)
|
|
256
|
+
await flock.publish(MyDreamPizza(pizza_idea="fermented garlic delight"))
|
|
257
|
+
await flock.run_until_idle()
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Kick the tyres with `examples/02-the-blackboard/01_persistent_pizza.py`, then launch `examples/03-the-dashboard/04_persistent_pizza_dashboard.py` to inspect the retained history alongside live WebSocket updates.
|
|
261
|
+
|
|
262
|
+
> **Heads-up:** The interface now returns `ArtifactEnvelope` objects when `embed_meta=True`. Future backends (Postgres, BigQuery, etc.) can implement the same contract to plug straight into the runtime and dashboard.
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
237
266
|
### 🔒 Test Isolation and Mock Cleanup - The Contamination Trap
|
|
238
267
|
|
|
239
268
|
**We fixed 32 failing tests caused by test contamination - here's what we learned:**
|
|
@@ -1,3 +1,35 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: flock-core
|
|
3
|
+
Version: 0.5.0b70
|
|
4
|
+
Summary: Add your description here
|
|
5
|
+
Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Requires-Python: >=3.10
|
|
8
|
+
Requires-Dist: aiosqlite>=0.20.0
|
|
9
|
+
Requires-Dist: devtools>=0.12.2
|
|
10
|
+
Requires-Dist: dspy==3.0.0
|
|
11
|
+
Requires-Dist: duckdb>=1.1.0
|
|
12
|
+
Requires-Dist: fastapi>=0.117.1
|
|
13
|
+
Requires-Dist: hanging-threads>=2.0.7
|
|
14
|
+
Requires-Dist: httpx>=0.28.1
|
|
15
|
+
Requires-Dist: litellm==1.75.3
|
|
16
|
+
Requires-Dist: loguru>=0.7.3
|
|
17
|
+
Requires-Dist: mcp>=1.7.1
|
|
18
|
+
Requires-Dist: opentelemetry-api>=1.30.0
|
|
19
|
+
Requires-Dist: opentelemetry-exporter-jaeger-proto-grpc>=1.21.0
|
|
20
|
+
Requires-Dist: opentelemetry-exporter-jaeger>=1.21.0
|
|
21
|
+
Requires-Dist: opentelemetry-exporter-otlp>=1.30.0
|
|
22
|
+
Requires-Dist: opentelemetry-instrumentation-logging>=0.51b0
|
|
23
|
+
Requires-Dist: opentelemetry-sdk>=1.30.0
|
|
24
|
+
Requires-Dist: poethepoet>=0.30.0
|
|
25
|
+
Requires-Dist: pydantic[email]>=2.11.9
|
|
26
|
+
Requires-Dist: rich>=14.1.0
|
|
27
|
+
Requires-Dist: toml>=0.10.2
|
|
28
|
+
Requires-Dist: typer>=0.19.2
|
|
29
|
+
Requires-Dist: uvicorn>=0.37.0
|
|
30
|
+
Requires-Dist: websockets>=15.0.1
|
|
31
|
+
Description-Content-Type: text/markdown
|
|
32
|
+
|
|
1
33
|
<p align="center">
|
|
2
34
|
<img alt="Flock Banner" src="https://raw.githubusercontent.com/whiteducksoftware/flock/master/docs/assets/images/flock.png" width="800">
|
|
3
35
|
</p>
|
|
@@ -252,6 +284,30 @@ asyncio.run(main())
|
|
|
252
284
|
|
|
253
285
|
---
|
|
254
286
|
|
|
287
|
+
## Persistent Blackboard History
|
|
288
|
+
|
|
289
|
+
The in-memory store is still great for local tinkering, but production teams now have a durable option. Plugging in `SQLiteBlackboardStore` turns the blackboard into a persistent event log with first-class ergonomics:
|
|
290
|
+
|
|
291
|
+
- **Long-lived artifacts** — every field (payload, tags, partition keys, visibility) is stored for replay, audits, and postmortems
|
|
292
|
+
- **Historical APIs** — `/api/v1/artifacts`, `/summary`, and `/agents/{agent_id}/history-summary` expose pagination, filtering, and consumption counts
|
|
293
|
+
- **Dashboard module** — the new **Historical Blackboard** experience preloads persisted history, enriches the graph with consumer metadata, and highlights retention windows
|
|
294
|
+
- **Operational tooling** — CLI helpers (`init-sqlite-store`, `sqlite-maintenance --delete-before ... --vacuum`) make schema setup and retention policies scriptable
|
|
295
|
+
|
|
296
|
+
Quick start:
|
|
297
|
+
|
|
298
|
+
```python
|
|
299
|
+
from flock import Flock
|
|
300
|
+
from flock.store import SQLiteBlackboardStore
|
|
301
|
+
|
|
302
|
+
store = SQLiteBlackboardStore(".flock/blackboard.db")
|
|
303
|
+
await store.ensure_schema()
|
|
304
|
+
flock = Flock("openai/gpt-4.1", store=store)
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Run `examples/02-the-blackboard/01_persistent_pizza.py` to generate history, then launch `examples/03-the-dashboard/04_persistent_pizza_dashboard.py` and explore previous runs, consumption trails, and retention banners inside the dashboard.
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
255
311
|
## Core Concepts
|
|
256
312
|
|
|
257
313
|
### Typed Artifacts (The Vocabulary)
|
|
@@ -1,34 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: flock-core
|
|
3
|
-
Version: 0.5.0b65
|
|
4
|
-
Summary: Add your description here
|
|
5
|
-
Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
|
|
6
|
-
License-File: LICENSE
|
|
7
|
-
Requires-Python: >=3.10
|
|
8
|
-
Requires-Dist: devtools>=0.12.2
|
|
9
|
-
Requires-Dist: dspy==3.0.0
|
|
10
|
-
Requires-Dist: duckdb>=1.1.0
|
|
11
|
-
Requires-Dist: fastapi>=0.117.1
|
|
12
|
-
Requires-Dist: hanging-threads>=2.0.7
|
|
13
|
-
Requires-Dist: httpx>=0.28.1
|
|
14
|
-
Requires-Dist: litellm==1.75.3
|
|
15
|
-
Requires-Dist: loguru>=0.7.3
|
|
16
|
-
Requires-Dist: mcp>=1.7.1
|
|
17
|
-
Requires-Dist: opentelemetry-api>=1.30.0
|
|
18
|
-
Requires-Dist: opentelemetry-exporter-jaeger-proto-grpc>=1.21.0
|
|
19
|
-
Requires-Dist: opentelemetry-exporter-jaeger>=1.21.0
|
|
20
|
-
Requires-Dist: opentelemetry-exporter-otlp>=1.30.0
|
|
21
|
-
Requires-Dist: opentelemetry-instrumentation-logging>=0.51b0
|
|
22
|
-
Requires-Dist: opentelemetry-sdk>=1.30.0
|
|
23
|
-
Requires-Dist: poethepoet>=0.30.0
|
|
24
|
-
Requires-Dist: pydantic[email]>=2.11.9
|
|
25
|
-
Requires-Dist: rich>=14.1.0
|
|
26
|
-
Requires-Dist: toml>=0.10.2
|
|
27
|
-
Requires-Dist: typer>=0.19.2
|
|
28
|
-
Requires-Dist: uvicorn>=0.37.0
|
|
29
|
-
Requires-Dist: websockets>=15.0.1
|
|
30
|
-
Description-Content-Type: text/markdown
|
|
31
|
-
|
|
32
1
|
<p align="center">
|
|
33
2
|
<img alt="Flock Banner" src="https://raw.githubusercontent.com/whiteducksoftware/flock/master/docs/assets/images/flock.png" width="800">
|
|
34
3
|
</p>
|
|
@@ -283,6 +252,30 @@ asyncio.run(main())
|
|
|
283
252
|
|
|
284
253
|
---
|
|
285
254
|
|
|
255
|
+
## Persistent Blackboard History
|
|
256
|
+
|
|
257
|
+
The in-memory store is still great for local tinkering, but production teams now have a durable option. Plugging in `SQLiteBlackboardStore` turns the blackboard into a persistent event log with first-class ergonomics:
|
|
258
|
+
|
|
259
|
+
- **Long-lived artifacts** — every field (payload, tags, partition keys, visibility) is stored for replay, audits, and postmortems
|
|
260
|
+
- **Historical APIs** — `/api/v1/artifacts`, `/summary`, and `/agents/{agent_id}/history-summary` expose pagination, filtering, and consumption counts
|
|
261
|
+
- **Dashboard module** — the new **Historical Blackboard** experience preloads persisted history, enriches the graph with consumer metadata, and highlights retention windows
|
|
262
|
+
- **Operational tooling** — CLI helpers (`init-sqlite-store`, `sqlite-maintenance --delete-before ... --vacuum`) make schema setup and retention policies scriptable
|
|
263
|
+
|
|
264
|
+
Quick start:
|
|
265
|
+
|
|
266
|
+
```python
|
|
267
|
+
from flock import Flock
|
|
268
|
+
from flock.store import SQLiteBlackboardStore
|
|
269
|
+
|
|
270
|
+
store = SQLiteBlackboardStore(".flock/blackboard.db")
|
|
271
|
+
await store.ensure_schema()
|
|
272
|
+
flock = Flock("openai/gpt-4.1", store=store)
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Run `examples/02-the-blackboard/01_persistent_pizza.py` to generate history, then launch `examples/03-the-dashboard/04_persistent_pizza_dashboard.py` and explore previous runs, consumption trails, and retention banners inside the dashboard.
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
286
279
|
## Core Concepts
|
|
287
280
|
|
|
288
281
|
### Typed Artifacts (The Vocabulary)
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Persistent Blackboard History
|
|
3
|
+
description: Store artifacts beyond process lifetime with the SQLite-backed blackboard store and dashboard history module.
|
|
4
|
+
tags:
|
|
5
|
+
- blackboard
|
|
6
|
+
- persistence
|
|
7
|
+
- sqlite
|
|
8
|
+
- dashboard
|
|
9
|
+
search:
|
|
10
|
+
boost: 1.4
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Persistent Blackboard History
|
|
14
|
+
|
|
15
|
+
The in-memory blackboard is perfect for local prototyping, but production teams need durable history for audits, debugging, and operator experience. The new **SQLiteBlackboardStore** turns every artifact into long-lived record while the dashboard's **Historical Blackboard** module visualises that history.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Why Persist the Blackboard?
|
|
20
|
+
|
|
21
|
+
- **Replay & Audits** — Inspect any published artifact (including payloads, tags, visibility, version, correlation IDs) even after the orchestrator restarts.
|
|
22
|
+
- **Lifecycle Analytics** — Summaries and agent history endpoints expose production/consumption counts, visibility breakdowns, and tag trends over arbitrary windows.
|
|
23
|
+
- **Operator Experience** — Dashboard users can scroll back through previous runs, inspect payload details, and view retention banners that explain how far history goes.
|
|
24
|
+
- **Future Backends** — The updated store interface (`FilterConfig`, `ArtifactEnvelope`) paves the way for Postgres, DuckDB, or cloud warehouses with identical semantics.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Swapping in the SQLite Store
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
from flock import Flock
|
|
32
|
+
from flock.store import SQLiteBlackboardStore
|
|
33
|
+
|
|
34
|
+
store = SQLiteBlackboardStore(".flock/blackboard.db", timeout=5.0)
|
|
35
|
+
await store.ensure_schema() # idempotent; safe to call on startup
|
|
36
|
+
|
|
37
|
+
flock = Flock("openai/gpt-4.1", store=store)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Key capabilities:
|
|
41
|
+
|
|
42
|
+
- **Upserts by ID** — Duplicate artifact IDs overwrite previous payloads to remain consistent with the in-memory store.
|
|
43
|
+
- **Full-field persistence** — All artifact fields (payload, tags, partition key, visibility) are saved for later hydration.
|
|
44
|
+
- **Consumption tracking** — `record_consumptions()` writes `artifact_consumptions` rows so downstream dashboards know who consumed what.
|
|
45
|
+
- **Operational helpers** — `sqlite-maintenance` CLI can prune (`--delete-before`) and vacuum the database on a schedule.
|
|
46
|
+
|
|
47
|
+
> Tip: Run `examples/02-the-blackboard/01_persistent_pizza.py` to seed `.flock/examples/pizza_history.db`, then reuse that file across sessions.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Historical APIs
|
|
52
|
+
|
|
53
|
+
Once the SQLite store is active, the HTTP control plane exposes richer endpoints:
|
|
54
|
+
|
|
55
|
+
| Endpoint | Purpose |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| `GET /api/v1/artifacts` | Paginated artifacts with filter support (type, producer, tags, visibility, correlation ID, time window). |
|
|
58
|
+
| `GET /api/v1/artifacts/summary` | Aggregates by type, producer, visibility, tag counts, earliest/latest timestamps. |
|
|
59
|
+
| `GET /api/v1/agents/{agent_id}/history-summary` | Produced/consumed totals per agent with optional filters. |
|
|
60
|
+
|
|
61
|
+
Pass `embed_meta=true` to `GET /api/v1/artifacts` to receive `ArtifactEnvelope` responses that include consumption records (consumer IDs, run IDs, timestamps).
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Dashboard: Historical Blackboard Module
|
|
66
|
+
|
|
67
|
+
Enable the dashboard with `await orchestrator.serve(dashboard=True)` or run `examples/03-the-dashboard/04_persistent_pizza_dashboard.py`. Then open **Add Module → Historical Blackboard** to:
|
|
68
|
+
|
|
69
|
+
- Load persisted artifacts before WebSocket replay.
|
|
70
|
+
- Apply the same multi-select filters as the REST API (types, producers, tags, visibility, correlation ID, time range).
|
|
71
|
+
- Inspect payloads with the JSON viewer alongside consumer history (who read the artifact, when, and in which run).
|
|
72
|
+
- See retention banners that highlight the earliest/latest artifacts currently stored and whether older pages can be fetched.
|
|
73
|
+
- Stream new artifacts as they arrive—persisted history and live events share the same view.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Retention & Maintenance
|
|
78
|
+
|
|
79
|
+
- **Retention policy** — Use `sqlite-maintenance db.sqlite --delete-before <ISO-8601 timestamp>` to truncate old artifacts. Pair with `--vacuum` to reclaim disk space.
|
|
80
|
+
- **Migrations** — `ensure_schema()` is idempotent and applies schema upgrades automatically. Call it during startup before processing any artifacts.
|
|
81
|
+
- **Backups** — SQLite files can be copied or snapshotted; do this while the orchestrator is idle or after calling `await store.close()`.
|
|
82
|
+
|
|
83
|
+
Future releases will add configurable retention windows and additional storage backends, but the contract exposed by `BlackboardStore` already supports them.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Next Steps
|
|
88
|
+
|
|
89
|
+
1. Switch local examples to `SQLiteBlackboardStore` and explore the persisted history via the dashboard module.
|
|
90
|
+
2. Integrate the historical REST endpoints into operational tooling (e.g., CI smoke tests, analytics dashboards).
|
|
91
|
+
3. Plan retention and maintenance jobs using the provided CLI commands.
|
|
92
|
+
4. Contribute alternative store implementations by targeting the same `BlackboardStore` contract.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# SQLiteBlackboardStore Research Packet
|
|
2
|
+
|
|
3
|
+
Welcome! This folder collects the working notes for implementing a persistent `SQLiteBlackboardStore`. Start here to understand what already exists and how to extend Flock Flow’s storage layer safely.
|
|
4
|
+
|
|
5
|
+
## Quickstart
|
|
6
|
+
|
|
7
|
+
1. **Read the domain rules** (`domain.md`) to learn the behavioural guarantees we must keep (duplicate handling, type resolution, visibility data, retention expectations).
|
|
8
|
+
2. **Review the implementation pattern** (`patterns.md`) for schema design, transaction strategy, and migration guidance.
|
|
9
|
+
3. **Check the integration notes** (`interfaces.md`) to see which APIs and dashboard affordances need to evolve once historical storage is available.
|
|
10
|
+
4. **Plan next steps** using the “Action Items” section below when you’re ready to convert research into issues or pull requests.
|
|
11
|
+
|
|
12
|
+
## Folder Contents
|
|
13
|
+
|
|
14
|
+
| File | Purpose |
|
|
15
|
+
|------|---------|
|
|
16
|
+
| `domain.md` | Business and lifecycle rules the SQLite store must preserve. |
|
|
17
|
+
| `patterns.md` | Technical blueprint for schema, read/write flows, concurrency, and observability. |
|
|
18
|
+
| `interfaces.md` | Backend API extensions and dashboard UX recommendations for historical data access. |
|
|
19
|
+
|
|
20
|
+
## Action Items
|
|
21
|
+
|
|
22
|
+
- Validate schema design and indexing strategy against projected artifact volumes.
|
|
23
|
+
- Scope required FastAPI endpoints and dashboard filter updates into implementation tickets.
|
|
24
|
+
- Prototype concurrency benchmarks (publish throughput, WAL performance) to confirm operational limits.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Manual Dashboard Verification (playwright-mcp)
|
|
2
|
+
|
|
3
|
+
This checklist replaces the original automated Playwright suite. It uses the
|
|
4
|
+
`playwright-mcp` tool to exercise the historical dashboard manually.
|
|
5
|
+
|
|
6
|
+
## Prerequisites
|
|
7
|
+
|
|
8
|
+
- SQLite backend configuration available (see project README).
|
|
9
|
+
- `uv` CLI installed.
|
|
10
|
+
- `playwright-mcp` MCP extension enabled in the Codex CLI environment.
|
|
11
|
+
|
|
12
|
+
## Launch the Dashboard Edge-Case Scenario
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
uv run python examples/03-the-dashboard/02-dashboard-edge-cases.py
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Wait for the following log lines:
|
|
19
|
+
|
|
20
|
+
- `[Dashboard] Production build completed`
|
|
21
|
+
- `Uvicorn running on http://127.0.0.1:8000`
|
|
22
|
+
- `[Dashboard] Browser launched successfully`
|
|
23
|
+
|
|
24
|
+
## Manual Verification Steps (playwright-mcp)
|
|
25
|
+
|
|
26
|
+
1. `mcp__playwright__browser_navigate(url="http://127.0.0.1:8000")`
|
|
27
|
+
- Confirm Agent View renders all agents with idle status.
|
|
28
|
+
2. Close the Publish panel (`mcp__playwright__browser_click` with `Close publish panel`) and switch to **Blackboard View**.
|
|
29
|
+
3. Toggle the **Filters** panel and verify:
|
|
30
|
+
- Correlation search, time range presets, multi-select filters, and saved preset controls appear.
|
|
31
|
+
4. Enter a sample correlation ID (e.g., `"abc123"`) to ensure filter pills update.
|
|
32
|
+
5. Re-open the Filters panel and ensure layout remains stable (no overlap between time-range buttons and fields).
|
|
33
|
+
6. Interact with the **Historical Blackboard** module (if enabled):
|
|
34
|
+
- Trigger “Load Older” and capture behavior.
|
|
35
|
+
7. Capture a screenshot with `mcp__playwright__browser_take_screenshot(fullPage=True, ...)`.
|
|
36
|
+
|
|
37
|
+
## Expected Outcomes
|
|
38
|
+
|
|
39
|
+
- No React errors or ErrorBoundary screens.
|
|
40
|
+
- Filter controls render without overlapping.
|
|
41
|
+
- Manual interactions update filter pills and historical listings.
|
|
42
|
+
- WebSocket reconnect warnings are acceptable when the example shuts down.
|
|
43
|
+
|
|
44
|
+
Record findings in the Phase 3 validation notes before closing tasks.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# SQLiteBlackboardStore Domain Considerations
|
|
2
|
+
|
|
3
|
+
## Artifact Lifecycle Rules
|
|
4
|
+
|
|
5
|
+
- A SQLite-backed store must preserve the baseline contract defined by `BlackboardStore.publish`, `get`, `list`, and `list_by_type` so the orchestrator can persist an artifact, bump `artifacts_published`, and immediately schedule consumers without additional coordination (`src/flock/orchestrator.py:807`).
|
|
6
|
+
- Artifacts carry canonical business data—including correlation IDs, partition keys, tags, visibility, timestamps, and version counters—because the `Artifact` model already exposes them (`src/flock/artifacts.py:15`). Every field must be recorded to guarantee downstream features like visibility filtering and replay work unchanged.
|
|
7
|
+
- Duplicate publishes with the same UUID intentionally overwrite prior values: the tests assert “latest wins” semantics (`tests/test_store.py:152`). A persistent store therefore needs an UPSERT strategy keyed on `artifact_id` so callers never see stale payloads.
|
|
8
|
+
|
|
9
|
+
## Retrieval & Type Normalisation
|
|
10
|
+
|
|
11
|
+
- `list()` is expected to return artifacts in insertion order (`tests/test_store.py:126`); a SQLite implementation should sort by `created_at` (or a monotonic sequence) to mirror in-memory behaviour.
|
|
12
|
+
- Type-aware queries must keep working: `list_by_type("Document")` resolves the canonical name through `type_registry.resolve_name` before filtering (`src/flock/store.py:73`). That contract is validated by the storage contract tests which mix canonical and simple names (`tests/contract/test_artifact_storage_contract.py:56`). A SQLite store therefore needs a column that stores the canonical type string to make these lookups efficient.
|
|
13
|
+
- `get_by_type(ModelClass)` returns fully materialised Pydantic models (`src/flock/store.py:78`). Persisted payloads must remain JSON-serialised dictionaries so they can be rehydrated into model instances without losing validation logic.
|
|
14
|
+
|
|
15
|
+
## Visibility & Scheduling Guarantees
|
|
16
|
+
|
|
17
|
+
- Visibility rules (`PublicVisibility`, label/tenant controls, future embargoes) are enforced when the orchestrator schedules agents, so the store has to persist the original `visibility` payload intact for enforcement and later audits (`src/flock/orchestrator.py:826`).
|
|
18
|
+
- Because correlation IDs and partition keys participate in routing, they must remain queryable fields. The dashboard’s IndexedDB schema already assumes correlation and producer filters (`src/flock/frontend/src/services/indexeddb.ts:55`), so the canonical store must expose the same columns to keep downstream consumers consistent.
|
|
19
|
+
|
|
20
|
+
## Historical Retention & Audit
|
|
21
|
+
|
|
22
|
+
- Moving from volatile memory to SQLite adds expectations around retention windows, GDPR/PII erasure, and audit trails. The store should document default retention, compaction, and purging policies so teams know when old artifacts are deleted or archived.
|
|
23
|
+
- Persistent history enables richer diagnostic tools (e.g., the DuckDB trace statistics endpoint at `src/flock/dashboard/service.py:683`). A SQLite store should outline how historical artifact queries and export workflows stay performant without overwhelming the orchestrator.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# SQLite Blackboard Store Interfaces & Dashboard UX
|
|
2
|
+
|
|
3
|
+
## Orchestrator Integration
|
|
4
|
+
|
|
5
|
+
- Expose the store via `Flock(store=SQLiteBlackboardStore(db_path="..."))` so existing constructors keep working (`src/flock/orchestrator.py:807`).
|
|
6
|
+
- Provide async `startup()` / `shutdown()` hooks to initialise connections and close them gracefully when the dashboard or CLI stops, matching the lifecycle of `DashboardHTTPService`.
|
|
7
|
+
|
|
8
|
+
## Backend APIs for Historical Data
|
|
9
|
+
|
|
10
|
+
- Extend the FastAPI layer with a paginated `GET /api/v1/artifacts` endpoint that supports query parameters: `type`, `produced_by`, `correlation_id`, `tag`, `from`, `to`, `limit`, `offset`. Results should mirror the artifact schema returned by `GET /api/v1/artifacts/{artifact_id}` (`src/flock/service.py:86`).
|
|
11
|
+
- Add an optional `GET /api/v1/artifacts/summary` endpoint for aggregations (counts per type, per producer) to let the dashboard populate filters without scanning the entire table.
|
|
12
|
+
- Keep WebSocket streaming history for live sessions, but backfill the IndexedDB cache on load by calling the new history endpoint before subscribing to real-time events. That honours the existing IndexedDB schema which already tracks correlation IDs, producers, and timestamps (`src/flock/frontend/src/services/indexeddb.ts:55`).
|
|
13
|
+
|
|
14
|
+
## Dashboard Filter & View Enhancements
|
|
15
|
+
|
|
16
|
+
- The current filter store only allows correlation ID and time-range filters (`src/flock/frontend/src/store/filterStore.ts:11`). Persisted history will overwhelm this UX; add multi-select filters for artifact type, producing agent, tags, and visibility class so operators can slice larger datasets.
|
|
17
|
+
- Introduce a “Historical Blackboard” view that renders a virtualised table or timeline of artifacts, pulling pages from SQLite via the new endpoints and letting users jump to a specific time window.
|
|
18
|
+
- Provide saved filter presets (the IndexedDB schema already reserves a `filters` store, `src/flock/frontend/src/services/indexeddb.ts:127`) so analysts can recall frequent queries quickly.
|
|
19
|
+
- For streaming output, keep the existing `/api/streaming-history/{agent_name}` endpoint (`src/flock/dashboard/service.py:703`) but document how far back history can be fetched and surface UI affordances (e.g., “Load older output”) that rely on SQLite retention policies.
|
|
20
|
+
|
|
21
|
+
## Usability Guardrails
|
|
22
|
+
|
|
23
|
+
- Indicate the active dataset (live vs archived) directly in the dashboard to avoid confusion when viewing historical records.
|
|
24
|
+
- Add server-side limits (max rows per page, time-range caps) with clear UI feedback to prevent slow queries and keep SQLite responsive.
|
|
25
|
+
- Provide export actions (CSV/JSON) for selected artifacts so teams can move historical data into external analytics tools without direct database access.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# SQLiteBlackboardStore Implementation Pattern
|
|
2
|
+
|
|
3
|
+
## Storage Strategy
|
|
4
|
+
|
|
5
|
+
- Use `aiosqlite` (or another async driver) so `publish`, `get`, and `list*` stay awaitable and integrate with the orchestrator’s async scheduling pipeline (`src/flock/orchestrator.py:807`).
|
|
6
|
+
- Open one shared connection per process with `row_factory=aiosqlite.Row`, wrap statements in `asyncio.Lock`/connection-level transactions, and enable WAL mode plus `journal_mode=wal` + `synchronous=normal` to reduce writer contention.
|
|
7
|
+
|
|
8
|
+
## Schema Design
|
|
9
|
+
|
|
10
|
+
| Table | Purpose | Key Columns |
|
|
11
|
+
|-------|---------|-------------|
|
|
12
|
+
| `artifacts` | Primary artifact store | `artifact_id` (PK TEXT UUID), `type`, `canonical_type`, `produced_by`, `payload` (JSON), `version`, `visibility` (JSON), `tags` (TEXT[] as JSON), `correlation_id`, `partition_key`, `created_at` (TIMESTAMP) |
|
|
13
|
+
| `artifact_consumers` (optional) | Future-proof actual consumer tracking | `artifact_id`, `agent_name`, `consumed_at` |
|
|
14
|
+
|
|
15
|
+
- Indexes: `(canonical_type, created_at)`, `(produced_by, created_at)`, `(correlation_id)`, `(tags_json -> '$[*]')` using `json_each` for tag filtering, plus `(partition_key)`. These support list-by-type, producer history, correlation filters, and eventual dashboard queries (`src/flock/frontend/src/services/indexeddb.ts:55`).
|
|
16
|
+
|
|
17
|
+
## Write Path (`publish`)
|
|
18
|
+
|
|
19
|
+
1. Resolve canonical type via `type_registry.resolve_name` before persistence so simple names remain queryable (`src/flock/store.py:73`).
|
|
20
|
+
2. Convert sets (`tags`) and visibility models to JSON. Persist `created_at` using the artifact’s timestamp rather than `CURRENT_TIMESTAMP` to preserve ingest order (`src/flock/artifacts.py:26`).
|
|
21
|
+
3. Execute an UPSERT on `artifact_id`. On conflict update payload, metadata, version, and `created_at` so duplicate publishes follow the “latest wins” rule (`tests/test_store.py:152`).
|
|
22
|
+
|
|
23
|
+
## Read Path (`get`, `list`, `list_by_type`, `get_by_type`)
|
|
24
|
+
|
|
25
|
+
- `get` selects by `artifact_id` and rehydrates the Pydantic model by feeding the stored payload into the registered class (`src/flock/store.py:79`).
|
|
26
|
+
- `list` orders by `created_at ASC`, returning rows mapped back to `Artifact`.
|
|
27
|
+
- `list_by_type` filters on `canonical_type` so both canonical and simple names pass the contract tests (`tests/contract/test_artifact_storage_contract.py:56`).
|
|
28
|
+
- `get_by_type` builds the target model directly by deserialising JSON payloads (no extra round-trip through `Artifact`), ensuring users still receive typed lists.
|
|
29
|
+
|
|
30
|
+
## Concurrency & Backpressure
|
|
31
|
+
|
|
32
|
+
- SQLite serialises writes; wrap publishes in short transactions and batch inserts when ingesting cascades. For heavy workloads, queue writes through an `asyncio.TaskGroup` that coalesces `publish` calls to amortise commit cost.
|
|
33
|
+
- Explicitly document write throughput limits and point teams toward sharding or an alternative store for high-frequency publish workloads.
|
|
34
|
+
|
|
35
|
+
## Schema Migration & Maintenance
|
|
36
|
+
|
|
37
|
+
- Ship an `ensure_schema()` coroutine that runs during store initialisation to create tables, indexes, and PRAGMA settings idempotently.
|
|
38
|
+
- Provide a migration table (`schema_version INTEGER`) so future upgrades (e.g., adding artifact lineages) can run without manual SQL.
|
|
39
|
+
- Offer housekeeping helpers: vacuum/pragma toggles, “delete before timestamp” utilities for retention, and export routines for snapshotting.
|
|
40
|
+
|
|
41
|
+
## Observability & Testing
|
|
42
|
+
|
|
43
|
+
- Emit OpenTelemetry spans around SQL operations so they appear in the existing DuckDB trace summaries (`src/flock/dashboard/service.py:683`).
|
|
44
|
+
- Reuse `tests/test_store.py` and `tests/contract/test_artifact_storage_contract.py` via parametrised fixtures to validate behaviour parity, then add integration tests for persistence, WAL mode, and concurrent writers to cover new failure modes.
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Implementation Plan
|
|
2
|
+
|
|
3
|
+
## Validation Checklist
|
|
4
|
+
- [ ] Context Ingestion section complete with all required specs
|
|
5
|
+
- [ ] Implementation phases logically organized
|
|
6
|
+
- [ ] Each phase starts with test definition (TDD approach)
|
|
7
|
+
- [ ] Dependencies between phases identified
|
|
8
|
+
- [ ] Parallel execution marked where applicable
|
|
9
|
+
- [ ] Multi-component coordination identified (if applicable)
|
|
10
|
+
- [ ] Final validation phase included
|
|
11
|
+
- [ ] No placeholder content remains
|
|
12
|
+
|
|
13
|
+
## Specification Compliance Guidelines
|
|
14
|
+
|
|
15
|
+
### How to Ensure Specification Adherence
|
|
16
|
+
|
|
17
|
+
1. **Before Each Phase**: Complete the Pre-Implementation Specification Gate
|
|
18
|
+
2. **During Implementation**: Reference specific SDD sections in each task
|
|
19
|
+
3. **After Each Task**: Run Specification Compliance checks
|
|
20
|
+
4. **Phase Completion**: Verify all specification requirements are met
|
|
21
|
+
|
|
22
|
+
### Deviation Protocol
|
|
23
|
+
|
|
24
|
+
If implementation cannot follow specification exactly:
|
|
25
|
+
1. Document the deviation and reason
|
|
26
|
+
2. Get approval before proceeding
|
|
27
|
+
3. Update SDD if the deviation is an improvement
|
|
28
|
+
4. Never deviate without documentation
|
|
29
|
+
|
|
30
|
+
## Metadata Reference
|
|
31
|
+
|
|
32
|
+
- `[parallel: true]` - Tasks that can run concurrently
|
|
33
|
+
- `[component: component-name]` - For multi-component features
|
|
34
|
+
- `[ref: document/section; lines: 1, 2-3]` - Links to specifications, patterns, or interfaces and (if applicable) line(s)
|
|
35
|
+
- `[activity: type]` - Activity hint for specialist agent selection
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Context Priming
|
|
40
|
+
|
|
41
|
+
*GATE: You MUST fully read all files mentioned in this section before starting any implementation.*
|
|
42
|
+
|
|
43
|
+
**Specification**:
|
|
44
|
+
|
|
45
|
+
- `docs/internal/sqlite-blackboard-store/domain.md` - Domain rules for persistent blackboard storage
|
|
46
|
+
- `docs/internal/sqlite-blackboard-store/patterns.md` - Implementation blueprint for SQLite store
|
|
47
|
+
- `docs/internal/sqlite-blackboard-store/interfaces.md` - API and dashboard interface expectations
|
|
48
|
+
|
|
49
|
+
**Key Design Decisions**:
|
|
50
|
+
|
|
51
|
+
- SQLite must faithfully reproduce current in-memory semantics (canonical type resolution, ordered reads, duplicate overwrite) while persisting every `Artifact` field for visibility and audit parity.
|
|
52
|
+
- Historical access requires new paginated artifact APIs and richer dashboard filters so operators can query large datasets without overwhelming the live graph.
|
|
53
|
+
|
|
54
|
+
**Implementation Context**:
|
|
55
|
+
|
|
56
|
+
- Commands to run: `uv run pytest tests/test_store.py tests/contract/test_artifact_storage_contract.py`, `uv run pytest tests/dashboard -k artifact` (after adding cases), `uv run python examples/03-the-dashboard/02-dashboard-edge-cases.py` followed by manual validation with `playwright-mcp`.
|
|
57
|
+
- Patterns to follow: `docs/internal/sqlite-blackboard-store/patterns.md` (schema, write/read paths, concurrency, migrations).
|
|
58
|
+
- Interfaces to implement: `docs/internal/sqlite-blackboard-store/interfaces.md` (REST endpoints for historical artifacts, dashboard UX enhancements).
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Implementation Phases
|
|
63
|
+
|
|
64
|
+
- [x] **Phase 1**: Foundation — SQLite schema & store implementation
|
|
65
|
+
|
|
66
|
+
- [x] **Prime Context**: `docs/internal/sqlite-blackboard-store/domain.md`, `docs/internal/sqlite-blackboard-store/patterns.md`
|
|
67
|
+
- [x] Confirm semantic parity requirements (canonical type usage, overwrite behaviour) `[ref: docs/internal/sqlite-blackboard-store/domain.md]`
|
|
68
|
+
- [x] Review schema blueprint, migration strategy, and concurrency guidance `[ref: docs/internal/sqlite-blackboard-store/patterns.md]`
|
|
69
|
+
- [x] **Write Tests**: Extend store contract coverage for SQLite backend `[activity: design-tests]`
|
|
70
|
+
- [x] Parameterise `tests/test_store.py` to run against both in-memory and SQLite implementations `[ref: tests/test_store.py; activity: update-tests]`
|
|
71
|
+
- [x] Mirror `tests/contract/test_artifact_storage_contract.py` against SQLite store to enforce canonical name resolution `[ref: tests/contract/test_artifact_storage_contract.py; activity: update-tests]`
|
|
72
|
+
- [x] Add migration/initialisation regression test (e.g., ensuring `ensure_schema()` idempotency) `[activity: add-tests]`
|
|
73
|
+
- [x] **Implement**: Introduce `SQLiteBlackboardStore` following async pattern `[activity: implement-backend]`
|
|
74
|
+
- [x] Create schema management (`ensure_schema`, migrations, PRAGMA setup) and connection lifecycle helpers `[ref: docs/internal/sqlite-blackboard-store/patterns.md]`
|
|
75
|
+
- [x] Implement `publish`, `get`, `list`, `list_by_type`, `get_by_type`, honouring duplicate overwrite, ordered reads, and JSON payload hydration `[activity: implement-backend]`
|
|
76
|
+
- [x] **Implement**: Observability & maintenance tooling `[activity: implement-backend]`
|
|
77
|
+
- [x] Add OpenTelemetry spans around SQL operations, vacuum/retention helpers as defined in research `[ref: docs/internal/sqlite-blackboard-store/patterns.md]`
|
|
78
|
+
- [x] **Validate**: Ensure reliability & parity
|
|
79
|
+
- [x] Run updated pytest suites (`tests/test_store.py`, `tests/contract/test_artifact_storage_contract.py`) `[activity: run-tests]`
|
|
80
|
+
- [x] Execute concurrency stress test (async gather publish) against SQLite backend `[activity: run-tests]`
|
|
81
|
+
- [x] Review schema artefacts for adherence to domain rules and document retention defaults `[activity: review-docs]`
|
|
82
|
+
|
|
83
|
+
- [x] **Phase 2**: Orchestrator & service integration
|
|
84
|
+
|
|
85
|
+
- [x] **Prime Context**: `docs/internal/sqlite-blackboard-store/interfaces.md`, orchestrator/service modules (`src/flock/orchestrator.py`, `src/flock/service.py`)
|
|
86
|
+
- [x] Map new store into orchestrator lifecycle & dependency injection `[ref: docs/internal/sqlite-blackboard-store/interfaces.md]`
|
|
87
|
+
- [x] Review API expansion requirements for artifact history `[ref: docs/internal/sqlite-blackboard-store/interfaces.md]`
|
|
88
|
+
- [x] **Write Tests**: Define acceptance tests for new endpoints & configuration `[activity: design-tests]`
|
|
89
|
+
- [x] Add API contract tests for paginated artifact listing (`/api/v1/artifacts`) and summaries `[activity: add-tests]`
|
|
90
|
+
- [x] Create integration test ensuring `Flock(store=SQLiteBlackboardStore(...))` publishes/reads successfully `[activity: add-tests]`
|
|
91
|
+
- [x] **Implement**: Wiring the store into runtime `[activity: implement-backend]`
|
|
92
|
+
- [x] Allow `Flock` to accept SQLite store via configuration/CLI, update CLI helpers and documentation `[activity: implement-backend]`
|
|
93
|
+
- [x] Extend FastAPI service with historical artifact endpoints (pagination, filtering, summaries) `[activity: implement-backend]`
|
|
94
|
+
- [x] **Implement**: Migration & configuration tooling `[activity: implement-backend]`
|
|
95
|
+
- [x] Provide CLI commands or scripts to initialise database, run migrations, and configure retention `[activity: implement-backend]`
|
|
96
|
+
- [x] **Validate**: Cross-check orchestration guarantees
|
|
97
|
+
- [x] Run FastAPI endpoint tests and contract suites `[activity: run-tests]`
|
|
98
|
+
- [x] Smoke test CLI/orchestrator flows using SQLite backend (publish/list) `[activity: run-tests]`
|
|
99
|
+
- [x] Verify metrics/tracing capture database operations as required `[activity: review-logs]`
|
|
100
|
+
|
|
101
|
+
- [~] **Phase 3**: Dashboard & UX enhancements for historical data
|
|
102
|
+
|
|
103
|
+
- [x] **Prime Context**: `docs/internal/sqlite-blackboard-store/interfaces.md`, dashboard filter implementation (`src/flock/frontend/src/store/filterStore.ts`, `src/flock/frontend/src/services/indexeddb.ts`)
|
|
104
|
+
- [x] Review required filter additions (artifact type, producer, tags, visibility) `[ref: docs/internal/sqlite-blackboard-store/interfaces.md]`
|
|
105
|
+
- [x] Inspect IndexedDB schema alignment for saved filters/pagination `[ref: src/flock/frontend/src/services/indexeddb.ts]`
|
|
106
|
+
- [x] **Write Tests**: Outline UI regression coverage `[activity: design-tests]`
|
|
107
|
+
- [x] Add unit tests for new filter store state, filters UI, and saved preset persistence `[activity: add-tests]`
|
|
108
|
+
- [x] Document manual playwright-mcp flow for historical blackboard view and pagination `[ref: docs/internal/sqlite-blackboard-store/dashboard-playwright-mcp.md; activity: add-tests]`
|
|
109
|
+
- [ ] **Implement**: Dashboard data ingestion `[activity: implement-frontend]`
|
|
110
|
+
- [x] Fetch historical artifact pages on load before WebSocket subscription, hydrate IndexedDB caches `[activity: implement-frontend]`
|
|
111
|
+
- [x] Add multi-select filters (type, producer, tags, visibility) and saved presets UI `[activity: implement-frontend]`
|
|
112
|
+
- [x] Provide persistent data seeding example (`examples/02-the-blackboard/01_persistent_pizza.py`) `[activity: implement-frontend]`
|
|
113
|
+
- [x] Backend follow-up: expose embedded consumption metadata via store API and REST (see discussion note)
|
|
114
|
+
- [ ] **Implement**: New historical view & affordances `[activity: implement-frontend]`
|
|
115
|
+
- [x] Create paginated “Historical Blackboard” table/timeline with virtualization `[activity: implement-frontend]`
|
|
116
|
+
- [x] Surface retention messaging and “Load older output” interactions tied to SQLite limits `[activity: implement-frontend]`
|
|
117
|
+
- [x] Add payload detail viewer using shared JSON component
|
|
118
|
+
- [x] Remove legacy Event Log module once payload viewer shipped
|
|
119
|
+
- [x] **Implement**: Historical backend API enhancements `[activity: implement-backend]`
|
|
120
|
+
- [x] Add consumption history persistence (`artifact_consumptions` or equivalent)
|
|
121
|
+
- [x] Update store interface (`FilterConfig`, `embed_meta`) and document requirements for future stores
|
|
122
|
+
- [x] Extend REST endpoints (`/api/v1/artifacts`, `/summary`, `/agents/{id}/history-summary`) to surface metadata
|
|
123
|
+
- [x] Ensure in-memory store honours new interface semantics for parity
|
|
124
|
+
- [ ] Document design rationale (embedded metadata, consumption joins, normalization)
|
|
125
|
+
|
|
126
|
+
- [ ] **Validate**: Store/REST integration `[activity: run-tests]`
|
|
127
|
+
- [x] Add unit tests for store consumption queries and filters
|
|
128
|
+
- [x] Add integration tests for new REST endpoints and envelopes
|
|
129
|
+
- [x] Verify frontend agent counters/edges consume enriched envelopes
|
|
130
|
+
|
|
131
|
+
- [ ] **Validate**: UX & performance gates
|
|
132
|
+
- [ ] Run frontend unit tests and manual dashboard verification with `playwright-mcp` following `docs/internal/sqlite-blackboard-store/dashboard-playwright-mcp.md` (`uv run python examples/03-the-dashboard/02-dashboard-edge-cases.py`) `[activity: run-tests]` *(unit tests passing; Playwright runner currently blocks on CSS module parsing — see latest execution notes)*
|
|
133
|
+
- [ ] Perform manual UX review of persistent history flow (`uv run python examples/03-the-dashboard/04_persistent_pizza_dashboard.py`) before dashboard checks `[activity: manual-test]`
|
|
134
|
+
- [ ] Confirm accessibility checks (keyboard navigation, screen-reader labels) for new components `[activity: accessibility-review]`
|
|
135
|
+
|
|
136
|
+
- [ ] **Integration & End-to-End Validation**
|
|
137
|
+
- [ ] Confirm unit and contract tests pass for both in-memory and SQLite stores
|
|
138
|
+
- [ ] Execute integration tests covering orchestrator/API/dashboard interplay with SQLite backend
|
|
139
|
+
- [ ] Run end-to-end workflow (publish artifacts, query history, filter in dashboard) against SQLite store
|
|
140
|
+
- [ ] Validate performance targets for write throughput and dashboard pagination `[ref: docs/internal/sqlite-blackboard-store/patterns.md]`
|
|
141
|
+
- [ ] Perform security review for data-at-rest, visibility enforcement, and endpoint access controls `[ref: docs/internal/sqlite-blackboard-store/domain.md]`
|
|
142
|
+
- [ ] Verify acceptance criteria from research packet (parity, historical access, UX enhancements)
|
|
143
|
+
- [ ] Ensure documentation updated (README, CLI help, dashboard docs) for new backend option
|
|
144
|
+
- [ ] Run build, lint, and formatting checks; confirm deployment scripts handle SQLite configuration
|
|
145
|
+
- [ ] Record final specification compliance report before release
|
|
146
|
+
|
|
147
|
+
- [ ] **Integration & End-to-End Validation**
|
|
148
|
+
- [ ] [All unit tests passing per component if multi-component]
|
|
149
|
+
- [ ] [Integration tests for component interactions]
|
|
150
|
+
- [ ] [End-to-end tests for complete user flows]
|
|
151
|
+
- [ ] [Performance tests meet requirements] `[ref: SDD/Section 10 "Quality Requirements"]`
|
|
152
|
+
- [ ] [Security validation passes] `[ref: SDD/Section 10 "Security Requirements"]`
|
|
153
|
+
- [ ] [Acceptance criteria verified against PRD] `[ref: PRD acceptance criteria sections]`
|
|
154
|
+
- [ ] [Test coverage meets standards]
|
|
155
|
+
- [ ] [Documentation updated for any API/interface changes]
|
|
156
|
+
- [ ] [Build and deployment verification]
|
|
157
|
+
- [ ] [All PRD requirements implemented]
|
|
158
|
+
- [ ] [Implementation follows SDD design]
|
|
159
|
+
|
|
160
|
+
### 📝 Phase 3 Design Notes (Added after implementation review)
|
|
161
|
+
|
|
162
|
+
During integration we discovered the front-end needs richer metadata than the original research anticipated:
|
|
163
|
+
|
|
164
|
+
- Agent counters and graph edges require historical consumption data; this led us to design `artifact_consumptions` persistence and an `embed_meta` path in the store interface.
|
|
165
|
+
- Stores (in-memory & SQLite) will expose filtering through a shared `FilterConfig` and can return either lean `ArtifactRecord` objects or enriched envelopes with consumption/run metadata.
|
|
166
|
+
- REST endpoints will surface the enriched envelopes directly so clients do not reimplement the joins. A dedicated `/api/v1/agents/{id}/history-summary` endpoint will provide filtered produced/consumed counts.
|
|
167
|
+
- Historical Blackboard replaces the Event Log. Payload viewing will use the shared JSON inspector component.
|
|
168
|
+
|
|
169
|
+
These tasks are tracked in Phase 3 to guide future contributors implementing new stores (e.g., PostgresStore, RedisStore).
|