@vybestack/llxprt-code 0.1.19-alpha → 0.1.19-gamma

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 (203) hide show
  1. package/README.md +49 -2
  2. package/dist/package.json +3 -3
  3. package/dist/src/auth/anthropic-oauth-provider.d.ts +33 -0
  4. package/dist/src/auth/anthropic-oauth-provider.js +129 -0
  5. package/dist/src/auth/anthropic-oauth-provider.js.map +1 -0
  6. package/dist/src/auth/gemini-oauth-provider.d.ts +15 -0
  7. package/dist/src/auth/gemini-oauth-provider.js +33 -0
  8. package/dist/src/auth/gemini-oauth-provider.js.map +1 -0
  9. package/dist/src/auth/oauth-manager.d.ts +109 -0
  10. package/dist/src/auth/oauth-manager.js +334 -0
  11. package/dist/src/auth/oauth-manager.js.map +1 -0
  12. package/dist/src/auth/oauth-manager.spec.d.ts +6 -0
  13. package/dist/src/auth/oauth-manager.spec.js +523 -0
  14. package/dist/src/auth/oauth-manager.spec.js.map +1 -0
  15. package/dist/src/auth/qwen-oauth-provider.d.ts +14 -0
  16. package/dist/src/auth/qwen-oauth-provider.js +75 -0
  17. package/dist/src/auth/qwen-oauth-provider.js.map +1 -0
  18. package/dist/src/auth/types.d.ts +7 -0
  19. package/dist/src/auth/types.js +7 -0
  20. package/dist/src/auth/types.js.map +1 -0
  21. package/dist/src/config/auth.js +11 -0
  22. package/dist/src/config/auth.js.map +1 -1
  23. package/dist/src/config/config.js +52 -30
  24. package/dist/src/config/config.js.map +1 -1
  25. package/dist/src/config/keyBindings.d.ts +66 -0
  26. package/dist/src/config/keyBindings.js +136 -0
  27. package/dist/src/config/keyBindings.js.map +1 -0
  28. package/dist/src/config/settings.d.ts +3 -61
  29. package/dist/src/config/settings.js.map +1 -1
  30. package/dist/src/config/settingsSchema.d.ts +587 -0
  31. package/dist/src/config/settingsSchema.js +565 -0
  32. package/dist/src/config/settingsSchema.js.map +1 -0
  33. package/dist/src/gemini.js +9 -2
  34. package/dist/src/gemini.js.map +1 -1
  35. package/dist/src/generated/git-commit.d.ts +1 -1
  36. package/dist/src/generated/git-commit.js +1 -1
  37. package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
  38. package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
  39. package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
  40. package/dist/src/providers/logging/git-stats.d.ts +43 -0
  41. package/dist/src/providers/logging/git-stats.js +137 -0
  42. package/dist/src/providers/logging/git-stats.js.map +1 -0
  43. package/dist/src/providers/providerManagerInstance.d.ts +2 -0
  44. package/dist/src/providers/providerManagerInstance.js +49 -5
  45. package/dist/src/providers/providerManagerInstance.js.map +1 -1
  46. package/dist/src/services/BuiltinCommandLoader.js +4 -0
  47. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  48. package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
  49. package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
  50. package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
  51. package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
  52. package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
  53. package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
  54. package/dist/src/ui/App.js +153 -36
  55. package/dist/src/ui/App.js.map +1 -1
  56. package/dist/src/ui/colors.d.ts +5 -0
  57. package/dist/src/ui/colors.js +51 -0
  58. package/dist/src/ui/colors.js.map +1 -1
  59. package/dist/src/ui/commands/authCommand.d.ts +11 -1
  60. package/dist/src/ui/commands/authCommand.js +145 -48
  61. package/dist/src/ui/commands/authCommand.js.map +1 -1
  62. package/dist/src/ui/commands/chatCommand.js +16 -0
  63. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  64. package/dist/src/ui/commands/diagnosticsCommand.js +94 -10
  65. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  66. package/dist/src/ui/commands/ideCommand.js +67 -31
  67. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  68. package/dist/src/ui/commands/keyCommand.js +32 -2
  69. package/dist/src/ui/commands/keyCommand.js.map +1 -1
  70. package/dist/src/ui/commands/keyfileCommand.js +15 -12
  71. package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
  72. package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
  73. package/dist/src/ui/commands/loggingCommand.js +421 -0
  74. package/dist/src/ui/commands/loggingCommand.js.map +1 -0
  75. package/dist/src/ui/commands/modelCommand.js +21 -3
  76. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  77. package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
  78. package/dist/src/ui/commands/privacyCommand.js +6 -3
  79. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  80. package/dist/src/ui/commands/providerCommand.js +52 -14
  81. package/dist/src/ui/commands/providerCommand.js.map +1 -1
  82. package/dist/src/ui/commands/setCommand.js +17 -1
  83. package/dist/src/ui/commands/setCommand.js.map +1 -1
  84. package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
  85. package/dist/src/ui/commands/settingsCommand.js +16 -0
  86. package/dist/src/ui/commands/settingsCommand.js.map +1 -0
  87. package/dist/src/ui/commands/toolformatCommand.js +79 -23
  88. package/dist/src/ui/commands/toolformatCommand.js.map +1 -1
  89. package/dist/src/ui/commands/types.d.ts +14 -2
  90. package/dist/src/ui/commands/types.js.map +1 -1
  91. package/dist/src/ui/components/AuthDialog.js +15 -54
  92. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  93. package/dist/src/ui/components/ContextUsageDisplay.js +14 -2
  94. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  95. package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
  96. package/dist/src/ui/components/FolderTrustDialog.js +38 -0
  97. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
  98. package/dist/src/ui/components/Footer.js +136 -16
  99. package/dist/src/ui/components/Footer.js.map +1 -1
  100. package/dist/src/ui/components/InputPrompt.d.ts +1 -0
  101. package/dist/src/ui/components/InputPrompt.js +87 -31
  102. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  103. package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
  104. package/dist/src/ui/components/LoggingDialog.js +155 -0
  105. package/dist/src/ui/components/LoggingDialog.js.map +1 -0
  106. package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
  107. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  108. package/dist/src/ui/components/OAuthCodeDialog.d.ts +13 -0
  109. package/dist/src/ui/components/OAuthCodeDialog.js +54 -0
  110. package/dist/src/ui/components/OAuthCodeDialog.js.map +1 -0
  111. package/dist/src/ui/components/ProviderDialog.js +100 -26
  112. package/dist/src/ui/components/ProviderDialog.js.map +1 -1
  113. package/dist/src/ui/components/ProviderModelDialog.js +99 -27
  114. package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
  115. package/dist/src/ui/components/SettingsDialog.d.ts +14 -0
  116. package/dist/src/ui/components/SettingsDialog.js +247 -0
  117. package/dist/src/ui/components/SettingsDialog.js.map +1 -0
  118. package/dist/src/ui/components/ThemeDialog.js +4 -15
  119. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  120. package/dist/src/ui/components/TodoPanel.js +93 -18
  121. package/dist/src/ui/components/TodoPanel.js.map +1 -1
  122. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +85 -7
  123. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  124. package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
  125. package/dist/src/ui/contexts/SettingsContext.js +15 -0
  126. package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
  127. package/dist/src/ui/hooks/atCommandProcessor.js +21 -0
  128. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  129. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -2
  130. package/dist/src/ui/hooks/slashCommandProcessor.js +142 -113
  131. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  132. package/dist/src/ui/hooks/useAuthCommand.js +48 -2
  133. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  134. package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
  135. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  136. package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
  137. package/dist/src/ui/hooks/useFolderTrust.js +22 -0
  138. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
  139. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  140. package/dist/src/ui/hooks/useGeminiStream.js +35 -10
  141. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  142. package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
  143. package/dist/src/ui/hooks/useResponsive.js +19 -0
  144. package/dist/src/ui/hooks/useResponsive.js.map +1 -0
  145. package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
  146. package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
  147. package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
  148. package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
  149. package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
  150. package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
  151. package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
  152. package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
  153. package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
  154. package/dist/src/ui/keyMatchers.d.ts +26 -0
  155. package/dist/src/ui/keyMatchers.js +68 -0
  156. package/dist/src/ui/keyMatchers.js.map +1 -0
  157. package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
  158. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  159. package/dist/src/ui/reducers/appReducer.d.ts +3 -2
  160. package/dist/src/ui/reducers/appReducer.js +1 -0
  161. package/dist/src/ui/reducers/appReducer.js.map +1 -1
  162. package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
  163. package/dist/src/ui/themes/semantic-resolver.js +32 -0
  164. package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
  165. package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
  166. package/dist/src/ui/themes/semantic-tokens.js +7 -0
  167. package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
  168. package/dist/src/ui/themes/theme-compat.d.ts +34 -0
  169. package/dist/src/ui/themes/theme-compat.js +65 -0
  170. package/dist/src/ui/themes/theme-compat.js.map +1 -0
  171. package/dist/src/ui/themes/theme-manager.d.ts +8 -0
  172. package/dist/src/ui/themes/theme-manager.js +18 -0
  173. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  174. package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
  175. package/dist/src/ui/utils/CodeColorizer.js +4 -3
  176. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  177. package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
  178. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  179. package/dist/src/ui/utils/responsive.d.ts +16 -0
  180. package/dist/src/ui/utils/responsive.js +111 -0
  181. package/dist/src/ui/utils/responsive.js.map +1 -0
  182. package/dist/src/utils/cleanup.d.ts +2 -2
  183. package/dist/src/utils/cleanup.js +2 -2
  184. package/dist/src/utils/cleanup.js.map +1 -1
  185. package/dist/src/utils/dialogScopeUtils.d.ts +31 -0
  186. package/dist/src/utils/dialogScopeUtils.js +48 -0
  187. package/dist/src/utils/dialogScopeUtils.js.map +1 -0
  188. package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
  189. package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
  190. package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
  191. package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
  192. package/dist/src/utils/privacy/PrivacyManager.js +133 -0
  193. package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
  194. package/dist/src/utils/sandbox.js +10 -0
  195. package/dist/src/utils/sandbox.js.map +1 -1
  196. package/dist/src/utils/settingsUtils.d.ts +126 -0
  197. package/dist/src/utils/settingsUtils.js +327 -0
  198. package/dist/src/utils/settingsUtils.js.map +1 -0
  199. package/dist/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +3 -3
  201. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
  202. package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -30
  203. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +0 -1
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { SettingScope } from '../config/settings.js';
7
+ import { settingExistsInScope } from './settingsUtils.js';
8
+ /**
9
+ * Shared scope labels for dialog components that need to display setting scopes
10
+ */
11
+ export const SCOPE_LABELS = {
12
+ [SettingScope.User]: 'User Settings',
13
+ [SettingScope.Workspace]: 'Workspace Settings',
14
+ [SettingScope.System]: 'System Settings',
15
+ };
16
+ /**
17
+ * Helper function to get scope items for radio button selects
18
+ */
19
+ export function getScopeItems() {
20
+ return [
21
+ { label: SCOPE_LABELS[SettingScope.User], value: SettingScope.User },
22
+ {
23
+ label: SCOPE_LABELS[SettingScope.Workspace],
24
+ value: SettingScope.Workspace,
25
+ },
26
+ { label: SCOPE_LABELS[SettingScope.System], value: SettingScope.System },
27
+ ];
28
+ }
29
+ /**
30
+ * Generate scope message for a specific setting
31
+ */
32
+ export function getScopeMessageForSetting(settingKey, selectedScope, settings) {
33
+ const otherScopes = Object.values(SettingScope).filter((scope) => scope !== selectedScope);
34
+ const modifiedInOtherScopes = otherScopes.filter((scope) => {
35
+ const scopeSettings = settings.forScope(scope).settings;
36
+ return settingExistsInScope(settingKey, scopeSettings);
37
+ });
38
+ if (modifiedInOtherScopes.length === 0) {
39
+ return '';
40
+ }
41
+ const modifiedScopesStr = modifiedInOtherScopes.join(', ');
42
+ const currentScopeSettings = settings.forScope(selectedScope).settings;
43
+ const existsInCurrentScope = settingExistsInScope(settingKey, currentScopeSettings);
44
+ return existsInCurrentScope
45
+ ? `(Also modified in ${modifiedScopesStr})`
46
+ : `(Modified in ${modifiedScopesStr})`;
47
+ }
48
+ //# sourceMappingURL=dialogScopeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialogScopeUtils.js","sourceRoot":"","sources":["../../../src/utils/dialogScopeUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,eAAe;IACpC,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,oBAAoB;IAC9C,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,iBAAiB;CAChC,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,EAAE,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE;QACpE;YACE,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC;YAC3C,KAAK,EAAE,YAAY,CAAC,SAAS;SAC9B;QACD,EAAE,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE;KACzE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAAkB,EAClB,aAA2B,EAC3B,QAAwB;IAExB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CACpD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,aAAa,CACnC,CAAC;IAEF,MAAM,qBAAqB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACzD,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QACxD,OAAO,oBAAoB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC;IACvE,MAAM,oBAAoB,GAAG,oBAAoB,CAC/C,UAAU,EACV,oBAAoB,CACrB,CAAC;IAEF,OAAO,oBAAoB;QACzB,CAAC,CAAC,qBAAqB,iBAAiB,GAAG;QAC3C,CAAC,CAAC,gBAAgB,iBAAiB,GAAG,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { IMessage, ITool } from '@vybestack/llxprt-code-core';
7
+ export interface RedactionPattern {
8
+ name: string;
9
+ pattern: RegExp;
10
+ replacement: string;
11
+ enabled: boolean;
12
+ }
13
+ export interface RedactionConfig {
14
+ redactApiKeys: boolean;
15
+ redactCredentials: boolean;
16
+ redactFilePaths: boolean;
17
+ redactUrls: boolean;
18
+ redactEmails: boolean;
19
+ redactPersonalInfo: boolean;
20
+ customPatterns?: RedactionPattern[];
21
+ }
22
+ export declare class ConversationDataRedactor {
23
+ private redactionConfig;
24
+ private redactionPatterns;
25
+ constructor(config?: Partial<RedactionConfig>);
26
+ /**
27
+ * Redact sensitive data from a conversation message
28
+ */
29
+ redactMessage(message: IMessage, providerName: string): IMessage;
30
+ /**
31
+ * Redact sensitive data from tool definitions
32
+ */
33
+ redactToolCall(tool: ITool): ITool;
34
+ /**
35
+ * Redact sensitive data from response content
36
+ */
37
+ redactResponseContent(content: string, providerName: string): string;
38
+ /**
39
+ * Redact entire conversation consistently
40
+ */
41
+ redactConversation(messages: IMessage[], providerName: string): IMessage[];
42
+ /**
43
+ * Redact API keys from content based on provider
44
+ */
45
+ redactApiKeys(content: string, providerName: string): string;
46
+ /**
47
+ * Redact sensitive file paths
48
+ */
49
+ redactSensitivePaths(content: string): string;
50
+ /**
51
+ * Redact personal identifiable information
52
+ */
53
+ redactPersonalInfo(content: string): string;
54
+ private shouldRedact;
55
+ private redactContent;
56
+ private redactContentPart;
57
+ private redactToolParameters;
58
+ private redactFilePath;
59
+ private redactShellCommand;
60
+ private redactUrl;
61
+ private initializeRedactionPatterns;
62
+ private isPatternEnabled;
63
+ /**
64
+ * Update redaction configuration
65
+ */
66
+ updateConfig(config: Partial<RedactionConfig>): void;
67
+ /**
68
+ * Get current redaction statistics
69
+ */
70
+ getRedactionStats(content: string, providerName: string): RedactionStats;
71
+ }
72
+ export interface RedactionStats {
73
+ totalRedactions: number;
74
+ redactionsByType: Record<string, number>;
75
+ }
@@ -0,0 +1,412 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export class ConversationDataRedactor {
7
+ redactionConfig;
8
+ redactionPatterns;
9
+ constructor(config) {
10
+ this.redactionConfig = {
11
+ redactApiKeys: true,
12
+ redactCredentials: true,
13
+ redactFilePaths: false,
14
+ redactUrls: false,
15
+ redactEmails: false,
16
+ redactPersonalInfo: false,
17
+ ...config,
18
+ };
19
+ this.redactionPatterns = this.initializeRedactionPatterns();
20
+ }
21
+ /**
22
+ * Redact sensitive data from a conversation message
23
+ */
24
+ redactMessage(message, providerName) {
25
+ if (!this.shouldRedact()) {
26
+ return message;
27
+ }
28
+ const redactedMessage = { ...message };
29
+ // Content is always a string in IMessage
30
+ redactedMessage.content = this.redactContent(redactedMessage.content, providerName);
31
+ // Redact tool_calls if present
32
+ if (redactedMessage.tool_calls) {
33
+ redactedMessage.tool_calls = redactedMessage.tool_calls.map((call) => ({
34
+ ...call,
35
+ function: {
36
+ ...call.function,
37
+ arguments: this.redactContent(call.function.arguments, providerName),
38
+ },
39
+ }));
40
+ }
41
+ return redactedMessage;
42
+ }
43
+ /**
44
+ * Redact sensitive data from tool definitions
45
+ */
46
+ redactToolCall(tool) {
47
+ if (!this.shouldRedact()) {
48
+ return tool;
49
+ }
50
+ const redactedTool = { ...tool };
51
+ // Handle both ITool interface and test format
52
+ if (redactedTool.function &&
53
+ redactedTool.function.parameters &&
54
+ tool.function.name) {
55
+ redactedTool.function.parameters = this.redactToolParameters(redactedTool.function.parameters, tool.function.name);
56
+ }
57
+ else if (redactedTool.parameters &&
58
+ tool.name) {
59
+ // Handle test format that doesn't match ITool interface
60
+ redactedTool.parameters =
61
+ this.redactToolParameters(redactedTool.parameters, tool.name);
62
+ }
63
+ return redactedTool;
64
+ }
65
+ /**
66
+ * Redact sensitive data from response content
67
+ */
68
+ redactResponseContent(content, providerName) {
69
+ if (!this.shouldRedact()) {
70
+ return content;
71
+ }
72
+ return this.redactContent(content, providerName);
73
+ }
74
+ /**
75
+ * Redact entire conversation consistently
76
+ */
77
+ redactConversation(messages, providerName) {
78
+ return messages.map((message) => this.redactMessage(message, providerName));
79
+ }
80
+ /**
81
+ * Redact API keys from content based on provider
82
+ */
83
+ redactApiKeys(content, providerName) {
84
+ let redacted = content;
85
+ // Apply provider-specific and global API key patterns
86
+ const providerPatterns = this.redactionPatterns.get(providerName) || [];
87
+ const globalPatterns = this.redactionPatterns.get('global') || [];
88
+ [...providerPatterns, ...globalPatterns].forEach((pattern) => {
89
+ if (pattern.enabled && pattern.name.includes('api_key')) {
90
+ redacted = redacted.replace(pattern.pattern, pattern.replacement);
91
+ }
92
+ });
93
+ return redacted;
94
+ }
95
+ /**
96
+ * Redact sensitive file paths
97
+ */
98
+ redactSensitivePaths(content) {
99
+ if (!this.redactionConfig.redactFilePaths) {
100
+ return content;
101
+ }
102
+ let redacted = content;
103
+ // SSH keys and certificates
104
+ redacted = redacted.replace(/\/[^"\s]*\.ssh\/[^"\s]*/g, '[REDACTED-SSH-PATH]');
105
+ redacted = redacted.replace(/\/[^"\s]*\/id_rsa[^"\s]*/g, '[REDACTED-SSH-KEY-PATH]');
106
+ // Environment files
107
+ redacted = redacted.replace(/\/[^"\s]*\.env[^"\s]*/g, '[REDACTED-ENV-FILE]');
108
+ // Configuration directories
109
+ redacted = redacted.replace(/\/home\/[^/\s"]+/g, '[REDACTED-HOME-DIR]');
110
+ redacted = redacted.replace(/\/Users\/[^/\s"]+/g, '[REDACTED-USER-DIR]');
111
+ return redacted;
112
+ }
113
+ /**
114
+ * Redact personal identifiable information
115
+ */
116
+ redactPersonalInfo(content) {
117
+ if (!this.redactionConfig.redactPersonalInfo) {
118
+ return content;
119
+ }
120
+ let redacted = content;
121
+ // Email addresses
122
+ redacted = redacted.replace(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, '[REDACTED-EMAIL]');
123
+ // Phone numbers (basic patterns)
124
+ redacted = redacted.replace(/\b\d{3}-\d{3}-\d{4}\b/g, '[REDACTED-PHONE]');
125
+ redacted = redacted.replace(/\b\(\d{3}\)\s?\d{3}-\d{4}\b/g, '[REDACTED-PHONE]');
126
+ // Credit card numbers (basic pattern)
127
+ redacted = redacted.replace(/\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g, '[REDACTED-CC-NUMBER]');
128
+ return redacted;
129
+ }
130
+ shouldRedact() {
131
+ // Check if any redaction is enabled
132
+ return Object.values(this.redactionConfig).some((value) => value === true);
133
+ }
134
+ redactContent(content, providerName) {
135
+ let redacted = content;
136
+ // Apply provider-specific patterns
137
+ const providerPatterns = this.redactionPatterns.get(providerName) || [];
138
+ for (const pattern of providerPatterns) {
139
+ if (pattern.enabled) {
140
+ redacted = redacted.replace(pattern.pattern, pattern.replacement);
141
+ }
142
+ }
143
+ // Apply global patterns
144
+ const globalPatterns = this.redactionPatterns.get('global') || [];
145
+ for (const pattern of globalPatterns) {
146
+ if (pattern.enabled) {
147
+ redacted = redacted.replace(pattern.pattern, pattern.replacement);
148
+ }
149
+ }
150
+ return redacted;
151
+ }
152
+ redactContentPart(part, providerName) {
153
+ const redactedPart = { ...part };
154
+ if (typeof part === 'object' && part !== null) {
155
+ const partObj = part;
156
+ if (partObj.text && typeof partObj.text === 'string') {
157
+ redactedPart.text = this.redactContent(partObj.text, providerName);
158
+ }
159
+ if (partObj.functionCall) {
160
+ const funcCall = partObj.functionCall;
161
+ redactedPart.functionCall = {
162
+ ...funcCall,
163
+ args: this.redactToolParameters(funcCall.args, funcCall.name),
164
+ };
165
+ }
166
+ }
167
+ return redactedPart;
168
+ }
169
+ redactToolParameters(params, toolName) {
170
+ if (!params || typeof params !== 'object') {
171
+ return params;
172
+ }
173
+ const redacted = { ...params };
174
+ // Apply tool-specific redaction rules
175
+ switch (toolName) {
176
+ case 'read_file':
177
+ case 'write_file':
178
+ case 'list_files':
179
+ if (redacted.file_path &&
180
+ typeof redacted.file_path === 'string' &&
181
+ this.redactionConfig.redactFilePaths) {
182
+ redacted.file_path = this.redactFilePath(redacted.file_path);
183
+ }
184
+ break;
185
+ case 'run_command':
186
+ case 'shell':
187
+ if (redacted.command && typeof redacted.command === 'string') {
188
+ redacted.command = this.redactShellCommand(redacted.command);
189
+ }
190
+ break;
191
+ case 'web_search':
192
+ case 'fetch_url':
193
+ if (redacted.url &&
194
+ typeof redacted.url === 'string' &&
195
+ this.redactionConfig.redactUrls) {
196
+ redacted.url = this.redactUrl(redacted.url);
197
+ }
198
+ break;
199
+ default:
200
+ // No specific redaction for this tool
201
+ break;
202
+ }
203
+ // Apply general parameter redaction
204
+ for (const [key, value] of Object.entries(redacted)) {
205
+ if (typeof value === 'string') {
206
+ redacted[key] = this.redactContent(value, 'global');
207
+ }
208
+ }
209
+ return redacted;
210
+ }
211
+ redactFilePath(path) {
212
+ // Redact sensitive file paths
213
+ const sensitivePatterns = [
214
+ {
215
+ pattern: /\/home\/[^/]+\/\.ssh\/[^/]+/g,
216
+ replacement: '[REDACTED-SSH-KEY-PATH]',
217
+ },
218
+ {
219
+ pattern: /\/home\/[^/]+\/\.aws\/[^/]+/g,
220
+ replacement: '[REDACTED-AWS-CONFIG-PATH]',
221
+ },
222
+ {
223
+ pattern: /\/home\/[^/]+\/\.docker\/[^/]+/g,
224
+ replacement: '[REDACTED-DOCKER-CONFIG-PATH]',
225
+ },
226
+ {
227
+ pattern: /\/Users\/[^/]+\/\.ssh\/[^/]+/g,
228
+ replacement: '[REDACTED-SSH-KEY-PATH]',
229
+ },
230
+ {
231
+ pattern: /\/Users\/[^/]+\/\.aws\/[^/]+/g,
232
+ replacement: '[REDACTED-AWS-CONFIG-PATH]',
233
+ },
234
+ { pattern: /.*\.env.*$/g, replacement: '[REDACTED-SENSITIVE-PATH]' },
235
+ { pattern: /.*secret.*$/gi, replacement: '[REDACTED-SENSITIVE-PATH]' },
236
+ { pattern: /.*key.*$/gi, replacement: '[REDACTED-SENSITIVE-PATH]' },
237
+ ];
238
+ let redacted = path;
239
+ for (const { pattern, replacement } of sensitivePatterns) {
240
+ redacted = redacted.replace(pattern, replacement);
241
+ }
242
+ return redacted;
243
+ }
244
+ redactShellCommand(command) {
245
+ // Redact potentially sensitive shell commands
246
+ let redacted = command;
247
+ // Redact export statements with sensitive values
248
+ redacted = redacted.replace(/export\s+[A-Z_]+\s*=\s*['"]\s*sk-[a-zA-Z0-9]+\s*['"]/g, 'export [REDACTED-API-KEY]');
249
+ redacted = redacted.replace(/export\s+[A-Z_]+\s*=\s*['"]\s*[a-zA-Z0-9+/]+=*\s*['"]/g, 'export [REDACTED-TOKEN]');
250
+ // Redact curl commands with authorization headers
251
+ redacted = redacted.replace(/curl\s+.*-H\s+['"]Authorization:\s*Bearer\s+[^'"]+['"]/g, 'curl [REDACTED-AUTH-HEADER]');
252
+ return redacted;
253
+ }
254
+ redactUrl(url) {
255
+ // Redact sensitive parts of URLs while preserving structure
256
+ try {
257
+ const urlObj = new URL(url);
258
+ // Redact query parameters that might contain sensitive data
259
+ const sensitiveParams = [
260
+ 'key',
261
+ 'token',
262
+ 'auth',
263
+ 'password',
264
+ 'secret',
265
+ 'api_key',
266
+ ];
267
+ for (const param of sensitiveParams) {
268
+ if (urlObj.searchParams.has(param)) {
269
+ urlObj.searchParams.set(param, '[REDACTED]');
270
+ }
271
+ }
272
+ return urlObj.toString();
273
+ }
274
+ catch {
275
+ // If URL parsing fails, apply pattern-based redaction
276
+ return url.replace(/[?&](key|token|auth|password|secret|api_key)=[^&]*/g, '$1=[REDACTED]');
277
+ }
278
+ }
279
+ initializeRedactionPatterns() {
280
+ const patterns = new Map();
281
+ // Global patterns
282
+ patterns.set('global', [
283
+ {
284
+ name: 'api_keys',
285
+ pattern: /sk-[a-zA-Z0-9]{32,}/g,
286
+ replacement: '[REDACTED-API-KEY]',
287
+ enabled: this.redactionConfig.redactApiKeys,
288
+ },
289
+ {
290
+ name: 'email_addresses',
291
+ pattern: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,
292
+ replacement: '[REDACTED-EMAIL]',
293
+ enabled: this.redactionConfig.redactEmails,
294
+ },
295
+ {
296
+ name: 'passwords',
297
+ pattern: /(?:password|pwd|pass)[=:\s]+[^\s\n\r]+/gi,
298
+ replacement: 'password=[REDACTED]',
299
+ enabled: this.redactionConfig.redactCredentials,
300
+ },
301
+ {
302
+ name: 'generic_api_keys',
303
+ pattern: /api[_-]?key["\s]*[:=]["\s]*[a-zA-Z0-9-_]{16,}/gi,
304
+ replacement: 'api_key: "[REDACTED-API-KEY]"',
305
+ enabled: this.redactionConfig.redactApiKeys,
306
+ },
307
+ {
308
+ name: 'bearer_tokens',
309
+ pattern: /bearer [a-zA-Z0-9-_.]{16,}/gi,
310
+ replacement: 'bearer [REDACTED-BEARER-TOKEN]',
311
+ enabled: this.redactionConfig.redactCredentials,
312
+ },
313
+ ]);
314
+ // OpenAI-specific patterns
315
+ patterns.set('openai', [
316
+ {
317
+ name: 'openai_api_keys',
318
+ pattern: /sk-[a-zA-Z0-9]{40,51}/g,
319
+ replacement: '[REDACTED-OPENAI-KEY]',
320
+ enabled: this.redactionConfig.redactApiKeys,
321
+ },
322
+ {
323
+ name: 'openai_project_keys',
324
+ pattern: /sk-proj-[a-zA-Z0-9]{48}/g,
325
+ replacement: '[REDACTED-OPENAI-PROJECT-KEY]',
326
+ enabled: this.redactionConfig.redactApiKeys,
327
+ },
328
+ {
329
+ name: 'openai_org_ids',
330
+ pattern: /org-[a-zA-Z0-9]{24}/g,
331
+ replacement: '[REDACTED-ORG-ID]',
332
+ enabled: this.redactionConfig.redactCredentials,
333
+ },
334
+ ]);
335
+ // Anthropic-specific patterns
336
+ patterns.set('anthropic', [
337
+ {
338
+ name: 'anthropic_api_keys',
339
+ pattern: /sk-ant-[a-zA-Z0-9\-_]{95}/g,
340
+ replacement: '[REDACTED-ANTHROPIC-KEY]',
341
+ enabled: this.redactionConfig.redactApiKeys,
342
+ },
343
+ ]);
344
+ // Gemini/Google-specific patterns
345
+ patterns.set('gemini', [
346
+ {
347
+ name: 'google_api_keys',
348
+ pattern: /AIza[0-9A-Za-z\-_]{35}/g,
349
+ replacement: '[REDACTED-GOOGLE-KEY]',
350
+ enabled: this.redactionConfig.redactApiKeys,
351
+ },
352
+ {
353
+ name: 'google_tokens',
354
+ pattern: /ya29\.[0-9A-Za-z\-_]+/g,
355
+ replacement: '[REDACTED-GOOGLE-TOKEN]',
356
+ enabled: this.redactionConfig.redactCredentials,
357
+ },
358
+ ]);
359
+ return patterns;
360
+ }
361
+ isPatternEnabled(patternName) {
362
+ switch (patternName) {
363
+ case 'api_keys':
364
+ case 'generic_api_keys':
365
+ case 'openai_api_keys':
366
+ case 'openai_project_keys':
367
+ case 'anthropic_api_keys':
368
+ case 'google_api_keys':
369
+ return this.redactionConfig.redactApiKeys;
370
+ case 'email_addresses':
371
+ return this.redactionConfig.redactEmails;
372
+ case 'passwords':
373
+ case 'bearer_tokens':
374
+ case 'openai_org_ids':
375
+ case 'google_tokens':
376
+ return this.redactionConfig.redactCredentials;
377
+ default:
378
+ return true;
379
+ }
380
+ }
381
+ /**
382
+ * Update redaction configuration
383
+ */
384
+ updateConfig(config) {
385
+ this.redactionConfig = { ...this.redactionConfig, ...config };
386
+ this.redactionPatterns = this.initializeRedactionPatterns();
387
+ }
388
+ /**
389
+ * Get current redaction statistics
390
+ */
391
+ getRedactionStats(content, providerName) {
392
+ const stats = {
393
+ totalRedactions: 0,
394
+ redactionsByType: {},
395
+ };
396
+ const patterns = [
397
+ ...(this.redactionPatterns.get('global') || []),
398
+ ...(this.redactionPatterns.get(providerName) || []),
399
+ ];
400
+ for (const pattern of patterns) {
401
+ if (pattern.enabled) {
402
+ const matches = content.match(pattern.pattern);
403
+ if (matches) {
404
+ stats.totalRedactions += matches.length;
405
+ stats.redactionsByType[pattern.name] = matches.length;
406
+ }
407
+ }
408
+ }
409
+ return stats;
410
+ }
411
+ }
412
+ //# sourceMappingURL=ConversationDataRedactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationDataRedactor.js","sourceRoot":"","sources":["../../../../src/utils/privacy/ConversationDataRedactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ConversationDataRedactor, RedactionConfig } from './ConversationDataRedactor.js';
7
+ export interface PrivacyConfig {
8
+ getConversationLoggingEnabled(): boolean;
9
+ getResponseLoggingEnabled(): boolean;
10
+ getTelemetryLogPromptsEnabled(): boolean;
11
+ getTelemetryTarget(): 'local' | 'remote' | string;
12
+ getConversationLogPath(): string;
13
+ getConversationRetentionDays(): number;
14
+ getMaxConversationsStored(): number;
15
+ getRedactionConfig(): RedactionConfig;
16
+ getTelemetrySettings(): {
17
+ remoteConsentGiven?: boolean;
18
+ [key: string]: unknown;
19
+ };
20
+ }
21
+ export declare class PrivacyManager {
22
+ private redactor;
23
+ private config;
24
+ constructor(config: PrivacyConfig);
25
+ /**
26
+ * Check if conversation logging is permitted based on privacy settings
27
+ */
28
+ isLoggingPermitted(): boolean;
29
+ /**
30
+ * Get appropriate redactor for current privacy settings
31
+ */
32
+ getRedactor(): ConversationDataRedactor;
33
+ /**
34
+ * Validate privacy compliance for conversation data
35
+ */
36
+ validatePrivacyCompliance(conversationData: unknown): PrivacyValidationResult;
37
+ /**
38
+ * Generate privacy disclosure for user consent
39
+ */
40
+ generatePrivacyDisclosure(): PrivacyDisclosure;
41
+ private hasRemoteConsent;
42
+ private getDataCollectionDescription;
43
+ private getStorageDescription;
44
+ private getRetentionDescription;
45
+ private getRedactionDescription;
46
+ private getUserRightsDescription;
47
+ }
48
+ export interface PrivacyValidationResult {
49
+ isCompliant: boolean;
50
+ violations: string[];
51
+ }
52
+ export interface PrivacyDisclosure {
53
+ dataCollected: string[];
54
+ storageLocation: string;
55
+ retentionPolicy: string;
56
+ redactionPolicy: string;
57
+ userRights: string[];
58
+ }