lemming-cli 0.5.1__tar.gz → 0.5.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 (191) hide show
  1. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/PKG-INFO +3 -3
  2. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/pyproject.toml +3 -3
  3. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/conftest.py +4 -8
  4. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/context_test.py +9 -6
  5. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/hooks_test.py +1 -0
  6. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/models_test.py +3 -1
  7. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/tasks/lifecycle_test.py +1 -0
  8. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/tasks/queries_test.py +1 -0
  9. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/uv.lock +9 -9
  10. lemming_cli-0.5.1/pyrefly.toml +0 -21
  11. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/.dockerignore +0 -0
  12. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/.github/workflows/ci.yml +0 -0
  13. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/.github/workflows/publish.yml +0 -0
  14. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/.github/workflows/screenshots.yml +0 -0
  15. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/.gitignore +0 -0
  16. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/.prettierignore +0 -0
  17. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/.prettierrc +0 -0
  18. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/Dockerfile +0 -0
  19. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/LICENSE +0 -0
  20. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/README.md +0 -0
  21. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/SKILL.md +0 -0
  22. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/biome.json +0 -0
  23. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/docker-compose.yml +0 -0
  24. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/docs/EVALS.md +0 -0
  25. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/docs/HOOKS.md +0 -0
  26. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/docs/screenshots/dashboard-desktop.png +0 -0
  27. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/docs/screenshots/dashboard-mobile.png +0 -0
  28. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/docs/screenshots/task-log-desktop.png +0 -0
  29. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/docs/screenshots/task-log-mobile.png +0 -0
  30. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/package-lock.json +0 -0
  31. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/package.json +0 -0
  32. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/playwright.config.js +0 -0
  33. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/__init__.py +0 -0
  34. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/__init__.py +0 -0
  35. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/auth.py +0 -0
  36. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/auth_test.py +0 -0
  37. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/config.py +0 -0
  38. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/config_test.py +0 -0
  39. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/context.py +0 -0
  40. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/directories.py +0 -0
  41. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/directories_test.py +0 -0
  42. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/files.py +0 -0
  43. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/files_test.py +0 -0
  44. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/hooks.py +0 -0
  45. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/hooks_test.py +0 -0
  46. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/logging.py +0 -0
  47. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/logging_test.py +0 -0
  48. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/loop.py +0 -0
  49. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/loop_test.py +0 -0
  50. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/main.py +0 -0
  51. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/main_test.py +0 -0
  52. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/tasks.py +0 -0
  53. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api/tasks_test.py +0 -0
  54. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/api_test.py +0 -0
  55. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/brief_test.py +0 -0
  56. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/__init__.py +0 -0
  57. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/brief.py +0 -0
  58. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/config.py +0 -0
  59. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/config_test.py +0 -0
  60. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/exec_cli.py +0 -0
  61. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/exec_cli_test.py +0 -0
  62. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/goal.py +0 -0
  63. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/goal_test.py +0 -0
  64. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/hooks.py +0 -0
  65. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/hooks_test.py +0 -0
  66. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/machine_output_test.py +0 -0
  67. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/main.py +0 -0
  68. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/main_test.py +0 -0
  69. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/operations.py +0 -0
  70. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/operations_test.py +0 -0
  71. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/progress.py +0 -0
  72. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/progress_test.py +0 -0
  73. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/readability_cli.py +0 -0
  74. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/readability_cli_test.py +0 -0
  75. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/skill.py +0 -0
  76. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/skill_test.py +0 -0
  77. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/stop_test.py +0 -0
  78. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/tasks.py +0 -0
  79. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli/tasks_test.py +0 -0
  80. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/cli_test.py +0 -0
  81. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/conftest.py +0 -0
  82. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/__init__.py +0 -0
  83. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/__main__.py +0 -0
  84. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/cli.py +0 -0
  85. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/cli_test.py +0 -0
  86. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/container.py +0 -0
  87. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/container_test.py +0 -0
  88. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/fixtures.py +0 -0
  89. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/fixtures_test.py +0 -0
  90. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/harness.py +0 -0
  91. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/harness_test.py +0 -0
  92. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/metrics.py +0 -0
  93. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/metrics_test.py +0 -0
  94. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/base/README.md +0 -0
  95. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/base/calc/__init__.py +0 -0
  96. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/base/calc/legacy.py +0 -0
  97. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/base/calc/ops.py +0 -0
  98. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/base/calc/ops_test.py +0 -0
  99. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/clean/calc/ops.py +0 -0
  100. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/clean/calc/ops_test.py +0 -0
  101. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/dead-code/calc/ops.py +0 -0
  102. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/dead-code/calc/ops_test.py +0 -0
  103. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/duplicated-behavior/calc/ops.py +0 -0
  104. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/duplicated-behavior/calc/ops_test.py +0 -0
  105. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/false-reuse/calc/limits.py +0 -0
  106. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/false-reuse/calc/limits_test.py +0 -0
  107. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/lint-debt/calc/ops.py +0 -0
  108. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/readability/lint-debt/calc/ops_test.py +0 -0
  109. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/add-only/README.md +0 -0
  110. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/add-only/calc/__init__.py +0 -0
  111. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/add-only/calc/ops.py +0 -0
  112. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/add-only/calc/ops_test.py +0 -0
  113. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/buggy-subtract/README.md +0 -0
  114. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/buggy-subtract/calc/__init__.py +0 -0
  115. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/buggy-subtract/calc/ops.py +0 -0
  116. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/buggy-subtract/calc/ops_test.py +0 -0
  117. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/full-ops/README.md +0 -0
  118. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/full-ops/calc/__init__.py +0 -0
  119. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/full-ops/calc/ops.py +0 -0
  120. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/full-ops/calc/ops_test.py +0 -0
  121. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/unwired-cli/README.md +0 -0
  122. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/unwired-cli/calc/__init__.py +0 -0
  123. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/unwired-cli/calc/cli.py +0 -0
  124. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/unwired-cli/calc/cli_test.py +0 -0
  125. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/unwired-cli/calc/ops.py +0 -0
  126. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/roadmap/unwired-cli/calc/ops_test.py +0 -0
  127. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/task/hidden/stats/summary_hidden_test.py +0 -0
  128. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/task/summary/README.md +0 -0
  129. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/task/summary/stats/__init__.py +0 -0
  130. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/task/summary/stats/summary.py +0 -0
  131. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/projects/task/summary/stats/summary_test.py +0 -0
  132. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/readability.py +0 -0
  133. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/readability_test.py +0 -0
  134. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/report.py +0 -0
  135. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/report_test.py +0 -0
  136. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/roadmap.py +0 -0
  137. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/roadmap_test.py +0 -0
  138. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/scenarios.py +0 -0
  139. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/scenarios_test.py +0 -0
  140. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/suites.py +0 -0
  141. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/task.py +0 -0
  142. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/task_test.py +0 -0
  143. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/trial.py +0 -0
  144. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/evals/trial_test.py +0 -0
  145. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/hooks.py +0 -0
  146. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/integration_test.py +0 -0
  147. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/main.py +0 -0
  148. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/main_test.py +0 -0
  149. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/models.py +0 -0
  150. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/orchestrator.py +0 -0
  151. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/orchestrator_test.py +0 -0
  152. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/paths.py +0 -0
  153. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/paths_test.py +0 -0
  154. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/persistence.py +0 -0
  155. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/persistence_test.py +0 -0
  156. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/prompts/hooks/50-readability.md +0 -0
  157. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/prompts/hooks/60-testing.md +0 -0
  158. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/prompts/hooks/70-ux.md +0 -0
  159. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/prompts/hooks/90-roadmap.md +0 -0
  160. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/prompts/taskrunner.md +0 -0
  161. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/prompts.py +0 -0
  162. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/prompts_test.py +0 -0
  163. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/providers.py +0 -0
  164. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/providers_test.py +0 -0
  165. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/runner.py +0 -0
  166. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/runner_test.py +0 -0
  167. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/scope.py +0 -0
  168. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/scope_test.py +0 -0
  169. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/shutdown.py +0 -0
  170. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/shutdown_integration_test.py +0 -0
  171. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/shutdown_test.py +0 -0
  172. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/tasks/__init__.py +0 -0
  173. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/tasks/lifecycle.py +0 -0
  174. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/tasks/limits.py +0 -0
  175. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/tasks/operations.py +0 -0
  176. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/tasks/operations_test.py +0 -0
  177. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/tasks/progress.py +0 -0
  178. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/tasks/progress_test.py +0 -0
  179. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/tasks/queries.py +0 -0
  180. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/dashboard.spec.js +0 -0
  181. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/dashboard.test.js +0 -0
  182. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/favicon.js +0 -0
  183. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/favicon.spec.js +0 -0
  184. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/files.html +0 -0
  185. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/files.spec.js +0 -0
  186. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/index.html +0 -0
  187. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/index.js +0 -0
  188. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/logs.html +0 -0
  189. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/logs.test.js +0 -0
  190. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/mancha.js +0 -0
  191. {lemming_cli-0.5.1 → lemming_cli-0.5.2}/src/lemming/web/screenshots.spec.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: lemming-cli
