flock-core 0.5.0b63__py3-none-any.whl → 0.5.0b70__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of flock-core might be problematic. Click here for more details.

Files changed (62) hide show
  1. flock/agent.py +205 -27
  2. flock/cli.py +74 -2
  3. flock/dashboard/websocket.py +13 -2
  4. flock/engines/dspy_engine.py +70 -13
  5. flock/examples.py +4 -1
  6. flock/frontend/README.md +15 -1
  7. flock/frontend/package-lock.json +11 -21
  8. flock/frontend/package.json +1 -1
  9. flock/frontend/src/App.tsx +74 -6
  10. flock/frontend/src/__tests__/e2e/critical-scenarios.test.tsx +4 -5
  11. flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx +7 -3
  12. flock/frontend/src/components/filters/ArtifactTypeFilter.tsx +21 -0
  13. flock/frontend/src/components/filters/FilterFlyout.module.css +104 -0
  14. flock/frontend/src/components/filters/FilterFlyout.tsx +80 -0
  15. flock/frontend/src/components/filters/FilterPills.module.css +186 -45
  16. flock/frontend/src/components/filters/FilterPills.test.tsx +115 -99
  17. flock/frontend/src/components/filters/FilterPills.tsx +120 -44
  18. flock/frontend/src/components/filters/ProducerFilter.tsx +21 -0
  19. flock/frontend/src/components/filters/SavedFiltersControl.module.css +60 -0
  20. flock/frontend/src/components/filters/SavedFiltersControl.test.tsx +158 -0
  21. flock/frontend/src/components/filters/SavedFiltersControl.tsx +159 -0
  22. flock/frontend/src/components/filters/TagFilter.tsx +21 -0
  23. flock/frontend/src/components/filters/TimeRangeFilter.module.css +24 -0
  24. flock/frontend/src/components/filters/TimeRangeFilter.tsx +6 -1
  25. flock/frontend/src/components/filters/VisibilityFilter.tsx +21 -0
  26. flock/frontend/src/components/graph/GraphCanvas.tsx +24 -0
  27. flock/frontend/src/components/layout/DashboardLayout.css +13 -0
  28. flock/frontend/src/components/layout/DashboardLayout.tsx +8 -24
  29. flock/frontend/src/components/modules/HistoricalArtifactsModule.module.css +288 -0
  30. flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx +460 -0
  31. flock/frontend/src/components/modules/HistoricalArtifactsModuleWrapper.tsx +13 -0
  32. flock/frontend/src/components/modules/ModuleRegistry.ts +7 -1
  33. flock/frontend/src/components/modules/registerModules.ts +9 -10
  34. flock/frontend/src/hooks/useModules.ts +11 -1
  35. flock/frontend/src/services/api.ts +140 -0
  36. flock/frontend/src/services/indexeddb.ts +56 -2
  37. flock/frontend/src/services/websocket.ts +129 -0
  38. flock/frontend/src/store/filterStore.test.ts +105 -185
  39. flock/frontend/src/store/filterStore.ts +173 -26
  40. flock/frontend/src/store/graphStore.test.ts +19 -0
  41. flock/frontend/src/store/graphStore.ts +166 -27
  42. flock/frontend/src/types/filters.ts +34 -1
  43. flock/frontend/src/types/graph.ts +7 -0
  44. flock/frontend/src/utils/artifacts.ts +24 -0
  45. flock/mcp/client.py +25 -1
  46. flock/mcp/config.py +1 -10
  47. flock/mcp/manager.py +34 -3
  48. flock/mcp/types/callbacks.py +4 -1
  49. flock/orchestrator.py +56 -5
  50. flock/service.py +146 -9
  51. flock/store.py +971 -24
  52. {flock_core-0.5.0b63.dist-info → flock_core-0.5.0b70.dist-info}/METADATA +27 -1
  53. {flock_core-0.5.0b63.dist-info → flock_core-0.5.0b70.dist-info}/RECORD +56 -49
  54. flock/frontend/src/components/filters/FilterBar.module.css +0 -29
  55. flock/frontend/src/components/filters/FilterBar.test.tsx +0 -133
  56. flock/frontend/src/components/filters/FilterBar.tsx +0 -33
  57. flock/frontend/src/components/modules/EventLogModule.test.tsx +0 -401
  58. flock/frontend/src/components/modules/EventLogModule.tsx +0 -396
  59. flock/frontend/src/components/modules/EventLogModuleWrapper.tsx +0 -17
  60. {flock_core-0.5.0b63.dist-info → flock_core-0.5.0b70.dist-info}/WHEEL +0 -0
  61. {flock_core-0.5.0b63.dist-info → flock_core-0.5.0b70.dist-info}/entry_points.txt +0 -0
  62. {flock_core-0.5.0b63.dist-info → flock_core-0.5.0b70.dist-info}/licenses/LICENSE +0 -0
@@ -1,14 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flock-core
3
- Version: 0.5.0b63
3
+ Version: 0.5.0b70
4
4
  Summary: Add your description here
5
5
  Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
6
6
  License-File: LICENSE
7
7
  Requires-Python: >=3.10
8
+ Requires-Dist: aiosqlite>=0.20.0
8
9
  Requires-Dist: devtools>=0.12.2
9
10
  Requires-Dist: dspy==3.0.0
10
11
  Requires-Dist: duckdb>=1.1.0
11
12
  Requires-Dist: fastapi>=0.117.1
13
+ Requires-Dist: hanging-threads>=2.0.7
12
14
  Requires-Dist: httpx>=0.28.1
13
15
  Requires-Dist: litellm==1.75.3
14
16
  Requires-Dist: loguru>=0.7.3
@@ -282,6 +284,30 @@ asyncio.run(main())
282
284
 
283
285
  ---
284
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
+
285
311
  ## Core Concepts
286
312
 
287
313
  ### Typed Artifacts (The Vocabulary)
