mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-02-03 21:03:08 +00:00
fix: address PR review comments
- Add error logging to CodexProvider auth check instead of silent failure - Fix cachedAt timestamp to return actual cache time instead of request time - Replace misleading hardcoded rate limit values (100) with sentinel value (-1) - Fix unused parameter warning in codex routes Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,6 +21,7 @@ import {
|
|||||||
extractTextFromContent,
|
extractTextFromContent,
|
||||||
classifyError,
|
classifyError,
|
||||||
getUserFriendlyErrorMessage,
|
getUserFriendlyErrorMessage,
|
||||||
|
createLogger,
|
||||||
} from '@automaker/utils';
|
} from '@automaker/utils';
|
||||||
import type {
|
import type {
|
||||||
ExecuteOptions,
|
ExecuteOptions,
|
||||||
@@ -658,6 +659,8 @@ async function loadCodexInstructions(cwd: string, enabled: boolean): Promise<str
|
|||||||
.join('\n\n');
|
.join('\n\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const logger = createLogger('CodexProvider');
|
||||||
|
|
||||||
export class CodexProvider extends BaseProvider {
|
export class CodexProvider extends BaseProvider {
|
||||||
getName(): string {
|
getName(): string {
|
||||||
return 'codex';
|
return 'codex';
|
||||||
@@ -1045,7 +1048,7 @@ export class CodexProvider extends BaseProvider {
|
|||||||
return { authenticated: true, method: 'oauth' };
|
return { authenticated: true, method: 'oauth' };
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Silent fail
|
logger.warn('Error running login status command during auth check:', error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export function createCodexRoutes(
|
|||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
// Get current usage (attempts to fetch from Codex CLI)
|
// Get current usage (attempts to fetch from Codex CLI)
|
||||||
router.get('/usage', async (req: Request, res: Response) => {
|
router.get('/usage', async (_req: Request, res: Response) => {
|
||||||
try {
|
try {
|
||||||
// Check if Codex CLI is available first
|
// Check if Codex CLI is available first
|
||||||
const isAvailable = await usageService.isAvailable();
|
const isAvailable = await usageService.isAvailable();
|
||||||
@@ -60,7 +60,7 @@ export function createCodexRoutes(
|
|||||||
router.get('/models', async (req: Request, res: Response) => {
|
router.get('/models', async (req: Request, res: Response) => {
|
||||||
try {
|
try {
|
||||||
const forceRefresh = req.query.refresh === 'true';
|
const forceRefresh = req.query.refresh === 'true';
|
||||||
const models = await modelCacheService.getModels(forceRefresh);
|
const { models, cachedAt } = await modelCacheService.getModelsWithMetadata(forceRefresh);
|
||||||
|
|
||||||
if (models.length === 0) {
|
if (models.length === 0) {
|
||||||
res.status(503).json({
|
res.status(503).json({
|
||||||
@@ -74,7 +74,7 @@ export function createCodexRoutes(
|
|||||||
res.json({
|
res.json({
|
||||||
success: true,
|
success: true,
|
||||||
models,
|
models,
|
||||||
cachedAt: Date.now(),
|
cachedAt,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('Error fetching models:', error);
|
logger.error('Error fetching models:', error);
|
||||||
|
|||||||
@@ -86,6 +86,24 @@ export class CodexModelCacheService {
|
|||||||
return this.refreshModels();
|
return this.refreshModels();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get models with cache metadata
|
||||||
|
*
|
||||||
|
* @param forceRefresh - If true, bypass cache and fetch fresh data
|
||||||
|
* @returns Object containing models and cache timestamp
|
||||||
|
*/
|
||||||
|
async getModelsWithMetadata(
|
||||||
|
forceRefresh = false
|
||||||
|
): Promise<{ models: CodexModel[]; cachedAt: number }> {
|
||||||
|
const models = await this.getModels(forceRefresh);
|
||||||
|
|
||||||
|
// Try to get the actual cache timestamp
|
||||||
|
const cached = await this.loadFromCache();
|
||||||
|
const cachedAt = cached?.cachedAt ?? Date.now();
|
||||||
|
|
||||||
|
return { models, cachedAt };
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Refresh models from app-server and update cache
|
* Refresh models from app-server and update cache
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -157,9 +157,9 @@ export class CodexUsageService {
|
|||||||
if (rateLimitsResult?.rateLimits?.primary) {
|
if (rateLimitsResult?.rateLimits?.primary) {
|
||||||
const primary = rateLimitsResult.rateLimits.primary;
|
const primary = rateLimitsResult.rateLimits.primary;
|
||||||
result.rateLimits!.primary = {
|
result.rateLimits!.primary = {
|
||||||
limit: 100, // Not provided by API, using placeholder
|
limit: -1, // Not provided by API
|
||||||
used: primary.usedPercent,
|
used: -1, // Not provided by API
|
||||||
remaining: 100 - primary.usedPercent,
|
remaining: -1, // Not provided by API
|
||||||
usedPercent: primary.usedPercent,
|
usedPercent: primary.usedPercent,
|
||||||
windowDurationMins: primary.windowDurationMins,
|
windowDurationMins: primary.windowDurationMins,
|
||||||
resetsAt: primary.resetsAt,
|
resetsAt: primary.resetsAt,
|
||||||
@@ -170,9 +170,9 @@ export class CodexUsageService {
|
|||||||
if (rateLimitsResult?.rateLimits?.secondary) {
|
if (rateLimitsResult?.rateLimits?.secondary) {
|
||||||
const secondary = rateLimitsResult.rateLimits.secondary;
|
const secondary = rateLimitsResult.rateLimits.secondary;
|
||||||
result.rateLimits!.secondary = {
|
result.rateLimits!.secondary = {
|
||||||
limit: 100,
|
limit: -1, // Not provided by API
|
||||||
used: secondary.usedPercent,
|
used: -1, // Not provided by API
|
||||||
remaining: 100 - secondary.usedPercent,
|
remaining: -1, // Not provided by API
|
||||||
usedPercent: secondary.usedPercent,
|
usedPercent: secondary.usedPercent,
|
||||||
windowDurationMins: secondary.windowDurationMins,
|
windowDurationMins: secondary.windowDurationMins,
|
||||||
resetsAt: secondary.resetsAt,
|
resetsAt: secondary.resetsAt,
|
||||||
|
|||||||
Reference in New Issue
Block a user