flock-core 0.5.0b50__py3-none-any.whl → 0.5.0b52__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 (117) hide show
  1. flock/dashboard/launcher.py +1 -1
  2. flock/frontend/README.md +678 -0
  3. flock/frontend/docs/DESIGN_SYSTEM.md +1980 -0
  4. flock/frontend/index.html +12 -0
  5. flock/frontend/package-lock.json +4347 -0
  6. flock/frontend/package.json +48 -0
  7. flock/frontend/src/App.tsx +79 -0
  8. flock/frontend/src/__tests__/e2e/critical-scenarios.test.tsx +587 -0
  9. flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx +387 -0
  10. flock/frontend/src/__tests__/integration/graph-rendering.test.tsx +640 -0
  11. flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +699 -0
  12. flock/frontend/src/components/common/BuildInfo.tsx +39 -0
  13. flock/frontend/src/components/common/EmptyState.module.css +115 -0
  14. flock/frontend/src/components/common/EmptyState.tsx +128 -0
  15. flock/frontend/src/components/common/ErrorBoundary.module.css +169 -0
  16. flock/frontend/src/components/common/ErrorBoundary.tsx +118 -0
  17. flock/frontend/src/components/common/KeyboardShortcutsDialog.css +251 -0
  18. flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +151 -0
  19. flock/frontend/src/components/common/LoadingSpinner.module.css +97 -0
  20. flock/frontend/src/components/common/LoadingSpinner.tsx +29 -0
  21. flock/frontend/src/components/controls/PublishControl.css +547 -0
  22. flock/frontend/src/components/controls/PublishControl.test.tsx +543 -0
  23. flock/frontend/src/components/controls/PublishControl.tsx +432 -0
  24. flock/frontend/src/components/details/DetailWindowContainer.tsx +62 -0
  25. flock/frontend/src/components/details/LiveOutputTab.test.tsx +792 -0
  26. flock/frontend/src/components/details/LiveOutputTab.tsx +220 -0
  27. flock/frontend/src/components/details/MessageHistoryTab.tsx +299 -0
  28. flock/frontend/src/components/details/NodeDetailWindow.test.tsx +501 -0
  29. flock/frontend/src/components/details/NodeDetailWindow.tsx +218 -0
  30. flock/frontend/src/components/details/RunStatusTab.tsx +307 -0
  31. flock/frontend/src/components/details/tabs.test.tsx +1015 -0
  32. flock/frontend/src/components/filters/CorrelationIDFilter.module.css +102 -0
  33. flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +197 -0
  34. flock/frontend/src/components/filters/CorrelationIDFilter.tsx +121 -0
  35. flock/frontend/src/components/filters/FilterBar.module.css +29 -0
  36. flock/frontend/src/components/filters/FilterBar.test.tsx +133 -0
  37. flock/frontend/src/components/filters/FilterBar.tsx +33 -0
  38. flock/frontend/src/components/filters/FilterPills.module.css +79 -0
  39. flock/frontend/src/components/filters/FilterPills.test.tsx +173 -0
  40. flock/frontend/src/components/filters/FilterPills.tsx +67 -0
  41. flock/frontend/src/components/filters/TimeRangeFilter.module.css +91 -0
  42. flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +154 -0
  43. flock/frontend/src/components/filters/TimeRangeFilter.tsx +105 -0
  44. flock/frontend/src/components/graph/AgentNode.test.tsx +75 -0
  45. flock/frontend/src/components/graph/AgentNode.tsx +322 -0
  46. flock/frontend/src/components/graph/GraphCanvas.tsx +406 -0
  47. flock/frontend/src/components/graph/MessageFlowEdge.tsx +128 -0
  48. flock/frontend/src/components/graph/MessageNode.test.tsx +62 -0
  49. flock/frontend/src/components/graph/MessageNode.tsx +116 -0
  50. flock/frontend/src/components/graph/MiniMap.tsx +47 -0
  51. flock/frontend/src/components/graph/TransformEdge.tsx +123 -0
  52. flock/frontend/src/components/layout/DashboardLayout.css +407 -0
  53. flock/frontend/src/components/layout/DashboardLayout.tsx +300 -0
  54. flock/frontend/src/components/layout/Header.module.css +88 -0
  55. flock/frontend/src/components/layout/Header.tsx +52 -0
  56. flock/frontend/src/components/modules/EventLogModule.test.tsx +401 -0
  57. flock/frontend/src/components/modules/EventLogModule.tsx +396 -0
  58. flock/frontend/src/components/modules/EventLogModuleWrapper.tsx +17 -0
  59. flock/frontend/src/components/modules/ModuleRegistry.test.ts +333 -0
  60. flock/frontend/src/components/modules/ModuleRegistry.ts +85 -0
  61. flock/frontend/src/components/modules/ModuleWindow.tsx +155 -0
  62. flock/frontend/src/components/modules/registerModules.ts +20 -0
  63. flock/frontend/src/components/settings/AdvancedSettings.tsx +175 -0
  64. flock/frontend/src/components/settings/AppearanceSettings.tsx +185 -0
  65. flock/frontend/src/components/settings/GraphSettings.tsx +110 -0
  66. flock/frontend/src/components/settings/SettingsPanel.css +327 -0
  67. flock/frontend/src/components/settings/SettingsPanel.tsx +131 -0
  68. flock/frontend/src/components/settings/ThemeSelector.tsx +298 -0
  69. flock/frontend/src/hooks/useKeyboardShortcuts.ts +148 -0
  70. flock/frontend/src/hooks/useModulePersistence.test.ts +442 -0
  71. flock/frontend/src/hooks/useModulePersistence.ts +154 -0
  72. flock/frontend/src/hooks/useModules.ts +139 -0
  73. flock/frontend/src/hooks/usePersistence.ts +139 -0
  74. flock/frontend/src/main.tsx +13 -0
  75. flock/frontend/src/services/api.ts +213 -0
  76. flock/frontend/src/services/indexeddb.test.ts +793 -0
  77. flock/frontend/src/services/indexeddb.ts +794 -0
  78. flock/frontend/src/services/layout.test.ts +437 -0
  79. flock/frontend/src/services/layout.ts +146 -0
  80. flock/frontend/src/services/themeApplicator.ts +140 -0
  81. flock/frontend/src/services/themeService.ts +77 -0
  82. flock/frontend/src/services/websocket.test.ts +595 -0
  83. flock/frontend/src/services/websocket.ts +685 -0
  84. flock/frontend/src/store/filterStore.test.ts +242 -0
  85. flock/frontend/src/store/filterStore.ts +103 -0
  86. flock/frontend/src/store/graphStore.test.ts +186 -0
  87. flock/frontend/src/store/graphStore.ts +414 -0
  88. flock/frontend/src/store/moduleStore.test.ts +253 -0
  89. flock/frontend/src/store/moduleStore.ts +57 -0
  90. flock/frontend/src/store/settingsStore.ts +188 -0
  91. flock/frontend/src/store/streamStore.ts +68 -0
  92. flock/frontend/src/store/uiStore.test.ts +54 -0
  93. flock/frontend/src/store/uiStore.ts +110 -0
  94. flock/frontend/src/store/wsStore.ts +34 -0
  95. flock/frontend/src/styles/index.css +15 -0
  96. flock/frontend/src/styles/scrollbar.css +47 -0
  97. flock/frontend/src/styles/variables.css +488 -0
  98. flock/frontend/src/test/setup.ts +1 -0
  99. flock/frontend/src/types/filters.ts +14 -0
  100. flock/frontend/src/types/graph.ts +55 -0
  101. flock/frontend/src/types/modules.ts +7 -0
  102. flock/frontend/src/types/theme.ts +55 -0
  103. flock/frontend/src/utils/mockData.ts +85 -0
  104. flock/frontend/src/utils/performance.ts +16 -0
  105. flock/frontend/src/utils/transforms.test.ts +860 -0
  106. flock/frontend/src/utils/transforms.ts +323 -0
  107. flock/frontend/src/vite-env.d.ts +17 -0
  108. flock/frontend/tsconfig.json +27 -0
  109. flock/frontend/tsconfig.node.json +11 -0
  110. flock/frontend/vite.config.ts +25 -0
  111. flock/frontend/vitest.config.ts +11 -0
  112. flock/helper/cli_helper.py +1 -1
  113. {flock_core-0.5.0b50.dist-info → flock_core-0.5.0b52.dist-info}/METADATA +1 -1
  114. {flock_core-0.5.0b50.dist-info → flock_core-0.5.0b52.dist-info}/RECORD +117 -7
  115. {flock_core-0.5.0b50.dist-info → flock_core-0.5.0b52.dist-info}/WHEEL +0 -0
  116. {flock_core-0.5.0b50.dist-info → flock_core-0.5.0b52.dist-info}/entry_points.txt +0 -0
  117. {flock_core-0.5.0b50.dist-info → flock_core-0.5.0b52.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,323 @@
1
+ import { Edge } from '@xyflow/react';
2
+
3
+ /**
4
+ * Phase 4: Graph Visualization & Dual Views - Edge Derivation Algorithms
5
+ *
6
+ * Implements edge derivation logic as specified in DATA_MODEL.md:
7
+ * - deriveAgentViewEdges: Creates message flow edges between agents (producer → consumer)
8
+ * - deriveBlackboardViewEdges: Creates transformation edges between artifacts (consumed → produced)
9
+ *
10
+ * SPECIFICATION: docs/specs/003-real-time-dashboard/DATA_MODEL.md lines 770-853
11
+ * REFERENCE: docs/specs/003-real-time-dashboard/PLAN.md Phase 4
12
+ */
13
+
14
+ // Type definitions matching DATA_MODEL.md specification
15
+ export interface Artifact {
16
+ artifact_id: string;
17
+ artifact_type: string;
18
+ produced_by: string;
19
+ consumed_by: string[];
20
+ published_at: string; // ISO timestamp
21
+ payload: any;
22
+ correlation_id: string;
23
+ }
24
+
25
+ export interface Run {
26
+ run_id: string;
27
+ agent_name: string;
28
+ correlation_id: string; // Groups multiple agent runs together
29
+ status: 'active' | 'completed' | 'error';
30
+ consumed_artifacts: string[];
31
+ produced_artifacts: string[];
32
+ duration_ms?: number;
33
+ started_at?: string;
34
+ completed_at?: string;
35
+ metrics?: {
36
+ tokensUsed?: number;
37
+ costUsd?: number;
38
+ artifactsProduced?: number;
39
+ };
40
+ error_message?: string;
41
+ }
42
+
43
+ export interface DashboardState {
44
+ artifacts: Map<string, Artifact>;
45
+ runs: Map<string, Run>;
46
+ consumptions: Map<string, string[]>; // Phase 11: Track actual consumption (artifact_id -> consumer_ids[])
47
+ }
48
+
49
+ // Edge type definitions from DATA_MODEL.md
50
+ // Note: Using camelCase for TypeScript/JavaScript convention
51
+ export interface AgentViewEdge extends Edge {
52
+ type: 'message_flow';
53
+ label: string; // Format: "messageType (count)"
54
+ data: {
55
+ messageType: string;
56
+ messageCount: number;
57
+ artifactIds: string[];
58
+ latestTimestamp: string;
59
+ labelOffset?: number; // Phase 11: Vertical offset in pixels to prevent label overlap
60
+ };
61
+ }
62
+
63
+ export interface BlackboardViewEdge extends Edge {
64
+ type: 'transformation';
65
+ label: string; // agentName
66
+ data: {
67
+ transformerAgent: string;
68
+ runId: string;
69
+ durationMs?: number;
70
+ labelOffset?: number; // Phase 11: Vertical offset in pixels to prevent label overlap
71
+ };
72
+ }
73
+
74
+ /**
75
+ * Derive Agent View edges from dashboard state
76
+ *
77
+ * Algorithm (DATA_MODEL.md lines 770-821):
78
+ * 1. Group messages by (producer, consumer, message_type)
79
+ * 2. Create one edge per unique triple
80
+ * 3. Count artifacts in each group
81
+ * 4. Track latest timestamp
82
+ * 5. Add label offset for multiple edges between same nodes (Phase 11 bug fix)
83
+ *
84
+ * Edge format:
85
+ * - ID: `${producer}_${consumer}_${message_type}`
86
+ * - Type: 'message_flow'
87
+ * - Label: "Type (N)" where N is the count
88
+ * - Data: { message_type, message_count, artifact_ids[], latest_timestamp, labelOffset }
89
+ *
90
+ * @param state - Dashboard state with artifacts and runs
91
+ * @returns Array of message flow edges
92
+ */
93
+ export function deriveAgentViewEdges(state: DashboardState): AgentViewEdge[] {
94
+ const edgeMap = new Map<
95
+ string,
96
+ {
97
+ source: string;
98
+ target: string;
99
+ message_type: string;
100
+ artifact_ids: string[];
101
+ latest_timestamp: string;
102
+ }
103
+ >();
104
+
105
+ // Iterate through all artifacts
106
+ state.artifacts.forEach((artifact) => {
107
+ const producer = artifact.produced_by;
108
+ const messageType = artifact.artifact_type;
109
+
110
+ // For each consumer, create or update edge
111
+ artifact.consumed_by.forEach((consumer) => {
112
+ const edgeKey = `${producer}_${consumer}_${messageType}`;
113
+
114
+ const existing = edgeMap.get(edgeKey);
115
+
116
+ if (existing) {
117
+ // Update existing edge
118
+ existing.artifact_ids.push(artifact.artifact_id);
119
+
120
+ // Update latest timestamp if this artifact is newer
121
+ if (artifact.published_at > existing.latest_timestamp) {
122
+ existing.latest_timestamp = artifact.published_at;
123
+ }
124
+ } else {
125
+ // Create new edge entry
126
+ edgeMap.set(edgeKey, {
127
+ source: producer,
128
+ target: consumer,
129
+ message_type: messageType,
130
+ artifact_ids: [artifact.artifact_id],
131
+ latest_timestamp: artifact.published_at,
132
+ });
133
+ }
134
+ });
135
+ });
136
+
137
+ // Phase 11 Bug Fix: Calculate label offsets for edges between same node pairs
138
+ // Group edges by node pair to detect multiple edges
139
+ // Use canonical pair key (sorted) so A→B and B→A are treated as same pair
140
+ const nodePairEdges = new Map<string, string[]>();
141
+ edgeMap.forEach((data, edgeKey) => {
142
+ const nodes = [data.source, data.target].sort();
143
+ const pairKey = `${nodes[0]}_${nodes[1]}`;
144
+ const existing = nodePairEdges.get(pairKey) || [];
145
+ existing.push(edgeKey);
146
+ nodePairEdges.set(pairKey, existing);
147
+ });
148
+
149
+ // Convert map to edges with label offsets
150
+ const edges: AgentViewEdge[] = [];
151
+
152
+ edgeMap.forEach((data, edgeKey) => {
153
+ const nodes = [data.source, data.target].sort();
154
+ const pairKey = `${nodes[0]}_${nodes[1]}`;
155
+ const edgesInPair = nodePairEdges.get(pairKey) || [];
156
+ const edgeIndex = edgesInPair.indexOf(edgeKey);
157
+ const totalEdgesInPair = edgesInPair.length;
158
+
159
+ // Calculate label offset (spread labels vertically if multiple edges)
160
+ // Offset range: -20 to +20 pixels for up to 3 edges, more if needed
161
+ let labelOffset = 0;
162
+ if (totalEdgesInPair > 1) {
163
+ const offsetRange = Math.min(40, totalEdgesInPair * 15);
164
+ const step = offsetRange / (totalEdgesInPair - 1);
165
+ labelOffset = edgeIndex * step - offsetRange / 2;
166
+ }
167
+
168
+ // Phase 11 Bug Fix: Calculate filtered count from actual consumption data
169
+ // Count how many artifacts were actually consumed by the target agent
170
+ const totalCount = data.artifact_ids.length;
171
+ const consumedCount = data.artifact_ids.filter((artifactId) => {
172
+ const consumers = state.consumptions.get(artifactId) || [];
173
+ return consumers.includes(data.target);
174
+ }).length;
175
+
176
+ // Format label: "Type (total, filtered: consumed)" if filtering occurred
177
+ let label = `${data.message_type} (${totalCount})`;
178
+ if (consumedCount < totalCount && consumedCount > 0) {
179
+ label = `${data.message_type} (${totalCount}, filtered: ${consumedCount})`;
180
+ }
181
+
182
+ edges.push({
183
+ id: edgeKey,
184
+ source: data.source,
185
+ target: data.target,
186
+ type: 'message_flow',
187
+ label,
188
+ markerEnd: {
189
+ type: 'arrowclosed',
190
+ width: 20,
191
+ height: 20,
192
+ },
193
+ data: {
194
+ messageType: data.message_type,
195
+ messageCount: data.artifact_ids.length,
196
+ artifactIds: data.artifact_ids,
197
+ latestTimestamp: data.latest_timestamp,
198
+ labelOffset, // Phase 11: Added for label positioning
199
+ },
200
+ });
201
+ });
202
+
203
+ return edges;
204
+ }
205
+
206
+ /**
207
+ * Derive Blackboard View edges from dashboard state
208
+ *
209
+ * Algorithm (DATA_MODEL.md lines 824-853):
210
+ * 1. For each completed run (status !== 'active')
211
+ * 2. Create edges from consumed artifacts to produced artifacts
212
+ * 3. Label with agent name
213
+ * 4. Include run metadata (run_id, duration_ms)
214
+ * 5. Add label offset for multiple edges between same artifacts (Phase 11 bug fix)
215
+ *
216
+ * Edge format:
217
+ * - ID: `${consumed_id}_${produced_id}_${run_id}` (Phase 11: Added run_id for uniqueness)
218
+ * - Type: 'transformation'
219
+ * - Label: agent_name
220
+ * - Data: { transformer_agent, run_id, duration_ms, labelOffset }
221
+ *
222
+ * @param state - Dashboard state with artifacts and runs
223
+ * @returns Array of transformation edges
224
+ */
225
+ export function deriveBlackboardViewEdges(
226
+ state: DashboardState
227
+ ): BlackboardViewEdge[] {
228
+ const tempEdges: Array<{
229
+ id: string;
230
+ source: string;
231
+ target: string;
232
+ label: string;
233
+ data: {
234
+ transformerAgent: string;
235
+ runId: string;
236
+ durationMs?: number;
237
+ };
238
+ }> = [];
239
+
240
+ // Iterate through all runs
241
+ state.runs.forEach((run) => {
242
+ // Skip active runs (only process completed or error runs)
243
+ if (run.status === 'active') {
244
+ return;
245
+ }
246
+
247
+ // Skip runs with no consumed or produced artifacts
248
+ if (
249
+ run.consumed_artifacts.length === 0 ||
250
+ run.produced_artifacts.length === 0
251
+ ) {
252
+ return;
253
+ }
254
+
255
+ // Create edges for each consumed × produced pair
256
+ run.consumed_artifacts.forEach((consumedId) => {
257
+ run.produced_artifacts.forEach((producedId) => {
258
+ // Phase 11: Include run_id in edge ID to make it unique per transformation
259
+ const edgeId = `${consumedId}_${producedId}_${run.run_id}`;
260
+
261
+ tempEdges.push({
262
+ id: edgeId,
263
+ source: consumedId,
264
+ target: producedId,
265
+ label: run.agent_name,
266
+ data: {
267
+ transformerAgent: run.agent_name,
268
+ runId: run.run_id,
269
+ durationMs: run.duration_ms,
270
+ },
271
+ });
272
+ });
273
+ });
274
+ });
275
+
276
+ // Phase 11 Bug Fix: Calculate label offsets for edges between same artifact pairs
277
+ // Group edges by artifact pair to detect multiple transformations
278
+ // Use canonical pair key (sorted) so A→B and B→A are treated as same pair
279
+ const artifactPairEdges = new Map<string, string[]>();
280
+ tempEdges.forEach((edge) => {
281
+ const nodes = [edge.source, edge.target].sort();
282
+ const pairKey = `${nodes[0]}_${nodes[1]}`;
283
+ const existing = artifactPairEdges.get(pairKey) || [];
284
+ existing.push(edge.id);
285
+ artifactPairEdges.set(pairKey, existing);
286
+ });
287
+
288
+ // Convert to final edges with label offsets
289
+ const edges: BlackboardViewEdge[] = tempEdges.map((edge) => {
290
+ const nodes = [edge.source, edge.target].sort();
291
+ const pairKey = `${nodes[0]}_${nodes[1]}`;
292
+ const edgesInPair = artifactPairEdges.get(pairKey) || [];
293
+ const edgeIndex = edgesInPair.indexOf(edge.id);
294
+ const totalEdgesInPair = edgesInPair.length;
295
+
296
+ // Calculate label offset (spread labels vertically if multiple transformations)
297
+ let labelOffset = 0;
298
+ if (totalEdgesInPair > 1) {
299
+ const offsetRange = Math.min(40, totalEdgesInPair * 15);
300
+ const step = offsetRange / (totalEdgesInPair - 1);
301
+ labelOffset = edgeIndex * step - offsetRange / 2;
302
+ }
303
+
304
+ return {
305
+ id: edge.id,
306
+ source: edge.source,
307
+ target: edge.target,
308
+ type: 'transformation',
309
+ label: edge.label,
310
+ markerEnd: {
311
+ type: 'arrowclosed',
312
+ width: 20,
313
+ height: 20,
314
+ },
315
+ data: {
316
+ ...edge.data,
317
+ labelOffset, // Phase 11: Added for label positioning
318
+ },
319
+ };
320
+ });
321
+
322
+ return edges;
323
+ }
@@ -0,0 +1,17 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ interface ImportMetaEnv {
4
+ readonly VITE_WS_URL?: string;
5
+ }
6
+
7
+ interface ImportMeta {
8
+ readonly env: ImportMetaEnv;
9
+ }
10
+
11
+ declare const __BUILD_TIMESTAMP__: string;
12
+ declare const __BUILD_HASH__: string;
13
+
14
+ declare module '*.module.css' {
15
+ const classes: { [key: string]: string };
16
+ export default classes;
17
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "useDefineForClassFields": true,
5
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
6
+ "module": "ESNext",
7
+ "skipLibCheck": true,
8
+
9
+ /* Bundler mode */
10
+ "moduleResolution": "bundler",
11
+ "allowImportingTsExtensions": true,
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "noEmit": true,
15
+ "jsx": "react-jsx",
16
+
17
+ /* Linting */
18
+ "strict": true,
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+ "noFallthroughCasesInSwitch": true,
22
+ "noUncheckedIndexedAccess": true,
23
+ "types": ["vitest/globals", "@testing-library/jest-dom"]
24
+ },
25
+ "include": ["src"],
26
+ "references": [{ "path": "./tsconfig.node.json" }]
27
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "skipLibCheck": true,
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "allowSyntheticDefaultImports": true,
8
+ "strict": true
9
+ },
10
+ "include": ["vite.config.ts"]
11
+ }
@@ -0,0 +1,25 @@
1
+ import { defineConfig } from 'vite';
2
+ import react from '@vitejs/plugin-react';
3
+
4
+ export default defineConfig({
5
+ plugins: [react()],
6
+ define: {
7
+ __BUILD_TIMESTAMP__: JSON.stringify(new Date().toISOString()),
8
+ __BUILD_HASH__: JSON.stringify(
9
+ Date.now().toString(36) + Math.random().toString(36).substring(2, 9)
10
+ ),
11
+ },
12
+ server: {
13
+ port: 5173,
14
+ proxy: {
15
+ '/api': {
16
+ target: 'http://localhost:8000',
17
+ changeOrigin: true,
18
+ },
19
+ '/ws': {
20
+ target: 'ws://localhost:8000',
21
+ ws: true,
22
+ },
23
+ },
24
+ },
25
+ });
@@ -0,0 +1,11 @@
1
+ import { defineConfig } from 'vitest/config';
2
+ import react from '@vitejs/plugin-react';
3
+
4
+ export default defineConfig({
5
+ plugins: [react()],
6
+ test: {
7
+ globals: true,
8
+ environment: 'jsdom',
9
+ setupFiles: './src/test/setup.ts',
10
+ },
11
+ });
@@ -4,7 +4,7 @@ from importlib.metadata import PackageNotFoundError, version
4
4
  try:
