internal/index/sqlite.go
@@ -287,6 +287,24 @@
   return links, nil
}
// GetUnresolvedLinks 某文档的悬空链接文本列表
func (s *Store) GetUnresolvedLinks(path string) ([]string, error) {
   rows, err := s.db.Query(`
      SELECT u.link_text FROM unresolved_links u
      JOIN nodes n ON n.id = u.from_node WHERE n.path = ?`, path)
   if err != nil {
      return nil, err
   }
   defer rows.Close()
   var links []string
   for rows.Next() {
      var l string
      rows.Scan(&l)
      links = append(links, l)
   }
   return links, rows.Err()
}
// NodeInfo 节点基本信息(用于 GC)
type NodeInfo struct {
   ID   int64
@@ -464,7 +482,7 @@
         visited[id] = true
         query := `
            SELECT id, from_node, to_node, relation, label
            SELECT id, from_node, to_node, relation, label, provenance
            FROM edges
            WHERE from_node = ?
         `
@@ -483,7 +501,7 @@
         for rows.Next() {
            var e graph.Edge
            var edgeID int64
            if err := rows.Scan(&edgeID, &e.FromNode, &e.ToNode, &e.Relation, &e.Label); err != nil {
            if err := rows.Scan(&edgeID, &e.FromNode, &e.ToNode, &e.Relation, &e.Label, &e.Provenance); err != nil {
               rows.Close()
               return nil, fmt.Errorf("扫描边失败: %w", err)
            }