@@ -1,14 +1,14 @@
1
1
  flock/__init__.py,sha256=fvp4ltfaAGmYliShuTY_XVIpOUN6bMXbWiBnwb1NBoM,310
2
- flock/agent.py,sha256=gEELgq0Ab8TnaNLkkjvmR28kYZnLNO1yGhsu0CzfToE,31973
2
+ flock/agent.py,sha256=LHc2COiV_w0eKmGaq9IsTDaNg_gc6iTSKmGPk1FKbt0,39731
3
3
  flock/artifacts.py,sha256=Xnizu0V4Jbwd1yV_FhXjUZG8Em-5GYsLt7sMX0V2OKI,2222
4
- flock/cli.py,sha256=Ay_Z4KDd5wnnF1fLr0NqjMF7kRm_9X_1RXyv5GETDAY,2126
4
+ flock/cli.py,sha256=Ysr-u68QqY5YLjY7AKQSwzeJdYhNM4NMk9S5plmzg8w,4526
5
5
  flock/components.py,sha256=17vhNMHKc3VUruEbSdb9YNKcDziIe0coS9jpfWBmX4o,6259
6
- flock/examples.py,sha256=61xkD48yCW-aDrUXIrqrvxLtV8Vn4DrraQrHrrEUnWA,3530
7
- flock/orchestrator.py,sha256=fF7wteH6T_yAPpJDG7kSIkUe5ggJAZ9BIpP6Flz-ozA,33747
6
+ flock/examples.py,sha256=eQb8k6EYBbUhauFuSN_0EIIu5KW0mTqJU0HM4-p14sc,3632
7
+ flock/orchestrator.py,sha256=Im22Nw9BUC7Hcd8GzOR0oBP1m2wb35_-dE2Hw-d_bZ8,35898
8
8
  flock/registry.py,sha256=s0-H-TMtOsDZiZQCc7T1tYiWQg3OZHn5T--jaI_INIc,4786
9
9
  flock/runtime.py,sha256=UG-38u578h628mSddBmyZn2VIzFQ0wlHCpCALFiScqA,8518
10
- flock/service.py,sha256=cfvcsqZw9xOsEggncZ08zmiDxFiZpxsBYDSji5OIQQ8,5256
11
- flock/store.py,sha256=-AzNShH4gUifxaJZSFuswW24zWf9NSDKBnIDPjOgXwI,3301
10
+ flock/service.py,sha256=P_ntjfaCdRRTmdeOVe7vf6A9MResktLiqDu0x3SKSpg,11041
11
+ flock/store.py,sha256=78QV5n8za-w1Toll3g29TynvhXUv3-0ExDgIL4aOP4o,39168
12
12
  flock/subscription.py,sha256=ylIOV2G37KNfncdexrl4kxZOjo7SLS3LmddTaoSkrIk,3103
13
13
  flock/utilities.py,sha256=bqTPnFF6E-pDqx1ISswDNEzTU2-ED_URlkyKWLjF3mU,12109
14
14
  flock/visibility.py,sha256=Cu2PMBjRtqjiWzlwHLCIC2AUFBjJ2augecG-jvK8ky0,2949
@@ -18,23 +18,23 @@ flock/dashboard/collector.py,sha256=dF8uddDMpOSdxGkhDSAvRNNaABo-TfOceipf1SQmLSU,
18
18
  flock/dashboard/events.py,sha256=ujdmRJK-GQubrv43qfQ73dnrTj7g39VzBkWfmskJ0j8,5234
19
19
  flock/dashboard/launcher.py,sha256=zXWVpyLNxCIu6fJ2L2j2sJ4oDWTvkxhT4FWz7K6eooM,8122
20
20
  flock/dashboard/service.py,sha256=30_uUxDhvX1jfy02G4muNuzbcMH5TujY_G5aXWNQa8Q,32104
21
- flock/dashboard/websocket.py,sha256=RdJ7fhjNYJR8WHJ19wWdf9GEQtuKE14NmUpqm-QsLnA,9013
21
+ flock/dashboard/websocket.py,sha256=6piBJ92nSAeTgGFDUgAaQ8CthqThwRUC6aMUBB_2O6E,9508
22
22
  flock/engines/__init__.py,sha256=waNyObJ8PKCLFZL3WUFynxSK-V47m559P3Px-vl_OSc,124
23
- flock/engines/dspy_engine.py,sha256=Q2gPYLW_f8f-JuBYOMtjtoCZH8Fc447zWF8cHpJl4ew,34538
24
- flock/frontend/README.md,sha256=OFdOItV8FGifmUDb694rV2xLC0vl1HlR5KBEtYv5AB0,25054
23
+ flock/engines/dspy_engine.py,sha256=rp8luOGz3u69NJSmQBLegbZyws8dt7TWa6Hzqb3wB5o,37525
24
+ flock/frontend/README.md,sha256=bWElU0eKmVCYI6VHCqH5KQCi3Ysg6T808mkUXs2xoTY,26232
25
25
  flock/frontend/index.html,sha256=BFg1VR_YVAJ_MGN16xa7sT6wTGwtFYUhfJhGuKv89VM,312
26
- flock/frontend/package-lock.json,sha256=F-KmPhq6IbHXzxtmHL0S7dt6DGs4fWrOkrfKeXaSx6U,150998
27
- flock/frontend/package.json,sha256=8cpupeJo0xlJgHiEHpBYCU-nHFiiNGJ73NfZLr5-FSg,1258
26
+ flock/frontend/package-lock.json,sha256=1edo2JDle0if_MljnK4Xto7Q7hhGUEBQAvQFqKy9RzQ,150798
27
+ flock/frontend/package.json,sha256=4hHxn3NhjZnHgVM4tooAC0LnePEuC2QlrdwfgFjIj9Y,1258
28
28
  flock/frontend/tsconfig.json,sha256=B9p9jXohg_jrCZAq5_yIHvznpeXHiHQkwUZrVE2oMRA,705
29
29
  flock/frontend/tsconfig.node.json,sha256=u5_YWSqeNkZBRBIZ8Q2E2q6bospcyF23mO-taRO7glc,233
