wayari 0.1.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 ADDED
@@ -0,0 +1,41 @@
1
+ # wayari
2
+
3
+ Ship PRs while you sleep. Merge them with your eyes open.
4
+
5
+ `wayari` runs a software factory from your terminal. You describe a job on a repo, it opens a
6
+ channel, puts coding agents on it, runs the gate (typecheck, build, tests, and the repo's own
7
+ checks) after every stage, and opens one reviewed pull request. You merge it.
8
+
9
+ ## Install
10
+
11
+ ```
12
+ npm i -g wayari
13
+ wayari doctor
14
+ ```
15
+
16
+ macOS and Linux. It needs Node 20 or newer, tmux, git, `gh` signed in, and at least one agent CLI
17
+ such as Claude Code. `wayari doctor` names anything missing and the fix beside it.
18
+
19
+ ## First run
20
+
21
+ ```
22
+ wayari serve # in a terminal you keep open
23
+ wayari start "the goal" --repo . --lead opus # in another: opens a channel, staffs it
24
+ wayari # where things stand
25
+ wayari merge <channel> # when the pull request is ready
26
+ ```
27
+
28
+ `--hours 8 --limit 20` on `start` lets a channel run unattended until then, stopping at the cap.
29
+ Without them it runs while you watch.
30
+
31
+ ## What it writes outside its own directory
32
+
33
+ `wayari serve` adds its status hooks to `~/.claude/settings.json` so it can hear an agent's state
34
+ without reading its screen. Your own hooks are untouched. `wayari uninstall` takes them back out;
35
+ `wayari uninstall --data` removes the data directory too. The command's data lives in `~/.wayari`,
36
+ or in the Wayari app's directory when the app is installed, or wherever `WAYARI_HOME` points.
37
+
38
+ ## Feedback
39
+
40
+ `wayari feedback "what happened"` opens a prefilled GitHub issue with the version and the doctor's
41
+ verdicts. The issues are at https://github.com/jawadjalal/wayariapp/issues.
package/bin/wayari.mjs ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ // The installed `wayari`. `dist/wayari.mjs` is the repo's `scripts/wayari.mjs` bundled with the core
3
+ // it calls (`scripts/build-cli.mjs`). This file only refuses what the bundle cannot survive: the
4
+ // factory keeps agents alive in tmux, which Windows does not have, so it says so here in one line
5
+ // rather than failing inside node-pty on the first shift.
6
+ if (process.platform === 'win32') {
7
+ console.error('wayari runs on macOS and Linux. It keeps agents alive in tmux, which Windows does not have. WSL works.')
8
+ process.exit(1)
9
+ }
10
+ import { spawn } from 'node:child_process'
11
+ import { existsSync } from 'node:fs'
12
+ import { resolve } from 'node:path'
13
+ import { fileURLToPath } from 'node:url'
14
+
15
+ // INSIDE AN AGENT'S PANE, THE WORD `wayari` IS THE AGENT'S. Every agent on a shift is briefed to
16
+ // call `wayari claim` and `wayari done`, and those verbs belong to the shim the app writes at
17
+ // `<userData>/bin/wayari` and puts first on the pane's PATH. The agent's own shell then sources its
18
+ // rc files, which put `~/.local/bin` or `/opt/homebrew/bin` back in front, and there this operator
19
+ // command sits once `npm link` or `npm i -g wayari` has run. On 2026-09-05 two builders each got this
20
+ // file's usage back from `wayari claim` and `wayari done`, nothing was claimed, no done ever reached
21
+ // the factory, no gate ran, and the channel ran out its clock at $5.28. The app sets `WAYARI_CLI` to
22
+ // the shim's path in every hook-capable pane, so that variable is how this file knows it is standing
23
+ // where the shim should, and it hands the whole command over.
24
+ const shim = process.env.WAYARI_CLI
25
+ if (shim && existsSync(shim) && resolve(shim) !== fileURLToPath(import.meta.url)) {
26
+ const agent = spawn(shim, process.argv.slice(2), { stdio: 'inherit', env: process.env })
27
+ agent.on('exit', (code, signal) => process.exit(code ?? (signal ? 1 : 0)))
28
+ } else {
29
+ await import('../dist/wayari.mjs')
30
+ }