@yemi33/minions 0.1.2428 → 0.1.2430
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/layout.html +3 -1
- package/dashboard/slim/styles.css +3 -2
- package/dashboard/styles.css +6 -4
- package/docs/README.md +2 -2
- package/docs/completion-reports.md +1 -1
- package/docs/security.md +5 -3
- package/docs/self-improvement.md +9 -8
- package/docs/team-memory.md +51 -70
- package/engine/features.js +0 -12
- package/engine/lifecycle.js +0 -10
- package/engine/playbook.js +6 -6
- package/package.json +1 -1
package/dashboard/layout.html
CHANGED
|
@@ -71,7 +71,9 @@
|
|
|
71
71
|
</div>
|
|
72
72
|
<div id="cc-tab-bar" style="display:flex;gap:8px;padding:4px 12px;border-bottom:1px solid var(--border);overflow:hidden;align-items:center;flex-shrink:0"></div>
|
|
73
73
|
<div id="cc-messages" style="flex:1;overflow-y:auto;padding:12px 16px;display:flex;flex-direction:column;gap:10px"></div>
|
|
74
|
-
|
|
74
|
+
<!-- W-ms3nbl6r000971ad: no border-top here — the rule landed directly above
|
|
75
|
+
#cc-suggestions-host, drawing a divider across the top of the pill area. -->
|
|
76
|
+
<div style="padding:12px 16px">
|
|
75
77
|
<div id="cc-suggestions-host"></div>
|
|
76
78
|
<!-- P-2a6d8e74 — image attachment thumbnail chips (paste / drag-drop); hidden until images are attached -->
|
|
77
79
|
<div id="cc-attachments" style="display:none;flex-wrap:wrap;gap:6px;margin-bottom:8px"></div>
|
|
@@ -372,11 +372,12 @@
|
|
|
372
372
|
defines --space-1..5 (4/8/12/16/20); --space-6 / --space-8 exist solely
|
|
373
373
|
inside the #detail-panel scope, so referencing them here made `padding`
|
|
374
374
|
and `margin` invalid at computed-value time — the pill rendered with
|
|
375
|
-
zero padding and the group lost its spacing. Stay on the slim scale.
|
|
375
|
+
zero padding and the group lost its spacing. Stay on the slim scale.
|
|
376
|
+
Left-aligned (W-ms3nbl6r000971ad) to match classic. */
|
|
376
377
|
.cc-suggestions {
|
|
377
378
|
display: flex;
|
|
378
379
|
flex-wrap: wrap;
|
|
379
|
-
justify-content:
|
|
380
|
+
justify-content: flex-start;
|
|
380
381
|
align-items: center;
|
|
381
382
|
gap: var(--space-2);
|
|
382
383
|
width: 100%;
|
package/dashboard/styles.css
CHANGED
|
@@ -1255,10 +1255,12 @@
|
|
|
1255
1255
|
#cc-messages > .cc-msg-action + .cc-msg-action { margin-top: -8px; }
|
|
1256
1256
|
|
|
1257
1257
|
/* Suggested starter prompts (W-ms0vc4d0000ve615): content-sized pills in a
|
|
1258
|
-
|
|
1259
|
-
a long prompt inside the 420px drawer without stretching a short one.
|
|
1258
|
+
left-aligned wrapping row, NOT full-width bars. `max-width` (not `width`)
|
|
1259
|
+
keeps a long prompt inside the 420px drawer without stretching a short one.
|
|
1260
|
+
Left-aligned (W-ms3nbl6r000971ad) so the pill lines up with the composer
|
|
1261
|
+
edge instead of floating mid-drawer. */
|
|
1260
1262
|
.cc-suggestions {
|
|
1261
|
-
display: flex; flex-wrap: wrap; justify-content:
|
|
1263
|
+
display: flex; flex-wrap: wrap; justify-content: flex-start; align-items: center;
|
|
1262
1264
|
gap: var(--space-3);
|
|
1263
1265
|
width: 100%; margin: var(--space-7) auto 0;
|
|
1264
1266
|
}
|
|
@@ -1267,7 +1269,7 @@
|
|
|
1267
1269
|
appearance: none; max-width: 100%; padding: var(--space-3) var(--space-7);
|
|
1268
1270
|
border: 1px solid var(--border); border-radius: 999px;
|
|
1269
1271
|
background: var(--surface2); color: var(--text); font: inherit;
|
|
1270
|
-
font-size: var(--text-md); line-height: 1.4; text-align:
|
|
1272
|
+
font-size: var(--text-md); line-height: 1.4; text-align: left; cursor: pointer;
|
|
1271
1273
|
transition: border-color var(--transition-base), color var(--transition-base);
|
|
1272
1274
|
}
|
|
1273
1275
|
.cc-suggestion:hover { border-color: var(--blue); color: var(--blue); }
|
package/docs/README.md
CHANGED
|
@@ -66,12 +66,12 @@ Architecture, design proposals, and lifecycle references for people working on t
|
|
|
66
66
|
- [qa-runbooks.md](qa-runbooks.md) — Per-project QA runbook schema, storage layout (`projects/<name>/runbooks/<id>.json`), CRUD endpoints, run-record lifecycle, and the `qa-validate` agent sidecar contract.
|
|
67
67
|
- [rfc-completion-json.md](rfc-completion-json.md) — RFC for replacing stdout regex-scraping with a structured `completion.json` control-plane protocol.
|
|
68
68
|
- [runtime-adapters.md](runtime-adapters.md) — Runtime adapter contract (`engine/runtimes/*`): how the engine talks to Claude Code, Copilot CLI, and future CLIs through a single capability-flagged interface.
|
|
69
|
-
- [self-improvement.md](self-improvement.md) — The six self-improvement mechanisms (learnings inbox, per-agent history, review feedback, quality metrics, etc.) that form Minions' continuous feedback loop, including structured review learning (durable,
|
|
69
|
+
- [self-improvement.md](self-improvement.md) — The six self-improvement mechanisms (learnings inbox, per-agent history, review feedback, quality metrics, etc.) that form Minions' continuous feedback loop, including structured review learning (durable, always-on lessons from verified review findings).
|
|
70
70
|
- [shared-lifecycle-module-map.md](shared-lifecycle-module-map.md) — Documentation-only module-boundary audit of `engine/shared.js` / `engine/lifecycle.js`: function inventory, cross-file call graph, and a proposed split map (no code moved).
|
|
71
71
|
- [skills.md](skills.md) — Skill block format: how agents emit reusable `\`\`\`skill` blocks and how the engine extracts them into native personal-skill directories.
|
|
72
72
|
- [slim-ux/concepts.md](slim-ux/concepts.md) — Slim-UX design notes: simplified surface concepts driving the project picker, inline project link, and decoupled folder picker.
|
|
73
73
|
- [slim-ux/architecture-suggestions.md](slim-ux/architecture-suggestions.md) — Slim-UX follow-up architecture suggestions paired with `concepts.md`.
|
|
74
|
-
- [team-memory.md](team-memory.md) — End-to-end hybrid memory system: file-backed inputs and consolidation, SQL/FTS5 records, retrieval and fallback, prompt bounds, episodic capture, the review-learning lifecycle (capture/recall/promotion/contradiction/diagnostics) and its
|
|
74
|
+
- [team-memory.md](team-memory.md) — End-to-end hybrid memory system: file-backed inputs and consolidation, SQL/FTS5 records, retrieval and fallback, prompt bounds, episodic capture, the review-learning lifecycle (capture/recall/promotion/contradiction/diagnostics) and its rollout history + acceptance measurement, security, APIs, and operations.
|
|
75
75
|
- [timeouts-and-liveness.md](timeouts-and-liveness.md) — What kills (or doesn't kill) a live tracked agent: the wall-clock vs steering kill invariants, spawn-phase watchdog gates, steering safety nets, and stale-orphan detection ladder.
|
|
76
76
|
- [visual-evidence-ci.md](visual-evidence-ci.md) — GitHub Actions before/after dashboard capture: path and label triggers, deterministic base/head fixtures, artifact/comment lifecycle, trust boundary, and local reproduction.
|
|
77
77
|
- [watches.md](watches.md) — Persistent monitoring jobs: target-type registry, conditions, follow-up actions, and the `watches.d/` plugin folder.
|
|
@@ -195,7 +195,7 @@ These fields do not replace `reviewFindingResolution`. An unchanged
|
|
|
195
195
|
review-feedback fix must still set `noop: true` and prove the exact trusted
|
|
196
196
|
finding through the stricter no-op contract below.
|
|
197
197
|
|
|
198
|
-
|
|
198
|
+
The engine processes normalized
|
|
199
199
|
entries only after the completion is otherwise successful and all PR/work-item
|
|
200
200
|
contracts pass. `accepted-fixed` requires verified remote-head advancement or
|
|
201
201
|
an independent approval of the exact current review head.
|
package/docs/security.md
CHANGED
|
@@ -160,9 +160,11 @@ defenses enforced at the persistence boundary in `engine/review-learning.js`:
|
|
|
160
160
|
actually showed it, and only within its own project. A forged id, an unshown
|
|
161
161
|
lesson, or a cross-project id is rejected as a diagnostic — it cannot quarantine a
|
|
162
162
|
lesson it was never given.
|
|
163
|
-
- **
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
- **Structurally bounded, not flag-bounded.** Capture and recall are always on;
|
|
164
|
+
their safety comes from the constraints above (verified findings only,
|
|
165
|
+
project-scoped byte-capped recall, trusted-trace binding, reversible
|
|
166
|
+
quarantine), not from a switch. Stored records stay auditable through the
|
|
167
|
+
diagnostics endpoints.
|
|
166
168
|
- **Injection-flag / nonce gates still apply.** A completion flagged
|
|
167
169
|
`failure_class: "injection-flagged"` or failing the nonce check never reaches
|
|
168
170
|
review-learning capture or application processing.
|
package/docs/self-improvement.md
CHANGED
|
@@ -161,7 +161,7 @@ in the future, avoid the patterns flagged here.
|
|
|
161
161
|
|
|
162
162
|
Without this, review findings only exist in the inbox file under the reviewer's name. The author never explicitly sees them unless they happen to read the consolidated notes.md. The feedback loop ensures the author gets a direct, targeted learning from every review.
|
|
163
163
|
|
|
164
|
-
### 3a. Structured review learning (durable,
|
|
164
|
+
### 3a. Structured review learning (durable, always-on)
|
|
165
165
|
|
|
166
166
|
The narrative feedback file above is per-PR and consolidated into free-text notes.
|
|
167
167
|
**Review learning** is its durable, structured evolution: a verified reviewer
|
|
@@ -174,11 +174,11 @@ deterministically. It is fully specified in
|
|
|
174
174
|
and a stable finding key `<project>|<canonical-pr-id>|<host-namespaced-source-key>`.
|
|
175
175
|
They are globally excluded from generic FTS recall and only surface through the
|
|
176
176
|
dedicated project-scoped path.
|
|
177
|
-
- **Capture.**
|
|
177
|
+
- **Capture.** Only a completed Minions
|
|
178
178
|
`changes-requested` verdict creates an unresolved *candidate*; a verified
|
|
179
179
|
`accepted-fixed` / `satisfied-elsewhere` disposition promotes it to one active
|
|
180
180
|
lesson. Invalid/stale/deferred close or hold the candidate.
|
|
181
|
-
- **Recall.**
|
|
181
|
+
- **Recall.** A dispatch with a resolved project
|
|
182
182
|
recalls up to 4 records / 4 KiB as a separately fenced `## Applicable Prior Review
|
|
183
183
|
Lessons` section, ranked by exact symbol → file → tag overlap.
|
|
184
184
|
- **Application, correction, supersession.** Agents report `applied` /
|
|
@@ -189,11 +189,12 @@ deterministically. It is fully specified in
|
|
|
189
189
|
- **Promotion.** A high-confidence, repeatedly observed lesson can be human-promoted
|
|
190
190
|
into repository guidance (`CLAUDE.md` / `AGENTS.md` / Copilot instructions or a
|
|
191
191
|
project skill) via a normal PR — never by editing a checkout.
|
|
192
|
-
- **Diagnostics
|
|
193
|
-
rollout aggregates, and the
|
|
194
|
-
`/api/memory-records/*`.
|
|
195
|
-
|
|
196
|
-
|
|
192
|
+
- **Diagnostics & retention.** Retrieval decisions, a lifecycle timeline,
|
|
193
|
+
rollout aggregates, and the rollout comparison are exposed under
|
|
194
|
+
`/api/memory-records/*`. Capture and recall are unconditional — the temporary
|
|
195
|
+
`review-learning-capture` / `review-learning-recall` flags were removed once
|
|
196
|
+
the staged rollout completed (see
|
|
197
|
+
[team-memory.md → Rollout history and acceptance](team-memory.md#rollout-history-and-acceptance)).
|
|
197
198
|
|
|
198
199
|
## 4. Human Feedback on PRs
|
|
199
200
|
|
package/docs/team-memory.md
CHANGED
|
@@ -272,7 +272,7 @@ Migration 027 adds the storage foundation for review-derived procedural memory:
|
|
|
272
272
|
replace the hash.
|
|
273
273
|
- Human-feedback fix dispatches snapshot that bounded source list in
|
|
274
274
|
`meta.commentSources`, including contexts coalesced during cooldown.
|
|
275
|
-
-
|
|
275
|
+
- Only a completed Minions
|
|
276
276
|
`changes-requested` verdict creates an unresolved candidate. Review identity,
|
|
277
277
|
project, canonical PR, configured author, reviewer, dispatch, source item,
|
|
278
278
|
and a source hash are persisted; the raw review note remains only in its
|
|
@@ -378,7 +378,7 @@ and they are **globally excluded** from the generic FTS pack
|
|
|
378
378
|
(`searchMemoryRecords` drops `source_type='review-learning'` unless a caller
|
|
379
379
|
passes `includeReviewLearning`, which only the operator dashboard search does).
|
|
380
380
|
|
|
381
|
-
When
|
|
381
|
+
When a dispatch has a resolved
|
|
382
382
|
project context, the path:
|
|
383
383
|
|
|
384
384
|
1. lists active project-scoped lessons straight from the review-learning index
|
|
@@ -399,9 +399,8 @@ Each run records bounded telemetry through `recordRetrievalRun` with
|
|
|
399
399
|
`retrieval_kind='review-learning'`, the dispatch and work-item ids, selected
|
|
400
400
|
record ids, per-record scores, and reason codes (`exact-symbol`, `exact-file`,
|
|
401
401
|
`exact-tag`, `lexical`, `not-applicable`, `record-cap`, `byte-cap`) — never any
|
|
402
|
-
prompt or comment body.
|
|
403
|
-
|
|
404
|
-
Center / unrelated central work receive no section.
|
|
402
|
+
prompt or comment body. Projectless Command Center / unrelated central work
|
|
403
|
+
receive no section.
|
|
405
404
|
|
|
406
405
|
## Prompt assembly and fallback
|
|
407
406
|
|
|
@@ -412,8 +411,8 @@ appends memory context in this order:
|
|
|
412
411
|
2. Either **Relevant Memory** or the legacy pair:
|
|
413
412
|
- **Team Notes** from `notes.md`;
|
|
414
413
|
- **Personal Memory** from `knowledge/agents/<agentId>.md`.
|
|
415
|
-
3. **Applicable Prior Review Lessons**, when
|
|
416
|
-
dispatch has a project
|
|
414
|
+
3. **Applicable Prior Review Lessons**, when the
|
|
415
|
+
dispatch has a project and at least one applicable lesson exists (bounded and
|
|
417
416
|
fenced independently of the generic memory budget).
|
|
418
417
|
4. Later non-memory appendices such as propagated project instructions.
|
|
419
418
|
|
|
@@ -498,8 +497,6 @@ completion result.
|
|
|
498
497
|
| Key | Default | Purpose |
|
|
499
498
|
|-----|---------|---------|
|
|
500
499
|
| `features.memoryRetrieval` | `true` | Enables structured retrieval. Feature resolution is environment override, then `config.features`, then registry default. |
|
|
501
|
-
| `features.review-learning-capture` | `false` | Temporary gate for capturing verified review-learning candidates and lessons. |
|
|
502
|
-
| `features.review-learning-recall` | `false` | Temporary independent gate for the dedicated review-learning recall path. |
|
|
503
500
|
| `engine.memoryRetrievalShadowMode` | `false` | Measure retrieval without replacing legacy prompt memory. |
|
|
504
501
|
| `engine.memoryRetrievalTopK` | `8` | Maximum selected records. |
|
|
505
502
|
| `engine.memoryRetrievalMaxBytes` | `8192` | UTF-8 byte budget for selected record blocks. |
|
|
@@ -513,52 +510,41 @@ completion result.
|
|
|
513
510
|
| `engine.agentMemorySummaryDays` | `30` | Age trigger for summary eligibility. |
|
|
514
511
|
|
|
515
512
|
Feature flags are exposed by the generic Dashboard **Settings > Features**
|
|
516
|
-
surface.
|
|
517
|
-
the
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
prompt injection is gated, never storage or inspection.
|
|
546
|
-
|
|
547
|
-
### Stage 1 — capture-only for 30 days
|
|
548
|
-
|
|
549
|
-
Enable `review-learning-capture` only (recall stays off). This is the measurement
|
|
550
|
-
baseline: verified findings become candidates and lessons and accrue `created`,
|
|
551
|
-
`retrieved`-less, and `repeated-finding` lifecycle events, but **no lesson is ever
|
|
552
|
-
injected into a prompt**. Capture-only changes no rendered prompt. Run this for at
|
|
553
|
-
least 30 days to collect a per-project, per-normalized-area baseline recurrence
|
|
554
|
-
rate (the share of resolved valid findings that recurred).
|
|
513
|
+
surface. Settings also exposes shadow mode, episodic capture, retrieval bounds,
|
|
514
|
+
the inbox threshold, and automatic KB sweep. The personal-file window and summary
|
|
515
|
+
keys are configuration-only today.
|
|
516
|
+
|
|
517
|
+
Review-learning capture and recall are **not** flagged — they graduated to
|
|
518
|
+
always-on behaviour and have no config or environment override. Their bounds are
|
|
519
|
+
structural, not switchable: capture only accepts verified findings, recall is
|
|
520
|
+
project-scoped and byte-bounded, contradictions are quarantined reversibly, and
|
|
521
|
+
review-learning records are globally excluded from generic FTS retrieval.
|
|
522
|
+
|
|
523
|
+
The environment override for structured retrieval is
|
|
524
|
+
`MINIONS_FEATURE_MEMORYRETRIEVAL=1|0`.
|
|
525
|
+
|
|
526
|
+
## Rollout history and acceptance
|
|
527
|
+
|
|
528
|
+
Review-learning shipped behind two independent, default-off flags
|
|
529
|
+
(`review-learning-capture`, `review-learning-recall`) so the schema, capture,
|
|
530
|
+
recall, promotion, contradiction, and diagnostics code could all land on `main`
|
|
531
|
+
without changing a single rendered prompt. That staged rollout is **complete**:
|
|
532
|
+
both flags were removed and the behaviour is now unconditional. The stages below
|
|
533
|
+
are retained as history and as the shape of the acceptance measurement, which is
|
|
534
|
+
still exposed by the diagnostics endpoints.
|
|
535
|
+
|
|
536
|
+
### Stage 1 — capture-only measurement window
|
|
537
|
+
|
|
538
|
+
Capture ran alone (recall still gated off): verified findings became candidates
|
|
539
|
+
and lessons and accrued `created` and `repeated-finding` lifecycle events, but no
|
|
540
|
+
lesson was injected into a prompt. That window is the recurrence baseline — a
|
|
541
|
+
per-project, per-normalized-area share of resolved valid findings that recurred.
|
|
555
542
|
|
|
556
543
|
### Stage 2 — one-project recall canary
|
|
557
544
|
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
bounded, fenced lessons on dispatches in that project. Watch the canary for:
|
|
545
|
+
Recall was enabled for a single project. Recall injects at most 4 records / 4 KiB
|
|
546
|
+
of bounded, fenced lessons on dispatches in that project. The canary was watched
|
|
547
|
+
for:
|
|
562
548
|
|
|
563
549
|
- contradiction alerts (`review-learning-contradiction` inbox notes) — an
|
|
564
550
|
evidence-backed contradiction quarantines the offending lesson automatically;
|
|
@@ -566,7 +552,7 @@ bounded, fenced lessons on dispatches in that project. Watch the canary for:
|
|
|
566
552
|
confirm lessons are selected for the right file/symbol reasons; and
|
|
567
553
|
- the recurrence rate for the canary project's first 30 active days.
|
|
568
554
|
|
|
569
|
-
###
|
|
555
|
+
### The success gate (still live)
|
|
570
556
|
|
|
571
557
|
`GET /api/memory-records/rollout-comparison`
|
|
572
558
|
(`memoryStore.getReviewLearningRolloutComparison`) compares the **30-day
|
|
@@ -576,23 +562,18 @@ grouped by project and normalized area. It only reports `status: "success"` for
|
|
|
576
562
|
(`minimumSample`, default 20 — otherwise `status: "insufficient-sample"`) **and**
|
|
577
563
|
the repeated valid-finding rate fell by at least `minReduction` (default `0.25` =
|
|
578
564
|
25%). A zero baseline rate is reported as `no-improvement`, never a divide-by-zero
|
|
579
|
-
success.
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
###
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
accruing new candidates/lessons. Existing records remain in SQL and stay
|
|
592
|
-
auditable through the diagnostics endpoints; nothing is deleted.
|
|
593
|
-
|
|
594
|
-
No migration, restart-ordering, or data cleanup is required to roll back — the flags
|
|
595
|
-
gate prompt behaviour, not storage.
|
|
565
|
+
success. The comparison endpoint remains the way to measure review-learning's
|
|
566
|
+
effect per project and area now that the behaviour is always on.
|
|
567
|
+
|
|
568
|
+
### Reverting is a code change, not a switch
|
|
569
|
+
|
|
570
|
+
There is no flag to flip any more. Both capture and recall are unconditional, so
|
|
571
|
+
backing the behaviour out means reverting the graduation commit. What has not
|
|
572
|
+
changed is that recall is a pure prompt-injection layer over storage: a revert
|
|
573
|
+
stops candidates accruing and stops the `## Applicable Prior Review Lessons`
|
|
574
|
+
section rendering, but every existing record stays in SQL and stays auditable
|
|
575
|
+
through the diagnostics endpoints. Nothing is deleted, and no migration,
|
|
576
|
+
restart-ordering, or data cleanup is involved.
|
|
596
577
|
|
|
597
578
|
### Promotion into repository guidance
|
|
598
579
|
|
package/engine/features.js
CHANGED
|
@@ -102,18 +102,6 @@ const FEATURES = {
|
|
|
102
102
|
addedIn: '0.1.2233',
|
|
103
103
|
expires: '2027-01-31',
|
|
104
104
|
},
|
|
105
|
-
'review-learning-capture': {
|
|
106
|
-
description: 'Capture verified code-review findings as bounded, project-scoped review-learning candidates and procedural lessons.',
|
|
107
|
-
default: false,
|
|
108
|
-
addedIn: '0.1.2203',
|
|
109
|
-
expires: '2027-01-31',
|
|
110
|
-
},
|
|
111
|
-
'review-learning-recall': {
|
|
112
|
-
description: 'Recall bounded applicable review lessons through the dedicated project-scoped review-learning path.',
|
|
113
|
-
default: false,
|
|
114
|
-
addedIn: '0.1.2203',
|
|
115
|
-
expires: '2027-01-31',
|
|
116
|
-
},
|
|
117
105
|
};
|
|
118
106
|
|
|
119
107
|
const ENV_TRUTHY = new Set(['1', 'true', 'on', 'yes']);
|
package/engine/lifecycle.js
CHANGED
|
@@ -17,7 +17,6 @@ const harness = require('./harness');
|
|
|
17
17
|
const reviewLearning = require('./review-learning');
|
|
18
18
|
const smallStateStore = require('./small-state-store');
|
|
19
19
|
const prdStore = require('./prd-store');
|
|
20
|
-
const features = require('./features');
|
|
21
20
|
const memoryStore = require('./memory-store');
|
|
22
21
|
const promotion = require('./promotion');
|
|
23
22
|
const { isBranchActive } = require('./cooldown');
|
|
@@ -3915,7 +3914,6 @@ function createReviewFeedbackForAuthor(reviewerAgentId, pr, config, opts = {}) {
|
|
|
3915
3914
|
const authorAgentId = pr.agent.toLowerCase();
|
|
3916
3915
|
if (!config.agents?.[authorAgentId]) return null;
|
|
3917
3916
|
if (opts.reviewVerdict !== REVIEW_STATUS.CHANGES_REQUESTED) return null;
|
|
3918
|
-
if (!features.isFeatureOn('review-learning-capture', config)) return null;
|
|
3919
3917
|
|
|
3920
3918
|
const project = opts.project || opts.dispatchItem?.meta?.project || null;
|
|
3921
3919
|
if (!project?.name) {
|
|
@@ -4512,7 +4510,6 @@ function _recordRepeatedFindingEvent(lesson, group, match, provenance) {
|
|
|
4512
4510
|
function captureVerifiedReviewLearnings({
|
|
4513
4511
|
dispatchItem,
|
|
4514
4512
|
agentId,
|
|
4515
|
-
config,
|
|
4516
4513
|
structuredCompletion,
|
|
4517
4514
|
branchChange,
|
|
4518
4515
|
reviewFixResolution,
|
|
@@ -4522,7 +4519,6 @@ function captureVerifiedReviewLearnings({
|
|
|
4522
4519
|
const supportedType = dispatchItem?.type === WORK_TYPE.REVIEW
|
|
4523
4520
|
|| shared.isFixLikeWorkType(dispatchItem?.type);
|
|
4524
4521
|
if (!supportedType || !Array.isArray(rawLearnings) || rawLearnings.length === 0) return result;
|
|
4525
|
-
if (!features.isFeatureOn('review-learning-capture', config || {})) return result;
|
|
4526
4522
|
|
|
4527
4523
|
let groups;
|
|
4528
4524
|
try {
|
|
@@ -4715,7 +4711,6 @@ function _resolveDispatchProject(dispatchItem) {
|
|
|
4715
4711
|
function processReviewLearningApplications({
|
|
4716
4712
|
dispatchItem,
|
|
4717
4713
|
agentId,
|
|
4718
|
-
config,
|
|
4719
4714
|
structuredCompletion,
|
|
4720
4715
|
} = {}) {
|
|
4721
4716
|
const result = {
|
|
@@ -4727,9 +4722,6 @@ function processReviewLearningApplications({
|
|
|
4727
4722
|
};
|
|
4728
4723
|
const rawApplications = structuredCompletion?.reviewLearningApplications;
|
|
4729
4724
|
if (!Array.isArray(rawApplications) || rawApplications.length === 0) return result;
|
|
4730
|
-
// Applications describe how recalled lessons fared, so they are only
|
|
4731
|
-
// meaningful when the recall path is active.
|
|
4732
|
-
if (!features.isFeatureOn('review-learning-recall', config || {})) return result;
|
|
4733
4725
|
|
|
4734
4726
|
let applications;
|
|
4735
4727
|
try {
|
|
@@ -6753,7 +6745,6 @@ async function runPostCompletionHooks(dispatchItem, agentId, code, stdout, confi
|
|
|
6753
6745
|
captureVerifiedReviewLearnings({
|
|
6754
6746
|
dispatchItem,
|
|
6755
6747
|
agentId,
|
|
6756
|
-
config,
|
|
6757
6748
|
structuredCompletion,
|
|
6758
6749
|
branchChange: prFixBranchChange,
|
|
6759
6750
|
reviewFixResolution,
|
|
@@ -6772,7 +6763,6 @@ async function runPostCompletionHooks(dispatchItem, agentId, code, stdout, confi
|
|
|
6772
6763
|
processReviewLearningApplications({
|
|
6773
6764
|
dispatchItem,
|
|
6774
6765
|
agentId,
|
|
6775
|
-
config,
|
|
6776
6766
|
structuredCompletion,
|
|
6777
6767
|
});
|
|
6778
6768
|
} catch (err) {
|
package/engine/playbook.js
CHANGED
|
@@ -784,12 +784,12 @@ function renderPlaybook(type, vars) {
|
|
|
784
784
|
}
|
|
785
785
|
|
|
786
786
|
// Reserved deterministic review-lesson recall (P-a6137579). A dedicated
|
|
787
|
-
// project + audience path, independent of the generic memory budget above
|
|
788
|
-
//
|
|
789
|
-
//
|
|
790
|
-
//
|
|
791
|
-
//
|
|
792
|
-
if (projectName
|
|
787
|
+
// project + audience path, independent of the generic memory budget above.
|
|
788
|
+
// Review-learning records are globally excluded from generic recall, so this
|
|
789
|
+
// section is the only place they reach a prompt. Only dispatches with a
|
|
790
|
+
// resolved project context are eligible; projectless CC / central work get no
|
|
791
|
+
// section.
|
|
792
|
+
if (projectName) {
|
|
793
793
|
try {
|
|
794
794
|
const applicable = memoryRetrieval.retrieveApplicableReviewLearnings({
|
|
795
795
|
title: vars.item_name || vars.pr_title || '',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2430",
|
|
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"
|