mirror of
https://github.com/carlrobertoh/ProxyAI.git
synced 2026-04-28 03:30:48 +00:00
feat: support debug logs
This commit is contained in:
parent
e7e9a2d9d8
commit
3f7ffb36a6
8 changed files with 55 additions and 19 deletions
|
|
@ -94,7 +94,7 @@ git submodule update
|
|||
|
||||
**Tailing logs**
|
||||
```shell
|
||||
tail -f build/idea-sandbox/IC-2024.1.2/log/idea.log
|
||||
tail -f build/idea-sandbox/IC-2025.1.1/log/idea.log
|
||||
```
|
||||
|
||||
## Privacy
|
||||
|
|
|
|||
|
|
@ -22,8 +22,11 @@ import java.net.InetSocketAddress;
|
|||
import java.net.Proxy;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import okhttp3.Credentials;
|
||||
import okhttp3.OkHttpClient;
|
||||
import ee.carlrobert.codegpt.settings.configuration.ConfigurationSettings;
|
||||
import okhttp3.logging.HttpLoggingInterceptor;
|
||||
|
||||
public class CompletionClientProvider {
|
||||
|
||||
|
|
@ -106,6 +109,16 @@ public class CompletionClientProvider {
|
|||
}
|
||||
}
|
||||
|
||||
if (ConfigurationSettings.getState().getDebugModeEnabled()) {
|
||||
var ideLogger = Logger.getInstance(CompletionClientProvider.class);
|
||||
var httpLogger = new HttpLoggingInterceptor(message -> ideLogger.info("[HTTP] " + message));
|
||||
httpLogger.setLevel(HttpLoggingInterceptor.Level.BODY);
|
||||
httpLogger.redactHeader("Authorization");
|
||||
httpLogger.redactHeader("X-API-Key");
|
||||
httpLogger.redactHeader("Api-Key");
|
||||
builder.addInterceptor(httpLogger);
|
||||
}
|
||||
|
||||
return builder
|
||||
.connectTimeout(advancedSettings.getConnectTimeout(), TimeUnit.SECONDS)
|
||||
.readTimeout(advancedSettings.getReadTimeout(), TimeUnit.SECONDS);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,9 @@ import com.intellij.ui.components.JBTextField;
|
|||
import com.intellij.util.ui.FormBuilder;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.intellij.util.ui.UI;
|
||||
import com.intellij.util.ui.components.BorderLayoutPanel;
|
||||
import ee.carlrobert.codegpt.CodeGPTBundle;
|
||||
import ee.carlrobert.codegpt.settings.configuration.ConfigurationSettings;
|
||||
import ee.carlrobert.codegpt.ui.UIUtil;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.net.Proxy;
|
||||
|
|
@ -28,6 +30,7 @@ public class AdvancedSettingsComponent {
|
|||
private final JBPasswordField proxyAuthPassword;
|
||||
private final PortField connectionTimeoutField;
|
||||
private final PortField readTimeoutField;
|
||||
private final JBCheckBox debugModeCheckBox;
|
||||
|
||||
public AdvancedSettingsComponent(AdvancedSettingsState advancedSettings) {
|
||||
proxyTypeComboBox = new ComboBox<>(new Proxy.Type[]{
|
||||
|
|
@ -52,6 +55,11 @@ public class AdvancedSettingsComponent {
|
|||
connectionTimeoutField = new PortField(advancedSettings.getConnectTimeout());
|
||||
readTimeoutField = new PortField(advancedSettings.getReadTimeout());
|
||||
|
||||
debugModeCheckBox = new JBCheckBox(
|
||||
"Enable debug mode",
|
||||
ConfigurationSettings.getState().getDebugModeEnabled()
|
||||
);
|
||||
|
||||
mainPanel = FormBuilder.createFormBuilder()
|
||||
.addComponent(new TitledSeparator(CodeGPTBundle.get(
|
||||
"advancedSettingsConfigurable.proxy.title")))
|
||||
|
|
@ -60,6 +68,11 @@ public class AdvancedSettingsComponent {
|
|||
.addComponent(new TitledSeparator(
|
||||
CodeGPTBundle.get("advancedSettingsConfigurable.connectionSettings.title")))
|
||||
.addComponent(createConnectionSettingsForm())
|
||||
.addVerticalGap(4)
|
||||
.addComponent(new TitledSeparator("Debug"))
|
||||
.addComponent(new BorderLayoutPanel()
|
||||
.addToLeft(debugModeCheckBox)
|
||||
.withBorder(JBUI.Borders.emptyLeft(16)))
|
||||
.addComponentFillVertically(new JPanel(), 0)
|
||||
.getPanel();
|
||||
}
|
||||
|
|
@ -151,5 +164,14 @@ public class AdvancedSettingsComponent {
|
|||
proxyAuthPassword.setText(advancedSettings.getProxyPassword());
|
||||
connectionTimeoutField.setNumber(advancedSettings.getConnectTimeout());
|
||||
readTimeoutField.setNumber(advancedSettings.getReadTimeout());
|
||||
debugModeCheckBox.setSelected(ConfigurationSettings.getState().getDebugModeEnabled());
|
||||
}
|
||||
|
||||
public boolean isDebugModeEnabled() {
|
||||
return debugModeCheckBox.isSelected();
|
||||
}
|
||||
|
||||
public void setDebugModeEnabled(boolean enabled) {
|
||||
debugModeCheckBox.setSelected(enabled);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package ee.carlrobert.codegpt.settings.advanced;
|
|||
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import ee.carlrobert.codegpt.CodeGPTBundle;
|
||||
import ee.carlrobert.codegpt.settings.configuration.ConfigurationSettings;
|
||||
import javax.swing.JComponent;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
|
@ -24,17 +25,22 @@ public class AdvancedSettingsConfigurable implements Configurable {
|
|||
|
||||
@Override
|
||||
public boolean isModified() {
|
||||
return !component.getCurrentFormState().equals(AdvancedSettings.getCurrentState());
|
||||
boolean advChanged = !component.getCurrentFormState().equals(AdvancedSettings.getCurrentState());
|
||||
boolean debugChanged = component.isDebugModeEnabled() !=
|
||||
ConfigurationSettings.getState().getDebugModeEnabled();
|
||||
return advChanged || debugChanged;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply() {
|
||||
AdvancedSettings.getInstance().loadState(component.getCurrentFormState());
|
||||
ConfigurationSettings.getState().setDebugModeEnabled(component.isDebugModeEnabled());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
component.resetForm();
|
||||
component.setDebugModeEnabled(ConfigurationSettings.getState().getDebugModeEnabled());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
package ee.carlrobert.codegpt.codecompletions
|
||||
|
||||
import com.intellij.openapi.application.runReadAction
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.diagnostic.thisLogger
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import ee.carlrobert.codegpt.settings.configuration.ConfigurationSettings
|
||||
import org.apache.commons.text.similarity.LevenshteinDistance
|
||||
import kotlin.math.min
|
||||
|
||||
|
|
@ -37,18 +39,14 @@ class CodeCompletionFormatter(private val editor: Editor) {
|
|||
private var originalCompletion = ""
|
||||
private var isDebugEnabled = false
|
||||
|
||||
fun withDebug(): CodeCompletionFormatter {
|
||||
isDebugEnabled = true
|
||||
return this
|
||||
}
|
||||
|
||||
fun format(completion: String): String {
|
||||
this.completion = ""
|
||||
this.normalizedCompletion = completion.trim()
|
||||
this.originalCompletion = completion
|
||||
this.isDebugEnabled = service<ConfigurationSettings>().state.debugModeEnabled
|
||||
|
||||
return withDebug()
|
||||
.matchCompletionBrackets()
|
||||
return this
|
||||
.matchCompletionBrackets()
|
||||
.removeSuffix()
|
||||
.removeDuplicateQuotes()
|
||||
.removeMiddleQuotes()
|
||||
|
|
@ -275,4 +273,4 @@ class CodeCompletionFormatter(private val editor: Editor) {
|
|||
|
||||
return this
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@ import com.intellij.diff.DiffManager
|
|||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.ide.BrowserUtil
|
||||
import com.intellij.notification.NotificationAction
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.notification.NotificationType
|
||||
import com.intellij.openapi.application.runInEdt
|
||||
import com.intellij.openapi.application.runReadAction
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.editor.ScrollType
|
||||
import com.intellij.openapi.editor.ex.EditorEx
|
||||
|
|
@ -25,20 +25,16 @@ import ee.carlrobert.codegpt.CodeGPTBundle
|
|||
import ee.carlrobert.codegpt.CodeGPTKeys
|
||||
import ee.carlrobert.codegpt.codecompletions.CompletionProgressNotifier
|
||||
import ee.carlrobert.codegpt.conversations.Conversation
|
||||
import ee.carlrobert.codegpt.conversations.ConversationService
|
||||
import ee.carlrobert.codegpt.conversations.message.Message
|
||||
import ee.carlrobert.codegpt.toolwindow.chat.ChatToolWindowContentManager
|
||||
import ee.carlrobert.codegpt.toolwindow.chat.parser.ReplaceWaiting
|
||||
import ee.carlrobert.codegpt.toolwindow.chat.parser.SearchReplace
|
||||
import ee.carlrobert.codegpt.toolwindow.chat.parser.SearchWaiting
|
||||
import ee.carlrobert.codegpt.toolwindow.chat.parser.SseMessageParser
|
||||
import ee.carlrobert.codegpt.toolwindow.chat.parser.Text
|
||||
import ee.carlrobert.codegpt.toolwindow.chat.parser.CodeHeader
|
||||
import ee.carlrobert.codegpt.toolwindow.chat.parser.Code
|
||||
import ee.carlrobert.codegpt.toolwindow.chat.parser.CodeEnd
|
||||
import ee.carlrobert.codegpt.ui.OverlayUtil
|
||||
import ee.carlrobert.codegpt.ui.components.InlineEditChips
|
||||
import ee.carlrobert.codegpt.util.EditorDiffUtil
|
||||
import ee.carlrobert.codegpt.toolwindow.chat.ChatToolWindowContentManager
|
||||
import ee.carlrobert.codegpt.conversations.ConversationService
|
||||
import ee.carlrobert.codegpt.conversations.message.Message
|
||||
import ee.carlrobert.llm.client.openai.completion.ErrorDetails
|
||||
import ee.carlrobert.llm.completion.CompletionEventListener
|
||||
import okhttp3.sse.EventSource
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ class ConfigurationSettings :
|
|||
}
|
||||
|
||||
class ConfigurationSettingsState : BaseState() {
|
||||
var debugModeEnabled by property(false)
|
||||
var commitMessagePrompt by string(CoreActionsState.DEFAULT_GENERATE_COMMIT_MESSAGE_PROMPT)
|
||||
var maxTokens by property(8192)
|
||||
var temperature by property(0.1f) { max(0f, min(1f, it)) }
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ object MarkdownUtil {
|
|||
@JvmStatic
|
||||
fun extractCodeBlocks(inputMarkdown: String): List<String> {
|
||||
val pattern = Pattern.compile(
|
||||
"(?ms)```([a-zA-Z0-9_+\-]*)\s*\r?\n([\s\S]*?)\r?\n```"
|
||||
"(?ms)```([a-zA-Z0-9_+\\-]*)\\s*\r?\n([\\s\\S]*?)\r?\n```"
|
||||
)
|
||||
val matcher = pattern.matcher(inputMarkdown)
|
||||
val results = mutableListOf<String>()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue