mcp-souschef 2.8.0__tar.gz → 3.0.0__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 (47) hide show
  1. mcp_souschef-2.8.0/README.md → mcp_souschef-3.0.0/PKG-INFO +116 -8
  2. mcp_souschef-2.8.0/PKG-INFO → mcp_souschef-3.0.0/README.md +79 -44
  3. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/pyproject.toml +14 -5
  4. mcp_souschef-3.0.0/souschef/__init__.py +57 -0
  5. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/assessment.py +1248 -57
  6. mcp_souschef-3.0.0/souschef/ci/common.py +126 -0
  7. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ci/github_actions.py +3 -92
  8. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ci/gitlab_ci.py +2 -52
  9. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ci/jenkins_pipeline.py +2 -59
  10. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/cli.py +117 -8
  11. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/playbook.py +259 -90
  12. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/resource.py +12 -11
  13. mcp_souschef-3.0.0/souschef/converters/template.py +177 -0
  14. mcp_souschef-3.0.0/souschef/core/metrics.py +313 -0
  15. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/validation.py +53 -0
  16. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/deployment.py +61 -9
  17. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/server.py +680 -0
  18. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ui/app.py +469 -351
  19. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ui/pages/ai_settings.py +74 -8
  20. mcp_souschef-3.0.0/souschef/ui/pages/cookbook_analysis.py +3529 -0
  21. mcp_souschef-3.0.0/souschef/ui/pages/validation_reports.py +274 -0
  22. mcp_souschef-2.8.0/souschef/__init__.py +0 -25
  23. mcp_souschef-2.8.0/souschef/ui/pages/cookbook_analysis.py +0 -1360
  24. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/LICENSE +0 -0
  25. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ci/__init__.py +0 -0
  26. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/__init__.py +0 -0
  27. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/cookbook_specific.py +0 -0
  28. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/cookbook_specific.py.backup +0 -0
  29. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/habitat.py +0 -0
  30. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/__init__.py +0 -0
  31. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/constants.py +0 -0
  32. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/errors.py +0 -0
  33. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/path_utils.py +0 -0
  34. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/ruby_utils.py +0 -0
  35. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/filesystem/__init__.py +0 -0
  36. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/filesystem/operations.py +0 -0
  37. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/__init__.py +0 -0
  38. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/attributes.py +0 -0
  39. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/habitat.py +0 -0
  40. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/inspec.py +0 -0
  41. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/metadata.py +0 -0
  42. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/recipe.py +0 -0
  43. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/resource.py +0 -0
  44. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/template.py +0 -0
  45. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/profiling.py +0 -0
  46. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ui/__init__.py +0 -0
  47. {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ui/health_check.py +0 -0
@@ -1,3 +1,39 @@
1
+ Metadata-Version: 2.4
2
+ Name: mcp-souschef
3
+ Version: 3.0.0
4
+ Summary: AI-powered MCP server for Chef to Ansible conversion
5
+ License: MIT
6
+ License-File: LICENSE
7
+ Keywords: chef,ansible,migration,infrastructure,automation,mcp,ai,conversion
8
+ Author: SousChef Contributors
9
+ Requires-Python: >=3.13,<4.0
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: System Administrators
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Classifier: Topic :: System :: Systems Administration
20
+ Classifier: Topic :: Utilities
21
+ Provides-Extra: ui
22
+ Requires-Dist: anthropic (>=0.75.0)
23
+ Requires-Dist: click (>=8.1.0)
24
+ Requires-Dist: mcp (>=1.25.0)
25
+ Requires-Dist: openai (>=1.0.0)
26
+ Requires-Dist: pandas (>=2.0.0) ; extra == "ui"
27
+ Requires-Dist: plotly (>=5.0.0)
28
+ Requires-Dist: python-dotenv (>=1.2.1)
29
+ Requires-Dist: pyyaml (>=6.0.0)
30
+ Requires-Dist: streamlit (>=1.28.0)
31
+ Requires-Dist: zod (>=0.8.0)
32
+ Project-URL: Documentation, https://kpeacocke.github.io/souschef/
33
+ Project-URL: Homepage, https://github.com/kpeacocke/souschef
34
+ Project-URL: Repository, https://github.com/kpeacocke/souschef
35
+ Description-Content-Type: text/markdown
36
+
1
37
  # Chef to Ansible migration - SousChef MCP
2
38
 
3
39
  An AI-powered MCP (Model Context Protocol) server that provides comprehensive Chef-to-Ansible migration capabilities for enterprise infrastructure transformation.
@@ -352,12 +388,55 @@ souschef ui --port 8080
352
388
  docker build -t souschef-ui .
353
389
 
354
390
  # Run the container
355
- docker run -p 8501:8501 souschef-ui
391
+ docker run -p 9999:9999 souschef-ui
356
392
 
357
393
  # Or use docker-compose
358
394
  docker-compose up
359
395
  ```
360
396
 
397
+ **Docker Environment Configuration:**
398
+
399
+ SousChef supports AI configuration via environment variables in Docker containers. Create a `.env` file in your project root:
400
+
401
+ ```bash
402
+ # Copy the example environment file
403
+ cp .env.example .env
404
+
405
+ # Edit with your AI provider settings
406
+ nano .env
407
+ ```
408
+
409
+ **Example .env file:**
410
+ ```dotenv
411
+ # AI Configuration
412
+ SOUSCHEF_AI_PROVIDER=Anthropic (Claude)
413
+ SOUSCHEF_AI_MODEL=claude-3-5-sonnet-20241022
414
+ SOUSCHEF_AI_API_KEY=your-api-key-here
415
+ SOUSCHEF_AI_BASE_URL=
416
+ SOUSCHEF_AI_PROJECT_ID=
417
+ SOUSCHEF_AI_TEMPERATURE=0.7
418
+ SOUSCHEF_AI_MAX_TOKENS=4000
419
+
420
+ # Streamlit Configuration (optional)
421
+ STREAMLIT_SERVER_PORT=9999
422
+ STREAMLIT_SERVER_HEADLESS=true
423
+ ```
424
+
425
+ **Supported AI Providers:**
426
+ - `Anthropic (Claude)` - Anthropic Claude models
427
+ - `OpenAI (GPT)` - OpenAI GPT models
428
+ - `IBM Watsonx` - IBM Watsonx AI models
429
+ - `Red Hat Lightspeed` - Red Hat Lightspeed models
430
+
431
+ **Environment Variables:**
432
+ - `SOUSCHEF_AI_PROVIDER` - AI provider name (required)
433
+ - `SOUSCHEF_AI_MODEL` - Model name (required)
434
+ - `SOUSCHEF_AI_API_KEY` - API key for authentication (required)
435
+ - `SOUSCHEF_AI_BASE_URL` - Custom API base URL (optional)
436
+ - `SOUSCHEF_AI_PROJECT_ID` - Project ID for Watsonx (optional)
437
+ - `SOUSCHEF_AI_TEMPERATURE` - Model temperature 0.0-2.0 (optional, default: 0.7)
438
+ - `SOUSCHEF_AI_MAX_TOKENS` - Maximum tokens to generate (optional, default: 4000)
439
+
361
440
  **Docker Compose (recommended for development):**
362
441
  ```yaml
363
442
  version: '3.8'
@@ -365,7 +444,14 @@ services:
365
444
  souschef-ui:
366
445
  build: .
367
446
  ports:
368
- - "8501:8501"
447
+ - "9999:9999"
448
+ env_file:
449
+ - .env
450
+ environment:
451
+ - PYTHONPATH=/app
452
+ - STREAMLIT_SERVER_ADDRESS=0.0.0.0
453
+ - STREAMLIT_SERVER_PORT=9999
454
+ - STREAMLIT_SERVER_HEADLESS=true
369
455
  restart: unless-stopped
370
456
  ```
371
457
 
@@ -636,6 +722,11 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
636
722
  - **Interactive dependency mapping and visualization** with Plotly graphs and NetworkX analysis
637
723
  - **Real-time progress tracking** for all analysis operations with Streamlit progress bars
638
724
  - **Static graph visualization** with matplotlib for reports and documentation
725
+ - **Automated ERB to Jinja2 template conversion** - Converts Chef ERB templates to Ansible Jinja2 templates during cookbook conversion
726
+ - Converts ERB syntax to Jinja2: `<%= var %>` → `{{ var }}`, `<% if %>` → `{% if %}`
727
+ - Extracts template variables for validation and documentation
728
+ - Includes converted templates in downloadable playbook archives
729
+ - UI displays converted templates with variable lists and preview
639
730
 
640
731
  ### Planned
641
732
  - 📅 Enhanced graph layout algorithms for large dependency networks (force-directed, hierarchical)
@@ -1361,12 +1452,28 @@ The project includes several VS Code tasks:
1361
1452
 
1362
1453
  ## Contributing
1363
1454
 
1364
- Contributions are welcome! Please ensure:
1365
- 1. All tests pass
1366
- 2. Code coverage maintained at 90%+
1367
- 3. Code passes ruff linting
1368
- 4. All functions have type hints and docstrings
1369
- 5. Follow the development standards in `.github/copilot-instructions.md`
1455
+ Thank you for your interest in contributing to SousChef!
1456
+
1457
+ **Before you start**, please read the [**Architecture Guide**](docs/ARCHITECTURE.md) to understand where different code belongs and why. This is essential for understanding how to structure your contributions.
1458
+
1459
+ For complete contributing guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md), which includes:
1460
+ - Development setup instructions
1461
+ - Code standards and quality tools
1462
+ - Testing requirements and patterns
1463
+ - Commit conventions and PR process
1464
+ - Release procedures
1465
+
1466
+ **Quick Checklist for Contributions:**
1467
+ 1. Read [**docs/ARCHITECTURE.md**](docs/ARCHITECTURE.md) to understand module structure
1468
+ 2. Ensure all tests pass: `poetry run pytest`
1469
+ 3. Code passes linting: `poetry run ruff check .`
1470
+ 4. Code is formatted: `poetry run ruff format .`
1471
+ 5. Type hints are complete: `poetry run mypy souschef`
1472
+ 6. Coverage maintained at 90%+
1473
+ 7. All functions have docstrings
1474
+ 8. Follow [conventional commits](CONTRIBUTING.md#commit-message-format)
1475
+
1476
+ Questions? Check [ARCHITECTURE.md](docs/ARCHITECTURE.md) for module responsibilities or [CONTRIBUTING.md](CONTRIBUTING.md) for the full developer guide.
1370
1477
 
1371
1478
  ## License
1372
1479
 
@@ -1375,3 +1482,4 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
1375
1482
  ---
1376
1483
 
1377
1484
  **SousChef** - *Ansible automation, one recipe at a time.*
1485
+
@@ -1,38 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: mcp-souschef
3
- Version: 2.8.0
4
- Summary: AI-powered MCP server for Chef to Ansible conversion
5
- License: MIT
6
- License-File: LICENSE
7
- Keywords: chef,ansible,migration,infrastructure,automation,mcp,ai,conversion
8
- Author: SousChef Contributors
9
- Requires-Python: >=3.14,<4.0
10
- Classifier: Development Status :: 4 - Beta
11
- Classifier: Intended Audience :: Developers
12
- Classifier: Intended Audience :: System Administrators
13
- Classifier: License :: OSI Approved :: MIT License
14
- Classifier: Operating System :: OS Independent
15
- Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.14
17
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
- Classifier: Topic :: System :: Systems Administration
19
- Classifier: Topic :: Utilities
20
- Provides-Extra: ui
21
- Requires-Dist: anthropic (>=0.75.0)
22
- Requires-Dist: click (>=8.1.0)
23
- Requires-Dist: mcp (>=1.25.0)
24
- Requires-Dist: openai (>=1.0.0)
25
- Requires-Dist: pandas (>=2.0.0) ; extra == "ui"
26
- Requires-Dist: plotly (>=5.0.0)
27
- Requires-Dist: python-dotenv (>=1.2.1)
28
- Requires-Dist: pyyaml (>=6.0.0)
29
- Requires-Dist: streamlit (>=1.28.0)
30
- Requires-Dist: zod (>=0.8.0)
31
- Project-URL: Documentation, https://kpeacocke.github.io/souschef/
32
- Project-URL: Homepage, https://github.com/kpeacocke/souschef
33
- Project-URL: Repository, https://github.com/kpeacocke/souschef
34
- Description-Content-Type: text/markdown
35
-
36
1
  # Chef to Ansible migration - SousChef MCP
37
2
 
38
3
  An AI-powered MCP (Model Context Protocol) server that provides comprehensive Chef-to-Ansible migration capabilities for enterprise infrastructure transformation.
@@ -387,12 +352,55 @@ souschef ui --port 8080
387
352
  docker build -t souschef-ui .
388
353
 
389
354
  # Run the container
390
- docker run -p 8501:8501 souschef-ui
355
+ docker run -p 9999:9999 souschef-ui
391
356
 
392
357
  # Or use docker-compose
393
358
  docker-compose up
394
359
  ```
395
360
 
361
+ **Docker Environment Configuration:**
362
+
363
+ SousChef supports AI configuration via environment variables in Docker containers. Create a `.env` file in your project root:
364
+
365
+ ```bash
366
+ # Copy the example environment file
367
+ cp .env.example .env
368
+
369
+ # Edit with your AI provider settings
370
+ nano .env
371
+ ```
372
+
373
+ **Example .env file:**
374
+ ```dotenv
375
+ # AI Configuration
376
+ SOUSCHEF_AI_PROVIDER=Anthropic (Claude)
377
+ SOUSCHEF_AI_MODEL=claude-3-5-sonnet-20241022
378
+ SOUSCHEF_AI_API_KEY=your-api-key-here
379
+ SOUSCHEF_AI_BASE_URL=
380
+ SOUSCHEF_AI_PROJECT_ID=
381
+ SOUSCHEF_AI_TEMPERATURE=0.7
382
+ SOUSCHEF_AI_MAX_TOKENS=4000
383
+
384
+ # Streamlit Configuration (optional)
385
+ STREAMLIT_SERVER_PORT=9999
386
+ STREAMLIT_SERVER_HEADLESS=true
387
+ ```
388
+
389
+ **Supported AI Providers:**
390
+ - `Anthropic (Claude)` - Anthropic Claude models
391
+ - `OpenAI (GPT)` - OpenAI GPT models
392
+ - `IBM Watsonx` - IBM Watsonx AI models
393
+ - `Red Hat Lightspeed` - Red Hat Lightspeed models
394
+
395
+ **Environment Variables:**
396
+ - `SOUSCHEF_AI_PROVIDER` - AI provider name (required)
397
+ - `SOUSCHEF_AI_MODEL` - Model name (required)
398
+ - `SOUSCHEF_AI_API_KEY` - API key for authentication (required)
399
+ - `SOUSCHEF_AI_BASE_URL` - Custom API base URL (optional)
400
+ - `SOUSCHEF_AI_PROJECT_ID` - Project ID for Watsonx (optional)
401
+ - `SOUSCHEF_AI_TEMPERATURE` - Model temperature 0.0-2.0 (optional, default: 0.7)
402
+ - `SOUSCHEF_AI_MAX_TOKENS` - Maximum tokens to generate (optional, default: 4000)
403
+
396
404
  **Docker Compose (recommended for development):**
397
405
  ```yaml
398
406
  version: '3.8'
@@ -400,7 +408,14 @@ services:
400
408
  souschef-ui:
401
409
  build: .
402
410
  ports:
403
- - "8501:8501"
411
+ - "9999:9999"
412
+ env_file:
413
+ - .env
414
+ environment:
415
+ - PYTHONPATH=/app
416
+ - STREAMLIT_SERVER_ADDRESS=0.0.0.0
417
+ - STREAMLIT_SERVER_PORT=9999
418
+ - STREAMLIT_SERVER_HEADLESS=true
404
419
  restart: unless-stopped
405
420
  ```
406
421
 
@@ -671,6 +686,11 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
671
686
  - **Interactive dependency mapping and visualization** with Plotly graphs and NetworkX analysis
672
687
  - **Real-time progress tracking** for all analysis operations with Streamlit progress bars
673
688
  - **Static graph visualization** with matplotlib for reports and documentation
689
+ - **Automated ERB to Jinja2 template conversion** - Converts Chef ERB templates to Ansible Jinja2 templates during cookbook conversion
690
+ - Converts ERB syntax to Jinja2: `<%= var %>` → `{{ var }}`, `<% if %>` → `{% if %}`
691
+ - Extracts template variables for validation and documentation
692
+ - Includes converted templates in downloadable playbook archives
693
+ - UI displays converted templates with variable lists and preview
674
694
 
675
695
  ### Planned
676
696
  - 📅 Enhanced graph layout algorithms for large dependency networks (force-directed, hierarchical)
@@ -1396,12 +1416,28 @@ The project includes several VS Code tasks:
1396
1416
 
1397
1417
  ## Contributing
1398
1418
 
1399
- Contributions are welcome! Please ensure:
1400
- 1. All tests pass
1401
- 2. Code coverage maintained at 90%+
1402
- 3. Code passes ruff linting
1403
- 4. All functions have type hints and docstrings
1404
- 5. Follow the development standards in `.github/copilot-instructions.md`
1419
+ Thank you for your interest in contributing to SousChef!
1420
+
1421
+ **Before you start**, please read the [**Architecture Guide**](docs/ARCHITECTURE.md) to understand where different code belongs and why. This is essential for understanding how to structure your contributions.
1422
+
1423
+ For complete contributing guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md), which includes:
1424
+ - Development setup instructions
1425
+ - Code standards and quality tools
1426
+ - Testing requirements and patterns
1427
+ - Commit conventions and PR process
1428
+ - Release procedures
1429
+
1430
+ **Quick Checklist for Contributions:**
1431
+ 1. Read [**docs/ARCHITECTURE.md**](docs/ARCHITECTURE.md) to understand module structure
1432
+ 2. Ensure all tests pass: `poetry run pytest`
1433
+ 3. Code passes linting: `poetry run ruff check .`
1434
+ 4. Code is formatted: `poetry run ruff format .`
1435
+ 5. Type hints are complete: `poetry run mypy souschef`
1436
+ 6. Coverage maintained at 90%+
1437
+ 7. All functions have docstrings
1438
+ 8. Follow [conventional commits](CONTRIBUTING.md#commit-message-format)
1439
+
1440
+ Questions? Check [ARCHITECTURE.md](docs/ARCHITECTURE.md) for module responsibilities or [CONTRIBUTING.md](CONTRIBUTING.md) for the full developer guide.
1405
1441
 
1406
1442
  ## License
1407
1443
 
@@ -1410,4 +1446,3 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
1410
1446
  ---
1411
1447
 
1412
1448
  **SousChef** - *Ansible automation, one recipe at a time.*
1413
-
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "mcp-souschef"
3
- version = "2.8.0"
3
+ version = "3.0.0"
4
4
  description = "AI-powered MCP server for Chef to Ansible conversion"
5
5
  readme = "README.md"
6
6
  homepage = "https://github.com/kpeacocke/souschef"
@@ -10,12 +10,12 @@ keywords = ["chef", "ansible", "migration", "infrastructure", "automation", "mcp
10
10
  authors = ["SousChef Contributors"]
11
11
  license = "MIT"
12
12
  packages = [{include = "souschef"}]
13
- classifiers = ["Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.14", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Systems Administration", "Topic :: Utilities"]
13
+ classifiers = ["Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Systems Administration", "Topic :: Utilities"]
14
14
 
15
15
  [tool.poetry.urls]
16
16
 
17
17
  [tool.poetry.dependencies]
18
- python = ">=3.14,<4.0"
18
+ python = ">=3.13,<4.0"
19
19
  anthropic = ">=0.75.0"
20
20
  openai = ">=1.0.0"
21
21
  click = ">=8.1.0"
@@ -50,7 +50,7 @@ mkdocstrings = {extras = ["python"], version = ">=0.26,<1.1"}
50
50
  mkdocs-git-revision-date-localized-plugin = "^1.2.0"
51
51
  streamlit = "^1.28.0"
52
52
  networkx = "^3.2.0"
53
- plotly = "^5.17.0"
53
+ plotly = ">=5.17,<7.0"
54
54
  matplotlib = "^3.8.0"
55
55
  types-networkx = "^3.6.1.20251220"
56
56
 
@@ -79,6 +79,8 @@ ignore = ["D100", "D104", "D105", "D107", "D203", "D212"]
79
79
  "souschef/parsers/validation.py" = ["E501"] # Long lines in validation messages
80
80
  "souschef/converters/resource.py" = ["C901"] # Allow complex function for resource conversion logic
81
81
  "souschef/deployment.py" = ["ISC003"] # Allow explicit string concatenation
82
+ "souschef/ui/app.py" = ["E402"] # Allow imports after path manipulation
83
+ "souschef/ui/pages/cookbook_analysis.py" = ["C901"] # Allow complex functions in UI code
82
84
 
83
85
  [tool.pytest.ini_options]
84
86
  minversion = "6.0"
@@ -116,7 +118,7 @@ source = [
116
118
  backup = false
117
119
 
118
120
  [tool.mypy]
119
- python_version = "3.14"
121
+ python_version = "3.13"
120
122
  warn_return_any = true
121
123
  warn_unused_configs = true
122
124
  disallow_untyped_defs = false
@@ -130,3 +132,10 @@ no_implicit_optional = true
130
132
  module = "tests.*"
131
133
  disallow_untyped_defs = false
132
134
  check_untyped_defs = false
135
+
136
+ [[tool.mypy.overrides]]
137
+ module = [
138
+ "plotly.*",
139
+ "streamlit.*",
140
+ ]
141
+ ignore_missing_imports = true
@@ -0,0 +1,57 @@
1
+ """SousChef: AI-powered Chef to Ansible converter."""
2
+
3
+ from pathlib import Path
4
+
5
+ import tomllib
6
+
7
+
8
+ # Read version from pyproject.toml
9
+ def _get_version() -> str:
10
+ """Get version from pyproject.toml."""
11
+ pyproject_path = Path(__file__).parent.parent / "pyproject.toml"
12
+ try:
13
+ with pyproject_path.open("rb") as f:
14
+ data = tomllib.load(f)
15
+ version = data.get("tool", {}).get("poetry", {}).get("version")
16
+ return str(version) if version else "unknown"
17
+ except OSError:
18
+ return "unknown"
19
+
20
+
21
+ __version__ = _get_version()
22
+
23
+ from souschef.assessment import ( # noqa: E402
24
+ analyse_cookbook_dependencies,
25
+ assess_chef_migration_complexity,
26
+ generate_migration_plan,
27
+ generate_migration_report,
28
+ validate_conversion,
29
+ )
30
+ from souschef.deployment import ( # noqa: E402
31
+ analyse_chef_application_patterns,
32
+ )
33
+
34
+ # Import server functions only if MCP is available
35
+ try:
36
+ from souschef.server import (
37
+ analyse_chef_search_patterns,
38
+ )
39
+
40
+ _server_available = True
41
+ except ImportError:
42
+ _server_available = False
43
+
44
+ # Define a placeholder function for when MCP is not available
45
+ def analyse_chef_search_patterns(*args, **kwargs):
46
+ raise NotImplementedError("MCP server not available")
47
+
48
+
49
+ __all__ = [
50
+ "analyse_cookbook_dependencies",
51
+ "assess_chef_migration_complexity",
52
+ "generate_migration_plan",
53
+ "generate_migration_report",
54
+ "validate_conversion",
55
+ "analyse_chef_application_patterns",
56
+ "analyse_chef_search_patterns",
57
+ ]