session: remove resetElevation plumbing
Rate limiting is now time-based (leaky bucket in core/elevate), so per-turn reset hooks are no longer needed. Remove ResetElevation from session config, files.go, root.go, and main.go.
This commit is contained in:
parent
74f68f5045
commit
25dbc1b85c
1
go.mod
1
go.mod
|
|
@ -12,6 +12,7 @@ require (
|
|||
|
||||
require (
|
||||
golang.org/x/sys v0.47.0 // indirect
|
||||
golang.org/x/time v0.15.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
|
|
|
|||
2
go.sum
2
go.sum
|
|
@ -45,6 +45,8 @@ golang.org/x/sys v0.0.0-20210415045647-66c3f260301c/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
|
||||
golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
|
||||
golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
|
||||
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
|
|
|
|||
5
main.go
5
main.go
|
|
@ -192,11 +192,6 @@ func runServer(sockPath string) {
|
|||
Enable9P: !*no9p,
|
||||
EnableDBus: !*nodbus && (*no9p || *tcpAddr == ""),
|
||||
InvalidateModels: modelCache.Invalidate,
|
||||
ResetElevation: func(sessionID string) {
|
||||
if elevateBroker != nil {
|
||||
elevateBroker.ResetTurn(sessionID)
|
||||
}
|
||||
},
|
||||
OnSessionCreated: func(id string, sess *session.Session) {
|
||||
if dbusAdapter != nil {
|
||||
dbusAdapter.OnSessionCreated(id, sess)
|
||||
|
|
|
|||
19
main_test.go
19
main_test.go
|
|
@ -173,7 +173,6 @@ func newTestSessionFileStore(t *testing.T, sess *session.Session) *fs.Tree {
|
|||
func(data []byte) error { return nil },
|
||||
func() {},
|
||||
nil,
|
||||
nil,
|
||||
)
|
||||
return sf
|
||||
}
|
||||
|
|
@ -182,7 +181,7 @@ func newTestSessionFileStoreWith(t *testing.T, sess *session.Session, kill func(
|
|||
t.Helper()
|
||||
sink := testSink()
|
||||
// Session tree for kill/rename/save operations
|
||||
return session.NewSessionTree(sess, sink.NewLogger("test"), kill, rename, save, func() {}, nil, nil)
|
||||
return session.NewSessionTree(sess, sink.NewLogger("test"), kill, rename, save, func() {}, nil)
|
||||
}
|
||||
|
||||
// ===== session.Session =====
|
||||
|
|
@ -400,7 +399,7 @@ func TestSessionFileStoreReadableContract(t *testing.T) {
|
|||
defer sess.Cancel()
|
||||
sink := testSink()
|
||||
_ = session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
||||
func([]byte) error { return nil }, func() {}, nil)
|
||||
}
|
||||
|
||||
func TestSessionFileStoreList(t *testing.T) {
|
||||
|
|
@ -408,7 +407,7 @@ func TestSessionFileStoreList(t *testing.T) {
|
|||
defer sess.Cancel()
|
||||
sink := testSink()
|
||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
||||
func([]byte) error { return nil }, func() {}, nil)
|
||||
|
||||
entries, err := sf.List()
|
||||
if err != nil {
|
||||
|
|
@ -425,7 +424,7 @@ func TestSessionFileStoreStatChat(t *testing.T) {
|
|||
sess.AppendLog([]byte("hello"))
|
||||
sink := testSink()
|
||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
||||
func([]byte) error { return nil }, func() {}, nil)
|
||||
|
||||
fi, err := sf.Stat("chat")
|
||||
if err != nil {
|
||||
|
|
@ -442,7 +441,7 @@ func TestSessionFileStoreGetChat(t *testing.T) {
|
|||
sess.AppendLog([]byte("hello"))
|
||||
sink := testSink()
|
||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
||||
func([]byte) error { return nil }, func() {}, nil)
|
||||
|
||||
data := testStoreRead(t, sf, "chat")
|
||||
if string(data) != "hello" {
|
||||
|
|
@ -455,7 +454,7 @@ func TestSessionFileStoreGetContent(t *testing.T) {
|
|||
defer sess.Cancel()
|
||||
sink := testSink()
|
||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
||||
func([]byte) error { return nil }, func() {}, nil)
|
||||
|
||||
for _, name := range []string{"cfg", "offset", "usage", "ctxsz", "models", "systemprompt"} {
|
||||
if _, err := sf.Open(name); err != nil {
|
||||
|
|
@ -469,7 +468,7 @@ func TestSessionFileStorePutCwd(t *testing.T) {
|
|||
defer sess.Cancel()
|
||||
sink := testSink()
|
||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
||||
func([]byte) error { return nil }, func() {}, nil)
|
||||
|
||||
// Create the directory first so SetCWD validates it
|
||||
os.MkdirAll("/tmp/newpath", 0755)
|
||||
|
|
@ -485,7 +484,7 @@ func TestSessionFileStorePutEmpty(t *testing.T) {
|
|||
defer sess.Cancel()
|
||||
sink := testSink()
|
||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
||||
func([]byte) error { return nil }, func() {}, nil)
|
||||
|
||||
// Empty write is a no-op
|
||||
e, err := sf.Open("cfg")
|
||||
|
|
@ -592,7 +591,7 @@ func TestSessionFileStoreWriteChat(t *testing.T) {
|
|||
var saved []byte
|
||||
sink := testSink()
|
||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||
func(data []byte) error { saved = data; return nil }, func() {}, nil, nil)
|
||||
func(data []byte) error { saved = data; return nil }, func() {}, nil)
|
||||
|
||||
testStoreWrite(t, sf, "chat", []byte("transcript data"))
|
||||
if string(saved) != "transcript data" {
|
||||
|
|
|
|||
|
|
@ -63,8 +63,8 @@ func sessionFilePerms() map[string]os.FileMode {
|
|||
return fs.Perms[fs.PathSessionFile].Files
|
||||
}
|
||||
|
||||
func NewSessionTree(sess *Session, log *olog.Logger, kill func(), rename func(newID string) error, saveTranscript func([]byte) error, invalidateModels func(), resetElevation func(), toolRegistry *toolsrv.Registry) *fs.Tree {
|
||||
h := &sessionHelper{sess: sess, log: log, kill: kill, rename: rename, saveTranscript: saveTranscript, invalidateModels: invalidateModels, resetElevation: resetElevation, toolRegistry: toolRegistry}
|
||||
func NewSessionTree(sess *Session, log *olog.Logger, kill func(), rename func(newID string) error, saveTranscript func([]byte) error, invalidateModels func(), toolRegistry *toolsrv.Registry) *fs.Tree {
|
||||
h := &sessionHelper{sess: sess, log: log, kill: kill, rename: rename, saveTranscript: saveTranscript, invalidateModels: invalidateModels, toolRegistry: toolRegistry}
|
||||
perms := sessionFilePerms()
|
||||
specs := make([]fs.FileSpec, len(SessionFileList))
|
||||
for i, f := range SessionFileList {
|
||||
|
|
@ -76,8 +76,8 @@ func NewSessionTree(sess *Session, log *olog.Logger, kill func(), rename func(ne
|
|||
}
|
||||
|
||||
// NewAgentTree builds the file tree for a single agent within a session.
|
||||
func NewAgentTree(sess *Session, log *olog.Logger, saveTranscript func([]byte) error, invalidateModels func(), resetElevation func(), toolRegistry *toolsrv.Registry) *fs.Tree {
|
||||
h := &sessionHelper{sess: sess, log: log, saveTranscript: saveTranscript, invalidateModels: invalidateModels, resetElevation: resetElevation, toolRegistry: toolRegistry}
|
||||
func NewAgentTree(sess *Session, log *olog.Logger, saveTranscript func([]byte) error, invalidateModels func(), toolRegistry *toolsrv.Registry) *fs.Tree {
|
||||
h := &sessionHelper{sess: sess, log: log, saveTranscript: saveTranscript, invalidateModels: invalidateModels, toolRegistry: toolRegistry}
|
||||
perms := sessionFilePerms()
|
||||
specs := make([]fs.FileSpec, len(AgentFileList))
|
||||
for i, f := range AgentFileList {
|
||||
|
|
@ -96,7 +96,6 @@ type sessionHelper struct {
|
|||
rename func(newID string) error
|
||||
saveTranscript func([]byte) error
|
||||
invalidateModels func()
|
||||
resetElevation func() // called on prompt write to reset turn counter
|
||||
toolRegistry *toolsrv.Registry
|
||||
}
|
||||
|
||||
|
|
@ -195,10 +194,6 @@ func (h *sessionHelper) fileSpec(name string, mode os.FileMode) fs.FileSpec {
|
|||
h.sess.InvalidateModelsCache()
|
||||
return nil
|
||||
}
|
||||
// Reset elevation rate limiter on new turn
|
||||
if h.resetElevation != nil {
|
||||
h.resetElevation()
|
||||
}
|
||||
h.sess.mu.Lock()
|
||||
h.sess.prevPrompt = []byte(input)
|
||||
h.sess.mu.Unlock()
|
||||
|
|
|
|||
|
|
@ -53,8 +53,6 @@ type Config struct {
|
|||
EnableDBus bool
|
||||
// InvalidateModels clears the model cache, forcing a refresh.
|
||||
InvalidateModels func()
|
||||
// ResetElevation resets the per-turn elevation rate limiter for a session.
|
||||
ResetElevation func(sessionID string)
|
||||
// ToolRegistry is the shared tool registry for lazy tool promotion.
|
||||
ToolRegistry *toolsrv.Registry
|
||||
// SkillsRegistry is the shared skills registry for skill loading.
|
||||
|
|
@ -168,11 +166,6 @@ func lookupLocked(rs *rootState, id string) *Session {
|
|||
}
|
||||
|
||||
func openSessionTree(rs *rootState, sess *Session) *fs.Tree {
|
||||
var resetElev func()
|
||||
if rs.cfg.ResetElevation != nil {
|
||||
id := sess.id
|
||||
resetElev = func() { rs.cfg.ResetElevation(id) }
|
||||
}
|
||||
return NewSessionTree(
|
||||
sess,
|
||||
rs.cfg.Log,
|
||||
|
|
@ -180,23 +173,16 @@ func openSessionTree(rs *rootState, sess *Session) *fs.Tree {
|
|||
func(newID string) error { return Rename(rs, sess.id, newID) },
|
||||
nil,
|
||||
rs.cfg.InvalidateModels,
|
||||
resetElev,
|
||||
rs.cfg.ToolRegistry,
|
||||
)
|
||||
}
|
||||
|
||||
func openAgentTree(rs *rootState, sess *Session) *fs.Tree {
|
||||
var resetElev func()
|
||||
if rs.cfg.ResetElevation != nil {
|
||||
id := sess.id
|
||||
resetElev = func() { rs.cfg.ResetElevation(id) }
|
||||
}
|
||||
return NewAgentTree(
|
||||
sess,
|
||||
rs.cfg.Log,
|
||||
nil,
|
||||
rs.cfg.InvalidateModels,
|
||||
resetElev,
|
||||
rs.cfg.ToolRegistry,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Reference in New Issue