Skip to content

Releases: BuilderIO/agent-native

Clips Desktop v0.1.1

23 Apr 17:59
e9f6f5f

Choose a tag to compare

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

22 Apr 17:23
2dee8e1

Choose a tag to compare

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

20 Apr 16:27
bc15f39

Choose a tag to compare

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

14 Apr 01:17
faaa8d1

Choose a tag to compare

v0.1.4

chore(desktop-app): bump version to 0.1.4 (#197)

0.1.3

03 Apr 20:04
33a6dd0

Choose a tag to compare

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

03 Apr 19:23
33a6dd0

Choose a tag to compare

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

24 Mar 18:07

Choose a tag to compare

v0.1.1

chore: bump @agent-native/core to v0.4.5