diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8689597..5bb21de 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,4 +41,5 @@ jobs: SLACK_TITLE: "π¨ Build Failed" SLACK_MESSAGE: "π Build failed for `${{ github.repository }}` repo on main branch." SLACK_COLOR: 'danger' - SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} \ No newline at end of file + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} + diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..0c4ea82 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "aec"] + path = aec + url = https://github.com/samtiz/aec.git diff --git a/README.md b/README.md index e166914..e5510e2 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,6 @@ > This project is a fork of [CheatingDaddy](https://github.com/sohzm/cheating-daddy) with modifications and enhancements. Thanks to [Soham](https://x.com/soham_btw) and all the open-source contributors who made this possible! -> Currently, we're working on a full code refactor and modularization. Once that's completed, we'll jump into addressing the major issues. You can find WIP issues & changelog below this document. - π€ **Fast, light & open-source**βGlass lives on your desktop, sees what you see, listens in real time, understands your context, and turns every moment into structured knowledge. π¬ **Proactive in meetings**βit surfaces action items, summaries, and answers the instant you need them. @@ -117,15 +115,17 @@ We have a list of [help wanted](https://github.com/pickle-com/glass/issues?q=is% | Status | Issue | Description | |--------|--------------------------------|---------------------------------------------------| -| π§ WIP | Windows Build | Make Glass buildable & runnable in Windows | | π§ WIP | Local LLM Support | Supporting Local LLM to power AI answers | -| π§ WIP | AEC Improvement | Transcription is not working occasionally | | π§ WIP | Firebase Data Storage Issue | Session & ask should be saved in firebase for signup users | | π§ WIP | Liquid Glass | Liquid Glass UI for MacOS 26 | ### Changelog - Jul 5: Now support Gemini, Intel Mac supported +- Jul 6: Full code refactoring has done. +- Jul 7: Now support Claude, LLM/STT model selection +- Jul 8: Now support Windows(beta), Improved AEC by Rust(to seperate mic/system audio), shortcut editing(beta) + ## About Pickle diff --git a/aec b/aec new file mode 160000 index 0000000..f00bb1f --- /dev/null +++ b/aec @@ -0,0 +1 @@ +Subproject commit f00bb1fb948053c752b916adfee19f90644a0b2f diff --git a/package-lock.json b/package-lock.json index 55fc266..bad6efc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pickle-glass", - "version": "0.2.1", + "version": "0.2.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pickle-glass", - "version": "0.2.1", + "version": "0.2.3", "hasInstallScript": true, "license": "GPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 2269777..ea125a0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,9 @@ { "name": "pickle-glass", "productName": "Glass", - "version": "0.2.2", + + "version": "0.2.3", + "description": "Cl*ely for Free", "main": "src/index.js", "scripts": { @@ -10,7 +12,7 @@ "package": "npm run build:renderer && electron-forge package", "make": "npm run build:renderer && electron-forge make", "build": "npm run build:all && electron-builder --config electron-builder.yml --publish never", - "build:win": "npm run build:all && electron-builder --win --x64 --publish never", + "build:win": "npm run build:all && electron-builder --win --x64 --publish never", "publish": "npm run build:all && electron-builder --config electron-builder.yml --publish always", "lint": "eslint --ext .ts,.tsx,.js .", "postinstall": "electron-builder install-app-deps", @@ -39,7 +41,6 @@ "better-sqlite3": "^9.4.3", "cors": "^2.8.5", "dotenv": "^17.0.0", - "electron-squirrel-startup": "^1.0.1", "electron-store": "^8.2.0", "electron-updater": "^6.6.2", @@ -74,4 +75,4 @@ "optionalDependencies": { "electron-liquid-glass": "^1.0.1" } -} \ No newline at end of file +} diff --git a/src/app/MainHeader.js b/src/app/MainHeader.js index 5212fae..7c92f7c 100644 --- a/src/app/MainHeader.js +++ b/src/app/MainHeader.js @@ -3,11 +3,12 @@ import { html, css, LitElement } from '../assets/lit-core-2.7.4.min.js'; export class MainHeader extends LitElement { static properties = { isSessionActive: { type: Boolean, state: true }, + shortcuts: { type: Object, state: true }, }; static styles = css` :host { - display: block; + display: flex; transform: translate3d(0, 0, 0); backface-visibility: hidden; transition: transform 0.2s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.2s ease-out; @@ -99,7 +100,7 @@ export class MainHeader extends LitElement { } .header { - width: 100%; + width: max-content; height: 47px; padding: 2px 10px 2px 13px; background: transparent; @@ -212,16 +213,6 @@ export class MainHeader extends LitElement { } .action-button, - .settings-button { - background: transparent; - color: white; - border: none; - cursor: pointer; - display: flex; - align-items: center; - gap: 6px; - } - .action-text { padding-bottom: 1px; justify-content: center; @@ -275,9 +266,16 @@ export class MainHeader extends LitElement { .settings-button { padding: 5px; border-radius: 50%; + background: transparent; transition: background 0.15s ease; + color: white; + border: none; + cursor: pointer; + display: flex; + align-items: center; + gap: 6px; } - + .settings-button:hover { background: rgba(255, 255, 255, 0.1); } @@ -286,6 +284,7 @@ export class MainHeader extends LitElement { display: flex; align-items: center; justify-content: center; + padding: 3px; } .settings-icon svg { @@ -346,6 +345,7 @@ export class MainHeader extends LitElement { constructor() { super(); + this.shortcuts = {}; this.dragState = null; this.wasJustDragged = false; this.isVisible = true; @@ -501,6 +501,11 @@ export class MainHeader extends LitElement { this.isSessionActive = isActive; }; ipcRenderer.on('session-state-changed', this._sessionStateListener); + this._shortcutListener = (event, keybinds) => { + console.log('[MainHeader] Received updated shortcuts:', keybinds); + this.shortcuts = keybinds; + }; + ipcRenderer.on('shortcuts-updated', this._shortcutListener); } } @@ -518,6 +523,9 @@ export class MainHeader extends LitElement { if (this._sessionStateListener) { ipcRenderer.removeListener('session-state-changed', this._sessionStateListener); } + if (this._shortcutListener) { + ipcRenderer.removeListener('shortcuts-updated', this._shortcutListener); + } } } @@ -567,6 +575,29 @@ export class MainHeader extends LitElement { } + renderShortcut(accelerator) { + if (!accelerator) return html``; + + const keyMap = { + 'Cmd': 'β', 'Command': 'β', + 'Ctrl': 'β', 'Control': 'β', + 'Alt': 'β₯', 'Option': 'β₯', + 'Shift': 'β§', + 'Enter': 'β΅', + 'Backspace': 'β«', + 'Delete': 'β¦', + 'Tab': 'β₯', + 'Escape': 'β', + 'Up': 'β', 'Down': 'β', 'Left': 'β', 'Right': 'β', + '\\': html``, + }; + + const keys = accelerator.split('+'); + return html`${keys.map(key => html` +