codex-task 0.2.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 (92) hide show
  1. package/.codex-plugin/plugin.json +36 -0
  2. package/LICENSE +21 -0
  3. package/README.md +273 -0
  4. package/README.zh-CN.md +209 -0
  5. package/THIRD_PARTY_NOTICES.md +37 -0
  6. package/dist/api.d.ts +8 -0
  7. package/dist/api.d.ts.map +1 -0
  8. package/dist/api.js +355 -0
  9. package/dist/api.js.map +1 -0
  10. package/dist/backends/direct/auth.d.ts +14 -0
  11. package/dist/backends/direct/auth.d.ts.map +1 -0
  12. package/dist/backends/direct/auth.js +152 -0
  13. package/dist/backends/direct/auth.js.map +1 -0
  14. package/dist/backends/direct/http.d.ts +12 -0
  15. package/dist/backends/direct/http.d.ts.map +1 -0
  16. package/dist/backends/direct/http.js +62 -0
  17. package/dist/backends/direct/http.js.map +1 -0
  18. package/dist/backends/direct/identity.d.ts +11 -0
  19. package/dist/backends/direct/identity.d.ts.map +1 -0
  20. package/dist/backends/direct/identity.js +89 -0
  21. package/dist/backends/direct/identity.js.map +1 -0
  22. package/dist/backends/direct/index.d.ts +15 -0
  23. package/dist/backends/direct/index.d.ts.map +1 -0
  24. package/dist/backends/direct/index.js +201 -0
  25. package/dist/backends/direct/index.js.map +1 -0
  26. package/dist/backends/direct/models.d.ts +14 -0
  27. package/dist/backends/direct/models.d.ts.map +1 -0
  28. package/dist/backends/direct/models.js +83 -0
  29. package/dist/backends/direct/models.js.map +1 -0
  30. package/dist/backends/direct/protocol.d.ts +24 -0
  31. package/dist/backends/direct/protocol.d.ts.map +1 -0
  32. package/dist/backends/direct/protocol.js +131 -0
  33. package/dist/backends/direct/protocol.js.map +1 -0
  34. package/dist/backends/direct/sse.d.ts +15 -0
  35. package/dist/backends/direct/sse.d.ts.map +1 -0
  36. package/dist/backends/direct/sse.js +93 -0
  37. package/dist/backends/direct/sse.js.map +1 -0
  38. package/dist/backends/sdk.d.ts +54 -0
  39. package/dist/backends/sdk.d.ts.map +1 -0
  40. package/dist/backends/sdk.js +173 -0
  41. package/dist/backends/sdk.js.map +1 -0
  42. package/dist/cli.d.ts +3 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +224 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/config.d.ts +29 -0
  47. package/dist/config.d.ts.map +1 -0
  48. package/dist/config.js +77 -0
  49. package/dist/config.js.map +1 -0
  50. package/dist/doctor.d.ts +3 -0
  51. package/dist/doctor.d.ts.map +1 -0
  52. package/dist/doctor.js +94 -0
  53. package/dist/doctor.js.map +1 -0
  54. package/dist/errors.d.ts +16 -0
  55. package/dist/errors.d.ts.map +1 -0
  56. package/dist/errors.js +30 -0
  57. package/dist/errors.js.map +1 -0
  58. package/dist/events.d.ts +10 -0
  59. package/dist/events.d.ts.map +1 -0
  60. package/dist/events.js +30 -0
  61. package/dist/events.js.map +1 -0
  62. package/dist/fs-utils.d.ts +7 -0
  63. package/dist/fs-utils.d.ts.map +1 -0
  64. package/dist/fs-utils.js +56 -0
  65. package/dist/fs-utils.js.map +1 -0
  66. package/dist/images.d.ts +18 -0
  67. package/dist/images.d.ts.map +1 -0
  68. package/dist/images.js +102 -0
  69. package/dist/images.js.map +1 -0
  70. package/dist/index.d.ts +7 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +6 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/paths.d.ts +14 -0
  75. package/dist/paths.d.ts.map +1 -0
  76. package/dist/paths.js +61 -0
  77. package/dist/paths.js.map +1 -0
  78. package/dist/skill.d.ts +2 -0
  79. package/dist/skill.d.ts.map +1 -0
  80. package/dist/skill.js +6 -0
  81. package/dist/skill.js.map +1 -0
  82. package/dist/state.d.ts +20 -0
  83. package/dist/state.d.ts.map +1 -0
  84. package/dist/state.js +134 -0
  85. package/dist/state.js.map +1 -0
  86. package/dist/types.d.ts +167 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +2 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +89 -0
  91. package/skills/codex-task/SKILL.md +79 -0
  92. package/skills/codex-task/agents/openai.yaml +4 -0
