robotcode 2.8.0.dev677__py3-none-any.whl → 2.9.0.dev68__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.
robotcode/cli/__init__.py CHANGED
@@ -2,11 +2,8 @@ import json
2
2
  import logging
3
3
  import logging.config
4
4
  import os
5
- import shlex
6
- import subprocess
7
- import sys
8
5
  from pathlib import Path
9
- from typing import IO, Any, List, Literal, Optional
6
+ from typing import IO, Any, List, Literal, Mapping, Optional
10
7
 
11
8
  import click
12
9
 
@@ -17,12 +14,13 @@ from robotcode.plugin import (
17
14
  ColoredOutput,
18
15
  OutputFormat,
19
16
  pass_application,
17
+ show_error,
20
18
  )
21
19
  from robotcode.plugin._agent_detection import is_running_in_ai_agent
22
20
  from robotcode.plugin.click_helper.aliases import AliasedGroup
23
21
  from robotcode.plugin.click_helper.exit_codes import has_robot_exit_codes
24
22
  from robotcode.plugin.click_helper.types import EnumChoice
25
- from robotcode.plugin.click_helper.wrappable import WRAPPER_APPLIED_ENV, is_wrappable
23
+ from robotcode.plugin.click_helper.wrappable import WRAPPER_APPLIED_ENV, invoked_command_is_wrappable, is_wrappable
26
24
  from robotcode.plugin.manager import PluginManager
27
25
 
28
26
  from .__version__ import __version__
@@ -51,125 +49,77 @@ class RobotCodeFormatter(logging.Formatter):
51
49
  super().__init__(*args, defaults=defaults, **kwargs)
52
50
 
53
51
 
