@codemieai/code 0.4.1 → 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 (167) 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 +4 -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 +10 -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 +29 -7
  21. package/dist/agents/plugins/claude/claude.session.js.map +1 -1
  22. package/dist/agents/plugins/claude/session/claude-named-invocations.d.ts +28 -0
  23. package/dist/agents/plugins/claude/session/claude-named-invocations.d.ts.map +1 -0
  24. package/dist/agents/plugins/claude/session/claude-named-invocations.js +78 -0
  25. package/dist/agents/plugins/claude/session/claude-named-invocations.js.map +1 -0
  26. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
  27. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +10 -1
  28. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
  29. package/dist/agents/plugins/gemini/gemini.plugin.js.map +1 -1
  30. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.d.ts.map +1 -1
  31. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js +3 -0
  32. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js.map +1 -1
  33. package/dist/agents/plugins/kimi/extension/SKILL.md +6 -0
  34. package/dist/agents/plugins/kimi/extension/manifest.json +8 -0
  35. package/dist/agents/plugins/kimi/kimi-acp.plugin.d.ts +7 -0
  36. package/dist/agents/plugins/kimi/kimi-acp.plugin.d.ts.map +1 -0
  37. package/dist/agents/plugins/kimi/kimi-acp.plugin.js +28 -0
  38. package/dist/agents/plugins/kimi/kimi-acp.plugin.js.map +1 -0
  39. package/dist/agents/plugins/kimi/kimi.extension-installer.d.ts +56 -0
  40. package/dist/agents/plugins/kimi/kimi.extension-installer.d.ts.map +1 -0
  41. package/dist/agents/plugins/kimi/kimi.extension-installer.js +79 -0
  42. package/dist/agents/plugins/kimi/kimi.extension-installer.js.map +1 -0
  43. package/dist/agents/plugins/kimi/kimi.hook-config-injector.d.ts +34 -0
  44. package/dist/agents/plugins/kimi/kimi.hook-config-injector.d.ts.map +1 -0
  45. package/dist/agents/plugins/kimi/kimi.hook-config-injector.js +158 -0
  46. package/dist/agents/plugins/kimi/kimi.hook-config-injector.js.map +1 -0
  47. package/dist/agents/plugins/kimi/kimi.hook-transformer.d.ts +23 -0
  48. package/dist/agents/plugins/kimi/kimi.hook-transformer.d.ts.map +1 -0
  49. package/dist/agents/plugins/kimi/kimi.hook-transformer.js +46 -0
  50. package/dist/agents/plugins/kimi/kimi.hook-transformer.js.map +1 -0
  51. package/dist/agents/plugins/kimi/kimi.models.d.ts +8 -0
  52. package/dist/agents/plugins/kimi/kimi.models.d.ts.map +1 -0
  53. package/dist/agents/plugins/kimi/kimi.models.js +174 -0
  54. package/dist/agents/plugins/kimi/kimi.models.js.map +1 -0
  55. package/dist/agents/plugins/kimi/kimi.paths.d.ts +65 -0
  56. package/dist/agents/plugins/kimi/kimi.paths.d.ts.map +1 -0
  57. package/dist/agents/plugins/kimi/kimi.paths.js +95 -0
  58. package/dist/agents/plugins/kimi/kimi.paths.js.map +1 -0
  59. package/dist/agents/plugins/kimi/kimi.plugin.d.ts +37 -0
  60. package/dist/agents/plugins/kimi/kimi.plugin.d.ts.map +1 -0
  61. package/dist/agents/plugins/kimi/kimi.plugin.js +318 -0
  62. package/dist/agents/plugins/kimi/kimi.plugin.js.map +1 -0
  63. package/dist/agents/plugins/kimi/kimi.session.d.ts +40 -0
  64. package/dist/agents/plugins/kimi/kimi.session.d.ts.map +1 -0
  65. package/dist/agents/plugins/kimi/kimi.session.js +191 -0
  66. package/dist/agents/plugins/kimi/kimi.session.js.map +1 -0
  67. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.d.ts +43 -0
  68. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.d.ts.map +1 -0
  69. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.js +421 -0
  70. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.js.map +1 -0
  71. package/dist/agents/plugins/kimi/session/types.d.ts +81 -0
  72. package/dist/agents/plugins/kimi/session/types.d.ts.map +1 -0
  73. package/dist/agents/plugins/kimi/session/types.js +5 -0
  74. package/dist/agents/plugins/kimi/session/types.js.map +1 -0
  75. package/dist/agents/registry.d.ts.map +1 -1
  76. package/dist/agents/registry.js +4 -0
  77. package/dist/agents/registry.js.map +1 -1
  78. package/dist/cli/commands/analytics/aggregator.d.ts +14 -0
  79. package/dist/cli/commands/analytics/aggregator.d.ts.map +1 -1
  80. package/dist/cli/commands/analytics/aggregator.js +81 -1
  81. package/dist/cli/commands/analytics/aggregator.js.map +1 -1
  82. package/dist/cli/commands/analytics/cost/cost-calculator.d.ts +10 -0
  83. package/dist/cli/commands/analytics/cost/cost-calculator.d.ts.map +1 -1
  84. package/dist/cli/commands/analytics/cost/cost-calculator.js +9 -5
  85. package/dist/cli/commands/analytics/cost/cost-calculator.js.map +1 -1
  86. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts +9 -1
  87. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
  88. package/dist/cli/commands/analytics/cost/cost-enricher.js +141 -7
  89. package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
  90. package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts +17 -0
  91. package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts.map +1 -0
  92. package/dist/cli/commands/analytics/cost/dispatch-extractor.js +78 -0
  93. package/dist/cli/commands/analytics/cost/dispatch-extractor.js.map +1 -0
  94. package/dist/cli/commands/analytics/cost/pricing.json +9 -2
  95. package/dist/cli/commands/analytics/cost/types.d.ts +33 -0
  96. package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
  97. package/dist/cli/commands/analytics/cost/types.js +4 -1
  98. package/dist/cli/commands/analytics/cost/types.js.map +1 -1
  99. package/dist/cli/commands/analytics/cost/usage-readers.d.ts +22 -1
  100. package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
  101. package/dist/cli/commands/analytics/cost/usage-readers.js +147 -21
  102. package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
  103. package/dist/cli/commands/analytics/model-normalizer.d.ts +2 -0
  104. package/dist/cli/commands/analytics/model-normalizer.d.ts.map +1 -1
  105. package/dist/cli/commands/analytics/model-normalizer.js +8 -0
  106. package/dist/cli/commands/analytics/model-normalizer.js.map +1 -1
  107. package/dist/cli/commands/analytics/native-loader.d.ts.map +1 -1
  108. package/dist/cli/commands/analytics/native-loader.js +35 -0
  109. package/dist/cli/commands/analytics/native-loader.js.map +1 -1
  110. package/dist/cli/commands/analytics/report/client/app.js +685 -53
  111. package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
  112. package/dist/cli/commands/analytics/report/payload-builder.js +13 -0
  113. package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
  114. package/dist/cli/commands/analytics/report/template.html +108 -8
  115. package/dist/cli/commands/analytics/report/types.d.ts +13 -2
  116. package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
  117. package/dist/cli/commands/analytics/types.d.ts +18 -0
  118. package/dist/cli/commands/analytics/types.d.ts.map +1 -1
  119. package/dist/cli/commands/hook.d.ts.map +1 -1
  120. package/dist/cli/commands/hook.js +24 -7
  121. package/dist/cli/commands/hook.js.map +1 -1
  122. package/dist/migrations/004-skills-assistants-top-level.migration.d.ts.map +1 -1
  123. package/dist/migrations/004-skills-assistants-top-level.migration.js +8 -5
  124. package/dist/migrations/004-skills-assistants-top-level.migration.js.map +1 -1
  125. package/dist/migrations/005-skill-slug-format.migration.d.ts.map +1 -1
  126. package/dist/migrations/005-skill-slug-format.migration.js +14 -11
  127. package/dist/migrations/005-skill-slug-format.migration.js.map +1 -1
  128. package/dist/providers/index.d.ts +2 -0
  129. package/dist/providers/index.d.ts.map +1 -1
  130. package/dist/providers/index.js +2 -0
  131. package/dist/providers/index.js.map +1 -1
  132. package/dist/providers/plugins/moonshot-subscription/index.d.ts +9 -0
  133. package/dist/providers/plugins/moonshot-subscription/index.d.ts.map +1 -0
  134. package/dist/providers/plugins/moonshot-subscription/index.js +9 -0
  135. package/dist/providers/plugins/moonshot-subscription/index.js.map +1 -0
  136. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.d.ts +8 -0
  137. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.d.ts.map +1 -0
  138. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.js +80 -0
  139. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.js.map +1 -0
  140. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.d.ts +11 -0
  141. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.d.ts.map +1 -0
  142. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.js +111 -0
  143. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.js.map +1 -0
  144. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
  145. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  146. package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -1
  147. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  148. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.d.ts +18 -0
  149. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.d.ts.map +1 -0
  150. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.js +56 -0
  151. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.js.map +1 -0
  152. package/dist/providers/plugins/sso/session/processors/conversations/constants.d.ts +1 -1
  153. package/dist/providers/plugins/sso/session/processors/conversations/constants.js +1 -1
  154. package/dist/providers/plugins/sso/sso.auth.d.ts +5 -0
  155. package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -1
  156. package/dist/providers/plugins/sso/sso.auth.js +23 -1
  157. package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
  158. package/dist/utils/config.d.ts +24 -0
  159. package/dist/utils/config.d.ts.map +1 -1
  160. package/dist/utils/config.js +83 -8
  161. package/dist/utils/config.js.map +1 -1
  162. package/dist/utils/native-installer.d.ts.map +1 -1
  163. package/dist/utils/native-installer.js +6 -3
  164. package/dist/utils/native-installer.js.map +1 -1
  165. package/package.json +5 -1
  166. package/scripts/copy-plugins.js +5 -0
  167. package/scripts/test-desktop-telemetry.js +1 -1
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Kimi Extension Installer
3
+ *
4
+ * Handles installation of the bundled CodeMie skill into Kimi's user skills
5
+ * directory at ~/.kimi-code/skills/codemie-kimi.
6
+ *
7
+ * Extends BaseExtensionInstaller to provide Kimi-specific paths.
8
+ * All installation logic is inherited from the base class.
9
+ *
10
+ * @module agents/plugins/kimi/extension-installer
11
+ */
12
+ import { join, dirname } from 'path';
13
+ import { fileURLToPath } from 'url';
14
+ import { access } from 'fs/promises';
15
+ import { constants } from 'fs';
16
+ import { BaseExtensionInstaller } from '../../core/extension/BaseExtensionInstaller.js';
17
+ import { getKimiUserSkillsDir } from './kimi.paths.js';
18
+ /**
19
+ * Kimi Extension Installer
20
+ *
21
+ * Installs the bundled CodeMie skill for Kimi Code CLI.
22
+ */
23
+ export class KimiExtensionInstaller extends BaseExtensionInstaller {
24
+ /**
25
+ * Constructor
26
+ * @param metadata - Agent metadata containing name, displayName, etc.
27
+ */
28
+ constructor(metadata) {
29
+ super(metadata.name); // Pass agent name to parent
30
+ }
31
+ /**
32
+ * Get the source extension directory path
33
+ * Works in both development and npm package contexts
34
+ */
35
+ getSourcePath() {
36
+ return join(dirname(fileURLToPath(import.meta.url)), 'extension');
37
+ }
38
+ /**
39
+ * Get the target installation directory
40
+ * @returns ${KIMI_CODE_HOME:-~/.kimi-code}/skills/codemie-kimi
41
+ */
42
+ getTargetPath() {
43
+ return join(getKimiUserSkillsDir(), 'codemie-kimi');
44
+ }
45
+ /**
46
+ * Get the manifest file path (relative to base directory)
47
+ * @returns manifest.json
48
+ */
49
+ getManifestPath() {
50
+ return 'manifest.json';
51
+ }
52
+ /**
53
+ * Get list of critical files that must exist after installation
54
+ * @returns Array of relative file paths
55
+ */
56
+ getCriticalFiles() {
57
+ return ['manifest.json', 'SKILL.md'];
58
+ }
59
+ /**
60
+ * Check if the Kimi extension is already installed and read its version.
61
+ *
62
+ * Verifies that the target directory, manifest, and SKILL.md all exist and
63
+ * are readable. Returns null if any of these checks fail.
64
+ */
65
+ async getInstalledInfo() {
66
+ try {
67
+ const targetPath = this.getTargetPath();
68
+ await access(targetPath, constants.F_OK);
69
+ await access(join(targetPath, this.getManifestPath()), constants.R_OK);
70
+ await access(join(targetPath, 'SKILL.md'), constants.R_OK);
71
+ const version = await this.getVersion(targetPath);
72
+ return { installed: true, version };
73
+ }
74
+ catch {
75
+ return null;
76
+ }
77
+ }
78
+ }
79
+ //# sourceMappingURL=kimi.extension-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.extension-installer.js","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.extension-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AAExF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,OAAO,sBAAuB,SAAQ,sBAAsB;IAChE;;;OAGG;IACH,YAAY,QAAuB;QACjC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B;IACpD,CAAC;IAED;;;OAGG;IACO,aAAa;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,oBAAoB,EAAE,EAAE,cAAc,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACO,eAAe;QACvB,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;;OAGG;IACO,gBAAgB;QACxB,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,gBAAgB;QAC9B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,MAAM,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACvE,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAClD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Idempotent injector for CodeMie lifecycle hooks into Kimi's global config.
3
+ *
4
+ * Kimi Code supports lifecycle hooks in `~/.kimi-code/config.toml` under
5
+ * `[[hooks]]` entries. This component registers the hooks CodeMie needs to
6
+ * observe and react to Kimi sessions while leaving user-managed configuration
7
+ * intact.
8
+ */
9
+ /**
10
+ * Result shape for hook injection.
11
+ */
12
+ export interface HookInjectionResult {
13
+ success: boolean;
14
+ created: boolean;
15
+ configPath: string;
16
+ error?: string;
17
+ }
18
+ export declare const MANAGED_MARKER = "# CodeMie-managed hooks - do not edit manually";
19
+ /**
20
+ * Injects and restores CodeMie lifecycle hooks in Kimi's config.toml.
21
+ */
22
+ export declare class KimiHookConfigInjector {
23
+ /**
24
+ * Idempotently inject CodeMie hooks into `~/.kimi-code/config.toml`.
25
+ */
26
+ inject(): Promise<HookInjectionResult>;
27
+ /**
28
+ * Restore the original config from its CodeMie backup, if one exists.
29
+ */
30
+ restore(): Promise<HookInjectionResult>;
31
+ private loadTomlModule;
32
+ private backupConfig;
33
+ }
34
+ //# sourceMappingURL=kimi.hook-config-injector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.hook-config-injector.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.hook-config-injector.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAOH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAiBD,eAAO,MAAM,cAAc,mDAAmD,CAAC;AAY/E;;GAEG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA4F5C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC;YAqB/B,cAAc;YAUd,YAAY;CAY3B"}
@@ -0,0 +1,158 @@
1
+ // src/agents/plugins/kimi/kimi.hook-config-injector.ts
2
+ /**
3
+ * Idempotent injector for CodeMie lifecycle hooks into Kimi's global config.
4
+ *
5
+ * Kimi Code supports lifecycle hooks in `~/.kimi-code/config.toml` under
6
+ * `[[hooks]]` entries. This component registers the hooks CodeMie needs to
7
+ * observe and react to Kimi sessions while leaving user-managed configuration
8
+ * intact.
9
+ */
10
+ import { access, copyFile, readFile, writeFile } from 'fs/promises';
11
+ import { logger } from '../../../utils/logger.js';
12
+ import { ConfigurationError, getErrorMessage } from '../../../utils/errors.js';
13
+ import { getKimiConfigPath } from './kimi.paths.js';
14
+ /**
15
+ * Events CodeMie subscribes to in Kimi Code, mapped to their hook timeouts.
16
+ */
17
+ const MANAGED_EVENTS = [
18
+ { event: 'SessionStart', timeout: 5 },
19
+ // SessionEnd must flush pending metrics to the CodeMie API. On a busy
20
+ // local/remote server this can take 10-15s, so keep the hook alive long
21
+ // enough for the sync to complete and session files to be renamed.
22
+ { event: 'SessionEnd', timeout: 60 },
23
+ { event: 'UserPromptSubmit', timeout: 5 },
24
+ { event: 'Stop', timeout: 5 },
25
+ { event: 'SubagentStop', timeout: 5 },
26
+ { event: 'PreCompact', timeout: 5 },
27
+ ];
28
+ export const MANAGED_MARKER = '# CodeMie-managed hooks - do not edit manually';
29
+ const COMMAND = 'codemie hook';
30
+ /**
31
+ * Injects and restores CodeMie lifecycle hooks in Kimi's config.toml.
32
+ */
33
+ export class KimiHookConfigInjector {
34
+ /**
35
+ * Idempotently inject CodeMie hooks into `~/.kimi-code/config.toml`.
36
+ */
37
+ async inject() {
38
+ const configPath = getKimiConfigPath();
39
+ try {
40
+ const toml = await this.loadTomlModule();
41
+ const configExists = await access(configPath).then(() => true).catch(() => false);
42
+ let created = false;
43
+ let existingContent;
44
+ if (!configExists) {
45
+ created = true;
46
+ }
47
+ else {
48
+ existingContent = await readFile(configPath, 'utf-8');
49
+ }
50
+ const parsedConfig = existingContent !== undefined
51
+ ? toml.parse(existingContent)
52
+ : {};
53
+ if (!Array.isArray(parsedConfig.hooks)) {
54
+ parsedConfig.hooks = [];
55
+ }
56
+ // If CodeMie-managed hooks are already present, update their timeouts
57
+ // when they differ instead of appending duplicates.
58
+ const managedEventTimeouts = new Map(MANAGED_EVENTS.map(e => [e.event, e.timeout]));
59
+ let updatedExisting = false;
60
+ for (const hook of parsedConfig.hooks) {
61
+ if (typeof hook === 'object' &&
62
+ hook !== null &&
63
+ hook.command === COMMAND &&
64
+ typeof hook.event === 'string' &&
65
+ managedEventTimeouts.has(hook.event)) {
66
+ const expectedTimeout = managedEventTimeouts.get(hook.event);
67
+ if (hook.timeout !== expectedTimeout) {
68
+ hook.timeout = expectedTimeout;
69
+ updatedExisting = true;
70
+ }
71
+ }
72
+ }
73
+ if (updatedExisting) {
74
+ await this.backupConfig(configPath);
75
+ const serialized = toml.stringify(parsedConfig);
76
+ const contentWithMarker = `${MANAGED_MARKER}\n${serialized}`;
77
+ await writeFile(configPath, contentWithMarker, 'utf-8');
78
+ logger.info('Updated CodeMie-managed hook timeouts in Kimi config.', { configPath });
79
+ return { success: true, created: false, configPath };
80
+ }
81
+ // Already injected and up to date
82
+ if (existingContent?.includes(MANAGED_MARKER)) {
83
+ logger.info('Kimi config already contains CodeMie-managed hooks; skipping injection.', {
84
+ configPath,
85
+ });
86
+ return { success: true, created: false, configPath };
87
+ }
88
+ for (const { event, timeout } of MANAGED_EVENTS) {
89
+ parsedConfig.hooks.push({
90
+ event,
91
+ command: COMMAND,
92
+ timeout,
93
+ });
94
+ }
95
+ if (!created) {
96
+ await this.backupConfig(configPath);
97
+ }
98
+ const serialized = toml.stringify(parsedConfig);
99
+ const contentWithMarker = `${MANAGED_MARKER}\n${serialized}`;
100
+ await writeFile(configPath, contentWithMarker, 'utf-8');
101
+ if (created) {
102
+ logger.info('Created Kimi config with CodeMie-managed hooks.', { configPath });
103
+ }
104
+ else {
105
+ logger.info('Injected CodeMie-managed hooks into existing Kimi config.', { configPath });
106
+ }
107
+ return { success: true, created, configPath };
108
+ }
109
+ catch (error) {
110
+ const message = getErrorMessage(error);
111
+ logger.error('Failed to inject CodeMie hooks into Kimi config.', error);
112
+ return { success: false, created: false, configPath, error: message };
113
+ }
114
+ }
115
+ /**
116
+ * Restore the original config from its CodeMie backup, if one exists.
117
+ */
118
+ async restore() {
119
+ const configPath = getKimiConfigPath();
120
+ const backupPath = `${configPath}.codemie-backup`;
121
+ const backupExists = await access(backupPath).then(() => true).catch(() => false);
122
+ if (!backupExists) {
123
+ logger.info('No Kimi config backup found; nothing to restore.', { configPath });
124
+ return { success: true, created: false, configPath };
125
+ }
126
+ try {
127
+ await copyFile(backupPath, configPath);
128
+ logger.info('Restored Kimi config from CodeMie backup.', { configPath, backupPath });
129
+ return { success: true, created: false, configPath };
130
+ }
131
+ catch (error) {
132
+ const message = getErrorMessage(error);
133
+ logger.error('Failed to restore Kimi config from CodeMie backup.', error);
134
+ return { success: false, created: false, configPath, error: message };
135
+ }
136
+ }
137
+ async loadTomlModule() {
138
+ try {
139
+ return await import('@iarna/toml');
140
+ }
141
+ catch (error) {
142
+ throw new ConfigurationError(`Unable to load @iarna/toml. Run "npm install @iarna/toml" to enable Kimi hook injection. ${getErrorMessage(error)}`);
143
+ }
144
+ }
145
+ async backupConfig(configPath) {
146
+ const backupPath = `${configPath}.codemie-backup`;
147
+ const backupExists = await access(backupPath).then(() => true).catch(() => false);
148
+ if (backupExists) {
149
+ logger.debug('Kimi config backup already exists; skipping backup creation.', {
150
+ configPath,
151
+ backupPath,
152
+ });
153
+ return;
154
+ }
155
+ await copyFile(configPath, backupPath);
156
+ }
157
+ }
158
+ //# sourceMappingURL=kimi.hook-config-injector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.hook-config-injector.js","sourceRoot":"","sources":["../../../../src/agents/plugins/kimi/kimi.hook-config-injector.ts"],"names":[],"mappings":"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"}
@@ -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":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAalD,MAAM,2BAA2B,GAAa;IAC5C,YAAY;IACZ,SAAS;IACT,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,OAAO;IACP,WAAW;IACX,QAAQ;IACR,UAAU;IACV,OAAO;CACR,CAAC;AAEF,MAAM,8BAA8B,GAAa;IAC/C,OAAO;IACP,WAAW;IACX,aAAa;CACd,CAAC;AAEF,SAAS,UAAU,CAAC,KAAe;IACjC,MAAM,UAAU,GAAG;QACjB,KAAK,CAAC,eAAe;QACrB,KAAK,CAAC,SAAS;QACf,KAAK,CAAC,KAAK;KACZ,CAAC;IACF,MAAM,oBAAoB,GAAG,UAAU,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAEpF,OAAO,aAAa,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,aAAa,CAAC,KAAe;IACpC,OAAO;QACL,KAAK,CAAC,eAAe;QACrB,KAAK,CAAC,SAAS;QACf,KAAK,CAAC,KAAK;QACX,KAAK,CAAC,QAAQ;KACf,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAA6B;IACrE,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACvF,OAAO,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAe;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAEjC,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAEtB,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAE7E,MAAM,KAAK,GAAG,OAAO,IAAI,YAAY,CAAC;IACtC,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,CAAC;QACV,KAAK,EAAE,CAAC,CAAC,CAAC;QACV,KAAK,EAAE,CAAC,CAAC,CAAC;KACX,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,SAAS,CAAC,KAAe;IAChC,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,kBAAkB,CAAC,sDAAsD,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,iBAAiB,GAAG,iCAAiC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,EAAE,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3C,OAAO;QACL,KAAK;QACL,EAAE;QACF,KAAK,EAAE;YACL,iBAAiB;YACjB,OAAO;YACP,GAAG,uBAAuB,CAAC,UAAU,CAAC;YACtC,SAAS;YACT,cAAc;YACd,YAAY;SACb;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,CAAkB,EAAE,CAAkB;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,GAAsB;IAC7D,MAAM,QAAQ,GAAG,GAAG,CAAC,iBAAiB,CAAC;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC;IAErC,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC;IACnC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,kBAAkB,CAC1B,iCAAiC,UAAU,sCAAsC,UAAU,EAAE,CAC9F,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO,qBAAqB,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAsB;IAC3D,MAAM,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC;IAEvC,IAAI,SAAS,GAAe,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,yBAAyB,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,MAAM,eAAe,GAAG,YAAY,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,mFAAmF,EAAE;gBAChG,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;YACH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAChF,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,SAAS;SAC3B,MAAM,CAAC,qBAAqB,CAAC;SAC7B,GAAG,CAAC,SAAS,CAAC;SACd,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAE7B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,yBAAyB,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,MAAM,eAAe,GAAG,YAAY,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,yFAAyF,CAAC,CAAC;YACxG,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAChF,CAAC;QAED,MAAM,IAAI,kBAAkB,CAC1B,uDAAuD;YACvD,wEAAwE,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzC,IAAI,YAAY,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CACT,uBAAuB,aAAa,sCAAsC,YAAY,EAAE,CACzF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,aAAa;QACb,eAAe,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAAa,EAAE,eAAyB;IACrF,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,kBAAkB,CAC1B,UAAU,KAAK,yCAAyC;YACxD,4BAA4B,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CACvG,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,kBAAkB,CAC1B,UAAU,KAAK,kDAAkD;YACjE,qBAAqB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClD,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -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"}