Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/kimi-code/test/utils/kimi-datasource-plugin.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ describe('kimi-datasource MCP server', () => {
}

const baseUrl = `http://127.0.0.1:${address.port}/coding/v1`;
const oauthHost = 'https://auth.dev.kimi.team';
const oauthHost = 'https://auth.dev.example.test';
const scopedCredential = kimiCodeEnvCredentialName({ oauthHost, baseUrl });

await mkdir(join(kimiHome, 'credentials'), { recursive: true });
Expand Down
16 changes: 8 additions & 8 deletions packages/agent-core/test/config/configs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -232,29 +232,29 @@ source = { kind = "apiJson", url = "https://registry.example/api.json", apiKey =
const toml = `
[providers."managed:kimi-code"]
type = "kimi"
base_url = "https://coding.deva.msh.team/coding/v1"
base_url = "https://api.dev.example.test/coding/v1"
api_key = ""
oauth = { storage = "file", key = "oauth/kimi-code-env-1234", oauth_host = "https://auth.dev.kimi.team" }
oauth = { storage = "file", key = "oauth/kimi-code-env-1234", oauth_host = "https://auth.dev.example.test" }

[services.moonshot_search]
base_url = "https://coding.deva.msh.team/coding/v1/search"
base_url = "https://api.dev.example.test/coding/v1/search"
api_key = ""
oauth = { storage = "file", key = "oauth/kimi-code-env-1234", oauth_host = "https://auth.dev.kimi.team" }
oauth = { storage = "file", key = "oauth/kimi-code-env-1234", oauth_host = "https://auth.dev.example.test" }
`;
const config = parseConfigString(toml, configPath);
expect(config.providers['managed:kimi-code']?.oauth).toEqual({
storage: 'file',
key: 'oauth/kimi-code-env-1234',
oauthHost: 'https://auth.dev.kimi.team',
oauthHost: 'https://auth.dev.example.test',
});
expect(config.services?.moonshotSearch?.oauth?.oauthHost).toBe('https://auth.dev.kimi.team');
expect(config.services?.moonshotSearch?.oauth?.oauthHost).toBe('https://auth.dev.example.test');

await writeConfigFile(configPath, config);
const text = await readFile(configPath, 'utf-8');
expect(text).toContain('oauth_host = "https://auth.dev.kimi.team"');
expect(text).toContain('oauth_host = "https://auth.dev.example.test"');
const roundTripped = parseConfigString(text, configPath);
expect(roundTripped.providers['managed:kimi-code']?.oauth?.oauthHost).toBe(
'https://auth.dev.kimi.team',
'https://auth.dev.example.test',
);
});

