@yemi33/minions 0.1.1572 → 0.1.1574
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 +10 -0
- package/dashboard.js +6 -0
- package/engine/lifecycle.js +19 -17
- package/engine.js +5 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.1574 (2026-04-27)
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
- oneShot flag prevents one-off reviews from eval loop (#1776)
|
|
7
|
+
|
|
8
|
+
## 0.1.1573 (2026-04-27)
|
|
9
|
+
|
|
10
|
+
### Fixes
|
|
11
|
+
- default existing_prd_json to empty so plan-to-prd dispatch doesn't warn
|
|
12
|
+
|
|
3
13
|
## 0.1.1572 (2026-04-27)
|
|
4
14
|
|
|
5
15
|
### Fixes
|
package/dashboard.js
CHANGED
|
@@ -912,6 +912,10 @@ async function executeCCActions(actions) {
|
|
|
912
912
|
const project = action.project || '';
|
|
913
913
|
const targetProject = project ? PROJECTS.find(p => p.name?.toLowerCase() === project.toLowerCase()) : PROJECTS[0];
|
|
914
914
|
const wiPath = targetProject ? shared.projectWorkItemsPath(targetProject) : path.join(MINIONS_DIR, 'work-items.json');
|
|
915
|
+
// Issue #1772: CC review/explore/test are human-initiated one-offs.
|
|
916
|
+
// Mark oneShot so any discovered PR is tagged _contextOnly (skips eval loop).
|
|
917
|
+
const ccOneShotTypes = new Set(['review', 'explore', 'test']);
|
|
918
|
+
const isOneShot = action.oneShot === true || (action.oneShot !== false && ccOneShotTypes.has(workType));
|
|
915
919
|
shared.mutateJsonFileLocked(wiPath, items => {
|
|
916
920
|
if (!Array.isArray(items)) items = [];
|
|
917
921
|
items.push({
|
|
@@ -920,6 +924,7 @@ async function executeCCActions(actions) {
|
|
|
920
924
|
status: WI_STATUS.PENDING, created: new Date().toISOString(),
|
|
921
925
|
createdBy: 'command-center', project,
|
|
922
926
|
...(action.agents?.length ? { preferred_agent: action.agents[0] } : {}),
|
|
927
|
+
...(isOneShot ? { oneShot: true } : {}),
|
|
923
928
|
});
|
|
924
929
|
return items;
|
|
925
930
|
}, { defaultValue: [] });
|
|
@@ -1978,6 +1983,7 @@ const server = http.createServer(async (req, res) => {
|
|
|
1978
1983
|
if (body.references) item.references = body.references;
|
|
1979
1984
|
if (body.acceptanceCriteria) item.acceptanceCriteria = body.acceptanceCriteria;
|
|
1980
1985
|
if (body.skipPr) item.skipPr = true;
|
|
1986
|
+
if (body.oneShot) item.oneShot = true;
|
|
1981
1987
|
let dupId = null;
|
|
1982
1988
|
mutateJsonFileLocked(wiPath, (items) => {
|
|
1983
1989
|
if (!Array.isArray(items)) items = [];
|
package/engine/lifecycle.js
CHANGED
|
@@ -800,23 +800,25 @@ function syncPrsFromOutput(output, agentId, meta, config) {
|
|
|
800
800
|
}
|
|
801
801
|
|
|
802
802
|
if (!newPrsByPath.has(prPath)) newPrsByPath.set(prPath, { name: targetName, project: targetProject, entries: [] });
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
803
|
+
const entry = {
|
|
804
|
+
id: fullId,
|
|
805
|
+
prNumber: parseInt(prId, 10) || prId,
|
|
806
|
+
title: (title || `PR created by ${agentName}`).slice(0, 120),
|
|
807
|
+
agent: agentName,
|
|
808
|
+
branch: meta?.branch || '',
|
|
809
|
+
reviewStatus: 'pending',
|
|
810
|
+
status: PR_STATUS.ACTIVE,
|
|
811
|
+
created: ts(),
|
|
812
|
+
url: prUrl,
|
|
813
|
+
prdItems: meta?.item?.id ? [meta.item.id] : [],
|
|
814
|
+
sourcePlan: meta?.item?.sourcePlan || '',
|
|
815
|
+
itemType: meta?.item?.itemType || ''
|
|
816
|
+
};
|
|
817
|
+
// Issue #1772: one-off dispatches (e.g. human-initiated "review this PR" via CC)
|
|
818
|
+
// must not enroll the discovered PR into the auto eval loop. Tag _contextOnly so
|
|
819
|
+
// discoverFromPrs skips it for review/fix dispatch (still polled for status/comments).
|
|
820
|
+
if (meta?.item?.oneShot) entry._contextOnly = true;
|
|
821
|
+
newPrsByPath.get(prPath).entries.push({ prId, fullId, entry });
|
|
820
822
|
}
|
|
821
823
|
|
|
822
824
|
const entryBranch = meta?.branch || '';
|
package/engine.js
CHANGED
|
@@ -2982,6 +2982,11 @@ function discoverCentralWorkItems(config) {
|
|
|
2982
2982
|
vars.plan_summary = (item.title || item.planFile).substring(0, 80);
|
|
2983
2983
|
vars.plan_file = item.planFile || '';
|
|
2984
2984
|
vars.project_name_lower = (firstProject?.name || 'project').toLowerCase();
|
|
2985
|
+
// Default empty string so the {{existing_prd_json}} token always resolves —
|
|
2986
|
+
// playbook treats empty as "no existing PRD, fresh run". Without this default
|
|
2987
|
+
// the renderPlaybook pass logs an "unresolved template variables" warning
|
|
2988
|
+
// every time a fresh plan-to-prd dispatches.
|
|
2989
|
+
vars.existing_prd_json = '';
|
|
2985
2990
|
// Check if a PRD already exists for this plan — reuse its filename to avoid duplicates (#884)
|
|
2986
2991
|
let prdFilename = null;
|
|
2987
2992
|
const prdFiles = safeReadDir(PRD_DIR).filter(f => f.endsWith('.json'));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1574",
|
|
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"
|