@mostok/codexes 0.1.0

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 (96) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +88 -0
  3. package/dist/accounts/account-registry.d.ts +30 -0
  4. package/dist/accounts/account-registry.js +263 -0
  5. package/dist/accounts/account-registry.js.map +1 -0
  6. package/dist/accounts/account-resolution.d.ts +16 -0
  7. package/dist/accounts/account-resolution.js +71 -0
  8. package/dist/accounts/account-resolution.js.map +1 -0
  9. package/dist/accounts/resolve-active-account.d.ts +6 -0
  10. package/dist/accounts/resolve-active-account.js +32 -0
  11. package/dist/accounts/resolve-active-account.js.map +1 -0
  12. package/dist/cli.d.ts +1 -0
  13. package/dist/cli.js +3426 -0
  14. package/dist/cli.js.map +7 -0
  15. package/dist/commands/account-add/run-account-add-command.d.ts +2 -0
  16. package/dist/commands/account-add/run-account-add-command.js +296 -0
  17. package/dist/commands/account-add/run-account-add-command.js.map +1 -0
  18. package/dist/commands/account-list/run-account-list-command.d.ts +2 -0
  19. package/dist/commands/account-list/run-account-list-command.js +48 -0
  20. package/dist/commands/account-list/run-account-list-command.js.map +1 -0
  21. package/dist/commands/account-remove/run-account-remove-command.d.ts +2 -0
  22. package/dist/commands/account-remove/run-account-remove-command.js +52 -0
  23. package/dist/commands/account-remove/run-account-remove-command.js.map +1 -0
  24. package/dist/commands/account-use/run-account-use-command.d.ts +2 -0
  25. package/dist/commands/account-use/run-account-use-command.js +78 -0
  26. package/dist/commands/account-use/run-account-use-command.js.map +1 -0
  27. package/dist/commands/root/run-root-command.d.ts +2 -0
  28. package/dist/commands/root/run-root-command.js +175 -0
  29. package/dist/commands/root/run-root-command.js.map +1 -0
  30. package/dist/config/wrapper-config.d.ts +24 -0
  31. package/dist/config/wrapper-config.js +145 -0
  32. package/dist/config/wrapper-config.js.map +1 -0
  33. package/dist/core/bootstrap.d.ts +8 -0
  34. package/dist/core/bootstrap.js +32 -0
  35. package/dist/core/bootstrap.js.map +1 -0
  36. package/dist/core/context.d.ts +33 -0
  37. package/dist/core/context.js +72 -0
  38. package/dist/core/context.js.map +1 -0
  39. package/dist/core/paths.d.ts +12 -0
  40. package/dist/core/paths.js +30 -0
  41. package/dist/core/paths.js.map +1 -0
  42. package/dist/logging/logger.d.ts +18 -0
  43. package/dist/logging/logger.js +56 -0
  44. package/dist/logging/logger.js.map +1 -0
  45. package/dist/process/codex-launch-spec.d.ts +5 -0
  46. package/dist/process/codex-launch-spec.js +80 -0
  47. package/dist/process/codex-launch-spec.js.map +1 -0
  48. package/dist/process/find-codex-binary.d.ts +14 -0
  49. package/dist/process/find-codex-binary.js +73 -0
  50. package/dist/process/find-codex-binary.js.map +1 -0
  51. package/dist/process/run-codex-login.d.ts +14 -0
  52. package/dist/process/run-codex-login.js +97 -0
  53. package/dist/process/run-codex-login.js.map +1 -0
  54. package/dist/process/spawn-codex-command.d.ts +7 -0
  55. package/dist/process/spawn-codex-command.js +69 -0
  56. package/dist/process/spawn-codex-command.js.map +1 -0
  57. package/dist/runtime/activate-account/activate-account.d.ts +27 -0
  58. package/dist/runtime/activate-account/activate-account.js +298 -0
  59. package/dist/runtime/activate-account/activate-account.js.map +1 -0
  60. package/dist/runtime/auth-state-probe.d.ts +57 -0
  61. package/dist/runtime/auth-state-probe.js +394 -0
  62. package/dist/runtime/auth-state-probe.js.map +1 -0
  63. package/dist/runtime/init/initialize-runtime.d.ts +19 -0
  64. package/dist/runtime/init/initialize-runtime.js +275 -0
  65. package/dist/runtime/init/initialize-runtime.js.map +1 -0
  66. package/dist/runtime/lock/runtime-lock.d.ts +11 -0
  67. package/dist/runtime/lock/runtime-lock.js +99 -0
  68. package/dist/runtime/lock/runtime-lock.js.map +1 -0
  69. package/dist/runtime/login-workspace.d.ts +18 -0
  70. package/dist/runtime/login-workspace.js +171 -0
  71. package/dist/runtime/login-workspace.js.map +1 -0
  72. package/dist/runtime/runtime-contract.d.ts +44 -0
  73. package/dist/runtime/runtime-contract.js +79 -0
  74. package/dist/runtime/runtime-contract.js.map +1 -0
  75. package/dist/selection/account-auth-state.d.ts +23 -0
  76. package/dist/selection/account-auth-state.js +132 -0
  77. package/dist/selection/account-auth-state.js.map +1 -0
  78. package/dist/selection/select-account.d.ts +11 -0
  79. package/dist/selection/select-account.js +168 -0
  80. package/dist/selection/select-account.js.map +1 -0
  81. package/dist/selection/usage-cache.d.ts +24 -0
  82. package/dist/selection/usage-cache.js +106 -0
  83. package/dist/selection/usage-cache.js.map +1 -0
  84. package/dist/selection/usage-client.d.ts +23 -0
  85. package/dist/selection/usage-client.js +143 -0
  86. package/dist/selection/usage-client.js.map +1 -0
  87. package/dist/selection/usage-normalize.d.ts +7 -0
  88. package/dist/selection/usage-normalize.js +209 -0
  89. package/dist/selection/usage-normalize.js.map +1 -0
  90. package/dist/selection/usage-probe-coordinator.d.ts +18 -0
  91. package/dist/selection/usage-probe-coordinator.js +69 -0
  92. package/dist/selection/usage-probe-coordinator.js.map +1 -0
  93. package/dist/selection/usage-types.d.ts +59 -0
  94. package/dist/selection/usage-types.js +2 -0
  95. package/dist/selection/usage-types.js.map +1 -0
  96. package/package.json +59 -0
@@ -0,0 +1,5 @@
1
+ export interface CodexLaunchSpec {
2
+ args: string[];
3
+ command: string;
4
+ }
5
+ export declare function resolveCodexLaunchSpec(codexBinaryPath: string, args: string[]): Promise<CodexLaunchSpec>;
@@ -0,0 +1,80 @@
1
+ import { access } from "node:fs/promises";
2
+ import path from "node:path";
3
+ export async function resolveCodexLaunchSpec(codexBinaryPath, args) {
4
+ if (process.platform !== "win32") {
5
+ return {
6
+ command: codexBinaryPath,
7
+ args,
8
+ };
9
+ }
10
+ const npmShim = await resolveNpmCodexShim(codexBinaryPath);
11
+ if (npmShim) {
12
+ return {
13
+ command: npmShim.nodeBinary,
14
+ args: [npmShim.codexScript, ...args],
15
+ };
16
+ }
17
+ if (/\.(cmd|bat)$/i.test(codexBinaryPath)) {
18
+ return {
19
+ command: process.env.ComSpec ?? "cmd.exe",
20
+ args: ["/d", "/s", "/c", buildCmdInvocation(codexBinaryPath, args)],
21
+ };
22
+ }
23
+ if (/\.ps1$/i.test(codexBinaryPath)) {
24
+ return {
25
+ command: process.env.ComSpec
26
+ ? "powershell.exe"
27
+ : "pwsh",
28
+ args: [
29
+ "-NoProfile",
30
+ "-ExecutionPolicy",
31
+ "Bypass",
32
+ "-File",
33
+ codexBinaryPath,
34
+ ...args,
35
+ ],
36
+ };
37
+ }
38
+ return {
39
+ command: codexBinaryPath,
40
+ args,
41
+ };
42
+ }
43
+ function buildCmdInvocation(binaryPath, args) {
44
+ return [quoteForCmd(binaryPath), ...args.map(quoteForCmd)].join(" ");
45
+ }
46
+ function quoteForCmd(value) {
47
+ if (value.length === 0) {
48
+ return '""';
49
+ }
50
+ if (!/[\s"]/u.test(value)) {
51
+ return value;
52
+ }
53
+ return `"${value.replace(/"/g, '""')}"`;
54
+ }
55
+ async function resolveNpmCodexShim(codexBinaryPath) {
56
+ const basename = path.basename(codexBinaryPath).toLowerCase();
57
+ if (!["codex", "codex.cmd", "codex.bat", "codex.ps1"].includes(basename)) {
58
+ return null;
59
+ }
60
+ const directory = path.dirname(codexBinaryPath);
61
+ const codexScript = path.join(directory, "node_modules", "@openai", "codex", "bin", "codex.js");
62
+ if (!(await pathExists(codexScript))) {
63
+ return null;
64
+ }
65
+ const bundledNode = path.join(directory, "node.exe");
66
+ return {
67
+ codexScript,
68
+ nodeBinary: (await pathExists(bundledNode)) ? bundledNode : "node",
69
+ };
70
+ }
71
+ async function pathExists(filePath) {
72
+ try {
73
+ await access(filePath);
74
+ return true;
75
+ }
76
+ catch {
77
+ return false;
78
+ }
79
+ }
80
+ //# sourceMappingURL=codex-launch-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-launch-spec.js","sourceRoot":"","sources":["../../src/process/codex-launch-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Logger } from "../logging/logger.js";
2
+ export interface CodexBinaryResolution {
3
+ path: string | null;
4
+ candidates: string[];
5
+ rejectedCandidates: Array<{
6
+ candidate: string;
7
+ reason: string;
8
+ }>;
9
+ }
10
+ export declare function findCodexBinary(input: {
11
+ env: NodeJS.ProcessEnv;
12
+ logger: Logger;
13
+ wrapperExecutablePath: string;
14
+ }): Promise<CodexBinaryResolution>;
@@ -0,0 +1,73 @@
1
+ import { access, stat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ export async function findCodexBinary(input) {
4
+ const candidates = buildCandidates(input.env);
5
+ const rejectedCandidates = [];
6
+ input.logger.debug("binary_resolution.start", {
7
+ wrapperExecutablePath: input.wrapperExecutablePath,
8
+ candidateCount: candidates.length,
9
+ });
10
+ for (const candidate of candidates) {
11
+ const reason = await getRejectionReason(candidate, input.wrapperExecutablePath);
12
+ if (reason) {
13
+ rejectedCandidates.push({ candidate, reason });
14
+ input.logger.debug("binary_resolution.rejected", { candidate, reason });
15
+ continue;
16
+ }
17
+ input.logger.info("binary_resolution.selected", { candidate });
18
+ return {
19
+ path: candidate,
20
+ candidates,
21
+ rejectedCandidates,
22
+ };
23
+ }
24
+ input.logger.warn("binary_resolution.missing", {
25
+ wrapperExecutablePath: input.wrapperExecutablePath,
26
+ rejectedCandidates,
27
+ });
28
+ return {
29
+ path: null,
30
+ candidates,
31
+ rejectedCandidates,
32
+ };
33
+ }
34
+ function buildCandidates(env) {
35
+ const pathValue = env.PATH ?? "";
36
+ const pathEntries = pathValue
37
+ .split(path.delimiter)
38
+ .map((entry) => entry.trim())
39
+ .filter(Boolean);
40
+ const executableNames = process.platform === "win32"
41
+ ? ["codex.cmd", "codex.exe", "codex.bat"]
42
+ : ["codex"];
43
+ return Array.from(new Set(pathEntries.flatMap((entry) => executableNames.map((executableName) => path.join(entry, executableName)))));
44
+ }
45
+ async function getRejectionReason(candidate, wrapperExecutablePath) {
46
+ try {
47
+ await access(candidate);
48
+ }
49
+ catch {
50
+ return "not_accessible";
51
+ }
52
+ const [candidateStat, wrapperStat] = await Promise.all([
53
+ stat(candidate).catch(() => null),
54
+ stat(wrapperExecutablePath).catch(() => null),
55
+ ]);
56
+ if (!candidateStat || !candidateStat.isFile()) {
57
+ return "not_a_file";
58
+ }
59
+ if (wrapperStat && isSameFile(candidate, wrapperExecutablePath, candidateStat, wrapperStat)) {
60
+ return "self_recursive_wrapper_path";
61
+ }
62
+ if (path.basename(candidate).toLowerCase().startsWith("codexes")) {
63
+ return "wrapper_named_binary";
64
+ }
65
+ return null;
66
+ }
67
+ function isSameFile(candidate, wrapperExecutablePath, candidateStat, wrapperStat) {
68
+ if (path.resolve(candidate) === path.resolve(wrapperExecutablePath)) {
69
+ return true;
70
+ }
71
+ return candidateStat.ino === wrapperStat.ino && candidateStat.dev === wrapperStat.dev;
72
+ }
73
+ //# sourceMappingURL=find-codex-binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-codex-binary.js","sourceRoot":"","sources":["../../src/process/find-codex-binary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Logger } from "../logging/logger.js";
2
+ export interface CodexLoginResult {
3
+ exitCode: number | null;
4
+ signal: NodeJS.Signals | null;
5
+ timedOut: boolean;
6
+ timeoutMs: number;
7
+ cancelledBySignal: boolean;
8
+ }
9
+ export declare function runInteractiveCodexLogin(input: {
10
+ codexBinaryPath: string;
11
+ codexHome: string;
12
+ logger: Logger;
13
+ timeoutMs: number;
14
+ }): Promise<CodexLoginResult>;
@@ -0,0 +1,97 @@
1
+ import { spawn } from "node:child_process";
2
+ import { resolveCodexLaunchSpec } from "./codex-launch-spec.js";
3
+ export async function runInteractiveCodexLogin(input) {
4
+ const launchSpec = await resolveCodexLaunchSpec(input.codexBinaryPath, ["login"]);
5
+ input.logger.info("login.spawn.start", {
6
+ codexBinaryPath: input.codexBinaryPath,
7
+ resolvedCommand: launchSpec.command,
8
+ codexHome: input.codexHome,
9
+ argv: launchSpec.args,
10
+ timeoutMs: input.timeoutMs,
11
+ });
12
+ return new Promise((resolve, reject) => {
13
+ const child = spawn(launchSpec.command, launchSpec.args, {
14
+ env: {
15
+ ...process.env,
16
+ CODEX_HOME: input.codexHome,
17
+ },
18
+ shell: false,
19
+ stdio: "inherit",
20
+ windowsHide: false,
21
+ });
22
+ let timedOut = false;
23
+ let cancelledBySignal = false;
24
+ let settled = false;
25
+ const timeoutHandle = setTimeout(() => {
26
+ timedOut = true;
27
+ input.logger.warn("login.spawn.timeout", {
28
+ codexBinaryPath: input.codexBinaryPath,
29
+ codexHome: input.codexHome,
30
+ timeoutMs: input.timeoutMs,
31
+ });
32
+ terminateChild(child);
33
+ }, input.timeoutMs);
34
+ const forwardSignal = (signal) => {
35
+ cancelledBySignal = true;
36
+ input.logger.warn("login.spawn.parent_signal", {
37
+ signal,
38
+ pid: child.pid ?? null,
39
+ });
40
+ child.kill(signal);
41
+ };
42
+ const signalHandlers = {
43
+ SIGINT: () => forwardSignal("SIGINT"),
44
+ SIGTERM: () => forwardSignal("SIGTERM"),
45
+ };
46
+ process.on("SIGINT", signalHandlers.SIGINT);
47
+ process.on("SIGTERM", signalHandlers.SIGTERM);
48
+ const cleanup = () => {
49
+ clearTimeout(timeoutHandle);
50
+ process.off("SIGINT", signalHandlers.SIGINT);
51
+ process.off("SIGTERM", signalHandlers.SIGTERM);
52
+ };
53
+ child.on("error", (error) => {
54
+ if (settled) {
55
+ return;
56
+ }
57
+ settled = true;
58
+ cleanup();
59
+ input.logger.error("login.spawn.error", {
60
+ codexBinaryPath: input.codexBinaryPath,
61
+ codexHome: input.codexHome,
62
+ message: error.message,
63
+ });
64
+ reject(error);
65
+ });
66
+ child.on("exit", (exitCode, signal) => {
67
+ if (settled) {
68
+ return;
69
+ }
70
+ settled = true;
71
+ cleanup();
72
+ input.logger.info("login.spawn.complete", {
73
+ codexBinaryPath: input.codexBinaryPath,
74
+ codexHome: input.codexHome,
75
+ exitCode,
76
+ signal,
77
+ timedOut,
78
+ cancelledBySignal,
79
+ });
80
+ resolve({
81
+ exitCode,
82
+ signal,
83
+ timedOut,
84
+ timeoutMs: input.timeoutMs,
85
+ cancelledBySignal,
86
+ });
87
+ });
88
+ });
89
+ }
90
+ function terminateChild(child) {
91
+ if (process.platform === "win32") {
92
+ child.kill();
93
+ return;
94
+ }
95
+ child.kill("SIGTERM");
96
+ }
97
+ //# sourceMappingURL=run-codex-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-codex-login.js","sourceRoot":"","sources":["../../src/process/run-codex-login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Logger } from "../logging/logger.js";
2
+ export declare function spawnCodexCommand(input: {
3
+ argv: string[];
4
+ codexBinaryPath: string;
5
+ codexHome: string;
6
+ logger: Logger;
7
+ }): Promise<number>;
@@ -0,0 +1,69 @@
1
+ import { spawn } from "node:child_process";
2
+ import { resolveCodexLaunchSpec } from "./codex-launch-spec.js";
3
+ export async function spawnCodexCommand(input) {
4
+ const launchSpec = await resolveCodexLaunchSpec(input.codexBinaryPath, input.argv);
5
+ input.logger.info("spawn_codex.start", {
6
+ codexBinaryPath: input.codexBinaryPath,
7
+ resolvedCommand: launchSpec.command,
8
+ codexHome: input.codexHome,
9
+ argv: launchSpec.args,
10
+ stdinIsTTY: process.stdin.isTTY ?? false,
11
+ stdoutIsTTY: process.stdout.isTTY ?? false,
12
+ stderrIsTTY: process.stderr.isTTY ?? false,
13
+ });
14
+ return new Promise((resolve, reject) => {
15
+ const child = spawn(launchSpec.command, launchSpec.args, {
16
+ env: {
17
+ ...process.env,
18
+ CODEX_HOME: input.codexHome,
19
+ },
20
+ shell: false,
21
+ stdio: "inherit",
22
+ windowsHide: false,
23
+ });
24
+ let settled = false;
25
+ const forwardSignal = (signal) => {
26
+ input.logger.warn("spawn_codex.parent_signal", {
27
+ signal,
28
+ pid: child.pid ?? null,
29
+ });
30
+ child.kill(signal);
31
+ };
32
+ const signalHandlers = {
33
+ SIGINT: () => forwardSignal("SIGINT"),
34
+ SIGTERM: () => forwardSignal("SIGTERM"),
35
+ };
36
+ process.on("SIGINT", signalHandlers.SIGINT);
37
+ process.on("SIGTERM", signalHandlers.SIGTERM);
38
+ const cleanup = () => {
39
+ process.off("SIGINT", signalHandlers.SIGINT);
40
+ process.off("SIGTERM", signalHandlers.SIGTERM);
41
+ };
42
+ child.on("error", (error) => {
43
+ if (settled) {
44
+ return;
45
+ }
46
+ settled = true;
47
+ cleanup();
48
+ input.logger.error("spawn_codex.error", {
49
+ codexBinaryPath: input.codexBinaryPath,
50
+ message: error.message,
51
+ });
52
+ reject(error);
53
+ });
54
+ child.on("exit", (exitCode, signal) => {
55
+ if (settled) {
56
+ return;
57
+ }
58
+ settled = true;
59
+ cleanup();
60
+ input.logger.info("spawn_codex.complete", {
61
+ codexBinaryPath: input.codexBinaryPath,
62
+ exitCode,
63
+ signal,
64
+ });
65
+ resolve(exitCode ?? 1);
66
+ });
67
+ });
68
+ }
69
+ //# sourceMappingURL=spawn-codex-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-codex-command.js","sourceRoot":"","sources":["../../src/process/spawn-codex-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { AccountRecord } from "../../accounts/account-registry.js";
2
+ import type { Logger } from "../../logging/logger.js";
3
+ import type { RuntimeContract } from "../runtime-contract.js";
4
+ export interface ActivatedAccountSession {
5
+ account: AccountRecord;
6
+ backupRoot: string;
7
+ runtimeContract: RuntimeContract;
8
+ sharedCodexHome: string;
9
+ sourceAccountStateRoot: string;
10
+ }
11
+ export declare function activateAccountIntoSharedRuntime(input: {
12
+ account: AccountRecord;
13
+ logger: Logger;
14
+ runtimeContract: RuntimeContract;
15
+ sharedCodexHome: string;
16
+ }): Promise<ActivatedAccountSession>;
17
+ export declare function syncSharedRuntimeBackToAccount(input: {
18
+ logger: Logger;
19
+ session: ActivatedAccountSession;
20
+ }): Promise<void>;
21
+ export declare function restoreSharedRuntimeFromBackup(input: {
22
+ account: AccountRecord;
23
+ backupRoot: string;
24
+ logger: Logger;
25
+ runtimeContract: RuntimeContract;
26
+ sharedCodexHome: string;
27
+ }): Promise<void>;