package/dist/config.js ADDED
@@ -0,0 +1,77 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { appPaths, defaultCodexHome, legacyAppPaths } from "./paths.js";
3
+ import { CodexTaskError } from "./errors.js";
4
+ const DEFAULT_CONFIG = {
5
+ codexHome: defaultCodexHome(),
6
+ directReasoning: "medium",
7
+ directTextTimeoutMs: 10 * 60 * 1000,
8
+ directImageTimeoutMs: 15 * 60 * 1000,
9
+ sdkTimeoutMs: 30 * 60 * 1000,
10
+ retries: 3,
11
+ tempTtlMs: 24 * 60 * 60 * 1000,
12
+ pendingTaskTtlMs: 7 * 24 * 60 * 60 * 1000,
13
+ tempMaxBytes: 1024 * 1024 * 1024,
14
+ };
15
+ function readUserConfig() {
16
+ const path = [appPaths().configPath, legacyAppPaths().configPath].find((candidate) => existsSync(candidate));
17
+ if (!path)
18
+ return {};
19
+ try {
20
+ return JSON.parse(readFileSync(path, "utf8"));
21
+ }
22
+ catch (error) {
23
+ throw new CodexTaskError("INVALID_CONFIG", `Could not parse ${path}`, {
24
+ exitCode: 2,
25
+ cause: error,
26
+ });
27
+ }
28
+ }
29
+ function envValue(name, legacyName) {
30
+ return process.env[name] ?? process.env[legacyName];
31
+ }
32
+ function envNumber(name, legacyName) {
33
+ const raw = envValue(name, legacyName);
34
+ if (raw === undefined || raw === "")
35
+ return undefined;
36
+ const value = Number(raw);
37
+ if (!Number.isFinite(value) || value < 0) {
38
+ throw new CodexTaskError("INVALID_CONFIG", `${name} must be a non-negative number`, {
39
+ exitCode: 2,
40
+ });
41
+ }
42
+ return value;
43
+ }
44
+ export function loadConfig(overrides = {}) {
45
+ const user = readUserConfig();
46
+ const env = {
47
+ codexHome: envValue("CODEX_TASK_CODEX_HOME", "CODEXERRAND_CODEX_HOME"),
48
+ directModel: envValue("CODEX_TASK_MODEL", "CODEXERRAND_MODEL"),
49
+ directReasoning: envValue("CODEX_TASK_REASONING", "CODEXERRAND_REASONING"),
50
+ directTextTimeoutMs: envNumber("CODEX_TASK_TEXT_TIMEOUT_MS", "CODEXERRAND_TEXT_TIMEOUT_MS"),
51
+ directImageTimeoutMs: envNumber("CODEX_TASK_IMAGE_TIMEOUT_MS", "CODEXERRAND_IMAGE_TIMEOUT_MS"),
52
+ sdkTimeoutMs: envNumber("CODEX_TASK_SDK_TIMEOUT_MS", "CODEXERRAND_SDK_TIMEOUT_MS"),
53
+ retries: envNumber("CODEX_TASK_RETRIES", "CODEXERRAND_RETRIES"),
54
+ proxy: envValue("CODEX_TASK_PROXY", "CODEXERRAND_PROXY"),
55
+ tempTtlMs: envNumber("CODEX_TASK_TEMP_TTL_MS", "CODEXERRAND_TEMP_TTL_MS"),
56
+ pendingTaskTtlMs: envNumber("CODEX_TASK_PENDING_TTL_MS", "CODEXERRAND_PENDING_TTL_MS"),
57
+ tempMaxBytes: envNumber("CODEX_TASK_TEMP_MAX_BYTES", "CODEXERRAND_TEMP_MAX_BYTES"),
58
+ };
59
+ const merged = { ...DEFAULT_CONFIG, ...user, ...stripUndefined(env), ...stripUndefined(overrides) };
60
+ return {
61
+ codexHome: merged.codexHome ?? DEFAULT_CONFIG.codexHome,
62
+ directModel: merged.directModel,
63
+ directReasoning: merged.directReasoning ?? DEFAULT_CONFIG.directReasoning,
64
+ directTextTimeoutMs: merged.directTextTimeoutMs ?? DEFAULT_CONFIG.directTextTimeoutMs,
65
+ directImageTimeoutMs: merged.directImageTimeoutMs ?? DEFAULT_CONFIG.directImageTimeoutMs,
66
+ sdkTimeoutMs: merged.sdkTimeoutMs ?? DEFAULT_CONFIG.sdkTimeoutMs,
67
+ retries: merged.retries ?? DEFAULT_CONFIG.retries,
68
+ proxy: merged.proxy,
69
+ tempTtlMs: merged.tempTtlMs ?? DEFAULT_CONFIG.tempTtlMs,
70
+ pendingTaskTtlMs: merged.pendingTaskTtlMs ?? DEFAULT_CONFIG.pendingTaskTtlMs,
71
+ tempMaxBytes: merged.tempMaxBytes ?? DEFAULT_CONFIG.tempMaxBytes,
72
+ };
73
+ }
74
+ function stripUndefined(value) {
75
+ return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined));
76
+ }
77
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DoctorReport } from "./types.js";
2
+ export declare function runDoctor(codexHome?: string): DoctorReport;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,YAAY,CAAC;AAsB5D,wBAAgB,SAAS,CAAC,SAAS,SAAqB,GAAG,YAAY,CAqEtE"}
package/dist/doctor.js ADDED
@@ -0,0 +1,94 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { readFileSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { appPaths, defaultCodexHome } from "./paths.js";
6
+ import { directTransportAvailable } from "./backends/direct/http.js";
7
+ import { inspectDirectAuth } from "./backends/direct/auth.js";
8
+ import { resolveDirectImageModel, resolveDirectModel } from "./backends/direct/models.js";
9
+ function codexVersion() {
10
+ try {
11
+ return execFileSync("codex", ["--version"], { timeout: 3000, encoding: "utf8" }).trim();
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ }
17
+ function sdkVersion() {
18
+ try {
19
+ const entry = fileURLToPath(import.meta.resolve("@openai/codex-sdk"));
20
+ const packageJson = JSON.parse(readFileSync(join(dirname(dirname(entry)), "package.json"), "utf8"));
21
+ return packageJson.version;
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ export function runDoctor(codexHome = defaultCodexHome()) {
28
+ const paths = appPaths();
29
+ const checks = [];
30
+ const transport = directTransportAvailable();
31
+ checks.push({
32
+ name: "direct-transport",
33
+ status: transport ? "ok" : "warning",
34
+ message: transport
35
+ ? "Native Direct transport is available"
36
+ : "Native Direct transport is unavailable; SDK backend can still be used",
37
+ });
38
+ const auth = inspectDirectAuth(codexHome);
39
+ checks.push({
40
+ name: "codex-oauth",
41
+ status: auth.found && auth.valid ? "ok" : auth.found ? "warning" : "error",
42
+ message: auth.message,
43
+ details: auth.expiresAt ? { expiresAt: new Date(auth.expiresAt).toISOString() } : undefined,
44
+ });
45
+ try {
46
+ const model = resolveDirectModel(codexHome, undefined, "medium");
47
+ const imageModel = resolveDirectImageModel(codexHome, undefined, "medium");
48
+ checks.push({
49
+ name: "direct-model",
50
+ status: "ok",
51
+ message: `${model.model} via ${model.useResponsesLite ? "Responses Lite" : "classic Responses"}`,
52
+ details: {
53
+ source: model.source,
54
+ reasoning: model.reasoning,
55
+ imageModel: imageModel.model.model,
56
+ imageFallbackFrom: imageModel.replacedLiteModel,
57
+ },
58
+ });
59
+ }
60
+ catch (error) {
61
+ checks.push({
62
+ name: "direct-model",
63
+ status: "error",
64
+ message: error instanceof Error ? error.message : String(error),
65
+ });
66
+ }
67
+ const cliVersion = codexVersion();
68
+ checks.push({
69
+ name: "codex-cli",
70
+ status: cliVersion ? "ok" : "warning",
71
+ message: cliVersion ?? "codex executable is not on PATH; the bundled SDK binary may still work",
72
+ });
73
+ const version = sdkVersion();
74
+ checks.push({
75
+ name: "codex-sdk",
76
+ status: version ? "ok" : "error",
77
+ message: version ? `@openai/codex-sdk ${version}` : "@openai/codex-sdk is unavailable",
78
+ });
79
+ return {
80
+ ok: checks.every((check) => check.status !== "error"),
81
+ platform: `${process.platform}/${process.arch}`,
82
+ nodeVersion: process.version,
83
+ checks,
84
+ paths: {
85
+ codexHome,
86
+ config: paths.configPath,
87
+ state: paths.stateDir,
88
+ cache: paths.cacheDir,
89
+ temp: paths.tempDir,
90
+ tasks: paths.tasksDir,
91
+ },
92
+ };
93
+ }
94
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare class CodexTaskError extends Error {
2
+ readonly code: string;
3
+ readonly retryable: boolean;
4
+ readonly exitCode: number;
5
+ readonly details?: unknown;
6
+ constructor(code: string, message: string, options?: {
7
+ retryable?: boolean;
8
+ exitCode?: number;
9
+ details?: unknown;
10
+ cause?: unknown;
11
+ });
12
+ }
13
+ export declare function usageError(message: string, details?: unknown): CodexTaskError;
14
+ export declare function asCodexTaskError(error: unknown): CodexTaskError;
15
+ export declare function isAbortError(error: unknown): boolean;
16
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;gBAGzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;CAS/F;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,cAAc,CAE7E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAM/D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKpD"}
package/dist/errors.js ADDED
@@ -0,0 +1,30 @@
1
+ export class CodexTaskError extends Error {
2
+ code;
3
+ retryable;
4
+ exitCode;
5
+ details;
6
+ constructor(code, message, options = {}) {
7
+ super(message, { cause: options.cause });
8
+ this.name = "CodexTaskError";
9
+ this.code = code;
10
+ this.retryable = options.retryable ?? false;
11
+ this.exitCode = options.exitCode ?? 1;
12
+ this.details = options.details;
13
+ }
14
+ }
15
+ export function usageError(message, details) {
16
+ return new CodexTaskError("USAGE_ERROR", message, { exitCode: 2, details });
17
+ }
18
+ export function asCodexTaskError(error) {
19
+ if (error instanceof CodexTaskError)
20
+ return error;
21
+ if (error instanceof Error) {
22
+ return new CodexTaskError("UNEXPECTED_ERROR", error.message, { cause: error });
23
+ }
24
+ return new CodexTaskError("UNEXPECTED_ERROR", String(error));
25
+ }
26
+ export function isAbortError(error) {
27
+ return ((error instanceof Error && error.name === "AbortError") ||
28
+ (error instanceof CodexTaskError && (error.code === "CANCELLED" || error.code === "TIMEOUT")));
29
+ }
30
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAS;IACb,SAAS,CAAU;IACnB,QAAQ,CAAS;IACjB,OAAO,CAAW;IAE3B,YACE,IAAY,EACZ,OAAe,EACf,UAA0F,EAAE;QAE5F,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,OAAiB;IAC3D,OAAO,IAAI,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,cAAc;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,cAAc,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,IAAI,cAAc,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,CACL,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;QACvD,CAAC,KAAK,YAAY,cAAc,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAC9F,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { TaskEvent } from "./types.js";
2
+ export declare class EventQueue implements AsyncIterable<TaskEvent> {
3
+ private readonly values;
4
+ private readonly waiters;
5
+ private done;
6
+ push(event: TaskEvent): void;
7
+ close(): void;
8
+ [Symbol.asyncIterator](): AsyncIterator<TaskEvent>;
9
+ }
10
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,qBAAa,UAAW,YAAW,aAAa,CAAC,SAAS,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0D;IAClF,OAAO,CAAC,IAAI,CAAS;IAErB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAM5B,KAAK,IAAI,IAAI;IAKb,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC;CAUnD"}
package/dist/events.js ADDED
@@ -0,0 +1,30 @@
1
+ export class EventQueue {
2
+ values = [];
3
+ waiters = [];
4
+ done = false;
5
+ push(event) {
6
+ const waiter = this.waiters.shift();
7
+ if (waiter)
8
+ waiter({ value: event, done: false });
9
+ else
10
+ this.values.push(event);
11
+ }
12
+ close() {
13
+ this.done = true;
14
+ for (const waiter of this.waiters.splice(0))
15
+ waiter({ value: undefined, done: true });
16
+ }
17
+ [Symbol.asyncIterator]() {
18
+ return {
19
+ next: async () => {
20
+ const value = this.values.shift();
21
+ if (value)
22
+ return { value, done: false };
23
+ if (this.done)
24
+ return { value: undefined, done: true };
25
+ return new Promise((resolve) => this.waiters.push(resolve));
26
+ },
27
+ };
28
+ }
29
+ }
30
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACJ,MAAM,GAAgB,EAAE,CAAC;IACzB,OAAO,GAAuD,EAAE,CAAC;IAC1E,IAAI,GAAG,KAAK,CAAC;IAErB,IAAI,CAAC,KAAgB;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,MAAM;YAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;;YAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClC,IAAI,KAAK;oBAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACzC,IAAI,IAAI,CAAC,IAAI;oBAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBACvD,OAAO,IAAI,OAAO,CAA4B,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACzF,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export declare function ensureDir(path: string): void;
2
+ export declare function atomicWrite(path: string, data: string | Buffer, mode?: number): void;
3
+ export declare function withFileLock<T>(lockPath: string, action: () => Promise<T>, options?: {
4
+ timeoutMs?: number;
5
+ staleMs?: number;
6
+ }): Promise<T>;
7
+ //# sourceMappingURL=fs-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"AAKA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,SAAQ,GAAG,IAAI,CAKnF;AAED,wBAAsB,YAAY,CAAC,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,OAAO,CAAC,CAAC,CAAC,CAqCZ"}
@@ -0,0 +1,56 @@
1
+ import { mkdirSync, openSync, closeSync, unlinkSync, writeFileSync, renameSync, statSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ import { randomUUID } from "node:crypto";
4
+ import { CodexTaskError } from "./errors.js";
5
+ export function ensureDir(path) {
6
+ mkdirSync(path, { recursive: true, mode: 0o700 });
7
+ }
8
+ export function atomicWrite(path, data, mode = 0o600) {
9
+ ensureDir(dirname(path));
10
+ const tempPath = `${path}.${process.pid}.${randomUUID()}.tmp`;
11
+ writeFileSync(tempPath, data, { mode });
12
+ renameSync(tempPath, path);
13
+ }
14
+ export async function withFileLock(lockPath, action, options = {}) {
15
+ ensureDir(dirname(lockPath));
16
+ const timeoutMs = options.timeoutMs ?? 10_000;
17
+ const staleMs = options.staleMs ?? 30_000;
18
+ const startedAt = Date.now();
19
+ let descriptor;
20
+ while (descriptor === undefined) {
21
+ try {
22
+ descriptor = openSync(lockPath, "wx", 0o600);
23
+ }
24
+ catch (error) {
25
+ const code = error.code;
26
+ if (code !== "EEXIST")
27
+ throw error;
28
+ try {
29
+ if (Date.now() - statSync(lockPath).mtimeMs > staleMs)
30
+ unlinkSync(lockPath);
31
+ }
32
+ catch {
33
+ // Another process may have released it.
34
+ }
35
+ if (Date.now() - startedAt > timeoutMs) {
36
+ throw new CodexTaskError("LOCK_TIMEOUT", `Timed out waiting for ${lockPath}`, {
37
+ retryable: true,
38
+ });
39
+ }
40
+ await new Promise((resolve) => setTimeout(resolve, 75));
41
+ }
42
+ }
43
+ try {
44
+ return await action();
45
+ }
46
+ finally {
47
+ closeSync(descriptor);
48
+ try {
49
+ unlinkSync(lockPath);
50
+ }
51
+ catch {
52
+ // Best effort.
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=fs-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1G,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,IAAqB,EAAE,IAAI,GAAG,KAAK;IAC3E,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,UAAU,EAAE,MAAM,CAAC;IAC9D,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,MAAwB,EACxB,UAAoD,EAAE;IAEtD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,UAA8B,CAAC;IAEnC,OAAO,UAAU,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;YACnD,IAAI,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;YACnC,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,OAAO;oBAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC9E,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;YAC1C,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;gBACvC,MAAM,IAAI,cAAc,CAAC,cAAc,EAAE,yBAAyB,QAAQ,EAAE,EAAE;oBAC5E,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,EAAE,CAAC;IACxB,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,UAAU,CAAC,CAAC;QACtB,IAAI,CAAC;YACH,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Artifact, ImageOptions } from "./types.js";
2
+ export interface ValidatedImageOptions {
3
+ count: number;
4
+ concurrency: number;
5
+ size: string;
6
+ quality: "auto" | "low" | "medium" | "high";
7
+ background: "auto" | "opaque" | "transparent";
8
+ imagePaths: string[];
9
+ overwrite: boolean;
10
+ }
11
+ export declare function validateImageOptions(options: ImageOptions): ValidatedImageOptions;
12
+ export declare function imageMimeType(path: string): string;
13
+ export declare function outputPathForImage(taskId: string, output: string | undefined, index: number, count: number): {
14
+ path: string;
15
+ temporary: boolean;
16
+ };
17
+ export declare function writePngArtifact(taskId: string, buffer: Buffer, output: string | undefined, index: number, count: number, overwrite: boolean): Artifact;
18
+ //# sourceMappingURL=images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAazD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAC;IAC9C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,qBAAqB,CAiDjF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CActC;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,OAAO,GACjB,QAAQ,CAcV"}
package/dist/images.js ADDED
@@ -0,0 +1,102 @@
1
+ import { existsSync, statSync } from "node:fs";
2
+ import { basename, dirname, extname, join, resolve } from "node:path";
3
+ import { appPaths } from "./paths.js";
4
+ import { atomicWrite, ensureDir } from "./fs-utils.js";
5
+ import { usageError } from "./errors.js";
6
+ const MIME_BY_EXTENSION = {
7
+ ".png": "image/png",
8
+ ".jpg": "image/jpeg",
9
+ ".jpeg": "image/jpeg",
10
+ ".webp": "image/webp",
11
+ ".gif": "image/gif",
12
+ };
13
+ const MAX_IMAGE_BYTES = 20 * 1024 * 1024;
14
+ const MAX_TOTAL_IMAGE_BYTES = 50 * 1024 * 1024;
15
+ export function validateImageOptions(options) {
16
+ const count = options.count ?? 1;
17
+ const concurrency = options.concurrency ?? 1;
18
+ const size = options.size ?? "auto";
19
+ const quality = options.quality ?? "auto";
20
+ const background = options.background ?? "auto";
21
+ const imagePaths = options.imagePaths ?? [];
22
+ if (!Number.isInteger(count) || count < 1 || count > 10) {
23
+ throw usageError("count must be an integer from 1 to 10");
24
+ }
25
+ if (!Number.isInteger(concurrency) || concurrency < 1 || concurrency > 3) {
26
+ throw usageError("concurrency must be an integer from 1 to 3");
27
+ }
28
+ if (imagePaths.length > 5)
29
+ throw usageError("at most 5 reference images are supported");
30
+ if (!/^(auto|[1-9]\d{0,3}x[1-9]\d{0,3})$/.test(size)) {
31
+ throw usageError("size must be auto or WIDTHxHEIGHT");
32
+ }
33
+ if (size !== "auto") {
34
+ const [width, height] = size.split("x").map(Number);
35
+ if (!width || !height || Math.max(width, height) > 3840) {
36
+ throw usageError("image width and height must be at most 3840");
37
+ }
38
+ }
39
+ let totalBytes = 0;
40
+ for (const path of imagePaths) {
41
+ if (!existsSync(path))
42
+ throw usageError(`reference image does not exist: ${path}`);
43
+ const extension = extname(path).toLowerCase();
44
+ if (!MIME_BY_EXTENSION[extension]) {
45
+ throw usageError(`unsupported image type for ${path}; use png, jpg, jpeg, webp, or gif`);
46
+ }
47
+ const bytes = statSync(path).size;
48
+ if (bytes > MAX_IMAGE_BYTES)
49
+ throw usageError(`reference image exceeds 20 MiB: ${path}`);
50
+ totalBytes += bytes;
51
+ }
52
+ if (totalBytes > MAX_TOTAL_IMAGE_BYTES) {
53
+ throw usageError("reference images exceed the 50 MiB total limit");
54
+ }
55
+ return {
56
+ count,
57
+ concurrency,
58
+ size,
59
+ quality,
60
+ background,
61
+ imagePaths: imagePaths.map((path) => resolve(path)),
62
+ overwrite: options.overwrite ?? false,
63
+ };
64
+ }
65
+ export function imageMimeType(path) {
66
+ const mime = MIME_BY_EXTENSION[extname(path).toLowerCase()];
67
+ if (!mime)
68
+ throw usageError(`unsupported image type: ${path}`);
69
+ return mime;
70
+ }
71
+ export function outputPathForImage(taskId, output, index, count) {
72
+ if (!output) {
73
+ return { path: join(appPaths().tempDir, taskId, `image-${index + 1}.png`), temporary: true };
74
+ }
75
+ const absolute = resolve(output);
76
+ const extension = extname(absolute).toLowerCase();
77
+ if (extension === ".png") {
78
+ if (count === 1)
79
+ return { path: absolute, temporary: false };
80
+ return {
81
+ path: join(dirname(absolute), `${basename(absolute, extension)}-${index + 1}.png`),
82
+ temporary: false,
83
+ };
84
+ }
85
+ return { path: join(absolute, `image-${index + 1}.png`), temporary: false };
86
+ }
87
+ export function writePngArtifact(taskId, buffer, output, index, count, overwrite) {
88
+ const target = outputPathForImage(taskId, output, index, count);
89
+ if (existsSync(target.path) && !overwrite) {
90
+ throw usageError(`output already exists: ${target.path}; pass --overwrite to replace it`);
91
+ }
92
+ ensureDir(dirname(target.path));
93
+ atomicWrite(target.path, buffer, 0o600);
94
+ return {
95
+ path: target.path,
96
+ kind: "image",
97
+ mimeType: "image/png",
98
+ sizeBytes: buffer.byteLength,
99
+ expiresAt: target.temporary ? new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString() : undefined,
100
+ };
101
+ }
102
+ //# sourceMappingURL=images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images.js","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { dispatch, generateImage, generateText, resumeTask, runTask, streamTaskEvents, } from "./api.js";
2
+ export { loadConfig, type ResolvedConfig, type UserConfig } from "./config.js";
3
+ export { runDoctor } from "./doctor.js";
4
+ export { runGarbageCollection } from "./state.js";
5
+ export { CodexTaskError } from "./errors.js";
6
+ export type * from "./types.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,UAAU,EACV,OAAO,EACP,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,mBAAmB,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { dispatch, generateImage, generateText, resumeTask, runTask, streamTaskEvents, } from "./api.js";
2
+ export { loadConfig } from "./config.js";
3
+ export { runDoctor } from "./doctor.js";
4
+ export { runGarbageCollection } from "./state.js";
5
+ export { CodexTaskError } from "./errors.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,UAAU,EACV,OAAO,EACP,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAwC,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface AppPaths {
2
+ configDir: string;
3
+ stateDir: string;
4
+ cacheDir: string;
5
+ tempDir: string;
6
+ tasksDir: string;
7
+ identityPath: string;
8
+ configPath: string;
9
+ }
10
+ export declare function defaultCodexHome(): string;
11
+ export declare function appPaths(env?: NodeJS.ProcessEnv): AppPaths;
12
+ /** Read-only compatibility paths for users migrating from CodexErrand. */
13
+ export declare function legacyAppPaths(env?: NodeJS.ProcessEnv): AppPaths;
14
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAmDD,wBAAgB,QAAQ,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,QAAQ,CAEvE;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,QAAQ,CAE7E"}
package/dist/paths.js ADDED
@@ -0,0 +1,61 @@
1
+ import { homedir, platform, tmpdir } from "node:os";
2
+ import { join } from "node:path";
3
+ export function defaultCodexHome() {
4
+ return process.env["CODEX_HOME"] ?? join(homedir(), ".codex");
5
+ }
6
+ function namedAppPaths(name, override, env) {
7
+ if (override) {
8
+ const configDir = join(override, "config");
9
+ const stateDir = join(override, "state");
10
+ const cacheDir = join(override, "cache");
11
+ const tempDir = join(override, "temp");
12
+ return {
13
+ configDir,
14
+ stateDir,
15
+ cacheDir,
16
+ tempDir,
17
+ tasksDir: join(stateDir, "tasks"),
18
+ identityPath: join(stateDir, "identity.json"),
19
+ configPath: join(configDir, "config.json"),
20
+ };
21
+ }
22
+ const home = homedir();
23
+ let configDir;
24
+ let stateDir;
25
+ let cacheDir;
26
+ if (platform() === "darwin") {
27
+ configDir = join(home, "Library", "Application Support", name);
28
+ stateDir = configDir;
29
+ cacheDir = join(home, "Library", "Caches", name);
30
+ }
31
+ else if (platform() === "win32") {
32
+ const appData = env["APPDATA"] ?? join(home, "AppData", "Roaming");
33
+ const localAppData = env["LOCALAPPDATA"] ?? join(home, "AppData", "Local");
34
+ configDir = join(appData, name);
35
+ stateDir = join(localAppData, name, "state");
36
+ cacheDir = join(localAppData, name, "cache");
37
+ }
38
+ else {
39
+ configDir = join(env["XDG_CONFIG_HOME"] ?? join(home, ".config"), name);
40
+ stateDir = join(env["XDG_STATE_HOME"] ?? join(home, ".local", "state"), name);
41
+ cacheDir = join(env["XDG_CACHE_HOME"] ?? join(home, ".cache"), name);
42
+ }
43
+ const tempDir = join(tmpdir(), name);
44
+ return {
45
+ configDir,
46
+ stateDir,
47
+ cacheDir,
48
+ tempDir,
49
+ tasksDir: join(stateDir, "tasks"),
50
+ identityPath: join(stateDir, "identity.json"),
51
+ configPath: join(configDir, "config.json"),
52
+ };
53
+ }
54
+ export function appPaths(env = process.env) {
55
+ return namedAppPaths("codex-task", env["CODEX_TASK_HOME"], env);
56
+ }
57
+ /** Read-only compatibility paths for users migrating from CodexErrand. */
58
+ export function legacyAppPaths(env = process.env) {
59
+ return namedAppPaths("codexerrand", env["CODEXERRAND_HOME"], env);
60
+ }
61
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function companionSkillPath(): string;
2
+ //# sourceMappingURL=skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}