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.
This commit is contained in:
lkn 2026-07-21 14:40:46 +02:00
parent 87e6c664bd
commit c7c8fd1b8b
1 changed files with 31 additions and 1 deletions

View File

@ -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 := []string{"OLLIE_SESSION_ID=" + sessID, "OLLIE_UNAME=" + uname, "OLLIE=" + MountPathFor(uname)}
env = append(env, promptEnv...) 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) restoredSession := agent.RestoreSession(ps.Messages)
if ps.TaskState != nil { if ps.TaskState != nil {
@ -867,6 +895,7 @@ func (s *Manager) restoreSession(ps *agent.PersistedSession) error {
Runtime: rt, Runtime: rt,
NewDispatcher: newDisp, NewDispatcher: newDisp,
PromptEnvExtra: promptEnv, PromptEnvExtra: promptEnv,
BaseLayers: []string{sysPrompt, opModel, envBlock},
Log: s.cfg.Sink.NewLogger("core"), Log: s.cfg.Sink.NewLogger("core"),
ReadPlanStep: func() string { ReadPlanStep: func() string {
if sessPtr == nil { if sessPtr == nil {
@ -1168,6 +1197,7 @@ func (s *Manager) CreateSession(args []string) (string, error) {
Runtime: rt, Runtime: rt,
NewDispatcher: newDisp, NewDispatcher: newDisp,
PromptEnvExtra: promptEnv, PromptEnvExtra: promptEnv,
BaseLayers: []string{sysPrompt, opModel, envBlock},
Log: s.cfg.Sink.NewLogger("core"), Log: s.cfg.Sink.NewLogger("core"),
ReadPlanStep: func() string { ReadPlanStep: func() string {
if sessPtr == nil { if sessPtr == nil {