Skip to content

Commit d60291e

Browse files
authored
Merge pull request #596 from devchat-ai/chore/optimize-log-implementation
chore: Update submodules and optimize code completion
2 parents ee55a20 + 5b186d6 commit d60291e

File tree

6 files changed

+49
-23
lines changed

6 files changed

+49
-23
lines changed

src/contributes/codecomplete/codecomplete.ts

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { outputAst } from './astTest';
1111
import { getEndOfLine } from './ast/language';
1212
import { RecentEditsManager } from './recentEdits';
1313
import { GitDiffWatcher } from './gitDiffWatcher';
14+
import { MessageHandler } from '../../handler/messageHandler';
1415

1516
export function registerCodeCompleteCallbackCommand(context: vscode.ExtensionContext) {
1617
let disposable = vscode.commands.registerCommand(
@@ -44,6 +45,7 @@ function isSubsequence(sub: string, source: string): boolean {
4445

4546
interface LogEventRequest {
4647
completion_id: string;
48+
is_manual_trigger: boolean;
4749
type: string; // "view", "select"
4850
lines: number;
4951
length: number; // length of code completed
@@ -77,26 +79,11 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
7779
}
7880

7981
async logEventToServer(event: LogEventRequest) {
80-
const devchatToken = this.devchatConfig.get("providers.devchat.api_key");
81-
const devchatEndpoint = this.devchatConfig.get("providers.devchat.api_base");
82-
const apiUrl = `${devchatEndpoint}/complete_events`;
83-
const requestOptions: RequestInit = {
84-
method: 'POST',
85-
headers: {
86-
"Content-Type": "application/json",
87-
"Authorization": `Bearer ${devchatToken}`,
88-
},
89-
body: JSON.stringify(event),
90-
};
82+
MessageHandler.sendMessage2({command: "logEvent", id: event.completion_id, language: event.language, name: event.type, value: {...event}});
83+
}
9184

92-
try {
93-
const response = await fetch(apiUrl, requestOptions);
94-
if (!response.ok) {
95-
logger.channel()?.info("log event to server failed:", response.status);
96-
}
97-
} catch (error) {
98-
console.error('Error posting event to the server:', error);
99-
}
85+
async logMessageToServer(id: string, language: string, model: string, result: string) {
86+
MessageHandler.sendMessage2({command: "logMessage", id: id, language, commandName: "code_completion", content: result, model});
10087
}
10188

10289
// check whether need to send code complete event
@@ -219,6 +206,7 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
219206
if (!this.isManualTrigger && this.devchatConfig.get("complete_enable") !== true) {
220207
return [];
221208
}
209+
const isManualTrigger = this.isManualTrigger;
222210

223211
// const filepath = document.uri.fsPath;
224212
// const fileContent = document.getText();
@@ -269,12 +257,20 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
269257
}
270258
}
271259

260+
this.logMessageToServer(
261+
response.result.id,
262+
path.extname(document.uri.fsPath).toLowerCase().slice(1),
263+
DevChatConfig.getInstance().get("complete_model") ?? "unknow",
264+
response.result.code
265+
);
266+
272267
// TODO
273268
// 代码补全建议是否已经被用户看到,这个需要更加准确的方式来识别。
274269
logger.channel()?.trace("code complete show.");
275270
this.logEventToServer(
276271
{
277272
completion_id: response.result.id,
273+
is_manual_trigger: isManualTrigger,
278274
type: "view",
279275
lines: response.result.code.split('\n').length,
280276
length: response.result.code.length,
@@ -302,6 +298,7 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
302298
this.logEventToServer(
303299
{
304300
completion_id: response!.result.id,
301+
is_manual_trigger: isManualTrigger,
305302
type: "select",
306303
lines: response!.result.code.split('\n').length,
307304
length: response!.result.code.length,

src/contributes/commands.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ async function copyDirectory(src: string, dest: string): Promise<void> {
2929
const srcPath = path.join(src, entry.name);
3030
const destPath = path.join(dest, entry.name);
3131

32+
if (entry.name === ".git") {
33+
continue;
34+
}
35+
3236
if (entry.isDirectory()) {
3337
await copyDirectory(srcPath, destPath);
3438
} else {
@@ -185,6 +189,12 @@ export function regApplyDiffResultCommand(context: vscode.ExtensionContext) {
185189
);
186190
}
187191

192+
function getExtensionVersion(): string {
193+
const packageJsonPath = path.join(__dirname, '..', 'package.json');
194+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
195+
return packageJson.version;
196+
}
197+
188198
export function registerInstallCommandsCommand(
189199
context: vscode.ExtensionContext
190200
) {
@@ -195,17 +205,22 @@ export function registerInstallCommandsCommand(
195205
const homePath = process.env.HOME || process.env.USERPROFILE || "";
196206
const sysDirPath = path.join(homePath, ".chat", "scripts");
197207
const sysMericoDirPath = path.join(homePath, ".chat", "scripts", "merico");
208+
const devchatConfig = DevChatConfig.getInstance();
198209
const pluginDirPath = path.join(
199210
UiUtilWrapper.extensionPath(),
200211
"workflowsCommands"
201212
); // Adjust this path as needed
202213

203214
const dcClient = new DevChatClient();
215+
const updatePublicWorkflow = devchatConfig.get("update_public_workflow", true);
216+
const currentVersion = UiUtilWrapper.extensionPath();
217+
const previousVersion = devchatConfig.get("last_devchat_version", "");
204218

205-
if (!fs.existsSync(sysMericoDirPath)) {
219+
if (!fs.existsSync(sysMericoDirPath) || (updatePublicWorkflow === false && currentVersion !== previousVersion)) {
206220
logger.channel()?.debug("Creating directory: " + sysMericoDirPath);
207221
await copyDirectory(pluginDirPath, sysDirPath);
208222
}
223+
devchatConfig.set("last_devchat_version", currentVersion);
209224

210225
// Check if ~/.chat/scripts directory exists
211226
if (!fs.existsSync(sysMericoDirPath)) {

src/handler/messageHandler.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import * as vscode from 'vscode';
44

55
import { logger } from '../util/logger';
6+
import { ExtensionContextHolder } from '../util/extensionContext';
67

78

89
export class MessageHandler {
@@ -60,6 +61,19 @@ export class MessageHandler {
6061

6162
panel.webview.postMessage(message);
6263
}
64+
65+
public static sendMessage2(message : any, log: boolean = true): void {
66+
if (log) {
67+
logger.channel()?.trace(`Message to GUI: "${JSON.stringify(message)}"`);
68+
}
69+
70+
const panel = ExtensionContextHolder.provider?.view()!;
71+
if (!panel) {
72+
logger.channel()?.warn(`No panel found to send message: "${JSON.stringify(message)}"`);
73+
return;
74+
}
75+
panel.webview.postMessage(message);
76+
}
6377
}
6478

6579
export const messageHandler = new MessageHandler();

tools

Submodule tools updated 37 files

workflowsCommands

Submodule workflowsCommands updated 83 files

0 commit comments

Comments
 (0)