tabby-ai-assistant 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/components/chat/ai-sidebar.component.d.ts +147 -0
  2. package/dist/components/chat/chat-interface.component.d.ts +38 -6
  3. package/dist/components/settings/general-settings.component.d.ts +6 -3
  4. package/dist/components/settings/provider-config.component.d.ts +25 -12
  5. package/dist/components/terminal/command-preview.component.d.ts +38 -0
  6. package/dist/index-full.d.ts +8 -0
  7. package/dist/index-minimal.d.ts +3 -0
  8. package/dist/index.d.ts +7 -3
  9. package/dist/index.js +1 -2
  10. package/dist/providers/tabby/ai-config.provider.d.ts +57 -5
  11. package/dist/providers/tabby/ai-hotkey.provider.d.ts +8 -14
  12. package/dist/providers/tabby/ai-toolbar-button.provider.d.ts +8 -9
  13. package/dist/services/chat/ai-sidebar.service.d.ts +89 -0
  14. package/dist/services/chat/chat-history.service.d.ts +78 -0
  15. package/dist/services/chat/chat-session.service.d.ts +57 -2
  16. package/dist/services/context/compaction.d.ts +90 -0
  17. package/dist/services/context/manager.d.ts +69 -0
  18. package/dist/services/context/memory.d.ts +116 -0
  19. package/dist/services/context/token-budget.d.ts +105 -0
  20. package/dist/services/core/ai-assistant.service.d.ts +40 -1
  21. package/dist/services/core/checkpoint.service.d.ts +130 -0
  22. package/dist/services/platform/escape-sequence.service.d.ts +132 -0
  23. package/dist/services/platform/platform-detection.service.d.ts +146 -0
  24. package/dist/services/providers/anthropic-provider.service.d.ts +5 -0
  25. package/dist/services/providers/base-provider.service.d.ts +6 -1
  26. package/dist/services/providers/glm-provider.service.d.ts +5 -0
  27. package/dist/services/providers/minimax-provider.service.d.ts +10 -1
  28. package/dist/services/providers/ollama-provider.service.d.ts +76 -0
  29. package/dist/services/providers/openai-compatible.service.d.ts +5 -0
  30. package/dist/services/providers/openai-provider.service.d.ts +5 -0
  31. package/dist/services/providers/vllm-provider.service.d.ts +82 -0
  32. package/dist/services/terminal/buffer-analyzer.service.d.ts +128 -0
  33. package/dist/services/terminal/terminal-manager.service.d.ts +185 -0
  34. package/dist/services/terminal/terminal-tools.service.d.ts +79 -0
  35. package/dist/types/ai.types.d.ts +92 -0
  36. package/dist/types/provider.types.d.ts +1 -1
  37. package/package.json +7 -10
  38. package/src/components/chat/ai-sidebar.component.ts +945 -0
  39. package/src/components/chat/chat-input.component.html +9 -24
  40. package/src/components/chat/chat-input.component.scss +3 -2
  41. package/src/components/chat/chat-interface.component.html +77 -69
  42. package/src/components/chat/chat-interface.component.scss +54 -4
  43. package/src/components/chat/chat-interface.component.ts +250 -34
  44. package/src/components/chat/chat-settings.component.scss +4 -4
  45. package/src/components/chat/chat-settings.component.ts +22 -11
  46. package/src/components/common/error-message.component.html +15 -0
  47. package/src/components/common/error-message.component.scss +77 -0
  48. package/src/components/common/error-message.component.ts +2 -96
  49. package/src/components/common/loading-spinner.component.html +4 -0
  50. package/src/components/common/loading-spinner.component.scss +57 -0
  51. package/src/components/common/loading-spinner.component.ts +2 -63
  52. package/src/components/security/consent-dialog.component.html +22 -0
  53. package/src/components/security/consent-dialog.component.scss +34 -0
  54. package/src/components/security/consent-dialog.component.ts +2 -55
  55. package/src/components/security/password-prompt.component.html +19 -0
  56. package/src/components/security/password-prompt.component.scss +30 -0
  57. package/src/components/security/password-prompt.component.ts +2 -54
  58. package/src/components/security/risk-confirm-dialog.component.html +8 -12
  59. package/src/components/security/risk-confirm-dialog.component.scss +8 -5
  60. package/src/components/security/risk-confirm-dialog.component.ts +6 -6
  61. package/src/components/settings/ai-settings-tab.component.html +16 -20
  62. package/src/components/settings/ai-settings-tab.component.scss +8 -5
  63. package/src/components/settings/ai-settings-tab.component.ts +12 -12
  64. package/src/components/settings/general-settings.component.html +8 -17
  65. package/src/components/settings/general-settings.component.scss +6 -3
  66. package/src/components/settings/general-settings.component.ts +62 -22
  67. package/src/components/settings/provider-config.component.html +19 -39
  68. package/src/components/settings/provider-config.component.scss +182 -39
  69. package/src/components/settings/provider-config.component.ts +119 -7
  70. package/src/components/settings/security-settings.component.scss +1 -1
  71. package/src/components/terminal/ai-toolbar-button.component.html +8 -0
  72. package/src/components/terminal/ai-toolbar-button.component.scss +20 -0
  73. package/src/components/terminal/ai-toolbar-button.component.ts +2 -30
  74. package/src/components/terminal/command-preview.component.html +61 -0
  75. package/src/components/terminal/command-preview.component.scss +72 -0
  76. package/src/components/terminal/command-preview.component.ts +127 -140
  77. package/src/components/terminal/command-suggestion.component.html +23 -0
  78. package/src/components/terminal/command-suggestion.component.scss +55 -0
  79. package/src/components/terminal/command-suggestion.component.ts +2 -77
  80. package/src/index-minimal.ts +32 -0
  81. package/src/index.ts +94 -11
  82. package/src/index.ts.backup +165 -0
  83. package/src/providers/tabby/ai-config.provider.ts +60 -51
  84. package/src/providers/tabby/ai-hotkey.provider.ts +23 -39
  85. package/src/providers/tabby/ai-settings-tab.provider.ts +2 -2
  86. package/src/providers/tabby/ai-toolbar-button.provider.ts +29 -24
  87. package/src/services/chat/ai-sidebar.service.ts +258 -0
  88. package/src/services/chat/chat-history.service.ts +308 -0
  89. package/src/services/chat/chat-history.service.ts.backup +239 -0
  90. package/src/services/chat/chat-session.service.ts +276 -3
  91. package/src/services/context/compaction.ts +483 -0
  92. package/src/services/context/manager.ts +442 -0
  93. package/src/services/context/memory.ts +519 -0
  94. package/src/services/context/token-budget.ts +422 -0
  95. package/src/services/core/ai-assistant.service.ts +280 -5
  96. package/src/services/core/ai-provider-manager.service.ts +2 -2
  97. package/src/services/core/checkpoint.service.ts +619 -0
  98. package/src/services/platform/escape-sequence.service.ts +499 -0
  99. package/src/services/platform/platform-detection.service.ts +494 -0
  100. package/src/services/providers/anthropic-provider.service.ts +28 -1
  101. package/src/services/providers/base-provider.service.ts +7 -1
  102. package/src/services/providers/glm-provider.service.ts +28 -1
  103. package/src/services/providers/minimax-provider.service.ts +209 -11
  104. package/src/services/providers/ollama-provider.service.ts +445 -0
  105. package/src/services/providers/openai-compatible.service.ts +9 -0
  106. package/src/services/providers/openai-provider.service.ts +9 -0
  107. package/src/services/providers/vllm-provider.service.ts +463 -0
  108. package/src/services/security/risk-assessment.service.ts +6 -2
  109. package/src/services/terminal/buffer-analyzer.service.ts +594 -0
  110. package/src/services/terminal/terminal-manager.service.ts +748 -0
  111. package/src/services/terminal/terminal-tools.service.ts +441 -0
  112. package/src/styles/ai-assistant.scss +78 -6
  113. package/src/types/ai.types.ts +144 -0
  114. package/src/types/provider.types.ts +1 -1
  115. package/tsconfig.json +9 -9
  116. package/webpack.config.js +28 -6
