promptfoo 0.119.13 → 0.119.14

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.
Files changed (131) hide show
  1. package/dist/package.json +28 -26
  2. package/dist/src/app/assets/index-eJ2lMe94.js +51 -0
  3. package/dist/src/app/assets/{source-map-support-Bnh0UQ2S.js → source-map-support-1v4oeb7P.js} +1 -1
  4. package/dist/src/app/assets/sync-CtLQRuC1.js +1 -0
  5. package/dist/src/app/assets/{vendor-charts-T60Uk0Z3.js → vendor-charts-DnVv66VV.js} +1 -1
  6. package/dist/src/app/assets/{vendor-markdown-DLig-KJh.js → vendor-markdown-DCpQIyMA.js} +1 -1
  7. package/dist/src/app/assets/{vendor-mui-core-5BLaiG3c.js → vendor-mui-core-Boqnpf9f.js} +1 -1
  8. package/dist/src/app/assets/{vendor-mui-icons-fn39Fu2e.js → vendor-mui-icons-B8MqoVbj.js} +1 -1
  9. package/dist/src/app/assets/vendor-mui-x-CGSS6QHF.js +45 -0
  10. package/dist/src/app/assets/{vendor-utils-DYBMEuwX.js → vendor-utils-DdfHIEy8.js} +1 -1
  11. package/dist/src/app/index.html +7 -7
  12. package/dist/src/assertions/guardrails.d.ts +1 -1
  13. package/dist/src/assertions/guardrails.js +18 -9
  14. package/dist/src/assertions/index.d.ts +1 -1
  15. package/dist/src/assertions/index.js +9 -3
  16. package/dist/src/assertions/searchRubric.d.ts +3 -0
  17. package/dist/src/assertions/searchRubric.js +18 -0
  18. package/dist/src/commands/eval.js +1 -1
  19. package/dist/src/commands/modelScan.d.ts +7 -1
  20. package/dist/src/commands/modelScan.js +121 -59
  21. package/dist/src/database/index.d.ts +6 -0
  22. package/dist/src/database/index.js +11 -0
  23. package/dist/src/database/tables.d.ts +46 -24
  24. package/dist/src/envars.d.ts +17 -0
  25. package/dist/src/generated/constants.js +1 -1
  26. package/dist/src/logger.d.ts +5 -0
  27. package/dist/src/logger.js +28 -0
  28. package/dist/src/main.js +17 -6
  29. package/dist/src/matchers.d.ts +1 -0
  30. package/dist/src/matchers.js +80 -0
  31. package/dist/src/models/eval.d.ts +2 -1
  32. package/dist/src/models/eval.js +44 -2
  33. package/dist/src/prompts/grading.d.ts +1 -0
  34. package/dist/src/prompts/grading.js +26 -1
  35. package/dist/src/prompts/index.d.ts +1 -0
  36. package/dist/src/prompts/index.js +4 -1
  37. package/dist/src/providers/adaline.gateway.js +2 -2
  38. package/dist/src/providers/anthropic/defaults.d.ts +1 -1
  39. package/dist/src/providers/anthropic/defaults.js +15 -0
  40. package/dist/src/providers/azure/chat.d.ts +3 -1
  41. package/dist/src/providers/azure/chat.js +16 -3
  42. package/dist/src/providers/azure/defaults.js +660 -141
  43. package/dist/src/providers/azure/responses.d.ts +5 -0
  44. package/dist/src/providers/azure/responses.js +33 -4
  45. package/dist/src/providers/azure/types.d.ts +4 -0
  46. package/dist/src/providers/bedrock/agents.d.ts +1 -1
  47. package/dist/src/providers/bedrock/agents.js +2 -2
  48. package/dist/src/providers/bedrock/base.d.ts +40 -0
  49. package/dist/src/providers/bedrock/base.js +171 -0
  50. package/dist/src/providers/bedrock/converse.d.ts +146 -0
  51. package/dist/src/providers/bedrock/converse.js +1044 -0
  52. package/dist/src/providers/bedrock/index.d.ts +1 -34
  53. package/dist/src/providers/bedrock/index.js +4 -159
  54. package/dist/src/providers/bedrock/knowledgeBase.d.ts +1 -1
  55. package/dist/src/providers/bedrock/knowledgeBase.js +2 -2
  56. package/dist/src/providers/bedrock/nova-sonic.d.ts +2 -1
  57. package/dist/src/providers/bedrock/nova-sonic.js +2 -2
  58. package/dist/src/providers/claude-agent-sdk.d.ts +58 -1
  59. package/dist/src/providers/claude-agent-sdk.js +22 -1
  60. package/dist/src/providers/defaults.js +4 -0
  61. package/dist/src/providers/github/defaults.js +6 -6
  62. package/dist/src/providers/google/types.d.ts +25 -0
  63. package/dist/src/providers/google/util.d.ts +2 -0
  64. package/dist/src/providers/google/vertex.js +78 -22
  65. package/dist/src/providers/{groq.d.ts → groq/chat.d.ts} +26 -20
  66. package/dist/src/providers/groq/chat.js +79 -0
  67. package/dist/src/providers/groq/index.d.ts +5 -0
  68. package/dist/src/providers/groq/index.js +24 -0
  69. package/dist/src/providers/groq/responses.d.ts +106 -0
  70. package/dist/src/providers/groq/responses.js +64 -0
  71. package/dist/src/providers/groq/types.d.ts +44 -0
  72. package/dist/src/providers/groq/types.js +3 -0
  73. package/dist/src/providers/groq/util.d.ts +15 -0
  74. package/dist/src/providers/groq/util.js +28 -0
  75. package/dist/src/providers/mcp/client.d.ts +8 -0
  76. package/dist/src/providers/mcp/client.js +60 -10
  77. package/dist/src/providers/mcp/types.d.ts +21 -0
  78. package/dist/src/providers/openai/chatkit-pool.d.ts +114 -0
  79. package/dist/src/providers/openai/chatkit-pool.js +548 -0
  80. package/dist/src/providers/openai/chatkit-types.d.ts +73 -0
  81. package/dist/src/providers/openai/chatkit-types.js +3 -0
  82. package/dist/src/providers/openai/chatkit.d.ts +76 -0
  83. package/dist/src/providers/openai/chatkit.js +879 -0
  84. package/dist/src/providers/openai/codex-sdk.d.ts +109 -0
  85. package/dist/src/providers/openai/codex-sdk.js +346 -0
  86. package/dist/src/providers/openai/defaults.d.ts +2 -0
  87. package/dist/src/providers/openai/defaults.js +10 -4
  88. package/dist/src/providers/registry.js +48 -9
  89. package/dist/src/providers/responses/types.d.ts +1 -1
  90. package/dist/src/providers/sagemaker.d.ts +2 -2
  91. package/dist/src/providers/webSearchUtils.d.ts +17 -0
  92. package/dist/src/providers/webSearchUtils.js +169 -0
  93. package/dist/src/providers/xai/chat.d.ts +61 -0
  94. package/dist/src/providers/xai/chat.js +68 -3
  95. package/dist/src/providers/xai/responses.d.ts +189 -0
  96. package/dist/src/providers/xai/responses.js +268 -0
  97. package/dist/src/redteam/constants/plugins.d.ts +1 -1
  98. package/dist/src/redteam/constants/plugins.js +1 -1
  99. package/dist/src/redteam/constants/strategies.d.ts +1 -1
  100. package/dist/src/redteam/constants/strategies.js +1 -0
  101. package/dist/src/redteam/plugins/vlguard.d.ts +53 -4
  102. package/dist/src/redteam/plugins/vlguard.js +362 -46
  103. package/dist/src/redteam/providers/constants.d.ts +2 -2
  104. package/dist/src/redteam/providers/constants.js +2 -2
  105. package/dist/src/redteam/providers/crescendo/index.d.ts +1 -1
  106. package/dist/src/redteam/providers/crescendo/index.js +5 -3
  107. package/dist/src/redteam/providers/hydra/index.js +1 -1
  108. package/dist/src/server/routes/modelAudit.js +4 -4
  109. package/dist/src/share.js +4 -2
  110. package/dist/src/telemetry.js +44 -8
  111. package/dist/src/types/env.d.ts +3 -0
  112. package/dist/src/types/env.js +1 -0
  113. package/dist/src/types/index.d.ts +896 -615
  114. package/dist/src/types/index.js +1 -0
  115. package/dist/src/types/providers.d.ts +1 -0
  116. package/dist/src/types/tracing.d.ts +3 -0
  117. package/dist/src/util/database.d.ts +6 -4
  118. package/dist/src/util/file.js +6 -4
  119. package/dist/src/util/modelAuditCliParser.d.ts +4 -4
  120. package/dist/src/util/xlsx.js +52 -26
  121. package/dist/src/validators/providers.d.ts +142 -122
  122. package/dist/src/validators/providers.js +4 -6
  123. package/dist/src/validators/redteam.d.ts +36 -28
  124. package/dist/src/validators/redteam.js +9 -3
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +28 -26
  127. package/dist/drizzle/CLAUDE.md +0 -65
  128. package/dist/src/app/assets/index-DifT6VGT.js +0 -51
  129. package/dist/src/app/assets/sync-Oo-W_Rbj.js +0 -1
  130. package/dist/src/app/assets/vendor-mui-x-C2xF-yiO.js +0 -45
  131. package/dist/src/providers/groq.js +0 -48
