kaizen-agent 1.2.0 → 1.2.2
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.
- package/README.md +57 -0
- package/cli/dashboard.ts +4 -0
- package/cli/settings.ts +7 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -226,6 +226,62 @@ kaizen Done, and reviewed. Two things found:
|
|
|
226
226
|
|
|
227
227
|
</details>
|
|
228
228
|
|
|
229
|
+
## The board
|
|
230
|
+
|
|
231
|
+
`kaizen` opens a dashboard; **Board** is the screen where your work lives. Ideas you have
|
|
232
|
+
not started sit on the left, runs sit under the stage they are actually in, and it redraws
|
|
233
|
+
itself as your agents write to disk — a run that moves while you are looking at it moves on
|
|
234
|
+
screen.
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
Board ~/code/acme-api
|
|
238
|
+
|
|
239
|
+
IDEA PLANNING BUILDING REVIEW DONE
|
|
240
|
+
────────────────────── ─────────────────── ──────────────── ───────────── ──────────────
|
|
241
|
+
› · rate limit the ◌ nightly digest ● payroll export ● oauth login ○ rename cli
|
|
242
|
+
public API flags
|
|
243
|
+
● landing page ○ csv import
|
|
244
|
+
· retry failed
|
|
245
|
+
webhooks
|
|
246
|
+
|
|
247
|
+
↑↓←→ move n new e edit x reject d delete r run a all projects q back
|
|
248
|
+
● running ◐ stalled ◌ starting ● waiting on you ○ done · idea
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
**Throw an idea in with `n`** and it lands in `<state.dir>/inbox.md`, one line each, in the
|
|
252
|
+
same format a run's backlog already uses. `e` edits, `x` rejects with a reason, `d` deletes.
|
|
253
|
+
|
|
254
|
+
**`r` starts a run from an idea** — it asks `full` or `lite`, then opens your configured
|
|
255
|
+
agent with the request already typed. The idea retires from the board once a run exists
|
|
256
|
+
that was started from its text, whoever started it, so the same work never appears twice.
|
|
257
|
+
That check spans every project you have opened, because an idea thrown into the global
|
|
258
|
+
inbox becomes a run inside whichever project you launched the agent in.
|
|
259
|
+
|
|
260
|
+
**The dot is what the run is doing.** `●` cyan is running and `◐` is stalled — kaizen
|
|
261
|
+
records no liveness signal anywhere, so "running" means the run's `state.json` has changed
|
|
262
|
+
in the last half hour. A run whose terminal you closed three days ago shows as stalled,
|
|
263
|
+
which is the distinction the board exists to make. `●` amber, with the name in red, is a
|
|
264
|
+
run that cannot move until you decide something; the legend lists only the states actually
|
|
265
|
+
on screen.
|
|
266
|
+
|
|
267
|
+
**A run's stage is kaizen's, not yours.** You cannot drag a card between columns — a board
|
|
268
|
+
that could do that would be lying about what happened. The one exception is `x` on a run
|
|
269
|
+
card, which abandons it: the same transition `/kaizen abort` makes, with your reason
|
|
270
|
+
recorded in the run's approval file.
|
|
271
|
+
|
|
272
|
+
`a` switches between this project and every project kaizen knows about. Below a hundred
|
|
273
|
+
columns the board stacks into a list rather than squeezing five columns into sixty.
|
|
274
|
+
|
|
275
|
+
### Mouse
|
|
276
|
+
|
|
277
|
+
Off by default. Turn it on in `kaizen settings` under `ui.mouse`, and clicking a row or
|
|
278
|
+
card selects it, clicking it again opens or runs it, and the wheel scrolls — on the board,
|
|
279
|
+
the menu, runs, backlog, projects and settings.
|
|
280
|
+
|
|
281
|
+
It ships off because the trade is real: while the TUI holds the mouse, your terminal cannot
|
|
282
|
+
select text with it, so copying a run id out of the dashboard stops working until you
|
|
283
|
+
leave. Hold **Shift** and drag to select text anyway.
|
|
284
|
+
|
|
229
285
|
## Install
|
|
230
286
|
|
|
231
287
|
### Prerequisites: Bun
|
|
@@ -433,6 +489,7 @@ in one can be finished in another. See [adapters.md](https://github.com/hfadhlul
|
|
|
433
489
|
| `build.executor` | `subagent` | Who does the work: a separate agent, `inline` in the current one, or `ask` each time |
|
|
434
490
|
| `auto_fix.min_severity` | `high` | Findings this bad or worse get fixed without asking |
|
|
435
491
|
| `approvals.plan` | `true` | Stop and show the plan before anything is built |
|
|
492
|
+
| `ui.mouse` | `false` | Click to select, click again to act; while on, the terminal cannot select text |
|
|
436
493
|
|
|
437
494
|
```bash
|
|
438
495
|
kaizen settings
|
package/cli/dashboard.ts
CHANGED
|
@@ -228,6 +228,10 @@ export async function dashboard(
|
|
|
228
228
|
const lines = await run(chosen);
|
|
229
229
|
if (lines?.length) await report(lines);
|
|
230
230
|
survey(); // an action may have changed what exists
|
|
231
|
+
// Settings is one of those actions, and ui.mouse is one of its keys: without
|
|
232
|
+
// this the toggle does nothing until the next launch.
|
|
233
|
+
mouseWanted = mouseFromConfig(state);
|
|
234
|
+
if (mouseWanted) mouseOn(); else mouseOff();
|
|
231
235
|
}
|
|
232
236
|
} finally {
|
|
233
237
|
mouseOff();
|
package/cli/settings.ts
CHANGED
|
@@ -171,6 +171,7 @@ export async function settings(repoRoot: string, standalone = true) {
|
|
|
171
171
|
|
|
172
172
|
function cycle(step: number) {
|
|
173
173
|
const s = SETTINGS[active]!;
|
|
174
|
+
const wasMouse = s.key === "ui.mouse";
|
|
174
175
|
const text = readFileSync(file, "utf8");
|
|
175
176
|
if (s.key === "preset") {
|
|
176
177
|
const current = detectPreset(text, defaults);
|
|
@@ -193,6 +194,12 @@ export async function settings(repoRoot: string, standalone = true) {
|
|
|
193
194
|
saved = read(updated, s.key) === next
|
|
194
195
|
? c.green(`saved ${s.key} = ${next || '""'} (preset: ${detected})`)
|
|
195
196
|
: `\x1b[33mcould not write ${s.key}\x1b[0m`;
|
|
197
|
+
// Applied here rather than at the next launch: a toggle that needs a restart
|
|
198
|
+
// reads as a toggle that does not work.
|
|
199
|
+
if (wasMouse) {
|
|
200
|
+
if (next === "true" && !mouseArmed) { stdout.write("\x1b[?1000h\x1b[?1006h"); mouseArmed = true; }
|
|
201
|
+
if (next === "false" && mouseArmed) { stdout.write("\x1b[?1006l\x1b[?1000l"); mouseArmed = false; }
|
|
202
|
+
}
|
|
196
203
|
}
|
|
197
204
|
}
|
|
198
205
|
|
package/package.json
CHANGED