5
5
  __version__ = version("flock-flow")
6
6
  except PackageNotFoundError:
7
- __version__ = "0.2.0"
7
+ __version__ = "0.5.0b"
8
8
 
9
9
 
10
10
  def display_hummingbird():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flock-core
3
- Version: 0.5.0b50
3
+ Version: 0.5.0b52
4
4
  Summary: Add your description here
5
5
  Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
6
6
  License-File: LICENSE
@@ -16,12 +16,122 @@ flock/api/themes.py,sha256=BOj1e0LHx6BDLdnVdXh1LKsbQ_ZeubH9UCoj08dC1yc,1886
16
16
  flock/dashboard/__init__.py,sha256=6keizAfjuZJnM5S9wYVVqb2nJRVAa7nN1L0a288dbn8,734
17
17
  flock/dashboard/collector.py,sha256=dF8uddDMpOSdxGkhDSAvRNNaABo-TfOceipf1SQmLSU,10578
18
18
  flock/dashboard/events.py,sha256=ujdmRJK-GQubrv43qfQ73dnrTj7g39VzBkWfmskJ0j8,5234
19
- flock/dashboard/launcher.py,sha256=RPmRVcsR_a5x8PxiVR-MFU4AOvHsa54Y4nAuMjn7xhg,8136
19
+ flock/dashboard/launcher.py,sha256=zXWVpyLNxCIu6fJ2L2j2sJ4oDWTvkxhT4FWz7K6eooM,8122
20
20
  flock/dashboard/service.py,sha256=UFP2duq1r9AQ8keIRGgFjzszPQHxJd-oRSTZNrSQ1Vg,20598
