返回 DeepSeek-Reasonix
session_history_native_search_build.go
根目录 / desktop / session_history_native_search_build.go
1 package main
2
3 import (
4 "context"
5 "database/sql"
6 "errors"
7 "strings"
8
9 "reasonix/internal/agent"
10 "reasonix/internal/provider"
11 )
12
13 func buildNativeSearch(ctx context.Context, db *sql.DB, p *nativeHistoryPreparation) error {
14 pager := p.pager.WithContext(ctx)
15 source := historySourceFromPager(ctx, pager, p.path, p.key)
16 for position := 0; position < pager.Header.MessageCount; {
17 tx, err := db.BeginTx(ctx, nil)
18 if err != nil {
19 return err
20 }
21 for batch := 0; batch < 32 && position < pager.Header.MessageCount; batch++ {
22 var messages []provider.Message
23 messages, err = source.fetch(position, position+1)
24 if err != nil {
25 break
26 }
27 if len(messages) != 1 {
28 err = errors.New("history search source omitted an indexed message")
29 break
30 }
31 message := messages[0]
32 preview := message.Content
33 if message.Role == provider.RoleUser {
34 preview = agent.UserMessageText(message)
35 } else if preview == "" {
36 preview = message.RawContent
37 }
38 if agent.IsHostGeneratedUserMessage(message) {
39 preview = ""
40 }
41 preview, err = nativeHistoryPrompt(ctx, preview)
42 if err != nil {
43 break
44 }
45 text := strings.Join([]string{message.Content, message.RawContent, message.ReasoningContent}, "\n")
46 _, err = tx.ExecContext(ctx, `INSERT INTO documents(position,role,preview,text) VALUES(?,?,?,?)`, position, message.Role, preview, text)
47 if err == nil {
48 _, err = tx.ExecContext(ctx, `INSERT INTO documents_fts(rowid,text) VALUES(?,?)`, position, text)
49 }
50 if err != nil {
51 break
52 }
53 position++
54 }
55 if err != nil {
56 _ = tx.Rollback()
57 return err
58 }
59 if err := tx.Commit(); err != nil {
60 return err
61 }
62 }
63 if err := pager.Validate(); err != nil {
64 return err
65 }
66 _, err := db.ExecContext(ctx, `INSERT INTO metadata VALUES('complete',?)`, p.key)
67 return err
68 }
69
69 lines GO