3
- Version: 0.5.1
3
+ Version: 0.5.2
4
4
  Summary: An autonomous, iterative task runner for AI coding agents.
5
5
  Project-URL: Homepage, https://github.com/owahltinez/lemming
6
6
  Project-URL: Repository, https://github.com/owahltinez/lemming
@@ -10,13 +10,13 @@ License-File: LICENSE
10
10
  Keywords: agents,ai,antigravity,automation,claude,opencode
11
11
  Requires-Python: >=3.12
12
12
  Requires-Dist: beautifulsoup4>=4.13.3
13
- Requires-Dist: click-agentcli>=0.3.0
13
+ Requires-Dist: click-agentcli>=0.4.1
14
14
  Requires-Dist: click>=8.0.0
15
15
  Requires-Dist: fastapi>=0.124.4
16
16
  Requires-Dist: markdownify>=0.14.1
17
17
  Requires-Dist: pydantic>=2.12.5
18
18
  Requires-Dist: pyyaml>=6.0.3
19
- Requires-Dist: readability-cli>=0.9.0
19
+ Requires-Dist: readability-cli>=0.10.0
20
20
  Requires-Dist: requests>=2.32.3
21
21
  Requires-Dist: uvicorn>=0.33.0
22
22
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "lemming-cli"
7
- version = "0.5.1"
7
+ version = "0.5.2"
8
8
  description = "An autonomous, iterative task runner for AI coding agents."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -16,12 +16,12 @@ keywords = ["ai", "agents", "automation", "antigravity", "claude", "opencode"]