30
30
  flock/frontend/vite.config.ts,sha256=OQOr6Hl75iW7EvEm2_GXFdicYWthgdLhp4lz3d7RkJA,566
31
31
  flock/frontend/vitest.config.ts,sha256=xSWyGrBv2Cy_5eeZA68NCO5AXS6q8WKZXXzqu2JnXPY,244
32
32
  flock/frontend/docs/DESIGN_SYSTEM.md,sha256=xDTKBDikSIyJMP5Lk0gWSimQHeXv8IzIuJR7SLOEdPY,48503
33
- flock/frontend/src/App.tsx,sha256=JEOyo90xXKiEeZTjg8qQdTFaxjZXoD261jW11eEr98k,2645
33
+ flock/frontend/src/App.tsx,sha256=E3l8SKAnFJb3RXuKomhSFXY49KUwf0SK6dhef57hRhk,5285
34
34
  flock/frontend/src/main.tsx,sha256=sfWsPgNn5AyDH4LJJLTz2c5OwOPl0o4oi-FArpqc-W4,354
35
35
  flock/frontend/src/vite-env.d.ts,sha256=tDjMtvUVN9uIgSCHe__Jhp0-nZiIV21pkcQuyOjaryw,344
36
- flock/frontend/src/__tests__/e2e/critical-scenarios.test.tsx,sha256=Lewvnbn0-vE-rpLVW7YmT0ZPkE7R65L8gWyCGQKEtT0,21833
37
- flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx,sha256=vaBwyjnNQ_BL7hpC779cuOj6L2opYGpM8oopIAbw5aw,11401
36
+ flock/frontend/src/__tests__/e2e/critical-scenarios.test.tsx,sha256=PTSuyTqQ1IfE6SVntWJMJLHw3HqbyUMZ0WycmujaJo8,21802
37
+ flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx,sha256=VrGOgI-4QaCIroIZIdtxxAP4Sw8UpPkMX5wMpcehmdU,11608
38
38
  flock/frontend/src/__tests__/integration/graph-rendering.test.tsx,sha256=BrXule_v1w-Y_xMR1V318_QH3mIpYstxIWDnWVI5HbI,19845
39
39
  flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx,sha256=LDbotzC9cyTvyIhng8m_2TckZehD9zHemR6Ng3lSyV8,21825
40
40
  flock/frontend/src/components/common/BuildInfo.tsx,sha256=9J5Fww8dhnrxywDvg6jVNrIlLbEGkuRD8Vv2naVQiWk,983
@@ -57,40 +57,46 @@ flock/frontend/src/components/details/NodeDetailWindow.test.tsx,sha256=nmRhAN5NF
57
57
  flock/frontend/src/components/details/NodeDetailWindow.tsx,sha256=yAwtio36uobKq75BQWYE_aX2gNcxUmUo946YX50l5oQ,7675
58
58
  flock/frontend/src/components/details/RunStatusTab.tsx,sha256=D_6nz0oef3bvbuRMnzlcKroLDKV8t_wXCP4QJJB086g,9895
59
59
  flock/frontend/src/components/details/tabs.test.tsx,sha256=drC38YbfUEvfp5eXzDU04IdHL_TlyxNP_lWEEYA7IP4,30519
60
+ flock/frontend/src/components/filters/ArtifactTypeFilter.tsx,sha256=fCB5KmF5phQ3vDVJ6XE_0TQQEMV0aZ1NIX3DbkS_mhs,690
60
61
  flock/frontend/src/components/filters/CorrelationIDFilter.module.css,sha256=c_GWPe7itor8AbUYKlBV10JSGvI8_lLaMEXBKkMVbjk,2236
61
62
  flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx,sha256=_Pylk0-0gzRyUHgAS2KZuxMGuVCSdjY4jay_8AxYAFY,6181
62
63
  flock/frontend/src/components/filters/CorrelationIDFilter.tsx,sha256=AZ8S0ZPyxFtfwk8QBZfduq2fVz214N-Xpz8CZDhQSYo,3635
