forge-pipeline 0.5.0 → 0.6.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/forge CHANGED
@@ -691,12 +691,12 @@ run_pipeline() {
691
691
  continue
692
692
  fi
693
693
 
694
- # Save feedback and re-run architect+challenger
694
+ # Save feedback and run single revision pass
695
695
  printf '%b\n' "$feedback" > "$FORGE_ROOT/.forge/spec/user-feedback.md"
696
- log_info "Feedback saved. Re-running architect + challenger..."
696
+ log_info "Feedback saved. Revising spec..."
697
697
  echo ""
698
698
 
699
- run_phase_spec "$user_prompt" || { log_error "Spec revision failed"; exit 1; }
699
+ run_phase_spec_revise || { log_error "Spec revision failed"; exit 1; }
700
700
  check_global_timeout
701
701
  done
702
702
  else
package/lib/agent.sh CHANGED
@@ -56,7 +56,41 @@ spawn_agent_foreground() {
56
56
  local done_file="${forge_root}/.forge/status/${name}.done"
57
57
 
58
58
  cd "$worktree_path" && \
59
- claude -p "$(cat /tmp/forge-prompt-"${name}".md)" --allowedTools "$allowed_tools" 2>&1 | tee "$log_file"
59
+ claude -p "$(cat /tmp/forge-prompt-"${name}".md)" --output-format stream-json --allowedTools "$allowed_tools" 2>&1 | \
60
+ while IFS= read -r line; do
61
+ # Extract text content from stream-json and display in real-time
62
+ local type
63
+ type="$(echo "$line" | jq -r '.type // empty' 2>/dev/null)"
64
+ case "$type" in
65
+ assistant)
66
+ echo "$line" >> "$log_file"
67
+ local content
68
+ content="$(echo "$line" | jq -r '.message.content[]? | select(.type=="text") | .text // empty' 2>/dev/null)"
69
+ if [ -n "$content" ]; then
70
+ printf '%s\n' "$content"
71
+ fi
72
+ ;;
73
+ content_block_delta)
74
+ echo "$line" >> "$log_file"
75
+ local delta
76
+ delta="$(echo "$line" | jq -r '.delta.text // empty' 2>/dev/null)"
77
+ if [ -n "$delta" ]; then
78
+ printf '%s' "$delta"
79
+ fi
80
+ ;;
81
+ result)
82
+ echo "$line" >> "$log_file"
83
+ local result_text
84
+ result_text="$(echo "$line" | jq -r '.result // empty' 2>/dev/null)"
85
+ if [ -n "$result_text" ]; then
86
+ printf '\n%s\n' "$result_text"
87
+ fi
88
+ ;;
89
+ *)
90
+ echo "$line" >> "$log_file"
91
+ ;;
92
+ esac
93
+ done
60
94
 
61
95
  echo "done" > "$done_file"
62
96
  log_agent "$name" "Foreground agent completed"
@@ -107,3 +107,40 @@ run_phase_spec() {
107
107
 
108
108
  return 0
109
109
  }
110
+
111
+ ##
112
+ # Single-pass spec revision from user feedback.
113
+ # Runs one architect pass (with user feedback) + one challenger pass.
114
+ ##
115
+ run_phase_spec_revise() {
116
+ log_phase "0" "SPEC REVISION (user feedback)"
117
+
118
+ # ── Architect revision with user feedback ─────────────────────
119
+ local prompt
120
+ prompt="$(generate_architect_revision_prompt)"
121
+
122
+ spawn_agent_foreground "architect" "$FORGE_ROOT" "$prompt" "$(build_allowed_tools architect)"
123
+
124
+ if [[ ! -f "${FORGE_ROOT}/.forge/spec/spec.md" ]]; then
125
+ log_error "Architect did not produce spec.md during revision"
126
+ return 1
127
+ fi
128
+
129
+ # ── Challenger validation ─────────────────────────────────────
130
+ local challenger_prompt
131
+ challenger_prompt="$(generate_challenger_prompt)"
132
+
133
+ spawn_agent_foreground "challenger" "$FORGE_ROOT" "$challenger_prompt" "$(build_allowed_tools challenger)"
134
+
135
+ if [[ -f "${FORGE_ROOT}/.forge/spec/review.json" ]]; then
136
+ local verdict
137
+ verdict="$(json_get "${FORGE_ROOT}/.forge/spec/review.json" "verdict")"
138
+ if [[ "$verdict" == "approved" ]]; then
139
+ log_success "Revised spec approved by challenger"
140
+ else
141
+ log_warn "Challenger flagged issues but proceeding (user-driven revision)"
142
+ fi
143
+ fi
144
+
145
+ return 0
146
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forge-pipeline",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Autonomous multi-agent coding pipeline",
5
5
  "bin": {
6
6
  "forge": "./bin/forge.js"