Commit Graph

  • 29823e87d5 Matrix mxid lookup: paginate Cloudron users API (25/page) — was missing page 2+ main inference-bot 2026-10-02 13:03:14 -06:00
  • f86ead8653 Matrix invite: honor 429 retry_after_ms (3 attempts) inference-bot 2026-10-02 12:29:41 -06:00
  • 07a1f2ad4e Fix Cloudron users API response shape ({users: [...]}) inference-bot 2026-10-02 12:28:39 -06:00
  • 82ada8c95b Matrix: invite all active members to co-op Space + General room on every sync (SSO usernames via Cloudron lookup; MATRIX_EXTRA_MXIDS for federated accounts) inference-bot 2026-10-02 12:27:45 -06:00
  • cddd9b6e3c Loomio username fix: allow hyphens in uids (was falling through to email local-part for inference-admin/bot) inference-bot 2026-10-02 08:41:03 -06:00
  • ef253d01a0 Loomio: fix auto-generated usernames after sync (b3 server API; prefer Cloudron uid, fall back to email local-part) inference-bot 2026-10-02 08:36:10 -06:00
  • 070c6525cd Broker usage: expose all_time_spend (member's lifetime total from SpendLogs) in both DB and HTTP paths inference-bot 2026-10-01 16:07:10 -06:00
  • 7af02f6466 Model aggregation: order by requests (usage) not spend — matches leaderboard bars and member-facing intent inference-bot 2026-10-01 15:56:53 -06:00
  • 19c04f37fa Fix days-filter in aggregate_model_usage: COALESCE(startTime,'') is invalid SQL (empty-string not a timestamp) — windowed queries always failed to empty inference-bot 2026-10-01 15:54:58 -06:00
  • 69beb9c002 Broker: co-op-wide model leaderboard endpoint for member dashboard (aggregate, anonymized) inference-bot 2026-10-01 15:35:57 -06:00
  • 778a7f8fd2 Rate-limit the key-injector proxy path (120/min) — only unthrottled sensitive route left inference-bot 2026-10-01 09:51:57 -06:00
  • 6f0c728513 Overview: expose all_time_spend per member + total_all_time_spend (SpendLogs aggregate) inference-bot 2026-09-30 22:22:17 -06:00
  • e00da486b5 Fix broker 403 for members beyond Cloudron's default 25-user page: paginate all /users reads (per_page=100) inference-bot 2026-09-30 07:46:03 -06:00
  • 64d3c6aa83 Broker: resolve uid- identities (OIDC sub) to email — email-invited users have no username inference-bot 2026-09-29 21:53:46 -06:00
  • b93b208659 Broker usage: expose allowance and credits buckets to dashboard inference-bot 2026-09-27 22:39:54 -06:00
  • b7d239d9b6 Reset dates follow real billing: webhook re-pins budget_reset_at on every Membership payment (+30d); DB write (API drops the field) inference-bot 2026-09-27 22:38:05 -06:00
  • 9b1d9edde4 Variable-amount credit pack: grant tip-free contribution amount via public OC order API inference-bot 2026-09-27 22:17:48 -06:00
  • 315247e5db Tier resolution via OC tiers API (TierId->face value+name, cached); credits at face value, not total-with-tip; remove debug payload log inference-bot 2026-09-27 22:14:56 -06:00
  • f163a5b375 Fix tier detection: OC webhook carries TierId only; parse tier name from order description inference-bot 2026-09-27 22:04:35 -06:00
  • a85369341c TEMP: log full OC webhook payload to diagnose tier field shape inference-bot 2026-09-27 21:58:25 -06:00
  • 8a320bfed7 Held credit packs: record non-member purchases, notify buyer, auto-grant on join, admin endpoints inference-bot 2026-09-27 21:54:34 -06:00
  • df740db283 Expose manual-member flag in admin overview (uses existing MANUAL_MEMBERS set) inference-bot 2026-09-27 21:18:43 -06:00
  • 5fa2449037 Membership tied to Membership tier: sweep+webhook filter, credit packs HELD for non-members, MANUAL_MEMBERS for legacy inference-bot 2026-09-27 21:17:03 -06:00
  • 63acea289f Non-expiring credits: two-bucket budget model, ledger, OC credit-pack webhook, admin endpoints inference-bot 2026-09-27 19:10:50 -06:00
  • 0c3c12999c Remove tracked bytecode; ignore __pycache__ inference-bot 2026-09-27 11:15:02 -06:00
  • 54fa4d3fc2 Filter audio models out of chat-facing /v1/models (visible to API users only) inference-bot 2026-09-27 11:00:53 -06:00
  • c7ed245939 Read usage aggregations from LiteLLM Postgres directly (HTTP fallback kept) inference-bot 2026-09-26 16:39:23 -06:00
  • 4600a69cac Fix dashboard 500s: raise httpx read timeout on /team/list + /spend/logs calls inference-bot 2026-09-26 16:21:11 -06:00
  • 2ff8193c55 Dashboard usage: prefer model_group alias (provider/model names) — fixes support #5 inference-bot 2026-09-26 16:14:33 -06:00
  • 5c269bf243 Support ?days=N filter on /admin/model-usage inference-bot 2026-09-26 16:09:38 -06:00
  • a48f11c654 Prefer model_group alias in model-usage aggregation inference-bot 2026-09-26 15:33:24 -06:00
  • 810b878014 Add /admin/model-usage endpoint (co-op per-model spend/tokens/requests) inference-bot 2026-09-26 15:31:07 -06:00
  • e92e29bac0 Commit key-purge migration DML (backfill fingerprint, purge plaintext idempotently) inference-bot 2026-09-24 08:02:39 -06:00
  • c213a489e9 API keys revealed once: store fingerprint (last-4) + hash, purge plaintext inference-bot 2026-09-24 08:00:02 -06:00
  • 6564508e1d Remove per-member model allowlist: members access all gateway models (empty models = all allowed) inference-bot 2026-09-23 20:10:23 -06:00
  • fd7442e1a4 Idempotent provisioning + auto re-invite of never-activated members inference-bot 2026-09-22 16:07:00 -06:00
  • 2625a6cc83 Add listmonk newsletter sync (subscribe on provision, unsubscribe on deactivate) inference-bot 2026-09-16 15:44:56 -06:00
  • ca3eeccc48 Add Reply-To: info@inference.coop on all outgoing email (sendmail pins From to portal.app@) inference-bot 2026-09-15 09:11:44 -06:00
  • 1312df4131 Add rate limiting (slowapi) to control-plane endpoints: admin, broker, webhook, /v1/models inference-bot 2026-09-14 20:58:13 -06:00
  • 505f3d9f48 Security cleanup: remove dead OPENCOLLECTIVE_SECRET + migrate-teams endpoint + unused helpers; default firstPayment=False inference-bot 2026-09-14 18:39:28 -06:00
  • 1a3c6027bd Migrate admin endpoints from token-in-URL to X-Admin-Token header inference-bot 2026-09-14 18:05:58 -06:00
  • fabd5a37ae Admin overview: add activated (inviteAccepted) field inference-bot 2026-09-14 17:00:54 -06:00
  • 8e4bf64199 Admin overview: include username (resolved from Cloudron user list) inference-bot 2026-09-14 16:53:34 -06:00
  • 9da67a9021 Add /admin/overview endpoint (member list + spend + co-op aggregates) inference-bot 2026-09-14 16:39:54 -06:00
  • 841eb70e4d Stream (don't buffer) the chat response so members see tokens immediately inference-bot 2026-09-14 15:15:58 -06:00
  • 87374dfeab Broker usage: add reset_at (credit renewal date) inference-bot 2026-09-14 14:28:16 -06:00
  • 0453cee019 Broker usage: add per-model token/spend breakdown + total_tokens + email inference-bot 2026-09-14 14:18:59 -06:00
  • 60d1bf2328 Fix injector ReadTimeout (600s read timeout); switch default model to deepseek-v4-1-flash inference-bot 2026-09-14 14:11:15 -06:00
  • 3024bfec74 Broker: resolve username->email via Cloudron user list (proxyAuth injects username, not email) inference-bot 2026-09-14 12:59:42 -06:00
  • a46c016817 Add /broker/usage (spend vs balance) + fix broker to use member balance inference-bot 2026-09-14 10:46:47 -06:00
  • 71d63955b3 Flexible balance: per-member balance (DB) synced to team budget; keys inherit team; add /admin/set-balance top-up endpoint inference-bot 2026-09-14 10:41:26 -06:00
  • b0c68c5dda Add broker: member-managed API keys (create/list/revoke) scoped to team, BROKER_SECRET-authenticated inference-bot 2026-09-14 09:43:38 -06:00
  • 2ac821087e Teams migration: per-member LiteLLM team + fresh sk- key (fixes hash-key bug breaking chat for 3 members) inference-bot 2026-09-14 09:14:26 -06:00
  • 8dfd666912 Add cloudron_update_profile helper; fill empty displayName on existing users during provisioning inference-bot 2026-09-13 15:45:01 -06:00
  • 473f1b2da8 Fix fetch_members GraphQL (email needs inline fragment); add fail-safe against empty-member-list deactivation inference-bot 2026-09-13 13:33:30 -06:00
  • 4f4ea79c3b Add MANUAL_MEMBERS allowlist: exempt founder-tier members from sweep deactivation inference-bot 2026-09-11 19:39:39 -06:00
  • 7971a36544 Add ToS/Privacy links to welcome email footer inference-bot 2026-09-11 17:45:48 -06:00
  • cc39f5ae79 Remove OAuth flow (join/oauth endpoints, pending_members, dead helpers); provision via webhook + own email inference-bot 2026-09-11 14:17:08 -06:00
  • eaeda98bac Provision on webhook (firstPayment) with own welcome email + invite_link; drop OAuth dependency inference-bot 2026-09-11 14:07:51 -06:00
  • 14e838a798 Style welcome email to match landing page (centered card, logo, green button) inference-bot 2026-09-11 13:52:21 -06:00
  • c1866df2a4 Add email notifications (sendmail) + membership sweep (scheduler): welcome email on webhook, reconcile endpoint, daily sweep inference-bot 2026-09-11 13:45:18 -06:00
  • 12d36b8244 Add /admin/provision endpoint; include glm-5-3-flash in member keys inference-bot 2026-09-10 11:53:45 -06:00
  • b87a057354 Gate membership on email (via admin personal token) instead of slug — fixes guest contributors inference-bot 2026-09-10 11:52:50 -06:00
  • f55008f46c Add guest-account guidance to /join and 'Not a member yet' pages inference-bot 2026-09-10 09:26:16 -06:00
  • 5d3ace8fe8 Fix Loomio sync: use portal DB (OC returns email:null); add manual sync endpoint inference-bot 2026-09-09 14:34:30 -06:00
  • 5490eeb2fc Annotate /v1/models with OpenWebUI web_search capability (default-on) inference-bot 2026-09-06 22:27:06 -06:00
  • 80ac982055 Support OpenWebUI: verify X-OpenWebUI-User-Jwt (HS256) or fall back to X-User-Email + portal secret inference-bot 2026-09-06 21:51:25 -06:00
  • 57991cd9f7 Add Loomio membership sync (reconcile group to active OC members via /api/b2/memberships) inference-bot 2026-09-06 14:24:53 -06:00
  • 5c28176d30 Gate on live OC membership list (authoritative) instead of fragile webhook pending table inference-bot 2026-09-05 22:48:58 -06:00
  • b58a975518 Gate OAuth on pending membership (payment check) + fix slug extraction for member.created events inference-bot 2026-09-05 22:45:35 -06:00
  • e291406b0b Implement deactivation: move lapsed members to 'inactive' group (keep data), map webhook slug→email inference-bot 2026-09-05 22:40:11 -06:00
  • 051f898667 Don't force a username — let Cloudron let the user choose it during setup inference-bot 2026-09-05 22:27:58 -06:00
  • 6257c89800 Make key creation idempotent (reuse existing key by alias) inference-bot 2026-09-05 22:24:43 -06:00
  • f3cc8e1d89 Run as root so the app can write SQLite to the root-owned /app/data volume inference-bot 2026-09-05 22:21:42 -06:00
  • ef467423ac Fix set-active endpoint (PUT /users/:id/active) + add invite email inference-bot 2026-09-05 22:19:58 -06:00
  • 808357215d Add OAuth 'connect your account' flow: /join page, /oauth/start, /oauth/callback (provisions member) inference-bot 2026-09-05 22:09:56 -06:00
  • ce7d9f3220 Harden portal: shared-secret auth for key injector + token-authenticated webhook URL inference-bot 2026-09-05 21:42:27 -06:00
  • d6605992bc Add /v1/models endpoint (no per-user auth) for LibreChat model discovery inference-bot 2026-09-04 17:33:01 -06:00
  • ee265ee18f Add SQLite store for email→key mapping; fix key/list (returns token strings); flat 5 budget inference-bot 2026-09-04 17:28:46 -06:00
  • c1efd39c5c Assign members to Cloudron 'members' group via PUT /users/:id/groups (verified endpoint) inference-bot 2026-09-04 17:16:18 -06:00
  • 7b84025e60 Verify integration points: OC webhook events (order.processed/new member), Cloudron user payload inference-bot 2026-09-04 17:10:41 -06:00
  • 451fb561bc Scaffold member portal: OC webhook + Cloudron user mgmt + LiteLLM key injection inference-bot 2026-09-04 17:06:27 -06:00