63
- flock/frontend/src/components/filters/FilterBar.module.css,sha256=TKGrD0u971Ga-ddJ8PTIRF5OacMGSgAIDMfXJyL1P9Y,661
64
- flock/frontend/src/components/filters/FilterBar.test.tsx,sha256=q6IBmKAQeTB9CfJU2FQe4ycAcG9uUXw6F-Ry9EWhP-s,4324
65
- flock/frontend/src/components/filters/FilterBar.tsx,sha256=fiGGH8cmtdkWqbCJMuONWmGei_XMMksAOA_HgrUn0Ns,869
66
- flock/frontend/src/components/filters/FilterPills.module.css,sha256=UtO-0xXqbviPHqyr-a72BpuSklvNm-P7KBpWNigrPq8,1675
67
- flock/frontend/src/components/filters/FilterPills.test.tsx,sha256=M9EABP_vwanbK9NMUHgQbXCcBOGTDg6PX-Xc90-1jUw,5442
68
- flock/frontend/src/components/filters/FilterPills.tsx,sha256=wzRA3j7t0Er-igYZdEAmq07YQEQZDr95_L7X9Y0h_1Q,2114
69
- flock/frontend/src/components/filters/TimeRangeFilter.module.css,sha256=J1YQs8BmjiG0wZIpH-cx0yCfzlKLGn7Zil0hwDusMuo,2242
64
+ flock/frontend/src/components/filters/FilterFlyout.module.css,sha256=GGPbaRruVKqimU6lDuIIPjvt_MkatLMQJnHhr8i7S80,1941
65
+ flock/frontend/src/components/filters/FilterFlyout.tsx,sha256=FC-7QMBe0EunUTATLZwq2B_ya91VsB6rk6HB64lFlU0,2605
66
+ flock/frontend/src/components/filters/FilterPills.module.css,sha256=OUKsDGKurM3-9OA8TS05QKFBVakJ5J3cy6iyh49jzYI,5293
67
+ flock/frontend/src/components/filters/FilterPills.test.tsx,sha256=T18d4oc8EU9Pe5kxMx0J0uLvL8Vzx3-SGd3LYaSKROI,6204
68
+ flock/frontend/src/components/filters/FilterPills.tsx,sha256=y1pBw8yeF0O6x3LE73Y4h-RnLdveNzLv_cWE5QYCkE0,4831
69
+ flock/frontend/src/components/filters/ProducerFilter.tsx,sha256=fqha0vPMea5V4EBNVYsh51bZ5TqFI8dv4ver34w7dl8,660
70
+ flock/frontend/src/components/filters/SavedFiltersControl.module.css,sha256=JJ06RS7JU91tv62vr-6Af6QTNVQSzY0GzenLh7sK1wA,1155
71
+ flock/frontend/src/components/filters/SavedFiltersControl.test.tsx,sha256=2RLvLx61NjcQZwQZO-TpU5TrTOo-6QCpYv4Jyh_ykFg,5309
72
+ flock/frontend/src/components/filters/SavedFiltersControl.tsx,sha256=flh6_4RPSQ1jxC-T0GzA3bJIQ0dwBSptV78U34eWgIU,4976
73
+ flock/frontend/src/components/filters/TagFilter.tsx,sha256=k6f7V_PNJRhTRDoFOrZDo_Msa64moDcBlQw6nokasFY,625
74
+ flock/frontend/src/components/filters/TimeRangeFilter.module.css,sha256=iownJK2OYJJGiyyCM9OYjwDkuT4F8exmHdpFr9mfcVM,2849
70
75
  flock/frontend/src/components/filters/TimeRangeFilter.test.tsx,sha256=4vkGYNecXcwOzp5Oikgyl3B2T0PHGrRpfSZ3Cwv0Tn4,4934
71
- flock/frontend/src/components/filters/TimeRangeFilter.tsx,sha256=xwTPRl-NbSEvSrX4krvLPb40GvCjdoUp-FqRbVZBzbU,3148
76
+ flock/frontend/src/components/filters/TimeRangeFilter.tsx,sha256=4-INbQXk0RrDfP4NK1LBNcLQQWhNYos2Ken8cizb114,3311
77
+ flock/frontend/src/components/filters/VisibilityFilter.tsx,sha256=rFS4U90ltzYIUyfVR8NFRDLuTOLZdk_rTIQsXlB9EuI,679
72
78
  flock/frontend/src/components/graph/AgentNode.test.tsx,sha256=Wd3AGe1E9GJ26wyRU1AUakki9AQ9euYsKx5lhi1xAfg,1966
73
79
  flock/frontend/src/components/graph/AgentNode.tsx,sha256=JOSMiR_YXq6MgME2DfhqHldS_4zZEPySEIEM6t4fg48,12447
74
- flock/frontend/src/components/graph/GraphCanvas.tsx,sha256=vMLbZie9Isnlr2pflQTRGLgME8a8Q8zXRg4qLGW7Vw4,20809
80
+ flock/frontend/src/components/graph/GraphCanvas.tsx,sha256=x8wBiXgfZjR9AhDhvEg8udZHHF7V9AuvTLE8dxUmRNc,21733
75
81
  flock/frontend/src/components/graph/MessageFlowEdge.tsx,sha256=OWYmmlS5P9yIxfCddEleEd27MA-djMd_3fcQmyT22r4,3914
76
82
  flock/frontend/src/components/graph/MessageNode.test.tsx,sha256=S0vmtk2r4HGm8844Pb65syim-ZsCqvia24CECGgq5SY,1828
77
83
  flock/frontend/src/components/graph/MessageNode.tsx,sha256=axwYof1z3UtLO0QDPfTKnZX6w_TNFlZvVJsun1aDD_k,3645
78
84
  flock/frontend/src/components/graph/MiniMap.tsx,sha256=i2lQ51EAp35mwo2C35U6zktwm8o54iKm4MBSN4UJh3Y,1305
79
85
  flock/frontend/src/components/graph/TransformEdge.tsx,sha256=dL-FH4a7ujNd7mBgzQvFXrj_KvZeyYXKoEALfnDDCxA,3737
80
- flock/frontend/src/components/layout/DashboardLayout.css,sha256=6OnMe7oSz52dKIqaAhyTQttomYy_5aZxzR0BomLTJzE,9060
81
- flock/frontend/src/components/layout/DashboardLayout.tsx,sha256=FUWHKENHkRfaor3Let4QnE42MBh6FdJP7Xpb1gyGSYM,11366
86
+ flock/frontend/src/components/layout/DashboardLayout.css,sha256=CPiz_GqEMx6WDR6FTtlnbLJJPVKezNxdKLM7DJ3ANv8,9409
87
+ flock/frontend/src/components/layout/DashboardLayout.tsx,sha256=RX5_N2NkANyh8b1FC69HOkJaNV8DyBtuDyVfyS73JmE,10692
82
88
  flock/frontend/src/components/layout/Header.module.css,sha256=BstB1qIzIbGiFmdLVWQnN0Q9iKteDJlBlWApGAcHfTo,1984
83
89
  flock/frontend/src/components/layout/Header.tsx,sha256=0Fkd2-KIvbhExizfAa05uSrUBkahD2CCadn0hGFrr1o,1486
