tinybird 4.5.8.dev0__tar.gz → 4.5.9__tar.gz

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.
Files changed (126) hide show
  1. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/PKG-INFO +11 -1
  2. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/client.py +14 -2
  3. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/__cli__.py +2 -2
  4. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datasource.py +16 -13
  5. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/deployment.py +2 -12
  6. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/deployment_common.py +3 -0
  7. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird.egg-info/PKG-INFO +11 -1
  8. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/setup.cfg +0 -0
  9. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/__cli__.py +0 -0
  10. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/ch_utils/constants.py +0 -0
  11. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/ch_utils/engine.py +0 -0
  12. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/check_pypi.py +0 -0
  13. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/config.py +0 -0
  14. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/context.py +0 -0
  15. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/datafile/common.py +0 -0
  16. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/datafile/exceptions.py +0 -0
  17. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/datafile/parse_connection.py +0 -0
  18. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/datafile/parse_datasource.py +0 -0
  19. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/datafile/parse_pipe.py +0 -0
  20. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/datatypes.py +0 -0
  21. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/feedback_manager.py +0 -0
  22. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/git_settings.py +0 -0
  23. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/prompts.py +0 -0
  24. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/service_datasources.py +0 -0
  25. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/sql.py +0 -0
  26. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/sql_template.py +0 -0
  27. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/sql_template_fmt.py +0 -0
  28. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/sql_toolset.py +0 -0
  29. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/syncasync.py +0 -0
  30. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/check_pypi.py +0 -0
  31. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/cli.py +0 -0
  32. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/client.py +0 -0
  33. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/config.py +0 -0
  34. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/branch.py +0 -0
  35. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/build.py +0 -0
  36. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/build_common.py +0 -0
  37. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/cicd.py +0 -0
  38. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/cli.py +0 -0
  39. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/common.py +0 -0
  40. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/config.py +0 -0
  41. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/connection.py +0 -0
  42. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/connection_kafka.py +0 -0
  43. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/connection_s3.py +0 -0
  44. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/copy.py +0 -0
  45. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/create.py +0 -0
  46. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/build.py +0 -0
  47. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/build_common.py +0 -0
  48. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/build_datasource.py +0 -0
  49. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
  50. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/diff.py +0 -0
  51. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/fixture.py +0 -0
  52. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/format_common.py +0 -0
  53. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/format_connection.py +0 -0
  54. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
  55. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/format_pipe.py +0 -0
  56. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
  57. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/playground.py +0 -0
  58. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/datafile/pull.py +0 -0
  59. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/deprecations.py +0 -0
  60. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/endpoint.py +0 -0
  61. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/exceptions.py +0 -0
  62. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/feedback_manager.py +0 -0
  63. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/fmt.py +0 -0
  64. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/info.py +0 -0
  65. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/infra.py +0 -0
  66. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/job.py +0 -0
  67. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/job_common.py +0 -0
  68. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/llm.py +0 -0
  69. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/llm_utils.py +0 -0
  70. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/local.py +0 -0
  71. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/local_common.py +0 -0
  72. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/local_logs.py +0 -0
  73. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/login.py +0 -0
  74. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/login_common.py +0 -0
  75. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/logout.py +0 -0
  76. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/logs.py +0 -0
  77. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/materialization.py +0 -0
  78. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/open.py +0 -0
  79. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/pipe.py +0 -0
  80. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/preview.py +0 -0
  81. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/project.py +0 -0
  82. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/project_commands.py +0 -0
  83. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/py_project.py +0 -0
  84. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/query_output.py +0 -0
  85. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/regions.py +0 -0
  86. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/secret.py +0 -0
  87. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/secret_common.py +0 -0
  88. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/sink.py +0 -0
  89. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/table.py +0 -0
  90. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/telemetry.py +0 -0
  91. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/test.py +0 -0
  92. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/test_common.py +0 -0
  93. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/tinyunit/tinyunit.py +0 -0
  94. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -0
  95. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/token.py +0 -0
  96. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/ts_project.py +0 -0
  97. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/watch.py +0 -0
  98. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/workspace.py +0 -0
  99. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb/modules/workspace_members.py +0 -0
  100. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli.py +0 -0
  101. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/auth.py +0 -0
  102. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/branch.py +0 -0
  103. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/cicd.py +0 -0
  104. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/cli.py +0 -0
  105. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/common.py +0 -0
  106. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/config.py +0 -0
  107. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/connection.py +0 -0
  108. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/datasource.py +0 -0
  109. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/exceptions.py +0 -0
  110. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/fmt.py +0 -0
  111. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/job.py +0 -0
  112. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/pipe.py +0 -0
  113. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/regions.py +0 -0
  114. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/tag.py +0 -0
  115. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/telemetry.py +0 -0
  116. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/test.py +0 -0
  117. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
  118. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  119. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/workspace.py +0 -0
  120. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  121. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird/tornado_template.py +0 -0
  122. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird.egg-info/SOURCES.txt +0 -0
  123. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird.egg-info/dependency_links.txt +0 -0
  124. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird.egg-info/entry_points.txt +0 -0
  125. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird.egg-info/requires.txt +0 -0
  126. {tinybird-4.5.8.dev0 → tinybird-4.5.9}/tinybird.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 4.5.8.dev0
