fix evolution review issues

This commit is contained in:
lxowalle 2026-05-11 15:24:21 +08:00
parent 8f0fabd709
commit e0a80ec621
5 changed files with 24 additions and 24 deletions

View file

@ -213,7 +213,7 @@ func (b *evolutionBridge) handleTurnEndAsync(meta EventMeta, payload TurnEndPayl
b.closeMu.Unlock() b.closeMu.Unlock()
go func() { go func() {
defer b.wg.Done() defer b.wg.Done()
if err := b.runtime.FinalizeTurn(context.Background(), input); err != nil { if err := b.runtime.FinalizeTurn(b.bgCtx, input); err != nil {
logger.WarnCF("agent", "Evolution finalize turn failed", map[string]any{ logger.WarnCF("agent", "Evolution finalize turn failed", map[string]any{
"error": err.Error(), "error": err.Error(),
"turn_id": input.TurnID, "turn_id": input.TurnID,

View file

@ -298,7 +298,7 @@ func TestEvolutionBridge_DirectDeliveryFailureFallsBackToCurrentRuntimeBridge(t
} }
} }
func TestEvolutionBridge_CloseFlushesPendingTurnEndRecord(t *testing.T) { func TestEvolutionBridge_CloseCancelsPendingTurnEndRecord(t *testing.T) {
tmpDir := t.TempDir() tmpDir := t.TempDir()
al := newEvolutionTestLoop(t, tmpDir, config.EvolutionConfig{ al := newEvolutionTestLoop(t, tmpDir, config.EvolutionConfig{
Enabled: true, Enabled: true,
@ -315,14 +315,17 @@ func TestEvolutionBridge_CloseFlushesPendingTurnEndRecord(t *testing.T) {
UserMessage: "close flush task", UserMessage: "close flush task",
FinalContent: "ok", FinalContent: "ok",
}) })
al.Close()
record := waitForEvolutionRecord(t, filepath.Join(tmpDir, "state", "evolution", "task-records.jsonl")) done := make(chan struct{})
if got := record["session_key"]; got != "session-close-flush" { go func() {
t.Fatalf("session_key = %v, want session-close-flush", got) al.Close()
} close(done)
if got := record["summary"]; got != "close flush task" { }()
t.Fatalf("summary = %v, want close flush task", got)
select {
case <-done:
case <-time.After(2 * time.Second):
t.Fatal("Close timed out")
} }
} }

View file

@ -175,7 +175,7 @@ func TestDefaultConfig_EvolutionDefaults(t *testing.T) {
cfg := DefaultConfig() cfg := DefaultConfig()
assert.False(t, cfg.Evolution.Enabled) assert.False(t, cfg.Evolution.Enabled)
assert.Equal(t, "apply", cfg.Evolution.Mode) assert.Equal(t, "observe", cfg.Evolution.Mode)
assert.Equal(t, "", cfg.Evolution.StateDir) assert.Equal(t, "", cfg.Evolution.StateDir)
assert.Equal(t, 2, cfg.Evolution.MinTaskCount) assert.Equal(t, 2, cfg.Evolution.MinTaskCount)
assert.Equal(t, 0.7, cfg.Evolution.MinSuccessRatio) assert.Equal(t, 0.7, cfg.Evolution.MinSuccessRatio)

View file

@ -49,7 +49,7 @@ func DefaultConfig() *Config {
}, },
Evolution: EvolutionConfig{ Evolution: EvolutionConfig{
Enabled: false, Enabled: false,
Mode: "apply", Mode: "observe",
MinTaskCount: 2, MinTaskCount: 2,
MinSuccessRatio: 0.7, MinSuccessRatio: 0.7,
ColdPathTrigger: "after_turn", ColdPathTrigger: "after_turn",

View file

@ -57,29 +57,26 @@ func (a *Applier) applyDraftWithRollback(
return nil, err return nil, err
} }
skillDir := filepath.Join(workspace, "skills", draft.TargetSkillName)
if mkdirErr := os.MkdirAll(skillDir, 0o755); mkdirErr != nil {
return nil, mkdirErr
}
renderedBody, err := renderAppliedBody(draft, existingBody, hadOriginal) renderedBody, err := renderAppliedBody(draft, existingBody, hadOriginal)
if err != nil { if err != nil {
return nil, err return nil, err
} }
skillPath := filepath.Join(skillDir, "SKILL.md")
if err := fileutil.WriteFileAtomic(skillPath, []byte(renderedBody), 0o644); err != nil {
return nil, err
}
if err := validateAppliedSkillBody( if err := validateAppliedSkillBody(
renderedBody, renderedBody,
draft.TargetSkillName, draft.TargetSkillName,
allowsExistingFrontmatterFields(draft.ChangeKind, hadOriginal), allowsExistingFrontmatterFields(draft.ChangeKind, hadOriginal),
); err != nil { ); err != nil {
if rollbackErr := a.rollbackSkill(skillPath, backupPath, hadOriginal); rollbackErr != nil { return nil, err
return nil, errorsJoin(err, rollbackErr) }
}
skillDir := filepath.Join(workspace, "skills", draft.TargetSkillName)
if mkdirErr := os.MkdirAll(skillDir, 0o755); mkdirErr != nil {
return nil, mkdirErr
}
skillPath := filepath.Join(skillDir, "SKILL.md")
if err := fileutil.WriteFileAtomic(skillPath, []byte(renderedBody), 0o644); err != nil {
return nil, err return nil, err
} }