84
- flock/frontend/src/components/modules/EventLogModule.test.tsx,sha256=S-0fd5qy5QMutvIc7liZ8sCJWBR-fqePN27gMNqaU-E,14386
85
- flock/frontend/src/components/modules/EventLogModule.tsx,sha256=9IY_eJq4WLY0ZwABFWH__C34UfwL4J_0_U_Jwmqypt0,14941
86
- flock/frontend/src/components/modules/EventLogModuleWrapper.tsx,sha256=daT8R3jSBTe4WU2orr9SwbW40osPsvbzmBL3nQo_GOU,506
90
+ flock/frontend/src/components/modules/HistoricalArtifactsModule.module.css,sha256=uYZSaOhobVNAWiJ8xOgWNucjUhla86cTtkErEB3kDIc,5722
91
+ flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx,sha256=gREg5zUuGWsRsjRlnq5CaNbcn3TPR0tmVspJmRtJPWE,17567
92
+ flock/frontend/src/components/modules/HistoricalArtifactsModuleWrapper.tsx,sha256=2E9Uv0YqGw3oqbnw4sTkG5ZztX5Irh6TWj87XQkhFMw,451
87
93
  flock/frontend/src/components/modules/JsonAttributeRenderer.tsx,sha256=PyZAzcEpmVXkWVY4WU08haxY6aqEsaw2k3EPfFKYGF4,4835
88
94
  flock/frontend/src/components/modules/ModuleRegistry.test.ts,sha256=gwpRhu0cKp_V3cODpiVKNIMOs33Z6vUxuWpWGmm2Z7U,10419
89
- flock/frontend/src/components/modules/ModuleRegistry.ts,sha256=Zgnr7pa-hcGc-o7gKs1NYKuZAjZp8EORKMnLFSK7iT8,2410
95
+ flock/frontend/src/components/modules/ModuleRegistry.ts,sha256=5d-a_7h_SC-vFi7ssMVBZDq6HjvG0zxCvcgbChVWog8,2563
90
96
  flock/frontend/src/components/modules/ModuleWindow.tsx,sha256=RCeWOHWRAWsz46rzGdaBJz61ZJn1rMs2_wePNLeu5OM,7746
91
97
  flock/frontend/src/components/modules/TraceModuleJaeger.tsx,sha256=V_QoDKiN4danykesL5suIVnGH2tz7U2fDr565t5ZSB4,78275
92
98
  flock/frontend/src/components/modules/TraceModuleJaegerWrapper.tsx,sha256=CLUVG79wEAWTXdMsoBAwR-fRmg_gdjBPcFSk8Zh80w8,390
93
- flock/frontend/src/components/modules/registerModules.ts,sha256=WRS_mK9Ye35DBdLlC50v9LhGVG42QwdOTrKl-YvRba4,926
99
+ flock/frontend/src/components/modules/registerModules.ts,sha256=iU-dTGBf4tVfsw9gA4LTnlCiFCTVW4S6-UOxXziuU7c,971
94
100
  flock/frontend/src/components/settings/AdvancedSettings.tsx,sha256=Ngw5jAIRn3ocXC9r89EwpMJRCK8kMO-Jj2pBZhJ-Uls,6349
95
101
  flock/frontend/src/components/settings/AppearanceSettings.tsx,sha256=UHH4BcJ9-F-nRJEJf2rzmX0W-0hvmeKo6AYNF3lZPWE,6872
96
102
  flock/frontend/src/components/settings/GraphSettings.tsx,sha256=qX1F4hnsxGcCbn3oHP7nsPPMLyETHG3UL55kJ_3tA-s,3815
@@ -102,21 +108,21 @@ flock/frontend/src/components/settings/TracingSettings.tsx,sha256=zHZrUuVQzUANcl
102
108
  flock/frontend/src/hooks/useKeyboardShortcuts.ts,sha256=Dsf64nPtJdW2kV-a-bBpaq1VXZkXyxpioBnI1WIGduM,5019
103
109
  flock/frontend/src/hooks/useModulePersistence.test.ts,sha256=kqYlFSzqYK_0jGxeRTeXORZ2KTDo3MdByJ2t2ivbg20,14323
104
110
  flock/frontend/src/hooks/useModulePersistence.ts,sha256=ShXIE-OkwJrMYUNRDGjbZQVs4TK97sI85uc0BG6NuWo,5338
105
- flock/frontend/src/hooks/useModules.ts,sha256=2CHNKidXOPvWfmP_Zb5od1deXonRUp1gNvgrQW0qOPg,4962
111
+ flock/frontend/src/hooks/useModules.ts,sha256=2Nmp0GmhWTThMeYkT241VQx0PmFL3BeF31886_n9DSU,5454
106
112
  flock/frontend/src/hooks/usePersistence.ts,sha256=J4vFL2a2cS_haQeAMXStzgJMKSvpC8XidzeuOZXaTog,4483
107
- flock/frontend/src/services/api.ts,sha256=hGkImiimpSOX9xjmX5flI1Ug6YVh7EbRr7l0rq_h9GE,5207
113
+ flock/frontend/src/services/api.ts,sha256=7-p4CltdA4cyU7RIGrE-PEP6sBv_wFO8dRc-pUOPmOw,8881
108
114
  flock/frontend/src/services/indexeddb.test.ts,sha256=lY1JzyKRd4Kaw135JlO7njy5rpaAsRRXLM8SwYxDhAc,27452
109
- flock/frontend/src/services/indexeddb.ts,sha256=Eadllc6tPh09RhJPjCd6MO0tdh8PWX5Hoxy8HX9HQS0,26915
115
+ flock/frontend/src/services/indexeddb.ts,sha256=gSTkrR-JJlN9ovDuLK45uQrYSrS2dwgOcy14C1pvNdY,28708
110
116
  flock/frontend/src/services/layout.test.ts,sha256=-KwUxWCum_Rsyc5NIpk99UB3prfAkMO5ksJULhjOiwA,16174
111
117
  flock/frontend/src/services/layout.ts,sha256=5WzlOv7OBlQXiUxrv4l1JwaAfHbUK1C99JOT0fQCNRY,9503
112
118
  flock/frontend/src/services/themeApplicator.ts,sha256=utRFw-45e1IEOrI6lHkB_E_-5kc2kFKbN-veAUdXiOM,5802
113
119
  flock/frontend/src/services/themeService.ts,sha256=ltDAE30KzzVFDQJGm8awN0Go-l16NgTWYOxlvgxvx0E,1743
