68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
|
|
/**
|
|||
|
|
* 预加载:桌面能力 + 用户目录(对标 Codex ~/.codex → ~/.aps)
|
|||
|
|
*/
|
|||
|
|
const { contextBridge, ipcRenderer } = require('electron');
|
|||
|
|
const os = require('os');
|
|||
|
|
const path = require('path');
|
|||
|
|
|
|||
|
|
/** 安装态 / 桌面态:固定用户主目录下的 .aps */
|
|||
|
|
const home = process.env.APS_HOME || path.join(os.homedir(), '.aps');
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
contextBridge.exposeInMainWorld('apsDesktop', {
|
|||
|
|
mode: 'desktop',
|
|||
|
|
apiUrl: process.env.APS_API_URL || 'http://127.0.0.1:8000',
|
|||
|
|
home,
|
|||
|
|
skillsDir: path.join(home, 'skills'),
|
|||
|
|
sessionsDir: path.join(home, 'sessions'),
|
|||
|
|
async getDeviceId() {
|
|||
|
|
return ipcRenderer.invoke('aps:get-device-id');
|
|||
|
|
},
|
|||
|
|
openHome() {
|
|||
|
|
ipcRenderer.send('aps:open-path', 'home');
|
|||
|
|
},
|
|||
|
|
openSkills() {
|
|||
|
|
ipcRenderer.send('aps:open-path', 'skills');
|
|||
|
|
},
|
|||
|
|
openSessions() {
|
|||
|
|
ipcRenderer.send('aps:open-path', 'sessions');
|
|||
|
|
},
|
|||
|
|
async pickDirectory() {
|
|||
|
|
return ipcRenderer.invoke('aps:pick-directory');
|
|||
|
|
},
|
|||
|
|
toggleDevTools() {
|
|||
|
|
ipcRenderer.send('aps:toggle-devtools');
|
|||
|
|
},
|
|||
|
|
toggleFullScreen() {
|
|||
|
|
ipcRenderer.send('aps:toggle-fullscreen');
|
|||
|
|
},
|
|||
|
|
leaveFullScreen() {
|
|||
|
|
ipcRenderer.send('aps:leave-fullscreen');
|
|||
|
|
},
|
|||
|
|
windowMinimize() {
|
|||
|
|
ipcRenderer.send('aps:window-minimize');
|
|||
|
|
},
|
|||
|
|
windowMaximize() {
|
|||
|
|
ipcRenderer.send('aps:window-maximize');
|
|||
|
|
},
|
|||
|
|
windowClose() {
|
|||
|
|
ipcRenderer.send('aps:window-close');
|
|||
|
|
},
|
|||
|
|
onWindowState(callback) {
|
|||
|
|
if (typeof callback !== 'function') return () => {};
|
|||
|
|
const handler = (_event, state) => callback(state);
|
|||
|
|
ipcRenderer.on('aps:window-state', handler);
|
|||
|
|
ipcRenderer.send('aps:window-state-request');
|
|||
|
|
return () => ipcRenderer.removeListener('aps:window-state', handler);
|
|||
|
|
},
|
|||
|
|
onMenuAction(callback) {
|
|||
|
|
if (typeof callback !== 'function') return () => {};
|
|||
|
|
const handler = (_event, action) => callback(action);
|
|||
|
|
ipcRenderer.on('menu:action', handler);
|
|||
|
|
return () => ipcRenderer.removeListener('menu:action', handler);
|
|||
|
|
},
|
|||
|
|
});
|
|||
|
|
} catch (err) {
|
|||
|
|
console.error('[aps-desktop] preload expose failed', err);
|
|||
|
|
}
|