oh-my-codex 0.21.37 → 0.21.39

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 (46) hide show
  1. package/Cargo.lock +6 -6
  2. package/Cargo.toml +1 -1
  3. package/dist/cli/__tests__/doctor-warning-copy.test.js +53 -0
  4. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  5. package/dist/cli/__tests__/index.test.js +2 -2
  6. package/dist/cli/__tests__/index.test.js.map +1 -1
  7. package/dist/cli/__tests__/launch-fallback.test.js +55 -4
  8. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  9. package/dist/cli/__tests__/session-search-help.test.js +2 -2
  10. package/dist/cli/__tests__/session-search-help.test.js.map +1 -1
  11. package/dist/cli/__tests__/setup-install-mode.test.js +122 -0
  12. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  13. package/dist/cli/__tests__/setup-refresh.test.js +2 -2
  14. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  15. package/dist/cli/__tests__/team.test.js +17 -12
  16. package/dist/cli/__tests__/team.test.js.map +1 -1
  17. package/dist/cli/index.d.ts.map +1 -1
  18. package/dist/cli/index.js +3 -1
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/config/__tests__/models.test.js +2 -1
  21. package/dist/config/__tests__/models.test.js.map +1 -1
  22. package/dist/config/generator.d.ts.map +1 -1
  23. package/dist/config/generator.js +25 -4
  24. package/dist/config/generator.js.map +1 -1
  25. package/dist/config/models.d.ts +1 -1
  26. package/dist/config/models.d.ts.map +1 -1
  27. package/dist/config/models.js +1 -1
  28. package/dist/config/models.js.map +1 -1
  29. package/dist/scripts/__tests__/run-test-files.test.js +192 -2
  30. package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
  31. package/dist/scripts/run-test-files.js +33 -14
  32. package/dist/scripts/run-test-files.js.map +1 -1
  33. package/dist/team/__tests__/runtime.test.js +32 -4
  34. package/dist/team/__tests__/runtime.test.js.map +1 -1
  35. package/dist/team/__tests__/state-root.test.js +5 -5
  36. package/dist/team/__tests__/state-root.test.js.map +1 -1
  37. package/dist/vscode/__tests__/index.test.js +82 -20
  38. package/dist/vscode/__tests__/index.test.js.map +1 -1
  39. package/dist/vscode/index.d.ts +2 -0
  40. package/dist/vscode/index.d.ts.map +1 -1
  41. package/dist/vscode/index.js +3 -3
  42. package/dist/vscode/index.js.map +1 -1
  43. package/package.json +1 -1
  44. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  45. package/src/scripts/__tests__/run-test-files.test.ts +193 -2
  46. package/src/scripts/run-test-files.ts +31 -14
@@ -1,6 +1,6 @@
1
1
  import { describe, it } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
- import { chmod, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
3
+ import { chmod, mkdir, mkdtemp, readFile, realpath, rm, writeFile } from 'node:fs/promises';
4
4
  import { dirname, join } from 'node:path';
5
5
  import { tmpdir } from 'node:os';
6
6
  import { spawnSync } from 'node:child_process';
@@ -64,7 +64,7 @@ describe('omx session help', () => {
64
64
  }
65
65
  });
66
66
  it('recovers a verified-dead pointer with deterministic JSON and human output', async () => {
67
- const cwd = await mkdtemp(join(tmpdir(), 'omx-session-pointer-cli-'));
67
+ const cwd = await realpath(await mkdtemp(join(tmpdir(), 'omx-session-pointer-cli-')));
68
68
  try {
69
69
  const stateRoot = join(cwd, '.omx', 'state');
70
70
  const pointerPath = join(stateRoot, 'session.json');
@@ -1 +1 @@
1
- {"version":3,"file":"session-search-help.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/session-search-help.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,SAAS,MAAM,CAAC,GAAW,EAAE,IAAc,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG;IAC/E,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACvD,OAAO,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;QACpD,GAAG;QACH,QAAQ,EAAE,OAAO;QACjB,GAAG;KACJ,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACnD,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,WAAW,EAAE,kCAAkC,EAAE,OAAO,CAAC,CAAC;YAC1E,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,wBAAwB,CAAC,EAAE,uBAAuB,EAAE,OAAO,CAAC,CAAC;YAC5F,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,wBAAwB,CAAC,EAAE,OAAO,CAAC,CAAC;YAErF,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,oFAAoF,CAAC,CAAC;YACpH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,kFAAkF,CAAC,CAAC;YAClH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,gGAAgG,CAAC,CAAC;YAEhI,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;YAC9E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;YACtE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;YAGzD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,sCAAsC,CAAC,CAAC;YACtE,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;YAC9E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;YAEjE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YACvF,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;YAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAiD,CAAC;YAChG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;YAClE,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,wBAAwB,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;YAE5F,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC5F,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,eAAe,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;YAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAA2D,CAAC;YAC9G,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QACxD,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;YACpD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;gBACjC,UAAU,EAAE,gBAAgB;gBAC5B,UAAU,EAAE,0BAA0B;gBACtC,GAAG;gBACH,UAAU,EAAE,SAAS;gBACrB,GAAG,EAAE,OAAO;aACb,CAAC,CAAC;YACH,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,SAAS,CAAC,OAAO,EAAE;gBACvB,qBAAqB;gBACrB,gCAAgC;gBAChC,+CAA+C;gBAC/C,0DAA0D;gBAC1D,+EAA+E;gBAC/E,sFAAsF;aACvF,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACvB,MAAM,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC;YAE5D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;YAChF,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAQzC,CAAC;YACF,MAAM,CAAC,SAAS,CAAC;gBACf,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,EAAE;gBACD,MAAM,EAAE,WAAW;gBACnB,WAAW;gBACX,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,yFAAyF;gBACjG,SAAS,EAAE,gBAAgB;aAC5B,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;YAE1E,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;YACrE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAC5B,gBAAgB;gBAChB,YAAY,WAAW,EAAE;gBACzB,cAAc;gBACd,eAAe;gBACf,6CAA6C;gBAC7C,EAAE;aACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"session-search-help.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/session-search-help.test.ts"],"names":[],"mappings":"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"}
@@ -5317,4 +5317,126 @@ describe("persisted merge policy lifecycle", () => {
5317
5317
  }
5318
5318
  });
5319
5319
  });
5320
+ describe("issue 3918 plugin hook trust self-heal", () => {
5321
+ it("repairs stale and removes obsolete OMX plugin hook trust entries after cache rebuild", async () => {
5322
+ const wd = await mkdtemp(join(tmpdir(), "omx-setup-plugin-hook-trust-3918-"));
5323
+ try {
5324
+ await withIsolatedUserHome(wd, async (codexHomeDir) => {
5325
+ await withTempCwd(wd, async () => {
5326
+ await setup({ scope: "user", installMode: "plugin" });
5327
+ const configPath = join(codexHomeDir, "config.toml");
5328
+ const packagedMarketplace = await resolvePackagedOmxMarketplace(packageRoot);
5329
+ assert.ok(packagedMarketplace);
5330
+ const cache = await materializePackagedOmxPluginCache(codexHomeDir, packagedMarketplace);
5331
+ assert.ok(cache.cacheDir);
5332
+ const pluginHooksPath = join(cache.cacheDir, "hooks", "hooks.json");
5333
+ const initialPluginHooks = await readFile(pluginHooksPath, "utf-8");
5334
+ const staleKey = "oh-my-codex@oh-my-codex-local:hooks/hooks.json:post_compact:0:0";
5335
+ const obsoleteKey = "oh-my-codex@oh-my-codex-local:hooks/hooks.json:removed_event:0:0";
5336
+ const previousTrustedHash = `sha256:${createHash("sha256").update(initialPluginHooks).digest("hex")}`;
5337
+ await writeFile(configPath, [
5338
+ (await readFile(configPath, "utf-8")).trimEnd(),
5339
+ "",
5340
+ "# OMX-owned Codex hook trust state",
5341
+ `[hooks.state.${JSON.stringify(staleKey)}]`,
5342
+ `trusted_hash = ${JSON.stringify(previousTrustedHash)}`,
5343
+ "# End OMX-owned Codex hook trust state",
5344
+ "",
5345
+ `[hooks.state.${JSON.stringify(obsoleteKey)}]`,
5346
+ `trusted_hash = ${JSON.stringify(previousTrustedHash)}`,
5347
+ "",
5348
+ ].join("\n"));
5349
+ const mutatedHooks = JSON.parse(initialPluginHooks);
5350
+ mutatedHooks.hooks.PostCompact[0].hooks[0].command += " --cache-rebuild-probe";
5351
+ await writeFile(pluginHooksPath, `${JSON.stringify(mutatedHooks, null, 2)}\n`);
5352
+ await setup({
5353
+ scope: "user",
5354
+ installMode: "plugin",
5355
+ repairPluginCache: true,
5356
+ pluginAgentsMdPrompt: async () => false,
5357
+ });
5358
+ const repairedConfig = await readFile(configPath, "utf-8");
5359
+ assert.doesNotMatch(repairedConfig, /oh-my-codex@oh-my-codex-local:hooks\/hooks\.json:/);
5360
+ assert.equal(await readFile(pluginHooksPath, "utf-8"), initialPluginHooks);
5361
+ });
5362
+ });
5363
+ }
5364
+ finally {
5365
+ await rm(wd, { recursive: true, force: true });
5366
+ }
5367
+ });
5368
+ it("keeps third-party and noncanonical plugin hook trust fail-closed", async () => {
5369
+ const wd = await mkdtemp(join(tmpdir(), "omx-setup-foreign-plugin-hook-trust-3918-"));
5370
+ try {
5371
+ await withIsolatedUserHome(wd, async (codexHomeDir) => {
5372
+ await withTempCwd(wd, async () => {
5373
+ await setup({ scope: "user", installMode: "plugin" });
5374
+ const configPath = join(codexHomeDir, "config.toml");
5375
+ const config = [
5376
+ (await readFile(configPath, "utf-8")).trimEnd(),
5377
+ "",
5378
+ "# OMX-owned Codex hook trust state",
5379
+ '[hooks.state."third-party@marketplace:hooks/hooks.json:post_compact:0:0"]',
5380
+ 'trusted_hash = "sha256:third-party"',
5381
+ "# End OMX-owned Codex hook trust state",
5382
+ "",
5383
+ ].join("\n");
5384
+ await writeFile(configPath, config);
5385
+ await assert.rejects(setup({ scope: "user", installMode: "plugin" }), (error) => typeof error === "object" &&
5386
+ error !== null &&
5387
+ "code" in error &&
5388
+ error.code === "managed_trust_key_conflict");
5389
+ assert.equal(await readFile(configPath, "utf-8"), config);
5390
+ const malformedOmxConfig = (await readFile(configPath, "utf-8")).replace('[hooks.state."third-party@marketplace:hooks/hooks.json:post_compact:0:0"]\ntrusted_hash = "sha256:third-party"', [
5391
+ '[hooks.state."oh-my-codex@oh-my-codex-local:hooks/hooks.json:post_compact:0:0"]',
5392
+ `trusted_hash = ${JSON.stringify(`sha256:${"2".repeat(64)}`)}`,
5393
+ "enabled = false",
5394
+ ].join("\n"));
5395
+ assert.doesNotMatch(malformedOmxConfig, /third-party@marketplace/);
5396
+ assert.match(malformedOmxConfig, /enabled = false/);
5397
+ await writeFile(configPath, malformedOmxConfig);
5398
+ await assert.rejects(setup({ scope: "user", installMode: "plugin" }), (error) => typeof error === "object" &&
5399
+ error !== null &&
5400
+ "code" in error &&
5401
+ error.code === "managed_trust_key_conflict");
5402
+ assert.equal(await readFile(configPath, "utf-8"), malformedOmxConfig);
5403
+ });
5404
+ });
5405
+ }
5406
+ finally {
5407
+ await rm(wd, { recursive: true, force: true });
5408
+ }
5409
+ });
5410
+ it("switches between plugin and legacy setup with stale plugin trust present", async () => {
5411
+ const wd = await mkdtemp(join(tmpdir(), "omx-setup-plugin-hook-trust-switch-3918-"));
5412
+ try {
5413
+ await withIsolatedUserHome(wd, async (codexHomeDir) => {
5414
+ await withTempCwd(wd, async () => {
5415
+ await setup({ scope: "user", installMode: "plugin" });
5416
+ const configPath = join(codexHomeDir, "config.toml");
5417
+ const key = "oh-my-codex@oh-my-codex-local:hooks/hooks.json:post_compact:0:0";
5418
+ const staleHash = `sha256:${"1".repeat(64)}`;
5419
+ await writeFile(configPath, [
5420
+ (await readFile(configPath, "utf-8")).trimEnd(),
5421
+ "",
5422
+ "# OMX-owned Codex hook trust state",
5423
+ `[hooks.state.${JSON.stringify(key)}]`,
5424
+ `trusted_hash = ${JSON.stringify(staleHash)}`,
5425
+ "# End OMX-owned Codex hook trust state",
5426
+ "",
5427
+ ].join("\n"));
5428
+ await setup({ scope: "user", installMode: "legacy" });
5429
+ assert.doesNotMatch(await readFile(configPath, "utf-8"), /oh-my-codex@oh-my-codex-local:hooks\/hooks\.json:/);
5430
+ assert.equal(existsSync(join(codexHomeDir, "hooks.json")), true);
5431
+ await setup({ scope: "user", installMode: "plugin" });
5432
+ assert.doesNotMatch(await readFile(configPath, "utf-8"), /oh-my-codex@oh-my-codex-local:hooks\/hooks\.json:/);
5433
+ assert.equal(existsSync(join(codexHomeDir, "hooks.json")), false);
5434
+ });
5435
+ });
5436
+ }
5437
+ finally {
5438
+ await rm(wd, { recursive: true, force: true });
5439
+ }
5440
+ });
5441
+ });
5320
5442
  //# sourceMappingURL=setup-install-mode.test.js.map