+Last few Errors
+
+
+\`\`\`
+${error}
+\`\`\`
+
+
+`;
+};
diff --git a/src/logger.ts b/src/logger.ts
index e236021..7d5b12d 100644
--- a/src/logger.ts
+++ b/src/logger.ts
@@ -3,9 +3,15 @@
*--------------------------------------------------------------------------------------------*/
import { ExtensionContext, ExtensionMode, LogOutputChannel, window } from "vscode";
+import { StopWatch } from "./platform/common/stopwatch";
let logger: LogOutputChannel;
+const lastSeenError = {
+ timer: new StopWatch(),
+ error: ''
+}
+
export function initializeLogger(extensionContext: ExtensionContext) {
if (!logger) {
logger = window.createOutputChannel('Data Analysis', { log: true });
@@ -17,9 +23,32 @@ export function initializeLogger(extensionContext: ExtensionContext) {
debug.bind(logger)(message, ...args);
};
+ const error = logger.error;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ logger.error = (errorMsg: string | Error, ...args: any[]) => {
+ // Get track of the last known error for issue reporting purposes.
+ lastSeenError.timer.reset();
+ lastSeenError.error = [`${getTime()} ${errorMsg.toString()}`].concat(args.map(arg => `${arg}`)).join('\n');
+ error.bind(logger)(errorMsg, ...args);
+ }
}
return logger;
}
-export { logger };
+
+function getTime() {
+ const now = new Date();
+ return now.toTimeString().split(' ')[0];
+}
+
+function getLastErrors() {
+ // If we haven't see any errors in the past 20 minutes, no point reporting any old errors.
+ if (!lastSeenError.error || lastSeenError.timer.elapsedTime > 20 * 60 * 1000) {
+ return '';
+ }
+ return lastSeenError.error;
+}
+
+export { getLastErrors, logger };
+
diff --git a/src/platform/common/stopwatch.ts b/src/platform/common/stopwatch.ts
new file mode 100644
index 0000000..9f2a91e
--- /dev/null
+++ b/src/platform/common/stopwatch.ts
@@ -0,0 +1,17 @@
+/*---------------------------------------------------------------------------------------------
+* Copyright (c) Microsoft Corporation and GitHub. All rights reserved.
+*--------------------------------------------------------------------------------------------*/
+
+
+/**
+ * Tracks wall clock time. Start time is set at contruction.
+ */
+export class StopWatch {
+ private started = Date.now();
+ public get elapsedTime() {
+ return Date.now() - this.started;
+ }
+ public reset() {
+ this.started = Date.now();
+ }
+}
diff --git a/src/tools.ts b/src/tools.ts
index 3f74ec3..54fd3cb 100644
--- a/src/tools.ts
+++ b/src/tools.ts
@@ -78,7 +78,7 @@ export class RunPythonTool implements vscode.LanguageModelTool