The CLI module (osiris/cli/) provides the command-line interface for Osiris using the Rich framework for beautiful terminal output.
osiris/cli/
├── main.py # Entry point and command routing
├── chat.py # Interactive conversational mode
├── compile.py # OML compilation to manifests
├── run.py # Pipeline execution (local/E2B)
├── connections_cmd.py # Connection management
├── components_cmd.py # Component registry commands
├── logs.py # Session log management
└── oml_validate.py # OML validation utilities
- Manages all CLI commands using Rich console
- Handles global options (--verbose, --config)
- Routes to subcommands
- Manages environment loading
Key functions:
cli()- Main entry point with Rich consolechat()- Routes to conversational interfacecompile()- Routes to compilationrun()- Routes to executionconnections()- Connection management grouplogs()- Log management group
- Interactive AI-driven pipeline creation
- State machine implementation (FSM)
- Discovery and OML generation
- Rich-based formatting with colors and tables
Key classes:
ChatInterface- Main conversational UI- State transitions: INIT → INTENT_CAPTURED → DISCOVERY → OML_SYNTHESIS → VALIDATE_OML
- Validates OML against v0.1.0 schema
- Generates deterministic manifests
- Creates SHA-256 fingerprints
- Resolves connection references
Key functions:
compile_oml()- Main compilation logicvalidate_oml()- Schema validationgenerate_manifest()- Manifest creation
- Executes compiled manifests
- Supports local and E2B execution
- Handles --last-compile flag
- Manages execution adapters
Key functions:
run_pipeline()- Main execution logicget_execution_adapter()- Adapter selectionhandle_e2b_options()- E2B configuration
- Lists available connections
- Tests connectivity (doctor command)
- Manages connection resolution
- Masks secrets in output
Commands:
connections list- Show all connectionsconnections doctor- Test connectivityconnections add- (Future) Add connections
- Lists session history
- Shows session details
- Generates HTML reports
- Manages log cleanup
Commands:
logs list- List all sessionslogs show- Display session detailslogs html- Generate HTML reportlogs gc- Garbage collection
osiris
├── init # Initialize configuration
├── validate # Validate configuration
├── chat # Conversational mode
├── compile # Compile OML to manifest
├── run # Execute pipeline
├── connections
│ ├── list # List connections
│ └── doctor # Test connections
├── components
│ └── list # List components
└── logs
├── list # List sessions
├── show # Show session
├── html # Generate report
└── gc # Cleanup logs- Tables: Connection lists, component registry
- Progress bars: Compilation, execution steps
- Syntax highlighting: YAML, JSON output
- Status indicators: ✓ success, ✗ failure
- Colors: Info (cyan), success (green), error (red)
from rich.console import Console
from rich.table import Table
console = Console()
# Create formatted table
table = Table(title="Connections")
table.add_column("Family", style="cyan")
table.add_column("Alias", style="green")
table.add_column("Status")
# Add rows with formatting
table.add_row("mysql", "default", "[green]✓[/green] Connected")
console.print(table)try:
# Operation
except SpecificError as e:
console.print(f"[red]Error:[/red] {e}")
raise SystemExit(1)0- Success1- General error2- Configuration error3- Compilation error4- Execution error
OSIRIS_CONFIG- Configuration file pathOSIRIS_LOG_LEVEL- Logging verbosityOSIRIS_NO_COLOR- Disable Rich colorsOSIRIS_VALIDATION- Validation mode (strict/warn/off)
- Create command function in appropriate module
- Add to main.py command group
- Use Rich console for output
- Follow existing error patterns
- Add help text with examples
Example:
@cli.command()
def my_command(ctx):
"""Brief description.
Longer description with details.
Examples:
osiris my-command
osiris my-command --option value
"""
console = ctx.obj['console']
console.print("[cyan]Executing my command...[/cyan]")from click.testing import CliRunner
from osiris.cli.main import cli
def test_my_command():
runner = CliRunner()
result = runner.invoke(cli, ['my-command'])
assert result.exit_code == 0
assert 'Expected output' in result.output- Always use Rich console for output (not print)
- Provide helpful error messages with suggestions
- Use consistent formatting across commands
- Include examples in help text
- Validate input early before expensive operations
- Use progress indicators for long operations
- Mask secrets in all output
from osiris.core.config import Config
config = Config.from_files(
ctx.obj.get('config_file'),
required=False
)from osiris.core.session_logging import SessionLogger
session = SessionLogger.create_session("chat")
session.log_event("chat_started", {})if error:
console.print(Panel(
f"[red]Error: {error}[/red]",
title="Compilation Failed",
border_style="red"
))- Interactive connection wizard (
connections add) - Pipeline templates (
init --template) - Dependency management (
deps install) - Version management (
upgrade) - Pipeline testing (
test)