From f630c644e1f6dc36ccf37c1af368d121d4bbbea8 Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Sat, 18 Jul 2026 23:34:24 +0200 Subject: [PATCH] complete: use backend.Generate instead of copilot session --- session/session.go | 87 +++++----------------------------------------- 1 file changed, 8 insertions(+), 79 deletions(-) diff --git a/session/session.go b/session/session.go index 01c9562..93bffcb 100644 --- a/session/session.go +++ b/session/session.go @@ -1140,7 +1140,7 @@ func squashWhitespace(s string) string { // --- Code Completion --- -// Complete performs a single-shot code completion using a dedicated copilot session. +// Complete performs a stateless one-shot code completion via backend.Generate. func (s *Manager) Complete(cwd, filePath, prefix, suffix, extraContext string) (string, error) { if cwd == "" { cwd, _ = os.Getwd() @@ -1162,18 +1162,6 @@ func (s *Manager) Complete(cwd, filePath, prefix, suffix, extraContext string) ( suffix = suffix[:suffixMax] } - sessID := s.findOrCreateCopilot(cwd, backendName, model) - if sessID == "" { - return "", fmt.Errorf("failed to create copilot session") - } - - s.mu.RLock() - sess, ok := s.sessions[sessID] - s.mu.RUnlock() - if !ok { - return "", fmt.Errorf("copilot session disappeared") - } - fileHint := "" if filePath != "" { fileHint = " in " + filePath @@ -1191,79 +1179,20 @@ func (s *Manager) Complete(cwd, filePath, prefix, suffix, extraContext string) ( %s `, fileHint, contextBlock, prefix, suffix) - sess.Core.Submit(sess.Ctx, "/clear") - sess.Core.Submit(sess.Ctx, prompt) - - for { - state := sess.Core.State() - if state == "idle" { - break - } - next, ok := sess.Core.WaitChange(sess.Ctx, agent.WatchState, state) - if !ok { - return "", fmt.Errorf("copilot session cancelled") - } - if next == "idle" { - break - } + result, err := backend.Generate(context.Background(), backend.GenerateRequest{ + Prompt: prompt, + Backend: backendName, + Model: model, + }) + if err != nil { + return "", err } - result := sess.Core.Reply() result = stripCompletionNoise(result) result = stripPrefixEcho(prefix, result) return result, nil } -func (s *Manager) findOrCreateCopilot(cwd, backendName, modelName string) string { - sessID := fmt.Sprintf("%d-copilot", crc32Str(cwd)) - - s.mu.RLock() - _, exists := s.sessions[sessID] - s.mu.RUnlock() - if exists { - return sessID - } - - cfg := LoadAgentConfig(s.cfg.AgentsDir, "copilot", nil) - be, err := backend.NewWithName(backendName) - if err != nil { - return "" - } - if modelName != "" { - be.SetModel(modelName) - } - - uname := s.nextUname() - newDisp := tools.NewDispatcherFunc(map[string]func() tools.Server{ - "execute": execute.Decl(cwd), - }) - rt := agent.BuildRuntime(cfg, newDisp(), cwd, []string{"OLLIE_SESSION_ID=" + sessID}) - - core := agent.NewAgentCore(agent.AgentCoreConfig{ - Backend: be, - AgentName: "copilot", - AgentsDir: s.cfg.AgentsDir, - SessionsDir: s.cfg.SessionsDir, - SessionID: sessID, - Uname: uname, - CWD: cwd, - Runtime: rt, - NewDispatcher: newDisp, - Log: s.cfg.Sink.NewLogger("copilot"), - }) - - ctx, cancel := context.WithCancel(context.Background()) - sess := NewSession(sessID, core, ctx, cancel) - sess.uname = uname - - s.mu.Lock() - s.sessions[sessID] = sess - s.mu.Unlock() - if s.cfg.OnSessionCreated != nil { - s.cfg.OnSessionCreated(sessID, sess) - } - return sessID -} func stripCompletionNoise(s string) string { var lines []string