From 5765d5012589faa2b04d71e428ef07710f88fd21 Mon Sep 17 00:00:00 2001 From: Ramnique Singh <30795890+ramnique@users.noreply.github.com> Date: Tue, 20 Jan 2026 01:02:39 +0530 Subject: [PATCH 1/5] bump update-electron-app --- apps/x/apps/main/package.json | 2 +- apps/x/pnpm-lock.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/x/apps/main/package.json b/apps/x/apps/main/package.json index 9f9c52e9..601e5a49 100644 --- a/apps/x/apps/main/package.json +++ b/apps/x/apps/main/package.json @@ -14,7 +14,7 @@ "@x/core": "workspace:*", "@x/shared": "workspace:*", "chokidar": "^4.0.3", - "update-electron-app": "^3.0.0", + "update-electron-app": "^3.1.2", "zod": "^4.2.1" }, "devDependencies": { diff --git a/apps/x/pnpm-lock.yaml b/apps/x/pnpm-lock.yaml index 0bbbaa8d..5d56aa18 100644 --- a/apps/x/pnpm-lock.yaml +++ b/apps/x/pnpm-lock.yaml @@ -51,7 +51,7 @@ importers: specifier: ^4.0.3 version: 4.0.3 update-electron-app: - specifier: ^3.0.0 + specifier: ^3.1.2 version: 3.1.2 zod: specifier: ^4.2.1 From b664380dfd6d22dabbeb451749abb84c9fb4fc2f Mon Sep 17 00:00:00 2001 From: Ramnique Singh <30795890+ramnique@users.noreply.github.com> Date: Tue, 20 Jan 2026 01:40:59 +0530 Subject: [PATCH 2/5] fix electron build package.json --- apps/x/apps/main/forge.config.cjs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/x/apps/main/forge.config.cjs b/apps/x/apps/main/forge.config.cjs index 595b6ec9..49ddfbe2 100644 --- a/apps/x/apps/main/forge.config.cjs +++ b/apps/x/apps/main/forge.config.cjs @@ -153,9 +153,11 @@ module.exports = { // This tells Electron where to find the entry point // Note: No "type": "module" since we bundle as CommonJS for compatibility // with dependencies that use dynamic require() + // Read version from source package.json (updated by CI from git tag) + const sourcePackageJson = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'), 'utf8')); const packageJson = { name: '@x/main', - version: '0.1.0', + version: sourcePackageJson.version, main: 'dist-bundle/main.js', }; fs.writeFileSync( @@ -220,9 +222,11 @@ module.exports = { const packageJsonPath = path.join(appResourcesPath, 'package.json'); if (fs.existsSync(packageJsonPath)) { console.log('Updating package.json...'); + // Read version from source package.json (updated by CI from git tag) + const sourcePackageJson = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'), 'utf8')); const packageJson = { name: '@x/main', - version: '0.1.0', + version: sourcePackageJson.version, main: 'dist-bundle/main.js', // Note: No "type": "module" since we bundle as CommonJS // No dependencies/devDependencies since everything is bundled From 8bd6c9f254a54cb2cdc77a453dc398874db19a5b Mon Sep 17 00:00:00 2001 From: Arjun <6592213+arkml@users.noreply.github.com> Date: Tue, 20 Jan 2026 08:55:17 +0530 Subject: [PATCH 3/5] 1m lookback for email, graph zoom and legend width fix --- apps/x/apps/renderer/src/components/graph-view.tsx | 4 ++-- apps/x/packages/core/src/knowledge/sync_gmail.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/x/apps/renderer/src/components/graph-view.tsx b/apps/x/apps/renderer/src/components/graph-view.tsx index a1295406..f30a937c 100644 --- a/apps/x/apps/renderer/src/components/graph-view.tsx +++ b/apps/x/apps/renderer/src/components/graph-view.tsx @@ -68,7 +68,7 @@ export function GraphView({ nodes, edges, isLoading, error, onSelectNode }: Grap const hasCenteredRef = useRef(false) const [viewport, setViewport] = useState({ width: 1, height: 1 }) const [pan, setPan] = useState({ x: 0, y: 0 }) - const [zoom, setZoom] = useState(1) + const [zoom, setZoom] = useState(0.6) const [hoveredNodeId, setHoveredNodeId] = useState(null) const [searchQuery, setSearchQuery] = useState('') const [selectedGroup, setSelectedGroup] = useState(null) @@ -501,7 +501,7 @@ export function GraphView({ nodes, edges, isLoading, error, onSelectNode }: Grap style={{ backgroundColor: item.color, boxShadow: `0 0 0 1px ${item.stroke}` }} /> {item.label} - {isSelected && } + ) })} diff --git a/apps/x/packages/core/src/knowledge/sync_gmail.ts b/apps/x/packages/core/src/knowledge/sync_gmail.ts index 945b5999..dea534e7 100644 --- a/apps/x/packages/core/src/knowledge/sync_gmail.ts +++ b/apps/x/packages/core/src/knowledge/sync_gmail.ts @@ -253,7 +253,7 @@ async function partialSync(auth: OAuth2Client, startHistoryId: string, syncDir: } async function performSync() { - const LOOKBACK_DAYS = 7; // Default to 7 days + const LOOKBACK_DAYS = 30; // Default to 1 month const ATTACHMENTS_DIR = path.join(SYNC_DIR, 'attachments'); const STATE_FILE = path.join(SYNC_DIR, 'sync_state.json'); From 0d9dac8344385119ab3dc999d77c35af4ca867fd Mon Sep 17 00:00:00 2001 From: Ramnique Singh <30795890+ramnique@users.noreply.github.com> Date: Tue, 20 Jan 2026 09:08:05 +0530 Subject: [PATCH 4/5] add x64 target in electron build --- .github/workflows/electron-build.yml | 35 ---------------------------- apps/x/apps/main/forge.config.cjs | 12 ++++++---- apps/x/apps/main/package.json | 18 +++++++------- apps/x/pnpm-lock.yaml | 13 ++++++----- 4 files changed, 23 insertions(+), 55 deletions(-) diff --git a/.github/workflows/electron-build.yml b/.github/workflows/electron-build.yml index 1b63a88c..ef5f7dd6 100644 --- a/.github/workflows/electron-build.yml +++ b/.github/workflows/electron-build.yml @@ -97,41 +97,6 @@ jobs: run: npm run publish working-directory: apps/x/apps/main - - name: Diagnose built app - run: | - echo "=== Architecture Check ===" - APP_PATH=$(find apps/x/apps/main/out -name "Rowboat.app" -type d | head -1) - if [ -n "$APP_PATH" ]; then - EXECUTABLE="$APP_PATH/Contents/MacOS/rowboat" - if [ -f "$EXECUTABLE" ]; then - echo "App executable found at: $EXECUTABLE" - echo "Architecture:" - lipo -info "$EXECUTABLE" || file "$EXECUTABLE" - echo "" - echo "=== Code Signing Check ===" - codesign --verify --deep --strict --verbose=2 "$APP_PATH" || echo "App is not signed (this is OK if code signing secrets are not configured)" - echo "" - echo "=== _CodeSignature Check ===" - if [ -d "$APP_PATH/Contents/_CodeSignature" ]; then - echo "WARNING: _CodeSignature directory still exists!" - ls -la "$APP_PATH/Contents/_CodeSignature" || true - else - echo "✓ No _CodeSignature directory (expected for unsigned app)" - fi - echo "" - echo "=== Extended Attributes Check ===" - xattr -l "$APP_PATH" | head -5 || echo "No extended attributes (or not on macOS)" - echo "" - echo "=== Gatekeeper Check ===" - spctl --assess --type execute --verbose "$APP_PATH" || echo "Gatekeeper assessment failed (expected for unsigned apps)" - else - echo "Executable not found at: $EXECUTABLE" - fi - else - echo "App bundle not found" - fi - continue-on-error: true - - name: Upload workflow artifacts uses: actions/upload-artifact@v4 with: diff --git a/apps/x/apps/main/forge.config.cjs b/apps/x/apps/main/forge.config.cjs index 49ddfbe2..01ba724c 100644 --- a/apps/x/apps/main/forge.config.cjs +++ b/apps/x/apps/main/forge.config.cjs @@ -11,7 +11,9 @@ module.exports = { icon: './icons/icon', // .icns extension added automatically appBundleId: 'com.rowboat.app', appCategoryType: 'public.app-category.productivity', - osxSign: {}, + osxSign: { + batchCodesignCalls: true, + }, osxNotarize: { appleId: process.env.APPLE_ID, appleIdPassword: process.env.APPLE_PASSWORD, @@ -39,10 +41,10 @@ module.exports = { makers: [ { name: '@electron-forge/maker-dmg', - config: { + config: (arch) => ({ format: 'ULFO', - name: 'Rowboat', - } + name: `Rowboat-${arch}`, // Architecture-specific name to avoid conflicts + }) }, { name: '@electron-forge/maker-zip', @@ -61,7 +63,7 @@ module.exports = { bucket: 'rowboat-desktop-app-releases', region: 'us-east-1', public: true, - folder: 'releases' // Creates structure: releases/darwin/arm64/files + folder: 'releases' // Creates structure: releases/darwin/{arch}/files (separate builds for arm64 and x64) } } ], diff --git a/apps/x/apps/main/package.json b/apps/x/apps/main/package.json index 601e5a49..4cc4a3c6 100644 --- a/apps/x/apps/main/package.json +++ b/apps/x/apps/main/package.json @@ -6,9 +6,9 @@ "scripts": { "start": "electron .", "build": "rm -rf dist && tsc", - "package": "electron-forge package", - "make": "electron-forge make", - "publish": "electron-forge publish" + "package": "electron-forge package --arch=arm64,x64 --platform=darwin", + "make": "electron-forge make --arch=arm64,x64 --platform=darwin", + "publish": "electron-forge publish --arch=arm64,x64 --platform=darwin" }, "dependencies": { "@x/core": "workspace:*", @@ -21,11 +21,11 @@ "@types/node": "^25.0.3", "electron": "^39.2.7", "esbuild": "^0.24.2", - "@electron-forge/cli": "^7.11.1", - "@electron-forge/maker-deb": "^7.11.1", - "@electron-forge/maker-dmg": "^7.11.1", - "@electron-forge/maker-squirrel": "^7.11.1", - "@electron-forge/maker-zip": "^7.11.1", - "@electron-forge/publisher-s3": "^7.11.1" + "@electron-forge/cli": "^7.10.2", + "@electron-forge/maker-deb": "^7.10.2", + "@electron-forge/maker-dmg": "^7.10.2", + "@electron-forge/maker-squirrel": "^7.10.2", + "@electron-forge/maker-zip": "^7.10.2", + "@electron-forge/publisher-s3": "^7.10.2" } } \ No newline at end of file diff --git a/apps/x/pnpm-lock.yaml b/apps/x/pnpm-lock.yaml index 5d56aa18..490581f0 100644 --- a/apps/x/pnpm-lock.yaml +++ b/apps/x/pnpm-lock.yaml @@ -58,22 +58,22 @@ importers: version: 4.2.1 devDependencies: '@electron-forge/cli': - specifier: ^7.11.1 + specifier: ^7.10.2 version: 7.11.1(encoding@0.1.13)(esbuild@0.24.2) '@electron-forge/maker-deb': - specifier: ^7.11.1 + specifier: ^7.10.2 version: 7.11.1 '@electron-forge/maker-dmg': - specifier: ^7.11.1 + specifier: ^7.10.2 version: 7.11.1 '@electron-forge/maker-squirrel': - specifier: ^7.11.1 + specifier: ^7.10.2 version: 7.11.1 '@electron-forge/maker-zip': - specifier: ^7.11.1 + specifier: ^7.10.2 version: 7.11.1 '@electron-forge/publisher-s3': - specifier: ^7.11.1 + specifier: ^7.10.2 version: 7.11.1 '@types/node': specifier: ^25.0.3 @@ -5901,6 +5901,7 @@ packages: tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me temp@0.9.4: resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} From 65ae5cf123067cf0eea13fb2686436cd00b93038 Mon Sep 17 00:00:00 2001 From: Arjun <6592213+arkml@users.noreply.github.com> Date: Tue, 20 Jan 2026 09:19:10 +0530 Subject: [PATCH 5/5] gmail and calendar sync every 5 mins --- apps/x/packages/core/src/knowledge/sync_calendar.ts | 2 +- apps/x/packages/core/src/knowledge/sync_gmail.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/x/packages/core/src/knowledge/sync_calendar.ts b/apps/x/packages/core/src/knowledge/sync_calendar.ts index ae1241ac..0499b8e7 100644 --- a/apps/x/packages/core/src/knowledge/sync_calendar.ts +++ b/apps/x/packages/core/src/knowledge/sync_calendar.ts @@ -8,7 +8,7 @@ import { GoogleClientFactory } from './google-client-factory.js'; // Configuration const SYNC_DIR = path.join(WorkDir, 'calendar_sync'); -const SYNC_INTERVAL_MS = 60 * 1000; // Check every minute +const SYNC_INTERVAL_MS = 5 * 60 * 1000; // Check every 5 minutes const LOOKBACK_DAYS = 14; const REQUIRED_SCOPES = [ 'https://www.googleapis.com/auth/calendar.readonly', diff --git a/apps/x/packages/core/src/knowledge/sync_gmail.ts b/apps/x/packages/core/src/knowledge/sync_gmail.ts index dea534e7..ecf8a4e8 100644 --- a/apps/x/packages/core/src/knowledge/sync_gmail.ts +++ b/apps/x/packages/core/src/knowledge/sync_gmail.ts @@ -8,7 +8,7 @@ import { GoogleClientFactory } from './google-client-factory.js'; // Configuration const SYNC_DIR = path.join(WorkDir, 'gmail_sync'); -const SYNC_INTERVAL_MS = 60 * 1000; // Check every minute +const SYNC_INTERVAL_MS = 5 * 60 * 1000; // Check every 5 minutes const REQUIRED_SCOPE = 'https://www.googleapis.com/auth/gmail.readonly'; const nhm = new NodeHtmlMarkdown();