@yemi33/minions 0.1.563 → 0.1.564
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/CHANGELOG.md +2 -1
- package/dashboard.js +8 -9
- package/engine/shared.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.564 (2026-04-08)
|
|
4
4
|
|
|
5
5
|
### Fixes
|
|
6
|
+
- worktree audit followups — delete ordering, path traversal guard
|
|
6
7
|
- worktree lifecycle — fail on dep merge, fallback rm, cleanup on plan delete
|
|
7
8
|
- auto-reset CC session on resume failure, add error logging
|
|
8
9
|
|
package/dashboard.js
CHANGED
|
@@ -2392,11 +2392,17 @@ If nothing to do: { "duplicates": [], "reclassify": [], "remove": [] }`;
|
|
|
2392
2392
|
shared.sanitizePath(body.file, body.file.endsWith('.json') ? PRD_DIR : PLANS_DIR);
|
|
2393
2393
|
const planPath = resolvePlanPath(body.file);
|
|
2394
2394
|
if (!fs.existsSync(planPath)) return jsonReply(res, 404, { error: 'plan not found' });
|
|
2395
|
-
// Read
|
|
2395
|
+
// Read plan content before deleting — needed for worktree cleanup and source_plan
|
|
2396
|
+
let planObj = null;
|
|
2396
2397
|
let prdSourcePlan = null;
|
|
2397
2398
|
if (body.file.endsWith('.json')) {
|
|
2398
|
-
try {
|
|
2399
|
+
try { planObj = safeJsonObj(planPath); prdSourcePlan = planObj?.source_plan || null; } catch {}
|
|
2399
2400
|
}
|
|
2401
|
+
// Clean up worktrees before deleting work items (needs branch info from work items)
|
|
2402
|
+
try {
|
|
2403
|
+
const { cleanupPlanWorktrees } = require('./engine/lifecycle');
|
|
2404
|
+
cleanupPlanWorktrees(body.file, planObj || {}, PROJECTS, getConfig());
|
|
2405
|
+
} catch (e) { console.error('plan worktree cleanup:', e.message); }
|
|
2400
2406
|
safeUnlink(planPath);
|
|
2401
2407
|
|
|
2402
2408
|
// Clean up materialized work items from all projects + central
|
|
@@ -2439,13 +2445,6 @@ If nothing to do: { "duplicates": [], "reclassify": [], "remove": [] }`;
|
|
|
2439
2445
|
} catch (e) { console.error('plan-to-prd cleanup:', e.message); }
|
|
2440
2446
|
}
|
|
2441
2447
|
|
|
2442
|
-
// Clean up worktrees associated with this plan
|
|
2443
|
-
try {
|
|
2444
|
-
const plan = body.file.endsWith('.json') ? (safeJsonObj(path.join(PRD_DIR, 'archive', body.file)) || safeJsonObj(path.join(PRD_DIR, body.file)) || {}) : {};
|
|
2445
|
-
const { cleanupPlanWorktrees } = require('./engine/lifecycle');
|
|
2446
|
-
cleanupPlanWorktrees(body.file, plan, PROJECTS, getConfig());
|
|
2447
|
-
} catch (e) { console.error('plan worktree cleanup:', e.message); }
|
|
2448
|
-
|
|
2449
2448
|
invalidateStatusCache();
|
|
2450
2449
|
return jsonReply(res, 200, { ok: true, cleanedWorkItems: cleaned, cleanedDispatches: dispatchCleaned });
|
|
2451
2450
|
} catch (e) { return jsonReply(res, 400, { error: e.message }); }
|
package/engine/shared.js
CHANGED
|
@@ -808,7 +808,7 @@ function mutatePullRequests(filePath, mutator) {
|
|
|
808
808
|
*/
|
|
809
809
|
function removeWorktree(wtPath, gitRoot, worktreeRoot) {
|
|
810
810
|
const resolved = path.resolve(wtPath);
|
|
811
|
-
const resolvedRoot = path.resolve(worktreeRoot);
|
|
811
|
+
const resolvedRoot = path.resolve(worktreeRoot) + path.sep;
|
|
812
812
|
if (!resolved.startsWith(resolvedRoot)) {
|
|
813
813
|
log('warn', `removeWorktree: refusing to remove ${wtPath} — not under ${worktreeRoot}`);
|
|
814
814
|
return false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.564",
|
|
4
4
|
"description": "Multi-agent AI dev team that runs from ~/.minions/ — five autonomous agents share a single engine, dashboard, and knowledge base",
|
|
5
5
|
"bin": {
|
|
6
6
|
"minions": "bin/minions.js"
|