Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
387 commits
Select commit Hold shift + click to select a range
b657917
Merge pull request #1833 from jschwxrz/jona/gen-1076-setup-and-run-sc…
Davidknp Apr 30, 2026
a9a2557
Merge remote-tracking branch 'origin/main' into cleanup
Davidknp Apr 30, 2026
0ad9aea
fix(agent-hooks): handle pi extension errors
janburzinski Apr 30, 2026
a3eb423
fix: git content not showing and cache gh token
Davidknp Apr 30, 2026
556862c
Merge pull request #1829 from generalaction/cleanup
Davidknp Apr 30, 2026
917d975
fix(skills): allow large skill modals to scroll
janburzinski Apr 30, 2026
acc735b
feat(github): add shared repository parser
jschwxrz Apr 30, 2026
998359b
fix(github): normalize issue picker repository input
jschwxrz Apr 30, 2026
b518f38
refactor(github): use shared repository parser
jschwxrz Apr 30, 2026
2a39a53
refactor(pull-requests): return typed rpc results
jschwxrz Apr 30, 2026
e9ed5a6
Remove modal store test
arnestrickmann Apr 30, 2026
adea0cf
Merge pull request #1824 from arnestrickmann/emdash/enable-write-in-d…
Davidknp Apr 30, 2026
45e7be7
refactor(issues): pass repository urls to issue providers
jschwxrz Apr 30, 2026
56a8fdb
feat: add intial convo to task setup
Davidknp Apr 30, 2026
6c39aa7
Merge remote-tracking branch 'origin/main' into cleanup
Davidknp Apr 30, 2026
f086ceb
Merge pull request #1835 from generalaction/jona/gen-1078-github-issu…
Davidknp Apr 30, 2026
4dab9c0
Merge remote-tracking branch 'origin/main' into cleanup
Davidknp Apr 30, 2026
d1eeba8
chore: format
Davidknp Apr 30, 2026
d76e086
Merge pull request #1836 from generalaction/cleanup
Davidknp Apr 30, 2026
c460b6d
Merge pull request #1813 from arnestrickmann/arne/gen-1065-updating-m…
Davidknp Apr 30, 2026
d6e7698
chore: create release 1.1.6
Davidknp Apr 30, 2026
8004bd3
Merge pull request #1837 from generalaction/cleanup
Davidknp Apr 30, 2026
1d61c52
chore: run lint --fix
jschwxrz Apr 30, 2026
c58b6e1
revert: rm eslint-disable
jschwxrz Apr 30, 2026
f0f351e
fix: linting warnings
jschwxrz Apr 30, 2026
298d344
fix: linting warnings
jschwxrz Apr 30, 2026
b8bb898
Merge pull request #1827 from janburzinski/emdash/pi-always-displayin…
Davidknp Apr 30, 2026
477bdae
chore: cleanup unused components
jschwxrz Apr 30, 2026
3a6a83b
chore: run format
jschwxrz Apr 30, 2026
767d988
chore: retrigger ci
jschwxrz Apr 30, 2026
a6931e3
Merge remote-tracking branch 'origin/main' into cleanup-qeyqm
jschwxrz Apr 30, 2026
b616325
fix: type hook config test execution context
jschwxrz Apr 30, 2026
1c4a5bf
Merge pull request #1839 from generalaction/cleanup-qeyqm
Davidknp Apr 30, 2026
33a011b
Merge remote-tracking branch 'origin/main' into emdash/cant-scroll-la…
janburzinski Apr 30, 2026
2748f05
feat: add opencode hook plugin
janburzinski Apr 30, 2026
3174641
fix(agent-hooks): lint opencode plugin globals
janburzinski Apr 30, 2026
6387192
fix(agent-hooks): address opencode hook review
janburzinski Apr 30, 2026
50a236a
fix: make dialog content scroll
janburzinski Apr 30, 2026
186bc71
fix(diff): compact sidebar stats
janburzinski Apr 30, 2026
f0b9b9a
fix(diff): compact panel stats
janburzinski Apr 30, 2026
b90b500
Merge remote-tracking branch 'origin/main' into emdash/diff-num-forma…
janburzinski Apr 30, 2026
195fa91
chore: more symmetrical
janburzinski Apr 30, 2026
593cd21
Merge pull request #1842 from janburzinski/emdash/diff-num-formatting…
Davidknp Apr 30, 2026
3d0e7d0
Add Android Studio open-in option
rabanspiegel Apr 30, 2026
82fbad4
Merge pull request #1843 from generalaction/emdash/open-in-c0y0r
arnestrickmann May 1, 2026
bfcb6dc
Add VSCodium open-in support
arnestrickmann May 1, 2026
12b026b
Merge remote-tracking branch 'generalaction/main' into emdash/add-vs-…
arnestrickmann May 1, 2026
3c71c29
Merge pull request #1845 from arnestrickmann/emdash/add-vs-codium-ope…
arnestrickmann May 1, 2026
0dcfa20
Merge pull request #1840 from janburzinski/emdash/opencode-hooks-za7vq
Davidknp May 1, 2026
744155d
Merge pull request #1841 from janburzinski/emdash/cant-scroll-large-s…
Davidknp May 1, 2026
f5f8eba
fix: clean up logo shimmer
janburzinski May 1, 2026
890514c
fix: remove dead logo keyframes
janburzinski May 1, 2026
cb6903b
feat: add Junie CLI as a supported provider
arnestrickmann May 1, 2026
53d9a57
fix: clear stale diff models
janburzinski May 1, 2026
6149399
fix(codex): update auto-approve flag
janburzinski May 1, 2026
6c66c4e
revert: fix(codex): update auto-approve flag
janburzinski May 1, 2026
07e406a
Revert "revert: fix(codex): update auto-approve flag"
janburzinski May 1, 2026
58a1b71
chore: stop ignoring emdash hook
janburzinski May 1, 2026
a9159ee
feat: show linked issues
janburzinski May 1, 2026
fc8c5e0
fix: skip linked issues in keyboard nav, stabilize key handler
janburzinski May 1, 2026
51268d9
Merge remote-tracking branch 'generalaction/main' into emdash/junie-c…
arnestrickmann May 1, 2026
8e52de8
Merge pull request #1851 from janburzinski/jan/gen-1092-codex-chat-fa…
arnestrickmann May 2, 2026
64aca85
Merge pull request #1850 from janburzinski/emdash/diff-view-renderer-…
Davidknp May 4, 2026
4a5f885
Merge pull request #1849 from arnestrickmann/emdash/junie-cli-18v6y
Davidknp May 4, 2026
0c7430e
fix: feature flags and add byoi testing setup
Davidknp May 4, 2026
eb487d2
fix: add conversation with empty prompt
Davidknp May 4, 2026
f439f14
fix: FF setup
Davidknp May 4, 2026
f52bc1d
Merge pull request #1860 from generalaction/fixess
Davidknp May 4, 2026
8f26c23
chore: create release 1.1.7
Davidknp May 4, 2026
aa6a087
Merge pull request #1861 from generalaction/fixess
Davidknp May 4, 2026
ef8fc7e
fix: posthog and FF identify
Davidknp May 4, 2026
007f1f9
Merge remote-tracking branch 'origin/main' into fixess
Davidknp May 4, 2026
bd8849e
chore: encapsulate telemetry system
Davidknp May 4, 2026
2eaa3ef
fix: FF query
Davidknp May 4, 2026
2c82613
Merge pull request #1862 from generalaction/fixess
Davidknp May 4, 2026
fc6e4e6
chore: create release 1.1.8
Davidknp May 4, 2026
d68c202
Merge pull request #1863 from generalaction/fixess
Davidknp May 4, 2026
ee1a556
feat: minimal cmdk
Davidknp May 4, 2026
b828c02
feat: cmdk style tweak
Davidknp May 4, 2026
bd70005
Merge remote-tracking branch 'origin/main' into cmdk
Davidknp May 4, 2026
fdcc18f
fix: format
Davidknp May 4, 2026
7de6a78
Merge pull request #1864 from generalaction/cmdk
Davidknp May 4, 2026
1c6a4d9
chore: create release 1.1.9
Davidknp May 4, 2026
2bf6221
Merge pull request #1865 from generalaction/fixess
Davidknp May 4, 2026
953c30a
fix: allow selecting linked issues
janburzinski May 4, 2026
b609104
fix(conversations): restore custom CLI command parsing
jschwxrz May 4, 2026
c266279
feat(conversations): support provider environment overrides
jschwxrz May 4, 2026
7b921f4
fix(conversations): parse session id flag arguments
jschwxrz May 4, 2026
f1627f6
Merge branch 'main' into emdash/border-cutoff-in-task-settings-9rsoz
arnestrickmann May 4, 2026
35e5de7
Merge pull request #1820 from janburzinski/emdash/border-cutoff-in-ta…
arnestrickmann May 4, 2026
b183edb
fix(execution-context): resolve local git command
jschwxrz May 4, 2026
bf0beb7
fix(git): use context-local git command
jschwxrz May 4, 2026
38fb1cc
Merge pull request #1872 from generalaction/jona/gen-1072-restore-cus…
jschwxrz May 4, 2026
40ba748
Merge branch 'main' into emdash/emdash-logo-cleaner-fengd-pi
arnestrickmann May 4, 2026
34b38cd
Merge pull request #1847 from janburzinski/emdash/emdash-logo-cleaner…
arnestrickmann May 4, 2026
c94e645
test(git): cover context git resolution
jschwxrz May 4, 2026
0ff7cfa
Merge pull request #1873 from generalaction/jona/gen-1107-remote-clon…
jschwxrz May 4, 2026
812f736
fix(userEnv): scrub AppImage env from shell probe
raulpineda May 4, 2026
92c8bf1
test(userEnv): cover all keys scrubbed by buildExternalToolEnv
raulpineda May 4, 2026
437f441
fix(tasks): show enter key in inline selectors
janburzinski May 4, 2026
cbbfcc6
Open settings from application menu
arnestrickmann May 4, 2026
98e1109
Merge main into settings menu branch
arnestrickmann May 4, 2026
712972f
feat(ssh): capture remote shell profiles
jschwxrz May 4, 2026
80e2321
fix(ssh): use remote shell profiles for commands
jschwxrz May 4, 2026
5e5a798
fix(ssh): harden remote shell profile cache
jschwxrz May 4, 2026
c6817a7
Merge pull request #1877 from generalaction/jona/gen-1102-bug-not-det…
jschwxrz May 4, 2026
9c6eb36
Merge branch 'main' into fix/userenv-scrub-appimage-env
jschwxrz May 4, 2026
e005328
fix(userEnv): keep AppImage mount paths out of resolved PATH
jschwxrz May 4, 2026
b51b03d
Merge pull request #1874 from raulpineda/fix/userenv-scrub-appimage-env
jschwxrz May 4, 2026
7286d27
fix: disable settings during onboarding
jschwxrz May 5, 2026
8778e61
Merge pull request #1876 from generalaction/emdash/settings-from-menu…
jschwxrz May 5, 2026
49e8099
Merge pull request #1825 from jeremyhalin/emdash/feat-pr-link-tooltip…
jschwxrz May 5, 2026
8b9e1e6
fix(legacy-port): skip FTS shadow tables during reset
jschwxrz May 5, 2026
0595b4c
Merge pull request #1878 from generalaction/fix-legacy-port
jschwxrz May 5, 2026
3de98ca
fix(git): resolve default branches as branch refs
jschwxrz May 5, 2026
8b83144
fix(projects): store remote default base ref
jschwxrz May 5, 2026
5246887
refactor(git): slim repository detection info
jschwxrz May 5, 2026
3dc1dd3
fix(renderer): keep branch selector tab in sync
jschwxrz May 5, 2026
e3b8e07
feat: add terminal drawer
Davidknp May 5, 2026
1926063
feat: add terminal drawer
Davidknp May 5, 2026
ac898a3
feat(feedback): support image paste and drag-drop
janburzinski May 5, 2026
447c2d8
chore: ignore local extension and polish feedback spacing
janburzinski May 5, 2026
3e6f72b
Merge pull request #1881 from generalaction/jona/gen-1045-default-tas…
Davidknp May 5, 2026
cb7483d
feat: add drawer shortcut and auto create terminal
Davidknp May 5, 2026
b8c83bd
Merge remote-tracking branch 'origin/main' into emdash/enter-cmdenter…
janburzinski May 5, 2026
abc9026
fix: format
Davidknp May 5, 2026
4bb8292
Fix format check
janburzinski May 5, 2026
d940fe1
fix: context bar style
Davidknp May 5, 2026
975acd2
feat(sidebar): support dropping folders to add projects
janburzinski May 5, 2026
94cac73
fix(feedback): manage attachment preview URLs
janburzinski May 5, 2026
6ec1c38
Merge remote-tracking branch 'origin/main' into jan/gen-1082-enable-s…
janburzinski May 5, 2026
9ac1f1e
feat(sidebar): validate dropped project folders
janburzinski May 5, 2026
6e25739
chore(gitignore): stop ignoring emdash hook
janburzinski May 5, 2026
68eef6d
feat(sidebar): show project drop overlay
janburzinski May 5, 2026
fecc57c
Merge remote-tracking branch 'origin/main' into jan/gen-1040-allow-dr…
janburzinski May 5, 2026
6f52737
fix: improve sidebar folder drop handling
janburzinski May 5, 2026
4dc289b
fix(feedback): sync attachment state updates
janburzinski May 5, 2026
dd106f3
chore: create release 1.1.10
Davidknp May 5, 2026
4eb7ba1
Merge pull request #1885 from generalaction/fixess
Davidknp May 5, 2026
0c5c223
feat: mark task working after creating conversation with initial prompt
jschwxrz May 5, 2026
9f342f5
fix: review remarks
jschwxrz May 5, 2026
b253e37
Merge pull request #1882 from generalaction/david/gen-1114-create-ter…
Davidknp May 5, 2026
225b3e2
Merge pull request #1887 from generalaction/jona/gen-1112-bug-working…
jschwxrz May 5, 2026
98675d7
Merge pull request #1883 from janburzinski/jan/gen-1082-enable-screen…
arnestrickmann May 5, 2026
a82e750
feat: show linked issue in task titlebar
janburzinski May 5, 2026
5196c36
Add copy branch action to task menus
arnestrickmann May 5, 2026
b7023d5
Use task selector for provisioned branch
arnestrickmann May 5, 2026
cdef03d
Merge pull request #1891 from arnestrickmann/emdash/context-gjlkl
arnestrickmann May 5, 2026
c2c2ef7
Merge pull request #1884 from janburzinski/jan/gen-1040-allow-drag-an…
arnestrickmann May 6, 2026
5711301
Rename 'Junie CLI' to 'Junie' for consistency with other providers
rabanspiegel May 6, 2026
edd7f1b
Restore 'Junie CLI' alt text to match convention
rabanspiegel May 6, 2026
f175fc9
fix: autofocus modal fields
janburzinski May 6, 2026
ab44a02
refactor: simplify modal autofocus
janburzinski May 6, 2026
3a051ab
Merge remote-tracking branch 'origin/main' into jan/eng-1120-focus-ag…
janburzinski May 6, 2026
d186e8e
fix(settings): make Cmd+, only open settings, never toggle
janburzinski May 6, 2026
18d60a4
Merge remote-tracking branch 'origin/main' into emdash/enter-cmdenter…
janburzinski May 6, 2026
5e86d81
fix: correct agent resume flags
janburzinski May 6, 2026
697d92c
fix: address agent command review comments
janburzinski May 6, 2026
80718d0
feat: add Letta Code CLI provider
janburzinski May 6, 2026
56cf0d8
Merge remote-tracking branch 'origin/main' into jan/eng-829-feat-lett…
janburzinski May 6, 2026
20b0c81
fix: narrow Letta auth success detection
janburzinski May 6, 2026
5ada310
feat: task sidebar wip
Davidknp May 6, 2026
2433098
Merge pull request #1880 from janburzinski/emdash/enter-cmdenter-erro…
Davidknp May 6, 2026
b167f13
Merge pull request #1896 from janburzinski/jan/eng-1120-focus-agent-i…
Davidknp May 6, 2026
699a60e
Merge pull request #1898 from janburzinski/jan/eng-990-settings-panel…
Davidknp May 6, 2026
be55cf2
Merge remote-tracking branch 'origin/main' into david/gen-1115-task-s…
Davidknp May 6, 2026
7310213
feat: task sidebar wip
Davidknp May 6, 2026
13a77f9
feat: task sidebar wip
Davidknp May 6, 2026
7225567
feat: add lastinteracted property to conversations
Davidknp May 6, 2026
bdec860
fix: format
Davidknp May 6, 2026
a955a4e
fix: diverging dates
Davidknp May 6, 2026
9f16e17
Merge pull request #1903 from generalaction/add-conv-last-interacted
Davidknp May 6, 2026
81db47c
feat: task view
Davidknp May 6, 2026
670ab38
Merge remote-tracking branch 'origin/main' into david/gen-1115-task-s…
Davidknp May 6, 2026
e6ceaed
feat: task view
Davidknp May 6, 2026
b7d487b
fix: mobx
Davidknp May 6, 2026
d98db0d
Merge pull request #1894 from generalaction/emdash/quiet-months-know-…
rabanspiegel May 6, 2026
19ae231
chore: bump version to 1.1.11
arnestrickmann May 6, 2026
df9632b
Merge branch 'main' into bump/v1.1.11
arnestrickmann May 6, 2026
07af524
Merge pull request #1912 from arnestrickmann/bump/v1.1.11
arnestrickmann May 6, 2026
f0e4fdc
Add Trae open-in options
arnestrickmann May 6, 2026
81afe1e
Merge pull request #1913 from generalaction/emdash/add-trae-open-in-z…
arnestrickmann May 6, 2026
b0a63a4
feat: confirm account sign out
arnestrickmann May 7, 2026
9070b87
feat: add Jules CLI provider support
janburzinski May 7, 2026
ce1cc10
feat: task view wip
Davidknp May 7, 2026
be1f198
Merge remote-tracking branch 'origin/main' into david/gen-1115-task-s…
Davidknp May 7, 2026
b62e954
chore: refactor nav mgmt
Davidknp May 7, 2026
0b09840
fix(notifications): focus task on notification click
janburzinski May 7, 2026
60729e0
chore: refactor modal mgmt
Davidknp May 7, 2026
8038774
fix(notifications): dispose pending tab focus watchers
janburzinski May 7, 2026
a9670f9
fix: nav refactor fixes
Davidknp May 7, 2026
23623c8
fix: avoid notification focus TDZ crash
janburzinski May 7, 2026
8811892
Merge pull request #1919 from generalaction/refactor-navigation
Davidknp May 7, 2026
76eb22b
Merge remote-tracking branch 'origin/main' into david/gen-1115-task-s…
Davidknp May 7, 2026
0e080b2
feat: task view wip
Davidknp May 7, 2026
fb733fb
feat: command system
Davidknp May 7, 2026
35ab6a1
fix: conversations list
Davidknp May 7, 2026
7d14d6f
Merge pull request #1914 from arnestrickmann/emdash/signout-confirmat…
arnestrickmann May 7, 2026
38eed40
feat: task view wip
Davidknp May 7, 2026
f97e1cf
fix: tab switch shortcuts
Davidknp May 7, 2026
da389bd
fix: task view tabs fixes
Davidknp May 7, 2026
0cadbfd
fix: conversation tabs
Davidknp May 7, 2026
f0f9810
fix: shortcuts propagation in monaco
Davidknp May 7, 2026
fd9a22c
Merge pull request #1852 from janburzinski/jan/gen-970-show-when-an-i…
arnestrickmann May 7, 2026
20cdc9d
feat: make tabs reorderable
Davidknp May 7, 2026
b34f567
Merge remote-tracking branch 'origin/main' into david/gen-1115-task-s…
Davidknp May 7, 2026
b7ab587
fix: format
Davidknp May 7, 2026
c2eb3e5
fix: issues
Davidknp May 7, 2026
ef59b6f
fix: remove dead code
Davidknp May 7, 2026
2f0456d
Merge pull request #1922 from generalaction/david/gen-1115-task-sidebar
Davidknp May 7, 2026
8e4f6dc
chore: bump version
Davidknp May 7, 2026
e6d6af2
Merge pull request #1923 from generalaction/david/gen-1115-task-sidebar
Davidknp May 7, 2026
2b1f4b7
Merge pull request #1916 from janburzinski/jan/eng-1130-add-support-f…
arnestrickmann May 7, 2026
7698860
docs: add Homebrew install command and clean up download section
rabanspiegel May 7, 2026
b99a76c
Merge pull request #1924 from generalaction/emdash/readme-gss6r
rabanspiegel May 7, 2026
60d6711
Merge pull request #1899 from janburzinski/emdash/check-flags-48bzw
arnestrickmann May 7, 2026
40a400c
Increase SSH test container session limits
arnestrickmann May 7, 2026
ae5218a
Merge pull request #1925 from generalaction/emdash/test-ssh-docker-3i1u4
arnestrickmann May 7, 2026
937e959
Merge remote-tracking branch 'origin/main' into emdash/clicking-on-no…
janburzinski May 8, 2026
e927788
feat: add draft pull request action
janburzinski May 8, 2026
3b0a295
fix: simplify draft pull request action
janburzinski May 8, 2026
ccaedb2
fix: update notification task tab focus
janburzinski May 8, 2026
84b8f2a
fix: restore draft pr button guards
janburzinski May 8, 2026
8c57b59
feat(diff): render image files in diff viewer
janburzinski May 8, 2026
596f21a
refactor(diff): simplify image preview loading
janburzinski May 8, 2026
9e7af1a
Merge remote-tracking branch 'origin/main' into jan/eng-1150-render-c…
janburzinski May 8, 2026
0054373
fix(diff): address image diff review feedback
janburzinski May 8, 2026
217fdc5
fix(diff): handle image filter failures
janburzinski May 8, 2026
58cd4df
fix: task view fixes
Davidknp May 8, 2026
378302c
fix: task view open initial convo
Davidknp May 8, 2026
84dcc7b
fix: task view initial convo tab - added view state cache
Davidknp May 8, 2026
bd94ca1
fix: handle missing and errored files
Davidknp May 8, 2026
0e744f7
Merge pull request #1933 from generalaction/david/eng-1140-task-sideb…
Davidknp May 8, 2026
495b8c7
feat: add conversations to cmdk
Davidknp May 8, 2026
6f9c5d6
fix: possible id conflict
Davidknp May 8, 2026
8b97582
Merge pull request #1934 from generalaction/david/eng-1156-add-conver…
Davidknp May 8, 2026
7a4bbbb
chore: cleanup tabs implementation
Davidknp May 8, 2026
fbc21fb
Merge remote-tracking branch 'origin/main' into david/eng-1155-add-ba…
Davidknp May 8, 2026
8a1becd
feat: back and forth navigation wip
Davidknp May 8, 2026
b46bcfa
fix: back and forth nav
Davidknp May 8, 2026
ce9e4f3
chore: create release 1.1.13
Davidknp May 8, 2026
5d913ab
Merge pull request #1935 from generalaction/david/eng-1155-add-back-a…
Davidknp May 8, 2026
3e257a3
Merge branch 'main' into jan/eng-829-feat-letta-code-cli
arnestrickmann May 8, 2026
3db5c70
Merge pull request #1900 from janburzinski/jan/eng-829-feat-letta-cod…
arnestrickmann May 8, 2026
4a63abd
docs: update supported provider count
arnestrickmann May 8, 2026
4651c4b
Merge pull request #1937 from arnestrickmann/jan/eng-829-feat-letta-c…
arnestrickmann May 8, 2026
ff814d6
Merge pull request #1932 from janburzinski/jan/eng-1150-render-common…
arnestrickmann May 8, 2026
8e20342
Merge pull request #1929 from janburzinski/jan/eng-1138-opening-a-dra…
arnestrickmann May 8, 2026
087f9a9
Merge pull request #1918 from janburzinski/emdash/clicking-on-notific…
arnestrickmann May 8, 2026
0ef372e
ENG-1071 render PR comments in checks panel
arnestrickmann May 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
28 changes: 0 additions & 28 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -1,28 +0,0 @@
{
"extends": ["plugin:@typescript-eslint/recommended", "plugin:react-hooks/recommended"],
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint", "react-hooks", "import"],
"rules": {
"@typescript-eslint/no-unused-vars": [
"warn",
{
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_"
}
],
"@typescript-eslint/no-explicit-any": "warn",

"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-empty-function": "off",
"prefer-const": "warn",
"react-hooks/set-state-in-effect": "warn"
},
"overrides": [],
"env": {
"browser": true,
"es2020": true,
"node": true
},
"ignorePatterns": ["**/_*/**"]
}
64 changes: 64 additions & 0 deletions .github/actions/setup-build/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Setup build environment
description: Install toolchain, deps, and write production env

