83 lines
2.6 KiB
JavaScript
83 lines
2.6 KiB
JavaScript
/**
|
||
* 预加载:桌面能力 + 用户目录(对标 Codex ~/.codex → ~/.aps)
|
||
*/
|
||
const { contextBridge, ipcRenderer } = require('electron');
|
||
|
||
function argumentValue(name) {
|
||
const prefix = `--${name}=`;
|
||
const value = process.argv.find((argument) => argument.startsWith(prefix));
|
||
return value ? decodeURIComponent(value.slice(prefix.length)) : '';
|
||
}
|
||
|
||
/** 安装态 / 桌面态:固定用户主目录下的 .aps */
|
||
const home = argumentValue('aps-home');
|
||
|
||
try {
|
||
contextBridge.exposeInMainWorld('apsDesktop', {
|
||
mode: 'desktop',
|
||
apiUrl: argumentValue('aps-api-url'),
|
||
home,
|
||
skillsDir: argumentValue('aps-skills-dir'),
|
||
sessionsDir: argumentValue('aps-sessions-dir'),
|
||
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');
|
||
},
|
||
|
||
/** 离线升级入口(updater.cjs):检查更新 / 应用升级(失败自动回滚)/ 手动回滚 */
|
||
checkForUpdate(options) {
|
||
return ipcRenderer.invoke('aps:check-for-update', options);
|
||
},
|
||
applyUpdate(options) {
|
||
return ipcRenderer.invoke('aps:apply-update', options);
|
||
},
|
||
rollback(options) {
|
||
return ipcRenderer.invoke('aps:rollback', options);
|
||
},
|
||
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);
|
||
}
|