54
- def _maybe_reexec_under_wrapper(
55
- ctx: click.Context, app: Application, cli_wrapper: Optional[str] = None, no_wrapper: bool = False
56
- ) -> None:
57
- """Re-execute this process through a configured ``wrapper`` command.
58
-
59
- When a ``wrapper`` is configured - either via ``--wrapper`` on the command
60
- line (``cli_wrapper``) or the selected profile's ``wrapper`` (e.g. to run
61
- the tests inside a specific X11/Wayland session) - and the invoked command
62
- is ``@wrappable`` (i.e. it executes Robot Framework), the process
63
- re-executes itself **once** through that command before Robot Framework
64
- starts. ``--wrapper`` overrides the profile; ``--no-wrapper`` disables
65
- wrapping for this run. The guard env var prevents infinite recursion and
66
- lets an outer layer suppress the re-exec by setting it itself.
52
+ def _warn_about_ignored_wrapper(ctx: click.Context, app: Application) -> None:
53
+ """Warn about a ``--wrapper`` that does not apply.
54
+
55
+ The command itself starts robotcode under the ``wrapper``, once it has loaded its
56
+ configuration (see `robotcode.plugin.click_helper.wrappable.run_under_wrapper`).
67
57
  """
68
- if no_wrapper:
69
- if cli_wrapper:
58
+ if app.config.no_wrapper:
59
+ if app.config.wrapper:
70
60
  app.warning("Ignoring --wrapper because --no-wrapper was given.")
71
61
  return
72
- if os.environ.get(WRAPPER_APPLIED_ENV):
62
+ if not app.config.wrapper or os.environ.get(WRAPPER_APPLIED_ENV) or not ctx.invoked_subcommand:
73
63
  return
64
+ if not invoked_command_is_wrappable(ctx):
65
+ app.warning(f"Ignoring --wrapper: '{ctx.invoked_subcommand}' does not execute Robot Framework.")
74
66
 
75
- sub_name = ctx.invoked_subcommand
76
- if not sub_name:
77
- return
78
- # The command itself opts in via @wrappable; aliases resolve to the same
79
- # command object, so this is alias-safe and needs no central name list.
80
- sub_cmd = ctx.command.get_command(ctx, sub_name) if isinstance(ctx.command, click.Group) else None
81
- if sub_cmd is None or not is_wrappable(sub_cmd):
82
- if cli_wrapper:
83
- app.warning(f"Ignoring --wrapper: '{sub_name}' does not execute Robot Framework.")
84
- return
85
67
 
86
- from robotcode.robot.config.loader import load_robot_config_from_path
87
- from robotcode.robot.config.utils import get_config_files
88
-
89
- profile_wrapper = None
90
- try:
91
- config_files, _, _ = get_config_files(
92
- config_files=app.config.config_files,
93
- root_folder=app.config.root,
94
- no_vcs=app.config.no_vcs,
95
- verbose_callback=app.verbose,
96
- )
97
- # `evaluated_with_env` also applies the profile's `env` to `os.environ`,
98
- # so the wrapper command can rely on it. Profile errors are swallowed
99
- # here: the command loads the config again and reports them, so they
100
- # show up once. (Without a callback they would raise, and an unknown
101
- # profile would make us skip the wrapper of a valid one.)
102
- profile = (
103
- load_robot_config_from_path(*config_files, verbose_callback=app.verbose)
104
- .combine_profiles(*(app.config.profiles or []), verbose_callback=app.verbose, error_callback=lambda _: None)
105
- .evaluated_with_env(verbose_callback=app.verbose, error_callback=lambda _: None)
106
- )
107
- profile_wrapper = profile.wrapper
108
- except Exception as e:
109
- # Don't fail early on config problems here; the actual command loads the
110
- # config again and reports errors properly. An explicit --wrapper is
111
- # still honored below.
112
- message = str(e)
113
- app.verbose(lambda: f"Skipping profile wrapper detection: {message}")
114
-
115
- # `--wrapper` overrides the profile's `wrapper`. The evaluated profile turns
116
- # StringExpression entries into plain strings.
117
- if cli_wrapper:
118
- wrapper = shlex.split(cli_wrapper)
119
- elif profile_wrapper:
120
- wrapper = [str(w) for w in profile_wrapper]
68
+ def _set_output_options(app: Application, color: Optional[bool], pager: Optional[bool]) -> None:
69
+ """Set the colour and pager choice of `app` from `--color/--no-color` and `--pager/--no-pager`."""
70
+ if color is None:
71
+ app.config.colored_output = ColoredOutput.AUTO
72
+ elif color:
73
+ app.config.colored_output = ColoredOutput.YES
121
74
  else:
122
- return
75
+ app.config.colored_output = ColoredOutput.NO
76
+ app.config.pager = pager
123
77
 
124
- # A dry run must not start the wrapper: it would set up and tear down the
125
- # real environment. Show it instead; the command itself then prints its own
126
- # dry-run output.
127
- if app.config.dry:
128
- app.echo(f"Dry run, not executing the wrapper. Would run robotcode under: {' '.join(wrapper)}")
129
- return
78
+ # AI-agent auto-detect: when running inside a known agent session
79
+ # (Claude Code, Copilot, OpenCode, …) demote colour and pager
80
+ # defaults so the agent's stdout capture stays clean. Explicit CLI
81
+ # flags and `NO_COLOR` / `FORCE_COLOR` keep their precedence.
82
+ if is_running_in_ai_agent():
83
+ if color is None and not os.environ.get("NO_COLOR") and not os.environ.get("FORCE_COLOR"):
84
+ app.config.colored_output = ColoredOutput.NO
85
+ if pager is None:
86
+ app.config.pager = False
130
87
 
131
- # Rebuild the invocation the way this process was actually started, so the
132
- # re-exec finds robotcode even when it runs from a bundled path (VS Code) and
133
- # is not installed in the interpreter. `launcher_script` is set only when we
134
- # were started through a bundled entry (its `__main__` sets it) or an explicit
135
- # `--launcher-script`; otherwise robotcode is importable directly and
136
- # `-m robotcode.cli` is correct. We deliberately do NOT consult the
137
- # ROBOTCODE_BUNDLED_ROBOTCODE_MAIN env var: VS Code sets it in every terminal,
138
- # so a directly started robotcode would be diverted to the bundled copy.
139
- # Mirrors the debug launcher's `debugger_script` handling.
140
- entry = [str(app.config.launcher_script)] if app.config.launcher_script else ["-m", "robotcode.cli"]
141
- command = [*wrapper, sys.executable, *entry, *sys.argv[1:]]
142
- app.verbose(lambda: "Running under wrapper: " + " ".join(command))
143
-
144
- # Run robotcode again under the wrapper; the guard env stops the spawned
145
- # robotcode from wrapping a second time. On POSIX we replace this process with
146
- # execvp (no extra process); Windows has no such exec, so there we spawn the
147
- # command, wait, and forward its exit code.
148
- os.environ[WRAPPER_APPLIED_ENV] = "1"
149
- try:
150
- if sys.platform == "win32":
151
- sys.exit(subprocess.run(command).returncode)
152
- os.execvp(command[0], command)
153
- except OSError as e:
154
- raise click.ClickException(f"Failed to execute wrapper command {wrapper!r}: {e}") from e
155
-
156
-
157
- class RobotDataError(click.ClickException):
158
- """An error robotcode reports itself for a command that passes on Robot Framework's
159
- exit codes.
160
88
 
