perf: 拆分规划策略
This commit is contained in:
@@ -10,13 +10,21 @@ import (
|
||||
|
||||
// SaveRunMeta 保存运行元信息到 meta/run.json。
|
||||
func (s *Store) SaveRunMeta(meta domain.RunMeta) error {
|
||||
return s.writeJSON("meta/run.json", meta)
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
return s.saveRunMetaUnlocked(meta)
|
||||
}
|
||||
|
||||
// LoadRunMeta 读取运行元信息。
|
||||
func (s *Store) LoadRunMeta() (*domain.RunMeta, error) {
|
||||
s.mu.RLock()
|
||||
defer s.mu.RUnlock()
|
||||
return s.loadRunMetaUnlocked()
|
||||
}
|
||||
|
||||
func (s *Store) loadRunMetaUnlocked() (*domain.RunMeta, error) {
|
||||
var meta domain.RunMeta
|
||||
if err := s.readJSON("meta/run.json", &meta); err != nil {
|
||||
if err := s.readJSONUnlocked("meta/run.json", &meta); err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
return nil, nil
|
||||
}
|
||||
@@ -25,59 +33,90 @@ func (s *Store) LoadRunMeta() (*domain.RunMeta, error) {
|
||||
return &meta, nil
|
||||
}
|
||||
|
||||
func (s *Store) saveRunMetaUnlocked(meta domain.RunMeta) error {
|
||||
return s.writeJSONUnlocked("meta/run.json", meta)
|
||||
}
|
||||
|
||||
// InitRunMeta 初始化或更新运行元信息,保留已有的 SteerHistory。
|
||||
func (s *Store) InitRunMeta(style, provider, model string) error {
|
||||
existing, _ := s.LoadRunMeta()
|
||||
meta := domain.RunMeta{
|
||||
StartedAt: time.Now().Format(time.RFC3339),
|
||||
Provider: provider,
|
||||
Style: style,
|
||||
Model: model,
|
||||
}
|
||||
if existing != nil {
|
||||
meta.SteerHistory = existing.SteerHistory
|
||||
meta.PendingSteer = existing.PendingSteer
|
||||
}
|
||||
return s.SaveRunMeta(meta)
|
||||
return s.withWriteLock(func() error {
|
||||
existing, err := s.loadRunMetaUnlocked()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
meta := domain.RunMeta{
|
||||
StartedAt: time.Now().Format(time.RFC3339),
|
||||
Provider: provider,
|
||||
Style: style,
|
||||
Model: model,
|
||||
}
|
||||
if existing != nil {
|
||||
meta.SteerHistory = existing.SteerHistory
|
||||
meta.PendingSteer = existing.PendingSteer
|
||||
meta.PlanningTier = existing.PlanningTier
|
||||
}
|
||||
return s.saveRunMetaUnlocked(meta)
|
||||
})
|
||||
}
|
||||
|
||||
// AppendSteerEntry 追加用户干预记录到 meta/run.json。
|
||||
func (s *Store) AppendSteerEntry(entry domain.SteerEntry) error {
|
||||
meta, err := s.LoadRunMeta()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if meta == nil {
|
||||
meta = &domain.RunMeta{}
|
||||
}
|
||||
meta.SteerHistory = append(meta.SteerHistory, entry)
|
||||
return s.SaveRunMeta(*meta)
|
||||
return s.withWriteLock(func() error {
|
||||
meta, err := s.loadRunMetaUnlocked()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if meta == nil {
|
||||
meta = &domain.RunMeta{}
|
||||
}
|
||||
meta.SteerHistory = append(meta.SteerHistory, entry)
|
||||
return s.saveRunMetaUnlocked(*meta)
|
||||
})
|
||||
}
|
||||
|
||||
// SetPendingSteer 记录未完成的 Steer 指令,用于中断恢复。
|
||||
func (s *Store) SetPendingSteer(input string) error {
|
||||
meta, err := s.LoadRunMeta()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if meta == nil {
|
||||
meta = &domain.RunMeta{}
|
||||
}
|
||||
meta.PendingSteer = input
|
||||
return s.SaveRunMeta(*meta)
|
||||
return s.withWriteLock(func() error {
|
||||
meta, err := s.loadRunMetaUnlocked()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if meta == nil {
|
||||
meta = &domain.RunMeta{}
|
||||
}
|
||||
meta.PendingSteer = input
|
||||
return s.saveRunMetaUnlocked(*meta)
|
||||
})
|
||||
}
|
||||
|
||||
// ClearPendingSteer 清除已处理的 Steer 指令。
|
||||
func (s *Store) ClearPendingSteer() error {
|
||||
meta, err := s.LoadRunMeta()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if meta == nil || meta.PendingSteer == "" {
|
||||
return nil
|
||||
}
|
||||
meta.PendingSteer = ""
|
||||
return s.SaveRunMeta(*meta)
|
||||
return s.withWriteLock(func() error {
|
||||
meta, err := s.loadRunMetaUnlocked()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if meta == nil || meta.PendingSteer == "" {
|
||||
return nil
|
||||
}
|
||||
meta.PendingSteer = ""
|
||||
return s.saveRunMetaUnlocked(*meta)
|
||||
})
|
||||
}
|
||||
|
||||
// SetPlanningTier 记录当前作品采用的规划级别。
|
||||
func (s *Store) SetPlanningTier(tier domain.PlanningTier) error {
|
||||
return s.withWriteLock(func() error {
|
||||
meta, err := s.loadRunMetaUnlocked()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if meta == nil {
|
||||
meta = &domain.RunMeta{}
|
||||
}
|
||||
meta.PlanningTier = tier
|
||||
return s.saveRunMetaUnlocked(*meta)
|
||||
})
|
||||
}
|
||||
|
||||
// SaveCheckpoint 保存当前进度快照到 meta/checkpoints/。
|
||||
|
||||
Reference in New Issue
Block a user