16
16
  dependencies = [
17
17
  "beautifulsoup4>=4.13.3",
18
18
  "click>=8.0.0",
19
- "click-agentcli>=0.3.0",
19
+ "click-agentcli>=0.4.1",
20
20
  "fastapi>=0.124.4",
21
21
  "markdownify>=0.14.1",
22
22
  "pydantic>=2.12.5",
23
23
  "pyyaml>=6.0.3",
24
- "readability-cli>=0.9.0",
24
+ "readability-cli>=0.10.0",
25
25
  "requests>=2.32.3",
26
26
  "uvicorn>=0.33.0",
27
27
  ]
@@ -86,8 +86,7 @@ def git_repo():
86
86
  api.app.state.root = pathlib.Path(test_dir).resolve()
87
87
 
88
88
  # Clear cached git repo check from previous tests
89
- if hasattr(paths.in_git_repo, "_result"):
90
- del paths.in_git_repo._result
89
+ paths.in_git_repo.cache_clear()
91
90
 
92
91
  subprocess.run(["git", "init"], check=True)
93
92
  subprocess.run(
@@ -113,8 +112,7 @@ def git_repo():
113
112
  yield pathlib.Path(test_dir)
114
113
 
115
114
  # Clear cached git repo check and restore cwd
116
- if hasattr(paths.in_git_repo, "_result"):
117
- del paths.in_git_repo._result
115
+ paths.in_git_repo.cache_clear()
118
116
  os.chdir(orig_cwd)
119
117
  api.app.state.root = original_root
120
118
  shutil.rmtree(test_dir)
@@ -130,8 +128,7 @@ def non_git_dir():
130
128
  api.app.state.root = pathlib.Path(test_dir).resolve()
131
129
 
132
130
  # Clear cached git repo check
133
- if hasattr(paths.in_git_repo, "_result"):
134
- del paths.in_git_repo._result
131
+ paths.in_git_repo.cache_clear()
135
132
 
136
133
  # Create files (including one that would be "ignored" if git were present)
137
134
  (pathlib.Path(test_dir) / "file1.txt").write_text("content1")
@@ -139,8 +136,7 @@ def non_git_dir():
139
136
 
140
137
  yield pathlib.Path(test_dir)
141
138
 
142
- if hasattr(paths.in_git_repo, "_result"):
143
- del paths.in_git_repo._result
139
+ paths.in_git_repo.cache_clear()
144
140
  os.chdir(orig_cwd)
145
141
  api.app.state.root = original_root
146
142
  shutil.rmtree(test_dir)
@@ -6,10 +6,13 @@ import pytest
6
6
  from lemming.api import context
7
7
 
8
8
 
9
- class MockAppState:
10
- def __init__(self, root: pathlib.Path, tasks_file: pathlib.Path):
11
- self.root = root
12
- self.tasks_file = tasks_file
9
+ def _app_state(
10
+ root: pathlib.Path, tasks_file: pathlib.Path
11
+ ) -> fastapi.datastructures.State:
12
+ """The real state object, since it is just an attribute bag."""
13
+ return fastapi.datastructures.State(
14
+ {"root": root, "tasks_file": tasks_file}
15
+ )
13
16
 
14
17
 
15
18
  def test_resolve_project_dir(tmp_path):
@@ -18,7 +21,7 @@ def test_resolve_project_dir(tmp_path):
18
21
  project = root / "project"
19
22
  project.mkdir()
20
23
 
21
- app_state = MockAppState(root, root / "tasks.yml")
24
+ app_state = _app_state(root, root / "tasks.yml")
22
25
 
23
26
  # Default (no project)
24
27
  assert context.resolve_project_dir(app_state) == root
@@ -46,7 +49,7 @@ def test_resolve_tasks_file(tmp_path):
46
49
  project.mkdir()
47
50
 
48
51
  default_tasks = root / "tasks.yml"
49
- app_state = MockAppState(root, default_tasks)
52
+ app_state = _app_state(root, default_tasks)
50
53
 
51
54
  # Default
52
55
  assert context.resolve_tasks_file(app_state) == default_tasks
@@ -103,6 +103,7 @@ def test_disable_hooks_keeps_priority_in_mask(tmp_path, monkeypatch):
103
103
  # The mask filename carries the hook's priority so listings still
104
104
  # report the priority it would run at if re-enabled
105
105
  mask = results["roadmap"]
106
+ assert mask is not None
106
107
  assert mask.name == "90-roadmap.md"
107
108
  assert mask.read_text(encoding="utf-8") == ""
108
109
 
@@ -27,12 +27,14 @@ def test_task_model_defaults():
27
27
 
28
28
 
29
29
  def test_task_model_validation():
30
- # description is required
30
+ # description is required; the omission is the assertion, not a mistake
31
31
  with pytest.raises(pydantic.ValidationError):
32
+ # pyrefly: ignore[missing-argument]
32
33
  models.Task(id="123")
33
34
 
34
35
  # id is required
35
36
  with pytest.raises(pydantic.ValidationError):
37
+ # pyrefly: ignore[missing-argument]
36
38
  models.Task(description="Test")
37
39
 
38
40
 
@@ -169,6 +169,7 @@ def test_finish_task_attempt(tmp_path):
169
169
  persistence.save_tasks(tasks_file, data)
170
170
 
171
171
  finished = lifecycle.finish_task_attempt(tasks_file, "1")
172
+ assert finished is not None
172
173
  assert finished.status == models.TaskStatus.PENDING
173
174
  assert finished.pid is None
174
175
 
@@ -235,6 +235,7 @@ def test_get_pending_task(tmp_path):
235
235
  ]
