indent 0.0.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 indent might be problematic. Click here for more details.
- exponent/__init__.py +1 -0
- exponent/cli.py +112 -0
- exponent/commands/cloud_commands.py +85 -0
- exponent/commands/common.py +434 -0
- exponent/commands/config_commands.py +581 -0
- exponent/commands/github_app_commands.py +211 -0
- exponent/commands/listen_commands.py +96 -0
- exponent/commands/run_commands.py +208 -0
- exponent/commands/settings.py +56 -0
- exponent/commands/shell_commands.py +2840 -0
- exponent/commands/theme.py +246 -0
- exponent/commands/types.py +111 -0
- exponent/commands/upgrade.py +29 -0
- exponent/commands/utils.py +236 -0
- exponent/core/config.py +180 -0
- exponent/core/graphql/__init__.py +0 -0
- exponent/core/graphql/client.py +59 -0
- exponent/core/graphql/cloud_config_queries.py +77 -0
- exponent/core/graphql/get_chats_query.py +47 -0
- exponent/core/graphql/github_config_queries.py +56 -0
- exponent/core/graphql/mutations.py +75 -0
- exponent/core/graphql/queries.py +110 -0
- exponent/core/graphql/subscriptions.py +452 -0
- exponent/core/remote_execution/checkpoints.py +212 -0
- exponent/core/remote_execution/cli_rpc_types.py +214 -0
- exponent/core/remote_execution/client.py +545 -0
- exponent/core/remote_execution/code_execution.py +58 -0
- exponent/core/remote_execution/command_execution.py +105 -0
- exponent/core/remote_execution/error_info.py +45 -0
- exponent/core/remote_execution/exceptions.py +10 -0
- exponent/core/remote_execution/file_write.py +410 -0
- exponent/core/remote_execution/files.py +415 -0
- exponent/core/remote_execution/git.py +268 -0
- exponent/core/remote_execution/languages/python_execution.py +239 -0
- exponent/core/remote_execution/languages/shell_streaming.py +221 -0
- exponent/core/remote_execution/languages/types.py +20 -0
- exponent/core/remote_execution/session.py +128 -0
- exponent/core/remote_execution/system_context.py +54 -0
- exponent/core/remote_execution/tool_execution.py +289 -0
- exponent/core/remote_execution/truncation.py +284 -0
- exponent/core/remote_execution/types.py +670 -0
- exponent/core/remote_execution/utils.py +600 -0
- exponent/core/types/__init__.py +0 -0
- exponent/core/types/command_data.py +206 -0
- exponent/core/types/event_types.py +89 -0
- exponent/core/types/generated/__init__.py +0 -0
- exponent/core/types/generated/strategy_info.py +225 -0
- exponent/migration-docs/login.md +112 -0
- exponent/py.typed +4 -0
- exponent/utils/__init__.py +0 -0
- exponent/utils/colors.py +92 -0
- exponent/utils/version.py +289 -0
- indent-0.0.8.dist-info/METADATA +36 -0
- indent-0.0.8.dist-info/RECORD +56 -0
- indent-0.0.8.dist-info/WHEEL +4 -0
- indent-0.0.8.dist-info/entry_points.txt +2 -0
exponent/utils/colors.py
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import math
|
|
2
|
+
|
|
3
|
+
from colour import Color
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def relative_luminance(c: Color) -> float:
|
|
7
|
+
"""Compute sRGB-based luminance, per the standard (WCAG-like) formula."""
|
|
8
|
+
|
|
9
|
+
r, g, b = c.rgb
|
|
10
|
+
|
|
11
|
+
def to_linear(channel: float) -> float:
|
|
12
|
+
return (
|
|
13
|
+
channel / 12.92
|
|
14
|
+
if channel <= 0.03928
|
|
15
|
+
else ((channel + 0.055) / 1.055) ** 2.4
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
R, G, B = map(to_linear, (r, g, b))
|
|
19
|
+
|
|
20
|
+
return 0.2126 * R + 0.7152 * G + 0.0722 * B
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def contrast_ratio(c1: Color, c2: Color) -> float:
|
|
24
|
+
"""Compute ratio = (Llighter + 0.05) / (Ldarker + 0.05)."""
|
|
25
|
+
|
|
26
|
+
L1 = relative_luminance(c1)
|
|
27
|
+
L2 = relative_luminance(c2)
|
|
28
|
+
L_high, L_low = max(L1, L2), min(L1, L2)
|
|
29
|
+
|
|
30
|
+
return (L_high + 0.05) / (L_low + 0.05)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def adjust_color_for_contrast(
|
|
34
|
+
base: Color, target: Color, min_contrast: float = 4.5, step: float = 0.005
|
|
35
|
+
) -> Color:
|
|
36
|
+
"""
|
|
37
|
+
Increments either upward or downward in HSL 'l'
|
|
38
|
+
(depending on whether target is lighter or darker than base)
|
|
39
|
+
until the desired contrast ratio is reached or we hit the boundary (0 or 1).
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
# Work on a copy so we don't mutate the original
|
|
43
|
+
new_color = Color(target.hex)
|
|
44
|
+
|
|
45
|
+
L_base = relative_luminance(base)
|
|
46
|
+
L_target = relative_luminance(new_color)
|
|
47
|
+
|
|
48
|
+
# Check which color is darker:
|
|
49
|
+
# if the target is darker, we'll push it darker; if it's lighter, we push it lighter.
|
|
50
|
+
h, s, l = new_color.hsl # noqa: E741
|
|
51
|
+
|
|
52
|
+
if L_target < L_base:
|
|
53
|
+
# target color is darker => keep making it darker
|
|
54
|
+
while l >= 0.0:
|
|
55
|
+
if contrast_ratio(base, new_color) >= min_contrast:
|
|
56
|
+
return new_color
|
|
57
|
+
l -= step # noqa: E741
|
|
58
|
+
new_color.hsl = (h, s, max(l, 0.0))
|
|
59
|
+
else:
|
|
60
|
+
# target color is lighter => keep making it lighter
|
|
61
|
+
while l <= 1.0:
|
|
62
|
+
if contrast_ratio(base, new_color) >= min_contrast:
|
|
63
|
+
return new_color
|
|
64
|
+
l += step # noqa: E741
|
|
65
|
+
new_color.hsl = (h, s, min(l, 1.0))
|
|
66
|
+
|
|
67
|
+
# If we exhaust the channel range, just return whatever we ended with
|
|
68
|
+
return new_color
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def blend_colors_srgb(c1: Color, c2: Color, alpha: float) -> Color:
|
|
72
|
+
"""
|
|
73
|
+
Blend c1 and c2 in sRGB space using alpha in [0..1],
|
|
74
|
+
returning a new Color object.
|
|
75
|
+
E.g. alpha=0.0 => c1, alpha=1.0 => c2.
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
# Interpolate each channel separately
|
|
79
|
+
r = (1 - alpha) * c1.red + alpha * c2.red
|
|
80
|
+
g = (1 - alpha) * c1.green + alpha * c2.green
|
|
81
|
+
b = (1 - alpha) * c1.blue + alpha * c2.blue
|
|
82
|
+
|
|
83
|
+
# Return a new Color with the blended channels
|
|
84
|
+
return Color(rgb=(r, g, b))
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def color_distance(c1: Color, c2: Color) -> float:
|
|
88
|
+
return math.sqrt(
|
|
89
|
+
math.pow(c1.red - c2.red, 2)
|
|
90
|
+
+ math.pow(c1.green - c2.green, 2)
|
|
91
|
+
+ math.pow(c1.blue - c2.blue, 2)
|
|
92
|
+
)
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import os
|
|
3
|
+
import platform
|
|
4
|
+
import subprocess
|
|
5
|
+
import sys
|
|
6
|
+
import threading
|
|
7
|
+
from importlib.metadata import Distribution, PackageNotFoundError
|
|
8
|
+
from json import JSONDecodeError
|
|
9
|
+
from typing import Any, Literal, cast
|
|
10
|
+
|
|
11
|
+
import click
|
|
12
|
+
from httpx import Client, HTTPError
|
|
13
|
+
from packaging.version import Version
|
|
14
|
+
|
|
15
|
+
from exponent import __version__ # Import the new version constant
|
|
16
|
+
from exponent.core.config import Settings, is_editable_install
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def get_python_path() -> str:
|
|
20
|
+
"""Get the path to the Python interpreter."""
|
|
21
|
+
try:
|
|
22
|
+
return (
|
|
23
|
+
subprocess.check_output(["which", "python"])
|
|
24
|
+
.decode(errors="replace")
|
|
25
|
+
.strip()
|
|
26
|
+
)
|
|
27
|
+
except Exception:
|
|
28
|
+
return "unknown"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def get_sys_executable() -> str:
|
|
32
|
+
"""Get the path to the Python interpreter."""
|
|
33
|
+
return str(sys.executable)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def get_installed_version() -> str | Literal["unknown"]:
|
|
37
|
+
"""Get the running version of exponent-run. Note this may be different from
|
|
38
|
+
importlib version, if a new version is installed but we're running the old version."""
|
|
39
|
+
return __version__
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def get_installed_metadata() -> Any | Literal["unknown"]:
|
|
43
|
+
"""Get the installed metadata of exponent-run.
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
The installed metadata of exponent-run if it can be determined, otherwise "unknown"
|
|
47
|
+
"""
|
|
48
|
+
try:
|
|
49
|
+
return Distribution.from_name("indent").metadata
|
|
50
|
+
except PackageNotFoundError as e:
|
|
51
|
+
click.echo(f"Error reading metadata: {e}", err=True)
|
|
52
|
+
return "unknown"
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def get_installer() -> str | Literal["unknown"]:
|
|
56
|
+
"""Get the installer of exponent-run.
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
The installer of exponent-run if it can be determined, otherwise "unknown"
|
|
60
|
+
"""
|
|
61
|
+
try:
|
|
62
|
+
dist = Distribution.from_name("indent")
|
|
63
|
+
# Try to read the INSTALLER file from the distribution
|
|
64
|
+
installer_files = dist.read_text("INSTALLER")
|
|
65
|
+
if installer_files:
|
|
66
|
+
return installer_files.strip()
|
|
67
|
+
return "unknown"
|
|
68
|
+
except Exception: # noqa: BLE001
|
|
69
|
+
return "unknown"
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def get_latest_pypi_exponent_version() -> str | None:
|
|
73
|
+
"""Get the latest version of Exponent available on PyPI.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
The newest version of Exponent available on PyPI, or None if an error occurred.
|
|
77
|
+
"""
|
|
78
|
+
try:
|
|
79
|
+
return cast(
|
|
80
|
+
str,
|
|
81
|
+
(
|
|
82
|
+
Client()
|
|
83
|
+
.get("https://pypi.org/pypi/indent/json")
|
|
84
|
+
.json()["info"]["version"]
|
|
85
|
+
),
|
|
86
|
+
)
|
|
87
|
+
except (HTTPError, JSONDecodeError, KeyError):
|
|
88
|
+
click.secho(
|
|
89
|
+
"An unexpected error occurred communicating with PyPi, please check your network and try again.",
|
|
90
|
+
fg="red",
|
|
91
|
+
)
|
|
92
|
+
return None
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def check_exponent_version() -> tuple[str, str] | None:
|
|
96
|
+
"""Check if there is a newer version of Exponent available on PyPI .
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
None
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
if os.getenv("EXPONENT_TEST_AUTO_UPGRADE"):
|
|
103
|
+
return "1.0.0", "1.0.1"
|
|
104
|
+
installed_version = get_installed_version()
|
|
105
|
+
if installed_version == "unknown":
|
|
106
|
+
click.secho("Unable to determine current Exponent version.", fg="yellow")
|
|
107
|
+
return None
|
|
108
|
+
|
|
109
|
+
if (latest_version := get_latest_pypi_exponent_version()) and Version(
|
|
110
|
+
latest_version
|
|
111
|
+
) > Version(installed_version):
|
|
112
|
+
return installed_version, latest_version
|
|
113
|
+
|
|
114
|
+
return None
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _get_upgrade_command(version: str) -> list[str]:
|
|
118
|
+
"""Get the install command for exponent."""
|
|
119
|
+
|
|
120
|
+
return [
|
|
121
|
+
sys.executable,
|
|
122
|
+
"-m",
|
|
123
|
+
"pip",
|
|
124
|
+
"install",
|
|
125
|
+
"--upgrade",
|
|
126
|
+
f"indent=={version}",
|
|
127
|
+
]
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def _get_upgrade_command_str(version: str) -> str:
|
|
131
|
+
"""Get the install command for exponent."""
|
|
132
|
+
|
|
133
|
+
return f'{sys.executable} -m pip install --upgrade "indent=={version}"'
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def _new_version_str(current_version: str, new_version: str) -> str:
|
|
137
|
+
return (
|
|
138
|
+
f"\n{click.style('A new Exponent version is available:', fg='cyan')} {new_version} (current: {current_version})\n"
|
|
139
|
+
f"See {click.style('https://docs.exponent.run/installation', underline=True)} for details.\n"
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def _windows_new_version_str(current_version: str, new_version: str) -> str:
|
|
144
|
+
return f"{_new_version_str(current_version, new_version)}\n{click.style('Run this command to upgrade:', fg='cyan')}\n{click.style(_get_upgrade_command_str(new_version), fg='yellow')}\n"
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def _ask_continue_without_upgrading() -> None:
|
|
148
|
+
if click.confirm("Continue without upgrading?", default=False):
|
|
149
|
+
click.secho("Using outdated version.", fg="red")
|
|
150
|
+
else:
|
|
151
|
+
sys.exit(1)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def upgrade_exponent(
|
|
155
|
+
*,
|
|
156
|
+
current_version: str,
|
|
157
|
+
new_version: str,
|
|
158
|
+
force: bool,
|
|
159
|
+
) -> None:
|
|
160
|
+
"""Upgrade Exponent to the passed in version.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
current_version: The current version of Exponent.
|
|
164
|
+
new_version: The new version of Exponent.
|
|
165
|
+
force: Whether to force the upgrade without prompting for confirmation.
|
|
166
|
+
|
|
167
|
+
Returns:
|
|
168
|
+
None
|
|
169
|
+
"""
|
|
170
|
+
new_version_str = _new_version_str(current_version, new_version)
|
|
171
|
+
upgrade_command = _get_upgrade_command(new_version)
|
|
172
|
+
upgrade_command_str = _get_upgrade_command_str(new_version)
|
|
173
|
+
|
|
174
|
+
if platform.system() == "Windows":
|
|
175
|
+
click.echo(_windows_new_version_str(current_version, new_version))
|
|
176
|
+
return
|
|
177
|
+
|
|
178
|
+
if not force:
|
|
179
|
+
click.echo(
|
|
180
|
+
f"{new_version_str}\n{click.style('Upgrade command:', fg='cyan')}\n{upgrade_command_str}\n",
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
if not click.confirm("Upgrade now?", default=True):
|
|
184
|
+
return
|
|
185
|
+
else:
|
|
186
|
+
click.echo(f"Current version: {current_version}")
|
|
187
|
+
click.echo(f"New version available: {new_version}")
|
|
188
|
+
|
|
189
|
+
click.secho("Upgrading...", bold=True, fg="yellow")
|
|
190
|
+
result = subprocess.run(
|
|
191
|
+
upgrade_command, capture_output=True, text=True, check=False
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
click.echo(result.stdout)
|
|
195
|
+
click.echo(result.stderr)
|
|
196
|
+
|
|
197
|
+
if result.returncode != 0:
|
|
198
|
+
click.secho(
|
|
199
|
+
"\nFailed to upgrade Exponent. See https://docs.exponent.run/installation for help, or reach out to team@exponent.run.",
|
|
200
|
+
fg="red",
|
|
201
|
+
)
|
|
202
|
+
sys.exit(2)
|
|
203
|
+
|
|
204
|
+
click.secho(f"Successfully upgraded Exponent to version {new_version}!", fg="green")
|
|
205
|
+
|
|
206
|
+
click.echo("Re-run exponent to use the latest version.")
|
|
207
|
+
sys.exit(1)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def _upgrade_thread_worker(
|
|
211
|
+
upgrade_command: list[str],
|
|
212
|
+
current_version: str,
|
|
213
|
+
new_version: str,
|
|
214
|
+
settings: Settings,
|
|
215
|
+
) -> None:
|
|
216
|
+
"""Execute the upgrade command in a background thread and log completion status.
|
|
217
|
+
|
|
218
|
+
Args:
|
|
219
|
+
upgrade_command: The upgrade command to execute
|
|
220
|
+
current_version: The current version of Exponent
|
|
221
|
+
new_version: The target version to upgrade to
|
|
222
|
+
"""
|
|
223
|
+
from exponent.core.remote_execution.session import send_exception_log
|
|
224
|
+
|
|
225
|
+
try:
|
|
226
|
+
result = subprocess.run(
|
|
227
|
+
upgrade_command,
|
|
228
|
+
capture_output=True,
|
|
229
|
+
text=True,
|
|
230
|
+
check=True,
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
if result.returncode != 0:
|
|
234
|
+
raise Exception(
|
|
235
|
+
f"Background upgrade from {current_version} to {new_version} failed with code {result.returncode}\nstdout: {result.stdout}\nstderr: {result.stderr}"
|
|
236
|
+
)
|
|
237
|
+
except Exception as e:
|
|
238
|
+
asyncio.run(send_exception_log(e, session=None, settings=settings))
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def upgrade_exponent_in_background(
|
|
242
|
+
current_version: str,
|
|
243
|
+
new_version: str,
|
|
244
|
+
settings: Settings,
|
|
245
|
+
) -> None:
|
|
246
|
+
"""Upgrade Exponent to the passed in version in a background thread."""
|
|
247
|
+
|
|
248
|
+
if not settings.options.auto_upgrade:
|
|
249
|
+
click.secho(
|
|
250
|
+
"A new version of Exponent is available, but automatic upgrades are disabled. Please upgrade manually using `exponent upgrade`.\n",
|
|
251
|
+
fg="yellow",
|
|
252
|
+
)
|
|
253
|
+
return
|
|
254
|
+
|
|
255
|
+
if platform.system() == "Windows":
|
|
256
|
+
click.echo(
|
|
257
|
+
_windows_new_version_str(current_version, new_version),
|
|
258
|
+
)
|
|
259
|
+
_ask_continue_without_upgrading()
|
|
260
|
+
return
|
|
261
|
+
|
|
262
|
+
click.secho(
|
|
263
|
+
f"\nUpgrading Exponent from {current_version} to {new_version} (this will take effect next time)\n",
|
|
264
|
+
fg="cyan",
|
|
265
|
+
bold=True,
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
# Start a background thread for the upgrade
|
|
269
|
+
upgrade_thread = threading.Thread(
|
|
270
|
+
target=_upgrade_thread_worker,
|
|
271
|
+
args=(
|
|
272
|
+
_get_upgrade_command(new_version),
|
|
273
|
+
current_version,
|
|
274
|
+
new_version,
|
|
275
|
+
settings,
|
|
276
|
+
),
|
|
277
|
+
daemon=True, # Make thread a daemon so it doesn't prevent program exit
|
|
278
|
+
)
|
|
279
|
+
upgrade_thread.start()
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
def check_exponent_version_and_upgrade(settings: Settings) -> None:
|
|
283
|
+
if not is_editable_install() and (result := check_exponent_version()):
|
|
284
|
+
installed_version, latest_version = result
|
|
285
|
+
upgrade_exponent_in_background(
|
|
286
|
+
current_version=installed_version,
|
|
287
|
+
new_version=latest_version,
|
|
288
|
+
settings=settings,
|
|
289
|
+
)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: indent
|
|
3
|
+
Version: 0.0.8
|
|
4
|
+
Summary: Indent is an AI Pair Programmer
|
|
5
|
+
Author-email: Sashank Thupukari <sashank@exponent.run>
|
|
6
|
+
Requires-Python: <3.13,>=3.10
|
|
7
|
+
Requires-Dist: anyio<5,>=4.6.0
|
|
8
|
+
Requires-Dist: async-timeout<5,>=4.0.3; python_version < '3.11'
|
|
9
|
+
Requires-Dist: beautifulsoup4[chardet]<5,>=4.13.4
|
|
10
|
+
Requires-Dist: certifi<2025,>=2024.8.30
|
|
11
|
+
Requires-Dist: click<9,>=8.1.7
|
|
12
|
+
Requires-Dist: colour<0.2,>=0.1.5
|
|
13
|
+
Requires-Dist: diff-match-patch<20230431,>=20230430
|
|
14
|
+
Requires-Dist: eval-type-backport<0.3,>=0.2.0
|
|
15
|
+
Requires-Dist: gevent==24.2.1
|
|
16
|
+
Requires-Dist: git-python>=1.0.3
|
|
17
|
+
Requires-Dist: gitignore-parser<0.2,>=0.1.11
|
|
18
|
+
Requires-Dist: gql[httpx,websockets]<4,>=3.5.0
|
|
19
|
+
Requires-Dist: httpx<0.28,>=0.27.0
|
|
20
|
+
Requires-Dist: ipykernel<7,>=6.29.4
|
|
21
|
+
Requires-Dist: jupyter-client<9,>=8.6.1
|
|
22
|
+
Requires-Dist: msgspec>=0.19.0
|
|
23
|
+
Requires-Dist: packaging~=24.1
|
|
24
|
+
Requires-Dist: pip<26,>=25.0.1
|
|
25
|
+
Requires-Dist: prompt-toolkit<4,>=3.0.36
|
|
26
|
+
Requires-Dist: pydantic-settings<3,>=2.2.1
|
|
27
|
+
Requires-Dist: pydantic[email]<3,>=2.6.4
|
|
28
|
+
Requires-Dist: pygit2<2,>=1.15.0
|
|
29
|
+
Requires-Dist: python-ripgrep==0.0.8
|
|
30
|
+
Requires-Dist: pyyaml>=6.0.2
|
|
31
|
+
Requires-Dist: questionary<3,>=2.0.1
|
|
32
|
+
Requires-Dist: rapidfuzz<4,>=3.9.0
|
|
33
|
+
Requires-Dist: rich<14,>=13.7.1
|
|
34
|
+
Requires-Dist: sentry-sdk<3,>=2.1.1
|
|
35
|
+
Requires-Dist: toml<0.11,>=0.10.2
|
|
36
|
+
Requires-Dist: websockets~=11.0
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
exponent/__init__.py,sha256=JPfGr3EVn4l866iqvmWsgCj8Ri_AYo-pmJSR6IzXoBU,58
|
|
2
|
+
exponent/cli.py,sha256=9FPB5bqqGn7qVA_q2XZL6B2kRngVQoPdyvUvC5BH1_0,3496
|
|
3
|
+
exponent/py.typed,sha256=9XZl5avs8yHp89XP_1Fjtbeg_2rjYorCC9I0k_j-h2c,334
|
|
4
|
+
exponent/commands/cloud_commands.py,sha256=4DgS7PjCtCFB5uNN-szzAzOj16UU1D9b9_qS7DskoLE,2026
|
|
5
|
+
exponent/commands/common.py,sha256=HUzc9yl5L6GZEF5DDsF3IeArwPKrghxmK43vxtkxgGs,13679
|
|
6
|
+
exponent/commands/config_commands.py,sha256=lPwi2iueRfrBgCHIFRxAtYZCXjJ65zlwe8wSoAUoJQ8,15979
|
|
7
|
+
exponent/commands/github_app_commands.py,sha256=ijMGZisa9ElTLIpRYL-XqSCPOsKJ5W903Xx7T2msYHo,6353
|
|
8
|
+
exponent/commands/listen_commands.py,sha256=Zh_3HWZ7u0m9T6BIqocMUZzSvg-tJcMuvFYDM1yoAE4,3201
|
|
9
|
+
exponent/commands/run_commands.py,sha256=jxZp4F-RNTZbhD6-tIcyxAUDbpUSfaTX-X1Q7hyC_Q0,5857
|
|
10
|
+
exponent/commands/settings.py,sha256=UwwwoCgCY5hzAFD9slOBbA9Gr1hNfoyJ2blsFDC6V8w,1559
|
|
11
|
+
exponent/commands/shell_commands.py,sha256=bh6Ni4Lu5KsrWBqpV_GFrPJKta6F7RrgHNqRUqvsEVk,93892
|
|
12
|
+
exponent/commands/theme.py,sha256=XoX9lYDf8YyoU1HoRdctDHjK5MrMRUcBALBLcHDVPc8,8111
|
|
13
|
+
exponent/commands/types.py,sha256=iDJL3hdwhO1PrhsJTJBioNYSKo0CWV8Nv-ONcDaWIRs,3670
|
|
14
|
+
exponent/commands/upgrade.py,sha256=SpCdgEsBesPmXB5XgRJsIqonj73dfuuGVblo_0C2pWE,809
|
|
15
|
+
exponent/commands/utils.py,sha256=gmWUPHZtAfuSb3zdrAEkmHVhQYmHghqhvJUFBunn2-4,7572
|
|
16
|
+
exponent/core/config.py,sha256=TNFLUgLnfSocRMVSav_7E4VcaNHXZ_3Mg5Lp1smP46U,5731
|
|
17
|
+
exponent/core/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
exponent/core/graphql/client.py,sha256=KRveVt4lsrSdF9PnhhlQeqx74FQ9-iN28WQp0WKnQ30,1921
|
|
19
|
+
exponent/core/graphql/cloud_config_queries.py,sha256=Xy8SRP-sfWFcaq33hF-Ni1KwZDU4AdkkGbntsOxYytA,1968
|
|
20
|
+
exponent/core/graphql/get_chats_query.py,sha256=9-2N1VfapXUZB3IFIKw5U_gKdmfyviJp5JSUntB_Yyk,1177
|
|
21
|
+
exponent/core/graphql/github_config_queries.py,sha256=zKRDxF38q73apQcVaEAA_A20FVr3U0ADc5-8Y6Ns5Dw,1260
|
|
22
|
+
exponent/core/graphql/mutations.py,sha256=WRwgJzMTETvry1yc9-EBlIRWkePjHIskBAm_6tEiRaU,1352
|
|
23
|
+
exponent/core/graphql/queries.py,sha256=TXXHLGb7QpeICaofowVYsjyHDfqjCoQ3omLbesuw06s,2612
|
|
24
|
+
exponent/core/graphql/subscriptions.py,sha256=gg42wG5HqEuNMJU7OUHruNCAGtM6FKPLRD7KfjcKjC4,9995
|
|
25
|
+
exponent/core/remote_execution/checkpoints.py,sha256=3QGYMLa8vT7XmxMYTRcGrW8kNGHwRC0AkUfULribJWg,6354
|
|
26
|
+
exponent/core/remote_execution/cli_rpc_types.py,sha256=zzV_PD9Oy3p4J4Ip1v0Mpy2BnJTFKI-Q2WT062tVdlY,4557
|
|
27
|
+
exponent/core/remote_execution/client.py,sha256=3QbSAsukuVHCwmGfkoZBaBwgy4DuRZQs7LGAJtmT068,21010
|
|
28
|
+
exponent/core/remote_execution/code_execution.py,sha256=jYPB_7dJzS9BTPLX9fKQpsFPatwjbXuaFFSxT9tDTfI,2388
|
|
29
|
+
exponent/core/remote_execution/command_execution.py,sha256=HC9NXJg1R2sq1-Co1_paCrYnGn06rb_kTh5APG_B39Y,3672
|
|
30
|
+
exponent/core/remote_execution/error_info.py,sha256=Rd7OA3ps06qYejPVcOaMBB9AtftP3wqQoOfiILFASnc,1378
|
|
31
|
+
exponent/core/remote_execution/exceptions.py,sha256=eT57lBnBhvh-KJ5lsKWcfgGA5-WisAxhjZx-Z6OupZY,135
|
|
32
|
+
exponent/core/remote_execution/file_write.py,sha256=j9X4QfCBuZK6VIMfeu53WTN90G4w0AtN4U9GcoCJvJk,12531
|
|
33
|
+
exponent/core/remote_execution/files.py,sha256=9zr2epIatoM0I2uvfXa9y1bxqUu4z5ulHoibFFNSbP0,11364
|
|
34
|
+
exponent/core/remote_execution/git.py,sha256=Yo4mhkl6LYzGhVco91j_E8WOUey5KL9437rk43VCCA8,7826
|
|
35
|
+
exponent/core/remote_execution/session.py,sha256=cSJcCG1o74mBE6lZS_9VFmhyZdW6BeIOsbq4IVWH0t4,3863
|
|
36
|
+
exponent/core/remote_execution/system_context.py,sha256=0FkbsSxEVjdjTF0tQpOkYK_VaVM126C3_K8QP0YXxOs,1510
|
|
37
|
+
exponent/core/remote_execution/tool_execution.py,sha256=6rKRi_SqXB2vZUBMOKXLrxei3Ht2nNhomlSYUtOQdG0,9336
|
|
38
|
+
exponent/core/remote_execution/truncation.py,sha256=rFQDfT7qf_u6lvhEADWSpoRe_GTPegXXqknk7OZp0uI,10093
|
|
39
|
+
exponent/core/remote_execution/types.py,sha256=G-5EU-NtIj_zZbV305YMDZEcSacGK7QfzEdCYSHAGmA,17206
|
|
40
|
+
exponent/core/remote_execution/utils.py,sha256=Hw2zGMq0NKVwkVzNOVekAvpM33rfIz2P36mEcJr43Ag,20688
|
|
41
|
+
exponent/core/remote_execution/languages/python_execution.py,sha256=GcQU5PiAOUD9tUZDrSObgM3L7FjXMdzr4FQg6ts2XjY,7780
|
|
42
|
+
exponent/core/remote_execution/languages/shell_streaming.py,sha256=eSeHcK_unGpVRRdfgfwhml_tSlCo0VCeUEQY4zuMbDw,7372
|
|
43
|
+
exponent/core/remote_execution/languages/types.py,sha256=f7FjSRNRSga-ZaE3LddDhxCirUVjlSYMEdoskG6Pta4,314
|
|
44
|
+
exponent/core/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
+
exponent/core/types/command_data.py,sha256=_HqQsnamRZeVoVaTpeO3ecVUzNBdG62WXlFy6Q7rtUM,5294
|
|
46
|
+
exponent/core/types/event_types.py,sha256=sxI9ac03G-6y1_p7_RhiaEzxFHwGxvBBNRWHG8uLiLI,2480
|
|
47
|
+
exponent/core/types/generated/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
|
+
exponent/core/types/generated/strategy_info.py,sha256=T9fGuH9gS4GaChgRfIjDYAs68bk4zm9OEg2mMcT-Wyw,7155
|
|
49
|
+
exponent/migration-docs/login.md,sha256=KIeXy3m2nzSUgw-4PW1XzXfHael1D4Zu93CplLMb3hI,4252
|
|
50
|
+
exponent/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
+
exponent/utils/colors.py,sha256=HBkqe_ZmhJ9YiL2Fpulqek4KvLS5mwBTY4LQSM5N8SM,2762
|
|
52
|
+
exponent/utils/version.py,sha256=Q4txP7Rg_KO0u0tUpx8O0DoOt32wrX7ctNeDXVKaOfA,8835
|
|
53
|
+
indent-0.0.8.dist-info/METADATA,sha256=90lhuY3XueNdgMxM0F14wMAjG8equx9b3OaOMVUAgCs,1313
|
|
54
|
+
indent-0.0.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
55
|
+
indent-0.0.8.dist-info/entry_points.txt,sha256=q8q1t1sbl4NULGOR0OV5RmSG4KEjkpEQRU_RUXEGzcs,44
|
|
56
|
+
indent-0.0.8.dist-info/RECORD,,
|