@codemieai/code 0.4.2 → 0.6.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/README.md +7 -1
- package/bin/codemie-kimi-acp.js +18 -0
- package/bin/codemie-kimi.js +18 -0
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +26 -2
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +39 -8
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/metrics/types.d.ts +1 -1
- package/dist/agents/core/metrics/types.d.ts.map +1 -1
- package/dist/agents/core/reasoning-effort.d.ts +8 -0
- package/dist/agents/core/reasoning-effort.d.ts.map +1 -0
- package/dist/agents/core/reasoning-effort.js +70 -0
- package/dist/agents/core/reasoning-effort.js.map +1 -0
- package/dist/agents/core/session/BaseProcessor.d.ts +2 -0
- package/dist/agents/core/session/BaseProcessor.d.ts.map +1 -1
- package/dist/agents/core/session/BaseSessionAdapter.d.ts +7 -0
- package/dist/agents/core/session/BaseSessionAdapter.d.ts.map +1 -1
- package/dist/agents/core/types.d.ts +62 -0
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.js +15 -4
- package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
- package/dist/agents/plugins/claude/claude.session.d.ts +9 -0
- package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.session.js +40 -9
- package/dist/agents/plugins/claude/claude.session.js.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +9 -0
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +45 -11
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
- package/dist/agents/plugins/codex/codex-models.d.ts.map +1 -1
- package/dist/agents/plugins/codex/codex-models.js +7 -3
- package/dist/agents/plugins/codex/codex-models.js.map +1 -1
- package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codex/codex.plugin.js +25 -7
- package/dist/agents/plugins/codex/codex.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini/gemini.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.d.ts.map +1 -1
- package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js +3 -0
- package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js.map +1 -1
- package/dist/agents/plugins/kimi/extension/SKILL.md +6 -0
- package/dist/agents/plugins/kimi/extension/manifest.json +8 -0
- package/dist/agents/plugins/kimi/kimi-acp.plugin.d.ts +7 -0
- package/dist/agents/plugins/kimi/kimi-acp.plugin.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/kimi-acp.plugin.js +28 -0
- package/dist/agents/plugins/kimi/kimi-acp.plugin.js.map +1 -0
- package/dist/agents/plugins/kimi/kimi.extension-installer.d.ts +56 -0
- package/dist/agents/plugins/kimi/kimi.extension-installer.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/kimi.extension-installer.js +79 -0
- package/dist/agents/plugins/kimi/kimi.extension-installer.js.map +1 -0
- package/dist/agents/plugins/kimi/kimi.hook-config-injector.d.ts +34 -0
- package/dist/agents/plugins/kimi/kimi.hook-config-injector.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/kimi.hook-config-injector.js +158 -0
- package/dist/agents/plugins/kimi/kimi.hook-config-injector.js.map +1 -0
- package/dist/agents/plugins/kimi/kimi.hook-transformer.d.ts +23 -0
- package/dist/agents/plugins/kimi/kimi.hook-transformer.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/kimi.hook-transformer.js +46 -0
- package/dist/agents/plugins/kimi/kimi.hook-transformer.js.map +1 -0
- package/dist/agents/plugins/kimi/kimi.models.d.ts +8 -0
- package/dist/agents/plugins/kimi/kimi.models.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/kimi.models.js +174 -0
- package/dist/agents/plugins/kimi/kimi.models.js.map +1 -0
- package/dist/agents/plugins/kimi/kimi.paths.d.ts +65 -0
- package/dist/agents/plugins/kimi/kimi.paths.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/kimi.paths.js +95 -0
- package/dist/agents/plugins/kimi/kimi.paths.js.map +1 -0
- package/dist/agents/plugins/kimi/kimi.plugin.d.ts +37 -0
- package/dist/agents/plugins/kimi/kimi.plugin.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/kimi.plugin.js +329 -0
- package/dist/agents/plugins/kimi/kimi.plugin.js.map +1 -0
- package/dist/agents/plugins/kimi/kimi.session.d.ts +40 -0
- package/dist/agents/plugins/kimi/kimi.session.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/kimi.session.js +191 -0
- package/dist/agents/plugins/kimi/kimi.session.js.map +1 -0
- package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.d.ts +43 -0
- package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.js +421 -0
- package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.js.map +1 -0
- package/dist/agents/plugins/kimi/session/types.d.ts +81 -0
- package/dist/agents/plugins/kimi/session/types.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/session/types.js +5 -0
- package/dist/agents/plugins/kimi/session/types.js.map +1 -0
- package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js +8 -1
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode-model-configs.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode-model-configs.js +29 -0
- package/dist/agents/plugins/opencode/opencode-model-configs.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode.plugin.js +13 -0
- package/dist/agents/plugins/opencode/opencode.plugin.js.map +1 -1
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +4 -0
- package/dist/agents/registry.js.map +1 -1
- package/dist/cli/commands/analytics/cost/cost-calculator.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/cost-calculator.js +19 -2
- package/dist/cli/commands/analytics/cost/cost-calculator.js.map +1 -1
- package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/cost-enricher.js +67 -1
- package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
- package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts +2 -2
- package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/dispatch-extractor.js +6 -4
- package/dist/cli/commands/analytics/cost/dispatch-extractor.js.map +1 -1
- package/dist/cli/commands/analytics/cost/pricing.d.ts +1 -0
- package/dist/cli/commands/analytics/cost/pricing.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/pricing.js +1 -0
- package/dist/cli/commands/analytics/cost/pricing.js.map +1 -1
- package/dist/cli/commands/analytics/cost/pricing.json +79 -37
- package/dist/cli/commands/analytics/cost/types.d.ts +14 -0
- package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/types.js.map +1 -1
- package/dist/cli/commands/analytics/cost/usage-readers.d.ts +13 -4
- package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/usage-readers.js +121 -27
- package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
- package/dist/cli/commands/analytics/model-normalizer.d.ts +2 -0
- package/dist/cli/commands/analytics/model-normalizer.d.ts.map +1 -1
- package/dist/cli/commands/analytics/model-normalizer.js +8 -0
- package/dist/cli/commands/analytics/model-normalizer.js.map +1 -1
- package/dist/cli/commands/analytics/report/client/app.js +233 -120
- package/dist/cli/commands/analytics/report/template.html +28 -4
- package/dist/cli/commands/hook.d.ts.map +1 -1
- package/dist/cli/commands/hook.js +24 -7
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/env/types.d.ts +3 -0
- package/dist/env/types.d.ts.map +1 -1
- package/dist/env/types.js.map +1 -1
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +2 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/plugins/moonshot-subscription/index.d.ts +9 -0
- package/dist/providers/plugins/moonshot-subscription/index.d.ts.map +1 -0
- package/dist/providers/plugins/moonshot-subscription/index.js +9 -0
- package/dist/providers/plugins/moonshot-subscription/index.js.map +1 -0
- package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.d.ts +8 -0
- package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.d.ts.map +1 -0
- package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.js +80 -0
- package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.js.map +1 -0
- package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.d.ts +11 -0
- package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.d.ts.map +1 -0
- package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.js +111 -0
- package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts +9 -2
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js +17 -6
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.d.ts +18 -0
- package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.js +56 -0
- package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.d.ts +12 -0
- package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.js +48 -14
- package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/sso.auth.d.ts +5 -0
- package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.auth.js +23 -1
- package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +6 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js +21 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js.map +1 -1
- package/dist/utils/config.d.ts +24 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +85 -8
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/exec.js +1 -1
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/native-installer.d.ts.map +1 -1
- package/dist/utils/native-installer.js +6 -3
- package/dist/utils/native-installer.js.map +1 -1
- package/dist/utils/windows-path.d.ts.map +1 -1
- package/dist/utils/windows-path.js +6 -2
- package/dist/utils/windows-path.js.map +1 -1
- package/package.json +4 -1
- package/scripts/copy-plugins.js +5 -0
- package/scripts/test-desktop-telemetry.js +1 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { AgentMetadata, HookTransformer } from '../../core/types.js';
|
|
2
|
+
import { BaseAgentAdapter } from '../../core/BaseAgentAdapter.js';
|
|
3
|
+
import type { SessionAdapter } from '../../core/session/BaseSessionAdapter.js';
|
|
4
|
+
import type { BaseExtensionInstaller } from '../../core/extension/BaseExtensionInstaller.js';
|
|
5
|
+
export declare const KimiPluginMetadata: AgentMetadata;
|
|
6
|
+
export declare class KimiPlugin extends BaseAgentAdapter {
|
|
7
|
+
private sessionAdapter?;
|
|
8
|
+
private extensionInstaller?;
|
|
9
|
+
private hookTransformer?;
|
|
10
|
+
constructor(metadata?: AgentMetadata);
|
|
11
|
+
getSessionAdapter(): SessionAdapter;
|
|
12
|
+
getExtensionInstaller(): BaseExtensionInstaller;
|
|
13
|
+
getHookTransformer(): HookTransformer;
|
|
14
|
+
isInstalled(): Promise<boolean>;
|
|
15
|
+
private installNative;
|
|
16
|
+
install(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Uninstall Kimi Code native binary and npm wrapper package.
|
|
19
|
+
*
|
|
20
|
+
* The native installer places the binary at ~/.kimi-code/bin/kimi, while the
|
|
21
|
+
* inherited base uninstall only removes the npm package wrapper. We remove
|
|
22
|
+
* both so that subsequent installs don't incorrectly report Kimi as already
|
|
23
|
+
* installed.
|
|
24
|
+
*/
|
|
25
|
+
uninstall(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Get Kimi version by parsing 'kimi --version' output.
|
|
28
|
+
* Extracts the first semantic version found in the output.
|
|
29
|
+
*
|
|
30
|
+
* Checks the native installer full path first on Unix systems, then falls
|
|
31
|
+
* back to the command in PATH for other installation methods.
|
|
32
|
+
*/
|
|
33
|
+
getVersion(): Promise<string | null>;
|
|
34
|
+
installVersion(version?: string): Promise<void>;
|
|
35
|
+
protected setupProxy(env: NodeJS.ProcessEnv): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=kimi.plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.plugin.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AA6B7F,eAAO,MAAM,kBAAkB,EAAE,aA0EhC,CAAC;AAEF,qBAAa,UAAW,SAAQ,gBAAgB;IAC9C,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,kBAAkB,CAAC,CAAyB;IACpD,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,QAAQ,GAAE,aAAkC;IAIxD,iBAAiB,IAAI,cAAc;IAOnC,qBAAqB,IAAI,sBAAsB;IAO/C,kBAAkB,IAAI,eAAe;IAOtB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;YAqChC,aAAa;IA8CZ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC;;;;;;;OAOG;IACY,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAmDzC;;;;;;OAMG;IACY,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAwCpC,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAuCrC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAW3E"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { BaseAgentAdapter } from '../../core/BaseAgentAdapter.js';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
import { rm } from 'fs/promises';
|
|
4
|
+
import { KimiSessionAdapter } from './kimi.session.js';
|
|
5
|
+
import { KimiExtensionInstaller } from './kimi.extension-installer.js';
|
|
6
|
+
import { KimiHookTransformer } from './kimi.hook-transformer.js';
|
|
7
|
+
import { assertExplicitKimiModelAllowed, resolveKimiModel } from './kimi.models.js';
|
|
8
|
+
import { installNativeAgent } from '../../../utils/native-installer.js';
|
|
9
|
+
import { AgentInstallationError, createErrorContext, getErrorMessage, } from '../../../utils/errors.js';
|
|
10
|
+
import { isValidSemanticVersion } from '../../../utils/version-utils.js';
|
|
11
|
+
import { logger } from '../../../utils/logger.js';
|
|
12
|
+
import { sanitizeLogArgs } from '../../../utils/security.js';
|
|
13
|
+
import { commandExists, exec, getCommandPath } from '../../../utils/processes.js';
|
|
14
|
+
import { resolveHomeDir } from '../../../utils/paths.js';
|
|
15
|
+
const KIMI_SUPPORTED_VERSION = '0.16.0';
|
|
16
|
+
const KIMI_MINIMUM_SUPPORTED_VERSION = '0.15.0';
|
|
17
|
+
const KIMI_NATIVE_BINARY_PATH = '.kimi-code/bin/kimi';
|
|
18
|
+
const KIMI_INSTALLER_URLS = {
|
|
19
|
+
macOS: 'https://code.kimi.com/kimi-code/install.sh',
|
|
20
|
+
windows: 'https://code.kimi.com/kimi-code/install.ps1',
|
|
21
|
+
linux: 'https://code.kimi.com/kimi-code/install.sh',
|
|
22
|
+
};
|
|
23
|
+
export const KimiPluginMetadata = {
|
|
24
|
+
name: 'kimi',
|
|
25
|
+
displayName: 'Kimi Code',
|
|
26
|
+
description: 'Kimi Code CLI - Moonshot AI coding agent',
|
|
27
|
+
npmPackage: '@moonshot-ai/kimi-code',
|
|
28
|
+
cliCommand: 'kimi',
|
|
29
|
+
supportedVersion: KIMI_SUPPORTED_VERSION,
|
|
30
|
+
minimumSupportedVersion: KIMI_MINIMUM_SUPPORTED_VERSION,
|
|
31
|
+
installerUrls: KIMI_INSTALLER_URLS,
|
|
32
|
+
dataPaths: {
|
|
33
|
+
home: '.kimi-code',
|
|
34
|
+
binary: KIMI_NATIVE_BINARY_PATH,
|
|
35
|
+
},
|
|
36
|
+
envMapping: {
|
|
37
|
+
baseUrl: ['KIMI_MODEL_BASE_URL'],
|
|
38
|
+
apiKey: ['KIMI_MODEL_API_KEY'],
|
|
39
|
+
model: ['KIMI_MODEL_NAME'],
|
|
40
|
+
},
|
|
41
|
+
supportedProviders: ['moonshot-subscription', 'ai-run-sso'],
|
|
42
|
+
blockedModelPatterns: [],
|
|
43
|
+
recommendedModels: ['kimi-k2.6', 'kimi-for-coding', 'kimi-k2'],
|
|
44
|
+
ssoConfig: { enabled: true, clientType: 'codemie-kimi' },
|
|
45
|
+
flagMappings: {
|
|
46
|
+
'--task': { type: 'flag', target: '-p' },
|
|
47
|
+
'--model': { type: 'flag', target: '--model' },
|
|
48
|
+
'--resume': { type: 'flag', target: '-S' },
|
|
49
|
+
},
|
|
50
|
+
reasoningEffort: {
|
|
51
|
+
strategy: 'env',
|
|
52
|
+
envVars: {
|
|
53
|
+
KIMI_MODEL_THINKING_MODE: 'on',
|
|
54
|
+
KIMI_MODEL_THINKING_EFFORT: '%s',
|
|
55
|
+
KIMI_MODEL_CAPABILITIES: 'thinking',
|
|
56
|
+
KIMI_MODEL_DEFAULT_THINKING: 'true',
|
|
57
|
+
},
|
|
58
|
+
supportedLevels: ['low', 'medium', 'high', 'xhigh', 'max'],
|
|
59
|
+
},
|
|
60
|
+
lifecycle: {
|
|
61
|
+
enrichArgs(args, _config) {
|
|
62
|
+
const explicitModel = getExplicitModelArg(args);
|
|
63
|
+
if (!explicitModel) {
|
|
64
|
+
return args;
|
|
65
|
+
}
|
|
66
|
+
const availableModels = (process.env.CODEMIE_KIMI_AVAILABLE_MODELS || '')
|
|
67
|
+
.split(',')
|
|
68
|
+
.map(model => model.trim())
|
|
69
|
+
.filter(Boolean);
|
|
70
|
+
assertExplicitKimiModelAllowed(explicitModel, availableModels);
|
|
71
|
+
return args;
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
metricsConfig: {
|
|
75
|
+
excludeErrorsFromTools: ['Bash'],
|
|
76
|
+
},
|
|
77
|
+
extensionsConfig: {
|
|
78
|
+
project: '.kimi-code',
|
|
79
|
+
global: '~/.kimi-code',
|
|
80
|
+
skillsEntryFile: 'SKILL.md',
|
|
81
|
+
},
|
|
82
|
+
hookConfig: {
|
|
83
|
+
eventNameMapping: {
|
|
84
|
+
'SessionStart': 'SessionStart',
|
|
85
|
+
'SessionEnd': 'SessionEnd',
|
|
86
|
+
'UserPromptSubmit': 'UserPromptSubmit',
|
|
87
|
+
'Stop': 'Stop',
|
|
88
|
+
'SubagentStop': 'SubagentStop',
|
|
89
|
+
'PreCompact': 'PreCompact',
|
|
90
|
+
'PermissionRequest': 'PermissionRequest',
|
|
91
|
+
'PermissionResult': 'PermissionRequest',
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
export class KimiPlugin extends BaseAgentAdapter {
|
|
96
|
+
sessionAdapter;
|
|
97
|
+
extensionInstaller;
|
|
98
|
+
hookTransformer;
|
|
99
|
+
constructor(metadata = KimiPluginMetadata) {
|
|
100
|
+
super(metadata);
|
|
101
|
+
}
|
|
102
|
+
getSessionAdapter() {
|
|
103
|
+
if (!this.sessionAdapter) {
|
|
104
|
+
this.sessionAdapter = new KimiSessionAdapter(this.metadata);
|
|
105
|
+
}
|
|
106
|
+
return this.sessionAdapter;
|
|
107
|
+
}
|
|
108
|
+
getExtensionInstaller() {
|
|
109
|
+
if (!this.extensionInstaller) {
|
|
110
|
+
this.extensionInstaller = new KimiExtensionInstaller(this.metadata);
|
|
111
|
+
}
|
|
112
|
+
return this.extensionInstaller;
|
|
113
|
+
}
|
|
114
|
+
getHookTransformer() {
|
|
115
|
+
if (!this.hookTransformer) {
|
|
116
|
+
this.hookTransformer = new KimiHookTransformer();
|
|
117
|
+
}
|
|
118
|
+
return this.hookTransformer;
|
|
119
|
+
}
|
|
120
|
+
async isInstalled() {
|
|
121
|
+
if (!this.metadata.cliCommand) {
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
if (await commandExists(this.metadata.cliCommand)) {
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
if (process.platform !== 'win32') {
|
|
128
|
+
// Native installer location
|
|
129
|
+
const nativePath = resolveHomeDir(KIMI_NATIVE_BINARY_PATH);
|
|
130
|
+
try {
|
|
131
|
+
const result = await exec(nativePath, ['--version']);
|
|
132
|
+
if (result.code === 0) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Native path check failed, fall through
|
|
138
|
+
}
|
|
139
|
+
// Legacy / npm location
|
|
140
|
+
const fullPath = resolveHomeDir('.local/bin/kimi');
|
|
141
|
+
try {
|
|
142
|
+
const result = await exec(fullPath, ['--version']);
|
|
143
|
+
return result.code === 0;
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Full path check failed, fall through to PATH check already performed
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
logger.debug('[kimi-plugin] Kimi not installed. Install with:');
|
|
150
|
+
logger.debug('[kimi-plugin] codemie install kimi');
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
async installNative(version) {
|
|
154
|
+
if (!this.metadata.installerUrls) {
|
|
155
|
+
throw new AgentInstallationError(this.metadata.name, 'No installer URLs configured for native installation');
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
const result = await installNativeAgent(this.metadata.name, this.metadata.installerUrls, version, {
|
|
159
|
+
timeout: 300000,
|
|
160
|
+
verifyCommand: this.metadata.cliCommand || undefined,
|
|
161
|
+
verifyPath: process.platform === 'win32' ? undefined : resolveHomeDir(KIMI_NATIVE_BINARY_PATH),
|
|
162
|
+
});
|
|
163
|
+
if (!result.success) {
|
|
164
|
+
throw new AgentInstallationError(this.metadata.name, `Installation failed. Output: ${result.output}`);
|
|
165
|
+
}
|
|
166
|
+
logger.success(`${this.metadata.displayName} installed successfully`);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
if (error instanceof AgentInstallationError) {
|
|
170
|
+
throw error;
|
|
171
|
+
}
|
|
172
|
+
const errorContext = createErrorContext(error, {
|
|
173
|
+
agent: this.metadata.name,
|
|
174
|
+
});
|
|
175
|
+
logger.error('Kimi installation failed', ...sanitizeLogArgs(errorContext));
|
|
176
|
+
throw new AgentInstallationError(this.metadata.name, `Failed to install ${this.metadata.displayName}: ${getErrorMessage(error)}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async install() {
|
|
180
|
+
return this.installVersion(undefined);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Uninstall Kimi Code native binary and npm wrapper package.
|
|
184
|
+
*
|
|
185
|
+
* The native installer places the binary at ~/.kimi-code/bin/kimi, while the
|
|
186
|
+
* inherited base uninstall only removes the npm package wrapper. We remove
|
|
187
|
+
* both so that subsequent installs don't incorrectly report Kimi as already
|
|
188
|
+
* installed.
|
|
189
|
+
*/
|
|
190
|
+
async uninstall() {
|
|
191
|
+
const isWindows = process.platform === 'win32';
|
|
192
|
+
const binaryName = isWindows ? 'kimi.exe' : 'kimi';
|
|
193
|
+
const possibleBinaries = new Set();
|
|
194
|
+
// Known native install locations
|
|
195
|
+
possibleBinaries.add(resolveHomeDir(`.kimi-code/bin/${binaryName}`));
|
|
196
|
+
possibleBinaries.add(resolveHomeDir(`.local/bin/${binaryName}`));
|
|
197
|
+
// Also remove any binary found on PATH that belongs to the user
|
|
198
|
+
const pathBinary = await getCommandPath('kimi');
|
|
199
|
+
if (pathBinary) {
|
|
200
|
+
possibleBinaries.add(pathBinary);
|
|
201
|
+
}
|
|
202
|
+
for (const binaryPath of possibleBinaries) {
|
|
203
|
+
try {
|
|
204
|
+
if (existsSync(binaryPath)) {
|
|
205
|
+
await rm(binaryPath, { force: true });
|
|
206
|
+
logger.debug(`[kimi-plugin] Removed binary: ${binaryPath}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
logger.warn(`[kimi-plugin] Could not remove binary ${binaryPath}`, error instanceof Error ? error.message : String(error));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Remove the native install directory if it is now empty
|
|
214
|
+
const installDir = resolveHomeDir('.kimi-code');
|
|
215
|
+
try {
|
|
216
|
+
if (existsSync(installDir)) {
|
|
217
|
+
const { readdir } = await import('fs/promises');
|
|
218
|
+
const entries = await readdir(installDir);
|
|
219
|
+
if (entries.length === 0) {
|
|
220
|
+
await rm(installDir, { recursive: true, force: true });
|
|
221
|
+
logger.debug(`[kimi-plugin] Removed empty install directory: ${installDir}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
logger.warn(`[kimi-plugin] Could not remove install directory ${installDir}`, error instanceof Error ? error.message : String(error));
|
|
227
|
+
}
|
|
228
|
+
// Remove npm wrapper package if present
|
|
229
|
+
await super.uninstall();
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get Kimi version by parsing 'kimi --version' output.
|
|
233
|
+
* Extracts the first semantic version found in the output.
|
|
234
|
+
*
|
|
235
|
+
* Checks the native installer full path first on Unix systems, then falls
|
|
236
|
+
* back to the command in PATH for other installation methods.
|
|
237
|
+
*/
|
|
238
|
+
async getVersion() {
|
|
239
|
+
if (!this.metadata.cliCommand) {
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
const parseVersion = (output) => {
|
|
243
|
+
const match = output.match(/(\d+\.\d+\.\d+)/);
|
|
244
|
+
return match ? match[1] : output.trim() || null;
|
|
245
|
+
};
|
|
246
|
+
// Try native installer full path first on Unix systems
|
|
247
|
+
// (native installer places binary at ~/.kimi-code/bin/kimi)
|
|
248
|
+
if (process.platform !== 'win32') {
|
|
249
|
+
const nativePath = resolveHomeDir(KIMI_NATIVE_BINARY_PATH);
|
|
250
|
+
try {
|
|
251
|
+
const result = await exec(nativePath, ['--version']);
|
|
252
|
+
return parseVersion(result.stdout);
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
// Native path check failed, fall through to legacy path
|
|
256
|
+
}
|
|
257
|
+
// Legacy / npm location
|
|
258
|
+
const fullPath = resolveHomeDir('.local/bin/kimi');
|
|
259
|
+
try {
|
|
260
|
+
const result = await exec(fullPath, ['--version']);
|
|
261
|
+
return parseVersion(result.stdout);
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// Full path check failed, fall through to PATH check
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// Fall back to command in PATH
|
|
268
|
+
try {
|
|
269
|
+
const result = await exec(this.metadata.cliCommand, ['--version']);
|
|
270
|
+
return parseVersion(result.stdout);
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
async installVersion(version) {
|
|
277
|
+
// Resolve 'supported' to the version from metadata
|
|
278
|
+
let resolvedVersion = version;
|
|
279
|
+
if (version === 'supported') {
|
|
280
|
+
if (!this.metadata.supportedVersion) {
|
|
281
|
+
throw new AgentInstallationError(this.metadata.name, 'No supported version defined in metadata');
|
|
282
|
+
}
|
|
283
|
+
resolvedVersion = this.metadata.supportedVersion;
|
|
284
|
+
logger.debug('Resolved version', {
|
|
285
|
+
from: 'supported',
|
|
286
|
+
to: resolvedVersion,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
else if (version === 'npm' || version === 'latest' || version === 'stable') {
|
|
290
|
+
// The 'npm', 'latest', and 'stable' channels request the latest build.
|
|
291
|
+
// Kimi uses the native installer, so passing undefined installs the
|
|
292
|
+
// latest version.
|
|
293
|
+
resolvedVersion = undefined;
|
|
294
|
+
}
|
|
295
|
+
// Reject unknown channels and invalid semantic versions.
|
|
296
|
+
if (version) {
|
|
297
|
+
const allowedChannels = ['latest', 'stable', 'supported', 'npm'];
|
|
298
|
+
const isAllowedChannel = allowedChannels.includes(version);
|
|
299
|
+
const isValidVersion = isValidSemanticVersion(version);
|
|
300
|
+
if (!isAllowedChannel && !isValidVersion) {
|
|
301
|
+
throw new AgentInstallationError(this.metadata.name, `Invalid version format: '${version}'. Expected semantic version (e.g., '1.0.0'), 'latest', 'stable', 'supported', or 'npm'.`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
await this.installNative(resolvedVersion);
|
|
305
|
+
}
|
|
306
|
+
async setupProxy(env) {
|
|
307
|
+
if (env.CODEMIE_PROVIDER === 'ai-run-sso' || env.CODEMIE_AUTH_METHOD === 'jwt') {
|
|
308
|
+
// Resolve before BaseAgentAdapter builds the proxy config because CODEMIE_MODEL
|
|
309
|
+
// is part of the proxy startup contract.
|
|
310
|
+
const resolution = await resolveKimiModel(env);
|
|
311
|
+
env.CODEMIE_MODEL = resolution.selectedModel;
|
|
312
|
+
env.CODEMIE_KIMI_AVAILABLE_MODELS = resolution.availableModels.join(',');
|
|
313
|
+
}
|
|
314
|
+
await super.setupProxy(env);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
function getExplicitModelArg(args) {
|
|
318
|
+
for (let i = 0; i < args.length; i++) {
|
|
319
|
+
const arg = args[i];
|
|
320
|
+
if (arg === '-m' || arg === '--model') {
|
|
321
|
+
return args[i + 1];
|
|
322
|
+
}
|
|
323
|
+
if (arg.startsWith('--model=')) {
|
|
324
|
+
return arg.slice('--model='.length);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return undefined;
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=kimi.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.plugin.js","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kimi Session Adapter
|
|
3
|
+
*
|
|
4
|
+
* Parses Kimi Code `wire.jsonl` session transcripts into the unified
|
|
5
|
+
* ParsedSession format used by CodeMie processors.
|
|
6
|
+
*
|
|
7
|
+
* Wire file path:
|
|
8
|
+
* ${KIMI_CODE_HOME}/sessions/{workDirKey}/{sessionId}/agents/main/wire.jsonl
|
|
9
|
+
*/
|
|
10
|
+
import type { SessionAdapter, ParsedSession, AggregatedResult, SessionDiscoveryOptions, SessionDescriptor } from '../../core/session/BaseSessionAdapter.js';
|
|
11
|
+
import type { SessionProcessor, ProcessingContext } from '../../core/session/BaseProcessor.js';
|
|
12
|
+
import type { AgentMetadata } from '../../core/types.js';
|
|
13
|
+
export declare class KimiSessionAdapter implements SessionAdapter {
|
|
14
|
+
private readonly metadata;
|
|
15
|
+
readonly agentName = "kimi";
|
|
16
|
+
private processors;
|
|
17
|
+
constructor(metadata: AgentMetadata);
|
|
18
|
+
private initializeProcessors;
|
|
19
|
+
registerProcessor(processor: SessionProcessor): void;
|
|
20
|
+
/**
|
|
21
|
+
* Discover native Kimi sessions (placeholder).
|
|
22
|
+
*/
|
|
23
|
+
discoverSessions(_options?: SessionDiscoveryOptions): Promise<SessionDescriptor[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Parse a Kimi `wire.jsonl` file into the unified ParsedSession format.
|
|
26
|
+
*/
|
|
27
|
+
parseSessionFile(filePath: string, sessionId: string): Promise<ParsedSession>;
|
|
28
|
+
/**
|
|
29
|
+
* Process a Kimi session file with all registered processors.
|
|
30
|
+
*
|
|
31
|
+
* Parses the wire.jsonl file once, runs each registered processor in priority
|
|
32
|
+
* order, and returns an aggregated result. This is the entry point used by
|
|
33
|
+
* `codemie hook` during incremental sync.
|
|
34
|
+
*/
|
|
35
|
+
processSession(filePath: string, sessionId: string, context: ProcessingContext): Promise<AggregatedResult>;
|
|
36
|
+
private createMinimalSession;
|
|
37
|
+
private extractModel;
|
|
38
|
+
private extractTimestamps;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=kimi.session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.session.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.session.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMzD,qBAAa,kBAAmB,YAAW,cAAc;IAI3C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,QAAQ,CAAC,SAAS,UAAU;IAC5B,OAAO,CAAC,UAAU,CAA0B;gBAEf,QAAQ,EAAE,aAAa;IAMpD,OAAO,CAAC,oBAAoB;IAK5B,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAMpD;;OAEG;IACG,gBAAgB,CAAC,QAAQ,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAKxF;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAoCnF;;;;;;OAMG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC;IAmF5B,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,iBAAiB;CA6B1B"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kimi Session Adapter
|
|
3
|
+
*
|
|
4
|
+
* Parses Kimi Code `wire.jsonl` session transcripts into the unified
|
|
5
|
+
* ParsedSession format used by CodeMie processors.
|
|
6
|
+
*
|
|
7
|
+
* Wire file path:
|
|
8
|
+
* ${KIMI_CODE_HOME}/sessions/{workDirKey}/{sessionId}/agents/main/wire.jsonl
|
|
9
|
+
*/
|
|
10
|
+
import { readJSONLTolerant } from '../../core/session/utils/jsonl-reader.js';
|
|
11
|
+
import { logger } from '../../../utils/logger.js';
|
|
12
|
+
import { KimiMetricsProcessor } from './session/processors/kimi.metrics-processor.js';
|
|
13
|
+
export class KimiSessionAdapter {
|
|
14
|
+
metadata;
|
|
15
|
+
agentName = 'kimi';
|
|
16
|
+
processors = [];
|
|
17
|
+
constructor(metadata) {
|
|
18
|
+
this.metadata = metadata;
|
|
19
|
+
// Register processors now, but execution is currently orchestrated externally
|
|
20
|
+
// until processSession is implemented.
|
|
21
|
+
this.initializeProcessors();
|
|
22
|
+
}
|
|
23
|
+
initializeProcessors() {
|
|
24
|
+
this.registerProcessor(new KimiMetricsProcessor());
|
|
25
|
+
logger.debug(`[kimi-adapter] Initialized ${this.processors.length} processors`);
|
|
26
|
+
}
|
|
27
|
+
registerProcessor(processor) {
|
|
28
|
+
this.processors.push(processor);
|
|
29
|
+
this.processors.sort((a, b) => a.priority - b.priority);
|
|
30
|
+
logger.debug(`[kimi-adapter] Registered processor: ${processor.name} (priority: ${processor.priority})`);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Discover native Kimi sessions (placeholder).
|
|
34
|
+
*/
|
|
35
|
+
async discoverSessions(_options) {
|
|
36
|
+
logger.debug('[kimi-adapter] discoverSessions is not implemented yet');
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Parse a Kimi `wire.jsonl` file into the unified ParsedSession format.
|
|
41
|
+
*/
|
|
42
|
+
async parseSessionFile(filePath, sessionId) {
|
|
43
|
+
try {
|
|
44
|
+
const events = await readJSONLTolerant(filePath, '[kimi-adapter]');
|
|
45
|
+
if (events.length === 0) {
|
|
46
|
+
logger.debug(`[kimi-adapter] Session file is empty or unreadable: ${filePath}`);
|
|
47
|
+
return this.createMinimalSession(sessionId);
|
|
48
|
+
}
|
|
49
|
+
const model = this.extractModel(events);
|
|
50
|
+
const { createdAt, updatedAt } = this.extractTimestamps(events);
|
|
51
|
+
logger.debug(`[kimi-adapter] Parsed session ${sessionId}: ${events.length} events, ` +
|
|
52
|
+
`model=${model ?? 'unknown'}`);
|
|
53
|
+
const metadata = {
|
|
54
|
+
projectPath: filePath,
|
|
55
|
+
createdAt,
|
|
56
|
+
updatedAt,
|
|
57
|
+
model,
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
sessionId,
|
|
61
|
+
agentName: this.metadata.displayName || 'Kimi Code',
|
|
62
|
+
metadata,
|
|
63
|
+
messages: events,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
logger.warn(`[kimi-adapter] Failed to parse session file ${filePath}:`, error);
|
|
68
|
+
return this.createMinimalSession(sessionId);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Process a Kimi session file with all registered processors.
|
|
73
|
+
*
|
|
74
|
+
* Parses the wire.jsonl file once, runs each registered processor in priority
|
|
75
|
+
* order, and returns an aggregated result. This is the entry point used by
|
|
76
|
+
* `codemie hook` during incremental sync.
|
|
77
|
+
*/
|
|
78
|
+
async processSession(filePath, sessionId, context) {
|
|
79
|
+
try {
|
|
80
|
+
logger.debug(`[kimi-adapter] Processing session ${sessionId} with ${this.processors.length} processor${this.processors.length !== 1 ? 's' : ''}`);
|
|
81
|
+
const parsedSession = await this.parseSessionFile(filePath, sessionId);
|
|
82
|
+
// Enrich parsed session with hook-time context that is not in the native transcript.
|
|
83
|
+
if (context.gitBranch) {
|
|
84
|
+
parsedSession.metadata = {
|
|
85
|
+
...parsedSession.metadata,
|
|
86
|
+
gitBranch: context.gitBranch,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const processorResults = {};
|
|
90
|
+
const failedProcessors = [];
|
|
91
|
+
let totalRecords = 0;
|
|
92
|
+
for (const processor of this.processors) {
|
|
93
|
+
try {
|
|
94
|
+
if (!processor.shouldProcess(parsedSession)) {
|
|
95
|
+
logger.debug(`[kimi-adapter] Processor ${processor.name} skipped (shouldProcess returned false)`);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
logger.debug(`[kimi-adapter] Running processor: ${processor.name}`);
|
|
99
|
+
const result = await processor.process(parsedSession, context);
|
|
100
|
+
processorResults[processor.name] = {
|
|
101
|
+
success: result.success,
|
|
102
|
+
message: result.message,
|
|
103
|
+
recordsProcessed: result.metadata?.recordsProcessed,
|
|
104
|
+
};
|
|
105
|
+
if (!result.success) {
|
|
106
|
+
failedProcessors.push(processor.name);
|
|
107
|
+
logger.warn(`[kimi-adapter] Processor ${processor.name} failed: ${result.message}`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
logger.debug(`[kimi-adapter] Processor ${processor.name} succeeded: ${result.message}`);
|
|
111
|
+
}
|
|
112
|
+
const recordsProcessed = result.metadata?.recordsProcessed;
|
|
113
|
+
if (typeof recordsProcessed === 'number') {
|
|
114
|
+
totalRecords += recordsProcessed;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
119
|
+
logger.error(`[kimi-adapter] Processor ${processor.name} threw error:`, error);
|
|
120
|
+
processorResults[processor.name] = {
|
|
121
|
+
success: false,
|
|
122
|
+
message: errorMessage,
|
|
123
|
+
};
|
|
124
|
+
failedProcessors.push(processor.name);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const result = {
|
|
128
|
+
success: failedProcessors.length === 0,
|
|
129
|
+
processors: processorResults,
|
|
130
|
+
totalRecords,
|
|
131
|
+
failedProcessors,
|
|
132
|
+
};
|
|
133
|
+
logger.debug(`[kimi-adapter] Processing complete: ${result.success ? 'SUCCESS' : 'FAILED'} ` +
|
|
134
|
+
`(${totalRecords} records, ${failedProcessors.length} failed processors)`);
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
logger.error(`[kimi-adapter] Session processing failed:`, error);
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
createMinimalSession(sessionId) {
|
|
143
|
+
const metadata = {
|
|
144
|
+
createdAt: undefined,
|
|
145
|
+
updatedAt: undefined,
|
|
146
|
+
model: undefined,
|
|
147
|
+
};
|
|
148
|
+
return {
|
|
149
|
+
sessionId,
|
|
150
|
+
agentName: this.metadata.displayName || 'Kimi Code',
|
|
151
|
+
metadata,
|
|
152
|
+
messages: [],
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
extractModel(events) {
|
|
156
|
+
for (const event of events) {
|
|
157
|
+
if (event.type === 'config.update' && event.modelAlias) {
|
|
158
|
+
return event.modelAlias;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
for (const event of events) {
|
|
162
|
+
if (event.type === 'usage.record' && event.model) {
|
|
163
|
+
return event.model;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
extractTimestamps(events) {
|
|
169
|
+
let createdAt;
|
|
170
|
+
let updatedAt;
|
|
171
|
+
for (const event of events) {
|
|
172
|
+
if (typeof event.time === 'number') {
|
|
173
|
+
createdAt = new Date(event.time).toISOString();
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
if (typeof event.created_at === 'number') {
|
|
177
|
+
createdAt = new Date(event.created_at).toISOString();
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
182
|
+
const event = events[i];
|
|
183
|
+
if (typeof event.time === 'number') {
|
|
184
|
+
updatedAt = new Date(event.time).toISOString();
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return { createdAt, updatedAt };
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=kimi.session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.session.js","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.session.ts"],"names":[],"mappings":"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"}
|