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:
parent
87e6c664bd
commit
c7c8fd1b8b
|
|
@ -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 {
|
||||||
|
|
|
||||||
Reference in New Issue