@spoolway/win32-x64 0.2.0 → 0.3.0
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 +76 -89
- package/bin/spoolway.exe +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<a href="https://github.com/marvingygas/spoolway/releases/latest"><img alt="release" src="https://img.shields.io/github/v/release/marvingygas/spoolway?style=flat-square&label=release&labelColor=3f3f46&color=18181b"></a>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
|
-
Minimalistic command line state machine for turning coding agents into a pipeline you can actually reason about. No dependencies, terminal native. Runs headless or
|
|
14
|
+
Minimalistic command line state machine for turning coding agents into a pipeline you can actually reason about. No dependencies, terminal native. Runs headless or in a supported multiplexer. Manages worktrees and opens GitHub stacked pull requests.
|
|
15
15
|
|
|
16
16
|
Supported providers:
|
|
17
17
|
|
|
@@ -26,36 +26,33 @@ Supported multiplexers:
|
|
|
26
26
|
|
|
27
27
|
## Why
|
|
28
28
|
|
|
29
|
-
Running one coding agent is easy. Running five is
|
|
30
|
-
|
|
31
|
-
in your head, and it stops the moment you look away.
|
|
29
|
+
Running one coding agent is easy. Running five is hard: which one is done, which one is
|
|
30
|
+
stuck, and which one is rewriting a file another one needs. The order lives in your head.
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
spoolway replaces the orchestrating agent that keeps everything together. It has no model
|
|
33
|
+
inside, so it never surprises you with a bill or an opinion.
|
|
35
34
|
|
|
36
35
|
## Features
|
|
37
36
|
|
|
38
|
-
- **A dispatcher with no model in it.** Every scheduling decision is
|
|
39
|
-
|
|
40
|
-
and is safe to interrupt at any point.
|
|
37
|
+
- **A dispatcher with no model in it.** Every scheduling decision is a counter, a
|
|
38
|
+
timestamp, or a position in the pipeline file. It costs nothing and is safe to interrupt.
|
|
41
39
|
- **Any mix of agents.** Each step names its own agent and model: a local model for
|
|
42
|
-
implementation, a cloud model for review, a shell command for the
|
|
43
|
-
- **A worktree per task.** Every task
|
|
44
|
-
|
|
40
|
+
implementation, a cloud model for review, a shell command for the tests.
|
|
41
|
+
- **A worktree per task.** Every task works on its own branch in its own checkout.
|
|
42
|
+
Parallel tasks never touch each other's files.
|
|
45
43
|
- **Stacked pull requests.** A dependent task's branch is cut from its dependency's
|
|
46
|
-
branch
|
|
47
|
-
|
|
48
|
-
- **Session reuse.** A step can resume its prompt's earlier conversation
|
|
49
|
-
|
|
50
|
-
- **Unattended runs.** Overnight,
|
|
51
|
-
|
|
52
|
-
- **Trials.** Fork a
|
|
53
|
-
|
|
54
|
-
- **Routines.** Keep the tasks you run
|
|
55
|
-
- **Jobs.** Run a routine on a cron schedule.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
your last pipeline edit did to pass rate and price.
|
|
44
|
+
branch. A chain of tasks arrives as one ordered stack of PRs. You land the stack.
|
|
45
|
+
Optional, driven by **`spoolway stack`**.
|
|
46
|
+
- **Session reuse.** A step can resume its prompt's earlier conversation. It stops
|
|
47
|
+
reusing when the model's window is too full.
|
|
48
|
+
- **Unattended runs.** Overnight, an unblocker prompt resumes blocked work. A token or
|
|
49
|
+
dollar ceiling stops the run.
|
|
50
|
+
- **Trials.** Fork a group into one arm per task, each on its own pipeline, and compare
|
|
51
|
+
the arms in eval.
|
|
52
|
+
- **Routines.** Keep the tasks you run more than once in `.spoolway/routines/`.
|
|
53
|
+
- **Jobs.** Run a routine on a cron schedule. A running dispatcher fires it.
|
|
54
|
+
- **Eval built in.** Every lane's spend and outcome go into a ledger. You see what your
|
|
55
|
+
last pipeline edit did to pass rate and price.
|
|
59
56
|
|
|
60
57
|
## Install
|
|
61
58
|
|
|
@@ -63,10 +60,9 @@ sometimes does. spoolway won't surprise you with a bill or an opinion.
|
|
|
63
60
|
npm install -g spoolway
|
|
64
61
|
```
|
|
65
62
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
offline from any directory.
|
|
63
|
+
The package is a small wrapper around a prebuilt binary. It runs on Linux (x64, arm64,
|
|
64
|
+
musl), macOS (Apple Silicon, Intel) and Windows (x64, experimental). `spoolway update` shows
|
|
65
|
+
what changed, and `spoolway whats-new` prints the release notes offline.
|
|
70
66
|
|
|
71
67
|
From source instead, in a clone of this repository:
|
|
72
68
|
|
|
@@ -84,24 +80,20 @@ Platform notes and requirements in full: **[Installation and setup](docs/install
|
|
|
84
80
|
spoolway init
|
|
85
81
|
```
|
|
86
82
|
|
|
87
|
-
`spoolway doctor` checks that everything the configured pipeline needs is
|
|
88
|
-
present, any time you want to confirm the project would run.
|
|
83
|
+
`spoolway doctor` checks that everything the configured pipeline needs is present.
|
|
89
84
|
|
|
90
85
|
### 2. Plan, or create queueable spoolway tasks directly
|
|
91
86
|
|
|
92
|
-
Tell the `/spoolway-plan` skill what you want built. It
|
|
93
|
-
|
|
94
|
-
cuts the plan into tasks.
|
|
87
|
+
Tell the `/spoolway-plan` skill what you want built. It talks the shape through with you
|
|
88
|
+
and writes one plan page. Approve the page and it cuts the plan into tasks.
|
|
95
89
|
|
|
96
90
|
<img src="docs/screenshots/plan.png" alt="a plan page written by /spoolway-plan">
|
|
97
91
|
|
|
98
|
-
|
|
99
|
-
documents straight away.
|
|
92
|
+
If you already know the shape, `/spoolway-tasks` cuts the task documents straight away.
|
|
100
93
|
|
|
101
|
-
**Both skills are optional.** A task is
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
the frontmatter a task document must carry:
|
|
94
|
+
**Both skills are optional.** A task is a Markdown file in `~/.spoolway/<project>/pending/`.
|
|
95
|
+
An issue exporter, a script, or any model can write one. This command prints the
|
|
96
|
+
frontmatter a task document must carry:
|
|
105
97
|
|
|
106
98
|
```
|
|
107
99
|
spoolway task contract
|
|
@@ -115,11 +107,10 @@ spoolway queue
|
|
|
115
107
|
|
|
116
108
|
<img src="docs/screenshots/queue.png" alt="the queue screen">
|
|
117
109
|
|
|
118
|
-
*The queue screen lists
|
|
119
|
-
|
|
120
|
-
dispatching
|
|
121
|
-
|
|
122
|
-
`.spoolway/routines/`.*
|
|
110
|
+
*The queue screen lists groups on the left and the selected group's tasks on the right.
|
|
111
|
+
Each task names its own pipeline. `enter` queues what is checked and offers to start
|
|
112
|
+
dispatching. `g` gates a task, `p` forks a group into a trial, `s` saves a group as a
|
|
113
|
+
routine, and `r` opens the routines in `.spoolway/routines/`.*
|
|
123
114
|
|
|
124
115
|
### 4. Dispatch
|
|
125
116
|
|
|
@@ -129,10 +120,10 @@ spoolway dispatch # watch the board, and step in only where you are needed
|
|
|
129
120
|
|
|
130
121
|
<img src="docs/screenshots/dispatch.png" alt="the dispatcher board">
|
|
131
122
|
|
|
132
|
-
*One row per task, grouped by `group:`. The board
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
123
|
+
*One row per task, grouped by `group:`. The board shows what each lane is spending, what
|
|
124
|
+
every queued task waits on, and which tasks are paused for you. NEXT tells a lane holding a
|
|
125
|
+
question apart from a task waiting at a gate. The bottom line shows the slots in use and
|
|
126
|
+
every scheduled job with its next firing.*
|
|
136
127
|
|
|
137
128
|
Every task on the board is in one of a few states:
|
|
138
129
|
|
|
@@ -147,14 +138,12 @@ Every task on the board is in one of a few states:
|
|
|
147
138
|
|
|
148
139
|
### 5. Calibrate
|
|
149
140
|
|
|
150
|
-
The `/spoolway-calibrate` skill reads your archived tasks
|
|
151
|
-
|
|
152
|
-
|
|
141
|
+
The `/spoolway-calibrate` skill reads your archived tasks, their step-level evaluation results
|
|
142
|
+
and the spend ledger. It compares them with the prompts, pipelines and settings that produced
|
|
143
|
+
them. The comparison explains review failures, blocked sessions and wasted loops.
|
|
153
144
|
|
|
154
|
-
It walks each finding with you, with the
|
|
155
|
-
|
|
156
|
-
everything else. This is how a pipeline that blocks constantly turns into one that runs
|
|
157
|
-
unattended.
|
|
145
|
+
It walks each finding with you, with the numbers behind it. It applies the prompt and pipeline
|
|
146
|
+
changes you pick.
|
|
158
147
|
|
|
159
148
|
## A task is what travels the line, and you define it
|
|
160
149
|
|
|
@@ -175,8 +164,8 @@ depends_on:
|
|
|
175
164
|
## References
|
|
176
165
|
```
|
|
177
166
|
|
|
178
|
-
**The frontmatter is spoolway's, the body is yours.** spoolway never reads the body
|
|
179
|
-
|
|
167
|
+
**The frontmatter is spoolway's, the body is yours.** spoolway never reads the body. The
|
|
168
|
+
agent works from it, and you own the skeleton it is written from.
|
|
180
169
|
|
|
181
170
|
## The pipeline is a file
|
|
182
171
|
|
|
@@ -232,17 +221,17 @@ steps:
|
|
|
232
221
|
on_fail: blocked
|
|
233
222
|
```
|
|
234
223
|
|
|
235
|
-
**You do not have to write one by hand.** The `/spoolway-config` skill writes
|
|
236
|
-
for you
|
|
224
|
+
**You do not have to write one by hand.** The `/spoolway-config` skill writes and edits
|
|
225
|
+
pipelines for you.
|
|
237
226
|
|
|
238
227
|
## Jobs
|
|
239
228
|
|
|
240
|
-
A job runs a routine on a schedule. It
|
|
241
|
-
routine
|
|
229
|
+
A job runs a routine on a schedule. It has three parts: a cron expression, a pipeline, and a
|
|
230
|
+
routine saved under `.spoolway/routines/`.
|
|
242
231
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
232
|
+
The dispatcher fires a due job at the start of its pass. While any job is enabled, the
|
|
233
|
+
dispatcher stays up on an empty queue. A `spoolway dispatch` left running overnight is all a
|
|
234
|
+
job needs.
|
|
246
235
|
|
|
247
236
|
```
|
|
248
237
|
spoolway jobs # the screen: write, edit, pause, delete, or fire a job
|
|
@@ -252,11 +241,11 @@ spoolway jobs run <name> # fire one now, ignoring its schedule
|
|
|
252
241
|
|
|
253
242
|
<img src="docs/screenshots/jobs.png" alt="the jobs screen">
|
|
254
243
|
|
|
255
|
-
*The jobs screen. `n`
|
|
256
|
-
A job fires once per matching minute
|
|
257
|
-
queue. A window that passes while no dispatcher
|
|
244
|
+
*The jobs screen. `n` asks for three things: the routine, the cron expression, and the
|
|
245
|
+
pipeline. A job fires once per matching minute. It skips a window while its previous run is
|
|
246
|
+
still in the queue. A window that passes while no dispatcher runs is not caught up later.*
|
|
258
247
|
|
|
259
|
-
A job is a few lines of TOML
|
|
248
|
+
A job is a few lines of TOML in `~/.spoolway/<project>/jobs.toml`. Put one in
|
|
260
249
|
`.spoolway/jobs.toml` inside the checkout to share it with the team.
|
|
261
250
|
|
|
262
251
|
```toml
|
|
@@ -268,24 +257,22 @@ routine = "nightly" # a folder or a single .md under .spoolway/routines/
|
|
|
268
257
|
|
|
269
258
|
### Routines
|
|
270
259
|
|
|
271
|
-
A routine is work you run more than once.
|
|
272
|
-
`
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
run. The saved files are never changed.
|
|
260
|
+
A routine is work you run more than once. It lives in `.spoolway/routines/`, tracked in git.
|
|
261
|
+
Press `s` on a group in the queue screen to save it there, and `r` to browse and queue what is
|
|
262
|
+
saved. Every queued copy gets a fresh id, so a routine can run again. The saved files are
|
|
263
|
+
never changed.
|
|
276
264
|
|
|
277
265
|
### Trials
|
|
278
266
|
|
|
279
267
|
A trial answers one question: which pipeline does this task best? Press `p` on a group in the
|
|
280
|
-
queue screen, pick a pipeline per task, and tick any steps to skip. Every task becomes one arm
|
|
281
|
-
|
|
268
|
+
queue screen, pick a pipeline per task, and tick any steps to skip. Every task becomes one arm
|
|
269
|
+
under its chosen pipeline, and all arms share one trial id. Compare them with
|
|
282
270
|
`spoolway eval --runs --trial <id>`. An arm never pushes a branch or opens a pull request. When
|
|
283
|
-
the last arm finishes, every arm's copy is removed
|
|
284
|
-
rows stay.
|
|
271
|
+
the last arm finishes, every arm's copy is removed. The source group and the ledger rows stay.
|
|
285
272
|
|
|
286
273
|
## Issue tracker
|
|
287
274
|
|
|
288
|
-
|
|
275
|
+
Event hooks sync tasks with an issue tracker. Sample scripts for GitHub and Jira ship with `spoolway init`.
|
|
289
276
|
|
|
290
277
|
| Event | When it fires |
|
|
291
278
|
|---|---|
|
|
@@ -297,15 +284,15 @@ Use event hooks to sync with project management tools. GitHub and Jira sample sc
|
|
|
297
284
|
| `done` | A task finishes |
|
|
298
285
|
|
|
299
286
|
**The two shipped scripts are samples.** `spoolway init` writes `github.sh` and `jira.sh` into
|
|
300
|
-
`.spoolway/hooks
|
|
287
|
+
`.spoolway/hooks/`. A native Windows install gets the `.ps1` pair.
|
|
301
288
|
|
|
302
289
|
See **[Issue Tracking](docs/configuration.md#issue_tracking--a-hook-fired-on-four-task-events)**.
|
|
303
290
|
|
|
304
291
|
## Configurable per project
|
|
305
292
|
|
|
306
|
-
- Unattended mode
|
|
307
|
-
|
|
308
|
-
- Set a
|
|
293
|
+
- Unattended mode hands **`blocked`** tasks to a prompt you define, so the pipeline keeps
|
|
294
|
+
running while nobody is watching.
|
|
295
|
+
- Set a model for generating pipelines.
|
|
309
296
|
|
|
310
297
|
```toml
|
|
311
298
|
[dispatch]
|
|
@@ -376,8 +363,8 @@ See **[Configuration](docs/configuration.md)**.
|
|
|
376
363
|
|
|
377
364
|
## Eval every run
|
|
378
365
|
|
|
379
|
-
|
|
380
|
-
time, and what the lane reported. Every edit to your pipelines, prompts or config
|
|
366
|
+
When a lane finishes, its transcript is read and written to a ledger: tokens, cost, wall
|
|
367
|
+
time, and what the lane reported. Every edit to your pipelines, prompts or config creates a
|
|
381
368
|
new version, so you can see what your last change did to pass rate and price.
|
|
382
369
|
|
|
383
370
|
```
|
|
@@ -386,13 +373,13 @@ spoolway eval
|
|
|
386
373
|
|
|
387
374
|
<img src="docs/screenshots/eval.png" alt="the eval screen">
|
|
388
375
|
|
|
389
|
-
*The eval screen on its runs view, one row per attempt at a task
|
|
390
|
-
|
|
391
|
-
exports CSV.*
|
|
376
|
+
*The eval screen on its runs view, one row per attempt at a task. `tab` cycles the views: per
|
|
377
|
+
pipeline, per step, runs, per watched directory, and per session outside the lanes. `f` filters,
|
|
378
|
+
`e` exports CSV.*
|
|
392
379
|
|
|
393
380
|
## Documentation
|
|
394
381
|
|
|
395
|
-
See **[Documentation index](DOCS.md)**.
|
|
382
|
+
See **[Documentation index](DOCS.md)**.
|
|
396
383
|
|
|
397
384
|
## License
|
|
398
385
|
|
package/bin/spoolway.exe
CHANGED
|
Binary file
|