simplicio-cli 0.5.16__tar.gz → 0.5.17__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 (394) hide show
  1. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/PKG-INFO +10 -13
  2. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/README.md +9 -12
  3. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/pyproject.toml +1 -1
  4. simplicio_cli-0.5.17/simplicio/__init__.py +1 -0
  5. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/cli.py +23 -7
  6. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/doctor.py +31 -32
  7. simplicio_cli-0.5.17/simplicio/local_models.py +243 -0
  8. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/providers.py +48 -77
  9. simplicio_cli-0.5.17/simplicio/templates/stacks/py-cli/tree/src/app/__pycache__/__init__.cpython-312.pyc +0 -0
  10. simplicio_cli-0.5.17/simplicio/templates/stacks/py-cli/tree/src/app/__pycache__/cli.cpython-312.pyc +0 -0
  11. simplicio_cli-0.5.17/simplicio/templates/stacks/py-cli/tree/tests/__pycache__/test_cli.cpython-312.pyc +0 -0
  12. simplicio_cli-0.5.17/simplicio/templates/stacks/py-django/tree/__pycache__/manage.cpython-312.pyc +0 -0
  13. simplicio_cli-0.5.17/simplicio/templates/stacks/py-django/tree/app/__pycache__/__init__.cpython-312.pyc +0 -0
  14. simplicio_cli-0.5.17/simplicio/templates/stacks/py-django/tree/app/__pycache__/apps.cpython-312.pyc +0 -0
  15. simplicio_cli-0.5.17/simplicio/templates/stacks/py-django/tree/app/__pycache__/tests.cpython-312.pyc +0 -0
  16. simplicio_cli-0.5.17/simplicio/templates/stacks/py-django/tree/app/__pycache__/views.cpython-312.pyc +0 -0
  17. simplicio_cli-0.5.17/simplicio/templates/stacks/py-django/tree/config/__pycache__/__init__.cpython-312.pyc +0 -0
  18. simplicio_cli-0.5.17/simplicio/templates/stacks/py-django/tree/config/__pycache__/asgi.cpython-312.pyc +0 -0
  19. simplicio_cli-0.5.17/simplicio/templates/stacks/py-django/tree/config/__pycache__/settings.cpython-312.pyc +0 -0
  20. simplicio_cli-0.5.17/simplicio/templates/stacks/py-django/tree/config/__pycache__/urls.cpython-312.pyc +0 -0
  21. simplicio_cli-0.5.17/simplicio/templates/stacks/py-django/tree/config/__pycache__/wsgi.cpython-312.pyc +0 -0
  22. simplicio_cli-0.5.17/simplicio/templates/stacks/py-fastapi/tree/src/__pycache__/main.cpython-312.pyc +0 -0
  23. simplicio_cli-0.5.17/simplicio/templates/stacks/py-fastapi/tree/src/api/__pycache__/__init__.cpython-312.pyc +0 -0
  24. simplicio_cli-0.5.17/simplicio/templates/stacks/py-fastapi/tree/tests/__pycache__/test_health.cpython-312.pyc +0 -0
  25. simplicio_cli-0.5.17/simplicio/templates/stacks/py-flask/tree/src/__pycache__/app.cpython-312.pyc +0 -0
  26. simplicio_cli-0.5.17/simplicio/templates/stacks/py-flask/tree/tests/__pycache__/test_health.cpython-312.pyc +0 -0
  27. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio_cli.egg-info/PKG-INFO +10 -13
  28. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio_cli.egg-info/SOURCES.txt +18 -0
  29. simplicio_cli-0.5.16/simplicio/__init__.py +0 -1
  30. simplicio_cli-0.5.16/simplicio/local_models.py +0 -213
  31. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/LICENSE +0 -0
  32. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/setup.cfg +0 -0
  33. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/_cache.py +0 -0
  34. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/adaptive.py +0 -0
  35. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/bench.py +0 -0
  36. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/cache.py +0 -0
  37. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/cache_cli.py +0 -0
  38. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/detect.py +0 -0
  39. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/dod.py +0 -0
  40. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/ecosystem.py +0 -0
  41. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/hardware.py +0 -0
  42. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/init.py +0 -0
  43. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/intent.py +0 -0
  44. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/mapper.py +0 -0
  45. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/observability.py +0 -0
  46. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/orchestrator/__init__.py +0 -0
  47. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/orchestrator/cost_governor.py +0 -0
  48. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/orchestrator/feature.py +0 -0
  49. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/pipeline.py +0 -0
  50. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/pipeline_fixers.py +0 -0
  51. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/precedent.py +0 -0
  52. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/prompt.py +0 -0
  53. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/runtime_env.py +0 -0
  54. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/__init__.py +0 -0
  55. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/_pipeline_adapter.py +0 -0
  56. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/cli.py +0 -0
  57. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/__init__.py +0 -0
  58. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/go_gin.py +0 -0
  59. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/markdown_document.py +0 -0
  60. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/php_laravel.py +0 -0
  61. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/python_cst.py +0 -0
  62. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/python_fastapi.py +0 -0
  63. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/python_orm.py +0 -0
  64. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/python_pydantic.py +0 -0
  65. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/python_pytest.py +0 -0
  66. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/registry.py +0 -0
  67. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/rust_axum.py +0 -0
  68. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/types.py +0 -0
  69. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/typescript_next_page.py +0 -0
  70. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/codegen/typescript_next_route.py +0 -0
  71. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/executor.py +0 -0
  72. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/plan_schema.py +0 -0
  73. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/planner.py +0 -0
  74. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/recipes.py +0 -0
  75. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/skill_opt.py +0 -0
  76. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/scratch/stack_registry.py +0 -0
  77. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/skill_router.py +0 -0
  78. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/sprint_loader.py +0 -0
  79. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/SKILL.md +0 -0
  80. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/recipes/go-gin/crud-resource.yaml +0 -0
  81. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/recipes/php-laravel/crud-resource.yaml +0 -0
  82. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/recipes/php-vanilla/docs-marker.yaml +0 -0
  83. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/recipes/py-fastapi/admin-crud.yaml +0 -0
  84. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/recipes/py-fastapi/auth-jwt.yaml +0 -0
  85. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/recipes/py-fastapi/crud-resource.yaml +0 -0
  86. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/recipes/rust-axum/crud-resource.yaml +0 -0
  87. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/recipes/ts-nextjs/admin-crud.yaml +0 -0
  88. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/recipes/ts-nextjs/auth-jwt.yaml +0 -0
  89. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/recipes/ts-nextjs/crud-resource.yaml +0 -0
  90. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/simplicio_prompt.md +0 -0
  91. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/bash-cli/README.md +0 -0
  92. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/bash-cli/practices.md +0 -0
  93. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/bash-cli/stack.json +0 -0
  94. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/bash-cli/tree/README.md +0 -0
  95. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/bash-cli/tree/bin/app.sh +0 -0
  96. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/bash-cli/tree/test/app.bats +0 -0
  97. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/bash-cli/verify.json +0 -0
  98. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-aspnet/README.md +0 -0
  99. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-aspnet/practices.md +0 -0
  100. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-aspnet/stack.json +0 -0
  101. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-aspnet/tree/README.md +0 -0
  102. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/App.Api.csproj +0 -0
  103. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/Program.cs +0 -0
  104. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/App.Tests.csproj +0 -0
  105. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/HealthTests.cs +0 -0
  106. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-aspnet/verify.json +0 -0
  107. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-blazor/README.md +0 -0
  108. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-blazor/practices.md +0 -0
  109. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-blazor/stack.json +0 -0
  110. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-blazor/tree/README.md +0 -0
  111. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/App.Web.csproj +0 -0
  112. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/App.razor +0 -0
  113. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/Pages/Home.razor +0 -0
  114. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Program.cs +0 -0
  115. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/App.Tests.csproj +0 -0
  116. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/HealthTests.cs +0 -0
  117. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/csharp-blazor/verify.json +0 -0
  118. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/dart-flutter/README.md +0 -0
  119. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/dart-flutter/practices.md +0 -0
  120. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/dart-flutter/stack.json +0 -0
  121. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/dart-flutter/tree/README.md +0 -0
  122. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/dart-flutter/tree/lib/main.dart +0 -0
  123. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/dart-flutter/tree/pubspec.yaml +0 -0
  124. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/dart-flutter/tree/test/widget_test.dart +0 -0
  125. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/dart-flutter/verify.json +0 -0
  126. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/README.md +0 -0
  127. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/practices.md +0 -0
  128. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/stack.json +0 -0
  129. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/tree/README.md +0 -0
  130. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/tree/config/config.exs +0 -0
  131. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app/application.ex +0 -0
  132. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/controllers/health_controller.ex +0 -0
  133. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/endpoint.ex +0 -0
  134. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/router.ex +0 -0
  135. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/tree/mix.exs +0 -0
  136. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/tree/test/health_controller_test.exs +0 -0
  137. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/tree/test/test_helper.exs +0 -0
  138. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/elixir-phoenix/verify.json +0 -0
  139. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-cli/README.md +0 -0
  140. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-cli/practices.md +0 -0
  141. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-cli/stack.json +0 -0
  142. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-cli/tree/README.md +0 -0
  143. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-cli/tree/cmd/root.go +0 -0
  144. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-cli/tree/cmd/root_test.go +0 -0
  145. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-cli/tree/go.mod +0 -0
  146. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-cli/tree/main.go +0 -0
  147. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-cli/verify.json +0 -0
  148. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-echo/README.md +0 -0
  149. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-echo/practices.md +0 -0
  150. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-echo/stack.json +0 -0
  151. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-echo/tree/README.md +0 -0
  152. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-echo/tree/cmd/server/main.go +0 -0
  153. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-echo/tree/go.mod +0 -0
  154. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-echo/tree/internal/http/router.go +0 -0
  155. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-echo/tree/internal/http/router_test.go +0 -0
  156. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-echo/verify.json +0 -0
  157. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-gin/README.md +0 -0
  158. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-gin/practices.md +0 -0
  159. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-gin/stack.json +0 -0
  160. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-gin/tree/README.md +0 -0
  161. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-gin/tree/cmd/server/main.go +0 -0
  162. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-gin/tree/go.mod +0 -0
  163. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-gin/tree/internal/http/router.go +0 -0
  164. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-gin/tree/internal/http/router_test.go +0 -0
  165. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/go-gin/verify.json +0 -0
  166. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/java-spring/README.md +0 -0
  167. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/java-spring/practices.md +0 -0
  168. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/java-spring/stack.json +0 -0
  169. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/java-spring/tree/README.md +0 -0
  170. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/java-spring/tree/build.gradle.kts +0 -0
  171. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/java-spring/tree/settings.gradle.kts +0 -0
  172. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/Application.java +0 -0
  173. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/HealthController.java +0 -0
  174. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/java-spring/tree/src/test/java/com/example/HealthControllerTest.java +0 -0
  175. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/java-spring/verify.json +0 -0
  176. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/js-express/README.md +0 -0
  177. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/js-express/practices.md +0 -0
  178. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/js-express/stack.json +0 -0
  179. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/js-express/tree/README.md +0 -0
  180. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/js-express/tree/package.json +0 -0
  181. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/js-express/tree/src/app.js +0 -0
  182. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/js-express/tree/src/server.js +0 -0
  183. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/js-express/tree/tests/health.test.js +0 -0
  184. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/js-express/verify.json +0 -0
  185. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/README.md +0 -0
  186. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/practices.md +0 -0
  187. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/stack.json +0 -0
  188. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/tree/README.md +0 -0
  189. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/tree/app/build.gradle.kts +0 -0
  190. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/AndroidManifest.xml +0 -0
  191. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/java/com/example/app/MainActivity.kt +0 -0
  192. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/res/values/styles.xml +0 -0
  193. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/tree/app/src/test/java/com/example/app/SmokeTest.kt +0 -0
  194. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/tree/build.gradle.kts +0 -0
  195. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/tree/settings.gradle.kts +0 -0
  196. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-android/verify.json +0 -0
  197. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-ktor/README.md +0 -0
  198. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-ktor/practices.md +0 -0
  199. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-ktor/stack.json +0 -0
  200. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-ktor/tree/README.md +0 -0
  201. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-ktor/tree/build.gradle.kts +0 -0
  202. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-ktor/tree/settings.gradle.kts +0 -0
  203. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-ktor/tree/src/main/kotlin/com/example/Application.kt +0 -0
  204. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-ktor/tree/src/test/kotlin/com/example/ApplicationTest.kt +0 -0
  205. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-ktor/verify.json +0 -0
  206. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-spring/README.md +0 -0
  207. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-spring/practices.md +0 -0
  208. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-spring/stack.json +0 -0
  209. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-spring/tree/README.md +0 -0
  210. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-spring/tree/build.gradle.kts +0 -0
  211. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-spring/tree/settings.gradle.kts +0 -0
  212. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/Application.kt +0 -0
  213. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/HealthController.kt +0 -0
  214. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-spring/tree/src/test/kotlin/com/example/HealthControllerTest.kt +0 -0
  215. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/kotlin-spring/verify.json +0 -0
  216. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/README.md +0 -0
  217. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/practices.md +0 -0
  218. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/stack.json +0 -0
  219. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/tree/README.md +0 -0
  220. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/tree/artisan +0 -0
  221. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/tree/bootstrap/app.php +0 -0
  222. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/tree/composer.json +0 -0
  223. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/tree/phpunit.xml +0 -0
  224. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/tree/routes/api.php +0 -0
  225. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/tree/routes/console.php +0 -0
  226. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/tree/tests/Feature/HealthTest.php +0 -0
  227. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/tree/tests/TestCase.php +0 -0
  228. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-laravel/verify.json +0 -0
  229. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-symfony/README.md +0 -0
  230. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-symfony/practices.md +0 -0
  231. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-symfony/stack.json +0 -0
  232. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-symfony/tree/README.md +0 -0
  233. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-symfony/tree/composer.json +0 -0
  234. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-symfony/tree/src/Controller/HealthController.php +0 -0
  235. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-symfony/tree/tests/HealthControllerTest.php +0 -0
  236. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-symfony/verify.json +0 -0
  237. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-vanilla/README.md +0 -0
  238. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-vanilla/practices.md +0 -0
  239. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-vanilla/stack.json +0 -0
  240. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-vanilla/tree/README.md +0 -0
  241. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-vanilla/tree/composer.json +0 -0
  242. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-vanilla/tree/phpunit.xml +0 -0
  243. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-vanilla/tree/src/Health.php +0 -0
  244. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-vanilla/tree/tests/HealthTest.php +0 -0
  245. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/php-vanilla/verify.json +0 -0
  246. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-cli/README.md +0 -0
  247. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-cli/practices.md +0 -0
  248. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-cli/stack.json +0 -0
  249. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-cli/tree/README.md +0 -0
  250. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-cli/tree/pyproject.toml +0 -0
  251. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-cli/tree/src/app/__init__.py +0 -0
  252. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-cli/tree/src/app/cli.py +0 -0
  253. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-cli/tree/tests/test_cli.py +0 -0
  254. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-cli/verify.json +0 -0
  255. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/README.md +0 -0
  256. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/practices.md +0 -0
  257. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/stack.json +0 -0
  258. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/README.md +0 -0
  259. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/app/__init__.py +0 -0
  260. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/app/apps.py +0 -0
  261. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/app/tests.py +0 -0
  262. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/app/views.py +0 -0
  263. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/config/__init__.py +0 -0
  264. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/config/asgi.py +0 -0
  265. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/config/settings.py +0 -0
  266. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/config/urls.py +0 -0
  267. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/config/wsgi.py +0 -0
  268. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/manage.py +0 -0
  269. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/tree/pyproject.toml +0 -0
  270. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-django/verify.json +0 -0
  271. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-fastapi/README.md +0 -0
  272. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-fastapi/practices.md +0 -0
  273. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-fastapi/stack.json +0 -0
  274. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-fastapi/tree/.gitignore +0 -0
  275. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-fastapi/tree/README.template.md +0 -0
  276. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-fastapi/tree/pyproject.toml +0 -0
  277. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-fastapi/tree/ruff.toml +0 -0
  278. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-fastapi/tree/src/api/__init__.py +0 -0
  279. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-fastapi/tree/src/main.py +0 -0
  280. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-fastapi/tree/tests/test_health.py +0 -0
  281. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-fastapi/verify.json +0 -0
  282. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-flask/README.md +0 -0
  283. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-flask/practices.md +0 -0
  284. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-flask/stack.json +0 -0
  285. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-flask/tree/README.md +0 -0
  286. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-flask/tree/pyproject.toml +0 -0
  287. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-flask/tree/ruff.toml +0 -0
  288. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-flask/tree/src/app.py +0 -0
  289. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-flask/tree/tests/test_health.py +0 -0
  290. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/py-flask/verify.json +0 -0
  291. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/react-vite/README.md +0 -0
  292. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/react-vite/practices.md +0 -0
  293. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/react-vite/stack.json +0 -0
  294. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/react-vite/tree/README.md +0 -0
  295. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/react-vite/tree/index.html +0 -0
  296. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/react-vite/tree/package.json +0 -0
  297. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/react-vite/tree/src/App.test.tsx +0 -0
  298. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/react-vite/tree/src/App.tsx +0 -0
  299. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/react-vite/tree/src/main.tsx +0 -0
  300. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/react-vite/tree/tsconfig.json +0 -0
  301. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/react-vite/verify.json +0 -0
  302. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/README.md +0 -0
  303. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/practices.md +0 -0
  304. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/stack.json +0 -0
  305. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/tree/Gemfile +0 -0
  306. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/tree/README.md +0 -0
  307. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/tree/app/controllers/health_controller.rb +0 -0
  308. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/tree/bin/rails +0 -0
  309. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/tree/config/application.rb +0 -0
  310. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/tree/config/boot.rb +0 -0
  311. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/tree/config/routes.rb +0 -0
  312. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/tree/test/controllers/health_controller_test.rb +0 -0
  313. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/tree/test/test_helper.rb +0 -0
  314. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ruby-rails/verify.json +0 -0
  315. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-axum/README.md +0 -0
  316. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-axum/practices.md +0 -0
  317. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-axum/stack.json +0 -0
  318. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-axum/tree/Cargo.toml +0 -0
  319. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-axum/tree/README.md +0 -0
  320. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-axum/tree/src/main.rs +0 -0
  321. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-axum/verify.json +0 -0
  322. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-cli/README.md +0 -0
  323. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-cli/practices.md +0 -0
  324. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-cli/stack.json +0 -0
  325. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-cli/tree/Cargo.toml +0 -0
  326. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-cli/tree/README.md +0 -0
  327. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-cli/tree/src/main.rs +0 -0
  328. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-cli/verify.json +0 -0
  329. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-leptos/README.md +0 -0
  330. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-leptos/practices.md +0 -0
  331. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-leptos/stack.json +0 -0
  332. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-leptos/tree/Cargo.toml +0 -0
  333. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-leptos/tree/README.md +0 -0
  334. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-leptos/tree/src/main.rs +0 -0
  335. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/rust-leptos/verify.json +0 -0
  336. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-ios/README.md +0 -0
  337. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-ios/practices.md +0 -0
  338. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-ios/stack.json +0 -0
  339. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-ios/tree/README.md +0 -0
  340. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-ios/tree/Sources/App/App.swift +0 -0
  341. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-ios/tree/Sources/App/ContentView.swift +0 -0
  342. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-ios/tree/Tests/AppTests/AppTests.swift +0 -0
  343. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-ios/verify.json +0 -0
  344. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-vapor/README.md +0 -0
  345. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-vapor/practices.md +0 -0
  346. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-vapor/stack.json +0 -0
  347. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-vapor/tree/Package.swift +0 -0
  348. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-vapor/tree/README.md +0 -0
  349. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-vapor/tree/Sources/App/main.swift +0 -0
  350. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-vapor/tree/Tests/AppTests/HealthTests.swift +0 -0
  351. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/swift-vapor/verify.json +0 -0
  352. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nestjs/README.md +0 -0
  353. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nestjs/practices.md +0 -0
  354. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nestjs/stack.json +0 -0
  355. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nestjs/tree/README.md +0 -0
  356. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nestjs/tree/package.json +0 -0
  357. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.spec.ts +0 -0
  358. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.ts +0 -0
  359. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nestjs/tree/src/app.module.ts +0 -0
  360. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nestjs/tree/src/main.ts +0 -0
  361. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nestjs/tree/tsconfig.json +0 -0
  362. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nestjs/verify.json +0 -0
  363. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/README.md +0 -0
  364. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/practices.md +0 -0
  365. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/stack.json +0 -0
  366. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/tree/.eslintrc.json +0 -0
  367. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/tree/.gitignore +0 -0
  368. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/tree/next.config.mjs +0 -0
  369. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/tree/package.json +0 -0
  370. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/tree/pnpm-workspace.yaml +0 -0
  371. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/tree/src/app/layout.tsx +0 -0
  372. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/tree/src/app/page.tsx +0 -0
  373. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/tree/tsconfig.json +0 -0
  374. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-nextjs/verify.json +0 -0
  375. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-remix/README.md +0 -0
  376. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-remix/practices.md +0 -0
  377. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-remix/stack.json +0 -0
  378. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-remix/tree/README.md +0 -0
  379. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-remix/tree/app/root.tsx +0 -0
  380. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-remix/tree/app/routes/_index.tsx +0 -0
  381. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.test.ts +0 -0
  382. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.ts +0 -0
  383. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-remix/tree/package.json +0 -0
  384. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-remix/tree/tsconfig.json +0 -0
  385. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/stacks/ts-remix/verify.json +0 -0
  386. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/templates/userpromptsubmit-hook.sh +0 -0
  387. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/utils/__init__.py +0 -0
  388. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/utils/cache.py +0 -0
  389. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/utils/http_client.py +0 -0
  390. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio/utils/serialization.py +0 -0
  391. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio_cli.egg-info/dependency_links.txt +0 -0
  392. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio_cli.egg-info/entry_points.txt +0 -0
  393. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio_cli.egg-info/requires.txt +0 -0
  394. {simplicio_cli-0.5.16 → simplicio_cli-0.5.17}/simplicio_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simplicio-cli