3
+ Version: 4.5.9
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird
@@ -52,6 +52,16 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
52
52
  Changelog
53
53
  ----------
54
54
 
55
+ 4.5.9
56
+ *******
57
+
58
+ - `Fixed` Manage correctly LLM errors when analyzing quarantine errors.
59
+
60
+ 4.5.8
61
+ *******
62
+
63
+ - `Changed` `tb migrate-to-forward` removes the need to add a dummy pipe on first deployment
64
+
55
65
  4.5.7
56
66
  *******
57
67
 
@@ -972,16 +972,28 @@ class TinyB:
972
972
  kafka_sasl_mechanism="PLAIN",
973
973
  kafka_security_protocol="SASL_SSL",
974
974
  kafka_ssl_ca_pem=None,
975
+ kafka_sasl_oauthbearer_method=None,
976
+ kafka_sasl_oauthbearer_aws_region=None,
977
+ kafka_sasl_oauthbearer_aws_role_arn=None,
978
+ kafka_sasl_oauthbearer_aws_external_id=None,
975
979
  ):
980
+ is_oauthbearer = kafka_sasl_mechanism == "OAUTHBEARER"
976
981
  params = {
977
982
  "service": "kafka",
978
983
  "kafka_security_protocol": kafka_security_protocol,
979
984
  "kafka_sasl_mechanism": kafka_sasl_mechanism,
980
985
  "kafka_bootstrap_servers": kafka_bootstrap_servers,
981
- "kafka_sasl_plain_username": kafka_key,
982
- "kafka_sasl_plain_password": kafka_secret,
983
986
  "name": kafka_connection_name,
984
987
  }
988
+ if is_oauthbearer:
989
+ params["kafka_sasl_oauthbearer_method"] = kafka_sasl_oauthbearer_method
990
+ params["kafka_sasl_oauthbearer_aws_region"] = kafka_sasl_oauthbearer_aws_region
991
+ params["kafka_sasl_oauthbearer_aws_role_arn"] = kafka_sasl_oauthbearer_aws_role_arn
992
+ if kafka_sasl_oauthbearer_aws_external_id:
993
+ params["kafka_sasl_oauthbearer_aws_external_id"] = kafka_sasl_oauthbearer_aws_external_id
994
+ else:
995
+ params["kafka_sasl_plain_username"] = kafka_key
996
+ params["kafka_sasl_plain_password"] = kafka_secret
985
997
 
986
998
  if kafka_schema_registry_url:
987
999
  params["kafka_schema_registry_url"] = kafka_schema_registry_url
@@ -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__ = '4.5.8.dev0'
8
- __revision__ = '02e83cb'
7
+ __version__ = '4.5.9'
8
+ __revision__ = 'f7f4fc9'
@@ -1476,19 +1476,22 @@ def analyze_quarantine(datasource_name: str, project: Project, client: TinyB):
1476
1476
  user_token = config.get_user_token()
1477
1477
  click.echo(FeedbackManager.gray(message=f"\n» Analyzing errors in {datasource_name}_quarantine..."))
1478
1478
  if user_token:
1479
- llm = LLM(user_token=user_token, host=config.get_client().host)
1480
- ds_filenames = project.get_datasource_files()
1481
- datasource_definition = next(
1482
- (Path(f).read_text() for f in ds_filenames if f.endswith(f"{datasource_name}.datasource")), ""
1483
- )
1484
- response_llm = llm.ask(
1485
- system_prompt=quarantine_prompt(datasource_definition),
1486
- prompt=f"The quarantine errors are:\n{json.dumps(quarantine_data)}",
1487
- feature="tb_datasource_append_analyze_quarantine",
1488
- )
1489
- response = extract_xml(response_llm, "quarantine_errors")
1490
- error_message += "\n" + response
1491
- click.echo(response)
1479
+ try:
1480
+ llm = LLM(user_token=user_token, host=config.get_client().host)
1481
+ ds_filenames = project.get_datasource_files()
1482
+ datasource_definition = next(
1483
+ (Path(f).read_text() for f in ds_filenames if f.endswith(f"{datasource_name}.datasource")), ""
1484
+ )
1485
+ response_llm = llm.ask(
1486
+ system_prompt=quarantine_prompt(datasource_definition),
1487
+ prompt=f"The quarantine errors are:\n{json.dumps(quarantine_data)}",
1488
+ feature="tb_datasource_append_analyze_quarantine",
1489
+ )
1490
+ response = extract_xml(response_llm, "quarantine_errors")
1491
+ error_message += "\n" + response
1492
+ click.echo(response)
1493
+ except Exception:
1494
+ click.echo(FeedbackManager.error(message="There was an error analyzing the quarantine errors"))
1492
1495
  else:
1493
1496
  echo_safe_humanfriendly_tables_format_smart_table(
1494
1497
  data=[d.values() for d in res["data"]], column_names=res["data"][0].keys()
@@ -474,24 +474,13 @@ def migrate_to_forward(ctx: click.Context, allow_destructive_operations: bool) -
474
474
  show_migrate_to_forward_hint=False,
475
475
  return_check_result=True,
476
476
  validate_forward_workspace=False,
477
+ is_classic_migration=True,
477
478
  )
478
479
  if not check_result:
479
480
  message = "Deployment check did not complete. Migration cancelled."
480
481
  click.echo(FeedbackManager.error(message=message))
481
482
  sys_exit("migration_error", message)
482
483
 
483
- if check_result and check_result.get("status") == "no_changes":
484
- click.echo(
485
- FeedbackManager.warning(
486
- message=(
487
- "No deployment changes were detected. Add this dummy pipe to your workspace and run "
488
- "`tb migrate-to-forward` again:"
489
- )
490
- )
491
- )
492
- click.echo("NODE n\nSQL >\n select 'Forward'")
493
- return
494
-
495
484
  if not click.confirm(
496
485
  "Do you want to continue with the migration? This will also delete your branches, releases and switch your workspace from Classic to Forward.",
497
486
  default=False,
@@ -514,6 +503,7 @@ def migrate_to_forward(ctx: click.Context, allow_destructive_operations: bool) -
514
503
  output=output,
515
504
  env=env,
516
505
  validate_forward_workspace=False,
506
+ is_classic_migration=True,
517
507
  )
518
508
 
519
509
 
@@ -347,6 +347,7 @@ def create_deployment(
347
347
  env: Optional[str] = "cloud",
348
348
  return_check_result: bool = False,
349
349
  validate_forward_workspace: bool = True,
350
+ is_classic_migration: bool = False,
350
351
  ) -> Optional[Dict[str, Any]]:
351
352
  # TODO: This code is duplicated in build_server.py
352
353
  # Should be refactored to be shared
@@ -404,6 +405,8 @@ def create_deployment(
404
405
  params["allow_destructive_operations"] = "true"
405
406
  if not validate_forward_workspace:
406
407
  params["validate_forward_workspace"] = "false"
408
+ if is_classic_migration:
409
+ params["is_classic_migration"] = "true"
407
410
 
408
411
  deployment_request_sent = True
409
412
  result = api_post(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 4.5.8.dev0
3
+ Version: 4.5.9
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird
@@ -52,6 +52,16 @@ The Tinybird command-line tool allows you to use all the Tinybird functionality
52
52
  Changelog
53
53
  ----------
54
54
 
55
+ 4.5.9
56
+ *******
57
+
58
+ - `Fixed` Manage correctly LLM errors when analyzing quarantine errors.
59
+
60
+ 4.5.8
61
+ *******
62
+
63
+ - `Changed` `tb migrate-to-forward` removes the need to add a dummy pipe on first deployment
64
+
55
65
  4.5.7
56
66
  *******
57
67
 
File without changes
File without changes