inputs:
posthog-key:
description: PostHog project API key
required: false
default: ''
posthog-host:
description: PostHog host
required: false
default: ''
build-variant:
description: Build variant to embed (canary | prod)
required: false
default: 'prod'
windows-native:
description: Set to true on Windows to pass MSVC/gyp flags to pnpm install
required: false
default: 'false'

runs:
using: composite
steps:
- uses: pnpm/action-setup@v4
with:
version: 10.28.2

- uses: actions/setup-node@v4
with:
node-version: '24'
cache: pnpm

- uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install Python build tools
shell: bash
run: python -m pip install --upgrade pip setuptools wheel

- name: Install dependencies (Windows)
if: inputs.windows-native == 'true'
shell: bash
env:
npm_config_msvs_version: '2022'
GYP_MSVS_VERSION: '2022'
run: pnpm install --frozen-lockfile

- name: Install dependencies
if: inputs.windows-native != 'true'
shell: bash
run: pnpm install --frozen-lockfile

- name: Write production env
shell: bash
env:
PH_KEY: ${{ inputs.posthog-key }}
PH_HOST: ${{ inputs.posthog-host }}
BUILD_VARIANT: ${{ inputs.build-variant }}
run: |
echo "VITE_POSTHOG_KEY=$PH_KEY" >> .env.production
echo "VITE_POSTHOG_HOST=$PH_HOST" >> .env.production
echo "VITE_BUILD=$BUILD_VARIANT" >> .env.production
40 changes: 40 additions & 0 deletions .github/actions/upload-r2/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Upload to R2
description: Upload release artifacts to Cloudflare R2

