Skip to content

Commit 3aec000

Browse files
authored
refactor: consolidate cli-config into global-config (#802)
1 parent 90f17b4 commit 3aec000

12 files changed

Lines changed: 77 additions & 64 deletions

File tree

src/cli/__tests__/global-config.test.ts

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { getOrCreateInstallationId, readGlobalConfig, updateGlobalConfig } from '../global-config';
1+
import {
2+
getOrCreateInstallationId,
3+
readGlobalConfig,
4+
readGlobalConfigSync,
5+
updateGlobalConfig,
6+
} from '../../lib/schemas/io/global-config';
27
import { createTempConfig } from './helpers/temp-config';
38
import { readFile, writeFile } from 'fs/promises';
49
import { afterAll, beforeEach, describe, expect, it } from 'vitest';
@@ -21,10 +26,29 @@ describe('global-config', () => {
2126
it('returns empty object when file is missing or invalid', async () => {
2227
expect(await readGlobalConfig(tmp.testDir + '/nonexistent.json')).toEqual({});
2328

24-
await writeFile(tmp.configFile, JSON.stringify({ telemetry: { enabled: 'false' } }));
29+
await writeFile(tmp.configFile, 'not json');
2530
expect(await readGlobalConfig(tmp.configFile)).toEqual({});
2631
});
2732

33+
it('drops invalid fields while preserving valid ones', async () => {
34+
await writeFile(
35+
tmp.configFile,
36+
JSON.stringify({
37+
transactionSearchIndexPercentage: 'not-a-number',
38+
uvIndex: 'https://valid.url',
39+
telemetry: { enabled: 'yes', endpoint: 'https://example.com' },
40+
})
41+
);
42+
43+
const config = await readGlobalConfig(tmp.configFile);
44+
45+
expect(config).toEqual({
46+
transactionSearchIndexPercentage: undefined,
47+
uvIndex: 'https://valid.url',
48+
telemetry: { enabled: undefined, endpoint: 'https://example.com' },
49+
});
50+
});
51+
2852
it('preserves unknown fields via passthrough', async () => {
2953
const full = {
3054
installationId: 'abc-123',
@@ -39,6 +63,21 @@ describe('global-config', () => {
3963
});
4064
});
4165

66+
describe('readGlobalConfigSync', () => {
67+
it('returns parsed config when file exists', async () => {
68+
await writeFile(tmp.configFile, JSON.stringify({ telemetry: { enabled: false } }));
69+
70+
expect(readGlobalConfigSync(tmp.configFile)).toEqual({ telemetry: { enabled: false } });
71+
});
72+
73+
it('returns empty object when file is missing or invalid', async () => {
74+
expect(readGlobalConfigSync(tmp.testDir + '/nonexistent.json')).toEqual({});
75+
76+
await writeFile(tmp.configFile, 'not json');
77+
expect(readGlobalConfigSync(tmp.configFile)).toEqual({});
78+
});
79+
});
80+
4281
describe('updateGlobalConfig', () => {
4382
it('creates directory and writes config when none exists', async () => {
4483
const fresh = createTempConfig('gc-fresh');

src/cli/cli.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { getOrCreateInstallationId } from '../lib/schemas/io/global-config';
12
import { registerAdd } from './commands/add';
23
import { registerCreate } from './commands/create';
34
import { registerDeploy } from './commands/deploy';
@@ -19,7 +20,6 @@ import { registerTraces } from './commands/traces';
1920
import { registerUpdate } from './commands/update';
2021
import { registerValidate } from './commands/validate';
2122
import { PACKAGE_VERSION } from './constants';
22-
import { getOrCreateInstallationId } from './global-config';
2323
import { ALL_PRIMITIVES } from './primitives';
2424
import { TelemetryClientAccessor } from './telemetry';
2525
import { App } from './tui/App';

src/cli/commands/telemetry/__tests__/telemetry.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
import { readGlobalConfig } from '../../../../lib/schemas/io/global-config';
12
import { createTempConfig } from '../../../__tests__/helpers/temp-config';
2-
import { readGlobalConfig } from '../../../global-config';
33
import { handleTelemetryDisable, handleTelemetryEnable, handleTelemetryStatus } from '../actions';
44
import { chmod, mkdir, rm, writeFile } from 'fs/promises';
55
import { afterAll, afterEach, beforeEach, describe, expect, it, vi } from 'vitest';

src/cli/commands/telemetry/actions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { GLOBAL_CONFIG_DIR, GLOBAL_CONFIG_FILE, updateGlobalConfig } from '../../global-config.js';
1+
import { GLOBAL_CONFIG_DIR, GLOBAL_CONFIG_FILE, updateGlobalConfig } from '../../../lib/schemas/io/global-config.js';
22
import { resolveTelemetryPreference } from '../../telemetry/config.js';
33

44
export async function handleTelemetryDisable(

src/cli/operations/deploy/__tests__/post-deploy-observability.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
import { setupTransactionSearch } from '../post-deploy-observability.js';
22
import { beforeEach, describe, expect, it, vi } from 'vitest';
33

4-
const { mockEnableTransactionSearch, mockReadCliConfig } = vi.hoisted(() => ({
4+
const { mockEnableTransactionSearch, mockReadGlobalConfigSync } = vi.hoisted(() => ({
55
mockEnableTransactionSearch: vi.fn(),
6-
mockReadCliConfig: vi.fn(),
6+
mockReadGlobalConfigSync: vi.fn(),
77
}));
88

99
vi.mock('../../../aws/transaction-search', () => ({
1010
enableTransactionSearch: mockEnableTransactionSearch,
1111
}));
1212

13-
vi.mock('../../../../lib/schemas/io/cli-config', () => ({
14-
readCliConfig: mockReadCliConfig,
13+
vi.mock('../../../../lib/schemas/io/global-config', () => ({
14+
readGlobalConfigSync: mockReadGlobalConfigSync,
1515
}));
1616

1717
describe('setupTransactionSearch', () => {
1818
beforeEach(() => {
1919
vi.clearAllMocks();
20-
mockReadCliConfig.mockReturnValue({});
20+
mockReadGlobalConfigSync.mockReturnValue({});
2121
mockEnableTransactionSearch.mockResolvedValue({ success: true });
2222
});
2323

@@ -33,7 +33,7 @@ describe('setupTransactionSearch', () => {
3333
});
3434

3535
it('passes custom transactionSearchIndexPercentage from config', async () => {
36-
mockReadCliConfig.mockReturnValue({ transactionSearchIndexPercentage: 25 });
36+
mockReadGlobalConfigSync.mockReturnValue({ transactionSearchIndexPercentage: 25 });
3737

3838
const result = await setupTransactionSearch({
3939
region: 'us-east-1',
@@ -57,7 +57,7 @@ describe('setupTransactionSearch', () => {
5757
});
5858

5959
it('skips when disableTransactionSearch is true in config', async () => {
60-
mockReadCliConfig.mockReturnValue({ disableTransactionSearch: true });
60+
mockReadGlobalConfigSync.mockReturnValue({ disableTransactionSearch: true });
6161

6262
const result = await setupTransactionSearch({
6363
region: 'us-east-1',

src/cli/operations/deploy/post-deploy-observability.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { readCliConfig } from '../../../lib/schemas/io/cli-config';
1+
import { readGlobalConfigSync } from '../../../lib/schemas/io/global-config';
22
import { enableTransactionSearch } from '../../aws/transaction-search';
33

44
export interface TransactionSearchSetupOptions {
@@ -31,7 +31,7 @@ export async function setupTransactionSearch(
3131
return { success: true };
3232
}
3333

34-
const config = readCliConfig();
34+
const config = readGlobalConfigSync();
3535
if (config.disableTransactionSearch) {
3636
return { success: true };
3737
}

src/cli/telemetry/client-accessor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { GLOBAL_CONFIG_DIR, readGlobalConfig } from '../global-config.js';
1+
import { GLOBAL_CONFIG_DIR, readGlobalConfig } from '../../lib/schemas/io/global-config.js';
22
import { TelemetryClient } from './client.js';
33
import { resolveAuditFilePath, resolveResourceAttributes } from './config.js';
44
import { FileSystemSink } from './sinks/filesystem-sink.js';

src/cli/telemetry/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
import { getOrCreateInstallationId, readGlobalConfig } from '../../lib/schemas/io/global-config.js';
12
import { PACKAGE_VERSION } from '../constants.js';
2-
import { getOrCreateInstallationId, readGlobalConfig } from '../global-config.js';
33
import { type ResourceAttributes, ResourceAttributesSchema } from './schemas/common-attributes.js';
44
import { randomUUID } from 'crypto';
55
import os from 'os';

src/lib/packaging/build-args.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { readCliConfig } from '../schemas/io/cli-config';
1+
import { readGlobalConfigSync } from '../schemas/io/global-config';
22

33
/**
44
* Return Docker --build-arg flags for UV index URLs configured in ~/.agentcore/config.json.
55
* Returns an empty array when no custom indexes are configured.
66
*/
77
export function getUvBuildArgs(): string[] {
8-
const config = readCliConfig();
8+
const config = readGlobalConfigSync();
99
const args: string[] = [];
1010
if (config.uvDefaultIndex) args.push('--build-arg', `UV_DEFAULT_INDEX=${config.uvDefaultIndex}`);
1111
if (config.uvIndex) args.push('--build-arg', `UV_INDEX=${config.uvIndex}`);

src/lib/schemas/io/cli-config.ts

Lines changed: 0 additions & 36 deletions
This file was deleted.

0 commit comments

Comments
 (0)