janito 2.1.0__py3-none-any.whl → 2.1.1__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.
janito/__init__.py CHANGED
@@ -3,4 +3,4 @@ janito: A Python package for managing and interacting with Large Language Model
3
3
  Provides a CLI for credential management and an extensible driver system for LLMs.
4
4
  """
5
5
 
6
- __version__ = "2.1.0"
6
+ __version__ = "2.1.1"
janito/cli/config.py CHANGED
@@ -8,7 +8,6 @@ CONFIG_OPTIONS = {
8
8
  "role": "Role description for the Agent Profile (e.g., 'software engineer')",
9
9
  "temperature": "Sampling temperature (float, e.g., 0.0 - 2.0)",
10
10
  "max_tokens": "Maximum tokens for model response (int)",
11
- "use_azure_openai": "Whether to use Azure OpenAI client (default: False)",
12
11
  "template": "Template context dictionary for Agent Profile prompt rendering (nested)",
13
12
  "profile": "Agent Profile name (only 'base' is supported)",
14
13
  }
janito/cli/core/runner.py CHANGED
@@ -66,16 +66,18 @@ def prepare_llm_driver_config(args, modifiers):
66
66
  provider_instance = None
67
67
  try:
68
68
  provider_instance = ProviderRegistry().get_instance(provider)
69
- available_models = [
70
- m["name"]
71
- for m in provider_instance.get_model_info().values()
72
- if isinstance(m, dict) and "name" in m
73
- ]
74
- if model not in available_models:
69
+ if not provider_instance.is_model_available(model):
75
70
  print(
76
71
  f"Error: Model '{model}' is not available for provider '{provider}'."
77
72
  )
78
- print(f"Available models: {', '.join(available_models)}")
73
+ # Optionally, print available models if possible
74
+ if hasattr(provider_instance, 'get_model_info'):
75
+ available_models = [
76
+ m["name"]
77
+ for m in provider_instance.get_model_info().values()
78
+ if isinstance(m, dict) and "name" in m
79
+ ]
80
+ print(f"Available models: {', '.join(available_models)}")
79
81
  return provider, None, None
80
82
  except Exception as e:
81
83
  print(f"Error validating model for provider '{provider}': {e}")
@@ -98,11 +100,12 @@ def handle_runner(args, provider, llm_driver_config, agent_role, verbose_tools=F
98
100
  # Patch: disable execution/run tools if not enabled
99
101
  if not exec_enabled:
100
102
  import janito.tools
101
- adapter = janito.tools.get_local_tools_adapter()
103
+ adapter = janito.tools.get_local_tools_adapter(workdir=getattr(args, "workdir", None))
102
104
  if hasattr(adapter, "disable_execution_tools"):
103
105
  adapter.disable_execution_tools()
104
106
  else:
105
- pass
107
+ import janito.tools
108
+ adapter = janito.tools.get_local_tools_adapter(workdir=getattr(args, "workdir", None))
106
109
 
107
110
  provider_instance = ProviderRegistry().get_instance(provider, llm_driver_config)
108
111
  mode = get_prompt_mode(args)
janito/cli/main_cli.py CHANGED
@@ -13,6 +13,14 @@ from janito.cli.core.event_logger import (
13
13
  )
14
14
 
15
15
  definition = [
16
+ (
17
+ ["-W", "--workdir"],
18
+ {
19
+ "metavar": "WORKDIR",
20
+ "help": "Working directory to chdir to before tool execution",
21
+ "default": None,
22
+ },
23
+ ),
16
24
  (
17
25
  ["--verbose-api"],
18
26
  {
@@ -28,9 +28,28 @@ class AzureOpenAIModelDriver(OpenAIModelDriver):
28
28
  raise ImportError(
29
29
  f"AzureOpenAIModelDriver unavailable: {self.unavailable_reason}"
30
30
  )
31
- super().__init__(tools_adapter=tools_adapter)
31
+ # Do NOT call super().__init__ if Azure SDK is not available
32
+ OpenAIModelDriver.__init__(self, tools_adapter=tools_adapter)
32
33
  self.azure_endpoint = None
33
34
  self.api_version = None
34
35
  self.api_key = None
35
36
 
36
- # ... rest of the implementation ...
37
+ def _instantiate_openai_client(self, config):
38
+ try:
39
+ from openai import AzureOpenAI
40
+ api_key_display = str(config.api_key)
41
+ if api_key_display and len(api_key_display) > 8:
42
+ api_key_display = api_key_display[:4] + "..." + api_key_display[-4:]
43
+ client_kwargs = {
44
+ "api_key": config.api_key,
45
+ "azure_endpoint": getattr(config, "base_url", None),
46
+ "api_version": config.extra.get("api_version", "2023-05-15"),
47
+ }
48
+ client = AzureOpenAI(**client_kwargs)
49
+ return client
50
+ except Exception as e:
51
+ print(f"[ERROR] Exception during AzureOpenAI client instantiation: {e}", flush=True)
52
+ import traceback
53
+ print(traceback.format_exc(), flush=True)
54
+ raise
55
+
janito/llm/provider.py CHANGED
@@ -93,6 +93,15 @@ class LLMProvider(ABC):
93
93
  def driver(self) -> LLMDriver:
94
94
  pass
95
95
 
96
+ def is_model_available(self, model_name):
97
+ """
98
+ Returns True if the given model is available for this provider.
99
+ Default implementation checks MODEL_SPECS; override for dynamic providers.
100
+ """
101
+ if not hasattr(self, "MODEL_SPECS"):
102
+ return False
103
+ return model_name in self.MODEL_SPECS
104
+
96
105
  def get_model_info(self, model_name=None):
97
106
  """