inputs:
r2-account-id:
required: true
description: Cloudflare R2 account ID
r2-access-key-id:
required: true
description: Cloudflare R2 access key ID
r2-secret-access-key:
required: true
description: Cloudflare R2 secret access key
r2-bucket:
required: true
description: Cloudflare R2 bucket
channel:
description: Override update channel for manifest discovery (default uses stable channel)
required: false
default: ''
prefix:
description: Override artifact prefix for installer discovery (default uses stable prefix)
required: false
default: ''

runs:
using: composite
steps:
- name: Upload to R2
shell: bash
env:
R2_ACCOUNT_ID: ${{ inputs.r2-account-id }}
R2_ACCESS_KEY_ID: ${{ inputs.r2-access-key-id }}
R2_SECRET_ACCESS_KEY: ${{ inputs.r2-secret-access-key }}
R2_BUCKET: ${{ inputs.r2-bucket }}
run: |
ARGS=""
if [ -n "${{ inputs.channel }}" ]; then ARGS="$ARGS --channel ${{ inputs.channel }}"; fi
if [ -n "${{ inputs.prefix }}" ]; then ARGS="$ARGS --prefix ${{ inputs.prefix }}"; fi
node --experimental-strip-types scripts/release/upload-r2.ts $ARGS
44 changes: 2 additions & 42 deletions .github/workflows/code-consistency-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,48 +43,8 @@ jobs:
- name: Check formatting
run: pnpm run format:check

