flock-core 0.5.0b71__py3-none-any.whl → 0.5.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of flock-core might be problematic. Click here for more details.
- flock/agent.py +39 -1
- flock/artifacts.py +17 -10
- flock/cli.py +1 -1
- flock/dashboard/__init__.py +2 -0
- flock/dashboard/collector.py +282 -6
- flock/dashboard/events.py +6 -0
- flock/dashboard/graph_builder.py +563 -0
- flock/dashboard/launcher.py +11 -6
- flock/dashboard/models/__init__.py +1 -0
- flock/dashboard/models/graph.py +156 -0
- flock/dashboard/service.py +175 -14
- flock/dashboard/static_v2/assets/index-DFRnI_mt.js +111 -0
- flock/dashboard/static_v2/assets/index-fPLNdmp1.css +1 -0
- flock/dashboard/static_v2/index.html +13 -0
- flock/dashboard/websocket.py +2 -2
- flock/engines/dspy_engine.py +294 -20
- flock/frontend/README.md +6 -6
- flock/frontend/src/App.tsx +23 -31
- flock/frontend/src/__tests__/integration/graph-snapshot.test.tsx +647 -0
- flock/frontend/src/components/details/DetailWindowContainer.tsx +13 -17
- flock/frontend/src/components/details/MessageDetailWindow.tsx +439 -0
- flock/frontend/src/components/details/MessageHistoryTab.tsx +128 -53
- flock/frontend/src/components/details/RunStatusTab.tsx +79 -38
- flock/frontend/src/components/graph/AgentNode.test.tsx +3 -1
- flock/frontend/src/components/graph/AgentNode.tsx +8 -6
- flock/frontend/src/components/graph/GraphCanvas.tsx +13 -8
- flock/frontend/src/components/graph/MessageNode.test.tsx +3 -1
- flock/frontend/src/components/graph/MessageNode.tsx +16 -3
- flock/frontend/src/components/layout/DashboardLayout.tsx +12 -9
- flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx +4 -14
- flock/frontend/src/components/modules/ModuleRegistry.ts +5 -3
- flock/frontend/src/hooks/useModules.ts +12 -4
- flock/frontend/src/hooks/usePersistence.ts +5 -3
- flock/frontend/src/services/api.ts +3 -19
- flock/frontend/src/services/graphService.test.ts +330 -0
- flock/frontend/src/services/graphService.ts +75 -0
- flock/frontend/src/services/websocket.ts +104 -268
- flock/frontend/src/store/filterStore.test.ts +89 -1
- flock/frontend/src/store/filterStore.ts +38 -16
- flock/frontend/src/store/graphStore.test.ts +538 -173
- flock/frontend/src/store/graphStore.ts +374 -465
- flock/frontend/src/store/moduleStore.ts +51 -33
- flock/frontend/src/store/uiStore.ts +23 -11
- flock/frontend/src/types/graph.ts +77 -44
- flock/frontend/src/utils/mockData.ts +16 -3
- flock/frontend/vite.config.ts +2 -2
- flock/orchestrator.py +27 -7
- flock/patches/__init__.py +5 -0
- flock/patches/dspy_streaming_patch.py +82 -0
- flock/service.py +2 -2
- flock/store.py +169 -4
- flock/themes/darkmatrix.toml +2 -2
- flock/themes/deep.toml +2 -2
- flock/themes/neopolitan.toml +4 -4
- {flock_core-0.5.0b71.dist-info → flock_core-0.5.1.dist-info}/METADATA +20 -13
- {flock_core-0.5.0b71.dist-info → flock_core-0.5.1.dist-info}/RECORD +59 -53
- flock/frontend/src/__tests__/e2e/critical-scenarios.test.tsx +0 -586
- flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx +0 -391
- flock/frontend/src/__tests__/integration/graph-rendering.test.tsx +0 -640
- flock/frontend/src/services/websocket.test.ts +0 -595
- flock/frontend/src/utils/transforms.test.ts +0 -860
- flock/frontend/src/utils/transforms.ts +0 -323
- {flock_core-0.5.0b71.dist-info → flock_core-0.5.1.dist-info}/WHEEL +0 -0
- {flock_core-0.5.0b71.dist-info → flock_core-0.5.1.dist-info}/entry_points.txt +0 -0
- {flock_core-0.5.0b71.dist-info → flock_core-0.5.1.dist-info}/licenses/LICENSE +0 -0
flock/store.py
CHANGED
|
@@ -109,6 +109,20 @@ class ArtifactEnvelope:
|
|
|
109
109
|
consumptions: list[ConsumptionRecord] = field(default_factory=list)
|
|
110
110
|
|
|
111
111
|
|
|
112
|
+
@dataclass(slots=True)
|
|
113
|
+
class AgentSnapshotRecord:
|
|
114
|
+
"""Persistent metadata about an agent's behaviour."""
|
|
115
|
+
|
|
116
|
+
agent_name: str
|
|
117
|
+
description: str
|
|
118
|
+
subscriptions: list[str]
|
|
119
|
+
output_types: list[str]
|
|
120
|
+
labels: list[str]
|
|
121
|
+
first_seen: datetime
|
|
122
|
+
last_seen: datetime
|
|
123
|
+
signature: str
|
|
124
|
+
|
|
125
|
+
|
|
112
126
|
class BlackboardStore:
|
|
113
127
|
async def publish(self, artifact: Artifact) -> None:
|
|
114
128
|
raise NotImplementedError
|
|
@@ -155,6 +169,29 @@ class BlackboardStore:
|
|
|
155
169
|
"""Search artifacts with filtering and pagination."""
|
|
156
170
|
raise NotImplementedError
|
|
157
171
|
|
|
172
|
+
async def fetch_graph_artifacts(
|
|
173
|
+
self,
|
|
174
|
+
filters: FilterConfig | None = None,
|
|
175
|
+
*,
|
|
176
|
+
limit: int = 500,
|
|
177
|
+
offset: int = 0,
|
|
178
|
+
) -> tuple[list[ArtifactEnvelope], int]:
|
|
179
|
+
"""Return artifact envelopes (artifact + consumptions) for graph assembly."""
|
|
180
|
+
artifacts, total = await self.query_artifacts(
|
|
181
|
+
filters=filters,
|
|
182
|
+
limit=limit,
|
|
183
|
+
offset=offset,
|
|
184
|
+
embed_meta=True,
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
envelopes: list[ArtifactEnvelope] = []
|
|
188
|
+
for item in artifacts:
|
|
189
|
+
if isinstance(item, ArtifactEnvelope):
|
|
190
|
+
envelopes.append(item)
|
|
191
|
+
elif isinstance(item, Artifact):
|
|
192
|
+
envelopes.append(ArtifactEnvelope(artifact=item))
|
|
193
|
+
return envelopes, total
|
|
194
|
+
|
|
158
195
|
async def summarize_artifacts(
|
|
159
196
|
self,
|
|
160
197
|
filters: FilterConfig | None = None,
|
|
@@ -170,6 +207,18 @@ class BlackboardStore:
|
|
|
170
207
|
"""Return produced/consumed counts for the specified agent."""
|
|
171
208
|
raise NotImplementedError
|
|
172
209
|
|
|
210
|
+
async def upsert_agent_snapshot(self, snapshot: AgentSnapshotRecord) -> None:
|
|
211
|
+
"""Persist metadata describing an agent."""
|
|
212
|
+
raise NotImplementedError
|
|
213
|
+
|
|
214
|
+
async def load_agent_snapshots(self) -> list[AgentSnapshotRecord]:
|
|
215
|
+
"""Return all persisted agent metadata records."""
|
|
216
|
+
raise NotImplementedError
|
|
217
|
+
|
|
218
|
+
async def clear_agent_snapshots(self) -> None:
|
|
219
|
+
"""Remove all persisted agent metadata."""
|
|
220
|
+
raise NotImplementedError
|
|
221
|
+
|
|
173
222
|
|
|
174
223
|
class InMemoryBlackboardStore(BlackboardStore):
|
|
175
224
|
"""Simple in-memory implementation suitable for local dev and tests."""
|
|
@@ -179,6 +228,7 @@ class InMemoryBlackboardStore(BlackboardStore):
|
|
|
179
228
|
self._by_id: dict[UUID, Artifact] = {}
|
|
180
229
|
self._by_type: dict[str, list[Artifact]] = defaultdict(list)
|
|
181
230
|
self._consumptions_by_artifact: dict[UUID, list[ConsumptionRecord]] = defaultdict(list)
|
|
231
|
+
self._agent_snapshots: dict[str, AgentSnapshotRecord] = {}
|
|
182
232
|
|
|
183
233
|
async def publish(self, artifact: Artifact) -> None:
|
|
184
234
|
async with self._lock:
|
|
@@ -250,9 +300,7 @@ class InMemoryBlackboardStore(BlackboardStore):
|
|
|
250
300
|
return False
|
|
251
301
|
if filters.start and artifact.created_at < filters.start:
|
|
252
302
|
return False
|
|
253
|
-
|
|
254
|
-
return False
|
|
255
|
-
return True
|
|
303
|
+
return not (filters.end and artifact.created_at > filters.end)
|
|
256
304
|
|
|
257
305
|
filtered = [artifact for artifact in artifacts if _matches(artifact)]
|
|
258
306
|
filtered.sort(key=lambda a: (a.created_at, a.id))
|
|
@@ -371,8 +419,21 @@ class InMemoryBlackboardStore(BlackboardStore):
|
|
|
371
419
|
"consumed": {"total": consumed_total, "by_type": dict(consumed_by_type)},
|
|
372
420
|
}
|
|
373
421
|
|
|
422
|
+
async def upsert_agent_snapshot(self, snapshot: AgentSnapshotRecord) -> None:
|
|
423
|
+
async with self._lock:
|
|
424
|
+
self._agent_snapshots[snapshot.agent_name] = snapshot
|
|
425
|
+
|
|
426
|
+
async def load_agent_snapshots(self) -> list[AgentSnapshotRecord]:
|
|
427
|
+
async with self._lock:
|
|
428
|
+
return list(self._agent_snapshots.values())
|
|
429
|
+
|
|
430
|
+
async def clear_agent_snapshots(self) -> None:
|
|
431
|
+
async with self._lock:
|
|
432
|
+
self._agent_snapshots.clear()
|
|
433
|
+
|
|
374
434
|
|
|
375
435
|
__all__ = [
|
|
436
|
+
"AgentSnapshotRecord",
|
|
376
437
|
"BlackboardStore",
|
|
377
438
|
"InMemoryBlackboardStore",
|
|
378
439
|
"SQLiteBlackboardStore",
|
|
@@ -382,7 +443,7 @@ __all__ = [
|
|
|
382
443
|
class SQLiteBlackboardStore(BlackboardStore):
|
|
383
444
|
"""SQLite-backed implementation of :class:`BlackboardStore`."""
|
|
384
445
|
|
|
385
|
-
SCHEMA_VERSION =
|
|
446
|
+
SCHEMA_VERSION = 3
|
|
386
447
|
|
|
387
448
|
def __init__(self, db_path: str, *, timeout: float = 5.0) -> None:
|
|
388
449
|
self._db_path = Path(db_path)
|
|
@@ -498,6 +559,20 @@ class SQLiteBlackboardStore(BlackboardStore):
|
|
|
498
559
|
)
|
|
499
560
|
await conn.commit()
|
|
500
561
|
|
|
562
|
+
async def fetch_graph_artifacts( # type: ignore[override]
|
|
563
|
+
self,
|
|
564
|
+
filters: FilterConfig | None = None,
|
|
565
|
+
*,
|
|
566
|
+
limit: int = 500,
|
|
567
|
+
offset: int = 0,
|
|
568
|
+
) -> tuple[list[ArtifactEnvelope], int]:
|
|
569
|
+
with tracer.start_as_current_span("sqlite_store.fetch_graph_artifacts"):
|
|
570
|
+
return await super().fetch_graph_artifacts(
|
|
571
|
+
filters,
|
|
572
|
+
limit=limit,
|
|
573
|
+
offset=offset,
|
|
574
|
+
)
|
|
575
|
+
|
|
501
576
|
async def get(self, artifact_id: UUID) -> Artifact | None: # type: ignore[override]
|
|
502
577
|
with tracer.start_as_current_span("sqlite_store.get"):
|
|
503
578
|
conn = await self._get_connection()
|
|
@@ -835,6 +910,78 @@ class SQLiteBlackboardStore(BlackboardStore):
|
|
|
835
910
|
"consumed": {"total": consumed_total, "by_type": consumed_by_type},
|
|
836
911
|
}
|
|
837
912
|
|
|
913
|
+
async def upsert_agent_snapshot(self, snapshot: AgentSnapshotRecord) -> None:
|
|
914
|
+
with tracer.start_as_current_span("sqlite_store.upsert_agent_snapshot"):
|
|
915
|
+
conn = await self._get_connection()
|
|
916
|
+
payload = {
|
|
917
|
+
"agent_name": snapshot.agent_name,
|
|
918
|
+
"description": snapshot.description,
|
|
919
|
+
"subscriptions": json.dumps(snapshot.subscriptions),
|
|
920
|
+
"output_types": json.dumps(snapshot.output_types),
|
|
921
|
+
"labels": json.dumps(snapshot.labels),
|
|
922
|
+
"first_seen": snapshot.first_seen.isoformat(),
|
|
923
|
+
"last_seen": snapshot.last_seen.isoformat(),
|
|
924
|
+
"signature": snapshot.signature,
|
|
925
|
+
}
|
|
926
|
+
async with self._write_lock:
|
|
927
|
+
await conn.execute(
|
|
928
|
+
"""
|
|
929
|
+
INSERT INTO agent_snapshots (
|
|
930
|
+
agent_name, description, subscriptions, output_types, labels,
|
|
931
|
+
first_seen, last_seen, signature
|
|
932
|
+
) VALUES (
|
|
933
|
+
:agent_name, :description, :subscriptions, :output_types, :labels,
|
|
934
|
+
:first_seen, :last_seen, :signature
|
|
935
|
+
)
|
|
936
|
+
ON CONFLICT(agent_name) DO UPDATE SET
|
|
937
|
+
description=excluded.description,
|
|
938
|
+
subscriptions=excluded.subscriptions,
|
|
939
|
+
output_types=excluded.output_types,
|
|
940
|
+
labels=excluded.labels,
|
|
941
|
+
first_seen=excluded.first_seen,
|
|
942
|
+
last_seen=excluded.last_seen,
|
|
943
|
+
signature=excluded.signature
|
|
944
|
+
""",
|
|
945
|
+
payload,
|
|
946
|
+
)
|
|
947
|
+
await conn.commit()
|
|
948
|
+
|
|
949
|
+
async def load_agent_snapshots(self) -> list[AgentSnapshotRecord]:
|
|
950
|
+
with tracer.start_as_current_span("sqlite_store.load_agent_snapshots"):
|
|
951
|
+
conn = await self._get_connection()
|
|
952
|
+
cursor = await conn.execute(
|
|
953
|
+
"""
|
|
954
|
+
SELECT agent_name, description, subscriptions, output_types, labels,
|
|
955
|
+
first_seen, last_seen, signature
|
|
956
|
+
FROM agent_snapshots
|
|
957
|
+
"""
|
|
958
|
+
)
|
|
959
|
+
rows = await cursor.fetchall()
|
|
960
|
+
await cursor.close()
|
|
961
|
+
|
|
962
|
+
snapshots: list[AgentSnapshotRecord] = []
|
|
963
|
+
for row in rows:
|
|
964
|
+
snapshots.append(
|
|
965
|
+
AgentSnapshotRecord(
|
|
966
|
+
agent_name=row["agent_name"],
|
|
967
|
+
description=row["description"],
|
|
968
|
+
subscriptions=json.loads(row["subscriptions"] or "[]"),
|
|
969
|
+
output_types=json.loads(row["output_types"] or "[]"),
|
|
970
|
+
labels=json.loads(row["labels"] or "[]"),
|
|
971
|
+
first_seen=datetime.fromisoformat(row["first_seen"]),
|
|
972
|
+
last_seen=datetime.fromisoformat(row["last_seen"]),
|
|
973
|
+
signature=row["signature"],
|
|
974
|
+
)
|
|
975
|
+
)
|
|
976
|
+
return snapshots
|
|
977
|
+
|
|
978
|
+
async def clear_agent_snapshots(self) -> None:
|
|
979
|
+
with tracer.start_as_current_span("sqlite_store.clear_agent_snapshots"):
|
|
980
|
+
conn = await self._get_connection()
|
|
981
|
+
async with self._write_lock:
|
|
982
|
+
await conn.execute("DELETE FROM agent_snapshots")
|
|
983
|
+
await conn.commit()
|
|
984
|
+
|
|
838
985
|
async def ensure_schema(self) -> None:
|
|
839
986
|
conn = await self._ensure_connection()
|
|
840
987
|
await self._apply_schema(conn)
|
|
@@ -977,6 +1124,24 @@ class SQLiteBlackboardStore(BlackboardStore):
|
|
|
977
1124
|
ON artifact_consumptions(correlation_id)
|
|
978
1125
|
"""
|
|
979
1126
|
)
|
|
1127
|
+
await conn.execute(
|
|
1128
|
+
"""
|
|
1129
|
+
CREATE TABLE IF NOT EXISTS agent_snapshots (
|
|
1130
|
+
agent_name TEXT PRIMARY KEY,
|
|
1131
|
+
description TEXT NOT NULL,
|
|
1132
|
+
subscriptions TEXT NOT NULL,
|
|
1133
|
+
output_types TEXT NOT NULL,
|
|
1134
|
+
labels TEXT NOT NULL,
|
|
1135
|
+
first_seen TEXT NOT NULL,
|
|
1136
|
+
last_seen TEXT NOT NULL,
|
|
1137
|
+
signature TEXT NOT NULL
|
|
1138
|
+
)
|
|
1139
|
+
"""
|
|
1140
|
+
)
|
|
1141
|
+
await conn.execute(
|
|
1142
|
+
"UPDATE schema_meta SET version=? WHERE id=1",
|
|
1143
|
+
(self.SCHEMA_VERSION,),
|
|
1144
|
+
)
|
|
980
1145
|
await conn.commit()
|
|
981
1146
|
self._schema_ready = True
|
|
982
1147
|
|
flock/themes/darkmatrix.toml
CHANGED
|
@@ -21,7 +21,7 @@ normal_green = "#6fa64c"
|
|
|
21
21
|
normal_magenta = "#452d53"
|
|
22
22
|
normal_red = "#006536"
|
|
23
23
|
normal_white = "#006536"
|
|
24
|
-
normal_yellow = "#
|
|
24
|
+
normal_yellow = "#7e8344"
|
|
25
25
|
cursor_cursor = "#9fa86e"
|
|
26
26
|
cursor_text = "#00ff87"
|
|
27
27
|
table_show_lines = true
|
|
@@ -66,7 +66,7 @@ green = "#6fa64c"
|
|
|
66
66
|
magenta = "#452d53"
|
|
67
67
|
red = "#006536"
|
|
68
68
|
white = "#006536"
|
|
69
|
-
yellow = "#
|
|
69
|
+
yellow = "#7e8344"
|
|
70
70
|
|
|
71
71
|
[colors.primary]
|
|
72
72
|
background = "#070c0e"
|
flock/themes/deep.toml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[rich]
|
|
2
2
|
panel_style = "on #090909"
|
|
3
|
-
table_header_style = "bold #ececec on #
|
|
3
|
+
table_header_style = "bold #ececec on #783442"
|
|
4
4
|
table_title_style = "bold #cdcdcd"
|
|
5
5
|
table_border_style = "#9fa9ff"
|
|
6
6
|
panel_border_style = "#9fa9ff"
|
|
@@ -73,5 +73,5 @@ background = "#090909"
|
|
|
73
73
|
foreground = "#cdcdcd"
|
|
74
74
|
|
|
75
75
|
[colors.selection]
|
|
76
|
-
background = "#
|
|
76
|
+
background = "#783442"
|
|
77
77
|
text = "#ececec"
|
flock/themes/neopolitan.toml
CHANGED
|
@@ -11,7 +11,7 @@ bright_blue = "#253b76"
|
|
|
11
11
|
bright_cyan = "#8da6ce"
|
|
12
12
|
bright_green = "#61ce3c"
|
|
13
13
|
bright_magenta = "#ff0080"
|
|
14
|
-
bright_red = "#
|
|
14
|
+
bright_red = "#834400"
|
|
15
15
|
bright_white = "#f8f8f8"
|
|
16
16
|
bright_yellow = "#fbde2d"
|
|
17
17
|
normal_black = "#000000"
|
|
@@ -19,7 +19,7 @@ normal_blue = "#253b76"
|
|
|
19
19
|
normal_cyan = "#8da6ce"
|
|
20
20
|
normal_green = "#61ce3c"
|
|
21
21
|
normal_magenta = "#ff0080"
|
|
22
|
-
normal_red = "#
|
|
22
|
+
normal_red = "#834400"
|
|
23
23
|
normal_white = "#f8f8f8"
|
|
24
24
|
normal_yellow = "#fbde2d"
|
|
25
25
|
cursor_cursor = "#ffffff"
|
|
@@ -50,7 +50,7 @@ blue = "#253b76"
|
|
|
50
50
|
cyan = "#8da6ce"
|
|
51
51
|
green = "#61ce3c"
|
|
52
52
|
magenta = "#ff0080"
|
|
53
|
-
red = "#
|
|
53
|
+
red = "#834400"
|
|
54
54
|
white = "#f8f8f8"
|
|
55
55
|
yellow = "#fbde2d"
|
|
56
56
|
|
|
@@ -64,7 +64,7 @@ blue = "#253b76"
|
|
|
64
64
|
cyan = "#8da6ce"
|
|
65
65
|
green = "#61ce3c"
|
|
66
66
|
magenta = "#ff0080"
|
|
67
|
-
red = "#
|
|
67
|
+
red = "#834400"
|
|
68
68
|
white = "#f8f8f8"
|
|
69
69
|
yellow = "#fbde2d"
|
|
70
70
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flock-core
|
|
3
|
-
Version: 0.5.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.5.1
|
|
4
|
+
Summary: Flock: A declrative framework for building and orchestrating AI agents.
|
|
5
5
|
Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
|
|
6
6
|
License-File: LICENSE
|
|
7
7
|
Requires-Python: >=3.10
|
|
8
8
|
Requires-Dist: aiosqlite>=0.20.0
|
|
9
9
|
Requires-Dist: devtools>=0.12.2
|
|
10
|
-
Requires-Dist: dspy==3.0.
|
|
10
|
+
Requires-Dist: dspy==3.0.4b1
|
|
11
11
|
Requires-Dist: duckdb>=1.1.0
|
|
12
12
|
Requires-Dist: fastapi>=0.117.1
|
|
13
13
|
Requires-Dist: hanging-threads>=2.0.7
|
|
@@ -31,7 +31,7 @@ Requires-Dist: websockets>=15.0.1
|
|
|
31
31
|
Description-Content-Type: text/markdown
|
|
32
32
|
|
|
33
33
|
<p align="center">
|
|
34
|
-
<img alt="Flock Banner" src="
|
|
34
|
+
<img alt="Flock Banner" src="docs/assets/images/flock.png" width="800">
|
|
35
35
|
</p>
|
|
36
36
|
<p align="center">
|
|
37
37
|
<a href="https://docs.flock.whiteduck.de" target="_blank"><img alt="Documentation" src="https://img.shields.io/badge/docs-online-blue?style=for-the-badge&logo=readthedocs"></a>
|
|
@@ -675,13 +675,15 @@ Flock uses a fundamentally different coordination pattern than most multi-agent
|
|
|
675
675
|
- Type-safe retrieval API (`get_by_type()`)
|
|
676
676
|
|
|
677
677
|
**⚠️ What's missing for large-scale production:**
|
|
678
|
-
- **
|
|
679
|
-
- **Advanced retry logic** - Basic only
|
|
678
|
+
- **Advanced retry logic** - Basic only (exponential backoff planned)
|
|
680
679
|
- **Event replay** - No Kafka integration yet
|
|
681
680
|
- **Kubernetes-native deployment** - No Helm chart yet
|
|
682
681
|
- **OAuth/RBAC** - Dashboard has no auth
|
|
683
682
|
|
|
684
|
-
|
|
683
|
+
**✅ Available today:**
|
|
684
|
+
- **Persistent blackboard** - SQLiteBlackboardStore (see above)
|
|
685
|
+
|
|
686
|
+
All missing features planned for v1.0
|
|
685
687
|
|
|
686
688
|
### Recommended Use Cases Today
|
|
687
689
|
|
|
@@ -873,16 +875,21 @@ pip install flock-core
|
|
|
873
875
|
# Set API key
|
|
874
876
|
export OPENAI_API_KEY="sk-..."
|
|
875
877
|
|
|
876
|
-
# Try the
|
|
878
|
+
# Try the examples
|
|
877
879
|
git clone https://github.com/whiteducksoftware/flock-flow.git
|
|
878
880
|
cd flock-flow
|
|
879
|
-
|
|
881
|
+
|
|
882
|
+
# CLI examples with detailed output
|
|
883
|
+
uv run python examples/01-cli/01_declarative_pizza.py
|
|
884
|
+
|
|
885
|
+
# Dashboard examples with visualization
|
|
886
|
+
uv run python examples/02-dashboard/01_declarative_pizza.py
|
|
880
887
|
```
|
|
881
888
|
|
|
882
889
|
**Learn by doing:**
|
|
883
|
-
- 📚 [
|
|
884
|
-
-
|
|
885
|
-
-
|
|
890
|
+
- 📚 [Examples README](examples/README.md) - 12-step learning path from basics to advanced
|
|
891
|
+
- 🖥️ [CLI Examples](examples/01-cli/) - Detailed console output examples (01-12)
|
|
892
|
+
- 📊 [Dashboard Examples](examples/02-dashboard/) - Interactive visualization examples (01-12)
|
|
886
893
|
- 📖 [Documentation](https://docs.flock.whiteduck.de) - Complete online documentation
|
|
887
894
|
- 📘 [AGENTS.md](AGENTS.md) - Development guide
|
|
888
895
|
|
|
@@ -959,6 +966,6 @@ We're calling this 0.5 to signal:
|
|
|
959
966
|
|
|
960
967
|
---
|
|
961
968
|
|
|
962
|
-
**Last Updated:** October
|
|
969
|
+
**Last Updated:** October 13, 2025
|
|
963
970
|
**Version:** Flock 0.5.0 (Blackboard Edition)
|
|
964
971
|
**Status:** Production-Ready Core, Enterprise Features Roadmapped
|
|
@@ -1,41 +1,45 @@
|
|
|
1
1
|
flock/__init__.py,sha256=fvp4ltfaAGmYliShuTY_XVIpOUN6bMXbWiBnwb1NBoM,310
|
|
2
|
-
flock/agent.py,sha256=
|
|
3
|
-
flock/artifacts.py,sha256=
|
|
4
|
-
flock/cli.py,sha256=
|
|
2
|
+
flock/agent.py,sha256=pYqVb1Z6BzIpM8kJoSl1XmirF8u7Gi0YIbUuGB0pcv4,41327
|
|
3
|
+
flock/artifacts.py,sha256=3vQQ1J7QxTzeQBUGaNLiyojlmBv1NfdhFC98-qj8fpU,2541
|
|
4
|
+
flock/cli.py,sha256=lPtKxEXnGtyuTh0gyG3ixEIFS4Ty6Y0xsPd6SpUTD3U,4526
|
|
5
5
|
flock/components.py,sha256=17vhNMHKc3VUruEbSdb9YNKcDziIe0coS9jpfWBmX4o,6259
|
|
6
6
|
flock/examples.py,sha256=eQb8k6EYBbUhauFuSN_0EIIu5KW0mTqJU0HM4-p14sc,3632
|
|
7
|
-
flock/orchestrator.py,sha256=
|
|
7
|
+
flock/orchestrator.py,sha256=f7FD1i2bcpkHEER0w3DEgzcWp1AmmBSbegVODdhYxdY,36661
|
|
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=
|
|
11
|
-
flock/store.py,sha256=
|
|
10
|
+
flock/service.py,sha256=JDdjjPTPH6NFezAr8x6svtqxIGXA7-AyHS11GF57g9Q,11041
|
|
11
|
+
flock/store.py,sha256=H6z1_y5uDp_4UnHWqrxNksyoSGlzeVTgLY3Sv-guSTU,45793
|
|
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
|
|
15
15
|
flock/api/themes.py,sha256=BOj1e0LHx6BDLdnVdXh1LKsbQ_ZeubH9UCoj08dC1yc,1886
|
|
16
|
-
flock/dashboard/__init__.py,sha256=
|
|
17
|
-
flock/dashboard/collector.py,sha256=
|
|
18
|
-
flock/dashboard/events.py,sha256=
|
|
19
|
-
flock/dashboard/
|
|
20
|
-
flock/dashboard/
|
|
21
|
-
flock/dashboard/
|
|
16
|
+
flock/dashboard/__init__.py,sha256=_W6Id_Zb7mkSz0iHY1nfdUqF9p9uV_NyHsU7PFsRnFI,813
|
|
17
|
+
flock/dashboard/collector.py,sha256=ka29inyVWb3TpboboaZT3QQdviSNOKD8Wue7QCYO14w,21478
|
|
18
|
+
flock/dashboard/events.py,sha256=yULfn1H3BdjX_hO0echIpGXpbAj4sVfboeZwrlxMKN0,5571
|
|
19
|
+
flock/dashboard/graph_builder.py,sha256=u5Hp007Wr_v3aQI_0YzTit9hAGDc-gUiilnj-p114uo,21402
|
|
20
|
+
flock/dashboard/launcher.py,sha256=dCfwaeMLtyIkik3aVSEsbBdABS5ADRlKWYkih7sF5hM,8196
|
|
21
|
+
flock/dashboard/service.py,sha256=PzyJS3T3lSoC1sULdfKqUJyu2UUhtSV5xEG0LPhO4qI,39071
|
|
22
|
+
flock/dashboard/websocket.py,sha256=_DCZApJPXc8OQnxFDFS9TA9ozq7kM73QByRj-_a8n-8,9508
|
|
23
|
+
flock/dashboard/models/__init__.py,sha256=T4Yz8IXMm7lBqa2HLDSv7WJBtaKcdZIlTrz6GHNFZxs,68
|
|
24
|
+
flock/dashboard/models/graph.py,sha256=t159CMNavFYZB-qvSE5HRh9Zi_HOR4RYc8VzIngpx_E,5316
|
|
25
|
+
flock/dashboard/static_v2/index.html,sha256=iWL-fgTY2egom20DMvSOpuYZ6pC5AVvdNZcj-EvPm5w,422
|
|
26
|
+
flock/dashboard/static_v2/assets/index-DFRnI_mt.js,sha256=PVrBXxY3Igbf9dqtsWoCbhogEhibapLAwlMYV5Gv4pY,764870
|
|
27
|
+
flock/dashboard/static_v2/assets/index-fPLNdmp1.css,sha256=skpvfkkrlw7WbmBh7HN-rUKAtKP-gpuLUH4klUgFHT4,74529
|
|
22
28
|
flock/engines/__init__.py,sha256=waNyObJ8PKCLFZL3WUFynxSK-V47m559P3Px-vl_OSc,124
|
|
23
|
-
flock/engines/dspy_engine.py,sha256=
|
|
24
|
-
flock/frontend/README.md,sha256=
|
|
29
|
+
flock/engines/dspy_engine.py,sha256=o_k9mnWuxGN2jEL8KQmaBCGi6Aw8hQb9AZPsQRLRw3U,50921
|
|
30
|
+
flock/frontend/README.md,sha256=R1gqm524Xa5PZAkfl-IJDEf6VsBJ6ThrpY7SyDawjog,26232
|
|
25
31
|
flock/frontend/index.html,sha256=BFg1VR_YVAJ_MGN16xa7sT6wTGwtFYUhfJhGuKv89VM,312
|
|
26
32
|
flock/frontend/package-lock.json,sha256=1edo2JDle0if_MljnK4Xto7Q7hhGUEBQAvQFqKy9RzQ,150798
|
|
27
33
|
flock/frontend/package.json,sha256=4hHxn3NhjZnHgVM4tooAC0LnePEuC2QlrdwfgFjIj9Y,1258
|
|
28
34
|
flock/frontend/tsconfig.json,sha256=B9p9jXohg_jrCZAq5_yIHvznpeXHiHQkwUZrVE2oMRA,705
|
|
29
35
|
flock/frontend/tsconfig.node.json,sha256=u5_YWSqeNkZBRBIZ8Q2E2q6bospcyF23mO-taRO7glc,233
|
|
30
|
-
flock/frontend/vite.config.ts,sha256=
|
|
36
|
+
flock/frontend/vite.config.ts,sha256=M76uTsyn7fvHI4NhaGyizOGmml0fJvuhSljOQm_UvGs,566
|
|
31
37
|
flock/frontend/vitest.config.ts,sha256=xSWyGrBv2Cy_5eeZA68NCO5AXS6q8WKZXXzqu2JnXPY,244
|
|
32
38
|
flock/frontend/docs/DESIGN_SYSTEM.md,sha256=xDTKBDikSIyJMP5Lk0gWSimQHeXv8IzIuJR7SLOEdPY,48503
|
|
33
|
-
flock/frontend/src/App.tsx,sha256=
|
|
39
|
+
flock/frontend/src/App.tsx,sha256=3vwTT_WJP7OUb0LJDVMXfkb5hD-uZZmiGBK2wl1QgeM,5233
|
|
34
40
|
flock/frontend/src/main.tsx,sha256=sfWsPgNn5AyDH4LJJLTz2c5OwOPl0o4oi-FArpqc-W4,354
|
|
35
41
|
flock/frontend/src/vite-env.d.ts,sha256=tDjMtvUVN9uIgSCHe__Jhp0-nZiIV21pkcQuyOjaryw,344
|
|
36
|
-
flock/frontend/src/__tests__/
|
|
37
|
-
flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx,sha256=VrGOgI-4QaCIroIZIdtxxAP4Sw8UpPkMX5wMpcehmdU,11608
|
|
38
|
-
flock/frontend/src/__tests__/integration/graph-rendering.test.tsx,sha256=BrXule_v1w-Y_xMR1V318_QH3mIpYstxIWDnWVI5HbI,19845
|
|
42
|
+
flock/frontend/src/__tests__/integration/graph-snapshot.test.tsx,sha256=aipd0xV6zbNKOd6B9l_LY7GhMtj5H-kPRoEmEKgQw2w,19967
|
|
39
43
|
flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx,sha256=LDbotzC9cyTvyIhng8m_2TckZehD9zHemR6Ng3lSyV8,21825
|
|
40
44
|
flock/frontend/src/components/common/BuildInfo.tsx,sha256=9J5Fww8dhnrxywDvg6jVNrIlLbEGkuRD8Vv2naVQiWk,983
|
|
41
45
|
flock/frontend/src/components/common/EmptyState.module.css,sha256=3JID0CUKZ3UstUrwWKtKDKXVk9oWPXzB0-20fkIEb94,2373
|
|
@@ -49,13 +53,14 @@ flock/frontend/src/components/common/LoadingSpinner.tsx,sha256=ZtI9BOGQg4t-n923y
|
|
|
49
53
|
flock/frontend/src/components/controls/PublishControl.css,sha256=yr73R7lf1fnq22DoPsOOfe2vM_FiWr-ekr5pZE_-KxA,12504
|
|
50
54
|
flock/frontend/src/components/controls/PublishControl.test.tsx,sha256=AZiFHmInNPidbXX1dSMOxZd2kDAOgxCVB_IuzQu4K2Q,17675
|
|
51
55
|
flock/frontend/src/components/controls/PublishControl.tsx,sha256=P1l9TWkIjYJ2qawHSA-WlOuRsHOuGzKy6GosBfQialo,14729
|
|
52
|
-
flock/frontend/src/components/details/DetailWindowContainer.tsx,sha256=
|
|
56
|
+
flock/frontend/src/components/details/DetailWindowContainer.tsx,sha256=eKfFNBoSSl_JYj6Aaij9a9n6H24oQrfzZtE1uiUr0k8,1868
|
|
53
57
|
flock/frontend/src/components/details/LiveOutputTab.test.tsx,sha256=YyxsBP3QpbeWDGKNGZsOjqLLqUkvuI-L-5tB2Sh7ATc,24160
|
|
54
58
|
flock/frontend/src/components/details/LiveOutputTab.tsx,sha256=4mmN4DxI6rF9g9fVIAqbC8UsTwf4uzdNbPqGvvvP2FM,6908
|
|
55
|
-
flock/frontend/src/components/details/
|
|
59
|
+
flock/frontend/src/components/details/MessageDetailWindow.tsx,sha256=iypJQ6UTlbx-b-sTOg7RKjB_I3Drz40TVOU1Z5wU95A,16314
|
|
60
|
+
flock/frontend/src/components/details/MessageHistoryTab.tsx,sha256=VrL6iFRktFgAwmu0HuH0pCJgI73Fy5hIP17o9ImArI0,12610
|
|
56
61
|
flock/frontend/src/components/details/NodeDetailWindow.test.tsx,sha256=nmRhAN5NFXJzo-IybtjYc1RPctRZJizxg9gbgzIUcxg,18379
|
|
57
62
|
flock/frontend/src/components/details/NodeDetailWindow.tsx,sha256=yAwtio36uobKq75BQWYE_aX2gNcxUmUo946YX50l5oQ,7675
|
|
58
|
-
flock/frontend/src/components/details/RunStatusTab.tsx,sha256=
|
|
63
|
+
flock/frontend/src/components/details/RunStatusTab.tsx,sha256=_o4BD3tpSoHq-38W4iRZ8Cn67gLjjmwf7S49knBGxwY,11500
|
|
59
64
|
flock/frontend/src/components/details/tabs.test.tsx,sha256=drC38YbfUEvfp5eXzDU04IdHL_TlyxNP_lWEEYA7IP4,30519
|
|
60
65
|
flock/frontend/src/components/filters/ArtifactTypeFilter.tsx,sha256=fCB5KmF5phQ3vDVJ6XE_0TQQEMV0aZ1NIX3DbkS_mhs,690
|
|
61
66
|
flock/frontend/src/components/filters/CorrelationIDFilter.module.css,sha256=c_GWPe7itor8AbUYKlBV10JSGvI8_lLaMEXBKkMVbjk,2236
|
|
@@ -75,24 +80,24 @@ flock/frontend/src/components/filters/TimeRangeFilter.module.css,sha256=iownJK2O
|
|
|
75
80
|
flock/frontend/src/components/filters/TimeRangeFilter.test.tsx,sha256=4vkGYNecXcwOzp5Oikgyl3B2T0PHGrRpfSZ3Cwv0Tn4,4934
|
|
76
81
|
flock/frontend/src/components/filters/TimeRangeFilter.tsx,sha256=4-INbQXk0RrDfP4NK1LBNcLQQWhNYos2Ken8cizb114,3311
|
|
77
82
|
flock/frontend/src/components/filters/VisibilityFilter.tsx,sha256=rFS4U90ltzYIUyfVR8NFRDLuTOLZdk_rTIQsXlB9EuI,679
|
|
78
|
-
flock/frontend/src/components/graph/AgentNode.test.tsx,sha256=
|
|
79
|
-
flock/frontend/src/components/graph/AgentNode.tsx,sha256=
|
|
80
|
-
flock/frontend/src/components/graph/GraphCanvas.tsx,sha256=
|
|
83
|
+
flock/frontend/src/components/graph/AgentNode.test.tsx,sha256=D2OirlLSd22Ae5ocLLiBkL2lLz3vXtcx0LWAnqRYc58,2058
|
|
84
|
+
flock/frontend/src/components/graph/AgentNode.tsx,sha256=F_lSnQJK8GR1x1US6C1ch-3MNVrzs_sF4IwwYjiy63I,12626
|
|
85
|
+
flock/frontend/src/components/graph/GraphCanvas.tsx,sha256=O1fQKp7B1paDvwlG1nuy0t02aZuiNnj4Cy-qglYj21g,22124
|
|
81
86
|
flock/frontend/src/components/graph/MessageFlowEdge.tsx,sha256=OWYmmlS5P9yIxfCddEleEd27MA-djMd_3fcQmyT22r4,3914
|
|
82
|
-
flock/frontend/src/components/graph/MessageNode.test.tsx,sha256=
|
|
83
|
-
flock/frontend/src/components/graph/MessageNode.tsx,sha256=
|
|
87
|
+
flock/frontend/src/components/graph/MessageNode.test.tsx,sha256=xFBdOPQuWGm7_QUROkV8B9iRHEpyqsosxG_6i4K7ThE,1922
|
|
88
|
+
flock/frontend/src/components/graph/MessageNode.tsx,sha256=cirokPB3MKKLwCPtssGbD3FdhpxX5Ie2h1mM4Vv97w0,4114
|
|
84
89
|
flock/frontend/src/components/graph/MiniMap.tsx,sha256=i2lQ51EAp35mwo2C35U6zktwm8o54iKm4MBSN4UJh3Y,1305
|
|
85
90
|
flock/frontend/src/components/graph/TransformEdge.tsx,sha256=dL-FH4a7ujNd7mBgzQvFXrj_KvZeyYXKoEALfnDDCxA,3737
|
|
86
91
|
flock/frontend/src/components/layout/DashboardLayout.css,sha256=CPiz_GqEMx6WDR6FTtlnbLJJPVKezNxdKLM7DJ3ANv8,9409
|
|
87
|
-
flock/frontend/src/components/layout/DashboardLayout.tsx,sha256=
|
|
92
|
+
flock/frontend/src/components/layout/DashboardLayout.tsx,sha256=GyKvJZX-a3OwNsVgPxP26T-j6khh7B5tGpWrrRb0R1I,10906
|
|
88
93
|
flock/frontend/src/components/layout/Header.module.css,sha256=BstB1qIzIbGiFmdLVWQnN0Q9iKteDJlBlWApGAcHfTo,1984
|
|
89
94
|
flock/frontend/src/components/layout/Header.tsx,sha256=0Fkd2-KIvbhExizfAa05uSrUBkahD2CCadn0hGFrr1o,1486
|
|
90
95
|
flock/frontend/src/components/modules/HistoricalArtifactsModule.module.css,sha256=uYZSaOhobVNAWiJ8xOgWNucjUhla86cTtkErEB3kDIc,5722
|
|
91
|
-
flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx,sha256=
|
|
96
|
+
flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx,sha256=FIglwdVdIcZ1HRzV5Mvb1tjoNRZOitLTe7MHuBhZ5JI,17255
|
|
92
97
|
flock/frontend/src/components/modules/HistoricalArtifactsModuleWrapper.tsx,sha256=2E9Uv0YqGw3oqbnw4sTkG5ZztX5Irh6TWj87XQkhFMw,451
|
|
93
98
|
flock/frontend/src/components/modules/JsonAttributeRenderer.tsx,sha256=PyZAzcEpmVXkWVY4WU08haxY6aqEsaw2k3EPfFKYGF4,4835
|
|
94
99
|
flock/frontend/src/components/modules/ModuleRegistry.test.ts,sha256=gwpRhu0cKp_V3cODpiVKNIMOs33Z6vUxuWpWGmm2Z7U,10419
|
|
95
|
-
flock/frontend/src/components/modules/ModuleRegistry.ts,sha256=
|
|
100
|
+
flock/frontend/src/components/modules/ModuleRegistry.ts,sha256=axkqnpPNpGnSTdxdG0OzzJKHXQervOo9XSJIswHRazs,2809
|
|
96
101
|
flock/frontend/src/components/modules/ModuleWindow.tsx,sha256=RCeWOHWRAWsz46rzGdaBJz61ZJn1rMs2_wePNLeu5OM,7746
|
|
97
102
|
flock/frontend/src/components/modules/TraceModuleJaeger.tsx,sha256=V_QoDKiN4danykesL5suIVnGH2tz7U2fDr565t5ZSB4,78275
|
|
98
103
|
flock/frontend/src/components/modules/TraceModuleJaegerWrapper.tsx,sha256=CLUVG79wEAWTXdMsoBAwR-fRmg_gdjBPcFSk8Zh80w8,390
|
|
@@ -108,41 +113,40 @@ flock/frontend/src/components/settings/TracingSettings.tsx,sha256=zHZrUuVQzUANcl
|
|
|
108
113
|
flock/frontend/src/hooks/useKeyboardShortcuts.ts,sha256=Dsf64nPtJdW2kV-a-bBpaq1VXZkXyxpioBnI1WIGduM,5019
|
|
109
114
|
flock/frontend/src/hooks/useModulePersistence.test.ts,sha256=kqYlFSzqYK_0jGxeRTeXORZ2KTDo3MdByJ2t2ivbg20,14323
|
|
110
115
|
flock/frontend/src/hooks/useModulePersistence.ts,sha256=ShXIE-OkwJrMYUNRDGjbZQVs4TK97sI85uc0BG6NuWo,5338
|
|
111
|
-
flock/frontend/src/hooks/useModules.ts,sha256=
|
|
112
|
-
flock/frontend/src/hooks/usePersistence.ts,sha256=
|
|
113
|
-
flock/frontend/src/services/api.ts,sha256=
|
|
116
|
+
flock/frontend/src/hooks/useModules.ts,sha256=3p47NfBIOWVuHP6tH5sYKhiqK7TuJIsdB5VFJTvxHJI,5777
|
|
117
|
+
flock/frontend/src/hooks/usePersistence.ts,sha256=_fHxWLCwNunESIeJVqGB3Z-ANosRGwyAiISCtF5TcmY,4728
|
|
118
|
+
flock/frontend/src/services/api.ts,sha256=kNHBHvbSk50M3pUtwDMNYwco5Cd4AbQbGGHkpROYHhw,8529
|
|
119
|
+
flock/frontend/src/services/graphService.test.ts,sha256=wftS4QX-Bw6hogTWXVYaV3F7z6AN94d7iI8jrMVwwkg,11493
|
|
120
|
+
flock/frontend/src/services/graphService.ts,sha256=kgrbNo2Y2UTz1K5NtoVtKrbRkODW3q1orCLBiB477sg,1821
|
|
114
121
|
flock/frontend/src/services/indexeddb.test.ts,sha256=lY1JzyKRd4Kaw135JlO7njy5rpaAsRRXLM8SwYxDhAc,27452
|
|
115
122
|
flock/frontend/src/services/indexeddb.ts,sha256=gSTkrR-JJlN9ovDuLK45uQrYSrS2dwgOcy14C1pvNdY,28708
|
|
116
123
|
flock/frontend/src/services/layout.test.ts,sha256=-KwUxWCum_Rsyc5NIpk99UB3prfAkMO5ksJULhjOiwA,16174
|
|
117
124
|
flock/frontend/src/services/layout.ts,sha256=5WzlOv7OBlQXiUxrv4l1JwaAfHbUK1C99JOT0fQCNRY,9503
|
|
118
125
|
flock/frontend/src/services/themeApplicator.ts,sha256=utRFw-45e1IEOrI6lHkB_E_-5kc2kFKbN-veAUdXiOM,5802
|
|
119
126
|
flock/frontend/src/services/themeService.ts,sha256=ltDAE30KzzVFDQJGm8awN0Go-l16NgTWYOxlvgxvx0E,1743
|
|
120
|
-
flock/frontend/src/services/websocket.
|
|
121
|
-
flock/frontend/src/
|
|
122
|
-
flock/frontend/src/store/filterStore.
|
|
123
|
-
flock/frontend/src/store/
|
|
124
|
-
flock/frontend/src/store/graphStore.
|
|
125
|
-
flock/frontend/src/store/graphStore.ts,sha256=FYHDsi7kbV6d72nfOyES38izaJkQgdU3joyLfzM3n78,19621
|
|
127
|
+
flock/frontend/src/services/websocket.ts,sha256=P-qXMNfrC0kY3cOKhZBr_AG3lzEMcLUJ_fKyjU0xgyw,22753
|
|
128
|
+
flock/frontend/src/store/filterStore.test.ts,sha256=0KEaZI1aucfGwZSP76zmJUR2Xl0qqfXqImo-JuSdp4c,8868
|
|
129
|
+
flock/frontend/src/store/filterStore.ts,sha256=mJYzgdm_FFyq-irqfZ7O4-fLrPuRVPBgM7fcIRlP6_s,8967
|
|
130
|
+
flock/frontend/src/store/graphStore.test.ts,sha256=2Un9PaeoPyDqbodde8RPauWoTSc-Fb4ZOfXsvbe9uAY,19009
|
|
131
|
+
flock/frontend/src/store/graphStore.ts,sha256=eYRB-yIDzUdw9nMAKScyuEPTvGBfCaqQ2UJDGSxLL6E,15981
|
|
126
132
|
flock/frontend/src/store/moduleStore.test.ts,sha256=VxkoEPu0-B3ln20oBk3xLN-c7J55hMYLN2wQQPs4q-k,7800
|
|
127
|
-
flock/frontend/src/store/moduleStore.ts,sha256=
|
|
133
|
+
flock/frontend/src/store/moduleStore.ts,sha256=Y2iTxYikvzuZTGBHtFNofcenzljcHvDUDcrZ093XdPA,2361
|
|
128
134
|
flock/frontend/src/store/settingsStore.ts,sha256=JNB25kkKxOlaSY1jFTM64BGynhUZ98jZL1mM87PLCF0,5995
|
|
129
135
|
flock/frontend/src/store/streamStore.ts,sha256=yhwvyfaHCucrWeJE8pgTjKMU_2p3KdOqJqTupKaZ91w,1986
|
|
130
136
|
flock/frontend/src/store/uiStore.test.ts,sha256=rBkPBMn5ZF776TCUtpUvhn_8bpAAVmxaqGWqmiMCkYg,1712
|
|
131
|
-
flock/frontend/src/store/uiStore.ts,sha256=
|
|
137
|
+
flock/frontend/src/store/uiStore.ts,sha256=H5aH8YfaxOTfm3zCrT9A1QdC2dnHJWPUUg8uVRZRwoQ,4197
|
|
132
138
|
flock/frontend/src/store/wsStore.ts,sha256=vKaGd6H7UONN7A-8tCTOgdH8X2LxrZmVbZ7hRnfGQ2c,936
|
|
133
139
|
flock/frontend/src/styles/index.css,sha256=HVMvVEMvlFk8_vqxBdt8CzkleXkV-oSUcQUzom588PM,231
|
|
134
140
|
flock/frontend/src/styles/scrollbar.css,sha256=OHH2nryMANNvuJBloG_t1BPY_BtKMSb36Df4q2X47Rk,1207
|
|
135
141
|
flock/frontend/src/styles/variables.css,sha256=EcOH8mb8ZIoGZU5c-K_2zcuGdtbu_vQWk_gC-X6vtmk,13889
|
|
136
142
|
flock/frontend/src/test/setup.ts,sha256=pG1mhRrywFboBf3VdL9ew62xGBxDxeQfChxZLjOK_mQ,36
|
|
137
143
|
flock/frontend/src/types/filters.ts,sha256=zPa4AvL9xudvB6RZsqJCllMoLTnvPuBhqU6vLeWO89Y,1041
|
|
138
|
-
flock/frontend/src/types/graph.ts,sha256=
|
|
144
|
+
flock/frontend/src/types/graph.ts,sha256=dyvBEFXl490yGuCqBLMu-Pg82GuYBN-1E6hwE-OJpKM,2265
|
|
139
145
|
flock/frontend/src/types/modules.ts,sha256=l5ThtDoD1AxXLjGya-EdQM3eAU55Q0J4XZHQsFrUWws,341
|
|
140
146
|
flock/frontend/src/types/theme.ts,sha256=bjV2zWxBJilEXeosjSSirw05dL7zICShUDx2H0oA5J8,903
|
|
141
147
|
flock/frontend/src/utils/artifacts.ts,sha256=JjbNXKgcBaUJdR7VKDi0LK0T3d-ltYt4HHbiQNB3rmI,790
|
|
142
|
-
flock/frontend/src/utils/mockData.ts,sha256=
|
|
148
|
+
flock/frontend/src/utils/mockData.ts,sha256=XysjTPAcq6P7BXD8yHv-zJ5vNsxG1T5TLJjX4phOU_w,2316
|
|
143
149
|
flock/frontend/src/utils/performance.ts,sha256=ZcZjR8DKwF2ixveng2tKIRiW8wZ-ee_RPZFfi1jm4Zo,507
|
|
144
|
-
flock/frontend/src/utils/transforms.test.ts,sha256=zqScvoEyXk_UPaQj2UuJGc5c85p1_8juBwHUF6slnxA,27171
|
|
145
|
-
flock/frontend/src/utils/transforms.ts,sha256=a4SZJGchhnIjJugEIxvLqdvOgMlKIGZ3NsGTrhupE6A,10301
|
|
146
150
|
flock/helper/cli_helper.py,sha256=b76d8tiGFMLAHHuOdIPqAbwUtQ_T9jQfYn6tlR2VM9Y,50063
|
|
147
151
|
flock/logging/__init__.py,sha256=RyR9jTC0q02Fh0L8easQfki2uCOSTii5MPhrxcqQNsg,163
|
|
148
152
|
flock/logging/auto_trace.py,sha256=XN7_8iRO46FOHiy23F5_Iw7KFYAbALDmau6HOZAM2XY,5543
|
|
@@ -178,6 +182,8 @@ flock/mcp/types/handlers.py,sha256=6ukkSMv1VZSfk2QDUiJnm8xifHnQvWZsxWXqN21BYSg,7
|
|
|
178
182
|
flock/mcp/types/types.py,sha256=ZbzbVihABFnfmZz2X-CCN7hQDzaSY0T-en43PFbFwQQ,11469
|
|
179
183
|
flock/mcp/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
180
184
|
flock/mcp/util/helpers.py,sha256=jO8DqqSb_S4dyvsxv5vlMGRoMx92Su_5-Uv17gQNuLU,740
|
|
185
|
+
flock/patches/__init__.py,sha256=2turkIzq6C_DpIKDwah7aPd-1RFOAGX7dxTkaBd9X4w,193
|
|
186
|
+
flock/patches/dspy_streaming_patch.py,sha256=1vJ7t_PlBBza6MAQPiBhFn2A0k42tdYGs-WpC77BmDA,2762
|
|
181
187
|
flock/themes/3024-day.toml,sha256=uOVHqEzSyHx0WlUk3D0lne4RBsNBAPCTy3C58yU7kEY,667
|
|
182
188
|
flock/themes/3024-night.toml,sha256=qsXUwd6ZYz6J-R129_Ao2TKlvvK60svhZJJjB5c8Tfo,1667
|
|
183
189
|
flock/themes/aardvark-blue.toml,sha256=5ZgsxP3pWLPN3yJ2Wd9ErCo7fy_VJpIfje4kriDKlqo,1667
|
|
@@ -250,10 +256,10 @@ flock/themes/cyberpunkscarletprotocol.toml,sha256=7FXK3Ib6KQmXzhZGCqCI8rPXaIJDQ_
|
|
|
250
256
|
flock/themes/dark+.toml,sha256=vxlCM67BUd5D-KI5Jexwt8_ehGafn75vXQ340UHKKjg,1665
|
|
251
257
|
flock/themes/dark-pastel.toml,sha256=L4P4pFVhXKVpkXyYpDZi-UXew_SGwjKP1VAs3ttSYsc,1666
|
|
252
258
|
flock/themes/darkermatrix.toml,sha256=ywYr0sgPt3lNuFkvYsqhcEhaKhElbl1esqvUnqy4urw,1663
|
|
253
|
-
flock/themes/darkmatrix.toml,sha256=
|
|
259
|
+
flock/themes/darkmatrix.toml,sha256=DBOKRR4l4MOAIKC630OjX_hnjsE8mzFohhR8pQDH54o,1664
|
|
254
260
|
flock/themes/darkside.toml,sha256=WEVFxq1Ck65Q2TxOv_XyHklq6y9YbYZSb_HZMreNNck,1665
|
|
255
261
|
flock/themes/dayfox.toml,sha256=kbnXQGj_75GAuKHMYvT_ts7qCs3J-G_qXbzL-91Y1Yo,1664
|
|
256
|
-
flock/themes/deep.toml,sha256=
|
|
262
|
+
flock/themes/deep.toml,sha256=7a_-BPwBdRn0Ihwm6fQTLG2KrKGtNzeO6tY2qYMF9_c,1667
|
|
257
263
|
flock/themes/desert.toml,sha256=uC_zHSWHBY0J3su7D8ZVO59APKYyGnQcFECgxNdQmOg,1664
|
|
258
264
|
flock/themes/dimidium.toml,sha256=rXRMrX618pbvYAUplKUaw-L91xldekPj_t0s3vv4w_k,1665
|
|
259
265
|
flock/themes/dimmedmonokai.toml,sha256=HWSs3s7ExTeGaUQLTTy9zLKKSSv0WUIoWbKppEChUiI,1667
|
|
@@ -376,7 +382,7 @@ flock/themes/n0tch2k.toml,sha256=rCIZZGcBfxvmW5o33f__8fxj1Td8oVz-U_Z6ZzQRWRc,166
|
|
|
376
382
|
flock/themes/neobones-dark.toml,sha256=8-K-IhLhDoNBugmidM6HpCfshjTebt92f2uIfP4cKwg,1674
|
|
377
383
|
flock/themes/neobones-light.toml,sha256=_C8dwiUEStJJK6eIwJ2XGIjnRGt3PI4XPOV6u0FQw2Y,1667
|
|
378
384
|
flock/themes/neon.toml,sha256=sS0HPAZvmkfJg8zjO7AWrckF2wUVPVOHppv748KS39s,1664
|
|
379
|
-
flock/themes/neopolitan.toml,sha256=
|
|
385
|
+
flock/themes/neopolitan.toml,sha256=ZVUqrED6Hnkp2RYVNriOfX-B5NND745G-twqVJ7vo8M,1664
|
|
380
386
|
flock/themes/neutron.toml,sha256=6-S0Ukn5VgHgdTAnSUOtiT0ns7PKkaTcKOG-VP3xV7k,1667
|
|
381
387
|
flock/themes/night-owlish-light.toml,sha256=sY7zp_FGS4XI53K83uW1RU8xFOc5mSzDZ26RpHiJLr0,1673
|
|
382
388
|
flock/themes/nightfox.toml,sha256=UkpMpHhwPIlgLRHjtTjLu2p4c8akEAd67_e3PyiFXQA,1665
|
|
@@ -515,8 +521,8 @@ flock/themes/zenburned.toml,sha256=UEmquBbcAO3Zj652XKUwCsNoC2iQSlIh-q5c6DH-7Kc,1
|
|
|
515
521
|
flock/themes/zenwritten-dark.toml,sha256=-dgaUfg1iCr5Dv4UEeHv_cN4GrPUCWAiHSxWK20X1kI,1663
|
|
516
522
|
flock/themes/zenwritten-light.toml,sha256=G1iEheCPfBNsMTGaVpEVpDzYBHA_T-MV27rolUYolmE,1666
|
|
517
523
|
flock/utility/output_utility_component.py,sha256=yVHhlIIIoYKziI5UyT_zvQb4G-NsxCTgLwA1wXXTTj4,9047
|
|
518
|
-
flock_core-0.5.
|
|
519
|
-
flock_core-0.5.
|
|
520
|
-
flock_core-0.5.
|
|
521
|
-
flock_core-0.5.
|
|
522
|
-
flock_core-0.5.
|
|
524
|
+
flock_core-0.5.1.dist-info/METADATA,sha256=1JRDjG80BKu6R0vwSpZRPXCGlYLKiHoDSVwpRLezdNQ,36531
|
|
525
|
+
flock_core-0.5.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
526
|
+
flock_core-0.5.1.dist-info/entry_points.txt,sha256=UQdPmtHd97gSA_IdLt9MOd-1rrf_WO-qsQeIiHWVrp4,42
|
|
527
|
+
flock_core-0.5.1.dist-info/licenses/LICENSE,sha256=U3IZuTbC0yLj7huwJdldLBipSOHF4cPf6cUOodFiaBE,1072
|
|
528
|
+
flock_core-0.5.1.dist-info/RECORD,,
|