3
- Version: 0.5.16
3
+ Version: 0.5.17
4
4
  Summary: Portable task-to-code pipeline that works with any LLM. Turn a one-line task into a verified code change — diff + test + verify loop. +55 pts on a 156-check benchmark, 21% faster, ~same tokens.
5
5
  Author-email: Wesley Simplicio <wesleybob4@gmail.com>
6
6
  License: MIT
@@ -655,8 +655,7 @@ user prompt. UserPromptSubmit is the right pre-hook for routing decisions.
655
655
  | GLM (z.ai) | `glm-4.6` | `https://api.z.ai/api/paas/v4` |
656
656
  | DeepSeek | `deepseek-chat` | `https://api.deepseek.com` |
657
657
  | OpenAI | `gpt-4.1` | `https://api.openai.com/v1` |
658
- | Local (Ollama) | `openbmb/minicpm5:latest` | `http://localhost:11434/v1` |
659
- | Local (in-process) | `local-llama/default` | *(leave unset)* |
658
+ | Local (llama.cpp) | `local-llama/default` | *(leave unset)* |
660
659
  | Anthropic native | `claude-opus-4-7` | *(leave unset)* |
661
660
 
662
661
  If `SIMPLICIO_BASE_URL` is unset and the key is `ANTHROPIC_API_KEY`, it uses the
