@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/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>;
@@ -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.1-codex",
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", "--allow-all", "--add-dir", cwd, "--no-color"],
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 setup` or pass `--prompt-file`.");
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