# TODO: add this once fixed across all files
# - name: Check linting
# run: pnpm run lint

- name: Type check
run: pnpm run typecheck

vitest:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.28.2

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
cache: 'pnpm'

- name: Install Linux native deps
run: |
sudo apt-get update
sudo apt-get install -y build-essential libsecret-1-0 libsecret-1-dev

- name: Install dependencies
# Tests import Electron/keytar paths, so lifecycle scripts must run.
run: |
for attempt in 1 2 3; do
pnpm install --frozen-lockfile && break
if [ "$attempt" -eq 3 ]; then
echo "pnpm install failed after 3 attempts"
exit 1
fi
echo "Install failed (attempt $attempt). Retrying in 10s..."
sleep 10
done

- name: Run Vitest
run: pnpm exec vitest run
- name: Check linting
run: pnpm run lint
168 changes: 168 additions & 0 deletions .github/workflows/release-canary.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
name: Release (Canary)

on:
workflow_dispatch:
inputs:
arch:
description: 'Architecture to build (arm64 | x64 | both)'
required: false
default: 'both'

permissions:
contents: read

jobs:
release-linux:
runs-on: ubuntu-latest
permissions:
contents: read
environment: release
steps:
- uses: actions/checkout@v4
- name: Install system build dependencies
run: sudo apt-get update && sudo apt-get install -y build-essential pkg-config libsecret-1-dev rpm
- uses: ./.github/actions/setup-build
with:
posthog-key: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
posthog-host: ${{ secrets.POSTHOG_HOST }}
build-variant: canary

