flock-core 0.5.7__py3-none-any.whl → 0.5.8__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.

@@ -27,14 +27,44 @@ class BatchSummary(BaseModel):
27
27
  class SimpleBatchEngine(EngineComponent):
28
28
  """Example engine that processes items individually or in batches.
29
29
 
30
- - ``evaluate`` is used when the agent is invoked directly without BatchSpec.
31
- - ``evaluate_batch`` is triggered when BatchSpec flushes accumulated artifacts.
32
-
33
- The engine simply annotates each item with the current batch size so tests can
34
- verify that all artifacts were processed together.
30
+ The engine auto-detects batch mode via ctx.is_batch flag and processes
31
+ accordingly. It annotates each item with the current batch size so tests
32
+ can verify that all artifacts were processed together.
35
33
  """
36
34
 
37
- async def evaluate(self, agent, ctx, inputs: EvalInputs) -> EvalResult:
35
+ async def evaluate(self, agent, ctx, inputs: EvalInputs, output_group) -> EvalResult:
36
+ """Process single item or batch with auto-detection.
37
+
38
+ Auto-detects batch mode via ctx.is_batch flag (set by orchestrator when
39
+ BatchSpec flushes accumulated artifacts).
40
+
41
+ Args:
42
+ agent: Agent instance
43
+ ctx: Execution context (check ctx.is_batch for batch mode)
44
+ inputs: EvalInputs with input artifacts
45
+ output_group: OutputGroup defining what artifacts to produce
46
+
47
+ Returns:
48
+ EvalResult with BatchSummary artifact
49
+ """
50
+ # Auto-detect batch mode from context
51
+ is_batch = bool(getattr(ctx, "is_batch", False))
52
+
53
+ if is_batch:
54
+ # Batch mode: Process all items together
55
+ items = inputs.all_as(BatchItem)
56
+ if not items:
57
+ return EvalResult.empty()
58
+
59
+ batch_size = len(items)
60
+ summary = BatchSummary(batch_size=batch_size, values=[item.value for item in items])
61
+
62
+ state = dict(inputs.state)
63
+ state["batch_size"] = summary.batch_size
64
+ state["processed_values"] = list(summary.values)
65
+
66
+ return EvalResult.from_object(summary, agent=agent, state=state)
67
+ # Single mode: Process one item
38
68
  item = inputs.first_as(BatchItem)
39
69
  if item is None:
40
70
  return EvalResult.empty()
@@ -45,17 +75,3 @@ class SimpleBatchEngine(EngineComponent):
45
75
  state.setdefault("processed_values", list(annotated.values))
46
76
 
47
77
  return EvalResult.from_object(annotated, agent=agent, state=state)
48
-
49
- async def evaluate_batch(self, agent, ctx, inputs: EvalInputs) -> EvalResult:
50
- items = inputs.all_as(BatchItem)
51
- if not items:
52
- return EvalResult.empty()
53
-
54
- batch_size = len(items)
55
- summary = BatchSummary(batch_size=batch_size, values=[item.value for item in items])
56
-
57
- state = dict(inputs.state)
58
- state["batch_size"] = summary.batch_size
59
- state["processed_values"] = list(summary.values)
60
-
61
- return EvalResult.from_object(summary, agent=agent, state=state)
flock/examples.py CHANGED
@@ -50,7 +50,7 @@ def announce(tagline: Tagline) -> dict[str, str]:
50
50
 
51
51
 
52
52
  class MovieEngine(EngineComponent):
53
- async def evaluate(self, agent, ctx, inputs: EvalInputs) -> EvalResult:
53
+ async def evaluate(self, agent, ctx, inputs: EvalInputs, output_group) -> EvalResult:
54
54
  idea = Idea(**inputs.artifacts[0].payload)
55
55
  synopsis = f"{idea.topic} told as a {idea.genre} adventure."
56
56
  movie = Movie(fun_title=idea.topic.upper(), runtime=120, synopsis=synopsis)
@@ -63,7 +63,7 @@ class MovieEngine(EngineComponent):
63
63
 
