@@ -26,6 +26,7 @@ export class UpdateCommand extends BaseCommand {
2626 private readmeService : ReadmeService
2727 private noteService : NoteService
2828 private quiet : boolean = false
29+ private updateAll : boolean = false
2930
3031 constructor ( ) {
3132 super ( 'update' , '根据笔记内容更新知识库' )
@@ -46,7 +47,25 @@ export class UpdateCommand extends BaseCommand {
4647 }
4748 }
4849
50+ /**
51+ * 设置是否更新所有知识库
52+ */
53+ setUpdateAll ( updateAll : boolean ) : void {
54+ this . updateAll = updateAll
55+ }
56+
4957 protected async run ( ) : Promise < void > {
58+ if ( this . updateAll ) {
59+ await this . updateAllRepos ( )
60+ } else {
61+ await this . updateCurrentRepo ( )
62+ }
63+ }
64+
65+ /**
66+ * 更新当前知识库
67+ */
68+ private async updateCurrentRepo ( ) : Promise < void > {
5069 const startTime = Date . now ( )
5170
5271 // 先修正所有笔记的标题
@@ -77,6 +96,77 @@ export class UpdateCommand extends BaseCommand {
7796 }
7897 }
7998
99+ /**
100+ * 更新所有知识库
101+ */
102+ private async updateAllRepos ( ) : Promise < void > {
103+ const { getTargetDirs } = await import ( '../../utils' )
104+ const { EN_WORDS_DIR } = await import ( '../../config/constants' )
105+ const { runCommand } = await import ( '../../utils/runCommand' )
106+
107+ try {
108+ // 获取所有目标知识库
109+ const targetDirs = getTargetDirs ( TNOTES_BASE_DIR , 'TNotes.' , [
110+ ROOT_DIR_PATH ,
111+ EN_WORDS_DIR ,
112+ ] )
113+
114+ if ( targetDirs . length === 0 ) {
115+ this . logger . warn ( '未找到符合条件的知识库' )
116+ return
117+ }
118+
119+ this . logger . info ( `正在更新 ${ targetDirs . length } 个知识库...` )
120+
121+ // 依次更新每个知识库
122+ let successCount = 0
123+ let failCount = 0
124+
125+ for ( let i = 0 ; i < targetDirs . length ; i ++ ) {
126+ const dir = targetDirs [ i ]
127+ const repoName = dir . split ( '/' ) . pop ( ) || dir
128+
129+ try {
130+ process . stdout . write (
131+ `\r [${ i + 1 } /${ targetDirs . length } ] 正在更新: ${ repoName } ...`
132+ )
133+
134+ // 执行更新命令
135+ await runCommand ( 'pnpm tn:update --quiet' , dir )
136+ successCount ++
137+ } catch ( error ) {
138+ failCount ++
139+ console . log ( ) // 换行
140+ this . logger . error (
141+ `更新失败: ${ repoName } - ${
142+ error instanceof Error ? error . message : String ( error )
143+ } `
144+ )
145+ }
146+ }
147+
148+ console . log ( ) // 换行
149+
150+ // 显示汇总
151+ if ( failCount === 0 ) {
152+ this . logger . success (
153+ `✅ 所有知识库更新完成: ${ successCount } /${ targetDirs . length } `
154+ )
155+ } else {
156+ this . logger . warn (
157+ `⚠️ 更新完成: ${ successCount } 成功, ${ failCount } 失败 (共 ${ targetDirs . length } 个)`
158+ )
159+ }
160+ } catch ( error ) {
161+ this . logger . error (
162+ `批量更新失败: ${
163+ error instanceof Error ? error . message : String ( error )
164+ } `
165+ )
166+ throw error
167+ }
168+ }
169+
80170 /**
81171 * 更新 root_item 配置
82172 */
0 commit comments