Commit Graph

33 Commits

Author SHA1 Message Date
7253e51fb9 feat: use stored review on resume if interrupted 2026-07-31 09:57:51 -04:00
6dcbd064a6 fix: review skipped silently when task diff exceeds 1MB maxBuffer
getCommitRangeDiff and getLatestCommitDiff had maxBuffer set to 1MB.
When a task produced a larger diff (common for 10+ minute tasks),
execSync threw, the catch block returned null, and the review loop
broke immediately with no message — reviews were silently skipped for
larger tasks while smaller tasks reviewed fine.

- Increase maxBuffer to 10MB in both functions (the review prompt
  builder already truncates to MAX_DIFF_BYTES = 50KB before sending
  to the model, so the full diff in memory is fine)
- Add a diagnostic sendChatMessage when the review loop is skipped
  (baseRef undefined or no diff), so silent skips are visible
2026-07-22 21:53:29 -04:00
74c9ead7af fix: review fires for all tasks — commit then review committed diff, merge on pass
Previous flow reviewed uncommitted changes, so when a task agent
self-committed its work the review was silently skipped (no uncommitted
changes → review loop body never entered). This caused reviews to fire
inconsistently across tasks.

New review-gated flow (when autoReview is on):
1. Execute task
2. Ensure committed — commit session fallback when the agent didn't
   self-commit (handles both self-commit and no-commit agents)
3. Review the COMPLETE task diff (baseRef..HEAD) captured before
   execution, so the reviewer sees all commits not just the latest
4. On fail → re-execute with feedback → commit → re-review (same
   baseRef, so reviewer sees complete state including fixes)
5. On pass → merge worktree (all changes already committed)

Commit is now mandated when autoReview is on (autoCommit forced true,
not asked at startup). autoCommit only asked when autoReview is off.

Add captureGitHead + getCommitRangeDiff helpers to utils.ts. Switch
review prompt from buildReviewPromptUncommitted to buildReviewPrompt
(reviewing committed changes, not uncommitted).
2026-07-22 18:29:29 -04:00
0ef540ed47 feat: review-gated loop triggers on autoReview alone, ask review before commit at startup
- Review now runs whenever autoReview is enabled (not only when both
  autoCommit && autoReview). On fail, the task re-executes with review
  feedback injected and loops until pass or maxReviewRetries exhausted.
- Commit after a passing review is gated by autoCommit; review-only mode
  leaves changes uncommitted for manual inspection.
- Remove legacy post-commit review path and unused imports
  (buildReviewPrompt, getLatestCommitDiff).
- Reorder selectLoopOptions: ask autoReview first, then saveReviews,
  then autoCommit (reworded to 'commit after a passing review' when
  review is enabled).
- Update types.ts doc comments and README to reflect new semantics.
2026-07-22 17:43:57 -04:00
0034272c54 feat: better branch titles 2026-07-22 11:17:24 -04:00
c46f8f1783 feat: batch-level conflict resolution for worktree merges
Add reattemptMerge/abortMerge/completeMerge/hasMergeConflicts helpers to
worktree.ts. When a worktree merge conflicts, executeTask now defers to
batch-level resolution instead of immediately marking the task failed.

After all tasks in a batch finish, resolveConflictsSession re-attempts the
merge to recreate the conflict state, spawns an agent session with
buildConflictResolutionPrompt to resolve conflict markers and commit, then
verifies completion. This keeps parallel task slots unblocked — conflicts
are resolved sequentially at the batch boundary.
2026-07-20 15:45:12 -04:00
46da29ee22 feat: separate workspaces per parallel execution 2026-07-20 12:27:22 -04:00
519b12b3d9 follow-up restructure.
- loop until review pass
- review now comes prior to commit
2026-07-20 10:29:15 -04:00
6aa3f6bd9f feat: persist full review output to disk and render in expandable view
Review text was truncated to 500 chars in the chat message body with no
way to access the full content — once a review exceeded that limit it was
lost from the UI. Now the full review body is rendered in the expanded
(Ctrl+O) view like the implementation tool-call tree, and can optionally
be persisted to disk per-loop.

Changes:
- Add saveReviews config flag + reviewsDir path option
- Add loop-start prompt to opt into saving reviews to disk when
  auto-review is enabled (skipped when explicitly set in YAML)
- Pass full reviewText via message details instead of inlining a slice
- Extend ralpi-progress renderer to show full review body when expanded,
  dim hint to expand when collapsed
- Add saveReviewToFile() writing to .ralpi/reviews/<prdKey>/<taskId>.md,
  mirroring the per-loop reflections layout so many loops don't collide
