wildcrane-runner 0.3.1 → 0.5.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 CHANGED
@@ -1,12 +1,12 @@
1
1
  # wildcrane-runner
2
2
 
3
3
  WildCrane's Local Runner. It connects this computer to WildCrane and runs the tasks WildCrane
4
- sends on your local Codex or Claude Code.
4
+ sends on your local Claude Code, Codex, OpenCode or Cursor.
5
5
 
6
6
  - **Mac and Windows**: download WildCrane from the
7
- [releases](https://github.com/ai4kanban/ai4kanban/releases/latest). It sits in the menu bar
8
- (tray), signs in once, and notifies you when something needs your review. The release notes
9
- say how to open the unsigned build the first time.
7
+ [releases](https://github.com/ai4kanban/ai4kanban/releases?q=desktop-v&expanded=true). It sits
8
+ in the menu bar (tray), signs in once, and notifies you when something needs your review. The
9
+ release notes say how to open the unsigned build the first time.
10
10
  - **Linux, or no desktop**: run it from a terminal; it runs tasks and shows no notifications.
11
11
 
12
12
  ```sh
@@ -17,17 +17,25 @@ wildcrane-runner
17
17
  The first start opens your browser to sign in. Every start updates to the version WildCrane
18
18
  names, and falls back to the previous one if the new one does not start.
19
19
 
20
- - **Node**: 18 or newer.
20
+ - **Node**: 22 or newer.
21
21
  - **One computer per account**: a second computer is refused while the first is connected.
22
22
  - **Folders**: tasks run in `~/.wildcrane/work/`, or in a project folder listed in
23
23
  `~/.wildcrane/projects.json` (`{ "projects": ["/path/to/project"] }`). Any other folder is
24
24
  refused. The desktop app writes that list when you add a project in its settings.
25
25
  - **Task folders**: a task's jobs share its board, `<project>/.akb/kanban` (kept out of git),
26
- or for a task in no project the account's inbox, `~/.wildcrane/<account>/inbox/.akb/kanban`
26
+ or for a project with no folder here its own one, `~/.wildcrane/cache/<project>/.akb/kanban`
27
27
  (a git repository). They run one at a time and sync the card, memory and assets with
28
- WildCrane before and after each job. Nothing deletes a task folder; remove old ones by hand.
28
+ WildCrane before and after each job.
29
+ - **Cache**: what a project keeps here is rebuilt from WildCrane by its next job. At start and
30
+ once a day the Runner removes a project unused for 7 days or no longer in your account — its
31
+ whole `cache/<project>/`, or only a linked folder's `.akb/` — unless a job runs there, a
32
+ delivery is paused there, or its last sync failed.
33
+ - **Runner files**: `~/.wildcrane/bin/` holds the downloaded versions and the `akb` shim.
34
+ - **Periodic agents**: in each project folder it also runs the board's own agents (reflect,
35
+ describe-project, review-dismissals, prune-memory) and each workflow's scheduled agents, when
36
+ due by this computer's clock — on your runtime, so they use its quota.
29
37
  - **akb**: tasks started from WildCrane run akb's workflows with the copy of `akb` the Runner
30
- carries (`dist/akb/`), on Claude Code or Codex.
38
+ carries (`dist/akb/`), on whichever of those the task's runtime names.
31
39
 
32
40
  ## Development
33
41
 
@@ -88,14 +88,16 @@ async function rules() {
88
88
 
89
89
  // The two trees, and the one word that picks between them. `akb raw` takes over the whole
90
90
  // command line: its moves take options that collide with the rest — `create`, `archive` and
91
- // `reject` are words on both sides — so it is handed the line untouched.
91
+ // `reject` are words on both sides — so it is handed the line untouched, bar the shared
92
+ // options typed before `raw`.
92
93
  async function main() {
93
94
  const argv = process.argv.slice(2)
94
95
  const loaded = await rules()
95
96
  const shared = { program: PROGRAM, installHint: `\`${PROGRAM} install\`` }
96
97
 
97
- if (argv[0] === 'raw') {
98
- process.exitCode = await loaded.runBoard(argv.slice(1), { ...shared, program: `${PROGRAM} raw` })
98
+ const raw = loaded.rawArgv(argv)
99
+ if (raw) {
100
+ process.exitCode = await loaded.runBoard(raw, { ...shared, program: `${PROGRAM} raw` })
99
101
  return
100
102
  }
101
103