дȫÏîĿÉó²éÎÊÌⲢ·¢²¼ v1.1.9
¸ÄÓñ¾»ú¶ÀÁ¢ CA£¬»ָ´ CLI TLS УÑ飬±£»¤ƾ¾ÝÓëÅäÖò¢·¢±£´档 д Cursor Êý¾ݡ¢»Ự·¾¶¡¢´úÀíÉúÃüÖÜÆڡ¢ģÐÍÇëÇóÓë Skills Îļþ²Ù×÷¡£ Ϊ¶ÀÁ¢ Tab ·þÎñÔö¼ӿͻ§¶˼øȨ£¬Éý¼¶ÒÀÀµÓ빤¾ßÁ´£¬ÍêÉƷ¢²¼ԪÐÅϢͬ²½¡£ Ñé֤£ºÁ½¸ö Go ģ¿éµIJâÊÔ/vet¡¢¹ؼüģ¿é race¡¢ǰ¶˲âÊÔ/Éú²ú¹¹½¨/Éó¼ơ¢ Go ¿ɴï©¶´ɨÃèÓë macOS/Linux ¿ÉÐÐģ¿齻²æ±àÒë¾ùͨ¹ý¡£ Windows ¸ôÀëÆô¶¯ͨ¹ý£»δÍê³ɵĵã»÷ðÑ̺ÍԭÉúƽ̨Ñé֤¼ûÉó²鱨¸档
This commit is contained in:
@@ -2,6 +2,7 @@ package config
|
||||
|
||||
import (
|
||||
"context"
|
||||
"cursor/internal/securefile"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
@@ -75,7 +76,7 @@ func (store *Store) Load(_ context.Context) (Config, error) {
|
||||
if err := store.saveLocked(defaultConfig); err != nil {
|
||||
return DefaultConfig(), err
|
||||
}
|
||||
return defaultConfig, nil
|
||||
return withRevision(defaultConfig), nil
|
||||
}
|
||||
return DefaultConfig(), fmt.Errorf("读取用户配置失败: %w", err)
|
||||
}
|
||||
@@ -93,7 +94,7 @@ func (store *Store) Load(_ context.Context) (Config, error) {
|
||||
return DefaultConfig(), err
|
||||
}
|
||||
}
|
||||
return normalized, nil
|
||||
return withRevision(normalized), nil
|
||||
}
|
||||
|
||||
func (store *Store) Save(_ context.Context, cfg Config) (Config, error) {
|
||||
@@ -109,10 +110,20 @@ func (store *Store) Save(_ context.Context, cfg Config) (Config, error) {
|
||||
store.mu.Lock()
|
||||
defer store.mu.Unlock()
|
||||
|
||||
if cfg.Revision != "" {
|
||||
existing, err := store.readCurrentLocked()
|
||||
if err != nil {
|
||||
return Config{}, err
|
||||
}
|
||||
if withRevision(existing).Revision != cfg.Revision {
|
||||
return Config{}, ErrConfigConflict
|
||||
}
|
||||
normalized.LastAgentModelHash = existing.LastAgentModelHash
|
||||
}
|
||||
if err := store.saveLocked(normalized); err != nil {
|
||||
return Config{}, err
|
||||
}
|
||||
return normalized, nil
|
||||
return withRevision(normalized), nil
|
||||
}
|
||||
|
||||
func (store *Store) saveLocked(normalized Config) error {
|
||||
@@ -125,11 +136,7 @@ func (store *Store) saveLocked(normalized Config) error {
|
||||
return fmt.Errorf("序列化用户配置失败: %w", err)
|
||||
}
|
||||
|
||||
tempPath := store.path + ".tmp"
|
||||
if err := writeFileSync(tempPath, data); err != nil {
|
||||
return fmt.Errorf("写入临时配置失败: %w", err)
|
||||
}
|
||||
if err := os.Rename(tempPath, store.path); err != nil {
|
||||
if err := securefile.Write(store.path, data); err != nil {
|
||||
return fmt.Errorf("保存用户配置失败: %w", err)
|
||||
}
|
||||
return nil
|
||||
@@ -181,3 +188,31 @@ func yamlHasKey(raw []byte, key string) bool {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (store *Store) readCurrentLocked() (Config, error) {
|
||||
data, err := os.ReadFile(store.path)
|
||||
if errors.Is(err, os.ErrNotExist) {
|
||||
return DefaultConfig(), nil
|
||||
}
|
||||
if err != nil {
|
||||
return Config{}, err
|
||||
}
|
||||
var current Config
|
||||
if err = yaml.Unmarshal(data, ¤t); err != nil {
|
||||
return Config{}, err
|
||||
}
|
||||
return NormalizeConfig(current)
|
||||
}
|
||||
func (store *Store) updateLastAgentModelHash(value string) (Config, error) {
|
||||
store.mu.Lock()
|
||||
defer store.mu.Unlock()
|
||||
cfg, err := store.readCurrentLocked()
|
||||
if err != nil {
|
||||
return Config{}, err
|
||||
}
|
||||
cfg.LastAgentModelHash = value
|
||||
if err = store.saveLocked(cfg); err != nil {
|
||||
return Config{}, err
|
||||
}
|
||||
return withRevision(cfg), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user