cc-reviewer 1.8.4 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commands/ask-codex.md +2 -1
- package/commands/ask-multi.md +2 -1
- package/commands/codex-xhigh.md +1 -0
- package/commands/codex.md +7 -1
- package/commands/multi.md +7 -1
- package/dist/adapters/base.d.ts +5 -1
- package/dist/adapters/codex.js +20 -9
- package/dist/adapters/gemini.js +6 -1
- package/dist/handoff.d.ts +2 -2
- package/dist/handoff.js +38 -3
- package/dist/schema.d.ts +6 -6
- package/dist/tools/feedback.d.ts +13 -0
- package/dist/tools/feedback.js +13 -1
- package/dist/tools/peer.d.ts +11 -0
- package/dist/tools/peer.js +11 -0
- package/dist/types.d.ts +2 -0
- package/package.json +1 -1
package/commands/ask-codex.md
CHANGED
|
@@ -20,7 +20,8 @@ Call `ask_codex` with:
|
|
|
20
20
|
"prompt": "<your question or request from $ARGUMENTS>",
|
|
21
21
|
"taskType": "<infer from request: plan|debug|explain|question|fix|explore|general>",
|
|
22
22
|
"relevantFiles": ["<files related to the question>"],
|
|
23
|
-
"context": "<any error messages or prior analysis>"
|
|
23
|
+
"context": "<any error messages or prior analysis>",
|
|
24
|
+
"serviceTier": "<if user says 'fast mode'/'fast'/'priority' → 'priority'; if 'flex'/'cheap'/'budget' → 'flex'; otherwise omit>"
|
|
24
25
|
}
|
|
25
26
|
```
|
|
26
27
|
|
package/commands/ask-multi.md
CHANGED
|
@@ -19,7 +19,8 @@ Call `ask_multi` with:
|
|
|
19
19
|
"prompt": "<your question or request from $ARGUMENTS>",
|
|
20
20
|
"taskType": "<infer from request: plan|debug|explain|question|fix|explore|general>",
|
|
21
21
|
"relevantFiles": ["<files related to the question>"],
|
|
22
|
-
"context": "<any error messages or prior analysis>"
|
|
22
|
+
"context": "<any error messages or prior analysis>",
|
|
23
|
+
"serviceTier": "<if user says 'fast mode'/'fast'/'priority' → 'priority'; if 'flex'/'cheap'/'budget' → 'flex'; otherwise omit. Applies to Codex only.>"
|
|
23
24
|
}
|
|
24
25
|
```
|
|
25
26
|
|
package/commands/codex-xhigh.md
CHANGED
|
@@ -18,6 +18,7 @@ Use the `codex_review` MCP tool with `reasoningEffort: "xhigh"` for deeper analy
|
|
|
18
18
|
- `workingDir`: current working directory
|
|
19
19
|
- `ccOutput`: brief summary of recent changes or context
|
|
20
20
|
- `reasoningEffort`: "xhigh" (this is the key difference from /codex)
|
|
21
|
+
- `serviceTier`: if user says "fast mode"/"fast"/"priority" → "priority"; if "flex"/"cheap"/"budget" → "flex"; otherwise omit
|
|
21
22
|
- `focus`: extracted from $ARGUMENTS if it's a known focus area
|
|
22
23
|
- `customInstructions`: $ARGUMENTS if it's custom text
|
|
23
24
|
|
package/commands/codex.md
CHANGED
|
@@ -43,10 +43,16 @@ Call `codex_review` with:
|
|
|
43
43
|
"ccOutput": "<structured handoff - see below>",
|
|
44
44
|
"outputType": "analysis",
|
|
45
45
|
"focusAreas": ["<from $ARGUMENTS>"],
|
|
46
|
-
"reasoningEffort": "high"
|
|
46
|
+
"reasoningEffort": "high",
|
|
47
|
+
"serviceTier": "<see below>"
|
|
47
48
|
}
|
|
48
49
|
```
|
|
49
50
|
|
|
51
|
+
### Service Tier (from $ARGUMENTS)
|
|
52
|
+
- If user says "fast mode", "fast", or "priority" → set `serviceTier: "priority"` (faster, ~2x cost)
|
|
53
|
+
- If user says "flex", "cheap", or "budget" → set `serviceTier: "flex"` (50% cheaper, slower)
|
|
54
|
+
- Otherwise → omit `serviceTier` (uses default tier)
|
|
55
|
+
|
|
50
56
|
### Structure your ccOutput:
|
|
51
57
|
|
|
52
58
|
```
|
package/commands/multi.md
CHANGED
|
@@ -41,10 +41,16 @@ Call `multi_review` with:
|
|
|
41
41
|
"workingDir": "<current directory>",
|
|
42
42
|
"ccOutput": "<structured handoff>",
|
|
43
43
|
"outputType": "analysis",
|
|
44
|
-
"focusAreas": ["<from $ARGUMENTS>"]
|
|
44
|
+
"focusAreas": ["<from $ARGUMENTS>"],
|
|
45
|
+
"serviceTier": "<see below>"
|
|
45
46
|
}
|
|
46
47
|
```
|
|
47
48
|
|
|
49
|
+
### Service Tier (from $ARGUMENTS, applies to Codex only)
|
|
50
|
+
- If user says "fast mode", "fast", or "priority" → set `serviceTier: "priority"`
|
|
51
|
+
- If user says "flex", "cheap", or "budget" → set `serviceTier: "flex"`
|
|
52
|
+
- Otherwise → omit `serviceTier`
|
|
53
|
+
|
|
48
54
|
### Structure your ccOutput:
|
|
49
55
|
|
|
50
56
|
```
|
package/dist/adapters/base.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* changing the core orchestration logic.
|
|
7
7
|
*/
|
|
8
8
|
import { ReviewOutput, PeerOutput } from '../schema.js';
|
|
9
|
-
import { FocusArea, OutputType, ReasoningEffort, TaskType } from '../types.js';
|
|
9
|
+
import { FocusArea, OutputType, ReasoningEffort, ServiceTier, TaskType } from '../types.js';
|
|
10
10
|
export interface ReviewerCapabilities {
|
|
11
11
|
/** Display name for this reviewer */
|
|
12
12
|
name: string;
|
|
@@ -40,6 +40,8 @@ export interface ReviewRequest {
|
|
|
40
40
|
customPrompt?: string;
|
|
41
41
|
/** Reasoning effort level (for models that support it) */
|
|
42
42
|
reasoningEffort?: ReasoningEffort;
|
|
43
|
+
/** Service tier (for models that support it: priority = fast, flex = cheap) */
|
|
44
|
+
serviceTier?: ServiceTier;
|
|
43
45
|
/** Expert role configuration (optional override) */
|
|
44
46
|
expertRole?: ExpertRole;
|
|
45
47
|
}
|
|
@@ -60,6 +62,8 @@ export interface PeerRequest {
|
|
|
60
62
|
customPrompt?: string;
|
|
61
63
|
/** Reasoning effort level (for models that support it) */
|
|
62
64
|
reasoningEffort?: ReasoningEffort;
|
|
65
|
+
/** Service tier (for models that support it: priority = fast, flex = cheap) */
|
|
66
|
+
serviceTier?: ServiceTier;
|
|
63
67
|
}
|
|
64
68
|
export interface ExpertRole {
|
|
65
69
|
name: string;
|
package/dist/adapters/codex.js
CHANGED
|
@@ -76,10 +76,11 @@ export class CodexAdapter {
|
|
|
76
76
|
// Select role based on focus areas
|
|
77
77
|
const role = selectRole(request.focusAreas);
|
|
78
78
|
// Build prompt with retry context if needed
|
|
79
|
+
// Use 'schema-enforced' since Codex gets --output-schema flag (avoids redundant inline JSON template)
|
|
79
80
|
let prompt = buildHandoffPrompt({
|
|
80
81
|
handoff,
|
|
81
82
|
role,
|
|
82
|
-
outputFormat: '
|
|
83
|
+
outputFormat: 'schema-enforced',
|
|
83
84
|
});
|
|
84
85
|
// Add retry context if this is a retry attempt
|
|
85
86
|
if (attempt > 0) {
|
|
@@ -89,7 +90,7 @@ export class CodexAdapter {
|
|
|
89
90
|
(previousOutput ? `\nPrevious output (for reference):\n${previousOutput.slice(0, 500)}...` : '');
|
|
90
91
|
}
|
|
91
92
|
// Run the CLI
|
|
92
|
-
const result = await this.runCli(prompt, request.workingDir, request.reasoningEffort || 'high', getReviewOutputJsonSchema);
|
|
93
|
+
const result = await this.runCli(prompt, request.workingDir, request.reasoningEffort || 'high', getReviewOutputJsonSchema, request.serviceTier);
|
|
93
94
|
// Handle CLI errors
|
|
94
95
|
if (result.exitCode !== 0) {
|
|
95
96
|
const error = this.categorizeError(result.stderr);
|
|
@@ -139,9 +140,14 @@ export class CodexAdapter {
|
|
|
139
140
|
};
|
|
140
141
|
}
|
|
141
142
|
// Check for empty/minimal data on any parse path
|
|
143
|
+
// A valid review may have findings, agreements, disagreements, alternatives,
|
|
144
|
+
// or a non-default risk assessment. Only retry if truly empty across all fields.
|
|
142
145
|
const hasMinimalData = output.findings.length === 0 &&
|
|
143
146
|
output.agreements.length === 0 &&
|
|
144
|
-
output.disagreements.length === 0
|
|
147
|
+
output.disagreements.length === 0 &&
|
|
148
|
+
output.alternatives.length === 0 &&
|
|
149
|
+
output.risk_assessment.overall_level === 'medium' &&
|
|
150
|
+
output.risk_assessment.score === 50;
|
|
145
151
|
if (hasMinimalData) {
|
|
146
152
|
if (attempt < MAX_RETRIES) {
|
|
147
153
|
console.error(`[codex] Received empty output, retrying...`);
|
|
@@ -231,6 +237,7 @@ export class CodexAdapter {
|
|
|
231
237
|
}
|
|
232
238
|
async runPeerWithRetry(request, attempt, startTime, previousError, previousOutput) {
|
|
233
239
|
try {
|
|
240
|
+
// Use 'schema-enforced' since Codex gets --output-schema flag (avoids redundant inline JSON template)
|
|
234
241
|
let prompt = buildPeerPrompt({
|
|
235
242
|
workingDir: request.workingDir,
|
|
236
243
|
prompt: request.prompt,
|
|
@@ -239,7 +246,7 @@ export class CodexAdapter {
|
|
|
239
246
|
context: request.context,
|
|
240
247
|
focusAreas: request.focusAreas,
|
|
241
248
|
customInstructions: request.customPrompt,
|
|
242
|
-
outputFormat: '
|
|
249
|
+
outputFormat: 'schema-enforced',
|
|
243
250
|
});
|
|
244
251
|
if (attempt > 0) {
|
|
245
252
|
prompt += `\n\n---\n\n# RETRY ATTEMPT ${attempt + 1}\n\n` +
|
|
@@ -247,7 +254,7 @@ export class CodexAdapter {
|
|
|
247
254
|
`Please fix these issues and provide valid JSON output.\n` +
|
|
248
255
|
(previousOutput ? `\nPrevious output (for reference):\n${previousOutput.slice(0, 500)}...` : '');
|
|
249
256
|
}
|
|
250
|
-
const result = await this.runCli(prompt, request.workingDir, request.reasoningEffort || 'high', getPeerOutputJsonSchema);
|
|
257
|
+
const result = await this.runCli(prompt, request.workingDir, request.reasoningEffort || 'high', getPeerOutputJsonSchema, request.serviceTier);
|
|
251
258
|
if (result.exitCode !== 0) {
|
|
252
259
|
const error = this.categorizeError(result.stderr);
|
|
253
260
|
return {
|
|
@@ -305,7 +312,7 @@ export class CodexAdapter {
|
|
|
305
312
|
executionTimeMs: Date.now() - startTime };
|
|
306
313
|
}
|
|
307
314
|
}
|
|
308
|
-
runCli(prompt, workingDir, reasoningEffort, schemaGetter) {
|
|
315
|
+
runCli(prompt, workingDir, reasoningEffort, schemaGetter, serviceTier) {
|
|
309
316
|
return new Promise((resolve, reject) => {
|
|
310
317
|
// Create temp schema file for structured output
|
|
311
318
|
let schemaFile = null;
|
|
@@ -320,15 +327,18 @@ export class CodexAdapter {
|
|
|
320
327
|
schemaFile = null;
|
|
321
328
|
}
|
|
322
329
|
const args = [
|
|
323
|
-
'--search',
|
|
324
330
|
'exec',
|
|
325
|
-
'-m', 'gpt-5.
|
|
331
|
+
'-m', 'gpt-5.4',
|
|
326
332
|
'-c', `model_reasoning_effort=${reasoningEffort}`,
|
|
327
333
|
'-c', 'model_reasoning_summary_format=experimental',
|
|
328
334
|
'--dangerously-bypass-approvals-and-sandbox',
|
|
329
335
|
'--skip-git-repo-check',
|
|
330
336
|
'-C', workingDir,
|
|
331
337
|
];
|
|
338
|
+
// Add service tier if specified (priority = fast mode, flex = cheap mode)
|
|
339
|
+
if (serviceTier && serviceTier !== 'default') {
|
|
340
|
+
args.push('-c', `service_tier=${serviceTier}`);
|
|
341
|
+
}
|
|
332
342
|
// Add schema enforcement if available
|
|
333
343
|
if (schemaFile) {
|
|
334
344
|
args.push('--output-schema', schemaFile);
|
|
@@ -357,7 +367,8 @@ export class CodexAdapter {
|
|
|
357
367
|
let lastProgressTime = cliStartTime;
|
|
358
368
|
let dataChunks = 0;
|
|
359
369
|
// Show initial progress message
|
|
360
|
-
|
|
370
|
+
const tierLabel = serviceTier && serviceTier !== 'default' ? ` [${serviceTier}]` : '';
|
|
371
|
+
console.error(`[codex] Running review with ${reasoningEffort} reasoning${tierLabel}...`);
|
|
361
372
|
const maxTimer = setTimeout(() => {
|
|
362
373
|
proc.kill('SIGTERM');
|
|
363
374
|
reject(new Error('MAX_TIMEOUT'));
|
package/dist/adapters/gemini.js
CHANGED
|
@@ -137,9 +137,14 @@ export class GeminiAdapter {
|
|
|
137
137
|
};
|
|
138
138
|
}
|
|
139
139
|
// If output has no substantive data, retry or fail
|
|
140
|
+
// A valid review may have findings, agreements, disagreements, alternatives,
|
|
141
|
+
// or a non-default risk assessment. Only retry if truly empty across all fields.
|
|
140
142
|
const hasMinimalData = output.findings.length === 0 &&
|
|
141
143
|
output.agreements.length === 0 &&
|
|
142
|
-
output.disagreements.length === 0
|
|
144
|
+
output.disagreements.length === 0 &&
|
|
145
|
+
output.alternatives.length === 0 &&
|
|
146
|
+
output.risk_assessment.overall_level === 'medium' &&
|
|
147
|
+
output.risk_assessment.score === 50;
|
|
143
148
|
if (hasMinimalData) {
|
|
144
149
|
if (attempt < MAX_RETRIES) {
|
|
145
150
|
console.error(`[gemini] Received empty output, retrying...`);
|
package/dist/handoff.d.ts
CHANGED
|
@@ -215,7 +215,7 @@ export declare function selectRole(focusAreas?: FocusArea[]): ReviewerRole;
|
|
|
215
215
|
export interface PromptOptions {
|
|
216
216
|
handoff: Handoff;
|
|
217
217
|
role?: ReviewerRole;
|
|
218
|
-
outputFormat: 'json' | 'markdown';
|
|
218
|
+
outputFormat: 'json' | 'markdown' | 'schema-enforced';
|
|
219
219
|
}
|
|
220
220
|
/**
|
|
221
221
|
* Build the review prompt using minimal, targeted context
|
|
@@ -238,7 +238,7 @@ export interface PeerPromptOptions {
|
|
|
238
238
|
context?: string;
|
|
239
239
|
focusAreas?: FocusArea[];
|
|
240
240
|
customInstructions?: string;
|
|
241
|
-
outputFormat: 'json';
|
|
241
|
+
outputFormat: 'json' | 'schema-enforced';
|
|
242
242
|
}
|
|
243
243
|
/**
|
|
244
244
|
* Build a prompt for general-purpose peer assistance (not review).
|
package/dist/handoff.js
CHANGED
|
@@ -372,7 +372,23 @@ ${handoff.priorityFiles.map(f => `- \`${f}\``).join('\n')}`);
|
|
|
372
372
|
// ==========================================================================
|
|
373
373
|
// SECTION 7: OUTPUT FORMAT
|
|
374
374
|
// ==========================================================================
|
|
375
|
-
if (outputFormat === '
|
|
375
|
+
if (outputFormat === 'schema-enforced') {
|
|
376
|
+
// Schema is enforced externally (e.g. via --output-schema flag).
|
|
377
|
+
// Only include behavioral rules, skip the redundant JSON template.
|
|
378
|
+
sections.push(`
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
# OUTPUT FORMAT
|
|
382
|
+
|
|
383
|
+
Respond with valid JSON matching the provided output schema.
|
|
384
|
+
|
|
385
|
+
**Rules:**
|
|
386
|
+
- Use \`git diff\` and file reading to verify before claiming issues
|
|
387
|
+
- Include evidence (code snippets) for findings
|
|
388
|
+
- Confidence reflects how sure YOU are (not CC)
|
|
389
|
+
- Answer CC's uncertainties and questions explicitly`);
|
|
390
|
+
}
|
|
391
|
+
else if (outputFormat === 'json') {
|
|
376
392
|
sections.push(`
|
|
377
393
|
---
|
|
378
394
|
|
|
@@ -481,7 +497,7 @@ export function enhanceHandoff(handoff, uncertainties, questions, decisions) {
|
|
|
481
497
|
* The peer acts as a collaborative coworker, not a critic.
|
|
482
498
|
*/
|
|
483
499
|
export function buildPeerPrompt(options) {
|
|
484
|
-
const { workingDir, prompt, taskType, relevantFiles, context, focusAreas, customInstructions } = options;
|
|
500
|
+
const { workingDir, prompt, taskType, relevantFiles, context, focusAreas, customInstructions, outputFormat } = options;
|
|
485
501
|
// Select role based on focus areas (reuse existing role selection)
|
|
486
502
|
const role = selectRole(focusAreas);
|
|
487
503
|
const sections = [];
|
|
@@ -549,7 +565,25 @@ ${customInstructions}`);
|
|
|
549
565
|
5. Reference specific files and line numbers
|
|
550
566
|
6. Suggest concrete next steps`);
|
|
551
567
|
// SECTION 7: OUTPUT FORMAT
|
|
552
|
-
|
|
568
|
+
if (outputFormat === 'schema-enforced') {
|
|
569
|
+
// Schema is enforced externally (e.g. via --output-schema flag).
|
|
570
|
+
// Only include behavioral rules, skip the redundant JSON template.
|
|
571
|
+
sections.push(`
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
# OUTPUT FORMAT
|
|
575
|
+
|
|
576
|
+
Respond with valid JSON matching the provided output schema.
|
|
577
|
+
|
|
578
|
+
**Rules:**
|
|
579
|
+
- Read files before making claims
|
|
580
|
+
- Reference specific file paths and line numbers
|
|
581
|
+
- Be concrete and actionable — no vague suggestions
|
|
582
|
+
- Confidence reflects how sure YOU are about your answer
|
|
583
|
+
- Include alternatives when there are meaningful tradeoffs`);
|
|
584
|
+
}
|
|
585
|
+
else {
|
|
586
|
+
sections.push(`
|
|
553
587
|
---
|
|
554
588
|
|
|
555
589
|
# OUTPUT FORMAT
|
|
@@ -596,5 +630,6 @@ Respond with valid JSON:
|
|
|
596
630
|
- Be concrete and actionable — no vague suggestions
|
|
597
631
|
- Confidence reflects how sure YOU are about your answer
|
|
598
632
|
- Include alternatives when there are meaningful tradeoffs`);
|
|
633
|
+
}
|
|
599
634
|
return sections.join('\n');
|
|
600
635
|
}
|
package/dist/schema.d.ts
CHANGED
|
@@ -651,13 +651,13 @@ export declare const SuggestedAction: z.ZodObject<{
|
|
|
651
651
|
rationale: z.ZodString;
|
|
652
652
|
}, "strip", z.ZodTypeAny, {
|
|
653
653
|
rationale: string;
|
|
654
|
-
action: string;
|
|
655
654
|
priority: "high" | "medium" | "low";
|
|
655
|
+
action: string;
|
|
656
656
|
file?: string | null | undefined;
|
|
657
657
|
}, {
|
|
658
658
|
rationale: string;
|
|
659
|
-
action: string;
|
|
660
659
|
priority: "high" | "medium" | "low";
|
|
660
|
+
action: string;
|
|
661
661
|
file?: string | null | undefined;
|
|
662
662
|
}>;
|
|
663
663
|
export type SuggestedAction = z.infer<typeof SuggestedAction>;
|
|
@@ -688,13 +688,13 @@ export declare const PeerOutput: z.ZodObject<{
|
|
|
688
688
|
rationale: z.ZodString;
|
|
689
689
|
}, "strip", z.ZodTypeAny, {
|
|
690
690
|
rationale: string;
|
|
691
|
-
action: string;
|
|
692
691
|
priority: "high" | "medium" | "low";
|
|
692
|
+
action: string;
|
|
693
693
|
file?: string | null | undefined;
|
|
694
694
|
}, {
|
|
695
695
|
rationale: string;
|
|
696
|
-
action: string;
|
|
697
696
|
priority: "high" | "medium" | "low";
|
|
697
|
+
action: string;
|
|
698
698
|
file?: string | null | undefined;
|
|
699
699
|
}>, "many">;
|
|
700
700
|
file_references: z.ZodArray<z.ZodObject<{
|
|
@@ -752,8 +752,8 @@ export declare const PeerOutput: z.ZodObject<{
|
|
|
752
752
|
key_points: string[];
|
|
753
753
|
suggested_actions: {
|
|
754
754
|
rationale: string;
|
|
755
|
-
action: string;
|
|
756
755
|
priority: "high" | "medium" | "low";
|
|
756
|
+
action: string;
|
|
757
757
|
file?: string | null | undefined;
|
|
758
758
|
}[];
|
|
759
759
|
file_references: {
|
|
@@ -780,8 +780,8 @@ export declare const PeerOutput: z.ZodObject<{
|
|
|
780
780
|
key_points: string[];
|
|
781
781
|
suggested_actions: {
|
|
782
782
|
rationale: string;
|
|
783
|
-
action: string;
|
|
784
783
|
priority: "high" | "medium" | "low";
|
|
784
|
+
action: string;
|
|
785
785
|
file?: string | null | undefined;
|
|
786
786
|
}[];
|
|
787
787
|
file_references: {
|
package/dist/tools/feedback.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare const ReviewInputSchema: z.ZodObject<{
|
|
|
14
14
|
focusAreas: z.ZodOptional<z.ZodArray<z.ZodEnum<["security", "performance", "architecture", "correctness", "maintainability", "scalability", "testing", "documentation"]>, "many">>;
|
|
15
15
|
customPrompt: z.ZodOptional<z.ZodString>;
|
|
16
16
|
reasoningEffort: z.ZodOptional<z.ZodEnum<["high", "xhigh"]>>;
|
|
17
|
+
serviceTier: z.ZodOptional<z.ZodEnum<["default", "priority", "flex"]>>;
|
|
17
18
|
}, "strip", z.ZodTypeAny, {
|
|
18
19
|
workingDir: string;
|
|
19
20
|
ccOutput: string;
|
|
@@ -22,6 +23,7 @@ export declare const ReviewInputSchema: z.ZodObject<{
|
|
|
22
23
|
customPrompt?: string | undefined;
|
|
23
24
|
analyzedFiles?: string[] | undefined;
|
|
24
25
|
reasoningEffort?: "high" | "xhigh" | undefined;
|
|
26
|
+
serviceTier?: "default" | "priority" | "flex" | undefined;
|
|
25
27
|
}, {
|
|
26
28
|
workingDir: string;
|
|
27
29
|
ccOutput: string;
|
|
@@ -30,6 +32,7 @@ export declare const ReviewInputSchema: z.ZodObject<{
|
|
|
30
32
|
customPrompt?: string | undefined;
|
|
31
33
|
analyzedFiles?: string[] | undefined;
|
|
32
34
|
reasoningEffort?: "high" | "xhigh" | undefined;
|
|
35
|
+
serviceTier?: "default" | "priority" | "flex" | undefined;
|
|
33
36
|
}>;
|
|
34
37
|
export type ReviewInput = z.infer<typeof ReviewInputSchema>;
|
|
35
38
|
export declare function handleCodexReview(input: ReviewInput): Promise<{
|
|
@@ -94,6 +97,11 @@ export declare const TOOL_DEFINITIONS: {
|
|
|
94
97
|
enum: string[];
|
|
95
98
|
description: string;
|
|
96
99
|
};
|
|
100
|
+
serviceTier: {
|
|
101
|
+
type: string;
|
|
102
|
+
enum: string[];
|
|
103
|
+
description: string;
|
|
104
|
+
};
|
|
97
105
|
};
|
|
98
106
|
required: string[];
|
|
99
107
|
};
|
|
@@ -178,6 +186,11 @@ export declare const TOOL_DEFINITIONS: {
|
|
|
178
186
|
type: string;
|
|
179
187
|
description: string;
|
|
180
188
|
};
|
|
189
|
+
serviceTier: {
|
|
190
|
+
type: string;
|
|
191
|
+
enum: string[];
|
|
192
|
+
description: string;
|
|
193
|
+
};
|
|
181
194
|
};
|
|
182
195
|
required: string[];
|
|
183
196
|
};
|
package/dist/tools/feedback.js
CHANGED
|
@@ -20,7 +20,8 @@ export const ReviewInputSchema = z.object({
|
|
|
20
20
|
'maintainability', 'scalability', 'testing', 'documentation'
|
|
21
21
|
])).optional().describe('Areas to focus the review on'),
|
|
22
22
|
customPrompt: z.string().optional().describe('Custom instructions for the reviewer'),
|
|
23
|
-
reasoningEffort: z.enum(['high', 'xhigh']).optional().describe('Codex reasoning effort level (default: high, use xhigh for deeper analysis)')
|
|
23
|
+
reasoningEffort: z.enum(['high', 'xhigh']).optional().describe('Codex reasoning effort level (default: high, use xhigh for deeper analysis)'),
|
|
24
|
+
serviceTier: z.enum(['default', 'priority', 'flex']).optional().describe('Codex service tier (default: default, priority = fast mode, flex = cheaper/slower)')
|
|
24
25
|
});
|
|
25
26
|
// =============================================================================
|
|
26
27
|
// HELPER FUNCTIONS
|
|
@@ -34,6 +35,7 @@ function toReviewRequest(input) {
|
|
|
34
35
|
focusAreas: input.focusAreas,
|
|
35
36
|
customPrompt: input.customPrompt,
|
|
36
37
|
reasoningEffort: input.reasoningEffort,
|
|
38
|
+
serviceTier: input.serviceTier,
|
|
37
39
|
};
|
|
38
40
|
}
|
|
39
41
|
function formatSingleReviewResponse(result, modelName) {
|
|
@@ -338,6 +340,11 @@ export const TOOL_DEFINITIONS = {
|
|
|
338
340
|
type: 'string',
|
|
339
341
|
enum: ['high', 'xhigh'],
|
|
340
342
|
description: 'Codex reasoning effort (default: high, use xhigh for deeper analysis)'
|
|
343
|
+
},
|
|
344
|
+
serviceTier: {
|
|
345
|
+
type: 'string',
|
|
346
|
+
enum: ['default', 'priority', 'flex'],
|
|
347
|
+
description: 'Codex service tier (priority = fast mode, flex = cheaper/slower)'
|
|
341
348
|
}
|
|
342
349
|
},
|
|
343
350
|
required: ['workingDir', 'ccOutput', 'outputType']
|
|
@@ -418,6 +425,11 @@ export const TOOL_DEFINITIONS = {
|
|
|
418
425
|
customPrompt: {
|
|
419
426
|
type: 'string',
|
|
420
427
|
description: 'Custom instructions for the reviewer'
|
|
428
|
+
},
|
|
429
|
+
serviceTier: {
|
|
430
|
+
type: 'string',
|
|
431
|
+
enum: ['default', 'priority', 'flex'],
|
|
432
|
+
description: 'Codex service tier (priority = fast mode, flex = cheaper/slower). Only applies to Codex.'
|
|
421
433
|
}
|
|
422
434
|
},
|
|
423
435
|
required: ['workingDir', 'ccOutput', 'outputType']
|
package/dist/tools/peer.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export type PeerInput = {
|
|
|
16
16
|
focusAreas?: string[];
|
|
17
17
|
customPrompt?: string;
|
|
18
18
|
reasoningEffort?: 'high' | 'xhigh';
|
|
19
|
+
serviceTier?: 'default' | 'priority' | 'flex';
|
|
19
20
|
};
|
|
20
21
|
export declare function formatPeerResponse(result: PeerResult, modelName: string): string;
|
|
21
22
|
export declare function handleAskCodex(input: PeerInput): Promise<{
|
|
@@ -84,6 +85,11 @@ export declare const PEER_TOOL_DEFINITIONS: {
|
|
|
84
85
|
enum: string[];
|
|
85
86
|
description: string;
|
|
86
87
|
};
|
|
88
|
+
serviceTier: {
|
|
89
|
+
type: string;
|
|
90
|
+
enum: string[];
|
|
91
|
+
description: string;
|
|
92
|
+
};
|
|
87
93
|
};
|
|
88
94
|
required: string[];
|
|
89
95
|
};
|
|
@@ -176,6 +182,11 @@ export declare const PEER_TOOL_DEFINITIONS: {
|
|
|
176
182
|
type: string;
|
|
177
183
|
description: string;
|
|
178
184
|
};
|
|
185
|
+
serviceTier: {
|
|
186
|
+
type: string;
|
|
187
|
+
enum: string[];
|
|
188
|
+
description: string;
|
|
189
|
+
};
|
|
179
190
|
};
|
|
180
191
|
required: string[];
|
|
181
192
|
};
|
package/dist/tools/peer.js
CHANGED
|
@@ -20,6 +20,7 @@ function toPeerRequest(input) {
|
|
|
20
20
|
focusAreas: input.focusAreas,
|
|
21
21
|
customPrompt: input.customPrompt,
|
|
22
22
|
reasoningEffort: input.reasoningEffort,
|
|
23
|
+
serviceTier: input.serviceTier,
|
|
23
24
|
};
|
|
24
25
|
}
|
|
25
26
|
export function formatPeerResponse(result, modelName) {
|
|
@@ -241,6 +242,11 @@ export const PEER_TOOL_DEFINITIONS = {
|
|
|
241
242
|
enum: ['high', 'xhigh'],
|
|
242
243
|
description: 'Codex reasoning effort (default: high)',
|
|
243
244
|
},
|
|
245
|
+
serviceTier: {
|
|
246
|
+
type: 'string',
|
|
247
|
+
enum: ['default', 'priority', 'flex'],
|
|
248
|
+
description: 'Codex service tier (priority = fast mode, flex = cheaper/slower)',
|
|
249
|
+
},
|
|
244
250
|
},
|
|
245
251
|
required: ['workingDir', 'prompt'],
|
|
246
252
|
},
|
|
@@ -329,6 +335,11 @@ export const PEER_TOOL_DEFINITIONS = {
|
|
|
329
335
|
type: 'string',
|
|
330
336
|
description: 'Additional instructions for the peer',
|
|
331
337
|
},
|
|
338
|
+
serviceTier: {
|
|
339
|
+
type: 'string',
|
|
340
|
+
enum: ['default', 'priority', 'flex'],
|
|
341
|
+
description: 'Codex service tier (priority = fast mode, flex = cheaper/slower). Only applies to Codex.',
|
|
342
|
+
},
|
|
332
343
|
},
|
|
333
344
|
required: ['workingDir', 'prompt'],
|
|
334
345
|
},
|
package/dist/types.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export type OutputType = 'plan' | 'findings' | 'analysis' | 'proposal';
|
|
|
5
5
|
export type FocusArea = 'security' | 'performance' | 'architecture' | 'correctness' | 'maintainability' | 'scalability' | 'testing' | 'documentation';
|
|
6
6
|
export type CliType = 'codex' | 'gemini';
|
|
7
7
|
export type ReasoningEffort = 'high' | 'xhigh';
|
|
8
|
+
export type ServiceTier = 'default' | 'priority' | 'flex';
|
|
8
9
|
export type TaskType = 'plan' | 'debug' | 'explain' | 'question' | 'fix' | 'explore' | 'general';
|
|
9
10
|
export interface FeedbackRequest {
|
|
10
11
|
workingDir: string;
|
|
@@ -14,6 +15,7 @@ export interface FeedbackRequest {
|
|
|
14
15
|
focusAreas?: FocusArea[];
|
|
15
16
|
customPrompt?: string;
|
|
16
17
|
reasoningEffort?: ReasoningEffort;
|
|
18
|
+
serviceTier?: ServiceTier;
|
|
17
19
|
}
|
|
18
20
|
export interface FeedbackSuccess {
|
|
19
21
|
success: true;
|