Commit Graph

1484 Commits

Author SHA1 Message Date
diegosouzapw
bff01d6fe3 feat(i18n): deep-merge EN fallback to fill missing locale keys (B/G1)
Export deepMergeFallback and apply it in getRequestConfig so all 39
non-EN locales receive EN text for any key absent in their JSON file.
Locale-specific translations always win; EN fills gaps only.
2026-05-28 12:13:59 -03:00
diegosouzapw
5b56704538 fix(quota): audit-discovered stale eslint-disable in planResolver + sidebar-costs-section test drift (B/F10) 2026-05-28 10:42:12 -03:00
diegosouzapw
b414df62d5 merge: F9 UI quota-share refactor (DB-backed + Plans page + sidebar + i18n) 2026-05-28 08:29:31 -03:00
diegosouzapw
c21bfd5a36 chore(i18n): extend quotaShare + add quotaPlans namespace (pt-BR + en) (B/F9) 2026-05-28 08:25:00 -03:00
diegosouzapw
4cb50a733e feat(sidebar): add costs-quota-plans item to Costs section (B/F9) 2026-05-28 08:24:54 -03:00
diegosouzapw
bd2cf82e0a feat(quota-plans): add /dashboard/costs/quota-share/plans page (B/F9) 2026-05-28 08:24:49 -03:00
diegosouzapw
c7ee32186c refactor(quota-share): move pools from localStorage to /api/quota/pools (B/F9) 2026-05-28 08:24:44 -03:00
diegosouzapw
ec876883b2 feat(quota-share): add hooks (usePools + usePoolUsage + useLocalStoragePoolMigration) (B/F9) 2026-05-28 08:24:38 -03:00
diegosouzapw
160f0693f3 feat(quota-share): extract PoolCard + DimensionBar + AllocationTable + BurnRateChart + ConceptCard + Modals (B/F9) 2026-05-28 08:24:32 -03:00
diegosouzapw
0107beb86b feat(api): add /api/settings/quota-store driver settings route (B/F8) 2026-05-28 07:49:55 -03:00
diegosouzapw
1e652869d7 feat(api): add /api/quota/preview dry-run route (B/F8) 2026-05-28 07:49:47 -03:00
diegosouzapw
043f3c412b feat(api): add /api/quota/plans CRUD routes (B/F8) 2026-05-28 07:49:38 -03:00
diegosouzapw
9dfea1e7ad feat(api): add /api/quota/pools CRUD + usage routes (B/F8) 2026-05-28 07:49:30 -03:00
diegosouzapw
f211fcf509 merge: F7 enforce wiring (chatCore PRE/POST + combo soft penalty + spendRecorder) 2026-05-27 22:23:33 -03:00
diegosouzapw
c04aec0550 merge: F5 ComplianceTab actor filter + CompressionLogTab namespace fix 2026-05-27 22:23:31 -03:00
diegosouzapw
0181348cee feat(quota): add spendRecorder fire-and-forget wrapper (B/F7)
scheduleRecordConsumption() wraps recordConsumption() in setImmediate so it
never adds latency to the client response path. Errors are caught and logged
via pino warn but NEVER propagated to the caller (B29 fail-open contract).
2026-05-27 22:17:16 -03:00
diegosouzapw
d80e1b63eb feat(quota): add enforce.ts (enforceQuotaShare + recordConsumption) (B/F7)
Implements the quota share enforcement gate and consumption recorder:
- enforceQuotaShare(): PRE-request check that returns allow/block/deprioritize
  based on fair-share algorithm, saturation signals, and pool allocations.
- recordConsumption(): POST-response tracker that increments per-key counters
  for each active plan dimension.
Both functions fail-open per B16/B29: any infra error → allow + warn log.
2026-05-27 22:17:10 -03:00
diegosouzapw
1b0f22fbf8 chore(i18n): pt-BR + en compliance.actor + copy compression keys to logs ns (B/F5)
- compliance.actor / compliance.actorPlaceholder added to pt-BR + en
- logs.compressionLogTitle, logs.compressionLogEmpty, logs.tokens copied
  from settings to logs namespace in both locales (original keys kept in
  settings to avoid breaking other components)