161
- Shows the original error unchanged, but exits with Robot Framework's code for invalid
162
- data or command line options instead of Click's 1 or 2.
163
- """
89
+ def _application_for(params: Mapping[str, Any]) -> Application:
90
+ """An `Application` for an error that comes before the root command has set one up,
91
+ set up from robotcode's own options `params` as far as they are known."""
92
+ app = Application()
93
+ _set_output_options(app, params.get("color"), params.get("pager"))
94
+ return app
95
+
164
96
 
165
- exit_code = 252
97
+ class RobotCodeError(click.ClickException):
98
+ """An error that stops a robotcode command, written as robotcode writes the errors it
99
+ reports (`robotcode.plugin.show_error`). Keeps the exit code of the error."""
166
100
 
167
- def __init__(self, error: click.ClickException) -> None:
101
+ def __init__(self, error: click.ClickException, app: Application) -> None:
168
102
  super().__init__(error.message)
169
103
  self.error = error
104
+ self.app = app
105
+ # click declares the exit code on the class; this one is the code of the error
106
+ self.exit_code = error.exit_code # type: ignore[misc]
170
107
 
171
108
  def show(self, file: Optional[IO[Any]] = None) -> None:
172
- self.error.show(file)
109
+ show_error(self.app, self.error, file)
110
+
111
+
112
+ class RobotDataError(RobotCodeError):
113
+ """An error robotcode reports itself for a command that passes on Robot Framework's
114
+ exit codes.
115
+
116
+ Exits with Robot Framework's code for invalid data or command line options instead of
117
+ Click's 1 or 2.
118
+ """
119
+
120
+ def __init__(self, error: click.ClickException, app: Application) -> None:
121
+ super().__init__(error, app)
122
+ self.exit_code = 252 # type: ignore[misc]
173
123
 
174
124
 
175
125
  class RobotCodeGroup(AliasedGroup):
@@ -182,15 +132,40 @@ class RobotCodeGroup(AliasedGroup):
182
132
  invalid option - exits with Robot Framework's 252 instead. Robot Framework's own exit
183
133
  codes never arrive as Click errors, so they pass through unchanged, and so does any
184
134
  other code.