114
120
  flock/frontend/src/services/websocket.test.ts,sha256=Ix5dQI3lzKJPyFPcTs5yXxu8ZZoJ05f1CWgcQEpCOtg,17062
115
- flock/frontend/src/services/websocket.ts,sha256=KTabOBuwoi2fm5P4PGDT6F0mZP5yZbRUMV9y32o8x-E,23994
116
- flock/frontend/src/store/filterStore.test.ts,sha256=i1vMdkgEn2zrlioloGG-R1mVP_E-r6Bejdh2E9XPUoM,7678
117
- flock/frontend/src/store/filterStore.ts,sha256=PRZuJeH-KKIS1fYVbkz0un76gJB-efy3o0rsJeQqRY8,2952
118
- flock/frontend/src/store/graphStore.test.ts,sha256=33Q4X5sUS4BDE_boT7zYgEXpsFVDOe4LJn7qcOKQt2E,4792
119
- flock/frontend/src/store/graphStore.ts,sha256=CwyoQp2vz8FKN2CNQ06Li-nwLWikTczf-27ZAfXFdV0,14703
121
+ flock/frontend/src/services/websocket.ts,sha256=u0wWytdtkmQAQ1IpdAbLGDeHSlRuD8v6kemcAt0neQc,29327
122
+ flock/frontend/src/store/filterStore.test.ts,sha256=RUGFlpGe5DUb77Qw4HJvuXEt4vD8GrFUjub9FZMzJ40,5856
123
+ flock/frontend/src/store/filterStore.ts,sha256=qq_iHF4pTyQ_tAbEavkjf9eTg1n4HmBqN_nETWgs8FE,8087
124
+ flock/frontend/src/store/graphStore.test.ts,sha256=ji7r1tJghKEHfWGJ0u7fBiyyJCVbkkZ-6dwAxTvrxaM,5322
125
+ flock/frontend/src/store/graphStore.ts,sha256=FYHDsi7kbV6d72nfOyES38izaJkQgdU3joyLfzM3n78,19621
120
126
  flock/frontend/src/store/moduleStore.test.ts,sha256=VxkoEPu0-B3ln20oBk3xLN-c7J55hMYLN2wQQPs4q-k,7800
121
127
  flock/frontend/src/store/moduleStore.ts,sha256=rlC412QuCCrV7xAtcyaqU3eJkx0KNWR9OTewjniiT3g,1617
122
128
  flock/frontend/src/store/settingsStore.ts,sha256=JNB25kkKxOlaSY1jFTM64BGynhUZ98jZL1mM87PLCF0,5995
@@ -128,10 +134,11 @@ flock/frontend/src/styles/index.css,sha256=HVMvVEMvlFk8_vqxBdt8CzkleXkV-oSUcQUzo
128
134
  flock/frontend/src/styles/scrollbar.css,sha256=OHH2nryMANNvuJBloG_t1BPY_BtKMSb36Df4q2X47Rk,1207
129
135
  flock/frontend/src/styles/variables.css,sha256=EcOH8mb8ZIoGZU5c-K_2zcuGdtbu_vQWk_gC-X6vtmk,13889
130
136
  flock/frontend/src/test/setup.ts,sha256=pG1mhRrywFboBf3VdL9ew62xGBxDxeQfChxZLjOK_mQ,36
131
- flock/frontend/src/types/filters.ts,sha256=mZMrXh0vzhjBAjtTj9EE9IgApUPmwyBzsIk1Ez2guhk,313
132
- flock/frontend/src/types/graph.ts,sha256=E1Kwhg1MyVZypB8uYh9srcHrxEh18px4ZzWvPifJjss,1774
137
+ flock/frontend/src/types/filters.ts,sha256=zPa4AvL9xudvB6RZsqJCllMoLTnvPuBhqU6vLeWO89Y,1041
138
+ flock/frontend/src/types/graph.ts,sha256=c9H3cdc11Q1ToxUMetCUnbD68nrUWooI2DXVfS8YacE,1943
133
139
  flock/frontend/src/types/modules.ts,sha256=l5ThtDoD1AxXLjGya-EdQM3eAU55Q0J4XZHQsFrUWws,341
134
140
  flock/frontend/src/types/theme.ts,sha256=bjV2zWxBJilEXeosjSSirw05dL7zICShUDx2H0oA5J8,903
141
+ flock/frontend/src/utils/artifacts.ts,sha256=JjbNXKgcBaUJdR7VKDi0LK0T3d-ltYt4HHbiQNB3rmI,790
135
142
  flock/frontend/src/utils/mockData.ts,sha256=kAYLkUZCmz09wj6p2q_ZqBUNNROyOFJz5uF3M4nBJRk,1961
136
143
  flock/frontend/src/utils/performance.ts,sha256=ZcZjR8DKwF2ixveng2tKIRiW8wZ-ee_RPZFfi1jm4Zo,507
137
144
  flock/frontend/src/utils/transforms.test.ts,sha256=zqScvoEyXk_UPaQj2UuJGc5c85p1_8juBwHUF6slnxA,27171
@@ -152,9 +159,9 @@ flock/logging/telemetry_exporter/duckdb_exporter.py,sha256=MoFFsAb-twZF9ZAB0s8TO
152
159
  flock/logging/telemetry_exporter/file_exporter.py,sha256=uTgQZSKfbLjzypirBbiVnccaKBDkiRzhFvUdV26pKEY,3126
153
160
  flock/logging/telemetry_exporter/sqlite_exporter.py,sha256=754G8s4X-JHHpCdoNydJnPX4NZijZk9URutfPWFIT7s,3479
154
161
  flock/mcp/__init__.py,sha256=QuANhTz09E2fFhtp2yJ716WxXKwEpCMTGqHj54VRs2Q,2512