@@ -667,30 +666,28 @@ your `base_url` — so **any** OpenAI-like provider works without code changes.
667
666
  simplicio smoke # prints provider config + one test call
668
667
  ```
669
668
 
670
- #### Path 4 — local Ollama primary with GGUF fallback
669
+ #### Path 4 — local llama.cpp GGUF default
671
670
 
672
671
  When **no provider is configured** (`SIMPLICIO_MODEL` and
673
- `SIMPLICIO_BASE_URL` both unset), simplicio uses local Ollama with
674
- `openbmb/minicpm5:latest`. If that call fails, it falls back to the in-process
672
+ `SIMPLICIO_BASE_URL` both unset), simplicio runs the in-process
675
673
  [`llama-cpp-python`](https://github.com/abetlen/llama-cpp-python) backend with
676
- `Qwen_Qwen3.5-2B-Q6_K.gguf`.
674
+ `local-llama/default`, currently
675
+ `bartowski/Qwen_Qwen3.5-2B-GGUF::Qwen_Qwen3.5-2B-Q6_K.gguf`.
677
676
 
678
677
  ```bash
679
678
  pip install 'simplicio-cli[local]' # pulls llama-cpp-python + huggingface-hub
679
+ simplicio doctor --install # downloads/validates the default GGUF
680
680
 
