-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpreload.js
More file actions
102 lines (91 loc) · 5.15 KB
/
Copy pathpreload.js
File metadata and controls
102 lines (91 loc) · 5.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electronAPI', {
// Shell execution
runCommand: (command, cwd) => ipcRenderer.invoke('shell:run', command, cwd),
// RAG Agent
rag: {
index: (files) => ipcRenderer.invoke('rag:index', files),
query: (text) => ipcRenderer.invoke('rag:query', text),
indexKB: () => ipcRenderer.invoke('rag:index-kb'),
},
// Workspace state
saveState: (state) => ipcRenderer.invoke('editor:save-state', state),
getState: () => ipcRenderer.invoke('editor:get-state'),
// Dialog
openFolder: () => ipcRenderer.invoke('dialog:openFolder'),
// File system
readDir: (dirPath) => ipcRenderer.invoke('fs:readDir', dirPath),
readFile: (filePath) => ipcRenderer.invoke('fs:readFile', filePath),
writeFile: (filePath, content) => ipcRenderer.invoke('fs:writeFile', filePath, content),
createFile: (filePath) => ipcRenderer.invoke('fs:createFile', filePath),
createFolder: (folderPath) => ipcRenderer.invoke('fs:createFolder', folderPath),
deleteFile: (filePath) => ipcRenderer.invoke('fs:deleteFile', filePath),
deleteFolder: (folderPath) => ipcRenderer.invoke('fs:deleteFolder', folderPath),
rename: (oldPath, newPath) => ipcRenderer.invoke('fs:rename', oldPath, newPath),
showContextMenu: (path, isDirectory) => ipcRenderer.send('context-menu:show', { path, isDirectory }),
onMenuAction: (callback) => {
const subscription = (event, data) => callback(data);
ipcRenderer.on('context-menu:action', subscription);
return () => ipcRenderer.removeListener('context-menu:action', subscription);
},
onOpenFolder: (callback) => {
const subscription = () => callback();
ipcRenderer.on('open-folder', subscription);
return () => ipcRenderer.removeListener('open-folder', subscription);
},
onCloseFolder: (callback) => {
const subscription = () => callback();
ipcRenderer.on('close-folder', subscription);
return () => ipcRenderer.removeListener('close-folder', subscription);
},
// Terminal
createTerminal: (cols, rows) => ipcRenderer.invoke('terminal:create', cols, rows),
writeTerminal: (data) => ipcRenderer.send('terminal:write', data),
resizeTerminal: (cols, rows) => ipcRenderer.send('terminal:resize', cols, rows),
onTerminalData: (callback) => ipcRenderer.on('terminal:data', (_, data) => callback(data)),
onTerminalExit: (callback) => {
const listener = () => callback();
ipcRenderer.on('terminal:exit', listener);
return () => ipcRenderer.removeListener('terminal:exit', listener);
},
setTerminalCwd: (cwd) => ipcRenderer.send('terminal:cwd', cwd),
// Tab management
onCloseTab: (callback) => {
const listener = () => callback();
ipcRenderer.on('close-active-tab', listener);
return () => ipcRenderer.removeListener('close-active-tab', listener);
},
// Codeforces
codeforces: {
saveCreds: (creds) => ipcRenderer.invoke('codeforces:save-creds', creds),
getCreds: () => ipcRenderer.invoke('codeforces:get-creds'),
getSubmissions: (handle) => ipcRenderer.invoke('codeforces:get-submissions', handle),
getUserInfo: (handle) => ipcRenderer.invoke('codeforces:get-user-info', handle),
onOpenSettings: (callback) => ipcRenderer.on('codeforces:open-settings', () => callback()),
getDatasetMetadata: () => ipcRenderer.invoke('codeforces:get-dataset-metadata'),
getFilteredProblems: (filters) => ipcRenderer.invoke('codeforces:get-filtered-problems', filters),
},
onRagProgress: (callback) => ipcRenderer.on('rag:progress', (_, data) => callback(data)),
// AI
initAI: (sessionId) => ipcRenderer.invoke('ai:init', sessionId),
checkModel: () => ipcRenderer.invoke('ai:check-model'),
askAI: (prompt, sessionId) => ipcRenderer.invoke('ai:ask', prompt, sessionId),
completeAI: (codeContext) => ipcRenderer.invoke('ai:complete', codeContext),
inlinePrompt: (code, prompt, lineNumber) => ipcRenderer.invoke('ai:inline-prompt', code, prompt, lineNumber),
setModel: (modelId) => ipcRenderer.invoke('ai:set-model', modelId),
getActiveModel: () => ipcRenderer.invoke('ai:get-active-model'),
getModels: () => ipcRenderer.invoke('ai:get-models'),
onAIDownloadProgress: (callback) => ipcRenderer.on('ai:download-progress', (_, progress, message) => callback(progress, message)),
// Zoom
setZoom: (level) => ipcRenderer.invoke('app:set-zoom', level),
getZoom: () => ipcRenderer.invoke('app:get-zoom'),
indexProject: (dirPath) => ipcRenderer.invoke('fs:indexProject', dirPath),
searchFiles: (rootPath, query, options) => ipcRenderer.invoke('fs:search', rootPath, query, options),
destroySession: (sessionId) => ipcRenderer.invoke('ai:destroy-session', sessionId),
deleteModel: (modelId) => ipcRenderer.invoke('ai:delete-model', modelId),
});
contextBridge.exposeInMainWorld('run', {
submit: (a) => ipcRenderer.invoke('submit-code', a),
parse: (a) => ipcRenderer.invoke('parsed-code', a),
generateTestCases: (code, count) => ipcRenderer.invoke('generate-testcases', code, count)
});