@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 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
- ralph task --name fix-auth --prompt "Fix the JWT validation bug" --claude opus --max-iterations 10
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
- ralph task --name fix-auth
66
+ ralphy loop task --name fix-auth
67
67
 
68
68
  # Inspect
69
- ralph list # local tasks + Linear tickets per indicator bucket (with linked PR URLs)
70
- ralph status --name fix-auth # one task (details)
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
- ralph agent --linear-team ENG --linear-assignee me --concurrency 3 --poll-interval 60
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 | 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
- | `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. |
247
- | `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. |
248
- | `ciPollIntervalSeconds` | Seconds between CI status polls (default `30`). |
249
- | `ignoreCiChecks` | Array of check names to ignore when computing pass/fail. |
250
- | `codeReviewTrigger` / `--code-review` | See [Code-review iteration](#code-review-iteration). |
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
- | `--code-review` | Watch open tracked PRs for unresolved review comments and prepend a code-review task |
317
- | `--json-output` | Emit JSONL to stdout instead of rendering the Ink dashboard (CI / scripting) |
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") {} else {}
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
- } else {}
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/cli/src/index.ts", "task", "--name", name];
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)