21
21
  flock/dashboard/websocket.py,sha256=gGJPNLy4OR-0eTKJQ3oFmZVjCq-ulMNrKJVFCFcprhU,9003
22
22
  flock/engines/__init__.py,sha256=waNyObJ8PKCLFZL3WUFynxSK-V47m559P3Px-vl_OSc,124
23
23
  flock/engines/dspy_engine.py,sha256=Q2gPYLW_f8f-JuBYOMtjtoCZH8Fc447zWF8cHpJl4ew,34538
24
- flock/helper/cli_helper.py,sha256=WLl9bLyAB70jXujZ5OYpOS2MUOY2_eSZiJt88bEmENw,50062
24
+ flock/frontend/README.md,sha256=3qc7FyvqFGDqVzi_MJ33qSREN900BnkpFXDQ8cgz4jA,21866
25
+ flock/frontend/index.html,sha256=BFg1VR_YVAJ_MGN16xa7sT6wTGwtFYUhfJhGuKv89VM,312
26
+ flock/frontend/package-lock.json,sha256=5c-ZQHqHYZ2CHlsyHOBss-tncxplSuHO3mddWt_-jJM,150998
27
+ flock/frontend/package.json,sha256=MXt8jZodw6cysyJF-Hb50L_5AoMCEma5F80YGCp8fC4,1258
28
+ flock/frontend/tsconfig.json,sha256=B9p9jXohg_jrCZAq5_yIHvznpeXHiHQkwUZrVE2oMRA,705
29
+ flock/frontend/tsconfig.node.json,sha256=u5_YWSqeNkZBRBIZ8Q2E2q6bospcyF23mO-taRO7glc,233
30
+ flock/frontend/vite.config.ts,sha256=OQOr6Hl75iW7EvEm2_GXFdicYWthgdLhp4lz3d7RkJA,566
31
+ flock/frontend/vitest.config.ts,sha256=xSWyGrBv2Cy_5eeZA68NCO5AXS6q8WKZXXzqu2JnXPY,244
32
+ flock/frontend/docs/DESIGN_SYSTEM.md,sha256=xDTKBDikSIyJMP5Lk0gWSimQHeXv8IzIuJR7SLOEdPY,48503
33
+ flock/frontend/src/App.tsx,sha256=JEOyo90xXKiEeZTjg8qQdTFaxjZXoD261jW11eEr98k,2645
34
+ flock/frontend/src/main.tsx,sha256=sfWsPgNn5AyDH4LJJLTz2c5OwOPl0o4oi-FArpqc-W4,354
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
38
+ flock/frontend/src/__tests__/integration/graph-rendering.test.tsx,sha256=BrXule_v1w-Y_xMR1V318_QH3mIpYstxIWDnWVI5HbI,19845
39
+ flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx,sha256=LDbotzC9cyTvyIhng8m_2TckZehD9zHemR6Ng3lSyV8,21825
40
+ flock/frontend/src/components/common/BuildInfo.tsx,sha256=9J5Fww8dhnrxywDvg6jVNrIlLbEGkuRD8Vv2naVQiWk,983
41
+ flock/frontend/src/components/common/EmptyState.module.css,sha256=3JID0CUKZ3UstUrwWKtKDKXVk9oWPXzB0-20fkIEb94,2373
42
+ flock/frontend/src/components/common/EmptyState.tsx,sha256=AZDFc2k3EZqvsn68G9Ef_rLKmBISm_QI_39FGkkcvEU,2376
43
+ flock/frontend/src/components/common/ErrorBoundary.module.css,sha256=TE5d7751XsYDwfKj5dS8G7LSVjE3C0C5KkANrZBJlOc,3847
44
+ flock/frontend/src/components/common/ErrorBoundary.tsx,sha256=kw5MRhhmDH2BQowQS_gADKuMcqoZDxh-Vb0lnUKL10I,3157
45
+ flock/frontend/src/components/common/KeyboardShortcutsDialog.css,sha256=C_8wZKybatjnhz8oIuu0PdEdG6kmuyvFH-Ze-5bzui0,5567
46
+ flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx,sha256=zKrMAWhOFdLHp1JQt96SDBn4gEwDnL0WAs5hmDo3PdE,4638
47
+ flock/frontend/src/components/common/LoadingSpinner.module.css,sha256=ziZSTIi4dLECTDNJvnkvpCnvo3CuVZ6STNWsHHoZSU8,1769
48
+ flock/frontend/src/components/common/LoadingSpinner.tsx,sha256=ZtI9BOGQg4t-n923y8m1MkL9H8sDWX3wECjr6cdk51o,766
49
+ flock/frontend/src/components/controls/PublishControl.css,sha256=yr73R7lf1fnq22DoPsOOfe2vM_FiWr-ekr5pZE_-KxA,12504
50
+ flock/frontend/src/components/controls/PublishControl.test.tsx,sha256=AZiFHmInNPidbXX1dSMOxZd2kDAOgxCVB_IuzQu4K2Q,17675
51
+ flock/frontend/src/components/controls/PublishControl.tsx,sha256=P1l9TWkIjYJ2qawHSA-WlOuRsHOuGzKy6GosBfQialo,14729
52
+ flock/frontend/src/components/details/DetailWindowContainer.tsx,sha256=HaD2ScKsO_VblFIsG-qykjFtUPuhYayEyxapJDmGdA0,1788
53
+ flock/frontend/src/components/details/LiveOutputTab.test.tsx,sha256=YyxsBP3QpbeWDGKNGZsOjqLLqUkvuI-L-5tB2Sh7ATc,24160
54
+ flock/frontend/src/components/details/LiveOutputTab.tsx,sha256=4mmN4DxI6rF9g9fVIAqbC8UsTwf4uzdNbPqGvvvP2FM,6908
55
+ flock/frontend/src/components/details/MessageHistoryTab.tsx,sha256=xAlaqlQnIIH9Fypev1BDJbSnG_S7YJQ0M48PrL3vrKc,10237
56
+ flock/frontend/src/components/details/NodeDetailWindow.test.tsx,sha256=nmRhAN5NFXJzo-IybtjYc1RPctRZJizxg9gbgzIUcxg,18379
57
+ flock/frontend/src/components/details/NodeDetailWindow.tsx,sha256=yAwtio36uobKq75BQWYE_aX2gNcxUmUo946YX50l5oQ,7675
58
+ flock/frontend/src/components/details/RunStatusTab.tsx,sha256=D_6nz0oef3bvbuRMnzlcKroLDKV8t_wXCP4QJJB086g,9895
59
+ flock/frontend/src/components/details/tabs.test.tsx,sha256=drC38YbfUEvfp5eXzDU04IdHL_TlyxNP_lWEEYA7IP4,30519
60
+ flock/frontend/src/components/filters/CorrelationIDFilter.module.css,sha256=c_GWPe7itor8AbUYKlBV10JSGvI8_lLaMEXBKkMVbjk,2236
61
+ flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx,sha256=_Pylk0-0gzRyUHgAS2KZuxMGuVCSdjY4jay_8AxYAFY,6181
62
+ 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
70
+ flock/frontend/src/components/filters/TimeRangeFilter.test.tsx,sha256=4vkGYNecXcwOzp5Oikgyl3B2T0PHGrRpfSZ3Cwv0Tn4,4934
71
+ flock/frontend/src/components/filters/TimeRangeFilter.tsx,sha256=xwTPRl-NbSEvSrX4krvLPb40GvCjdoUp-FqRbVZBzbU,3148
72
+ flock/frontend/src/components/graph/AgentNode.test.tsx,sha256=Wd3AGe1E9GJ26wyRU1AUakki9AQ9euYsKx5lhi1xAfg,1966
73
+ flock/frontend/src/components/graph/AgentNode.tsx,sha256=JOSMiR_YXq6MgME2DfhqHldS_4zZEPySEIEM6t4fg48,12447
74
+ flock/frontend/src/components/graph/GraphCanvas.tsx,sha256=KDnxl3QQNLeIshgIXHyH0A73VOoyAhbboBax09cLjtI,13747
75
+ flock/frontend/src/components/graph/MessageFlowEdge.tsx,sha256=OWYmmlS5P9yIxfCddEleEd27MA-djMd_3fcQmyT22r4,3914
76
+ flock/frontend/src/components/graph/MessageNode.test.tsx,sha256=S0vmtk2r4HGm8844Pb65syim-ZsCqvia24CECGgq5SY,1828
77
+ flock/frontend/src/components/graph/MessageNode.tsx,sha256=axwYof1z3UtLO0QDPfTKnZX6w_TNFlZvVJsun1aDD_k,3645
78
+ flock/frontend/src/components/graph/MiniMap.tsx,sha256=i2lQ51EAp35mwo2C35U6zktwm8o54iKm4MBSN4UJh3Y,1305
79
+ 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
82
+ flock/frontend/src/components/layout/Header.module.css,sha256=BstB1qIzIbGiFmdLVWQnN0Q9iKteDJlBlWApGAcHfTo,1984
83
+ 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
87
+ flock/frontend/src/components/modules/ModuleRegistry.test.ts,sha256=gwpRhu0cKp_V3cODpiVKNIMOs33Z6vUxuWpWGmm2Z7U,10419
88
+ flock/frontend/src/components/modules/ModuleRegistry.ts,sha256=Zgnr7pa-hcGc-o7gKs1NYKuZAjZp8EORKMnLFSK7iT8,2410
89
+ flock/frontend/src/components/modules/ModuleWindow.tsx,sha256=eNRY3UsC5V35QNVA6Vdq1rkBoopLpJs_cxvYJ1S5qMk,4930
90
+ flock/frontend/src/components/modules/registerModules.ts,sha256=hbJSp5JQNbRLm5EpsGBrU3ngstLUrHpwIixpki42Dm8,554
91
+ flock/frontend/src/components/settings/AdvancedSettings.tsx,sha256=Ngw5jAIRn3ocXC9r89EwpMJRCK8kMO-Jj2pBZhJ-Uls,6349
92
+ flock/frontend/src/components/settings/AppearanceSettings.tsx,sha256=UHH4BcJ9-F-nRJEJf2rzmX0W-0hvmeKo6AYNF3lZPWE,6872
93
+ flock/frontend/src/components/settings/GraphSettings.tsx,sha256=qX1F4hnsxGcCbn3oHP7nsPPMLyETHG3UL55kJ_3tA-s,3815
94
+ flock/frontend/src/components/settings/SettingsPanel.css,sha256=dnxfgIkBsZxrka7fqHSMsysZJ0sHo4uY_TIkY_ZFTjI,7067
95
+ flock/frontend/src/components/settings/SettingsPanel.tsx,sha256=62GXPCQzYdbk17XYVOx_vCeWlVyFZSxp3w0JTkp3z60,4392
96
+ flock/frontend/src/components/settings/ThemeSelector.tsx,sha256=LDTaqFzWPa7Uw3IRp60l6TI5dLvfsel-Xl3GhuCuf30,10548
97
+ flock/frontend/src/hooks/useKeyboardShortcuts.ts,sha256=Dsf64nPtJdW2kV-a-bBpaq1VXZkXyxpioBnI1WIGduM,5019
98
+ flock/frontend/src/hooks/useModulePersistence.test.ts,sha256=kqYlFSzqYK_0jGxeRTeXORZ2KTDo3MdByJ2t2ivbg20,14323
99
+ flock/frontend/src/hooks/useModulePersistence.ts,sha256=ShXIE-OkwJrMYUNRDGjbZQVs4TK97sI85uc0BG6NuWo,5338
100
+ flock/frontend/src/hooks/useModules.ts,sha256=2CHNKidXOPvWfmP_Zb5od1deXonRUp1gNvgrQW0qOPg,4962
101
+ flock/frontend/src/hooks/usePersistence.ts,sha256=J4vFL2a2cS_haQeAMXStzgJMKSvpC8XidzeuOZXaTog,4483
102
+ flock/frontend/src/services/api.ts,sha256=hGkImiimpSOX9xjmX5flI1Ug6YVh7EbRr7l0rq_h9GE,5207
103
+ flock/frontend/src/services/indexeddb.test.ts,sha256=lY1JzyKRd4Kaw135JlO7njy5rpaAsRRXLM8SwYxDhAc,27452
104
+ flock/frontend/src/services/indexeddb.ts,sha256=Eadllc6tPh09RhJPjCd6MO0tdh8PWX5Hoxy8HX9HQS0,26915
105
+ flock/frontend/src/services/layout.test.ts,sha256=-KwUxWCum_Rsyc5NIpk99UB3prfAkMO5ksJULhjOiwA,16174
106
+ flock/frontend/src/services/layout.ts,sha256=hfGZdR-qFnrb1sSVw63mV4XGSgvkHo0ONjsyptflaa0,3665
107
+ flock/frontend/src/services/themeApplicator.ts,sha256=utRFw-45e1IEOrI6lHkB_E_-5kc2kFKbN-veAUdXiOM,5802
108
+ flock/frontend/src/services/themeService.ts,sha256=ltDAE30KzzVFDQJGm8awN0Go-l16NgTWYOxlvgxvx0E,1743
109
+ flock/frontend/src/services/websocket.test.ts,sha256=Ix5dQI3lzKJPyFPcTs5yXxu8ZZoJ05f1CWgcQEpCOtg,17062
110
+ flock/frontend/src/services/websocket.ts,sha256=KTabOBuwoi2fm5P4PGDT6F0mZP5yZbRUMV9y32o8x-E,23994
111
+ flock/frontend/src/store/filterStore.test.ts,sha256=i1vMdkgEn2zrlioloGG-R1mVP_E-r6Bejdh2E9XPUoM,7678
112
+ flock/frontend/src/store/filterStore.ts,sha256=PRZuJeH-KKIS1fYVbkz0un76gJB-efy3o0rsJeQqRY8,2952
113
+ flock/frontend/src/store/graphStore.test.ts,sha256=33Q4X5sUS4BDE_boT7zYgEXpsFVDOe4LJn7qcOKQt2E,4792
114
+ flock/frontend/src/store/graphStore.ts,sha256=CwyoQp2vz8FKN2CNQ06Li-nwLWikTczf-27ZAfXFdV0,14703
115
+ flock/frontend/src/store/moduleStore.test.ts,sha256=VxkoEPu0-B3ln20oBk3xLN-c7J55hMYLN2wQQPs4q-k,7800
116
+ flock/frontend/src/store/moduleStore.ts,sha256=rlC412QuCCrV7xAtcyaqU3eJkx0KNWR9OTewjniiT3g,1617
117
+ flock/frontend/src/store/settingsStore.ts,sha256=JNB25kkKxOlaSY1jFTM64BGynhUZ98jZL1mM87PLCF0,5995
118
+ flock/frontend/src/store/streamStore.ts,sha256=yhwvyfaHCucrWeJE8pgTjKMU_2p3KdOqJqTupKaZ91w,1986
119
+ flock/frontend/src/store/uiStore.test.ts,sha256=rBkPBMn5ZF776TCUtpUvhn_8bpAAVmxaqGWqmiMCkYg,1712
120
+ flock/frontend/src/store/uiStore.ts,sha256=QgFHjx-BC7d94XoRMWgD32Hp-tD_V45vs2weOB5dzX8,3529
121
+ flock/frontend/src/store/wsStore.ts,sha256=vKaGd6H7UONN7A-8tCTOgdH8X2LxrZmVbZ7hRnfGQ2c,936
122
+ flock/frontend/src/styles/index.css,sha256=HVMvVEMvlFk8_vqxBdt8CzkleXkV-oSUcQUzom588PM,231
123
+ flock/frontend/src/styles/scrollbar.css,sha256=OHH2nryMANNvuJBloG_t1BPY_BtKMSb36Df4q2X47Rk,1207
124
+ flock/frontend/src/styles/variables.css,sha256=EcOH8mb8ZIoGZU5c-K_2zcuGdtbu_vQWk_gC-X6vtmk,13889
125
+ flock/frontend/src/test/setup.ts,sha256=pG1mhRrywFboBf3VdL9ew62xGBxDxeQfChxZLjOK_mQ,36
126
+ flock/frontend/src/types/filters.ts,sha256=mZMrXh0vzhjBAjtTj9EE9IgApUPmwyBzsIk1Ez2guhk,313
127
+ flock/frontend/src/types/graph.ts,sha256=E1Kwhg1MyVZypB8uYh9srcHrxEh18px4ZzWvPifJjss,1774
128
+ flock/frontend/src/types/modules.ts,sha256=kW8fTe9CjsKgEdTWPZK6zv4zAUJGnP2bI8RmgXbiip4,213
129
+ flock/frontend/src/types/theme.ts,sha256=bjV2zWxBJilEXeosjSSirw05dL7zICShUDx2H0oA5J8,903
130
+ flock/frontend/src/utils/mockData.ts,sha256=kAYLkUZCmz09wj6p2q_ZqBUNNROyOFJz5uF3M4nBJRk,1961
131
+ flock/frontend/src/utils/performance.ts,sha256=ZcZjR8DKwF2ixveng2tKIRiW8wZ-ee_RPZFfi1jm4Zo,507
132
+ flock/frontend/src/utils/transforms.test.ts,sha256=zqScvoEyXk_UPaQj2UuJGc5c85p1_8juBwHUF6slnxA,27171
133
+ flock/frontend/src/utils/transforms.ts,sha256=a4SZJGchhnIjJugEIxvLqdvOgMlKIGZ3NsGTrhupE6A,10301
134
+ flock/helper/cli_helper.py,sha256=b76d8tiGFMLAHHuOdIPqAbwUtQ_T9jQfYn6tlR2VM9Y,50063
25
135
  flock/logging/__init__.py,sha256=RyR9jTC0q02Fh0L8easQfki2uCOSTii5MPhrxcqQNsg,163
