llm-config-cli 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.
- package/dist/bin/llm-config.d.ts +2 -0
- package/dist/bin/llm-config.js +4 -0
- package/dist/bin/llm-config.js.map +1 -0
- package/dist/cli/commands/clear.d.ts +2 -0
- package/dist/cli/commands/clear.js +39 -0
- package/dist/cli/commands/clear.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.js +41 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/env-clean.d.ts +2 -0
- package/dist/cli/commands/env-clean.js +27 -0
- package/dist/cli/commands/env-clean.js.map +1 -0
- package/dist/cli/commands/get.d.ts +2 -0
- package/dist/cli/commands/get.js +26 -0
- package/dist/cli/commands/get.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.js +44 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/restore.d.ts +2 -0
- package/dist/cli/commands/restore.js +25 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/set.d.ts +2 -0
- package/dist/cli/commands/set.js +38 -0
- package/dist/cli/commands/set.js.map +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +24 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/change-plan.d.ts +10 -0
- package/dist/core/change-plan.js +73 -0
- package/dist/core/change-plan.js.map +1 -0
- package/dist/core/paths.d.ts +7 -0
- package/dist/core/paths.js +21 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/redact.d.ts +1 -0
- package/dist/core/redact.js +10 -0
- package/dist/core/redact.js.map +1 -0
- package/dist/core/types.d.ts +72 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/fs/atomic.d.ts +1 -0
- package/dist/fs/atomic.js +10 -0
- package/dist/fs/atomic.js.map +1 -0
- package/dist/fs/backup.d.ts +1 -0
- package/dist/fs/backup.js +16 -0
- package/dist/fs/backup.js.map +1 -0
- package/dist/providers/base.d.ts +17 -0
- package/dist/providers/base.js +2 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/claude-code.d.ts +2 -0
- package/dist/providers/claude-code.js +118 -0
- package/dist/providers/claude-code.js.map +1 -0
- package/dist/providers/codex.d.ts +2 -0
- package/dist/providers/codex.js +215 -0
- package/dist/providers/codex.js.map +1 -0
- package/dist/providers/openclaw.d.ts +2 -0
- package/dist/providers/openclaw.js +215 -0
- package/dist/providers/openclaw.js.map +1 -0
- package/dist/providers/registry.d.ts +5 -0
- package/dist/providers/registry.js +19 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/shells/cleanup.d.ts +6 -0
- package/dist/shells/cleanup.js +42 -0
- package/dist/shells/cleanup.js.map +1 -0
- package/dist/shells/discovery.d.ts +4 -0
- package/dist/shells/discovery.js +19 -0
- package/dist/shells/discovery.js.map +1 -0
- package/dist/shells/managed-blocks.d.ts +10 -0
- package/dist/shells/managed-blocks.js +80 -0
- package/dist/shells/managed-blocks.js.map +1 -0
- package/dist/tests/provider-registry.test.d.ts +1 -0
- package/dist/tests/provider-registry.test.js +24 -0
- package/dist/tests/provider-registry.test.js.map +1 -0
- package/dist/tests/restore.test.d.ts +1 -0
- package/dist/tests/restore.test.js +95 -0
- package/dist/tests/restore.test.js.map +1 -0
- package/dist/tests/shell-cleanup.test.d.ts +1 -0
- package/dist/tests/shell-cleanup.test.js +70 -0
- package/dist/tests/shell-cleanup.test.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/fs/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,GAAG,QAAQ,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACnD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ChangePlan, ProviderDoctorResult, ProviderId, ProviderReadResult, ProviderValues } from '../core/types.js';
|
|
2
|
+
export interface ProviderPlanOptions {
|
|
3
|
+
values?: ProviderValues;
|
|
4
|
+
shellFile?: string;
|
|
5
|
+
homeDir?: string;
|
|
6
|
+
backup?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface ProviderAdapter {
|
|
9
|
+
id: ProviderId;
|
|
10
|
+
aliases: string[];
|
|
11
|
+
displayName: string;
|
|
12
|
+
readCurrent(options?: ProviderPlanOptions): Promise<ProviderReadResult>;
|
|
13
|
+
doctor(options?: ProviderPlanOptions): Promise<ProviderDoctorResult>;
|
|
14
|
+
planSet(options: ProviderPlanOptions): Promise<ChangePlan>;
|
|
15
|
+
planClear(options: ProviderPlanOptions): Promise<ChangePlan>;
|
|
16
|
+
planRestoreOfficial(options: ProviderPlanOptions): Promise<ChangePlan>;
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { planFileWrite } from '../core/change-plan.js';
|
|
3
|
+
import { getClaudeSettingsPath } from '../core/paths.js';
|
|
4
|
+
const ENV_KEY = 'ANTHROPIC_API_KEY';
|
|
5
|
+
const ENV_BASE_URL = 'ANTHROPIC_BASE_URL';
|
|
6
|
+
async function readJson(filePath) {
|
|
7
|
+
try {
|
|
8
|
+
const raw = await fs.readFile(filePath, 'utf8');
|
|
9
|
+
return JSON.parse(raw);
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
if (error.code === 'ENOENT') {
|
|
13
|
+
return {};
|
|
14
|
+
}
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function getOfficialTarget(path) {
|
|
19
|
+
return {
|
|
20
|
+
kind: 'json-env',
|
|
21
|
+
confidence: 'official',
|
|
22
|
+
path,
|
|
23
|
+
description: 'Claude Code settings.json env block',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
async function buildState(options = {}) {
|
|
27
|
+
const path = getClaudeSettingsPath({ homeDir: options.homeDir });
|
|
28
|
+
const json = await readJson(path);
|
|
29
|
+
const env = (json.env ?? {});
|
|
30
|
+
const target = getOfficialTarget(path);
|
|
31
|
+
const values = {
|
|
32
|
+
apiKey: env[ENV_KEY],
|
|
33
|
+
baseUrl: env[ENV_BASE_URL],
|
|
34
|
+
};
|
|
35
|
+
const found = Boolean(values.apiKey || values.baseUrl);
|
|
36
|
+
return {
|
|
37
|
+
provider: 'claude-code',
|
|
38
|
+
target,
|
|
39
|
+
state: {
|
|
40
|
+
officialTarget: target,
|
|
41
|
+
fallbackTarget: undefined,
|
|
42
|
+
activeTarget: target,
|
|
43
|
+
activeSource: found ? 'official' : 'none',
|
|
44
|
+
officialTargetDetected: true,
|
|
45
|
+
fallbackOverrideActive: false,
|
|
46
|
+
canRestoreOfficial: found,
|
|
47
|
+
},
|
|
48
|
+
values,
|
|
49
|
+
found,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
async function planOfficialWrite(options, summary, updater) {
|
|
53
|
+
const path = getClaudeSettingsPath({ homeDir: options.homeDir });
|
|
54
|
+
const json = await readJson(path);
|
|
55
|
+
const currentEnv = { ...(json.env ?? {}) };
|
|
56
|
+
const env = updater(currentEnv);
|
|
57
|
+
const next = { ...json };
|
|
58
|
+
if (Object.keys(env).length > 0) {
|
|
59
|
+
next.env = env;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
delete next.env;
|
|
63
|
+
}
|
|
64
|
+
return planFileWrite({
|
|
65
|
+
path,
|
|
66
|
+
nextContent: `${JSON.stringify(next, null, 2)}\n`,
|
|
67
|
+
provider: 'claude-code',
|
|
68
|
+
summary,
|
|
69
|
+
backup: options.backup,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
export const claudeCodeProvider = {
|
|
73
|
+
id: 'claude-code',
|
|
74
|
+
aliases: ['claude', 'claude-code'],
|
|
75
|
+
displayName: 'Claude Code',
|
|
76
|
+
async readCurrent(options = {}) {
|
|
77
|
+
return buildState(options);
|
|
78
|
+
},
|
|
79
|
+
async doctor(options = {}) {
|
|
80
|
+
const result = await buildState(options);
|
|
81
|
+
return {
|
|
82
|
+
provider: 'claude-code',
|
|
83
|
+
supported: true,
|
|
84
|
+
target: result.target,
|
|
85
|
+
state: result.state,
|
|
86
|
+
messages: [
|
|
87
|
+
'Official mode uses ~/.claude/settings.json env entries.',
|
|
88
|
+
result.found
|
|
89
|
+
? 'Claude Code is currently configured through its official settings env block.'
|
|
90
|
+
: 'No Claude Code env values are currently set in the official settings env block.',
|
|
91
|
+
'Restore for Claude Code removes llm-config-written official env entries and leaves the file otherwise intact.',
|
|
92
|
+
],
|
|
93
|
+
values: result.values,
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
async planSet(options) {
|
|
97
|
+
return planOfficialWrite(options, 'Write Claude Code official settings', (env) => {
|
|
98
|
+
if (options.values?.apiKey) {
|
|
99
|
+
env[ENV_KEY] = options.values.apiKey;
|
|
100
|
+
}
|
|
101
|
+
if (options.values?.baseUrl) {
|
|
102
|
+
env[ENV_BASE_URL] = options.values.baseUrl;
|
|
103
|
+
}
|
|
104
|
+
return env;
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
async planClear(options) {
|
|
108
|
+
return planOfficialWrite(options, 'Clear Claude Code official settings', (env) => {
|
|
109
|
+
delete env[ENV_KEY];
|
|
110
|
+
delete env[ENV_BASE_URL];
|
|
111
|
+
return env;
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
async planRestoreOfficial(options) {
|
|
115
|
+
return this.planClear(options);
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/providers/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { planFileWrite } from '../core/change-plan.js';
|
|
3
|
+
import { resolveInHome } from '../core/paths.js';
|
|
4
|
+
import { discoverShellFiles } from '../shells/discovery.js';
|
|
5
|
+
import { getManagedEntries, removeManagedEntries, upsertManagedBlock } from '../shells/managed-blocks.js';
|
|
6
|
+
const CONFIG_PATHS = ['.codex/config.json', '.config/codex/config.json'];
|
|
7
|
+
const ENV_KEY = 'CODEX_API_KEY';
|
|
8
|
+
const ENV_BASE_URL = 'CODEX_BASE_URL';
|
|
9
|
+
async function readIfExists(filePath) {
|
|
10
|
+
try {
|
|
11
|
+
return await fs.readFile(filePath, 'utf8');
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (error.code === 'ENOENT') {
|
|
15
|
+
return '';
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async function detectOfficialTarget(homeDir) {
|
|
21
|
+
for (const relative of CONFIG_PATHS) {
|
|
22
|
+
const candidate = resolveInHome(relative, { homeDir });
|
|
23
|
+
try {
|
|
24
|
+
await fs.access(candidate);
|
|
25
|
+
return {
|
|
26
|
+
kind: 'json-env',
|
|
27
|
+
confidence: 'official',
|
|
28
|
+
path: candidate,
|
|
29
|
+
description: 'Detected Codex config file',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
async function fallbackTarget(homeDir, shellFile) {
|
|
39
|
+
const [selected] = await discoverShellFiles({ homeDir, preferred: shellFile });
|
|
40
|
+
return {
|
|
41
|
+
kind: 'managed-shell-env',
|
|
42
|
+
confidence: 'fallback',
|
|
43
|
+
shellFile: selected,
|
|
44
|
+
path: selected,
|
|
45
|
+
description: 'Managed shell environment block',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async function readFallbackState(homeDir, shellFile) {
|
|
49
|
+
const target = await fallbackTarget(homeDir, shellFile);
|
|
50
|
+
const content = target.shellFile ? await readIfExists(target.shellFile) : '';
|
|
51
|
+
const entries = getManagedEntries(content).filter((entry) => entry.provider === 'codex');
|
|
52
|
+
const values = {
|
|
53
|
+
apiKey: entries.find((entry) => entry.key === ENV_KEY)?.value,
|
|
54
|
+
baseUrl: entries.find((entry) => entry.key === ENV_BASE_URL)?.value,
|
|
55
|
+
};
|
|
56
|
+
return {
|
|
57
|
+
target,
|
|
58
|
+
entries,
|
|
59
|
+
values,
|
|
60
|
+
active: entries.length > 0,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
async function buildState(options = {}) {
|
|
64
|
+
const officialTarget = await detectOfficialTarget(options.homeDir);
|
|
65
|
+
const fallback = await readFallbackState(options.homeDir, options.shellFile);
|
|
66
|
+
const activeSource = fallback.active ? 'fallback' : officialTarget ? 'official' : 'none';
|
|
67
|
+
const target = fallback.active ? fallback.target : officialTarget ?? fallback.target;
|
|
68
|
+
return {
|
|
69
|
+
provider: 'codex',
|
|
70
|
+
target,
|
|
71
|
+
state: {
|
|
72
|
+
officialTarget,
|
|
73
|
+
fallbackTarget: fallback.target,
|
|
74
|
+
activeTarget: target,
|
|
75
|
+
activeSource,
|
|
76
|
+
officialTargetDetected: Boolean(officialTarget),
|
|
77
|
+
fallbackOverrideActive: fallback.active,
|
|
78
|
+
canRestoreOfficial: Boolean(officialTarget && fallback.active),
|
|
79
|
+
},
|
|
80
|
+
values: fallback.values,
|
|
81
|
+
found: activeSource !== 'none',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function buildFallbackEntries(existingContent, values) {
|
|
85
|
+
const existing = getManagedEntries(existingContent).filter((entry) => entry.provider !== 'codex');
|
|
86
|
+
const entries = [...existing];
|
|
87
|
+
if (values?.apiKey) {
|
|
88
|
+
entries.push({ key: ENV_KEY, value: values.apiKey, provider: 'codex' });
|
|
89
|
+
}
|
|
90
|
+
if (values?.baseUrl) {
|
|
91
|
+
entries.push({ key: ENV_BASE_URL, value: values.baseUrl, provider: 'codex' });
|
|
92
|
+
}
|
|
93
|
+
return entries;
|
|
94
|
+
}
|
|
95
|
+
export const codexProvider = {
|
|
96
|
+
id: 'codex',
|
|
97
|
+
aliases: ['codex'],
|
|
98
|
+
displayName: 'Codex',
|
|
99
|
+
async readCurrent(options = {}) {
|
|
100
|
+
return buildState(options);
|
|
101
|
+
},
|
|
102
|
+
async doctor(options = {}) {
|
|
103
|
+
const result = await buildState(options);
|
|
104
|
+
const messages = [];
|
|
105
|
+
if (result.state.officialTargetDetected) {
|
|
106
|
+
messages.push(`Official Codex target detected at ${result.state.officialTarget?.path}.`);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
messages.push('No confirmed official Codex target detected.');
|
|
110
|
+
}
|
|
111
|
+
if (result.state.fallbackOverrideActive) {
|
|
112
|
+
messages.push(`Managed fallback override is active in ${result.state.fallbackTarget?.path}.`);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
messages.push('No managed fallback override is active.');
|
|
116
|
+
}
|
|
117
|
+
messages.push(result.state.canRestoreOfficial
|
|
118
|
+
? 'Restore can remove the managed fallback override and let the detected official target take effect again.'
|
|
119
|
+
: 'Restore to official is unavailable unless both an official target is detected and a managed fallback override exists.');
|
|
120
|
+
return {
|
|
121
|
+
provider: 'codex',
|
|
122
|
+
supported: true,
|
|
123
|
+
target: result.target,
|
|
124
|
+
state: result.state,
|
|
125
|
+
messages,
|
|
126
|
+
values: result.values,
|
|
127
|
+
};
|
|
128
|
+
},
|
|
129
|
+
async planSet(options) {
|
|
130
|
+
const target = await fallbackTarget(options.homeDir, options.shellFile);
|
|
131
|
+
const before = target.shellFile ? await readIfExists(target.shellFile) : '';
|
|
132
|
+
const entries = buildFallbackEntries(before, options.values);
|
|
133
|
+
const after = upsertManagedBlock(before, entries);
|
|
134
|
+
const officialTarget = await detectOfficialTarget(options.homeDir);
|
|
135
|
+
const filePlan = await planFileWrite({
|
|
136
|
+
path: target.path,
|
|
137
|
+
nextContent: after,
|
|
138
|
+
provider: 'codex',
|
|
139
|
+
summary: 'Write Codex fallback shell settings',
|
|
140
|
+
backup: options.backup,
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
...filePlan,
|
|
144
|
+
changes: [
|
|
145
|
+
{
|
|
146
|
+
type: 'notice',
|
|
147
|
+
message: officialTarget
|
|
148
|
+
? `Official Codex target detected at ${officialTarget.path}; this command writes a managed fallback override instead of modifying the official config.`
|
|
149
|
+
: 'No confirmed official Codex target detected; writing managed fallback shell variables.',
|
|
150
|
+
},
|
|
151
|
+
...filePlan.changes,
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
},
|
|
155
|
+
async planClear(options) {
|
|
156
|
+
const target = await fallbackTarget(options.homeDir, options.shellFile);
|
|
157
|
+
const before = target.shellFile ? await readIfExists(target.shellFile) : '';
|
|
158
|
+
const after = removeManagedEntries(before, 'codex');
|
|
159
|
+
return planFileWrite({
|
|
160
|
+
path: target.path,
|
|
161
|
+
nextContent: after,
|
|
162
|
+
provider: 'codex',
|
|
163
|
+
summary: 'Clear Codex managed fallback settings',
|
|
164
|
+
backup: options.backup,
|
|
165
|
+
});
|
|
166
|
+
},
|
|
167
|
+
async planRestoreOfficial(options) {
|
|
168
|
+
const state = await buildState(options);
|
|
169
|
+
if (!state.state.officialTargetDetected) {
|
|
170
|
+
return {
|
|
171
|
+
provider: 'codex',
|
|
172
|
+
summary: 'Restore Codex official configuration',
|
|
173
|
+
changes: [
|
|
174
|
+
{
|
|
175
|
+
type: 'notice',
|
|
176
|
+
message: 'Cannot restore Codex to official configuration because no confirmed official target was detected.',
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
if (!state.state.fallbackOverrideActive) {
|
|
182
|
+
return {
|
|
183
|
+
provider: 'codex',
|
|
184
|
+
summary: 'Restore Codex official configuration',
|
|
185
|
+
changes: [
|
|
186
|
+
{
|
|
187
|
+
type: 'notice',
|
|
188
|
+
message: 'No managed Codex fallback override is active, so the detected official target is already the effective source.',
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
const target = state.state.fallbackTarget;
|
|
194
|
+
const before = target?.shellFile ? await readIfExists(target.shellFile) : '';
|
|
195
|
+
const after = removeManagedEntries(before, 'codex');
|
|
196
|
+
const filePlan = await planFileWrite({
|
|
197
|
+
path: target.path,
|
|
198
|
+
nextContent: after,
|
|
199
|
+
provider: 'codex',
|
|
200
|
+
summary: 'Restore Codex official configuration',
|
|
201
|
+
backup: options.backup,
|
|
202
|
+
});
|
|
203
|
+
return {
|
|
204
|
+
...filePlan,
|
|
205
|
+
changes: [
|
|
206
|
+
{
|
|
207
|
+
type: 'notice',
|
|
208
|
+
message: `Removing managed Codex fallback override from ${target?.path} so ${state.state.officialTarget?.path} can become effective again.`,
|
|
209
|
+
},
|
|
210
|
+
...filePlan.changes,
|
|
211
|
+
],
|
|
212
|
+
};
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/providers/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { planFileWrite } from '../core/change-plan.js';
|
|
3
|
+
import { resolveInHome } from '../core/paths.js';
|
|
4
|
+
import { discoverShellFiles } from '../shells/discovery.js';
|
|
5
|
+
import { getManagedEntries, removeManagedEntries, upsertManagedBlock } from '../shells/managed-blocks.js';
|
|
6
|
+
const CONFIG_PATHS = ['.openclaw/config.json', '.config/openclaw/config.json'];
|
|
7
|
+
const ENV_KEY = 'OPENCLAW_API_KEY';
|
|
8
|
+
const ENV_BASE_URL = 'OPENCLAW_BASE_URL';
|
|
9
|
+
async function readIfExists(filePath) {
|
|
10
|
+
try {
|
|
11
|
+
return await fs.readFile(filePath, 'utf8');
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (error.code === 'ENOENT') {
|
|
15
|
+
return '';
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async function detectOfficialTarget(homeDir) {
|
|
21
|
+
for (const relative of CONFIG_PATHS) {
|
|
22
|
+
const candidate = resolveInHome(relative, { homeDir });
|
|
23
|
+
try {
|
|
24
|
+
await fs.access(candidate);
|
|
25
|
+
return {
|
|
26
|
+
kind: 'json-env',
|
|
27
|
+
confidence: 'official',
|
|
28
|
+
path: candidate,
|
|
29
|
+
description: 'Detected OpenClaw config file',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
async function fallbackTarget(homeDir, shellFile) {
|
|
39
|
+
const [selected] = await discoverShellFiles({ homeDir, preferred: shellFile });
|
|
40
|
+
return {
|
|
41
|
+
kind: 'managed-shell-env',
|
|
42
|
+
confidence: 'fallback',
|
|
43
|
+
shellFile: selected,
|
|
44
|
+
path: selected,
|
|
45
|
+
description: 'Managed shell environment block',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async function readFallbackState(homeDir, shellFile) {
|
|
49
|
+
const target = await fallbackTarget(homeDir, shellFile);
|
|
50
|
+
const content = target.shellFile ? await readIfExists(target.shellFile) : '';
|
|
51
|
+
const entries = getManagedEntries(content).filter((entry) => entry.provider === 'openclaw');
|
|
52
|
+
const values = {
|
|
53
|
+
apiKey: entries.find((entry) => entry.key === ENV_KEY)?.value,
|
|
54
|
+
baseUrl: entries.find((entry) => entry.key === ENV_BASE_URL)?.value,
|
|
55
|
+
};
|
|
56
|
+
return {
|
|
57
|
+
target,
|
|
58
|
+
entries,
|
|
59
|
+
values,
|
|
60
|
+
active: entries.length > 0,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
async function buildState(options = {}) {
|
|
64
|
+
const officialTarget = await detectOfficialTarget(options.homeDir);
|
|
65
|
+
const fallback = await readFallbackState(options.homeDir, options.shellFile);
|
|
66
|
+
const activeSource = fallback.active ? 'fallback' : officialTarget ? 'official' : 'none';
|
|
67
|
+
const target = fallback.active ? fallback.target : officialTarget ?? fallback.target;
|
|
68
|
+
return {
|
|
69
|
+
provider: 'openclaw',
|
|
70
|
+
target,
|
|
71
|
+
state: {
|
|
72
|
+
officialTarget,
|
|
73
|
+
fallbackTarget: fallback.target,
|
|
74
|
+
activeTarget: target,
|
|
75
|
+
activeSource,
|
|
76
|
+
officialTargetDetected: Boolean(officialTarget),
|
|
77
|
+
fallbackOverrideActive: fallback.active,
|
|
78
|
+
canRestoreOfficial: Boolean(officialTarget && fallback.active),
|
|
79
|
+
},
|
|
80
|
+
values: fallback.values,
|
|
81
|
+
found: activeSource !== 'none',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function buildFallbackEntries(existingContent, values) {
|
|
85
|
+
const existing = getManagedEntries(existingContent).filter((entry) => entry.provider !== 'openclaw');
|
|
86
|
+
const entries = [...existing];
|
|
87
|
+
if (values?.apiKey) {
|
|
88
|
+
entries.push({ key: ENV_KEY, value: values.apiKey, provider: 'openclaw' });
|
|
89
|
+
}
|
|
90
|
+
if (values?.baseUrl) {
|
|
91
|
+
entries.push({ key: ENV_BASE_URL, value: values.baseUrl, provider: 'openclaw' });
|
|
92
|
+
}
|
|
93
|
+
return entries;
|
|
94
|
+
}
|
|
95
|
+
export const openClawProvider = {
|
|
96
|
+
id: 'openclaw',
|
|
97
|
+
aliases: ['openclaw'],
|
|
98
|
+
displayName: 'OpenClaw',
|
|
99
|
+
async readCurrent(options = {}) {
|
|
100
|
+
return buildState(options);
|
|
101
|
+
},
|
|
102
|
+
async doctor(options = {}) {
|
|
103
|
+
const result = await buildState(options);
|
|
104
|
+
const messages = [];
|
|
105
|
+
if (result.state.officialTargetDetected) {
|
|
106
|
+
messages.push(`Official OpenClaw target detected at ${result.state.officialTarget?.path}.`);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
messages.push('No confirmed official OpenClaw target detected.');
|
|
110
|
+
}
|
|
111
|
+
if (result.state.fallbackOverrideActive) {
|
|
112
|
+
messages.push(`Managed fallback override is active in ${result.state.fallbackTarget?.path}.`);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
messages.push('No managed fallback override is active.');
|
|
116
|
+
}
|
|
117
|
+
messages.push(result.state.canRestoreOfficial
|
|
118
|
+
? 'Restore can remove the managed fallback override and let the detected official target take effect again.'
|
|
119
|
+
: 'Restore to official is unavailable unless both an official target is detected and a managed fallback override exists.');
|
|
120
|
+
return {
|
|
121
|
+
provider: 'openclaw',
|
|
122
|
+
supported: true,
|
|
123
|
+
target: result.target,
|
|
124
|
+
state: result.state,
|
|
125
|
+
messages,
|
|
126
|
+
values: result.values,
|
|
127
|
+
};
|
|
128
|
+
},
|
|
129
|
+
async planSet(options) {
|
|
130
|
+
const target = await fallbackTarget(options.homeDir, options.shellFile);
|
|
131
|
+
const before = target.shellFile ? await readIfExists(target.shellFile) : '';
|
|
132
|
+
const entries = buildFallbackEntries(before, options.values);
|
|
133
|
+
const after = upsertManagedBlock(before, entries);
|
|
134
|
+
const officialTarget = await detectOfficialTarget(options.homeDir);
|
|
135
|
+
const filePlan = await planFileWrite({
|
|
136
|
+
path: target.path,
|
|
137
|
+
nextContent: after,
|
|
138
|
+
provider: 'openclaw',
|
|
139
|
+
summary: 'Write OpenClaw fallback shell settings',
|
|
140
|
+
backup: options.backup,
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
...filePlan,
|
|
144
|
+
changes: [
|
|
145
|
+
{
|
|
146
|
+
type: 'notice',
|
|
147
|
+
message: officialTarget
|
|
148
|
+
? `Official OpenClaw target detected at ${officialTarget.path}; this command writes a managed fallback override instead of modifying the official config.`
|
|
149
|
+
: 'No confirmed official OpenClaw target detected; writing managed fallback shell variables.',
|
|
150
|
+
},
|
|
151
|
+
...filePlan.changes,
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
},
|
|
155
|
+
async planClear(options) {
|
|
156
|
+
const target = await fallbackTarget(options.homeDir, options.shellFile);
|
|
157
|
+
const before = target.shellFile ? await readIfExists(target.shellFile) : '';
|
|
158
|
+
const after = removeManagedEntries(before, 'openclaw');
|
|
159
|
+
return planFileWrite({
|
|
160
|
+
path: target.path,
|
|
161
|
+
nextContent: after,
|
|
162
|
+
provider: 'openclaw',
|
|
163
|
+
summary: 'Clear OpenClaw managed fallback settings',
|
|
164
|
+
backup: options.backup,
|
|
165
|
+
});
|
|
166
|
+
},
|
|
167
|
+
async planRestoreOfficial(options) {
|
|
168
|
+
const state = await buildState(options);
|
|
169
|
+
if (!state.state.officialTargetDetected) {
|
|
170
|
+
return {
|
|
171
|
+
provider: 'openclaw',
|
|
172
|
+
summary: 'Restore OpenClaw official configuration',
|
|
173
|
+
changes: [
|
|
174
|
+
{
|
|
175
|
+
type: 'notice',
|
|
176
|
+
message: 'Cannot restore OpenClaw to official configuration because no confirmed official target was detected.',
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
if (!state.state.fallbackOverrideActive) {
|
|
182
|
+
return {
|
|
183
|
+
provider: 'openclaw',
|
|
184
|
+
summary: 'Restore OpenClaw official configuration',
|
|
185
|
+
changes: [
|
|
186
|
+
{
|
|
187
|
+
type: 'notice',
|
|
188
|
+
message: 'No managed OpenClaw fallback override is active, so the detected official target is already the effective source.',
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
const target = state.state.fallbackTarget;
|
|
194
|
+
const before = target?.shellFile ? await readIfExists(target.shellFile) : '';
|
|
195
|
+
const after = removeManagedEntries(before, 'openclaw');
|
|
196
|
+
const filePlan = await planFileWrite({
|
|
197
|
+
path: target.path,
|
|
198
|
+
nextContent: after,
|
|
199
|
+
provider: 'openclaw',
|
|
200
|
+
summary: 'Restore OpenClaw official configuration',
|
|
201
|
+
backup: options.backup,
|
|
202
|
+
});
|
|
203
|
+
return {
|
|
204
|
+
...filePlan,
|
|
205
|
+
changes: [
|
|
206
|
+
{
|
|
207
|
+
type: 'notice',
|
|
208
|
+
message: `Removing managed OpenClaw fallback override from ${target?.path} so ${state.state.officialTarget?.path} can become effective again.`,
|
|
209
|
+
},
|
|
210
|
+
...filePlan.changes,
|
|
211
|
+
],
|
|
212
|
+
};
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
//# sourceMappingURL=openclaw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/providers/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ProviderId } from '../core/types.js';
|
|
2
|
+
import type { ProviderAdapter } from './base.js';
|
|
3
|
+
export declare function listProviders(): ProviderAdapter[];
|
|
4
|
+
export declare function getProvider(input: string): ProviderAdapter;
|
|
5
|
+
export declare function getProviderById(id: ProviderId): ProviderAdapter;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { claudeCodeProvider } from './claude-code.js';
|
|
2
|
+
import { codexProvider } from './codex.js';
|
|
3
|
+
import { openClawProvider } from './openclaw.js';
|
|
4
|
+
const providers = [claudeCodeProvider, codexProvider, openClawProvider];
|
|
5
|
+
export function listProviders() {
|
|
6
|
+
return providers;
|
|
7
|
+
}
|
|
8
|
+
export function getProvider(input) {
|
|
9
|
+
const normalized = input.toLowerCase();
|
|
10
|
+
const provider = providers.find((item) => item.id === normalized || item.aliases.includes(normalized));
|
|
11
|
+
if (!provider) {
|
|
12
|
+
throw new Error(`Unknown provider: ${input}`);
|
|
13
|
+
}
|
|
14
|
+
return provider;
|
|
15
|
+
}
|
|
16
|
+
export function getProviderById(id) {
|
|
17
|
+
return getProvider(id);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,SAAS,GAAsB,CAAC,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;AAE3F,MAAM,UAAU,aAAa;IAC3B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAC7B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CACtE,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAc;IAC5C,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC"}
|