35 Commits
Author SHA1 Message Date
ilia f62c1d6ba7 Merge pull request 'Tray icon, click fix, and Settings gear' (#13) from feature/tray-icon-settings-gear into main
CI / skip-ci-check (push) Successful in 4s
CI / secret-scan (push) Successful in 3s
CI / node-ci (push) Successful in 22s
2026-09-04 21:05:14 -05:00
ilia d8090b251c Add clipboard-∞ tray icon, fix tray click, and Settings gear.
CI / skip-ci-check (pull_request) Successful in 4s
CI / secret-scan (pull_request) Successful in 3s
CI / node-ci (pull_request) Successful in 22s
Ship a macOS template menu-bar glyph, only toggle on left mouse-down so
press/release no longer opens-then-closes, and put Settings next to Search
so it is reachable without the tray menu.
2026-09-04 22:04:37 -04:00
ilia 49e8f299d2 Merge pull request 'Fix FTS search for path punctuation' (#12) from fix/fts-search-punctuation into main
CI / skip-ci-check (push) Successful in 36s
CI / secret-scan (push) Successful in 36s
CI / node-ci (push) Successful in 55s
2026-08-11 08:54:09 -05:00
ilia f57ac62c3a Docs: align README test count table with current suite.
CI / skip-ci-check (pull_request) Successful in 37s
CI / secret-scan (pull_request) Successful in 36s
CI / node-ci (pull_request) Successful in 1m9s
2026-08-11 09:51:50 -04:00
ilia 43d0582804 Fix FTS search for path punctuation like /idobkin.
Sanitize MATCH tokens so slash/dot queries no longer error and leave a stale full history list; clear the UI on search failure.
2026-08-11 09:51:43 -04:00
ilia 5255c56259 Merge pull request 'docs: public-safe AGENTS writing-docs link' (#11) from chore/agents-public-link into main
CI / skip-ci-check (push) Successful in 31s
CI / secret-scan (push) Successful in 30s
CI / node-ci (push) Successful in 47s
2026-08-06 10:17:05 -05:00
ilia 9b5bd3a611 docs: public-safe AGENTS writing-docs link
CI / skip-ci-check (pull_request) Successful in 31s
CI / secret-scan (pull_request) Successful in 30s
CI / node-ci (pull_request) Successful in 1m22s
2026-08-06 11:12:20 -04:00
ilia 39527168a6 Merge pull request 'Add AGENTS.md orientation for Cursor agents' (#9) from chore/bootstrap-agents-md into main
CI / skip-ci-check (push) Successful in 30s
CI / secret-scan (push) Successful in 29s
CI / node-ci (push) Successful in 1m23s
2026-08-05 17:52:07 -05:00
ilia 41dc5f3970 Add AGENTS.md orientation for Cursor agents
CI / skip-ci-check (pull_request) Successful in 30s
CI / secret-scan (pull_request) Successful in 29s
CI / node-ci (pull_request) Successful in 1m17s
2026-08-05 18:15:11 -04:00
ilia ce246bfb7d Merge pull request 'Scrub home path from sharing docs' (#8) from chore/public-docs-hygiene into main
CI / skip-ci-check (push) Successful in 31s
CI / secret-scan (push) Successful in 31s
CI / node-ci (push) Successful in 1m31s
2026-08-05 16:40:14 -05:00
ilia 2225caff23 Scrub home path from sharing docs
CI / skip-ci-check (pull_request) Successful in 32s
CI / secret-scan (pull_request) Successful in 29s
CI / node-ci (pull_request) Successful in 1m30s
2026-08-05 17:29:47 -04:00
ilia e3926673de Merge pull request 'Humanize README and docs tone' (#7) from docs/humanize-prose into main
CI / skip-ci-check (push) Successful in 30s
CI / secret-scan (push) Successful in 30s
CI / node-ci (push) Successful in 1m24s
2026-08-05 14:18:08 -05:00
ilia 9e56ba7b46 Humanize README and docs for clearer, professional tone
CI / skip-ci-check (pull_request) Successful in 33s
CI / secret-scan (pull_request) Successful in 29s
CI / node-ci (pull_request) Successful in 1m39s
Align with project-template docs/writing-docs.md.
2026-08-05 14:55:50 -04:00
ilia 82c04da445 Merge pull request 'Capture oversized screenshots instead of dropping them' (#6) from fix/oversized-screenshot-capture into main
CI / skip-ci-check (push) Successful in 9s
CI / secret-scan (push) Successful in 9s
CI / node-ci (push) Successful in 26s
2026-07-19 10:16:47 -05:00
ilia 656045c4b4 Capture oversized screenshots instead of dropping them.
CI / skip-ci-check (pull_request) Successful in 9s
CI / secret-scan (pull_request) Successful in 8s
CI / node-ci (pull_request) Successful in 26s
Retina clipboard images over the RGBA size cap were silently skipped; downscale and store a thumbnail so they still appear in history, with regression tests.
2026-07-19 11:14:19 -04:00
ilia b0f94290df Merge pull request 'Fix context menu Pin/Delete and Control+click' (#5) from fix/context-menu-pin-delete into main
CI / skip-ci-check (push) Successful in 19s
CI / secret-scan (push) Successful in 12s
CI / node-ci (push) Successful in 28s
2026-07-19 09:21:32 -05:00
ilia f9a11ca640 Fix context menu Pin/Delete and Control+click race.
CI / skip-ci-check (pull_request) Successful in 5s
CI / secret-scan (pull_request) Successful in 4s
CI / node-ci (pull_request) Successful in 19s
Control+click was treated as multi-select and a window click listener dismissed the menu before Pin/Delete could run; fire menu actions on mousedown and close only on outside pointerdown.
2026-07-15 17:02:38 -04:00
ilia 7afdde23d8 Merge pull request 'chore: sync Cargo.lock version with Cargo.toml (0.2.0)' (#4) from chore/cargo-lock-version-bump into main
CI / skip-ci-check (push) Successful in 5s
CI / secret-scan (push) Successful in 4s
CI / node-ci (push) Successful in 51s
v0.2.0
2026-07-14 21:11:38 -05:00
ilia fc49dd6755 chore: sync Cargo.lock version with Cargo.toml (0.2.0)
CI / skip-ci-check (pull_request) Successful in 6s
CI / secret-scan (pull_request) Successful in 4s
CI / node-ci (pull_request) Successful in 52s
2026-07-14 22:10:15 -04:00
ilia 12640fc254 Merge pull request 'Copy-only, color swatches, DB speed pragmas, and living docs' (#3) from feature/copy-only-color-swatches-perf-docs into main
CI / skip-ci-check (push) Successful in 4s
CI / secret-scan (push) Successful in 3s
CI / node-ci (push) Successful in 42s
2026-07-14 21:08:49 -05:00
ilia 71f737ce4e Merge remote-tracking branch 'origin/main' into feature/copy-only-color-swatches-perf-docs
CI / skip-ci-check (pull_request) Successful in 5s
CI / secret-scan (pull_request) Successful in 4s
CI / node-ci (pull_request) Successful in 18s
# Conflicts:
#	.gitea/workflows/ci.yml
#	.gitleaks.toml
2026-07-14 22:07:28 -04:00
ilia e9461ed4f3 Add copy-only, color swatches, DB speed pragmas, and living docs
CI / skip-ci-check (pull_request) Successful in 4s
CI / secret-scan (pull_request) Successful in 3s
CI / node-ci (pull_request) Successful in 17s
- Copy only (right-click -> Copy): write to clipboard without
  auto-pasting or hiding the window
- Color swatches: hex/rgb/hsl entries show a preview chip
- SQLite WAL + synchronous=NORMAL so the UI can read while the
  clipboard poller writes
- Memoize list rows (React.memo) so selection/focus changes don't
  re-render every row's preview
- Add docs/GUIDE.md (living install + usage doc), docs/SHARING.md,
  docs/TESTING.md, docs/LAUNCH-AT-LOGIN.md, docs/PRODUCT.md,
  CHANGELOG.md, ROADMAP.md
- Add homelab Gitea Actions CI (.gitea/workflows/ci.yml) + gitleaks
  allowlist
- Bump version to 0.2.0
2026-07-14 21:58:31 -04:00
ilia 4326c5ec0d ci: add local pre-commit gitleaks hook
CI / skip-ci-check (push) Successful in 11s
CI / secret-scan (push) Successful in 9s
CI / node-ci (push) Successful in 39s
2026-07-13 14:44:32 -05:00
ilia 463c7f8d7f Merge pull request 'Add homelab Gitea Actions CI (generic)' (#1) from ci/bootstrap-gitea-actions-node into main
CI / skip-ci-check (push) Successful in 11s
CI / secret-scan (push) Successful in 9s
CI / node-ci (push) Successful in 36s
2026-05-29 20:39:26 -05:00
ilia 07f3c62bf7 ci: refresh workflow (re-run pipelines)
CI / skip-ci-check (pull_request) Successful in 9s
CI / secret-scan (pull_request) Successful in 8s
CI / node-ci (pull_request) Successful in 34s
2026-05-29 20:30:38 -05:00
ilia c7ba18acbe ci: refresh workflow (re-run pipelines)
CI / skip-ci-check (pull_request) Successful in 9s
CI / secret-scan (pull_request) Successful in 9s
CI / node-ci (pull_request) Successful in 35s
2026-05-29 20:28:21 -05:00
ilia e14cfa6392 ci: sync workflow template
CI / skip-ci-check (pull_request) Successful in 10s
CI / secret-scan (pull_request) Successful in 9s
CI / node-ci (pull_request) Successful in 31s
2026-05-29 20:25:57 -05:00
ilia 6d212634eb ci: refresh workflow (re-run pipelines)
CI / skip-ci-check (pull_request) Successful in 10s
CI / secret-scan (pull_request) Successful in 8s
CI / node-ci (pull_request) Successful in 34s
2026-05-29 20:20:27 -05:00
ilia fee19eb59b ci: sync workflow template (node container + host fixes)
CI / skip-ci-check (pull_request) Successful in 10s
CI / secret-scan (pull_request) Successful in 8s
CI / node-ci (pull_request) Successful in 32s
2026-05-29 20:14:46 -05:00
ilia 01e89b7853 ci: add homelab Gitea Actions workflow (ci-node.yml)
CI / skip-ci-check (pull_request) Failing after 7s
CI / secret-scan (pull_request) Has been skipped
CI / node-ci (pull_request) Has been skipped
2026-05-29 16:19:11 -05:00
iliaandCursor 7bb3b5fc89 Fix paste creating duplicate entries in clipboard history
The clipboard polling thread was detecting programmatic writes (from
paste_and_refocus) as "new" clipboard content and re-inserting them.

Fix: share the last_hash between the polling thread and the paste
command via Arc<Mutex<String>>. When pasting, the Rust command now:
1. Computes the hash of the content being pasted
2. Updates the shared last_hash so the polling thread skips it
3. Writes to clipboard via arboard (moved from JS writeText)
4. Hides window and runs AppleScript paste

This eliminates the JS-side writeText call entirely — clipboard write
now happens in Rust where it can atomically update the hash before
the polling thread's next tick.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 14:33:33 -04:00
iliaandCursor 11e91a4f36 Fix paste-to-app, settings highlight, and titleBarStyle casing
Paste fix:
- Switch from std::process::Command to tokio::process::Command to avoid
  blocking the async runtime (was stalling the paste action)
- Use explicit AppleScript that activates the frontmost app before sending
  Cmd+V keystroke, making paste more reliable
- Increase delay to 300ms for macOS app refocus
- Add tokio "process" feature

Settings highlight fix:
- SettingsPanel now uses local useState for immediate optimistic updates
  when clicking position/history buttons, instead of waiting for the
  parent prop round-trip
- Buttons highlight instantly on click, then sync with backend

Config fix:
- titleBarStyle must be PascalCase "Overlay" in Tauri 2 config (was
  lowercase "overlay" which caused a startup error)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 14:28:08 -04:00
iliaandCursor 80a6c01cdb Fix cursor positioning, resize, and paste; add App tests and Cursor rules
- Use CoreGraphics (core-graphics crate) for global mouse position instead
  of Tauri's window-relative cursor_position() which fails when hidden
- Switch to titleBarStyle overlay with hiddenTitle for native resize handles
  while keeping the frameless look (decorations:false had no resize affordance)
- Fix paste_and_refocus: use .output() instead of .spawn() so osascript
  actually completes, increase delay to 250ms for reliable app refocus
- Add comprehensive App.test.tsx (7 integration tests) bringing total to 47
- Add multi-select and type badge tests for ClipboardList and ContextMenu
- Update Tauri mock in setup.ts with innerSize/scaleFactor for resize tests
- Create .cursor/rules/ with 4 rule files for project conventions
- Add npm run lint and npm run check scripts
- Update README with full usage table and current test counts (74 total)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 14:15:42 -04:00
iliaandCursor 55ee81fc6d Multi-select, paste-to-app, resizable window, polished UI
- Max history default increased to 10K, options: 1K/5K/10K/50K
- Tray icon uses with_id to prevent duplicates on hot-reload
- Selecting an entry now pastes directly into the previous app
  via osascript Cmd+V simulation after hiding the window
- Multi-select: Ctrl+Click toggles, Shift+Arrow extends range,
  Cmd+A selects all, Enter pastes all selected
- Window is resizable, size persists in SQLite across opens
- Window position setting: cursor, center, or any screen corner
- UI cleanup: tighter spacing, cleaner dividers, compact search,
  type badges (TXT/IMG/FILE), PIN label, tabular timestamps
- Context menu shows multi-item labels ("Paste 3 items")
- All tests updated and passing (27 Rust + 33 TypeScript)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 14:01:03 -04:00
iliaandCursor b643f50d76 Initial commit: macOS clipboard manager menu bar app
Tauri 2 + React 18 + TypeScript + Tailwind CSS v4 + SQLite (rusqlite)

Features:
- Menu bar app with tray icon (no dock icon)
- Global hotkey Cmd+Shift+V
- Clipboard polling every 500ms (text, images, file paths)
- SQLite FTS5 full-text search
- Pin/unpin entries, auto-trim, context menu
- Settings panel (launch at login, show images, max history, clear all)
- Dark/light mode following macOS system preference
- Frameless floating window, closes on blur

Testing:
- 27 Rust unit tests (db, clipboard, FTS5, trim, settings)
- 31 TypeScript component tests (vitest + @testing-library/react)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 12:55:56 -04:00