@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.
- package/README.md +49 -2
- package/dist/package.json +3 -3
- package/dist/src/auth/anthropic-oauth-provider.d.ts +33 -0
- package/dist/src/auth/anthropic-oauth-provider.js +129 -0
- package/dist/src/auth/anthropic-oauth-provider.js.map +1 -0
- package/dist/src/auth/gemini-oauth-provider.d.ts +15 -0
- package/dist/src/auth/gemini-oauth-provider.js +33 -0
- package/dist/src/auth/gemini-oauth-provider.js.map +1 -0
- package/dist/src/auth/oauth-manager.d.ts +109 -0
- package/dist/src/auth/oauth-manager.js +334 -0
- package/dist/src/auth/oauth-manager.js.map +1 -0
- package/dist/src/auth/oauth-manager.spec.d.ts +6 -0
- package/dist/src/auth/oauth-manager.spec.js +523 -0
- package/dist/src/auth/oauth-manager.spec.js.map +1 -0
- package/dist/src/auth/qwen-oauth-provider.d.ts +14 -0
- package/dist/src/auth/qwen-oauth-provider.js +75 -0
- package/dist/src/auth/qwen-oauth-provider.js.map +1 -0
- package/dist/src/auth/types.d.ts +7 -0
- package/dist/src/auth/types.js +7 -0
- package/dist/src/auth/types.js.map +1 -0
- package/dist/src/config/auth.js +11 -0
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/config.js +52 -30
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/keyBindings.d.ts +66 -0
- package/dist/src/config/keyBindings.js +136 -0
- package/dist/src/config/keyBindings.js.map +1 -0
- package/dist/src/config/settings.d.ts +3 -61
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +587 -0
- package/dist/src/config/settingsSchema.js +565 -0
- package/dist/src/config/settingsSchema.js.map +1 -0
- package/dist/src/gemini.js +9 -2
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
- package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
- package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
- package/dist/src/providers/logging/git-stats.d.ts +43 -0
- package/dist/src/providers/logging/git-stats.js +137 -0
- package/dist/src/providers/logging/git-stats.js.map +1 -0
- package/dist/src/providers/providerManagerInstance.d.ts +2 -0
- package/dist/src/providers/providerManagerInstance.js +49 -5
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.js +4 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
- package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
- package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
- package/dist/src/ui/App.js +153 -36
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/colors.d.ts +5 -0
- package/dist/src/ui/colors.js +51 -0
- package/dist/src/ui/colors.js.map +1 -1
- package/dist/src/ui/commands/authCommand.d.ts +11 -1
- package/dist/src/ui/commands/authCommand.js +145 -48
- package/dist/src/ui/commands/authCommand.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +16 -0
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/diagnosticsCommand.js +94 -10
- package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.js +67 -31
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/keyCommand.js +32 -2
- package/dist/src/ui/commands/keyCommand.js.map +1 -1
- package/dist/src/ui/commands/keyfileCommand.js +15 -12
- package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
- package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
- package/dist/src/ui/commands/loggingCommand.js +421 -0
- package/dist/src/ui/commands/loggingCommand.js.map +1 -0
- package/dist/src/ui/commands/modelCommand.js +21 -3
- package/dist/src/ui/commands/modelCommand.js.map +1 -1
- package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
- package/dist/src/ui/commands/privacyCommand.js +6 -3
- package/dist/src/ui/commands/privacyCommand.js.map +1 -1
- package/dist/src/ui/commands/providerCommand.js +52 -14
- package/dist/src/ui/commands/providerCommand.js.map +1 -1
- package/dist/src/ui/commands/setCommand.js +17 -1
- package/dist/src/ui/commands/setCommand.js.map +1 -1
- package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
- package/dist/src/ui/commands/settingsCommand.js +16 -0
- package/dist/src/ui/commands/settingsCommand.js.map +1 -0
- package/dist/src/ui/commands/toolformatCommand.js +79 -23
- package/dist/src/ui/commands/toolformatCommand.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +14 -2
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.js +15 -54
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.js +14 -2
- package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
- package/dist/src/ui/components/FolderTrustDialog.js +38 -0
- package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
- package/dist/src/ui/components/Footer.js +136 -16
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.d.ts +1 -0
- package/dist/src/ui/components/InputPrompt.js +87 -31
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
- package/dist/src/ui/components/LoggingDialog.js +155 -0
- package/dist/src/ui/components/LoggingDialog.js.map +1 -0
- package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
- package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
- package/dist/src/ui/components/OAuthCodeDialog.d.ts +13 -0
- package/dist/src/ui/components/OAuthCodeDialog.js +54 -0
- package/dist/src/ui/components/OAuthCodeDialog.js.map +1 -0
- package/dist/src/ui/components/ProviderDialog.js +100 -26
- package/dist/src/ui/components/ProviderDialog.js.map +1 -1
- package/dist/src/ui/components/ProviderModelDialog.js +99 -27
- package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.d.ts +14 -0
- package/dist/src/ui/components/SettingsDialog.js +247 -0
- package/dist/src/ui/components/SettingsDialog.js.map +1 -0
- package/dist/src/ui/components/ThemeDialog.js +4 -15
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/TodoPanel.js +93 -18
- package/dist/src/ui/components/TodoPanel.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +85 -7
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
- package/dist/src/ui/contexts/SettingsContext.js +15 -0
- package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
- package/dist/src/ui/hooks/atCommandProcessor.js +21 -0
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -2
- package/dist/src/ui/hooks/slashCommandProcessor.js +142 -113
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAuthCommand.js +48 -2
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
- package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
- package/dist/src/ui/hooks/useFolderTrust.js +22 -0
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +35 -10
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
- package/dist/src/ui/hooks/useResponsive.js +19 -0
- package/dist/src/ui/hooks/useResponsive.js.map +1 -0
- package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
- package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
- package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
- package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
- package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
- package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
- package/dist/src/ui/keyMatchers.d.ts +26 -0
- package/dist/src/ui/keyMatchers.js +68 -0
- package/dist/src/ui/keyMatchers.js.map +1 -0
- package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
- package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
- package/dist/src/ui/reducers/appReducer.d.ts +3 -2
- package/dist/src/ui/reducers/appReducer.js +1 -0
- package/dist/src/ui/reducers/appReducer.js.map +1 -1
- package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
- package/dist/src/ui/themes/semantic-resolver.js +32 -0
- package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
- package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
- package/dist/src/ui/themes/semantic-tokens.js +7 -0
- package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
- package/dist/src/ui/themes/theme-compat.d.ts +34 -0
- package/dist/src/ui/themes/theme-compat.js +65 -0
- package/dist/src/ui/themes/theme-compat.js.map +1 -0
- package/dist/src/ui/themes/theme-manager.d.ts +8 -0
- package/dist/src/ui/themes/theme-manager.js +18 -0
- package/dist/src/ui/themes/theme-manager.js.map +1 -1
- package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
- package/dist/src/ui/utils/CodeColorizer.js +4 -3
- package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
- package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
- package/dist/src/ui/utils/responsive.d.ts +16 -0
- package/dist/src/ui/utils/responsive.js +111 -0
- package/dist/src/ui/utils/responsive.js.map +1 -0
- package/dist/src/utils/cleanup.d.ts +2 -2
- package/dist/src/utils/cleanup.js +2 -2
- package/dist/src/utils/cleanup.js.map +1 -1
- package/dist/src/utils/dialogScopeUtils.d.ts +31 -0
- package/dist/src/utils/dialogScopeUtils.js +48 -0
- package/dist/src/utils/dialogScopeUtils.js.map +1 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
- package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
- package/dist/src/utils/privacy/PrivacyManager.js +133 -0
- package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
- package/dist/src/utils/sandbox.js +10 -0
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/utils/settingsUtils.d.ts +126 -0
- package/dist/src/utils/settingsUtils.js +327 -0
- package/dist/src/utils/settingsUtils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
- package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -30
- 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
|
+
}
|