Skip to content

Releases: alrcatraz/astra-aigate

v0.6.1

Choose a tag to compare

@alrcatraz alrcatraz released this 22 Aug 15:25
v0.6.1

astra-aigate v0.6.1

Bug-fix release for the self-hosted PostgreSQL run mode.

Fixed

  • Async proxy guards never awaited — the DatabaseAdapter PreparedStatement .get()/.all() returns a Promise, but the three proxy guards (hasBlockingProxyAssignment, hasBlockingProxyAssignmentForProvider, isGlobalProxyEnabled) consumed the results without await. The result: Promise was truthy, so every DIRECT-only provider was rejected with PROXY_ASSIGNED_UNAVAILABLE even with zero proxy-assignment rows, and the provider-level guard inverted the fault, never failing closed. Guards are now async and await every read through getAsyncDb(). The PG-mode scratch .raw is guarded too, so 'no such table: domain_budgets' no longer escapes as an unhandledRejection and loadCostTotal degrades to 0 instead of throwing.

  • Postgres dialect mangled datetime('now') on ON CONFLICT DO UPDATE RHS — rewriteConflictAssignments qualified every bare identifier on the right-hand side, so datetime('now') got a table prefix and was mis-translated into to_timestamp('user_levels.now'), making Postgres fail every gamification upsert with 'schema "user_levels" does not exist'. The qualifier now skips function calls (identifier followed by paren) and quoted strings, so NOW()/datetime('now') survive intact while bare-column sliding counters (consumed = consumed + EXCLUDED.consumed) still get the required table qualification.

Chore

  • Version bump 0.6.0 -> 0.6.1 + CHANGELOG entry.

v0.6.0

Choose a tag to compare

@alrcatraz alrcatraz released this 14 Aug 15:12
v0.6.0
27ff3cc

What's new

Dual-currency billing (USD/CNY)

  • Cost accrue per provider's real billing currency; analytics summary now carries totalCostUsd / totalCostCny / costCurrency / fxRateUsdCny
  • USD/CNY toggle across cost dashboards (persisted to localStorage)

camofox gateway integration

  • Reverse-proxy duplex fix: streaming POST /api/svc/ no longer errors
  • camofox service hardened: bearer auth + required_scope=svc:camofox

Reliability

  • PG-safe key-permission transactions: scopes update now uses db.transaction() instead of SQLite-only BEGIN IMMEDIATE (fixes 'Failed to update permissions' under DB_DRIVER=postgres)
  • PostgresDialect translates BEGIN IMMEDIATE/EXCLUSIVE/DEFERRED → PG BEGIN

Full commits

  • 27ff3cc chore: release 0.6.0 — dual-currency billing + camofox gateway
  • 1cb96f2 fix(svc,db): camofox duplex proxy + PG-safe transactions for key permissions
  • 6203df7 test(usage): unit test coverage for dual-currency billing and cost-currency toggle
  • 89d0a0f feat(ui): USD/CNY cost toggle across cost dashboards
  • 34e4e5d feat(usage): dual-currency billing (USD/CNY) for cross-provider cost summary

v0.5.3

Choose a tag to compare

@alrcatraz alrcatraz released this 14 Aug 15:13
v0.5.3
e9129ad

Fixes

  • PG upserts qualify RHS columns; quota timestamps widened to bigint
  • DeepSeek quota fetcher bypasses 60s cache when forced
  • Combo-health: quote CTE aliases, point routing stats at usage_history
  • Cache health & circuit-breaker reads async-ified, health route hardened

Full commits

  • e9129ad chore(version): bump to 0.5.3
  • b1a55e8 fix(health): async-ify cache health and circuit-breaker reads, harden health route
  • 7a89a30 fix(health): quote CTE aliases in combo-health and point routing stats at usage_history
  • d89e855 fix(usage): thread force through deepseek quota fetcher to bypass 60s cache
  • e016607 fix(db): qualify RHS columns in PG upserts and widen quota timestamps to bigint

v0.5.2

Choose a tag to compare

@alrcatraz alrcatraz released this 11 Aug 12:16
45f8b61

Bug-fix release: on self-hosted PG deployments the provider-limits
(balance/quota) cache froze, sync 500'd, and the dashboard read an empty
map even though rows were present in Postgres. Also fixes a 503 admission
regression from tight heavy-request limits.

Fixed

  • Cloud-detection short-circuit: the probe (typeof globalThis.caches === "object") fired on every standalone server because Next 16 polyfills the
    Web Cache API, making balance/limit cache reads return empty and writes
    silently no-op. Cloud semantics now require the edge runtime
    (NEXT_RUNTIME=nodejs excluded) or explicit OMNIROUTE_CLOUD=true.
  • SiliconFlow balance guard: the /v1/user/info payload now reports a
    degenerate all-string-zero shape as unavailable instead of a genuine 0
    balance.
  • INSERT OR REPLACE upsert broke under webpack module duplication: the
    Postgres adapter (and its module-scoped pk-cache) is bundled into several
    chunks, each holding its own copy; a route served through a different chunk
    held a cold pk-cache and degraded to ON CONFLICT DO NOTHING, so
    already-cached connections never updated. Each adapter now warms its pk-cache
    lazily on first use and re-translates to a real ON CONFLICT (...) DO UPDATE.
  • Named-placeholder regression: the adapter rework dropped the SQL rewrite
    mapping named SQLite placeholders (@name/:name) to positional $N, so
    queries like is_active = @isActive hit Postgres with column "isactive" does not exist and provider-limits sync returned 500. buildBinder now
    returns both the positional SQL and the binder.
  • Read path surfaced an empty map: getSanitizedCachedProviderLimitsMap
    consumed await getAllProviderLimitsCache() synchronously (no await), so
    Object.keys(caches) ran against a Promise and the map degraded to {}
    even though rows were present in Postgres.
  • Admission lease TTL: the chat heavyweight admission lease is now
    force-released after a configurable TTL
    (OMNIROUTE_CHAT_HEAVY_LEASE_TTL_MS, default 10 min) as a defensive
    backstop against a stuck upstream SSE stream permanently occupying one of
    the heavy in-flight slots, which would otherwise push legitimate concurrent
    heavy traffic into retryable 503s (chat_admission_busy).

