@caseyharalson/orrery 0.14.3 → 0.14.4
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.
|
@@ -27,8 +27,8 @@ function colorize(text, color) {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
function getPlanStatus(plan) {
|
|
30
|
-
if (plan.
|
|
31
|
-
if (plan.
|
|
30
|
+
if (plan.isComplete()) return "complete";
|
|
31
|
+
if (plan.hasBlockedSteps()) return "blocked";
|
|
32
32
|
if (plan.steps.some((step) => step.status === "in_progress")) {
|
|
33
33
|
return "in_progress";
|
|
34
34
|
}
|
|
@@ -469,7 +469,7 @@ async function orchestrate(options = {}) {
|
|
|
469
469
|
normalizedOptions.onComplete
|
|
470
470
|
);
|
|
471
471
|
|
|
472
|
-
if (result.isComplete
|
|
472
|
+
if (result.isComplete) {
|
|
473
473
|
// Plan completed successfully - return to source branch for next plan
|
|
474
474
|
const currentBranch = getCurrentBranch(REPO_ROOT);
|
|
475
475
|
if (currentBranch !== sourceBranch) {
|
|
@@ -601,20 +601,19 @@ async function resumeInWorktree(
|
|
|
601
601
|
);
|
|
602
602
|
logPullRequestInfo(prInfo);
|
|
603
603
|
|
|
604
|
-
const isSuccessful = plan.isSuccessful();
|
|
605
604
|
runOnCompleteHook(
|
|
606
605
|
onComplete,
|
|
607
606
|
{
|
|
608
607
|
planName: planFileName,
|
|
609
608
|
planFile,
|
|
610
|
-
outcome:
|
|
609
|
+
outcome: "success",
|
|
611
610
|
workBranch: plan.metadata.work_branch || "",
|
|
612
611
|
sourceBranch,
|
|
613
612
|
prUrl: prInfo.url || "",
|
|
614
613
|
stepsTotal: plan.steps.length,
|
|
615
614
|
stepsCompleted: plan.steps.filter((s) => s.status === "complete")
|
|
616
615
|
.length,
|
|
617
|
-
stepsBlocked:
|
|
616
|
+
stepsBlocked: 0
|
|
618
617
|
},
|
|
619
618
|
worktreePath
|
|
620
619
|
);
|
|
@@ -830,13 +829,12 @@ async function handleResumeMode(
|
|
|
830
829
|
const prInfo = createPullRequest(prTitle, prBody, sourceBranch, REPO_ROOT);
|
|
831
830
|
logPullRequestInfo(prInfo);
|
|
832
831
|
|
|
833
|
-
const isSuccessful = matchingPlan.isSuccessful();
|
|
834
832
|
runOnCompleteHook(
|
|
835
833
|
onComplete,
|
|
836
834
|
{
|
|
837
835
|
planName: planFileName,
|
|
838
836
|
planFile: matchingPlanFile,
|
|
839
|
-
outcome:
|
|
837
|
+
outcome: "success",
|
|
840
838
|
workBranch: matchingPlan.metadata.work_branch || currentBranch,
|
|
841
839
|
sourceBranch,
|
|
842
840
|
prUrl: prInfo.url || "",
|
|
@@ -844,8 +842,7 @@ async function handleResumeMode(
|
|
|
844
842
|
stepsCompleted: matchingPlan.steps.filter(
|
|
845
843
|
(s) => s.status === "complete"
|
|
846
844
|
).length,
|
|
847
|
-
stepsBlocked:
|
|
848
|
-
.length
|
|
845
|
+
stepsBlocked: 0
|
|
849
846
|
},
|
|
850
847
|
REPO_ROOT
|
|
851
848
|
);
|
|
@@ -1014,8 +1011,6 @@ async function processPlanInWorktree(normalizedOptions) {
|
|
|
1014
1011
|
const isComplete = plan.isComplete();
|
|
1015
1012
|
|
|
1016
1013
|
if (isComplete) {
|
|
1017
|
-
const isSuccessful = plan.isSuccessful();
|
|
1018
|
-
|
|
1019
1014
|
// Archive the plan
|
|
1020
1015
|
archivePlan(resolvedPlanFile, plan, completedDir);
|
|
1021
1016
|
|
|
@@ -1046,14 +1041,14 @@ async function processPlanInWorktree(normalizedOptions) {
|
|
|
1046
1041
|
{
|
|
1047
1042
|
planName: planFileName,
|
|
1048
1043
|
planFile: resolvedPlanFile,
|
|
1049
|
-
outcome:
|
|
1044
|
+
outcome: "success",
|
|
1050
1045
|
workBranch,
|
|
1051
1046
|
sourceBranch,
|
|
1052
1047
|
prUrl: prInfo.url || "",
|
|
1053
1048
|
stepsTotal: plan.steps.length,
|
|
1054
1049
|
stepsCompleted: plan.steps.filter((s) => s.status === "complete")
|
|
1055
1050
|
.length,
|
|
1056
|
-
stepsBlocked:
|
|
1051
|
+
stepsBlocked: 0
|
|
1057
1052
|
},
|
|
1058
1053
|
worktreePath
|
|
1059
1054
|
);
|
|
@@ -1066,11 +1061,7 @@ async function processPlanInWorktree(normalizedOptions) {
|
|
|
1066
1061
|
console.error(`Failed to clean up worktree: ${err.message}`);
|
|
1067
1062
|
}
|
|
1068
1063
|
|
|
1069
|
-
|
|
1070
|
-
console.log("\n=== Plan Complete (success) ===");
|
|
1071
|
-
} else {
|
|
1072
|
-
console.log("\n=== Plan Complete (partial — some steps blocked) ===");
|
|
1073
|
-
}
|
|
1064
|
+
console.log("\n=== Plan Complete (success) ===");
|
|
1074
1065
|
} else {
|
|
1075
1066
|
// Plan not complete — commit WIP and preserve worktree
|
|
1076
1067
|
const progressCommit = commit(
|
|
@@ -1124,7 +1115,7 @@ async function processPlanInWorktree(normalizedOptions) {
|
|
|
1124
1115
|
* @param {string} completedDir - Directory for completed plans
|
|
1125
1116
|
* @param {string} reportsDir - Directory for reports
|
|
1126
1117
|
* @param {boolean} parallelEnabled - Whether parallel execution with worktrees is enabled
|
|
1127
|
-
* @returns {Promise<{isComplete: boolean,
|
|
1118
|
+
* @returns {Promise<{isComplete: boolean, workBranch: string}>}
|
|
1128
1119
|
*/
|
|
1129
1120
|
async function processPlanWithBranching(
|
|
1130
1121
|
planFile,
|
|
@@ -1178,8 +1169,6 @@ async function processPlanWithBranching(
|
|
|
1178
1169
|
const isComplete = plan.isComplete();
|
|
1179
1170
|
|
|
1180
1171
|
if (isComplete) {
|
|
1181
|
-
const isSuccessful = plan.isSuccessful();
|
|
1182
|
-
|
|
1183
1172
|
// Step 6: Archive the plan (on work branch)
|
|
1184
1173
|
archivePlan(planFile, plan, completedDir);
|
|
1185
1174
|
|
|
@@ -1204,19 +1193,19 @@ async function processPlanWithBranching(
|
|
|
1204
1193
|
{
|
|
1205
1194
|
planName: planFileName,
|
|
1206
1195
|
planFile,
|
|
1207
|
-
outcome:
|
|
1196
|
+
outcome: "success",
|
|
1208
1197
|
workBranch,
|
|
1209
1198
|
sourceBranch,
|
|
1210
1199
|
prUrl: prInfo.url || "",
|
|
1211
1200
|
stepsTotal: plan.steps.length,
|
|
1212
1201
|
stepsCompleted: plan.steps.filter((s) => s.status === "complete")
|
|
1213
1202
|
.length,
|
|
1214
|
-
stepsBlocked:
|
|
1203
|
+
stepsBlocked: 0
|
|
1215
1204
|
},
|
|
1216
1205
|
REPO_ROOT
|
|
1217
1206
|
);
|
|
1218
1207
|
|
|
1219
|
-
return { isComplete: true,
|
|
1208
|
+
return { isComplete: true, workBranch };
|
|
1220
1209
|
} else {
|
|
1221
1210
|
// Plan not complete (still has pending steps or was interrupted)
|
|
1222
1211
|
// Commit any progress made
|
|
@@ -1250,7 +1239,7 @@ async function processPlanWithBranching(
|
|
|
1250
1239
|
"\nPlan not complete. Work branch preserved for later continuation."
|
|
1251
1240
|
);
|
|
1252
1241
|
|
|
1253
|
-
return { isComplete: false,
|
|
1242
|
+
return { isComplete: false, workBranch };
|
|
1254
1243
|
}
|
|
1255
1244
|
}
|
|
1256
1245
|
|
|
@@ -1291,26 +1280,15 @@ function logPullRequestInfo(prInfo) {
|
|
|
1291
1280
|
*/
|
|
1292
1281
|
function generatePRBody(plan) {
|
|
1293
1282
|
const steps = plan.steps || [];
|
|
1294
|
-
const completed = steps.filter((s) => s.status === "complete").length;
|
|
1295
|
-
const blocked = steps.filter((s) => s.status === "blocked").length;
|
|
1296
1283
|
const total = steps.length;
|
|
1297
1284
|
|
|
1298
1285
|
let body = `## Plan Summary\n\n`;
|
|
1299
|
-
body += `- **Status:**
|
|
1300
|
-
body += `- **Steps:** ${
|
|
1301
|
-
if (blocked > 0) {
|
|
1302
|
-
body += `, ${blocked} blocked`;
|
|
1303
|
-
}
|
|
1304
|
-
body += `\n\n`;
|
|
1286
|
+
body += `- **Status:** All steps complete\n`;
|
|
1287
|
+
body += `- **Steps:** ${total}/${total} complete\n\n`;
|
|
1305
1288
|
|
|
1306
1289
|
body += `## Steps\n\n`;
|
|
1307
1290
|
for (const step of steps) {
|
|
1308
|
-
|
|
1309
|
-
step.status === "complete" ? "x" : step.status === "blocked" ? "-" : " ";
|
|
1310
|
-
body += `- [${icon}] **${step.id}**: ${step.description}\n`;
|
|
1311
|
-
if (step.status === "blocked" && step.blocked_reason) {
|
|
1312
|
-
body += ` - Blocked: ${step.blocked_reason}\n`;
|
|
1313
|
-
}
|
|
1291
|
+
body += `- [x] **${step.id}**: ${step.description}\n`;
|
|
1314
1292
|
}
|
|
1315
1293
|
|
|
1316
1294
|
body += `\n---\n*Generated by Orrery*`;
|
|
@@ -2037,17 +2015,12 @@ function runOnCompleteHook(command, context, cwd) {
|
|
|
2037
2015
|
* Archive a completed plan
|
|
2038
2016
|
*/
|
|
2039
2017
|
function archivePlan(planFile, plan, completedDir) {
|
|
2040
|
-
const success = plan.isSuccessful();
|
|
2041
|
-
const status = success ? "SUCCESS" : "PARTIAL (some steps blocked)";
|
|
2042
|
-
|
|
2043
|
-
// Add completion metadata
|
|
2044
2018
|
plan.metadata.completed_at = new Date().toISOString();
|
|
2045
|
-
plan.metadata.outcome =
|
|
2019
|
+
plan.metadata.outcome = "success";
|
|
2046
2020
|
savePlan(plan);
|
|
2047
2021
|
|
|
2048
|
-
// Move to completed
|
|
2049
2022
|
const destPath = movePlanToCompleted(planFile, completedDir);
|
|
2050
|
-
console.log(`\nPlan archived:
|
|
2023
|
+
console.log(`\nPlan archived: SUCCESS`);
|
|
2051
2024
|
console.log(` -> ${path.relative(REPO_ROOT, destPath)}`);
|
|
2052
2025
|
}
|
|
2053
2026
|
|
|
@@ -52,21 +52,19 @@ function loadPlan(filePath) {
|
|
|
52
52
|
},
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
|
-
* Check if all steps are complete
|
|
55
|
+
* Check if all steps are complete
|
|
56
56
|
* @returns {boolean}
|
|
57
57
|
*/
|
|
58
58
|
isComplete() {
|
|
59
|
-
return this.steps.every(
|
|
60
|
-
(s) => s.status === "complete" || s.status === "blocked"
|
|
61
|
-
);
|
|
59
|
+
return this.steps.every((s) => s.status === "complete");
|
|
62
60
|
},
|
|
63
61
|
|
|
64
62
|
/**
|
|
65
|
-
* Check if
|
|
63
|
+
* Check if the plan has any blocked steps
|
|
66
64
|
* @returns {boolean}
|
|
67
65
|
*/
|
|
68
|
-
|
|
69
|
-
return this.steps.
|
|
66
|
+
hasBlockedSteps() {
|
|
67
|
+
return this.steps.some((s) => s.status === "blocked");
|
|
70
68
|
}
|
|
71
69
|
};
|
|
72
70
|
}
|