681
681
  simplicio task "add input validation to createUser" \
682
- --target src/users.ts --local # forces local Ollama primary
682
+ --target src/users.ts --local # forces local llama.cpp
683
683
 
684
- # the fallback GGUF is fetched once from the Hugging Face Hub, then reused
684
+ # the GGUF is fetched once from the Hugging Face Hub, then reused
685
685
  ```
686
686
 
687
687
  Explicit routes (override the default model/weights):
688
688
 
689
689
  ```bash
690
- SIMPLICIO_MODEL=openbmb/minicpm5:latest
691
- SIMPLICIO_BASE_URL=http://localhost:11434/v1
692
- SIMPLICIO_API_KEY=ollama
693
- SIMPLICIO_MODEL=local-llama/default # Qwen_Qwen3.5-2B-Q6_K.gguf fallback
690
+ SIMPLICIO_MODEL=local-llama/default # Qwen_Qwen3.5-2B-Q6_K.gguf default
694
691
  SIMPLICIO_MODEL=local-llama/bartowski/Qwen_Qwen3.5-2B-GGUF::Qwen_Qwen3.5-2B-Q6_K.gguf
695
692
  SIMPLICIO_MODEL=local-llama//models/my-model.gguf # direct local path
696
693
  SIMPLICIO_LOCAL_MODEL_PATH=/models/my-model.gguf # always wins