- run: pnpm run build

- run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version

- name: Build Linux packages
run: >
node --experimental-strip-types scripts/release/build.ts
--platform linux --arch x64
--config electron-builder.canary.config.ts

- uses: ./.github/actions/upload-r2
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET }}
channel: v1-canary
prefix: emdash-canary

release-win:
runs-on: windows-2022
permissions:
contents: read
environment: release
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build
with:
posthog-key: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
posthog-host: ${{ secrets.POSTHOG_HOST }}
build-variant: canary
windows-native: 'true'
- name: Export Python path for native modules
shell: bash
run: echo "python=$(which python)" >> "$GITHUB_ENV"

- name: Build app
shell: bash
run: pnpm run build

- shell: bash
run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version

- name: Check Azure Trusted Signing secrets
id: signing
shell: bash
env:
AZ_TENANT: ${{ secrets.AZURE_TENANT_ID }}
AZ_CLIENT: ${{ secrets.AZURE_CLIENT_ID }}
AZ_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
run: |
if [ -n "$AZ_TENANT" ] && [ -n "$AZ_CLIENT" ] && [ -n "$AZ_SECRET" ]; then
echo "has_signing=true" >> "$GITHUB_OUTPUT"
else
echo "has_signing=false" >> "$GITHUB_OUTPUT"
echo "::warning::Azure Trusted Signing secrets not configured. Windows build will be unsigned."
fi

