Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
1fbed6a
[tutor] Add AI-Powered Installation Tutor (Issue #131)
srikrishnavansi Jan 11, 2026
e0dd20b
Merge branch 'main' into feature/ai-tutor
Anshgrover23 Jan 12, 2026
4b524e2
Merge branch 'main' into feature/ai-tutor
Anshgrover23 Jan 12, 2026
e8b3314
Merge branch 'main' into feature/ai-tutor
Anshgrover23 Jan 12, 2026
654370c
fix(tutor): address PR review comments from Gemini and CodeRabbit
srikrishnavansi Jan 12, 2026
bb8c491
Merge branch 'feature/ai-tutor' of https://github.com/srikrishnavansi…
srikrishnavansi Jan 12, 2026
aeef51c
Merge branch 'main' into feature/ai-tutor
srikrishnavansi Jan 12, 2026
03c11ad
Merge branch 'main' into feature/ai-tutor
Anshgrover23 Jan 12, 2026
d95ee00
style(tutor): fix ruff lint errors
srikrishnavansi Jan 12, 2026
b8cedf0
Merge branch 'feature/ai-tutor' of https://github.com/srikrishnavansi…
srikrishnavansi Jan 12, 2026
a799d27
test(tutor): move tests to standard location for CI coverage
srikrishnavansi Jan 12, 2026
049185d
fix(tutor): address CodeRabbit review comments
srikrishnavansi Jan 12, 2026
4e86d28
fix(security): use tempfile.gettempdir() instead of hardcoded /tmp path
srikrishnavansi Jan 12, 2026
bce506a
fix: address SonarQube code quality issues
srikrishnavansi Jan 12, 2026
f4beddd
style: fix black formatting in cli.py
srikrishnavansi Jan 12, 2026
29a7a8b
refactor: remove duplicate tests from cortex/tutor/tests
srikrishnavansi Jan 12, 2026
4ff4eb6
fix: remaining floating point comparisons in test_integration.py
srikrishnavansi Jan 12, 2026
2fab6a5
fix: address reviewer feedback and CodeRabbit suggestions
srikrishnavansi Jan 12, 2026
79bc930
chore: remove unused imports (CodeRabbit nitpicks)
srikrishnavansi Jan 12, 2026
92df93b
fix: correct return types and add input validation (CodeRabbit)
srikrishnavansi Jan 12, 2026
24bd578
fix: refactor QAHandlerTool with lazy init and input validation
srikrishnavansi Jan 12, 2026
5fe8a89
style: fix black formatting in qa_handler.py
srikrishnavansi Jan 12, 2026
0d0b495
fix: resolve Pydantic forward reference and type annotation issues
srikrishnavansi Jan 12, 2026
814018b
fix: add safe access pattern for result["answer"] in ConversationHandler
srikrishnavansi Jan 12, 2026
49830cb
refactor: cleanup code quality issues from review
srikrishnavansi Jan 13, 2026
fff6646
Merge upstream/main: migrate deps to pyproject.toml
srikrishnavansi Jan 13, 2026
2bf80bb
style: fix import sorting in cli.py (ruff I001)
srikrishnavansi Jan 13, 2026
b481abd
fix: address CodeRabbit review feedback
srikrishnavansi Jan 13, 2026
8ce6277
refactor: remove LangChain/LangGraph, use existing llm_router
srikrishnavansi Jan 13, 2026
0329f5b
fix: remove langchain imports from deterministic tools
srikrishnavansi Jan 13, 2026
1b9c88a
fix: black formatting and add exception logging
srikrishnavansi Jan 13, 2026
7f0b30d
fix: handle zero score correctly in progress tracker
srikrishnavansi Jan 13, 2026
a813fd9
Merge branch 'main' into feature/ai-tutor
srikrishnavansi Jan 13, 2026
b0a19c5
refactor: fix unused kwargs warnings and nested conditionals
srikrishnavansi Jan 13, 2026
284f119
fix: allow explicit completed=False in update_progress
srikrishnavansi Jan 13, 2026
db6a101
docs: update AI_TUTOR.md to reflect simplified architecture
srikrishnavansi Jan 13, 2026
c382393
Merge branch 'main' into feature/ai-tutor
Anshgrover23 Jan 13, 2026
5f93fd7
Merge branch 'main' into feature/ai-tutor
srikrishnavansi Jan 13, 2026
ec37b80
Merge branch 'main' into feature/ai-tutor
srikrishnavansi Jan 14, 2026
bbe7029
test: add llm.py tests, update coverage docs
srikrishnavansi Jan 14, 2026
bc773d3
fix: use pytest.approx for floats, suppress config warning
srikrishnavansi Jan 14, 2026
859cde2
Merge branch 'main' into feature/ai-tutor
srikrishnavansi Jan 15, 2026
f42f286
merge: sync with upstream/main and update docs
srikrishnavansi Jan 16, 2026
6fe19cd
Merge branch 'feature/ai-tutor' of https://github.com/srikrishnavansi…
srikrishnavansi Jan 16, 2026
1c08c7f
docs: fix placeholder URL in AI_TUTOR.md
srikrishnavansi Jan 16, 2026
1e12ac3
docs: remove hardcoded model versions from AI_TUTOR.md
srikrishnavansi Jan 16, 2026
a96a303
docs: add TUTOR_OFFLINE to config section and fix placeholders
srikrishnavansi Jan 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions cortex/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -1569,6 +1569,66 @@ def status(self):
doctor = SystemDoctor()
return doctor.run_checks()

def tutor(self, args: argparse.Namespace) -> int:
"""AI-powered package tutor for interactive learning.

Provides LLM-powered explanations, Q&A, code examples,
and step-by-step tutorials for packages.

Args:
args: Parsed command-line arguments.

Returns:
Exit code (0 for success, 1 for error).
"""
from cortex.tutor.branding import print_banner
from cortex.tutor.cli import (
cmd_list_packages,
cmd_progress,
cmd_question,
cmd_reset,
cmd_teach,
)

# Handle --list flag
if getattr(args, "list", False):
return cmd_list_packages()

# Handle --progress flag
if getattr(args, "progress", False):
package = getattr(args, "package", None)
return cmd_progress(package)

# Handle --reset flag
reset_target = getattr(args, "reset", None)
if reset_target is not None:
package = None if reset_target == "__all__" else reset_target
return cmd_reset(package)

# Handle -q/--question flag
question = getattr(args, "question", None)
package = getattr(args, "package", None)

if question:
if not package:
cx_print("Please specify a package: cortex tutor <package> -q 'question'", "error")
return 1
return cmd_question(package, question, verbose=self.verbose)

# Handle package argument (start interactive tutor)
if package:
print_banner()
fresh = getattr(args, "fresh", False)
return cmd_teach(package, verbose=self.verbose, fresh=fresh)

# No arguments - show help
cx_print("Usage: cortex tutor <package> [options]", "info")
cx_print(" cortex tutor docker - Start interactive lesson", "info")
cx_print(" cortex tutor docker -q 'What is Docker?' - Quick Q&A", "info")
cx_print(" cortex tutor --list - List studied packages", "info")
cx_print(" cortex tutor --progress - Show learning progress", "info")
return 0

def update(self, args: argparse.Namespace) -> int:
"""Handle the update command for self-updating Cortex."""
from rich.progress import Progress, SpinnerColumn, TextColumn
Expand Down Expand Up @@ -2971,6 +3031,23 @@ def main():
# Status command (includes comprehensive health checks)
subparsers.add_parser("status", help="Show comprehensive system status and health checks")

# Tutor command - AI-powered package education (Issue #131)
tutor_parser = subparsers.add_parser("tutor", help="AI-powered package tutor")
tutor_parser.add_argument("package", nargs="?", help="Package to learn about")
tutor_parser.add_argument(
"-q", "--question", type=str, help="Ask a quick question about the package"
)
tutor_parser.add_argument("--list", "-l", action="store_true", help="List studied packages")
tutor_parser.add_argument(
"--progress", "-p", action="store_true", help="Show learning progress"
)
tutor_parser.add_argument(
"--reset", nargs="?", const="__all__", metavar="PACKAGE", help="Reset progress"
)
tutor_parser.add_argument(
"--fresh", "-f", action="store_true", help="Skip cache, generate fresh"
)

# Benchmark command
benchmark_parser = subparsers.add_parser("benchmark", help="Run AI performance benchmark")
benchmark_parser.add_argument("--verbose", "-v", action="store_true", help="Verbose output")
Expand Down Expand Up @@ -3570,6 +3647,8 @@ def main():
return cli.wizard()
elif args.command == "status":
return cli.status()
elif args.command == "tutor":
return cli.tutor(args)
elif args.command == "benchmark":
return cli.benchmark(verbose=getattr(args, "verbose", False))
elif args.command == "systemd":
Expand Down
13 changes: 13 additions & 0 deletions cortex/tutor/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
"""
Intelligent Tutor - AI-Powered Installation Tutor for Cortex Linux.

An interactive AI tutor that teaches users about packages and best practices.
"""

__version__ = "0.1.0"
__author__ = "Sri Krishna Vamsi"

from cortex.tutor.branding import console, tutor_print
from cortex.tutor.config import Config

__all__ = ["Config", "console", "tutor_print", "__version__"]
9 changes: 9 additions & 0 deletions cortex/tutor/agents/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
"""
LangGraph agents for Intelligent Tutor.

Provides Plan→Act→Reflect workflow agents.
"""

from cortex.tutor.agents.tutor_agent.tutor_agent import TutorAgent

__all__ = ["TutorAgent"]
7 changes: 7 additions & 0 deletions cortex/tutor/agents/tutor_agent/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"""
Tutor Agent - Main orchestrator for interactive tutoring.
"""

from cortex.tutor.agents.tutor_agent.tutor_agent import InteractiveTutor, TutorAgent

__all__ = ["TutorAgent", "InteractiveTutor"]
Loading
Loading