Full Changelog: v0.5.1...v0.5.2

v0.5.1

Choose a tag to compare

@alrcatraz alrcatraz released this 10 Aug 13:30
0279ea1

Context windows (cross-provider)

  • dmxapi deepseek-v4-flash-0731: resolve 1M context via model spec alias (API exposes no context metadata)
  • zhipu/zai GLM mappings now resolve context windows (glm-4.7-flash 200K, glm-4.6v 128K)

Chat admission (503 fix)

  • Heavy-request tool threshold 64 -> 400: normal coding traffic (~366 tools) no longer occupies the single heavy slot
  • Heavy in-flight capacity 1 -> 3: true heavy requests can run in parallel
  • Fixes intermittent HTTP 503 "Chat admission capacity is temporarily unavailable" on large/main combo requests

Combos

  • New model steps default weight 1 (weighted strategy selects them; DB rows backfilled)

Chore

  • Version bump 0.5.1; CHANGELOG updated

v0.5.0

Choose a tag to compare

@alrcatraz alrcatraz released this 09 Aug 14:26
3522f03

Skill Hub

  • Multi-source skill aggregation: git repos (tarball), SSH hosts, built-in catalogs
  • Source registration, discover/install, dependency-aware artifact packaging
  • Skill sources dashboard page + /api/skills sources/artifacts routes + DB migration 138
  • Sidebar order: LLM → Skill → MCP → services

Fixes

  • combos: manual/batch model additions default weight 1 (weighted strategy now selects them)
  • db: feature-flag sync awaited; PG bootstrap connectivity wait; schema regex fix

Docs

  • WebSocket troubleshooting runbook (docs/reference/WS_TROUBLESHOOTING.md)

Chore

  • Privacy scrub of internal host names/IPs; .gitignore db_backups/

v0.4.4

Choose a tag to compare

@alrcatraz alrcatraz released this 09 Aug 04:03
1d30958

v0.4.4 — PG 模式收敛 + 空对象修复

媒体提供商列表、combo 构建、WebSocket 绑定、权限同步的四类问题全数修复,并定位/修复媒体模型列表空对象的系统性根因。

Fixed

  • WS 绑定:绑定 0.0.0.0 时自动接受 loopback/LAN origin(Combo Studio「实时已禁用」修复)
  • 模型静默丢失(Systematic Async bug)getModelIsHidden 等 async 检查未 await,导致 provider 模型被静默 drop
  • 同型 async bug:key 权限/别名同步、combo builder、synced models 的 async 未 await 检查
  • 空对象根因(最关键)catalogResponse.tsenrichCatalogModelEntry(async)在 array.map 里未 await,被序列化成 {},导致 /v1/providers/{id}/modelsowned_by filter 得 0、媒体页 embedding 只显示一种。修复后 /v1/models 1361 模型 0 空对象,硅基流动 embedding 全显(含 bge-m3)
  • 媒体 UI 同步:provider detail/card 的 service-kind UI 与 media registries 对齐

Chore

  • 版本 bump 0.4.4
  • CHANGELOG 补 v0.4.4 正式发布记录

验证

  • PG 模式 /v1/models=1361 全非空、combo 48 个、WS 0.0.0.0:20132、searxng/camofox up
  • 双端推送(gitea + github)

v0.4.3

Choose a tag to compare

@alrcatraz alrcatraz released this 09 Aug 04:03
03b91bc

v0.4.3 — DMXAPI 发现 + combo 修复

Added

  • DMXAPI 全家族站点注册

Fixed

  • combo 构建:hidden/capability 查询未 await 导致 builder 在 PG 模式下列表模型失败
  • synced models 持久化的 async deleted-check 未 await
  • v1 chat 管线:conversation 完整性保持 + translator 同步 capability access
  • authz:/api/svc/* 经 PUBLIC 通道匿名服务
  • usage:credit-balance provider 的 remainingPercentage
  • gateway:合法响应头 + PG-safe COLLATE NOCASE
  • chat:同步 cache accessor、structuredClone 防非可克隆 Promise

Docs & Build

  • host-network 部署约束记录;opencode Free tier 走 no-auth 端点

v0.4.1

Choose a tag to compare

@alrcatraz alrcatraz released this 09 Aug 04:03
f01f904

v0.4.1 — v1 chat 管线修复

Fixed

  • v1 chat 管线:conversation 完整性保持 + translator 同步 capability access
  • registry:opencode Free tier 是 no-auth 端点
  • usage:credit-balance provider 的 remainingPercentage
  • chat:同步 cache accessor
  • chat:structuredClone 防非可克隆 Promise payload
  • gateway:合法响应头 + PG-safe COLLATE NOCASE

v0.4.0

Choose a tag to compare

@alrcatraz alrcatraz released this 09 Aug 04:03
c44d3c3

v0.4.0

Added / Changed

  • Phase 2.9:PostgreSQL 管理面 async 迁移完成
  • Phase 2:配额 UI + PostgreSQL 后端 + 构建/UI 修复

Fixed

  • PG 运行时 async 错误(is not iterable / .map is not function / PostgresAdapter.raw not available 等的系统性修复)