Merge branch 'refactor/0712' of https://github.com/pickle-com/glass into refactor/0712

This commit is contained in:
sanio 2025-07-12 20:34:38 +09:00
commit 6faa5d7ec7
25 changed files with 65 additions and 74 deletions

2
aec

@ -1 +1 @@
Subproject commit 9e11f4f95707714464194bdfc9db0222ec5c6163
Subproject commit f00bb1fb948053c752b916adfee19f90644a0b2f

View File

@ -1,10 +1,10 @@
const { ipcMain, BrowserWindow } = require('electron');
const { createStreamingLLM } = require('../../common/ai/factory');
const { createStreamingLLM } = require('../common/ai/factory');
const { getStoredApiKey, getStoredProvider, getCurrentModelInfo, windowPool, captureScreenshot } = require('../../window/windowManager');
const authService = require('../../common/services/authService');
const sessionRepository = require('../../common/repositories/session');
const authService = require('../common/services/authService');
const sessionRepository = require('../common/repositories/session');
const askRepository = require('./repositories');
const { getSystemPrompt } = require('../../common/prompts/promptBuilder');
const { getSystemPrompt } = require('../common/prompts/promptBuilder');
function formatConversationForPrompt(conversationTexts) {
if (!conversationTexts || conversationTexts.length === 0) return 'No conversation history available.';

View File

@ -1,6 +1,6 @@
const { collection, addDoc, query, getDocs, orderBy, Timestamp } = require('firebase/firestore');
const { getFirestoreInstance } = require('../../../common/services/firebaseClient');
const { createEncryptedConverter } = require('../../../common/repositories/firestoreConverter');
const { getFirestoreInstance } = require('../../common/services/firebaseClient');
const { createEncryptedConverter } = require('../../common/repositories/firestoreConverter');
const aiMessageConverter = createEncryptedConverter(['content']);

View File

@ -1,6 +1,6 @@
const sqliteRepository = require('./sqlite.repository');
const firebaseRepository = require('./firebase.repository');
const authService = require('../../../common/services/authService');
const authService = require('../../common/services/authService');
function getBaseRepository() {
const user = authService.getCurrentUser();

View File

@ -1,4 +1,4 @@
const sqliteClient = require('../../../common/services/sqliteClient');
const sqliteClient = require('../../common/services/sqliteClient');
function addAiMessage({ uid, sessionId, role, content, model = 'unknown' }) {
// uid is ignored in the SQLite implementation

View File

@ -1,6 +1,6 @@
const sqliteRepository = require('./sqlite.repository');
const firebaseRepository = require('./firebase.repository');
const authService = require('../../../common/services/authService');
const authService = require('../../services/authService');
function getBaseRepository() {
const user = authService.getCurrentUser();

View File

@ -5,9 +5,9 @@ const encryptionService = require('../services/encryptionService');
const sqliteSessionRepo = require('../repositories/session/sqlite.repository');
const sqlitePresetRepo = require('../repositories/preset/sqlite.repository');
const sqliteUserRepo = require('../repositories/user/sqlite.repository');
const sqliteSttRepo = require('../../features/listen/stt/repositories/sqlite.repository');
const sqliteSummaryRepo = require('../../features/listen/summary/repositories/sqlite.repository');
const sqliteAiMessageRepo = require('../../features/ask/repositories/sqlite.repository');
const sqliteSttRepo = require('../../listen/stt/repositories/sqlite.repository');
const sqliteSummaryRepo = require('../../listen/summary/repositories/sqlite.repository');
const sqliteAiMessageRepo = require('../../ask/repositories/sqlite.repository');
const MAX_BATCH_OPERATIONS = 500;

View File

@ -1,8 +1,8 @@
const { BrowserWindow, app } = require('electron');
const SttService = require('./stt/sttService');
const SummaryService = require('./summary/summaryService');
const authService = require('../../common/services/authService');
const sessionRepository = require('../../common/repositories/session');
const authService = require('../common/services/authService');
const sessionRepository = require('../common/repositories/session');
const sttRepository = require('./stt/repositories');
class ListenService {

View File

@ -1,6 +1,6 @@
const { collection, addDoc, query, getDocs, orderBy, Timestamp } = require('firebase/firestore');
const { getFirestoreInstance } = require('../../../../common/services/firebaseClient');
const { createEncryptedConverter } = require('../../../../common/repositories/firestoreConverter');
const { getFirestoreInstance } = require('../../../common/services/firebaseClient');
const { createEncryptedConverter } = require('../../../common/repositories/firestoreConverter');
const transcriptConverter = createEncryptedConverter(['text']);

View File

@ -1,6 +1,6 @@
const sqliteRepository = require('./sqlite.repository');
const firebaseRepository = require('./firebase.repository');
const authService = require('../../../../common/services/authService');
const authService = require('../../../common/services/authService');
function getBaseRepository() {
const user = authService.getCurrentUser();

View File

@ -1,4 +1,4 @@
const sqliteClient = require('../../../../common/services/sqliteClient');
const sqliteClient = require('../../../common/services/sqliteClient');
function addTranscript({ uid, sessionId, speaker, text }) {
// uid is ignored in the SQLite implementation

View File

@ -1,6 +1,6 @@
const { BrowserWindow } = require('electron');
const { spawn } = require('child_process');
const { createSTT } = require('../../../common/ai/factory');
const { createSTT } = require('../../common/ai/factory');
const { getStoredApiKey, getStoredProvider, getCurrentModelInfo } = require('../../../window/windowManager');
const COMPLETION_DEBOUNCE_MS = 2000;
@ -367,11 +367,6 @@ class SttService {
onclose: event => console.log('Their STT session closed:', event.reason),
},
};
// Determine auth options for providers that support it
// const authService = require('../../../common/services/authService');
// const userState = authService.getCurrentUser();
// const loggedIn = userState.isLoggedIn;
const sttOptions = {
apiKey: this.modelInfo.apiKey,

View File

@ -1,7 +1,7 @@
const { collection, doc, setDoc, getDoc, Timestamp } = require('firebase/firestore');
const { getFirestoreInstance } = require('../../../../common/services/firebaseClient');
const { createEncryptedConverter } = require('../../../../common/repositories/firestoreConverter');
const encryptionService = require('../../../../common/services/encryptionService');
const { getFirestoreInstance } = require('../../../common/services/firebaseClient');
const { createEncryptedConverter } = require('../../../common/repositories/firestoreConverter');
const encryptionService = require('../../../common/services/encryptionService');
const fieldsToEncrypt = ['tldr', 'text', 'bullet_json', 'action_json'];
const summaryConverter = createEncryptedConverter(fieldsToEncrypt);

View File

@ -1,6 +1,6 @@
const sqliteRepository = require('./sqlite.repository');
const firebaseRepository = require('./firebase.repository');
const authService = require('../../../../common/services/authService');
const authService = require('../../../common/services/authService');
function getBaseRepository() {
const user = authService.getCurrentUser();

View File

@ -1,4 +1,4 @@
const sqliteClient = require('../../../../common/services/sqliteClient');
const sqliteClient = require('../../../common/services/sqliteClient');
function saveSummary({ uid, sessionId, tldr, text, bullet_json, action_json, model = 'unknown' }) {
// uid is ignored in the SQLite implementation

View File

@ -1,8 +1,7 @@
const { BrowserWindow } = require('electron');
const { getSystemPrompt } = require('../../../common/prompts/promptBuilder.js');
const { createLLM } = require('../../../common/ai/factory');
const authService = require('../../../common/services/authService');
const sessionRepository = require('../../../common/repositories/session');
const { getSystemPrompt } = require('../../common/prompts/promptBuilder.js');
const { createLLM } = require('../../common/ai/factory');
const sessionRepository = require('../../common/repositories/session');
const summaryRepository = require('./repositories');
const { getStoredApiKey, getStoredProvider, getCurrentModelInfo } = require('../../../window/windowManager.js');

View File

@ -1,7 +1,7 @@
const { collection, doc, addDoc, getDoc, getDocs, updateDoc, deleteDoc, query, where, orderBy } = require('firebase/firestore');
const { getFirestoreInstance } = require('../../../common/services/firebaseClient');
const { createEncryptedConverter } = require('../../../common/repositories/firestoreConverter');
const encryptionService = require('../../../common/services/encryptionService');
const { getFirestoreInstance } = require('../../common/services/firebaseClient');
const { createEncryptedConverter } = require('../../common/repositories/firestoreConverter');
const encryptionService = require('../../common/services/encryptionService');
const userPresetConverter = createEncryptedConverter(['prompt', 'title']);

View File

@ -1,6 +1,6 @@
const sqliteRepository = require('./sqlite.repository');
const firebaseRepository = require('./firebase.repository');
const authService = require('../../../common/services/authService');
const authService = require('../../common/services/authService');
function getBaseRepository() {
const user = authService.getCurrentUser();

View File

@ -1,4 +1,4 @@
const sqliteClient = require('../../../common/services/sqliteClient');
const sqliteClient = require('../../common/services/sqliteClient');
function getPresets(uid) {
const db = sqliteClient.getDb();

View File

@ -1,6 +1,6 @@
const { ipcMain, BrowserWindow } = require('electron');
const Store = require('electron-store');
const authService = require('../../common/services/authService');
const authService = require('../common/services/authService');
const settingsRepository = require('./repositories');
const { getStoredApiKey, getStoredProvider, windowPool } = require('../../window/windowManager');

View File

@ -14,9 +14,9 @@ if (require('electron-squirrel-startup')) {
const { app, BrowserWindow, shell, ipcMain, dialog, desktopCapturer, session } = require('electron');
const { createWindows } = require('./window/windowManager.js');
const ListenService = require('./features/listen/listenService');
const { initializeFirebase } = require('./common/services/firebaseClient');
const databaseInitializer = require('./common/services/databaseInitializer');
const authService = require('./common/services/authService');
const { initializeFirebase } = require('./features/common/services/firebaseClient');
const databaseInitializer = require('./features/common/services/databaseInitializer');
const authService = require('./features/common/services/authService');
const path = require('node:path');
const express = require('express');
const fetch = require('node-fetch');
@ -24,9 +24,9 @@ const { autoUpdater } = require('electron-updater');
const { EventEmitter } = require('events');
const askService = require('./features/ask/askService');
const settingsService = require('./features/settings/settingsService');
const sessionRepository = require('./common/repositories/session');
const ModelStateService = require('./common/services/modelStateService');
const sqliteClient = require('./common/services/sqliteClient');
const sessionRepository = require('./features/common/repositories/session');
const ModelStateService = require('./features/common/services/modelStateService');
const sqliteClient = require('./features/common/services/sqliteClient');
const featureBridge = require('./bridge/featureBridge');
// Global variables
@ -44,8 +44,8 @@ global.modelStateService = modelStateService;
//////// after_modelStateService ////////
// Import and initialize OllamaService
const ollamaService = require('./common/services/ollamaService');
const ollamaModelRepository = require('./common/repositories/ollamaModel');
const ollamaService = require('./features/common/services/ollamaService');
const ollamaModelRepository = require('./features/common/repositories/ollamaModel');
// Native deep link handling - cross-platform compatible
let pendingDeepLinkUrl = null;
@ -331,7 +331,7 @@ app.on('activate', () => {
});
function setupWhisperIpcHandlers() {
const { WhisperService } = require('./common/services/whisperService');
const { WhisperService } = require('./features/common/services/whisperService');
const whisperService = new WhisperService();
// Forward download progress events to renderer
@ -395,8 +395,8 @@ function setupWhisperIpcHandlers() {
}
function setupGeneralIpcHandlers() {
const userRepository = require('./common/repositories/user');
const presetRepository = require('./common/repositories/preset');
const userRepository = require('./features/common/repositories/user');
const presetRepository = require('./features/common/repositories/preset');
ipcMain.handle('get-user-presets', () => {
// The adapter injects the UID.
@ -627,12 +627,12 @@ function setupOllamaIpcHandlers() {
}
function setupWebDataHandlers() {
const sessionRepository = require('./common/repositories/session');
const sessionRepository = require('./features/common/repositories/session');
const sttRepository = require('./features/listen/stt/repositories');
const summaryRepository = require('./features/listen/summary/repositories');
const askRepository = require('./features/ask/repositories');
const userRepository = require('./common/repositories/user');
const presetRepository = require('./common/repositories/preset');
const userRepository = require('./features/common/repositories/user');
const presetRepository = require('./features/common/repositories/preset');
const handleRequest = async (channel, responseChannel, payload) => {
let result;
@ -808,7 +808,7 @@ async function handleCustomUrl(url) {
}
async function handleFirebaseAuthCallback(params) {
const userRepository = require('./common/repositories/user');
const userRepository = require('./features/common/repositories/user');
const { token: idToken } = params;
if (!idToken) {

View File

@ -1,5 +1,5 @@
import { html, css, LitElement } from "../assets/lit-core-2.7.4.min.js"
import { getOllamaProgressTracker } from "../common/services/localProgressTracker.js"
import { getOllamaProgressTracker } from "../../features/common/services/localProgressTracker.js"
export class ApiKeyHeader extends LitElement {
//////// after_modelStateService ////////

View File

@ -1,8 +1,8 @@
import { html, css, LitElement } from '../assets/lit-core-2.7.4.min.js';
import { SettingsView } from '../settings/SettingsView.js';
import { ListenView } from '../listen/ListenView.js';
import { AskView } from '../../features/ask/AskView.js';
import { ShortcutSettingsView } from '../../features/settings/ShortCutSettingsView.js';
import { AskView } from '../ask/AskView.js';
import { ShortcutSettingsView } from '../settings/ShortCutSettingsView.js';
import '../listen/audioCore/renderer.js';

View File

@ -1,5 +1,5 @@
import { html, css, LitElement } from '../assets/lit-core-2.7.4.min.js';
import { getOllamaProgressTracker } from '../../common/services/localProgressTracker.js';
import { getOllamaProgressTracker } from '../../features/common/services/localProgressTracker.js';
export class SettingsView extends LitElement {
static styles = css`

View File

@ -17,10 +17,8 @@ try {
console.warn('[WindowManager] Screenshot functionality will work with reduced image processing capabilities');
sharp = null;
}
const authService = require('../common/services/authService');
const systemSettingsRepository = require('../common/repositories/systemSettings');
const userRepository = require('../common/repositories/user');
const fetch = require('node-fetch');
const authService = require('../features/common/services/authService');
const systemSettingsRepository = require('../features/common/repositories/systemSettings');
const Store = require('electron-store');
const shortCutStore = new Store({
name: 'user-preferences',
@ -195,11 +193,11 @@ function createFeatureWindows(header, namesToCreate) {
}
const listenLoadOptions = { query: { view: 'listen' } };
if (!shouldUseLiquidGlass) {
listen.loadFile(path.join(__dirname, '../app/content.html'), listenLoadOptions);
listen.loadFile(path.join(__dirname, '../ui/app/content.html'), listenLoadOptions);
}
else {
listenLoadOptions.query.glass = 'true';
listen.loadFile(path.join(__dirname, '../app/content.html'), listenLoadOptions);
listen.loadFile(path.join(__dirname, '../ui/app/content.html'), listenLoadOptions);
listen.webContents.once('did-finish-load', () => {
const viewId = liquidGlass.addView(listen.getNativeWindowHandle());
if (viewId !== -1) {
@ -226,11 +224,11 @@ function createFeatureWindows(header, namesToCreate) {
}
const askLoadOptions = { query: { view: 'ask' } };
if (!shouldUseLiquidGlass) {
ask.loadFile(path.join(__dirname, '../app/content.html'), askLoadOptions);
ask.loadFile(path.join(__dirname, '../ui/app/content.html'), askLoadOptions);
}
else {
askLoadOptions.query.glass = 'true';
ask.loadFile(path.join(__dirname, '../app/content.html'), askLoadOptions);
ask.loadFile(path.join(__dirname, '../ui/app/content.html'), askLoadOptions);
ask.webContents.once('did-finish-load', () => {
const viewId = liquidGlass.addView(ask.getNativeWindowHandle());
if (viewId !== -1) {
@ -261,12 +259,12 @@ function createFeatureWindows(header, namesToCreate) {
}
const settingsLoadOptions = { query: { view: 'settings' } };
if (!shouldUseLiquidGlass) {
settings.loadFile(path.join(__dirname,'../app/content.html'), settingsLoadOptions)
settings.loadFile(path.join(__dirname,'../ui/app/content.html'), settingsLoadOptions)
.catch(console.error);
}
else {
settingsLoadOptions.query.glass = 'true';
settings.loadFile(path.join(__dirname,'../app/content.html'), settingsLoadOptions)
settings.loadFile(path.join(__dirname,'../ui/app/content.html'), settingsLoadOptions)
.catch(console.error);
settings.webContents.once('did-finish-load', () => {
const viewId = liquidGlass.addView(settings.getNativeWindowHandle());
@ -325,10 +323,10 @@ function createFeatureWindows(header, namesToCreate) {
const loadOptions = { query: { view: 'shortcut-settings' } };
if (!shouldUseLiquidGlass) {
shortcutEditor.loadFile(path.join(__dirname, '../app/content.html'), loadOptions);
shortcutEditor.loadFile(path.join(__dirname, '../ui/app/content.html'), loadOptions);
} else {
loadOptions.query.glass = 'true';
shortcutEditor.loadFile(path.join(__dirname, '../app/content.html'), loadOptions);
shortcutEditor.loadFile(path.join(__dirname, '../ui/app/content.html'), loadOptions);
shortcutEditor.webContents.once('did-finish-load', () => {
const viewId = liquidGlass.addView(shortcutEditor.getNativeWindowHandle());
if (viewId !== -1) {
@ -476,11 +474,11 @@ function createWindows() {
}
const headerLoadOptions = {};
if (!shouldUseLiquidGlass) {
header.loadFile(path.join(__dirname, '../app/header.html'), headerLoadOptions);
header.loadFile(path.join(__dirname, '../ui/app/header.html'), headerLoadOptions);
}
else {
headerLoadOptions.query = { glass: 'true' };
header.loadFile(path.join(__dirname, '../app/header.html'), headerLoadOptions);
header.loadFile(path.join(__dirname, '../ui/app/header.html'), headerLoadOptions);
header.webContents.once('did-finish-load', () => {
const viewId = liquidGlass.addView(header.getNativeWindowHandle());
if (viewId !== -1) {
@ -506,7 +504,6 @@ function createWindows() {
header.setContentProtection(isContentProtectionOn);
header.setVisibleOnAllWorkspaces(true, { visibleOnFullScreen: true });
// header.loadFile(path.join(__dirname, '../app/header.html'));
// Open DevTools in development
if (!app.isPackaged) {