@lesliechan721/agent-skill-eval 0.1.0-beta.2 → 0.1.0-beta.21

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 (104) hide show
  1. package/dist/bin.js +167 -39
  2. package/dist/bin.js.map +1 -1
  3. package/dist/codex-eval-app-server.d.ts +199 -0
  4. package/dist/codex-eval-app-server.js +1372 -0
  5. package/dist/codex-eval-app-server.js.map +1 -0
  6. package/dist/codex-eval-cases.d.ts +43 -0
  7. package/dist/codex-eval-cases.js +327 -0
  8. package/dist/codex-eval-cases.js.map +1 -0
  9. package/dist/codex-eval-isolation.d.ts +79 -0
  10. package/dist/codex-eval-isolation.js +420 -0
  11. package/dist/codex-eval-isolation.js.map +1 -0
  12. package/dist/codex-eval-process-tree.d.ts +41 -0
  13. package/dist/codex-eval-process-tree.js +858 -0
  14. package/dist/codex-eval-process-tree.js.map +1 -0
  15. package/dist/codex-eval-runtime-config.d.ts +43 -0
  16. package/dist/codex-eval-runtime-config.js +607 -0
  17. package/dist/codex-eval-runtime-config.js.map +1 -0
  18. package/dist/codex-trigger-eval.d.ts +82 -0
  19. package/dist/codex-trigger-eval.js +790 -0
  20. package/dist/codex-trigger-eval.js.map +1 -0
  21. package/dist/codex-workflow.d.ts +191 -0
  22. package/dist/codex-workflow.js +1832 -0
  23. package/dist/codex-workflow.js.map +1 -0
  24. package/dist/credentials.d.ts +5 -0
  25. package/dist/credentials.js +30 -0
  26. package/dist/credentials.js.map +1 -0
  27. package/dist/custom-process.d.ts +60 -0
  28. package/dist/custom-process.js +424 -0
  29. package/dist/custom-process.js.map +1 -0
  30. package/dist/eval-audit.d.ts +38 -0
  31. package/dist/eval-audit.js +71 -0
  32. package/dist/eval-audit.js.map +1 -0
  33. package/dist/eval-file.d.ts +9 -0
  34. package/dist/eval-file.js +15 -0
  35. package/dist/eval-file.js.map +1 -0
  36. package/dist/eval-process-management.d.ts +22 -0
  37. package/dist/eval-process-management.js +90 -0
  38. package/dist/eval-process-management.js.map +1 -0
  39. package/dist/eval-result.d.ts +79 -0
  40. package/dist/eval-result.js +144 -0
  41. package/dist/eval-result.js.map +1 -0
  42. package/dist/eval-run.d.ts +27 -0
  43. package/dist/eval-run.js +564 -0
  44. package/dist/eval-run.js.map +1 -0
  45. package/dist/eval-spec.d.ts +57 -0
  46. package/dist/eval-spec.js +120 -0
  47. package/dist/eval-spec.js.map +1 -0
  48. package/dist/eval-suite-binding.d.ts +4 -0
  49. package/dist/eval-suite-binding.js +19 -0
  50. package/dist/eval-suite-binding.js.map +1 -0
  51. package/dist/index.d.ts +38 -9
  52. package/dist/index.js +20 -6
  53. package/dist/index.js.map +1 -1
  54. package/dist/json-schema.js +75 -5
  55. package/dist/json-schema.js.map +1 -1
  56. package/dist/output-path.js +2 -2
  57. package/dist/process-tree.d.ts +21 -1
  58. package/dist/process-tree.js +797 -158
  59. package/dist/process-tree.js.map +1 -1
  60. package/dist/process.d.ts +2 -2
  61. package/dist/process.js +99 -34
  62. package/dist/process.js.map +1 -1
  63. package/dist/provider-doctor.d.ts +46 -0
  64. package/dist/provider-doctor.js +120 -0
  65. package/dist/provider-doctor.js.map +1 -0
  66. package/dist/providers.d.ts +83 -0
  67. package/dist/providers.js +632 -0
  68. package/dist/providers.js.map +1 -0
  69. package/dist/run-paths.d.ts +8 -0
  70. package/dist/run-paths.js +71 -0
  71. package/dist/run-paths.js.map +1 -0
  72. package/dist/runtime-skill.d.ts +6 -0
  73. package/dist/runtime-skill.js +87 -3
  74. package/dist/runtime-skill.js.map +1 -1
  75. package/dist/schemas/digests.json +3 -3
  76. package/dist/schemas/eval-audit.schema.json +64 -0
  77. package/dist/schemas/eval-result.schema.json +232 -0
  78. package/dist/schemas/eval-spec.schema.json +109 -0
  79. package/dist/schemas.d.ts +1 -3
  80. package/dist/schemas.js +22 -20
  81. package/dist/schemas.js.map +1 -1
  82. package/dist/selected-cases.d.ts +30 -0
  83. package/dist/selected-cases.js +388 -0
  84. package/dist/selected-cases.js.map +1 -0
  85. package/dist/types.d.ts +2 -34
  86. package/dist/windows-job.d.ts +26 -0
  87. package/dist/windows-job.js +97 -0
  88. package/dist/windows-job.js.map +1 -0
  89. package/package.json +17 -3
  90. package/dist/bundle.d.ts +0 -93
  91. package/dist/bundle.js +0 -216
  92. package/dist/bundle.js.map +0 -1
  93. package/dist/capabilities.d.ts +0 -2
  94. package/dist/capabilities.js +0 -38
  95. package/dist/capabilities.js.map +0 -1
  96. package/dist/plan.d.ts +0 -79
  97. package/dist/plan.js +0 -285
  98. package/dist/plan.js.map +0 -1
  99. package/dist/run.d.ts +0 -2
  100. package/dist/run.js +0 -592
  101. package/dist/run.js.map +0 -1
  102. package/dist/schemas/aw-skill-eval-execution-plan.schema.json +0 -220
  103. package/dist/schemas/eval-run-bundle.schema.json +0 -408
  104. package/dist/schemas/eval-runtime-capabilities.schema.json +0 -85
