🎉 Anna 1.1.0-beta.97 → beta.122 — Async Tool Jobs, Doc Parsing, BYOK, App Analytics & Revenue Share Is Here!

Hey Anna app developers! :waving_hand:

Another massive stretch — 25+ releases since beta.96, and this one is special: your apps can now run hours-long tools, parse office documents natively, get real usage analytics, and — drumroll :drum: — earn real money. Here’s everything that matters for your apps, in one friendly digest. Let’s dive in! :rocket:


:sparkles: New Host APIs & SDK Goodies

  • :hourglass_not_done: Async Tool Jobs — long-running tools, done right (beta.108–112) — The 90-second wall is gone! New host RPCs tools.invokeAsync / getJob / cancelJob / listJobs let a tool run from 60s up to 24 hours, with no long-hanging HTTP anywhere. The SDK (@anna-ai/app-runtime 0.15.0) ships a high-level anna.tools.invokeAsyncAwait(args, { onProgress, signal, timeoutMs }) — real-time tool_job progress events, AbortSignal-powered cancellation, and automatic recovery after page reload. Plugins report progress via emit_progress, and per-invoke tokens auto-renew for the life of the job. The local dev harness (anna-app-runtime-local 0.2.0a20) mirrors the full job lifecycle in-process, so you can build it all offline. :bullseye:
  • :page_facing_up: doc_read & sheet_read platform tools (beta.116, forum #207) — Native server-side parsing for xlsx / xls / docx / pptx / pdf! Explicit pagination (truncated.next_call is copy-paste ready), typed spreadsheet cells, zip-bomb guards, and flat compute-unit pricing. Available in agent sessions and the main chat — your apps can finally read the attachments users throw at them. :bar_chart:
  • :key: BYOK — users bring their own LLM keys (beta.116) — Users can register their own OpenAI-compatible providers and models (byok: namespace). BYOK calls cost zero Energy. A privacy-first policy switch controls whether third-party apps may use the user’s keys — off by default, and when off, BYOK models are completely invisible to your app’s sampling. Everything just works through the same llm.complete / llm.stream you already use. :green_heart:
  • :toolbox: Full platform tool kit in sandbox sessions (beta.115, forum #192) — The agent session registry grew from a handful to 23 platform tools: the whole fs family (10), exec (2), browser core (9+), plus web_search. Every one is individually grantable via allowed_tools — “read files but never write” is finally expressible. :hammer_and_wrench:
  • :memo: System prompt limit: 4,000 → 32,000 chars (beta.113, forum #116/#203) — agent.session system prompts got 8× the room, on both session create and per-run overrides. Bring your big personas!
  • :floppy_disk: anna.files.download + iframe downloads (beta.97, forum #175) — Apps can now trigger real save dialogs! Host-mediated downloads force Content-Disposition: attachment with UTF-8 filenames, and the short-lived URL never enters your iframe’s DOM. Declare "download" in manifest.ui.host_api.files. :down_arrow:
  • :globe_with_meridians: anna-app dev --web real (beta.103, forum #189) — Test anna.web.* against the real platform search chain (Tavily provider registry, caching, real CU billing) from your local harness. Also fixed: the local ddgs fallback now ships as a proper dependency, so the web-search demo works out of the box.

:chart_increasing: Your Apps Are a Business Now

  • :money_bag: Revenue Share & Payouts (beta.120–121) — This is the big one: 70% of eligible usage profit goes to you. Daily earnings roll up automatically (T+1), an append-only ledger keeps every cent traceable, and daily reconciliation cross-checks everything. The developer console gets a new Earnings view: balance, monthly statements, payout requests (from $50), and encrypted payout profiles. Build great apps → get paid. :handshake:
  • :bar_chart: App Analytics dashboard (beta.117) — New Analytics tab in the developer console: DAU time series, rolling WAU/MAU, token & cost aggregates per app — with a clean GET /developer/apps/{app_id}/stats API. Aggregates only, never user-level data. See how your app is actually doing! :chart_decreasing::right_arrow::chart_increasing:
  • :globe_showing_europe_africa: Public App Store & share links (beta.118–119) — Every published app now has a public, SEO-friendly landing page at /store/@handle/slug — OG/Twitter cards, JSON-LD, sitemap, no login required to browse. Share buttons everywhere, ?action=install login-wall flow that auto-resumes install after sign-in, ?ref= channel attribution so you know where installs come from, and open_app deep links straight into a running app. Your app is now one link away from anyone. :link:
  • :judge: App reviewer channel (beta.122) — Designated reviewers can now install and run apps in PENDING_REVIEW via a dedicated review queue — faster, smoother reviews for everyone’s submissions. :white_check_mark:
  • :ladder: Starter tier (beta.98) — New $7.99/mo plan (3,000 Anna Energy) fills the Free→Pro gap. Same model catalog as Pro — a bigger addressable audience for your apps!

:package: Publishing & Distribution

  • :ice: Content-addressed bundle storage + 1 GiB limit (beta.105, forum #195) — UI bundles are now deduplicated by sha256: republishing only uploads changed bytes, apps cut is zero-copy, and limits jumped to 1 GiB total / 50 MiB per file. Plus an official guide for hosting truly large static assets.
  • :label: Same-version republish is truly idempotent (beta.99 + beta.106, forum #185/#198) — Two rounds of hardening: registry-distributed Executas now include package@version in the content hash (version bumps always freeze a new version — no more silent no-ops), and platform-side manifest cache rewrites no longer cause phantom 409s when you only changed your app frontend. When a 409 is real, it now lists exactly which fields changed. :magnifying_glass_tilted_left:
  • :counterclockwise_arrows_button: App Update actually upgrades bundled Executas (beta.103, forum #187) — Version drift between what’s deployed and what’s desired is now detected and reconciled in the same pass. Clicking “Update” does what it says.

:cloud: Cloud Agent & Runtime Reliability

  • :flexed_biceps: Cloud Agents upgraded to 2 CPU / 2 GB (beta.107, forum #199) — Chrome/Puppeteer-based Executas no longer get OOM-killed mid-render. Also: tools.invoke timeout is now 90s (aligned with what the network edge can actually deliver — use async jobs for anything longer!), gateway HTML error pages are converted to structured retriable RPC errors instead of Unexpected token '<', and host-side cancellation now kills the entire plugin process group — no more zombie Chrome.
  • :file_cabinet: Persistent storage, documented + 90-day retention (beta.114, forum #194) — $ANNA_WORKSPACE_DIR is your Executa’s persistent workspace contract, with a full lifecycle guarantee table in the new executa-cloud-storage reference chapter. Idle-agent reap window extended from 72 hours to 90 days. Your users’ data sticks around.
  • :alarm_clock: Active agents never get mis-suspended (beta.102, forum #190) — Hot paths (tools.invoke, default-agent resolution) now refresh the activity clock, so an agent in continuous use can’t hit the idle-suspend timer mid-task.
  • :person_running: Agent runs: no more “empty success” (beta.103, forum #191) — Runs that produce no output are now properly failed with a retriable empty_completion error, agent.session.cancel actually cancels (including queued runs), session delete cascades cancellation, and execution leases prevent long tasks from double-running. Plus a per-user concurrent-run limit returns a clean, retryable 429 instead of melting the worker pool.

:bug: Notable Bug Fixes

  • :adhesive_bandage: anna-app dev sandbox sessions had zero tools (beta.115, forum #192) — inherit_host_tools: false was silently dropped and the dev grant’s tool intersection was always empty. Both fixed — dev sandbox sessions now behave like production.
  • :locked_with_key: Concurrent host/uploadFile ownership race (beta.103, forum #188) — Upload confirmation is now strictly bound to the uploading user’s identity.
  • :shield: Google OAuth verification unblocked (beta.116, forum #206) — Removed a restricted scope from the credentials provider registry; existing stored scopes cleaned up by migration.
  • :globe_with_meridians: doc_read SSRF guard false positives — Platform-owned storage domains are whitelisted before DNS checks, fixing failures under fake-ip / split-horizon DNS setups.

:puzzle_piece: Compatibility Notes

  • :green_circle: Everything is additive — existing apps keep working unchanged; unknown methods return -32601 and degrade gracefully.
  • :pushpin: Current pin matrix: dispatcher_version 0.19.0 · anna-app-schema 0.19.0 · anna-app-core 0.18.0 · @anna-ai/app-runtime 0.15.0 · anna-app-runtime-local 0.2.0a20 · @anna-ai/cli 0.1.45.
  • :up_arrow: To use the new goodies (tools.invokeAsyncAwait, doc_read/sheet_read, files.download, analytics, earnings): update @anna-ai/cli to 0.1.45 and @anna-ai/app-runtime to 0.15.0, then declare the new capabilities in your manifest.
  • :warning: One behavior change to note: tools.invoke is now capped at 90s (previously 180s, which the network edge couldn’t deliver anyway). If your tool runs longer, switch to tools.invokeAsync — it’s built exactly for that. :flexed_biceps:

:open_mailbox_with_raised_flag: Feedback Welcome!

Shipped a long-running tool with async jobs? Watching your first earnings roll in? Built something cool with doc_read? We’d love to hear about it — drop your questions, feedback, or showcase posts below. Happy building! :purple_heart::sparkles: