fix: disclose codex task limit caps

This commit is contained in:
Codex
2026-05-23 03:03:11 +00:00
parent 8393bc531a
commit efe32b19f7
4 changed files with 62 additions and 29 deletions
+40 -24
View File
@@ -14,6 +14,7 @@ const maxOutputPreviewChars = 1200;
const defaultTasksLimit = 20;
const defaultQueuesLimit = 8;
const maxTasksLimit = 100;
const tasksOverviewSourceFetchLimit = 200;
const supervisorSectionReturnedLimit = 3;
const supervisorRecentCompletedLimit = 3;
const supervisorPromptPreviewChars = 70;
@@ -2411,6 +2412,32 @@ function taskListCommand(options: CodexTasksOptions, extra: string[] = []): stri
return `bun scripts/cli.ts ${args.join(" ")}`;
}
function codexTasksLimitDisclosure(options: CodexTasksOptions): Record<string, unknown> {
return {
requestedLimit: options.requestedLimit,
effectiveLimit: options.limit,
maxLimit: maxTasksLimit,
limitCapped: options.requestedLimit > options.limit,
};
}
function codexTasksSourceDisclosure(pagination: Record<string, unknown>): Record<string, unknown> {
const effectiveLimit = asNumber(pagination.limit, 0) || null;
return {
endpoint: "/api/tasks/overview",
requestedLimit: tasksOverviewSourceFetchLimit,
fetchLimit: tasksOverviewSourceFetchLimit,
limit: effectiveLimit,
effectiveLimit,
limitCapped: effectiveLimit !== null && effectiveLimit < tasksOverviewSourceFetchLimit,
returned: asNumber(pagination.returned, 0) || null,
total: asNumber(pagination.total, 0) || null,
hasMore: asBoolean(pagination.hasMore),
nextBeforeId: asString(pagination.nextBeforeId) || null,
includeActive: asBoolean(pagination.includeActive),
};
}
function taskSectionLimit(options: CodexTasksOptions, maxReturned = supervisorSectionReturnedLimit): number {
return Math.min(options.limit, maxReturned);
}
@@ -2618,8 +2645,8 @@ type CodexTasksTaskPage = {
function tasksListQueryString(options: CodexTasksOptions): string {
return queryString({
limit: 200,
priorityLimit: 200,
limit: tasksOverviewSourceFetchLimit,
priorityLimit: tasksOverviewSourceFetchLimit,
queueId: options.queueId,
beforeId: options.beforeId,
includeActive: 1,
@@ -2692,28 +2719,24 @@ function codexTasksOverviewResult(
queueId: options.queueId ?? null,
requestedLimit: options.requestedLimit,
limit: options.limit,
effectiveLimit: options.limit,
limitCapped: options.limit < options.requestedLimit,
...codexTasksLimitDisclosure(options),
unreadOnly: options.unreadOnly,
status: options.statusFilter,
beforeId: options.beforeId ?? null,
},
source: {
endpoint: "/api/tasks/overview",
queueId: options.queueId ?? null,
limit: asNumber(pagination.limit, 0) || null,
limitSemantics: "upstream overview fetch limit; separate from filters.requestedLimit/effectiveLimit and compact section row counts",
returned: asNumber(pagination.returned, 0) || null,
total: asNumber(pagination.total, 0) || null,
hasMore: asBoolean(pagination.hasMore),
nextBeforeId: asString(pagination.nextBeforeId) || null,
includeActive: asBoolean(pagination.includeActive),
},
source: { queueId: options.queueId ?? null, ...codexTasksSourceDisclosure(pagination) },
bounded: true,
disclosure: {
defaultView: "supervisor",
policy: "bounded summary rows only; prompt/body are short previews and raw detail requires explicit task/full/trace/output commands",
limitSemantics: "--limit is request/scanning/page budget; supervisor sections still return compact bounded row pages and expose counts separately",
limitPolicy: {
...codexTasksLimitDisclosure(options),
sourceFetchLimit: tasksOverviewSourceFetchLimit,
sourceEffectiveLimit: asNumber(pagination.limit, 0) || null,
sourceReturned: asNumber(pagination.returned, 0) || null,
note: "codex tasks --limit is capped for CLI output safety; supervisor sections also keep small row caps and expose commands.next for pagination",
},
outputBudget: {
promptPreviewChars: supervisorPromptPreviewChars,
bodyPreviewChars: supervisorBodyPreviewChars,
@@ -2786,19 +2809,12 @@ function codexTasksFullResult(
queueId: options.queueId ?? null,
requestedLimit: options.requestedLimit,
limit: options.limit,
effectiveLimit: options.limit,
limitCapped: options.limit < options.requestedLimit,
...codexTasksLimitDisclosure(options),
unreadOnly: options.unreadOnly,
status: options.statusFilter,
beforeId: options.beforeId ?? null,
},
source: {
endpoint: "/api/tasks/overview",
returned: asNumber(pagination.returned, 0) || null,
total: asNumber(pagination.total, 0) || null,
hasMore: asBoolean(pagination.hasMore),
nextBeforeId,
},
source: codexTasksSourceDisclosure(pagination),
count: filtered.length,
returned: visible.length,
hasMore: filtered.length > visible.length || sourceHasMore,