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,105 @@
1
+ import { LoggerService } from '../core/logger.service';
2
+ import { ContextConfig, TokenUsage } from '../../types/ai.types';
3
+ /**
4
+ * 预算分配策略
5
+ */
6
+ export interface BudgetAllocation {
7
+ context: number;
8
+ reserved: number;
9
+ buffer: number;
10
+ available: number;
11
+ }
12
+ /**
13
+ * 预算使用情况
14
+ */
15
+ export interface BudgetUsage {
16
+ current: TokenUsage;
17
+ allocated: BudgetAllocation;
18
+ utilizationRate: number;
19
+ projectedUsage: number;
20
+ remaining: number;
21
+ warnings: string[];
22
+ }
23
+ /**
24
+ * 预算策略配置
25
+ */
26
+ export interface BudgetStrategy {
27
+ conservative: boolean;
28
+ aggressive: boolean;
29
+ adaptive: boolean;
30
+ dynamic: boolean;
31
+ }
32
+ /**
33
+ * Token预算管理器
34
+ * 负责动态分配和管理Token预算
35
+ */
36
+ export declare class TokenBudget {
37
+ private logger;
38
+ private config;
39
+ private currentUsage;
40
+ private usageHistory;
41
+ private strategy;
42
+ constructor(logger: LoggerService, config?: ContextConfig);
43
+ /**
44
+ * 计算预算分配
45
+ */
46
+ calculateBudget(): BudgetAllocation;
47
+ /**
48
+ * 检查预算阈值
49
+ */
50
+ checkThresholds(usage?: TokenUsage): {
51
+ shouldPrune: boolean;
52
+ shouldCompact: boolean;
53
+ shouldTruncate: boolean;
54
+ urgency: 'low' | 'medium' | 'high' | 'critical';
55
+ };
56
+ /**
57
+ * 分配Token
58
+ */
59
+ allocateTokens(type: 'input' | 'output' | 'cache_read' | 'cache_write', amount: number, sessionId?: string): boolean;
60
+ /**
61
+ * 追踪使用量
62
+ */
63
+ trackUsage(usage: TokenUsage): void;
64
+ /**
65
+ * 获取预算使用情况
66
+ */
67
+ getBudgetUsage(): BudgetUsage;
68
+ /**
69
+ * 预估未来使用量
70
+ */
71
+ projectUsage(horizon?: number): number;
72
+ /**
73
+ * 重置预算
74
+ */
75
+ reset(sessionId?: string): void;
76
+ /**
77
+ * 更新策略
78
+ */
79
+ updateStrategy(strategy: Partial<BudgetStrategy>): void;
80
+ /**
81
+ * 获取策略
82
+ */
83
+ getStrategy(): BudgetStrategy;
84
+ /**
85
+ * 更新配置
86
+ */
87
+ updateConfig(config: Partial<ContextConfig>): void;
88
+ /**
89
+ * 获取配置
90
+ */
91
+ getConfig(): ContextConfig;
92
+ /**
93
+ * 估算消息Token成本
94
+ */
95
+ estimateMessageCost(message: string, role: 'user' | 'assistant' | 'system'): number;
96
+ /**
97
+ * 优化预算分配
98
+ */
99
+ optimizeAllocation(): BudgetAllocation;
100
+ private updateUsage;
101
+ private getAverageUsage;
102
+ private calculateUsageVariation;
103
+ private calculateAverageGrowth;
104
+ private adjustStrategy;
105
+ }
@@ -1,22 +1,61 @@
1
+ import { Observable } from 'rxjs';
1
2
  import { ChatRequest, ChatResponse, CommandRequest, CommandResponse, ExplainRequest, ExplainResponse } from '../../types/ai.types';
2
3
  import { AiProviderManagerService } from './ai-provider-manager.service';
3
4
  import { ConfigProviderService } from './config-provider.service';
4
5
  import { TerminalContextService } from '../terminal/terminal-context.service';
6
+ import { TerminalToolsService } from '../terminal/terminal-tools.service';
5
7
  import { LoggerService } from './logger.service';
