oh-my-codex 0.21.30 → 0.21.32

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.
@@ -0,0 +1,382 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { mkdtemp, mkdir, readFile, realpath, rm, symlink, writeFile, lstat } from 'node:fs/promises';
4
+ import { existsSync } from 'node:fs';
5
+ import { join, posix, win32 } from 'node:path';
6
+ import { tmpdir } from 'node:os';
7
+ import { backupRelativePath, setup } from '../setup.js';
8
+ function setMockHome(home) {
9
+ const previousHome = process.env.HOME;
10
+ const previousCodexHome = process.env.CODEX_HOME;
11
+ process.env.HOME = home;
12
+ process.env.CODEX_HOME = join(home, '.codex');
13
+ return () => {
14
+ if (typeof previousHome === 'string')
15
+ process.env.HOME = previousHome;
16
+ else
17
+ delete process.env.HOME;
18
+ if (typeof previousCodexHome === 'string')
19
+ process.env.CODEX_HOME = previousCodexHome;
20
+ else
21
+ delete process.env.CODEX_HOME;
22
+ };
23
+ }
24
+ async function withRepo(run) {
25
+ const parent = await mkdtemp(join(tmpdir(), 'omx-setup-symlink-'));
26
+ const repo = join(parent, 'repo');
27
+ await mkdir(repo);
28
+ const restoreHome = setMockHome(join(parent, 'home'));
29
+ const previousCwd = process.cwd();
30
+ try {
31
+ process.chdir(repo);
32
+ await run(repo, parent);
33
+ }
34
+ finally {
35
+ process.chdir(previousCwd);
36
+ restoreHome();
37
+ await rm(parent, { recursive: true, force: true });
38
+ }
39
+ }
40
+ describe('omx setup symlink destinations', () => {
41
+ it('refuses a symlinked project .gitignore and leaves the target untouched', async () => {
42
+ await withRepo(async (repo, parent) => {
43
+ const victim = join(parent, 'victim.txt');
44
+ await writeFile(victim, 'ORIGINAL-SECRET-CONTENT\n');
45
+ await symlink('../victim.txt', join(repo, '.gitignore'));
46
+ // setup resolves the project root from process.cwd(), which is canonical (macOS /var -> /private/var).
47
+ const gitignorePath = join(await realpath(repo), '.gitignore');
48
+ await assert.rejects(setup({ scope: 'project' }), (err) => {
49
+ const msg = err?.message || '';
50
+ return (msg.includes('Refusing to install through symlink') &&
51
+ msg.includes(gitignorePath) &&
52
+ msg.includes('Either remove the symlink'));
53
+ });
54
+ assert.equal(await readFile(victim, 'utf8'), 'ORIGINAL-SECRET-CONTENT\n');
55
+ });
56
+ });
57
+ it('refuses a symlinked prompt destination and leaves the target untouched', async () => {
58
+ await withRepo(async (repo, parent) => {
59
+ await mkdir(join(repo, '.codex', 'prompts'), { recursive: true });
60
+ const victim = join(parent, 'victim-prompt.txt');
61
+ await writeFile(victim, 'ORIGINAL-PROMPT-CONTENT\n');
62
+ const analystPath = join(repo, '.codex', 'prompts', 'analyst.md');
63
+ await symlink('../../../victim-prompt.txt', analystPath);
64
+ const reportedAnalystPath = join(await realpath(repo), '.codex', 'prompts', 'analyst.md');
65
+ await assert.rejects(setup({ scope: 'project' }), (err) => {
66
+ const msg = err?.message || '';
67
+ return (msg.includes('Refusing to install through symlink') &&
68
+ msg.includes(reportedAnalystPath) &&
69
+ msg.includes('Either remove the symlink'));
70
+ });
71
+ assert.equal(await readFile(victim, 'utf8'), 'ORIGINAL-PROMPT-CONTENT\n');
72
+ });
73
+ });
74
+ it('rejects a symlinked ancestor directory (.codex)', async () => {
75
+ await withRepo(async (repo, parent) => {
76
+ const targetDir = join(parent, 'external-codex');
77
+ await mkdir(targetDir);
78
+ const victim = join(targetDir, 'secret.txt');
79
+ await writeFile(victim, 'EXTERNAL-SECRET\n');
80
+ // Create .codex as a symlink to external directory
81
+ await symlink(targetDir, join(repo, '.codex'));
82
+ await assert.rejects(setup({ scope: 'project' }), (err) => {
83
+ const msg = err?.message || '';
84
+ return ((msg.includes('Refusing to install through symlink') || msg.includes('Refusing native hook transaction')) &&
85
+ msg.includes('symlink') &&
86
+ (msg.includes('Either remove the symlink') || msg.includes('is a symbolic link')));
87
+ });
88
+ assert.equal(await readFile(victim, 'utf8'), 'EXTERNAL-SECRET\n');
89
+ });
90
+ });
91
+ it('rejects a symlinked auth directory', async () => {
92
+ await withRepo(async (repo, parent) => {
93
+ const targetDir = join(parent, 'external-auth');
94
+ await mkdir(targetDir);
95
+ const victim = join(targetDir, 'token.txt');
96
+ await writeFile(victim, 'SECRET-TOKEN\n');
97
+ // Create .omx as a symlink to external directory
98
+ await symlink(targetDir, join(repo, '.omx'));
99
+ await assert.rejects(setup({ scope: 'project' }), (err) => {
100
+ const msg = err?.message || '';
101
+ return (msg.includes('Refusing to install through symlink') &&
102
+ msg.includes('.omx') &&
103
+ msg.includes('Either remove the symlink'));
104
+ });
105
+ assert.equal(await readFile(victim, 'utf8'), 'SECRET-TOKEN\n');
106
+ });
107
+ });
108
+ it('rejects a symlinked state directory that setup manages', async () => {
109
+ await withRepo(async (repo, parent) => {
110
+ const targetDir = join(parent, 'external-state');
111
+ await mkdir(targetDir);
112
+ const victim = join(targetDir, 'installed-skills.json');
113
+ await writeFile(victim, '{"version": 1}\n');
114
+ // Create .omx/state as a symlink to external directory, which setup writes to for installed-skills.json
115
+ await mkdir(join(repo, '.omx'), { recursive: true });
116
+ await symlink(targetDir, join(repo, '.omx', 'state'));
117
+ await assert.rejects(setup({ scope: 'project' }), (err) => {
118
+ const msg = err?.message || '';
119
+ return (msg.includes('Refusing to install through symlink') &&
120
+ msg.includes('.omx') &&
121
+ msg.includes('Either remove the symlink'));
122
+ });
123
+ assert.equal(await readFile(victim, 'utf8'), '{"version": 1}\n');
124
+ });
125
+ });
126
+ it('rejects a symlinked .omx directory even when hud-config.json would already exist', async () => {
127
+ await withRepo(async (repo, parent) => {
128
+ const targetDir = join(parent, 'external-omx');
129
+ await mkdir(targetDir);
130
+ // Create hud-config.json in the target so that the old code would skip validation
131
+ await mkdir(join(targetDir), { recursive: true });
132
+ await writeFile(join(targetDir, 'hud-config.json'), '{"preset": "focused"}\n');
133
+ // Create .omx as a symlink to external directory
134
+ await symlink(targetDir, join(repo, '.omx'));
135
+ await assert.rejects(setup({ scope: 'project' }), (err) => {
136
+ const msg = err?.message || '';
137
+ return (msg.includes('Refusing to install through symlink') &&
138
+ msg.includes('.omx') &&
139
+ msg.includes('Either remove the symlink'));
140
+ });
141
+ });
142
+ });
143
+ it('rejects a symlinked .omx/backups when backing up a managed file', async () => {
144
+ await withRepo(async (repo, parent) => {
145
+ const targetDir = join(parent, 'external-backups');
146
+ await mkdir(targetDir);
147
+ const victim = join(targetDir, 'secret-backup.txt');
148
+ // Create .omx/backups as a symlink to external directory
149
+ await mkdir(join(repo, '.omx'), { recursive: true });
150
+ await symlink(targetDir, join(repo, '.omx', 'backups'));
151
+ // Create an existing .gitignore to trigger the backup code path
152
+ await writeFile(join(repo, '.gitignore'), 'original-gitignore\n');
153
+ await assert.rejects(setup({ scope: 'project' }), (err) => {
154
+ const msg = err?.message || '';
155
+ return (msg.includes('Refusing to install through symlink') &&
156
+ msg.includes('backups') &&
157
+ msg.includes('Either remove the symlink'));
158
+ });
159
+ // Verify nothing was written to the victim directory
160
+ assert.equal(existsSync(victim), false, 'Backup should not be written outside the scope');
161
+ });
162
+ });
163
+ it('succeeds when scope root is under a symlinked parent (like /tmp on macOS) while still rejecting symlinks inside the managed tree', async () => {
164
+ // Regression test for issue #3887: On macOS, /tmp is a symlink to /private/tmp,
165
+ // so the setup should not reject paths just because they're under /tmp,
166
+ // but should still reject symlinks inside the managed scope (.codex, .omx, etc).
167
+ await withRepo(async (repo, parent) => {
168
+ // The repo is already under /tmp (symlinked parent), so this tests that
169
+ // OS-level symlinks are not rejected.
170
+ // Create a file to install
171
+ const skillDir = join(repo, '.codex', 'skills', 'test-skill');
172
+ await mkdir(skillDir, { recursive: true });
173
+ await writeFile(join(skillDir, 'SKILL.md'), '# Test Skill\n\nA test skill');
174
+ // Setup should succeed even though the scope root is under the /tmp symlink
175
+ await assert.doesNotReject(setup({ scope: 'project' }), 'Setup should succeed when scope root is under /tmp (symlinked OS directory)');
176
+ // Verify the setup actually completed
177
+ assert(existsSync(join(repo, '.gitignore')), '.gitignore should be created');
178
+ assert(existsSync(join(repo, '.codex', 'config.toml')), 'config.toml should be created');
179
+ });
180
+ });
181
+ it('succeeds with custom CODEX_HOME and validates files within CODEX_HOME scope', async () => {
182
+ // Regression test for #3889: When CODEX_HOME is set to a custom directory,
183
+ // setup should validate all user-scope files within the CODEX_HOME boundary.
184
+ // This tests that CODEX_HOME is used as the managed authority root.
185
+ await withRepo(async (repo, parent) => {
186
+ // Create a custom CODEX_HOME directory
187
+ const customCodexHome = join(parent, 'custom-codex');
188
+ await mkdir(customCodexHome, { recursive: true });
189
+ // Override CODEX_HOME to the custom location
190
+ const previousCodexHome = process.env.CODEX_HOME;
191
+ process.env.CODEX_HOME = customCodexHome;
192
+ try {
193
+ // Setup with user scope should succeed and use customCodexHome as authority root
194
+ await assert.doesNotReject(setup({ scope: 'user' }), 'Setup should succeed with custom CODEX_HOME');
195
+ // Verify config was created in custom CODEX_HOME
196
+ assert(existsSync(join(customCodexHome, 'config.toml')), 'config.toml should be created in custom CODEX_HOME');
197
+ }
198
+ finally {
199
+ if (typeof previousCodexHome === 'string') {
200
+ process.env.CODEX_HOME = previousCodexHome;
201
+ }
202
+ else {
203
+ delete process.env.CODEX_HOME;
204
+ }
205
+ }
206
+ });
207
+ });
208
+ it('canonicalizes paths to handle OS-level symlinks in parent directories of non-existent CODEX_HOME (#4352912480)', async () => {
209
+ // Codex finding #4352912480: When CODEX_HOME doesn't exist yet (fresh install),
210
+ // we need to canonicalize through the deepest existing ancestor to handle OS-level
211
+ // symlinks like /tmp -> /private/tmp on macOS.
212
+ await withRepo(async (repo, parent) => {
213
+ // Create a CODEX_HOME that doesn't exist yet
214
+ const nonExistentCodexHome = join(parent, 'fresh', 'codex', 'home');
215
+ process.env.CODEX_HOME = nonExistentCodexHome;
216
+ try {
217
+ // Setup should succeed even though CODEX_HOME path doesn't exist
218
+ // (it will be created with intermediate directories)
219
+ await assert.doesNotReject(setup({ scope: 'user' }), 'Setup should succeed with non-existent CODEX_HOME path');
220
+ // Verify config was created at the correct location
221
+ assert(existsSync(join(nonExistentCodexHome, 'config.toml')), 'config.toml should be created in non-existent CODEX_HOME path');
222
+ }
223
+ finally {
224
+ // Restore original CODEX_HOME
225
+ const previousCodexHome = process.env.HOME ? join(process.env.HOME, '.codex') : undefined;
226
+ if (typeof previousCodexHome === 'string') {
227
+ process.env.CODEX_HOME = previousCodexHome;
228
+ }
229
+ else {
230
+ delete process.env.CODEX_HOME;
231
+ }
232
+ }
233
+ });
234
+ });
235
+ it('validates project .codex directories against PROJECT root, not CODEX_HOME (#4352912487)', async () => {
236
+ // Codex finding #4352912487: Project scope directories like .codex/.omx should be
237
+ // validated against the PROJECT root, not CODEX_HOME. This ensures project-specific
238
+ // files stay within project boundaries.
239
+ await withRepo(async (repo, parent) => {
240
+ // Create a separate CODEX_HOME outside the repo
241
+ const externalCodexHome = join(parent, 'external-codex');
242
+ await mkdir(externalCodexHome, { recursive: true });
243
+ process.env.CODEX_HOME = externalCodexHome;
244
+ try {
245
+ // Setup with project scope should validate project .codex against repo root
246
+ await assert.doesNotReject(setup({ scope: 'project' }), 'Setup should succeed and validate project .codex against project root');
247
+ // Verify .codex was created inside the repo (project scope), not in external CODEX_HOME
248
+ assert(existsSync(join(repo, '.codex', 'config.toml')), '.codex/config.toml should be created in project repo, not in external CODEX_HOME');
249
+ // Verify config was NOT created in external CODEX_HOME for project scope
250
+ assert(!existsSync(join(externalCodexHome, 'config.toml')), 'config.toml should NOT be created in external CODEX_HOME for project scope');
251
+ }
252
+ finally {
253
+ const previousCodexHome = process.env.HOME ? join(process.env.HOME, '.codex') : undefined;
254
+ if (typeof previousCodexHome === 'string') {
255
+ process.env.CODEX_HOME = previousCodexHome;
256
+ }
257
+ else {
258
+ delete process.env.CODEX_HOME;
259
+ }
260
+ }
261
+ });
262
+ });
263
+ it('validates OMX_ROOT directories against the override root (#4352912502)', async () => {
264
+ // Codex finding #4352912502: When OMX_ROOT environment variable is set,
265
+ // directories under it should be validated against that override root, not homedir().
266
+ await withRepo(async (repo, parent) => {
267
+ // Create a separate OMX_ROOT override
268
+ const omxRootOverride = join(parent, 'custom-omx-root');
269
+ await mkdir(omxRootOverride, { recursive: true });
270
+ const previousOmxRoot = process.env.OMX_ROOT;
271
+ process.env.OMX_ROOT = omxRootOverride;
272
+ try {
273
+ // Setup with user scope should use OMX_ROOT as the validation root for ~/.omx-like paths
274
+ await assert.doesNotReject(setup({ scope: 'user' }), 'Setup should succeed and use OMX_ROOT as validation root');
275
+ // When OMX_ROOT is set, .omx directory should be created under OMX_ROOT
276
+ // (or at least paths should validate against it)
277
+ const setupSucceeded = existsSync(join(process.env.HOME || '', '.codex', 'config.toml')) ||
278
+ existsSync(join(omxRootOverride, '.omx', 'backups')) ||
279
+ existsSync(join(omxRootOverride, 'backups'));
280
+ assert(setupSucceeded, 'Setup should have created files when OMX_ROOT is set');
281
+ }
282
+ finally {
283
+ if (typeof previousOmxRoot === 'string') {
284
+ process.env.OMX_ROOT = previousOmxRoot;
285
+ }
286
+ else {
287
+ delete process.env.OMX_ROOT;
288
+ }
289
+ }
290
+ });
291
+ });
292
+ it('sanitizes out-of-base and Windows cross-drive backup paths', () => {
293
+ // Same-drive targets keep their relative location under the backup root.
294
+ assert.equal(backupRelativePath('C:\\Users\\alice', 'C:\\Users\\alice\\.codex\\skills\\old', win32), '.codex\\skills\\old');
295
+ // Cross-drive: win32.relative returns an absolute path, which must not escape the backup root.
296
+ assert.equal(backupRelativePath('C:\\Users\\alice', 'D:\\codex\\skills\\old', win32), 'codex_skills_old');
297
+ assert.equal(backupRelativePath('/home/alice', '/opt/codex/skills/old', posix), 'opt_codex_skills_old');
298
+ assert.equal(backupRelativePath('/home/alice', '/home/alice', posix), 'home_alice');
299
+ assert.equal(backupRelativePath('/home/alice', '/home/alice/..data/x', posix), '..data/x');
300
+ });
301
+ it('rejects dangling symlinks in validation scope to prevent out-of-scope writes', async () => {
302
+ const wd = await mkdtemp(join(tmpdir(), 'omx-setup-dangling-symlink-'));
303
+ const previousCwd = process.cwd();
304
+ try {
305
+ process.chdir(wd);
306
+ // Create a project directory with a dangling symlink
307
+ await mkdir(join(wd, '.codex'), { recursive: true });
308
+ // Create a dangling symlink in the project
309
+ const symlinkPath = join(wd, '.gitignore-link');
310
+ // Create a symlink pointing to a non-existent target
311
+ await symlink(join(wd, '..', 'victim', '.gitignore'), symlinkPath);
312
+ // Verify it's a dangling symlink
313
+ assert.equal(existsSync(symlinkPath), false, 'dangling symlink should not be followable with existsSync');
314
+ const stats = await lstat(symlinkPath);
315
+ assert.equal(stats.isSymbolicLink(), true, 'path should be a symlink');
316
+ // Setup should succeed without following the dangling symlink
317
+ // The key is that the validation should detect the symlink and not try to follow it
318
+ const previousHome = process.env.HOME;
319
+ process.env.HOME = wd;
320
+ try {
321
+ // This should not throw and should not create files outside the scope
322
+ await setup({ scope: 'project', dryRun: true });
323
+ // The key test: the dangling symlink should not be followed or created as a real file
324
+ assert.equal(existsSync(join(wd, '..', 'victim')), false, 'target of dangling symlink should not be created');
325
+ }
326
+ finally {
327
+ if (typeof previousHome === 'string') {
328
+ process.env.HOME = previousHome;
329
+ }
330
+ else {
331
+ delete process.env.HOME;
332
+ }
333
+ }
334
+ }
335
+ finally {
336
+ process.chdir(previousCwd);
337
+ await rm(wd, { recursive: true, force: true });
338
+ }
339
+ });
340
+ it('handles symlinked HOME directory for scope validation (regression test for macOS /var symlink)', async () => {
341
+ // Regression test for the /var -> /private/var issue on macOS, which can also occur when
342
+ // HOME itself is accessed through a symlink. Create a symlinked home to test canonicalization.
343
+ const root = await mkdtemp(join(tmpdir(), 'omx-setup-symlinked-home-'));
344
+ const realHome = join(root, 'real-home');
345
+ const symlinkHome = join(root, 'symlinked-home');
346
+ const repo = join(symlinkHome, 'repo');
347
+ await mkdir(realHome);
348
+ await mkdir(join(realHome, 'repo'));
349
+ // Create a symlink to the real home directory
350
+ await symlink(realHome, symlinkHome);
351
+ const previousHome = process.env.HOME;
352
+ const previousCodexHome = process.env.CODEX_HOME;
353
+ const previousCwd = process.cwd();
354
+ try {
355
+ // Set HOME to the symlinked path (non-canonical)
356
+ process.env.HOME = symlinkHome;
357
+ process.env.CODEX_HOME = join(symlinkHome, '.codex');
358
+ process.chdir(repo);
359
+ // This should succeed without throwing "outside managed scope" error
360
+ // The key is that scope validation must handle symlinks in the HOME path
361
+ await setup({ scope: 'user' });
362
+ assert(existsSync(join(symlinkHome, '.codex')), 'CODEX_HOME should be created');
363
+ }
364
+ finally {
365
+ process.chdir(previousCwd);
366
+ if (typeof previousHome === 'string') {
367
+ process.env.HOME = previousHome;
368
+ }
369
+ else {
370
+ delete process.env.HOME;
371
+ }
372
+ if (typeof previousCodexHome === 'string') {
373
+ process.env.CODEX_HOME = previousCodexHome;
374
+ }
375
+ else {
376
+ delete process.env.CODEX_HOME;
377
+ }
378
+ await rm(root, { recursive: true, force: true });
379
+ }
380
+ });
381
+ });
382
+ //# sourceMappingURL=setup-symlink-destinations.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-symlink-destinations.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/setup-symlink-destinations.test.ts"],"names":[],"mappings":"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"}
@@ -120,6 +120,12 @@ type WindowsNativeHookShimReferenceDecision = "not_referenced" | "referenced" |
120
120
  * and agent payloads remain inert metadata.
121
121
  */
122
122
  export declare function decideWindowsNativeHookShimReference(finalHooksContent: string | null, shimPath: string): WindowsNativeHookShimReferenceDecision;
123
+ /**
124
+ * Relative location of `targetPath` inside a backup root. Falls back to a sanitized
125
+ * absolute path when the target is outside `baseRoot`, including Windows cross-drive
126
+ * targets where `relative()` returns an absolute path instead of a `..` path.
127
+ */
128
+ export declare function backupRelativePath(baseRoot: string, targetPath: string, pathApi?: Pick<typeof import("path"), "relative" | "isAbsolute">): string;
123
129
  export declare function parseSkillFrontmatter(content: string, filePath?: string): SkillFrontmatterMetadata;
124
130
  export declare function validateSkillFile(skillMdPath: string): Promise<void>;
125
131
  export declare function resolveScopeDirectories(scope: SetupScope, projectRoot: string): ScopeDirectories;
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}