Releases: BuilderIO/agent-native
Releases · BuilderIO/agent-native
Clips Desktop v0.1.1
Auto-updating build of the Clips menu-bar app.
The in-app updater fetches its manifest from the clips-latest
release — this versioned release is the immutable source of the
signed bundles it downloads.
Clips Desktop v0.1.0
Auto-updating build of the Clips menu-bar app.
The in-app updater fetches its manifest from the clips-latest
release — this versioned release is the immutable source of the
signed bundles it downloads.
0.1.5
updates-122: clips desktop auto-updater + download page (#233) * updates-122: clips desktop auto-updater + download page + release workflow Initial drop from concurrent agents — auto-updater, download landing page, desktop release GitHub Actions workflow. * fix(clips): address all 6 Builder review blockers for auto-updater + download page 1. tauri.conf.json: updater endpoint points at the immutable /releases/download/clips-latest/clips-latest.json URL instead of /releases/latest/download/ which resolved to whichever GitHub tag happened to be marked "latest". 2. clips-desktop-release.yml: add a pre-build guard that fails the workflow if the updater pubkey is still the placeholder, preventing accidental release with a non-verifying signature. 3. download.tsx: when the manifest fetch fails or has no matching asset, the primary button now falls back to the public Releases PAGE (a browsable URL) instead of the JSON manifest itself. Button is explicitly disabled during the loading state. 4. download.tsx: Mac arch detection now uses navigator.userAgentData.architecture (Chromium: "arm" | "x86") as the canonical signal. Safari, which lacks userAgentData, still defaults to Apple Silicon since it's the overwhelming majority on currently-shipping Macs. 5. clips-latest.json.get.ts (new): same-origin server proxy for the updater manifest. GitHub release-asset responses don't include CORS headers, so a direct browser fetch fails silently. The download page now hits /api/clips-latest.json which server-side fetches GitHub and returns the JSON with correct headers. 6. UpdateBanner.tsx: surface the error state with a Retry button (wires to new retryUpdateCheck() export) and a Dismiss option. Signature-verification, download, and network failures no longer fail silently. * fix(clips): 5 follow-ups from Builder incremental review 1. UpdateBanner error-dismiss: scope dismissal to the specific error message so a new, different failure still surfaces. Previously dismissing one error silenced every subsequent error for the rest of the session. 2. styles.css: add missing `.update-banner--error` styling (red-tinted surface with 10% background + 40% border). 3. /api/clips-latest.json: add 10s AbortSignal.timeout on the upstream fetch so a slow GitHub can't hang the request indefinitely. Maps TimeoutError to a distinct 502 status message. 4. download.tsx fallback URL: point at /releases?q=clips-v (the versioned-release listing that actually holds installers) instead of the clips-latest tag page (manifest only, no DMG/MSI/AppImage). 5. download.tsx arch detection: use async userAgentData.getHighEntropyValues(["architecture"]). The sync property is an empty string until the high-entropy call resolves. Keeps a sync Apple-Silicon default, then corrects to Intel when Chromium confirms it. * fix(clips): download page now sources installers from releases API, not updater manifest Addresses 3 architectural issues from Builder's final review pass. Root cause: `/download` was parsing the Tauri updater manifest for installer URLs, but that manifest lists updater ARCHIVES (`.app.tar.gz`, `.msi.zip`, `.AppImage.tar.gz`) used for in-app patching — not the raw installers (.dmg / .msi / .exe) users want on first install. Every platform fell back to the Releases page. Fix: - Rewrite `/api/clips-latest.json` to hit GitHub's releases API, pick the most recent published `clips-v*` release, and return its asset list with each asset classified by kind (mac-universal / mac-arm64 / mac-x64 / windows-msi / windows-exe / linux-*). Explicitly skips .sig and updater-archive assets (`unknown` kind). - Rewrite `/download` to match by classified kind instead of filename regex. Collapses the two Mac variants into a single "macOS Universal (Apple Silicon + Intel)" card, since the workflow builds `universal-apple-darwin` which produces one DMG that runs on both. Drops the Linux variant — `tauri.conf.json` only lists `["dmg", "msi"]` bundle targets, so no AppImage is produced. - Drop the Ubuntu matrix job + Linux deps step from the release workflow to match: no AppImage bundle → no point building one. Arch-split detection (`refinePlatform`, `userAgentData`) is gone since macOS is now a single variant. * fix(clips): cache + paginate /api/clips-latest.json Two operability fixes on the GitHub-releases proxy from Builder's final review: - 5-minute process-wide memoization (+ request-coalescing via an in-flight promise) so a burst of hits to /download share one upstream fetch. GitHub's unauthenticated REST API is 60 req/hr/IP, so the naive every-request fetch would 429 under modest traffic. - Stale-while-error fallback — if GitHub errors out AND we have a prior successful payload, serve that instead of bubbling the error. Prevents a transient upstream hiccup from taking the download page offline. - HTTP `cache-control: max-age=60` stays on the response so downstream caches + the browser also cache aggressively. The client-side `fetch` drops its `cache: "no-cache"` which was bypassing both layers. - Paginate through `/releases` up to 10 pages (1000 releases) looking for the latest `clips-v*`. Previously capped at the first 50; as the repo accumulates other releases the `clips-v*` entry would eventually fall off page 1 and the endpoint would return a false 404. * fix(clips): scan all release pages + preserve upstream status codes Two follow-ups from Builder's review on d7a9502a: - findLatestClipsRelease no longer early-exits on first match. Walks every page (bounded by MAX_PAGES) and tracks the `published_at` maximum. Previously depended on GitHub's implicit created_at-desc sort, which can diverge from published_at (e.g. a draft published later than a later-created draft). Same worst-case page count, no ordering assumption. - Introduce UpstreamError carrying the GitHub HTTP status. fetchPage throws that on non-OK responses; the route handler now propagates the original status (429 stays 429, 503 stays 503) instead of flattening everything to 502. Rate limits + service-unavailable failures now show up correctly to monitors.
0.1.4
v0.1.4 chore(desktop-app): bump version to 0.1.4 (#197)
0.1.3
fix: move Google auth route files to /_agent-native/ path (#134) * fix: move Google auth route files to /_agent-native/google/ path File-based routes were still at server/routes/api/google/ while all client references pointed to /_agent-native/google/*, causing 404s on Google OAuth callback and auth-url. Moved route files across all 8 templates. Updated dev-api-server and deploy route discovery to also scan server/routes/_agent-native/ for file-based routes. * feat: agent chat improvements from concurrent work * feat: agent panel and mention UI improvements * fix: A2A streaming fallback handles zero-yield and partial-stream cases When streaming yields 0 chunks (silent HTTP 200 with no data lines), the send() fallback now runs unconditionally after the loop, not just in the catch block. Partial streams that error mid-response now append an interruption note rather than silently swallowing the error. * fix(mail): add exponential backoff for Gmail 429s and batch message fetches googleFetch() now retries on 429/503 with exponential backoff (1s, 2s, 4s). listGmailMessages() fetches messages in batches of 5 instead of all at once to avoid hitting Gmail's concurrent request limit. * feat: agent chat, A2A client, and UI refinements * fix(issues): remove noisy view-screen console output The view-screen script had a broken import (output from helpers.js doesn't exist), causing it to throw and fall through to a catch block that dumped the full JSON to console.log on every call. Simplified to just output the result directly. * feat: production agent and agent-chat plugin refinements * fix: gate A2A handler console.log behind DEBUG_A2A * fix(ci): revert publish.yml to npm@latest, bump core to 0.4.9 Reverts the npm@10 pin that broke OIDC provenance publishing. * fix(ci): remove npm@latest install step that breaks on new runner images GitHub updated their runner to Node 22.22.2 where npm install -g npm@latest crashes with MODULE_NOT_FOUND for promise-retry. The bundled npm 10.x already supports OIDC provenance publishing. Also includes process.exit interception for agent chat scripts. * fix: closeAllTabs activates new thread, clean up newThreadIds on tab close * feat: auto-publish on version bump, simplify publish workflow, bump core to 0.5.0 - Add auto-publish.yml: triggers on push to main when package.json versions change, publishes core to npm and desktop app to GitHub - Simplify publish.yml: remove version bump inputs/steps, keep as manual publish escape hatch - Replace process.exit() with throw in scripts so they work safely both as CLI and in-server agent tools * refactor: update action scripts across templates * feat: end-to-end A2A streaming + process.exit cleanup - A2A handler uses client.messages.stream() + AsyncGenerator to yield text chunks - Caller uses A2AClient.stream() and emits agent_call_text SSE events progressively - Frontend already wired: shows streaming text in expandable panel under "Asking Agent..." - Falls back to blocking callAgent() if streaming fails - Removed process.exit interceptor hack: fail() now throws instead of process.exit(1) - Fixed process.exit in all 32 template scripts across all templates * fix: gate A2A debug logs behind DEBUG_A2A and fix fatal() double-noise - A2A console.log calls now only run when DEBUG_A2A env var is set, preventing user message content from leaking to production logs - fatal() in mail and recruiting helpers now throws Error(message) directly instead of console.error + generic "Script failed" throw, which caused duplicate noise in agent tool results * feat: auto-expand agent call panel with auto-scroll during streaming * chore: terminal PTY improvements + analytics page fixes
0.1.2
fix: move Google auth route files to /_agent-native/ path (#134) * fix: move Google auth route files to /_agent-native/google/ path File-based routes were still at server/routes/api/google/ while all client references pointed to /_agent-native/google/*, causing 404s on Google OAuth callback and auth-url. Moved route files across all 8 templates. Updated dev-api-server and deploy route discovery to also scan server/routes/_agent-native/ for file-based routes. * feat: agent chat improvements from concurrent work * feat: agent panel and mention UI improvements * fix: A2A streaming fallback handles zero-yield and partial-stream cases When streaming yields 0 chunks (silent HTTP 200 with no data lines), the send() fallback now runs unconditionally after the loop, not just in the catch block. Partial streams that error mid-response now append an interruption note rather than silently swallowing the error. * fix(mail): add exponential backoff for Gmail 429s and batch message fetches googleFetch() now retries on 429/503 with exponential backoff (1s, 2s, 4s). listGmailMessages() fetches messages in batches of 5 instead of all at once to avoid hitting Gmail's concurrent request limit. * feat: agent chat, A2A client, and UI refinements * fix(issues): remove noisy view-screen console output The view-screen script had a broken import (output from helpers.js doesn't exist), causing it to throw and fall through to a catch block that dumped the full JSON to console.log on every call. Simplified to just output the result directly. * feat: production agent and agent-chat plugin refinements * fix: gate A2A handler console.log behind DEBUG_A2A * fix(ci): revert publish.yml to npm@latest, bump core to 0.4.9 Reverts the npm@10 pin that broke OIDC provenance publishing. * fix(ci): remove npm@latest install step that breaks on new runner images GitHub updated their runner to Node 22.22.2 where npm install -g npm@latest crashes with MODULE_NOT_FOUND for promise-retry. The bundled npm 10.x already supports OIDC provenance publishing. Also includes process.exit interception for agent chat scripts. * fix: closeAllTabs activates new thread, clean up newThreadIds on tab close * feat: auto-publish on version bump, simplify publish workflow, bump core to 0.5.0 - Add auto-publish.yml: triggers on push to main when package.json versions change, publishes core to npm and desktop app to GitHub - Simplify publish.yml: remove version bump inputs/steps, keep as manual publish escape hatch - Replace process.exit() with throw in scripts so they work safely both as CLI and in-server agent tools * refactor: update action scripts across templates * feat: end-to-end A2A streaming + process.exit cleanup - A2A handler uses client.messages.stream() + AsyncGenerator to yield text chunks - Caller uses A2AClient.stream() and emits agent_call_text SSE events progressively - Frontend already wired: shows streaming text in expandable panel under "Asking Agent..." - Falls back to blocking callAgent() if streaming fails - Removed process.exit interceptor hack: fail() now throws instead of process.exit(1) - Fixed process.exit in all 32 template scripts across all templates * fix: gate A2A debug logs behind DEBUG_A2A and fix fatal() double-noise - A2A console.log calls now only run when DEBUG_A2A env var is set, preventing user message content from leaking to production logs - fatal() in mail and recruiting helpers now throws Error(message) directly instead of console.error + generic "Script failed" throw, which caused duplicate noise in agent tool results * feat: auto-expand agent call panel with auto-scroll during streaming * chore: terminal PTY improvements + analytics page fixes
0.1.1
v0.1.1 chore: bump @agent-native/core to v0.4.5