llm-config-cli 0.1.0 → 0.1.1

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.
@@ -0,0 +1,21 @@
1
+ import type { ChangePlan, CommandFlags, ExecutePlanOptions, ProviderId, ProviderReadResult, ProviderValues } from '../core/types.js';
2
+ export interface OutputWriter {
3
+ (line: string): void;
4
+ }
5
+ export interface ClearCommandOptions extends CommandFlags {
6
+ env?: boolean;
7
+ }
8
+ export interface EnvCleanCommandOptions extends CommandFlags {
9
+ provider?: ProviderId;
10
+ }
11
+ export declare function getProviderMenuChoices(): Array<{
12
+ name: string;
13
+ value: ProviderId;
14
+ }>;
15
+ export declare function applyPlan(plan: ChangePlan, options?: ExecutePlanOptions, write?: OutputWriter): Promise<void>;
16
+ export declare function configureProvider(providerInput: string, values: ProviderValues, options?: CommandFlags, write?: OutputWriter): Promise<void>;
17
+ export declare function showProviderSettings(providerInput: string, options?: CommandFlags, write?: OutputWriter): Promise<ProviderReadResult>;
18
+ export declare function runDiagnostics(providerInput: string | undefined, options?: CommandFlags, write?: OutputWriter): Promise<void>;
19
+ export declare function clearProvider(providerInput: string, options?: ClearCommandOptions, write?: OutputWriter): Promise<void>;
20
+ export declare function restoreProvider(providerInput: string, options?: CommandFlags, write?: OutputWriter): Promise<void>;
21
+ export declare function cleanManagedEnv(options?: EnvCleanCommandOptions, write?: OutputWriter): Promise<void>;
@@ -0,0 +1,125 @@
1
+ import pc from 'picocolors';
2
+ import { executePlan, renderPlan } from '../core/change-plan.js';
3
+ import { redactSecret } from '../core/redact.js';
4
+ import { getProvider, listProviders } from '../providers/registry.js';
5
+ import { planShellCleanup } from '../shells/cleanup.js';
6
+ import { discoverShellFiles } from '../shells/discovery.js';
7
+ function defaultWrite(line) {
8
+ console.log(line);
9
+ }
10
+ function writeLines(lines, write) {
11
+ for (const line of lines) {
12
+ write(line);
13
+ }
14
+ }
15
+ function formatProviderSettings(displayName, result) {
16
+ return [
17
+ pc.bold(displayName),
18
+ `Active source: ${result.state.activeSource}`,
19
+ `Confidence: ${result.target.confidence}`,
20
+ `Active target: ${result.state.activeTarget?.path ?? '(none)'}`,
21
+ `Official target: ${result.state.officialTarget?.path ?? '(not detected)'}`,
22
+ `Fallback target: ${result.state.fallbackTarget?.path ?? '(not available)'}`,
23
+ `Fallback override active: ${result.state.fallbackOverrideActive ? 'yes' : 'no'}`,
24
+ `Can restore official: ${result.state.canRestoreOfficial ? 'yes' : 'no'}`,
25
+ `API key: ${redactSecret(result.values.apiKey)}`,
26
+ `Base URL: ${result.values.baseUrl ?? '(not set)'}`,
27
+ ];
28
+ }
29
+ function formatDoctor(displayName, result) {
30
+ return [
31
+ pc.bold(displayName),
32
+ `Supported: ${result.supported ? 'yes' : 'no'}`,
33
+ `Confidence: ${result.target.confidence}`,
34
+ `Active source: ${result.state.activeSource}`,
35
+ `Active target: ${result.state.activeTarget?.path ?? '(none)'}`,
36
+ `Official target detected: ${result.state.officialTargetDetected ? 'yes' : 'no'}`,
37
+ `Official target: ${result.state.officialTarget?.path ?? '(not detected)'}`,
38
+ `Fallback target: ${result.state.fallbackTarget?.path ?? '(not available)'}`,
39
+ `Fallback override active: ${result.state.fallbackOverrideActive ? 'yes' : 'no'}`,
40
+ `Can restore official: ${result.state.canRestoreOfficial ? 'yes' : 'no'}`,
41
+ `API key: ${redactSecret(result.values.apiKey)}`,
42
+ `Base URL: ${result.values.baseUrl ?? '(not set)'}`,
43
+ ...result.messages.map((message) => `- ${message}`),
44
+ ];
45
+ }
46
+ export function getProviderMenuChoices() {
47
+ return listProviders().map((provider) => ({
48
+ name: provider.displayName,
49
+ value: provider.id,
50
+ }));
51
+ }
52
+ export async function applyPlan(plan, options = {}, write = defaultWrite) {
53
+ write(renderPlan(plan));
54
+ writeLines(await executePlan(plan, options), write);
55
+ }
56
+ export async function configureProvider(providerInput, values, options = {}, write = defaultWrite) {
57
+ const provider = getProvider(providerInput);
58
+ const plan = await provider.planSet({
59
+ values,
60
+ shellFile: options.shellFile,
61
+ homeDir: options.homeDir,
62
+ backup: options.backup,
63
+ });
64
+ await applyPlan(plan, options, write);
65
+ }
66
+ export async function showProviderSettings(providerInput, options = {}, write = defaultWrite) {
67
+ const provider = getProvider(providerInput);
68
+ const result = await provider.readCurrent({ shellFile: options.shellFile, homeDir: options.homeDir });
69
+ writeLines(formatProviderSettings(provider.displayName, result), write);
70
+ return result;
71
+ }
72
+ export async function runDiagnostics(providerInput, options = {}, write = defaultWrite) {
73
+ if (providerInput) {
74
+ const provider = getProvider(providerInput);
75
+ const result = await provider.doctor({ shellFile: options.shellFile, homeDir: options.homeDir });
76
+ writeLines(formatDoctor(provider.displayName, result), write);
77
+ return;
78
+ }
79
+ const providers = listProviders();
80
+ for (const [index, provider] of providers.entries()) {
81
+ const result = await provider.doctor({ shellFile: options.shellFile, homeDir: options.homeDir });
82
+ writeLines(formatDoctor(provider.displayName, result), write);
83
+ if (index < providers.length - 1) {
84
+ write('');
85
+ }
86
+ }
87
+ }
88
+ export async function clearProvider(providerInput, options = {}, write = defaultWrite) {
89
+ const provider = getProvider(providerInput);
90
+ const plan = await provider.planClear({
91
+ shellFile: options.shellFile,
92
+ homeDir: options.homeDir,
93
+ backup: options.backup,
94
+ });
95
+ await applyPlan(plan, options, write);
96
+ if (!options.env) {
97
+ return;
98
+ }
99
+ const current = await provider.readCurrent({ shellFile: options.shellFile, homeDir: options.homeDir });
100
+ const envPlan = await planShellCleanup({
101
+ shellFile: options.shellFile ?? current.state.fallbackTarget?.shellFile,
102
+ provider: provider.id,
103
+ backup: options.backup,
104
+ });
105
+ await applyPlan(envPlan, options, write);
106
+ }
107
+ export async function restoreProvider(providerInput, options = {}, write = defaultWrite) {
108
+ const provider = getProvider(providerInput);
109
+ const plan = await provider.planRestoreOfficial({
110
+ shellFile: options.shellFile,
111
+ homeDir: options.homeDir,
112
+ backup: options.backup,
113
+ });
114
+ await applyPlan(plan, options, write);
115
+ }
116
+ export async function cleanManagedEnv(options = {}, write = defaultWrite) {
117
+ const [shellFile] = await discoverShellFiles({ preferred: options.shellFile, homeDir: options.homeDir });
118
+ const plan = await planShellCleanup({
119
+ shellFile,
120
+ provider: options.provider,
121
+ backup: options.backup,
122
+ });
123
+ await applyPlan(plan, options, write);
124
+ }
125
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/cli/actions.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,4 @@
1
- import { executePlan, renderPlan } from '../../core/change-plan.js';
2
- import { planShellCleanup } from '../../shells/cleanup.js';
3
- import { getProvider } from '../../providers/registry.js';
1
+ import { clearProvider } from '../actions.js';
4
2
  export function registerClearCommand(program) {
5
3
  program
6
4
  .command('clear')
@@ -12,28 +10,7 @@ export function registerClearCommand(program) {
12
10
  .option('--home-dir <path>', 'Override HOME for provider discovery')
13
11
  .option('--env', 'Also clear managed environment block entries for this provider')
14
12
  .action(async (providerInput, options) => {
15
- const provider = getProvider(providerInput);
16
- const plan = await provider.planClear({
17
- shellFile: options.shellFile,
18
- homeDir: options.homeDir,
19
- backup: options.backup,
20
- });
21
- console.log(renderPlan(plan));
22
- for (const line of await executePlan(plan, options)) {
23
- console.log(line);
24
- }
25
- if (options.env) {
26
- const current = await provider.readCurrent({ shellFile: options.shellFile, homeDir: options.homeDir });
27
- const envPlan = await planShellCleanup({
28
- shellFile: options.shellFile ?? current.state.fallbackTarget?.shellFile,
29
- provider: provider.id,
30
- backup: options.backup,
31
- });
32
- console.log(renderPlan(envPlan));
33
- for (const line of await executePlan(envPlan, options)) {
34
- console.log(line);
35
- }
36
- }
13
+ await clearProvider(providerInput, options);
37
14
  });
38
15
  }
39
16
  //# sourceMappingURL=clear.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/cli/commands/clear.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,OAAO,EAAE,gEAAgE,CAAC;SACjF,MAAM,CAAC,KAAK,EAAE,aAAqB,EAAE,OAMrC,EAAE,EAAE;QACH,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC;YACpC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACvG,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC;gBACrC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,SAAS;gBACvE,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACrB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,MAAM,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/cli/commands/clear.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,OAAO,EAAE,gEAAgE,CAAC;SACjF,MAAM,CAAC,KAAK,EAAE,aAAqB,EAAE,OAMrC,EAAE,EAAE;QACH,MAAM,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,25 +1,4 @@
1
- import pc from 'picocolors';
2
- import { redactSecret } from '../../core/redact.js';
3
- import { getProvider, listProviders } from '../../providers/registry.js';
4
- async function printDoctor(providerInput, shellFile, homeDir) {
5
- const provider = getProvider(providerInput);
6
- const result = await provider.doctor({ shellFile, homeDir });
7
- console.log(pc.bold(provider.displayName));
8
- console.log(`Supported: ${result.supported ? 'yes' : 'no'}`);
9
- console.log(`Confidence: ${result.target.confidence}`);
10
- console.log(`Active source: ${result.state.activeSource}`);
11
- console.log(`Active target: ${result.state.activeTarget?.path ?? '(none)'}`);
12
- console.log(`Official target detected: ${result.state.officialTargetDetected ? 'yes' : 'no'}`);
13
- console.log(`Official target: ${result.state.officialTarget?.path ?? '(not detected)'}`);
14
- console.log(`Fallback target: ${result.state.fallbackTarget?.path ?? '(not available)'}`);
15
- console.log(`Fallback override active: ${result.state.fallbackOverrideActive ? 'yes' : 'no'}`);
16
- console.log(`Can restore official: ${result.state.canRestoreOfficial ? 'yes' : 'no'}`);
17
- console.log(`API key: ${redactSecret(result.values.apiKey)}`);
18
- console.log(`Base URL: ${result.values.baseUrl ?? '(not set)'}`);
19
- for (const message of result.messages) {
20
- console.log(`- ${message}`);
21
- }
22
- }
1
+ import { runDiagnostics } from '../actions.js';
23
2
  export function registerDoctorCommand(program) {
24
3
  program
25
4
  .command('doctor')
@@ -28,14 +7,7 @@ export function registerDoctorCommand(program) {
28
7
  .option('--shell-file <path>', 'Shell file for fallback env management')
29
8
  .option('--home-dir <path>', 'Override HOME for provider discovery')
30
9
  .action(async (providerInput, options) => {
31
- if (providerInput) {
32
- await printDoctor(providerInput, options.shellFile, options.homeDir);
33
- return;
34
- }
35
- for (const provider of listProviders()) {
36
- await printDoctor(provider.id, options.shellFile, options.homeDir);
37
- console.log('');
38
- }
10
+ await runDiagnostics(providerInput, options);
39
11
  });
40
12
  }
41
13
  //# sourceMappingURL=doctor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEzE,KAAK,UAAU,WAAW,CAAC,aAAqB,EAAE,SAAkB,EAAE,OAAgB;IACpF,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,IAAI,gBAAgB,EAAE,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC,CAAC;IACjE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oDAAoD,CAAC;SACjE,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,aAAiC,EAAE,OAAiD,EAAE,EAAE;QACrG,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,EAAE,CAAC;YACvC,MAAM,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oDAAoD,CAAC;SACjE,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,aAAiC,EAAE,OAAiD,EAAE,EAAE;QACrG,MAAM,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,6 +1,4 @@
1
- import { executePlan, renderPlan } from '../../core/change-plan.js';
2
- import { discoverShellFiles } from '../../shells/discovery.js';
3
- import { planShellCleanup } from '../../shells/cleanup.js';
1
+ import { cleanManagedEnv } from '../actions.js';
4
2
  export function registerEnvCleanCommand(program) {
5
3
  const env = program.command('env').description('Managed environment block commands');
6
4
  env
@@ -12,16 +10,7 @@ export function registerEnvCleanCommand(program) {
12
10
  .option('--shell-file <path>', 'Shell file to clean')
13
11
  .option('--home-dir <path>', 'Override HOME for shell discovery')
14
12
  .action(async (options) => {
15
- const [shellFile] = await discoverShellFiles({ preferred: options.shellFile, homeDir: options.homeDir });
16
- const plan = await planShellCleanup({
17
- shellFile,
18
- provider: options.provider,
19
- backup: options.backup,
20
- });
21
- console.log(renderPlan(plan));
22
- for (const line of await executePlan(plan, options)) {
23
- console.log(line);
24
- }
13
+ await cleanManagedEnv(options);
25
14
  });
26
15
  }
27
16
  //# sourceMappingURL=env-clean.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"env-clean.js","sourceRoot":"","sources":["../../../src/cli/commands/env-clean.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAErF,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;SAC5D,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;SACpD,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,OAMd,EAAE,EAAE;QACH,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,kBAAkB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzG,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC;YAClC,SAAS;YACT,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"env-clean.js","sourceRoot":"","sources":["../../../src/cli/commands/env-clean.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAErF,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;SAC5D,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;SACpD,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,OAMd,EAAE,EAAE;QACH,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,6 +1,4 @@
1
- import pc from 'picocolors';
2
- import { redactSecret } from '../../core/redact.js';
3
- import { getProvider } from '../../providers/registry.js';
1
+ import { showProviderSettings } from '../actions.js';
4
2
  export function registerGetCommand(program) {
5
3
  program
6
4
  .command('get')
@@ -9,18 +7,7 @@ export function registerGetCommand(program) {
9
7
  .option('--shell-file <path>', 'Shell file for fallback env management')
10
8
  .option('--home-dir <path>', 'Override HOME for provider discovery')
11
9
  .action(async (providerInput, options) => {
12
- const provider = getProvider(providerInput);
13
- const result = await provider.readCurrent({ shellFile: options.shellFile, homeDir: options.homeDir });
14
- console.log(pc.bold(`${provider.displayName}`));
15
- console.log(`Active source: ${result.state.activeSource}`);
16
- console.log(`Confidence: ${result.target.confidence}`);
17
- console.log(`Active target: ${result.state.activeTarget?.path ?? '(none)'}`);
18
- console.log(`Official target: ${result.state.officialTarget?.path ?? '(not detected)'}`);
19
- console.log(`Fallback target: ${result.state.fallbackTarget?.path ?? '(not available)'}`);
20
- console.log(`Fallback override active: ${result.state.fallbackOverrideActive ? 'yes' : 'no'}`);
21
- console.log(`Can restore official: ${result.state.canRestoreOfficial ? 'yes' : 'no'}`);
22
- console.log(`API key: ${redactSecret(result.values.apiKey)}`);
23
- console.log(`Base URL: ${result.values.baseUrl ?? '(not set)'}`);
10
+ await showProviderSettings(providerInput, options);
24
11
  });
25
12
  }
26
13
  //# sourceMappingURL=get.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/cli/commands/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,qCAAqC,CAAC;SAClD,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,aAAqB,EAAE,OAAiD,EAAE,EAAE;QACzF,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACtG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,IAAI,gBAAgB,EAAE,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,IAAI,iBAAiB,EAAE,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/cli/commands/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,qCAAqC,CAAC;SAClD,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,aAAqB,EAAE,OAAiD,EAAE,EAAE;QACzF,MAAM,oBAAoB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,6 +1,4 @@
1
- import { input, password, select } from '@inquirer/prompts';
2
- import { executePlan, renderPlan } from '../../core/change-plan.js';
3
- import { getProvider } from '../../providers/registry.js';
1
+ import { runConfigureProviderFlow } from '../interactive.js';
4
2
  export function registerInitCommand(program) {
5
3
  program
6
4
  .command('init')
@@ -10,35 +8,7 @@ export function registerInitCommand(program) {
10
8
  .option('--shell-file <path>', 'Shell file for fallback env management')
11
9
  .option('--home-dir <path>', 'Override HOME for provider discovery')
12
10
  .action(async (options) => {
13
- const providerName = await select({
14
- message: 'Choose a provider',
15
- choices: [
16
- { name: 'Claude Code', value: 'claude-code' },
17
- { name: 'Codex', value: 'codex' },
18
- { name: 'OpenClaw', value: 'openclaw' },
19
- ],
20
- });
21
- const apiKey = await password({ message: 'API key', mask: '*' });
22
- const baseUrl = await input({ message: 'Base URL (optional)' });
23
- const provider = getProvider(providerName);
24
- const doctor = await provider.doctor({ shellFile: options.shellFile, homeDir: options.homeDir });
25
- if (doctor.state.officialTargetDetected && provider.id !== 'claude-code') {
26
- console.log(`Detected official target at ${doctor.state.officialTarget?.path}; init will write a managed fallback override instead of changing the official config.`);
27
- }
28
- const plan = await provider.planSet({
29
- values: {
30
- apiKey: apiKey || undefined,
31
- baseUrl: baseUrl || undefined,
32
- },
33
- shellFile: options.shellFile,
34
- homeDir: options.homeDir,
35
- backup: options.backup,
36
- });
37
- console.log(renderPlan(plan));
38
- const outputs = await executePlan(plan, options);
39
- for (const line of outputs) {
40
- console.log(line);
41
- }
11
+ await runConfigureProviderFlow(options);
42
12
  });
43
13
  }
44
14
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,OAAqF,EAAE,EAAE;QACtG,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC;YAChC,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;gBAC7C,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;gBACjC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;aACxC;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACjG,IAAI,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAI,QAAQ,CAAC,EAAE,KAAK,aAAa,EAAE,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,wFAAwF,CAAC,CAAC;QACxK,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;YAClC,MAAM,EAAE;gBACN,MAAM,EAAE,MAAM,IAAI,SAAS;gBAC3B,OAAO,EAAE,OAAO,IAAI,SAAS;aAC9B;YACD,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,OAAqF,EAAE,EAAE;QACtG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,5 +1,4 @@
1
- import { executePlan, renderPlan } from '../../core/change-plan.js';
2
- import { getProvider } from '../../providers/registry.js';
1
+ import { restoreProvider } from '../actions.js';
3
2
  export function registerRestoreCommand(program) {
4
3
  program
5
4
  .command('restore')
@@ -10,16 +9,7 @@ export function registerRestoreCommand(program) {
10
9
  .option('--shell-file <path>', 'Shell file for fallback env management')
11
10
  .option('--home-dir <path>', 'Override HOME for provider discovery')
12
11
  .action(async (providerInput, options) => {
13
- const provider = getProvider(providerInput);
14
- const plan = await provider.planRestoreOfficial({
15
- shellFile: options.shellFile,
16
- homeDir: options.homeDir,
17
- backup: options.backup,
18
- });
19
- console.log(renderPlan(plan));
20
- for (const line of await executePlan(plan, options)) {
21
- console.log(line);
22
- }
12
+ await restoreProvider(providerInput, options);
23
13
  });
24
14
  }
25
15
  //# sourceMappingURL=restore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"restore.js","sourceRoot":"","sources":["../../../src/cli/commands/restore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iFAAiF,CAAC;SAC9F,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,aAAqB,EAAE,OAKrC,EAAE,EAAE;QACH,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC;YAC9C,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"restore.js","sourceRoot":"","sources":["../../../src/cli/commands/restore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iFAAiF,CAAC;SAC9F,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,aAAqB,EAAE,OAKrC,EAAE,EAAE;QACH,MAAM,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { executePlan, renderPlan } from '../../core/change-plan.js';
3
- import { getProvider } from '../../providers/registry.js';
2
+ import { configureProvider } from '../actions.js';
4
3
  const argsSchema = z.object({
5
4
  apiKey: z.string().optional(),
6
5
  baseUrl: z.string().url().optional(),
@@ -17,22 +16,11 @@ export function registerSetCommand(program) {
17
16
  .option('--shell-file <path>', 'Shell file for fallback env management')
18
17
  .option('--home-dir <path>', 'Override HOME for provider discovery')
19
18
  .action(async (providerInput, options) => {
20
- const provider = getProvider(providerInput);
21
19
  const values = argsSchema.parse({
22
20
  apiKey: options.apiKey,
23
21
  baseUrl: options.baseUrl,
24
22
  });
25
- const plan = await provider.planSet({
26
- values,
27
- shellFile: options.shellFile,
28
- homeDir: options.homeDir,
29
- backup: options.backup,
30
- });
31
- console.log(renderPlan(plan));
32
- const outputs = await executePlan(plan, options);
33
- for (const line of outputs) {
34
- console.log(line);
35
- }
23
+ await configureProvider(providerInput, values, options);
36
24
  });
37
25
  }
38
26
  //# sourceMappingURL=set.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/cli/commands/set.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,4BAA4B,CAAC;SACzC,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,mBAAmB,EAAE,SAAS,CAAC;SACtC,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC;SACtC,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,aAAqB,EAAE,OAOrC,EAAE,EAAE;QACH,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;YAClC,MAAM;YACN,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/cli/commands/set.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,4BAA4B,CAAC;SACzC,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,mBAAmB,EAAE,SAAS,CAAC;SACtC,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC;SACtC,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,aAAqB,EAAE,OAOrC,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QACH,MAAM,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC"}
package/dist/cli/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Command } from 'commander';
2
+ import { runInteractiveCli } from './interactive.js';
2
3
  import { registerClearCommand } from './commands/clear.js';
3
4
  import { registerDoctorCommand } from './commands/doctor.js';
4
5
  import { registerEnvCleanCommand } from './commands/env-clean.js';
@@ -6,6 +7,9 @@ import { registerGetCommand } from './commands/get.js';
6
7
  import { registerInitCommand } from './commands/init.js';
7
8
  import { registerRestoreCommand } from './commands/restore.js';
8
9
  import { registerSetCommand } from './commands/set.js';
10
+ function shouldEnterInteractive(argv) {
11
+ return argv.slice(2).length === 0;
12
+ }
9
13
  export async function runCli(argv) {
10
14
  const program = new Command();
11
15
  program
@@ -19,6 +23,10 @@ export async function runCli(argv) {
19
23
  registerRestoreCommand(program);
20
24
  registerDoctorCommand(program);
21
25
  registerEnvCleanCommand(program);
26
+ if (shouldEnterInteractive(argv)) {
27
+ await runInteractiveCli();
28
+ return;
29
+ }
22
30
  await program.parseAsync(argv);
23
31
  }
24
32
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,yDAAyD,CAAC;SACtE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEjC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,SAAS,sBAAsB,CAAC,IAAc;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,yDAAyD,CAAC;SACtE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,iBAAiB,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CommandFlags } from '../core/types.js';
2
+ export declare function runConfigureProviderFlow(options?: CommandFlags, providerInput?: string): Promise<void>;
3
+ export declare function runInteractiveCli(options?: CommandFlags): Promise<void>;
@@ -0,0 +1,140 @@
1
+ import { input, password, select } from '@inquirer/prompts';
2
+ import { getProvider } from '../providers/registry.js';
3
+ import { configureProvider, getProviderMenuChoices, showProviderSettings, runDiagnostics, clearProvider, restoreProvider, cleanManagedEnv } from './actions.js';
4
+ const EXIT_VALUE = '__exit__';
5
+ const ALL_PROVIDERS_VALUE = '__all__';
6
+ function printConfigurationSummary(result) {
7
+ console.log('');
8
+ console.log('Current provider status');
9
+ console.log(`- Active source: ${result.state.activeSource}`);
10
+ console.log(`- Official target: ${result.state.officialTarget?.path ?? '(not detected)'}`);
11
+ console.log(`- Fallback target: ${result.state.fallbackTarget?.path ?? '(not available)'}`);
12
+ console.log(`- Fallback override active: ${result.state.fallbackOverrideActive ? 'yes' : 'no'}`);
13
+ console.log(`- Can restore official: ${result.state.canRestoreOfficial ? 'yes' : 'no'}`);
14
+ console.log(`- API key: ${result.values.apiKey ? '(configured)' : '(not set)'}`);
15
+ console.log(`- Base URL: ${result.values.baseUrl ?? '(not set)'}`);
16
+ }
17
+ async function selectProvider(message) {
18
+ return select({
19
+ message,
20
+ choices: getProviderMenuChoices(),
21
+ });
22
+ }
23
+ async function promptProviderValues(current) {
24
+ const apiKeyInput = await password({
25
+ message: current.values.apiKey
26
+ ? 'API key (leave blank to keep current value)'
27
+ : 'API key',
28
+ mask: '*',
29
+ });
30
+ const baseUrlInput = await input({
31
+ message: current.values.baseUrl
32
+ ? 'Base URL (optional, leave blank to keep current value)'
33
+ : 'Base URL (optional)',
34
+ default: current.values.baseUrl,
35
+ });
36
+ return {
37
+ apiKey: apiKeyInput || current.values.apiKey,
38
+ baseUrl: baseUrlInput || current.values.baseUrl,
39
+ };
40
+ }
41
+ export async function runConfigureProviderFlow(options = {}, providerInput) {
42
+ const providerId = (providerInput ? getProvider(providerInput).id : await selectProvider('Choose a provider'));
43
+ const provider = getProvider(providerId);
44
+ const current = await provider.readCurrent({ shellFile: options.shellFile, homeDir: options.homeDir });
45
+ console.log(`\nConfiguring ${provider.displayName}`);
46
+ printConfigurationSummary(current);
47
+ if (provider.id !== 'claude-code' && current.state.officialTargetDetected) {
48
+ console.log(`- Note: ${provider.displayName} official target is detected. This flow writes a managed fallback override instead of changing the official config.`);
49
+ }
50
+ const values = await promptProviderValues(current);
51
+ console.log('');
52
+ await configureProvider(provider.id, values, options);
53
+ }
54
+ async function runShowProviderSettingsFlow(options) {
55
+ const providerId = await selectProvider('Choose a provider');
56
+ console.log('');
57
+ await showProviderSettings(providerId, options);
58
+ }
59
+ async function runDiagnosticsFlow(options) {
60
+ const providerSelection = await select({
61
+ message: 'Run diagnostics for which provider?',
62
+ choices: [
63
+ { name: 'All providers', value: ALL_PROVIDERS_VALUE },
64
+ ...getProviderMenuChoices(),
65
+ ],
66
+ });
67
+ console.log('');
68
+ await runDiagnostics(providerSelection === ALL_PROVIDERS_VALUE ? undefined : providerSelection, options);
69
+ }
70
+ async function runClearProviderFlow(options) {
71
+ const providerId = await selectProvider('Choose a provider');
72
+ console.log('');
73
+ await clearProvider(providerId, options);
74
+ }
75
+ async function runRestoreProviderFlow(options) {
76
+ const providerId = await selectProvider('Choose a provider');
77
+ console.log('');
78
+ await restoreProvider(providerId, options);
79
+ }
80
+ async function runEnvCleanupFlow(options) {
81
+ const providerSelection = await select({
82
+ message: 'Clean managed shell env block for which provider?',
83
+ choices: [
84
+ { name: 'All managed providers', value: ALL_PROVIDERS_VALUE },
85
+ ...getProviderMenuChoices(),
86
+ ],
87
+ });
88
+ console.log('');
89
+ await cleanManagedEnv({
90
+ ...options,
91
+ provider: providerSelection === ALL_PROVIDERS_VALUE ? undefined : providerSelection,
92
+ });
93
+ }
94
+ export async function runInteractiveCli(options = {}) {
95
+ while (true) {
96
+ const action = await select({
97
+ message: 'What would you like to do?',
98
+ choices: [
99
+ { name: 'Configure provider', value: 'configure' },
100
+ { name: 'Show provider settings', value: 'show' },
101
+ { name: 'Run diagnostics', value: 'doctor' },
102
+ { name: 'Clear provider configuration', value: 'clear' },
103
+ { name: 'Restore official configuration', value: 'restore' },
104
+ { name: 'Clean managed shell env block', value: 'env-clean' },
105
+ { name: 'Exit', value: EXIT_VALUE },
106
+ ],
107
+ });
108
+ if (action === EXIT_VALUE) {
109
+ return;
110
+ }
111
+ if (action === 'configure') {
112
+ await runConfigureProviderFlow(options);
113
+ console.log('');
114
+ continue;
115
+ }
116
+ if (action === 'show') {
117
+ await runShowProviderSettingsFlow(options);
118
+ console.log('');
119
+ continue;
120
+ }
121
+ if (action === 'doctor') {
122
+ await runDiagnosticsFlow(options);
123
+ console.log('');
124
+ continue;
125
+ }
126
+ if (action === 'clear') {
127
+ await runClearProviderFlow(options);
128
+ console.log('');
129
+ continue;
130
+ }
131
+ if (action === 'restore') {
132
+ await runRestoreProviderFlow(options);
133
+ console.log('');
134
+ continue;
135
+ }
136
+ await runEnvCleanupFlow(options);
137
+ console.log('');
138
+ }
139
+ }
140
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/cli/interactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,54 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ const runInteractiveCli = vi.fn();
3
+ const parseAsync = vi.fn().mockResolvedValue(undefined);
4
+ const commandFns = {
5
+ registerInitCommand: vi.fn(),
6
+ registerSetCommand: vi.fn(),
7
+ registerGetCommand: vi.fn(),
8
+ registerClearCommand: vi.fn(),
9
+ registerRestoreCommand: vi.fn(),
10
+ registerDoctorCommand: vi.fn(),
11
+ registerEnvCleanCommand: vi.fn(),
12
+ };
13
+ vi.mock('../cli/interactive.js', () => ({
14
+ runInteractiveCli,
15
+ }));
16
+ vi.mock('commander', () => ({
17
+ Command: vi.fn().mockImplementation(() => ({
18
+ name: vi.fn().mockReturnThis(),
19
+ description: vi.fn().mockReturnThis(),
20
+ version: vi.fn().mockReturnThis(),
21
+ parseAsync,
22
+ })),
23
+ }));
24
+ vi.mock('../cli/commands/init.js', () => ({ registerInitCommand: commandFns.registerInitCommand }));
25
+ vi.mock('../cli/commands/set.js', () => ({ registerSetCommand: commandFns.registerSetCommand }));
26
+ vi.mock('../cli/commands/get.js', () => ({ registerGetCommand: commandFns.registerGetCommand }));
27
+ vi.mock('../cli/commands/clear.js', () => ({ registerClearCommand: commandFns.registerClearCommand }));
28
+ vi.mock('../cli/commands/restore.js', () => ({ registerRestoreCommand: commandFns.registerRestoreCommand }));
29
+ vi.mock('../cli/commands/doctor.js', () => ({ registerDoctorCommand: commandFns.registerDoctorCommand }));
30
+ vi.mock('../cli/commands/env-clean.js', () => ({ registerEnvCleanCommand: commandFns.registerEnvCleanCommand }));
31
+ beforeEach(() => {
32
+ vi.clearAllMocks();
33
+ });
34
+ describe('runCli', () => {
35
+ it('enters interactive mode when no subcommand is provided', async () => {
36
+ const { runCli } = await import('../cli/index.js');
37
+ await runCli(['node', 'llm-config']);
38
+ expect(runInteractiveCli).toHaveBeenCalledTimes(1);
39
+ expect(parseAsync).not.toHaveBeenCalled();
40
+ });
41
+ it('keeps explicit commands on the commander path', async () => {
42
+ const { runCli } = await import('../cli/index.js');
43
+ await runCli(['node', 'llm-config', 'doctor']);
44
+ expect(runInteractiveCli).not.toHaveBeenCalled();
45
+ expect(parseAsync).toHaveBeenCalledWith(['node', 'llm-config', 'doctor']);
46
+ });
47
+ it('keeps root options on the commander path', async () => {
48
+ const { runCli } = await import('../cli/index.js');
49
+ await runCli(['node', 'llm-config', '--help']);
50
+ expect(runInteractiveCli).not.toHaveBeenCalled();
51
+ expect(parseAsync).toHaveBeenCalledWith(['node', 'llm-config', '--help']);
52
+ });
53
+ });
54
+ //# sourceMappingURL=cli-index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-index.test.js","sourceRoot":"","sources":["../../src/tests/cli-index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import { Command } from 'commander';
2
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
3
+ const runConfigureProviderFlow = vi.fn().mockResolvedValue(undefined);
4
+ vi.mock('../cli/interactive.js', () => ({
5
+ runConfigureProviderFlow,
6
+ }));
7
+ beforeEach(() => {
8
+ vi.clearAllMocks();
9
+ });
10
+ describe('init command', () => {
11
+ it('delegates to the shared configure flow', async () => {
12
+ const { registerInitCommand } = await import('../cli/commands/init.js');
13
+ const program = new Command();
14
+ registerInitCommand(program);
15
+ await program.parseAsync([
16
+ 'node',
17
+ 'llm-config',
18
+ 'init',
19
+ '--dry-run',
20
+ '--backup',
21
+ '--shell-file',
22
+ '/tmp/.zshrc',
23
+ '--home-dir',
24
+ '/tmp/home',
25
+ ]);
26
+ expect(runConfigureProviderFlow).toHaveBeenCalledWith({
27
+ backup: true,
28
+ dryRun: true,
29
+ homeDir: '/tmp/home',
30
+ shellFile: '/tmp/.zshrc',
31
+ });
32
+ });
33
+ });
34
+ //# sourceMappingURL=init-command.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-command.test.js","sourceRoot":"","sources":["../../src/tests/init-command.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,MAAM,wBAAwB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAEtE,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,wBAAwB;CACzB,CAAC,CAAC,CAAC;AAEJ,UAAU,CAAC,GAAG,EAAE;IACd,EAAE,CAAC,aAAa,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,OAAO,CAAC,UAAU,CAAC;YACvB,MAAM;YACN,YAAY;YACZ,MAAM;YACN,WAAW;YACX,UAAU;YACV,cAAc;YACd,aAAa;YACb,YAAY;YACZ,WAAW;SACZ,CAAC,CAAC;QAEH,MAAM,CAAC,wBAAwB,CAAC,CAAC,oBAAoB,CAAC;YACpD,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,WAAW;YACpB,SAAS,EAAE,aAAa;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "llm-config-cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "CLI for configuring Claude Code, Codex, and OpenClaw API settings",
5
5
  "type": "module",
6
6
  "bin": {
7
+ "llm-config-cli": "dist/bin/llm-config.js",
7
8
  "llm-config": "dist/bin/llm-config.js"
8
9
  },
9
10
  "files": [