98
107
  Return the info dict for a given model (driver, params, etc). If model_name is None, return all model info dicts.
@@ -55,6 +55,12 @@ class AzureOpenAIProvider(LLMProvider):
55
55
  def unavailable_reason(self):
56
56
  return unavailable_reason
57
57
 
58
+ def is_model_available(self, model_name):
59
+ """
60
+ Returns True for any model name, since Azure deployments are user-defined and not enumerable in advance.
61
+ """
62
+ return True
63
+
58
64
  def create_agent(self, tools_adapter=None, agent_name: str = None, **kwargs):
59
65
  from janito.llm.agent import LLMAgent
60
66
  from janito.drivers.azure_openai.driver import AzureOpenAIModelDriver
@@ -6,8 +6,8 @@ MODEL_SPECS = {
6
6
  "family": "deepseek",
7
7
  "default": True,
8
8
  },
9
- "deepseek-coder": {
10
- "description": "DeepSeek Coder Model (OpenAI-compatible)",
9
+ "deepseek-reasoner": {
10
+ "description": "DeepSeek Reasoner Model (OpenAI-compatible)",
11
11
  "context_window": 8192,
12
12
  "max_tokens": 4096,
13
13
  "family": "deepseek",
@@ -16,7 +16,7 @@ class DeepseekProvider(LLMProvider):
16
16
  name = "deepseek"
17
17
  maintainer = "Needs maintainer"
18
18
  MODEL_SPECS = MODEL_SPECS
19
- DEFAULT_MODEL = "deepseek-chat" # Options: deepseek-chat, deepseek-coder
19
+ DEFAULT_MODEL = "deepseek-chat" # Options: deepseek-chat, deepseek-reasoner
20
20
 
21
21
  def __init__(
22
22
  self, auth_manager: LLMAuthManager = None, config: LLMDriverConfig = None
janito/tools/__init__.py CHANGED
@@ -4,9 +4,13 @@ from janito.tools.adapters.local import (
4
4
  )
5
5
 
6
6
 
7
- def get_local_tools_adapter():
8
-
7
+ def get_local_tools_adapter(workdir=None):
9
8
  # Use set_verbose_tools on the returned adapter to set verbosity as needed
9
+ if workdir is not None:
10
+ import os
11
+ if not os.path.exists(workdir):
12
+ os.makedirs(workdir, exist_ok=True)
13
+ return LocalToolsAdapter(workdir=workdir)
10
14
  return _internal_local_tools_adapter
11
15
 
12
16
 
@@ -24,7 +24,12 @@ from .search_text.core import SearchTextTool
24
24
  from .validate_file_syntax.core import ValidateFileSyntaxTool
25
25
 
26
26
  # Singleton tools adapter with all standard tools registered
27
- local_tools_adapter = LocalToolsAdapter()
27
+ import os
28
+ local_tools_adapter = LocalToolsAdapter(workdir=os.getcwd())
29
+
30
+ def get_local_tools_adapter(workdir=None):
31
+ import os
32
+ return LocalToolsAdapter(workdir=workdir or os.getcwd())
28
33
 
29
34
  # Register tools
30
35
  for tool_class in [
@@ -15,9 +15,13 @@ class LocalToolsAdapter(ToolsAdapter):
15
15
  Handles registration, lookup, enabling/disabling, listing, and now, tool execution (merged from executor).
16
16
  """
17
17
 
18
- def __init__(self, tools=None, event_bus=None, allowed_tools=None):
18
+ def __init__(self, tools=None, event_bus=None, allowed_tools=None, workdir=None):
19
19
  super().__init__(tools=tools, event_bus=event_bus, allowed_tools=allowed_tools)
20
20
  self._tools: Dict[str, Dict[str, Any]] = {}
21
+ self.workdir = workdir
22
+ if self.workdir:
23
+ import os
24
+ os.chdir(self.workdir)
21
25
  if tools:
22
26
  for tool in tools:
23
27
  self.register_tool(tool)
@@ -43,26 +43,13 @@ class AskUserTool(ToolBase):
43
43
  def _(event):
44
44
  pass
45
45
 
46
- # F12 instruction rotation
47
- _f12_instructions = [
48
- tr("proceed"),
49
- tr("go ahead"),
50
- tr("continue"),
51
- tr("next"),
52
- tr("okay"),
53
- ]
54
- _f12_index = {"value": 0}
55
-
56
46
  @bindings.add("f12")
57
47
  def _(event):
58
- """When F12 is pressed, rotate through a set of short instructions."""
59
48
  buf = event.app.current_buffer
60
- idx = _f12_index["value"]
61
- buf.text = _f12_instructions[idx]
49
+ buf.text = "Do It"
62
50
  buf.validate_and_handle()
63
- _f12_index["value"] = (idx + 1) % len(_f12_instructions)
64
51
 
65
- # Use shared CLI styles
52
+ # Use shared CLI styles
66
53
 
67
54
  # prompt_style contains the prompt area and input background
68
55
  # toolbar_style contains the bottom-toolbar styling
@@ -32,6 +32,7 @@ class PythonCodeRunTool(ToolBase):
32
32
  tr("⚡ Running: python (stdin mode) ...\n{code}\n", code=code),
33
33
  ReportAction.EXECUTE,
34
34
  )
35
+ self.report_stdout("\n")
35
36
  try:
36
37
  with (
37
38
  tempfile.NamedTemporaryFile(
@@ -31,6 +31,7 @@ class PythonCommandRunTool(ToolBase):
31
31
  self.report_action(
32
32
  tr("🐍 Running: python -c ...\n{code}\n", code=code), ReportAction.EXECUTE
33
33
  )
34
+ self.report_stdout("\n")
34
35
  try:
35
36
  with (
36
37
  tempfile.NamedTemporaryFile(
@@ -29,6 +29,7 @@ class PythonFileRunTool(ToolBase):
29
29
  tr("🚀 Running: python {file_path}", file_path=file_path),
30
30
  ReportAction.EXECUTE,
31
31
  )
32
+ self.report_stdout("\n")
32
33
  try:
33
34
  with (
34
35
  tempfile.NamedTemporaryFile(
janito/version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # janito/version.py
2
2
  """Single source of truth for the janito package version."""
3
3
 
4
- __version__ = "2.1.0"
4
+ __version__ = "2.1.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.1.0
3
+ Version: 2.1.1
4
4
  Summary: A new Python package called janito.
5
5
  Author-email: Your Name <your.email@example.com>
6
6
  Project-URL: Homepage, https://github.com/janito-dev/janito
@@ -1,4 +1,4 @@
1
- janito/__init__.py,sha256=LPIMGN0aKEWl2rT_sMRWHEuSr-y95F1kB08ljrwOtIM,232
1
+ janito/__init__.py,sha256=M4zdHzm5FHPuO032Xj6O8eX4k9nLYI2euPuHZdV_Xqs,232
2
2
  janito/__main__.py,sha256=lPQ8kAyYfyeS1KopmJ8EVY5g1YswlIqCS615mM_B_rM,70
3
3
  janito/config.py,sha256=HJh0CmZEx7AbMQOmFkiYHFNzc-fO7fqpZ9rh6RenxK8,201
4
4
  janito/config_manager.py,sha256=bbviXlbrSyQSVsYjcNo--ZLr_jFuAVL6ntuuWrvHbjs,4297
@@ -16,15 +16,15 @@ janito/provider_config.py,sha256=dzYvxWg3Smjt9Jbkw0CNdXmBMwSTgoFTOAajdPL2w5w,304
16
16
  janito/provider_registry.py,sha256=Heg6Kq59ObBLcTHvQc8VrTn6I0glzRmELjdsT5Y69mk,6411
17
17
  janito/report_events.py,sha256=q4OR_jTZNfcqaQF_fzTjgqo6_VlUIxSGWfhpT4nJWcw,938
18
18
  janito/utils.py,sha256=eXSsMgM69YyzahgCNrJQLcEbB8ssLI1MQqaa20ONxbE,376
19
- janito/version.py,sha256=N70_J7dPtgmHMvQB8geb1wT5TOwdt0lURaxMFId72uM,108
19
+ janito/version.py,sha256=Cb_l7kFyD82KlvXN_TppP2yrLKII4Vm6g0S9HOt2L1M,108
20
20
  janito/agent/setup_agent.py,sha256=4TdZeutRKsjjWx5qIqEId4VY1rUUXED8XiWKdY1n4ac,4940
21
21
  janito/agent/templates/profiles/system_prompt_template_base_pt.txt.j2,sha256=FX8piXbR9XNOEKkOSMt4ieZ2wn5fzQlffeQFf8d7gIc,723
22
22
  janito/agent/templates/profiles/system_prompt_template_main.txt.j2,sha256=1MRFx_NRXAoBWFq_2c-CXGUCuWwmlGGcnbdpWv9x0pQ,2497
23
23
  janito/cli/__init__.py,sha256=xaPDOrWphBbCR63Xpcx_yfpXSJIlCaaICc4j2qpWqrM,194
24
- janito/cli/config.py,sha256=OkjcGqM_I2pjuKJm9LmvEqqOGTAP23Zuk_JZyNsoZSU,1140
24
+ janito/cli/config.py,sha256=enpW6oQa2U1ywPr8sCrI1KbKbjiCmDtDgXaLK3jbyMM,1060
25
25
  janito/cli/console.py,sha256=gJolqzWL7jEPLxeuH-CwBDRFpXt976KdZOEAB2tdBDs,64
26
26
  janito/cli/main.py,sha256=s5odou0txf8pzTf1ADk2yV7T5m8B6cejJ81e7iu776U,312
27
- janito/cli/main_cli.py,sha256=3uf-bq9yks1k8bEfyfn7RDkrXsrYwC4ASxDujmqjmdQ,10602
27
+ janito/cli/main_cli.py,sha256=oekJEa4TqhebIrSjT8pAAiGeQPY1qLmlrNWHE4J8D0A,10811
28
28
  janito/cli/prompt_core.py,sha256=hss97xsNhx3YSrvgU0p9RanNRgRGZeomHEzOOXdrmew,10423
29
29
  janito/cli/prompt_handler.py,sha256=SnPTlL64noeAMGlI08VBDD5IDD8jlVMIYA4-fS8zVLg,215
30
30
  janito/cli/rich_terminal_reporter.py,sha256=cMi_e6uBMMk9DqGHeMEbWdqiuIoPn-5f1abB3WLWIts,4265
@@ -71,14 +71,14 @@ janito/cli/cli_commands/show_system_prompt.py,sha256=OtcIsmI9au7JE7hxEuJPw118Vaq
71
71
  janito/cli/core/__init__.py,sha256=YH95fhgY9yBX8RgqX9dSrEkl4exjV0T4rbmJ6xUpG-Y,196
72
72
  janito/cli/core/event_logger.py,sha256=1X6lR0Ax7AgF8HlPWFoY5Ystuu7Bh4ooTo78vXzeGB0,2008
73
73
  janito/cli/core/getters.py,sha256=IfweIK5uZZz9y-p8lyHHmXaqjWk6BkzY6ImJxxh7ATc,1426
74
- janito/cli/core/runner.py,sha256=8pucRrKHexsjj3rUxQQpNSFkYiABbAOJggWlI8xRtdY,5657
74
+ janito/cli/core/runner.py,sha256=5mSDigcIWQCKRbbfYyjmpZ-xHyQpxyAenvEBDF2rpzY,6000
75
75
  janito/cli/core/setters.py,sha256=c_JAlaEPpwR514Y7lQHgnZC9X2PpsjWia2fRzKmSFV8,6633
76
76
  janito/cli/core/unsetters.py,sha256=FEw9gCt0vRvoCt0kRSNfVB2tzi_TqppJIx2nHPP59-k,2012
77
77
  janito/cli/single_shot_mode/__init__.py,sha256=Ct99pKe9tINzVW6oedZJfzfZQKWpXz-weSSCn0hrwHY,115
78
78
  janito/cli/single_shot_mode/handler.py,sha256=2VTGiYOHIZE5z_S0pic9-rBcyL_nb5NgldNZKKZtibM,5600
79
79
  janito/drivers/driver_registry.py,sha256=zEvCJwaKhmGFGTIpSoZOncNwmJhrRTbaDz7yVF-1ZTk,1133
80
80
  janito/drivers/anthropic/driver.py,sha256=4yLaf2T0g2zr-MSwXOx32s7ETut9FOl0uXyJGYiJzZU,3937
81
- janito/drivers/azure_openai/driver.py,sha256=NHpPygG0_NdOioyhZsLpx_PS4N48QsXLeoMkMvSLEhc,1101
81
+ janito/drivers/azure_openai/driver.py,sha256=NiAIeaDVTcyUi01qYdt0hKDbqasuesNrk_pHTwMgvv0,2006
82
82
  janito/drivers/google_genai/driver.py,sha256=qg3bApr954LexMlnsL3MLaHAS8X4aacmRKsyEPj6KKo,1680
83
83
  janito/drivers/google_genai/schema_generator.py,sha256=p5hWxzcjeTlLAQZAt6kTXjxnHnBYyDAkKi4KkZctAJQ,2565
84
84
  janito/drivers/mistralai/driver.py,sha256=r7iMMAG5V7OmzrtQhVCuK3ueAEzgbgS1qcPDKHTNKoo,1208
@@ -100,17 +100,17 @@ janito/llm/driver_config_builder.py,sha256=BvWGx7vaBR5NyvPY1XNAP3lAgo1uf-T25CSsI
100
100
  janito/llm/driver_input.py,sha256=Zq7IO4KdQPUraeIo6XoOaRy1IdQAyYY15RQw4JU30uA,389
101
101
  janito/llm/message_parts.py,sha256=QY_0kDjaxdoErDgKPRPv1dNkkYJuXIBmHWNLiOEKAH4,1365
102
102
  janito/llm/model.py,sha256=42hjcffZDTuzjAJoVhDcDqwIXm6rUmmi5UwTOYopf5w,1131
103
- janito/llm/provider.py,sha256=un_bFwcVPPvunI8OZCrNG8IGwt8bUJINxst0C3sDfFE,7627
103
+ janito/llm/provider.py,sha256=lfIJnh06F0kf8--Pg_W7ALhkbIzn7N4iItQ93pntyuM,7978
104
104
  janito/providers/__init__.py,sha256=j11MccCveqDTiZTicJH00eZ3qVDEL1KDbihGZhEvGYg,326
105
105
  janito/providers/provider_static_info.py,sha256=f0g2UbyLdHFBPb45x19t6Lx_FoIXp0mJLboH4Jqn1L0,611
106
106
  janito/providers/registry.py,sha256=wd9fFafXeMOnqk4mvVsY9HYYGNa5ipG9LbieDuTHves,774
107
107
  janito/providers/anthropic/model_info.py,sha256=saofXNs73WhlAhm58AcIkSem7C8FMUgHP19BvkoLV5Y,641
108
108
  janito/providers/anthropic/provider.py,sha256=nTMTroXCffU9JIEpMtMlY7a4FZS1J90gr9cAVRwrCJE,2371
109
109
  janito/providers/azure_openai/model_info.py,sha256=v4zHgPDBCZkQUE40i-BseDnYzvjPd8c8NaspIor3l10,396
110
- janito/providers/azure_openai/provider.py,sha256=AJtU159v7sSvjquJNoPEaB2Tvf5s9tbJsJkEih58iEQ,2879
110
+ janito/providers/azure_openai/provider.py,sha256=Y65oOt3yfzTXNzAKLCM99GVN_OoIMvwbmQQSvDFwvWo,3089
111
111
  janito/providers/deepseek/__init__.py,sha256=4sISEpq4bJO29vxFK9cfnO-SRUmKoD7oSdeCvz0hVno,36
112
- janito/providers/deepseek/model_info.py,sha256=AxkdLHfdAX66ihnlEucv4V8VfUFxnWZo_VHHvZYXTcs,459
113
- janito/providers/deepseek/provider.py,sha256=jxuQ131Qda0f0jDHedJsARwLHvHAEISab0KcVxZQnk8,3656
112
+ janito/providers/deepseek/model_info.py,sha256=tAlFRtWiyNF_MKZ1gy5_-VNlvqoIwAinv6bAv9dNFsc,465
113
+ janito/providers/deepseek/provider.py,sha256=h3xD3uAoE9Kr-IumcQsEK3oNZbkXH-bDfzQK1Uz3nM4,3659
114
114
  janito/providers/google/__init__.py,sha256=hE3OGJvLEhvNLhIK_XmCGIdrIj8MKlyGgdOLJ4mdess,38
115
115
  janito/providers/google/model_info.py,sha256=tw0_o8Z3Zhcl5BtcShgE-a0Sinz2gsiiiSWWOIjm5us,1220
116
116
  janito/providers/google/provider.py,sha256=O60BJXhjmwfmI-FqHUAAO022H7CUbhVU_Qj-FIrPnp4,2626
@@ -121,7 +121,7 @@ janito/providers/openai/model_info.py,sha256=eqlkKswDcZKDLrR1qL_uSYw5KRarx8JTSUN
121
121
  janito/providers/openai/provider.py,sha256=DnFhq1H9_fX-KjcIkeMk9duxAU3OIPzaiM188-gXNhU,4493
122
122
  janito/providers/openai/schema_generator.py,sha256=hTqeLcPTR8jeKn5DUUpo7b-EZ-V-g1WwXiX7MbHnFzE,2234
123
123
  janito/termweb/app.py,sha256=lOZqNf5TEvijryLXaa2CDx722PqBR_DH32A44V1Lfz0,3305
124
- janito/tools/__init__.py,sha256=XsoXOdy2P71UnTBF5dfWoEveF614dXgR6EgMyGjVO6U,367
124
+ janito/tools/__init__.py,sha256=Xk6i_b2VTfrSGt_iBGAe61uSZGyrztv_WzbGlxQVNrU,566
125
125
  janito/tools/inspect_registry.py,sha256=Jo7PrMPRKLuR-j_mBAk9PBcTzeJf1eQrS1ChGofgQk0,538
126
126
  janito/tools/tool_base.py,sha256=223MKZFYE8DMcSXfPofj6fro7YAvT7HaXmAUUUAv_AU,3370
127
127
  janito/tools/tool_events.py,sha256=czRtC2TYakAySBZvfHS_Q6_NY_7_krxzAzAL1ggRFWA,1527
@@ -131,9 +131,9 @@ janito/tools/tool_utils.py,sha256=57nfiq0XKTxzSy7ZqgmR_ItMt0-Ri3sENQzCiLWDR_M,13
131
131
  janito/tools/tools_adapter.py,sha256=5UXiL0F1oADFDaV2UQRviMYpylfZPl8AKrGVW0RkdAw,8410
132
132
  janito/tools/tools_schema.py,sha256=rGrKrmpPNR07VXHAJ_haGBRRO-YGLOF51BlYRep9AAQ,4415
133
133
  janito/tools/adapters/__init__.py,sha256=XKixOKtUJs1R-rGwGDXSLVLg5-Kp090gvWbsseWT4LI,92
134
- janito/tools/adapters/local/__init__.py,sha256=3S-boSbyG1BG-pbSvarUA9ItlkVI2bfUAKGJoIB4UDY,1850
135
- janito/tools/adapters/local/adapter.py,sha256=O7xWMeLrPzjPk4j-06EMKZWRVuiubl8Buyz7NmLh_xc,3434
136
- janito/tools/adapters/local/ask_user.py,sha256=ZX4MD-Tgz8FDVZBvFYOKzJaQ2s5xejteE-JNcy8UlsE,3894
134
+ janito/tools/adapters/local/__init__.py,sha256=6Kkfh96Q1HCS5EImW2U9GXI_tY19KFVpZ57gWCxpGBI,2003
135
+ janito/tools/adapters/local/adapter.py,sha256=6W-0HgCoKBJcefmMuXhfS114mDbg7G8Oygm8PFTGsCg,3565
136
+ janito/tools/adapters/local/ask_user.py,sha256=GiGnID--Wd7uvF4I9JyQn4m4PzdwSACfo5kH7O9rFuo,3431
137
137
  janito/tools/adapters/local/copy_file.py,sha256=wNr6mQBxYxGMGZFJmDnWXm5ogJ8iskpA6izBJH4cQvk,3507
138
138
  janito/tools/adapters/local/create_directory.py,sha256=4PpSKETzqdUPmSk5vX2ikatHcobRK7vZEgV1quMsTVs,2551
139
139
  janito/tools/adapters/local/create_file.py,sha256=a-Wrx4sN0YAxiTKow2EfFvQHLO3hyfS2kV2Zq1aG4fs,3463
@@ -143,9 +143,9 @@ janito/tools/adapters/local/find_files.py,sha256=5_7YxzxPWigNEvIG9kKwzaPB1n-Gt0T
143
143
  janito/tools/adapters/local/move_file.py,sha256=_Pn34fYbRq7Ax2kSv0LeTHKRn0LnNScxaM7jA_QTjR8,5213
144
144
  janito/tools/adapters/local/open_html_in_browser.py,sha256=uQ_RtxpmHid0AHLGmSoSl3nsgEczx-SbiZEHFH-NRi0,1775
145
145
  janito/tools/adapters/local/open_url.py,sha256=gzueNkGLNWikWzbB32X4VQUGyBq31xuZ11t-qKioHAk,1221
146
- janito/tools/adapters/local/python_code_run.py,sha256=sUKZcXcdNyGD9XL5Ydk3q_Mu7uf7MRTLYtrnuQqhwi0,6616
147
- janito/tools/adapters/local/python_command_run.py,sha256=PgPa68GQMbwfiH2Lxg1bXOiFJDtXi1bbKT7c9gIAYxc,6556
148
- janito/tools/adapters/local/python_file_run.py,sha256=q7QEZfPspJ36hyjnIySm10Bm4L4NzW3hga3V8_ZoGBc,6431
146
+ janito/tools/adapters/local/python_code_run.py,sha256=MCZqd8L3xJ4rsi4QmGytNrfRvv0FCqrhivAn5lQgm9k,6650
147
+ janito/tools/adapters/local/python_command_run.py,sha256=2bP9YnBP_-w6VQtmC7ROonsgDo2dq0_iVOFB2JEdCJs,6590
148
+ janito/tools/adapters/local/python_file_run.py,sha256=1xaaMsHrobJ3z0T8bIS469zIKqwdNpFlnV8UorO8LTQ,6465
149
149
  janito/tools/adapters/local/remove_directory.py,sha256=A0qriZkcf85t3bwX52G9O6PYQFdUxWqVqbwRpjCzp1Q,2628
150
150
  janito/tools/adapters/local/remove_file.py,sha256=dSAbP1NvuJT9NaReD_1TIKcJSp3psGW_d_pzWHk3GWE,2479
151
151
  janito/tools/adapters/local/replace_text_in_file.py,sha256=V4v3Z_BwxdwBb_zuIUnDQBrcNoCORFdaih4DFsx1NDU,11108
@@ -174,8 +174,8 @@ janito/tools/adapters/local/validate_file_syntax/ps1_validator.py,sha256=cP1jsMh
174
174
  janito/tools/adapters/local/validate_file_syntax/python_validator.py,sha256=lHzjlA4g9nCF9hXkGx3izWF0b0vJH3yV7Pu3buLyBbI,140
175
175
  janito/tools/adapters/local/validate_file_syntax/xml_validator.py,sha256=3CK7BEGO7gKI3bpeTtCFe0kJ5aKDZVh3Kh67bGIhcuc,294
176
176
  janito/tools/adapters/local/validate_file_syntax/yaml_validator.py,sha256=XLmOp7Ef6pLd97ICVnF3PxNKL1Yo5tLZsasvxPY478Y,165
177
- janito-2.1.0.dist-info/METADATA,sha256=9CnyvyK4lWbuVX1ZyQtWO-qnLkxx410Fq9CwhL6zA5M,10494
178
- janito-2.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
179
- janito-2.1.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
180
- janito-2.1.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
181
- janito-2.1.0.dist-info/RECORD,,
177
+ janito-2.1.1.dist-info/METADATA,sha256=cgY0sY4_XDoOpgOXyFyYbNTU_OtjCWuT9hicnZCDKtA,10494
178
+ janito-2.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
179
+ janito-2.1.1.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
180
+ janito-2.1.1.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
181
+ janito-2.1.1.dist-info/RECORD,,
File without changes