@neriros/ralphy 2.23.1 → 3.0.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 +28 -26
- package/dist/mcp/index.js +3 -3
- package/dist/{cli → shell}/index.js +65991 -65041
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -60,14 +60,14 @@ The per-project install builds the CLI and MCP server, copies them to `.ralph/bi
|
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
62
|
# Create + run a new task
|
|
63
|
-
|
|
63
|
+
ralphy loop task --name fix-auth --prompt "Fix the JWT validation bug" --claude opus --max-iterations 10
|
|
64
64
|
|
|
65
65
|
# Resume the same task later (state is on disk)
|
|
66
|
-
|
|
66
|
+
ralphy loop task --name fix-auth
|
|
67
67
|
|
|
68
68
|
# Inspect
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
ralphy agent list # local tasks + Linear tickets per indicator bucket (with linked PR URLs)
|
|
70
|
+
ralphy loop status --name fix-auth # one task (details)
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
Engine defaults to Claude Opus. Common safeguards: `--max-iterations`, `--max-cost`, `--max-runtime`, `--max-failures`. See the [CLI reference](#cli-reference) for the full set.
|
|
@@ -78,7 +78,7 @@ Engine defaults to Claude Opus. Common safeguards: `--max-iterations`, `--max-co
|
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
80
|
export LINEAR_API_KEY=lin_api_xxx
|
|
81
|
-
|
|
81
|
+
ralphy agent --linear-team ENG --linear-assignee me --concurrency 3 --poll-interval 60
|
|
82
82
|
```
|
|
83
83
|
|
|
84
84
|
A default `ralphy.config.json` is written on first run. CLI flags override config per-invocation.
|
|
@@ -240,14 +240,15 @@ Done issues whose PR `gh pr view --json mergeable` reports as `CONFLICTING` get
|
|
|
240
240
|
|
|
241
241
|
### PR + CI integration
|
|
242
242
|
|
|
243
|
-
| Flag / config
|
|
244
|
-
|
|
|
245
|
-
| `createPrOnSuccess` / `--create-pr`
|
|
246
|
-
| `
|
|
247
|
-
| `
|
|
248
|
-
| `
|
|
249
|
-
| `
|
|
250
|
-
| `
|
|
243
|
+
| Flag / config | Behavior |
|
|
244
|
+
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
245
|
+
| `createPrOnSuccess` / `--create-pr` | After a clean exit, push the worker's branch and `gh pr create`. Title: `<ID>: <title>`. Idempotent — surfaces the existing URL if the PR is already open. Requires `--worktree` and `gh` authenticated. `prBaseBranch` defaults to `main`; override per-issue by labelling the Linear issue with `ralph:branch:<branch-name>`. |
|
|
246
|
+
| `stackPrsOnDependencies` / `--stack-prs` | When the Linear issue is blocked by another issue (`blocked_by` relation) that has exactly one open GitHub PR, open this PR against that blocker's head branch instead of `prBaseBranch`. Resolves the blocker's PR via Linear's auto-attachment + `gh pr view --json state,headRefName`. Falls back to `prBaseBranch` when zero / multiple blockers (or PRs) match. A `ralph:branch:<name>` label still wins. |
|
|
247
|
+
| `getAutoMerge` indicator | Opt an issue in for GitHub auto-merge (any-of label/status filter, same shape as `getReview`). When matched, Ralph runs `gh pr merge <url> --auto --<strategy>` right after opening the PR so GitHub merges as soon as required checks pass. Strategy comes from `autoMergeStrategy` (`squash` \| `merge` \| `rebase`, default `squash`). Failures are logged but non-fatal — the CI/conflict watch loop continues. |
|
|
248
|
+
| `fixCiOnFailure` / `--fix-ci` | After the PR opens, poll `gh pr checks`. On failure, pull failed logs via `gh run view --log-failed`, append them to `## Steering`, re-spawn the worker, and push the new commits — repeat until green or `maxCiFixAttempts` (default `5`) is hit. While this loop runs, `setDone` is **not** applied; if CI is never green the worker is treated as failed. |
|
|
249
|
+
| `ciPollIntervalSeconds` | Seconds between CI status polls (default `30`). |
|
|
250
|
+
| `ignoreCiChecks` | Array of check names to ignore when computing pass/fail. |
|
|
251
|
+
| `codeReviewTrigger` / `--code-review` | See [Code-review iteration](#code-review-iteration). |
|
|
251
252
|
|
|
252
253
|
### Worktrees, setup, teardown
|
|
253
254
|
|
|
@@ -302,19 +303,20 @@ Failed workers are not marked processed, so they retry on the next poll. SIGINT
|
|
|
302
303
|
|
|
303
304
|
**Agent-mode flags**
|
|
304
305
|
|
|
305
|
-
| Option | Behavior
|
|
306
|
-
| ------------------------- |
|
|
307
|
-
| `--linear-team <key>` | Linear team key (e.g. `ENG`)
|
|
308
|
-
| `--linear-assignee <id>` | Assignee filter (user id, email, or `me`)
|
|
309
|
-
| `--poll-interval <s>` | Seconds between Linear polls (default `60`)
|
|
310
|
-
| `--concurrency <n>` | Max concurrent task loops (default `1`)
|
|
311
|
-
| `--max-tickets <n>` | Stop picking up new issues after N have been started this run (`0` = unlimited)
|
|
312
|
-
| `--worktree` | Run each task in its own git worktree
|
|
313
|
-
| `--indicator <k>:<t>:<v>` | Override one `linear.indicators` entry (repeatable, e.g. `setDone:status:Done`)
|
|
314
|
-
| `--create-pr` | Push worker branch + open a GitHub PR on success (needs `--worktree`)
|
|
315
|
-
| `--fix-ci` | After PR opens, re-run task on CI failures until green (needs `--create-pr`)
|
|
316
|
-
| `--
|
|
317
|
-
| `--
|
|
306
|
+
| Option | Behavior |
|
|
307
|
+
| ------------------------- | -------------------------------------------------------------------------------------------- |
|
|
308
|
+
| `--linear-team <key>` | Linear team key (e.g. `ENG`) |
|
|
309
|
+
| `--linear-assignee <id>` | Assignee filter (user id, email, or `me`) |
|
|
310
|
+
| `--poll-interval <s>` | Seconds between Linear polls (default `60`) |
|
|
311
|
+
| `--concurrency <n>` | Max concurrent task loops (default `1`) |
|
|
312
|
+
| `--max-tickets <n>` | Stop picking up new issues after N have been started this run (`0` = unlimited) |
|
|
313
|
+
| `--worktree` | Run each task in its own git worktree |
|
|
314
|
+
| `--indicator <k>:<t>:<v>` | Override one `linear.indicators` entry (repeatable, e.g. `setDone:status:Done`) |
|
|
315
|
+
| `--create-pr` | Push worker branch + open a GitHub PR on success (needs `--worktree`) |
|
|
316
|
+
| `--fix-ci` | After PR opens, re-run task on CI failures until green (needs `--create-pr`) |
|
|
317
|
+
| `--stack-prs` | Open the PR against a blocker issue's open-PR head branch when present (needs `--create-pr`) |
|
|
318
|
+
| `--code-review` | Watch open tracked PRs for unresolved review comments and prepend a code-review task |
|
|
319
|
+
| `--json-output` | Emit JSONL to stdout instead of rendering the Ink dashboard (CI / scripting) |
|
|
318
320
|
|
|
319
321
|
**List-mode flags**
|
|
320
322
|
|
package/dist/mcp/index.js
CHANGED
|
@@ -14104,7 +14104,7 @@ function finalize(ctx, schema) {
|
|
|
14104
14104
|
result.$schema = "http://json-schema.org/draft-07/schema#";
|
|
14105
14105
|
} else if (ctx.target === "draft-04") {
|
|
14106
14106
|
result.$schema = "http://json-schema.org/draft-04/schema#";
|
|
14107
|
-
} else if (ctx.target === "openapi-3.0") {}
|
|
14107
|
+
} else if (ctx.target === "openapi-3.0") {}
|
|
14108
14108
|
if (ctx.external?.uri) {
|
|
14109
14109
|
const id = ctx.external.registry.get(schema)?.id;
|
|
14110
14110
|
if (!id)
|
|
@@ -14352,7 +14352,7 @@ var literalProcessor = (schema, ctx, json, _params) => {
|
|
|
14352
14352
|
if (val === undefined) {
|
|
14353
14353
|
if (ctx.unrepresentable === "throw") {
|
|
14354
14354
|
throw new Error("Literal `undefined` cannot be represented in JSON Schema");
|
|
14355
|
-
}
|
|
14355
|
+
}
|
|
14356
14356
|
} else if (typeof val === "bigint") {
|
|
14357
14357
|
if (ctx.unrepresentable === "throw") {
|
|
14358
14358
|
throw new Error("BigInt literals cannot be represented in JSON Schema");
|
|
@@ -24264,7 +24264,7 @@ function registerTools(server, changesDir, changeStore, taskFilesDir = changesDi
|
|
|
24264
24264
|
]
|
|
24265
24265
|
};
|
|
24266
24266
|
}
|
|
24267
|
-
const cliArgs = ["run", "apps/
|
|
24267
|
+
const cliArgs = ["run", "apps/shell/src/index.ts", "loop", "task", "--name", name];
|
|
24268
24268
|
if (maxIterations)
|
|
24269
24269
|
cliArgs.push("--max-iterations", String(maxIterations));
|
|
24270
24270
|
if (maxCostUsd)
|