155
- flock/mcp/client.py,sha256=QcxSdj3iUsWSsOR0l2IpZdr_dyvaqslmyuSk_LZEamQ,24610
156
- flock/mcp/config.py,sha256=QJcP_r8uE_1mdxMIUop7ca-CtJuEZwUXgUqCjR_a2UU,15326
157
- flock/mcp/manager.py,sha256=wD48yi9oD7Y4ZBCi2HmdJ8TFNO__ODsj8KuRa4UTMxM,9658
162
+ flock/mcp/client.py,sha256=FRkuWNohFhzAzv-8aLz8Nd3CxkCf_SgHpfbPGTjRbMg,25790
163
+ flock/mcp/config.py,sha256=EgCFYTkV97fy8PlmnFVkB8FLCCSIni5vF3mQB0Yy-3c,14850
164
+ flock/mcp/manager.py,sha256=X54Ph5CtcIIZNuWndSH2sZijVjVBpPCNHS4M-B1bViU,10942
158
165
  flock/mcp/tool.py,sha256=cn59dFM1wD0_hl0GjcHxtVYEmPClqskYVMc9AVMB9RY,5397
159
166
  flock/mcp/servers/sse/__init__.py,sha256=qyfDdkZkgscHOkFREvsvoNtzA-CCnXPNma5w9uaIUCo,51
160
167
  flock/mcp/servers/sse/flock_sse_server.py,sha256=dbkRAcn11V9bBEoPlCMuuzuErTjHigqsnvGYJL4v2ts,3685
@@ -165,7 +172,7 @@ flock/mcp/servers/streamable_http/flock_streamable_http_server.py,sha256=qPAypNi
165
172
  flock/mcp/servers/websockets/__init__.py,sha256=KeNgNQRdeCQ9xgpaHB1I0-HyYeBhkifAuZPTIA8eDqM,47
166
173
  flock/mcp/servers/websockets/flock_websocket_server.py,sha256=UywSLftw3stbg_b-3Ygn_tNMo5Btm6I3bmSebcprfjk,3118
167
174
  flock/mcp/types/__init__.py,sha256=iwO7MXRjA-WhIyHSCI9fR6KF_UhzjqXJWT13f_8w4HM,1274
168
- flock/mcp/types/callbacks.py,sha256=9Ex-giTw1D6CNWIUq988SmWYoEqcDPGcJlZmS3fwjNQ,2399
175
+ flock/mcp/types/callbacks.py,sha256=8S-ZhWTnR7dzUtxTc9nFcKCDbNyhnE3Bsm1QpA_ArEg,2607
169
176
  flock/mcp/types/factories.py,sha256=B7h8apMDT2nR6POOj7aWWn39UbELt6nxHluPhRmemGw,3424
170
177
  flock/mcp/types/handlers.py,sha256=6ukkSMv1VZSfk2QDUiJnm8xifHnQvWZsxWXqN21BYSg,7804
171
178
  flock/mcp/types/types.py,sha256=ZbzbVihABFnfmZz2X-CCN7hQDzaSY0T-en43PFbFwQQ,11469
@@ -508,8 +515,8 @@ flock/themes/zenburned.toml,sha256=UEmquBbcAO3Zj652XKUwCsNoC2iQSlIh-q5c6DH-7Kc,1
508
515
  flock/themes/zenwritten-dark.toml,sha256=-dgaUfg1iCr5Dv4UEeHv_cN4GrPUCWAiHSxWK20X1kI,1663
509
516
  flock/themes/zenwritten-light.toml,sha256=G1iEheCPfBNsMTGaVpEVpDzYBHA_T-MV27rolUYolmE,1666
510
517
  flock/utility/output_utility_component.py,sha256=yVHhlIIIoYKziI5UyT_zvQb4G-NsxCTgLwA1wXXTTj4,9047