64
64
 
65
65
  class TaglineEngine(EngineComponent):
66
- async def evaluate(self, agent, ctx, inputs: EvalInputs) -> EvalResult:
66
+ async def evaluate(self, agent, ctx, inputs: EvalInputs, output_group) -> EvalResult:
67
67
  movie = Movie(**inputs.artifacts[0].payload)
68
68
  tagline = Tagline(line=f"Don't miss {movie.fun_title}!")
69
69
  artifact = Artifact(
@@ -2,7 +2,7 @@ from importlib.metadata import PackageNotFoundError, version
2
2
 
3
3
 
4
4
  try:
5
- __version__ = version("flock-flow")
5
+ __version__ = version("flock-core")
6
6
  except PackageNotFoundError:
7
7
  __version__ = "0.5.0b"
8
8
 
@@ -52,7 +52,7 @@ def init_console(clear_screen: bool = True, show_banner: bool = True, model: str
52
52
  │ ▒█▀▀▀ █░░ █▀▀█ █▀▀ █░█ │
53
53
  │ ▒█▀▀▀ █░░ █░░█ █░░ █▀▄ │
54
54
  │ ▒█░░░ ▀▀▀ ▀▀▀▀ ▀▀▀ ▀░▀ │
55
- ╰━━━━━━━━v{__version__}━━━━━━━━━╯
55
+ ╰━━━━━━━━━v{__version__}━━━━━━━━━╯
56
56
  🦆 🐤 🐧 🐓
57
57
  """,
58
58
  justify="center",
@@ -298,7 +298,9 @@ def create_rich_renderable(
298
298
  )
299
299
  return Group(*sub_tables)
300
300
  rendered_items = [
301
- create_rich_renderable(item, level + 1, theme, styles, max_length=max_length)
301
+ create_rich_renderable(
302
+ "- " + str(item), level + 1, theme, styles, max_length=max_length
303
+ )
302
304
  for item in value
303
305
  ]
304
306
  if all(isinstance(item, str) for item in rendered_items):
flock/mcp/config.py CHANGED
@@ -1,10 +1,9 @@
1
1
  """Base Config for MCP Clients."""
2
2
 
3
3
  import importlib
4
- from typing import TYPE_CHECKING, Any, Literal, TypeVar
4
+ from typing import TYPE_CHECKING, Any, Literal, Self, TypeVar
5
5
 
6
6
  from pydantic import BaseModel, ConfigDict, Field, create_model
7
- from typing_extensions import Self
8
7
 
9
8
  from flock.mcp.types import (
10
9
  FlockListRootsMCPCallback,
flock/mcp/tool.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Represents a MCP Tool in a format which is compatible with Flock's ecosystem."""
2
2
 
3
- from typing import Any, TypeVar
3
+ from typing import Any, Self, TypeVar
4
4
 
5
5
  from dspy import Tool as DSPyTool
6
6
  from dspy.adapters.types.tool import convert_input_schema_to_tool_args
@@ -8,7 +8,6 @@ from mcp import Tool
8
8
  from mcp.types import CallToolResult, TextContent, ToolAnnotations
9
9
  from opentelemetry import trace
10
10
  from pydantic import BaseModel, Field
11
- from typing_extensions import Self
12
11
 
13
12
  from flock.logging.logging import get_logger
14
13
 
flock/orchestrator.py CHANGED
@@ -8,7 +8,7 @@ import os
8
8
  from asyncio import Task
9
9
  from collections.abc import AsyncGenerator, Iterable, Mapping, Sequence
10
10
  from contextlib import asynccontextmanager
11
- from datetime import datetime, timezone
11
+ from datetime import UTC, datetime
12
12
  from pathlib import Path
13
13
  from typing import TYPE_CHECKING, Any
14
14
  from uuid import uuid4
@@ -1334,7 +1334,7 @@ class Flock(metaclass=AutoTracedMeta):
1334
1334
 
1335
1335
  if artifacts:
1336
1336
  try:
1337
- timestamp = datetime.now(timezone.utc)
1337
+ timestamp = datetime.now(UTC)
1338
1338
  records = [
1339
1339
  ConsumptionRecord(
1340
1340
  artifact_id=artifact.id,
flock/store.py CHANGED
@@ -15,7 +15,7 @@ from asyncio import Lock
15
15
  from collections import defaultdict
16
16
  from collections.abc import Iterable
17
17
  from dataclasses import dataclass, field
18
- from datetime import datetime, timedelta, timezone
18
+ from datetime import UTC, datetime, timedelta
19
19
  from pathlib import Path
20
20
  from typing import Any, TypeVar
21
21
  from uuid import UUID
@@ -85,7 +85,7 @@ class ConsumptionRecord:
85
85
  consumer: str
86
86
  run_id: str | None = None
87
87
  correlation_id: str | None = None
88
- consumed_at: datetime = field(default_factory=lambda: datetime.now(timezone.utc))
88
+ consumed_at: datetime = field(default_factory=lambda: datetime.now(UTC))
89
89
 
90
90
 
91
91
  @dataclass(slots=True)
flock/utilities.py CHANGED
@@ -228,7 +228,7 @@ class LoggingUtility(AgentComponent):
228
228
  await queue.put({"kind": "end"})
229
229
  try:
230
230
  await asyncio.wait_for(task, timeout=2.0)
231
- except asyncio.TimeoutError: # pragma: no cover - defensive cancel
231
+ except TimeoutError: # pragma: no cover - defensive cancel
232
232
  task.cancel()
233
233
 
234
234
  async def _abort_stream(self, agent, ctx: Context) -> None:
flock/visibility.py CHANGED
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
 
4
4
  """Artifact visibility policies."""
5
5
 
6
- from datetime import datetime, timedelta, timezone
6
+ from datetime import UTC, datetime, timedelta
7
7
  from typing import TYPE_CHECKING, Literal
8
8
 
9
9
  from pydantic import BaseModel, Field, PrivateAttr
@@ -69,10 +69,10 @@ class AfterVisibility(Visibility):
69
69
  kind: Literal["After"] = "After"
70
70
  ttl: timedelta = Field(default=timedelta())
71
71
  then: Visibility | None = None
72
- _created_at: datetime = PrivateAttr(default_factory=lambda: datetime.now(timezone.utc))
72
+ _created_at: datetime = PrivateAttr(default_factory=lambda: datetime.now(UTC))
73
73
 
74
74
  def allows(self, agent: AgentIdentity, *, now: datetime | None = None) -> bool:
75
- now = now or datetime.now(timezone.utc)
75
+ now = now or datetime.now(UTC)
76
76
  if now - self._created_at >= self.ttl:
77
77
  if self.then:
78
78
  return self.then.allows(agent, now=now)
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flock-core
3
- Version: 0.5.7
3
+ Version: 0.5.8
4
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: MIT
7
7
  License-File: LICENSE
8
- Requires-Python: >=3.10
8
+ Requires-Python: >=3.12
9
9
  Requires-Dist: aiosqlite>=0.20.0
10
10
  Requires-Dist: devtools>=0.12.2
11
11
  Requires-Dist: dspy==3.0.3
@@ -424,6 +424,101 @@ quality_control = flock.agent("qc").consumes(
424
424
  <img alt="Event Batch" src="docs/assets/images/batch.png" width="800">
425
425
  </p>
426
426
 
427
+ ### 🌟 Fan-Out Publishing (New in 0.5)
428
+
429
+ **Produce multiple outputs from a single agent execution:**
430
+
431
+ ```python
432
+ # Generate 10 diverse product ideas from one brief
433
+ idea_generator = (
434
+ flock.agent("generator")
435
+ .consumes(ProductBrief)
436
+ .publishes(ProductIdea, fan_out=10) # Produces 10 ideas per brief!
437
+ )
438
+
439
+ # With WHERE filtering - only publish high-quality ideas
440
+ idea_generator = (
441
+ flock.agent("generator")
442
+ .consumes(ProductBrief)
443
+ .publishes(
444
+ ProductIdea,
445
+ fan_out=20, # Generate 20 candidates
446
+ where=lambda idea: idea.score >= 8.0 # Only publish score >= 8
447
+ )
448
+ )
449
+
450
+ # With VALIDATE - enforce quality standards
451
+ code_reviewer = (
452
+ flock.agent("reviewer")
453
+ .consumes(CodeSubmission)
454
+ .publishes(
455
+ BugReport,
456
+ fan_out=5,
457
+ validate=lambda bug: bug.severity in ["Critical", "High", "Medium", "Low"]
458
+ )
459
+ )
460
+
461
+ # With Dynamic Visibility - control access per artifact
462
+ notification_agent = (
463
+ flock.agent("notifier")
464
+ .consumes(Alert)
465
+ .publishes(
466
+ Notification,
467
+ fan_out=3,
468
+ visibility=lambda n: PrivateVisibility(agents=[n.recipient]) # Dynamic!
469
+ )
470
+ )
471
+ ```
472
+
473
+ **What just happened:**
474
+ - ✅ **fan_out=N** - Agent produces N artifacts per execution (not just 1!)
475
+ - ✅ **where** - Filter outputs before publishing (reduce noise, save costs)
476
+ - ✅ **validate** - Enforce quality standards (fail-fast on bad outputs)
477
+ - ✅ **Dynamic visibility** - Control access per artifact based on content
478
+
479
+ **Real-world impact:**
480
+ - 🎯 **Content Generation** - Generate 10 blog post ideas, filter to top 3 by score
481
+ - 🐛 **Code Review** - Produce 5 potential bugs, validate severity levels
482
+ - 📧 **Notifications** - Create 3 notification variants, target specific agents
483
+ - 🧪 **A/B Testing** - Generate N variations, filter by quality metrics
484
+
485
+ **🤯 Multi-Output Fan-Out (New in 0.5)**
486
+
487
+ **The truly mind-blowing part:** Fan-out works across **multiple output types**:
488
+
489
+ ```python
490
+ # Generate 3 of EACH type = 9 total artifacts in ONE LLM call!
491
+ multi_master = (
492
+ flock.agent("multi_master")
493
+ .consumes(Idea)
494
+ .publishes(Movie, MovieScript, MovieCampaign, fan_out=3)
495
+ )
496
+
497
+ # Single execution produces:
498
+ # - 3 complete Movie artifacts (with title, genre, cast, plot)
499
+ # - 3 complete MovieScript artifacts (with characters, scenes, pages)
500
+ # - 3 complete MovieCampaign artifacts (with taglines, poster descriptions)
501
+ # = 9 complex artifacts, ~100+ fields total, full Pydantic validation, ONE LLM call!
502
+
503
+ await flock.publish(Idea(story_idea="An action thriller set in space"))
504
+ await flock.run_until_idle()
505
+
506
+ # Result: 9 artifacts on the blackboard, all validated, all ready
507
+ movies = await flock.store.get_by_type(Movie) # 3 movies
508
+ scripts = await flock.store.get_by_type(MovieScript) # 3 scripts
509
+ campaigns = await flock.store.get_by_type(MovieCampaign) # 3 campaigns
510
+ ```
511
+
512
+ **Why this is revolutionary:**
513
+ - ⚡ **Massive efficiency** - 1 LLM call generates 9 production-ready artifacts
514
+ - ✅ **Full validation** - All 100+ fields validated with Pydantic constraints
515
+ - 🎯 **Coherent generation** - Movie/Script/Campaign are thematically aligned (same LLM context)
516
+ - 💰 **Cost optimized** - 9 artifacts for the price of 1 API call
517
+
518
+ **Can any other agent framework do this?** We haven't found one. 🚀
519
+
520
+ **📖 [Full Fan-Out Guide →](https://whiteducksoftware.github.io/flock/guides/fan-out/)**
521
+
427
522
  ### Visibility Controls (The Security)
428
523
 
429
524
  **Unlike other frameworks, Flock has zero-trust security built-in:**
@@ -1,28 +1,28 @@
1
1
  flock/__init__.py,sha256=fvp4ltfaAGmYliShuTY_XVIpOUN6bMXbWiBnwb1NBoM,310
2
- flock/agent.py,sha256=dcnFeNFCyTJSPKi-qHS4fQevLF_yBXCyIjQapxwki5U,48403
2
+ flock/agent.py,sha256=wGSbqND9e4CxPxnkJk2r5z30nfpmd5JWebS3L0PGflo,59815
3
3
  flock/artifact_collector.py,sha256=8rsg5NzmXeXKNT07TqX1_Z6aAGud2dXKzvS0jhjX3gQ,6372
4
- flock/artifacts.py,sha256=3vQQ1J7QxTzeQBUGaNLiyojlmBv1NfdhFC98-qj8fpU,2541
4
+ flock/artifacts.py,sha256=QIUlol5hzUZO_8SINCqsN_Xr8fHixsc01QbFV_WIIj0,2527
5
5
  flock/batch_accumulator.py,sha256=YcZSpdYMhm8wAGqKEF49NJ_Jl2HZX78NrJYqfyHqTuE,8003
6
6
  flock/cli.py,sha256=lPtKxEXnGtyuTh0gyG3ixEIFS4Ty6Y0xsPd6SpUTD3U,4526
7
- flock/components.py,sha256=WDCOFSk_y69cncK5aAz7UAGZ1ErXdBzh_p0qW1eLmPM,7761
8
- flock/correlation_engine.py,sha256=iGB6-G5F-B-pw-clLx4-pZEiUrK_Q2l3kOn4jtEO_kw,8103
9
- flock/examples.py,sha256=eQb8k6EYBbUhauFuSN_0EIIu5KW0mTqJU0HM4-p14sc,3632
10
- flock/orchestrator.py,sha256=EzS7K6ZTxfVzuincnK3NRc_sqkbiSYimbpJhKGj_mac,62900
7
+ flock/components.py,sha256=BvNa5E3mXYdB1wTFw5YGbdWil3bA0-I5qDkgxTnFDao,8358
8
+ flock/correlation_engine.py,sha256=vvcBC43LWafq4ocT2WxrExJjMJ_B9Xags_6u_c6alDg,8005
9
+ flock/examples.py,sha256=7_OkEx6hPfaj4rE2mxpGzb1ZcbHlsXTpWaMNBZ1tOqA,3660
10
+ flock/orchestrator.py,sha256=lVxou7BnRwM9LyFMeG4DeGoFrUSkIFj2UekV6O3erwA,62886
11
11
  flock/orchestrator_component.py,sha256=jHYKv-58Rsu3Qsa6QYEx4iMWyJfpSqjowGZWfv-BKDI,25017
12
12
  flock/registry.py,sha256=s0-H-TMtOsDZiZQCc7T1tYiWQg3OZHn5T--jaI_INIc,4786
13
13
  flock/runtime.py,sha256=uEq_zpCd--zqVAGU95uQt9QXqp2036iWo2lRr1JGlM8,8651
14
14
  flock/service.py,sha256=JDdjjPTPH6NFezAr8x6svtqxIGXA7-AyHS11GF57g9Q,11041
15
- flock/store.py,sha256=H6z1_y5uDp_4UnHWqrxNksyoSGlzeVTgLY3Sv-guSTU,45793
15
+ flock/store.py,sha256=3uPTF0Mp7nses9ICBtyrY25SryOx2H0tL9fyzO0c1qM,45779
16
16
  flock/subscription.py,sha256=0fqjGVAr-3u1azSsXJ-xVjnUgSSYVO2a0Gd_zln2tZA,5422
17
- flock/utilities.py,sha256=bqTPnFF6E-pDqx1ISswDNEzTU2-ED_URlkyKWLjF3mU,12109
18
- flock/visibility.py,sha256=Cu2PMBjRtqjiWzlwHLCIC2AUFBjJ2augecG-jvK8ky0,2949
17
+ flock/utilities.py,sha256=TiwGugN6jpRn2LdRLq1thU2vANcLXrzMXa_zZ9FCc7Y,12101
18
+ flock/visibility.py,sha256=uwscg32t6Dp9LuA_EVDT5-_1lotzZWWS9Dl1foyJDxo,2926
19
19
  flock/api/themes.py,sha256=BOj1e0LHx6BDLdnVdXh1LKsbQ_ZeubH9UCoj08dC1yc,1886
20
20
  flock/dashboard/__init__.py,sha256=_W6Id_Zb7mkSz0iHY1nfdUqF9p9uV_NyHsU7PFsRnFI,813
21
- flock/dashboard/collector.py,sha256=ucH76Fp_MKs1sDgwHXzzqe1qmGljiX1DQibPExHRiqk,21765
22
- flock/dashboard/events.py,sha256=ICqpBKE68HjevJg7GAT7rrUbPV8Adkird34ZC45_oYA,7679
21
+ flock/dashboard/collector.py,sha256=kCfhu8opZdboqBpOCGsQ_eJdA8mohWgkDIKe5MKs9Gk,21688
22
+ flock/dashboard/events.py,sha256=yeg_gfRE7TmDk0IBYdrgyvSuHa5zS64W-Jed0vi5gjQ,7611
23
23
  flock/dashboard/graph_builder.py,sha256=jdiaruce5uRybndlA4aiOXW-gKkHeGtnndzYQ1WyU9Y,32006
24
24
  flock/dashboard/launcher.py,sha256=dCfwaeMLtyIkik3aVSEsbBdABS5ADRlKWYkih7sF5hM,8196
25
- flock/dashboard/service.py,sha256=_jyHQ_hC9sFgj8mwtuW2r8labZ3NsBJ-1FYcKB0qq9E,52410
25
+ flock/dashboard/service.py,sha256=mFkDl_tXyIkxRdEDOy4SAq4RvpEMvcs2039yQM0tWTs,52351
26
26
  flock/dashboard/websocket.py,sha256=_DCZApJPXc8OQnxFDFS9TA9ozq7kM73QByRj-_a8n-8,9508
27
27
  flock/dashboard/models/__init__.py,sha256=T4Yz8IXMm7lBqa2HLDSv7WJBtaKcdZIlTrz6GHNFZxs,68
28
28
  flock/dashboard/models/graph.py,sha256=oQAGAVMV32tim8xscUxZ9nFOci0RvryjdPf1sJgiGxQ,5402
@@ -30,9 +30,9 @@ flock/dashboard/static_v2/index.html,sha256=0KNfWwmpr0JmVNbalnsaQta0y3XlVhOQ_HSt
30
30
  flock/dashboard/static_v2/assets/index-DFRnI_mt.js,sha256=qeezaWLISr_EKNBBh8v0jzspd2KRcz8jW1r0p7z0Ht0,764860
31
31
  flock/dashboard/static_v2/assets/index-fPLNdmp1.css,sha256=skpvfkkrlw7WbmBh7HN-rUKAtKP-gpuLUH4klUgFHT4,74529
32
32
  flock/engines/__init__.py,sha256=waNyObJ8PKCLFZL3WUFynxSK-V47m559P3Px-vl_OSc,124
33
- flock/engines/dspy_engine.py,sha256=Q2stZi6jMjjNlhXvzmW3m-Y8AdVo1QuNunbnxEZl6rA,52232
33
+ flock/engines/dspy_engine.py,sha256=z6OEWcoGrizSK0dO34nJUJz_JQg6vftlhocRI394HYk,73295
34
34
  flock/engines/examples/__init__.py,sha256=cDAjF8_NPL7nhpwa_xxgnPYRAXZWppKE2HkxmL8LGAI,126
35
- flock/engines/examples/simple_batch_engine.py,sha256=RZVuFJHr3j_4dJZc2AXUcjKZJdct0A7UKOSwWgVEKk4,2235
35
+ flock/engines/examples/simple_batch_engine.py,sha256=XgbOQZmHvNl-0QQEc4Wg-CxK2p4m6LOK6HJxV6zLrto,2844
36
36
  flock/frontend/README.md,sha256=0dEzu4UxacGfSstz9_R0KSeFWJ1vNRi0p-KLIay_TfU,26212
37
37
  flock/frontend/index.html,sha256=BFg1VR_YVAJ_MGN16xa7sT6wTGwtFYUhfJhGuKv89VM,312
38
38
  flock/frontend/package-lock.json,sha256=vNOaISeq3EfEDDEsFYPWFaMsqypDgQIE0P_u6tzE0g4,150798
@@ -156,7 +156,7 @@ flock/frontend/src/types/theme.ts,sha256=bjV2zWxBJilEXeosjSSirw05dL7zICShUDx2H0o
156
156
  flock/frontend/src/utils/artifacts.ts,sha256=JjbNXKgcBaUJdR7VKDi0LK0T3d-ltYt4HHbiQNB3rmI,790
157
157
  flock/frontend/src/utils/mockData.ts,sha256=XysjTPAcq6P7BXD8yHv-zJ5vNsxG1T5TLJjX4phOU_w,2316
158
158
  flock/frontend/src/utils/performance.ts,sha256=ZcZjR8DKwF2ixveng2tKIRiW8wZ-ee_RPZFfi1jm4Zo,507
159
- flock/helper/cli_helper.py,sha256=b76d8tiGFMLAHHuOdIPqAbwUtQ_T9jQfYn6tlR2VM9Y,50063
159
+ flock/helper/cli_helper.py,sha256=9Tv_uZY43zzJj36NxCdg10kbidvjV8N7BQkbhWz82b4,50066
160
160
  flock/logging/__init__.py,sha256=RyR9jTC0q02Fh0L8easQfki2uCOSTii5MPhrxcqQNsg,163
161
161
  flock/logging/auto_trace.py,sha256=XN7_8iRO46FOHiy23F5_Iw7KFYAbALDmau6HOZAM2XY,5543
162
162
  flock/logging/logging.py,sha256=hYq4Il1ApRytARQfJUsMqnjGJiLW2Y5Ou7s2zHRlns4,20128
@@ -164,7 +164,7 @@ flock/logging/telemetry.py,sha256=oLVGARUyYqXfeZjh9CPlnPHnvadUxUs8V5NWHWg7l4U,82
164
164
  flock/logging/trace_and_logged.py,sha256=oEMr60Mh2nACiupaIKmWtRkYlqmoWAUUZFxD4UYqHdY,11358
165
165
  flock/logging/formatters/enum_builder.py,sha256=JMZCxZxm7TX2uVD9l4nIeSPKmSFZV-5v7omXS1Qu1cI,969
166
166
  flock/logging/formatters/theme_builder.py,sha256=RubV95MY04zB5MIK7814dFoLsTU_wpS7in-GcEjN14o,17007
167
- flock/logging/formatters/themed_formatter.py,sha256=idnv8-QAy9UxgOE4g33bUGzoToVyGsvQ_ZYYeDboDhE,20075
167
+ flock/logging/formatters/themed_formatter.py,sha256=mUOR1BWBvgRkVjDA1aUaKj--MJ02POcGi1psMkcA2E0,20117
168
168
  flock/logging/formatters/themes.py,sha256=80BRJJB0LZr11N0yQw2f8vdb_9179qjQO8PoeBaLMN0,10680
169
169
  flock/logging/span_middleware/baggage_span_processor.py,sha256=gJfRl8FeB6jdtghTaRHCrOaTo4fhPMRKgjqtZj-8T48,1118
170
170
  flock/logging/telemetry_exporter/base_exporter.py,sha256=T8l7GwjIulc2KbkgmhJbQ_psrLNwTGNSi23jvw6MKVA,1205
@@ -173,9 +173,9 @@ flock/logging/telemetry_exporter/file_exporter.py,sha256=uTgQZSKfbLjzypirBbiVncc
173
173
  flock/logging/telemetry_exporter/sqlite_exporter.py,sha256=754G8s4X-JHHpCdoNydJnPX4NZijZk9URutfPWFIT7s,3479
174
174
  flock/mcp/__init__.py,sha256=QuANhTz09E2fFhtp2yJ716WxXKwEpCMTGqHj54VRs2Q,2512
175
175
  flock/mcp/client.py,sha256=FRkuWNohFhzAzv-8aLz8Nd3CxkCf_SgHpfbPGTjRbMg,25790
176
- flock/mcp/config.py,sha256=EgCFYTkV97fy8PlmnFVkB8FLCCSIni5vF3mQB0Yy-3c,14850
176
+ flock/mcp/config.py,sha256=Bk8V2NdbUKwoOvOYdRw-FmEqug2jMjTuGftMUu7tNkI,14821
177
177
  flock/mcp/manager.py,sha256=X54Ph5CtcIIZNuWndSH2sZijVjVBpPCNHS4M-B1bViU,10942
178
- flock/mcp/tool.py,sha256=cn59dFM1wD0_hl0GjcHxtVYEmPClqskYVMc9AVMB9RY,5397
178
+ flock/mcp/tool.py,sha256=rp4iMMnEu6xxEFxjX6In4rmBFwFAtmhPDzNGMsm56Qw,5368
179
179
  flock/mcp/servers/sse/__init__.py,sha256=qyfDdkZkgscHOkFREvsvoNtzA-CCnXPNma5w9uaIUCo,51
180
180
  flock/mcp/servers/sse/flock_sse_server.py,sha256=dbkRAcn11V9bBEoPlCMuuzuErTjHigqsnvGYJL4v2ts,3685
181
181
  flock/mcp/servers/stdio/__init__.py,sha256=jgWpJAJ3cV1klZ70gasXrdrpUCsMkVtEAeX0QoVhMGQ,53
@@ -530,8 +530,8 @@ flock/themes/zenburned.toml,sha256=UEmquBbcAO3Zj652XKUwCsNoC2iQSlIh-q5c6DH-7Kc,1
530
530
  flock/themes/zenwritten-dark.toml,sha256=-dgaUfg1iCr5Dv4UEeHv_cN4GrPUCWAiHSxWK20X1kI,1663
531
531
  flock/themes/zenwritten-light.toml,sha256=G1iEheCPfBNsMTGaVpEVpDzYBHA_T-MV27rolUYolmE,1666
532
532
  flock/utility/output_utility_component.py,sha256=yVHhlIIIoYKziI5UyT_zvQb4G-NsxCTgLwA1wXXTTj4,9047
533
- flock_core-0.5.7.dist-info/METADATA,sha256=LomwdwCsCLf0LoXVHDYugZxHY2qbkqFI3JpSarCRU2Y,41803
534
- flock_core-0.5.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
535
- flock_core-0.5.7.dist-info/entry_points.txt,sha256=UQdPmtHd97gSA_IdLt9MOd-1rrf_WO-qsQeIiHWVrp4,42
536
- flock_core-0.5.7.dist-info/licenses/LICENSE,sha256=U3IZuTbC0yLj7huwJdldLBipSOHF4cPf6cUOodFiaBE,1072
537
- flock_core-0.5.7.dist-info/RECORD,,
533
+ flock_core-0.5.8.dist-info/METADATA,sha256=-YTxJyohimdEDkoYR2aSsuts3WQ4WC-uW68MSzQJSxo,45182
534
+ flock_core-0.5.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
535
+ flock_core-0.5.8.dist-info/entry_points.txt,sha256=UQdPmtHd97gSA_IdLt9MOd-1rrf_WO-qsQeIiHWVrp4,42
536
+ flock_core-0.5.8.dist-info/licenses/LICENSE,sha256=U3IZuTbC0yLj7huwJdldLBipSOHF4cPf6cUOodFiaBE,1072
537
+ flock_core-0.5.8.dist-info/RECORD,,