Skip to content

v0.4.3

Choose a tag to compare

@github-actions github-actions released this 23 Sep 10:58
· 155 commits to main since this release

compare changes

⚠️ Upgrade notes

1. Three migrations run before the new image serves: 028, 029, 030.
managed+postgres: the Railway pre-deploy runs them; plain PostgreSQL: pnpm db:migrate:pg; Supabase pair: supabase db push. 028 and 030 replace functions in place with the same signatures; 029 adds payment_accounts.current_period_start and copies the current calendar month's usage counters to the billing-period key. Nothing is dropped, so rolling back the image alone is safe.

2. Plan quotas and the overage price changed (managed billing).
Per billing period: AI credits Starter 60, Pro 350; API credits Starter 30, Pro 140. Overage is $0.08 per credit. CDN bandwidth and media storage are now fixed limits with no overage. A workspace already above its new limit this period is stopped at the limit (429) from the deploy on, unless overage is on.

3. Polar operators: re-sync the catalogue in the same window.
Usage events are now ai_credits / api_credits (sum), no longer ai_messages / api_messages, and each plan's included credits are a meter-credit benefit. Dry run npx tsx --env-file=<env> scripts/polar-sync.ts --rotate-prices, then add --apply --server=production. Until the app and the catalogue are both on this release, AI and API usage is not billed.

4. R2: expire the _tmp/ prefix after 1 day.
Chat attachments wait under _tmp/ until a save moves them into the media library. Without a lifecycle rule the prefix only grows.

5. Use a separate NUXT_ANTHROPIC_API_KEY per environment so AI cost stays attributable to the environment that spent it.

✨ Highlights

  • Turns on your own Anthropic key (BYOA) no longer use the workspace's AI credits and are never billed; Usage lists them on their own line (#331)
  • Usage resets on your billing date instead of the 1st of the month (#277)
  • AI and API usage is counted in credits: a heavy turn costs more than one, capped per message at 30 on Starter and 60 on Pro and Enterprise (#274, #280)
  • CDN bandwidth and media storage are fixed limits; Usage marks them as such (#300)
  • The agent writes to the locale you are working in, and says which one (#301)
  • Behaviour change: asking the agent to delete an entry or change its status now applies to every locale unless you name one (#324)
  • Edits made at the same time merge instead of overwriting each other, vocabulary included (#304, #327, #333)
  • New: the agent can replace text inside a field without re-sending the whole field (#319)
  • New: a chat attachment you save into content moves into the media library, and chat attachments count toward storage (#323, #317)
  • The agent refuses to delete an entry other entries still reference, and resolves a linked site page to the entry it renders (#307, #316)
  • Saves say whether they created or updated, set the status in the same commit, merge object fields key by key, and save document batches together (#305, #310)
  • Brain queries filter, sort and paginate; Turkish requests are classified correctly and tool errors are reported (#308, #299, #306)
  • Projects open faster: the cached project renders at once, without the serial load waterfall or duplicate requests (#322, #329, #332)
  • CDN: a model that fails to build keeps its previous files, and a partial build is no longer reported as complete (#309, #318, #320)
  • MCP Cloud writes work again, and moving a project to another instance rewrites its media addresses in one commit (#302, #328)

🚀 Enhancements

  • agent: Replace text inside a field instead of re-sending it (#319)
  • media: Promote a chat attachment when a save puts it into content (#323)
  • media: Move media addresses to this instance in one commit (#321, #328)

🔥 Performance

  • project: Render the cached project at once and drop the serial load waterfall (#332)

🩹 Fixes

  • billing: Retire dead usage events instead of retrying them forever (#276)
  • billing: Close the MCP Cloud quota check-then-act race (#275)
  • billing: Bring AI credit unit economics to profit-policy floor (#274)
  • billing: Count usage in the billing period, not the calendar month (#277)
  • billing: Meter credits in the unit sold, and include the plan's allowance (#280)
  • chat: Correct Turkish intent classification, report tool errors, tighten prompt rules (#299)
  • billing: Stop selling overage on limits the meter cannot bill (#300)
  • agent: Write to the locale the user works in, and say which one (#301)
  • mcp: Stop forwarding the client's content-length to the loopback (#302)
  • api: Reject a non-uuid project id before it reaches the database (#303)
  • content: State create vs update on saves, and merge object fields key by key (#305)
  • agent: Lead every write validation error with one fixed label (#306)
  • content: Fork each write from the commit it read, so concurrent edits merge (#304)
  • agent: Refuse to delete an entry other entries still reference (#307)
  • chat: Filter, sort and paginate brain_query, fix entryId on documents and singletons (#308)
  • cdn: Don't build selectively onto a store that was never built whole (#309)
  • content: Set status in the save commit, report it, and batch document saves (#310)
  • agent: Resolve a linked site page to the entry it renders (#316)
  • media: Count chat media attachments against storage, find assets by path (#317)
  • cdn: Don't claim a complete store when a model failed to upload (#318)
  • cdn: Keep a failed model's previous artifacts through the sweep (#320)
  • brain: Make the content cache key small enough to send, and actually send it (#322)
  • agent: Default delete_content and update_status to every locale (#324)
  • brain: Show the cached project when the sync answers with an empty delta (#329)
  • billing: Keep BYOA turns out of the AI quota and the payment meter (#331)
  • vocabulary: Read and fork each attempt from one contentrain commit (#285, #333)

💅 Refactors

  • content: Pass the snapshot sha to applyPlan as its base (mcp 3.6.1) (#327)

❤️ Contributors

  • AHMET BAYHAN BAYRAMOGLU (@ABB65)