lemming-cli 0.1.0__py3-none-any.whl

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 (94) hide show
  1. lemming/__init__.py +1 -0
  2. lemming/api/__init__.py +5 -0
  3. lemming/api/auth.py +34 -0
  4. lemming/api/auth_test.py +40 -0
  5. lemming/api/config.py +85 -0
  6. lemming/api/config_test.py +84 -0
  7. lemming/api/conftest.py +204 -0
  8. lemming/api/context.py +39 -0
  9. lemming/api/context_test.py +62 -0
  10. lemming/api/directories.py +57 -0
  11. lemming/api/directories_test.py +94 -0
  12. lemming/api/files.py +116 -0
  13. lemming/api/files_test.py +163 -0
  14. lemming/api/hooks.py +15 -0
  15. lemming/api/hooks_test.py +33 -0
  16. lemming/api/logging.py +16 -0
  17. lemming/api/logging_test.py +59 -0
  18. lemming/api/loop.py +45 -0
  19. lemming/api/loop_test.py +58 -0
  20. lemming/api/main.py +53 -0
  21. lemming/api/main_test.py +30 -0
  22. lemming/api/tasks.py +170 -0
  23. lemming/api/tasks_test.py +426 -0
  24. lemming/api.py +5 -0
  25. lemming/api_test.py +7 -0
  26. lemming/cli/__init__.py +12 -0
  27. lemming/cli/config.py +67 -0
  28. lemming/cli/config_test.py +50 -0
  29. lemming/cli/context.py +40 -0
  30. lemming/cli/context_test.py +49 -0
  31. lemming/cli/hooks.py +147 -0
  32. lemming/cli/hooks_test.py +50 -0
  33. lemming/cli/main.py +42 -0
  34. lemming/cli/main_test.py +21 -0
  35. lemming/cli/operations.py +226 -0
  36. lemming/cli/operations_test.py +44 -0
  37. lemming/cli/progress.py +54 -0
  38. lemming/cli/progress_test.py +40 -0
  39. lemming/cli/readability_cli.py +28 -0
  40. lemming/cli/readability_cli_test.py +57 -0
  41. lemming/cli/tasks.py +529 -0
  42. lemming/cli/tasks_test.py +168 -0
  43. lemming/cli.py +5 -0
  44. lemming/cli_test.py +22 -0
  45. lemming/conftest.py +13 -0
  46. lemming/hooks.py +145 -0
  47. lemming/hooks_test.py +180 -0
  48. lemming/integration_test.py +299 -0
  49. lemming/main.py +6 -0
  50. lemming/main_test.py +44 -0
  51. lemming/models.py +88 -0
  52. lemming/models_test.py +91 -0
  53. lemming/orchestrator.py +407 -0
  54. lemming/orchestrator_test.py +468 -0
  55. lemming/paths.py +245 -0
  56. lemming/paths_test.py +186 -0
  57. lemming/persistence.py +179 -0
  58. lemming/persistence_test.py +150 -0
  59. lemming/prompts/hooks/readability.md +42 -0
  60. lemming/prompts/hooks/roadmap.md +61 -0
  61. lemming/prompts/hooks/testing.md +44 -0
  62. lemming/prompts/taskrunner.md +69 -0
  63. lemming/prompts.py +354 -0
  64. lemming/prompts_test.py +421 -0
  65. lemming/providers.py +190 -0
  66. lemming/providers_test.py +73 -0
  67. lemming/runner.py +327 -0
  68. lemming/runner_test.py +378 -0
  69. lemming/tasks/__init__.py +75 -0
  70. lemming/tasks/lifecycle.py +331 -0
  71. lemming/tasks/lifecycle_test.py +312 -0
  72. lemming/tasks/operations.py +258 -0
  73. lemming/tasks/operations_test.py +172 -0
  74. lemming/tasks/progress.py +29 -0
  75. lemming/tasks/progress_test.py +22 -0
  76. lemming/tasks/queries.py +128 -0
  77. lemming/tasks/queries_test.py +233 -0
  78. lemming/web/dashboard.spec.js +350 -0
  79. lemming/web/dashboard.test.js +998 -0
  80. lemming/web/favicon.js +40 -0
  81. lemming/web/favicon.spec.js +242 -0
  82. lemming/web/files.html +375 -0
  83. lemming/web/files.spec.js +97 -0
  84. lemming/web/index.html +983 -0
  85. lemming/web/index.js +753 -0
  86. lemming/web/logs.html +358 -0
  87. lemming/web/logs.test.js +195 -0
  88. lemming/web/mancha.js +58 -0
  89. lemming/web/screenshots.spec.js +328 -0
  90. lemming_cli-0.1.0.dist-info/METADATA +314 -0
  91. lemming_cli-0.1.0.dist-info/RECORD +94 -0
  92. lemming_cli-0.1.0.dist-info/WHEEL +4 -0
  93. lemming_cli-0.1.0.dist-info/entry_points.txt +2 -0
  94. lemming_cli-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,314 @@
1
+ Metadata-Version: 2.4
2
+ Name: lemming-cli
3
+ Version: 0.1.0
4
+ Summary: An autonomous, iterative task runner for AI coding agents.
5
+ Project-URL: Homepage, https://github.com/owahltinez/lemming
6
+ Project-URL: Repository, https://github.com/owahltinez/lemming
7
+ Author: Lemming Contributors
8
+ License: MIT
9
+ License-File: LICENSE
10
+ Keywords: agents,ai,aider,antigravity,automation,claude
11
+ Requires-Python: >=3.12
12
+ Requires-Dist: beautifulsoup4>=4.13.3
13
+ Requires-Dist: click>=8.0.0
14
+ Requires-Dist: fastapi>=0.124.4
15
+ Requires-Dist: markdownify>=0.14.1
16
+ Requires-Dist: pydantic>=2.12.5
17
+ Requires-Dist: pyyaml>=6.0.3
18
+ Requires-Dist: readability-cli>=0.4.0
19
+ Requires-Dist: requests>=2.32.3
20
+ Requires-Dist: uvicorn>=0.33.0
21
+ Description-Content-Type: text/markdown
22
+
23
+ # Lemming 🐹
24
+
25
+ **The transparent, tool-agnostic orchestrator for autonomous AI coding agents.**
26
+
27
+ Lemming bridges the gap between high-level project strategy and low-level agent
28
+ execution. Instead of letting an agent wander through your codebase in a single,
29
+ massive context window, Lemming forces a structured, iterative workflow via a
30
+ human-readable `tasks.yml` file.
31
+
32
+ ## Why Lemming?
33
+
34
+ - **Zero Context Drift**: By breaking projects into discrete tasks, Lemming
35
+ ensures agents stay focused. They only see the project context, relevant
36
+ history, and the specific task at hand.
37
+ - **Transparency & Control**: Every decision, technical finding, and progress
38
+ update is recorded in a human-readable `tasks.yml` file. You can step in,
39
+ adjust the roadmap, or swap agents at any time.
40
+ - **Tool Agnostic**: Lemming doesn't care which agent you use. It works
41
+ out-of-the-box with `agy`, `aider`, `claude`, `codex`, or even your own custom
42
+ scripts.
43
+ - **Resilient Execution**: With built-in heartbeat monitoring, automatic
44
+ retries, and progress tracking, Lemming handles process crashes and rate
45
+ limits gracefully.
46
+ - **Human-Agent Collaboration**: Use the CLI or the Web UI to collaborate with
47
+ your agents in real-time. Mark tasks, edit descriptions, and review progress
48
+ as they happen.
49
+
50
+ ---
51
+
52
+ ## Installation
53
+
54
+ Install globally using `uv`:
55
+
56
+ ```bash
57
+ uv tool install git+https://github.com/owahltinez/lemming.git
58
+ ```
59
+
60
+ ## Quick Start in 3 Steps
61
+
62
+ ### 1. Scaffold the Roadmap
63
+
64
+ Initialize your project context and define your goals.
65
+
66
+ ```bash
67
+ # Set project-wide rules (e.g. tech stack, style guides)
68
+ lemming context "Use React, TypeScript, and Tailwind. Follow TDD."
69
+
70
+ # Add tasks to the queue
71
+ lemming add "Initialize the project with Vite"
72
+ lemming add "Create the Button component"
73
+ lemming add "Implement the authentication flow"
74
+ ```
75
+
76
+ ### 2. Review and Refine
77
+
78
+ See exactly what's pending and what the agent will see.
79
+
80
+ ```bash
81
+ # Show the current roadmap
82
+ lemming status
83
+ ```
84
+
85
+ ### 3. Release the Lemming
86
+
87
+ Start the autonomous loop.
88
+
89
+ ```bash
90
+ # Run using the project's configured agent (defaults to the first
91
+ # supported runner found on PATH: agy, aider, claude, or codex)
92
+ lemming run
93
+
94
+ # Flags passed after -- are sent directly to the underlying runner
95
+ lemming run -- --model claude-3-5-sonnet
96
+ ```
97
+
98
+ ---
99
+
100
+ ## The Web Dashboard
101
+
102
+ Lemming includes a modern, fast Web UI to monitor your projects.
103
+
104
+ ```bash
105
+ lemming serve
106
+
107
+ # Or share it remotely via a secure tunnel with token auth
108
+ lemming serve --tunnel cloudflare
109
+ ```
110
+
111
+ - **Real-time Monitoring**: Watch tasks move from pending to in-progress to
112
+ completed.
113
+ - **Switch Project**: Easily switch between different projects or create new
114
+ folders directly from the UI.
115
+ - **Browse Files**: Quickly open your workspace in a separate window to inspect
116
+ files and directory structure alongside the roadmap.
117
+ - **Interactive Controls**: Add tasks, edit context, and manage the execution
118
+ loop from your browser.
119
+
120
+ ---
121
+
122
+ ## How it Works
123
+
124
+ Lemming maintains a human-readable `tasks.yml` file containing your project
125
+ context, a queue of tasks, and recorded progress. When you run `lemming run`, it
126
+ loops through each pending task:
127
+
128
+ 1. **Build a scoped prompt**: Lemming assembles a prompt containing only the
129
+ project context, a summary of completed tasks and their progress, and the
130
+ current task description.
131
+ 2. **Invoke the agent**: It launches your chosen agent CLI with that prompt,
132
+ monitors it with heartbeats, and streams output to a log file.
133
+ 3. **Collect results**: The agent reports back via the Lemming CLI — recording
134
+ findings with `lemming progress`, then marking the task with
135
+ `lemming complete` or `lemming fail`. Agents can also schedule new tasks
136
+ with `lemming add`, breaking down complex work into smaller steps that
137
+ Lemming will pick up automatically.
138
+ 4. **Retry or advance**: On failure, Lemming retries the task (up to
139
+ `--retries`) with accumulated progress as context, so the agent learns from
140
+ previous attempts. On success, it moves to the next task.
141
+ 5. **Orchestration**: After each task, Lemming can run one or more
142
+ **Orchestrator Hooks** (like the built-in `roadmap` hook) to evaluate the
143
+ results and adapt the roadmap if needed. Hooks are enabled by default but
144
+ can be disabled via configuration.
145
+
146
+ ---
147
+
148
+ ## Orchestrator Hooks ⚓️
149
+
150
+ For longer, multi-stage projects, the initial task list often can't anticipate
151
+ everything. Tasks may fail in ways that retrying won't fix, or completing all
152
+ tasks may not fully achieve the stated goal. **Orchestrator Hooks** address this
153
+ by running custom agents or scripts after each task execution to evaluate
154
+ results and adapt the roadmap.
155
+
156
+ By default, Lemming runs all available hooks (including the built-in `roadmap`
157
+ hook). You can customize this behavior via the `hooks` subcommand:
158
+
159
+ ```bash
160
+ # Enable or disable hooks for the project
161
+ lemming hooks enable lint
162
+ lemming hooks disable roadmap
163
+
164
+ # Set the exact list of active hooks
165
+ lemming hooks set roadmap lint
166
+
167
+ # Reset to default (run all available hooks)
168
+ lemming hooks reset
169
+ ```
170
+
171
+ ### Built-in Hooks ⚓️
172
+
173
+ Lemming comes with several built-in hooks to help manage your project:
174
+
175
+ - **`roadmap`**: The primary mechanism for autonomous project management. It
176
+ analyzes the results of the finished task and decides if the remaining roadmap
177
+ needs to be adjusted (e.g., adding a missing prerequisite, skipping obsolete
178
+ tasks, or breaking down a broad task).
179
+ - **`readability`**: A code quality hook that reviews changes for adherence to
180
+ the Google Style Guide and general readability using the
181
+ [readability](https://github.com/owahltinez/readability) tool (exposed as
182
+ `lemming readability`). It can record findings as task progress or suggest
183
+ follow-up refactoring tasks.
184
+
185
+ ### Custom and Global Hooks
186
+
187
+ You can create your own hooks by adding Markdown files to:
188
+
189
+ 1. **Project-specific**: `.lemming/hooks/*.md`
190
+ 2. **Global**: `~/.local/lemming/hooks/*.md`
191
+
192
+ Lemming's built-in hooks can be symlinked to the global directory using
193
+ `lemming hooks install`. This allows you to easily **override** a built-in hook
194
+ by replacing its symlink with a file, or **disable** a global override by
195
+ deleting the symlink.
196
+
197
+ Hooks follow a specific discovery precedence: **Project > Global > Built-in**.
198
+ See [DOCS/HOOKS.md](docs/HOOKS.md) for more details.
199
+
200
+ ### Managing Hooks and Configuration
201
+
202
+ Use the `config` and `hooks` commands to manage your project's execution loop:
203
+
204
+ ```bash
205
+ # List all available hooks (built-in and local)
206
+ lemming hooks list
207
+
208
+ # Install (symlink) built-in hooks to the global directory
209
+ lemming hooks install
210
+
211
+ # View current project configuration
212
+ lemming config list
213
+
214
+ # Persist configuration to tasks.yml
215
+ lemming config set runner aider
216
+ lemming hooks set roadmap lint
217
+ ```
218
+
219
+ ---
220
+
221
+ ## Command Reference
222
+
223
+ ### Roadmap Management
224
+
225
+ - **`status [<id>]`**: Roadmap overview or deep-dive into a specific task.
226
+ - **`context [<text>]`**: Set or view project-wide instructions. Supports
227
+ `-f/--file`.
228
+ - **`add <desc>`**: Append a new task. Supports `--index` and `--runner`.
229
+ - **`edit <id>`**: Modify a task's description, runner, or position.
230
+ - **`delete <id>`**: Remove a task. Supports `--all` and `--completed` for bulk
231
+ operations.
232
+ - **`progress`**: Manage progress entries and findings for specific tasks.
233
+ - `list <id>`: List all progress for a task.
234
+ - `add <id> <finding>`: Record a new technical detail.
235
+ - `edit <id> <index> <text>`: Modify an existing progress entry.
236
+ - `delete <id> <index>`: Remove a progress entry.
237
+ - **`config`**: Manage project configuration (runner, retries).
238
+ - `list`: View current configuration.
239
+ - `set <key> <value>`: Update a setting.
240
+ - **`hooks`**: Manage orchestrator hooks.
241
+ - `list`: View available and active hooks.
242
+ - `install`: Install built-in hooks to the global directory.
243
+ - `enable <name>...`: Activate one or more hooks.
244
+ - `disable <name>...`: Deactivate one or more hooks.
245
+ - `set <name>...`: Set the exact list of active hooks.
246
+ - `reset`: Restore default hooks (run all available).
247
+ - **`readability`**: Code quality tool for style guide adherence, wrapping the
248
+ [readability](https://github.com/owahltinez/readability) package. Ruff and
249
+ Pyrefly run with bundled Google-style defaults unless the target project
250
+ defines its own configuration.
251
+ - `check <paths>...`: Run formatters and linters.
252
+ - `guide <language>`: Fetch and view style guides.
253
+ - `languages`: List all supported languages.
254
+ - `sync`: Synchronize style guides from the web.
255
+
256
+ ### Task Status
257
+
258
+ - **`complete <id>`**: Mark a task as successful.
259
+ - **`fail <id>`**: Mark a task as a terminal failure (will not be retried).
260
+ - **`cancel <id>`**: Stop an in-progress task (kills the runner process).
261
+ - **`reset <id>`**: Clear attempts and progress to start a task fresh.
262
+ - **`logs [<id>]`**: Print a task's execution log to stdout. If no ID is
263
+ provided, it defaults to the active or most recent task. Orchestrator hook
264
+ output is automatically appended.
265
+
266
+ ### Execution
267
+
268
+ - **`run`**: Start the autonomous orchestrator loop.
269
+ - `--retry-delay`: Seconds to wait before retries (default 10).
270
+ - `--yolo`: Run the runner in auto-approve mode (default: True).
271
+ - `--env`: Set environment variables for the runner (e.g., `--env KEY=VALUE`).
272
+ - `--no-defaults`: Skip default flag injection for known runners.
273
+ - `--`: Use `--` to pass any flag directly to the underlying runner.
274
+ - **`serve`**: Launch the interactive Web UI.
275
+ - `--port`: The port to bind the server to (default: 8999).
276
+ - `--host`: The host address to bind the server to (default: 127.0.0.1).
277
+ - `--tunnel cloudflare|tailscale`: Expose the UI to the public internet via a
278
+ secure tunnel.
279
+ - `--timeout`: Auto-shutdown after a duration (e.g., `8h`, `30m`). Defaults to
280
+ `8h` with `--tunnel`, disabled otherwise.
281
+
282
+ ---
283
+
284
+ ## Advanced: Runner Customization
285
+
286
+ Lemming uses **fuzzy matching** to automatically inject the correct "YOLO"
287
+ (auto-approve) and "Quiet" flags for popular tools:
288
+
289
+ - **Antigravity (`agy`)**: Adds `--dangerously-skip-permissions`
290
+ - **Aider**: Adds `--yes --quiet`
291
+ - **Claude**: Adds `--dangerously-skip-permissions`
292
+ - **Codex**: Adds `--yolo`
293
+
294
+ You can disable this behavior with `--no-defaults`, or use a **template** to
295
+ fully control the command layout:
296
+
297
+ ```bash
298
+ lemming run --runner "my-tool --input={{prompt}} --json"
299
+ ```
300
+
301
+ When `{{prompt}}` is present in the runner string, Lemming replaces it with the
302
+ prompt text and skips all default flag injection.
303
+
304
+ ---
305
+
306
+ ## Screenshots
307
+
308
+ ### Dashboard
309
+
310
+ ![Dashboard](docs/screenshots/dashboard-desktop.png)
311
+
312
+ ### Task Log
313
+
314
+ ![Task Log](docs/screenshots/task-log-desktop.png)
@@ -0,0 +1,94 @@
1
+ lemming/__init__.py,sha256=U6NU1dYYEEG5uWWd0_oNqxLMir4dp8VCc_q-tl0Vtcc,67
2
+ lemming/api.py,sha256=6OQjpHCPOqugydLL5pWLGz2V43PNRG4B2Ph7m3x4yiU,150
3
+ lemming/api_test.py,sha256=Uj_PAfqkvH7U2YCjUSh9pI7gAUzvo-sSHahGSSQ7gho,166
4
+ lemming/cli.py,sha256=U0zIwUOJyWCrkspmjOnqZFqkKFX3KBluLQdWr0UU568,87
5
+ lemming/cli_test.py,sha256=bOGzBlm1Uyxx7BlRpLSz8p6li2PIZHtIZjzU2DwuXwA,535
6
+ lemming/conftest.py,sha256=udpLvr1AIZYbzJFtWLI-IjAaLVeCyIILpE0sOS15U-c,367
7
+ lemming/hooks.py,sha256=re3w1n8SYgH2QKlMSpmhJqLkqNN-J3wiWrzt8q5VoQY,5241
8
+ lemming/hooks_test.py,sha256=Zo1YXRx0gn_BgCzQsYrC9SKpeJ9L6TIXm-RURhmRrgE,5887
9
+ lemming/integration_test.py,sha256=IdfPWQuNhk1akPiBWfYuU3mQ32y8gbZ9EAN9BED3GTY,11912
10
+ lemming/main.py,sha256=YI51bShlNZ3WYyfxSIqQdcYi3aORo1IUQHRviOTaokQ,119
11
+ lemming/main_test.py,sha256=XCZNAkOC1-OBII9TVpld3fNSJo8qycNukLm7RudH4Ss,1275
12
+ lemming/models.py,sha256=CDFXi8KX_iKrgkFII9Vw8TTOE0Mugg_2kGzyfKhXLIU,2451
13
+ lemming/models_test.py,sha256=k3c6hYx7Qy9bWADdFPvTOB0ZiNG6NhA7Ra-QOTyIgj8,2824
14
+ lemming/orchestrator.py,sha256=ODJjws2tJRSeDcoiQY2k96e6kqIRZpluhcFVFmqYly0,12286
15
+ lemming/orchestrator_test.py,sha256=WYWrE8qO1E_SHQN-d5JNCWpBkUjEPHn4V83UPTuZ59Q,14126
16
+ lemming/paths.py,sha256=89elo32umyAZFP6D5n2fVXNA01WhNCN8mO1LZyMEnQc,7502
17
+ lemming/paths_test.py,sha256=hDZuaj-RzGaBIg0NjKKOx_O6DDr2QL9VN0HaAT4RONQ,6377
18
+ lemming/persistence.py,sha256=Kkh6ltyg_48MH-A8mbvQ_1Wwma0nzPwzE2wqHcjQD6o,5807
19
+ lemming/persistence_test.py,sha256=hw2oW3Y4eKNFq93ay7eC8NXtwikJAohBBTuEHxpJElI,4442
20
+ lemming/prompts.py,sha256=OXUS1mWaw3U1vMF1pLeo9v0ZGVQ3GtZXVIqSkbeGMc0,12892
21
+ lemming/prompts_test.py,sha256=wUz-KqkO49hwEsiiLTzj3l0xo9Z0QYtyHUAzyDcSbug,13465
22
+ lemming/providers.py,sha256=-yeWxX2pdx1qunYeO-ZcxxY27Q0eCJnsR-mgmVQcEMg,6098
23
+ lemming/providers_test.py,sha256=oJNzKspi1sX7ks_tyLkIc8n86Cyj8eAKuoQKFJxGiRA,2286
24
+ lemming/runner.py,sha256=NH4CNi8LM_Ad1cDiGnF1IMo4W9E0bScyc-Rb2GFzczI,10834
25
+ lemming/runner_test.py,sha256=Y-mFJtbSoRs2a64VHOXCMQ8FQUkZ1rQxc6B2tGu-fIU,12407
26
+ lemming/api/__init__.py,sha256=FUKjBXQC-3T6oidTshfmQaSFQ5iC2qBugPrJurJUqHY,135
27
+ lemming/api/auth.py,sha256=3XCaL6qzuQTu7cThHYcwIXoW515Bx2KxvEePJx7jpV4,1211
28
+ lemming/api/auth_test.py,sha256=rmCgydQzT8tMxuUekW4v-wkWs1_avqdBEiqbLbdHEcY,1376
29
+ lemming/api/config.py,sha256=Hb-wJcFx0fAbMzSVbV3V8SjRrfPj3kTPPWTK22jmrOE,2289
30
+ lemming/api/config_test.py,sha256=-QHhhO6Tt9OHMXhd_X20eU5ApTCmOzcgzEQYex3RTS8,2762
31
+ lemming/api/conftest.py,sha256=Ig2qPrvYtwfKbPl8fcB6XcZoXg4m5SYWxDWszUv3xZA,6205
32
+ lemming/api/context.py,sha256=7wrfAhoLIultMvjr_HHCrEghPIDTdxpNKAvsXKZUYSk,1197
33
+ lemming/api/context_test.py,sha256=S5dXLx1Hj7GWd-uo8pWgJLyyFdHyV-zKhWjf6RfIyyI,1736
34
+ lemming/api/directories.py,sha256=EpVHrvq-xrvPZ0VSXSlG1AlHyATPGuZ4MLqGwqAQgTg,1935
35
+ lemming/api/directories_test.py,sha256=Ul75zYS6ANqxKMctr0OCypfhfIwRcNG9XY2W1K83ZRY,3303
36
+ lemming/api/files.py,sha256=VB8hcjVj7OW4ogQHFAiZfjUD6inpXqwo-8USnD1tqMo,3514
37
+ lemming/api/files_test.py,sha256=H9mYgC4bjU1FWgPXFMyd_cf8E9EQJUWZ2cu4GAe1uAU,5403
38
+ lemming/api/hooks.py,sha256=vhyD7NfdpNYL-EUSgq_CAHozHFzdneDjfNxM6I0L9wc,434
39
+ lemming/api/hooks_test.py,sha256=JQB_hVI0E3wPHFu8InNbWsvo4jOUbdFBu1GXzcmZIX0,1140
40
+ lemming/api/logging.py,sha256=TbRK8AHAtJ9c3bD9xW9nqT3u0DPqAoLEYwoEip2f38w,540
41
+ lemming/api/logging_test.py,sha256=M0is_faEb0-WoH_wJ55-X7O7oHWvH0BeENEfigqsWCM,1900
42
+ lemming/api/loop.py,sha256=z2EtZBqQyiN0mU9jcHLreUqqHN3yWEGOCvMHTYzHi68,1066
43
+ lemming/api/loop_test.py,sha256=DD5IlPWnxPylJwF6KWGKBI0t7X_uQ-sQ4IsAa74TwyE,1963
44
+ lemming/api/main.py,sha256=VaNBFHjD4jbgP_rdkBY9fjhwTE_UFMg_TRLyRBnEC94,1538
45
+ lemming/api/main_test.py,sha256=scTP5zee1LBDgZ_P20X-MgbBAb4iQAde4ADIuhY1nww,1128
46
+ lemming/api/tasks.py,sha256=Ca7kf1bNYFNK1jjucPc2A0r6mqGq3IknxTCMQ2nIYVY,5442
47
+ lemming/api/tasks_test.py,sha256=G6_o_WMPArWEO2oibrakQPswAyieRBmSYEhKb3s9HIo,14771
48
+ lemming/cli/__init__.py,sha256=bX_VbCou4hpOnZGdV7eMezHJ_mMnICH7eRFt0Tj5-mA,492
49
+ lemming/cli/config.py,sha256=rrI_MnZ914BdpP8K3CFAQhmNcVv-_D_0QjyjuFZ9ZF4,1956
50
+ lemming/cli/config_test.py,sha256=BMhzQEwNXqOoZpRml-v_OJYmvA2SxWxjYeUxONKZfJc,1404
51
+ lemming/cli/context.py,sha256=V29HhcqazA2FeL9z2a_wrpBh8wP14DzU5b-tMKcrgko,1177
52
+ lemming/cli/context_test.py,sha256=dRtAbceb8PfpGBRbbdKXepjw4QgBG62vTVwwXx_tgfE,1390
53
+ lemming/cli/hooks.py,sha256=fJcWSdHvvnGBpIm8dhn-KVO1w3DjVo_297rrcHxcFdQ,4506
54
+ lemming/cli/hooks_test.py,sha256=iVNY0oxXR-hWXrWnhmhfJZS3WNnPAy9bckvaAgh1D9Q,1381
55
+ lemming/cli/main.py,sha256=dYWBwH0VCPtaQfCKkFiZIjZD6X0YbE0XfA8s5SF1lxw,1165
56
+ lemming/cli/main_test.py,sha256=wBVgQsw_492Cv-YJRTElPmSjb4u0hJmnUqSqkjh8HII,475
57
+ lemming/cli/operations.py,sha256=UugqEv-57oGR7DKmxFWly_XT9VdDD0R1pMnnpjOfqd8,6585
58
+ lemming/cli/operations_test.py,sha256=gcCSSmSXrF1LYU_baJBmV1RWuTbKYgmiJgVLLmI8xoQ,1216
59
+ lemming/cli/progress.py,sha256=ul7mZVrrmizxLfdR81Xy8V5_LF49T6Fk-xNgCzNjcoE,1431
60
+ lemming/cli/progress_test.py,sha256=nr7Nj0n8ZgLLi_I5UkmTUWIHDFhnoaogFh691I9BzQw,988
61
+ lemming/cli/readability_cli.py,sha256=nAfdOuSZDy49qLSf4EpoQz9Fekh8TwawxP4creROyzg,868
62
+ lemming/cli/readability_cli_test.py,sha256=-UQjOhevYEGbpcVJrmC9RVRq4g9Se3Lgw9ge-dQLLQo,1793
63
+ lemming/cli/tasks.py,sha256=v3FYLWxam_HFhFdTKVpN-uyajOYnYZ2AYp0lcJ2POBc,16421
64
+ lemming/cli/tasks_test.py,sha256=eenSIfO1Vgi908aGYvN1fLheWJIhdMpVJwixmvQUCJg,5757
65
+ lemming/prompts/taskrunner.md,sha256=98QWkP6yaFm2uRT6FPIqAQcH5RKY1imyPqvOz1twSU4,3775
66
+ lemming/prompts/hooks/readability.md,sha256=stDhoUvOH5BZSl81-_Ex7agJ3ZAsm03JDhB9S-txc0E,1478
67
+ lemming/prompts/hooks/roadmap.md,sha256=bjXgHrzD2W0oeSwg9sfqsYNwpOI_D0KXDDeXTP2Nm0w,2726
68
+ lemming/prompts/hooks/testing.md,sha256=V8Q3lUw2xvUC8vjV0Oui7-KkOBqo0vosPVFTqbPOZ-4,1622
69
+ lemming/tasks/__init__.py,sha256=xlLg0a19yjY9QoAcIqodiI8aRDiIiFonUHRYmhKrvcQ,1924
70
+ lemming/tasks/lifecycle.py,sha256=2HV3CCo3DxfrVX6cz7C6YM697ib4aGUJSbQwLZDObvQ,10308
71
+ lemming/tasks/lifecycle_test.py,sha256=Af68tYa6vqlVWl1yyea0pISXTAHLSMgwDrjRCkK7Xg8,9345
72
+ lemming/tasks/operations.py,sha256=ZW_Sq0Mzhp_6mOmobwHLW-NWIwbTdgxcMhfUlfp_bc0,8529
73
+ lemming/tasks/operations_test.py,sha256=6aJ4_DZJAhh5wAQzbf809nyXDWstNJQ46lCoTnYHF8M,5280
74
+ lemming/tasks/progress.py,sha256=pQzmWU47IN7ZO7S4e3AjLekSg4oYk26oqr2Lc4wtUJ8,788
75
+ lemming/tasks/progress_test.py,sha256=YSTr5hr2Of0I69HAb5nsUFkYEUNBdO68iOONNAn3oT4,604
76
+ lemming/tasks/queries.py,sha256=gdMI_4aY2vwxfkJCNjUCjN4cutRxSaspq2SrfAtWvuE,4044
77
+ lemming/tasks/queries_test.py,sha256=DNrXWxHyk1I8bgoyCNeyWkEW6F4ANbnySm_m1D8l2BI,7102
78
+ lemming/web/dashboard.spec.js,sha256=yyCTigQ9fMTu0-9898UBjA4sgJaZyO4-J-mQFF05RkU,11727
79
+ lemming/web/dashboard.test.js,sha256=Vd2Z-6ult9bZWns_mnSELt1SgHLfLVmGh1oov0ukVY0,31166
80
+ lemming/web/favicon.js,sha256=dwq2KvQWX0t9A6s-sr-Almn1quwpOzx8gEgb0SU1RSA,1476
81
+ lemming/web/favicon.spec.js,sha256=Xe9lzlM5FVPBdGomEt0y_uau11fwAKFYs_Ikfa4SjxA,7828
82
+ lemming/web/files.html,sha256=P_GpyZGA7WjM-pHncNYuwmxv0JG19h1NeIbJ2XzmH7c,13544
83
+ lemming/web/files.spec.js,sha256=gVWeElxbuO2RzkMrAcXoCONFfD9zq6uUWUVEO1NT-uQ,2821
84
+ lemming/web/index.html,sha256=RkWvLx5mO32zzqQ35nqGkD94L9rzQ7UQcRNML5Uk_ZE,43835
85
+ lemming/web/index.js,sha256=Ym2N-voOOyIBmYid-h2LMxM9GjbL7l2ewPNfylZlHzQ,23931
86
+ lemming/web/logs.html,sha256=p6wUalVhczgl94HAxdo14_PZrPgus6BRth9MaR8tup0,13119
87
+ lemming/web/logs.test.js,sha256=MmKVi4ohIwO_vus56euK4eiG75Qk1g1r8HiJW5rN4Go,6874
88
+ lemming/web/mancha.js,sha256=FVnnKTL8eU8Ov89m4Z0zLXLXNqWSkeiQPO-qM228ISY,73049
89
+ lemming/web/screenshots.spec.js,sha256=bSUJFOt4x9lD-2g-5ZwqM0Tgu2hnGi85aIHz31hniwE,9881
90
+ lemming_cli-0.1.0.dist-info/METADATA,sha256=jfWQYV1BwW-L43B6e12QC8QOxZ9UvqA_BGISavAGvlQ,11363
91
+ lemming_cli-0.1.0.dist-info/WHEEL,sha256=lCkmxWfQsSc9CfIClYeavTdQeEX2toPqufh9gI35EQA,87
92
+ lemming_cli-0.1.0.dist-info/entry_points.txt,sha256=_sap_0UXhFI1pbQQC2sNBgPWhgWSDy4EnOcBYZOL_T8,45
93
+ lemming_cli-0.1.0.dist-info/licenses/LICENSE,sha256=ESYyLizI0WWtxMeS7rGVcX3ivMezm-HOd5WdeOh-9oU,1056
94
+ lemming_cli-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.31.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ lemming = lemming.main:cli
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.