Monorepo for Aesthetic.Computer aesthetic.computer
README.md

Aesel for Windows #

Windows 10/11 x64 beta. WPF + WebView2 hosts a bundled copy of Aesel's shared JavaScript session and browser interface: AC account sign-in, hosted generation, local notebooks, automatic publishing, source download, and piece preview. This release does not include the Mac interface, terminal app, Claude/Codex CLI providers, or automatic updates. It is unsigned; Windows may show an unknown publisher or SmartScreen notice. No security setting needs to be disabled.

Sign-in opens the system browser using AC's existing PKCE registration and http://localhost:44233/callback. The receiver binds only to 127.0.0.1, bounds request size and duration, and rejects mismatched/duplicate state parameters. Refresh credentials stay in a Windows CurrentUser DPAPI envelope. The web view receives access tokens through a bridge restricted to the bundled top document; it has no filesystem or process host objects. External HTTPS links open in the browser. One app process owns credential rotation.

Data lives under %LOCALAPPDATA%\Aesthetic Computer\Aesel. Notebooks are separated by account and survive updates and uninstall. Sign out removes saved credentials. Delete that directory separately to erase all local notebooks and credentials. There is no cross-device notebook sync. Hosted inference and publication use AC's network services. A launch sends the existing anonymous app-open schema (app, version, Windows platform, random install UUID, first launch flag); create an empty disable-launch-ping file in the data directory to disable it. No account identity is included in that ping.

Build on Windows with Node 24, .NET 10 SDK, Microsoft WebView2 Runtime, and Inno Setup 6 installed:

npm ci --prefix aesel/web
node aesel/windows/prepare.mjs
pwsh -File aesel/windows/package.ps1

package.ps1 publishes the self-contained x64 app, runs it on Windows with an isolated profile and mocked account/inference/upload traffic, captures the workspace/sign-in screens, then builds the per-user installer and SHA-256 feed. The installer includes Microsoft's signature-verified WebView2 bootstrapper and installs the runtime if needed. The installed app is tested again after setup. The smoke checks generation, upload, preview, escaping, persistence, thread switching, sign-out, account isolation, callback boundaries, Windows DPAPI, and serialized refresh-token rotation. It does not certify real-user OAuth or provider billing.

The existing AppVeyor project builds the aesel-windows branch using its separate branch configuration. GitHub's manual workflow is also available when the account billing lock is cleared. Inspect both screenshots and the test result before publication; never publish a compile-only artifact.

Release artifacts go under releases.aesthetic.computer/aesel/windows/. Run node aesel/windows/publish.mjs ARTIFACT_DIR with the existing Spaces credentials in the environment. When running this script from a staged copy, set AESEL_SOURCE_REPO to the canonical checkout used for ancestry checks. It uploads the immutable installer first and latest.json last. The manifest records the build revision, hash, architecture, beta channel, and unsigned status. Only a revision preserved on knot main may be published. The website links through /api/download?app=aesel&file=aesel-VERSION-windows-x64-setup.exe so Windows downloads use the existing AC download reporting.