8
+ import { OpenAiProviderService } from '../providers/openai-provider.service';
9
+ import { AnthropicProviderService } from '../providers/anthropic-provider.service';
10
+ import { MinimaxProviderService } from '../providers/minimax-provider.service';
11
+ import { GlmProviderService } from '../providers/glm-provider.service';
12
+ import { OpenAiCompatibleProviderService } from '../providers/openai-compatible.service';
13
+ import { OllamaProviderService } from '../providers/ollama-provider.service';
14
+ import { VllmProviderService } from '../providers/vllm-provider.service';
6
15
  export declare class AiAssistantService {
7
16
  private providerManager;
8
17
  private config;
9
18
  private terminalContext;
19
+ private terminalTools;
10
20
  private logger;
11
- constructor(providerManager: AiProviderManagerService, config: ConfigProviderService, terminalContext: TerminalContextService, logger: LoggerService);
21
+ private openaiProvider;
22
+ private anthropicProvider;
23
+ private minimaxProvider;
24
+ private glmProvider;
25
+ private openaiCompatibleProvider;
26
+ private ollamaProvider;
27
+ private vllmProvider;
28
+ private providerMapping;
29
+ constructor(providerManager: AiProviderManagerService, config: ConfigProviderService, terminalContext: TerminalContextService, terminalTools: TerminalToolsService, logger: LoggerService, openaiProvider: OpenAiProviderService, anthropicProvider: AnthropicProviderService, minimaxProvider: MinimaxProviderService, glmProvider: GlmProviderService, openaiCompatibleProvider: OpenAiCompatibleProviderService, ollamaProvider: OllamaProviderService, vllmProvider: VllmProviderService);
30
+ /**
31
+ * 构建提供商映射表
32
+ */
33
+ private buildProviderMapping;
12
34
  /**
13
35
  * 初始化AI助手
14
36
  */
15
37
  initialize(): void;
38
+ /**
39
+ * 注册并配置所有提供商
40
+ */
41
+ private registerAllProviders;
16
42
  /**
17
43
  * 聊天功能
18
44
  */
19
45
  chat(request: ChatRequest): Promise<ChatResponse>;
46
+ /**
47
+ * 流式聊天功能
48
+ */
49
+ chatStream(request: ChatRequest): Observable<any>;
50
+ /**
51
+ * 执行工具调用(不阻塞流)
52
+ */
53
+ private executeToolAndContinue;
54
+ /**
55
+ * 处理工具调用
56
+ * @param maxDepth 最大递归深度,避免无限循环
57
+ */
58
+ private handleToolCalls;
20
59
  /**
21
60
  * 生成命令
22
61
  */
@@ -0,0 +1,130 @@
1
+ import { Observable } from 'rxjs';
2
+ import { LoggerService } from './logger.service';
3
+ import { ChatHistoryService } from '../chat/chat-history.service';
4
+ import { Checkpoint, ApiMessage } from '../../types/ai.types';
5
+ /**
6
+ * 检查点状态
7
+ */
8
+ export declare enum CheckpointStatus {
9
+ ACTIVE = "active",
10
+ ARCHIVED = "archived",
11
+ COMPRESSED = "compressed",
12
+ CORRUPTED = "corrupted"
13
+ }
14
+ /**
15
+ * 检查点过滤器
16
+ */
17
+ export interface CheckpointFilter {
18
+ sessionId?: string;
19
+ status?: CheckpointStatus;
20
+ dateFrom?: Date;
21
+ dateTo?: Date;
22
+ tags?: string[];
23
+ }
24
+ /**
25
+ * 检查点搜索结果
26
+ */
27
+ export interface CheckpointSearchResult {
28
+ checkpoint: Checkpoint;
29
+ relevanceScore: number;
30
+ matchedFields: string[];
31
+ }
32
+ /**
33
+ * 检查点统计
34
+ */
35
+ export interface CheckpointStatistics {
36
+ totalCheckpoints: number;
37
+ activeCheckpoints: number;
38
+ archivedCheckpoints: number;
39
+ compressedCheckpoints: number;
40
+ averageMessagesPerCheckpoint: number;
41
+ totalTokenUsage: number;
42
+ oldestCheckpoint?: Date;
43
+ newestCheckpoint?: Date;
44
+ mostActiveSession?: string;
45
+ }
46
+ /**
47
+ * 检查点管理器
48
+ * 负责检查点的创建、恢复、归档和清理
49
+ */
50
+ export declare class CheckpointManager {
51
+ private logger;
52
+ private chatHistoryService;
53
+ private checkpointsSubject;
54
+ checkpoints$: Observable<Checkpoint[]>;
55
+ private readonly MAX_CHECKPOINTS_PER_SESSION;
56
+ private readonly AUTO_CLEANUP_DAYS;
57
+ private readonly COMPRESSION_THRESHOLD;
58
+ constructor(logger: LoggerService, chatHistoryService: ChatHistoryService);
59
+ /**
60
+ * 创建检查点
61
+ */
62
+ create(sessionId: string, messages: ApiMessage[], summary?: string, metadata?: Partial<Checkpoint>): Checkpoint;
63
+ /**
64
+ * 恢复检查点
65
+ */
66
+ restore(checkpointId: string): ApiMessage[];
67
+ /**
68
+ * 获取检查点
69
+ */
70
+ getCheckpoint(checkpointId: string): Checkpoint | undefined;
71
+ /**
72
+ * 列出检查点
73
+ */
74
+ listBySession(sessionId: string, filter?: CheckpointFilter): Checkpoint[];
75
+ /**
76
+ * 搜索检查点
77
+ */
78
+ search(query: string, filter?: CheckpointFilter): CheckpointSearchResult[];
79
+ /**
80
+ * 归档检查点
81
+ */
82
+ archive(checkpointId: string): void;
83
+ /**
84
+ * 删除检查点
85
+ */
86
+ delete(checkpointId: string): void;
87
+ /**
88
+ * 压缩存储检查点
89
+ */
90
+ compressForCheckpoint(checkpointId: string): Promise<Checkpoint>;
91
+ /**
92
+ * 清理孤儿检查点
93
+ */
94
+ cleanupOrphaned(): number;
95
+ /**
96
+ * 自动清理过期检查点
97
+ */
98
+ autoCleanup(): number;
99
+ /**
100
+ * 获取统计信息
101
+ */
102
+ getStatistics(): CheckpointStatistics;
103
+ /**
104
+ * 导出检查点
105
+ */
106
+ exportCheckpoint(checkpointId: string): string;
107
+ /**
108
+ * 导入检查点
109
+ */
110
+ importCheckpoint(data: string): Checkpoint;
111
+ /**
112
+ * 比较检查点
113
+ */
114
+ compare(checkpointId1: string, checkpointId2: string): {
115
+ messageDiff: number;
116
+ tokenDiff: number;
117
+ timeDiff: number;
118
+ summaryDiff: string;
119
+ };
120
+ private generateCheckpointId;
121
+ private calculateTokenUsage;
122
+ private generateSummary;
123
+ private applyFilter;
124
+ private validateCheckpoint;
125
+ private enforceSessionLimit;
126
+ private saveCheckpoint;
127
+ private removeFromStorage;
128
+ private updateCheckpoint;
129
+ private loadCheckpoints;
130
+ }
@@ -0,0 +1,132 @@
1
+ import { LoggerService } from '../core/logger.service';
2
+ import { PlatformDetectionService, OSType } from './platform-detection.service';
3
+ /**
4
+ * 转义序列类型
5
+ */
6
+ export declare enum EscapeSequenceType {
7
+ COLOR = "color",
8
+ CURSOR = "cursor",
9
+ CLEAR = "clear",
10
+ STYLE = "style",
11
+ SCROLL = "scroll",
12
+ TITLE = "title",
13
+ BELL = "bell"
14
+ }
15
+ /**
16
+ * 颜色代码
17
+ */
18
+ export interface ColorCode {
19
+ foreground?: string;
20
+ background?: string;
21
+ bright?: boolean;
22
+ }
23
+ /**
24
+ * 光标控制
25
+ */
26
+ export interface CursorControl {
27
+ position?: {
28
+ x: number;
29
+ y: number;
30
+ };
31
+ visible?: boolean;
32
+ save?: boolean;
33
+ restore?: boolean;
34
+ up?: number;
35
+ down?: number;
36
+ forward?: number;
37
+ backward?: number;
38
+ }
39
+ /**
40
+ * 清屏选项
41
+ */
42
+ export interface ClearOptions {
43
+ screen?: boolean;
44
+ line?: boolean;
45
+ fromCursor?: boolean;
46
+ toCursor?: boolean;
47
+ }
48
+ /**
49
+ * 转义序列映射
50
+ */
51
+ export interface EscapeSequenceMapping {
52
+ linux: string;
53
+ windows: string;
54
+ macos: string;
55
+ }
56
+ /**
57
+ * 转义序列服务
58
+ * 处理跨平台的ANSI转义序列和终端控制代码
59
+ */
60
+ export declare class EscapeSequenceService {
61
+ private logger;
62
+ private platformDetection;
63
+ private platformInfo;
64
+ private readonly COLOR_CODES;
65
+ private readonly STYLE_CODES;
66
+ private readonly CURSOR_CODES;
67
+ private readonly CLEAR_CODES;
68
+ constructor(logger: LoggerService, platformDetection: PlatformDetectionService);
69
+ /**
70
+ * 映射颜色代码
71
+ */
72
+ mapColorCode(color: string): string;
73
+ /**
74
+ * 映射光标控制
75
+ */
76
+ mapCursorControl(control: string, value?: number): string;
77
+ /**
78
+ * 映射清屏序列
79
+ */
80
+ mapClearSequence(options: ClearOptions): string;
81
+ /**
82
+ * 映射样式代码
83
+ */
84
+ mapStyleCode(style: string): string;
85
+ /**
86
+ * 生成颜色文本
87
+ */
88
+ colorize(text: string, color: ColorCode): string;
89
+ /**
90
+ * 生成样式文本
91
+ */
92
+ stylize(text: string, styles: string[]): string;
93
+ /**
94
+ * 移动光标
95
+ */
96
+ moveCursor(control: CursorControl): string;
97
+ /**
98
+ * 清屏
99
+ */
100
+ clear(options?: ClearOptions): string;
101
+ /**
102
+ * 移除ANSI转义序列
103
+ */
104
+ stripAnsi(text: string): string;
105
+ /**
106
+ * 检测终端能力
107
+ */
108
+ checkTerminalCapabilities(): {
109
+ supportsColors: boolean;
110
+ supportsTrueColor: boolean;
111
+ supportsMouse: boolean;
112
+ supportsUnicode: boolean;
113
+ colorLevel: number;
114
+ };
115
+ /**
116
+ * 适配输出
117
+ */
118
+ adaptOutput(output: string, targetPlatform?: OSType): string;
119
+ /**
120
+ * 创建进度条
121
+ */
122
+ createProgressBar(current: number, total: number, width?: number, color?: string): string;
123
+ /**
124
+ * 创建表格
125
+ */
126
+ createTable(headers: string[], rows: string[][], options?: {
127
+ colorizeHeaders?: boolean;
128
+ borderColor?: string;
129
+ }): string;
130
+ private getPlatformKey;
131
+ private adaptForWindows;
132
+ }
@@ -0,0 +1,146 @@
1
+ import { LoggerService } from '../core/logger.service';
2
+ /**
3
+ * 操作系统类型
4
+ */
5
+ export declare enum OSType {
6
+ LINUX = "linux",
7
+ WINDOWS = "windows",
8
+ MACOS = "macos",
9
+ UNKNOWN = "unknown"
10
+ }
11
+ /**
12
+ * 终端类型
13
+ */
14
+ export declare enum TerminalType {
15
+ XTERM = "xterm",
16
+ XTERM_256_COLOR = "xterm-256color",
17
+ LINUX_CONSOLE = "linux",
18
+ WINDOWS_CMD = "windows-cmd",
19
+ WINDOWS_POWERSHELL = "windows-powershell",
20
+ WINDOWS_WSL = "windows-wsl",
21
+ MACOS_TERMINAL = "macos-terminal",
22
+ ITerm2 = "iterm2",
23
+ UNKNOWN = "unknown"
24
+ }
25
+ /**
26
+ * 终端能力
27
+ */
28
+ export interface TerminalCapabilities {
29
+ colors: number;
30
+ trueColor: boolean;
31
+ unicode: boolean;
32
+ mouse: boolean;
33
+ bracketedPaste: boolean;
34
+ imageSupport: boolean;
35
+ titleSupport: boolean;
36
+ }
37
+ /**
38
+ * 平台信息
39
+ */
40
+ export interface PlatformInfo {
41
+ os: OSType;
42
+ osVersion: string;
43
+ terminal: TerminalType;
44
+ terminalVersion?: string;
45
+ shell: string;
46
+ shellVersion?: string;
47
+ capabilities: TerminalCapabilities;
48
+ environment: Record<string, string>;
49
+ arch: string;
50
+ isVirtualTerminal: boolean;
51
+ }
52
+ /**
53
+ * 环境分析结果
54
+ */
55
+ export interface EnvironmentAnalysis {
56
+ platformInfo: PlatformInfo;
57
+ features: {
58
+ supportsAnsiColors: boolean;
59
+ supportsUnicode: boolean;
60
+ supportsTrueColor: boolean;
61
+ supportsMouseEvents: boolean;
62
+ supportsImages: boolean;
63
+ };
64
+ recommendations: string[];
65
+ compatibility: {
66
+ score: number;
67
+ issues: string[];
68
+ workarounds: string[];
69
+ };
70
+ }
71
+ /**
72
+ * 平台检测服务
73
+ * 提供跨平台终端环境检测、兼容性分析和能力检测功能
74
+ */
75
+ export declare class PlatformDetectionService {
76
+ private logger;
77
+ private platformInfo;
78
+ private analysisCache;
79
+ constructor(logger: LoggerService);
80
+ /**
81
+ * 检测操作系统
82
+ */
83
+ detectOS(): OSType;
84
+ /**
85
+ * 检测终端类型
86
+ */
87
+ detectTerminal(): TerminalType;
88
+ /**
89
+ * 检查终端能力
90
+ */
91
+ checkCapabilities(): TerminalCapabilities;
92
+ /**
93
+ * 分析环境
94
+ */
95
+ analyzeEnvironment(): EnvironmentAnalysis;
96
+ /**
97
+ * 获取版本信息
98
+ */
99
+ getVersionInfo(): {
100
+ osVersion: string;
101
+ terminalVersion?: string;
102
+ shellVersion?: string;
103
+ nodeVersion: string;
104
+ };
105
+ /**
106
+ * 获取完整的平台信息
107
+ */
108
+ getPlatformInfo(): PlatformInfo;
109
+ /**
110
+ * 检查是否支持特定功能
111
+ */
112
+ supportsFeature(feature: 'ansiColors' | 'unicode' | 'trueColor' | 'mouse' | 'images'): boolean;
113
+ /**
114
+ * 获取终端颜色数(公共方法)
115
+ */
116
+ getTerminalColorCount(): number;
117
+ /**
118
+ * 检查是否为Windows WSL环境
119
+ */
120
+ isWSL(): boolean;
121
+ /**
122
+ * 检查是否通过SSH连接
123
+ */
124
+ isSSH(): boolean;
125
+ /**
126
+ * 清理缓存并重新检测
127
+ */
128
+ refresh(): void;
129
+ private detectPlatform;
130
+ private getColorCount;
131
+ private supportsTrueColor;
132
+ private supportsUnicode;
133
+ private supportsMouse;
134
+ private supportsBracketedPaste;
135
+ private supportsImages;
136
+ private supportsTitle;
137
+ private analyzeFeatures;
138
+ private generateRecommendations;
139
+ private analyzeCompatibility;
140
+ private getOSVersion;
141
+ private getTerminalVersion;
142
+ private getActiveShell;
143
+ private getShellVersion;
144
+ private isVirtualTerminal;
145
+ private filterEnvVariables;
146
+ }
@@ -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 AnthropicProviderService 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>;
@@ -1,5 +1,6 @@
1
+ import { Observable } from 'rxjs';
1
2
  import { BaseAiProvider as IBaseAiProvider, ProviderConfig, AuthConfig, ProviderCapability, HealthStatus, ValidationResult } from '../../types/provider.types';
2
- import { ChatRequest, ChatResponse, CommandRequest, CommandResponse, ExplainRequest, ExplainResponse, AnalysisRequest, AnalysisResponse } from '../../types/ai.types';
3
+ import { ChatRequest, ChatResponse, CommandRequest, CommandResponse, ExplainRequest, ExplainResponse, AnalysisRequest, AnalysisResponse, StreamEvent } from '../../types/ai.types';
3
4
  import { LoggerService } from '../core/logger.service';
4
5
  /**
5
6
  * 基础AI提供商抽象类
@@ -26,6 +27,10 @@ export declare abstract class BaseAiProvider extends IBaseAiProvider {
26
27
  * 聊天功能 - 必须由子类实现
27
28
  */
28
29
  abstract chat(request: ChatRequest): Promise<ChatResponse>;
30
+ /**
31
+ * 流式聊天功能 - 必须由子类实现
32
+ */
33
+ abstract chatStream(request: ChatRequest): Observable<StreamEvent>;
29
34
  /**
30
35
  * 生成命令 - 必须由子类实现
31
36
  */
@@ -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';
@@ -30,6 +31,10 @@ export declare class GlmProviderService extends BaseAiProvider {
30
31
  * 聊天功能
31
32
  */
32
33
  chat(request: ChatRequest): Promise<ChatResponse>;
34
+ /**
35
+ * 流式聊天功能 - 暂未实现,回退到非流式
36
+ */
37
+ chatStream(request: ChatRequest): Observable<any>;
33
38
  /**
34
39
  * 生成命令
35
40
  */
@@ -1,6 +1,7 @@
1
+ import { Observable } from 'rxjs';
1
2
  import { BaseAiProvider } from './base-provider.service';
2
3
  import { ProviderCapability, HealthStatus, ValidationResult } from '../../types/provider.types';
3
- import { ChatRequest, ChatResponse, CommandRequest, CommandResponse, ExplainRequest, ExplainResponse, AnalysisRequest, AnalysisResponse } from '../../types/ai.types';
4
+ import { ChatRequest, ChatResponse, CommandRequest, CommandResponse, ExplainRequest, ExplainResponse, AnalysisRequest, AnalysisResponse, StreamEvent } from '../../types/ai.types';
4
5
  import { LoggerService } from '../core/logger.service';
5
6
  /**
6
7
  * Minimax AI提供商
@@ -30,6 +31,10 @@ export declare class MinimaxProviderService extends BaseAiProvider {
30
31
  * 聊天功能
31
32
  */
32
33
  chat(request: ChatRequest): Promise<ChatResponse>;
34
+ /**
35
+ * 流式聊天功能
36
+ */
37
+ chatStream(request: ChatRequest): Observable<StreamEvent>;
33
38
  /**
34
39
  * 生成命令
35
40
  */
@@ -56,6 +61,10 @@ export declare class MinimaxProviderService extends BaseAiProvider {
56
61
  protected getDefaultBaseURL(): string;
57
62
  /**
58
63
  * 转换消息格式
64
+ * Anthropic API 支持两种格式:
65
+ * 1. 简单字符串: { role: 'user', content: 'Hello' }
66
+ * 2. 内容块数组: { role: 'user', content: [{ type: 'text', text: 'Hello' }] }
67
+ * 使用简单字符串格式以确保兼容性
59
68
  */
60
69
  protected transformMessages(messages: any[]): any[];
61
70
  /**