@yemi33/minions 0.1.2162 → 0.1.2164

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.
@@ -27,14 +27,14 @@
27
27
  "id": "completion-fallback-parsers",
28
28
  "description": "parseStructuredCompletion and parseCompletionFieldSummary in engine/lifecycle.js",
29
29
  "file": "engine/lifecycle.js",
30
- "lines": "3075, 3273",
30
+ "lines": "3410, 3608",
31
31
  "telemetryGate": "_engine.completionFallbacks must read 0 (both fenced and summary counters) across sweepWindowDays starting from sweepStartDate",
32
32
  "sweepWindowDays": 14,
33
- "sweepStartDate": "2026-05-27",
34
- "sweepRationale": "14 days matches the dead-code audit cadence (one full weekly audit cycle plus a buffer week). Policy decision pending confirmation in open-question #1 of the 2026-05-27 Bug Audit Review meeting conclusion — if the human teammate prefers a different cadence, repin this field and the matching enforcingSweepWindowTest fixture.",
33
+ "sweepStartDate": "2026-06-11",
34
+ "sweepRationale": "14 days matches the dead-code audit cadence (one full weekly audit cycle plus a buffer week). Window restarted on 2026-06-11 (= merge_date(P-a7b2c1d9) + 1 day, anchor commit eb544aa80dbd64c87b78ad08a17ca3560e627094 merged 2026-06-10T18:04:12Z) because the original 2026-05-27 window was invalidated: the engine/timeout.js caller of parseStructuredCompletion (commit 0f4b9787, 2026-04-30) predated the telemetry counter (commit cea61119, 2026-05-13), so the hidden caller was never instrumented and a zero reading proved nothing. P-a7b2c1d9 removed that hidden caller; the new window measures only callers that the counter actually instruments. Policy decision pending confirmation in open-question #1 of the 2026-05-27 Bug Audit Review meeting conclusion — if the human teammate prefers a different cadence, repin this field and the matching enforcingSweepWindowTest fixture.",
35
35
  "enforcingTest": "test/unit/completion-fallback-telemetry.test.js:217-234",
36
36
  "enforcingSweepWindowTest": "test/unit/completion-fallback-sweep-window.test.js",
37
- "notes": "Do NOT set removedAt until telemetry confirms zero usage across the sweepWindowDays from sweepStartDate. The follow-up code-removal PR (dropping parseStructuredCompletion at engine/lifecycle.js:3075, parseCompletionFieldSummary at :3273, and the gated fallback at :4240-4266) is dispatched separately once the window is observed clean."
37
+ "notes": "Do NOT set removedAt until telemetry confirms zero usage across the sweepWindowDays from sweepStartDate. The follow-up code-removal PR (dropping parseStructuredCompletion at engine/lifecycle.js:3410, parseCompletionFieldSummary at :3608, and the gated fallback at :4675-4700) is dispatched separately once the window is observed clean."
38
38
  },
