axe-cli 1.7.3__py3-none-any.whl → 1.7.4__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.
- axe_cli/llm.py +35 -1
- axe_cli/skills/axe-cli-help/SKILL.md +3 -3
- axe_cli/tools/axe/auto_init.py +47 -40
- axe_cli/ui/shell/__init__.py +42 -4
- axe_cli/ui/shell/slash.py +6 -6
- axe_cli/ui/shell/visualize.py +16 -1
- {axe_cli-1.7.3.dist-info → axe_cli-1.7.4.dist-info}/METADATA +2 -2
- {axe_cli-1.7.3.dist-info → axe_cli-1.7.4.dist-info}/RECORD +10 -10
- {axe_cli-1.7.3.dist-info → axe_cli-1.7.4.dist-info}/WHEEL +0 -0
- {axe_cli-1.7.3.dist-info → axe_cli-1.7.4.dist-info}/entry_points.txt +0 -0
axe_cli/llm.py
CHANGED
|
@@ -22,6 +22,7 @@ type ProviderType = Literal[
|
|
|
22
22
|
"google_genai", # for backward-compatibility, equals to `gemini`
|
|
23
23
|
"gemini",
|
|
24
24
|
"vertexai",
|
|
25
|
+
"bodega", # Local MLX inference engine
|
|
25
26
|
"_echo",
|
|
26
27
|
"_scripted_echo",
|
|
27
28
|
"_chaos",
|
|
@@ -85,6 +86,14 @@ def augment_provider_with_env_vars(provider: LLMProvider, model: LLMModel) -> di
|
|
|
85
86
|
provider.base_url = base_url
|
|
86
87
|
if api_key := os.getenv("OPENAI_API_KEY"):
|
|
87
88
|
provider.api_key = SecretStr(api_key)
|
|
89
|
+
case "bodega":
|
|
90
|
+
# Bodega environment variable overrides
|
|
91
|
+
if base_url := os.getenv("BODEGA_BASE_URL"):
|
|
92
|
+
provider.base_url = base_url
|
|
93
|
+
applied["BODEGA_BASE_URL"] = base_url
|
|
94
|
+
if model_name := os.getenv("BODEGA_MODEL"):
|
|
95
|
+
model.model = model_name
|
|
96
|
+
applied["BODEGA_MODEL"] = model_name
|
|
88
97
|
case _:
|
|
89
98
|
pass
|
|
90
99
|
|
|
@@ -105,10 +114,14 @@ def create_llm(
|
|
|
105
114
|
thinking: bool | None = None,
|
|
106
115
|
session_id: str | None = None,
|
|
107
116
|
) -> LLM | None:
|
|
108
|
-
|
|
117
|
+
# Bodega has defaults for base_url and accepts "current" as model
|
|
118
|
+
if provider.type not in {"_echo", "_scripted_echo", "bodega"} and (
|
|
109
119
|
not provider.base_url or not model.model
|
|
110
120
|
):
|
|
111
121
|
return None
|
|
122
|
+
# For Bodega, only model is required (base_url has a default)
|
|
123
|
+
if provider.type == "bodega" and not model.model:
|
|
124
|
+
return None
|
|
112
125
|
|
|
113
126
|
resolved_api_key = provider.api_key.get_secret_value() if provider.api_key else ""
|
|
114
127
|
|
|
@@ -184,6 +197,27 @@ def create_llm(
|
|
|
184
197
|
api_key=resolved_api_key,
|
|
185
198
|
vertexai=True,
|
|
186
199
|
)
|
|
200
|
+
case "bodega":
|
|
201
|
+
from kosong.contrib.chat_provider.bodega import Bodega
|
|
202
|
+
|
|
203
|
+
# Default to localhost:44468 if no base_url provided
|
|
204
|
+
base_url = provider.base_url or "http://localhost:44468"
|
|
205
|
+
|
|
206
|
+
chat_provider = Bodega(
|
|
207
|
+
model=model.model,
|
|
208
|
+
base_url=base_url,
|
|
209
|
+
api_key=resolved_api_key if resolved_api_key else None,
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
# Apply generation kwargs from environment
|
|
213
|
+
gen_kwargs: Bodega.GenerationKwargs = {}
|
|
214
|
+
if temperature := os.getenv("BODEGA_TEMPERATURE"):
|
|
215
|
+
gen_kwargs["temperature"] = float(temperature)
|
|
216
|
+
if max_tokens := os.getenv("BODEGA_MAX_TOKENS"):
|
|
217
|
+
gen_kwargs["max_tokens"] = int(max_tokens)
|
|
218
|
+
|
|
219
|
+
if gen_kwargs:
|
|
220
|
+
chat_provider = chat_provider.with_generation_kwargs(**gen_kwargs)
|
|
187
221
|
case "_echo":
|
|
188
222
|
from kosong.chat_provider.echo import EchoChatProvider
|
|
189
223
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: axe-cli-help
|
|
3
|
-
description:
|
|
3
|
+
description: answer axe cli usage, configuration, and troubleshooting questions. Use when user asks about axe cli installation, setup, configuration, slash commands, keyboard shortcuts, MCP integration, providers, environment variables, how something works internally, or any questions about axe cli itself.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# axe cli help
|
|
7
7
|
|
|
8
|
-
Help users with
|
|
8
|
+
Help users with axe cli questions by consulting documentation and source code.
|
|
9
9
|
|
|
10
10
|
## Strategy
|
|
11
11
|
|
axe_cli/tools/axe/auto_init.py
CHANGED
|
@@ -142,47 +142,54 @@ def prompt_user_for_init(work_dir: Path) -> tuple[bool, str]:
|
|
|
142
142
|
"""
|
|
143
143
|
console.print()
|
|
144
144
|
console.print(Panel.fit(
|
|
145
|
-
"[bold cyan]
|
|
146
|
-
|
|
147
|
-
"
|
|
148
|
-
"
|
|
145
|
+
"[bold cyan]okay so, lets pre-warm your codebase![/bold cyan]\n\n"
|
|
146
|
+
"this builds the analysis stack once.\n"
|
|
147
|
+
"after completion, queries are instant and the daemon handles everything.\n\n"
|
|
148
|
+
"[dim]parsing structure. building call graphs. computing dependencies. encoding semantics.[/dim]\n\n"
|
|
149
|
+
"axe-dig gives llms [bold]lethal precision.[/bold]\n"
|
|
150
|
+
"natural language queries. [bold]exact context.[/bold] 95% fewer tokens.\n\n"
|
|
151
|
+
"takes two minutes for typical projects.",
|
|
149
152
|
border_style="cyan"
|
|
150
153
|
))
|
|
151
154
|
console.print()
|
|
155
|
+
console.print(f"[dim]this is the directory we gonna work with: {work_dir}[/dim]")
|
|
156
|
+
console.print()
|
|
152
157
|
|
|
153
158
|
# Check if user wants to initialize
|
|
154
159
|
if not Confirm.ask(
|
|
155
|
-
"[bold]
|
|
160
|
+
"[bold]would you like to initialize axe-dig for this project?[/bold]",
|
|
156
161
|
default=True
|
|
157
162
|
):
|
|
158
|
-
console.print("[dim]
|
|
163
|
+
console.print("[dim]ok hmm, skipping axe-dig initialization. you can restart axe-cli later to initialize.[/dim]")
|
|
159
164
|
return False, ""
|
|
160
165
|
|
|
161
166
|
console.print()
|
|
162
|
-
console.print("[bold]
|
|
163
|
-
console.print(" [cyan]1)[/cyan] [bold]
|
|
164
|
-
console.print(" •
|
|
165
|
-
console.print(" •
|
|
166
|
-
console.print(" •
|
|
167
|
-
console.print(" •
|
|
167
|
+
console.print("[bold]choose digging depth:[/bold]\n")
|
|
168
|
+
console.print(" [cyan]1)[/cyan] [bold]light-digging[/bold] (recommended)")
|
|
169
|
+
console.print(" • 90mb download")
|
|
170
|
+
console.print(" • 2gb ram during indexing")
|
|
171
|
+
console.print(" • fast. ~1 min for medium projects")
|
|
172
|
+
console.print(" • good precision for most codebases")
|
|
173
|
+
console.print(" • finds: 'jwt validation' → verify_token()")
|
|
168
174
|
console.print()
|
|
169
|
-
console.print(" [cyan]2)[/cyan] [bold]
|
|
170
|
-
console.print(" •
|
|
171
|
-
console.print(" •
|
|
172
|
-
console.print(" •
|
|
173
|
-
console.print(" •
|
|
175
|
+
console.print(" [cyan]2)[/cyan] [bold]heavy-digging[/bold] (maximum precision)")
|
|
176
|
+
console.print(" • 1.3gb download")
|
|
177
|
+
console.print(" • 10gb+ ram during indexing")
|
|
178
|
+
console.print(" • slower. 5-15 min for medium projects")
|
|
179
|
+
console.print(" • lethal semantic matching")
|
|
180
|
+
console.print(" • finds: 'connection pooling' → subtle patterns across files")
|
|
174
181
|
console.print()
|
|
175
182
|
|
|
176
183
|
choice = Prompt.ask(
|
|
177
|
-
"[bold]
|
|
184
|
+
"[bold]select depth[/bold]",
|
|
178
185
|
choices=["1", "2"],
|
|
179
186
|
default="1"
|
|
180
187
|
)
|
|
181
188
|
|
|
182
189
|
model = "minilm" if choice == "1" else "bge-large"
|
|
183
|
-
model_display = "
|
|
190
|
+
model_display = "light-digging (sentence-transformers/all-MiniLM-L6-v2)" if model == "minilm" else "heavy-digging (BAAI/bge-large-en-v1.5)"
|
|
184
191
|
|
|
185
|
-
console.print(f"\n[dim]
|
|
192
|
+
console.print(f"\n[dim]selected: {model_display}[/dim]")
|
|
186
193
|
return True, model
|
|
187
194
|
|
|
188
195
|
|
|
@@ -229,7 +236,7 @@ async def auto_initialize_codebase(work_dir: Path, model: str | None = None, int
|
|
|
229
236
|
|
|
230
237
|
console.print()
|
|
231
238
|
console.print(Panel.fit(
|
|
232
|
-
"[bold cyan]
|
|
239
|
+
"[bold cyan]okay lets do this!, grab a coffee—- axe is now understanding your codebase![/bold cyan]\n"
|
|
233
240
|
f"[dim]Model: {model_name}[/dim]",
|
|
234
241
|
border_style="cyan"
|
|
235
242
|
))
|
|
@@ -248,57 +255,57 @@ async def auto_initialize_codebase(work_dir: Path, model: str | None = None, int
|
|
|
248
255
|
) as progress:
|
|
249
256
|
|
|
250
257
|
# Step 1: Structural indexing
|
|
251
|
-
task1 = progress.add_task("[cyan]Building structural index...", total=100)
|
|
258
|
+
task1 = progress.add_task("[cyan]Building structural index and understanding the structure to see what's up...", total=100)
|
|
252
259
|
progress.update(task1, advance=10)
|
|
253
260
|
|
|
254
261
|
success, output = await run_chop_command(f"chop warm {work_dir}", work_dir)
|
|
255
262
|
|
|
256
263
|
if success:
|
|
257
|
-
progress.update(task1, advance=90, description="[green]✓
|
|
264
|
+
progress.update(task1, advance=90, description="[green]✓ structure indexed")
|
|
258
265
|
for line in output.split("\n"):
|
|
259
266
|
if "Indexed" in line and "files" in line:
|
|
260
267
|
console.print(f" [dim]{line}[/dim]")
|
|
261
268
|
else:
|
|
262
|
-
progress.update(task1, description="[red]✗
|
|
263
|
-
console.print(f" [red]
|
|
269
|
+
progress.update(task1, description="[red]✗structural indexing failed")
|
|
270
|
+
console.print(f" [red]{output[:200]}[/red]")
|
|
264
271
|
return
|
|
265
272
|
|
|
266
273
|
# Step 2: Semantic indexing
|
|
267
|
-
task2 = progress.add_task("[cyan]
|
|
274
|
+
task2 = progress.add_task("[cyan]building semantics...", total=100)
|
|
268
275
|
progress.update(task2, advance=10)
|
|
269
276
|
|
|
270
277
|
cmd = f"chop semantic index {work_dir} --model {model_name}"
|
|
271
|
-
success, output = await run_chop_command(cmd, work_dir, timeout=1800)
|
|
278
|
+
success, output = await run_chop_command(cmd, work_dir, timeout=1800)
|
|
272
279
|
|
|
273
280
|
if success:
|
|
274
|
-
progress.update(task2, advance=90, description="[green]✓
|
|
281
|
+
progress.update(task2, advance=90, description="[green]✓ ok, semantic index built")
|
|
275
282
|
for line in output.split("\n"):
|
|
276
283
|
if "Indexed" in line and "code units" in line:
|
|
277
284
|
console.print(f" [dim]{line}[/dim]")
|
|
278
285
|
else:
|
|
279
|
-
progress.update(task2, description="[yellow]⚠
|
|
280
|
-
console.print(f" [yellow]
|
|
286
|
+
progress.update(task2, description="[yellow]⚠ semantic indexing failed due to some reason, maybe try again?")
|
|
287
|
+
console.print(f" [yellow]{output[:200]}[/yellow]")
|
|
281
288
|
|
|
282
289
|
# Step 3: Start daemon
|
|
283
|
-
task3 = progress.add_task("[cyan]
|
|
290
|
+
task3 = progress.add_task("[cyan]starting daemon...", total=100)
|
|
284
291
|
progress.update(task3, advance=10)
|
|
285
292
|
|
|
286
293
|
success, output = await run_chop_command(f"chop daemon start --project {work_dir}", work_dir, timeout=30)
|
|
287
294
|
|
|
288
295
|
if success or "already running" in output.lower():
|
|
289
|
-
progress.update(task3, advance=90, description="[green]
|
|
296
|
+
progress.update(task3, advance=90, description="[green]daemon active")
|
|
290
297
|
else:
|
|
291
|
-
progress.update(task3, description="[yellow]⚠
|
|
292
|
-
console.print(f" [dim]
|
|
298
|
+
progress.update(task3, description="[yellow]⚠ umm, daemon skipped")
|
|
299
|
+
console.print(f" [dim]you can run 'chop daemon start --project {work_dir}' manually if needed[/dim]")
|
|
293
300
|
|
|
294
301
|
console.print()
|
|
295
302
|
console.print(Panel.fit(
|
|
296
|
-
"[bold green]
|
|
297
|
-
"[dim]
|
|
298
|
-
" • [cyan]
|
|
299
|
-
" • [cyan]
|
|
300
|
-
" • [cyan]
|
|
301
|
-
" • [cyan]
|
|
303
|
+
"[bold green]axe ready[/bold green]\n\n"
|
|
304
|
+
"[dim]tools available:[/dim]\n"
|
|
305
|
+
" • [cyan]codesearch[/cyan] - semantic search by behavior\n"
|
|
306
|
+
" • [cyan]codecontext[/cyan] - precise function context\n"
|
|
307
|
+
" • [cyan]codeimpact[/cyan] - reverse call graph\n"
|
|
308
|
+
" • [cyan]codestructure[/cyan] - function and class maps",
|
|
302
309
|
border_style="green"
|
|
303
310
|
))
|
|
304
311
|
console.print()
|
axe_cli/ui/shell/__init__.py
CHANGED
|
@@ -312,9 +312,47 @@ class Shell:
|
|
|
312
312
|
_AXE_PINK = "magenta"
|
|
313
313
|
_LOGO = f"""\
|
|
314
314
|
[{_AXE_PINK}]\
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
315
|
+
|
|
316
|
+
.--::. .::--.
|
|
317
|
+
=#%%%%##*+-: :=+*##%%%%#-
|
|
318
|
+
.*%##****###%%#+: -+#%%%##*****#%+
|
|
319
|
+
.*###+-----===+*#%* .#%%#*+===----=+#%*
|
|
320
|
+
*###=-----------=+: =- .+==-----------+#%+
|
|
321
|
+
-%##=---------------=%%+:---------------=#%:
|
|
322
|
+
###=---------------+#+=*#=---------------+%*
|
|
323
|
+
+*+---------------*#=---+#---------------=*+
|
|
324
|
+
.:--------------*#=-----++:=-------------. .
|
|
325
|
+
.:=+*###* *#++++==--------=#=-------*:-=-------===++** ###**+=:.
|
|
326
|
+
:=*#%%%#**++::+#+++++***+=--=:++--------=-.=--==+****+++*+.-++**#%%%#*=:
|
|
327
|
+
=*#%%#*+=-------=#=------=+*+=-.-=--------=: -+***+==-----*:-=----==+*#%%#*-
|
|
328
|
+
=%###+=-----------+#---------=+: -=------==. -*=---------+-.=---------=+*##%-
|
|
329
|
+
:###+-------------:=+----------- .::=----=--. -----------=: --------------+##.
|
|
330
|
+
*##*--------------.-+---------=.:= :=--=::+. =--------==. -=-------------+%+
|
|
331
|
+
:###=--------------..==-------=- := .==:.+- :=-==----=- -=-------------=##.
|
|
332
|
+
-%#*--------------=: .:------==. =- :- == .==----=--: .----------------*%:
|
|
333
|
+
-##+--------=++**+*=. .==--:-- =. :=. ----=++: :+**+++==---------*#:
|
|
334
|
+
:*#=:---+***++==--==-: .:-===-: .- -. :==+==-:.:-=====++***+=-----**.
|
|
335
|
+
. -++*++=----------=--::::::-: :=-:::---==----------=+**+== .
|
|
336
|
+
=*#*=------------===-:. .. .. .:--=--------------=*#+:
|
|
337
|
+
.**---=+**++==----===-:...:--:. . . .:-::...:-==------==+**+=-.+#=
|
|
338
|
+
-##=------=++++++==-:. .::::..: -: -: .....:::. ::-=========-----+#%*.
|
|
339
|
+
-%#=--------------=: .:::::--=: -- . =: -=-:::::. :--------------=###.
|
|
340
|
+
:##=--------------=..-=========: := .=- .=. -=======-==:-=-------------+###
|
|
341
|
+
*#*---------------.:==--------= .= .=-=- .= :=--------=+----------------*##+
|
|
342
|
+
-##+-------------=.=+----------- :..=---=- ...=---------=*=--------------+###.
|
|
343
|
+
+%#*=-----------=:=+----------=: -=-----==: -=---------=#=-------------*##%-
|
|
344
|
+
.+#%#*+=----------*--------=++-. -=--------=: .-===-------**----------=+#%##=.
|
|
345
|
+
.-+#%%#*+==----*+-====++++=--=.=---------+=:=::-=++==---=#=----==+*#%%#+:
|
|
346
|
+
:=+*####* .#*****++=---=-=.-+--------*---=----=++****%* :#####*+-.
|
|
347
|
+
..:: .:==------------:*=------**------------==-.. ::..
|
|
348
|
+
.++-------------=-=*-----+#---------------=+=
|
|
349
|
+
.##=---------------+#=-=*#=---------------#%*
|
|
350
|
+
=%*----------------+#*#*----------------*##:
|
|
351
|
+
.##+--------------=..*=.---------------+##+
|
|
352
|
+
:##*=---------=+*%* .##+=---------=*##*
|
|
353
|
+
:#%#+===++**#%#*-. :=####*+====+##%*.
|
|
354
|
+
.*%%%%%%%#*+-. :=+*#%%%%%%#=
|
|
355
|
+
:==--:. .:--===: \
|
|
318
356
|
[/{_AXE_PINK}]\
|
|
319
357
|
"""
|
|
320
358
|
|
|
@@ -332,7 +370,7 @@ class WelcomeInfoItem:
|
|
|
332
370
|
|
|
333
371
|
|
|
334
372
|
def _print_welcome_info(name: str, info_items: list[WelcomeInfoItem]) -> None:
|
|
335
|
-
head = Text.from_markup("
|
|
373
|
+
head = Text.from_markup("welcome to axe.")
|
|
336
374
|
help_text = Text.from_markup("[grey50]Send /help for help information.[/grey50]")
|
|
337
375
|
|
|
338
376
|
# Use Table for precise width control
|
axe_cli/ui/shell/slash.py
CHANGED
|
@@ -80,9 +80,9 @@ def help(app: Shell, args: str):
|
|
|
80
80
|
renderables.append(
|
|
81
81
|
BulletColumns(
|
|
82
82
|
Group(
|
|
83
|
-
Text.from_markup("[grey50]
|
|
84
|
-
Text.from_markup("[grey50]
|
|
85
|
-
Text.from_markup("[grey50]\u2015
|
|
83
|
+
Text.from_markup("[grey50]it's not who you are underneath, but what you do that defines you..[/grey50]"),
|
|
84
|
+
Text.from_markup("[grey50]so start doing. the help you need is right here.[/grey50]"),
|
|
85
|
+
Text.from_markup("[grey50]\u2015 Batman, [italic]The Dark Knight[/italic][/grey50]"),
|
|
86
86
|
),
|
|
87
87
|
bullet_style="grey50",
|
|
88
88
|
)
|
|
@@ -90,8 +90,8 @@ def help(app: Shell, args: str):
|
|
|
90
90
|
renderables.append(
|
|
91
91
|
BulletColumns(
|
|
92
92
|
Text(
|
|
93
|
-
"
|
|
94
|
-
"
|
|
93
|
+
"sure, axe is ready to help! "
|
|
94
|
+
"just send me messages and i will help you get things done!"
|
|
95
95
|
),
|
|
96
96
|
)
|
|
97
97
|
)
|
|
@@ -259,7 +259,7 @@ async def model(app: Shell, args: str):
|
|
|
259
259
|
@registry.command
|
|
260
260
|
@shell_mode_registry.command
|
|
261
261
|
def feedback(app: Shell, args: str):
|
|
262
|
-
"""Submit feedback to make
|
|
262
|
+
"""Submit feedback to make axe cli better"""
|
|
263
263
|
import webbrowser
|
|
264
264
|
|
|
265
265
|
ISSUE_URL = "https://github.com/SRSWTI/axe-code/issues"
|
axe_cli/ui/shell/visualize.py
CHANGED
|
@@ -16,6 +16,20 @@ from rich.padding import Padding
|
|
|
16
16
|
from rich.panel import Panel
|
|
17
17
|
from rich.spinner import Spinner
|
|
18
18
|
from rich.text import Text
|
|
19
|
+
import random
|
|
20
|
+
|
|
21
|
+
PROCESSING_MESSAGES = [
|
|
22
|
+
"Processing your request...",
|
|
23
|
+
"Warming up the gears...",
|
|
24
|
+
"Thinking deep thoughts...",
|
|
25
|
+
"Consulting the oracle...",
|
|
26
|
+
"Connecting to the neural net...",
|
|
27
|
+
"Loading context...",
|
|
28
|
+
"Crunching the numbers...",
|
|
29
|
+
"Igniting the synapses...",
|
|
30
|
+
"Traversing the latent space...",
|
|
31
|
+
"Waiting for the first spark...",
|
|
32
|
+
]
|
|
19
33
|
|
|
20
34
|
from axe_cli.tools import extract_key_argument
|
|
21
35
|
from axe_cli.ui.shell.console import console
|
|
@@ -564,7 +578,8 @@ class _LiveView:
|
|
|
564
578
|
|
|
565
579
|
if isinstance(msg, StepBegin):
|
|
566
580
|
self.cleanup(is_interrupt=False)
|
|
567
|
-
|
|
581
|
+
message = random.choice(PROCESSING_MESSAGES)
|
|
582
|
+
self._mooning_spinner = Spinner("moon", f" {message}")
|
|
568
583
|
self.refresh_soon()
|
|
569
584
|
return
|
|
570
585
|
|
|
@@ -25,7 +25,7 @@ axe_cli/cli/toad.py,sha256=6Kncs4axEpM85xbFqZgB2udqf4yLMI108rsWGjPrePQ,2221
|
|
|
25
25
|
axe_cli/config.py,sha256=RTGu0Artcz61tnQCxRrCzUgujGlU7-EZjOHZ0CUoB1s,9170
|
|
26
26
|
axe_cli/constant.py,sha256=seqfvVWoZFQF_K4MUyhp5xS9AfCG4fgqk1PNsQ7IFqU,166
|
|
27
27
|
axe_cli/exception.py,sha256=Y_edY-Kh-g-9-vblfcXOsiM13x3dy7DU7sh05xet4GU,602
|
|
28
|
-
axe_cli/llm.py,sha256=
|
|
28
|
+
axe_cli/llm.py,sha256=nq3DTLVgF7jhNOQCLPtvSI7BAYjg8f-SXqQzvVVgW1U,11394
|
|
29
29
|
axe_cli/metadata.py,sha256=83ZjJJjJ3uaPYAMBAhzCOXIkh9gH6fpwRNvf0XW7W-Q,3159
|
|
30
30
|
axe_cli/prompts/__init__.py,sha256=V9_bX3xUHgS4fy1wjuevRilXNeENbxizUxOn4wSDOFw,210
|
|
31
31
|
axe_cli/prompts/compact.md,sha256=JHU6GaPA36vFVFoQNmalWcx92MqpY3Ff3Gyn3Xh6Dgo,1858
|
|
@@ -37,7 +37,7 @@ axe_cli/skill/__init__.py,sha256=ig3v_43ElRkPxWHYvJm8vURn2sVV5lklQl9pVc2N8zI,909
|
|
|
37
37
|
axe_cli/skill/flow/__init__.py,sha256=w6kcpH-Uvsvehdfx41DxhZskJAIJoud65oKyXPyPwiA,2622
|
|
38
38
|
axe_cli/skill/flow/d2.py,sha256=vMnhQHzmtEmPpLcEpuKDeEunjuctw5hwHq1O-Ov0gsY,14315
|
|
39
39
|
axe_cli/skill/flow/mermaid.py,sha256=nmyOPfhA0uw6KPsEViMzzTB-XgA8jCsSB9Ay-XYaByA,8195
|
|
40
|
-
axe_cli/skills/axe-cli-help/SKILL.md,sha256=
|
|
40
|
+
axe_cli/skills/axe-cli-help/SKILL.md,sha256=A9NvPAwczhMk0TGC1aeUrB3isMKAbo8sA3ezXWE6BZU,1746
|
|
41
41
|
axe_cli/skills/skill-creator/SKILL.md,sha256=3-I6klhUIwm2W_YQApCjippKx34hd4pgpZzLjzX1Zvo,18091
|
|
42
42
|
axe_cli/soul/__init__.py,sha256=qKiTLxsz6S-AvUYfnYkocFUaFO1Wcaplk7vj-ok1vIg,6964
|
|
43
43
|
axe_cli/soul/agent.py,sha256=NqpuduXKyC48GIctm-E5NuGlld76EvBgO4WxIV_JAIk,9455
|
|
@@ -53,7 +53,7 @@ axe_cli/token_counter.py,sha256=j_XDHMSScLoMFmVFQeSeyLRew2hFEFW8BAtw2Z3IT4E,9994
|
|
|
53
53
|
axe_cli/tools/AGENTS.md,sha256=6sssYW5lxqrUL00FsiuV44MmLalPbbzg1vuwdfwJivw,211
|
|
54
54
|
axe_cli/tools/__init__.py,sha256=ptBMSp7toE5HFABENBV33E3Tgo5KjmXrsbeMaVaBmsA,3805
|
|
55
55
|
axe_cli/tools/axe/__init__.py,sha256=VWsIvoZ-wXcx3vfVr9XERp8_IfgkGVPMsNM2X0d6uWc,2977
|
|
56
|
-
axe_cli/tools/axe/auto_init.py,sha256=
|
|
56
|
+
axe_cli/tools/axe/auto_init.py,sha256=jwBfsF-0bWyDFki-pHZkQHW__bsZSMwRnF10agqGr_s,12254
|
|
57
57
|
axe_cli/tools/axe/context.py,sha256=wOG4suLx_L-zB-oaTEJs1RqGe5CaIIdJFxMrQq8f9Og,4956
|
|
58
58
|
axe_cli/tools/axe/impact.py,sha256=EbFy81NzLsoT_ErU9_oh26qZu79sMUzZbEepNHGRuCU,4860
|
|
59
59
|
axe_cli/tools/axe/index.py,sha256=_CHTB1OCoaaBFmpr4xBLn9X4sjhhaRINmZJR5Eacvfg,4759
|
|
@@ -101,7 +101,7 @@ axe_cli/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
101
101
|
axe_cli/ui/acp/__init__.py,sha256=HzssqvXjFmvh4Ne9FD_VB0-X7OeCfLBk7-NOFBJGFNY,2681
|
|
102
102
|
axe_cli/ui/print/__init__.py,sha256=VHstYvqDMqQxbev8lMB6vhDVAXoTsji5p9kW15W0Dg4,4732
|
|
103
103
|
axe_cli/ui/print/visualize.py,sha256=9EPI4RwSCaIrZ6tfGgr4QZaXbtbgZXtC6PQG9xkbaGM,5664
|
|
104
|
-
axe_cli/ui/shell/__init__.py,sha256=
|
|
104
|
+
axe_cli/ui/shell/__init__.py,sha256=ARy_MF6ZBqSAJ82FIBKf0_2wrdqVSoPv8Nhbmm0rr2M,18778
|
|
105
105
|
axe_cli/ui/shell/console.py,sha256=GIKqLBHDHc-DRklGLB92Dem1AhP6CaqCNaon4_fj29g,878
|
|
106
106
|
axe_cli/ui/shell/debug.py,sha256=RLLLBujvbfw5WcX4m5maSPDfSjDND81U8ccQhXUnWGA,5629
|
|
107
107
|
axe_cli/ui/shell/keyboard.py,sha256=UPNEHdrTsKTPMpakcvgghYvyUopSXIXAEdy7LQgwHSU,7549
|
|
@@ -109,10 +109,10 @@ axe_cli/ui/shell/oauth.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
109
109
|
axe_cli/ui/shell/prompt.py,sha256=LGqKknSje-hoyt53PAwFD3OprQ3n4dKRpmUk-mNHoqQ,32938
|
|
110
110
|
axe_cli/ui/shell/replay.py,sha256=2NUmQpRtMxseW5wqp3uozBn6OfUc8nHh1OrHQMaaekQ,5625
|
|
111
111
|
axe_cli/ui/shell/setup.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
112
|
-
axe_cli/ui/shell/slash.py,sha256=
|
|
112
|
+
axe_cli/ui/shell/slash.py,sha256=7nQA6xvCjajv_5eEYHzvrYpkN9YdYA4gSJv4tVt8gLQ,12710
|
|
113
113
|
axe_cli/ui/shell/update.py,sha256=zHIUJvbtRa9m9waiO6tQpGpdLVVmFxDtRgKFfpWm2Po,7369
|
|
114
114
|
axe_cli/ui/shell/usage.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
115
|
-
axe_cli/ui/shell/visualize.py,sha256=
|
|
115
|
+
axe_cli/ui/shell/visualize.py,sha256=nJcZZsoR3l2J7E1Uu8_lKwCzW3dfq9mkOXb5IxzPadY,30417
|
|
116
116
|
axe_cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
117
117
|
axe_cli/utils/aiohttp.py,sha256=YleWcTPqa_n7lJzl2ISW49rBRMhbMV8IXqDG1_q0lGU,281
|
|
118
118
|
axe_cli/utils/aioqueue.py,sha256=RAqMxf73vxgTYvC_SHgTwG9Wp6uK43xB5auonpL90y4,2152
|
|
@@ -147,7 +147,7 @@ axe_cli/wire/protocol.py,sha256=hzlvXrvex6kL1eqltGDedvF1CrGY_8dINMMVluF_J1c,77
|
|
|
147
147
|
axe_cli/wire/serde.py,sha256=v7MsE35R6Uy7ypynRaPG3iOdj4gkxzNprgaVmVVymBQ,742
|
|
148
148
|
axe_cli/wire/server.py,sha256=oNjJUdALTL91ygEYsP4c4lWJ57T3Z7RIbd78nWH7O94,21218
|
|
149
149
|
axe_cli/wire/types.py,sha256=O_uvsRoc5Xa7ODVcTYB9Po47cuLUErbEOhbA2qpUxOI,10597
|
|
150
|
-
axe_cli-1.7.
|
|
151
|
-
axe_cli-1.7.
|
|
152
|
-
axe_cli-1.7.
|
|
153
|
-
axe_cli-1.7.
|
|
150
|
+
axe_cli-1.7.4.dist-info/WHEEL,sha256=fAguSjoiATBe7TNBkJwOjyL1Tt4wwiaQGtNtjRPNMQA,80
|
|
151
|
+
axe_cli-1.7.4.dist-info/entry_points.txt,sha256=IOP2TaPtunLm5FigWdAF1KAzg7n6zN4L_JRNWbSm8Wg,41
|
|
152
|
+
axe_cli-1.7.4.dist-info/METADATA,sha256=wkIqO0torreDSUspB13Zqtdmwxhm6j7ZtxPAZq8Lf7Q,1056
|
|
153
|
+
axe_cli-1.7.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|