@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.
Files changed (187) hide show
  1. package/README.md +7 -1
  2. package/bin/codemie-kimi-acp.js +18 -0
  3. package/bin/codemie-kimi.js +18 -0
  4. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  5. package/dist/agents/core/AgentCLI.js +26 -2
  6. package/dist/agents/core/AgentCLI.js.map +1 -1
  7. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  8. package/dist/agents/core/BaseAgentAdapter.js +39 -8
  9. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  10. package/dist/agents/core/metrics/types.d.ts +1 -1
  11. package/dist/agents/core/metrics/types.d.ts.map +1 -1
  12. package/dist/agents/core/reasoning-effort.d.ts +8 -0
  13. package/dist/agents/core/reasoning-effort.d.ts.map +1 -0
  14. package/dist/agents/core/reasoning-effort.js +70 -0
  15. package/dist/agents/core/reasoning-effort.js.map +1 -0
  16. package/dist/agents/core/session/BaseProcessor.d.ts +2 -0
  17. package/dist/agents/core/session/BaseProcessor.d.ts.map +1 -1
  18. package/dist/agents/core/session/BaseSessionAdapter.d.ts +7 -0
  19. package/dist/agents/core/session/BaseSessionAdapter.d.ts.map +1 -1
  20. package/dist/agents/core/types.d.ts +62 -0
  21. package/dist/agents/core/types.d.ts.map +1 -1
  22. package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
  23. package/dist/agents/plugins/claude/claude.plugin.js +15 -4
  24. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  25. package/dist/agents/plugins/claude/claude.session.d.ts +9 -0
  26. package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
  27. package/dist/agents/plugins/claude/claude.session.js +40 -9
  28. package/dist/agents/plugins/claude/claude.session.js.map +1 -1
  29. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +9 -0
  30. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
  31. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +45 -11
  32. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
  33. package/dist/agents/plugins/codex/codex-models.d.ts.map +1 -1
  34. package/dist/agents/plugins/codex/codex-models.js +7 -3
  35. package/dist/agents/plugins/codex/codex-models.js.map +1 -1
  36. package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -1
  37. package/dist/agents/plugins/codex/codex.plugin.js +25 -7
  38. package/dist/agents/plugins/codex/codex.plugin.js.map +1 -1
  39. package/dist/agents/plugins/gemini/gemini.plugin.js.map +1 -1
  40. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.d.ts.map +1 -1
  41. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js +3 -0
  42. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js.map +1 -1
  43. package/dist/agents/plugins/kimi/extension/SKILL.md +6 -0
  44. package/dist/agents/plugins/kimi/extension/manifest.json +8 -0
  45. package/dist/agents/plugins/kimi/kimi-acp.plugin.d.ts +7 -0
  46. package/dist/agents/plugins/kimi/kimi-acp.plugin.d.ts.map +1 -0
  47. package/dist/agents/plugins/kimi/kimi-acp.plugin.js +28 -0
  48. package/dist/agents/plugins/kimi/kimi-acp.plugin.js.map +1 -0
  49. package/dist/agents/plugins/kimi/kimi.extension-installer.d.ts +56 -0
  50. package/dist/agents/plugins/kimi/kimi.extension-installer.d.ts.map +1 -0
  51. package/dist/agents/plugins/kimi/kimi.extension-installer.js +79 -0
  52. package/dist/agents/plugins/kimi/kimi.extension-installer.js.map +1 -0
  53. package/dist/agents/plugins/kimi/kimi.hook-config-injector.d.ts +34 -0
  54. package/dist/agents/plugins/kimi/kimi.hook-config-injector.d.ts.map +1 -0
  55. package/dist/agents/plugins/kimi/kimi.hook-config-injector.js +158 -0
  56. package/dist/agents/plugins/kimi/kimi.hook-config-injector.js.map +1 -0
  57. package/dist/agents/plugins/kimi/kimi.hook-transformer.d.ts +23 -0
  58. package/dist/agents/plugins/kimi/kimi.hook-transformer.d.ts.map +1 -0
  59. package/dist/agents/plugins/kimi/kimi.hook-transformer.js +46 -0
  60. package/dist/agents/plugins/kimi/kimi.hook-transformer.js.map +1 -0
  61. package/dist/agents/plugins/kimi/kimi.models.d.ts +8 -0
  62. package/dist/agents/plugins/kimi/kimi.models.d.ts.map +1 -0
  63. package/dist/agents/plugins/kimi/kimi.models.js +174 -0
  64. package/dist/agents/plugins/kimi/kimi.models.js.map +1 -0
  65. package/dist/agents/plugins/kimi/kimi.paths.d.ts +65 -0
  66. package/dist/agents/plugins/kimi/kimi.paths.d.ts.map +1 -0
  67. package/dist/agents/plugins/kimi/kimi.paths.js +95 -0
  68. package/dist/agents/plugins/kimi/kimi.paths.js.map +1 -0
  69. package/dist/agents/plugins/kimi/kimi.plugin.d.ts +37 -0
  70. package/dist/agents/plugins/kimi/kimi.plugin.d.ts.map +1 -0
  71. package/dist/agents/plugins/kimi/kimi.plugin.js +329 -0
  72. package/dist/agents/plugins/kimi/kimi.plugin.js.map +1 -0
  73. package/dist/agents/plugins/kimi/kimi.session.d.ts +40 -0
  74. package/dist/agents/plugins/kimi/kimi.session.d.ts.map +1 -0
  75. package/dist/agents/plugins/kimi/kimi.session.js +191 -0
  76. package/dist/agents/plugins/kimi/kimi.session.js.map +1 -0
  77. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.d.ts +43 -0
  78. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.d.ts.map +1 -0
  79. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.js +421 -0
  80. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.js.map +1 -0
  81. package/dist/agents/plugins/kimi/session/types.d.ts +81 -0
  82. package/dist/agents/plugins/kimi/session/types.d.ts.map +1 -0
  83. package/dist/agents/plugins/kimi/session/types.js +5 -0
  84. package/dist/agents/plugins/kimi/session/types.js.map +1 -0
  85. package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts.map +1 -1
  86. package/dist/agents/plugins/opencode/opencode-dynamic-models.js +8 -1
  87. package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
  88. package/dist/agents/plugins/opencode/opencode-model-configs.d.ts.map +1 -1
  89. package/dist/agents/plugins/opencode/opencode-model-configs.js +29 -0
  90. package/dist/agents/plugins/opencode/opencode-model-configs.js.map +1 -1
  91. package/dist/agents/plugins/opencode/opencode.plugin.d.ts.map +1 -1
  92. package/dist/agents/plugins/opencode/opencode.plugin.js +13 -0
  93. package/dist/agents/plugins/opencode/opencode.plugin.js.map +1 -1
  94. package/dist/agents/registry.d.ts.map +1 -1
  95. package/dist/agents/registry.js +4 -0
  96. package/dist/agents/registry.js.map +1 -1
  97. package/dist/cli/commands/analytics/cost/cost-calculator.d.ts.map +1 -1
  98. package/dist/cli/commands/analytics/cost/cost-calculator.js +19 -2
  99. package/dist/cli/commands/analytics/cost/cost-calculator.js.map +1 -1
  100. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
  101. package/dist/cli/commands/analytics/cost/cost-enricher.js +67 -1
  102. package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
  103. package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts +2 -2
  104. package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts.map +1 -1
  105. package/dist/cli/commands/analytics/cost/dispatch-extractor.js +6 -4
  106. package/dist/cli/commands/analytics/cost/dispatch-extractor.js.map +1 -1
  107. package/dist/cli/commands/analytics/cost/pricing.d.ts +1 -0
  108. package/dist/cli/commands/analytics/cost/pricing.d.ts.map +1 -1
  109. package/dist/cli/commands/analytics/cost/pricing.js +1 -0
  110. package/dist/cli/commands/analytics/cost/pricing.js.map +1 -1
  111. package/dist/cli/commands/analytics/cost/pricing.json +79 -37
  112. package/dist/cli/commands/analytics/cost/types.d.ts +14 -0
  113. package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
  114. package/dist/cli/commands/analytics/cost/types.js.map +1 -1
  115. package/dist/cli/commands/analytics/cost/usage-readers.d.ts +13 -4
  116. package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
  117. package/dist/cli/commands/analytics/cost/usage-readers.js +121 -27
  118. package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
  119. package/dist/cli/commands/analytics/model-normalizer.d.ts +2 -0
  120. package/dist/cli/commands/analytics/model-normalizer.d.ts.map +1 -1
  121. package/dist/cli/commands/analytics/model-normalizer.js +8 -0
  122. package/dist/cli/commands/analytics/model-normalizer.js.map +1 -1
  123. package/dist/cli/commands/analytics/report/client/app.js +233 -120
  124. package/dist/cli/commands/analytics/report/template.html +28 -4
  125. package/dist/cli/commands/hook.d.ts.map +1 -1
  126. package/dist/cli/commands/hook.js +24 -7
  127. package/dist/cli/commands/hook.js.map +1 -1
  128. package/dist/env/types.d.ts +3 -0
  129. package/dist/env/types.d.ts.map +1 -1
  130. package/dist/env/types.js.map +1 -1
  131. package/dist/providers/index.d.ts +2 -0
  132. package/dist/providers/index.d.ts.map +1 -1
  133. package/dist/providers/index.js +2 -0
  134. package/dist/providers/index.js.map +1 -1
  135. package/dist/providers/plugins/moonshot-subscription/index.d.ts +9 -0
  136. package/dist/providers/plugins/moonshot-subscription/index.d.ts.map +1 -0
  137. package/dist/providers/plugins/moonshot-subscription/index.js +9 -0
  138. package/dist/providers/plugins/moonshot-subscription/index.js.map +1 -0
  139. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.d.ts +8 -0
  140. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.d.ts.map +1 -0
  141. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.js +80 -0
  142. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.js.map +1 -0
  143. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.d.ts +11 -0
  144. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.d.ts.map +1 -0
  145. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.js +111 -0
  146. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.js.map +1 -0
  147. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts +9 -2
  148. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts.map +1 -1
  149. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js +17 -6
  150. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js.map +1 -1
  151. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
  152. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  153. package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -1
  154. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  155. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.d.ts +18 -0
  156. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.d.ts.map +1 -0
  157. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.js +56 -0
  158. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.js.map +1 -0
  159. package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.d.ts +12 -0
  160. package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.d.ts.map +1 -1
  161. package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.js +48 -14
  162. package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.js.map +1 -1
  163. package/dist/providers/plugins/sso/sso.auth.d.ts +5 -0
  164. package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -1
  165. package/dist/providers/plugins/sso/sso.auth.js +23 -1
  166. package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
  167. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -1
  168. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +6 -0
  169. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -1
  170. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts.map +1 -1
  171. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js +21 -0
  172. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js.map +1 -1
  173. package/dist/utils/config.d.ts +24 -0
  174. package/dist/utils/config.d.ts.map +1 -1
  175. package/dist/utils/config.js +85 -8
  176. package/dist/utils/config.js.map +1 -1
  177. package/dist/utils/exec.js +1 -1
  178. package/dist/utils/exec.js.map +1 -1
  179. package/dist/utils/native-installer.d.ts.map +1 -1
  180. package/dist/utils/native-installer.js +6 -3
  181. package/dist/utils/native-installer.js.map +1 -1
  182. package/dist/utils/windows-path.d.ts.map +1 -1
  183. package/dist/utils/windows-path.js +6 -2
  184. package/dist/utils/windows-path.js.map +1 -1
  185. package/package.json +4 -1
  186. package/scripts/copy-plugins.js +5 -0
  187. 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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"}