@@ -610,8 +610,7 @@ user prompt. UserPromptSubmit is the right pre-hook for routing decisions.
610
610
  | GLM (z.ai) | `glm-4.6` | `https://api.z.ai/api/paas/v4` |
611
611
  | DeepSeek | `deepseek-chat` | `https://api.deepseek.com` |
612
612
  | OpenAI | `gpt-4.1` | `https://api.openai.com/v1` |
613
- | Local (Ollama) | `openbmb/minicpm5:latest` | `http://localhost:11434/v1` |
614
- | Local (in-process) | `local-llama/default` | *(leave unset)* |
613
+ | Local (llama.cpp) | `local-llama/default` | *(leave unset)* |
615
614
  | Anthropic native | `claude-opus-4-7` | *(leave unset)* |
616
615
 
617
616
  If `SIMPLICIO_BASE_URL` is unset and the key is `ANTHROPIC_API_KEY`, it uses the
@@ -622,30 +621,28 @@ your `base_url` — so **any** OpenAI-like provider works without code changes.
622
621
  simplicio smoke # prints provider config + one test call
623
622
  ```
624
623
 
625
- #### Path 4 — local Ollama primary with GGUF fallback
624
+ #### Path 4 — local llama.cpp GGUF default
626
625
 
627
626
  When **no provider is configured** (`SIMPLICIO_MODEL` and
628
- `SIMPLICIO_BASE_URL` both unset), simplicio uses local Ollama with
629
- `openbmb/minicpm5:latest`. If that call fails, it falls back to the in-process
627
+ `SIMPLICIO_BASE_URL` both unset), simplicio runs the in-process
630
628
  [`llama-cpp-python`](https://github.com/abetlen/llama-cpp-python) backend with
631
- `Qwen_Qwen3.5-2B-Q6_K.gguf`.
629
+ `local-llama/default`, currently
630
+ `bartowski/Qwen_Qwen3.5-2B-GGUF::Qwen_Qwen3.5-2B-Q6_K.gguf`.
632
631
 
633
632
  ```bash
634
633
  pip install 'simplicio-cli[local]' # pulls llama-cpp-python + huggingface-hub
634
+ simplicio doctor --install # downloads/validates the default GGUF
635
635
 
636
636
  simplicio task "add input validation to createUser" \
637
- --target src/users.ts --local # forces local Ollama primary
637
+ --target src/users.ts --local # forces local llama.cpp
638
638
 
639
- # the fallback GGUF is fetched once from the Hugging Face Hub, then reused
639
+ # the GGUF is fetched once from the Hugging Face Hub, then reused
640
640
  ```
641
641
 
642
642
  Explicit routes (override the default model/weights):
643
643
 
644
644
  ```bash
645
- SIMPLICIO_MODEL=openbmb/minicpm5:latest
646
- SIMPLICIO_BASE_URL=http://localhost:11434/v1
647
- SIMPLICIO_API_KEY=ollama
648
- SIMPLICIO_MODEL=local-llama/default # Qwen_Qwen3.5-2B-Q6_K.gguf fallback
645
+ SIMPLICIO_MODEL=local-llama/default # Qwen_Qwen3.5-2B-Q6_K.gguf default
649
646
  SIMPLICIO_MODEL=local-llama/bartowski/Qwen_Qwen3.5-2B-GGUF::Qwen_Qwen3.5-2B-Q6_K.gguf
650
647
  SIMPLICIO_MODEL=local-llama//models/my-model.gguf # direct local path
651
648
  SIMPLICIO_LOCAL_MODEL_PATH=/models/my-model.gguf # always wins
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "simplicio-cli"
3
- version = "0.5.16"
3
+ version = "0.5.17"
4
4
  description = "Portable task-to-code pipeline that works with any LLM. Turn a one-line task into a verified code change — diff + test + verify loop. +55 pts on a 156-check benchmark, 21% faster, ~same tokens."
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -0,0 +1 @@
1
+ __version__ = "0.5.17"
@@ -91,8 +91,8 @@ def _add_task_args(p: argparse.ArgumentParser, *, target_required: bool) -> None
91
91
  p.add_argument(
92
92
  "--local",
93
93
  action="store_true",
94
- help="force local Ollama (openbmb/minicpm5:latest, no API key) "
95
- "with Qwen3.5 GGUF fallback; overrides SIMPLICIO_MODEL/SIMPLICIO_BASE_URL",
94
+ help="force local llama.cpp with Qwen3.5 GGUF; overrides "
95
+ "SIMPLICIO_MODEL/SIMPLICIO_BASE_URL",
96
96
  )