Expand Down
8 changes: 4 additions & 4 deletions packages/agent-core/test/rpc/plugins-rpc.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ describe('KimiCore plugin RPCs', () => {
`
[providers."managed:kimi-code"]
type = "kimi"
base_url = "https://coding.deva.msh.team/coding/v1"
base_url = "https://api.dev.example.test/coding/v1"
api_key = ""
oauth = { storage = "file", key = "oauth/kimi-code-env-1234", oauth_host = "https://auth.dev.kimi.team" }
oauth = { storage = "file", key = "oauth/kimi-code-env-1234", oauth_host = "https://auth.dev.example.test" }
`,
'utf8',
);
Expand Down Expand Up @@ -130,8 +130,8 @@ oauth = { storage = "file", key = "oauth/kimi-code-env-1234", oauth_host = "http

expect(mcpConfig.servers['plugin-kimi-datasource:data']?.env).toEqual(
expect.objectContaining({
KIMI_CODE_BASE_URL: 'https://coding.deva.msh.team/coding/v1',
KIMI_CODE_OAUTH_HOST: 'https://auth.dev.kimi.team',
KIMI_CODE_BASE_URL: 'https://api.dev.example.test/coding/v1',
KIMI_CODE_OAUTH_HOST: 'https://auth.dev.example.test',
}),
);
} finally {
Expand Down
34 changes: 17 additions & 17 deletions packages/node-sdk/test/auth-facade.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ describe('KimiHarness.auth', () => {

it('resolves cached access tokens from the configured scoped OAuth ref', async () => {
const oauthKey = resolveKimiCodeOAuthKey({
oauthHost: 'https://auth.dev.kimi.team',
baseUrl: 'https://coding.deva.msh.team/coding/v1',
oauthHost: 'https://auth.dev.example.test',
baseUrl: 'https://api.dev.example.test/coding/v1',
});
const storageName = resolveKimiTokenStorageName({ oauthKey });
const storage = new FileTokenStorage(join(homeDir, 'credentials'));
Expand All @@ -76,9 +76,9 @@ describe('KimiHarness.auth', () => {
`
[providers."managed:kimi-code"]
type = "kimi"
base_url = "https://coding.deva.msh.team/coding/v1"
base_url = "https://api.dev.example.test/coding/v1"
api_key = ""
oauth = { storage = "file", key = "${oauthKey}", oauth_host = "https://auth.dev.kimi.team" }
oauth = { storage = "file", key = "${oauthKey}", oauth_host = "https://auth.dev.example.test" }
`,
);
const harness = createKimiHarness({ homeDir, identity: TEST_IDENTITY });
Expand All @@ -88,8 +88,8 @@ oauth = { storage = "file", key = "${oauthKey}", oauth_host = "https://auth.dev.

it('reports auth status from the configured scoped OAuth ref', async () => {
const oauthKey = resolveKimiCodeOAuthKey({
oauthHost: 'https://auth.dev.kimi.team',
baseUrl: 'https://coding.deva.msh.team/coding/v1',
oauthHost: 'https://auth.dev.example.test',
baseUrl: 'https://api.dev.example.test/coding/v1',
});
await new FileTokenStorage(join(homeDir, 'credentials')).save(
resolveKimiTokenStorageName({ oauthKey }),
Expand All @@ -100,9 +100,9 @@ oauth = { storage = "file", key = "${oauthKey}", oauth_host = "https://auth.dev.
`
[providers."managed:kimi-code"]
type = "kimi"
base_url = "https://coding.deva.msh.team/coding/v1"
base_url = "https://api.dev.example.test/coding/v1"
api_key = ""
oauth = { storage = "file", key = "${oauthKey}", oauth_host = "https://auth.dev.kimi.team" }
oauth = { storage = "file", key = "${oauthKey}", oauth_host = "https://auth.dev.example.test" }
`,
);
const harness = createKimiHarness({ homeDir, identity: TEST_IDENTITY });
Expand Down Expand Up @@ -174,8 +174,8 @@ oauth = { storage = "file", key = "${oauthKey}", oauth_host = "https://auth.dev.
});

it('logs in against the configured scoped OAuth host and base URL when env is absent', async () => {
const baseUrl = 'https://coding.deva.msh.team/coding/v1';
const oauthHost = 'https://auth.dev.kimi.team';
const baseUrl = 'https://api.dev.example.test/coding/v1';
const oauthHost = 'https://auth.dev.example.test';
const oauthKey = resolveKimiCodeOAuthKey({ oauthHost, baseUrl });
const storageName = resolveKimiTokenStorageName({ oauthKey });
const storage = new FileTokenStorage(join(homeDir, 'credentials'));
Expand Down Expand Up @@ -474,8 +474,8 @@ oauth = { storage = "file", key = "oauth/kimi-code" }

it('removes the configured scoped OAuth token on logout without touching the production token', async () => {
const oauthKey = resolveKimiCodeOAuthKey({
oauthHost: 'https://auth.dev.kimi.team',
baseUrl: 'https://coding.deva.msh.team/coding/v1',
oauthHost: 'https://auth.dev.example.test',
baseUrl: 'https://api.dev.example.test/coding/v1',
});
const storageName = resolveKimiTokenStorageName({ oauthKey });
const storage = new FileTokenStorage(join(homeDir, 'credentials'));
Expand All @@ -488,9 +488,9 @@ default_model = "kimi-code/kimi-for-coding"

[providers."managed:kimi-code"]
type = "kimi"
base_url = "https://coding.deva.msh.team/coding/v1"
base_url = "https://api.dev.example.test/coding/v1"
api_key = ""
oauth = { storage = "file", key = "${oauthKey}", oauth_host = "https://auth.dev.kimi.team" }
oauth = { storage = "file", key = "${oauthKey}", oauth_host = "https://auth.dev.example.test" }

[models."kimi-code/kimi-for-coding"]
provider = "managed:kimi-code"
Expand Down Expand Up @@ -580,9 +580,9 @@ max_context_size = 262144
});

it('uses configured scoped OAuth refs and base URLs for managed usage and feedback', async () => {
const baseUrl = 'https://coding.deva.msh.team/coding/v1';
const baseUrl = 'https://api.dev.example.test/coding/v1';
const oauthKey = resolveKimiCodeOAuthKey({
oauthHost: 'https://auth.dev.kimi.team',
oauthHost: 'https://auth.dev.example.test',
baseUrl,
});
const storageName = resolveKimiTokenStorageName({ oauthKey });
Expand All @@ -597,7 +597,7 @@ max_context_size = 262144
type = "kimi"
base_url = "${baseUrl}"
api_key = ""
oauth = { storage = "file", key = "${oauthKey}", oauth_host = "https://auth.dev.kimi.team" }
oauth = { storage = "file", key = "${oauthKey}", oauth_host = "https://auth.dev.example.test" }
`,
);
const fetchMock = vi.fn<FetchMock>(async (input) => {
Expand Down
48 changes: 24 additions & 24 deletions packages/oauth/test/managed-kimi-code.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,16 @@ describe('provisionManagedKimiCodeConfig', () => {

it('scopes credential keys for non-default OAuth hosts and API base URLs', () => {
const devKey = resolveKimiCodeOAuthKey({
oauthHost: 'https://auth.dev.kimi.team',
baseUrl: 'https://coding.deva.msh.team/coding/v1',
oauthHost: 'https://auth.dev.example.test',
baseUrl: 'https://api.dev.example.test/coding/v1',
});

expect(devKey).not.toBe(KIMI_CODE_OAUTH_KEY);
expect(devKey).toMatch(/^oauth\/kimi-code-env-[a-f0-9]{16}$/);
expect(
resolveKimiCodeOAuthKey({
oauthHost: 'https://auth.dev.kimi.team/',
baseUrl: 'https://coding.deva.msh.team/coding/v1/',
oauthHost: 'https://auth.dev.example.test/',
baseUrl: 'https://api.dev.example.test/coding/v1/',
}),
).toBe(devKey);
});
Expand Down Expand Up @@ -94,16 +94,16 @@ describe('provisionManagedKimiCodeConfig', () => {
// A non-default environment yields a scoped key AND the normalized host,
// both derived from the same input — login and runtime cannot drift apart.
const devRef = resolveKimiCodeOAuthRef({
oauthHost: 'https://auth.dev.kimi.team/',
baseUrl: 'https://coding.deva.msh.team/coding/v1',
oauthHost: 'https://auth.dev.example.test/',
baseUrl: 'https://api.dev.example.test/coding/v1',
});
expect(devRef).toEqual({
storage: 'file',
key: resolveKimiCodeOAuthKey({
oauthHost: 'https://auth.dev.kimi.team',
baseUrl: 'https://coding.deva.msh.team/coding/v1',
oauthHost: 'https://auth.dev.example.test',
baseUrl: 'https://api.dev.example.test/coding/v1',
}),
oauthHost: 'https://auth.dev.kimi.team',
oauthHost: 'https://auth.dev.example.test',
});
});

Expand Down Expand Up @@ -136,14 +136,14 @@ describe('provisionManagedKimiCodeConfig', () => {
});

it('preserves a matching configured runtime OAuth ref when env is not overridden', () => {
const baseUrl = 'https://coding.deva.msh.team/coding/v1';
const baseUrl = 'https://api.dev.example.test/coding/v1';
const configuredOAuthRef = {
storage: 'keyring' as const,
key: resolveKimiCodeOAuthKey({
oauthHost: 'https://auth.dev.kimi.team',
oauthHost: 'https://auth.dev.example.test',
baseUrl,
}),
oauthHost: 'https://auth.dev.kimi.team',
oauthHost: 'https://auth.dev.example.test',
};

expect(
Expand Down Expand Up @@ -277,15 +277,15 @@ describe('provisionManagedKimiCodeConfig', () => {
providers: {},
};
const oauthKey = resolveKimiCodeOAuthKey({
oauthHost: 'https://auth.dev.kimi.team',
baseUrl: 'https://coding.deva.msh.team/coding/v1',
oauthHost: 'https://auth.dev.example.test',
baseUrl: 'https://api.dev.example.test/coding/v1',
});

await provisionManagedKimiCodeConfig({
accessToken: 'oauth-access-token',
baseUrl: 'https://coding.deva.msh.team/coding/v1',
baseUrl: 'https://api.dev.example.test/coding/v1',
oauthKey,
oauthHost: 'https://auth.dev.kimi.team',
oauthHost: 'https://auth.dev.example.test',
fetchImpl: vi.fn(async () => makeModelsResponse()) as unknown as typeof fetch,
adapter: {
read: () => config,
Expand All @@ -295,22 +295,22 @@ describe('provisionManagedKimiCodeConfig', () => {
});

expect(config.providers[KIMI_CODE_PROVIDER_NAME]).toMatchObject({
baseUrl: 'https://coding.deva.msh.team/coding/v1',
baseUrl: 'https://api.dev.example.test/coding/v1',
oauth: {
storage: 'file',
key: oauthKey,
oauthHost: 'https://auth.dev.kimi.team',
oauthHost: 'https://auth.dev.example.test',
},
});
expect(config.services?.moonshotSearch?.oauth).toEqual({
storage: 'file',
key: oauthKey,
oauthHost: 'https://auth.dev.kimi.team',
oauthHost: 'https://auth.dev.example.test',
});
expect(config.services?.moonshotFetch?.oauth).toEqual({
storage: 'file',
key: oauthKey,
oauthHost: 'https://auth.dev.kimi.team',
oauthHost: 'https://auth.dev.example.test',
});
});

Expand Down Expand Up @@ -745,22 +745,22 @@ describe('provisionManagedKimiCodeConfig', () => {

const promise = fetchManagedKimiCodeModels({
accessToken: 'oauth-access-token',
baseUrl: 'https://coding.deva.msh.team/coding/v1',
baseUrl: 'https://api.dev.example.test/coding/v1',
fetchImpl,
});

await expect(promise).rejects.toThrow(
"Kimi Code models endpoint https://coding.deva.msh.team/coding/v1 rejected OAuth credentials: We're unable to verify your membership benefits at this time. Please ensure your membership is active.",
"Kimi Code models endpoint https://api.dev.example.test/coding/v1 rejected OAuth credentials: We're unable to verify your membership benefits at this time. Please ensure your membership is active.",
);
await expect(
fetchManagedKimiCodeModels({
accessToken: 'oauth-access-token',
baseUrl: 'https://coding.deva.msh.team/coding/v1',
baseUrl: 'https://api.dev.example.test/coding/v1',
fetchImpl,
}),
).rejects.toMatchObject({
status: 402,
baseUrl: 'https://coding.deva.msh.team/coding/v1',
baseUrl: 'https://api.dev.example.test/coding/v1',
});
await expect(
fetchManagedKimiCodeModels({
Expand Down
8 changes: 4 additions & 4 deletions packages/oauth/test/toolkit.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,10 @@ describe('KimiOAuthToolkit', () => {

it('refreshes configured bearer token refs against their OAuth host', async () => {
const storage = new MemoryTokenStorage();
const oauthHost = 'https://auth.dev.kimi.team';
const oauthHost = 'https://auth.dev.example.test';
const oauthKey = resolveKimiCodeOAuthKey({
oauthHost,
baseUrl: 'https://coding.deva.msh.team/coding/v1',
baseUrl: 'https://api.dev.example.test/coding/v1',
});
storage.tokens.set(resolveKimiTokenStorageName({ oauthKey }), {
...token('expired-dev-access'),
Expand Down Expand Up @@ -419,8 +419,8 @@ describe('KimiOAuthToolkit', () => {
const storage = new MemoryTokenStorage();
storage.tokens.set('kimi-code', token('prod-access'));
const config: ManagedKimiConfigShape = { providers: {} };
const devBaseUrl = 'https://coding.deva.msh.team/coding/v1';
const devOauthHost = 'https://auth.dev.kimi.team';
const devBaseUrl = 'https://api.dev.example.test/coding/v1';
const devOauthHost = 'https://auth.dev.example.test';
const devOauthKey = resolveKimiCodeOAuthKey({
oauthHost: devOauthHost,
baseUrl: devBaseUrl,
Expand Down
Loading