@neriros/ralphy 2.8.0 → 2.8.1

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.
Files changed (2) hide show
  1. package/dist/cli/index.js +12 -1
  2. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -69787,6 +69787,7 @@ import { join as join10 } from "path";
69787
69787
  var AgentStateSchema = exports_external.object({
69788
69788
  processedIssueIds: exports_external.array(exports_external.string()).default([]),
69789
69789
  startedIssueIds: exports_external.array(exports_external.string()).default([]),
69790
+ failedIssueIds: exports_external.array(exports_external.string()).default([]),
69790
69791
  lastPollAt: exports_external.string().nullable().default(null),
69791
69792
  changeMeta: exports_external.record(exports_external.string(), exports_external.object({
69792
69793
  issueId: exports_external.string(),
@@ -69977,12 +69978,15 @@ class AgentCoordinator {
69977
69978
  }
69978
69979
  const state = this.state;
69979
69980
  const seen = new Set(state.processedIssueIds);
69981
+ const failed = new Set(state.failedIssueIds);
69980
69982
  const queued = new Set(this.queue.map((i) => i.id));
69981
69983
  const active = new Set(this.workers.map((w) => w.issueId));
69982
69984
  let added = 0;
69983
69985
  for (const issue of issues) {
69984
69986
  if (seen.has(issue.id))
69985
69987
  continue;
69988
+ if (failed.has(issue.id))
69989
+ continue;
69986
69990
  if (queued.has(issue.id))
69987
69991
  continue;
69988
69992
  if (active.has(issue.id))
@@ -70073,6 +70077,10 @@ class AgentCoordinator {
70073
70077
  this.state.processedIssueIds.push(issue.id);
70074
70078
  this.deps.saveState(this.state);
70075
70079
  }
70080
+ if (!ok && this.state && !this.state.failedIssueIds.includes(issue.id)) {
70081
+ this.state.failedIssueIds.push(issue.id);
70082
+ this.deps.saveState(this.state);
70083
+ }
70076
70084
  this.notifyExited(issue, changeName, code);
70077
70085
  this.deps.onWorkersChanged();
70078
70086
  this.spawnNext();
@@ -70104,7 +70112,9 @@ class AgentCoordinator {
70104
70112
  return;
70105
70113
  const ok = code === 0;
70106
70114
  if (this.opts.postComments !== false) {
70107
- const body = ok ? `\u2705 Ralph completed work on this issue. Change: \`${changeName}\`` : `\u2717 Ralph exited with code ${code} on this issue. Change: \`${changeName}\``;
70115
+ const body = ok ? `\u2705 Ralph completed work on this issue. Change: \`${changeName}\`` : `\u2717 Ralph exited with code ${code} on this issue. Change: \`${changeName}\`
70116
+
70117
+ ` + `This issue has been quarantined and will not be auto-resumed on the next poll. ` + `Inspect the worktree at \`.ralph/worktrees/${changeName}\`, fix the underlying ` + `failure (e.g. lint/typecheck), then run \`ralph clean --name ${changeName}\` to ` + `clear the quarantine and let the next poll re-pick the issue.`;
70108
70118
  try {
70109
70119
  await updater.postComment(issue, body);
70110
70120
  } catch (err) {
@@ -71119,6 +71129,7 @@ try {
71119
71129
  if (meta) {
71120
71130
  agentState.processedIssueIds = agentState.processedIssueIds.filter((id) => id !== meta.issueId);
71121
71131
  agentState.startedIssueIds = agentState.startedIssueIds.filter((id) => id !== meta.issueId);
71132
+ agentState.failedIssueIds = agentState.failedIssueIds.filter((id) => id !== meta.issueId);
71122
71133
  delete agentState.changeMeta[args.name];
71123
71134
  await writeAgentState(projectRoot, agentState);
71124
71135
  removed.push(`agent-state entry for ${meta.identifier} (${meta.issueId})`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neriros/ralphy",
3
- "version": "2.8.0",
3
+ "version": "2.8.1",
4
4
  "description": "An iterative AI task execution framework. Orchestrates multi-phase autonomous work using Claude or Codex engines.",
5
5
  "keywords": [
6
6
  "agent",