135
+
136
+ Every Click error of a command or of the group's own options is written as
137
+ `[ ERROR ] <message>`, with the `Application` of the command. An error that comes
138
+ before the root command has set it up - a command name that does not exist or is
139
+ missing, an invalid option of robotcode itself - gets one set up from robotcode's own
140
+ options, so that `--no-color` and AI-agent sessions apply to it too.
185
141
  """
186
142
 
143
+ def make_context(
144
+ self, info_name: Optional[str], args: List[str], parent: Optional[click.Context] = None, **extra: Any
145
+ ) -> click.Context:
146
+ # Click's parser takes the arguments out of the list it gets
147
+ command_line = list(args)
148
+ try:
149
+ return super().make_context(info_name, args, parent, **extra)
150
+ except click.ClickException as e:
151
+ # Click stops at an invalid option before it takes any value; read robotcode's
152
+ # own options again as Click's shell completion does, without errors or
153
+ # callbacks, passing over unknown options
154
+ lenient = {**extra, "resilient_parsing": True, "ignore_unknown_options": True}
155
+ try:
156
+ params = super().make_context(info_name, command_line, parent, **lenient).params
157
+ except click.ClickException:
158
+ params = {}
159
+ raise RobotCodeError(e, _application_for(params)) from e
160
+
187
161
  def invoke(self, ctx: click.Context) -> Any:
188
162
  try:
189
163
  return super().invoke(ctx)
190
164
  except click.ClickException as e:
165
+ app = ctx.find_object(Application) or _application_for(ctx.params)
191
166
  if e.exit_code in (1, 2) and self._passes_on_robot_exit_codes(ctx):
192
- raise RobotDataError(e) from e
193
- raise
167
+ raise RobotDataError(e, app) from e
168
+ raise RobotCodeError(e, app) from e
194
169
 
195
170
  def _passes_on_robot_exit_codes(self, ctx: click.Context) -> bool:
196
171
  name = ctx.invoked_subcommand
@@ -443,31 +418,17 @@ def robotcode(
443
418
  app.config.root = root
444
419
  app.config.no_vcs = no_vcs
445
420
 
446
- if color is None:
447
- app.config.colored_output = ColoredOutput.AUTO
448
- elif color:
449
- app.config.colored_output = ColoredOutput.YES
450
- else:
451
- app.config.colored_output = ColoredOutput.NO
452
- app.config.pager = pager
453
-
454
- # AI-agent auto-detect: when running inside a known agent session
455
- # (Claude Code, Copilot, OpenCode, …) demote colour and pager
456
- # defaults so the agent's stdout capture stays clean. Explicit CLI
457
- # flags and `NO_COLOR` / `FORCE_COLOR` keep their precedence.
458
- if is_running_in_ai_agent():
459
- if color is None and not os.environ.get("NO_COLOR") and not os.environ.get("FORCE_COLOR"):
460
- app.config.colored_output = ColoredOutput.NO
461
- if pager is None:
462
- app.config.pager = False
421
+ _set_output_options(app, color, pager)
463
422
  app.config.output_format = format
464
423
  app.config.launcher_script = launcher_script
465
424
  app.config.default_paths = default_path
466
425
  app.config.log_enabled = log
467
426
  app.config.log_level = log_level
468
427
  app.config.log_calls = log_calls
428
+ app.config.wrapper = wrapper
429
+ app.config.no_wrapper = no_wrapper
469
430
 
470
- _maybe_reexec_under_wrapper(ctx, app, wrapper, no_wrapper)
431
+ _warn_about_ignored_wrapper(ctx, app)
471
432
 
472
433
  if log_config:
473
434
  if log_calls:
@@ -1 +1 @@
1
- __version__ = "2.8.0-dev.677"
1
+ __version__ = "2.9.0-dev.68"
@@ -13,6 +13,7 @@ from robotcode.robot.config.loader import (
13
13
  DiscoverdBy,
14
14
  load_robot_config_from_path,
15
15
  )
16
+ from robotcode.robot.config.model import UnknownProfile
16
17
  from robotcode.robot.config.utils import get_config_files
17
18
 
18
19
 
@@ -85,8 +86,20 @@ def list(app: Application, paths: List[Path], show_hidden: bool = False, sort_by
85
86
 
86
87
  config = load_robot_config_from_path(*config_files, verbose_callback=app.verbose)
87
88
 
89
+ # the editors fill their profile lists with this command, also when their selection names a profile that is
90
+ # gone, so a name that selects no profile is only reported, and those of the selection are listed for them
91
+ unknown_selected: List[str] = []
92
+
93
+ def report_unknown(unknown: UnknownProfile) -> None:
94
+ app.error(unknown.message)
95
+ if unknown.selected:
96
+ unknown_selected.append(unknown.name)
97
+
88
98
  _, selected_profiles, enabled_names = config.combine_profiles_ex(
89
- *(app.config.profiles or []), verbose_callback=app.verbose, error_callback=app.error
99
+ *(app.config.profiles or []),
100
+ verbose_callback=app.verbose,
101
+ error_callback=app.error,
102
+ unknown_profile_callback=report_unknown,
90
103
  )
91
104
 
92
105
  selected_names = [k for k in selected_profiles.keys()]
@@ -121,6 +134,8 @@ def list(app: Application, paths: List[Path], show_hidden: bool = False, sort_by
121
134
  messages += ["No profiles defined."]
122
135
  if messages:
123
136
  result["messages"] = messages
137
+ if unknown_selected:
138
+ result["unknownSelected"] = unknown_selected
124
139
 
125
140
  if app.config.output_format is None or app.config.output_format == OutputFormat.TEXT:
126
141
  for v in result["profiles"]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: robotcode
3
- Version: 2.8.0-dev.677
3
+ Version: 2.9.0-dev.68
4
4
  Summary: Command line interface for RobotCode
5
5
  Project-URL: Homepage, https://robotcode.io
6
6
  Project-URL: Donate, https://opencollective.com/robotcode
@@ -34,35 +34,35 @@ Classifier: Topic :: Text Editors :: Integrated Development Environments (IDE)
34
34
  Classifier: Topic :: Utilities
35
35
  Classifier: Typing :: Typed
36
36
  Requires-Python: >=3.10
37
- Requires-Dist: robotcode-core==2.8.0-dev.677
38
- Requires-Dist: robotcode-plugin==2.8.0-dev.677
39
- Requires-Dist: robotcode-robot==2.8.0-dev.677
37
+ Requires-Dist: robotcode-core==2.9.0-dev.68
38
+ Requires-Dist: robotcode-plugin==2.9.0-dev.68
39
+ Requires-Dist: robotcode-robot==2.9.0-dev.68
40
40
  Provides-Extra: all
41
41
  Requires-Dist: docutils; extra == 'all'
42
42
  Requires-Dist: pyyaml>=5.4; extra == 'all'
43
- Requires-Dist: robotcode-analyze==2.8.0-dev.677; extra == 'all'
44
- Requires-Dist: robotcode-debugger==2.8.0-dev.677; extra == 'all'
45
- Requires-Dist: robotcode-language-server==2.8.0-dev.677; extra == 'all'
46
- Requires-Dist: robotcode-repl-server==2.8.0-dev.677; extra == 'all'
47
- Requires-Dist: robotcode-repl==2.8.0-dev.677; extra == 'all'
48
- Requires-Dist: robotcode-runner==2.8.0-dev.677; extra == 'all'
43
+ Requires-Dist: robotcode-analyze==2.9.0-dev.68; extra == 'all'
44
+ Requires-Dist: robotcode-debugger==2.9.0-dev.68; extra == 'all'
45
+ Requires-Dist: robotcode-language-server==2.9.0-dev.68; extra == 'all'
46
+ Requires-Dist: robotcode-repl-server==2.9.0-dev.68; extra == 'all'
47
+ Requires-Dist: robotcode-repl==2.9.0-dev.68; extra == 'all'
48
+ Requires-Dist: robotcode-runner==2.9.0-dev.68; extra == 'all'
49
49
  Requires-Dist: robotframework-robocop>=6.0.0; extra == 'all'
50
50
  Provides-Extra: analyze
51
- Requires-Dist: robotcode-analyze==2.8.0-dev.677; extra == 'analyze'
51
+ Requires-Dist: robotcode-analyze==2.9.0-dev.68; extra == 'analyze'
52
52
  Provides-Extra: debugger
53
- Requires-Dist: robotcode-debugger==2.8.0-dev.677; extra == 'debugger'
53
+ Requires-Dist: robotcode-debugger==2.9.0-dev.68; extra == 'debugger'
54
54
  Provides-Extra: languageserver
55
- Requires-Dist: robotcode-language-server==2.8.0-dev.677; extra == 'languageserver'
55
+ Requires-Dist: robotcode-language-server==2.9.0-dev.68; extra == 'languageserver'
56
56
  Provides-Extra: lint
57
57
  Requires-Dist: robotframework-robocop>=2.0.0; extra == 'lint'
58
58
  Provides-Extra: repl
59
- Requires-Dist: robotcode-repl==2.8.0-dev.677; extra == 'repl'
59
+ Requires-Dist: robotcode-repl==2.9.0-dev.68; extra == 'repl'
60
60
  Provides-Extra: replserver
61
- Requires-Dist: robotcode-repl-server==2.8.0-dev.677; extra == 'replserver'
61
+ Requires-Dist: robotcode-repl-server==2.9.0-dev.68; extra == 'replserver'
62
62
  Provides-Extra: rest
63
63
  Requires-Dist: docutils; extra == 'rest'
64
64
  Provides-Extra: runner
65
- Requires-Dist: robotcode-runner==2.8.0-dev.677; extra == 'runner'
65
+ Requires-Dist: robotcode-runner==2.9.0-dev.68; extra == 'runner'
66
66
  Provides-Extra: yaml
67
67
  Requires-Dist: pyyaml>=5.4; extra == 'yaml'
68
68
  Description-Content-Type: text/markdown
@@ -185,7 +185,7 @@ For CI pipelines, the command line, or LSP-compatible editors like Neovim, Subli
185
185
  pip install "robotcode[runner,analyze]"
186
186
  ```
187
187
 
188
- Pick the extras that match your use case — see the [CLI reference](https://robotcode.io/reference/cli/) for the available packages and how to install them.
188
+ Pick the extras that match your use case — see [Get Started on the Command Line](https://robotcode.io/getting-started/command-line/) for the commands each extra brings, installing with pip or uv and a first run, and the [CLI reference](https://robotcode.io/reference/cli/) for every command and option.
189
189
 
190
190
 
191
191
  ## Documentation
@@ -193,7 +193,7 @@ Pick the extras that match your use case — see the [CLI reference](https://rob
193
193
  For detailed instructions, visit our **[official documentation](https://robotcode.io)**. Additional resources:
194
194
 
195
195
  - **[Q&A](https://github.com/robotcodedev/robotcode/discussions/categories/q-a):** Answers to common questions about RobotCode.
196
- - **[Guides](https://robotcode.io/guides/):** How to use RobotCode's commands and set up projects, plus common pitfalls and editor customization.
196
+ - **[Guides](https://robotcode.io/guides/):** How to work with RobotCode in VS Code, in PyCharm and on the command line, how to set up projects with `robot.toml`, and tips for Robot Framework code.
197
197
  - **[Command Line Tools Reference](https://robotcode.io/reference/cli/):** Comprehensive documentation on using RobotCode's CLI tools.
198
198
  - **[Changelog](https://github.com/robotcodedev/robotcode/blob/main/CHANGELOG.md):** Track changes, updates, and new features in each release.
199
199
  - **[Support & Contribute](https://robotcode.io/contributing/):** Ways to back the project — financial, code, feedback.
@@ -0,0 +1,12 @@
1
+ robotcode/cli/__init__.py,sha256=pJ9qw0tY7Zh8OKFTtMKhFuFSnAGx7_QMx5r-s3d32U4,16394
2
+ robotcode/cli/__main__.py,sha256=hX3nwROMTnsYGT1KS0rXUYrslu9sFzctYdAh66Rcckw,153
3
+ robotcode/cli/__version__.py,sha256=VKDQl3EnWjlaGGS16iOqZ2LLnLORneHG-g4VFPliDAk,29
4
+ robotcode/cli/py.typed,sha256=bWew9mHgMy8LqMu7RuqQXFXLBxh2CRx0dUbSx-3wE48,27
5
+ robotcode/cli/commands/__init__.py,sha256=XJHRt_YwMO2Ni2EfL2aj4jkJXMVG6NGFTpzvSVgIRnQ,92
6
+ robotcode/cli/commands/config.py,sha256=0Jmf7HDIo7IIaOMU9M_bYi7PdHAfcae6x3SW93NA3EA,10481
7
+ robotcode/cli/commands/profiles.py,sha256=tZ8K5KoPkbol4PwTyR3Qleb09CjvrFJaQVbY36MGVGE,6808
8
+ robotcode-2.9.0.dev68.dist-info/METADATA,sha256=aP3XbL8DnLeUdL5P3CzlWc_UNpvP4So2W0oWMsgiP6w,15591
9
+ robotcode-2.9.0.dev68.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
10
+ robotcode-2.9.0.dev68.dist-info/entry_points.txt,sha256=Pb4DKVVdJb5PboVl48njwk3DkKQHBJOL1A8KkpemqA8,58
11
+ robotcode-2.9.0.dev68.dist-info/licenses/LICENSE.txt,sha256=B05uMshqTA74s-0ltyHKI6yoPfJ3zYgQbvcXfDVGFf8,10280
12
+ robotcode-2.9.0.dev68.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.32.4
2
+ Generator: hatchling 1.33.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,12 +0,0 @@
1
- robotcode/cli/__init__.py,sha256=kdPYL7SnMNmVf6jZ0p7xAvHIFKo5aUxWMt9TwLcd1Sw,18158
2
- robotcode/cli/__main__.py,sha256=hX3nwROMTnsYGT1KS0rXUYrslu9sFzctYdAh66Rcckw,153
3
- robotcode/cli/__version__.py,sha256=0xyLlet74gxp40f05fA-fjXhAr2XdtEik3UuIJs6yAM,30
4
- robotcode/cli/py.typed,sha256=bWew9mHgMy8LqMu7RuqQXFXLBxh2CRx0dUbSx-3wE48,27
5
- robotcode/cli/commands/__init__.py,sha256=XJHRt_YwMO2Ni2EfL2aj4jkJXMVG6NGFTpzvSVgIRnQ,92
6
- robotcode/cli/commands/config.py,sha256=0Jmf7HDIo7IIaOMU9M_bYi7PdHAfcae6x3SW93NA3EA,10481
7
- robotcode/cli/commands/profiles.py,sha256=5H9lvSVCMggWXf0IH54QtgDgqupEEvpcUrEsTZvZsNM,6127
8
- robotcode-2.8.0.dev677.dist-info/METADATA,sha256=BBaU7KP1vgbgniX1KWl4JPMM2ACV0cf7OELorlcZHHE,15408
9
- robotcode-2.8.0.dev677.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
10
- robotcode-2.8.0.dev677.dist-info/entry_points.txt,sha256=Pb4DKVVdJb5PboVl48njwk3DkKQHBJOL1A8KkpemqA8,58
11
- robotcode-2.8.0.dev677.dist-info/licenses/LICENSE.txt,sha256=B05uMshqTA74s-0ltyHKI6yoPfJ3zYgQbvcXfDVGFf8,10280
12
- robotcode-2.8.0.dev677.dist-info/RECORD,,