2026-07-17 16:03:53 -04:00
008489a91b fix: pass parent modelRuntime so extension providers work in ralpi sessions
ralpi's runAgentSession was letting createAgentSession create a fresh
ModelRuntime from models.json only. This excluded extension-registered
providers like neuralwatt, whose streamSimple wrapper handles:
- 429 rate-limit header parsing (concurrent/TPM/admission/RPM)
- Rate-limit error normalization for Pi's retry logic
- Context-overflow error normalization

Without the wrapper, neuralwatt rate-limit and context-overflow errors
surfaced as raw unrecoverable errors instead of being retried by Pi's
built-in retry. Now passes ctx.modelRegistry.runtime (the underlying
ModelRuntime) through to createAgentSession.
2026-07-17 11:11:21 -04:00
087c64ff18 fix: context overflow, retry, and reflection isolation
- Cap commit diffs in review/commit prompts at 50KB to prevent
  context window overflow on follow-up sessions
- Skip skills catalog (noSkills) in commit/review follow-up sessions
  for leaner context
- Wire Pi's SettingsManager into runAgentSession so Pi's built-in
  retry (exponential backoff, provider retry) applies to ralpi
  sessions — removes ralpi's duplicate manual retry loop
- Remove maxRetries/retryDelayMs from ralpi config; rely on Pi's
  retry.* settings (with manual override support)
- Remove retries field from progress.json and incrementRetry() from
  ProgressTracker
- Add model failover to follow-up sessions (commit/review cycle
  through the model pool on connection errors)
- Namespace reflection files by PRD key under
  .ralpi/reflections/<prdKey>/ so task sets don't overwrite each
  other
- Skip loop-startup prompts for config fields explicitly set in YAML
- Remove (default) annotations from loop options prompts
- Default commitTimeoutMs/reviewTimeoutMs to 0 (inherit Pi defaults)
2026-07-17 09:02:44 -04:00
6c398eef64 live reporting commit requests, resume prints batching 2026-06-23 13:31:37 -04:00
85123b7755 fixed regressed parsing, tool sanitation 2026-06-08 20:34:16 -04:00
dc3993048e commit clarification 2026-06-04 09:29:00 -04:00
dfa6707a8f commit per task 2026-06-02 15:20:31 -04:00
5342a2c69f remove excessive file writes 2026-05-31 19:22:30 -04:00
53bac1976a kick! 2026-05-31 16:48:41 -04:00
139bf3b3fb remove completed runs from live flow 2026-05-31 12:42:09 -04:00
424e2fa885 Add loop-active marker, YAML task file support, and auto-updating PRD checkboxes
- Persist loop-active state for widget re-instantiation after session reload
- Add YAML task file parsing and update support via yaml library
- Auto-update PRD source file checkboxes on task status changes
- Add batchRender callback for real-time parallel widget animation
- Normalize tabs-to-spaces indentation across source files
- Use padStart(2, '0') for ID formatting instead of hardcoded prefix
- Enable parallel execution for single-task DAG batches
2026-05-31 11:44:47 -04:00
d2a7dfa5fe disable round-robin for sequential 2026-05-31 09:30:08 -04:00
9f90ed4252 readme cleanup 2026-05-31 08:46:59 -04:00
3c01652b90 fix width exceeding, release prep 2026-05-31 08:19:21 -04:00
d2ef124369 automatic failover 2026-05-31 02:01:37 -04:00
925e37938b round robin 2026-05-31 01:57:52 -04:00
8e2e24d0e3 depend on pi defaults, and global yaml 2026-05-31 01:35:52 -04:00
ead5d9be3a reference updates 2026-05-30 23:54:11 -04:00
923f174f3b drop tasks, drop thrashing bandaid 2026-05-30 23:16:17 -04:00
c7ab908bae proper parallelization 2026-05-30 20:46:05 -04:00
73d1ee1a47 dependency parsing broken 2026-05-30 20:35:02 -04:00
fcc0aa618e good! 2026-05-30 20:21:37 -04:00
919113430a ui cleanup 2026-05-30 20:05:18 -04:00
e6a8c8bedc almost 2026-05-30 19:37:17 -04:00
81e0e8ec1c initial commit: ralph-loop extension
- DAG-based task execution with dependency resolution
- Persistent progress tracking in .ralph/progress.json
- Reflection system for cross-task context
- Support for Fio README, checkbox, and YAML formats
- Retry with exponential backoff
- Parallel batch execution
2026-05-30 01:26:17 -04:00