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.
Files changed (164) hide show
  1. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/PKG-INFO +3 -2
  2. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/README.md +2 -1
  3. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_core.py +6 -6
  4. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_ui.py +44 -0
  5. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_validation.py +38 -0
  6. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/openrouter.py +2 -1
  7. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/PKG-INFO +3 -2
  8. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/pyproject.toml +2 -2
  9. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/LICENSE +0 -0
  10. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/__init__.py +0 -0
  11. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/__main__.py +0 -0
  12. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/__init__.py +0 -0
  13. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/agent_manager.py +0 -0
  14. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/agent_wizard.py +0 -0
  15. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/approval_formatter.py +0 -0
  16. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/approval_integration.py +0 -0
  17. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/approval_prompt.py +0 -0
  18. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/batch_approval_display.py +0 -0
  19. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/batch_approval_filters.py +0 -0
  20. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/batch_operation_monitor.py +0 -0
  21. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/commands/performance_cmd.py +0 -0
  22. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/commands.py +0 -0
  23. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/completion_handler.py +0 -0
  24. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/config_setup_wizard.py +0 -0
  25. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/dynamic_commands.py +0 -0
  26. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/__init__.py +0 -0
  27. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/agent_handler.py +0 -0
  28. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/agent_persona_handler.py +0 -0
  29. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/custom_agent_handler.py +0 -0
  30. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/handlers/permissions_handler.py +0 -0
  31. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/interface.py +0 -0
  32. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/cli/performance_dashboard.py +0 -0
  33. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/__init__.py +0 -0
  34. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/__init__.py +0 -0
  35. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/agent_config.py +0 -0
  36. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/agent_switcher.py +0 -0
  37. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/approval_context.py +0 -0
  38. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/approval_dialog.py +0 -0
  39. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/approval_interface.py +0 -0
  40. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/approval_manager.py +0 -0
  41. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/cli_integration.py +0 -0
  42. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/config.py +0 -0
  43. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/custom_agent_integration.py +0 -0
  44. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/diff_renderer.py +0 -0
  45. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/file_content_display.py +0 -0
  46. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/file_modification_workflow.py +0 -0
  47. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/file_system_manager.py +0 -0
  48. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/input_handler.py +0 -0
  49. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/metrics_collector.py +0 -0
  50. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/optimization_engine.py +0 -0
  51. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/performance_monitor.py +0 -0
  52. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/persona.py +0 -0
  53. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/persona_validator.py +0 -0
  54. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/program_executor.py +0 -0
  55. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/proposed_changes_integration.py +0 -0
  56. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/read_before_write_errors.py +0 -0
  57. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/read_before_write_ui.py +0 -0
  58. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/rich_renderer.py +0 -0
  59. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/status_config.py +0 -0
  60. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/status_core.py +0 -0
  61. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/status_integrated_engine.py +0 -0
  62. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/status_manager.py +0 -0
  63. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/status_ui_components.py +0 -0
  64. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/template_applicator.py +0 -0
  65. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/terminal_status_listener.py +0 -0
  66. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/token_tracker.py +0 -0
  67. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/types.py +0 -0
  68. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/web_client.py +0 -0
  69. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent/workflow_orchestrator.py +0 -0
  70. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent_engine.py +0 -0
  71. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent_mode_manager.py +0 -0
  72. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/agent_progress_ui.py +0 -0
  73. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/chat_manager.py +0 -0
  74. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/config_manager.py +0 -0
  75. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/config_migration.py +0 -0
  76. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/config_provider.py +0 -0
  77. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/config_security_validator.py +0 -0
  78. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/config_validator.py +0 -0
  79. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/conversation_manager.py +0 -0
  80. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/engine.py +0 -0
  81. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/enhanced_input.py +0 -0
  82. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/env_loader.py +0 -0
  83. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/fallback_manager.py +0 -0
  84. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/health_monitor.py +0 -0
  85. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/history_manager.py +0 -0
  86. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/mcp_integration_layer.py +0 -0
  87. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/models.py +0 -0
  88. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/provider_capabilities.py +0 -0
  89. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/provider_initializer.py +0 -0
  90. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/provider_registry.py +0 -0
  91. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/__init__.py +0 -0
  92. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/approval_workflow.py +0 -0
  93. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/audit_logger.py +0 -0
  94. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/permission_controller.py +0 -0
  95. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/sandbox_manager.py +0 -0
  96. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/security/security_manager.py +0 -0
  97. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard.py +0 -0
  98. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_guide_generator.py +0 -0
  99. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/setup_wizard_provider_setup.py +0 -0
  100. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/core/signal_handler.py +0 -0
  101. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/mcp/__init__.py +0 -0
  102. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/mcp/client.py +0 -0
  103. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/mcp/manager.py +0 -0
  104. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/__init__.py +0 -0
  105. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/azure.py +0 -0
  106. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/base.py +0 -0
  107. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/bedrock.py +0 -0
  108. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/claude.py +0 -0
  109. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/claude_code.py +0 -0
  110. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/cohere.py +0 -0
  111. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/factory.py +0 -0
  112. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/gemini.py +0 -0
  113. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/mistral.py +0 -0
  114. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/ollama.py +0 -0
  115. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/openai.py +0 -0
  116. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/perplexity.py +0 -0
  117. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/vertex.py +0 -0
  118. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/providers/xai.py +0 -0
  119. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/ui/__init__.py +0 -0
  120. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/ui/cancellation_handler.py +0 -0
  121. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/ui/progress_indicator.py +0 -0
  122. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/utils/__init__.py +0 -0
  123. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/utils/error_handler.py +0 -0
  124. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/utils/errors.py +0 -0
  125. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer/utils/retry.py +0 -0
  126. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/SOURCES.txt +0 -0
  127. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/dependency_links.txt +0 -0
  128. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/entry_points.txt +0 -0
  129. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/requires.txt +0 -0
  130. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/omnimancer_cli.egg-info/top_level.txt +0 -0
  131. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/setup.cfg +0 -0
  132. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_approval_system.py +0 -0
  133. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_azure_provider.py +0 -0
  134. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_cohere_provider.py +0 -0
  135. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_config_comprehensive.py +0 -0
  136. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_conversation_history.py +0 -0
  137. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_conversation_manager.py +0 -0
  138. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_core_engine.py +0 -0
  139. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_enhanced_model_info.py +0 -0
  140. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_error_handling_robustness.py +0 -0
  141. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_execution_timeout_errors.py +0 -0
  142. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_fallback_manager.py +0 -0
  143. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_fixtures.py +0 -0
  144. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_gemini_provider.py +0 -0
  145. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_httpx_compatibility.py +0 -0
  146. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_import_validation.py +0 -0
  147. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_interface_smoke_tests.py +0 -0
  148. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_mcp_integration.py +0 -0
  149. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_mcp_integration_layer.py +0 -0
  150. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_mistral_provider.py +0 -0
  151. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_models.py +0 -0
  152. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_ollama_provider.py +0 -0
  153. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_performance_security.py +0 -0
  154. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_perplexity_provider.py +0 -0
  155. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_program_executor.py +0 -0
  156. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_provider_base.py +0 -0
  157. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_provider_integration.py +0 -0
  158. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_provider_registry.py +0 -0
  159. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_retry.py +0 -0
  160. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_security_validation.py +0 -0
  161. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_setup_wizard.py +0 -0
  162. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_system_integration.py +0 -0
  163. {omnimancer_cli-0.1.0 → omnimancer_cli-0.1.2}/tests/test_workflows_comprehensive.py +0 -0
  164. {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.0
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": "mistral-",
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
- "google/gemini-2.5-flash-preview-05-20",
251
- "openai/gpt-4.1",
252
- "openai/o3",
253
- "openai/o4-mini",
254
- "meta-llama/llama-4-maverick",
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.0
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.0"
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 = "3.12"
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