- name: Build Windows packages
shell: bash
env:
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
run: >
node --experimental-strip-types scripts/release/build.ts
--platform win --arch x64
--config electron-builder.canary.config.ts

- name: Verify Windows code signature
if: ${{ steps.signing.outputs.has_signing == 'true' }}
shell: bash
run: node --experimental-strip-types scripts/release/verify-win.ts

- name: Upload to R2
uses: ./.github/actions/upload-r2
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET }}
channel: v1-canary
prefix: emdash-canary

release-mac:
runs-on: macos-latest
permissions:
contents: read
environment: release
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build
with:
posthog-key: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
posthog-host: ${{ secrets.POSTHOG_HOST }}
build-variant: canary

- name: Import Apple signing certificate
uses: apple-actions/import-codesign-certs@v2
with:
p12-file-base64: ${{ secrets.CERTIFICATE_P12 }}
p12-password: ${{ secrets.CERTIFICATE_PASSWORD }}

- run: pnpm run build

- run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version

- name: Build signed DMGs + ZIPs
env:
CSC_IDENTITY_AUTO_DISCOVERY: 'true'
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
run: >
node --experimental-strip-types scripts/release/build.ts
--platform mac --arch ${{ github.event.inputs.arch || 'both' }} --targets dmg,zip
--config electron-builder.canary.config.ts

- name: Verify macOS bundle
run: >
node --experimental-strip-types scripts/release/verify-mac.ts
--expected-team-id ${{ secrets.APPLE_TEAM_ID }}

- name: Notarize and staple
env:
APPLE_API_KEY_CONTENT: ${{ secrets.APPLE_API_KEY }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
run: node --experimental-strip-types scripts/release/notarize-mac.ts --app-bundle "Emdash Canary.app"

- name: Upload to R2
uses: ./.github/actions/upload-r2
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET }}
channel: v1-canary
prefix: emdash-canary
Loading
Loading