@yemi33/minions 0.1.1918 → 0.1.1920
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/dashboard/js/settings.js +1 -3
- package/engine/copilot-models.json +1 -1
- package/engine/features.js +17 -0
- package/engine/lifecycle.js +35 -0
- package/engine/shared.js +5 -1
- package/package.json +1 -1
package/dashboard/js/settings.js
CHANGED
|
@@ -265,8 +265,7 @@ async function openSettings() {
|
|
|
265
265
|
'</div>' +
|
|
266
266
|
|
|
267
267
|
'<h3 style="font-size:13px;color:var(--blue);margin-bottom:8px">Claude CLI</h3>' +
|
|
268
|
-
'<div style="display:grid;grid-template-columns:1fr
|
|
269
|
-
settingsField('Output Format', 'set-outputFormat', c.outputFormat || 'stream-json', '', '') +
|
|
268
|
+
'<div style="display:grid;grid-template-columns:1fr;gap:8px;margin-bottom:8px">' +
|
|
270
269
|
settingsField('Allowed Tools', 'set-allowedTools', c.allowedTools || '', '', 'Claude allow-list passed through for compatibility; runtime bypass flags are adapter-owned.') +
|
|
271
270
|
'</div>' +
|
|
272
271
|
'<div style="font-size:10px;color:var(--muted);margin-bottom:16px;padding:6px 8px;border:1px solid var(--border);border-radius:4px;background:var(--surface-subtle, rgba(130,160,210,0.08))">' +
|
|
@@ -635,7 +634,6 @@ async function saveSettings() {
|
|
|
635
634
|
};
|
|
636
635
|
|
|
637
636
|
const claudePayload = {
|
|
638
|
-
outputFormat: document.getElementById('set-outputFormat').value,
|
|
639
637
|
allowedTools: document.getElementById('set-allowedTools').value,
|
|
640
638
|
};
|
|
641
639
|
|
package/engine/features.js
CHANGED
|
@@ -3,6 +3,23 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
// Entry shape: id → { description, default: bool, addedIn?: version, expires?: ISO-date }
|
|
6
|
+
//
|
|
7
|
+
// INTENTIONAL EMPTY REGISTRY — DO NOT DELETE.
|
|
8
|
+
//
|
|
9
|
+
// The `FEATURES = {}` literal below is intentional scaffolding, not dead code.
|
|
10
|
+
// The surrounding framework (isFeatureOn, listFeatures, hasFeature, env-var
|
|
11
|
+
// override resolver, expiration timestamps) is load-bearing: dashboard.js
|
|
12
|
+
// boot wires it into /api/features (list), /api/features/toggle, and the
|
|
13
|
+
// `window.MINIONS_FEATURES` client bootstrap. Deleting the registry — even
|
|
14
|
+
// while empty — would break dashboard startup and the experimental-flags UI.
|
|
15
|
+
//
|
|
16
|
+
// New flags belong here. Register them in this object instead of removing
|
|
17
|
+
// the empty literal. The first real entry will replace the example below;
|
|
18
|
+
// until then the empty object is the correct, expected shape.
|
|
19
|
+
//
|
|
20
|
+
// Decision logged in the 2026-05-13 daily architecture & bug review meeting
|
|
21
|
+
// (knowledge/architecture/2026-05-13-ripley-meeting-conclusion-daily-architecture-bug-review-2.md,
|
|
22
|
+
// PR-C, Option B — keep framework, document the empty registry).
|
|
6
23
|
const FEATURES = {
|
|
7
24
|
// Example:
|
|
8
25
|
// 'ux-sidebar-v2': { description: '…', default: false, addedIn: '0.1.1738', expires: '2026-06-01' },
|
package/engine/lifecycle.js
CHANGED
|
@@ -2597,6 +2597,12 @@ function parseAgentOutput(stdout, runtimeName) {
|
|
|
2597
2597
|
* Agents produce a ```completion fenced block with key: value pairs.
|
|
2598
2598
|
* Returns parsed object or null if not found / malformed.
|
|
2599
2599
|
* If multiple blocks exist, the last one wins (agent may retry).
|
|
2600
|
+
*
|
|
2601
|
+
* DEPRECATED — slated for removal once telemetry shows zero hits over a 14-day
|
|
2602
|
+
* window. Telemetry: see _engine.completionFallbacks in metrics.json (the JSON
|
|
2603
|
+
* sidecar at MINIONS_COMPLETION_REPORT is the documented contract; this fenced
|
|
2604
|
+
* fallback exists only to support runtimes/agents that have not yet adopted it).
|
|
2605
|
+
* Removal is tracked by the P-c8f5e1b3 follow-up plan.
|
|
2600
2606
|
*/
|
|
2601
2607
|
function parseStructuredCompletion(stdout, runtimeName) {
|
|
2602
2608
|
if (!stdout || typeof stdout !== 'string') return null;
|
|
@@ -2692,6 +2698,13 @@ function parseCompletionKeyValues(text) {
|
|
|
2692
2698
|
return result;
|
|
2693
2699
|
}
|
|
2694
2700
|
|
|
2701
|
+
/**
|
|
2702
|
+
* DEPRECATED — slated for removal once telemetry shows zero hits over a 14-day
|
|
2703
|
+
* window. Telemetry: see _engine.completionFallbacks in metrics.json (the JSON
|
|
2704
|
+
* sidecar at MINIONS_COMPLETION_REPORT is the documented contract; this prose
|
|
2705
|
+
* fallback only fires when both the sidecar AND the fenced ```completion block
|
|
2706
|
+
* are missing). Removal is tracked by the P-c8f5e1b3 follow-up plan.
|
|
2707
|
+
*/
|
|
2695
2708
|
function parseCompletionFieldSummary(text) {
|
|
2696
2709
|
if (!text || typeof text !== 'string') return null;
|
|
2697
2710
|
|
|
@@ -3203,6 +3216,28 @@ async function runPostCompletionHooks(dispatchItem, agentId, code, stdout, confi
|
|
|
3203
3216
|
const summaryCompletion = reportCompletion || fencedCompletion ? null : parseCompletionFieldSummary(resultSummary);
|
|
3204
3217
|
const fallbackCompletion = fencedCompletion || summaryCompletion;
|
|
3205
3218
|
const fallbackSource = fencedCompletion && hasCompletionFence(stdout, runtimeName) ? 'fenced-completion' : 'summary-completion';
|
|
3219
|
+
// P-c8f5e1b3 — telemetry: completion-fallback. Emit a grep-able log + bump a
|
|
3220
|
+
// counter in metrics.json whenever the fenced or summary fallback fires (i.e.
|
|
3221
|
+
// the documented sidecar contract was missing). Used to confirm zero adoption
|
|
3222
|
+
// gaps before removing parseStructuredCompletion / parseCompletionFieldSummary
|
|
3223
|
+
// in a follow-up. Sidecar (happy) path is silent — no log, no increment.
|
|
3224
|
+
if (!reportCompletion && fallbackCompletion) {
|
|
3225
|
+
const counterKey = fallbackSource === 'fenced-completion' ? 'fenced' : 'summary';
|
|
3226
|
+
const wiId = dispatchItem.meta?.item?.id || null;
|
|
3227
|
+
log('info', `telemetry: completion-fallback agent=${agentId || 'unknown'} wi=${wiId || 'N/A'} runtime=${runtimeName} source=${fallbackSource}`);
|
|
3228
|
+
try {
|
|
3229
|
+
const metricsPath = path.join(ENGINE_DIR, 'metrics.json');
|
|
3230
|
+
mutateJsonFileLocked(metricsPath, (metrics) => {
|
|
3231
|
+
metrics = metrics || {};
|
|
3232
|
+
if (!metrics._engine) metrics._engine = {};
|
|
3233
|
+
if (!metrics._engine.completionFallbacks) metrics._engine.completionFallbacks = { fenced: 0, summary: 0 };
|
|
3234
|
+
metrics._engine.completionFallbacks[counterKey] = (metrics._engine.completionFallbacks[counterKey] || 0) + 1;
|
|
3235
|
+
return metrics;
|
|
3236
|
+
});
|
|
3237
|
+
} catch (err) {
|
|
3238
|
+
log('warn', `telemetry: completion-fallback metrics write failed: ${err.message}`);
|
|
3239
|
+
}
|
|
3240
|
+
}
|
|
3206
3241
|
const structuredCompletion = reportCompletion || persistCompletionReport(dispatchItem, fallbackCompletion, fallbackSource);
|
|
3207
3242
|
if (structuredCompletion) {
|
|
3208
3243
|
if (structuredCompletion.summary) resultSummary = String(structuredCompletion.summary);
|
package/engine/shared.js
CHANGED
|
@@ -1816,7 +1816,11 @@ function pruneDefaultClaudeConfig(config) {
|
|
|
1816
1816
|
};
|
|
1817
1817
|
|
|
1818
1818
|
removeKey('permissionMode');
|
|
1819
|
-
|
|
1819
|
+
// outputFormat is fully orphan — the Claude adapter hard-codes 'stream-json'
|
|
1820
|
+
// and nothing threads config.claude.outputFormat into it. Strip unconditionally
|
|
1821
|
+
// so stale values stop tripping the deprecation warning.
|
|
1822
|
+
removeKey('outputFormat');
|
|
1823
|
+
for (const key of ['binary', 'allowedTools']) {
|
|
1820
1824
|
if (Object.prototype.hasOwnProperty.call(claude, key) && claude[key] === DEFAULT_CLAUDE[key]) {
|
|
1821
1825
|
removeKey(key);
|
|
1822
1826
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1920",
|
|
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"
|