@@ -34,6 +34,7 @@ exports.TelemetryEventSchema = zod_1.z.object({
34
34
  properties: zod_1.z.record(zod_1.z.union([zod_1.z.string(), zod_1.z.number(), zod_1.z.boolean(), zod_1.z.array(zod_1.z.string())])),
35
35
  });
36
36
  let posthogClient = null;
37
+ let isShuttingDown = false;
37
38
  function getPostHogClient() {
38
39
  if ((0, envars_1.getEnvBool)('PROMPTFOO_DISABLE_TELEMETRY') || (0, envars_1.getEnvBool)('IS_TESTING')) {
39
40
  return null;
@@ -43,6 +44,12 @@ function getPostHogClient() {
43
44
  posthogClient = new posthog_node_1.PostHog(build_1.POSTHOG_KEY, {
44
45
  host: constants_1.EVENTS_ENDPOINT,
45
46
  fetch: index_1.fetchWithProxy,
47
+ // Disable automatic flush interval to prevent keeping the event loop alive.
48
+ // Without this, PostHog's internal setInterval keeps the Node.js event loop
49
+ // alive indefinitely, causing processes that import promptfoo to hang.
50
+ // Events are still sent immediately via explicit flush() calls after each capture.
51
+ // See: https://github.com/promptfoo/promptfoo/issues/5893
52
+ flushInterval: 0,
46
53
  });
47
54
  }
48
55
  catch {
@@ -58,7 +65,7 @@ class Telemetry {
58
65
  this.id = (0, accounts_1.getUserId)();
59
66
  this.email = (0, accounts_1.getUserEmail)();
60
67
  this.identify().then(() => {
61
- // pass
68
+ // Intentionally empty - fire and forget
62
69
  });
63
70
  }
64
71
  async identify() {
@@ -144,14 +151,22 @@ class Telemetry {
144
151
  });
145
152
  }
146
153
  async shutdown() {
154
+ // Guard against multiple shutdown calls (from beforeExit + explicit shutdown in main.ts)
155
+ if (isShuttingDown) {
156
+ return;
157
+ }
147
158
  const client = getPostHogClient();
148
- if (client) {
149
- try {
150
- await client.shutdown();
151
- }
152
- catch (error) {
153
- logger_1.default.debug(`PostHog shutdown error: ${error}`);
154
- }
159
+ if (!client) {
160
+ // No client to shut down - don't set the flag so future shutdowns work
161
+ // if telemetry becomes enabled (e.g., in test harnesses)
162
+ return;
163
+ }
164
+ isShuttingDown = true;
165
+ try {
166
+ await client.shutdown();
167
+ }
168
+ catch (error) {
169
+ logger_1.default.debug(`PostHog shutdown error: ${error}`);
155
170
  }
156
171
  }
157
172
  /**
@@ -177,5 +192,26 @@ class Telemetry {
177
192
  }
178
193
  exports.Telemetry = Telemetry;
179
194
  const telemetry = new Telemetry();
195
+ // Use Symbol.for to ensure the same symbol across module reloads (e.g., in Jest tests).
196
+ // This prevents MaxListenersExceededWarning when tests use jest.resetModules().
197
+ const TELEMETRY_INSTANCE_KEY = Symbol.for('promptfoo.telemetry.instance');
198
+ const SHUTDOWN_HANDLER_KEY = Symbol.for('promptfoo.telemetry.shutdownHandler');
199
+ // Store telemetry instance on process so the beforeExit handler can access the current instance
200
+ process[TELEMETRY_INSTANCE_KEY] = telemetry;
201
+ // Register cleanup handler only once across all module reloads.
202
+ // This is a safety net to ensure PostHog client is properly shut down when the process exits.
203
+ // The primary fix is disabling PostHog's internal flush timer (flushInterval: 0) so it
204
+ // doesn't keep the event loop alive. See: https://github.com/promptfoo/promptfoo/issues/5893
205
+ if (!process[SHUTDOWN_HANDLER_KEY]) {
206
+ process[SHUTDOWN_HANDLER_KEY] = true;
207
+ process.once('beforeExit', () => {
208
+ const instance = process[TELEMETRY_INSTANCE_KEY];
209
+ if (instance) {
210
+ instance.shutdown().catch(() => {
211
+ // Silently ignore - logger may be unavailable during shutdown
212
+ });
213
+ }
214
+ });
215
+ }
180
216
  exports.default = telemetry;
181
217
  //# sourceMappingURL=telemetry.js.map
@@ -67,6 +67,7 @@ export declare const ProviderEnvOverridesSchema: z.ZodObject<{
67
67
  OPENAI_API_KEY: z.ZodOptional<z.ZodString>;
68
68
  OPENAI_BASE_URL: z.ZodOptional<z.ZodString>;
69
69
  OPENAI_ORGANIZATION: z.ZodOptional<z.ZodString>;
70
+ CODEX_API_KEY: z.ZodOptional<z.ZodString>;
70
71
  PALM_API_HOST: z.ZodOptional<z.ZodString>;
71
72
  PALM_API_KEY: z.ZodOptional<z.ZodString>;
72
73
  PORTKEY_API_KEY: z.ZodOptional<z.ZodString>;
@@ -173,6 +174,7 @@ export declare const ProviderEnvOverridesSchema: z.ZodObject<{
173
174
  OPENAI_API_KEY?: string | undefined;
174
175
  OPENAI_BASE_URL?: string | undefined;
175
176
  OPENAI_ORGANIZATION?: string | undefined;
177
+ CODEX_API_KEY?: string | undefined;
176
178
  PALM_API_HOST?: string | undefined;
177
179
  PALM_API_KEY?: string | undefined;
178
180
  PORTKEY_API_KEY?: string | undefined;
@@ -279,6 +281,7 @@ export declare const ProviderEnvOverridesSchema: z.ZodObject<{
279
281
  OPENAI_API_KEY?: string | undefined;
280
282
  OPENAI_BASE_URL?: string | undefined;
281
283
  OPENAI_ORGANIZATION?: string | undefined;
284
+ CODEX_API_KEY?: string | undefined;
282
285
  PALM_API_HOST?: string | undefined;
283
286
  PALM_API_KEY?: string | undefined;
284
287
  PORTKEY_API_KEY?: string | undefined;
@@ -70,6 +70,7 @@ exports.ProviderEnvOverridesSchema = zod_1.z.object({
70
70
  OPENAI_API_KEY: zod_1.z.string().optional(),
71
71
  OPENAI_BASE_URL: zod_1.z.string().optional(),
72
72
  OPENAI_ORGANIZATION: zod_1.z.string().optional(),
73
+ CODEX_API_KEY: zod_1.z.string().optional(),
73
74
  PALM_API_HOST: zod_1.z.string().optional(),
74
75
  PALM_API_KEY: zod_1.z.string().optional(),
75
76
  PORTKEY_API_KEY: zod_1.z.string().optional(),