tinybird 0.0.1.dev288__py3-none-any.whl → 0.0.1.dev290__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 tinybird might be problematic. Click here for more details.

@@ -1877,16 +1877,6 @@ def parse(
1877
1877
  doc.shared_with += workspaces
1878
1878
  total_workspaces += len(workspaces)
1879
1879
 
1880
- # Add warning once if any workspaces were found
1881
- if total_workspaces > 0:
1882
- warnings.append(
1883
- DatafileParseWarning(
1884
- message=(
1885
- f"{kwargs['cmd'].upper()} is not fully implemented in Forward and will be ignored while this warning is present."
1886
- )
1887
- )
1888
- )
1889
-
1890
1880
  # Validate that at least one workspace was provided
1891
1881
  if total_workspaces == 0:
1892
1882
  raise DatafileSyntaxError(
tinybird/sql_toolset.py CHANGED
@@ -144,7 +144,7 @@ def format_where_for_mutation_command(where_clause: str) -> str:
144
144
  return f"DELETE WHERE {quoted_condition[1:-1]}"
145
145
 
146
146
 
147
- @lru_cache(maxsize=2**13)
147
+ @lru_cache(maxsize=2**15)
148
148
  def sql_get_used_tables_cached(
149
149
  sql: str,
150
150
  raising: bool = False,
@@ -301,7 +301,7 @@ def replacements_to_tuples(replacements: dict) -> dict:
301
301
  return parsed_replacements
302
302
 
303
303
 
304
- @lru_cache(maxsize=2**13)
304
+ @lru_cache(maxsize=2**15)
305
305
  def replace_tables_chquery_cached(
306
306
  sql: str,
307
307
  sorted_replacements: Optional[tuple] = None,
tinybird/tb/__cli__.py CHANGED
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
4
4
  __url__ = 'https://www.tinybird.co/docs/forward/commands'
5
5
  __author__ = 'Tinybird'
6
6
  __author_email__ = 'support@tinybird.co'
7
- __version__ = '0.0.1.dev288'
8
- __revision__ = '6cd5b6c'
7
+ __version__ = '0.0.1.dev290'
8
+ __revision__ = '4d1cca4'
@@ -23,6 +23,7 @@ from tinybird.tb.modules.agent.banner import display_banner
23
23
  from tinybird.tb.modules.agent.command_agent import CommandAgent
24
24
  from tinybird.tb.modules.agent.compactor import compact_messages
25
25
  from tinybird.tb.modules.agent.explore_agent import ExploreAgent
26
+ from tinybird.tb.modules.agent.file_agent import FileAgent
26
27
  from tinybird.tb.modules.agent.memory import (
27
28
  clear_history,
28
29
  clear_messages,
@@ -50,7 +51,13 @@ from tinybird.tb.modules.agent.tools.get_endpoint_stats import get_endpoint_stat
50
51
  from tinybird.tb.modules.agent.tools.get_openapi_definition import get_openapi_definition
51
52
  from tinybird.tb.modules.agent.tools.plan import complete_plan, plan
52
53
  from tinybird.tb.modules.agent.tools.secret import create_or_update_secrets
53
- from tinybird.tb.modules.agent.utils import AgentRunCancelled, TinybirdAgentContext, show_confirmation, show_input
54
+ from tinybird.tb.modules.agent.utils import (
55
+ AgentRunCancelled,
56
+ SubAgentRunCancelled,
57
+ TinybirdAgentContext,
58
+ show_confirmation,
59
+ show_input,
60
+ )
54
61
  from tinybird.tb.modules.build_common import process as build_process
55
62
  from tinybird.tb.modules.common import (
56
63
  _analyze,
@@ -179,6 +186,16 @@ class TinybirdAgent:
179
186
  workspace_id=workspace_id,
180
187
  project=self.project,
181
188
  )
189
+ self.file_agent = FileAgent(
190
+ dangerously_skip_permissions=self.dangerously_skip_permissions,
191
+ prompt_mode=prompt_mode,
192
+ thinking_animation=self.thinking_animation,
193
+ token=self.token,
194
+ user_token=self.user_token,
195
+ host=self.host,
196
+ workspace_id=workspace_id,
197
+ project=self.project,
198
+ )
182
199
 
183
200
  @self.agent.tool
184
201
  def manage_tests(ctx: RunContext[TinybirdAgentContext], task: str) -> str:
@@ -207,8 +224,11 @@ class TinybirdAgent:
207
224
  Returns:
208
225
  str: The result of the command.
209
226
  """
210
- result = self.command_agent.run(task, deps=ctx.deps, usage=ctx.usage)
211
- return f"Result: {result.output}\nDo not repeat in your response the result again, because it is already displayed in the terminal."
227
+ try:
228
+ result = self.command_agent.run(task, deps=ctx.deps, usage=ctx.usage)
229
+ return f"Result: {result.output}\nDo not repeat in your response the result again, because it is already displayed in the terminal."
230
+ except SubAgentRunCancelled as e:
231
+ return f"User does not want to continue with the proposed solution. Reason: {e}"
212
232
 
213
233
  @self.agent.tool
214
234
  def explore_data(ctx: RunContext[TinybirdAgentContext], task: str) -> str:
@@ -242,6 +262,19 @@ class TinybirdAgent:
242
262
  result = self.mock_agent.run(user_input, deps=ctx.deps, usage=ctx.usage)
243
263
  return result.output or "No result returned"
244
264
 
265
+ @self.agent.tool
266
+ def manage_files(ctx: RunContext[TinybirdAgentContext], task: str) -> str:
267
+ """List file/folders and read any type of file in the current directory. Use this tool when you need to list or read non Tinybird project files (e.g. .txt, .md).
268
+
269
+ Args:
270
+ task (str): The task to solve. Required.
271
+
272
+ Returns:
273
+ str: The result of the task.
274
+ """
275
+ result = self.file_agent.run(task, deps=ctx.deps, usage=ctx.usage)
276
+ return result.output or "No result returned"
277
+
245
278
  @self.agent.instructions
246
279
  def get_local_host(ctx: RunContext[TinybirdAgentContext]) -> str:
247
280
  return f"""
@@ -0,0 +1,64 @@
1
+ from pydantic_ai import Agent, Tool
2
+ from pydantic_ai.messages import ModelMessage
3
+ from pydantic_ai.usage import Usage
4
+
5
+ from tinybird.tb.modules.agent.animations import ThinkingAnimation
6
+ from tinybird.tb.modules.agent.models import create_model
7
+ from tinybird.tb.modules.agent.prompts import tone_and_style_instructions
8
+ from tinybird.tb.modules.agent.tools.file import list_files, read_file
9
+ from tinybird.tb.modules.agent.utils import TinybirdAgentContext
10
+ from tinybird.tb.modules.project import Project
11
+
12
+
13
+ class FileAgent:
14
+ def __init__(
15
+ self,
16
+ token: str,
17
+ user_token: str,
18
+ host: str,
19
+ workspace_id: str,
20
+ project: Project,
21
+ dangerously_skip_permissions: bool,
22
+ prompt_mode: bool,
23
+ thinking_animation: ThinkingAnimation,
24
+ ):
25
+ self.token = token
26
+ self.user_token = user_token
27
+ self.host = host
28
+ self.workspace_id = workspace_id
29
+ self.dangerously_skip_permissions = dangerously_skip_permissions or prompt_mode
30
+ self.project = project
31
+ self.thinking_animation = thinking_animation
32
+ self.messages: list[ModelMessage] = []
33
+ self.agent = Agent(
34
+ model=create_model(user_token, host, workspace_id),
35
+ deps_type=TinybirdAgentContext,
36
+ instructions=[
37
+ """
38
+ You are part of Tinybird Code, an agentic CLI that can help users to work with Tinybird.
39
+ You are a sub-agent of the main Tinybird Code agent. You are responsible for managing files.
40
+ You can do the following:
41
+ - List files in a directory.
42
+ - Read a file.
43
+
44
+ IMPORTANT: Use the `list_files` tool always before `read_file` to get the correct file path.
45
+ """,
46
+ tone_and_style_instructions,
47
+ ],
48
+ tools=[
49
+ Tool(list_files, docstring_format="google", require_parameter_descriptions=True, takes_ctx=True),
50
+ Tool(read_file, docstring_format="google", require_parameter_descriptions=True, takes_ctx=True),
51
+ ],
52
+ )
53
+
54
+ def run(self, task: str, deps: TinybirdAgentContext, usage: Usage):
55
+ result = self.agent.run_sync(
56
+ task,
57
+ deps=deps,
58
+ usage=usage,
59
+ message_history=self.messages,
60
+ model=create_model(self.user_token, self.host, self.workspace_id, run_id=deps.run_id),
61
+ )
62
+ new_messages = result.new_messages()
63
+ self.messages.extend(new_messages)
64
+ return result
@@ -24,7 +24,7 @@ def append_file(
24
24
  Args:
25
25
  datasource_name: Name of the datasource to append fixture to
26
26
  fixture_pathname: Path to the fixture file to append
27
- cloud: Whether to append the fixture to the cloud or local environment. If None (user didn't specify), will ask user to clarify. Defaults to local (False) in dangerous skip permissions mode.
27
+ cloud: Whether to append the fixture to the cloud or local environment. If None (user didn't specify in a previous step), will ask user to clarify. Defaults to local (False) in dangerous skip permissions mode.
28
28
 
29
29
  Returns:
30
30
  str: Message indicating the success or failure of the appending
@@ -54,6 +54,7 @@ def append_file(
54
54
 
55
55
  cloud_or_local = "Cloud" if cloud else "Local"
56
56
  active_plan = ctx.deps.get_plan() is not None and not cloud
57
+ ctx.deps.thinking_animation.stop()
57
58
  confirmation = show_confirmation(
58
59
  title=f"Append fixture {fixture_pathname} to datasource '{datasource_name}' in Tinybird {cloud_or_local}?",
59
60
  skip_confirmation=ctx.deps.dangerously_skip_permissions or active_plan,
@@ -0,0 +1,82 @@
1
+ from glob import glob
2
+ from pathlib import Path
3
+
4
+ import click
5
+ from pydantic_ai import RunContext
6
+
7
+ from tinybird.tb.modules.agent.utils import TinybirdAgentContext
8
+ from tinybird.tb.modules.feedback_manager import FeedbackManager
9
+
10
+
11
+ def list_files(
12
+ ctx: RunContext[TinybirdAgentContext],
13
+ folder_path: str = ".",
14
+ search_pattern: str = "*",
15
+ ) -> str:
16
+ """Lists all files and folders in a directory.
17
+
18
+ Args:
19
+ folder_path (str): The path to the directory to list. If not provided, it will list the files in the current directory. Default: "."
20
+ search_pattern (str): The pattern to search for in the files and folders. Default: "*"
21
+ Returns:
22
+ str: The list of files in the directory.
23
+ """
24
+ try:
25
+ ctx.deps.thinking_animation.stop()
26
+ if folder_path:
27
+ path = Path(folder_path)
28
+ else:
29
+ path = Path.cwd()
30
+
31
+ display_folder = "current directory" if (folder_path == "." or not folder_path) else folder_path
32
+
33
+ click.echo(
34
+ FeedbackManager.highlight(message=f"» Searching in {display_folder} with pattern '{search_pattern}'")
35
+ )
36
+
37
+ if not path.exists():
38
+ ctx.deps.thinking_animation.start()
39
+ return f"Folder {folder_path} does not exist"
40
+
41
+ result = glob(f"{path}/**/{search_pattern}", recursive=True)
42
+ folders = [f for f in result if Path(f).is_dir()]
43
+ files = [f for f in result if Path(f).is_file()]
44
+
45
+ ctx.deps.thinking_animation.start()
46
+ return f"Folders: {folders}\nFiles: {files}"
47
+ except Exception as e:
48
+ ctx.deps.thinking_animation.start()
49
+ return f"Error listing files: {e}"
50
+
51
+
52
+ def read_file(ctx: RunContext[TinybirdAgentContext], file_path: str) -> str:
53
+ """Reads a file from the local filesystem. The file_path parameter must be an absolute path, not a relative path. Any lines longer than 2000 characters will be truncated.
54
+
55
+ Args:
56
+ file_path (str): The path to the file to read.
57
+
58
+ Returns:
59
+ str: The content of the file.
60
+ """
61
+ try:
62
+ ctx.deps.thinking_animation.stop()
63
+ click.echo(FeedbackManager.highlight(message=f"» Reading file {file_path}"))
64
+ path = Path(file_path)
65
+
66
+ if not path.exists():
67
+ ctx.deps.thinking_animation.start()
68
+ return f"File {file_path} does not exist"
69
+
70
+ content = path.read_text()
71
+ chunks = content.split("\n")
72
+
73
+ if len(chunks) > 2000:
74
+ first_2000 = "\n".join(chunks[0:2000])
75
+ ctx.deps.thinking_animation.start()
76
+ return f"This file is too large to be read by the agent. Showing first 2000 lines instead:\n\n{first_2000}"
77
+
78
+ ctx.deps.thinking_animation.start()
79
+ return content
80
+ except Exception as e:
81
+ ctx.deps.thinking_animation.start()
82
+ return f"Error reading file: {e}"
@@ -3,7 +3,13 @@ import subprocess
3
3
  import click
4
4
  from pydantic_ai import RunContext
5
5
 
6
- from tinybird.tb.modules.agent.utils import AgentRunCancelled, TinybirdAgentContext, show_confirmation, show_input
6
+ from tinybird.tb.modules.agent.utils import (
7
+ AgentRunCancelled,
8
+ SubAgentRunCancelled,
9
+ TinybirdAgentContext,
10
+ show_confirmation,
11
+ show_input,
12
+ )
7
13
  from tinybird.tb.modules.feedback_manager import FeedbackManager
8
14
 
9
15
 
@@ -24,7 +30,7 @@ def run_command(ctx: RunContext[TinybirdAgentContext], command: str):
24
30
  if confirmation == "review":
25
31
  feedback = show_input(ctx.deps.workspace_name)
26
32
  ctx.deps.thinking_animation.start()
27
- return f"User did not confirm the command and gave the following feedback: {feedback}"
33
+ raise SubAgentRunCancelled(f"""User did not confirm the command `{command}`. Reason: {feedback}.""")
28
34
 
29
35
  click.echo(FeedbackManager.highlight(message=f"» Running command: {command}"))
30
36
  command = command.replace("tb", "tb --no-version-warning")
@@ -32,7 +38,7 @@ def run_command(ctx: RunContext[TinybirdAgentContext], command: str):
32
38
  click.echo(result.stdout)
33
39
  ctx.deps.thinking_animation.start()
34
40
  return result.stdout
35
- except AgentRunCancelled as e:
41
+ except (AgentRunCancelled, SubAgentRunCancelled) as e:
36
42
  raise e
37
43
  except Exception as e:
38
44
  click.echo(FeedbackManager.error(message=f"Error running command: {e}"))
@@ -721,6 +721,12 @@ class AgentRunCancelled(Exception):
721
721
  pass
722
722
 
723
723
 
724
+ class SubAgentRunCancelled(Exception):
725
+ """Exception raised when sub-agent cancels an operation"""
726
+
727
+ pass
728
+
729
+
724
730
  def show_confirmation(title: str, skip_confirmation: bool = False, show_review: bool = True) -> ConfirmationResult:
725
731
  if skip_confirmation:
726
732
  return "yes"
@@ -24,6 +24,7 @@ from tinybird.tb.modules.telemetry import add_telemetry_event
24
24
  TB_IMAGE_NAME = "tinybirdco/tinybird-local:latest"
25
25
  TB_CONTAINER_NAME = "tinybird-local"
26
26
  TB_LOCAL_PORT = int(os.getenv("TB_LOCAL_PORT", 7181))
27
+ TB_LOCAL_CLICKHOUSE_INTERFACE_PORT = int(os.getenv("TB_LOCAL_CLICKHOUSE_INTERFACE_PORT", 7182))
27
28
  TB_LOCAL_HOST = re.sub(r"^https?://", "", os.getenv("TB_LOCAL_HOST", "localhost"))
28
29
  TB_LOCAL_ADDRESS = f"http://{TB_LOCAL_HOST}:{TB_LOCAL_PORT}"
29
30
  TB_LOCAL_DEFAULT_WORKSPACE_NAME = "Tinybird_Local_Testing"
@@ -269,7 +270,7 @@ def start_tinybird_local(
269
270
  TB_IMAGE_NAME,
270
271
  name=TB_CONTAINER_NAME,
271
272
  detach=True,
272
- ports={"7181/tcp": TB_LOCAL_PORT},
273
+ ports={"7181/tcp": TB_LOCAL_PORT, "7182/tcp": TB_LOCAL_CLICKHOUSE_INTERFACE_PORT},
273
274
  remove=False,
274
275
  platform="linux/amd64",
275
276
  environment=environment,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 0.0.1.dev288
3
+ Version: 0.0.1.dev290
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird
@@ -8,17 +8,17 @@ tinybird/service_datasources.py,sha256=o6Az3T6OvcChR_7GXRu7sJH173KzGg1Gv-dNd0bI_
8
8
  tinybird/sql.py,sha256=UZJLop6zA9tTPEaS-Fq7M-QyzmC5uV_tIeXZzkjnhso,48299
9
9
  tinybird/sql_template.py,sha256=kaF5pi-f2JiWSYXEF8JsU1OIxvdu2homHnw4MYjq0n8,101953
10
10
  tinybird/sql_template_fmt.py,sha256=KUHdj5rYCYm_rKKdXYSJAE9vIyXUQLB0YSZnUXHeBlY,10196
11
- tinybird/sql_toolset.py,sha256=19WPr4S3SR--Iw-VPgmDnLmhOZyHhTxnj3-_Yq3OgEU,19767
11
+ tinybird/sql_toolset.py,sha256=Y2_fQrbk5GSNoRncAmRS_snpV61XQbiOy4uYkeF6pr4,19767
12
12
  tinybird/syncasync.py,sha256=IPnOx6lMbf9SNddN1eBtssg8vCLHMt76SuZ6YNYm-Yk,27761
13
13
  tinybird/tornado_template.py,sha256=jjNVDMnkYFWXflmT8KU_Ssbo5vR8KQq3EJMk5vYgXRw,41959
14
14
  tinybird/ch_utils/constants.py,sha256=v5-nkXHUhysu4i9Z4WVv0-sBbh6xSYUH5q5xHSY2xTI,4194
15
15
  tinybird/ch_utils/engine.py,sha256=4X1B-iuhdW_mxKnX_m3iCsxgP9RPVgR75g7yH1vsJ6A,40851
16
- tinybird/datafile/common.py,sha256=euJAKSu6GA67oIcRvrrBGsGI1nZtkSWM45ikjLUlJz0,106049
16
+ tinybird/datafile/common.py,sha256=Cj-CyO6TKa9_31Mao5qQffIDDtoLnKfe93cubGF5S-Y,105670
17
17
  tinybird/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1wnI,556
18
18
  tinybird/datafile/parse_connection.py,sha256=tRyn2Rpr1TeWet5BXmMoQgaotbGdYep1qiTak_OqC5E,1825
19
19
  tinybird/datafile/parse_datasource.py,sha256=ssW8QeFSgglVFi3sDZj_HgkJiTJ2069v2JgqnH3CkDE,1825
20
20
  tinybird/datafile/parse_pipe.py,sha256=xf4m0Tw44QWJzHzAm7Z7FwUoUUtr7noMYjU1NiWnX0k,3880
21
- tinybird/tb/__cli__.py,sha256=i0Uj8XdvCB6yYSx3uE3zP-aqoSr6lSMqfDHHiLv2Euw,247
21
+ tinybird/tb/__cli__.py,sha256=OrSAyOixAYmHAPopJr6x4hd9XD_ZWyUyoEWSDwnX-ZI,247
22
22
  tinybird/tb/check_pypi.py,sha256=Gp0HkHHDFMSDL6nxKlOY51z7z1Uv-2LRexNTZSHHGmM,552
23
23
  tinybird/tb/cli.py,sha256=FdDFEIayjmsZEVsVSSvRiVYn_FHOVg_zWQzchnzfWho,1008
24
24
  tinybird/tb/client.py,sha256=IQRaInDjOwr9Fzaz3_xXc3aUGqh94tM2lew7IZbB9eM,53733
@@ -46,7 +46,7 @@ tinybird/tb/modules/job.py,sha256=wBsnu8UPTOha2rkLvucgmw4xYv73ubmui3eeSIF68ZM,31
46
46
  tinybird/tb/modules/llm.py,sha256=fPBBCmM3KlCksLlgJkg4joDn6y3H5QjDzE-Pm4YNf7E,1782
47
47
  tinybird/tb/modules/llm_utils.py,sha256=nS9r4FAElJw8yXtmdYrx-rtI2zXR8qXfi1QqUDCfxvg,3469
48
48
  tinybird/tb/modules/local.py,sha256=kW3IHwJPvhBsa1eMh_xzow9Az3yYpHthkzsLSHeP5HE,6512
49
- tinybird/tb/modules/local_common.py,sha256=mFhidxVeGnDA_UHss-bRY8_UzU0V5iZ3HGnVqlnMzY0,17730
49
+ tinybird/tb/modules/local_common.py,sha256=PqNADrHRA5YPRfyDxeX9s8zTOMcSkFaC2R7Q8ie_qoA,17874
50
50
  tinybird/tb/modules/login.py,sha256=zerXZqIv15pbFk5XRt746xGcVnp01YmL_403byBf4jQ,1245
51
51
  tinybird/tb/modules/login_common.py,sha256=CKXD_BjivhGUmBtNbLTJwzQDr6885C72XPZjo0GLLvI,12010
52
52
  tinybird/tb/modules/logout.py,sha256=sniI4JNxpTrVeRCp0oGJuQ3yRerG4hH5uz6oBmjv724,1009
@@ -70,33 +70,35 @@ tinybird/tb/modules/watch.py,sha256=No0bK1M1_3CYuMaIgylxf7vYFJ72lTJe3brz6xQ-mJo,
70
70
  tinybird/tb/modules/workspace.py,sha256=tCP1zZMwBhLRGm22TGfpSd4cHvQLAS1o_azIXv_r6uw,11172
71
71
  tinybird/tb/modules/workspace_members.py,sha256=5JdkJgfuEwbq-t6vxkBhYwgsiTDxF790wsa6Xfif9nk,8608
72
72
  tinybird/tb/modules/agent/__init__.py,sha256=i3oe3vDIWWPaicdCM0zs7D7BJ1W0k7th93ooskHAV00,54
73
- tinybird/tb/modules/agent/agent.py,sha256=aCeZ1mhnd-WTEBHg_82lIpLPOVa6dXJ7uriEpU0N7yM,36100
73
+ tinybird/tb/modules/agent/agent.py,sha256=uVZ0yGOk4uRtF74mPHIYjawIDPSCweb5HCC7eLVuf2k,37339
74
74
  tinybird/tb/modules/agent/animations.py,sha256=4WOC5_2BracttmMCrV0H91tXfWcUzQHBUaIJc5FA7tE,3490
75
75
  tinybird/tb/modules/agent/banner.py,sha256=l6cO5Fi7lbVKp-GsBP8jf3IkjOWxg2jpAt9NBCy0WR8,4085
76
76
  tinybird/tb/modules/agent/command_agent.py,sha256=0Z08rQsir59zQAr-kkOvsKIFpIBsBSTGJJ1VgqqF5WA,3654
77
77
  tinybird/tb/modules/agent/compactor.py,sha256=BK5AxZFhrp3xWnsRnYaleiYoIWtVNc-_m650Hsopt8g,13841
78
78
  tinybird/tb/modules/agent/explore_agent.py,sha256=gyD5uV5TJwV24eeQiSwhkgfNPb4mtbeH7t2qSdoc18U,4100
79
+ tinybird/tb/modules/agent/file_agent.py,sha256=vE8VChVbG_-uyeBtp3I6QrXeNaPaVlVoNn4c9cGTAJA,2466
79
80
  tinybird/tb/modules/agent/memory.py,sha256=vBewB_64L_wHoT4tLT6UX2uxcHwSY880QZ26F9rPqXs,3793
80
81
  tinybird/tb/modules/agent/mock_agent.py,sha256=zbAZfAqdSLUtMr2VqO0erWpzjT2F1tTcuYjvHb-gvbA,8023
81
82
  tinybird/tb/modules/agent/models.py,sha256=eokO8XlY-kVJOsbqiVporGUAOCyKAXCO5xgTEK9SM6Y,2208
82
83
  tinybird/tb/modules/agent/prompts.py,sha256=a8ZnOZCTGRnxa_dlrTSmeaM9snOI3sMx0nwUdv7aVGI,44165
83
84
  tinybird/tb/modules/agent/testing_agent.py,sha256=AtwtJViH7805i7djyBgDb7SSUtDyJnw0TWJu6lBFsrg,2953
84
- tinybird/tb/modules/agent/utils.py,sha256=R1RcoPvjKh4OyuwLztWb74t2wBpV7JvNVLQ_JyClveM,31901
85
+ tinybird/tb/modules/agent/utils.py,sha256=alvRNtpPPRZP0sNdOXbzX3uQZHqqeh1daIAg3aquq24,32015
85
86
  tinybird/tb/modules/agent/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
87
  tinybird/tb/modules/agent/tools/analyze.py,sha256=CR5LXg4fou-zYEksqnjpJ0icvxJVoKnTctoI1NRvqCM,3873
87
- tinybird/tb/modules/agent/tools/append.py,sha256=8UsGMzmv7GYbzp0gerOBqpxxocDbous_haSuwS3zuGU,8222
88
+ tinybird/tb/modules/agent/tools/append.py,sha256=cF-1XYmgTXI3dfMQ_nEpOKo6duJGe2GOg64rXNnS9gw,8284
88
89
  tinybird/tb/modules/agent/tools/build.py,sha256=Hm-xDAP9ckMiKquT-DmDg5H0yxZefLOaWKANyoVSaEQ,846
89
90
  tinybird/tb/modules/agent/tools/datafile.py,sha256=kTob7G2TwCwIgwom0rERgXQ13rgPtZv3_ByLnrvpIdU,10881
90
91
  tinybird/tb/modules/agent/tools/deploy.py,sha256=6Vmm0lCG8XKE2iUF_ZJrOqXbTFhoe3anPzYCFehQ3_E,2027
91
92
  tinybird/tb/modules/agent/tools/deploy_check.py,sha256=pE3d9TPtXVKZjYbU0G6ORAGI86lN5K_4JKUriClERbM,1229
92
93
  tinybird/tb/modules/agent/tools/diff_resource.py,sha256=_9xHcDzCTKk_E1wKQbuktVqV6U9sA0kqYaBxWvtliX0,2613
93
94
  tinybird/tb/modules/agent/tools/execute_query.py,sha256=DL2jsZ0jaEqFIkGoiWfR-IUAwsgoF0D-_JUhq7xe4gA,9145
95
+ tinybird/tb/modules/agent/tools/file.py,sha256=_strhF1bnFFui3pVGUi2dFdcKzMyYzOD59lKeSHqG7o,2855
94
96
  tinybird/tb/modules/agent/tools/get_endpoint_stats.py,sha256=r2FrXg1L1s_Llr1tPdJ6k_gu6qw7qLsAXOkbz3eTk1g,2307
95
97
  tinybird/tb/modules/agent/tools/get_openapi_definition.py,sha256=4TIMO2XzHBMhpt9zIWRfjjPZbThT8r_iPS4CVHcItE0,2904
96
98
  tinybird/tb/modules/agent/tools/mock.py,sha256=Seo4WcYNLL1-SmPXutoaX94_pfOdIb47JXo8dHtUVhg,7106
97
99
  tinybird/tb/modules/agent/tools/plan.py,sha256=uAJEHZ-xXIq-EpURJYV7GUyY7IbIgactw9NWeCsIT9Y,2516
98
100
  tinybird/tb/modules/agent/tools/request_endpoint.py,sha256=bsLWrMn-ofJM3nn9vm8j_U8fdopVd3H5L0ii6ji-Kuw,4359
99
- tinybird/tb/modules/agent/tools/run_command.py,sha256=ypvIU0j1XVUWghqt-dpWHm3GQIYsZwE7kRHC3Wau_H0,1708
101
+ tinybird/tb/modules/agent/tools/run_command.py,sha256=EOHkyK9nktlt5jVz9sQcSt4CN40LO490FjmAy3CuNmE,1793
100
102
  tinybird/tb/modules/agent/tools/secret.py,sha256=8AGTZgHLPg1bxCA2cPMnb-zNutWEwn4emHo7kLjJC5w,4323
101
103
  tinybird/tb/modules/agent/tools/test.py,sha256=4XuEWVHLOTSO51Z9xJ08dTjk0j3IWY_JlPtSBO5aaUs,10373
102
104
  tinybird/tb/modules/datafile/build.py,sha256=NFKBrusFLU0WJNCXePAFWiEDuTaXpwc0lHlOQWEJ43s,51117
@@ -119,8 +121,8 @@ tinybird/tb_cli_modules/config.py,sha256=IsgdtFRnUrkY8-Zo32lmk6O7u3bHie1QCxLwgp4
119
121
  tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
120
122
  tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
121
123
  tinybird/tb_cli_modules/telemetry.py,sha256=Hh2Io8ZPROSunbOLuMvuIFU4TqwWPmQTqal4WS09K1A,10449
122
- tinybird-0.0.1.dev288.dist-info/METADATA,sha256=L0eOct16E7wiMuY7AZ7jIovDUt80Y1A3usyUbL_HN_0,1845
123
- tinybird-0.0.1.dev288.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
124
- tinybird-0.0.1.dev288.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
125
- tinybird-0.0.1.dev288.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
126
- tinybird-0.0.1.dev288.dist-info/RECORD,,
124
+ tinybird-0.0.1.dev290.dist-info/METADATA,sha256=rgJDi-VYXwLLOeFrK9n1nONEYic69YtTXbVcxDFW0yU,1845
125
+ tinybird-0.0.1.dev290.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
126
+ tinybird-0.0.1.dev290.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
127
+ tinybird-0.0.1.dev290.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
128
+ tinybird-0.0.1.dev290.dist-info/RECORD,,