From c7c8fd1b8be10587a34ff684b7a67325f00d26d4 Mon Sep 17 00:00:00 2001 From: lkn Date: Tue, 21 Jul 2026 14:40:46 +0200 Subject: [PATCH] session: inject operational model into restore path Restored sessions were calling BuildRuntime without baseLayers, so the 9P/D-Bus operational model never appeared in the system prompt. Now computes sysPrompt, opModel, envBlock and passes them as BaseLayers. --- session/session.go | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/session/session.go b/session/session.go index 423a0c9..e51d9ff 100644 --- a/session/session.go +++ b/session/session.go @@ -846,7 +846,35 @@ func (s *Manager) restoreSession(ps *agent.PersistedSession) error { env := []string{"OLLIE_SESSION_ID=" + sessID, "OLLIE_UNAME=" + uname, "OLLIE=" + MountPathFor(uname)} env = append(env, promptEnv...) - rt := agent.BuildRuntime(cfg, newDisp(), cwd, env) + + // Compute base layers (same as new-session path). + var spOverride string + if cfg != nil { + spOverride = cfg.SystemPrompt + } + sysPrompt := prompts.ResolveSystemPrompt(spOverride) + envMap := make(map[string]string) + for _, e := range env { + if k, v, ok := strings.Cut(e, "="); ok { + envMap[k] = v + } + } + opModel := prompts.OperationalModel(s.cfg.Enable9P, s.cfg.EnableDBus, envMap) + platform := "linux" + isGitRepo := false + for _, e := range promptEnv { + if k, v, ok := strings.Cut(e, "="); ok { + switch k { + case "PRIME_PLATFORM": + platform = v + case "PRIME_IS_GIT_REPO": + isGitRepo = v == "true" + } + } + } + envBlock := prompts.Environment(cwd, platform, isGitRepo, "") + + rt := agent.BuildRuntime(cfg, newDisp(), cwd, env, sysPrompt, opModel, envBlock) restoredSession := agent.RestoreSession(ps.Messages) if ps.TaskState != nil { @@ -867,6 +895,7 @@ func (s *Manager) restoreSession(ps *agent.PersistedSession) error { Runtime: rt, NewDispatcher: newDisp, PromptEnvExtra: promptEnv, + BaseLayers: []string{sysPrompt, opModel, envBlock}, Log: s.cfg.Sink.NewLogger("core"), ReadPlanStep: func() string { if sessPtr == nil { @@ -1168,6 +1197,7 @@ func (s *Manager) CreateSession(args []string) (string, error) { Runtime: rt, NewDispatcher: newDisp, PromptEnvExtra: promptEnv, + BaseLayers: []string{sysPrompt, opModel, envBlock}, Log: s.cfg.Sink.NewLogger("core"), ReadPlanStep: func() string { if sessPtr == nil {