lemming-cli 0.7.0__tar.gz → 0.7.1__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.7.0 → lemming_cli-0.7.1}/PKG-INFO +1 -1
  2. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/pyproject.toml +1 -1
  3. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/orchestrator.py +12 -0
  4. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/runner.py +48 -0
  5. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/uv.lock +1 -1
  6. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/.dockerignore +0 -0
  7. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/.github/workflows/ci.yml +0 -0
  8. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/.github/workflows/publish.yml +0 -0
  9. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/.github/workflows/screenshots.yml +0 -0
  10. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/.gitignore +0 -0
  11. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/.prettierignore +0 -0
  12. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/.prettierrc +0 -0
  13. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/Dockerfile +0 -0
  14. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/LICENSE +0 -0
  15. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/README.md +0 -0
  16. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/SKILL.md +0 -0
  17. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/biome.json +0 -0
  18. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/docker-compose.yml +0 -0
  19. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/docs/EVALS.md +0 -0
  20. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/docs/HOOKS.md +0 -0
  21. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/docs/WORKSPACE.md +0 -0
  22. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/docs/screenshots/dashboard-desktop.png +0 -0
  23. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/docs/screenshots/dashboard-mobile.png +0 -0
  24. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/docs/screenshots/task-log-desktop.png +0 -0
  25. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/docs/screenshots/task-log-mobile.png +0 -0
  26. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/package-lock.json +0 -0
  27. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/package.json +0 -0
  28. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/playwright.config.js +0 -0
  29. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/__init__.py +0 -0
  30. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/__init__.py +0 -0
  31. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/auth.py +0 -0
  32. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/auth_test.py +0 -0
  33. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/config.py +0 -0
  34. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/config_test.py +0 -0
  35. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/conftest.py +0 -0
  36. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/context.py +0 -0
  37. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/context_test.py +0 -0
  38. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/directories.py +0 -0
  39. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/directories_test.py +0 -0
  40. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/files.py +0 -0
  41. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/files_test.py +0 -0
  42. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/hooks.py +0 -0
  43. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/hooks_test.py +0 -0
  44. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/logging.py +0 -0
  45. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/logging_test.py +0 -0
  46. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/loop.py +0 -0
  47. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/loop_test.py +0 -0
  48. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/main.py +0 -0
  49. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/main_test.py +0 -0
  50. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/tasks.py +0 -0
  51. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/api/tasks_test.py +0 -0
  52. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/artifact_test.py +0 -0
  53. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/brief_test.py +0 -0
  54. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/__init__.py +0 -0
  55. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/artifact.py +0 -0
  56. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/brief.py +0 -0
  57. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/config.py +0 -0
  58. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/config_test.py +0 -0
  59. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/exec_cli.py +0 -0
  60. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/exec_cli_test.py +0 -0
  61. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/goal.py +0 -0
  62. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/goal_test.py +0 -0
  63. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/hooks.py +0 -0
  64. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/hooks_test.py +0 -0
  65. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/machine_output_test.py +0 -0
  66. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/main.py +0 -0
  67. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/main_test.py +0 -0
  68. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/operations.py +0 -0
  69. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/operations_test.py +0 -0
  70. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/progress.py +0 -0
  71. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/progress_test.py +0 -0
  72. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/readability_cli.py +0 -0
  73. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/readability_cli_test.py +0 -0
  74. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/skill.py +0 -0
  75. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/skill_test.py +0 -0
  76. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/stop_test.py +0 -0
  77. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/tasks.py +0 -0
  78. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/cli/tasks_test.py +0 -0
  79. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/conftest.py +0 -0
  80. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/__init__.py +0 -0
  81. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/__main__.py +0 -0
  82. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/cli.py +0 -0
  83. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/cli_test.py +0 -0
  84. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/container.py +0 -0
  85. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/container_test.py +0 -0
  86. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/fixtures.py +0 -0
  87. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/fixtures_test.py +0 -0
  88. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/harness.py +0 -0
  89. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/harness_test.py +0 -0
  90. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/metrics.py +0 -0
  91. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/metrics_test.py +0 -0
  92. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/base/README.md +0 -0
  93. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/base/calc/__init__.py +0 -0
  94. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/base/calc/legacy.py +0 -0
  95. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/base/calc/ops.py +0 -0
  96. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/base/calc/ops_test.py +0 -0
  97. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/clean/calc/ops.py +0 -0
  98. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/clean/calc/ops_test.py +0 -0
  99. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/dead-code/calc/ops.py +0 -0
  100. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/dead-code/calc/ops_test.py +0 -0
  101. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/duplicated-behavior/calc/ops.py +0 -0
  102. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/duplicated-behavior/calc/ops_test.py +0 -0
  103. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/false-reuse/calc/limits.py +0 -0
  104. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/false-reuse/calc/limits_test.py +0 -0
  105. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/lint-debt/calc/ops.py +0 -0
  106. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/readability/lint-debt/calc/ops_test.py +0 -0
  107. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/add-only/README.md +0 -0
  108. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/add-only/calc/__init__.py +0 -0
  109. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/add-only/calc/ops.py +0 -0
  110. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/add-only/calc/ops_test.py +0 -0
  111. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/buggy-subtract/README.md +0 -0
  112. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/buggy-subtract/calc/__init__.py +0 -0
  113. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/buggy-subtract/calc/ops.py +0 -0
  114. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/buggy-subtract/calc/ops_test.py +0 -0
  115. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/full-ops/README.md +0 -0
  116. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/full-ops/calc/__init__.py +0 -0
  117. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/full-ops/calc/ops.py +0 -0
  118. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/full-ops/calc/ops_test.py +0 -0
  119. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/unwired-cli/README.md +0 -0
  120. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/unwired-cli/calc/__init__.py +0 -0
  121. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/unwired-cli/calc/cli.py +0 -0
  122. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/unwired-cli/calc/cli_test.py +0 -0
  123. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/unwired-cli/calc/ops.py +0 -0
  124. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/roadmap/unwired-cli/calc/ops_test.py +0 -0
  125. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/task/hidden/stats/summary_hidden_test.py +0 -0
  126. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/task/summary/README.md +0 -0
  127. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/task/summary/stats/__init__.py +0 -0
  128. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/task/summary/stats/summary.py +0 -0
  129. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/projects/task/summary/stats/summary_test.py +0 -0
  130. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/readability.py +0 -0
  131. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/readability_test.py +0 -0
  132. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/report.py +0 -0
  133. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/report_test.py +0 -0
  134. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/roadmap.py +0 -0
  135. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/roadmap_test.py +0 -0
  136. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/scenarios.py +0 -0
  137. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/scenarios_test.py +0 -0
  138. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/suites.py +0 -0
  139. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/task.py +0 -0
  140. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/task_test.py +0 -0
  141. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/trial.py +0 -0
  142. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/evals/trial_test.py +0 -0
  143. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/hooks.py +0 -0
  144. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/hooks_test.py +0 -0
  145. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/integration_test.py +0 -0
  146. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/main.py +0 -0
  147. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/main_test.py +0 -0
  148. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/models.py +0 -0
  149. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/models_test.py +0 -0
  150. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/orchestrator_test.py +0 -0
  151. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/paths.py +0 -0
  152. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/paths_test.py +0 -0
  153. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/persistence.py +0 -0
  154. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/persistence_test.py +0 -0
  155. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/prompts/hooks/50-readability.md +0 -0
  156. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/prompts/hooks/60-testing.md +0 -0
  157. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/prompts/hooks/70-ux.md +0 -0
  158. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/prompts/hooks/90-roadmap.md +0 -0
  159. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/prompts/taskrunner.md +0 -0
  160. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/prompts.py +0 -0
  161. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/prompts_test.py +0 -0
  162. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/providers.py +0 -0
  163. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/providers_test.py +0 -0
  164. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/runner_test.py +0 -0
  165. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/scope.py +0 -0
  166. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/scope_test.py +0 -0
  167. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/shutdown.py +0 -0
  168. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/shutdown_integration_test.py +0 -0
  169. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/shutdown_test.py +0 -0
  170. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/tasks/__init__.py +0 -0
  171. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/tasks/lifecycle.py +0 -0
  172. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/tasks/lifecycle_test.py +0 -0
  173. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/tasks/limits.py +0 -0
  174. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/tasks/operations.py +0 -0
  175. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/tasks/operations_test.py +0 -0
  176. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/tasks/progress.py +0 -0
  177. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/tasks/progress_test.py +0 -0
  178. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/tasks/queries.py +0 -0
  179. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/tasks/queries_test.py +0 -0
  180. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/web/dashboard.spec.js +0 -0
  181. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/web/dashboard.test.js +0 -0
  182. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/web/favicon.js +0 -0
  183. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/web/favicon.spec.js +0 -0
  184. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/web/files.html +0 -0
  185. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/web/files.spec.js +0 -0
  186. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/web/index.html +0 -0
  187. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/web/index.js +0 -0
  188. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/web/logs.html +0 -0
  189. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/web/logs.test.js +0 -0
  190. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/src/lemming/web/mancha.js +0 -0
  191. {lemming_cli-0.7.0 → lemming_cli-0.7.1}/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.7.0
