ax_rd
3 hours ago 62a9f6223745c0df42be1f4226f31dfb10c83ea8
cmd/index.go
@@ -17,21 +17,27 @@
   Short: "索引管理",
}
// forceRebuild index build 的 --force flag:全量重建索引
var forceRebuild bool
var indexBuildCmd = &cobra.Command{
   Use:   "build",
   Short: "构建或重建知识库索引",
   Long:  `kb-cli index build [--vault <路径>] [--db <路径>] [--force] # 构建或重建知识库索引(默认增量对账,--force 全量重建)`,
   RunE:  runIndexBuild,
}
var indexStatusCmd = &cobra.Command{
   Use:   "status",
   Short: "查看索引状态信息",
   Long:  `kb-cli index status [--vault <路径>] [--db <路径>] # 查看索引状态(节点数、边数、commit、构建时间)`,
   RunE:  runIndexStatus,
}
var indexGcCmd = &cobra.Command{
   Use:   "gc",
   Short: "清理孤立节点和边",
   Long:  `kb-cli index gc [--vault <路径>] [--db <路径>] # 清理索引中文件已删除的孤立节点和边`,
   RunE:  runIndexGc,
}
@@ -43,6 +49,7 @@
var gitSyncCmd = &cobra.Command{
   Use:   "sync",
   Short: "同步知识库到 Git 仓库",
   Long:  `kb-cli git sync [--vault <路径>] # 执行 git add、commit、push 同步知识库`,
   RunE:  runGitSync,
}
@@ -51,6 +58,7 @@
   indexCmd.AddCommand(indexBuildCmd)
   indexCmd.AddCommand(indexStatusCmd)
   indexCmd.AddCommand(indexGcCmd)
   indexBuildCmd.Flags().BoolVar(&forceRebuild, "force", false, "全量重建索引(默认走增量对账)")
   
   rootCmd.AddCommand(gitCmd)
   gitCmd.AddCommand(gitSyncCmd)
@@ -64,19 +72,26 @@
   }
   defer store.Close()
   // 获取当前 commit
   commit, err := index.GetGitCommit(vaultPath)
   if err != nil {
      fmt.Fprintln(os.Stderr, "警告: 无法获取 git commit:", err)
      commit = ""
   if forceRebuild {
      // 全量重建
      commit, err := index.GetGitCommit(vaultPath)
      if err != nil {
         fmt.Fprintln(os.Stderr, "警告: 无法获取 git commit:", err)
         commit = ""
      }
      fmt.Fprintln(os.Stderr, "正在全量重建索引...")
      if err := rebuildFull(store, commit); err != nil {
         return fmt.Errorf("重建索引失败: %w", err)
      }
      fmt.Fprintln(os.Stderr, "索引重建完成")
      return nil
   }
   fmt.Fprintln(os.Stderr, "正在重建索引...")
   if err := rebuildIndex(store, commit); err != nil {
      return fmt.Errorf("重建索引失败: %w", err)
   // 默认走增量对账
   if err := syncIndex(store); err != nil {
      return fmt.Errorf("增量同步失败: %w", err)
   }
   fmt.Fprintln(os.Stderr, "索引重建完成")
   fmt.Fprintln(os.Stderr, "索引同步完成")
   return nil
}
@@ -123,14 +138,14 @@
   fmt.Printf("  当前 commit: %s\n", currentCommit)
   fmt.Printf("  构建时间: %s\n", builtAt)
   // 检查是否需要更新
   needsRebuild, _, err := index.NeedsRebuild(store, vaultPath)
   // 检查是否有变更(stat 快速比对)
   dirty, err := index.QuickCheck(store, vaultPath)
   if err != nil {
      return fmt.Errorf("检查索引状态失败: %w", err)
   }
   if needsRebuild {
      fmt.Printf("  状态: 需要更新\n")
   if dirty {
      fmt.Printf("  状态: 有变更\n")
   } else {
      fmt.Printf("  状态: 最新\n")
   }