feat(opencode): add session tracking and update default model

This commit is contained in:
kj
2026-09-03 11:49:42 -03:00
parent b5f7c3bd53
commit 0543f7b231

View File

@@ -47,10 +47,35 @@
(json-parse-buffer :object-type 'alist)))) (json-parse-buffer :object-type 'alist))))
(alist-get 'key (alist-get 'opencode-go auth)))) (alist-get 'key (alist-get 'opencode-go auth))))
(defvar-local kj-opencode-session-id nil
"Stable OpenCode session id for this conversation buffer.")
(defun kj-opencode-go-new-session-id ()
"Generate a new stable-enough random id for x-opencode-session."
(md5 (format "opencode-go-%s-%s" (random) (float-time))))
(defun kj-opencode-go-session-id (info)
"Return a stable x-opencode-session id for the buffer in INFO."
(let ((buf (or (plist-get info :buffer) (current-buffer))))
(if (buffer-live-p buf)
(with-current-buffer buf
(or kj-opencode-session-id
(setq-local kj-opencode-session-id
(kj-opencode-go-new-session-id))))
(kj-opencode-go-new-session-id))))
(defun kj-opencode-go-header (info)
"Auth plus per-conversation session header for the OpenCode Go backends."
(append
(when-let* ((key (gptel--get-api-key)))
`(("Authorization" . ,(concat "Bearer " key))))
`(("x-opencode-session" . ,(kj-opencode-go-session-id info)))))
(gptel-make-openai "OpenCode Go" (gptel-make-openai "OpenCode Go"
:host "opencode.ai" :host "opencode.ai"
:endpoint "/zen/go/v1/chat/completions" :endpoint "/zen/go/v1/chat/completions"
:key #'kj-opencode-go-key :key #'kj-opencode-go-key
:header #'kj-opencode-go-header
:stream t :stream t
:models '(minimax-m3 minimax-m2.7 minimax-m2.5 :models '(minimax-m3 minimax-m2.7 minimax-m2.5
kimi-k3 kimi-k2.7-code kimi-k2.6 longcat-2.0 kimi-k2.5 kimi-k3 kimi-k2.7-code kimi-k2.6 longcat-2.0 kimi-k2.5
@@ -67,6 +92,7 @@
:host "opencode.ai" :host "opencode.ai"
:endpoint "/zen/v1/chat/completions" :endpoint "/zen/v1/chat/completions"
:key #'kj-opencode-go-key :key #'kj-opencode-go-key
:header #'kj-opencode-go-header
:stream t :stream t
:models '(big-pickle deepseek-v4-flash-free muse-spark-1.2-contributor-free :models '(big-pickle deepseek-v4-flash-free muse-spark-1.2-contributor-free
mimo-v2.5-free hy3-free nemotron-3-ultra-free mimo-v2.5-free hy3-free nemotron-3-ultra-free
@@ -191,7 +217,7 @@ content do not break gptel-magit."
:config :config
(setq agent-shell-opencode-authentication (setq agent-shell-opencode-authentication
(agent-shell-opencode-make-authentication :none t)) (agent-shell-opencode-make-authentication :none t))
(setq agent-shell-opencode-default-model-id "opencode-go/mimo-v2.5") (setq agent-shell-opencode-default-model-id "opencode-go/qwen3.8-flash")
;; Header compacto ;; Header compacto
(setq agent-shell-header-style 'text) (setq agent-shell-header-style 'text)