omnimancer-cli 0.1.0__tar.gz → 0.1.2__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.
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/PKG-INFO +3 -2
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/README.md +2 -1
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_core.py +6 -6
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_ui.py +44 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_validation.py +38 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/openrouter.py +2 -1
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/PKG-INFO +3 -2
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/pyproject.toml +2 -2
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/LICENSE +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/__init__.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/__main__.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/__init__.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/agent_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/agent_wizard.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/approval_formatter.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/approval_integration.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/approval_prompt.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/batch_approval_display.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/batch_approval_filters.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/batch_operation_monitor.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/commands/performance_cmd.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/commands.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/completion_handler.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/config_setup_wizard.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/dynamic_commands.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/__init__.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/agent_handler.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/agent_persona_handler.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/custom_agent_handler.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/permissions_handler.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/interface.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/performance_dashboard.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/__init__.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/__init__.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/agent_config.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/agent_switcher.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/approval_context.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/approval_dialog.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/approval_interface.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/approval_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/cli_integration.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/config.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/custom_agent_integration.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/diff_renderer.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/file_content_display.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/file_modification_workflow.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/file_system_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/input_handler.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/metrics_collector.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/optimization_engine.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/performance_monitor.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/persona.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/persona_validator.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/program_executor.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/proposed_changes_integration.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/read_before_write_errors.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/read_before_write_ui.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/rich_renderer.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/status_config.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/status_core.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/status_integrated_engine.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/status_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/status_ui_components.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/template_applicator.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/terminal_status_listener.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/token_tracker.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/types.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/web_client.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/workflow_orchestrator.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent_engine.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent_mode_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent_progress_ui.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/chat_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/config_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/config_migration.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/config_provider.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/config_security_validator.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/config_validator.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/conversation_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/engine.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/enhanced_input.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/env_loader.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/fallback_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/health_monitor.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/history_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/mcp_integration_layer.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/models.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/provider_capabilities.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/provider_initializer.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/provider_registry.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/__init__.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/approval_workflow.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/audit_logger.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/permission_controller.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/sandbox_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/security_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_guide_generator.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_provider_setup.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/signal_handler.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/mcp/__init__.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/mcp/client.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/mcp/manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/__init__.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/azure.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/base.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/bedrock.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/claude.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/claude_code.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/cohere.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/factory.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/gemini.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/mistral.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/ollama.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/openai.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/perplexity.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/vertex.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/xai.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/ui/__init__.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/ui/cancellation_handler.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/ui/progress_indicator.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/utils/__init__.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/utils/error_handler.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/utils/errors.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/utils/retry.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/SOURCES.txt +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/dependency_links.txt +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/entry_points.txt +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/requires.txt +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/top_level.txt +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/setup.cfg +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_approval_system.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_azure_provider.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_cohere_provider.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_config_comprehensive.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_conversation_history.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_conversation_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_core_engine.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_enhanced_model_info.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_error_handling_robustness.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_execution_timeout_errors.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_fallback_manager.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_fixtures.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_gemini_provider.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_httpx_compatibility.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_import_validation.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_interface_smoke_tests.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_mcp_integration.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_mcp_integration_layer.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_mistral_provider.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_models.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_ollama_provider.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_performance_security.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_perplexity_provider.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_program_executor.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_provider_base.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_provider_integration.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_provider_registry.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_retry.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_security_validation.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_setup_wizard.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_system_integration.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_workflows_comprehensive.py +0 -0
- {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_xai_provider.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omnimancer-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: A unified command-line interface for multiple AI language models
|
|
5
5
|
Author-email: Kellan Strong <kellan@jite.ai>
|
|
6
6
|
License: MIT
|
|
@@ -49,6 +49,7 @@ Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
|
49
49
|
Dynamic: license-file
|
|
50
50
|
|
|
51
51
|
# Omnimancer CLI
|
|
52
|
+
## Just-In-Time Engineering, Inc.
|
|
52
53
|
|
|
53
54
|
A unified command-line interface for multiple AI providers - chat with Claude, OpenAI, Gemini, and 10+ other AI models through a single, intuitive tool.
|
|
54
55
|
|
|
@@ -159,7 +160,7 @@ Every file operation requires your explicit approval with:
|
|
|
159
160
|
|
|
160
161
|
### ⚡ **Quick Examples**
|
|
161
162
|
|
|
162
|
-
```bash
|
|
163
|
+
```bash
|
|
163
164
|
# Ask AI to create files
|
|
164
165
|
>>> Create a Python script to analyze CSV data
|
|
165
166
|
🔍 Shows preview → [Y] to approve → ✅ File created
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# Omnimancer CLI
|
|
2
|
+
## Just-In-Time Engineering, Inc.
|
|
2
3
|
|
|
3
4
|
A unified command-line interface for multiple AI providers - chat with Claude, OpenAI, Gemini, and 10+ other AI models through a single, intuitive tool.
|
|
4
5
|
|
|
@@ -109,7 +110,7 @@ Every file operation requires your explicit approval with:
|
|
|
109
110
|
|
|
110
111
|
### ⚡ **Quick Examples**
|
|
111
112
|
|
|
112
|
-
```bash
|
|
113
|
+
```bash
|
|
113
114
|
# Ask AI to create files
|
|
114
115
|
>>> Create a Python script to analyze CSV data
|
|
115
116
|
🔍 Shows preview → [Y] to approve → ✅ File created
|
|
@@ -152,7 +152,7 @@ class SetupWizardCore:
|
|
|
152
152
|
"mistral-large",
|
|
153
153
|
],
|
|
154
154
|
"api_key_url": "https://console.mistral.ai/",
|
|
155
|
-
"api_key_prefix": "
|
|
155
|
+
"api_key_prefix": "",
|
|
156
156
|
"setup_notes": "Get your API key from the Mistral Console",
|
|
157
157
|
},
|
|
158
158
|
"cohere": {
|
|
@@ -247,11 +247,11 @@ class SetupWizardCore:
|
|
|
247
247
|
"Real-time switching",
|
|
248
248
|
],
|
|
249
249
|
"models": [
|
|
250
|
-
"
|
|
251
|
-
"openai/gpt-
|
|
252
|
-
"
|
|
253
|
-
"
|
|
254
|
-
"
|
|
250
|
+
"anthropic/claude-3.5-sonnet",
|
|
251
|
+
"openai/gpt-4o",
|
|
252
|
+
"google/gemini-pro-1.5",
|
|
253
|
+
"meta-llama/llama-3.1-405b-instruct",
|
|
254
|
+
"qwen/qwen-2.5-72b-instruct",
|
|
255
255
|
],
|
|
256
256
|
"api_key_url": "https://openrouter.ai/keys",
|
|
257
257
|
"api_key_prefix": "sk-or-",
|
|
@@ -180,6 +180,9 @@ class SetupWizardUI:
|
|
|
180
180
|
elif provider_name == "gemini":
|
|
181
181
|
guidance.append(" • Status Page: https://status.cloud.google.com/\n")
|
|
182
182
|
guidance.append(" • Support: https://support.google.com/\n")
|
|
183
|
+
elif provider_name == "openrouter":
|
|
184
|
+
guidance.append(" • Models: https://openrouter.ai/models\n")
|
|
185
|
+
guidance.append(" • Documentation: https://openrouter.ai/docs\n")
|
|
183
186
|
elif provider_name == "ollama":
|
|
184
187
|
guidance.append(" • Documentation: https://ollama.ai/docs\n")
|
|
185
188
|
guidance.append(" • GitHub: https://github.com/ollama/ollama\n")
|
|
@@ -275,6 +278,47 @@ class SetupWizardUI:
|
|
|
275
278
|
guidance.append(" • Verify the model supports your use case\n")
|
|
276
279
|
guidance.append(" • Try 'command-light' for faster responses\n\n")
|
|
277
280
|
|
|
281
|
+
elif provider_name == "azure":
|
|
282
|
+
guidance.append("☁️ Azure OpenAI-Specific:\n", style="bold")
|
|
283
|
+
guidance.append(" • Ensure you're using the correct endpoint URL\n")
|
|
284
|
+
guidance.append(" • Verify deployment name matches your Azure setup\n")
|
|
285
|
+
guidance.append(" • Check API version is compatible (2024-02-01 or later)\n")
|
|
286
|
+
guidance.append(" • Confirm resource group has the deployment\n")
|
|
287
|
+
guidance.append(" • Test with Azure OpenAI Studio first\n\n")
|
|
288
|
+
|
|
289
|
+
elif provider_name == "vertex":
|
|
290
|
+
guidance.append("🔺 Vertex AI-Specific:\n", style="bold")
|
|
291
|
+
guidance.append(" • Enable Vertex AI API in Google Cloud Console\n")
|
|
292
|
+
guidance.append(" • Set up Application Default Credentials (ADC)\n")
|
|
293
|
+
guidance.append(" • Verify project ID and location are correct\n")
|
|
294
|
+
guidance.append(" • Check IAM permissions for Vertex AI\n")
|
|
295
|
+
guidance.append(" • Ensure billing is enabled for the project\n\n")
|
|
296
|
+
|
|
297
|
+
elif provider_name == "bedrock":
|
|
298
|
+
guidance.append("🪨 AWS Bedrock-Specific:\n", style="bold")
|
|
299
|
+
guidance.append(" • Request model access in AWS Console first\n")
|
|
300
|
+
guidance.append(" • Verify AWS region supports your model\n")
|
|
301
|
+
guidance.append(" • Check IAM permissions include bedrock:InvokeModel\n")
|
|
302
|
+
guidance.append(" • Ensure AWS credentials are properly configured\n")
|
|
303
|
+
guidance.append(" • Try 'anthropic.claude-3-sonnet' if available\n\n")
|
|
304
|
+
|
|
305
|
+
elif provider_name == "claude-code":
|
|
306
|
+
guidance.append("💻 Claude Code-Specific:\n", style="bold")
|
|
307
|
+
guidance.append(" • Ensure Claude Code is running locally\n")
|
|
308
|
+
guidance.append(" • Check the local server is accessible\n")
|
|
309
|
+
guidance.append(" • Verify no firewall blocking local connections\n")
|
|
310
|
+
guidance.append(" • Try restarting Claude Code if connection fails\n")
|
|
311
|
+
guidance.append(" • This is for local development only\n\n")
|
|
312
|
+
|
|
313
|
+
elif provider_name == "openrouter":
|
|
314
|
+
guidance.append("🔀 OpenRouter-Specific:\n", style="bold")
|
|
315
|
+
guidance.append(" • Ensure your API key starts with 'sk-or-'\n")
|
|
316
|
+
guidance.append(" • Check account has sufficient credits\n")
|
|
317
|
+
guidance.append(" • Verify model is available (models vary by region)\n")
|
|
318
|
+
guidance.append(" • Try 'anthropic/claude-3.5-sonnet' for best results\n")
|
|
319
|
+
guidance.append(" • Enable fallback if models are unavailable\n")
|
|
320
|
+
guidance.append(" • Check https://openrouter.ai/models for model list\n\n")
|
|
321
|
+
|
|
278
322
|
elif provider_name == "ollama":
|
|
279
323
|
guidance.append("🏠 Ollama-Specific:\n", style="bold")
|
|
280
324
|
guidance.append(" • Start Ollama server: 'ollama serve'\n")
|
|
@@ -74,6 +74,7 @@ class SetupWizardValidation:
|
|
|
74
74
|
):
|
|
75
75
|
progress.update(task, description="❌ Invalid API key format!")
|
|
76
76
|
await asyncio.sleep(0.5)
|
|
77
|
+
progress.stop() # Stop the progress spinner before user interaction
|
|
77
78
|
self.console.print("[red]❌ API key format validation failed![/red]")
|
|
78
79
|
self.ui.show_troubleshooting_guidance(
|
|
79
80
|
provider_name, "Invalid API key format"
|
|
@@ -118,6 +119,7 @@ class SetupWizardValidation:
|
|
|
118
119
|
else:
|
|
119
120
|
progress.update(task, description="⚠️ Model access issue!")
|
|
120
121
|
await asyncio.sleep(0.5)
|
|
122
|
+
progress.stop() # Stop the progress spinner before showing warning
|
|
121
123
|
|
|
122
124
|
# Show detailed model access warning
|
|
123
125
|
self.console.print(
|
|
@@ -164,6 +166,7 @@ class SetupWizardValidation:
|
|
|
164
166
|
description="⚠️ Model may not be available!",
|
|
165
167
|
)
|
|
166
168
|
await asyncio.sleep(0.5)
|
|
169
|
+
progress.stop() # Stop the progress spinner before user interaction
|
|
167
170
|
self.console.print(
|
|
168
171
|
"[yellow]⚠️ Model availability could not be confirmed[/yellow]"
|
|
169
172
|
)
|
|
@@ -171,6 +174,7 @@ class SetupWizardValidation:
|
|
|
171
174
|
else:
|
|
172
175
|
progress.update(task, description="❌ API authentication failed!")
|
|
173
176
|
await asyncio.sleep(0.5)
|
|
177
|
+
progress.stop() # Stop the progress spinner before showing guidance
|
|
174
178
|
self.console.print("[red]❌ API authentication failed![/red]")
|
|
175
179
|
self.ui.show_troubleshooting_guidance(
|
|
176
180
|
provider_name, "Authentication failed"
|
|
@@ -180,6 +184,7 @@ class SetupWizardValidation:
|
|
|
180
184
|
except Exception as e:
|
|
181
185
|
progress.update(task, description="❌ Connection test failed!")
|
|
182
186
|
await asyncio.sleep(0.5)
|
|
187
|
+
progress.stop() # Stop the progress spinner before showing guidance
|
|
183
188
|
|
|
184
189
|
self.console.print(f"[red]❌ Configuration test failed: {e}[/red]")
|
|
185
190
|
|
|
@@ -227,6 +232,15 @@ class SetupWizardValidation:
|
|
|
227
232
|
return api_key.startswith("xai-") and len(api_key) > 20
|
|
228
233
|
elif provider_name == "bedrock":
|
|
229
234
|
return api_key.startswith("ABSKQmVkcm9ja0FQSUtleS1") and len(api_key) > 50
|
|
235
|
+
elif provider_name == "openrouter":
|
|
236
|
+
return api_key.startswith("sk-or-") and len(api_key) > 10
|
|
237
|
+
elif provider_name == "azure":
|
|
238
|
+
# Azure uses the same key format as OpenAI
|
|
239
|
+
return len(api_key) == 32 # Azure keys are typically 32 characters
|
|
240
|
+
elif provider_name == "vertex":
|
|
241
|
+
# Vertex AI uses service account JSON or ADC, not API keys
|
|
242
|
+
# If an API key is provided, it's likely a service account key JSON
|
|
243
|
+
return len(api_key) > 100 or api_key.startswith("{")
|
|
230
244
|
elif provider_name == "mistral":
|
|
231
245
|
return len(api_key) > 20 # Mistral keys don't have consistent prefix
|
|
232
246
|
elif provider_name == "cohere":
|
|
@@ -273,6 +287,30 @@ class SetupWizardValidation:
|
|
|
273
287
|
Returns:
|
|
274
288
|
True if model is available, False otherwise
|
|
275
289
|
"""
|
|
290
|
+
# Some providers have dynamic or user-defined model names that can't be validated
|
|
291
|
+
# against a static list, so we skip validation for them
|
|
292
|
+
provider_class_name = provider.__class__.__name__ if hasattr(provider, '__class__') else ""
|
|
293
|
+
|
|
294
|
+
# OpenRouter supports hundreds of models, any model name is potentially valid
|
|
295
|
+
if provider_class_name == 'OpenRouterProvider':
|
|
296
|
+
return True
|
|
297
|
+
|
|
298
|
+
# Azure uses deployment names which are user-defined
|
|
299
|
+
if provider_class_name == 'AzureProvider':
|
|
300
|
+
return True
|
|
301
|
+
|
|
302
|
+
# Bedrock model names can vary by region and account permissions
|
|
303
|
+
if provider_class_name == 'BedrockProvider':
|
|
304
|
+
return True
|
|
305
|
+
|
|
306
|
+
# Vertex AI model names can be custom or region-specific
|
|
307
|
+
if provider_class_name == 'VertexProvider':
|
|
308
|
+
return True
|
|
309
|
+
|
|
310
|
+
# Ollama models are locally installed, validation happens at runtime
|
|
311
|
+
if provider_class_name == 'OllamaProvider':
|
|
312
|
+
return True
|
|
313
|
+
|
|
276
314
|
try:
|
|
277
315
|
# Try to get available models with cancellation support
|
|
278
316
|
async def model_availability_check():
|
|
@@ -570,7 +570,8 @@ class OpenRouterProvider(BaseProvider):
|
|
|
570
570
|
Get list of popular OpenRouter models.
|
|
571
571
|
|
|
572
572
|
Note: OpenRouter has hundreds of models. This returns a curated list
|
|
573
|
-
of the most popular and capable models.
|
|
573
|
+
of the most popular and capable models. Any valid model name from
|
|
574
|
+
https://openrouter.ai/models will work, not just the ones listed here.
|
|
574
575
|
"""
|
|
575
576
|
models = [
|
|
576
577
|
EnhancedModelInfo(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omnimancer-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: A unified command-line interface for multiple AI language models
|
|
5
5
|
Author-email: Kellan Strong <kellan@jite.ai>
|
|
6
6
|
License: MIT
|
|
@@ -49,6 +49,7 @@ Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
|
49
49
|
Dynamic: license-file
|
|
50
50
|
|
|
51
51
|
# Omnimancer CLI
|
|
52
|
+
## Just-In-Time Engineering, Inc.
|
|
52
53
|
|
|
53
54
|
A unified command-line interface for multiple AI providers - chat with Claude, OpenAI, Gemini, and 10+ other AI models through a single, intuitive tool.
|
|
54
55
|
|
|
@@ -159,7 +160,7 @@ Every file operation requires your explicit approval with:
|
|
|
159
160
|
|
|
160
161
|
### ⚡ **Quick Examples**
|
|
161
162
|
|
|
162
|
-
```bash
|
|
163
|
+
```bash
|
|
163
164
|
# Ask AI to create files
|
|
164
165
|
>>> Create a Python script to analyze CSV data
|
|
165
166
|
🔍 Shows preview → [Y] to approve → ✅ File created
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "omnimancer-cli"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.2"
|
|
8
8
|
description = "A unified command-line interface for multiple AI language models"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -80,7 +80,7 @@ profile = "black"
|
|
|
80
80
|
line_length = 88
|
|
81
81
|
|
|
82
82
|
[tool.mypy]
|
|
83
|
-
python_version = "
|
|
83
|
+
python_version = "0.1.2"
|
|
84
84
|
warn_return_any = true
|
|
85
85
|
warn_unused_configs = true
|
|
86
86
|
disallow_untyped_defs = true
|
|
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
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/agent_persona_handler.py
RENAMED
|
File without changes
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/custom_agent_handler.py
RENAMED
|
File without changes
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/permissions_handler.py
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
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/custom_agent_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/file_modification_workflow.py
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
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/proposed_changes_integration.py
RENAMED
|
File without changes
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/read_before_write_errors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/status_integrated_engine.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/terminal_status_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/workflow_orchestrator.py
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
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/permission_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_guide_generator.py
RENAMED
|
File without changes
|
{omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_provider_setup.py
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|