Commit Graph
438 Commits
Author SHA1 Message Date
雷电芽衣 4d0d64ff54 C12.7: POP3 fetch by UIDL 2026-10-19 21:40:25 -04:00
雷电芽衣 890bd80d4d C12.6: IMAP sync 2026-10-19 21:21:27 -04:00
雷电芽衣 1c225f6812 C12.5: mail accounts, add and remove
ElyMail's window lists accounts and adds Gmail, Microsoft, iCloud
(app-specific password), IMAP and POP3 ones; a check logs in to both
servers and reports each. Accounts live in the store as JSON with a
case-insensitive unique address; secrets go to the keychain. Removal
names the cache it deletes, takes the secret first and puts it back
when local removal fails. Originals are set aside until commit and
restored after a crash. Requests are numbered so late results stay
with their own dialog. The account list is keyboard-navigable.
2026-10-19 20:17:19 -04:00
ZacharyZhang-NY 5068bc07ca Merge branch 'main' of https://github.com/ELY-Open-Source/ElyOffice
# Conflicts:
#	agents.md
#	scripts/fetch-references.sh
2026-10-19 19:53:11 -04:00
ZacharyZhang-NYandClaude 0e0415fdbe Site: the download count adds Gitea's history to GitHub's
Gitea holds the downloads made before the move, so the worker sums
both hosts' asset download counts (update manifests excluded). Gitea is
read with the same five-minute cache and a five-second limit; when it
is down or answers oddly, the count is GitHub's alone. Downloads stay
on GitHub only.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-19 19:37:59 -04:00
ZacharyZhang-NYandClaude 271468d0e5 Relicense Ely Office's own code from AGPL-3.0 to MIT
LICENSE is the MIT text, copyright Yang Zhang; the workspace crates,
the docs and the site say MIT. Bundled engines keep their licences:
LibreOffice (MPL-2.0), Git (GPL-2.0) and MuPDF (AGPL-3.0), which ElyPDF
links, so the Linux packages name both, e.g. "MIT AND AGPL-3.0-or-later".

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-19 19:31:09 -04:00
ZacharyZhang-NYandClaude 1d74bbc417 Updates and the component library come from GitHub
The update check reads the latest release from GitHub's API; its JSON
has the same tag_name and assets[].browser_download_url the reader
expects. Ely-GPUI-Components is fetched from ELY-Open-Source at the same
pinned commits.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-19 19:22:39 -04:00
ZacharyZhang-NYandClaude a06c9b299d Docs: the code lives on GitHub under ELY-Open-Source
CONTRIBUTING opens pull requests from a GitHub fork; the Linux
packages' homepage is the GitHub repository; agents.md records the move.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-19 19:22:12 -04:00
ZacharyZhang-NYandClaude 6b28c54e33 Site: releases and source on GitHub; the Mac build is notarized
The worker reads the newest release and download counts from GitHub's
API, with an optional GITHUB_TOKEN secret for the rate limit. Download
links go to GitHub's latest release, and the source link wears the
GitHub mark. The "not notarized" notice goes: macOS builds are signed
and notarized now.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-19 19:21:30 -04:00
ZacharyZhang-NYandClaude 41321fd05f CI: release from GitHub Actions to GitHub releases
The release workflow moves from .gitea to .github: macOS on the
macos-signing runner, Windows and Linux (WSL) on ely-windows. The
persistent clones fetch from GitHub. ci.sh creates or reuses the tag's
release through GitHub's API and replaces a rerun's assets of the same
name; the update manifests point at GitHub's download URLs.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-19 19:19:04 -04:00
ZacharyZhang-NYandClaude bd68382921 C12.4: mail credentials and OAuth sign-in
Passwords and refresh tokens go only to the system keychain; a refused
keychain keeps them in memory until exit and says why. Gmail and
Microsoft sign in by authorization code with S256 PKCE on a loopback
redirect; refresh tokens are kept, and revoked grants ask to sign in
again. Client IDs come from the build (env or oauth.env). ureq trace
records never reach the log.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-19 18:59:56 -04:00
ZacharyZhang-NYandClaude Opus 5.5 7c5bf48589 C12.3: ElyMail local store
SQLite index, content-addressed originals, rebuildable FTS5 search,
schema versions with a backup before each upgrade and read-only on
failure, and size reporting. Three review rounds; the round 3 fixes
are checked by tests, not reviewed again.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 18:14:09 -04:00
ZacharyZhang-NYandClaude Opus 5.5 fe90221c11 C12.2: read and write MIME by the tree
The reader walks the MIME tree with its container context: alternative
picks versions, related finds its root by start, attached multiparts
stay whole, digest children are messages. Nesting deeper than 64
levels, counting enclosed messages, is refused, and over-deep parse
results are taken apart iteratively so dropping them cannot overflow
the stack. Composite parts with a Content-ID are cid targets.

