@yemi33/minions 0.1.20 → 0.1.22

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,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.22 (2026-03-28)
4
+
5
+ ### Dashboard
6
+ - dashboard.js
7
+ - dashboard/js/render-inbox.js
8
+
9
+ ## 0.1.21 (2026-03-28)
10
+
11
+ ### Dashboard
12
+ - dashboard.js
13
+ - dashboard/js/settings.js
14
+
3
15
  ## 0.1.20 (2026-03-28)
4
16
 
5
17
  ### Dashboard
@@ -162,17 +162,24 @@ function openQuickNoteModal() {
162
162
  }
163
163
 
164
164
  async function submitQuickNote() {
165
- const title = document.getElementById('note-title').value;
166
- const content = document.getElementById('note-content').value;
165
+ const titleEl = document.getElementById('note-title');
166
+ const contentEl = document.getElementById('note-content');
167
+ if (!titleEl || !contentEl) { alert('Form elements not found'); return; }
168
+ const title = titleEl.value;
169
+ const content = contentEl.value;
167
170
  if (!title && !content) { alert('Title or content required'); return; }
168
171
  try {
169
172
  const res = await fetch('/api/notes', {
170
173
  method: 'POST', headers: { 'Content-Type': 'application/json' },
171
174
  body: JSON.stringify({ title: title || 'Quick note', what: content || title })
172
175
  });
173
- if (res.ok) { closeModal(); refresh(); showToast('cmd-toast', 'Note saved to inbox', true); }
174
- else { const d = await res.json(); alert('Error: ' + (d.error || 'unknown')); }
175
- } catch (e) { alert('Error: ' + e.message); }
176
+ if (res.ok) {
177
+ try { closeModal(); } catch {}
178
+ refresh();
179
+ try { showToast('cmd-toast', 'Note saved to inbox', true); } catch {}
180
+ }
181
+ else { const d = await res.json().catch(() => ({})); alert('Error: ' + (d.error || 'unknown')); }
182
+ } catch (e) { alert('Error saving note: ' + e.message); }
176
183
  }
177
184
 
178
185
  async function doPromoteToKB(name, category) {
@@ -135,14 +135,15 @@ async function saveSettings() {
135
135
  }
136
136
 
137
137
  async function addProject() {
138
- // Prompt for path directly — folder picker dialogs often open behind the browser
139
- const projectPath = prompt('Enter the full path to your project directory:\n\ne.g. C:\\Users\\you\\repos\\my-project');
140
- if (!projectPath) return;
141
-
142
138
  try {
139
+ showToast('cmd-toast', 'Opening folder picker...', true);
140
+ const browseRes = await fetch('/api/projects/browse', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: '{}' });
141
+ const browseData = await browseRes.json();
142
+ if (browseData.cancelled || !browseData.path) return;
143
+
143
144
  const addRes = await fetch('/api/projects/add', {
144
145
  method: 'POST', headers: { 'Content-Type': 'application/json' },
145
- body: JSON.stringify({ path: projectPath.trim() })
146
+ body: JSON.stringify({ path: browseData.path })
146
147
  });
147
148
  const addData = await addRes.json();
148
149
  if (!addRes.ok) { alert('Failed: ' + (addData.error || 'unknown')); return; }
package/dashboard.js CHANGED
@@ -2417,9 +2417,14 @@ What would you like to discuss or change? When you're happy, say "approve" and I
2417
2417
  const { execSync } = require('child_process');
2418
2418
  let selectedPath = '';
2419
2419
  if (process.platform === 'win32') {
2420
- // PowerShell folder browser dialog
2421
- const ps = `Add-Type -AssemblyName System.Windows.Forms; $f = New-Object System.Windows.Forms.FolderBrowserDialog; $f.Description = 'Select project folder'; $f.ShowNewFolderButton = $false; if ($f.ShowDialog() -eq 'OK') { $f.SelectedPath } else { '' }`;
2422
- selectedPath = execSync(`powershell -NoProfile -Command "${ps}"`, { encoding: 'utf8', timeout: 120000, windowsHide: true }).trim();
2420
+ // Use COM Shell.Application — reliably shows folder picker in foreground
2421
+ const vbs = 'Set shell = CreateObject("Shell.Application")\r\nSet folder = shell.BrowseForFolder(0, "Select project folder", &H0051, "")\r\nIf Not folder Is Nothing Then\r\n WScript.Echo folder.Self.Path\r\nEnd If';
2422
+ const vbsPath = path.join(MINIONS_DIR, 'engine', 'tmp', '_browse.vbs');
2423
+ fs.mkdirSync(path.dirname(vbsPath), { recursive: true });
2424
+ fs.writeFileSync(vbsPath, vbs);
2425
+ try {
2426
+ selectedPath = execSync(`cscript //NoLogo "${vbsPath}"`, { encoding: 'utf8', timeout: 120000 }).trim();
2427
+ } finally { try { fs.unlinkSync(vbsPath); } catch {} }
2423
2428
  } else if (process.platform === 'darwin') {
2424
2429
  selectedPath = execSync(`osascript -e 'POSIX path of (choose folder with prompt "Select project folder")'`, { encoding: 'utf8', timeout: 120000 }).trim();
2425
2430
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
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"