darwin-agents 0.7.0 → 0.8.0
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 +35 -0
- package/README.md +85 -34
- package/dist/src/cli/evolution-flags.d.ts +40 -0
- package/dist/src/cli/evolution-flags.d.ts.map +1 -0
- package/dist/src/cli/evolution-flags.js +106 -0
- package/dist/src/cli/evolution-flags.js.map +1 -0
- package/dist/src/cli/evolve.d.ts +10 -1
- package/dist/src/cli/evolve.d.ts.map +1 -1
- package/dist/src/cli/evolve.js +93 -8
- package/dist/src/cli/evolve.js.map +1 -1
- package/dist/src/cli/index.js +13 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/run.d.ts.map +1 -1
- package/dist/src/cli/run.js +38 -69
- package/dist/src/cli/run.js.map +1 -1
- package/dist/src/evolution/build-loop.d.ts +20 -0
- package/dist/src/evolution/build-loop.d.ts.map +1 -0
- package/dist/src/evolution/build-loop.js +67 -0
- package/dist/src/evolution/build-loop.js.map +1 -0
- package/dist/src/evolution/enabled-state.d.ts +59 -0
- package/dist/src/evolution/enabled-state.d.ts.map +1 -0
- package/dist/src/evolution/enabled-state.js +122 -0
- package/dist/src/evolution/enabled-state.js.map +1 -0
- package/dist/src/evolution/loop.d.ts +46 -0
- package/dist/src/evolution/loop.d.ts.map +1 -1
- package/dist/src/evolution/loop.js +119 -1
- package/dist/src/evolution/loop.js.map +1 -1
- package/dist/src/evolution/parse-score.d.ts +35 -0
- package/dist/src/evolution/parse-score.d.ts.map +1 -0
- package/dist/src/evolution/parse-score.js +115 -0
- package/dist/src/evolution/parse-score.js.map +1 -0
- package/dist/src/evolution/tracker.d.ts +13 -0
- package/dist/src/evolution/tracker.d.ts.map +1 -1
- package/dist/src/evolution/tracker.js +34 -0
- package/dist/src/evolution/tracker.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/memory/postgres-memory.d.ts.map +1 -1
- package/dist/src/memory/postgres-memory.js +1 -0
- package/dist/src/memory/postgres-memory.js.map +1 -1
- package/dist/src/memory/sqlite-memory.d.ts.map +1 -1
- package/dist/src/memory/sqlite-memory.js +1 -0
- package/dist/src/memory/sqlite-memory.js.map +1 -1
- package/dist/src/types.d.ts +45 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/package.json +2 -1
- package/dist/agents/analyst.d.ts +0 -11
- package/dist/agents/analyst.d.ts.map +0 -1
- package/dist/agents/analyst.js +0 -78
- package/dist/agents/analyst.js.map +0 -1
- package/dist/agents/blog-writer.d.ts +0 -13
- package/dist/agents/blog-writer.d.ts.map +0 -1
- package/dist/agents/blog-writer.js +0 -59
- package/dist/agents/blog-writer.js.map +0 -1
- package/dist/agents/critic.d.ts +0 -11
- package/dist/agents/critic.d.ts.map +0 -1
- package/dist/agents/critic.js +0 -57
- package/dist/agents/critic.js.map +0 -1
- package/dist/agents/index.d.ts +0 -15
- package/dist/agents/index.d.ts.map +0 -1
- package/dist/agents/index.js +0 -31
- package/dist/agents/index.js.map +0 -1
- package/dist/agents/investigator-critic.d.ts +0 -10
- package/dist/agents/investigator-critic.d.ts.map +0 -1
- package/dist/agents/investigator-critic.js +0 -78
- package/dist/agents/investigator-critic.js.map +0 -1
- package/dist/agents/investigator.d.ts +0 -13
- package/dist/agents/investigator.d.ts.map +0 -1
- package/dist/agents/investigator.js +0 -105
- package/dist/agents/investigator.js.map +0 -1
- package/dist/agents/marketing.d.ts +0 -13
- package/dist/agents/marketing.d.ts.map +0 -1
- package/dist/agents/marketing.js +0 -59
- package/dist/agents/marketing.js.map +0 -1
- package/dist/agents/researcher.d.ts +0 -11
- package/dist/agents/researcher.d.ts.map +0 -1
- package/dist/agents/researcher.js +0 -68
- package/dist/agents/researcher.js.map +0 -1
- package/dist/agents/writer.d.ts +0 -9
- package/dist/agents/writer.d.ts.map +0 -1
- package/dist/agents/writer.js +0 -47
- package/dist/agents/writer.js.map +0 -1
- package/dist/cli/create.d.ts +0 -11
- package/dist/cli/create.d.ts.map +0 -1
- package/dist/cli/create.js +0 -104
- package/dist/cli/create.js.map +0 -1
- package/dist/cli/evolve.d.ts +0 -13
- package/dist/cli/evolve.d.ts.map +0 -1
- package/dist/cli/evolve.js +0 -69
- package/dist/cli/evolve.js.map +0 -1
- package/dist/cli/index.d.ts +0 -13
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -84
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/init.d.ts +0 -12
- package/dist/cli/init.d.ts.map +0 -1
- package/dist/cli/init.js +0 -68
- package/dist/cli/init.js.map +0 -1
- package/dist/cli/run.d.ts +0 -7
- package/dist/cli/run.d.ts.map +0 -1
- package/dist/cli/run.js +0 -371
- package/dist/cli/run.js.map +0 -1
- package/dist/cli/status.d.ts +0 -7
- package/dist/cli/status.d.ts.map +0 -1
- package/dist/cli/status.js +0 -123
- package/dist/cli/status.js.map +0 -1
- package/dist/core/agent.d.ts +0 -53
- package/dist/core/agent.d.ts.map +0 -1
- package/dist/core/agent.js +0 -172
- package/dist/core/agent.js.map +0 -1
- package/dist/core/runner.d.ts +0 -75
- package/dist/core/runner.d.ts.map +0 -1
- package/dist/core/runner.js +0 -255
- package/dist/core/runner.js.map +0 -1
- package/dist/evolution/loop.d.ts +0 -100
- package/dist/evolution/loop.d.ts.map +0 -1
- package/dist/evolution/loop.js +0 -424
- package/dist/evolution/loop.js.map +0 -1
- package/dist/evolution/multi-critic.d.ts +0 -58
- package/dist/evolution/multi-critic.d.ts.map +0 -1
- package/dist/evolution/multi-critic.js +0 -326
- package/dist/evolution/multi-critic.js.map +0 -1
- package/dist/evolution/notifications.d.ts +0 -32
- package/dist/evolution/notifications.d.ts.map +0 -1
- package/dist/evolution/notifications.js +0 -92
- package/dist/evolution/notifications.js.map +0 -1
- package/dist/evolution/optimizer.d.ts +0 -64
- package/dist/evolution/optimizer.d.ts.map +0 -1
- package/dist/evolution/optimizer.js +0 -223
- package/dist/evolution/optimizer.js.map +0 -1
- package/dist/evolution/patterns.d.ts +0 -63
- package/dist/evolution/patterns.d.ts.map +0 -1
- package/dist/evolution/patterns.js +0 -297
- package/dist/evolution/patterns.js.map +0 -1
- package/dist/evolution/safety.d.ts +0 -76
- package/dist/evolution/safety.d.ts.map +0 -1
- package/dist/evolution/safety.js +0 -182
- package/dist/evolution/safety.js.map +0 -1
- package/dist/evolution/tracker.d.ts +0 -48
- package/dist/evolution/tracker.d.ts.map +0 -1
- package/dist/evolution/tracker.js +0 -163
- package/dist/evolution/tracker.js.map +0 -1
- package/dist/index.d.ts +0 -32
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -35
- package/dist/index.js.map +0 -1
- package/dist/memory/index.d.ts +0 -32
- package/dist/memory/index.d.ts.map +0 -1
- package/dist/memory/index.js +0 -49
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/postgres-memory.d.ts +0 -52
- package/dist/memory/postgres-memory.d.ts.map +0 -1
- package/dist/memory/postgres-memory.js +0 -515
- package/dist/memory/postgres-memory.js.map +0 -1
- package/dist/memory/sqlite-memory.d.ts +0 -36
- package/dist/memory/sqlite-memory.d.ts.map +0 -1
- package/dist/memory/sqlite-memory.js +0 -380
- package/dist/memory/sqlite-memory.js.map +0 -1
- package/dist/providers/anthropic.d.ts +0 -20
- package/dist/providers/anthropic.d.ts.map +0 -1
- package/dist/providers/anthropic.js +0 -82
- package/dist/providers/anthropic.js.map +0 -1
- package/dist/providers/claude-cli.d.ts +0 -35
- package/dist/providers/claude-cli.d.ts.map +0 -1
- package/dist/providers/claude-cli.js +0 -153
- package/dist/providers/claude-cli.js.map +0 -1
- package/dist/providers/index.d.ts +0 -39
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -58
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/ollama.d.ts +0 -17
- package/dist/providers/ollama.d.ts.map +0 -1
- package/dist/providers/ollama.js +0 -64
- package/dist/providers/ollama.js.map +0 -1
- package/dist/providers/openai.d.ts +0 -19
- package/dist/providers/openai.d.ts.map +0 -1
- package/dist/providers/openai.js +0 -75
- package/dist/providers/openai.js.map +0 -1
- package/dist/providers/types.d.ts +0 -62
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -9
- package/dist/providers/types.js.map +0 -1
- package/dist/types.d.ts +0 -221
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -19
- package/dist/types.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,41 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.7.1] — 2026-06-20
|
|
6
|
+
|
|
7
|
+
**Documentation honesty + a reproducible evolution benchmark.** No library code
|
|
8
|
+
changed — `src/` is byte-for-byte 0.7.0, **455 tests green**, `build` clean. This
|
|
9
|
+
release makes every claim in the README survive scrutiny and ships a way to
|
|
10
|
+
reproduce the one that matters.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`benchmark/`** — a reproducible evolution benchmark (`npm run benchmark`).
|
|
15
|
+
Ships the baseline `writer` prompt and the prompt Darwin's own optimizer
|
|
16
|
+
produced from it, a frozen held-out task set, and the exact critic-scoring
|
|
17
|
+
loop, so anyone can reproduce the baseline-vs-evolved delta on their own tasks.
|
|
18
|
+
`--quick` (1 task) and `--dry` (validate wiring, zero LLM calls) flags.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- **README metrics are now real and dated.** Replaced the stale "300+ runs /
|
|
23
|
+
7.2–7.8" block with actual figures from 419 runs across 19 agents
|
|
24
|
+
(Mar–Jun 2026), including the measured v1→v2 evolution lift (writer +0.23,
|
|
25
|
+
marketing +0.28).
|
|
26
|
+
- **Removed the "Darwin Pro — coming soon" tier.** PostgreSQL already ships free
|
|
27
|
+
in the open-source package; the old table implied a paywall and even listed
|
|
28
|
+
Postgres itself as a paid feature. Replaced with an honest "SQLite or
|
|
29
|
+
PostgreSQL — both free, both MIT" section + an open roadmap for the
|
|
30
|
+
genuinely-unbuilt features (pgvector semantic search, cross-agent learnings,
|
|
31
|
+
analytics, contradiction detection, data export).
|
|
32
|
+
- **Clarified the LLM-as-judge mitigation.** Critics are multi-*dimension* by
|
|
33
|
+
default; the CLI spreads them across model families (GPT + Claude) only when
|
|
34
|
+
more than one provider key is present.
|
|
35
|
+
- **Comparison table:** "MCP native" → "MCP-native memory bridge" — the specific,
|
|
36
|
+
defensible claim (other frameworks added MCP tool use during 2025).
|
|
37
|
+
- Surfaced the production safety gate, online GEPA, and always-valid sequential
|
|
38
|
+
tests in a "why this isn't a toy" callout near the top of the README.
|
|
39
|
+
|
|
5
40
|
## [0.7.0] — 2026-06-20
|
|
6
41
|
|
|
7
42
|
**Statistical rigor + coverage sampling.** Seven additive, opt-in upgrades that
|
package/README.md
CHANGED
|
@@ -79,6 +79,16 @@ Your agent got better.
|
|
|
79
79
|
You did nothing.
|
|
80
80
|
```
|
|
81
81
|
|
|
82
|
+
> **Why this isn't a toy.** The loop runs behind a real production **safety gate**
|
|
83
|
+
> — regression rollback to last-known-good, data-quality guards that pause
|
|
84
|
+
> evolution during a tool outage, and an alignment check on *every* mutation so a
|
|
85
|
+
> rewrite can't quietly erode a safety constraint. It can drive that mutation with
|
|
86
|
+
> a [GEPA](https://arxiv.org/abs/2507.19457) reflective optimizer running **online,
|
|
87
|
+
> inside the gate** (not as an offline batch step), and the A/B gate supports
|
|
88
|
+
> **always-valid sequential tests** (mSPRT / Hoeffding) so checking after every run
|
|
89
|
+
> doesn't inflate false positives. Details: [reflective evolution](#reflective-evolution--gepa-online-v06-opt-in)
|
|
90
|
+
> · [statistical rigor](#statistical-rigor--coverage-sampling-v07-opt-in).
|
|
91
|
+
|
|
82
92
|
## Quick Start
|
|
83
93
|
|
|
84
94
|
```bash
|
|
@@ -313,28 +323,36 @@ last run's lessons.
|
|
|
313
323
|
|
|
314
324
|
<!-- REAL_METRICS_START -->
|
|
315
325
|
|
|
316
|
-
### Real results from
|
|
326
|
+
### Real results from our own production use (Mar–Jun 2026)
|
|
317
327
|
|
|
318
|
-
|
|
328
|
+
Actual numbers from **419 runs across 19 agents** in our internal `darwin_db` —
|
|
329
|
+
not synthetic benchmarks. "Success" means the run completed and produced valid
|
|
330
|
+
output (100% across 419 runs); "quality" is the critic's separate 1–10 score.
|
|
319
331
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
332
|
+
> Those 19 are our own internal + custom agents; the package ships **8 built-in
|
|
333
|
+
> agents** by default (`writer`, `researcher`, `critic`, `analyst`,
|
|
334
|
+
> `investigator`, `investigator-critic`, `marketing`, `blog-writer`) — the table
|
|
335
|
+
> below shows the four with enough runs to report.
|
|
324
336
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
337
|
+
```
|
|
338
|
+
Agent Runs Avg quality
|
|
339
|
+
writer 172 6.94 / 10
|
|
340
|
+
marketing 70 7.74 / 10
|
|
341
|
+
investigator 28 8.33 / 10
|
|
342
|
+
blog-writer 5 8.20 / 10
|
|
328
343
|
```
|
|
329
344
|
|
|
330
|
-
|
|
345
|
+
**Evolution, measured.** When the safety gate adopted an evolved prompt, the
|
|
346
|
+
critic score rose on the runs that followed — modest, but real and directional:
|
|
331
347
|
|
|
332
348
|
```
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
conversion-intent ████████░░ 8/10
|
|
349
|
+
writer v1 6.89 (126 runs) → v2 7.12 (42 runs) +0.23
|
|
350
|
+
marketing v1 7.64 (45 runs) → v2 7.92 (25 runs) +0.28
|
|
336
351
|
```
|
|
337
352
|
|
|
353
|
+
Don't take our word for it — reproduce the v1-vs-evolved comparison on your own
|
|
354
|
+
tasks with [`npm run benchmark`](benchmark/).
|
|
355
|
+
|
|
338
356
|
<!-- REAL_METRICS_END -->
|
|
339
357
|
|
|
340
358
|
## Feature Comparison
|
|
@@ -346,7 +364,7 @@ conversion-intent ████████░░ 8/10
|
|
|
346
364
|
| Safety gate + rollback | **Yes** | No | No | No | No |
|
|
347
365
|
| TypeScript native | **Yes** | No (Python) | No (Python) | No (Python) | No (Python) |
|
|
348
366
|
| Zero-config first agent | **Yes** | No | No | No | Partial |
|
|
349
|
-
| MCP
|
|
367
|
+
| MCP-native memory bridge | **Yes** | No | No | No | No |
|
|
350
368
|
| File-based (no DB required) | **Yes** | No | No | No | No |
|
|
351
369
|
| Built-in Critic agent | **Yes** | No | No | No | No |
|
|
352
370
|
|
|
@@ -374,8 +392,10 @@ Darwin uses SQLite by default — zero config, single file, no database to insta
|
|
|
374
392
|
└── exp-researcher-2026-03-08-002.md
|
|
375
393
|
```
|
|
376
394
|
|
|
377
|
-
**Want
|
|
378
|
-
|
|
395
|
+
**Want concurrent multi-process writes and richer analytics?**
|
|
396
|
+
PostgreSQL is supported out of the box, for free — set `DARWIN_POSTGRES_URL`.
|
|
397
|
+
Semantic search (pgvector), cross-agent learnings and analytics are on the
|
|
398
|
+
[roadmap](#storage-sqlite-or-postgresql--both-free-both-mit), not gated behind a paywall.
|
|
379
399
|
|
|
380
400
|
## CLI Reference
|
|
381
401
|
|
|
@@ -387,34 +407,65 @@ darwin run analyst --path ./src # Analyze a codebase
|
|
|
387
407
|
darwin status # Overview of all agents
|
|
388
408
|
darwin status writer # Detailed agent stats + evolution history
|
|
389
409
|
|
|
390
|
-
darwin evolve writer --enable # Enable self-evolution
|
|
410
|
+
darwin evolve writer --enable # Enable self-evolution (persisted)
|
|
411
|
+
darwin evolve writer --disable # Disable self-evolution (persisted)
|
|
391
412
|
darwin evolve writer --reset # Reset to v1
|
|
413
|
+
darwin evolve writer --force # Force one optimization cycle now
|
|
392
414
|
|
|
393
415
|
darwin create my-agent # Scaffold a new agent
|
|
394
416
|
```
|
|
395
417
|
|
|
396
|
-
|
|
418
|
+
### Advanced evolution flags
|
|
397
419
|
|
|
398
|
-
The
|
|
420
|
+
The v0.6/v0.7 evolution strategies are reachable from the CLI. `darwin evolve`
|
|
421
|
+
**persists** them onto the agent (they survive process exit); `darwin run`
|
|
422
|
+
accepts the same flags as a one-off override for a single run.
|
|
423
|
+
|
|
424
|
+
```bash
|
|
425
|
+
# Persist: reflect with GEPA + a stronger reflection model, pick parents by coverage
|
|
426
|
+
darwin evolve writer --gepa --reflection-model claude-opus-4-8 --coverage
|
|
427
|
+
|
|
428
|
+
# One-off for a single run
|
|
429
|
+
darwin run writer "Explain consensus" --gepa --pareto-gate
|
|
430
|
+
```
|
|
399
431
|
|
|
400
|
-
|
|
432
|
+
| Flag | What it does |
|
|
433
|
+
|------|--------------|
|
|
434
|
+
| `--gepa` / `--no-gepa` | GEPA-style reflective prompt mutation (vs. the legacy stats optimizer) |
|
|
435
|
+
| `--merge` / `--no-merge` | GEPA system-aware merge of two Pareto-front prompts as a challenger source |
|
|
436
|
+
| `--pareto-gate` / `--no-pareto-gate` | Reject an A/B winner that regressed on any objective |
|
|
437
|
+
| `--coverage` / `--no-coverage` | Pick the reflection parent by per-task-type coverage breadth (GEPA Algorithm 2) |
|
|
438
|
+
| `--reflection-model <id>` | Use a stronger model for GEPA reflection (the documented leverage point) |
|
|
401
439
|
|
|
402
|
-
|
|
440
|
+
All default to **off** — the baseline single-objective evolution loop is
|
|
441
|
+
unchanged unless you opt in.
|
|
442
|
+
|
|
443
|
+
## Storage: SQLite or PostgreSQL — both free, both MIT
|
|
444
|
+
|
|
445
|
+
Darwin runs on SQLite by default (zero config, single file) and on PostgreSQL
|
|
446
|
+
out of the box — just set `DARWIN_POSTGRES_URL`. Both backends ship in the
|
|
447
|
+
open-source package. There is no paywall.
|
|
448
|
+
|
|
449
|
+
| Capability | SQLite | PostgreSQL |
|
|
403
450
|
|---------|:---:|:---:|
|
|
404
451
|
| Experiment tracking | ✓ | ✓ |
|
|
405
452
|
| Prompt versioning | ✓ | ✓ |
|
|
406
|
-
| A/B testing | ✓ | ✓ |
|
|
407
|
-
|
|
|
408
|
-
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
453
|
+
| A/B testing + safety gate | ✓ | ✓ |
|
|
454
|
+
| Keyword search | ✓ (FTS5) | ✓ (GIN / `ts_rank`) |
|
|
455
|
+
| Concurrent multi-process writes | — | ✓ |
|
|
456
|
+
|
|
457
|
+
### Roadmap
|
|
458
|
+
|
|
459
|
+
Not built yet — tracked in the open, PRs welcome:
|
|
460
|
+
|
|
461
|
+
- Semantic search (pgvector embeddings)
|
|
462
|
+
- Cross-agent learnings
|
|
463
|
+
- Analytics & time series
|
|
464
|
+
- Contradiction detection
|
|
465
|
+
- Data export (CSV/JSON)
|
|
466
|
+
|
|
467
|
+
The core stays MIT. If a hosted option ever ships, the self-host path keeps
|
|
468
|
+
every feature.
|
|
418
469
|
|
|
419
470
|
## FAQ
|
|
420
471
|
|
|
@@ -438,7 +489,7 @@ The safety gate prevents regressions. If a new variant scores >20% lower, Darwin
|
|
|
438
489
|
|
|
439
490
|
## Known Limitations
|
|
440
491
|
|
|
441
|
-
- **LLM-as-Judge bias**: Critics use LLMs to evaluate LLM outputs.
|
|
492
|
+
- **LLM-as-Judge bias**: Critics use LLMs to evaluate LLM outputs. Each agent is scored by a **multi-dimension critic set** (several scoring rubrics per agent type, not a single number). When more than one provider key is present, the CLI also spreads those critics across model families — e.g. GPT for one, Claude for another — to blunt single-model self-preference; with one provider they all run on it. Inherent judge bias still exists. [Research context](https://openreview.net/forum?id=Ns8zGZ0lmM).
|
|
442
493
|
- **Statistical simplicity (default)**: A/B tests use mean comparison with a 5% threshold by default, not formal significance tests. `computeDynamicMinRuns()` adjusts sample sizes based on variance. For rigor, v0.6 added an opt-in `requireConfidence` effect-size gate and **v0.7 ships proper always-valid sequential tests** — set `confidenceMethod: 'msprt'` (Mixture SPRT) or `'hoeffding'` (σ-free confidence sequence) on your `SafetyThresholds` to make the peeking-resistant gate statistically sound. The default path remains the simple threshold for zero-config use.
|
|
443
494
|
- **No human-in-the-loop approval**: Prompt mutations go directly to A/B testing. Telegram notifications inform you, but there's no approval gate before testing starts.
|
|
444
495
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Darwin CLI — shared parser for the advanced evolution-config flags.
|
|
3
|
+
*
|
|
4
|
+
* Both `darwin run` and `darwin evolve` accept the same knobs that toggle the
|
|
5
|
+
* v0.6/v0.7 evolution config (GEPA reflective optimizer, system-aware merge,
|
|
6
|
+
* Pareto activation gate, instance-wise coverage selection, and the reflection
|
|
7
|
+
* model). This module centralises the flag spelling + parsing so the two
|
|
8
|
+
* commands stay in sync.
|
|
9
|
+
*
|
|
10
|
+
* --gepa / --no-gepa
|
|
11
|
+
* --merge / --no-merge
|
|
12
|
+
* --pareto-gate / --no-pareto-gate
|
|
13
|
+
* --coverage / --no-coverage
|
|
14
|
+
* --reflection-model <model-id>
|
|
15
|
+
*/
|
|
16
|
+
import type { EvolutionConfigOverride } from '../types.js';
|
|
17
|
+
/** True when `arg` is one of the evolution-config flags this module handles. */
|
|
18
|
+
export declare function isEvolutionConfigFlag(arg: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Apply a single recognised evolution flag to `target`, mutating it in place.
|
|
21
|
+
*
|
|
22
|
+
* Returns the number of EXTRA argv tokens consumed (1 for `--reflection-model`
|
|
23
|
+
* which takes a value, 0 for the boolean flags). Callers that walk argv use the
|
|
24
|
+
* return value to advance their index. Unknown flags are ignored (return 0) —
|
|
25
|
+
* use {@link isEvolutionConfigFlag} to gate first.
|
|
26
|
+
*/
|
|
27
|
+
export declare function applyEvolutionFlag(arg: string, nextArg: string | undefined, target: EvolutionConfigOverride): number;
|
|
28
|
+
/**
|
|
29
|
+
* Parse an argv slice into an {@link EvolutionConfigOverride}, returning the
|
|
30
|
+
* override plus the tokens that were NOT consumed (so the caller can keep
|
|
31
|
+
* parsing its own flags / positionals). Only the evolution-config flags above
|
|
32
|
+
* are recognised; everything else is passed through untouched.
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseEvolutionConfigFlags(args: string[]): {
|
|
35
|
+
override: EvolutionConfigOverride;
|
|
36
|
+
rest: string[];
|
|
37
|
+
};
|
|
38
|
+
/** True when the override carries at least one set flag. */
|
|
39
|
+
export declare function hasAnyEvolutionFlag(override: EvolutionConfigOverride): boolean;
|
|
40
|
+
//# sourceMappingURL=evolution-flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evolution-flags.d.ts","sourceRoot":"","sources":["../../../src/cli/evolution-flags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAe1D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,MAAM,EAAE,uBAAuB,GAC9B,MAAM,CAmCR;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IACzD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAaA;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAQ9E"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Darwin CLI — shared parser for the advanced evolution-config flags.
|
|
3
|
+
*
|
|
4
|
+
* Both `darwin run` and `darwin evolve` accept the same knobs that toggle the
|
|
5
|
+
* v0.6/v0.7 evolution config (GEPA reflective optimizer, system-aware merge,
|
|
6
|
+
* Pareto activation gate, instance-wise coverage selection, and the reflection
|
|
7
|
+
* model). This module centralises the flag spelling + parsing so the two
|
|
8
|
+
* commands stay in sync.
|
|
9
|
+
*
|
|
10
|
+
* --gepa / --no-gepa
|
|
11
|
+
* --merge / --no-merge
|
|
12
|
+
* --pareto-gate / --no-pareto-gate
|
|
13
|
+
* --coverage / --no-coverage
|
|
14
|
+
* --reflection-model <model-id>
|
|
15
|
+
*/
|
|
16
|
+
/** True when `arg` is one of the evolution-config flags this module handles. */
|
|
17
|
+
export function isEvolutionConfigFlag(arg) {
|
|
18
|
+
switch (arg) {
|
|
19
|
+
case '--gepa':
|
|
20
|
+
case '--no-gepa':
|
|
21
|
+
case '--merge':
|
|
22
|
+
case '--no-merge':
|
|
23
|
+
case '--pareto-gate':
|
|
24
|
+
case '--no-pareto-gate':
|
|
25
|
+
case '--coverage':
|
|
26
|
+
case '--no-coverage':
|
|
27
|
+
case '--reflection-model':
|
|
28
|
+
return true;
|
|
29
|
+
default:
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Apply a single recognised evolution flag to `target`, mutating it in place.
|
|
35
|
+
*
|
|
36
|
+
* Returns the number of EXTRA argv tokens consumed (1 for `--reflection-model`
|
|
37
|
+
* which takes a value, 0 for the boolean flags). Callers that walk argv use the
|
|
38
|
+
* return value to advance their index. Unknown flags are ignored (return 0) —
|
|
39
|
+
* use {@link isEvolutionConfigFlag} to gate first.
|
|
40
|
+
*/
|
|
41
|
+
export function applyEvolutionFlag(arg, nextArg, target) {
|
|
42
|
+
switch (arg) {
|
|
43
|
+
case '--gepa':
|
|
44
|
+
target.useGepa = true;
|
|
45
|
+
return 0;
|
|
46
|
+
case '--no-gepa':
|
|
47
|
+
target.useGepa = false;
|
|
48
|
+
return 0;
|
|
49
|
+
case '--merge':
|
|
50
|
+
target.useMerge = true;
|
|
51
|
+
return 0;
|
|
52
|
+
case '--no-merge':
|
|
53
|
+
target.useMerge = false;
|
|
54
|
+
return 0;
|
|
55
|
+
case '--pareto-gate':
|
|
56
|
+
target.paretoGate = true;
|
|
57
|
+
return 0;
|
|
58
|
+
case '--no-pareto-gate':
|
|
59
|
+
target.paretoGate = false;
|
|
60
|
+
return 0;
|
|
61
|
+
case '--coverage':
|
|
62
|
+
target.useCoverage = true;
|
|
63
|
+
return 0;
|
|
64
|
+
case '--no-coverage':
|
|
65
|
+
target.useCoverage = false;
|
|
66
|
+
return 0;
|
|
67
|
+
case '--reflection-model':
|
|
68
|
+
if (nextArg !== undefined) {
|
|
69
|
+
target.reflectionModel = nextArg;
|
|
70
|
+
return 1;
|
|
71
|
+
}
|
|
72
|
+
return 0;
|
|
73
|
+
default:
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Parse an argv slice into an {@link EvolutionConfigOverride}, returning the
|
|
79
|
+
* override plus the tokens that were NOT consumed (so the caller can keep
|
|
80
|
+
* parsing its own flags / positionals). Only the evolution-config flags above
|
|
81
|
+
* are recognised; everything else is passed through untouched.
|
|
82
|
+
*/
|
|
83
|
+
export function parseEvolutionConfigFlags(args) {
|
|
84
|
+
const override = {};
|
|
85
|
+
const rest = [];
|
|
86
|
+
for (let i = 0; i < args.length; i++) {
|
|
87
|
+
const arg = args[i];
|
|
88
|
+
if (isEvolutionConfigFlag(arg)) {
|
|
89
|
+
const consumed = applyEvolutionFlag(arg, args[i + 1], override);
|
|
90
|
+
i += consumed;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
rest.push(arg);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { override, rest };
|
|
97
|
+
}
|
|
98
|
+
/** True when the override carries at least one set flag. */
|
|
99
|
+
export function hasAnyEvolutionFlag(override) {
|
|
100
|
+
return (override.useGepa !== undefined ||
|
|
101
|
+
override.useMerge !== undefined ||
|
|
102
|
+
override.paretoGate !== undefined ||
|
|
103
|
+
override.useCoverage !== undefined ||
|
|
104
|
+
override.reflectionModel !== undefined);
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=evolution-flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evolution-flags.js","sourceRoot":"","sources":["../../../src/cli/evolution-flags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,gFAAgF;AAChF,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,eAAe,CAAC;QACrB,KAAK,kBAAkB,CAAC;QACxB,KAAK,YAAY,CAAC;QAClB,KAAK,eAAe,CAAC;QACrB,KAAK,oBAAoB;YACvB,OAAO,IAAI,CAAC;QACd;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAAW,EACX,OAA2B,EAC3B,MAA+B;IAE/B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,QAAQ;YACX,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,CAAC;QACX,KAAK,WAAW;YACd,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,OAAO,CAAC,CAAC;QACX,KAAK,SAAS;YACZ,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,OAAO,CAAC,CAAC;QACX,KAAK,YAAY;YACf,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxB,OAAO,CAAC,CAAC;QACX,KAAK,eAAe;YAClB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,OAAO,CAAC,CAAC;QACX,KAAK,kBAAkB;YACrB,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;YAC1B,OAAO,CAAC,CAAC;QACX,KAAK,YAAY;YACf,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,OAAO,CAAC,CAAC;QACX,KAAK,eAAe;YAClB,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;YAC3B,OAAO,CAAC,CAAC;QACX,KAAK,oBAAoB;YACvB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC;gBACjC,OAAO,CAAC,CAAC;YACX,CAAC;YACD,OAAO,CAAC,CAAC;QACX;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAc;IAItD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAChE,CAAC,IAAI,QAAQ,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,mBAAmB,CAAC,QAAiC;IACnE,OAAO,CACL,QAAQ,CAAC,OAAO,KAAK,SAAS;QAC9B,QAAQ,CAAC,QAAQ,KAAK,SAAS;QAC/B,QAAQ,CAAC,UAAU,KAAK,SAAS;QACjC,QAAQ,CAAC,WAAW,KAAK,SAAS;QAClC,QAAQ,CAAC,eAAe,KAAK,SAAS,CACvC,CAAC;AACJ,CAAC"}
|
package/dist/src/cli/evolve.d.ts
CHANGED
|
@@ -7,7 +7,16 @@
|
|
|
7
7
|
* darwin evolve researcher --enable
|
|
8
8
|
* darwin evolve researcher --disable
|
|
9
9
|
* darwin evolve researcher --reset
|
|
10
|
-
* darwin evolve researcher --force
|
|
10
|
+
* darwin evolve researcher --force (force one optimization now)
|
|
11
|
+
* darwin evolve researcher --gepa --coverage (persist advanced config flags)
|
|
12
|
+
* darwin evolve researcher --reflection-model claude-opus-4-8
|
|
13
|
+
*
|
|
14
|
+
* Advanced flags (persisted, also accepted by `darwin run`):
|
|
15
|
+
* --gepa / --no-gepa GEPA reflective optimizer
|
|
16
|
+
* --merge / --no-merge GEPA system-aware merge
|
|
17
|
+
* --pareto-gate / --no-pareto-gate multi-objective A/B activation gate
|
|
18
|
+
* --coverage / --no-coverage instance-wise coverage selection
|
|
19
|
+
* --reflection-model <id> stronger reflection model for GEPA
|
|
11
20
|
*/
|
|
12
21
|
export declare function evolveCommand(args: string[]): Promise<void>;
|
|
13
22
|
//# sourceMappingURL=evolve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evolve.d.ts","sourceRoot":"","sources":["../../../src/cli/evolve.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"evolve.d.ts","sourceRoot":"","sources":["../../../src/cli/evolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAeH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGjE"}
|
package/dist/src/cli/evolve.js
CHANGED
|
@@ -7,28 +7,52 @@
|
|
|
7
7
|
* darwin evolve researcher --enable
|
|
8
8
|
* darwin evolve researcher --disable
|
|
9
9
|
* darwin evolve researcher --reset
|
|
10
|
-
* darwin evolve researcher --force
|
|
10
|
+
* darwin evolve researcher --force (force one optimization now)
|
|
11
|
+
* darwin evolve researcher --gepa --coverage (persist advanced config flags)
|
|
12
|
+
* darwin evolve researcher --reflection-model claude-opus-4-8
|
|
13
|
+
*
|
|
14
|
+
* Advanced flags (persisted, also accepted by `darwin run`):
|
|
15
|
+
* --gepa / --no-gepa GEPA reflective optimizer
|
|
16
|
+
* --merge / --no-merge GEPA system-aware merge
|
|
17
|
+
* --pareto-gate / --no-pareto-gate multi-objective A/B activation gate
|
|
18
|
+
* --coverage / --no-coverage instance-wise coverage selection
|
|
19
|
+
* --reflection-model <id> stronger reflection model for GEPA
|
|
11
20
|
*/
|
|
12
21
|
import { createMemory } from '../memory/index.js';
|
|
13
22
|
import { loadConfig } from '../core/agent.js';
|
|
14
23
|
import { builtinAgents } from '../agents/index.js';
|
|
24
|
+
import { resolveEvolutionEnabled, resolveEvolutionConfig, setEvolutionEnabled, setEvolutionConfigOverrides, } from '../evolution/enabled-state.js';
|
|
25
|
+
import { buildEvolutionLoop } from '../evolution/build-loop.js';
|
|
26
|
+
import { parseEvolutionConfigFlags, hasAnyEvolutionFlag } from './evolution-flags.js';
|
|
15
27
|
export async function evolveCommand(args) {
|
|
16
28
|
const agentName = args[0];
|
|
17
29
|
if (!agentName) {
|
|
18
|
-
throw new Error('Usage: darwin evolve <agent> [--enable|--disable|--reset|--force]');
|
|
30
|
+
throw new Error('Usage: darwin evolve <agent> [--enable|--disable|--reset|--force|--gepa|--coverage|…]');
|
|
19
31
|
}
|
|
20
32
|
const agent = builtinAgents[agentName];
|
|
21
33
|
if (!agent) {
|
|
22
34
|
throw new Error(`Unknown agent: "${agentName}". Available: ${Object.keys(builtinAgents).join(', ')}`);
|
|
23
35
|
}
|
|
24
|
-
|
|
36
|
+
// Separate the advanced evolution-config flags from the action flags.
|
|
37
|
+
const { override, rest: flags } = parseEvolutionConfigFlags(args.slice(1));
|
|
25
38
|
const config = await loadConfig();
|
|
26
39
|
const memory = createMemory(config);
|
|
27
40
|
await memory.init();
|
|
41
|
+
// Persist advanced-config flags FIRST (so e.g. `--force --gepa` forces with
|
|
42
|
+
// GEPA on, and `--gepa --coverage` alone just records the config).
|
|
43
|
+
if (hasAnyEvolutionFlag(override)) {
|
|
44
|
+
await setEvolutionConfigOverrides(memory, agentName, override);
|
|
45
|
+
console.log(`[darwin] Evolution config updated for ${agentName}: ${describeOverride(override)}`);
|
|
46
|
+
}
|
|
28
47
|
if (flags.includes('--enable')) {
|
|
48
|
+
// Persist the override into DarwinState so it survives process exit.
|
|
49
|
+
// (Mutating the in-memory singleton alone was the v0.7.1 bug — the flag
|
|
50
|
+
// was gone the moment the CLI process ended and `darwin run` read the
|
|
51
|
+
// static source default again.)
|
|
29
52
|
if (agent.evolution) {
|
|
30
53
|
agent.evolution.enabled = true;
|
|
31
54
|
}
|
|
55
|
+
await setEvolutionEnabled(memory, agentName, true);
|
|
32
56
|
console.log(`[darwin] Evolution ENABLED for ${agentName}`);
|
|
33
57
|
console.log(`[darwin] The critic will evaluate runs and Darwin will optimize prompts automatically.`);
|
|
34
58
|
}
|
|
@@ -36,6 +60,7 @@ export async function evolveCommand(args) {
|
|
|
36
60
|
if (agent.evolution) {
|
|
37
61
|
agent.evolution.enabled = false;
|
|
38
62
|
}
|
|
63
|
+
await setEvolutionEnabled(memory, agentName, false);
|
|
39
64
|
console.log(`[darwin] Evolution DISABLED for ${agentName}`);
|
|
40
65
|
}
|
|
41
66
|
else if (flags.includes('--reset')) {
|
|
@@ -47,23 +72,83 @@ export async function evolveCommand(args) {
|
|
|
47
72
|
console.log(`[darwin] Evolution RESET for ${agentName}. Back to v1.`);
|
|
48
73
|
}
|
|
49
74
|
else if (flags.includes('--force')) {
|
|
50
|
-
|
|
51
|
-
|
|
75
|
+
// On-demand manual trigger: run the loop's variant-generation + A/B-start
|
|
76
|
+
// path ONCE, bypassing the "enough runs / actionable patterns / data
|
|
77
|
+
// quality" gates of the automatic loop. Uses the experiments collected so
|
|
78
|
+
// far. Refuses cleanly when there is nothing to mutate from (no active
|
|
79
|
+
// prompt / no experiments) or a test is already running.
|
|
80
|
+
console.log(`[darwin] Forcing evolution for ${agentName}...`);
|
|
81
|
+
// Build the loop with the resolved advanced config (persisted overrides +
|
|
82
|
+
// any flags passed on this command line) so `--force --gepa` etc. take
|
|
83
|
+
// effect for the forced cycle.
|
|
84
|
+
const state = await memory.getState();
|
|
85
|
+
const resolvedEvolution = resolveEvolutionConfig(agent, state);
|
|
86
|
+
const evolutionAgent = resolvedEvolution
|
|
87
|
+
? { ...agent, evolution: resolvedEvolution }
|
|
88
|
+
: agent;
|
|
89
|
+
const loop = buildEvolutionLoop(evolutionAgent, config, memory);
|
|
90
|
+
const evoResult = await loop.forceEvolve(agentName);
|
|
91
|
+
if (evoResult.abTestStarted) {
|
|
92
|
+
console.log(`[darwin] EVOLVED: ${evoResult.message}`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(`[darwin] ${evoResult.message}`);
|
|
96
|
+
}
|
|
97
|
+
if (evoResult.patternsFound.length > 0) {
|
|
98
|
+
console.log(`[darwin] Patterns detected:`);
|
|
99
|
+
for (const p of evoResult.patternsFound.slice(0, 5)) {
|
|
100
|
+
console.log(` ${p.type}: ${p.description}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
52
103
|
}
|
|
53
|
-
else {
|
|
54
|
-
// Show current status
|
|
104
|
+
else if (!hasAnyEvolutionFlag(override)) {
|
|
105
|
+
// Show current status (only when no config flag was the whole command —
|
|
106
|
+
// a bare `--gepa` already printed its confirmation above).
|
|
55
107
|
const state = await memory.getState();
|
|
56
108
|
const version = state.activeVersions[agentName] ?? 'v1';
|
|
57
109
|
const runs = state.experimentCounts[agentName] ?? 0;
|
|
58
110
|
const abTest = state.abTests[agentName];
|
|
59
|
-
|
|
111
|
+
// Reflect the PERSISTED override (set by --enable/--disable) so `darwin
|
|
112
|
+
// evolve <agent>` reports the same enabled-state `darwin run` will act on.
|
|
113
|
+
const enabled = resolveEvolutionEnabled(agent, state);
|
|
114
|
+
const evo = resolveEvolutionConfig(agent, state);
|
|
60
115
|
console.log(`\n[darwin] Evolution for ${agentName}:`);
|
|
61
116
|
console.log(` Enabled: ${enabled ? 'yes' : 'no'}`);
|
|
62
117
|
console.log(` Version: ${version}`);
|
|
63
118
|
console.log(` Runs: ${runs}`);
|
|
64
119
|
console.log(` A/B Test: ${abTest ? `${abTest.versionA} vs ${abTest.versionB}` : 'none'}`);
|
|
65
120
|
console.log(` Min Runs: ${agent.evolution?.minRuns ?? 5}`);
|
|
121
|
+
console.log(` Advanced: ${describeConfig(evo)}`);
|
|
66
122
|
}
|
|
67
123
|
await memory.close();
|
|
68
124
|
}
|
|
125
|
+
/** One-line summary of which advanced flags an override set (for confirmation). */
|
|
126
|
+
function describeOverride(o) {
|
|
127
|
+
const parts = [];
|
|
128
|
+
if (o.useGepa !== undefined)
|
|
129
|
+
parts.push(`gepa=${o.useGepa}`);
|
|
130
|
+
if (o.useMerge !== undefined)
|
|
131
|
+
parts.push(`merge=${o.useMerge}`);
|
|
132
|
+
if (o.paretoGate !== undefined)
|
|
133
|
+
parts.push(`paretoGate=${o.paretoGate}`);
|
|
134
|
+
if (o.useCoverage !== undefined)
|
|
135
|
+
parts.push(`coverage=${o.useCoverage}`);
|
|
136
|
+
if (o.reflectionModel !== undefined)
|
|
137
|
+
parts.push(`reflectionModel=${o.reflectionModel}`);
|
|
138
|
+
return parts.length > 0 ? parts.join(', ') : '(none)';
|
|
139
|
+
}
|
|
140
|
+
/** One-line summary of the effective advanced config for the status view. */
|
|
141
|
+
function describeConfig(evo) {
|
|
142
|
+
if (!evo)
|
|
143
|
+
return '(no evolution config)';
|
|
144
|
+
const parts = [
|
|
145
|
+
`gepa=${evo.useGepa ?? false}`,
|
|
146
|
+
`merge=${evo.useMerge ?? false}`,
|
|
147
|
+
`paretoGate=${evo.paretoGate ?? false}`,
|
|
148
|
+
`coverage=${evo.useCoverage ?? false}`,
|
|
149
|
+
];
|
|
150
|
+
if (evo.reflectionModel)
|
|
151
|
+
parts.push(`reflectionModel=${evo.reflectionModel}`);
|
|
152
|
+
return parts.join(', ');
|
|
153
|
+
}
|
|
69
154
|
//# sourceMappingURL=evolve.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evolve.js","sourceRoot":"","sources":["../../../src/cli/evolve.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"evolve.js","sourceRoot":"","sources":["../../../src/cli/evolve.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli/index.js
CHANGED
|
@@ -36,6 +36,12 @@ const HELP = `
|
|
|
36
36
|
darwin run analyst --path ./src
|
|
37
37
|
darwin status researcher
|
|
38
38
|
darwin evolve researcher --enable
|
|
39
|
+
darwin evolve researcher --force
|
|
40
|
+
|
|
41
|
+
Evolve flags:
|
|
42
|
+
--enable / --disable Persistently turn self-evolution on/off for an agent
|
|
43
|
+
--reset Reset the agent back to its v1 prompt
|
|
44
|
+
--force Force one optimization cycle now (needs >=1 prior run)
|
|
39
45
|
|
|
40
46
|
Options:
|
|
41
47
|
--task-type <type> Categorize the task (tech, webdesign, market, general)
|
|
@@ -44,6 +50,13 @@ const HELP = `
|
|
|
44
50
|
--model <model> Override LLM model
|
|
45
51
|
--verbose Show detailed output
|
|
46
52
|
--help Show this help
|
|
53
|
+
|
|
54
|
+
Advanced evolution flags (run + evolve; persisted by evolve):
|
|
55
|
+
--gepa / --no-gepa GEPA reflective optimizer
|
|
56
|
+
--merge / --no-merge GEPA system-aware merge
|
|
57
|
+
--pareto-gate / --no-pareto-gate multi-objective A/B activation gate
|
|
58
|
+
--coverage / --no-coverage instance-wise coverage selection
|
|
59
|
+
--reflection-model <id> stronger reflection model for GEPA
|
|
47
60
|
`;
|
|
48
61
|
async function main() {
|
|
49
62
|
const args = process.argv.slice(2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CZ,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC;QACH,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,KAAK;gBACR,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,WAAW,EAAE,CAAC;gBACpB,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qBAAsB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8JH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB9D"}
|