The writer keeps attachment parameters and Content-IDs, writes
multipart and message attachments unencoded, and makes its own
Message-ID. SMTP adds BODY=8BITMIME for 8-bit bodies and SMTPUTF8
when any header block at any depth is 8-bit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 17:35:05 -04:00
ZacharyZhang-NYandClaude Opus 5.5 9f47b94714 C12.1: ely-mail-engine connects over IMAP, POP3 and SMTP
TLS or STARTTLS with the system trust store; password and XOAUTH2
logins keep the server's words on refusal. IMAP and POP3 are written
in the engine (imap-proto parses IMAP replies): async-imap dropped
NO/BAD on LIST and FETCH and lost BYE text, async-pop kept dot
stuffing and logged passwords. SMTP runs its own transaction with
RFC 5321 mailbox checks, full dot transparency, SMTPUTF8 and RSET.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 16:53:53 -04:00
ZacharyZhang-NYandClaude Opus 5.5 d7de5619a7 C12.0: ElyMail backend moves to Rust crates; iCloud by app password
async-imap, async-pop, mail-send, mail-parser and mail-builder replace
MailCore 2. The MailCore 2 and libetpan fetch, build and probe scripts
go. HTML bodies render as a sanitized block subset in GPUI; compose uses
the Markdown document component. OAuth client IDs come from oauth.env
(ignored) or CI secrets. The task list for C12 is rewritten in order.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 16:02:34 -04:00
ZacharyZhang-NYandClaude 0d991e1c71 R8.5, R8.6: 0.1.8 released; #8 and #9 closed
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-19 02:06:20 -04:00
ZacharyZhang-NYandClaude 0dfb4bb720 CI: macOS job runs on the GUI-session signing runner
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-19 02:05:55 -04:00
ZacharyZhang-NY c8d7e6f3cc Merge remote-tracking branch 'origin/main' 2026-10-19 00:27:17 -04:00
ZacharyZhang-NYandClaude 2754b2e3dc 0.1.8
release / windows (push) Failing after 9m38s
release / linux (push) Skipped
release / macos (push) Failing after 21m8s
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-19 00:27:04 -04:00
ZacharyZhang-NYandClaude 4ef7c96916 R8.4: ElyMark typesets inline formulas; \( and \[ read as math
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-19 00:26:23 -04:00
ZacharyZhang-NY 05b205f629 Update README.md 2026-10-19 04:20:14 +00:00
ZacharyZhang-NYandClaude 1e6147ae77 R8.3: sheet tab strip scrolls the chosen sheet in (Gitea #8)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-18 22:41:28 -04:00
ZacharyZhang-NYandClaude 2ca53ef585 R8.2: Word EQ fields open as formulas; inline objects follow their run
Gitea #9. Patch 0049 moves inline pictures and OLE objects with
their run's w:position. Patches 0050 and 0051 turn EQ fields into
Math objects; unreadable fields show their code. Round 3 findings
(lowercase \s\do tail, split subscripts, \ai/\di, italics through
OMML) fixed and covered by word.rs; no fourth review.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-18 21:39:17 -04:00
ZacharyZhang-NYandClaude 6f1eebb4b5 R8.1: document content keeps the file's colours in a dark app
Pages, cells, slides and PDF pages paint as the file says in any
appearance; only the chrome around them follows dark mode. The
kernel keeps Ely's one light scheme, sent once a view, and MuPDF
no longer inverts. Reviews now run gpt-6.1-sol at xhigh.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-18 19:42:13 -04:00
ZacharyZhang-NYandClaude Opus 5.5 d4cb274749 0.1.7
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 00:33:01 -04:00
ZacharyZhang-NYandClaude Opus 5.5 632a66eb46 R7.9: Explorer's New makes docx, xlsx, pptx and md on Windows
Each app installs a blank file and points ShellNew at it. Explorer
lists a type only through its default class, so a type no program
handles (no default, or one naming no class) gets the app's class;
an installed handler is never replaced. Uninstall removes only what
this install wrote.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 00:32:48 -04:00
ZacharyZhang-NYandClaude Opus 5.5 2f971c646f R7.3: Linux and Windows kernels lay out 宋体 the same
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 18:53:41 -04:00
ZacharyZhang-NYandClaude Opus 5.5 21394b40a2 R7.8: replies on #3-#6, feature request #7
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 18:48:24 -04:00
ZacharyZhang-NYandClaude Opus 5.5 aae000247d R7.7: one source archive pair per release
Windows checks out symlinks as files, so only Linux (CI) and macOS
(release.sh) write source archives. ci.sh skips names already on
the release; the first platform's copy stays.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 18:34:27 -04:00
ZacharyZhang-NYandClaude Opus 5.5 a1b8c18ffd R7.7: crates.py lists what cargo links on this target
The walk over cargo metadata ignored an edge's target, so lopdf (Linux
only, a test dependency elsewhere) counted on Windows. Linux needs the
BSD-3-Clause text for alloc-stdlib, which ships no licence file.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 17:08:30 -04:00
ZacharyZhang-NYandClaude Opus 5.5 3846041f17 0.1.6
release / linux (push) Skipped
release / windows (push) Failing after 3s
release / macos (push) Failing after 2s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 17:00:33 -04:00
ZacharyZhang-NYandClaude Opus 5.5 13546ea899 R7.6: Windows and Linux print (#3)
Windows prints through the system dialog at the document's paper;
Linux through the desktop portal, the dialog's choices laid out by Ely.
Round 3 findings fixed without a further review, as the rules say.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 16:59:46 -04:00
ZacharyZhang-NYandClaude Opus 5.5 de4a38e814 R7.5: an open ElyMark block keeps its look (component 2e65b05)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 15:01:22 -04:00
ZacharyZhang-NYandClaude Opus 5.5 6b676e06e6 R7.4: an unembedded font is no damage (#5)
The warning watch skips MuPDF's non-embedded font notice and its
repeat counts. Text and search reads are watched too: damage they meet
is kept on the document, told by the next draw or picture check, and
fails image and text exports until then.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 13:44:17 -04:00
ZacharyZhang-NYandClaude Opus 5.5 969cb67c96 R7.3: a font the lookup finds is not reported missing (patch 0048)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 12:48:59 -04:00
ZacharyZhang-NYandClaude Opus 5.5 03e8e9bcb3 R7.2: the settings window draws no app menus or update banner
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 11:43:20 -04:00
ZacharyZhang-NYandClaude Opus 5.5 b12858c7f0 R7.1: bundled installers, one dmg and one setup.exe for all six apps
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 11:17:47 -04:00
ZacharyZhang-NYandClaude Opus 5.5 e22f276c1d R6.14 done: 0.1.5 rebuilt on aa419fd and uploaded
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 21:26:38 -04:00
ZacharyZhang-NYandClaude Opus 5.5 aa419fdfc9 R6.13 round 3 fix: each wheel notch turns; drop the unused part()
release / macos (push) Failing after 1s
release / windows (push) Successful in 12m14s
release / linux (push) Successful in 9m30s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 20:43:11 -04:00
ZacharyZhang-NYandClaude Opus 5.5 407ce00ab9 R6.13 round 2 fix: the worker turns in input order; scrolls by gesture
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 20:35:43 -04:00
ZacharyZhang-NYandClaude Opus 5.5 d427d05b96 R6.13 round 1 fix: notches per platform, the worker decides arrows
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 20:22:23 -04:00
ZacharyZhang-NYandClaude Opus 5.5 c2897aa21a R6.12 done: review round 3 passed
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 20:03:50 -04:00
ZacharyZhang-NYandClaude Opus 5.5 f72528c474 R6.12 round 2 fix: unbundled workers ask for accessory
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 19:56:48 -04:00
ZacharyZhang-NYandClaude Opus 5.5 1317c4ad39 R6.12 round 1 fix: the worker registers as a UI element
The worker set the accessory policy after AppKit had already registered it
as a Dock app, so 11 of 15 launches showed Foreground for about 30 ms.
Now it sets LSUIElement in its main bundle's info before the kernel starts
AppKit, and fails to start unless the policy came up as accessory.

tests/scripts/dock-macos.sh samples each worker's type from its start until
the first tile; on the Mac mini 30 launches were all UIElement, and the
shipped worker fails it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 19:45:48 -04:00
ZacharyZhang-NYandClaude Opus 5.5 fdb8317d24 R6.12, R6.13: the LOK worker has no Dock icon; Show turns slides
R6.12: on macOS the worker sets LibreOffice's own NSApplication to the
accessory policy before the kit starts, so it never shows in the Dock.

R6.13: when the whole slide fits, the wheel and Up/Down (nothing
selected, no text editing) turn slides in the ElyShow editor.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 19:29:10 -04:00
ZacharyZhang-NYandClaude Opus 5.5 bb943fb84b R6.5, R6.10 done: 0.1.5 rebuilt on 53630ce and uploaded
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 16:55:09 -04:00
ZacharyZhang-NYandClaude Opus 5.5 53630ce0be R6.11 round 3 fix: numbered backups, checked install list
release / macos (push) Failing after 1s
release / windows (push) Successful in 11m29s
release / linux (push) Successful in 7m29s
Backups under .ely-old are numbered in list order, so paths near the
Windows limit still upgrade and uninstall. Uninstall checks the list
file first and puts everything back if it cannot delete it. Five
comments shortened. Round 3 was the last; ticked without review.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:32:00 -04:00
ZacharyZhang-NYandClaude Opus 5.5 cb47f0295f R6.11: review verdicts, rounds 1 and 2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:19:03 -04:00
ZacharyZhang-NYandClaude Opus 5.5 50d348d4e5 R6.11 round 2 fix: the installer lists every file it installs
The list names each file and folder; upgrades and uninstall move only
listed files and remove a folder only when empty. Every file, nested
ones included, must be writable first. A new file whose place holds a
file this app did not install refuses the install. A copy failing
midway removes what it wrote and puts the old release back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:18:55 -04:00
ZacharyZhang-NYandClaude Opus 5.5 8946a08538 Video scripts: comments are one line, ten words
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:00:23 -04:00