26
136
  flock/logging/logging.py,sha256=hYq4Il1ApRytARQfJUsMqnjGJiLW2Y5Ou7s2zHRlns4,20128
27
137
  flock/logging/telemetry.py,sha256=Hn9RBcqRYVrH3tlReb3k66VgdrKM-jlDmBTm4M6abrw,7432
@@ -391,8 +501,8 @@ flock/themes/zenburned.toml,sha256=UEmquBbcAO3Zj652XKUwCsNoC2iQSlIh-q5c6DH-7Kc,1
391
501
  flock/themes/zenwritten-dark.toml,sha256=-dgaUfg1iCr5Dv4UEeHv_cN4GrPUCWAiHSxWK20X1kI,1663
392
502
  flock/themes/zenwritten-light.toml,sha256=G1iEheCPfBNsMTGaVpEVpDzYBHA_T-MV27rolUYolmE,1666
393
503
  flock/utility/output_utility_component.py,sha256=yVHhlIIIoYKziI5UyT_zvQb4G-NsxCTgLwA1wXXTTj4,9047
394
- flock_core-0.5.0b50.dist-info/METADATA,sha256=5p6DmukzLYBi0bmKcBoRkuLwz6yQb4dbJyP4uDPfi_I,24592
395
- flock_core-0.5.0b50.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
396
- flock_core-0.5.0b50.dist-info/entry_points.txt,sha256=UQdPmtHd97gSA_IdLt9MOd-1rrf_WO-qsQeIiHWVrp4,42
397
- flock_core-0.5.0b50.dist-info/licenses/LICENSE,sha256=U3IZuTbC0yLj7huwJdldLBipSOHF4cPf6cUOodFiaBE,1072
398
- flock_core-0.5.0b50.dist-info/RECORD,,
504
+ flock_core-0.5.0b52.dist-info/METADATA,sha256=s_IqAgspwnjKuTvYWi-Obi7xmXbZDZvBjuOrZidYOPE,24592
505
+ flock_core-0.5.0b52.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
506
+ flock_core-0.5.0b52.dist-info/entry_points.txt,sha256=UQdPmtHd97gSA_IdLt9MOd-1rrf_WO-qsQeIiHWVrp4,42
507
+ flock_core-0.5.0b52.dist-info/licenses/LICENSE,sha256=U3IZuTbC0yLj7huwJdldLBipSOHF4cPf6cUOodFiaBE,1072
508
+ flock_core-0.5.0b52.dist-info/RECORD,,