2026-05-27 22:06:52 -03:00
diegosouzapw
bec422726b fix(logs): correct CompressionLogTab i18n namespace settings->logs (B/F5)
The component was calling useTranslations("settings") which would cause
key misses once the settings namespace is reorganized. Keys used
(loading, compressionLogTitle, compressionLogEmpty, tokens) are now
sourced from the canonical "logs" namespace.
2026-05-27 22:06:45 -03:00
diegosouzapw
a4200186e2 feat(audit): add actor filter to ComplianceTab (B/F5)
Adds state, fetch param, reset and input+datalist for filtering audit
entries by actor. The actor field is inserted between eventType and
severity in the filter grid. Filter value is sent as ?actor= to the
compliance audit-log API on every change.
2026-05-27 22:06:39 -03:00
diegosouzapw
2cf40cafcc chore(i18n): pt-BR + en activity namespace (eventVerb + filters + relative) (B/F4) 2026-05-27 22:01:16 -03:00
diegosouzapw
ec3aa40aae chore(logs): delete deprecated AuditLogTab.tsx duplicate (B/F4) 2026-05-27 22:01:10 -03:00
diegosouzapw
e75bad3cbf refactor(logs): redirect /dashboard/logs/activity to /dashboard/activity (B/F4) 2026-05-27 22:01:06 -03:00
diegosouzapw
319f52b988 feat(activity): add /dashboard/activity timeline page + ActivityFeed (B/F4) 2026-05-27 22:01:01 -03:00
diegosouzapw
6a19882646 feat(compliance): support level=high filter in audit-log API (B/F4) 2026-05-27 22:00:56 -03:00
diegosouzapw
fb54bcd994 feat(audit): add timeline helpers (groupByDay + relativeTime) (B/F4) 2026-05-27 22:00:51 -03:00
diegosouzapw
b9e5d940a4 merge: F6 QuotaStore core (sqlite + redis drivers + fairShare + planResolver + burnRate + saturation) 2026-05-27 21:14:01 -03:00
diegosouzapw
4d825ad482 feat(quota): add saturationSignals reader with 30s cache and fail-open (B/F6) 2026-05-27 20:38:41 -03:00
diegosouzapw
23f5b6f8b8 feat(quota): add planResolver (DB override > known catalog > empty) (B/F6) 2026-05-27 20:38:33 -03:00
diegosouzapw
c3c0817c3b feat(quota): add burnRate EMA estimator and time-to-exhaustion (B/F6) 2026-05-27 20:38:25 -03:00
diegosouzapw
9905d92244 feat(quota): add fairShare work-conserving algorithm (multi-dimension, generous/strict modes, cap-absolute) (B/F6) 2026-05-27 20:38:18 -03:00
diegosouzapw
67548034be feat(quota): add storeFactory with setting/env-driven driver selection (B/F6) 2026-05-27 20:38:11 -03:00
diegosouzapw
4bb44b10d3 feat(quota): add redisQuotaStore (optional driver, gated by ioredis availability) (B/F6) 2026-05-27 20:38:02 -03:00
diegosouzapw
ca85652bab feat(quota): add sqliteQuotaStore with sliding window counter and per-key mutex (B/F6) 2026-05-27 20:37:51 -03:00
diegosouzapw
8a10b3ecd8 feat(quota): add QuotaStore facade and types re-export (B/F6) 2026-05-27 20:37:44 -03:00
diegosouzapw
c0db545811 chore(i18n): pt-BR + en keys for activity, costsSection, logsGroup, systemGroup, costsOverview (B/F3)
Add new sidebar i18n keys without removing existing ones (back-compat B11/B12):
- sidebar.activity / sidebar.activitySubtitle
- sidebar.logsGroup
- sidebar.systemGroup
- sidebar.costsOverview / sidebar.costsOverviewSubtitle
Existing sidebar.costs, sidebar.costsSection, sidebar.costsSubtitle preserved.
2026-05-27 19:51:40 -03:00
diegosouzapw
e98ba91928 refactor(sidebar): split Monitoring into Logs/Audit/System groups + Activity at top (B/F3)
- MONITORING_ITEMS reduced to single `activity` item at `/dashboard/activity`
- New LOGS_GROUP (logs/logs-proxy/logs-console) extracted from flat monitoring items
- New SYSTEM_GROUP (health/runtime) extracted from flat monitoring items
- AUDIT_GROUP preserved unchanged
- Monitoring section children: [...MONITORING_ITEMS, LOGS_GROUP, AUDIT_GROUP, SYSTEM_GROUP]
- COSTS_PARAMS_GROUP removed from monitoring section (items migrate to COSTS_ITEMS)
- `activity` added to HIDEABLE_SIDEBAR_ITEM_IDS; `logs-activity` preserved for back-compat (B11)
- Updated existing sidebar-visibility.test.ts to match new monitoring item structure
2026-05-27 19:51:30 -03:00
diegosouzapw
3c50ebce8f merge: F2 DB migrations + modules (pools, consumption, plans) 2026-05-27 19:25:12 -03:00
diegosouzapw
44e49f635b chore(db): re-export quota modules in localDb (B/F2)
Adds re-export blocks for quotaPools (7 functions), quotaConsumption
(4 functions with gcQuotaConsumption alias), and providerPlans (4
functions with getProviderPlan/listProviderPlans/etc. aliases).
Zero logic added to localDb.ts — Hard Rule #2 maintained.
2026-05-27 19:14:38 -03:00
diegosouzapw
1721cf7b32 feat(db): add providerPlans module with CRUD for per-connection quota plans (B/F2)
Implements getPlan, listPlans, upsertPlan (idempotent ON CONFLICT DO
UPDATE), and deletePlan. Serializes QuotaDimension[] as JSON into
dimensions_json column and parses back on read. Malformed JSON returns
empty dimensions rather than throwing.
2026-05-27 19:14:32 -03:00
diegosouzapw
83790b6c6a feat(db): add quotaConsumption sliding-window counter storage (B/F2)
Implements getBucket, incrementBucket (atomic UPSERT), getPair (curr+prev
for sliding window formula), and gcOlderThan (stale bucket cleanup).
Atomic increment uses INSERT ... ON CONFLICT DO UPDATE — no separate
read-modify-write cycle needed.
2026-05-27 19:14:27 -03:00
diegosouzapw
07d6a17643 feat(db): add quotaPools module with CRUD and allocation management (B/F2)
Implements listPools, getPool, createPool, updatePool, deletePool,
upsertAllocations (replace strategy via transaction), and
listAllocationsForApiKey. All SQL uses prepared statements. Local type
shapes aligned with src/lib/quota/dimensions.ts contract (B13).
2026-05-27 19:14:21 -03:00
diegosouzapw
4f149fb5a3 feat(db): add quota_pools and quota_consumption migrations (B/F2)
Creates migrations 073 (quota_pools + quota_allocations) and 074
(quota_consumption sliding-window counter). Both are idempotent via
CREATE TABLE IF NOT EXISTS and CREATE INDEX IF NOT EXISTS. FK ON DELETE
CASCADE from quota_allocations to quota_pools. Fixes B2 IDs.
2026-05-27 19:14:15 -03:00
diegosouzapw
7a5166621d feat(quota): add provider plan registry with known plans 2026-05-27 19:05:02 -03:00
diegosouzapw
93091fbb0a feat(audit): add high-level actions allowlist and activity icons map 2026-05-27 19:04:59 -03:00
diegosouzapw
70b9cc7831 feat(quota): add canonical dimensions, types and Zod schemas 2026-05-27 19:04:55 -03:00
JeferssonLemes
52a43d65d3 feat(modelSpecs): align opencode-go family with upstream provider limits (#2802)
Integrated into release/v3.8.6
2026-05-27 17:06:32 -03:00
Apostol Apostolov
87fad5d171 [codex] home: restore settings-driven home layout and quota auto-refresh (#2800)
Integrated into release/v3.8.6
2026-05-27 17:05:18 -03:00
Apostol Apostolov
f1e4c001a9 feat(logs): add clean history button (#2799)
Integrated into release/v3.8.6
2026-05-27 17:04:49 -03:00
akarray
83445a96b8 fix(oauth): repair Google loopback callback flow (#2796)
Integrated into release/v3.8.6
2026-05-27 17:04:31 -03:00