39
39
  {
40
40
  "id": "config-claude-binary-override",
@@ -0,0 +1,43 @@
1
+ # Preflight & Doctor
2
+
3
+ `minions doctor` (and the lighter `minions preflight` that runs on every CLI
4
+ invocation) inspects the local environment for the conditions Minions needs
5
+ to dispatch agents reliably. Every row is one of: `OK`, `WARN`, `FAIL`.
6
+
7
+ This page documents the rows that are not self-explanatory from their message.
8
+
9
+ ## "Permission bypass: \<runtime\>"
10
+
11
+ Minions dispatches agents in **headless** mode — no human is sitting at the
12
+ terminal to answer "Allow this tool to run X?" permission prompts. Every
13
+ agent runtime adapter therefore declares a `permissionBypassFlags` list (the
14
+ flag set that tells the underlying CLI to skip every interactive permission
15
+ prompt). At doctor time we shell out to `<runtime> --help` and confirm those
16
+ flags still appear in the help text.
17
+
18
+ The check emits **WARN** (not FAIL) so an outdated or unusual CLI install
19
+ doesn't block existing dispatches — Minions still passes the flags, the
20
+ agent just risks hanging on a prompt if the CLI doesn't honor them.
21
+
22
+ WARN cases and remedies:
23
+
24
+ | Case | Meaning | Fix |
25
+ |------|---------|-----|
26
+ | `adapter did not declare permissionBypassFlags` | The runtime adapter is missing its declared bypass-flag list. Internal bug — open an issue. | Code change in `engine/runtimes/<name>.js`. |
27
+ | `could not invoke <runtime> --help` | The runtime binary was found but `--help` failed (exit non-zero, timeout, or no output). | Re-install the CLI; verify `<runtime> --help` works in a fresh shell. |
28
+ | `--help does not list expected flag(s): <flags>` | The installed CLI version is older than the flags Minions expects, **or** the resolved binary is a different CLI with the same name. | Update the CLI: `npm i -g @anthropic-ai/claude-code` for Claude, `winget upgrade Microsoft.CopilotCLI` (Windows) or `npm i -g @github/copilot` for the Copilot CLI. |
29
+
30
+ ### The `gh copilot` vs Copilot-CLI gotcha
31
+
32
+ On Linux CI agents, `which copilot` often resolves to `/usr/bin/gh` — the
33
+ GitHub CLI's **`gh copilot`** extension, not the standalone **Copilot CLI**
34
+ (`@github/copilot`). They share the binary name but have completely
35
+ different flag sets. The `gh copilot` extension does NOT accept
36
+ `--autopilot`, `--allow-all`, or `--no-ask-user`, so the WARN row will fire
37
+ even though the binary "works".
38
+
39
+ The warn is legitimate — dispatched agents using that binary would hang on
40
+ permission prompts. Install the standalone Copilot CLI (`npm i -g
41
+ @github/copilot`) ahead of `gh` in `$PATH`, or configure
42
+ `agents.<id>.cli` to point at the absolute path of the real Copilot CLI
43
+ binary.
package/engine/timeout.js CHANGED
@@ -594,7 +594,15 @@ function checkTimeouts(config) {
594
594
  const engineRestartGraceUntil = engine().engineRestartGraceUntil;
595
595
  const engineRestartGraceExempt = engine().engineRestartGraceExempt;
596
596
  const { completeDispatch } = dispatch();
597
- const { runPostCompletionHooks, parseAgentOutput, parseStructuredCompletion, parseCompletionReportFile, detectNonTerminalResultSummary } = require('./lifecycle');
597
+ // P-a7b2c1d9: fenced ```completion stdout parser (formerly destructured here)
598
+ // deliberately dropped from this destructure. The recovery path uses the
599
+ // sidecar (parseCompletionReportFile) as the sole structured-completion
600
+ // source. The stdout parser added no new signal on the timeout/exit-recovery
601
+ // path — only a disagreement risk between the sidecar and the stdout block.
602
+ // Removing this caller unblocks the completion-fallback-parsers deprecation
603
+ // sweep window in docs/deprecated.json (its `counter==0 ⇒ parser unused`
604
+ // claim is now logically sound).
605
+ const { runPostCompletionHooks, parseAgentOutput, parseCompletionReportFile, detectNonTerminalResultSummary } = require('./lifecycle');
598
606
 
599
607
  const timeout = config.engine?.agentTimeout || ENGINE_DEFAULTS.agentTimeout;
600
608
  const defaultStaleOrphanTimeout = config.engine?.heartbeatTimeout || ENGINE_DEFAULTS.heartbeatTimeout;
@@ -642,8 +650,12 @@ function checkTimeouts(config) {
642
650
  const runtimeName = item.meta?.runtimeName || item.runtimeName || 'claude';
643
651
  outputResultSummary = parseAgentOutput(fullLogForHooks, runtimeName).resultSummary || '';
644
652
  const gateSummary = outputResultSummary || (!fullLogForHooks.includes('"type":') ? fullLogForHooks : '');
653
+ // P-a7b2c1d9: pass `null` for structuredCompletion. By the time
654
+ // checkTimeouts runs, the sidecar `completion.json` (parseCompletionReportFile)
655
+ // is the documented source of truth; the fenced ```completion stdout
656
+ // parser is intentionally bypassed here.
645
657
  completionDetection = isSuccess
646
- ? detectNonTerminalResultSummary(gateSummary, parseStructuredCompletion(fullLogForHooks, runtimeName), parseCompletionReportFile(item), { detectPhantom: true })
658
+ ? detectNonTerminalResultSummary(gateSummary, null, parseCompletionReportFile(item), { detectPhantom: true })
647
659
  : null;
648
660
  } catch (e) { log('warn', 'completion summary gate: ' + e.message); }
649
661
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.2162",
3
+ "version": "0.1.2164",
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"