@yemi33/minions 0.1.427 → 0.1.429

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.427 (2026-04-06)
3
+ ## 0.1.429 (2026-04-06)
4
4
 
5
5
  ### Features
6
6
  - version check interval on settings page
@@ -11,6 +11,8 @@
11
11
  - Convert remaining lifecycle.js safeWrite calls to mutateJsonFileLocked
12
12
 
13
13
  ### Fixes
14
+ - deduplicate PR entries during poll write-back
15
+ - agent inbox notes include work item ID and time in filename
14
16
  - Notes & KB sidebar notifies on inbox changes and notes.md edits
15
17
  - live output no longer clobbered by steering send
16
18
  - plan-to-prd playbook — don't include verify item, engine adds it
package/engine/ado.js CHANGED
@@ -108,7 +108,12 @@ async function forEachActivePr(config, token, callback) {
108
108
  if (idx >= 0) currentPrs[idx] = updatedPr;
109
109
  // Don't push if not found — it was deleted by another writer, respect that
110
110
  }
111
- return currentPrs;
111
+ // Remove duplicates (keep last occurrence which has latest status)
112
+ const seen = new Set();
113
+ return currentPrs.filter((p, i, arr) => {
114
+ const lastIdx = arr.findLastIndex(x => x.id === p.id);
115
+ return lastIdx === i;
116
+ });
112
117
  }, { defaultValue: [] });
113
118
  totalUpdated += projectUpdated;
114
119
  }
package/engine/github.js CHANGED
@@ -72,12 +72,17 @@ async function forEachActiveGhPr(config, callback) {
72
72
 
73
73
  if (projectUpdated > 0) {
74
74
  mutateJsonFileLocked(projectPrPath(project), (currentPrs) => {
75
- // Only merge back PRs that the callback actually modified
75
+ // Merge back updated PRs and deduplicate
76
76
  for (const updatedPr of activePrs) {
77
77
  const idx = currentPrs.findIndex(p => p.id === updatedPr.id);
78
78
  if (idx >= 0) currentPrs[idx] = updatedPr;
79
79
  }
80
- return currentPrs;
80
+ // Remove duplicates (keep last occurrence which has latest status)
81
+ const seen = new Set();
82
+ return currentPrs.filter((p, i, arr) => {
83
+ const lastIdx = arr.findLastIndex(x => x.id === p.id);
84
+ return lastIdx === i;
85
+ });
81
86
  }, { defaultValue: [] });
82
87
  totalUpdated += projectUpdated;
83
88
  }
@@ -243,7 +243,9 @@ function renderPlaybook(type, vars) {
243
243
  // Inject learnings requirement
244
244
  content += `\n\n---\n\n## REQUIRED: Write Learnings\n\n`;
245
245
  content += `After completing your task, you MUST write a findings/learnings file to:\n`;
246
- content += `\`${MINIONS_DIR}/notes/inbox/${vars.agent_id || 'agent'}-${dateStamp()}.md\`\n\n`;
246
+ const timeStamp = new Date().toISOString().slice(11, 16).replace(':', '');
247
+ const inboxSlug = [vars.agent_id || 'agent', vars.task_id || '', dateStamp(), timeStamp].filter(Boolean).join('-');
248
+ content += `\`${MINIONS_DIR}/notes/inbox/${inboxSlug}.md\`\n\n`;
247
249
  content += `Include:\n`;
248
250
  content += `- What you learned about the codebase\n`;
249
251
  content += `- Patterns you discovered or established\n`;
@@ -342,7 +344,7 @@ function buildSystemPrompt(agentId, config, project) {
342
344
  prompt += `1. Use git worktrees — NEVER checkout on main working tree\n`;
343
345
  prompt += `2. ${getRepoHostToolRule(project)}\n`;
344
346
  prompt += `3. Follow the project conventions in CLAUDE.md if present\n`;
345
- prompt += `4. Write learnings to: ${MINIONS_DIR}/notes/inbox/${agentId}-${dateStamp()}.md\n`;
347
+ prompt += `4. Write learnings to the path specified in the task prompt (format: \`notes/inbox/{agent}-{work-item-id}-{date}-{time}.md\`)\n`;
346
348
  prompt += `5. Agent status is managed by the engine via dispatch.json — agents do not need to track their own status\n`;
347
349
  prompt += `6. If you discover a repeatable workflow, output it as a \\\`\\\`\\\`skill fenced block — the engine auto-extracts it to ~/.claude/skills/\n\n`;
348
350
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.427",
3
+ "version": "0.1.429",
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"