97
97
 
98
98
 
@@ -121,11 +121,11 @@ def _add_run_args(p: argparse.ArgumentParser) -> None:
121
121
 
122
122
  def _force_local_if_requested(a: argparse.Namespace) -> None:
123
123
  if getattr(a, "local", False):
124
- # Force Path 4: local Ollama primary. The provider layer falls back to
125
- # the local Qwen GGUF if the Ollama call fails.
126
- os.environ["SIMPLICIO_MODEL"] = "openbmb/minicpm5:latest"
127
- os.environ["SIMPLICIO_BASE_URL"] = "http://localhost:11434/v1"
128
- os.environ.setdefault("SIMPLICIO_API_KEY", "ollama")
124
+ # Force Path 4: local in-process llama.cpp. This keeps local execution
125
+ # independent from Ollama or any HTTP service.
126
+ os.environ["SIMPLICIO_MODEL"] = "local-llama/default"
127
+ os.environ.pop("SIMPLICIO_BASE_URL", None)
128
+ os.environ.pop("SIMPLICIO_API_KEY", None)
129
129
 
130
130
 
131
131
  def _run_task_command(a: argparse.Namespace) -> int:
@@ -609,6 +609,11 @@ def main(argv=None):
609
609
  p_status.add_argument("--root", default=".")
610
610
  p_status.add_argument("--json", action="store_true")
611
611
 
612
+ p_doctor = sub.add_parser("doctor", help="check local llama.cpp readiness")
613
+ p_doctor.add_argument("--install", action="store_true")
614
+ p_doctor.add_argument("--json", action="store_true")
615
+ p_doctor.add_argument("--list-tiers", action="store_true")
616
+
612
617
  p_env_export = sub.add_parser(
613
618
  "env-export",
614
619
  help="print shell-safe exports from a dotenv file without sourcing it",
@@ -678,6 +683,17 @@ def main(argv=None):
678
683
  return detect_main(detect_argv)
679
684
  elif a.cmd == "status":
680
685
  return _run_status_command(a)
686
+ elif a.cmd == "doctor":
687
+ from .doctor import main as doctor_main
688
+
689
+ doctor_argv = []
690
+ if a.install:
691
+ doctor_argv.append("--install")
692
+ if a.json:
693
+ doctor_argv.append("--json")
694
+ if a.list_tiers:
695
+ doctor_argv.append("--list-tiers")
696
+ return doctor_main(doctor_argv)
681
697
  elif a.cmd == "env-export":
682
698
  from .runtime_env import parse_env_file, shell_export_lines
683
699
 
@@ -1,7 +1,7 @@
1
1
  """doctor.py — `simplicio doctor` subcommand.
2
2
 
3
3
  Prints detected hardware tier + recommended local model + install status.
4
- With --install, opt-in to pulling the recommended model via Ollama. Without
4
+ With --install, opt-in to downloading the recommended GGUF. Without
5
5
  the flag, never touches the disk. With --json, machine-readable output.
6
6
  """
7
7
  from __future__ import annotations
@@ -14,9 +14,7 @@ from .hardware import detect
14
14
  from .local_models import (
15
15
  RECOMMENDATIONS,
16
16
  ensure_recommended,
17
- is_installed,
18
- ollama_list_installed,
19
- ollama_present,
17
+ model_file_path,
20
18
  )
21
19
 
22
20
 
@@ -34,46 +32,41 @@ def _render_human(result, profile) -> None:
34
32
  print()
35
33
  print("recommended doer model:")
36
34
  print(f" label {result.spec.label}")
37
- print(f" ollama id {result.spec.ollama_id}")
35
+ print(f" model id {result.spec.model_id}")
36
+ print(f" repo {result.spec.repo_id}")
37
+ print(f" file {result.spec.filename}")
38
+ print(f" path {model_file_path(result.spec)}")
38
39
  print(f" size (Q4) ~{result.spec.size_gb_q4:.1f} GB")
39
40
  print(f" notes {result.spec.notes}")
40
41
  print()
41
- print(f" ollama {'installed' if ollama_present() else 'NOT FOUND on PATH'}")
42
+ print(" runtime llama.cpp via llama-cpp-python")
42
43
  print(f" can run {'yes' if result.can_run else 'NO'}")
43
- print(f" can pull {'yes' if result.can_pull else 'NO'}")
44
+ print(f" can download {'yes' if result.can_download else 'NO'}")
44
45
  print(f" installed {'YES' if result.installed else 'no'}")
45
46
  if result.reason:
46
47
  print(f" status {result.reason}")
47
48
  print()
48
49
  if result.installed:
49
- print(" set SIMPLICIO_MODEL to use it:")
50
- print(f" export SIMPLICIO_MODEL={result.spec.ollama_id}")
51
- print(f" export SIMPLICIO_BASE_URL=http://localhost:11434/v1")
52
- print(f" export SIMPLICIO_API_KEY=ollama # any non-empty string works")
53
- elif result.can_pull:
54
- print("→ to install:")
50
+ print("-> set SIMPLICIO_MODEL to use it explicitly:")
51
+ print(f" export SIMPLICIO_MODEL={result.spec.model_id}")
52
+ print(" unset SIMPLICIO_BASE_URL SIMPLICIO_API_KEY")
53
+ elif result.can_download:
54
+ print("-> to install:")
55
55
  print(" simplicio doctor --install")
56
- print(f" (or manually: ollama pull {result.spec.ollama_id})")
57
- elif not ollama_present():
58
- print(" install Ollama first: https://ollama.ai")
56
+ print(
57
+ f" (or manually download {result.spec.repo_id}/{result.spec.filename} "
58
+ f"to {model_file_path(result.spec)})"
59
+ )
59
60
  else:
60
- print(" hardware is too small for the recommended model; "
61
+ print("-> hardware is too small for the recommended model; "
61
62
  "consider a smaller stack or move to cloud (SIMPLICIO_MODEL = "
62
63
  "OpenRouter/HF/etc.)")
63
64
 
64
- other_installed = [m for m in ollama_list_installed()
65
- if m != result.spec.ollama_id]
66
- if other_installed:
67
- print()
68
- print("other Ollama models you have installed:")
69
- for m in other_installed[:10]:
70
- print(f" - {m}")
71
-
72
65
 
73
66
  def main(argv: list[str] | None = None) -> int:
74
67
  p = argparse.ArgumentParser(prog="simplicio doctor")
75
68
  p.add_argument("--install", action="store_true",
76
- help="opt-in: pull the recommended model via Ollama if not present")
69
+ help="opt-in: download the recommended GGUF if not present")
77
70
  p.add_argument("--json", action="store_true",
78
71
  help="machine-readable output")
79
72
  p.add_argument("--list-tiers", action="store_true",
@@ -83,20 +76,26 @@ def main(argv: list[str] | None = None) -> int:
83
76
  if args.list_tiers:
84
77
  if args.json:
85
78
  print(json.dumps({
86
- tier: {"ollama_id": s.ollama_id, "label": s.label,
87
- "size_gb_q4": s.size_gb_q4, "notes": s.notes}
79
+ tier: {
80
+ "model_id": s.model_id,
81
+ "repo_id": s.repo_id,
82
+ "filename": s.filename,
83
+ "label": s.label,
84
+ "size_gb_q4": s.size_gb_q4,
85
+ "notes": s.notes,
86
+ }
88
87
  for tier, s in RECOMMENDATIONS.items()
89
88
  }, indent=2))
90
89
  else:
91
- print(f"{'tier':14s} {'size':>7s} ollama id")
90
+ print(f"{'tier':14s} {'size':>7s} model id")
92
91
  print("-" * 80)
93
92
  for tier, spec in RECOMMENDATIONS.items():
94
- print(f"{tier:14s} {spec.size_gb_q4:5.1f}GB {spec.ollama_id}")
95
- print(f" {spec.label} {spec.notes}")
93
+ print(f"{tier:14s} {spec.size_gb_q4:5.1f}GB {spec.model_id}")
94
+ print(f" -> {spec.label} - {spec.notes}")
96
95
  return 0
97
96
 
98
97
  profile = detect()
99
- result = ensure_recommended(profile, auto_pull=args.install)
98
+ result = ensure_recommended(profile, auto_download=args.install)
100
99
 
101
100
  if args.json:
102
101
  print(json.dumps(result.to_dict(), indent=2))
@@ -0,0 +1,243 @@
1
+ """local_models.py - hardware-tier -> llama.cpp GGUF recommendation.
2
+
3
+ Encodes the local LLM standard:
4
+
5
+ all tiers -> local-llama/default
6
+ bartowski/Qwen_Qwen3.5-2B-GGUF::Qwen_Qwen3.5-2B-Q6_K.gguf
7
+
8
+ The model runs in-process through llama-cpp-python. No Ollama daemon, pull, or
9
+ HTTP endpoint is required for the default local path.
10
+
11
+ Hard rule (issue #32 follow-up):
12
+ - NEVER auto-download a model that does not fit the detected tier.
13
+ - Downloads require explicit opt-in (SIMPLICIO_AUTO_DOWNLOAD=1 or
14
+ `simplicio doctor --install`). We tell the user the command and stop.
15
+ """
16
+ from __future__ import annotations
17
+
18
+ import os
19
+ from dataclasses import dataclass
20
+ from pathlib import Path
21
+
22
+ from .hardware import HardwareProfile
23
+ from .providers import (
24
+ LOCAL_DEFAULT_FILE as DEFAULT_LOCAL_FILE,
25
+ LOCAL_DEFAULT_REPO as DEFAULT_LOCAL_REPO,
26
+ LOCAL_EXECUTOR_DIR,
27
+ LOCAL_MODEL_PREFIX,
28
+ )
29
+
30
+
31
+ DEFAULT_LOCAL_MODEL_ID = f"{LOCAL_MODEL_PREFIX}default"
32
+ DEFAULT_LOCAL_LABEL = "Qwen3.5 2B Q6_K GGUF (llama.cpp)"
33
+ DEFAULT_LOCAL_SIZE_GB = 1.6
34
+ DEFAULT_LOCAL_NOTES = (
35
+ "canonical local doer; runs in-process with llama-cpp-python, no Ollama service"
36
+ )
37
+
38
+
39
+ @dataclass
40
+ class ModelSpec:
41
+ tier: str
42
+ model_id: str
43
+ repo_id: str
44
+ filename: str
45
+ size_gb_q4: float
46
+ label: str
47
+ notes: str = ""
48
+
49
+ @property
50
+ def ollama_id(self) -> str:
51
+ """Backward-compatible read alias for older callers."""
52
+ return self.model_id
53
+
54
+
55
+ RECOMMENDATIONS: dict[str, ModelSpec] = {
56
+ tier: ModelSpec(
57
+ tier,
58
+ DEFAULT_LOCAL_MODEL_ID,
59
+ DEFAULT_LOCAL_REPO,
60
+ DEFAULT_LOCAL_FILE,
61
+ DEFAULT_LOCAL_SIZE_GB,
62
+ DEFAULT_LOCAL_LABEL,
63
+ DEFAULT_LOCAL_NOTES,
64
+ )
65
+ for tier in ("cpu-tiny", "cpu-small", "gpu-mid", "gpu-large", "gpu-xlarge", "unknown")
66
+ }
67
+
68
+
69
+ def local_model_dir() -> Path:
70
+ return Path(os.environ.get("SIMPLICIO_LOCAL_MODEL_DIR", LOCAL_EXECUTOR_DIR)).expanduser()
71
+
72
+
73
+ def model_file_path(spec: ModelSpec) -> Path:
74
+ override = os.environ.get("SIMPLICIO_LOCAL_MODEL_PATH")
75
+ if override:
76
+ return Path(override).expanduser()
77
+ return local_model_dir() / spec.filename
78
+
79
+
80
+ def _is_gguf_file(path: Path) -> bool:
81
+ try:
82
+ with path.open("rb") as handle:
83
+ return handle.read(4) == b"GGUF"
84
+ except OSError:
85
+ return False
86
+
87
+
88
+ def model_file_present(spec: ModelSpec) -> bool:
89
+ return _is_gguf_file(model_file_path(spec))
90
+
91
+
92
+ def is_installed(spec: ModelSpec | str) -> bool:
93
+ if isinstance(spec, ModelSpec):
94
+ return model_file_present(spec)
95
+ if spec.endswith(".gguf"):
96
+ return _is_gguf_file(local_model_dir() / spec)
97
+ if spec == DEFAULT_LOCAL_MODEL_ID:
98
+ return model_file_present(RECOMMENDATIONS["unknown"])
99
+ return False
100
+
101
+
102
+ def download(spec: ModelSpec) -> tuple[bool, str]:
103
+ """Download the recommended GGUF into the executor model directory."""
104
+ try:
105
+ from huggingface_hub import hf_hub_download
106
+ except ImportError:
107
+ return (
108
+ False,
109
+ "huggingface-hub not installed. Install extras: pip install 'simplicio-cli[local]'",
110
+ )
111
+
112
+ target_dir = local_model_dir()
113
+ target_dir.mkdir(parents=True, exist_ok=True)
114
+ try:
115
+ path = Path(
116
+ hf_hub_download(
117
+ repo_id=spec.repo_id,
118
+ filename=spec.filename,
119
+ local_dir=str(target_dir),
120
+ )
121
+ )
122
+ except Exception as exc: # noqa: BLE001 - rendered as CLI status
123
+ return False, str(exc)
124
+ if not _is_gguf_file(path):
125
+ return False, f"{path} is not a valid GGUF file"
126
+ return True, str(path)
127
+
128
+
129
+ @dataclass
130
+ class RecommendationResult:
131
+ spec: ModelSpec
132
+ profile: HardwareProfile
133
+ can_run: bool
134
+ can_download: bool
135
+ installed: bool
136
+ reason: str = ""
137
+
138
+ @property
139
+ def can_pull(self) -> bool:
140
+ """Backward-compatible read alias for older callers."""
141
+ return self.can_download
142
+
143
+ def to_dict(self) -> dict:
144
+ return {
145
+ "tier": self.spec.tier,
146
+ "model_id": self.spec.model_id,
147
+ "repo_id": self.spec.repo_id,
148
+ "filename": self.spec.filename,
149
+ "model_path": str(model_file_path(self.spec)),
150
+ "label": self.spec.label,
151
+ "size_gb_q4": self.spec.size_gb_q4,
152
+ "notes": self.spec.notes,
153
+ "ram_gb": round(self.profile.ram_gb, 1),
154
+ "vram_gb": round(self.profile.vram_gb, 1),
155
+ "gpu": self.profile.gpu_name,
156
+ "apple_silicon": self.profile.apple_silicon,
157
+ "can_run": self.can_run,
158
+ "can_download": self.can_download,
159
+ "installed": self.installed,
160
+ "reason": self.reason,
161
+ }
162
+
163
+
164
+ # Safety margin: refuse to download if the detected resource is not at least
165
+ # (size + margin). We do not want a local automation flow to fill disk/RAM with
166
+ # a model it cannot actually run.
167
+ _SAFETY_MARGIN_GB = 4.0
168
+
169
+
170
+ def evaluate(profile: HardwareProfile) -> RecommendationResult:
171
+ """Pick the local GGUF spec and decide whether the host can run/download it."""
172
+ spec = RECOMMENDATIONS.get(profile.tier, RECOMMENDATIONS["unknown"])
173
+
174
+ if profile.apple_silicon:
175
+ usable_gb = profile.ram_gb
176
+ else:
177
+ usable_gb = max(profile.vram_gb, profile.ram_gb)
178
+ needed_gb = spec.size_gb_q4 + _SAFETY_MARGIN_GB
179
+
180
+ can_run = usable_gb >= needed_gb
181
+ installed = is_installed(spec)
182
+ can_download = can_run and not installed
183
+ reason = ""
184
+ if not can_run:
185
+ reason = (
186
+ f"detected {usable_gb:.1f} GB usable < {needed_gb:.1f} GB "
187
+ f"required for {spec.label} (size {spec.size_gb_q4:.1f} GB + "
188
+ f"{_SAFETY_MARGIN_GB:.0f} GB safety margin)"
189
+ )
190
+ elif not installed:
191
+ reason = f"local GGUF not installed at {model_file_path(spec)}"
192
+
193
+ return RecommendationResult(
194
+ spec=spec,
195
+ profile=profile,
196
+ can_run=can_run,
197
+ can_download=can_download,
198
+ installed=installed,
199
+ reason=reason,
200
+ )
201
+
202
+
203
+ def ensure_recommended(
204
+ profile: HardwareProfile,
205
+ auto_download: bool = False,
206
+ *,
207
+ auto_pull: bool | None = None,
208
+ ) -> RecommendationResult:
209
+ """High-level orchestrator for the default local llama.cpp model.
210
+
211
+ If the recommended GGUF is missing and auto_download is true, download it.
212
+ Otherwise return a result the CLI can render so the user knows what to do.
213
+ `auto_pull` remains as a keyword-only alias for older code paths, but still
214
+ performs a GGUF download rather than any Ollama action.
215
+ """
216
+ if auto_pull is not None:
217
+ auto_download = auto_download or auto_pull
218
+
219
+ result = evaluate(profile)
220
+ if result.installed:
221
+ return result
222
+ if not result.can_download:
223
+ return result
224
+
225
+ do_download = auto_download or os.environ.get(
226
+ "SIMPLICIO_AUTO_DOWNLOAD", ""
227
+ ).strip() in ("1", "true", "True", "yes")
228
+ if not do_download:
229
+ result.reason = (
230
+ "model not installed - opt in to download with "
231
+ "`simplicio doctor --install` or `SIMPLICIO_AUTO_DOWNLOAD=1 ...` "
232
+ f"(will fetch ~{result.spec.size_gb_q4:.1f} GB)"
233
+ )
234
+ return result
235
+
236
+ ok, log = download(result.spec)
237
+ if ok:
238
+ result.installed = True
239
+ result.can_download = False
240
+ result.reason = f"downloaded GGUF to {log}"
241
+ else:
242
+ result.reason = f"GGUF download failed: {log[-300:]}"
243
+ return result