nexus-dev-toolkit 3.1.0__tar.gz → 3.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nexus_dev_toolkit-3.1.0/nexus_dev_toolkit.egg-info → nexus_dev_toolkit-3.1.1}/PKG-INFO +1 -1
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/nexus_cli.py +91 -2
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1/nexus_dev_toolkit.egg-info}/PKG-INFO +1 -1
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/pyproject.toml +1 -1
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/LICENSE +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/README.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/nexus_dev_toolkit.egg-info/SOURCES.txt +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/nexus_dev_toolkit.egg-info/dependency_links.txt +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/nexus_dev_toolkit.egg-info/entry_points.txt +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/nexus_dev_toolkit.egg-info/requires.txt +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/nexus_dev_toolkit.egg-info/top_level.txt +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/nexus_server.py +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/setup.cfg +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tests/test_cli.py +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tests/test_server.py +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/__init__.py +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/agents/__init__.py +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/agents/code-reviewer.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/agents/database-reviewer.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/agents/deployment-reviewer.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/agents/monitoring-reviewer.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/agents/performance-reviewer.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/__init__.py +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/arch_ingest.py +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/package_resolver.py +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/project_rules.py +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/__init__.py +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/apply.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/code-review.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/database-review.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/deployment-review.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/epav.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/evaluate.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/monitoring-review.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/performance-review.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/plan.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/scaffold.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/skills/validate.md +0 -0
- {nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/tools/epav/task_loader.py +0 -0
|
@@ -11,12 +11,14 @@ from rich.table import Table
|
|
|
11
11
|
app = typer.Typer(name="nexus", no_args_is_help=False, help="nexus-dev-toolkit — Day 0 scaffold + Day 1 EPAV workflow for Claude Code")
|
|
12
12
|
skill_app = typer.Typer(name="skill", no_args_is_help=True, help="Manage skills in .claude/commands/")
|
|
13
13
|
rule_app = typer.Typer(name="rule", no_args_is_help=True, help="Manage rules in knowledge/rules/")
|
|
14
|
+
agent_app = typer.Typer(name="agent", no_args_is_help=True, help="Manage subagents in .claude/agents/")
|
|
14
15
|
app.add_typer(skill_app, name="skill")
|
|
15
16
|
app.add_typer(rule_app, name="rule")
|
|
17
|
+
app.add_typer(agent_app, name="agent")
|
|
16
18
|
|
|
17
19
|
console = Console()
|
|
18
20
|
|
|
19
|
-
_VERSION = "3.1.
|
|
21
|
+
_VERSION = "3.1.1"
|
|
20
22
|
|
|
21
23
|
_LOGO = """\
|
|
22
24
|
[cyan]███╗ ██╗███████╗██╗ ██╗██╗ ██╗███████╗[/cyan]
|
|
@@ -35,8 +37,17 @@ def _print_logo() -> None:
|
|
|
35
37
|
console.print()
|
|
36
38
|
|
|
37
39
|
|
|
40
|
+
def _version_callback(value: bool) -> None:
|
|
41
|
+
if value:
|
|
42
|
+
console.print(f"nexus-dev-toolkit v{_VERSION}")
|
|
43
|
+
raise typer.Exit()
|
|
44
|
+
|
|
45
|
+
|
|
38
46
|
@app.callback(invoke_without_command=True)
|
|
39
|
-
def _callback(
|
|
47
|
+
def _callback(
|
|
48
|
+
ctx: typer.Context,
|
|
49
|
+
version: bool = typer.Option(None, "--version", "-V", callback=_version_callback, is_eager=True, help="Show version and exit."),
|
|
50
|
+
) -> None:
|
|
40
51
|
if ctx.invoked_subcommand is None:
|
|
41
52
|
_print_logo()
|
|
42
53
|
console.print(ctx.get_help())
|
|
@@ -337,6 +348,84 @@ def rule_list(
|
|
|
337
348
|
console.print(table)
|
|
338
349
|
|
|
339
350
|
|
|
351
|
+
# ── agent subcommands ─────────────────────────────────────────────────────────
|
|
352
|
+
|
|
353
|
+
_AGENT_TEMPLATE = """\
|
|
354
|
+
---
|
|
355
|
+
name: {name}
|
|
356
|
+
description: Describe when Claude should spawn this agent (role, not action — e.g. "reviews X for Y")
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
# {name}
|
|
360
|
+
|
|
361
|
+
## Role
|
|
362
|
+
|
|
363
|
+
Describe what this agent does.
|
|
364
|
+
|
|
365
|
+
## Steps
|
|
366
|
+
|
|
367
|
+
### 1 — Discover context
|
|
368
|
+
|
|
369
|
+
Read CLAUDE.md, project manifest, and relevant source files.
|
|
370
|
+
|
|
371
|
+
### 2 — Perform task
|
|
372
|
+
|
|
373
|
+
What the agent should do.
|
|
374
|
+
|
|
375
|
+
### 3 — Output
|
|
376
|
+
|
|
377
|
+
What the agent should return when done.
|
|
378
|
+
"""
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
@agent_app.command("add")
|
|
382
|
+
def agent_add(
|
|
383
|
+
name: str = typer.Argument(..., help="Agent name (e.g. 'security-reviewer')"),
|
|
384
|
+
project_dir: str = typer.Option(".", "--dir", "-d"),
|
|
385
|
+
) -> None:
|
|
386
|
+
"""Create a new subagent in .claude/agents/."""
|
|
387
|
+
root = Path(project_dir).resolve()
|
|
388
|
+
dest = root / ".claude" / "agents" / f"{name}.md"
|
|
389
|
+
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
390
|
+
|
|
391
|
+
if dest.exists():
|
|
392
|
+
console.print(f" [yellow]·[/yellow] .claude/agents/{name}.md already exists")
|
|
393
|
+
return
|
|
394
|
+
|
|
395
|
+
dest.write_text(_AGENT_TEMPLATE.format(name=name), encoding="utf-8")
|
|
396
|
+
console.print(f" [green]✓[/green] Created .claude/agents/{name}.md")
|
|
397
|
+
console.print(f" [dim]Edit the description so Claude knows when to spawn it.[/dim]")
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
@agent_app.command("list")
|
|
401
|
+
def agent_list(
|
|
402
|
+
project_dir: str = typer.Option(".", "--dir", "-d"),
|
|
403
|
+
) -> None:
|
|
404
|
+
"""List all subagents in .claude/agents/."""
|
|
405
|
+
root = Path(project_dir).resolve()
|
|
406
|
+
agents_dir = root / ".claude" / "agents"
|
|
407
|
+
|
|
408
|
+
if not agents_dir.exists():
|
|
409
|
+
console.print(" [yellow]·[/yellow] No .claude/agents/ found. Run [cyan]nexus init[/cyan] first.")
|
|
410
|
+
return
|
|
411
|
+
|
|
412
|
+
agents = sorted(agents_dir.glob("*.md"))
|
|
413
|
+
if not agents:
|
|
414
|
+
console.print(" [yellow]·[/yellow] No agents yet. Run [cyan]nexus agent add <name>[/cyan]")
|
|
415
|
+
return
|
|
416
|
+
|
|
417
|
+
table = Table(show_header=True, header_style="dim")
|
|
418
|
+
table.add_column("Agent", style="cyan")
|
|
419
|
+
table.add_column("Source")
|
|
420
|
+
|
|
421
|
+
builtins = set(_BUILTIN_AGENTS)
|
|
422
|
+
for a in agents:
|
|
423
|
+
source = "built-in" if a.name in builtins else "custom"
|
|
424
|
+
table.add_row(a.stem, source)
|
|
425
|
+
|
|
426
|
+
console.print(table)
|
|
427
|
+
|
|
428
|
+
|
|
340
429
|
def main() -> None:
|
|
341
430
|
app()
|
|
342
431
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/nexus_dev_toolkit.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/nexus_dev_toolkit.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{nexus_dev_toolkit-3.1.0 → nexus_dev_toolkit-3.1.1}/nexus_dev_toolkit.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|