236
236
  )
237
237
  pending = queries.get_pending_task(data)
238
+ assert pending is not None
238
239
  assert pending.id == "1"
239
240
 
240
241
 
@@ -204,14 +204,14 @@ wheels = [
204
204
 
205
205
  [[package]]
206
206
  name = "click-agentcli"
207
- version = "0.3.0"
207
+ version = "0.4.1"
208
208
  source = { registry = "https://pypi.org/simple" }
209
209
  dependencies = [
210
210
  { name = "click" },
211
211
  ]
212
- sdist = { url = "https://files.pythonhosted.org/packages/75/d5/660cd6f973e3cda14aaec0b31306c739069ae6a45e3b5ca86632a0af8561/click_agentcli-0.3.0.tar.gz", hash = "sha256:55a4c6d60f93a04c0e25df47df75c1e4169a1224ac2306da2fd544ca272ae579", size = 24098, upload-time = "2026-08-22T01:13:19.54Z" }
212
+ sdist = { url = "https://files.pythonhosted.org/packages/5f/f3/38a4a99f28121e48e848681dd80b54e490ec32a86d09a2d33f5c1a5d22cc/click_agentcli-0.4.1.tar.gz", hash = "sha256:f8bef4e82b2d61957764af3d806bc377eaba43bbd363552a966a04aecf05e9bb", size = 25736, upload-time = "2026-08-29T01:11:34.368Z" }
213
213
  wheels = [
214
- { url = "https://files.pythonhosted.org/packages/d4/c7/fec03b1cae7febb4bb67ab8b18000af29859526b55850b45e0ba2732c16a/click_agentcli-0.3.0-py3-none-any.whl", hash = "sha256:5115cdbde546e8eb8abe60ca1e22eedff9174591431e760e237d7c418d86e8dd", size = 24500, upload-time = "2026-08-22T01:13:18.346Z" },
214
+ { url = "https://files.pythonhosted.org/packages/e5/81/e50bd1adf77cc31283b642b729f9aefc002b0a5e1338dec19539b902c39d/click_agentcli-0.4.1-py3-none-any.whl", hash = "sha256:a39bc96c364970225ddbede45bc4307b4f73013f32c2744e6a02807b1aee27c6", size = 26364, upload-time = "2026-08-29T01:11:32.949Z" },
215
215
  ]
216
216
 
217
217
  [[package]]
@@ -307,7 +307,7 @@ wheels = [
307
307
 
308
308
  [[package]]
309
309
  name = "lemming-cli"
310
- version = "0.5.1"
310
+ version = "0.5.2"
311
311
  source = { editable = "." }
312
312
  dependencies = [
313
313
  { name = "beautifulsoup4" },
@@ -338,12 +338,12 @@ evals = [
338
338
  requires-dist = [
339
339
  { name = "beautifulsoup4", specifier = ">=4.13.3" },
340
340
  { name = "click", specifier = ">=8.0.0" },
341
- { name = "click-agentcli", specifier = ">=0.3.0" },
341
+ { name = "click-agentcli", specifier = ">=0.4.1" },
342
342
  { name = "fastapi", specifier = ">=0.124.4" },
343
343
  { name = "markdownify", specifier = ">=0.14.1" },
344
344
  { name = "pydantic", specifier = ">=2.12.5" },
345
345
  { name = "pyyaml", specifier = ">=6.0.3" },
346
- { name = "readability-cli", specifier = ">=0.9.0" },
346
+ { name = "readability-cli", specifier = ">=0.10.0" },
347
347
  { name = "requests", specifier = ">=2.32.3" },
348
348
  { name = "uvicorn", specifier = ">=0.33.0" },
349
349
  ]
@@ -573,7 +573,7 @@ wheels = [
573
573
 
574
574
  [[package]]
575
575
  name = "readability-cli"
576
- version = "0.9.0"
576
+ version = "0.10.0"
577
577
  source = { registry = "https://pypi.org/simple" }
578
578
  dependencies = [
579
579
  { name = "beautifulsoup4" },
@@ -581,9 +581,9 @@ dependencies = [
581
581
  { name = "markdownify" },
582
582
  { name = "requests" },
583
583
  ]
584
- sdist = { url = "https://files.pythonhosted.org/packages/eb/aa/7570aaa1ec46c74b8359b2d2a47bdc70d7ee6adff94501cbdaf347810f19/readability_cli-0.9.0.tar.gz", hash = "sha256:4e14e182be391d70092fe159d8d81c6d94e34e8099fdfc9ca8b8ad3ffc31d4c5", size = 343257, upload-time = "2026-08-20T00:51:02.731Z" }
584
+ sdist = { url = "https://files.pythonhosted.org/packages/cd/1e/879bc39b3e9127dfac23822b333093237b95f9ac8891295c039c21481bdd/readability_cli-0.10.0.tar.gz", hash = "sha256:201bf386850d8e465d154bab307399cc5516eb779d1032f75bc97cf38dbf636d", size = 349921, upload-time = "2026-08-23T23:44:08.64Z" }
585
585
  wheels = [
586
- { url = "https://files.pythonhosted.org/packages/8d/94/1857a49eaf9a3efddcdf6f6f413f0aac804915a58d1ccbd64b32a6994602/readability_cli-0.9.0-py3-none-any.whl", hash = "sha256:1709c282575c3f5fc9351d585f069a92b79312d33a22a5ff3713aef8cb834850", size = 324977, upload-time = "2026-08-20T00:51:01.416Z" },
586
+ { url = "https://files.pythonhosted.org/packages/e1/e2/c573dd0f508e9eb3b4ad0167fc1d60cd361297b6ed8daaf7e4825ad7f6cf/readability_cli-0.10.0-py3-none-any.whl", hash = "sha256:09227180ce6e66ca5f9ef386a9f4e254aeecbed880296c188d0dccc33f918b15", size = 326908, upload-time = "2026-08-23T23:44:06.691Z" },
587
587
  ]
588
588
 
589
589
  [[package]]
@@ -1,21 +0,0 @@
1
- # Type checking covers the code that ships, not the code that exercises it.
2
- #
3
- # Test doubles are duck-typed on purpose, so a strict checker reports every
4
- # one of them as an incompatible argument; the eval fixture projects are
5
- # sample repositories seeded into a workspace, several deliberately broken,
6
- # and they are data rather than source.
7
- project-excludes = [
8
- "**/*_test.py",
9
- "**/conftest.py",
10
- "**/evals/projects/**",
11
- ]
12
-
13
- # The fixture projects are checked when a path names one directly, where
14
- # project-excludes does not apply. Their imports are relative to the
15
- # workspace they get seeded into, not to this repository.
16
- [[sub-config]]
17
- matches = "**/evals/projects/**"
18
-
19
- [sub-config.errors]
20
- missing-import = false
21
- missing-module-attribute = false
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes