@codemieai/code 0.4.2 → 0.5.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 (132) 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 +4 -0
  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 +26 -6
  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/session/BaseProcessor.d.ts +2 -0
  13. package/dist/agents/core/session/BaseProcessor.d.ts.map +1 -1
  14. package/dist/agents/core/session/BaseSessionAdapter.d.ts +7 -0
  15. package/dist/agents/core/session/BaseSessionAdapter.d.ts.map +1 -1
  16. package/dist/agents/core/types.d.ts +30 -0
  17. package/dist/agents/core/types.d.ts.map +1 -1
  18. package/dist/agents/plugins/claude/claude.plugin.js +3 -3
  19. package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
  20. package/dist/agents/plugins/claude/claude.session.js +21 -6
  21. package/dist/agents/plugins/claude/claude.session.js.map +1 -1
  22. package/dist/agents/plugins/gemini/gemini.plugin.js.map +1 -1
  23. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.d.ts.map +1 -1
  24. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js +3 -0
  25. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js.map +1 -1
  26. package/dist/agents/plugins/kimi/extension/SKILL.md +6 -0
  27. package/dist/agents/plugins/kimi/extension/manifest.json +8 -0
  28. package/dist/agents/plugins/kimi/kimi-acp.plugin.d.ts +7 -0
  29. package/dist/agents/plugins/kimi/kimi-acp.plugin.d.ts.map +1 -0
  30. package/dist/agents/plugins/kimi/kimi-acp.plugin.js +28 -0
  31. package/dist/agents/plugins/kimi/kimi-acp.plugin.js.map +1 -0
  32. package/dist/agents/plugins/kimi/kimi.extension-installer.d.ts +56 -0
  33. package/dist/agents/plugins/kimi/kimi.extension-installer.d.ts.map +1 -0
  34. package/dist/agents/plugins/kimi/kimi.extension-installer.js +79 -0
  35. package/dist/agents/plugins/kimi/kimi.extension-installer.js.map +1 -0
  36. package/dist/agents/plugins/kimi/kimi.hook-config-injector.d.ts +34 -0
  37. package/dist/agents/plugins/kimi/kimi.hook-config-injector.d.ts.map +1 -0
  38. package/dist/agents/plugins/kimi/kimi.hook-config-injector.js +158 -0
  39. package/dist/agents/plugins/kimi/kimi.hook-config-injector.js.map +1 -0
  40. package/dist/agents/plugins/kimi/kimi.hook-transformer.d.ts +23 -0
  41. package/dist/agents/plugins/kimi/kimi.hook-transformer.d.ts.map +1 -0
  42. package/dist/agents/plugins/kimi/kimi.hook-transformer.js +46 -0
  43. package/dist/agents/plugins/kimi/kimi.hook-transformer.js.map +1 -0
  44. package/dist/agents/plugins/kimi/kimi.models.d.ts +8 -0
  45. package/dist/agents/plugins/kimi/kimi.models.d.ts.map +1 -0
  46. package/dist/agents/plugins/kimi/kimi.models.js +174 -0
  47. package/dist/agents/plugins/kimi/kimi.models.js.map +1 -0
  48. package/dist/agents/plugins/kimi/kimi.paths.d.ts +65 -0
  49. package/dist/agents/plugins/kimi/kimi.paths.d.ts.map +1 -0
  50. package/dist/agents/plugins/kimi/kimi.paths.js +95 -0
  51. package/dist/agents/plugins/kimi/kimi.paths.js.map +1 -0
  52. package/dist/agents/plugins/kimi/kimi.plugin.d.ts +37 -0
  53. package/dist/agents/plugins/kimi/kimi.plugin.d.ts.map +1 -0
  54. package/dist/agents/plugins/kimi/kimi.plugin.js +318 -0
  55. package/dist/agents/plugins/kimi/kimi.plugin.js.map +1 -0
  56. package/dist/agents/plugins/kimi/kimi.session.d.ts +40 -0
  57. package/dist/agents/plugins/kimi/kimi.session.d.ts.map +1 -0
  58. package/dist/agents/plugins/kimi/kimi.session.js +191 -0
  59. package/dist/agents/plugins/kimi/kimi.session.js.map +1 -0
  60. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.d.ts +43 -0
  61. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.d.ts.map +1 -0
  62. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.js +421 -0
  63. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.js.map +1 -0
  64. package/dist/agents/plugins/kimi/session/types.d.ts +81 -0
  65. package/dist/agents/plugins/kimi/session/types.d.ts.map +1 -0
  66. package/dist/agents/plugins/kimi/session/types.js +5 -0
  67. package/dist/agents/plugins/kimi/session/types.js.map +1 -0
  68. package/dist/agents/registry.d.ts.map +1 -1
  69. package/dist/agents/registry.js +4 -0
  70. package/dist/agents/registry.js.map +1 -1
  71. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
  72. package/dist/cli/commands/analytics/cost/cost-enricher.js +67 -1
  73. package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
  74. package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts +2 -2
  75. package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts.map +1 -1
  76. package/dist/cli/commands/analytics/cost/dispatch-extractor.js +6 -4
  77. package/dist/cli/commands/analytics/cost/dispatch-extractor.js.map +1 -1
  78. package/dist/cli/commands/analytics/cost/pricing.json +9 -2
  79. package/dist/cli/commands/analytics/cost/types.d.ts +13 -0
  80. package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
  81. package/dist/cli/commands/analytics/cost/types.js.map +1 -1
  82. package/dist/cli/commands/analytics/cost/usage-readers.d.ts +13 -4
  83. package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
  84. package/dist/cli/commands/analytics/cost/usage-readers.js +115 -27
  85. package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
  86. package/dist/cli/commands/analytics/model-normalizer.d.ts +2 -0
  87. package/dist/cli/commands/analytics/model-normalizer.d.ts.map +1 -1
  88. package/dist/cli/commands/analytics/model-normalizer.js +8 -0
  89. package/dist/cli/commands/analytics/model-normalizer.js.map +1 -1
  90. package/dist/cli/commands/analytics/report/client/app.js +233 -120
  91. package/dist/cli/commands/analytics/report/template.html +28 -4
  92. package/dist/cli/commands/hook.d.ts.map +1 -1
  93. package/dist/cli/commands/hook.js +24 -7
  94. package/dist/cli/commands/hook.js.map +1 -1
  95. package/dist/providers/index.d.ts +2 -0
  96. package/dist/providers/index.d.ts.map +1 -1
  97. package/dist/providers/index.js +2 -0
  98. package/dist/providers/index.js.map +1 -1
  99. package/dist/providers/plugins/moonshot-subscription/index.d.ts +9 -0
  100. package/dist/providers/plugins/moonshot-subscription/index.d.ts.map +1 -0
  101. package/dist/providers/plugins/moonshot-subscription/index.js +9 -0
  102. package/dist/providers/plugins/moonshot-subscription/index.js.map +1 -0
  103. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.d.ts +8 -0
  104. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.d.ts.map +1 -0
  105. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.js +80 -0
  106. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.js.map +1 -0
  107. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.d.ts +11 -0
  108. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.d.ts.map +1 -0
  109. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.js +111 -0
  110. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.js.map +1 -0
  111. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
  112. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  113. package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -1
  114. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  115. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.d.ts +18 -0
  116. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.d.ts.map +1 -0
  117. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.js +56 -0
  118. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.js.map +1 -0
  119. package/dist/providers/plugins/sso/sso.auth.d.ts +5 -0
  120. package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -1
  121. package/dist/providers/plugins/sso/sso.auth.js +23 -1
  122. package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
  123. package/dist/utils/config.d.ts +24 -0
  124. package/dist/utils/config.d.ts.map +1 -1
  125. package/dist/utils/config.js +83 -8
  126. package/dist/utils/config.js.map +1 -1
  127. package/dist/utils/native-installer.d.ts.map +1 -1
  128. package/dist/utils/native-installer.js +6 -3
  129. package/dist/utils/native-installer.js.map +1 -1
  130. package/package.json +4 -1
  131. package/scripts/copy-plugins.js +5 -0
  132. package/scripts/test-desktop-telemetry.js +1 -1
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Kimi hook payload transformer.
3
+ *
4
+ * Kimi emits lifecycle hooks as JSON on stdin with Kimi-specific field names.
5
+ * Unlike Claude and Gemini, Kimi payloads do not include a transcript path;
6
+ * the transformer computes it from the working directory and session id using
7
+ * the same deterministic layout Kimi uses for its session storage.
8
+ */
9
+ import type { BaseHookEvent, HookTransformer } from '../../core/types.js';
10
+ /**
11
+ * Transforms Kimi hook payloads to CodeMie's internal BaseHookEvent format.
12
+ */
13
+ export declare class KimiHookTransformer implements HookTransformer {
14
+ readonly agentName = "kimi";
15
+ /**
16
+ * Transform a Kimi hook event into the internal BaseHookEvent shape.
17
+ *
18
+ * @param event - Raw JSON payload received from Kimi on stdin
19
+ * @returns Transformed event compatible with CodeMie hook handlers
20
+ */
21
+ transform(event: unknown): BaseHookEvent;
22
+ }
23
+ //# sourceMappingURL=kimi.hook-transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.hook-transformer.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.hook-transformer.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG1E;;GAEG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD,QAAQ,CAAC,SAAS,UAAU;IAE5B;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa;CA6BzC"}
@@ -0,0 +1,46 @@
1
+ // src/agents/plugins/kimi/kimi.hook-transformer.ts
2
+ /**
3
+ * Kimi hook payload transformer.
4
+ *
5
+ * Kimi emits lifecycle hooks as JSON on stdin with Kimi-specific field names.
6
+ * Unlike Claude and Gemini, Kimi payloads do not include a transcript path;
7
+ * the transformer computes it from the working directory and session id using
8
+ * the same deterministic layout Kimi uses for its session storage.
9
+ */
10
+ import { getKimiMainWirePath } from './kimi.paths.js';
11
+ /**
12
+ * Transforms Kimi hook payloads to CodeMie's internal BaseHookEvent format.
13
+ */
14
+ export class KimiHookTransformer {
15
+ agentName = 'kimi';
16
+ /**
17
+ * Transform a Kimi hook event into the internal BaseHookEvent shape.
18
+ *
19
+ * @param event - Raw JSON payload received from Kimi on stdin
20
+ * @returns Transformed event compatible with CodeMie hook handlers
21
+ */
22
+ transform(event) {
23
+ const payload = event;
24
+ const sessionId = typeof payload.session_id === 'string' ? payload.session_id : '';
25
+ const cwd = typeof payload.cwd === 'string' ? payload.cwd : process.cwd();
26
+ const hookEventName = typeof payload.hook_event_name === 'string' ? payload.hook_event_name : '';
27
+ const transformed = {
28
+ hook_event_name: hookEventName,
29
+ session_id: sessionId,
30
+ transcript_path: sessionId ? getKimiMainWirePath(cwd, sessionId) : '',
31
+ permission_mode: 'default',
32
+ cwd,
33
+ };
34
+ if (typeof payload.source === 'string') {
35
+ transformed.source = payload.source;
36
+ }
37
+ if (typeof payload.reason === 'string') {
38
+ transformed.reason = payload.reason;
39
+ }
40
+ if (typeof payload.stop_hook_active === 'boolean') {
41
+ transformed.stop_hook_active = payload.stop_hook_active;
42
+ }
43
+ return transformed;
44
+ }
45
+ }
46
+ //# sourceMappingURL=kimi.hook-transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.hook-transformer.js","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.hook-transformer.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD;;;;;;;GAOG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACrB,SAAS,GAAG,MAAM,CAAC;IAE5B;;;;;OAKG;IACH,SAAS,CAAC,KAAc;QACtB,MAAM,OAAO,GAAG,KAAgC,CAAC;QAEjD,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,MAAM,GAAG,GAAG,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1E,MAAM,aAAa,GAAG,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAEjG,MAAM,WAAW,GAAkB;YACjC,eAAe,EAAE,aAAa;YAC9B,UAAU,EAAE,SAAS;YACrB,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;YACrE,eAAe,EAAE,SAAS;YAC1B,GAAG;SACJ,CAAC;QAEF,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,OAAO,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YAClD,WAAW,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAC1D,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ export interface KimiModelResolution {
2
+ selectedModel: string;
3
+ availableModels: string[];
4
+ }
5
+ export declare function isKimiCompatibleModelName(modelName: string | undefined): modelName is string;
6
+ export declare function resolveKimiModel(env: NodeJS.ProcessEnv): Promise<KimiModelResolution>;
7
+ export declare function assertExplicitKimiModelAllowed(model: string, availableModels: string[]): void;
8
+ //# sourceMappingURL=kimi.models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.models.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.models.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAmDD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,IAAI,MAAM,CAI5F;AA2FD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgD3F;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAc7F"}
@@ -0,0 +1,174 @@
1
+ import { fetchCodeMieLlmModels } from '../../../providers/plugins/sso/sso.http-client.js';
2
+ import { CodeMieSSO } from '../../../providers/plugins/sso/sso.auth.js';
3
+ import { ConfigurationError } from '../../../utils/errors.js';
4
+ import { logger } from '../../../utils/logger.js';
5
+ const INCOMPATIBLE_MODEL_PATTERNS = [
6
+ /anthropic/i,
7
+ /claude/i,
8
+ /sonnet/i,
9
+ /opus/i,
10
+ /haiku/i,
11
+ /codex/i,
12
+ /^gpt[-.]?/i,
13
+ /gemini/i,
14
+ /qwen/i,
15
+ /deepseek/i,
16
+ /llama/i,
17
+ /mistral/i,
18
+ /grok/i,
19
+ ];
20
+ const COMPATIBLE_KIMI_MODEL_PATTERNS = [
21
+ /kimi/i,
22
+ /moonshot/i,
23
+ /moonshotai/i,
24
+ ];
25
+ function getModelId(model) {
26
+ const candidates = [
27
+ model.deployment_name,
28
+ model.base_name,
29
+ model.label,
30
+ ];
31
+ const compatibleCandidates = candidates.filter(isKimiCompatibleModelName);
32
+ const apiIdentifier = compatibleCandidates.find(candidate => !/\s/.test(candidate));
33
+ return apiIdentifier || compatibleCandidates[0];
34
+ }
35
+ function getSearchText(model) {
36
+ return [
37
+ model.deployment_name,
38
+ model.base_name,
39
+ model.label,
40
+ model.provider,
41
+ ].filter(Boolean).join(' ').toLowerCase();
42
+ }
43
+ export function isKimiCompatibleModelName(modelName) {
44
+ if (!modelName)
45
+ return false;
46
+ if (INCOMPATIBLE_MODEL_PATTERNS.some(pattern => pattern.test(modelName)))
47
+ return false;
48
+ return COMPATIBLE_KIMI_MODEL_PATTERNS.some(pattern => pattern.test(modelName));
49
+ }
50
+ function isKimiCompatibleModel(model) {
51
+ if (!model.enabled)
52
+ return false;
53
+ const id = getModelId(model);
54
+ if (!id)
55
+ return false;
56
+ const searchText = getSearchText(model);
57
+ if (INCOMPATIBLE_MODEL_PATTERNS.some(pattern => pattern.test(searchText))) {
58
+ return false;
59
+ }
60
+ return COMPATIBLE_KIMI_MODEL_PATTERNS.some(pattern => pattern.test(searchText));
61
+ }
62
+ function extractKimiVersionParts(text) {
63
+ const lower = text.toLowerCase();
64
+ const k2Match = lower.match(/kimi[-.]?k2(?:[-.](\d+))?(?:[-.](\d+))?/);
65
+ const genericMatch = lower.match(/kimi.*?(\d+)(?:[-.](\d+))?(?:[-.](\d+))?/);
66
+ const match = k2Match || genericMatch;
67
+ return [
68
+ match?.[1],
69
+ match?.[2],
70
+ match?.[3],
71
+ ].map(part => part ? Number(part) : 0);
72
+ }
73
+ function rankModel(model) {
74
+ const id = getModelId(model);
75
+ if (!id) {
76
+ throw new ConfigurationError('Cannot rank Kimi model without a compatible model ID');
77
+ }
78
+ const searchText = getSearchText(model);
79
+ const preferredK26Bonus = /kimi[-_.]?k2[-_.]?6(?:[-_.]|$)/i.test(searchText) ? 1 : 0;
80
+ const k2Bonus = /kimi[-_.]?k2/i.test(searchText) ? 1 : 0;
81
+ const toolBonus = model.features?.tools === false ? 0 : 1;
82
+ const streamingBonus = model.features?.streaming === false ? 0 : 1;
83
+ const defaultBonus = model.default ? 1 : 0;
84
+ return {
85
+ model,
86
+ id,
87
+ score: [
88
+ preferredK26Bonus,
89
+ k2Bonus,
90
+ ...extractKimiVersionParts(searchText),
91
+ toolBonus,
92
+ streamingBonus,
93
+ defaultBonus,
94
+ ],
95
+ };
96
+ }
97
+ function compareRankedModels(a, b) {
98
+ const max = Math.max(a.score.length, b.score.length);
99
+ for (let i = 0; i < max; i++) {
100
+ const diff = (b.score[i] ?? 0) - (a.score[i] ?? 0);
101
+ if (diff !== 0)
102
+ return diff;
103
+ }
104
+ return a.id.localeCompare(b.id);
105
+ }
106
+ async function fetchCodeMieModelsForKimi(env) {
107
+ const jwtToken = env.CODEMIE_JWT_TOKEN;
108
+ const baseUrl = env.CODEMIE_BASE_URL;
109
+ if (jwtToken && baseUrl) {
110
+ logger.debug('[kimi-models] Fetching CodeMie model list via JWT auth');
111
+ return fetchCodeMieLlmModels(baseUrl, jwtToken);
112
+ }
113
+ const codeMieUrl = env.CODEMIE_URL;
114
+ if (codeMieUrl) {
115
+ const sso = new CodeMieSSO();
116
+ const credentials = await sso.getStoredCredentials(codeMieUrl);
117
+ if (!credentials) {
118
+ throw new ConfigurationError(`SSO credentials not found for ${codeMieUrl}. Run: codemie profile login --url ${codeMieUrl}`);
119
+ }
120
+ logger.debug('[kimi-models] Fetching CodeMie model list via SSO auth');
121
+ return fetchCodeMieLlmModels(credentials.apiUrl, credentials.cookies);
122
+ }
123
+ return [];
124
+ }
125
+ export async function resolveKimiModel(env) {
126
+ const currentModel = env.CODEMIE_MODEL;
127
+ let rawModels = [];
128
+ try {
129
+ rawModels = await fetchCodeMieModelsForKimi(env);
130
+ }
131
+ catch (error) {
132
+ if (isKimiCompatibleModelName(currentModel)) {
133
+ const configuredModel = currentModel;
134
+ logger.debug('[kimi-models] Failed to fetch CodeMie models; keeping compatible configured model', {
135
+ error: error instanceof Error ? error.message : String(error),
136
+ model: configuredModel,
137
+ });
138
+ return { selectedModel: configuredModel, availableModels: [configuredModel] };
139
+ }
140
+ throw error;
141
+ }
142
+ const rankedModels = rawModels
143
+ .filter(isKimiCompatibleModel)
144
+ .map(rankModel)
145
+ .sort(compareRankedModels);
146
+ if (rankedModels.length === 0) {
147
+ if (isKimiCompatibleModelName(currentModel)) {
148
+ const configuredModel = currentModel;
149
+ logger.debug('[kimi-models] CodeMie returned no compatible Kimi models; keeping configured Kimi model');
150
+ return { selectedModel: configuredModel, availableModels: [configuredModel] };
151
+ }
152
+ throw new ConfigurationError('No CodeMie Kimi model is available for codemie-kimi. ' +
153
+ 'Enable a Kimi/Moonshot deployment in CodeMie before running Kimi Code.');
154
+ }
155
+ const selectedModel = rankedModels[0].id;
156
+ if (currentModel && currentModel !== selectedModel) {
157
+ logger.info(`[kimi-models] Using ${selectedModel} for Kimi instead of profile model ${currentModel}`);
158
+ }
159
+ return {
160
+ selectedModel,
161
+ availableModels: rankedModels.map(entry => entry.id),
162
+ };
163
+ }
164
+ export function assertExplicitKimiModelAllowed(model, availableModels) {
165
+ if (!isKimiCompatibleModelName(model)) {
166
+ throw new ConfigurationError(`Model "${model}" is not compatible with codemie-kimi. ` +
167
+ `Use a Kimi/Moonshot model${availableModels.length ? ` such as: ${availableModels.join(', ')}` : '.'}`);
168
+ }
169
+ if (availableModels.length > 0 && !availableModels.includes(model)) {
170
+ throw new ConfigurationError(`Model "${model}" is not available in CodeMie for codemie-kimi. ` +
171
+ `Available models: ${availableModels.join(', ')}`);
172
+ }
173
+ }
174
+ //# sourceMappingURL=kimi.models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.models.js","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Kimi path utilities.
3
+ *
4
+ * Kimi stores session data and user state at:
5
+ * ${KIMI_CODE_HOME:-~/.kimi-code}/sessions/{workDirKey}/{sessionId}/agents/main/wire.jsonl
6
+ *
7
+ * Kimi does not use XDG conventions by default, but it supports KIMI_CODE_HOME
8
+ * for isolating local state.
9
+ *
10
+ * Work directory keys are deterministic: the slug is derived from the resolved
11
+ * directory basename (truncated and sanitized), and the suffix is the first 12
12
+ * characters of a SHA-256 hash of the resolved path. This keeps directory names
13
+ * readable while avoiding collisions between different paths that share the same
14
+ * basename.
15
+ */
16
+ /**
17
+ * Returns the Kimi home directory.
18
+ *
19
+ * Defaults to ${userHome}/.kimi-code unless KIMI_CODE_HOME is set.
20
+ */
21
+ export declare function getKimiCodeHome(): string;
22
+ /**
23
+ * Returns the path to Kimi's global config file.
24
+ *
25
+ * ${KIMI_CODE_HOME}/config.toml
26
+ */
27
+ export declare function getKimiConfigPath(): string;
28
+ /**
29
+ * Returns the base directory for all Kimi sessions.
30
+ *
31
+ * ${KIMI_CODE_HOME}/sessions
32
+ */
33
+ export declare function getKimiSessionsDir(): string;
34
+ /**
35
+ * Encodes a working directory path into a deterministic, filesystem-safe key.
36
+ *
37
+ * The key has the shape:
38
+ * wd_{slug}_{hash}
39
+ *
40
+ * - `slug` is the lowercase basename of the resolved cwd, with non-alphanumeric
41
+ * characters replaced by `-`, leading/trailing dashes stripped, and truncated
42
+ * to 40 characters. If the result is empty, `.`, or `..`, it is replaced with
43
+ * `workspace`.
44
+ * - `hash` is the first 12 characters of the SHA-256 digest of the resolved cwd.
45
+ */
46
+ export declare function encodeKimiWorkDirKey(cwd: string): string;
47
+ /**
48
+ * Returns the session directory for a given cwd and session id.
49
+ *
50
+ * ${KIMI_CODE_HOME}/sessions/{workDirKey}/{sessionId}
51
+ */
52
+ export declare function getKimiSessionDir(cwd: string, sessionId: string): string;
53
+ /**
54
+ * Returns the main agent wire file path for a given cwd and session id.
55
+ *
56
+ * ${KIMI_CODE_HOME}/sessions/{workDirKey}/{sessionId}/agents/main/wire.jsonl
57
+ */
58
+ export declare function getKimiMainWirePath(cwd: string, sessionId: string): string;
59
+ /**
60
+ * Returns the directory for user-defined Kimi skills.
61
+ *
62
+ * ${KIMI_CODE_HOME}/skills
63
+ */
64
+ export declare function getKimiUserSkillsDir(): string;
65
+ //# sourceMappingURL=kimi.paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.paths.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.paths.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;GAcG;AAMH;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBxD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
@@ -0,0 +1,95 @@
1
+ // src/agents/plugins/kimi/kimi.paths.ts
2
+ /**
3
+ * Kimi path utilities.
4
+ *
5
+ * Kimi stores session data and user state at:
6
+ * ${KIMI_CODE_HOME:-~/.kimi-code}/sessions/{workDirKey}/{sessionId}/agents/main/wire.jsonl
7
+ *
8
+ * Kimi does not use XDG conventions by default, but it supports KIMI_CODE_HOME
9
+ * for isolating local state.
10
+ *
11
+ * Work directory keys are deterministic: the slug is derived from the resolved
12
+ * directory basename (truncated and sanitized), and the suffix is the first 12
13
+ * characters of a SHA-256 hash of the resolved path. This keeps directory names
14
+ * readable while avoiding collisions between different paths that share the same
15
+ * basename.
16
+ */
17
+ import { createHash } from 'crypto';
18
+ import { homedir } from 'os';
19
+ import { basename, join, resolve } from 'path';
20
+ /**
21
+ * Returns the Kimi home directory.
22
+ *
23
+ * Defaults to ${userHome}/.kimi-code unless KIMI_CODE_HOME is set.
24
+ */
25
+ export function getKimiCodeHome() {
26
+ return process.env.KIMI_CODE_HOME || join(homedir(), '.kimi-code');
27
+ }
28
+ /**
29
+ * Returns the path to Kimi's global config file.
30
+ *
31
+ * ${KIMI_CODE_HOME}/config.toml
32
+ */
33
+ export function getKimiConfigPath() {
34
+ return join(getKimiCodeHome(), 'config.toml');
35
+ }
36
+ /**
37
+ * Returns the base directory for all Kimi sessions.
38
+ *
39
+ * ${KIMI_CODE_HOME}/sessions
40
+ */
41
+ export function getKimiSessionsDir() {
42
+ return join(getKimiCodeHome(), 'sessions');
43
+ }
44
+ /**
45
+ * Encodes a working directory path into a deterministic, filesystem-safe key.
46
+ *
47
+ * The key has the shape:
48
+ * wd_{slug}_{hash}
49
+ *
50
+ * - `slug` is the lowercase basename of the resolved cwd, with non-alphanumeric
51
+ * characters replaced by `-`, leading/trailing dashes stripped, and truncated
52
+ * to 40 characters. If the result is empty, `.`, or `..`, it is replaced with
53
+ * `workspace`.
54
+ * - `hash` is the first 12 characters of the SHA-256 digest of the resolved cwd.
55
+ */
56
+ export function encodeKimiWorkDirKey(cwd) {
57
+ const resolvedCwd = resolve(cwd);
58
+ let slug = basename(resolvedCwd).toLowerCase();
59
+ slug = slug.replace(/[^a-z0-9._-]/g, '-');
60
+ slug = slug.replace(/^-+|-+$/g, '');
61
+ slug = slug.slice(0, 40);
62
+ if (slug === '' || slug === '.' || slug === '..') {
63
+ slug = 'workspace';
64
+ }
65
+ const hash = createHash('sha256')
66
+ .update(resolvedCwd)
67
+ .digest('hex')
68
+ .slice(0, 12);
69
+ return `wd_${slug}_${hash}`;
70
+ }
71
+ /**
72
+ * Returns the session directory for a given cwd and session id.
73
+ *
74
+ * ${KIMI_CODE_HOME}/sessions/{workDirKey}/{sessionId}
75
+ */
76
+ export function getKimiSessionDir(cwd, sessionId) {
77
+ return join(getKimiSessionsDir(), encodeKimiWorkDirKey(cwd), sessionId);
78
+ }
79
+ /**
80
+ * Returns the main agent wire file path for a given cwd and session id.
81
+ *
82
+ * ${KIMI_CODE_HOME}/sessions/{workDirKey}/{sessionId}/agents/main/wire.jsonl
83
+ */
84
+ export function getKimiMainWirePath(cwd, sessionId) {
85
+ return join(getKimiSessionDir(cwd, sessionId), 'agents', 'main', 'wire.jsonl');
86
+ }
87
+ /**
88
+ * Returns the directory for user-defined Kimi skills.
89
+ *
90
+ * ${KIMI_CODE_HOME}/skills
91
+ */
92
+ export function getKimiUserSkillsDir() {
93
+ return join(getKimiCodeHome(), 'skills');
94
+ }
95
+ //# sourceMappingURL=kimi.paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.paths.js","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.paths.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/C;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IAE/C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACpC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzB,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACjD,IAAI,GAAG,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;SAC9B,MAAM,CAAC,WAAW,CAAC;SACnB,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,OAAO,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,SAAiB;IAC9D,OAAO,IAAI,CAAC,kBAAkB,EAAE,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,SAAiB;IAChE,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AACjF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC"}
@@ -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,aA8DhC,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"}