511
- flock_core-0.5.0b63.dist-info/METADATA,sha256=dFHOh--Y96joJgB4NdboiySS8gX3kAN2imVW3bEBAgc,34949
512
- flock_core-0.5.0b63.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
513
- flock_core-0.5.0b63.dist-info/entry_points.txt,sha256=UQdPmtHd97gSA_IdLt9MOd-1rrf_WO-qsQeIiHWVrp4,42
514
- flock_core-0.5.0b63.dist-info/licenses/LICENSE,sha256=U3IZuTbC0yLj7huwJdldLBipSOHF4cPf6cUOodFiaBE,1072
515
- flock_core-0.5.0b63.dist-info/RECORD,,
518
+ flock_core-0.5.0b70.dist-info/METADATA,sha256=7HdFD28o8dnz71ZYg2lFJ-omhj_v1mFjb3JvmKO1Irg,36377
519
+ flock_core-0.5.0b70.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
520
+ flock_core-0.5.0b70.dist-info/entry_points.txt,sha256=UQdPmtHd97gSA_IdLt9MOd-1rrf_WO-qsQeIiHWVrp4,42
521
+ flock_core-0.5.0b70.dist-info/licenses/LICENSE,sha256=U3IZuTbC0yLj7huwJdldLBipSOHF4cPf6cUOodFiaBE,1072
522
+ flock_core-0.5.0b70.dist-info/RECORD,,
@@ -1,29 +0,0 @@
1
- .filterBar {
2
- display: flex;
3
- flex-direction: column;
4
- gap: var(--space-layout-sm);
5
- padding: var(--space-layout-sm) var(--space-layout-md);
6
- background-color: var(--color-bg-elevated);
7
- border-bottom: 1px solid var(--color-border-subtle);
8
- }
9
-
10
- .filterControls {
11
- display: flex;
12
- gap: var(--space-layout-sm);
13
- align-items: flex-start;
14
- flex-wrap: wrap;
15
- }
16
-
17
- .filterGroup {
18
- display: flex;
19
- flex-direction: column;
20
- gap: var(--gap-md);
21
- }
22
-
23
- .filterLabel {
24
- font-size: var(--font-size-overline);
25
- font-weight: var(--font-weight-semibold);
26
- color: var(--color-text-tertiary);
27
- text-transform: uppercase;
28
- letter-spacing: var(--letter-spacing-wider);
29
- }
@@ -1,133 +0,0 @@
1
- import { describe, it, expect, vi } from 'vitest';
2
- import { render, screen } from '@testing-library/react';
3
- import FilterBar from './FilterBar';
4
- import { useFilterStore } from '../../store/filterStore';
5
-
6
- vi.mock('../../store/filterStore');
7
- vi.mock('./CorrelationIDFilter', () => ({
8
- default: () => <div data-testid="correlation-id-filter">CorrelationIDFilter</div>,
9
- }));
10
- vi.mock('./TimeRangeFilter', () => ({
11
- default: () => <div data-testid="time-range-filter">TimeRangeFilter</div>,
12
- }));
13
- vi.mock('./FilterPills', () => ({
14
- default: () => <div data-testid="filter-pills">FilterPills</div>,
15
- }));
16
-
17
- describe('FilterBar', () => {
18
- it('should render all filter components', () => {
19
- vi.mocked(useFilterStore).mockImplementation((selector: any) => {
20
- const state = {
21
- correlationId: null,
22
- timeRange: { preset: 'last10min' },
23
- availableCorrelationIds: [],
24
- getActiveFilters: () => [],
25
- };
26
- return selector(state);
27
- });
28
-
29
- render(<FilterBar />);
30
-
31
- expect(screen.getByTestId('correlation-id-filter')).toBeInTheDocument();
32
- expect(screen.getByTestId('time-range-filter')).toBeInTheDocument();
33
- expect(screen.getByTestId('filter-pills')).toBeInTheDocument();
34
- });
35
-
36
- it('should have proper layout structure', () => {
37
- vi.mocked(useFilterStore).mockImplementation((selector: any) => {
38
- const state = {
39
- correlationId: null,
40
- timeRange: { preset: 'last10min' },
41
- availableCorrelationIds: [],
42
- getActiveFilters: () => [],
43
- };
44
- return selector(state);
45
- });
46
-
47
- const { container } = render(<FilterBar />);
48
-
49
- // Should have a container with CSS module class (hashed)
50
- const filterBar = container.firstChild as HTMLElement;
51
- expect(filterBar.className).toMatch(/filterBar/);
52
- });
53
-
54
- it('should render correlation ID filter and time range filter in top row', () => {
55
- vi.mocked(useFilterStore).mockImplementation((selector: any) => {
56
- const state = {
57
- correlationId: null,
58
- timeRange: { preset: 'last10min' },
59
- availableCorrelationIds: [],
60
- getActiveFilters: () => [],
61
- };
62
- return selector(state);
63
- });
64
-
65
- render(<FilterBar />);
66
-
67
- const correlationFilter = screen.getByTestId('correlation-id-filter');
68
- const timeRangeFilter = screen.getByTestId('time-range-filter');
69
-
70
- // Both should be present
71
- expect(correlationFilter).toBeInTheDocument();
72
- expect(timeRangeFilter).toBeInTheDocument();
73
- });
74
-
75
- it('should render filter pills below filter controls', () => {
76
- vi.mocked(useFilterStore).mockImplementation((selector: any) => {
77
- const state = {
78
- correlationId: 'test-123',
79
- timeRange: { preset: 'last5min' },
80
- availableCorrelationIds: [],
81
- getActiveFilters: () => [
82
- {
83
- type: 'correlationId',
84
- value: 'test-123',
85
- label: 'Correlation ID: test-123',
86
- },
87
- ],
88
- };
89
- return selector(state);
90
- });
91
-
92
- render(<FilterBar />);
93
-
94
- expect(screen.getByTestId('filter-pills')).toBeInTheDocument();
95
- });
96
-
97
- it('should have appropriate spacing between components', () => {
98
- vi.mocked(useFilterStore).mockImplementation((selector: any) => {
99
- const state = {
100
- correlationId: null,
101
- timeRange: { preset: 'last10min' },
102
- availableCorrelationIds: [],
103
- getActiveFilters: () => [],
104
- };
105
- return selector(state);
106
- });
107
-
108
- const { container } = render(<FilterBar />);
109
- const filterBar = container.firstChild as HTMLElement;
110
-
111
- // Should have filter controls with CSS module class (hashed)
112
- const filterControls = filterBar.querySelector('[class*="filterControls"]');
113
- expect(filterControls).toBeInTheDocument();
114
- });
115
-
116
- it('should maintain consistent styling with dashboard theme', () => {
117
- vi.mocked(useFilterStore).mockImplementation((selector: any) => {
118
- const state = {
119
- correlationId: null,
120
- timeRange: { preset: 'last10min' },
121
- availableCorrelationIds: [],
122
- getActiveFilters: () => [],
123
- };
124
- return selector(state);
125
- });
126
-
127
- const { container } = render(<FilterBar />);
128
- const filterBar = container.firstChild as HTMLElement;
129
-
130
- // Should have padding and background consistent with dashboard
131
- expect(filterBar).toBeDefined();
132
- });
133
- });
@@ -1,33 +0,0 @@
1
- import React from 'react';
2
- import CorrelationIDFilter from './CorrelationIDFilter';
3
- import TimeRangeFilter from './TimeRangeFilter';
4
- import FilterPills from './FilterPills';
5
- import styles from './FilterBar.module.css';
6
-
7
- const FilterBar: React.FC = () => {
8
- return (
9
- <div className={styles.filterBar}>
10
- {/* Filter Controls */}
11
- <div className={styles.filterControls}>
12
- <div className={styles.filterGroup}>
13
- <label className={styles.filterLabel}>
14
- Correlation ID
15
- </label>
16
- <CorrelationIDFilter />
17
- </div>
18
-
19
- <div className={styles.filterGroup}>
20
- <label className={styles.filterLabel}>
21
- Time Range
22
- </label>
23
- <TimeRangeFilter />
24
- </div>
25
- </div>
26
-
27
- {/* Active Filter Pills */}
28
- <FilterPills />
29
- </div>
30
- );
31
- };
32
-
33
- export default FilterBar;