3
+ Version: 0.7.1
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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "lemming-cli"
7
- version = "0.7.0"
7
+ version = "0.7.1"
8
8
  description = "An autonomous, iterative task runner for AI coding agents."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -392,6 +392,18 @@ def _handle_runner_exit(
392
392
  runner.RETURNCODE_TIMEOUT,
393
393
  )
394
394
 
395
+ # Record agy's silently lost file creations before hooks judge the task.
396
+ for path in runner.extract_lost_writes(stdout):
397
+ message = f"Runner failed to create {path}: agy rejected the write"
398
+ click.echo(message)
399
+ try:
400
+ progress.add_progress(
401
+ tasks_file, task_id, message[: limits.MAX_PROGRESS_ENTRY_CHARS]
402
+ )
403
+ except Exception:
404
+ # Recording the loss must never take down the loop.
405
+ pass
406
+
395
407
  # Post-execution validation and heartbeat cleanup
396
408
  # This will mark the task as COMPLETED or PENDING based on whether
397
409
  # the agent called 'lemming complete'.
@@ -398,6 +398,54 @@ def extract_error_message(
398
398
  return None
399
399
 
400
400
 
401
+ def extract_lost_writes(output: str) -> list[str]:
402
+ """Returns workspace files agy rejected creating and never wrote after.
403
+
404
+ Agy since 1.1.12 rejects a `write_to_file` carrying ArtifactMetadata for
405
+ a workspace path. The model usually retries without it, but sometimes
406
+ writes the file into agy's own artifact directory instead and still
407
+ reports success (google-antigravity/antigravity-cli#838).
408
+
409
+ Args:
410
+ output: Captured runner output, one JSON event per line.
411
+
412
+ Returns:
413
+ Rejected target paths with no later successful write, in order.
414
+ """
415
+ lost: dict[str, None] = {}
416
+ for raw_line in output.splitlines():
417
+ line = raw_line.strip()
418
+ if not line.startswith("{") or "write_to_file" not in line:
419
+ continue
420
+ try:
421
+ event = json.loads(line)
422
+ except ValueError:
423
+ continue
424
+
425
+ # Only agy's tool step updates carry the target and outcome.
426
+ update = event.get("step_update") if isinstance(event, dict) else None
427
+ if not isinstance(update, dict):
428
+ continue
429
+ if update.get("tool_name") != "write_to_file":
430
+ continue
431
+ info = update.get("tool_info")
432
+ if not isinstance(info, dict):
433
+ continue
434
+ params = info.get("parameters")
435
+ target = params.get("TargetFile") if isinstance(params, dict) else None
436
+ if not isinstance(target, str):
437
+ continue
438
+
439
+ # A later successful write to the same path recovers the rejection.
440
+ if update.get("state") == "DONE":
441
+ lost.pop(target, None)
442
+ elif update.get("state") == "ERROR" and "not a valid artifact path" in (
443
+ json.dumps(info.get("error"))
444
+ ):
445
+ lost[target] = None
446
+ return list(lost)
447
+
448
+
401
449
  def _final_message_text(event: dict) -> str | None:
402
450
  """Returns the agent's closing text from one event, or None.
403
451
 
@@ -154,7 +154,7 @@ wheels = [
154
154
 
155
155
  [[package]]
156
156
  name = "lemming-cli"
157
- version = "0.7.0"
157
+ version = "0.7.1"
158
158
  source = { editable = "." }
159
159
  dependencies = [
160
160
  { name = "click" },
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