@atomic-chat/core 0.19.1 → 0.20.5
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/dist/app-daemon.js +5 -0
- package/dist/app-daemon.js.map +1 -1
- package/dist/cli/bin.js +0 -0
- package/dist/cli/launch.js +2 -0
- package/dist/cli/launch.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.js +5 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cloud/registry.js +1 -0
- package/dist/cloud/registry.js.map +1 -1
- package/dist/config/paths.d.ts +1 -1
- package/dist/config/paths.js +12 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/contracts/engine-builds.d.ts +6 -1
- package/dist/contracts/engine-builds.js +1 -1
- package/dist/contracts/engine-builds.js.map +1 -1
- package/dist/contracts/engines.d.ts +1 -1
- package/dist/contracts/engines.js +2 -0
- package/dist/contracts/engines.js.map +1 -1
- package/dist/contracts/errors.d.ts +7 -1
- package/dist/contracts/errors.js.map +1 -1
- package/dist/contracts/geniex.d.ts +98 -0
- package/dist/contracts/geniex.js +15 -0
- package/dist/contracts/geniex.js.map +1 -0
- package/dist/contracts/index.d.ts +1 -0
- package/dist/contracts/index.js +1 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/model-yml.d.ts +40 -0
- package/dist/contracts/model-yml.js +7 -0
- package/dist/contracts/model-yml.js.map +1 -1
- package/dist/contracts/session.d.ts +6 -1
- package/dist/contracts/session.js.map +1 -1
- package/dist/contracts/settings.d.ts +12 -1
- package/dist/contracts/settings.js.map +1 -1
- package/dist/core/atomic-core.d.ts +1 -1
- package/dist/core/create.js +75 -1
- package/dist/core/create.js.map +1 -1
- package/dist/engine-builds/engines.d.ts +28 -7
- package/dist/engine-builds/engines.js +49 -5
- package/dist/engine-builds/engines.js.map +1 -1
- package/dist/engine-builds/geniex.d.ts +35 -0
- package/dist/engine-builds/geniex.js +111 -0
- package/dist/engine-builds/geniex.js.map +1 -0
- package/dist/engine-builds/manifest.d.ts +43 -0
- package/dist/engine-builds/manifest.js +92 -0
- package/dist/engine-builds/manifest.js.map +1 -1
- package/dist/engine-builds/order.d.ts +2 -1
- package/dist/engine-builds/order.js +2 -0
- package/dist/engine-builds/order.js.map +1 -1
- package/dist/engine-builds/select.d.ts +15 -0
- package/dist/engine-builds/select.js +14 -0
- package/dist/engine-builds/select.js.map +1 -1
- package/dist/engine-builds/service.d.ts +5 -3
- package/dist/engine-builds/service.js +21 -2
- package/dist/engine-builds/service.js.map +1 -1
- package/dist/engines/service.d.ts +2 -1
- package/dist/engines/service.js +3 -1
- package/dist/engines/service.js.map +1 -1
- package/dist/engines/versions.js +3 -0
- package/dist/engines/versions.js.map +1 -1
- package/dist/integrations/catalog.d.ts +3 -1
- package/dist/integrations/catalog.js +8 -2
- package/dist/integrations/catalog.js.map +1 -1
- package/dist/integrations/config-io.d.ts +45 -4
- package/dist/integrations/config-io.js +91 -6
- package/dist/integrations/config-io.js.map +1 -1
- package/dist/integrations/configure/codex-repair.d.ts +75 -0
- package/dist/integrations/configure/codex-repair.js +254 -0
- package/dist/integrations/configure/codex-repair.js.map +1 -0
- package/dist/integrations/configure/codex.d.ts +48 -10
- package/dist/integrations/configure/codex.js +126 -32
- package/dist/integrations/configure/codex.js.map +1 -1
- package/dist/integrations/configure/registry.d.ts +4 -1
- package/dist/integrations/configure/registry.js +1 -0
- package/dist/integrations/configure/registry.js.map +1 -1
- package/dist/models/gguf/kv-cache.d.ts +5 -0
- package/dist/models/gguf/kv-cache.js +35 -2
- package/dist/models/gguf/kv-cache.js.map +1 -1
- package/dist/models/gguf/reader.d.ts +5 -0
- package/dist/models/gguf/reader.js +15 -3
- package/dist/models/gguf/reader.js.map +1 -1
- package/dist/router/resolve.d.ts +3 -2
- package/dist/router/resolve.js +3 -1
- package/dist/router/resolve.js.map +1 -1
- package/dist/runtime/geniex/accelerators.d.ts +20 -0
- package/dist/runtime/geniex/accelerators.js +53 -0
- package/dist/runtime/geniex/accelerators.js.map +1 -0
- package/dist/runtime/geniex/check.d.ts +34 -0
- package/dist/runtime/geniex/check.js +117 -0
- package/dist/runtime/geniex/check.js.map +1 -0
- package/dist/runtime/geniex/chip.d.ts +29 -0
- package/dist/runtime/geniex/chip.js +35 -0
- package/dist/runtime/geniex/chip.js.map +1 -0
- package/dist/runtime/geniex/devices.d.ts +13 -0
- package/dist/runtime/geniex/devices.js +32 -0
- package/dist/runtime/geniex/devices.js.map +1 -0
- package/dist/runtime/geniex/geniex-host.d.ts +17 -0
- package/dist/runtime/geniex/geniex-host.js +26 -0
- package/dist/runtime/geniex/geniex-host.js.map +1 -0
- package/dist/runtime/geniex/host/args.d.ts +56 -0
- package/dist/runtime/geniex/host/args.js +115 -0
- package/dist/runtime/geniex/host/args.js.map +1 -0
- package/dist/runtime/geniex/host/engine.d.ts +76 -0
- package/dist/runtime/geniex/host/engine.js +122 -0
- package/dist/runtime/geniex/host/engine.js.map +1 -0
- package/dist/runtime/geniex/host/ffi-bun.d.ts +15 -0
- package/dist/runtime/geniex/host/ffi-bun.js +415 -0
- package/dist/runtime/geniex/host/ffi-bun.js.map +1 -0
- package/dist/runtime/geniex/host/grammar.d.ts +11 -0
- package/dist/runtime/geniex/host/grammar.js +223 -0
- package/dist/runtime/geniex/host/grammar.js.map +1 -0
- package/dist/runtime/geniex/host/inspect.d.ts +25 -0
- package/dist/runtime/geniex/host/inspect.js +177 -0
- package/dist/runtime/geniex/host/inspect.js.map +1 -0
- package/dist/runtime/geniex/host/library.d.ts +117 -0
- package/dist/runtime/geniex/host/library.js +38 -0
- package/dist/runtime/geniex/host/library.js.map +1 -0
- package/dist/runtime/geniex/host/openai.d.ts +62 -0
- package/dist/runtime/geniex/host/openai.js +458 -0
- package/dist/runtime/geniex/host/openai.js.map +1 -0
- package/dist/runtime/geniex/host/run.d.ts +48 -0
- package/dist/runtime/geniex/host/run.js +208 -0
- package/dist/runtime/geniex/host/run.js.map +1 -0
- package/dist/runtime/geniex/host/server.d.ts +39 -0
- package/dist/runtime/geniex/host/server.js +232 -0
- package/dist/runtime/geniex/host/server.js.map +1 -0
- package/dist/runtime/geniex/host/worker-protocol.d.ts +76 -0
- package/dist/runtime/geniex/host/worker-protocol.js +116 -0
- package/dist/runtime/geniex/host/worker-protocol.js.map +1 -0
- package/dist/runtime/geniex/host/worker-source.generated.d.ts +1 -0
- package/dist/runtime/geniex/host/worker-source.generated.js +4 -0
- package/dist/runtime/geniex/host/worker-source.generated.js.map +1 -0
- package/dist/runtime/geniex/host/worker.d.ts +7 -0
- package/dist/runtime/geniex/host/worker.js +19 -0
- package/dist/runtime/geniex/host/worker.js.map +1 -0
- package/dist/runtime/geniex/host-process.d.ts +48 -0
- package/dist/runtime/geniex/host-process.js +104 -0
- package/dist/runtime/geniex/host-process.js.map +1 -0
- package/dist/runtime/geniex/index.d.ts +11 -0
- package/dist/runtime/geniex/index.js +12 -0
- package/dist/runtime/geniex/index.js.map +1 -0
- package/dist/runtime/geniex/model-yml.d.ts +8 -0
- package/dist/runtime/geniex/model-yml.js +98 -0
- package/dist/runtime/geniex/model-yml.js.map +1 -0
- package/dist/runtime/geniex/runtime.d.ts +94 -0
- package/dist/runtime/geniex/runtime.js +366 -0
- package/dist/runtime/geniex/runtime.js.map +1 -0
- package/dist/runtime/litert-lm/host/openai.d.ts +4 -37
- package/dist/runtime/litert-lm/host/openai.js +11 -96
- package/dist/runtime/litert-lm/host/openai.js.map +1 -1
- package/dist/runtime/litert-lm/host/pool.d.ts +1 -7
- package/dist/runtime/litert-lm/host/pool.js +1 -17
- package/dist/runtime/litert-lm/host/pool.js.map +1 -1
- package/dist/runtime/litert-lm/host/server.js +11 -53
- package/dist/runtime/litert-lm/host/server.js.map +1 -1
- package/dist/runtime/llamacpp/args.d.ts +5 -0
- package/dist/runtime/llamacpp/args.js +2 -0
- package/dist/runtime/llamacpp/args.js.map +1 -1
- package/dist/runtime/llamacpp/fit-margin.d.ts +44 -0
- package/dist/runtime/llamacpp/fit-margin.js +50 -0
- package/dist/runtime/llamacpp/fit-margin.js.map +1 -1
- package/dist/runtime/llamacpp/load-plan.d.ts +5 -0
- package/dist/runtime/llamacpp/load-plan.js +57 -22
- package/dist/runtime/llamacpp/load-plan.js.map +1 -1
- package/dist/runtime/llamacpp/runtime.d.ts +2 -1
- package/dist/runtime/llamacpp/runtime.js +3 -1
- package/dist/runtime/llamacpp/runtime.js.map +1 -1
- package/dist/runtime/shared/external-sessions.js +1 -0
- package/dist/runtime/shared/external-sessions.js.map +1 -1
- package/dist/runtime/shared/fifo-lock.d.ts +10 -0
- package/dist/runtime/shared/fifo-lock.js +21 -0
- package/dist/runtime/shared/fifo-lock.js.map +1 -0
- package/dist/runtime/shared/index.d.ts +2 -0
- package/dist/runtime/shared/index.js +2 -0
- package/dist/runtime/shared/index.js.map +1 -1
- package/dist/runtime/shared/openai-sse.d.ts +112 -0
- package/dist/runtime/shared/openai-sse.js +178 -0
- package/dist/runtime/shared/openai-sse.js.map +1 -0
- package/dist/server/control/router.js +2 -0
- package/dist/server/control/router.js.map +1 -1
- package/dist/server/control/routes/geniex.d.ts +7 -0
- package/dist/server/control/routes/geniex.js +22 -0
- package/dist/server/control/routes/geniex.js.map +1 -0
- package/dist/server/control/types.d.ts +11 -1
- package/dist/server/control/types.js.map +1 -1
- package/dist/server/http.js +2 -0
- package/dist/server/http.js.map +1 -1
- package/dist/server/public/embedding.d.ts +8 -7
- package/dist/server/public/embedding.js +15 -7
- package/dist/server/public/embedding.js.map +1 -1
- package/dist/server/public/forward.js +15 -1
- package/dist/server/public/forward.js.map +1 -1
- package/dist/server/public/listing.js +1 -0
- package/dist/server/public/listing.js.map +1 -1
- package/dist/server/public/responses.js +9 -0
- package/dist/server/public/responses.js.map +1 -1
- package/dist/server/public/validate.d.ts +32 -0
- package/dist/server/public/validate.js +146 -0
- package/dist/server/public/validate.js.map +1 -0
- package/dist/settings/schema/geniex.json +63 -0
- package/dist/settings/schema/mlx.json +1 -1
- package/dist/settings/schema.js +11 -0
- package/dist/settings/schema.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -2
|
@@ -10,30 +10,90 @@
|
|
|
10
10
|
* diverge on any file with more than one key.
|
|
11
11
|
* - `serde_yaml` 0.9 does not indent sequence items under their key.
|
|
12
12
|
* - The managed shell-rc block has an exact shape, including where its blank lines fall.
|
|
13
|
+
*
|
|
14
|
+
* Codex is the exception to "rewrite the user's file": it gets a profile file of its own and only
|
|
15
|
+
* ever *repairs* the shared `config.toml` (`configure/codex-repair.ts`). A repair must never turn an
|
|
16
|
+
* unreadable file into an empty one, so it reads through `readStrict` ("not found" is the only
|
|
17
|
+
* absence), backs up through `createNew` (never over an earlier backup) and writes back with the
|
|
18
|
+
* file's own `permissions` — operations the lenient writers above do not need. Its writes also go
|
|
19
|
+
* through a symbolic link (`linkTarget`) rather than over it: dotfile managers link
|
|
20
|
+
* `~/.codex/config.toml` into their repository, and replacing the link would detach it.
|
|
13
21
|
*/
|
|
14
|
-
import { mkdir, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';
|
|
22
|
+
import { chmod, lstat, mkdir, readFile, realpath, rename, rm, stat, writeFile } from 'node:fs/promises';
|
|
15
23
|
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
16
24
|
import { stringify as yamlStringify, parse as yamlParse } from 'yaml';
|
|
17
25
|
import { AtomicCoreError } from '../contracts/index.js';
|
|
18
26
|
export const ATOMIC_MANAGED_BEGIN = '# >>> Atomic Chat (managed) >>>';
|
|
19
27
|
export const ATOMIC_MANAGED_END = '# <<< Atomic Chat (managed) <<<';
|
|
28
|
+
const isNotFound = (e) => e.code === 'ENOENT';
|
|
20
29
|
export function nodeConfigFs(home) {
|
|
21
30
|
const abs = (relative) => (isAbsolute(relative) ? relative : join(home, ...relative.split('/')));
|
|
22
31
|
return {
|
|
23
32
|
home,
|
|
24
33
|
absolute: abs,
|
|
25
34
|
read: (relative) => readFile(abs(relative), 'utf8').then((t) => t, () => undefined),
|
|
35
|
+
readStrict: async (relative) => {
|
|
36
|
+
let bytes;
|
|
37
|
+
try {
|
|
38
|
+
bytes = await readFile(abs(relative));
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
if (isNotFound(e))
|
|
42
|
+
return undefined;
|
|
43
|
+
throw e;
|
|
44
|
+
}
|
|
45
|
+
return new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
|
|
46
|
+
},
|
|
26
47
|
write: async (relative, contents, options = {}) => {
|
|
27
48
|
const path = abs(relative);
|
|
28
49
|
await mkdir(dirname(path), { recursive: true });
|
|
29
50
|
// Write beside the target and rename over it, so a crash cannot truncate a user's config.
|
|
30
51
|
const tmp = `${path}.atomic-tmp`;
|
|
31
52
|
await writeFile(tmp, contents, options.mode !== undefined ? { mode: options.mode } : {});
|
|
53
|
+
// `writeFile` applies `mode` only to a file it creates, and only through the umask.
|
|
54
|
+
if (options.mode !== undefined)
|
|
55
|
+
await chmod(tmp, options.mode);
|
|
32
56
|
await rename(tmp, path).catch(async (e) => {
|
|
33
57
|
await rm(tmp, { force: true }).catch(() => { });
|
|
34
58
|
throw e;
|
|
35
59
|
});
|
|
36
60
|
},
|
|
61
|
+
createNew: async (relative, contents, options = {}) => {
|
|
62
|
+
const path = abs(relative);
|
|
63
|
+
await mkdir(dirname(path), { recursive: true });
|
|
64
|
+
try {
|
|
65
|
+
await writeFile(path, contents, {
|
|
66
|
+
flag: 'wx',
|
|
67
|
+
...(options.mode !== undefined ? { mode: options.mode } : {}),
|
|
68
|
+
});
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
if (e.code === 'EEXIST')
|
|
73
|
+
return false;
|
|
74
|
+
// `wx` failed after creating the file (a full disk): leave no half-written file behind.
|
|
75
|
+
await rm(path, { force: true }).catch(() => { });
|
|
76
|
+
throw e;
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
permissions: (relative) => stat(abs(relative)).then((s) => s.mode & 0o777, (e) => {
|
|
80
|
+
if (isNotFound(e))
|
|
81
|
+
return undefined;
|
|
82
|
+
throw e;
|
|
83
|
+
}),
|
|
84
|
+
linkTarget: async (relative) => {
|
|
85
|
+
const path = abs(relative);
|
|
86
|
+
let link;
|
|
87
|
+
try {
|
|
88
|
+
link = (await lstat(path)).isSymbolicLink();
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
if (isNotFound(e))
|
|
92
|
+
return path;
|
|
93
|
+
throw e;
|
|
94
|
+
}
|
|
95
|
+
return link ? realpath(path) : path;
|
|
96
|
+
},
|
|
37
97
|
mkdirp: (relative) => mkdir(abs(relative), { recursive: true }).then(() => undefined),
|
|
38
98
|
exists: (relative) => stat(abs(relative)).then(() => true, () => false),
|
|
39
99
|
remove: (relative) => rm(abs(relative), { force: true }),
|
|
@@ -151,9 +211,10 @@ export function parseYaml(text, path) {
|
|
|
151
211
|
}
|
|
152
212
|
// ── managed blocks ──────────────────────────────────────────────────────────────────────────────
|
|
153
213
|
/**
|
|
154
|
-
* Remove every `# >>> Atomic Chat (managed) >>> … # <<< Atomic Chat (managed) <<<` region.
|
|
155
|
-
*
|
|
156
|
-
*
|
|
214
|
+
* Remove every `# >>> Atomic Chat (managed) >>> … # <<< Atomic Chat (managed) <<<` region. It strips
|
|
215
|
+
* all of them, and — like the Rust original — it does not consume the newline after the closing
|
|
216
|
+
* marker, which is why blank-line residue is expected. The DeepSeek Harness writer uses it; Codex's
|
|
217
|
+
* legacy regions are removed by `configure/codex-repair.ts`, which only removes what it recognises.
|
|
157
218
|
*/
|
|
158
219
|
export function stripAtomicManagedBlock(content) {
|
|
159
220
|
let result = content;
|
|
@@ -210,10 +271,34 @@ export async function writeMarkedEnvToShell(fs, shell, platform, marker, prefix,
|
|
|
210
271
|
await fs.write(rc, renderMarkedEnvBlock(existing, marker, prefix, entries));
|
|
211
272
|
}
|
|
212
273
|
// ── small shared helpers ────────────────────────────────────────────────────────────────────────
|
|
213
|
-
/**
|
|
274
|
+
/**
|
|
275
|
+
* The inside of a TOML basic string. Everything TOML forbids raw is escaped — `\`, `"`, and every
|
|
276
|
+
* control character (the five with a short form use it, the rest and DEL become `\uXXXX`, upper-case
|
|
277
|
+
* hex) — so any value yields a file Codex can parse. The desktop writer escapes the same way, which is
|
|
278
|
+
* what keeps the two sides' profile files byte-identical.
|
|
279
|
+
*/
|
|
214
280
|
export function tomlBasicStringEscape(value) {
|
|
215
|
-
|
|
281
|
+
let out = '';
|
|
282
|
+
for (const char of value) {
|
|
283
|
+
const short = TOML_SHORT_ESCAPES[char];
|
|
284
|
+
if (short !== undefined) {
|
|
285
|
+
out += short;
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
const code = char.codePointAt(0);
|
|
289
|
+
out += code < 0x20 || code === 0x7f ? `\\u${code.toString(16).toUpperCase().padStart(4, '0')}` : char;
|
|
290
|
+
}
|
|
291
|
+
return out;
|
|
216
292
|
}
|
|
293
|
+
const TOML_SHORT_ESCAPES = {
|
|
294
|
+
'\\': '\\\\',
|
|
295
|
+
'"': '\\"',
|
|
296
|
+
'\b': '\\b',
|
|
297
|
+
'\t': '\\t',
|
|
298
|
+
'\n': '\\n',
|
|
299
|
+
'\f': '\\f',
|
|
300
|
+
'\r': '\\r',
|
|
301
|
+
};
|
|
217
302
|
/** The key an agent should use when the user configured none. Not uniform across agents. */
|
|
218
303
|
export function keyOr(apiKey, fallback) {
|
|
219
304
|
return apiKey && apiKey.length > 0 ? apiKey : fallback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-io.js","sourceRoot":"","sources":["../../src/integrations/config-io.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-io.js","sourceRoot":"","sources":["../../src/integrations/config-io.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Undo what earlier Atomic Chat versions wrote into Codex's shared `config.toml`.
|
|
3
|
+
*
|
|
4
|
+
* Until the profile file (`codex.ts`), the Codex writer edited `<codex_home>/config.toml` itself,
|
|
5
|
+
* inside `# >>> Atomic Chat (managed) >>>` … `# <<< Atomic Chat (managed) <<<` regions. V1 (the first
|
|
6
|
+
* Launch page) appended one region: `[model_providers.atomic]` and `[profiles.atomic]`. V2 kept two:
|
|
7
|
+
* root `model` + `model_provider = "atomic"` at the very top, `[model_providers.atomic]` at the end.
|
|
8
|
+
* V2 is the incident: a user with a root `model` of their own got a duplicate key, and Codex — the CLI
|
|
9
|
+
* and the ChatGPT desktop app, which share the file — refused to start until it was fixed by hand.
|
|
10
|
+
*
|
|
11
|
+
* Deleting text from a file that is not ours is safe only for text we can prove is ours, so this is
|
|
12
|
+
* strict where it could be clever. A marker counts only as a whole line; the regions must pair up;
|
|
13
|
+
* each must parse on its own and hold nothing but keys some version wrote, with the values it wrote;
|
|
14
|
+
* the file without them must still parse; and it must not have changed since it was read. Anything
|
|
15
|
+
* else is a conflict: the file stays byte for byte as it was, and the message names it and says which
|
|
16
|
+
* lines to remove by hand. A repair keeps a backup of the original (never over an earlier one) and
|
|
17
|
+
* writes atomically with the file's own permission bits. A `config.toml` that is a symbolic link (a
|
|
18
|
+
* dotfile manager's) is written through: the temp file and the rename happen beside the real file,
|
|
19
|
+
* which gets the new text while the link stays a link; the backup still goes next to the link.
|
|
20
|
+
*
|
|
21
|
+
* The algorithm is shared with the desktop app, which runs it at startup and on disconnect; both
|
|
22
|
+
* sides must reach the same decision on the same bytes
|
|
23
|
+
* (ADR 2026-10-27-codex-runs-on-a-profile-of-its-own).
|
|
24
|
+
*/
|
|
25
|
+
import type { ConfigFs } from '../config-io.js';
|
|
26
|
+
/** What the removed regions said, for a caller that wants to carry the setup over to the profile. */
|
|
27
|
+
export interface CodexLegacySettings {
|
|
28
|
+
model?: string;
|
|
29
|
+
baseUrl?: string;
|
|
30
|
+
/** The provider named `ATOMIC_CHAT_API_KEY` as its key variable. */
|
|
31
|
+
keyed: boolean;
|
|
32
|
+
}
|
|
33
|
+
export type CodexRepairResult =
|
|
34
|
+
/** No `config.toml`, or nothing of ours in it. Nothing was written. */
|
|
35
|
+
{
|
|
36
|
+
kind: 'clean';
|
|
37
|
+
} | {
|
|
38
|
+
kind: 'repaired';
|
|
39
|
+
backupPath: string;
|
|
40
|
+
legacy: CodexLegacySettings;
|
|
41
|
+
}
|
|
42
|
+
/** Something we cannot prove is ours. Nothing was written; `reason` is the user-facing message. */
|
|
43
|
+
| {
|
|
44
|
+
kind: 'conflict';
|
|
45
|
+
reason: string;
|
|
46
|
+
};
|
|
47
|
+
/** The decision on one file's text, before any I/O: what to write instead, or why not. */
|
|
48
|
+
export type CodexRepairPlan = {
|
|
49
|
+
kind: 'clean';
|
|
50
|
+
} | {
|
|
51
|
+
kind: 'conflict';
|
|
52
|
+
reason: string;
|
|
53
|
+
} | {
|
|
54
|
+
kind: 'repair';
|
|
55
|
+
text: string;
|
|
56
|
+
legacy: CodexLegacySettings;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* The settings in one region when it holds exactly what some Atomic Chat version wrote, else
|
|
60
|
+
* `undefined`. Inline tables and dotted keys mean the same to Codex, so they are accepted too.
|
|
61
|
+
*/
|
|
62
|
+
export declare function recogniseLegacyRegion(doc: Record<string, unknown>): CodexLegacySettings | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Steps 2–6 of the repair on a file's text: find and pair the marker lines, recognise every region,
|
|
65
|
+
* remove them, and check what is left. Pure, so every rule is testable on a string.
|
|
66
|
+
*/
|
|
67
|
+
export declare function planCodexConfigRepair(original: string, path: string): CodexRepairPlan;
|
|
68
|
+
/** The first free backup name: `config.toml.atomic-chat-backup`, then `-2`, `-3`, … */
|
|
69
|
+
export declare function codexBackupPath(path: string, attempt: number): string;
|
|
70
|
+
/**
|
|
71
|
+
* Remove every legacy Atomic Chat region from `<dir>/config.toml`. Returns a conflict rather than
|
|
72
|
+
* throwing for a file it will not touch; throws only when the file could not be read, backed up or
|
|
73
|
+
* written. Either way a file that was not repaired is exactly as it was.
|
|
74
|
+
*/
|
|
75
|
+
export declare function repairLegacyCodexConfig(fs: ConfigFs, dir: string, platform: NodeJS.Platform): Promise<CodexRepairResult>;
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Undo what earlier Atomic Chat versions wrote into Codex's shared `config.toml`.
|
|
3
|
+
*
|
|
4
|
+
* Until the profile file (`codex.ts`), the Codex writer edited `<codex_home>/config.toml` itself,
|
|
5
|
+
* inside `# >>> Atomic Chat (managed) >>>` … `# <<< Atomic Chat (managed) <<<` regions. V1 (the first
|
|
6
|
+
* Launch page) appended one region: `[model_providers.atomic]` and `[profiles.atomic]`. V2 kept two:
|
|
7
|
+
* root `model` + `model_provider = "atomic"` at the very top, `[model_providers.atomic]` at the end.
|
|
8
|
+
* V2 is the incident: a user with a root `model` of their own got a duplicate key, and Codex — the CLI
|
|
9
|
+
* and the ChatGPT desktop app, which share the file — refused to start until it was fixed by hand.
|
|
10
|
+
*
|
|
11
|
+
* Deleting text from a file that is not ours is safe only for text we can prove is ours, so this is
|
|
12
|
+
* strict where it could be clever. A marker counts only as a whole line; the regions must pair up;
|
|
13
|
+
* each must parse on its own and hold nothing but keys some version wrote, with the values it wrote;
|
|
14
|
+
* the file without them must still parse; and it must not have changed since it was read. Anything
|
|
15
|
+
* else is a conflict: the file stays byte for byte as it was, and the message names it and says which
|
|
16
|
+
* lines to remove by hand. A repair keeps a backup of the original (never over an earlier one) and
|
|
17
|
+
* writes atomically with the file's own permission bits. A `config.toml` that is a symbolic link (a
|
|
18
|
+
* dotfile manager's) is written through: the temp file and the rename happen beside the real file,
|
|
19
|
+
* which gets the new text while the link stays a link; the backup still goes next to the link.
|
|
20
|
+
*
|
|
21
|
+
* The algorithm is shared with the desktop app, which runs it at startup and on disconnect; both
|
|
22
|
+
* sides must reach the same decision on the same bytes
|
|
23
|
+
* (ADR 2026-10-27-codex-runs-on-a-profile-of-its-own).
|
|
24
|
+
*/
|
|
25
|
+
import { join } from 'node:path';
|
|
26
|
+
import { parse as parseToml } from 'smol-toml';
|
|
27
|
+
import { AtomicCoreError } from '../../contracts/index.js';
|
|
28
|
+
import { ATOMIC_MANAGED_BEGIN, ATOMIC_MANAGED_END } from '../config-io.js';
|
|
29
|
+
const ROOT_KEYS = new Set(['model', 'model_provider', 'model_providers', 'profiles']);
|
|
30
|
+
const PROVIDER_KEYS = new Set(['name', 'base_url', 'env_key']);
|
|
31
|
+
const PROFILE_KEYS = new Set(['model', 'model_provider']);
|
|
32
|
+
/** A user's own big integers are valid TOML, not a reason to call their file broken. */
|
|
33
|
+
const parseTomlDocument = (text) => parseToml(text, { integersAsBigInt: 'asNeeded' });
|
|
34
|
+
function splitLines(content) {
|
|
35
|
+
const lines = [];
|
|
36
|
+
for (let start = 0; start < content.length;) {
|
|
37
|
+
const newline = content.indexOf('\n', start);
|
|
38
|
+
const end = newline < 0 ? content.length : newline + 1;
|
|
39
|
+
const raw = content.slice(start, end);
|
|
40
|
+
lines.push({ raw, text: raw.replace(/\n$/, '').replace(/\r$/, '') });
|
|
41
|
+
start = end;
|
|
42
|
+
}
|
|
43
|
+
return lines;
|
|
44
|
+
}
|
|
45
|
+
const conflict = (path, problem) => ({
|
|
46
|
+
kind: 'conflict',
|
|
47
|
+
reason: `Atomic Chat cannot remove its old settings from ${path}: ${problem}. ` +
|
|
48
|
+
`Remove the lines between "${ATOMIC_MANAGED_BEGIN}" and "${ATOMIC_MANAGED_END}" by hand, ` +
|
|
49
|
+
'markers included, then connect Codex again.',
|
|
50
|
+
});
|
|
51
|
+
/** The first line of a parser error, which is the message; the rest is a code frame. */
|
|
52
|
+
const parserMessage = (e) => String(e.message).split('\n')[0];
|
|
53
|
+
const isTable = (value) => typeof value === 'object' && value !== null && !Array.isArray(value) && !(value instanceof Date);
|
|
54
|
+
const only = (table, allowed) => Object.keys(table).every((key) => allowed.has(key));
|
|
55
|
+
/** `{ atomic = { … } }` and nothing else beside it. */
|
|
56
|
+
function soleAtomicTable(value) {
|
|
57
|
+
if (!isTable(value) || Object.keys(value).join() !== 'atomic')
|
|
58
|
+
return undefined;
|
|
59
|
+
const atomic = value['atomic'];
|
|
60
|
+
return isTable(atomic) ? atomic : undefined;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The settings in one region when it holds exactly what some Atomic Chat version wrote, else
|
|
64
|
+
* `undefined`. Inline tables and dotted keys mean the same to Codex, so they are accepted too.
|
|
65
|
+
*/
|
|
66
|
+
export function recogniseLegacyRegion(doc) {
|
|
67
|
+
if (Object.keys(doc).length === 0 || !only(doc, ROOT_KEYS))
|
|
68
|
+
return undefined;
|
|
69
|
+
const found = { keyed: false };
|
|
70
|
+
const has = (key) => Object.hasOwn(doc, key);
|
|
71
|
+
if (has('model')) {
|
|
72
|
+
const model = doc['model'];
|
|
73
|
+
if (typeof model !== 'string')
|
|
74
|
+
return undefined;
|
|
75
|
+
found.model = model;
|
|
76
|
+
}
|
|
77
|
+
if (has('model_provider') && doc['model_provider'] !== 'atomic')
|
|
78
|
+
return undefined;
|
|
79
|
+
if (has('model_providers')) {
|
|
80
|
+
const provider = soleAtomicTable(doc['model_providers']);
|
|
81
|
+
if (!provider || !only(provider, PROVIDER_KEYS))
|
|
82
|
+
return undefined;
|
|
83
|
+
const baseUrl = provider['base_url'];
|
|
84
|
+
if (provider['name'] !== 'Atomic Chat' || typeof baseUrl !== 'string')
|
|
85
|
+
return undefined;
|
|
86
|
+
const keyed = Object.hasOwn(provider, 'env_key');
|
|
87
|
+
if (keyed && provider['env_key'] !== 'ATOMIC_CHAT_API_KEY')
|
|
88
|
+
return undefined;
|
|
89
|
+
found.baseUrl = baseUrl;
|
|
90
|
+
found.keyed = keyed;
|
|
91
|
+
}
|
|
92
|
+
if (has('profiles')) {
|
|
93
|
+
const profile = soleAtomicTable(doc['profiles']);
|
|
94
|
+
if (!profile || !only(profile, PROFILE_KEYS))
|
|
95
|
+
return undefined;
|
|
96
|
+
const model = profile['model'];
|
|
97
|
+
if (typeof model !== 'string' || profile['model_provider'] !== 'atomic')
|
|
98
|
+
return undefined;
|
|
99
|
+
found.model ??= model;
|
|
100
|
+
}
|
|
101
|
+
return found;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Steps 2–6 of the repair on a file's text: find and pair the marker lines, recognise every region,
|
|
105
|
+
* remove them, and check what is left. Pure, so every rule is testable on a string.
|
|
106
|
+
*/
|
|
107
|
+
export function planCodexConfigRepair(original, path) {
|
|
108
|
+
const lines = splitLines(original);
|
|
109
|
+
const markers = [];
|
|
110
|
+
for (const [index, { text }] of lines.entries()) {
|
|
111
|
+
if (text === ATOMIC_MANAGED_BEGIN || text === ATOMIC_MANAGED_END) {
|
|
112
|
+
markers.push({ index, begin: text === ATOMIC_MANAGED_BEGIN });
|
|
113
|
+
}
|
|
114
|
+
else if (text.includes(ATOMIC_MANAGED_BEGIN) || text.includes(ATOMIC_MANAGED_END)) {
|
|
115
|
+
return conflict(path, `line ${index + 1} has an Atomic Chat marker inside other text`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (markers.length === 0)
|
|
119
|
+
return { kind: 'clean' };
|
|
120
|
+
const regions = [];
|
|
121
|
+
let open;
|
|
122
|
+
for (const { index, begin } of markers) {
|
|
123
|
+
if (begin && open !== undefined)
|
|
124
|
+
return conflict(path, `line ${index + 1} opens a block inside the one opened on line ${open + 1}`);
|
|
125
|
+
if (!begin && open === undefined)
|
|
126
|
+
return conflict(path, `line ${index + 1} closes a block that was never opened`);
|
|
127
|
+
if (begin)
|
|
128
|
+
open = index;
|
|
129
|
+
else {
|
|
130
|
+
regions.push({ begin: open, end: index });
|
|
131
|
+
open = undefined;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (open !== undefined)
|
|
135
|
+
return conflict(path, `the block opened on line ${open + 1} is never closed`);
|
|
136
|
+
const found = [];
|
|
137
|
+
for (const [n, { begin, end }] of regions.entries()) {
|
|
138
|
+
const where = `block ${n + 1} (lines ${begin + 1}–${end + 1})`;
|
|
139
|
+
let doc;
|
|
140
|
+
try {
|
|
141
|
+
doc = parseTomlDocument(lines
|
|
142
|
+
.slice(begin + 1, end)
|
|
143
|
+
.map((line) => line.raw)
|
|
144
|
+
.join(''));
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
return conflict(path, `${where} is not valid TOML (${parserMessage(e)})`);
|
|
148
|
+
}
|
|
149
|
+
const settings = recogniseLegacyRegion(doc);
|
|
150
|
+
if (!settings)
|
|
151
|
+
return conflict(path, `${where} has settings Atomic Chat never writes`);
|
|
152
|
+
found.push(settings);
|
|
153
|
+
}
|
|
154
|
+
// V2 split one setup over two regions: the model in the head, the endpoint in the tail.
|
|
155
|
+
const model = found.find((s) => s.model !== undefined)?.model;
|
|
156
|
+
const baseUrl = found.find((s) => s.baseUrl !== undefined)?.baseUrl;
|
|
157
|
+
const legacy = {
|
|
158
|
+
...(model === undefined ? {} : { model }),
|
|
159
|
+
...(baseUrl === undefined ? {} : { baseUrl }),
|
|
160
|
+
keyed: found.some((s) => s.keyed),
|
|
161
|
+
};
|
|
162
|
+
const removed = new Set();
|
|
163
|
+
for (const { begin, end } of regions)
|
|
164
|
+
for (let index = begin; index <= end; index++)
|
|
165
|
+
removed.add(index);
|
|
166
|
+
let kept = [...lines.keys()].filter((index) => !removed.has(index));
|
|
167
|
+
// The V2 head was followed by a blank line (or, after reruns, several); at the top of the file
|
|
168
|
+
// they are ours too. A file that did not start with a region keeps its leading lines as they are.
|
|
169
|
+
if (removed.has(0)) {
|
|
170
|
+
const first = kept.findIndex((index) => lines[index].text.trim() !== '');
|
|
171
|
+
kept = first < 0 ? [] : kept.slice(first);
|
|
172
|
+
}
|
|
173
|
+
const body = kept
|
|
174
|
+
.map((index) => lines[index].raw)
|
|
175
|
+
.join('')
|
|
176
|
+
.trimEnd();
|
|
177
|
+
const text = body === '' ? '' : `${body}\n`;
|
|
178
|
+
try {
|
|
179
|
+
parseTomlDocument(text);
|
|
180
|
+
}
|
|
181
|
+
catch (e) {
|
|
182
|
+
// Report the line as the user sees it in the file now, not in the text we were about to write.
|
|
183
|
+
// `TomlError.line` is 1-based; a message without one (or past the end) names no line.
|
|
184
|
+
const original = kept[e.line - 1];
|
|
185
|
+
const at = original === undefined ? '' : ` (line ${original + 1})`;
|
|
186
|
+
return {
|
|
187
|
+
kind: 'conflict',
|
|
188
|
+
reason: `${path} would still not be valid TOML after removing Atomic Chat's settings: ` +
|
|
189
|
+
`${parserMessage(e)}${at}. Fix the file, or remove the lines between "${ATOMIC_MANAGED_BEGIN}" ` +
|
|
190
|
+
`and "${ATOMIC_MANAGED_END}" by hand, markers included, then connect Codex again.`,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
return { kind: 'repair', text, legacy };
|
|
194
|
+
}
|
|
195
|
+
/** The first free backup name: `config.toml.atomic-chat-backup`, then `-2`, `-3`, … */
|
|
196
|
+
export function codexBackupPath(path, attempt) {
|
|
197
|
+
return attempt === 1 ? `${path}.atomic-chat-backup` : `${path}.atomic-chat-backup-${attempt}`;
|
|
198
|
+
}
|
|
199
|
+
const readFailure = (path, e) => new AtomicCoreError('IO_ERROR', `Failed to read ${path}`, e.message);
|
|
200
|
+
async function readOrFail(fs, path) {
|
|
201
|
+
try {
|
|
202
|
+
return await fs.readStrict(path);
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
throw readFailure(path, e);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Remove every legacy Atomic Chat region from `<dir>/config.toml`. Returns a conflict rather than
|
|
210
|
+
* throwing for a file it will not touch; throws only when the file could not be read, backed up or
|
|
211
|
+
* written. Either way a file that was not repaired is exactly as it was.
|
|
212
|
+
*/
|
|
213
|
+
export async function repairLegacyCodexConfig(fs, dir, platform) {
|
|
214
|
+
const path = join(dir, 'config.toml');
|
|
215
|
+
const original = await readOrFail(fs, path);
|
|
216
|
+
if (original === undefined)
|
|
217
|
+
return { kind: 'clean' };
|
|
218
|
+
const plan = planCodexConfigRepair(original, path);
|
|
219
|
+
if (plan.kind !== 'repair')
|
|
220
|
+
return plan;
|
|
221
|
+
let target;
|
|
222
|
+
let mode;
|
|
223
|
+
try {
|
|
224
|
+
target = await fs.linkTarget(path);
|
|
225
|
+
mode = platform === 'win32' ? undefined : await fs.permissions(target);
|
|
226
|
+
}
|
|
227
|
+
catch (e) {
|
|
228
|
+
throw readFailure(path, e);
|
|
229
|
+
}
|
|
230
|
+
// Another program (Codex itself, an editor) may have saved the file while we were deciding.
|
|
231
|
+
if ((await readOrFail(fs, path)) !== original) {
|
|
232
|
+
return conflict(path, 'it changed while Atomic Chat was reading it');
|
|
233
|
+
}
|
|
234
|
+
const options = mode === undefined ? {} : { mode };
|
|
235
|
+
let backupPath;
|
|
236
|
+
try {
|
|
237
|
+
for (let attempt = 1; backupPath === undefined; attempt++) {
|
|
238
|
+
const candidate = codexBackupPath(path, attempt);
|
|
239
|
+
if (await fs.createNew(candidate, original, options))
|
|
240
|
+
backupPath = candidate;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (e) {
|
|
244
|
+
throw new AtomicCoreError('IO_ERROR', `Could not back up ${path} before removing Atomic Chat's old settings from it, so it was left as it was.`, e.message);
|
|
245
|
+
}
|
|
246
|
+
try {
|
|
247
|
+
await fs.write(target, plan.text, options);
|
|
248
|
+
}
|
|
249
|
+
catch (e) {
|
|
250
|
+
throw new AtomicCoreError('IO_ERROR', `Failed to write ${target}`, e.message);
|
|
251
|
+
}
|
|
252
|
+
return { kind: 'repaired', backupPath, legacy: plan.legacy };
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=codex-repair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-repair.js","sourceRoot":"","sources":["../../../src/integrations/configure/codex-repair.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Codex CLI —
|
|
2
|
+
* Codex CLI — a profile file of our own, `<codex_home>/atomic-chat.config.toml`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Codex 0.134+ layers `$CODEX_HOME/<name>.config.toml` over the base `config.toml` when it is run
|
|
5
|
+
* with `--profile <name>`, so `launch` runs `codex --profile atomic-chat` (catalog `runArgs`) and the
|
|
6
|
+
* model, the provider and its endpoint live in a file nothing else writes. The provider id is
|
|
7
|
+
* `atomic-chat`, not `atomic`, so it never merges into a `[model_providers.atomic]` the user has.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
* root
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* The shared `config.toml` is no longer ours to write. Earlier versions edited it (two managed
|
|
10
|
+
* regions: bare root `model` / `model_provider` at the top, `[model_providers.atomic]` at the end),
|
|
11
|
+
* and a user who already had a root `model` got a duplicate key that stopped Codex — and the ChatGPT
|
|
12
|
+
* desktop app, which reads the same file — from starting. The only thing done to it now is removing
|
|
13
|
+
* those regions, through the strict repair in `codex-repair.ts`, before the profile is written.
|
|
12
14
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
+
* Order: version gate, repair, profile. Below 0.134 `--profile` meant the old `[profiles.x]` tables,
|
|
16
|
+
* so an old Codex is refused before anything is touched; a version that cannot be read is let through.
|
|
17
|
+
* The profile is rewritten only while its first line says Atomic Chat wrote it: a file of the same
|
|
18
|
+
* name that someone else made is refused, never replaced. A profile that is a symbolic link is
|
|
19
|
+
* written through, so the link survives; one that points at nothing is refused rather than replaced.
|
|
20
|
+
* The bytes are a contract with the desktop writer (ADR 2026-10-27-codex-runs-on-a-profile-of-its-own),
|
|
21
|
+
* so either side can rewrite the other's.
|
|
15
22
|
*/
|
|
23
|
+
import type { ConfigFs } from '../config-io.js';
|
|
16
24
|
import type { ConfigureInput } from './registry.js';
|
|
25
|
+
/** The profile name `--profile` takes, and the stem of its file. */
|
|
26
|
+
export declare const CODEX_PROFILE = "atomic-chat";
|
|
27
|
+
/** A profile file is ours iff it starts with this. */
|
|
28
|
+
export declare const CODEX_PROFILE_OWNER_PREFIX = "# Managed by Atomic Chat";
|
|
29
|
+
/**
|
|
30
|
+
* The first release where `--profile <name>` reads `<name>.config.toml`; 0.131–0.133 called that
|
|
31
|
+
* `--profile-v2` and meant the old `[profiles.x]` tables by `--profile`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const CODEX_MIN_VERSION: readonly [0, 134, 0];
|
|
34
|
+
export type CodexVersion = readonly [number, number, number];
|
|
35
|
+
/**
|
|
36
|
+
* Codex's own home: `$CODEX_HOME` when set and non-empty, else `<home>/.codex`. Codex resolves a
|
|
37
|
+
* relative `$CODEX_HOME` against its working directory, which `launch` shares with it. A leading `~`
|
|
38
|
+
* is expanded against the home directory: a quoted `CODEX_HOME="~/x"` reaches us unexpanded.
|
|
39
|
+
*/
|
|
40
|
+
export declare function codexHome(env: NodeJS.ProcessEnv, home: string): string;
|
|
41
|
+
export declare function codexProfilePath(dir: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* The profile's exact bytes. Codex reads the key from the variable `env_key` names, never inline, so
|
|
44
|
+
* a keyless server gets no `env_key` line at all and `launch` sets the variable on the child.
|
|
45
|
+
*/
|
|
46
|
+
export declare function renderCodexProfile(apiUrl: string, model: string, apiKey: string): string;
|
|
47
|
+
/** `codex --version` prints `codex-cli 0.146.0`: the first `x.y.z` in the output. */
|
|
48
|
+
export declare function parseCodexVersion(output: string): CodexVersion | undefined;
|
|
49
|
+
export declare function isCodexTooOld([major, minor, patch]: CodexVersion): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Write the profile, refusing to replace a file of that name Atomic Chat did not write. Returns its
|
|
52
|
+
* path. A profile that cannot be read is an error, never "absent"; a symbolic link is written through.
|
|
53
|
+
*/
|
|
54
|
+
export declare function writeCodexProfile(fs: ConfigFs, dir: string, apiUrl: string, model: string, apiKey: string): Promise<string>;
|
|
17
55
|
export declare function configureCodex(input: ConfigureInput): Promise<void>;
|