codex-multi-auth 0.1.0 → 0.1.2
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/LICENSE +1 -1
- package/README.md +223 -98
- package/assets/readme-hero.svg +31 -31
- package/config/README.md +30 -87
- package/config/{opencode-legacy.json → codex-legacy.json} +571 -571
- package/config/{opencode-modern.json → codex-modern.json} +241 -239
- package/config/{minimal-opencode.json → minimal-codex.json} +15 -13
- package/config/schema/config.schema.json +21 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -20
- package/dist/index.js.map +1 -1
- package/dist/lib/accounts.d.ts +1 -1
- package/dist/lib/accounts.d.ts.map +1 -1
- package/dist/lib/auth/auth.d.ts +1 -1
- package/dist/lib/auth/auth.js +1 -1
- package/dist/lib/cli.d.ts +1 -1
- package/dist/lib/cli.js +4 -4
- package/dist/lib/cli.js.map +1 -1
- package/dist/lib/codex-manager/settings-hub.d.ts +6 -0
- package/dist/lib/codex-manager/settings-hub.d.ts.map +1 -0
- package/dist/lib/codex-manager/settings-hub.js +1786 -0
- package/dist/lib/codex-manager/settings-hub.js.map +1 -0
- package/dist/lib/codex-manager.d.ts.map +1 -1
- package/dist/lib/codex-manager.js +5 -1637
- package/dist/lib/codex-manager.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +20 -11
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/context-overflow.d.ts +1 -1
- package/dist/lib/context-overflow.js +11 -11
- package/dist/lib/oauth-success.html +1 -1
- package/dist/lib/prompts/codex-host-bridge.d.ts +19 -0
- package/dist/lib/prompts/codex-host-bridge.d.ts.map +1 -0
- package/dist/lib/prompts/{codex-opencode-bridge.js → codex-host-bridge.js} +143 -143
- package/dist/lib/prompts/codex-host-bridge.js.map +1 -0
- package/dist/lib/prompts/codex.d.ts +2 -2
- package/dist/lib/prompts/codex.d.ts.map +1 -1
- package/dist/lib/prompts/codex.js +3 -3
- package/dist/lib/prompts/host-codex-prompt.d.ts +25 -0
- package/dist/lib/prompts/host-codex-prompt.d.ts.map +1 -0
- package/dist/lib/prompts/{opencode-codex.js → host-codex-prompt.js} +136 -47
- package/dist/lib/prompts/host-codex-prompt.js.map +1 -0
- package/dist/lib/recovery/storage.d.ts +2 -2
- package/dist/lib/recovery/storage.js +2 -2
- package/dist/lib/recovery/types.d.ts +1 -1
- package/dist/lib/recovery/types.js +1 -1
- package/dist/lib/recovery.d.ts +1 -1
- package/dist/lib/recovery.d.ts.map +1 -1
- package/dist/lib/recovery.js +1 -4
- package/dist/lib/recovery.js.map +1 -1
- package/dist/lib/request/fetch-helpers.d.ts +3 -3
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
- package/dist/lib/request/fetch-helpers.js +6 -2
- package/dist/lib/request/fetch-helpers.js.map +1 -1
- package/dist/lib/request/helpers/input-utils.d.ts +2 -2
- package/dist/lib/request/helpers/input-utils.d.ts.map +1 -1
- package/dist/lib/request/helpers/input-utils.js +14 -14
- package/dist/lib/request/helpers/input-utils.js.map +1 -1
- package/dist/lib/request/helpers/model-map.d.ts +2 -2
- package/dist/lib/request/helpers/model-map.js +2 -2
- package/dist/lib/request/request-transformer.d.ts +12 -12
- package/dist/lib/request/request-transformer.d.ts.map +1 -1
- package/dist/lib/request/request-transformer.js +23 -24
- package/dist/lib/request/request-transformer.js.map +1 -1
- package/dist/lib/runtime-paths.d.ts +4 -4
- package/dist/lib/runtime-paths.d.ts.map +1 -1
- package/dist/lib/runtime-paths.js +57 -13
- package/dist/lib/runtime-paths.js.map +1 -1
- package/dist/lib/storage/paths.d.ts +11 -0
- package/dist/lib/storage/paths.d.ts.map +1 -1
- package/dist/lib/storage/paths.js +167 -5
- package/dist/lib/storage/paths.js.map +1 -1
- package/dist/lib/storage.d.ts +1 -0
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +290 -81
- package/dist/lib/storage.js.map +1 -1
- package/dist/lib/tools/hashline-tools.d.ts +1 -1
- package/dist/lib/tools/hashline-tools.d.ts.map +1 -1
- package/dist/lib/tools/hashline-tools.js +1 -1
- package/dist/lib/tools/hashline-tools.js.map +1 -1
- package/dist/lib/types.d.ts +1 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/ui/copy.d.ts +6 -6
- package/dist/lib/ui/copy.js +6 -6
- package/dist/lib/ui/copy.js.map +1 -1
- package/node_modules/@codex-ai/plugin/dist/index.d.ts +2 -0
- package/node_modules/@codex-ai/plugin/dist/index.js +2 -0
- package/node_modules/@codex-ai/plugin/dist/tool.d.ts +42 -0
- package/node_modules/@codex-ai/plugin/dist/tool.js +29 -0
- package/node_modules/@codex-ai/plugin/package.json +9 -0
- package/package.json +30 -16
- package/scripts/audit-dev-allowlist.js +128 -128
- package/scripts/bench-format/{opencode.mjs → codex-host.mjs} +206 -205
- package/scripts/bench-format/hashline-v2.mjs +642 -642
- package/scripts/bench-format/models.mjs +111 -105
- package/scripts/bench-format/render.mjs +496 -496
- package/scripts/bench-format/stats.mjs +54 -54
- package/scripts/bench-format/tasks.mjs +151 -151
- package/scripts/benchmark-edit-formats.mjs +1162 -1161
- package/scripts/benchmark-render-dashboard.mjs +49 -49
- package/scripts/codex.js +40 -2
- package/scripts/copy-oauth-success.js +37 -37
- package/scripts/install-codex-auth-utils.js +49 -0
- package/scripts/{install-opencode-codex-auth.js → install-codex-auth.js} +220 -193
- package/scripts/repo-hygiene.js +320 -0
- package/scripts/test-all-models.sh +7 -7
- package/scripts/test-model-matrix.js +475 -423
- package/scripts/validate-model-map.sh +7 -7
- package/vendor/codex-ai-plugin/dist/index.d.ts +2 -0
- package/vendor/codex-ai-plugin/dist/index.js +2 -0
- package/vendor/codex-ai-plugin/dist/tool.d.ts +42 -0
- package/vendor/codex-ai-plugin/dist/tool.js +29 -0
- package/vendor/codex-ai-plugin/package.json +9 -0
- package/vendor/codex-ai-sdk/dist/index.d.ts +4 -0
- package/vendor/codex-ai-sdk/dist/index.js +2 -0
- package/vendor/codex-ai-sdk/package.json +8 -0
- package/assets/opencode-logo-ornate-dark.svg +0 -18
- package/dist/lib/prompts/codex-opencode-bridge.d.ts +0 -19
- package/dist/lib/prompts/codex-opencode-bridge.d.ts.map +0 -1
- package/dist/lib/prompts/codex-opencode-bridge.js.map +0 -1
- package/dist/lib/prompts/opencode-codex.d.ts +0 -25
- package/dist/lib/prompts/opencode-codex.d.ts.map +0 -1
- package/dist/lib/prompts/opencode-codex.js.map +0 -1
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
import { homedir } from "node:os";
|
|
2
|
-
import { join } from "node:path";
|
|
2
|
+
import { join, win32 } from "node:path";
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
|
+
function firstNonEmpty(values) {
|
|
5
|
+
for (const value of values) {
|
|
6
|
+
const trimmed = (value ?? "").trim();
|
|
7
|
+
if (trimmed.length > 0) {
|
|
8
|
+
return trimmed;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
function getResolvedUserHomeDir() {
|
|
14
|
+
if (process.platform === "win32") {
|
|
15
|
+
const homeDrive = (process.env.HOMEDRIVE ?? "").trim();
|
|
16
|
+
const homePath = (process.env.HOMEPATH ?? "").trim();
|
|
17
|
+
const drivePathHome = homeDrive.length > 0 && homePath.length > 0
|
|
18
|
+
? win32.resolve(`${homeDrive}\\`, homePath)
|
|
19
|
+
: undefined;
|
|
20
|
+
return (firstNonEmpty([
|
|
21
|
+
process.env.USERPROFILE,
|
|
22
|
+
process.env.HOME,
|
|
23
|
+
drivePathHome,
|
|
24
|
+
homedir(),
|
|
25
|
+
]) ?? homedir());
|
|
26
|
+
}
|
|
27
|
+
return firstNonEmpty([process.env.HOME, homedir()]) ?? homedir();
|
|
28
|
+
}
|
|
4
29
|
/**
|
|
5
30
|
* Resolve the Codex home directory path used by the CLI, honoring an environment override or a sensible default.
|
|
6
31
|
*
|
|
@@ -10,7 +35,7 @@ import { existsSync } from "node:fs";
|
|
|
10
35
|
*/
|
|
11
36
|
export function getCodexHomeDir() {
|
|
12
37
|
const fromEnv = (process.env.CODEX_HOME ?? "").trim();
|
|
13
|
-
return fromEnv.length > 0 ? fromEnv : join(
|
|
38
|
+
return fromEnv.length > 0 ? fromEnv : join(getResolvedUserHomeDir(), ".codex");
|
|
14
39
|
}
|
|
15
40
|
/**
|
|
16
41
|
* Returns a deduplicated list of path strings preserving the first occurrence order.
|
|
@@ -57,6 +82,7 @@ function deduplicatePaths(paths) {
|
|
|
57
82
|
function hasStorageSignals(dir) {
|
|
58
83
|
const signals = [
|
|
59
84
|
"openai-codex-accounts.json",
|
|
85
|
+
"codex-accounts.json",
|
|
60
86
|
"settings.json",
|
|
61
87
|
"config.json",
|
|
62
88
|
"dashboard-settings.json",
|
|
@@ -68,6 +94,15 @@ function hasStorageSignals(dir) {
|
|
|
68
94
|
}
|
|
69
95
|
return existsSync(join(dir, "projects"));
|
|
70
96
|
}
|
|
97
|
+
function hasAccountsStorage(dir) {
|
|
98
|
+
const accountFiles = ["openai-codex-accounts.json", "codex-accounts.json"];
|
|
99
|
+
for (const fileName of accountFiles) {
|
|
100
|
+
if (existsSync(join(dir, fileName))) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
71
106
|
/**
|
|
72
107
|
* Builds a deduplicated list of fallback candidate directories that may contain Codex runtime data.
|
|
73
108
|
*
|
|
@@ -79,10 +114,11 @@ function hasStorageSignals(dir) {
|
|
|
79
114
|
* @returns An array of unique, trimmed directory paths to probe for Codex home data, in prioritized order.
|
|
80
115
|
*/
|
|
81
116
|
function getFallbackCodexHomeDirs() {
|
|
117
|
+
const userHome = getResolvedUserHomeDir();
|
|
82
118
|
return deduplicatePaths([
|
|
83
119
|
getCodexHomeDir(),
|
|
84
|
-
join(
|
|
85
|
-
join(
|
|
120
|
+
join(userHome, "DevTools", "config", "codex"),
|
|
121
|
+
join(userHome, ".codex"),
|
|
86
122
|
]);
|
|
87
123
|
}
|
|
88
124
|
/**
|
|
@@ -104,13 +140,21 @@ export function getCodexMultiAuthDir() {
|
|
|
104
140
|
return fromEnv;
|
|
105
141
|
}
|
|
106
142
|
const primary = join(getCodexHomeDir(), "multi-auth");
|
|
107
|
-
if (hasStorageSignals(primary)) {
|
|
108
|
-
return primary;
|
|
109
|
-
}
|
|
110
143
|
const fallbackCandidates = deduplicatePaths([
|
|
111
144
|
...getFallbackCodexHomeDirs().map((dir) => join(dir, "multi-auth")),
|
|
112
|
-
|
|
145
|
+
getLegacyCodexDir(),
|
|
113
146
|
]);
|
|
147
|
+
const orderedCandidates = deduplicatePaths([primary, ...fallbackCandidates]);
|
|
148
|
+
// Prefer candidates that actually contain account storage. This prevents
|
|
149
|
+
// accidentally switching to a fresh empty directory that only has settings files.
|
|
150
|
+
for (const candidate of orderedCandidates) {
|
|
151
|
+
if (hasAccountsStorage(candidate)) {
|
|
152
|
+
return candidate;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (hasStorageSignals(primary)) {
|
|
156
|
+
return primary;
|
|
157
|
+
}
|
|
114
158
|
for (const candidate of fallbackCandidates) {
|
|
115
159
|
if (candidate === primary)
|
|
116
160
|
continue;
|
|
@@ -148,17 +192,17 @@ export function getCodexLogDir() {
|
|
|
148
192
|
return join(getCodexMultiAuthDir(), "logs");
|
|
149
193
|
}
|
|
150
194
|
/**
|
|
151
|
-
* Resolve the legacy
|
|
195
|
+
* Resolve the legacy host home directory path.
|
|
152
196
|
*
|
|
153
|
-
* The returned path points to the per-user legacy
|
|
197
|
+
* The returned path points to the per-user legacy folder (typically `<home>/.codex`).
|
|
154
198
|
*
|
|
155
199
|
* Concurrency: no atomicity guarantees — callers must handle concurrent filesystem access.
|
|
156
200
|
* Windows: path comparisons may be case-insensitive on Windows filesystems.
|
|
157
201
|
* Security: do not embed or log secrets/tokens in this path; redact any tokens before logging or telemetry.
|
|
158
202
|
*
|
|
159
|
-
* @returns The filesystem path for the legacy
|
|
203
|
+
* @returns The filesystem path for the legacy directory (e.g. `/home/alice/.codex`).
|
|
160
204
|
*/
|
|
161
|
-
export function
|
|
162
|
-
return join(
|
|
205
|
+
export function getLegacyCodexDir() {
|
|
206
|
+
return join(getResolvedUserHomeDir(), ".codex");
|
|
163
207
|
}
|
|
164
208
|
//# sourceMappingURL=runtime-paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-paths.js","sourceRoot":"","sources":["../../lib/runtime-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-paths.js","sourceRoot":"","sources":["../../lib/runtime-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,17 @@ export declare function getProjectStorageKey(projectPath: string): string;
|
|
|
45
45
|
* @returns The absolute path to the project's storage directory under the global Codex multi-auth projects directory.
|
|
46
46
|
*/
|
|
47
47
|
export declare function getProjectGlobalConfigDir(projectPath: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* Resolve a stable project identity root for account storage keying.
|
|
50
|
+
*
|
|
51
|
+
* For standard repositories, this returns `projectRoot` unchanged.
|
|
52
|
+
* For linked Git worktrees, this resolves to the shared repository root so
|
|
53
|
+
* multiple worktrees use the same per-project account key.
|
|
54
|
+
*
|
|
55
|
+
* @param projectRoot - Detected project root path (typically from findProjectRoot)
|
|
56
|
+
* @returns Identity root used for per-project storage key generation
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveProjectStorageIdentityRoot(projectRoot: string): string;
|
|
48
59
|
export declare function isProjectDirectory(dir: string): boolean;
|
|
49
60
|
export declare function findProjectRoot(startDir: string): string | null;
|
|
50
61
|
export declare function resolvePath(filePath: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../lib/storage/paths.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../lib/storage/paths.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+IH;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AAwCD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA0C7E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB/D;AAcD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoBpD"}
|
|
@@ -2,14 +2,124 @@
|
|
|
2
2
|
* Path resolution utilities for account storage.
|
|
3
3
|
* Extracted from storage.ts to reduce module size.
|
|
4
4
|
*/
|
|
5
|
-
import { existsSync } from "node:fs";
|
|
5
|
+
import { existsSync, readFileSync, realpathSync, statSync } from "node:fs";
|
|
6
6
|
import { createHash } from "node:crypto";
|
|
7
|
-
import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
7
|
+
import { basename, dirname, isAbsolute, join, relative, resolve, win32 } from "node:path";
|
|
8
8
|
import { homedir, tmpdir } from "node:os";
|
|
9
9
|
import { getCodexMultiAuthDir } from "../runtime-paths.js";
|
|
10
10
|
const PROJECT_MARKERS = [".git", "package.json", "Cargo.toml", "go.mod", "pyproject.toml", ".codex"];
|
|
11
11
|
const PROJECTS_DIR = "projects";
|
|
12
12
|
const PROJECT_KEY_HASH_LENGTH = 12;
|
|
13
|
+
function parseGitDirPointer(pointerContent) {
|
|
14
|
+
const firstLine = pointerContent.split(/\r?\n/, 1)[0]?.trim();
|
|
15
|
+
if (!firstLine)
|
|
16
|
+
return null;
|
|
17
|
+
const match = /^gitdir:\s*(.+)$/i.exec(firstLine);
|
|
18
|
+
if (!match?.[1])
|
|
19
|
+
return null;
|
|
20
|
+
const value = match[1].trim();
|
|
21
|
+
return value.length > 0 ? value : null;
|
|
22
|
+
}
|
|
23
|
+
function normalizePathDelimiters(pathValue) {
|
|
24
|
+
return pathValue.replace(/\\/g, "/");
|
|
25
|
+
}
|
|
26
|
+
function isWindowsRootedPath(pathValue) {
|
|
27
|
+
return /^[A-Za-z]:[\\/]/.test(pathValue) || /^\\\\[^\\]/.test(pathValue) || /^\/\/[^/]/.test(pathValue);
|
|
28
|
+
}
|
|
29
|
+
function resolveGitPath(basePath, pointerValue) {
|
|
30
|
+
const trimmedPointer = pointerValue.trim();
|
|
31
|
+
if (!trimmedPointer) {
|
|
32
|
+
return basePath;
|
|
33
|
+
}
|
|
34
|
+
if (isWindowsRootedPath(basePath) || isWindowsRootedPath(trimmedPointer)) {
|
|
35
|
+
const windowsBase = win32.normalize(basePath.replace(/\//g, "\\"));
|
|
36
|
+
const windowsPointer = win32.normalize(trimmedPointer.replace(/\//g, "\\"));
|
|
37
|
+
const windowsResolved = win32.isAbsolute(windowsPointer)
|
|
38
|
+
? windowsPointer
|
|
39
|
+
: win32.resolve(windowsBase, windowsPointer);
|
|
40
|
+
return process.platform === "win32"
|
|
41
|
+
? windowsResolved
|
|
42
|
+
: normalizePathDelimiters(windowsResolved);
|
|
43
|
+
}
|
|
44
|
+
const normalizedPointer = normalizePathDelimiters(trimmedPointer);
|
|
45
|
+
return isAbsolute(normalizedPointer)
|
|
46
|
+
? normalizedPointer
|
|
47
|
+
: resolve(basePath, normalizedPointer);
|
|
48
|
+
}
|
|
49
|
+
function readGitCommonDir(gitDirPath) {
|
|
50
|
+
const commonDirFile = join(gitDirPath, "commondir");
|
|
51
|
+
if (!existsSync(commonDirFile)) {
|
|
52
|
+
return gitDirPath;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const raw = readFileSync(commonDirFile, "utf-8").trim();
|
|
56
|
+
if (!raw)
|
|
57
|
+
return gitDirPath;
|
|
58
|
+
return resolveGitPath(gitDirPath, raw);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return gitDirPath;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function isWorktreeGitDirPath(gitDirPath) {
|
|
65
|
+
const normalized = normalizePathDelimiters(gitDirPath).toLowerCase();
|
|
66
|
+
return normalized.includes("/.git/worktrees/");
|
|
67
|
+
}
|
|
68
|
+
function normalizePathForIdentityCheck(pathValue) {
|
|
69
|
+
const normalizedDelimiters = normalizePathDelimiters(pathValue.trim());
|
|
70
|
+
if (!normalizedDelimiters) {
|
|
71
|
+
return normalizedDelimiters;
|
|
72
|
+
}
|
|
73
|
+
if (isWindowsRootedPath(normalizedDelimiters)) {
|
|
74
|
+
return win32.normalize(normalizedDelimiters.replace(/\//g, "\\")).toLowerCase();
|
|
75
|
+
}
|
|
76
|
+
const resolvedPath = resolve(normalizedDelimiters);
|
|
77
|
+
const normalizedResolved = normalizePathDelimiters(resolvedPath);
|
|
78
|
+
return process.platform === "win32" ? normalizedResolved.toLowerCase() : normalizedResolved;
|
|
79
|
+
}
|
|
80
|
+
function normalizeCanonicalPathForIdentityCheck(pathValue) {
|
|
81
|
+
const normalized = normalizePathForIdentityCheck(pathValue);
|
|
82
|
+
if (!normalized) {
|
|
83
|
+
return normalized;
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
const canonical = typeof realpathSync.native === "function"
|
|
87
|
+
? realpathSync.native(pathValue)
|
|
88
|
+
: realpathSync(pathValue);
|
|
89
|
+
return normalizePathForIdentityCheck(canonical);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return normalized;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function worktreeGitDirBelongsToProject(projectRoot, gitDirPath) {
|
|
96
|
+
const gitdirBackRefPath = join(gitDirPath, "gitdir");
|
|
97
|
+
if (!existsSync(gitdirBackRefPath)) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const gitdirBackRefRaw = readFileSync(gitdirBackRefPath, "utf-8").trim();
|
|
102
|
+
if (!gitdirBackRefRaw) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
const resolvedBackRef = resolveGitPath(gitDirPath, gitdirBackRefRaw);
|
|
106
|
+
const expectedBackRef = join(projectRoot, ".git");
|
|
107
|
+
return (normalizeCanonicalPathForIdentityCheck(resolvedBackRef) ===
|
|
108
|
+
normalizeCanonicalPathForIdentityCheck(expectedBackRef));
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function isGitDirUnderCommonWorktrees(gitDirPath, commonGitDir) {
|
|
115
|
+
const normalizedGitDir = normalizePathDelimiters(normalizePathForIdentityCheck(gitDirPath)).replace(/\/+$/, "");
|
|
116
|
+
const normalizedCommonGitDir = normalizePathDelimiters(normalizePathForIdentityCheck(commonGitDir)).replace(/\/+$/, "");
|
|
117
|
+
if (!normalizedGitDir || !normalizedCommonGitDir) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
const worktreesRoot = `${normalizedCommonGitDir}/worktrees/`;
|
|
121
|
+
return normalizedGitDir.startsWith(worktreesRoot);
|
|
122
|
+
}
|
|
13
123
|
/**
|
|
14
124
|
* Gets the path to the global Codex multi-auth configuration directory.
|
|
15
125
|
*
|
|
@@ -103,23 +213,75 @@ export function getProjectStorageKey(projectPath) {
|
|
|
103
213
|
export function getProjectGlobalConfigDir(projectPath) {
|
|
104
214
|
return join(getConfigDir(), PROJECTS_DIR, getProjectStorageKey(projectPath));
|
|
105
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Resolve a stable project identity root for account storage keying.
|
|
218
|
+
*
|
|
219
|
+
* For standard repositories, this returns `projectRoot` unchanged.
|
|
220
|
+
* For linked Git worktrees, this resolves to the shared repository root so
|
|
221
|
+
* multiple worktrees use the same per-project account key.
|
|
222
|
+
*
|
|
223
|
+
* @param projectRoot - Detected project root path (typically from findProjectRoot)
|
|
224
|
+
* @returns Identity root used for per-project storage key generation
|
|
225
|
+
*/
|
|
226
|
+
export function resolveProjectStorageIdentityRoot(projectRoot) {
|
|
227
|
+
const gitEntryPath = join(projectRoot, ".git");
|
|
228
|
+
if (!existsSync(gitEntryPath)) {
|
|
229
|
+
return projectRoot;
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
const gitEntryStat = statSync(gitEntryPath);
|
|
233
|
+
if (gitEntryStat.isDirectory()) {
|
|
234
|
+
return projectRoot;
|
|
235
|
+
}
|
|
236
|
+
if (!gitEntryStat.isFile()) {
|
|
237
|
+
return projectRoot;
|
|
238
|
+
}
|
|
239
|
+
const gitPointer = readFileSync(gitEntryPath, "utf-8");
|
|
240
|
+
const gitDirValue = parseGitDirPointer(gitPointer);
|
|
241
|
+
if (!gitDirValue) {
|
|
242
|
+
return projectRoot;
|
|
243
|
+
}
|
|
244
|
+
const gitDirPath = resolveGitPath(projectRoot, gitDirValue);
|
|
245
|
+
if (!isWorktreeGitDirPath(gitDirPath)) {
|
|
246
|
+
return projectRoot;
|
|
247
|
+
}
|
|
248
|
+
if (!worktreeGitDirBelongsToProject(projectRoot, gitDirPath)) {
|
|
249
|
+
return projectRoot;
|
|
250
|
+
}
|
|
251
|
+
const commonGitDir = readGitCommonDir(gitDirPath);
|
|
252
|
+
if (!isGitDirUnderCommonWorktrees(gitDirPath, commonGitDir)) {
|
|
253
|
+
return projectRoot;
|
|
254
|
+
}
|
|
255
|
+
const candidateRepoRoot = dirname(commonGitDir);
|
|
256
|
+
if (!existsSync(join(candidateRepoRoot, ".git"))) {
|
|
257
|
+
return projectRoot;
|
|
258
|
+
}
|
|
259
|
+
return candidateRepoRoot;
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
return projectRoot;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
106
265
|
export function isProjectDirectory(dir) {
|
|
107
266
|
return PROJECT_MARKERS.some((marker) => existsSync(join(dir, marker)));
|
|
108
267
|
}
|
|
109
268
|
export function findProjectRoot(startDir) {
|
|
110
269
|
let current = startDir;
|
|
111
|
-
|
|
270
|
+
let firstMarkerRoot = null;
|
|
112
271
|
while (current) {
|
|
113
|
-
if (
|
|
272
|
+
if (existsSync(join(current, ".git"))) {
|
|
114
273
|
return current;
|
|
115
274
|
}
|
|
275
|
+
if (!firstMarkerRoot && isProjectDirectory(current)) {
|
|
276
|
+
firstMarkerRoot = current;
|
|
277
|
+
}
|
|
116
278
|
const parent = dirname(current);
|
|
117
279
|
if (parent === current) {
|
|
118
280
|
break;
|
|
119
281
|
}
|
|
120
282
|
current = parent;
|
|
121
283
|
}
|
|
122
|
-
return
|
|
284
|
+
return firstMarkerRoot;
|
|
123
285
|
}
|
|
124
286
|
function normalizePathForComparison(filePath) {
|
|
125
287
|
const resolvedPath = resolve(filePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../lib/storage/paths.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../lib/storage/paths.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/storage.d.ts
CHANGED
|
@@ -50,6 +50,7 @@ export declare function deduplicateAccounts<T extends {
|
|
|
50
50
|
* @param accounts - Array of accounts to deduplicate
|
|
51
51
|
* @returns New array with email duplicates removed
|
|
52
52
|
*/
|
|
53
|
+
export declare function normalizeEmailKey(email: string | undefined): string | undefined;
|
|
53
54
|
export declare function deduplicateAccountsByEmail<T extends {
|
|
54
55
|
email?: string;
|
|
55
56
|
lastUsed?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../lib/storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../lib/storage.ts"],"names":[],"mappings":"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"}
|