@@ -0,0 +1,420 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { constants as fsConstants } from 'node:fs';
3
+ import { access } from 'node:fs/promises';
4
+ import path from 'node:path';
5
+ import { promisify } from 'node:util';
6
+ import fs from 'fs-extra';
7
+ const execFileAsync = promisify(execFile);
8
+ export const CODEX_EVAL_CREDENTIAL_CONFIG_LINES = [
9
+ 'cli_auth_credentials_store = "file"',
10
+ 'mcp_oauth_credentials_store = "file"',
11
+ 'features.secret_auth_storage = false',
12
+ ];
13
+ const CODEX_EVAL_CREDENTIAL_OVERRIDES = [
14
+ 'cli_auth_credentials_store="file"',
15
+ 'mcp_oauth_credentials_store="file"',
16
+ 'features.secret_auth_storage=false',
17
+ ];
18
+ const CODEX_EVAL_GIT_OVERRIDES = [
19
+ 'shell_environment_policy.set.GIT_CONFIG_NOSYSTEM="1"',
20
+ 'shell_environment_policy.set.GIT_TERMINAL_PROMPT="0"',
21
+ 'shell_environment_policy.set.GIT_OPTIONAL_LOCKS="0"',
22
+ ];
23
+ export const CODEX_EVAL_STRICT_OVERRIDES = [
24
+ 'skills.bundled.enabled=false',
25
+ 'orchestrator.skills.enabled=false',
26
+ 'orchestrator.mcp.enabled=false',
27
+ 'include_apps_instructions=false',
28
+ 'include_collaboration_mode_instructions=false',
29
+ 'features.apps=false',
30
+ 'features.plugins=false',
31
+ 'features.remote_plugin=false',
32
+ 'features.plugin_sharing=false',
33
+ 'features.tool_suggest=false',
34
+ 'features.skill_mcp_dependency_install=false',
35
+ ];
36
+ const REQUIRED_STRICT_FALSE_PATHS = [
37
+ 'features.secret_auth_storage',
38
+ ...CODEX_EVAL_STRICT_OVERRIDES.map((entry) => entry.slice(0, entry.indexOf('='))),
39
+ ];
40
+ const MACOS_MANAGED_PREFERENCE_KEYS = [
41
+ 'config_toml_base64',
42
+ 'requirements_toml_base64',
43
+ ];
44
+ function isRecord(value) {
45
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
46
+ }
47
+ function expectRecord(value, label) {
48
+ if (!isRecord(value)) {
49
+ throw new Error(`${label} must be an object.`);
50
+ }
51
+ return value;
52
+ }
53
+ function canonicalPath(value) {
54
+ try {
55
+ return fs.realpathSync(value);
56
+ }
57
+ catch {
58
+ return path.resolve(value);
59
+ }
60
+ }
61
+ function isPathInsideOrEqual(root, candidate) {
62
+ const relative = path.relative(canonicalPath(root), canonicalPath(candidate));
63
+ return relative === '' || (relative !== '..' &&
64
+ !relative.startsWith(`..${path.sep}`) &&
65
+ !path.isAbsolute(relative));
66
+ }
67
+ function valueAtPath(root, keyPath) {
68
+ let value = root;
69
+ for (const segment of keyPath.split('.')) {
70
+ if (!isRecord(value))
71
+ return undefined;
72
+ value = value[segment];
73
+ }
74
+ return value;
75
+ }
76
+ function systemCodexRoot(platform, sourceEnv) {
77
+ if (platform === 'win32') {
78
+ return path.join(sourceEnv.ProgramData ?? String.raw `C:\ProgramData`, 'OpenAI', 'Codex');
79
+ }
80
+ return '/etc/codex';
81
+ }
82
+ async function readMacManagedPreference(key) {
83
+ try {
84
+ await execFileAsync('/usr/bin/defaults', ['read', 'com.openai.codex', key], {
85
+ encoding: 'utf8',
86
+ timeout: 10_000,
87
+ });
88
+ return true;
89
+ }
90
+ catch (error) {
91
+ const row = error;
92
+ const message = `${row.message ?? ''}\n${row.stderr ?? ''}`;
93
+ if (/does not exist|domain\/default pair.*not found/iu.test(message)) {
94
+ return false;
95
+ }
96
+ throw new Error(`Unable to inspect the macOS managed Codex preference ${key}.`, { cause: error });
97
+ }
98
+ }
99
+ async function readMacUserKeychainSearchList() {
100
+ try {
101
+ const result = await execFileAsync('/usr/bin/security', ['list-keychains', '-d', 'user'], { encoding: 'utf8', timeout: 10_000 });
102
+ return result.stdout;
103
+ }
104
+ catch (error) {
105
+ throw new Error('Unable to inspect the macOS user keychain search list before Codex model eval.', { cause: error });
106
+ }
107
+ }
108
+ async function defaultResolveCodexEvalExecutable(options) {
109
+ const extensions = options.platform === 'win32' && path.extname(options.executable) === ''
110
+ ? (options.sourceEnv.PATHEXT ?? '.EXE;.CMD;.BAT;.COM').split(';')
111
+ : [''];
112
+ const candidates = path.isAbsolute(options.executable)
113
+ || options.executable.includes('/')
114
+ || options.executable.includes('\\')
115
+ ? [options.executable]
116
+ : (options.sourceEnv.PATH ?? '').split(path.delimiter).filter(Boolean).flatMap((directory) => extensions.map((extension) => path.join(directory, `${options.executable}${extension}`)));
117
+ for (const candidate of candidates) {
118
+ try {
119
+ await access(candidate, fsConstants.X_OK);
120
+ return path.resolve(candidate);
121
+ }
122
+ catch {
123
+ // Continue to the next PATH entry.
124
+ }
125
+ }
126
+ return null;
127
+ }
128
+ export async function resolveCodexEvalExecutable(options, resolver = defaultResolveCodexEvalExecutable) {
129
+ const resolved = await resolver(options);
130
+ return resolved === null ? null : canonicalPath(resolved);
131
+ }
132
+ function isCmuxCodexWrapper(executable, sourceEnv) {
133
+ const normalized = executable.replaceAll('\\', '/');
134
+ const configuredShim = sourceEnv.CMUX_CODEX_WRAPPER_SHIM;
135
+ return (/\/cmux-cli-shims\/(?:[^/]+\/)?codex$/u.test(normalized)
136
+ || /\/cmux-codex-wrapper$/u.test(normalized)
137
+ || (configuredShim !== undefined
138
+ && canonicalPath(executable) === canonicalPath(configuredShim)));
139
+ }
140
+ async function inspectCodexEvalKeychainRisk(options) {
141
+ const platform = options.platform ?? process.platform;
142
+ if (platform !== 'darwin') {
143
+ return {
144
+ inspection: { platform, status: 'not-applicable' },
145
+ reason: null,
146
+ };
147
+ }
148
+ const sourceEnv = options.sourceEnv ?? process.env;
149
+ const executable = options.codexBin ?? sourceEnv.AW_SKILL_EVAL_CODEX_BIN ?? 'codex';
150
+ const resolvedExecutable = await resolveCodexEvalExecutable({ executable, sourceEnv, platform }, options.resolveCodexExecutable);
151
+ if (resolvedExecutable === null) {
152
+ return {
153
+ inspection: { platform, status: 'unavailable' },
154
+ reason: 'codex-executable-unavailable',
155
+ };
156
+ }
157
+ if ((resolvedExecutable && isCmuxCodexWrapper(resolvedExecutable, sourceEnv))
158
+ || ((path.isAbsolute(executable) || executable.includes('/') || executable.includes('\\'))
159
+ && isCmuxCodexWrapper(path.resolve(executable), sourceEnv))) {
160
+ return {
161
+ inspection: { platform, status: 'blocked' },
162
+ reason: 'cmux-codex-wrapper',
163
+ };
164
+ }
165
+ try {
166
+ const searchList = await (options.readUserKeychainSearchList ?? readMacUserKeychainSearchList)();
167
+ const blocked = /accountsKeychainExport/iu.test(searchList);
168
+ return {
169
+ inspection: { platform, status: blocked ? 'blocked' : 'safe' },
170
+ reason: blocked ? 'accounts-keychain-export' : null,
171
+ };
172
+ }
173
+ catch {
174
+ return {
175
+ inspection: { platform, status: 'unavailable' },
176
+ reason: null,
177
+ };
178
+ }
179
+ }
180
+ export async function inspectCodexEvalKeychain(options = {}) {
181
+ return (await inspectCodexEvalKeychainRisk(options)).inspection;
182
+ }
183
+ export async function assertCodexEvalKeychainWrapperAbsent(options = {}) {
184
+ const { inspection, reason } = await inspectCodexEvalKeychainRisk(options);
185
+ if (inspection.status === 'unavailable') {
186
+ if (reason === 'codex-executable-unavailable') {
187
+ throw new Error('Unable to resolve the selected Codex executable before Codex model eval. ' +
188
+ 'Select the native Codex executable with AW_SKILL_EVAL_CODEX_BIN. No model process was started.');
189
+ }
190
+ throw new Error('Unable to inspect the macOS user keychain search list before Codex model eval.');
191
+ }
192
+ if (inspection.status === 'blocked') {
193
+ if (reason === 'cmux-codex-wrapper') {
194
+ throw new Error('Cannot start a Codex model eval through a cmux Codex shim or wrapper because ' +
195
+ 'its keychain behavior is not safe for an isolated eval process. Select the native ' +
196
+ 'Codex executable with AW_SKILL_EVAL_CODEX_BIN or run aw-skill-eval from an ordinary ' +
197
+ 'Terminal session. No model process was started.');
198
+ }
199
+ throw new Error('Cannot start a Codex model eval from a macOS wrapper that injects ' +
200
+ 'accountsKeychainExport into the user keychain search list. Run ' +
201
+ 'aw-skill-eval run with its required --audit input from an ordinary Terminal session.');
202
+ }
203
+ }
204
+ export function codexEvalConfigOverrides(isolation) {
205
+ return [
206
+ ...CODEX_EVAL_CREDENTIAL_OVERRIDES,
207
+ ...CODEX_EVAL_GIT_OVERRIDES,
208
+ ...(isolation === 'strict' ? CODEX_EVAL_STRICT_OVERRIDES : []),
209
+ ];
210
+ }
211
+ export function applyCodexEvalGitIsolation(env) {
212
+ return {
213
+ ...env,
214
+ GIT_CONFIG_NOSYSTEM: '1',
215
+ GIT_TERMINAL_PROMPT: '0',
216
+ GIT_OPTIONAL_LOCKS: '0',
217
+ };
218
+ }
219
+ export function codexEvalIsolationEvidence(options) {
220
+ return {
221
+ mode: options.mode,
222
+ isolated_home: true,
223
+ source_user_config_filtered: true,
224
+ credential_stores: {
225
+ cli_auth: 'file',
226
+ mcp_oauth: 'file',
227
+ secret_auth_storage: false,
228
+ },
229
+ strict_surfaces_disabled: options.mode === 'strict',
230
+ host_configuration: options.host ?? null,
231
+ runtime_probe: options.runtimeProbe ?? null,
232
+ };
233
+ }
234
+ export async function inspectCodexEvalHostIsolation(options = {}) {
235
+ const platform = options.platform ?? process.platform;
236
+ const sourceEnv = options.sourceEnv ?? process.env;
237
+ const systemRoot = systemCodexRoot(platform, sourceEnv);
238
+ const readSystemEntries = options.readSystemEntries ?? (async (root) => fs.readdir(root).catch((error) => {
239
+ if (error.code === 'ENOENT')
240
+ return [];
241
+ throw error;
242
+ }));
243
+ const systemEntries = await readSystemEntries(systemRoot);
244
+ if (systemEntries.length > 0) {
245
+ throw new Error(`Strict Codex eval is blocked because system configuration exists at ${systemRoot}.`);
246
+ }
247
+ const presentKeys = [];
248
+ if (platform === 'darwin') {
249
+ const readManagedPreference = options.readManagedPreference ?? readMacManagedPreference;
250
+ for (const key of MACOS_MANAGED_PREFERENCE_KEYS) {
251
+ if (await readManagedPreference(key))
252
+ presentKeys.push(key);
253
+ }
254
+ if (presentKeys.length > 0) {
255
+ throw new Error(`Strict Codex eval is blocked by macOS managed preference(s): ${presentKeys.join(', ')}.`);
256
+ }
257
+ }
258
+ return {
259
+ system_config_root: systemRoot,
260
+ system_config_present: false,
261
+ managed_preferences_checked: platform === 'darwin',
262
+ managed_preference_keys_present: [],
263
+ };
264
+ }
265
+ function validateConfigLayers(response, codexHome, workspaceRoot) {
266
+ if (!Array.isArray(response.layers)) {
267
+ throw new Error('Strict Codex eval config/read response is missing layers.');
268
+ }
269
+ const layerTypes = [];
270
+ const projectConfigPath = path.join(workspaceRoot, '.codex', 'config.toml');
271
+ const expectedProjectFolder = canonicalPath(path.dirname(projectConfigPath));
272
+ const projectConfigExpected = fs.pathExistsSync(projectConfigPath);
273
+ let projectConfigActive = false;
274
+ for (const [index, value] of response.layers.entries()) {
275
+ const layer = expectRecord(value, `config/read.layers[${index}]`);
276
+ const name = expectRecord(layer.name, `config/read.layers[${index}].name`);
277
+ const type = typeof name.type === 'string' ? name.type : '';
278
+ const config = expectRecord(layer.config, `config/read.layers[${index}].config`);
279
+ layerTypes.push(type);
280
+ if (type === 'system') {
281
+ if (Object.keys(config).length > 0) {
282
+ throw new Error('Strict Codex eval found non-empty system configuration.');
283
+ }
284
+ continue;
285
+ }
286
+ if (type === 'user') {
287
+ if (typeof name.file !== 'string' || !isPathInsideOrEqual(codexHome, name.file)) {
288
+ throw new Error('Strict Codex eval found a user config layer outside isolated CODEX_HOME.');
289
+ }
290
+ continue;
291
+ }
292
+ if (type === 'project') {
293
+ if (typeof layer.disabledReason === 'string' && layer.disabledReason.trim() !== '') {
294
+ throw new Error(`Strict Codex eval found a disabled project config layer: ${layer.disabledReason}`);
295
+ }
296
+ if (typeof name.dotCodexFolder !== 'string' ||
297
+ canonicalPath(name.dotCodexFolder) !== expectedProjectFolder) {
298
+ throw new Error('Strict Codex eval found an unexpected project config layer.');
299
+ }
300
+ projectConfigActive = true;
301
+ continue;
302
+ }
303
+ if (type === 'sessionFlags')
304
+ continue;
305
+ throw new Error(`Strict Codex eval found forbidden config layer ${JSON.stringify(type)}.`);
306
+ }
307
+ if (projectConfigExpected && !projectConfigActive) {
308
+ throw new Error('Strict Codex eval did not activate the workspace project config layer.');
309
+ }
310
+ return layerTypes;
311
+ }
312
+ function validateEffectiveConfig(response) {
313
+ const config = expectRecord(response.config, 'config/read.config');
314
+ if (config.cli_auth_credentials_store !== 'file') {
315
+ throw new Error('Strict Codex eval did not apply cli_auth_credentials_store=file.');
316
+ }
317
+ if (config.mcp_oauth_credentials_store !== 'file') {
318
+ throw new Error('Strict Codex eval did not apply mcp_oauth_credentials_store=file.');
319
+ }
320
+ if (valueAtPath(config, 'features.default_mode_request_user_input') !== true) {
321
+ throw new Error('Strict Codex eval did not enable features.default_mode_request_user_input.');
322
+ }
323
+ for (const keyPath of REQUIRED_STRICT_FALSE_PATHS) {
324
+ if (valueAtPath(config, keyPath) !== false) {
325
+ throw new Error(`Strict Codex eval did not disable ${keyPath}.`);
326
+ }
327
+ }
328
+ const mcpServers = config.mcp_servers;
329
+ if (mcpServers !== undefined &&
330
+ mcpServers !== null &&
331
+ (!isRecord(mcpServers) || Object.keys(mcpServers).length > 0)) {
332
+ throw new Error('Strict Codex eval found effective MCP server configuration.');
333
+ }
334
+ }
335
+ function validateRequirements(value) {
336
+ const response = expectRecord(value, 'configRequirements/read response');
337
+ if (response.requirements !== null) {
338
+ throw new Error('Strict Codex eval found managed configuration requirements.');
339
+ }
340
+ }
341
+ function validateSkills(value, workspaceRoot, allowedSkillRoots) {
342
+ const response = expectRecord(value, 'skills/list response');
343
+ if (!Array.isArray(response.data)) {
344
+ throw new Error('Strict Codex eval skills/list response is missing data.');
345
+ }
346
+ if (response.data.length !== 1) {
347
+ throw new Error('Strict Codex eval skills/list must return exactly one workspace entry.');
348
+ }
349
+ const expectedSkills = new Map(allowedSkillRoots.map((root) => [
350
+ canonicalPath(path.join(root, 'SKILL.md')),
351
+ { root, name: path.basename(root) },
352
+ ]));
353
+ const paths = [];
354
+ for (const [index, value] of response.data.entries()) {
355
+ const entry = expectRecord(value, `skills/list.data[${index}]`);
356
+ if (typeof entry.cwd !== 'string' ||
357
+ !isPathInsideOrEqual(workspaceRoot, entry.cwd) ||
358
+ !isPathInsideOrEqual(entry.cwd, workspaceRoot)) {
359
+ throw new Error('Strict Codex eval skills/list returned an unexpected workspace.');
360
+ }
361
+ if (!Array.isArray(entry.errors) || entry.errors.length > 0) {
362
+ throw new Error('Strict Codex eval found Skill discovery errors.');
363
+ }
364
+ if (!Array.isArray(entry.skills)) {
365
+ throw new Error('Strict Codex eval skills/list entry is missing skills.');
366
+ }
367
+ for (const [skillIndex, skillValue] of entry.skills.entries()) {
368
+ const skill = expectRecord(skillValue, `skills/list.data[${index}].skills[${skillIndex}]`);
369
+ if (typeof skill.path !== 'string') {
370
+ throw new Error(`Strict Codex eval found an invalid Skill path ${String(skill.path)}.`);
371
+ }
372
+ const normalizedPath = canonicalPath(skill.path);
373
+ const expected = expectedSkills.get(normalizedPath);
374
+ if (!expected || !isPathInsideOrEqual(expected.root, skill.path)) {
375
+ throw new Error(`Strict Codex eval found non-target Skill ${skill.path}.`);
376
+ }
377
+ if (skill.name !== expected.name ||
378
+ skill.enabled !== true) {
379
+ throw new Error(`Strict Codex eval found an invalid target Skill ${skill.path}.`);
380
+ }
381
+ paths.push(normalizedPath);
382
+ }
383
+ }
384
+ if (paths.length !== expectedSkills.size ||
385
+ new Set(paths).size !== expectedSkills.size) {
386
+ throw new Error(expectedSkills.size > 0
387
+ ? 'Strict Codex eval did not discover exactly the enabled participant Skills.'
388
+ : 'Strict Codex eval found a Skill in an empty baseline workspace.');
389
+ }
390
+ return paths.sort((left, right) => left.localeCompare(right));
391
+ }
392
+ function validateMcpServers(value) {
393
+ const response = expectRecord(value, 'mcpServerStatus/list response');
394
+ if (!Array.isArray(response.data) || response.data.length > 0) {
395
+ throw new Error('Strict Codex eval found an active MCP server.');
396
+ }
397
+ if (response.nextCursor !== undefined && response.nextCursor !== null) {
398
+ throw new Error('Strict Codex eval MCP inventory is unexpectedly paginated.');
399
+ }
400
+ }
401
+ export function validateCodexEvalRpcIsolation(options) {
402
+ const layers = validateCodexEvalConfigIsolation(options);
403
+ const skillPaths = validateSkills(options.skills, options.workspaceRoot, options.allowedSkillRoots);
404
+ validateMcpServers(options.mcpServers);
405
+ return {
406
+ config_layers: layers,
407
+ config_requirements_absent: true,
408
+ skill_paths: skillPaths,
409
+ mcp_server_count: 0,
410
+ strict_overrides_effective: true,
411
+ };
412
+ }
413
+ export function validateCodexEvalConfigIsolation(options) {
414
+ const config = expectRecord(options.config, 'config/read response');
415
+ const layers = validateConfigLayers(config, options.codexHome, options.workspaceRoot);
416
+ validateEffectiveConfig(config);
417
+ validateRequirements(options.requirements);
418
+ return layers;
419
+ }
420
+ //# sourceMappingURL=codex-eval-isolation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-eval-isolation.js","sourceRoot":"","sources":["../src/codex-eval-isolation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type ChildProcess } from 'node:child_process';
2
+ import { type ProcessTreeDependencies } from './process-tree.js';
3
+ export declare const CODEX_EVAL_PROCESS_TREE_ID_ENV = "AW_CODEX_EVAL_PROCESS_TREE_ID";
4
+ export declare const PROCESS_TREE_CLEANUP_UNCONFIRMED_PREFIX = "Could not confirm process-tree cleanup";
5
+ interface PosixProcessEntry {
6
+ ppid: number;
7
+ state: string;
8
+ startTime: string;
9
+ }
10
+ interface PosixProcessTreeDependencies {
11
+ readProcessTable?: (timeoutMs?: number) => Promise<Map<number, PosixProcessEntry>>;
12
+ readTaggedProcessTable?: (treeId: string, timeoutMs?: number) => Promise<Map<number, PosixProcessEntry>>;
13
+ kill?: (pid: number, signal: NodeJS.Signals | 0) => boolean;
14
+ execFile?: ProcessTreeDependencies['execFile'];
15
+ treeId?: string;
16
+ canUseProcessGroup?: () => boolean;
17
+ killDirectChild?: (signal: 'SIGTERM' | 'SIGKILL') => void;
18
+ allowRootIdentityDiscovery?: boolean;
19
+ }
20
+ export interface ChildProcessTreeMonitor {
21
+ terminate(): Promise<string[]>;
22
+ }
23
+ export declare function createDirectChildProcessMonitor(child: ChildProcess): ChildProcessTreeMonitor;
24
+ export declare function processTreeCleanupIsUnconfirmed(diagnostics: readonly string[]): boolean;
25
+ export declare function scrubProcessTreeId<T>(value: T, treeId: string): T;
26
+ export declare function terminatePosixProcessTree(rootPid: number, dependencies?: PosixProcessTreeDependencies): Promise<string[]>;
27
+ export declare function createPosixProcessTreeMonitor(rootPid: number, dependencies?: PosixProcessTreeDependencies): ChildProcessTreeMonitor;
28
+ export declare function releaseChildProcessHandles(child: ChildProcess): void;
29
+ export declare function terminateWindowsProcessTree(child: ChildProcess, options?: {
30
+ closeTimeoutMs?: number;
31
+ runTaskkill?: (pid: number) => Promise<void>;
32
+ }): Promise<string[]>;
33
+ export declare function createWindowsChildProcessTreeMonitor(child: ChildProcess, options?: Parameters<typeof terminateWindowsProcessTree>[1]): ChildProcessTreeMonitor;
34
+ export declare function terminateChildProcessTree(child: ChildProcess): Promise<string[]>;
35
+ export declare function createChildProcessTreeMonitor(child: ChildProcess, options?: {
36
+ treeId?: string;
37
+ }): ChildProcessTreeMonitor;
38
+ export declare function assertProcessTreeInspectionAvailable(options?: {
39
+ platform?: NodeJS.Platform;
40
+ }): Promise<void>;
41
+ export {};