@@ -161,6 +161,27 @@ func (s *memoryStore) AppendMessages(ctx context.Context, input agentsession.App
161161}
162162
163163// UpdateSessionState 只覆写会话头字段,不改消息正文。
164+ // UpdateSessionWorkdir 仅更新会话 workdir 与时间,避免输入归一化覆盖其他会话头字段。
165+ func (s * memoryStore ) UpdateSessionWorkdir (ctx context.Context , input agentsession.UpdateSessionWorkdirInput ) error {
166+ if err := ctx .Err (); err != nil {
167+ return err
168+ }
169+ s .mu .Lock ()
170+ defer s .mu .Unlock ()
171+
172+ session , ok := s .sessions [input .SessionID ]
173+ if ! ok {
174+ return errors .New ("not found" )
175+ }
176+ if ! input .UpdatedAt .IsZero () {
177+ session .UpdatedAt = input .UpdatedAt
178+ }
179+ session .Workdir = input .Workdir
180+ s .saves ++
181+ s .sessions [input .SessionID ] = cloneSession (session )
182+ return nil
183+ }
184+
164185func (s * memoryStore ) UpdateSessionState (ctx context.Context , input agentsession.UpdateSessionStateInput ) error {
165186 if err := ctx .Err (); err != nil {
166187 return err
@@ -257,6 +278,17 @@ func (s *failingStore) AppendMessages(ctx context.Context, input agentsession.Ap
257278}
258279
259280// UpdateSessionState 转发到底层 Store,并按写入次数注入失败。
281+ // UpdateSessionWorkdir 杞彂鍒板簳灞?Store锛屽苟鎸夊啓鍏ユ鏁版敞鍏ュけ璐ャ€?
282+ func (s * failingStore ) UpdateSessionWorkdir (ctx context.Context , input agentsession.UpdateSessionWorkdirInput ) error {
283+ if err := s .nextSaveError (ctx ); err != nil {
284+ return err
285+ }
286+ if s .Store == nil {
287+ return nil
288+ }
289+ return s .Store .UpdateSessionWorkdir (ctx , input )
290+ }
291+
260292func (s * failingStore ) UpdateSessionState (ctx context.Context , input agentsession.UpdateSessionStateInput ) error {
261293 if err := s .nextSaveError (ctx ); err != nil {
262294 return err
@@ -376,6 +408,25 @@ func (s *blockingLoadStore) AppendMessages(ctx context.Context, input agentsessi
376408}
377409
378410// UpdateSessionState 在阻塞加载测试桩中更新会话头。
411+ // UpdateSessionWorkdir 鍦ㄩ樆濉炲姞杞芥祴璇曟々涓粎鏇存柊 workdir 涓庢椂闂淬€?
412+ func (s * blockingLoadStore ) UpdateSessionWorkdir (ctx context.Context , input agentsession.UpdateSessionWorkdirInput ) error {
413+ if err := ctx .Err (); err != nil {
414+ return err
415+ }
416+ s .mu .Lock ()
417+ defer s .mu .Unlock ()
418+ session , ok := s .sessions [input .SessionID ]
419+ if ! ok {
420+ return errors .New ("not found" )
421+ }
422+ if ! input .UpdatedAt .IsZero () {
423+ session .UpdatedAt = input .UpdatedAt
424+ }
425+ session .Workdir = input .Workdir
426+ s .sessions [input .SessionID ] = cloneSession (session )
427+ return nil
428+ }
429+
379430func (s * blockingLoadStore ) UpdateSessionState (ctx context.Context , input agentsession.UpdateSessionStateInput ) error {
380431 if err := ctx .Err (); err != nil {
381432 return err
0 commit comments