@yemi33/minions 0.1.1786 → 0.1.1787
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 +6 -2
- package/dashboard/js/modal-qa.js +44 -4
- package/dashboard.js +32 -2
- package/engine/copilot-models.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.1787 (2026-05-08)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
- show Doc Chat dispatch feedback (#2173)
|
|
7
|
+
|
|
8
|
+
## 0.1.1785 (2026-05-08)
|
|
4
9
|
|
|
5
10
|
### Features
|
|
6
|
-
- fix pipeline title fallback (#2197)
|
|
7
11
|
- remove cc implement action alias (#2185)
|
|
8
12
|
|
|
9
13
|
## 0.1.1784 (2026-05-08)
|
package/dashboard/js/modal-qa.js
CHANGED
|
@@ -331,9 +331,38 @@ function _qaBuildAssistantHtml(text, opts) {
|
|
|
331
331
|
const pad = opts?.isError ? '' : 'padding-right:24px;';
|
|
332
332
|
return '<div class="modal-qa-a" style="' + style + '">' +
|
|
333
333
|
(opts?.isError ? '' : llmCopyBtn()) +
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
334
|
+
body +
|
|
335
|
+
'<div style="font-size:9px;color:var(--muted);margin-top:4px;text-align:right;' + pad + '">' + opts.elapsed + 's</div>' +
|
|
336
|
+
'</div>';
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
const QA_WORK_ITEM_ACTION_TYPES = new Set(['dispatch', 'fix', 'implement', 'explore', 'review', 'test']);
|
|
340
|
+
|
|
341
|
+
function _qaActionFeedbackHandled(action, actionResult) {
|
|
342
|
+
const type = String(actionResult?.type || action?.type || '');
|
|
343
|
+
return QA_WORK_ITEM_ACTION_TYPES.has(type) && !!(actionResult?.ok || actionResult?.error);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
function _qaRunHandledActionSideEffects(action, actionResult) {
|
|
347
|
+
const type = String(actionResult?.type || action?.type || '');
|
|
348
|
+
if (!QA_WORK_ITEM_ACTION_TYPES.has(type)) return;
|
|
349
|
+
if (typeof wakeEngine === 'function') wakeEngine();
|
|
350
|
+
if (typeof refresh === 'function') refresh();
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
function _qaBuildActionFeedbackHtml(actionFeedback) {
|
|
354
|
+
if (!Array.isArray(actionFeedback) || actionFeedback.length === 0) return '';
|
|
355
|
+
return actionFeedback.map(function(item) {
|
|
356
|
+
const type = escHtml(item.type || 'dispatch');
|
|
357
|
+
const baseStyle = 'padding:4px 10px;border-radius:4px;font-size:10px;align-self:flex-start;border:1px dashed var(--border);margin:4px 0;';
|
|
358
|
+
if (item.error) {
|
|
359
|
+
return '<div class="modal-qa-action-feedback" style="' + baseStyle + 'color:var(--red)">✗ ' + type + ' failed: ' + escHtml(item.error) + '</div>';
|
|
360
|
+
}
|
|
361
|
+
const label = escHtml(item.id || item.duplicateOf || '');
|
|
362
|
+
const duplicate = item.duplicate ? ' <span style="color:var(--orange)">already exists</span>' : '';
|
|
363
|
+
const warning = item.warning ? '<div style="font-size:10px;color:var(--muted);margin-top:2px">' + escHtml(item.warning) + '</div>' : '';
|
|
364
|
+
return '<div class="modal-qa-action-feedback" style="' + baseStyle + 'color:' + (item.duplicate ? 'var(--orange)' : 'var(--green)') + '">✓ ' + type + ': <strong>' + label + '</strong>' + duplicate + warning + '</div>';
|
|
365
|
+
}).join('');
|
|
337
366
|
}
|
|
338
367
|
|
|
339
368
|
function _qaBuildLiveProgressHtml(loadingId, label, elapsedSeconds, streamedText, toolsUsed, queueCount) {
|
|
@@ -718,6 +747,7 @@ async function _processQaMessage(message, selection, opts) {
|
|
|
718
747
|
bodyText += '\n\n_Tools that ran before the failure: ' + names + more + ' \u2014 files or state may have been modified._';
|
|
719
748
|
}
|
|
720
749
|
const answerHtml = _qaBuildAssistantHtml(bodyText, { borderColor, elapsed: qaElapsed });
|
|
750
|
+
const actionFeedbackHtml = _qaBuildActionFeedbackHtml(evt.actionFeedback);
|
|
721
751
|
// On any runtime failure, surface the raw error so users can debug it
|
|
722
752
|
// directly instead of guessing what the friendly summary was hiding.
|
|
723
753
|
const rawErrorHtml = evt.error ? _qaBuildRawErrorHtml(evt.error) : '';
|
|
@@ -725,6 +755,7 @@ async function _processQaMessage(message, selection, opts) {
|
|
|
725
755
|
const loadingEl = tmp.querySelector('#' + loadingId);
|
|
726
756
|
if (loadingEl) loadingEl.remove();
|
|
727
757
|
_qaInsertBeforeQueued(tmp, answerHtml);
|
|
758
|
+
if (actionFeedbackHtml) _qaInsertBeforeQueued(tmp, actionFeedbackHtml);
|
|
728
759
|
if (rawErrorHtml) _qaInsertBeforeQueued(tmp, rawErrorHtml);
|
|
729
760
|
});
|
|
730
761
|
|
|
@@ -732,8 +763,17 @@ async function _processQaMessage(message, selection, opts) {
|
|
|
732
763
|
runtime.history.push({ role: 'user', text: message });
|
|
733
764
|
runtime.history.push({ role: 'assistant', text: bodyText || finalText || '' });
|
|
734
765
|
if (evt.actions && evt.actions.length > 0) {
|
|
766
|
+
const actionResults = Array.isArray(evt.actionResults) ? evt.actionResults : [];
|
|
735
767
|
if (evt.actionResults && typeof _tagServerExecuted === 'function') _tagServerExecuted(evt.actions, evt.actionResults);
|
|
736
|
-
for (
|
|
768
|
+
for (let ai = 0; ai < evt.actions.length; ai++) {
|
|
769
|
+
const action = evt.actions[ai];
|
|
770
|
+
const actionResult = actionResults[ai];
|
|
771
|
+
if (_qaActionFeedbackHandled(action, actionResult)) {
|
|
772
|
+
_qaRunHandledActionSideEffects(action, actionResult);
|
|
773
|
+
continue;
|
|
774
|
+
}
|
|
775
|
+
await ccExecuteAction(action);
|
|
776
|
+
}
|
|
737
777
|
const actionContext = _qaSummarizeActionContext(evt.actions, evt.actionResults);
|
|
738
778
|
if (actionContext) runtime.history.push({ role: 'action', text: actionContext });
|
|
739
779
|
} else if (evt.actionParseError) {
|
package/dashboard.js
CHANGED
|
@@ -2837,6 +2837,31 @@ async function executeDocChatActions(actions, { filePath = null } = {}) {
|
|
|
2837
2837
|
return executeCCActions(actions, { source: 'doc-chat', inferredProject: _inferDocChatProject(filePath) });
|
|
2838
2838
|
}
|
|
2839
2839
|
|
|
2840
|
+
const DOC_CHAT_WORK_ITEM_ACTION_TYPES = new Set(['dispatch', 'fix', 'implement', 'explore', 'review', 'test']);
|
|
2841
|
+
|
|
2842
|
+
function _buildDocChatActionFeedback(actions, actionResults) {
|
|
2843
|
+
if (!Array.isArray(actions) || !Array.isArray(actionResults)) return [];
|
|
2844
|
+
const feedback = [];
|
|
2845
|
+
for (let i = 0; i < actions.length && i < actionResults.length; i++) {
|
|
2846
|
+
const action = actions[i] || {};
|
|
2847
|
+
const result = actionResults[i] || {};
|
|
2848
|
+
const type = String(result.type || action.type || '').trim();
|
|
2849
|
+
if (!DOC_CHAT_WORK_ITEM_ACTION_TYPES.has(type)) continue;
|
|
2850
|
+
if (result.error) {
|
|
2851
|
+
feedback.push({ type, error: String(result.error) });
|
|
2852
|
+
continue;
|
|
2853
|
+
}
|
|
2854
|
+
const id = result.id || result.duplicateOf;
|
|
2855
|
+
if (!result.ok || !id) continue;
|
|
2856
|
+
const item = { type, id: String(id), ok: true };
|
|
2857
|
+
if (result.duplicate) item.duplicate = true;
|
|
2858
|
+
if (result.duplicateOf) item.duplicateOf = String(result.duplicateOf);
|
|
2859
|
+
if (result.warning) item.warning = String(result.warning);
|
|
2860
|
+
feedback.push(item);
|
|
2861
|
+
}
|
|
2862
|
+
return feedback;
|
|
2863
|
+
}
|
|
2864
|
+
|
|
2840
2865
|
// ── Shared LLM call core — used by CC panel and doc modals ──────────────────
|
|
2841
2866
|
|
|
2842
2867
|
// Session store for doc modals — keyed by filePath or title, persisted to disk.
|
|
@@ -3447,6 +3472,7 @@ function _buildDocChatResponsePayload({
|
|
|
3447
3472
|
answer,
|
|
3448
3473
|
actions,
|
|
3449
3474
|
actionResults,
|
|
3475
|
+
actionFeedback,
|
|
3450
3476
|
actionParseError,
|
|
3451
3477
|
ccError,
|
|
3452
3478
|
partial,
|
|
@@ -3463,6 +3489,7 @@ function _buildDocChatResponsePayload({
|
|
|
3463
3489
|
answer: finalAnswer,
|
|
3464
3490
|
actions,
|
|
3465
3491
|
...(actionResults ? { actionResults } : {}),
|
|
3492
|
+
...(Array.isArray(actionFeedback) && actionFeedback.length ? { actionFeedback } : {}),
|
|
3466
3493
|
...(actionParseError ? { actionParseError } : {}),
|
|
3467
3494
|
...(ccError && !suppressPostPatchError ? { error: ccError } : {}),
|
|
3468
3495
|
...(partial && !suppressPostPatchError ? { partial: true, warning } : {}),
|
|
@@ -5835,12 +5862,13 @@ What would you like to discuss or change? When you're happy, say "approve" and I
|
|
|
5835
5862
|
onAbortReady: (abort) => { _docAbort = abort; },
|
|
5836
5863
|
});
|
|
5837
5864
|
const actionResults = await executeDocChatActions(actions, { filePath: body.filePath });
|
|
5865
|
+
const actionFeedback = _buildDocChatActionFeedback(actions, actionResults);
|
|
5838
5866
|
const finalize = _finalizeDocChatEdit({
|
|
5839
5867
|
filePath: body.filePath, fullPath, isJson, canEdit,
|
|
5840
5868
|
originalContent: currentContent, delimiterContent: content,
|
|
5841
5869
|
});
|
|
5842
5870
|
const payload = _buildDocChatResponsePayload({
|
|
5843
|
-
answer, actions, actionResults, actionParseError, ccError, partial, warning, toolUses, finalize,
|
|
5871
|
+
answer, actions, actionResults, actionFeedback, actionParseError, ccError, partial, warning, toolUses, finalize,
|
|
5844
5872
|
});
|
|
5845
5873
|
_docDone = true;
|
|
5846
5874
|
return jsonReply(res, 200, payload);
|
|
@@ -5929,12 +5957,13 @@ What would you like to discuss or change? When you're happy, say "approve" and I
|
|
|
5929
5957
|
onRetry: (attempt) => { writeDocEvent({ type: 'progress', attempt }); },
|
|
5930
5958
|
});
|
|
5931
5959
|
const actionResults = await executeDocChatActions(actions, { filePath: body.filePath });
|
|
5960
|
+
const actionFeedback = _buildDocChatActionFeedback(actions, actionResults);
|
|
5932
5961
|
const finalize = _finalizeDocChatEdit({
|
|
5933
5962
|
filePath: body.filePath, fullPath, isJson, canEdit,
|
|
5934
5963
|
originalContent: currentContent, delimiterContent: content,
|
|
5935
5964
|
});
|
|
5936
5965
|
const payload = _buildDocChatResponsePayload({
|
|
5937
|
-
answer, actions, actionResults, actionParseError, ccError, partial, warning, toolUses, finalize,
|
|
5966
|
+
answer, actions, actionResults, actionFeedback, actionParseError, ccError, partial, warning, toolUses, finalize,
|
|
5938
5967
|
});
|
|
5939
5968
|
const { answer: finalAnswer, ...donePayload } = payload;
|
|
5940
5969
|
writeDocEvent({
|
|
@@ -8400,6 +8429,7 @@ module.exports = {
|
|
|
8400
8429
|
_meetingParticipantsFromAction: meetingParticipantsFromAction,
|
|
8401
8430
|
parsePinnedEntries,
|
|
8402
8431
|
_parseDocChatResultText,
|
|
8432
|
+
_buildDocChatActionFeedback,
|
|
8403
8433
|
_formatDocChatContext,
|
|
8404
8434
|
_isCompletedMeetingJson,
|
|
8405
8435
|
_finalizeDocChatEdit,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1787",
|
|
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"
|