@prompts-gpt/client 0.2.3 → 0.2.4
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/README.md +49 -17
- package/dist/cli.js +599 -119
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -21
- package/dist/index.js.map +1 -1
- package/dist/runtime.d.ts +18 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +277 -6
- package/dist/runtime.js.map +1 -1
- package/dist/sweep.d.ts +7 -1
- package/dist/sweep.d.ts.map +1 -1
- package/dist/sweep.js +16 -4
- package/dist/sweep.js.map +1 -1
- package/package.json +3 -4
- package/CHANGELOG.md +0 -110
package/dist/runtime.d.ts
CHANGED
|
@@ -47,6 +47,14 @@ export type ResolvedRunConfig = {
|
|
|
47
47
|
configPath: string;
|
|
48
48
|
configWarnings: string[];
|
|
49
49
|
};
|
|
50
|
+
export type TokenUsage = {
|
|
51
|
+
inputTokens: number;
|
|
52
|
+
outputTokens: number;
|
|
53
|
+
totalTokens: number;
|
|
54
|
+
reasoningTokens: number;
|
|
55
|
+
cacheReadTokens: number;
|
|
56
|
+
cacheWriteTokens: number;
|
|
57
|
+
};
|
|
50
58
|
export type RunPromptInput = {
|
|
51
59
|
cwd?: string;
|
|
52
60
|
promptFile?: string;
|
|
@@ -76,6 +84,7 @@ export type RunPromptResult = {
|
|
|
76
84
|
finishedAt: string;
|
|
77
85
|
durationMs: number;
|
|
78
86
|
commandPreview: string;
|
|
87
|
+
tokenUsage: TokenUsage | null;
|
|
79
88
|
};
|
|
80
89
|
export type RunBatchInput = {
|
|
81
90
|
cwd?: string;
|
|
@@ -91,6 +100,7 @@ export type RunBatchResult = {
|
|
|
91
100
|
success: number;
|
|
92
101
|
failed: number;
|
|
93
102
|
results: RunPromptResult[];
|
|
103
|
+
tokenUsage: TokenUsage | null;
|
|
94
104
|
};
|
|
95
105
|
export type InitRunConfigInput = {
|
|
96
106
|
cwd?: string;
|
|
@@ -130,12 +140,18 @@ export type DoctorResult = {
|
|
|
130
140
|
};
|
|
131
141
|
export declare function isCI(): boolean;
|
|
132
142
|
export declare function normalizeOrchestrationAgent(value: string | undefined): OrchestrationAgentProfile;
|
|
143
|
+
export declare function normalizeConcreteProvider(value: string): ConcreteProvider;
|
|
133
144
|
export declare function loadRunConfig(cwd?: string): Promise<ResolvedRunConfig>;
|
|
134
145
|
export declare function detectProviders(cwd?: string): Promise<ProviderHealth[]>;
|
|
135
146
|
export declare function doctor(cwd?: string): Promise<DoctorResult>;
|
|
136
147
|
export declare function initRunConfig(input?: InitRunConfigInput): Promise<InitRunConfigResult>;
|
|
137
148
|
export declare function runBatch(input: RunBatchInput): Promise<RunBatchResult>;
|
|
138
149
|
export declare function runPrompt(input: RunPromptInput): Promise<RunPromptResult>;
|
|
150
|
+
export declare function emptyTokenUsage(): TokenUsage;
|
|
151
|
+
export declare function hasTokenUsage(usage: TokenUsage | null | undefined): usage is TokenUsage;
|
|
152
|
+
export declare function aggregateTokenUsage(usages: Array<TokenUsage | null | undefined>): TokenUsage | null;
|
|
153
|
+
export declare function readTokenUsageFromLog(logFile: string): Promise<TokenUsage | null>;
|
|
154
|
+
export declare function extractTokenUsageFromLog(logContent: string): TokenUsage | null;
|
|
139
155
|
export type ExecuteProviderInput = {
|
|
140
156
|
provider: ConcreteProvider;
|
|
141
157
|
bin: string;
|
|
@@ -169,9 +185,11 @@ export declare function buildProviderCommand(provider: ConcreteProvider, bin: st
|
|
|
169
185
|
};
|
|
170
186
|
export declare function resolveRunProvider(requested: OrchestrationAgentProfile, providers: ProviderHealth[], providerOrder: ConcreteProvider[]): ConcreteProvider;
|
|
171
187
|
export declare function resolveTimeoutSeconds(override: number | undefined, fallback: number): number;
|
|
188
|
+
export declare function ensureGitignoreEntry(cwd: string, entry: string): Promise<void>;
|
|
172
189
|
export declare function captureWorktreeStatus(cwd: string): string;
|
|
173
190
|
export declare function buildWorktreeDelta(before: string, after: string): string;
|
|
174
191
|
export declare function resolveDefaultPromptFile(cwd: string, config: ResolvedRunConfig): Promise<string>;
|
|
192
|
+
export declare function warnModelProviderMismatch(provider: ConcreteProvider, model: string): string | null;
|
|
175
193
|
export declare function assertPromptFitsLaunch(provider: ConcreteProvider, promptText: string, promptFile: string): void;
|
|
176
194
|
export declare function formatCombinedOutput(stdoutText: string, stderrText: string): string;
|
|
177
195
|
export declare function appendFileSafe(filePath: string, content: string): Promise<void>;
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.js
CHANGED
|
@@ -23,9 +23,9 @@ const PROVIDER_ALIASES = {
|
|
|
23
23
|
router: "router",
|
|
24
24
|
};
|
|
25
25
|
export const DEFAULT_MODELS = {
|
|
26
|
-
codex: "gpt-5.
|
|
26
|
+
codex: "gpt-5.4-mini",
|
|
27
27
|
cursor: "auto",
|
|
28
|
-
claude: "sonnet",
|
|
28
|
+
claude: "claude-sonnet-4-6",
|
|
29
29
|
copilot: "auto",
|
|
30
30
|
};
|
|
31
31
|
const NON_CODEX_MAX_PROMPT_BYTES = 100_000;
|
|
@@ -48,7 +48,7 @@ export function normalizeOrchestrationAgent(value) {
|
|
|
48
48
|
const raw = String(value ?? "router").trim().toLowerCase();
|
|
49
49
|
return PROVIDER_ALIASES[raw] ?? "router";
|
|
50
50
|
}
|
|
51
|
-
function normalizeConcreteProvider(value) {
|
|
51
|
+
export function normalizeConcreteProvider(value) {
|
|
52
52
|
const parsed = parseConcreteProvider(value);
|
|
53
53
|
if (!parsed) {
|
|
54
54
|
throw new Error("Invalid provider. Use codex, cursor, claude, or copilot.");
|
|
@@ -181,6 +181,28 @@ export async function doctor(cwd = process.cwd()) {
|
|
|
181
181
|
if (config.safety.disallowDestructiveGit) {
|
|
182
182
|
notes.push("Destructive Git protection is configured, but provider-side enforcement still depends on prompt/runtime policy in this local-first V1 runner.");
|
|
183
183
|
}
|
|
184
|
+
const sweepDir = path.resolve(resolvedCwd, ".prompts-gpt/sweeps");
|
|
185
|
+
if (existsSync(sweepDir)) {
|
|
186
|
+
try {
|
|
187
|
+
const sweepEntries = await readdir(sweepDir, { withFileTypes: true });
|
|
188
|
+
const sweepFiles = sweepEntries.filter((e) => e.isFile() && e.name.endsWith(".md"));
|
|
189
|
+
notes.push(`Sweep files: ${sweepFiles.length} found in .prompts-gpt/sweeps/`);
|
|
190
|
+
}
|
|
191
|
+
catch { /* skip */ }
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
notes.push("Sweep files: none (create .prompts-gpt/sweeps/<name>.md to add sweeps)");
|
|
195
|
+
}
|
|
196
|
+
const lockPath = path.resolve(resolvedCwd, ".sweep.lock");
|
|
197
|
+
if (existsSync(lockPath)) {
|
|
198
|
+
try {
|
|
199
|
+
const lockContent = JSON.parse(await readFile(lockPath, "utf8"));
|
|
200
|
+
notes.push(`Sweep lock: active (PID ${lockContent.pid}, started ${lockContent.startedAt}). Remove with: rm ${lockPath}`);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
notes.push(`Sweep lock: found but unreadable at ${lockPath}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
184
206
|
return {
|
|
185
207
|
cwd: resolvedCwd,
|
|
186
208
|
nodeVersion: process.version,
|
|
@@ -259,6 +281,7 @@ export async function runBatch(input) {
|
|
|
259
281
|
success,
|
|
260
282
|
failed: results.length - success,
|
|
261
283
|
results,
|
|
284
|
+
tokenUsage: aggregateTokenUsage(results.map((result) => result.tokenUsage)),
|
|
262
285
|
};
|
|
263
286
|
}
|
|
264
287
|
export async function runPrompt(input) {
|
|
@@ -328,6 +351,7 @@ export async function runPrompt(input) {
|
|
|
328
351
|
await writeFile(worktreeDeltaFile, buildWorktreeDelta(before, after));
|
|
329
352
|
}
|
|
330
353
|
const finishedAt = new Date();
|
|
354
|
+
const tokenUsage = await readTokenUsageFromLog(logFile);
|
|
331
355
|
return {
|
|
332
356
|
runId,
|
|
333
357
|
provider,
|
|
@@ -344,7 +368,210 @@ export async function runPrompt(input) {
|
|
|
344
368
|
finishedAt: finishedAt.toISOString(),
|
|
345
369
|
durationMs: Date.now() - startedMs,
|
|
346
370
|
commandPreview: run.commandPreview,
|
|
371
|
+
tokenUsage,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
const TOKEN_USAGE_NUMERIC_KEYS = new Set([
|
|
375
|
+
"input_tokens",
|
|
376
|
+
"prompt_tokens",
|
|
377
|
+
"output_tokens",
|
|
378
|
+
"completion_tokens",
|
|
379
|
+
"total_tokens",
|
|
380
|
+
"reasoning_tokens",
|
|
381
|
+
"cached_input_tokens",
|
|
382
|
+
"cache_read_input_tokens",
|
|
383
|
+
"cache_creation_input_tokens",
|
|
384
|
+
"cache_write_input_tokens",
|
|
385
|
+
"inputTokens",
|
|
386
|
+
"promptTokens",
|
|
387
|
+
"outputTokens",
|
|
388
|
+
"completionTokens",
|
|
389
|
+
"totalTokens",
|
|
390
|
+
"reasoningTokens",
|
|
391
|
+
"cacheReadInputTokens",
|
|
392
|
+
"cacheWriteInputTokens",
|
|
393
|
+
"cacheReadTokens",
|
|
394
|
+
"cacheWriteTokens",
|
|
395
|
+
]);
|
|
396
|
+
export function emptyTokenUsage() {
|
|
397
|
+
return {
|
|
398
|
+
inputTokens: 0,
|
|
399
|
+
outputTokens: 0,
|
|
400
|
+
totalTokens: 0,
|
|
401
|
+
reasoningTokens: 0,
|
|
402
|
+
cacheReadTokens: 0,
|
|
403
|
+
cacheWriteTokens: 0,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
export function hasTokenUsage(usage) {
|
|
407
|
+
if (!usage)
|
|
408
|
+
return false;
|
|
409
|
+
return Object.values(usage).some((value) => Number.isFinite(value) && value > 0);
|
|
410
|
+
}
|
|
411
|
+
export function aggregateTokenUsage(usages) {
|
|
412
|
+
const totals = emptyTokenUsage();
|
|
413
|
+
let found = false;
|
|
414
|
+
for (const usage of usages) {
|
|
415
|
+
if (!hasTokenUsage(usage))
|
|
416
|
+
continue;
|
|
417
|
+
found = true;
|
|
418
|
+
totals.inputTokens += usage.inputTokens;
|
|
419
|
+
totals.outputTokens += usage.outputTokens;
|
|
420
|
+
totals.totalTokens += usage.totalTokens;
|
|
421
|
+
totals.reasoningTokens += usage.reasoningTokens;
|
|
422
|
+
totals.cacheReadTokens += usage.cacheReadTokens;
|
|
423
|
+
totals.cacheWriteTokens += usage.cacheWriteTokens;
|
|
424
|
+
}
|
|
425
|
+
return found ? totals : null;
|
|
426
|
+
}
|
|
427
|
+
export async function readTokenUsageFromLog(logFile) {
|
|
428
|
+
if (!existsSync(logFile))
|
|
429
|
+
return null;
|
|
430
|
+
try {
|
|
431
|
+
const content = await readFile(logFile, "utf8");
|
|
432
|
+
return extractTokenUsageFromLog(content);
|
|
433
|
+
}
|
|
434
|
+
catch {
|
|
435
|
+
return null;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
export function extractTokenUsageFromLog(logContent) {
|
|
439
|
+
if (!logContent.trim())
|
|
440
|
+
return null;
|
|
441
|
+
const terminalCandidates = [];
|
|
442
|
+
const generalCandidates = [];
|
|
443
|
+
for (const rawLine of logContent.split("\n")) {
|
|
444
|
+
const trimmed = rawLine.trim();
|
|
445
|
+
if (!trimmed)
|
|
446
|
+
continue;
|
|
447
|
+
if (trimmed.startsWith("{")) {
|
|
448
|
+
try {
|
|
449
|
+
const parsed = JSON.parse(trimmed);
|
|
450
|
+
const candidate = extractBestTokenUsageCandidate(parsed);
|
|
451
|
+
if (!candidate)
|
|
452
|
+
continue;
|
|
453
|
+
const lineType = String(parsed.type ?? parsed.event ?? parsed.kind ?? "").toLowerCase();
|
|
454
|
+
if (lineType === "result" ||
|
|
455
|
+
lineType === "final" ||
|
|
456
|
+
lineType === "response.completed" ||
|
|
457
|
+
lineType === "message_stop") {
|
|
458
|
+
terminalCandidates.push(candidate);
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
generalCandidates.push(candidate);
|
|
462
|
+
}
|
|
463
|
+
continue;
|
|
464
|
+
}
|
|
465
|
+
catch {
|
|
466
|
+
// Fall through to text parsing below.
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
const textCandidate = extractTokenUsageFromText(trimmed);
|
|
470
|
+
if (textCandidate) {
|
|
471
|
+
generalCandidates.push(textCandidate);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
if (terminalCandidates.length > 0) {
|
|
475
|
+
return aggregateTokenUsage(terminalCandidates);
|
|
476
|
+
}
|
|
477
|
+
if (generalCandidates.length > 0) {
|
|
478
|
+
return generalCandidates.reduce((best, current) => {
|
|
479
|
+
if (!best)
|
|
480
|
+
return current;
|
|
481
|
+
if (current.totalTokens > best.totalTokens)
|
|
482
|
+
return current;
|
|
483
|
+
if (current.totalTokens === best.totalTokens && current.inputTokens + current.outputTokens > best.inputTokens + best.outputTokens) {
|
|
484
|
+
return current;
|
|
485
|
+
}
|
|
486
|
+
return best;
|
|
487
|
+
}, null);
|
|
488
|
+
}
|
|
489
|
+
return null;
|
|
490
|
+
}
|
|
491
|
+
function extractBestTokenUsageCandidate(value) {
|
|
492
|
+
const candidates = collectTokenUsageCandidates(value);
|
|
493
|
+
return candidates.reduce((best, current) => {
|
|
494
|
+
if (!best)
|
|
495
|
+
return current;
|
|
496
|
+
if (current.totalTokens > best.totalTokens)
|
|
497
|
+
return current;
|
|
498
|
+
if (current.totalTokens === best.totalTokens && current.inputTokens + current.outputTokens > best.inputTokens + best.outputTokens) {
|
|
499
|
+
return current;
|
|
500
|
+
}
|
|
501
|
+
return best;
|
|
502
|
+
}, null);
|
|
503
|
+
}
|
|
504
|
+
function collectTokenUsageCandidates(value) {
|
|
505
|
+
if (!value || typeof value !== "object")
|
|
506
|
+
return [];
|
|
507
|
+
const record = value;
|
|
508
|
+
const candidates = [];
|
|
509
|
+
const directCandidate = normalizeTokenUsageCandidate(record);
|
|
510
|
+
if (directCandidate) {
|
|
511
|
+
candidates.push(directCandidate);
|
|
512
|
+
}
|
|
513
|
+
for (const nestedValue of Object.values(record)) {
|
|
514
|
+
if (!nestedValue || typeof nestedValue !== "object")
|
|
515
|
+
continue;
|
|
516
|
+
candidates.push(...collectTokenUsageCandidates(nestedValue));
|
|
517
|
+
}
|
|
518
|
+
return candidates;
|
|
519
|
+
}
|
|
520
|
+
function normalizeTokenUsageCandidate(value) {
|
|
521
|
+
const hasRelevantKey = Object.keys(value).some((key) => TOKEN_USAGE_NUMERIC_KEYS.has(key));
|
|
522
|
+
if (!hasRelevantKey)
|
|
523
|
+
return null;
|
|
524
|
+
const usage = {
|
|
525
|
+
inputTokens: readNumericField(value, ["input_tokens", "prompt_tokens", "inputTokens", "promptTokens"]),
|
|
526
|
+
outputTokens: readNumericField(value, ["output_tokens", "completion_tokens", "outputTokens", "completionTokens"]),
|
|
527
|
+
totalTokens: readNumericField(value, ["total_tokens", "totalTokens"]),
|
|
528
|
+
reasoningTokens: readNumericField(value, ["reasoning_tokens", "reasoningTokens"]),
|
|
529
|
+
cacheReadTokens: readNumericField(value, ["cached_input_tokens", "cache_read_input_tokens", "cacheReadInputTokens", "cacheReadTokens"]),
|
|
530
|
+
cacheWriteTokens: readNumericField(value, ["cache_creation_input_tokens", "cache_write_input_tokens", "cacheWriteInputTokens", "cacheWriteTokens"]),
|
|
347
531
|
};
|
|
532
|
+
if (usage.totalTokens <= 0) {
|
|
533
|
+
usage.totalTokens = usage.inputTokens + usage.outputTokens;
|
|
534
|
+
}
|
|
535
|
+
return hasTokenUsage(usage) ? usage : null;
|
|
536
|
+
}
|
|
537
|
+
function extractTokenUsageFromText(text) {
|
|
538
|
+
const usage = emptyTokenUsage();
|
|
539
|
+
const patterns = [
|
|
540
|
+
["inputTokens", [/\binput[_ ]tokens?\b[^0-9]*(\d+)/i, /\bprompt[_ ]tokens?\b[^0-9]*(\d+)/i]],
|
|
541
|
+
["outputTokens", [/\boutput[_ ]tokens?\b[^0-9]*(\d+)/i, /\bcompletion[_ ]tokens?\b[^0-9]*(\d+)/i]],
|
|
542
|
+
["totalTokens", [/\btotal[_ ]tokens?\b[^0-9]*(\d+)/i]],
|
|
543
|
+
["reasoningTokens", [/\breasoning[_ ]tokens?\b[^0-9]*(\d+)/i]],
|
|
544
|
+
["cacheReadTokens", [/\bcache(?:d|[_ ]read(?:[_ ]input)?)?[_ ]tokens?\b[^0-9]*(\d+)/i]],
|
|
545
|
+
["cacheWriteTokens", [/\bcache(?:[_ ]creation|[_ ]write(?:[_ ]input)?)?[_ ]tokens?\b[^0-9]*(\d+)/i]],
|
|
546
|
+
];
|
|
547
|
+
for (const [field, regexes] of patterns) {
|
|
548
|
+
for (const regex of regexes) {
|
|
549
|
+
const match = text.match(regex);
|
|
550
|
+
if (!match)
|
|
551
|
+
continue;
|
|
552
|
+
usage[field] = parseInt(match[1] ?? "0", 10) || 0;
|
|
553
|
+
break;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
if (usage.totalTokens <= 0) {
|
|
557
|
+
usage.totalTokens = usage.inputTokens + usage.outputTokens;
|
|
558
|
+
}
|
|
559
|
+
return hasTokenUsage(usage) ? usage : null;
|
|
560
|
+
}
|
|
561
|
+
function readNumericField(value, keys) {
|
|
562
|
+
for (const key of keys) {
|
|
563
|
+
const raw = value[key];
|
|
564
|
+
if (typeof raw === "number" && Number.isFinite(raw)) {
|
|
565
|
+
return Math.max(0, Math.trunc(raw));
|
|
566
|
+
}
|
|
567
|
+
if (typeof raw === "string" && raw.trim()) {
|
|
568
|
+
const parsed = Number(raw);
|
|
569
|
+
if (Number.isFinite(parsed)) {
|
|
570
|
+
return Math.max(0, Math.trunc(parsed));
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
return 0;
|
|
348
575
|
}
|
|
349
576
|
export async function executeProviderCommandWithRetries(input) {
|
|
350
577
|
let attempt = 0;
|
|
@@ -462,6 +689,13 @@ export async function executeProviderCommand(input, attempt = 0) {
|
|
|
462
689
|
if (provider === "codex" && !existsSync(summaryFile)) {
|
|
463
690
|
await writeFile(summaryFile, `No summary output produced for prompt file ${promptFile}\n`);
|
|
464
691
|
}
|
|
692
|
+
if (outcome.exitCode !== 0 && existsSync(summaryFile)) {
|
|
693
|
+
const summaryContent = await readFile(summaryFile, "utf8");
|
|
694
|
+
if (summaryContent.startsWith("[stderr]") && summaryContent.includes("ERROR:")) {
|
|
695
|
+
const errorPrefix = `# Run Failed (exit code ${outcome.exitCode})\n\nThe ${provider} provider reported an error. See the full log for details:\n ${logFile}\n\n---\n\n`;
|
|
696
|
+
await writeFile(summaryFile, errorPrefix + summaryContent);
|
|
697
|
+
}
|
|
698
|
+
}
|
|
465
699
|
return { exitCode: outcome.exitCode, commandPreview };
|
|
466
700
|
}
|
|
467
701
|
export function buildProviderCommand(provider, bin, model, cwd, promptText, summaryFile, approveMcps, sandboxMode, options) {
|
|
@@ -493,7 +727,7 @@ export function buildProviderCommand(provider, bin, model, cwd, promptText, summ
|
|
|
493
727
|
}
|
|
494
728
|
return {
|
|
495
729
|
command: bin,
|
|
496
|
-
args: ["-p", promptText, "--model", model, "--output-format=json", "--
|
|
730
|
+
args: ["-p", promptText, "--model", model, "--output-format=json", "--add-dir", cwd, "--no-color"],
|
|
497
731
|
};
|
|
498
732
|
}
|
|
499
733
|
export function resolveRunProvider(requested, providers, providerOrder) {
|
|
@@ -683,7 +917,7 @@ function toGitignorePath(cwd, absolutePath) {
|
|
|
683
917
|
const relative = path.relative(cwd, absolutePath).replace(/\\/g, "/").replace(/^\.?\//, "");
|
|
684
918
|
return relative || DEFAULT_RUN_ARTIFACTS_DIR;
|
|
685
919
|
}
|
|
686
|
-
async function ensureGitignoreEntry(cwd, entry) {
|
|
920
|
+
export async function ensureGitignoreEntry(cwd, entry) {
|
|
687
921
|
const gitignorePath = path.resolve(cwd, ".gitignore");
|
|
688
922
|
const existing = existsSync(gitignorePath) ? await readFile(gitignorePath, "utf8") : "";
|
|
689
923
|
const eol = existing.includes("\r\n") ? "\r\n" : "\n";
|
|
@@ -929,7 +1163,19 @@ export async function resolveDefaultPromptFile(cwd, config) {
|
|
|
929
1163
|
return discovered.defaultPromptFile;
|
|
930
1164
|
}
|
|
931
1165
|
}
|
|
932
|
-
throw new Error("No default prompt file configured. Run `prompts-gpt
|
|
1166
|
+
throw new Error("No default prompt file configured. Run `prompts-gpt list` to see available prompts, or pass `--prompt-file`.");
|
|
1167
|
+
}
|
|
1168
|
+
export function warnModelProviderMismatch(provider, model) {
|
|
1169
|
+
if (provider === "codex" && model.includes("claude")) {
|
|
1170
|
+
return `Model "${model}" is an Anthropic model but provider is codex (OpenAI). Use --agent claude instead.`;
|
|
1171
|
+
}
|
|
1172
|
+
if (provider === "claude" && (model.includes("gpt") || model.includes("codex") || model.includes("o4"))) {
|
|
1173
|
+
return `Model "${model}" is an OpenAI model but provider is claude. Use --agent codex instead.`;
|
|
1174
|
+
}
|
|
1175
|
+
if (provider === "codex" && model === "gpt-5.1-codex") {
|
|
1176
|
+
return `Model "gpt-5.1-codex" may not be available for all Codex accounts. If it fails, try --model o4-mini.`;
|
|
1177
|
+
}
|
|
1178
|
+
return null;
|
|
933
1179
|
}
|
|
934
1180
|
export function assertPromptFitsLaunch(provider, promptText, promptFile) {
|
|
935
1181
|
if (!promptText || !promptText.trim()) {
|
|
@@ -1168,6 +1414,31 @@ export async function validateRunConfig(cwd = process.cwd()) {
|
|
|
1168
1414
|
warnings.push(`Unrecognized defaultAgent: ${String(parsed.defaultAgent)} — will fall back to router.`);
|
|
1169
1415
|
}
|
|
1170
1416
|
}
|
|
1417
|
+
if (typeof parsed.defaultPromptFile === "string" && parsed.defaultPromptFile.trim()) {
|
|
1418
|
+
const resolved = path.resolve(cwd, parsed.defaultPromptFile.trim());
|
|
1419
|
+
if (!existsSync(resolved)) {
|
|
1420
|
+
warnings.push(`defaultPromptFile does not exist: ${parsed.defaultPromptFile}`);
|
|
1421
|
+
}
|
|
1422
|
+
}
|
|
1423
|
+
if (typeof parsed.batchDefaults === "object" && parsed.batchDefaults !== null) {
|
|
1424
|
+
const bd = parsed.batchDefaults;
|
|
1425
|
+
if (typeof bd.manifestPath === "string" && bd.manifestPath.trim()) {
|
|
1426
|
+
const resolved = path.resolve(cwd, bd.manifestPath.trim());
|
|
1427
|
+
if (!existsSync(resolved)) {
|
|
1428
|
+
warnings.push(`batchDefaults.manifestPath does not exist: ${bd.manifestPath}`);
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1431
|
+
if (Array.isArray(bd.promptFiles)) {
|
|
1432
|
+
for (const pf of bd.promptFiles) {
|
|
1433
|
+
if (typeof pf === "string" && pf.trim()) {
|
|
1434
|
+
const resolved = path.resolve(cwd, pf.trim());
|
|
1435
|
+
if (!existsSync(resolved)) {
|
|
1436
|
+
warnings.push(`batchDefaults.promptFiles entry does not exist: ${pf}`);
|
|
1437
|
+
}
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1171
1442
|
return { valid: errors.length === 0, configPath, errors, warnings };
|
|
1172
1443
|
}
|
|
1173
1444
|
//# sourceMappingURL=runtime.js.map
|