diff --git a/CHANGELOG.md b/CHANGELOG.md index bb9e793..5f99531 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.0.8] - 2026-07-24 + +### Fixed + +- Successfully scheduling a durable agent follow-up now ends the active turn + at the tool boundary. The runtime no longer makes a second model request or + briefly exposes a fabricated completion before removing it, eliminating a + timing race observed during the clean macOS release test. +- Gmail OAuth can now be completed from a remote browser by pasting its final + localhost callback URL into 1Helm. Automatic host-local callbacks still + work; the fallback validates the same one-time state and PKCE exchange. + +### Changed + +- The app's feedback surface and project privacy, support, and security + guidance now identify `build@1helm.com` as the company contact address. +- Notification audio is now a per-user preference: every member can mute all + pings globally, mute an individual channel, and choose that channel's sound + without changing anyone else's experience. + ## [0.0.7] - 2026-07-24 ### Fixed @@ -201,7 +221,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 notarization, stapled tickets, Gatekeeper verification, persistent Application Support, and isolated Apple container machines. -[Unreleased]: https://github.com/gitcommit90/1Helm/compare/v0.0.7...HEAD +[Unreleased]: https://github.com/gitcommit90/1Helm/compare/v0.0.8...HEAD +[0.0.8]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.8 [0.0.7]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.7 [0.0.6]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.6 [0.0.5]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.5 diff --git a/SECURITY.md b/SECURITY.md index 36d7b74..b2e6014 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -12,6 +12,10 @@ Use GitHub's **Report a vulnerability** flow for Include the affected version, platform, impact, minimum reproduction, and any relevant logs after removing credentials and personal data. +For non-sensitive security questions or company contact, email +[`build@1helm.com`](mailto:build@1helm.com). Do not send unpatched vulnerability +details or secrets by ordinary email; use the private advisory flow above. + Do not open a public issue for an unpatched vulnerability. Do not include API keys, OAuth tokens, Photon project secrets, private messages, workspace data, Apple signing material, or other people's personal information in a report. diff --git a/desktop/main.cjs b/desktop/main.cjs index d7c8f45..908a670 100644 --- a/desktop/main.cjs +++ b/desktop/main.cjs @@ -164,7 +164,7 @@ function openAuthWindow(url) { window.webContents.on("will-navigate", returnToApp); window.webContents.on("will-redirect", returnToApp); window.webContents.setWindowOpenHandler(({ url: nextUrl }) => { - if (/^https?:/i.test(nextUrl)) void shell.openExternal(nextUrl); + if (/^https?:/i.test(nextUrl) || /^mailto:build@1helm\.com$/i.test(nextUrl)) void shell.openExternal(nextUrl); return { action: "deny" }; }); window.on("closed", () => { if (authWindow === window) authWindow = null; }); @@ -191,7 +191,7 @@ function createWindow(showWhenReady = true) { window.webContents.setWindowOpenHandler(({ url }) => { if (allowedAppUrl(url)) return { action: "allow" }; - if (/^https?:/i.test(url)) void shell.openExternal(url); + if (/^https?:/i.test(url) || /^mailto:build@1helm\.com$/i.test(url)) void shell.openExternal(url); return { action: "deny" }; }); window.webContents.on("will-navigate", (event, url) => { diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 5ec479c..c010d85 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -224,7 +224,9 @@ Settings → Connections → Gmail owns the connection on the 1Helm host. 1. Once per Google Cloud project, create a Desktop app OAuth client, enable the Gmail API, and choose the downloaded JSON in 1Helm. 2. Choose **Connect Gmail**. 1Helm opens a state-protected PKCE authorization and - receives the callback on loopback. + receives the callback on loopback. If the browser is on another device and + its `127.0.0.1` page cannot load, copy the complete callback URL from that + address bar and paste it into the Gmail connection card. 3. Return to 1Helm after Google confirms the account.  @@ -237,8 +239,10 @@ accounts to that resident. Gmail supports account inventory, search, read, and draft creation. Sending remains disabled. OAuth tokens live under 1Helm's host-owned data and never enter chat, Activity evidence, or a resident computer. -The loopback callback belongs to the installed/local 1Helm host. A remotely -viewed demo cannot authorize Gmail on a different machine. +The pasted callback is never fetched. 1Helm validates its one-time state and +PKCE verifier, then exchanges the authorization code from the host where the +tokens belong. Automatic loopback completion still works when the browser is +running on that host. ## Photon / iMessage @@ -283,6 +287,15 @@ Settings → Members and create an LLM-independent notice in the Captain's model policy, or Files world. Channel membership gates HTTP, files, terminals, messages, and WebSocket fan-out. +For privacy, support, or company questions, contact +[`build@1helm.com`](mailto:build@1helm.com). Sensitive vulnerability reports +belong in the repository's private GitHub security-advisory flow rather than +ordinary email. + +Notification sounds are personal. Settings → Notifications provides a global +mute for the signed-in account. Each channel's Settings view can mute only that +channel or select its ping sound; these choices do not affect other members. + ## Updates, removal, and recovery Signed Mac releases are unique patch versions. Profile → Check for updates diff --git a/package-lock.json b/package-lock.json index 4e55324..7971ff8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "1helm", - "version": "0.0.7", + "version": "0.0.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "1helm", - "version": "0.0.7", + "version": "0.0.8", "hasInstallScript": true, "dependencies": { "@gitcommit90/rerouted": "https://github.com/gitcommit90/rerouted/releases/download/v0.5.7/ReRouted-0.5.7-linux-node.tgz", diff --git a/package.json b/package.json index bfa053d..46aa18c 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,14 @@ { "name": "1helm", "productName": "1Helm", - "version": "0.0.7", + "version": "0.0.8", "private": true, "type": "module", "description": "1Helm is the self-hosted home for durable AI employees: one resident, one private computer, compounding memory and skills, and Skipper for every boundary.", + "author": { + "name": "Joseph Yaksich", + "email": "build@1helm.com" + }, "main": "desktop/main.cjs", "scripts": { "assets:brand": "node scripts/generate-brand-assets.cjs", diff --git a/public/index.html b/public/index.html index 82bb140..58a0e59 100644 --- a/public/index.html +++ b/public/index.html @@ -34,6 +34,6 @@
- +