ralph-teams 1.0.20 → 1.0.24
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/dist/commands/resume.d.ts.map +1 -1
- package/dist/commands/resume.js +16 -0
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +16 -0
- package/dist/commands/run.js.map +1 -1
- package/package.json +1 -1
- package/prompts/team-lead-policy.md +2 -1
- package/ralph.sh +138 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAgBvC,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IACjC,YAAY,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC;IACrC,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IACjC,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC;IAC/B,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;IAC/B,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAgBvC,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IACjC,YAAY,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC;IACrC,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IACjC,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC;IAC/B,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;IAC/B,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;CAChC;AA8CD,wBAAgB,aAAa,CAAC,IAAI,GAAE,UAAwB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAmI5F"}
|
package/dist/commands/resume.js
CHANGED
|
@@ -68,6 +68,20 @@ function findRalphSh(deps) {
|
|
|
68
68
|
}
|
|
69
69
|
return null;
|
|
70
70
|
}
|
|
71
|
+
function findBundledRjq(deps) {
|
|
72
|
+
const candidates = [
|
|
73
|
+
path.resolve(__dirname, '../../dist/json-tool.js'),
|
|
74
|
+
path.resolve(__dirname, '../json-tool.js'),
|
|
75
|
+
path.resolve(__dirname, '../../node_modules/.bin/rjq'),
|
|
76
|
+
path.resolve(deps.cwd(), 'dist/json-tool.js'),
|
|
77
|
+
];
|
|
78
|
+
for (const candidate of candidates) {
|
|
79
|
+
if (deps.existsSync(candidate)) {
|
|
80
|
+
return candidate;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
71
85
|
function resumeCommand(deps = defaultDeps, backendOverride) {
|
|
72
86
|
const cwd = deps.cwd();
|
|
73
87
|
const stateFile = (0, runtime_paths_1.getRalphStatePath)(cwd);
|
|
@@ -118,6 +132,7 @@ function resumeCommand(deps = defaultDeps, backendOverride) {
|
|
|
118
132
|
console.error(chalk_1.default.red('Error: ralph.sh not found. Cannot resume.'));
|
|
119
133
|
deps.exit(1);
|
|
120
134
|
}
|
|
135
|
+
const bundledRjq = findBundledRjq(deps);
|
|
121
136
|
// Ensure ralph.sh is executable
|
|
122
137
|
try {
|
|
123
138
|
deps.chmodSync(ralphSh, 0o755);
|
|
@@ -167,6 +182,7 @@ function resumeCommand(deps = defaultDeps, backendOverride) {
|
|
|
167
182
|
RALPH_MODEL_EPIC_VALIDATOR: resolvedConfig.agents.epicValidator,
|
|
168
183
|
RALPH_MODEL_FINAL_VALIDATOR: resolvedConfig.agents.finalValidator,
|
|
169
184
|
RALPH_MODEL_MERGER: resolvedConfig.agents.merger,
|
|
185
|
+
...(bundledRjq ? { RALPH_RJQ_BIN: bundledRjq } : {}),
|
|
170
186
|
};
|
|
171
187
|
const result = deps.spawnSync(ralphSh, args, {
|
|
172
188
|
stdio: 'inherit',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,+BAA+B,EAAqB,MAAM,WAAW,CAAC;AAI3F,UAAU,OAAO;IACf,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IACjC,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC;IAC/B,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC;IACzB,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;IAC/B,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IAC/B,+BAA+B,CAAC,EAAE,OAAO,+BAA+B,CAAC;CAC1E;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,+BAA+B,EAAqB,MAAM,WAAW,CAAC;AAI3F,UAAU,OAAO;IACf,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IACjC,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC;IAC/B,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC;IACzB,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;IAC/B,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IAC/B,+BAA+B,CAAC,EAAE,OAAO,+BAA+B,CAAC;CAC1E;AA2DD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAChD,IAAI,GAAE,OAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAwJf"}
|
package/dist/commands/run.js
CHANGED
|
@@ -69,6 +69,20 @@ function findRalphSh(deps) {
|
|
|
69
69
|
}
|
|
70
70
|
return null;
|
|
71
71
|
}
|
|
72
|
+
function findBundledRjq(deps) {
|
|
73
|
+
const candidates = [
|
|
74
|
+
path.resolve(__dirname, '../../dist/json-tool.js'),
|
|
75
|
+
path.resolve(__dirname, '../json-tool.js'),
|
|
76
|
+
path.resolve(__dirname, '../../node_modules/.bin/rjq'),
|
|
77
|
+
path.resolve(deps.cwd(), 'dist/json-tool.js'),
|
|
78
|
+
];
|
|
79
|
+
for (const candidate of candidates) {
|
|
80
|
+
if (deps.existsSync(candidate)) {
|
|
81
|
+
return candidate;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
72
86
|
function isCommandInstalled(cmd, deps) {
|
|
73
87
|
const result = deps.spawnSync('command', ['-v', cmd], { shell: true });
|
|
74
88
|
return result.status === 0;
|
|
@@ -131,6 +145,7 @@ async function runCommand(prdPath, options, deps = defaultDeps) {
|
|
|
131
145
|
console.error(chalk_1.default.red('Error: ralph.sh not found. Cannot run.'));
|
|
132
146
|
deps.exit(1);
|
|
133
147
|
}
|
|
148
|
+
const bundledRjq = findBundledRjq(deps);
|
|
134
149
|
// Ensure ralph.sh is executable
|
|
135
150
|
try {
|
|
136
151
|
deps.chmodSync(ralphSh, 0o755);
|
|
@@ -197,6 +212,7 @@ async function runCommand(prdPath, options, deps = defaultDeps) {
|
|
|
197
212
|
RALPH_MODEL_EPIC_VALIDATOR_EXPLICIT: explicitAgentOverrides?.epicValidator !== undefined ? '1' : '0',
|
|
198
213
|
RALPH_MODEL_FINAL_VALIDATOR_EXPLICIT: explicitAgentOverrides?.finalValidator !== undefined ? '1' : '0',
|
|
199
214
|
RALPH_MODEL_MERGER_EXPLICIT: explicitAgentOverrides?.merger !== undefined ? '1' : '0',
|
|
215
|
+
...(bundledRjq ? { RALPH_RJQ_BIN: bundledRjq } : {}),
|
|
200
216
|
};
|
|
201
217
|
if (deps.existsSync(runtimeDir)) {
|
|
202
218
|
try {
|
package/dist/commands/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -14,8 +14,9 @@ You coordinate epic execution. Do not write implementation code yourself.
|
|
|
14
14
|
## Epic Planning
|
|
15
15
|
|
|
16
16
|
- If `epicPlanning.enabled = 0`, do not spawn an epic planner. Use the epic as provided.
|
|
17
|
+
- If a usable canonical plan file already exists at the path provided in the prompt, do not spawn the epic planner. Use that plan even if `planned` is still `false`.
|
|
17
18
|
- If the epic is already marked `planned=true`, do not spawn the epic planner. Read the canonical plan file path provided in the prompt and follow it.
|
|
18
|
-
- Otherwise, if `epicPlanning.enabled = 1`, spawn the epic planner for any medium- or high-complexity epic.
|
|
19
|
+
- Otherwise, if `epicPlanning.enabled = 1`, spawn the epic planner for any medium- or high-complexity epic that does not already have a usable canonical plan.
|
|
19
20
|
- Only skip epic planning for clearly low-complexity epics where the acceptance criteria can be implemented literally with no meaningful design decisions.
|
|
20
21
|
- When delegating epic planning, explicitly tell the epic planner the exact output path for the epic plan file and require it to write the plan there before replying.
|
|
21
22
|
- Treat an epic planner response as incomplete if it only pastes or summarizes the plan in chat. The epic planner must perform the file write itself and only then report completion.
|
package/ralph.sh
CHANGED
|
@@ -116,15 +116,61 @@ MODEL_MERGER="$(map_model_for_backend "$BACKEND" "$MODEL_MERGER")"
|
|
|
116
116
|
|
|
117
117
|
resolve_rjq_bin() {
|
|
118
118
|
local candidates=()
|
|
119
|
+
local script_realpath=""
|
|
120
|
+
local script_real_dir=""
|
|
121
|
+
local ralph_bin_path=""
|
|
122
|
+
local ralph_realpath=""
|
|
123
|
+
local ralph_real_dir=""
|
|
119
124
|
|
|
120
125
|
if [ -n "${RALPH_RJQ_BIN:-}" ]; then
|
|
121
126
|
candidates+=("${RALPH_RJQ_BIN}")
|
|
122
127
|
fi
|
|
128
|
+
|
|
129
|
+
if command -v realpath >/dev/null 2>&1; then
|
|
130
|
+
script_realpath="$(realpath "${BASH_SOURCE[0]}" 2>/dev/null || true)"
|
|
131
|
+
elif command -v readlink >/dev/null 2>&1; then
|
|
132
|
+
script_realpath="$(readlink "${BASH_SOURCE[0]}" 2>/dev/null || true)"
|
|
133
|
+
fi
|
|
134
|
+
|
|
135
|
+
if [ -n "$script_realpath" ]; then
|
|
136
|
+
script_real_dir="$(cd "$(dirname "$script_realpath")" && pwd)"
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
if command -v ralph-teams >/dev/null 2>&1; then
|
|
140
|
+
ralph_bin_path="$(command -v ralph-teams 2>/dev/null || true)"
|
|
141
|
+
fi
|
|
142
|
+
|
|
143
|
+
if [ -n "$ralph_bin_path" ]; then
|
|
144
|
+
candidates+=("$(cd "$(dirname "$ralph_bin_path")" && pwd)/rjq")
|
|
145
|
+
|
|
146
|
+
if command -v realpath >/dev/null 2>&1; then
|
|
147
|
+
ralph_realpath="$(realpath "$ralph_bin_path" 2>/dev/null || true)"
|
|
148
|
+
elif command -v readlink >/dev/null 2>&1; then
|
|
149
|
+
ralph_realpath="$(readlink "$ralph_bin_path" 2>/dev/null || true)"
|
|
150
|
+
fi
|
|
151
|
+
|
|
152
|
+
if [ -n "$ralph_realpath" ]; then
|
|
153
|
+
ralph_real_dir="$(cd "$(dirname "$ralph_realpath")" && pwd)"
|
|
154
|
+
candidates+=("${ralph_real_dir}/json-tool.js")
|
|
155
|
+
fi
|
|
156
|
+
fi
|
|
157
|
+
|
|
123
158
|
candidates+=(
|
|
124
159
|
"${SCRIPT_DIR}/dist/json-tool.js"
|
|
125
160
|
"${SCRIPT_DIR}/node_modules/.bin/rjq"
|
|
161
|
+
"${script_real_dir}/dist/json-tool.js"
|
|
162
|
+
"${script_real_dir}/node_modules/.bin/rjq"
|
|
126
163
|
)
|
|
127
164
|
|
|
165
|
+
if command -v node >/dev/null 2>&1; then
|
|
166
|
+
local node_bin_dir
|
|
167
|
+
node_bin_dir="$(cd "$(dirname "$(command -v node)")" && pwd)"
|
|
168
|
+
candidates+=(
|
|
169
|
+
"${node_bin_dir}/rjq"
|
|
170
|
+
"${node_bin_dir}/../lib/node_modules/ralph-teams/dist/json-tool.js"
|
|
171
|
+
)
|
|
172
|
+
fi
|
|
173
|
+
|
|
128
174
|
local candidate
|
|
129
175
|
for candidate in "${candidates[@]}"; do
|
|
130
176
|
if [ -n "$candidate" ] && [ -f "$candidate" ] && [ -x "$candidate" ]; then
|
|
@@ -133,9 +179,13 @@ resolve_rjq_bin() {
|
|
|
133
179
|
fi
|
|
134
180
|
done
|
|
135
181
|
|
|
136
|
-
if
|
|
137
|
-
|
|
138
|
-
|
|
182
|
+
if type -P rjq >/dev/null 2>&1; then
|
|
183
|
+
local path_rjq
|
|
184
|
+
path_rjq="$(type -P rjq)"
|
|
185
|
+
if [ -n "$path_rjq" ] && [ -e "$path_rjq" ] && [ -x "$path_rjq" ]; then
|
|
186
|
+
echo "$path_rjq"
|
|
187
|
+
return 0
|
|
188
|
+
fi
|
|
139
189
|
fi
|
|
140
190
|
|
|
141
191
|
return 1
|
|
@@ -144,14 +194,12 @@ resolve_rjq_bin() {
|
|
|
144
194
|
RJQ_BIN="$(resolve_rjq_bin || true)"
|
|
145
195
|
|
|
146
196
|
rjq() {
|
|
147
|
-
if [ -z "${RJQ_BIN:-}" ]; then
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
echo "Error: resolved rjq binary does not exist: $RJQ_BIN" >&2
|
|
154
|
-
exit 1
|
|
197
|
+
if [ -z "${RJQ_BIN:-}" ] || [ ! -e "$RJQ_BIN" ]; then
|
|
198
|
+
RJQ_BIN="$(resolve_rjq_bin || true)"
|
|
199
|
+
if [ -z "${RJQ_BIN:-}" ] || [ ! -e "$RJQ_BIN" ]; then
|
|
200
|
+
echo "Error: resolved rjq binary does not exist: ${RJQ_BIN:-<unset>}" >&2
|
|
201
|
+
exit 1
|
|
202
|
+
fi
|
|
155
203
|
fi
|
|
156
204
|
|
|
157
205
|
case "$RJQ_BIN" in
|
|
@@ -184,8 +232,9 @@ case "$BACKEND" in
|
|
|
184
232
|
AGENT_CMD="gh"
|
|
185
233
|
# Copilot uses -p for non-interactive, --allow-all for full permissions
|
|
186
234
|
# --agent team-lead loads .github/agents/team-lead.agent.md
|
|
187
|
-
# --no-ask-user for autonomous execution, --stream on for live output
|
|
188
|
-
|
|
235
|
+
# --no-ask-user for autonomous execution, --stream on for live output.
|
|
236
|
+
# Model selection lives in the agent markdown frontmatter for Copilot.
|
|
237
|
+
AGENT_FLAGS="copilot -- --agent team-lead --allow-all --no-ask-user --stream on -p"
|
|
189
238
|
STREAM_FORMAT="text"
|
|
190
239
|
;;
|
|
191
240
|
codex)
|
|
@@ -1223,6 +1272,8 @@ spawn_epic_bg() {
|
|
|
1223
1272
|
EPIC_TITLE=$(rjq read "$PRD_FILE" ".epics[$EPIC_INDEX].title")
|
|
1224
1273
|
local EPIC_JSON
|
|
1225
1274
|
EPIC_JSON=$(rjq read "$PRD_FILE" ".epics[$EPIC_INDEX]")
|
|
1275
|
+
local EPIC_PLANNED
|
|
1276
|
+
EPIC_PLANNED=$(rjq read "$PRD_FILE" ".epics[$EPIC_INDEX].planned" "false")
|
|
1226
1277
|
local PENDING_STORIES_JSON
|
|
1227
1278
|
PENDING_STORIES_JSON=$(rjq read "$PRD_FILE" ".epics[$EPIC_INDEX].userStories" | \
|
|
1228
1279
|
node -e 'const fs=require("fs"); const stories=JSON.parse(fs.readFileSync(0,"utf8")); process.stdout.write(JSON.stringify(stories.filter(s => s.passes !== true)));')
|
|
@@ -1238,6 +1289,10 @@ spawn_epic_bg() {
|
|
|
1238
1289
|
local WORKTREE_PRD_PATH="${WORKTREE_ABS_PATH}/${PRD_REL_PATH}"
|
|
1239
1290
|
local WORKTREE_STATE_FILE="${WORKTREE_ABS_PATH}/${RALPH_RUNTIME_DIRNAME}/state/${EPIC_ID}.json"
|
|
1240
1291
|
local WORKTREE_PLAN_FILE="${WORKTREE_ABS_PATH}/${RALPH_RUNTIME_DIRNAME}/plans/plan-${EPIC_ID}.md"
|
|
1292
|
+
local WORKTREE_PLAN_EXISTS="false"
|
|
1293
|
+
if [ -f "$WORKTREE_PLAN_FILE" ]; then
|
|
1294
|
+
WORKTREE_PLAN_EXISTS="true"
|
|
1295
|
+
fi
|
|
1241
1296
|
|
|
1242
1297
|
init_epic_state_file "$EPIC_ID" "$EPIC_INDEX"
|
|
1243
1298
|
|
|
@@ -1268,6 +1323,12 @@ $EPIC_JSON
|
|
|
1268
1323
|
If this epic has planned=true in the PRD, the canonical implementation plan is:
|
|
1269
1324
|
$WORKTREE_PLAN_FILE
|
|
1270
1325
|
|
|
1326
|
+
## Planning Status
|
|
1327
|
+
- epic.planned = ${EPIC_PLANNED}
|
|
1328
|
+
- canonical_plan.exists = ${WORKTREE_PLAN_EXISTS}
|
|
1329
|
+
- If a usable canonical plan already exists, do NOT spawn the epic planner. Use it even if epic.planned is false.
|
|
1330
|
+
- Only spawn the epic planner when epicPlanning.enabled = 1 and there is no usable canonical plan for this epic.
|
|
1331
|
+
|
|
1271
1332
|
## Stories To Plan And Execute
|
|
1272
1333
|
Only these stories should be planned or worked in this run. Stories omitted here are already passed and must be treated as done context only.
|
|
1273
1334
|
$PENDING_STORIES_JSON
|
|
@@ -1322,6 +1383,7 @@ $TEAM_LEAD_POLICY
|
|
|
1322
1383
|
- Use the exact epic state file path shown above for every story update. The PRD path is read-only context.
|
|
1323
1384
|
- If your runtime supports named sub-agents, use the dedicated story-planner, epic-planner, builder, story-validator, and epic-validator roles and choose their models using the policy above.
|
|
1324
1385
|
- If a story fails validation and still has retries left, spawn a new Builder for the retry instead of reusing the previous Builder run.
|
|
1386
|
+
- If your runtime is Codex exec mode, \`request_user_input\` is unavailable. Never call it. Do not stop to ask the user questions. Make a reasonable assumption, continue, and report the assumption in your final summary only if it matters.
|
|
1325
1387
|
|
|
1326
1388
|
Begin."
|
|
1327
1389
|
|
|
@@ -1341,7 +1403,7 @@ Begin."
|
|
|
1341
1403
|
else
|
|
1342
1404
|
(
|
|
1343
1405
|
COPILOT_TEAM_PROMPT="$TEAM_PROMPT" \
|
|
1344
|
-
script -q /dev/null /bin/sh -lc 'exec gh copilot -- --agent team-lead --
|
|
1406
|
+
script -q /dev/null /bin/sh -lc 'exec gh copilot -- --agent team-lead --allow-all --no-ask-user --stream on -p "$COPILOT_TEAM_PROMPT"' \
|
|
1345
1407
|
> "$EPIC_LOG" 2>&1
|
|
1346
1408
|
) &
|
|
1347
1409
|
fi
|
|
@@ -1466,7 +1528,7 @@ Begin resolving."
|
|
|
1466
1528
|
;;
|
|
1467
1529
|
copilot)
|
|
1468
1530
|
COPILOT_MERGE_PROMPT="$merge_prompt" \
|
|
1469
|
-
script -q /dev/null /bin/sh -lc 'exec gh copilot -- --agent merger --
|
|
1531
|
+
script -q /dev/null /bin/sh -lc 'exec gh copilot -- --agent merger --allow-all --no-ask-user --stream on -p "$COPILOT_MERGE_PROMPT"' \
|
|
1470
1532
|
> "$merge_log" 2>&1 || true
|
|
1471
1533
|
;;
|
|
1472
1534
|
codex)
|
|
@@ -1513,6 +1575,50 @@ Begin resolving."
|
|
|
1513
1575
|
return $merge_failures
|
|
1514
1576
|
}
|
|
1515
1577
|
|
|
1578
|
+
collect_pending_merge_epics() {
|
|
1579
|
+
local -a pending_merge_ids=()
|
|
1580
|
+
|
|
1581
|
+
for epic_index in $(seq 0 $((TOTAL_EPICS - 1))); do
|
|
1582
|
+
local epic_status
|
|
1583
|
+
epic_status=$(rjq read "$PRD_FILE" ".epics[$epic_index].status" "pending")
|
|
1584
|
+
[ "$epic_status" = "completed" ] || continue
|
|
1585
|
+
|
|
1586
|
+
local epic_id
|
|
1587
|
+
epic_id=$(rjq read "$PRD_FILE" ".epics[$epic_index].id")
|
|
1588
|
+
[ -n "$epic_id" ] || continue
|
|
1589
|
+
|
|
1590
|
+
local branch_name="ralph/${epic_id}"
|
|
1591
|
+
if git show-ref --verify --quiet "refs/heads/${branch_name}"; then
|
|
1592
|
+
pending_merge_ids+=("$epic_id")
|
|
1593
|
+
fi
|
|
1594
|
+
done
|
|
1595
|
+
|
|
1596
|
+
printf '%s\n' "${pending_merge_ids[@]+"${pending_merge_ids[@]}"}"
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1599
|
+
recover_pending_merges() {
|
|
1600
|
+
local context="$1"
|
|
1601
|
+
local -a pending_merge_ids=()
|
|
1602
|
+
|
|
1603
|
+
while IFS= read -r epic_id; do
|
|
1604
|
+
[ -n "$epic_id" ] && pending_merge_ids+=("$epic_id")
|
|
1605
|
+
done < <(collect_pending_merge_epics)
|
|
1606
|
+
|
|
1607
|
+
if [ ${#pending_merge_ids[@]} -eq 0 ]; then
|
|
1608
|
+
return 0
|
|
1609
|
+
fi
|
|
1610
|
+
|
|
1611
|
+
echo ""
|
|
1612
|
+
echo " --- Recovering completed epic branches before ${context} ---"
|
|
1613
|
+
local epic_id
|
|
1614
|
+
for epic_id in "${pending_merge_ids[@]}"; do
|
|
1615
|
+
echo " [$epic_id] Recovered pending merge from existing epic branch"
|
|
1616
|
+
echo "[$epic_id] RECOVERED PENDING MERGE (${context}) — $(date)" >> "$PROGRESS_FILE"
|
|
1617
|
+
done
|
|
1618
|
+
|
|
1619
|
+
merge_wave "${pending_merge_ids[@]}"
|
|
1620
|
+
}
|
|
1621
|
+
|
|
1516
1622
|
extract_prompt_body() {
|
|
1517
1623
|
local source_file="$1"
|
|
1518
1624
|
awk '
|
|
@@ -1538,8 +1644,8 @@ run_backend_agent_session() {
|
|
|
1538
1644
|
;;
|
|
1539
1645
|
copilot)
|
|
1540
1646
|
COPILOT_ROLE_PROMPT="$prompt" \
|
|
1541
|
-
script -q /dev/null /bin/sh -lc 'exec gh copilot -- --agent "$0" --
|
|
1542
|
-
"$agent_name" "$
|
|
1647
|
+
script -q /dev/null /bin/sh -lc 'exec gh copilot -- --agent "$0" --allow-all --no-ask-user --stream on -p "$1"' \
|
|
1648
|
+
"$agent_name" "$COPILOT_ROLE_PROMPT" \
|
|
1543
1649
|
> "$log_file" 2>&1 || true
|
|
1544
1650
|
;;
|
|
1545
1651
|
opencode)
|
|
@@ -1549,7 +1655,7 @@ run_backend_agent_session() {
|
|
|
1549
1655
|
local prompt_file="${SCRIPT_DIR}/prompts/agents/${agent_name}.md"
|
|
1550
1656
|
local role_body
|
|
1551
1657
|
role_body="$(extract_prompt_body "$prompt_file")"
|
|
1552
|
-
printf '%s\n\n## Assignment\n%s\n' "$role_body" "$prompt" | codex \
|
|
1658
|
+
printf 'Runtime note: This Codex session runs in exec mode. `request_user_input` is unavailable. Never call it. Do not stop to ask the user questions. Make a reasonable assumption and continue.\n\n%s\n\n## Assignment\n%s\n' "$role_body" "$prompt" | codex \
|
|
1553
1659
|
-a never \
|
|
1554
1660
|
exec \
|
|
1555
1661
|
-C "$workdir" \
|
|
@@ -1634,6 +1740,11 @@ $validation_log
|
|
|
1634
1740
|
done
|
|
1635
1741
|
}
|
|
1636
1742
|
|
|
1743
|
+
if ! recover_pending_merges "resume/startup"; then
|
|
1744
|
+
initialize_counters
|
|
1745
|
+
fi
|
|
1746
|
+
initialize_counters
|
|
1747
|
+
|
|
1637
1748
|
WAVE_NUM=0
|
|
1638
1749
|
|
|
1639
1750
|
# Count total stories across all epics for running estimate calculations
|
|
@@ -1675,6 +1786,10 @@ while true; do
|
|
|
1675
1786
|
[ "$ALL_DEPS_MET" = true ] && WAVE_EPICS+=("$EPIC_INDEX")
|
|
1676
1787
|
done
|
|
1677
1788
|
|
|
1789
|
+
if [ -z "$PARALLEL" ] && [ ${#WAVE_EPICS[@]} -gt 1 ]; then
|
|
1790
|
+
WAVE_EPICS=("${WAVE_EPICS[0]}")
|
|
1791
|
+
fi
|
|
1792
|
+
|
|
1678
1793
|
# If no epics ready, we're done
|
|
1679
1794
|
[ ${#WAVE_EPICS[@]} -eq 0 ] && break
|
|
1680
1795
|
|
|
@@ -1999,6 +2114,11 @@ while true; do
|
|
|
1999
2114
|
fi
|
|
2000
2115
|
done
|
|
2001
2116
|
|
|
2117
|
+
if ! recover_pending_merges "finalization"; then
|
|
2118
|
+
initialize_counters
|
|
2119
|
+
fi
|
|
2120
|
+
initialize_counters
|
|
2121
|
+
|
|
2002
2122
|
if ! run_final_validation_cycle; then
|
|
2003
2123
|
FAILED=$((FAILED + 1))
|
|
2004
2124
|
fi
|