@@ -0,0 +1,76 @@
1
+ import { Observable } from 'rxjs';
2
+ import { BaseAiProvider } from './base-provider.service';
3
+ import { ProviderCapability, HealthStatus, ValidationResult } from '../../types/provider.types';
4
+ import { ChatRequest, ChatResponse, StreamEvent, CommandRequest, CommandResponse, ExplainRequest, ExplainResponse, AnalysisRequest, AnalysisResponse } from '../../types/ai.types';
5
+ import { LoggerService } from '../core/logger.service';
6
+ /**
7
+ * Ollama 本地 AI 提供商
8
+ * 兼容 OpenAI API 格式,默认端口 11434
9
+ */
10
+ export declare class OllamaProviderService extends BaseAiProvider {
11
+ readonly name = "ollama";
12
+ readonly displayName = "Ollama (\u672C\u5730)";
13
+ readonly capabilities: ProviderCapability[];
14
+ readonly authConfig: {
15
+ type: "none";
16
+ credentials: {};
17
+ };
18
+ constructor(logger: LoggerService);
19
+ protected getDefaultBaseURL(): string;
20
+ /**
21
+ * 非流式聊天
22
+ */
23
+ chat(request: ChatRequest): Promise<ChatResponse>;
24
+ /**
25
+ * 流式聊天
26
+ */
27
+ chatStream(request: ChatRequest): Observable<StreamEvent>;
28
+ /**
29
+ * 健康检查 - 检测 Ollama 服务是否运行
30
+ */
31
+ healthCheck(): Promise<HealthStatus>;
32
+ /**
33
+ * 验证配置 - 本地服务无需 API Key
34
+ */
35
+ validateConfig(): ValidationResult;
36
+ /**
37
+ * 生成命令
38
+ */
39
+ generateCommand(request: CommandRequest): Promise<CommandResponse>;
40
+ /**
41
+ * 解释命令
42
+ */
43
+ explainCommand(request: ExplainRequest): Promise<ExplainResponse>;
44
+ /**
45
+ * 分析结果
46
+ */
47
+ analyzeResult(request: AnalysisRequest): Promise<AnalysisResponse>;
48
+ /**
49
+ * 转换消息格式
50
+ */
51
+ protected transformMessages(messages: any[]): any[];
52
+ /**
53
+ * 构建命令生成提示
54
+ */
55
+ private buildCommandPrompt;
56
+ /**
57
+ * 构建命令解释提示
58
+ */
59
+ private buildExplainPrompt;
60
+ /**
61
+ * 构建结果分析提示
62
+ */
63
+ private buildAnalysisPrompt;
64
+ /**
65
+ * 解析命令响应
66
+ */
67
+ private parseCommandResponse;
68
+ /**
69
+ * 解析解释响应
70
+ */
71
+ private parseExplainResponse;
72
+ /**
73
+ * 解析分析响应
74
+ */
75
+ private parseAnalysisResponse;
76
+ }
@@ -1,3 +1,4 @@
1
+ import { Observable } from 'rxjs';
1
2
  import { BaseAiProvider } from './base-provider.service';
2
3
  import { ProviderCapability, HealthStatus, ValidationResult } from '../../types/provider.types';
3
4
  import { ChatRequest, ChatResponse, CommandRequest, CommandResponse, ExplainRequest, ExplainResponse, AnalysisRequest, AnalysisResponse } from '../../types/ai.types';
@@ -22,6 +23,10 @@ export declare class OpenAiCompatibleProviderService extends BaseAiProvider {
22
23
  configure(config: any): void;
23
24
  private initializeClient;
24
25
  chat(request: ChatRequest): Promise<ChatResponse>;
26
+ /**
27
+ * 流式聊天功能 - 暂未实现,回退到非流式
28
+ */
29
+ chatStream(request: ChatRequest): Observable<any>;
25
30
  generateCommand(request: CommandRequest): Promise<CommandResponse>;
26
31
  explainCommand(request: ExplainRequest): Promise<ExplainResponse>;
27
32
  analyzeResult(request: AnalysisRequest): Promise<AnalysisResponse>;
@@ -1,3 +1,4 @@
1
+ import { Observable } from 'rxjs';
1
2
  import { BaseAiProvider } from './base-provider.service';
2
3
  import { ProviderCapability, HealthStatus, ValidationResult } from '../../types/provider.types';
3
4
  import { ChatRequest, ChatResponse, CommandRequest, CommandResponse, ExplainRequest, ExplainResponse, AnalysisRequest, AnalysisResponse } from '../../types/ai.types';
@@ -21,6 +22,10 @@ export declare class OpenAiProviderService extends BaseAiProvider {
21
22
  configure(config: any): void;
22
23
  private initializeClient;
23
24
  chat(request: ChatRequest): Promise<ChatResponse>;
25
+ /**
26
+ * 流式聊天功能 - 暂未实现,回退到非流式
27
+ */
28
+ chatStream(request: ChatRequest): Observable<any>;
24
29
  generateCommand(request: CommandRequest): Promise<CommandResponse>;
25
30
  explainCommand(request: ExplainRequest): Promise<ExplainResponse>;
26
31
  analyzeResult(request: AnalysisRequest): Promise<AnalysisResponse>;
@@ -0,0 +1,82 @@
1
+ import { Observable } from 'rxjs';
2
+ import { BaseAiProvider } from './base-provider.service';
3
+ import { ProviderCapability, HealthStatus, ValidationResult } from '../../types/provider.types';
4
+ import { ChatRequest, ChatResponse, StreamEvent, CommandRequest, CommandResponse, ExplainRequest, ExplainResponse, AnalysisRequest, AnalysisResponse } from '../../types/ai.types';
5
+ import { LoggerService } from '../core/logger.service';
6
+ /**
7
+ * vLLM 本地 AI 提供商
8
+ * 兼容 OpenAI API 格式,默认端口 8000
9
+ */
10
+ export declare class VllmProviderService extends BaseAiProvider {
11
+ readonly name = "vllm";
12
+ readonly displayName = "vLLM (\u672C\u5730)";
13
+ readonly capabilities: ProviderCapability[];
14
+ readonly authConfig: {
15
+ type: "bearer";
16
+ credentials: {
17
+ apiKey: string;
18
+ };
19
+ };
20
+ constructor(logger: LoggerService);
21
+ protected getDefaultBaseURL(): string;
22
+ /**
23
+ * 获取认证头
24
+ */
25
+ protected getAuthHeaders(): Record<string, string>;
26
+ /**
27
+ * 非流式聊天
28
+ */
29
+ chat(request: ChatRequest): Promise<ChatResponse>;
30
+ /**
31
+ * 流式聊天
32
+ */
33
+ chatStream(request: ChatRequest): Observable<StreamEvent>;
34
+ /**
35
+ * 健康检查 - 检测 vLLM 服务是否运行
36
+ */
37
+ healthCheck(): Promise<HealthStatus>;
38
+ /**
39
+ * 验证配置
40
+ */
41
+ validateConfig(): ValidationResult;
42
+ /**
43
+ * 生成命令
44
+ */
45
+ generateCommand(request: CommandRequest): Promise<CommandResponse>;
46
+ /**
47
+ * 解释命令
48
+ */
49
+ explainCommand(request: ExplainRequest): Promise<ExplainResponse>;
50
+ /**
51
+ * 分析结果
52
+ */
53
+ analyzeResult(request: AnalysisRequest): Promise<AnalysisResponse>;
54
+ /**
55
+ * 转换消息格式
56
+ */
57
+ protected transformMessages(messages: any[]): any[];
58
+ /**
59
+ * 构建命令生成提示
60
+ */
61
+ private buildCommandPrompt;
62
+ /**
63
+ * 构建命令解释提示
64
+ */
65
+ private buildExplainPrompt;
66
+ /**
67
+ * 构建结果分析提示
68
+ */
69
+ private buildAnalysisPrompt;
70
+ /**
71
+ * 解析命令响应
72
+ */
73
+ private parseCommandResponse;
74
+ /**
75
+ * 解析解释响应
76
+ */
77
+ private parseExplainResponse;
78
+ /**
79
+ * 解析分析响应
80
+ */
81
+ private parseAnalysisResponse;
82
+ }
@@ -0,0 +1,128 @@
1
+ import { LoggerService } from '../core/logger.service';
2
+ /**
3
+ * 缓冲区分析结果
4
+ */
5
+ export interface BufferAnalysis {
6
+ totalLines: number;
7
+ totalCharacters: number;
8
+ commandCount: number;
9
+ errorCount: number;
10
+ warningCount: number;
11
+ filePaths: string[];
12
+ urls: string[];
13
+ commands: string[];
14
+ errors: string[];
15
+ warnings: string[];
16
+ outputType: 'command' | 'error' | 'success' | 'mixed';
17
+ complexity: 'low' | 'medium' | 'high';
18
+ language?: string;
19
+ }
20
+ /**
21
+ * 命令提取结果
22
+ */
23
+ export interface CommandExtraction {
24
+ commands: Array<{
25
+ command: string;
26
+ fullCommand: string;
27
+ arguments: string[];
28
+ lineNumber: number;
29
+ timestamp?: number;
30
+ success?: boolean;
31
+ output?: string;
32
+ }>;
33
+ lastCommand?: string;
34
+ commandHistory: string[];
35
+ }
36
+ /**
37
+ * 输出解析结果
38
+ */
39
+ export interface OutputParsing {
40
+ structuredData: any[];
41
+ keyValuePairs: Record<string, string>;
42
+ tables: Array<{
43
+ headers: string[];
44
+ rows: string[][];
45
+ }>;
46
+ lists: string[];
47
+ codeBlocks: Array<{
48
+ language?: string;
49
+ code: string;
50
+ }>;
51
+ }
52
+ /**
53
+ * 错误检测结果
54
+ */
55
+ export interface ErrorDetection {
56
+ errors: Array<{
57
+ type: 'syntax' | 'runtime' | 'permission' | 'network' | 'unknown';
58
+ message: string;
59
+ lineNumber?: number;
60
+ severity: 'low' | 'medium' | 'high' | 'critical';
61
+ suggestion?: string;
62
+ stackTrace?: string[];
63
+ }>;
64
+ warnings: Array<{
65
+ message: string;
66
+ lineNumber?: number;
67
+ severity: 'low' | 'medium' | 'high';
68
+ suggestion?: string;
69
+ }>;
70
+ overallStatus: 'success' | 'warning' | 'error' | 'unknown';
71
+ errorCount: number;
72
+ warningCount: number;
73
+ }
74
+ /**
75
+ * 缓冲区分析器
76
+ * 分析终端缓冲区内容,提取命令、错误、文件路径等信息
77
+ */
78
+ export declare class BufferAnalyzerService {
79
+ private logger;
80
+ private readonly COMMON_FILE_EXTENSIONS;
81
+ private readonly COMMON_COMMANDS;
82
+ private readonly ERROR_PATTERNS;
83
+ private readonly WARNING_PATTERNS;
84
+ constructor(logger: LoggerService);
85
+ /**
86
+ * 分析缓冲区内容
87
+ */
88
+ analyzeBuffer(buffer: string): BufferAnalysis;
89
+ /**
90
+ * 提取命令
91
+ */
92
+ extractCommand(buffer: string): CommandExtraction;
93
+ /**
94
+ * 解析输出
95
+ */
96
+ parseOutput(buffer: string): OutputParsing;
97
+ /**
98
+ * 检测错误
99
+ */
100
+ detectErrors(buffer: string | string[]): ErrorDetection;
101
+ /**
102
+ * 提取文件路径
103
+ */
104
+ extractFilePaths(buffer: string): string[];
105
+ /**
106
+ * 提取URL
107
+ */
108
+ extractUrls(buffer: string): string[];
109
+ /**
110
+ * 分析命令执行结果
111
+ */
112
+ analyzeCommandResult(command: string, output: string): {
113
+ success: boolean;
114
+ error?: string;
115
+ result?: any;
116
+ suggestions?: string[];
117
+ };
118
+ private parseCommand;
119
+ private extractCommands;
120
+ private calculateComplexity;
121
+ private detectLanguage;
122
+ private classifyError;
123
+ private determineSeverity;
124
+ private generateErrorSuggestion;
125
+ private generateWarningSuggestion;
126
+ private generateCommandSuggestions;
127
+ private isValidFilePath;
128
+ }
@@ -0,0 +1,185 @@
1
+ import { NgZone } from '@angular/core';
2
+ import { Observable, Subscription } from 'rxjs';
3
+ import { AppService } from 'tabby-core';
4
+ import { BaseTerminalTabComponent } from 'tabby-terminal';
5
+ import { LoggerService } from '../core/logger.service';
6
+ type TerminalTab = BaseTerminalTabComponent<any>;
7
+ /**
8
+ * 终端信息接口
9
+ */
10
+ export interface TerminalInfo {
11
+ id: string;
12
+ title: string;
13
+ isActive: boolean;
14
+ cwd?: string;
15
+ }
16
+ /**
17
+ * AI感知的终端上下文信息
18
+ */
19
+ export interface TerminalContext {
20
+ terminalId: string;
21
+ currentDirectory: string;
22
+ activeShell: string;
23
+ prompt: string;
24
+ lastCommand?: string;
25
+ processes: ProcessInfo[];
26
+ environment: Record<string, string>;
27
+ timestamp: number;
28
+ }
29
+ /**
30
+ * 进程信息
31
+ */
32
+ export interface ProcessInfo {
33
+ pid: number;
34
+ name: string;
35
+ command: string;
36
+ status: 'running' | 'sleeping' | 'stopped';
37
+ cpu?: number;
38
+ memory?: number;
39
+ }
40
+ /**
41
+ * 终端输出事件
42
+ */
43
+ export interface TerminalOutputEvent {
44
+ terminalId: string;
45
+ data: string;
46
+ timestamp: number;
47
+ type: 'output' | 'command' | 'error' | 'prompt';
48
+ }
49
+ /**
50
+ * 终端管理服务
51
+ * 封装 Tabby 终端 API,提供读取、写入和管理终端的能力
52
+ */
53
+ export declare class TerminalManagerService {
54
+ private app;
55
+ private logger;
56
+ private zone;
57
+ private outputSubscriptions;
58
+ private outputSubject;
59
+ private terminalChangeSubject;
60
+ private contextCache;
61
+ private outputEventSubject;
62
+ private processMonitoringSubject;
63
+ private promptDetectionSubject;
64
+ private monitoringIntervals;
65
+ outputEvent$: Observable<TerminalOutputEvent>;
66
+ processMonitoring$: Observable<{
67
+ terminalId: string;
68
+ processes: ProcessInfo[];
69
+ }>;
70
+ promptDetection$: Observable<{
71
+ terminalId: string;
72
+ prompt: string;
73
+ }>;
74
+ constructor(app: AppService, logger: LoggerService, zone: NgZone);
75
+ /**
76
+ * 获取当前活动终端
77
+ * 注意:Tabby 将终端包装在 SplitTabComponent 中
78
+ */
79
+ getActiveTerminal(): TerminalTab | null;
80
+ /**
81
+ * 获取所有终端标签
82
+ * 注意:Tabby 将终端包装在 SplitTabComponent 中
83
+ */
84
+ getAllTerminals(): TerminalTab[];
85
+ /**
86
+ * 获取所有终端信息
87
+ */
88
+ getAllTerminalInfo(): TerminalInfo[];
89
+ /**
90
+ * 向当前终端发送命令
91
+ */
92
+ sendCommand(command: string, execute?: boolean): boolean;
93
+ /**
94
+ * 向指定终端发送命令
95
+ */
96
+ sendCommandToTerminal(terminal: TerminalTab, command: string, execute?: boolean): boolean;
97
+ /**
98
+ * 向指定索引的终端发送命令
99
+ */
100
+ sendCommandToIndex(index: number, command: string, execute?: boolean): boolean;
101
+ /**
102
+ * 获取当前终端的选中文本
103
+ */
104
+ getSelection(): string;
105
+ /**
106
+ * 获取终端工作目录
107
+ */
108
+ getTerminalCwd(terminal?: TerminalTab): string | undefined;
109
+ /**
110
+ * 切换到指定终端
111
+ * 修复:需要选择顶层 Tab (SplitTabComponent),而非内部终端
112
+ */
113
+ focusTerminal(index: number): boolean;
114
+ /**
115
+ * 订阅当前终端输出
116
+ */
117
+ subscribeToActiveTerminalOutput(callback: (data: string) => void): Subscription | null;
118
+ /**
119
+ * 订阅指定终端输出
120
+ */
121
+ subscribeToTerminalOutput(terminal: TerminalTab, callback: (data: string) => void): Subscription;
122
+ /**
123
+ * 获取终端变化事件流
124
+ */
125
+ onTerminalChange(): Observable<void>;
126
+ /**
127
+ * 获取终端数量
128
+ */
129
+ getTerminalCount(): number;
130
+ /**
131
+ * 检查是否有可用终端
132
+ */
133
+ hasTerminal(): boolean;
134
+ /**
135
+ * 检查标签页是否是终端
136
+ * 使用特征检测避免 instanceof 在 webpack 打包后失效
137
+ */
138
+ private isTerminalTab;
139
+ /**
140
+ * 清理资源
141
+ */
142
+ dispose(): void;
143
+ /**
144
+ * 检测当前目录
145
+ */
146
+ detectCurrentDirectory(terminal?: TerminalTab): Promise<string>;
147
+ /**
148
+ * 获取活跃Shell
149
+ */
150
+ getActiveShell(terminal?: TerminalTab): Promise<string>;
151
+ /**
152
+ * 监控输出流
153
+ */
154
+ monitorOutput(terminal?: TerminalTab): Observable<TerminalOutputEvent>;
155
+ /**
156
+ * 检测提示符
157
+ */
158
+ getPrompt(terminal?: TerminalTab): Promise<string>;
159
+ /**
160
+ * 追踪进程
161
+ */
162
+ trackProcesses(terminal?: TerminalTab): Promise<ProcessInfo[]>;
163
+ /**
164
+ * 获取终端AI上下文
165
+ */
166
+ getTerminalContext(terminal?: TerminalTab): Promise<TerminalContext>;
167
+ /**
168
+ * 清理终端上下文缓存
169
+ */
170
+ clearContextCache(terminalId?: string): void;
171
+ /**
172
+ * 开始持续监控终端
173
+ */
174
+ startContinuousMonitoring(intervalMs?: number): void;
175
+ /**
176
+ * 停止持续监控
177
+ */
178
+ stopContinuousMonitoring(terminalId?: string): void;
179
+ private getTerminalId;
180
+ private detectOutputType;
181
+ private formatPrompt;
182
+ private extractCommandOutput;
183
+ private filterEnvVariables;
184
+ }
185
+ export {};
@@ -0,0 +1,79 @@
1
+ import { TerminalManagerService } from './terminal-manager.service';
2
+ import { LoggerService } from '../core/logger.service';
3
+ /**
4
+ * 终端工具定义
5
+ */
6
+ export interface ToolDefinition {
7
+ name: string;
8
+ description: string;
9
+ input_schema: {
10
+ type: string;
11
+ properties: Record<string, any>;
12
+ required?: string[];
13
+ };
14
+ }
15
+ /**
16
+ * 工具调用请求
17
+ */
18
+ export interface ToolCall {
19
+ id: string;
20
+ name: string;
21
+ input: Record<string, any>;
22
+ }
23
+ /**
24
+ * 工具调用结果
25
+ */
26
+ export interface ToolResult {
27
+ tool_use_id: string;
28
+ content: string;
29
+ is_error?: boolean;
30
+ }
31
+ /**
32
+ * 终端工具服务
33
+ * 定义 AI 可调用的终端相关工具
34
+ */
35
+ export declare class TerminalToolsService {
36
+ private terminalManager;
37
+ private logger;
38
+ private tools;
39
+ private outputBuffer;
40
+ private maxBufferLines;
41
+ constructor(terminalManager: TerminalManagerService, logger: LoggerService);
42
+ /**
43
+ * 获取所有工具定义
44
+ */
45
+ getToolDefinitions(): ToolDefinition[];
46
+ /**
47
+ * 执行工具调用
48
+ */
49
+ executeToolCall(toolCall: ToolCall): Promise<ToolResult>;
50
+ /**
51
+ * 从 xterm buffer 读取内容
52
+ * 包含详细调试日志以定位白屏问题
53
+ */
54
+ private readFromXtermBuffer;
55
+ /**
56
+ * 读取终端输出
57
+ */
58
+ private readTerminalOutput;
59
+ /**
60
+ * 写入终端 - 带执行反馈
61
+ */
62
+ private writeToTerminal;
63
+ /**
64
+ * 获取终端列表
65
+ */
66
+ private getTerminalList;
67
+ /**
68
+ * 获取终端工作目录
69
+ */
70
+ private getTerminalCwd;
71
+ /**
72
+ * 获取终端选中文本
73
+ */
74
+ private getTerminalSelection;
75
+ /**
76
+ * 切换终端焦点
77
+ */
78
+ private focusTerminal;
79
+ }
@@ -20,6 +20,8 @@ export interface ChatRequest {
20
20
  temperature?: number;
21
21
  stream?: boolean;
22
22
  model?: string;
23
+ tools?: any[];
24
+ enableTools?: boolean;
23
25
  }
24
26
  export interface ChatResponse {
25
27
  message: ChatMessage;
@@ -105,3 +107,93 @@ export interface ValidationResult {
105
107
  errors?: string[];
106
108
  warnings?: string[];
107
109
  }
110
+ export interface ApiMessage {
111
+ role: 'user' | 'assistant' | 'system';
112
+ content: string | ContentBlock[];
113
+ ts: number;
114
+ isSummary?: boolean;
115
+ condenseId?: string;
116
+ condenseParent?: string;
117
+ isTruncationMarker?: boolean;
118
+ truncationId?: string;
119
+ truncationParent?: string;
120
+ }
121
+ export interface ContentBlock {
122
+ type: 'text' | 'tool_use' | 'tool_result';
123
+ text?: string;
124
+ id?: string;
125
+ name?: string;
126
+ input?: Record<string, any>;
127
+ tool_use_id?: string;
128
+ content?: string;
129
+ }
130
+ export interface TokenUsage {
131
+ input: number;
132
+ output: number;
133
+ cacheRead: number;
134
+ cacheWrite: number;
135
+ }
136
+ export interface SessionState {
137
+ id: string;
138
+ messages: ApiMessage[];
139
+ tokens: TokenUsage;
140
+ createdAt: number;
141
+ updatedAt: number;
142
+ checkpoints: string[];
143
+ }
144
+ export interface ContextConfig {
145
+ maxContextTokens: number;
146
+ reservedOutputTokens: number;
147
+ compactThreshold: number;
148
+ pruneThreshold: number;
149
+ messagesToKeep: number;
150
+ bufferPercentage: number;
151
+ }
152
+ export declare const DEFAULT_CONTEXT_CONFIG: ContextConfig;
153
+ export interface CompactionResult {
154
+ success: boolean;
155
+ messages: ApiMessage[];
156
+ summary?: string;
157
+ condenseId?: string;
158
+ tokensSaved: number;
159
+ cost: number;
160
+ error?: string;
161
+ }
162
+ export interface PruneResult {
163
+ pruned: boolean;
164
+ tokensSaved: number;
165
+ partsCompacted: number;
166
+ }
167
+ export interface TruncationResult {
168
+ messages: ApiMessage[];
169
+ truncationId: string;
170
+ messagesRemoved: number;
171
+ }
172
+ export interface ExtendedChatMessage extends ChatMessage {
173
+ isSummary?: boolean;
174
+ condenseId?: string;
175
+ condenseParent?: string;
176
+ isTruncationMarker?: boolean;
177
+ truncationId?: string;
178
+ truncationParent?: string;
179
+ tokenUsage?: TokenUsage;
180
+ }
181
+ export interface Checkpoint {
182
+ id: string;
183
+ sessionId: string;
184
+ messages: ApiMessage[];
185
+ summary: string;
186
+ createdAt: number;
187
+ tokenUsage: TokenUsage;
188
+ }
189
+ export interface StreamEvent {
190
+ type: 'text_delta' | 'tool_use_start' | 'tool_use_delta' | 'tool_use_end' | 'message_end' | 'error';
191
+ textDelta?: string;
192
+ toolCall?: {
193
+ id: string;
194
+ name: string;
195
+ input: any;
196
+ };
197
+ error?: string;
198
+ message?: ChatMessage;
199
+ }
@@ -6,7 +6,7 @@ import { ChatRequest, ChatResponse, CommandRequest, CommandResponse, ExplainRequ
6
6
  export { ProviderCapability, HealthStatus, ValidationResult };
7
7
  export { ChatRequest, ChatResponse, CommandRequest, CommandResponse, ExplainRequest, ExplainResponse, AnalysisRequest, AnalysisResponse };
8
8
  export interface AuthConfig {
9
- type: 'apiKey' | 'bearer' | 'basic' | 'oauth';
9
+ type: 'apiKey' | 'bearer' | 'basic' | 'oauth' | 'none';
10
10
  credentials: Record<string, string>;
11
11
  requiresEncryption?: boolean;
12
12
  }