@tickernelz/paperclip-pro-adapter-kimi-local 2026.925.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 (86) hide show
  1. package/LICENSE +22 -0
  2. package/dist/cli/format-event.d.ts +2 -0
  3. package/dist/cli/format-event.d.ts.map +1 -0
  4. package/dist/cli/format-event.js +95 -0
  5. package/dist/cli/format-event.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +2 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/index.d.ts +30 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +82 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/server/acp.d.ts +19 -0
  15. package/dist/server/acp.d.ts.map +1 -0
  16. package/dist/server/acp.js +316 -0
  17. package/dist/server/acp.js.map +1 -0
  18. package/dist/server/acp.test.d.ts +2 -0
  19. package/dist/server/acp.test.d.ts.map +1 -0
  20. package/dist/server/acp.test.js +57 -0
  21. package/dist/server/acp.test.js.map +1 -0
  22. package/dist/server/engine-availability.test.d.ts +2 -0
  23. package/dist/server/engine-availability.test.d.ts.map +1 -0
  24. package/dist/server/engine-availability.test.js +41 -0
  25. package/dist/server/engine-availability.test.js.map +1 -0
  26. package/dist/server/execute.acp-failure.test.d.ts +2 -0
  27. package/dist/server/execute.acp-failure.test.d.ts.map +1 -0
  28. package/dist/server/execute.acp-failure.test.js +22 -0
  29. package/dist/server/execute.acp-failure.test.js.map +1 -0
  30. package/dist/server/execute.d.ts +3 -0
  31. package/dist/server/execute.d.ts.map +1 -0
  32. package/dist/server/execute.js +630 -0
  33. package/dist/server/execute.js.map +1 -0
  34. package/dist/server/execute.test.d.ts +2 -0
  35. package/dist/server/execute.test.d.ts.map +1 -0
  36. package/dist/server/execute.test.js +354 -0
  37. package/dist/server/execute.test.js.map +1 -0
  38. package/dist/server/index.d.ts +8 -0
  39. package/dist/server/index.d.ts.map +1 -0
  40. package/dist/server/index.js +66 -0
  41. package/dist/server/index.js.map +1 -0
  42. package/dist/server/parse.d.ts +66 -0
  43. package/dist/server/parse.d.ts.map +1 -0
  44. package/dist/server/parse.js +194 -0
  45. package/dist/server/parse.js.map +1 -0
  46. package/dist/server/parse.test.d.ts +2 -0
  47. package/dist/server/parse.test.d.ts.map +1 -0
  48. package/dist/server/parse.test.js +155 -0
  49. package/dist/server/parse.test.js.map +1 -0
  50. package/dist/server/skills.d.ts +4 -0
  51. package/dist/server/skills.d.ts.map +1 -0
  52. package/dist/server/skills.js +73 -0
  53. package/dist/server/skills.js.map +1 -0
  54. package/dist/server/test.d.ts +3 -0
  55. package/dist/server/test.d.ts.map +1 -0
  56. package/dist/server/test.js +306 -0
  57. package/dist/server/test.js.map +1 -0
  58. package/dist/server/test.test.d.ts +2 -0
  59. package/dist/server/test.test.d.ts.map +1 -0
  60. package/dist/server/test.test.js +126 -0
  61. package/dist/server/test.test.js.map +1 -0
  62. package/dist/server/utils.d.ts +2 -0
  63. package/dist/server/utils.d.ts.map +1 -0
  64. package/dist/server/utils.js +7 -0
  65. package/dist/server/utils.js.map +1 -0
  66. package/dist/ui/build-config.d.ts +3 -0
  67. package/dist/ui/build-config.d.ts.map +1 -0
  68. package/dist/ui/build-config.js +79 -0
  69. package/dist/ui/build-config.js.map +1 -0
  70. package/dist/ui/build-config.test.d.ts +2 -0
  71. package/dist/ui/build-config.test.d.ts.map +1 -0
  72. package/dist/ui/build-config.test.js +73 -0
  73. package/dist/ui/build-config.test.js.map +1 -0
  74. package/dist/ui/index.d.ts +3 -0
  75. package/dist/ui/index.d.ts.map +1 -0
  76. package/dist/ui/index.js +3 -0
  77. package/dist/ui/index.js.map +1 -0
  78. package/dist/ui/parse-stdout.d.ts +9 -0
  79. package/dist/ui/parse-stdout.d.ts.map +1 -0
  80. package/dist/ui/parse-stdout.js +110 -0
  81. package/dist/ui/parse-stdout.js.map +1 -0
  82. package/dist/ui/parse-stdout.test.d.ts +2 -0
  83. package/dist/ui/parse-stdout.test.d.ts.map +1 -0
  84. package/dist/ui/parse-stdout.test.js +84 -0
  85. package/dist/ui/parse-stdout.test.js.map +1 -0
  86. package/package.json +57 -0
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Paperclip AI
4
+ Copyright (c) 2026 Zhafron Adani Kautsar (paperclip-pro fork modifications)
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
@@ -0,0 +1,2 @@
1
+ export declare function printKimiStreamEvent(raw: string, _debug: boolean): void;
2
+ //# sourceMappingURL=format-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-event.d.ts","sourceRoot":"","sources":["../../src/cli/format-event.ts"],"names":[],"mappings":"AAsBA,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAuEvE"}
@@ -0,0 +1,95 @@
1
+ import pc from "picocolors";
2
+ import { printAcpxStreamEvent } from "@tickernelz/paperclip-pro-adapter-utils/acpx-engine/cli";
3
+ function asRecord(value) {
4
+ if (typeof value !== "object" || value === null || Array.isArray(value))
5
+ return null;
6
+ return value;
7
+ }
8
+ function asString(value, fallback = "") {
9
+ return typeof value === "string" ? value : fallback;
10
+ }
11
+ function stringifyUnknown(value) {
12
+ if (typeof value === "string")
13
+ return value;
14
+ if (value === null || value === undefined)
15
+ return "";
16
+ try {
17
+ return JSON.stringify(value, null, 2);
18
+ }
19
+ catch {
20
+ return String(value);
21
+ }
22
+ }
23
+ export function printKimiStreamEvent(raw, _debug) {
24
+ const line = raw.trim();
25
+ if (!line)
26
+ return;
27
+ let parsed = null;
28
+ try {
29
+ parsed = JSON.parse(line);
30
+ }
31
+ catch {
32
+ console.log(line);
33
+ return;
34
+ }
35
+ if (asString(parsed.type).startsWith("acpx.")) {
36
+ printAcpxStreamEvent(line, _debug);
37
+ return;
38
+ }
39
+ const role = asString(parsed.role).trim().toLowerCase();
40
+ if (role === "assistant") {
41
+ const content = asString(parsed.content).trim();
42
+ if (content)
43
+ console.log(pc.green(`assistant: ${content}`));
44
+ const toolCalls = Array.isArray(parsed.tool_calls) ? parsed.tool_calls : [];
45
+ for (const callRaw of toolCalls) {
46
+ const call = asRecord(callRaw);
47
+ if (!call)
48
+ continue;
49
+ const fn = asRecord(call.function);
50
+ const name = asString(fn?.name, asString(call.name, "tool")).trim() || "tool";
51
+ console.log(pc.yellow(`tool_call: ${name}`));
52
+ const argsRaw = fn?.arguments ?? call.arguments;
53
+ if (argsRaw === undefined)
54
+ continue;
55
+ if (typeof argsRaw === "string") {
56
+ try {
57
+ console.log(pc.gray(stringifyUnknown(JSON.parse(argsRaw))));
58
+ }
59
+ catch {
60
+ console.log(pc.gray(argsRaw));
61
+ }
62
+ }
63
+ else {
64
+ console.log(pc.gray(stringifyUnknown(argsRaw)));
65
+ }
66
+ }
67
+ return;
68
+ }
69
+ if (role === "tool") {
70
+ console.log(pc.cyan("tool_result"));
71
+ const content = asString(parsed.content) || stringifyUnknown(parsed.content);
72
+ if (content)
73
+ console.log(pc.gray(content));
74
+ return;
75
+ }
76
+ if (role === "meta") {
77
+ const type = asString(parsed.type).trim();
78
+ if (type === "session.resume_hint") {
79
+ const sessionId = asString(parsed.session_id).trim();
80
+ if (sessionId)
81
+ console.log(pc.blue(`Kimi session: ${sessionId}`));
82
+ }
83
+ return;
84
+ }
85
+ if (role === "error" || asString(parsed.type).trim().toLowerCase() === "error") {
86
+ const text = asString(parsed.content) ||
87
+ asString(parsed.message) ||
88
+ asString(parsed.error) ||
89
+ "Kimi error";
90
+ console.log(pc.red(`error: ${text}`));
91
+ return;
92
+ }
93
+ console.log(line);
94
+ }
95
+ //# sourceMappingURL=format-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-event.js","sourceRoot":"","sources":["../../src/cli/format-event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { printKimiStreamEvent } from "./format-event.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { printKimiStreamEvent } from "./format-event.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,30 @@
1
+ export declare const type = "kimi_local";
2
+ export declare const label = "Kimi Code CLI (local)";
3
+ export declare const SANDBOX_INSTALL_COMMAND: string;
4
+ export declare const DEFAULT_KIMI_LOCAL_MODEL = "kimi-code/kimi-for-coding";
5
+ export declare const models: {
6
+ id: string;
7
+ label: string;
8
+ }[];
9
+ /**
10
+ * Kimi thinking-effort tiers. Kimi's catalog exposes these via each model's
11
+ * `support_efforts`; note there is no "medium" tier (Kimi collapses it onto
12
+ * "high"). Sending an effort a model does not support makes the provider
13
+ * reject the request, so effort is only forwarded for effort-capable models.
14
+ */
15
+ export declare const KIMI_SUPPORTED_EFFORTS: readonly ["low", "high", "max"];
16
+ export type KimiEffort = (typeof KIMI_SUPPORTED_EFFORTS)[number];
17
+ /**
18
+ * Models that advertise `support_efforts` in Kimi's model catalog. Keep in
19
+ * sync with `models` above; only these accept KIMI_MODEL_THINKING_EFFORT.
20
+ */
21
+ export declare const EFFORT_CAPABLE_MODELS: Set<string>;
22
+ export declare function modelSupportsEffort(model: string): boolean;
23
+ /**
24
+ * Map a Paperclip effort value onto Kimi's supported thinking-effort set.
25
+ * Returns null for values Kimi cannot honor so the caller leaves Kimi's own
26
+ * default_effort in place instead of forwarding an invalid tier.
27
+ */
28
+ export declare function resolveKimiThinkingEffort(effort: string): KimiEffort | null;
29
+ export declare const agentConfigurationDoc = "# kimi_local agent configuration\n\nAdapter: kimi_local\n\nUse when:\n- You want Paperclip to run the Kimi Code CLI (kimi) locally on the host machine\n- You want Kimi sessions resumed across heartbeats with -r\n- You want Paperclip skills injected into the Kimi skills home without polluting the agent workspace\n\nDon't use when:\n- You need webhook-style external invocation (use http or openclaw_gateway)\n- You only need a one-shot script without an AI coding agent loop (use process)\n- Kimi Code CLI is not installed on the machine that runs Paperclip\n\nCore fields:\n- cwd (string, optional): default absolute working directory fallback for the agent process (created if missing when possible)\n- instructionsFilePath (string, optional): absolute path to a markdown instructions file prepended to the run prompt. Sibling files in the same directory (HEARTBEAT.md, SOUL.md, TOOLS.md) are made readable via --add-dir for local runs.\n- promptTemplate (string, optional): run prompt template\n- model (string, optional): Kimi model alias (provider/model). Defaults to kimi-code/kimi-for-coding.\n- effort (string, optional): thinking effort (low | medium | high | max). CLI lane only (engine=cli): forwarded as KIMI_MODEL_THINKING_EFFORT for effort-capable models (K2.8 Preview, K3, and K3 256K); \"medium\" maps to \"high\" since Kimi has no medium tier. Ignored for models without support_efforts, and NOT forwarded on the default ACP engine lane (Kimi ACP exposes a separate \"thinking\" option that is not wired yet) \u2014 pin engine=cli when effort control matters.\n- command (string, optional): defaults to \"kimi\"\n- extraArgs (string[], optional): additional CLI args\n- env (object, optional): KEY=VALUE environment variables\n\nOperational fields:\n- timeoutSec (number, optional): run timeout in seconds\n- graceSec (number, optional): SIGTERM grace period in seconds\n\nNotes:\n- The adapter defaults to the ACP engine (`kimi acp`) and fails with a setup error when ACP prerequisites are unavailable. Set `engine` to `acp` or `cli` to require a specific lane.\n- CLI-lane runs use `kimi -p` with `--output-format stream-json` for non-interactive headless execution; the prompt is passed as an argument, not stdin.\n- The adapter sets a headless-safe environment (CI=1, NO_COLOR=1, KIMI_CODE_NO_AUTO_UPDATE=1) so unattended runs never wait on interactive prompts or update preflight.\n- Sessions resume with `-r <session_id>` when the stored session cwd matches the current cwd; the session id is captured from the trailing session.resume_hint meta event.\n- Desired Paperclip skills are delivered to local runs via `--skills-dir` pointing at a per-run managed directory, so skills load reliably without polluting the user's `~/.kimi-code/skills` home. Remote runs sync skills into the remote skills home.\n- Authentication uses `kimi login` (OAuth device flow), providers configured in Kimi's config.toml, or the KIMI_MODEL_NAME + KIMI_MODEL_API_KEY environment pair.\n";
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,eAAe,CAAC;AACjC,eAAO,MAAM,KAAK,0BAA0B,CAAC;AAE7C,eAAO,MAAM,uBAAuB,QAA0D,CAAC;AAE/F,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AAEpE,eAAO,MAAM,MAAM;;;GAKlB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,YAAI,KAAK,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AACtE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,qBAAqB,aAIhC,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAO3E;AAED,eAAO,MAAM,qBAAqB,m7FAmCjC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,82 @@
1
+ import { buildSandboxNpmInstallCommand } from "@tickernelz/paperclip-pro-adapter-utils";
2
+ export const type = "kimi_local";
3
+ export const label = "Kimi Code CLI (local)";
4
+ export const SANDBOX_INSTALL_COMMAND = buildSandboxNpmInstallCommand("@moonshot-ai/kimi-code");
5
+ export const DEFAULT_KIMI_LOCAL_MODEL = "kimi-code/kimi-for-coding";
6
+ export const models = [
7
+ { id: DEFAULT_KIMI_LOCAL_MODEL, label: "K2.8 Preview" },
8
+ { id: "kimi-code/kimi-for-coding-highspeed", label: "K2.7 Coding Highspeed" },
9
+ { id: "kimi-code/k3", label: "K3" },
10
+ { id: "kimi-code/k3-256k", label: "K3 (256K)" },
11
+ ];
12
+ /**
13
+ * Kimi thinking-effort tiers. Kimi's catalog exposes these via each model's
14
+ * `support_efforts`; note there is no "medium" tier (Kimi collapses it onto
15
+ * "high"). Sending an effort a model does not support makes the provider
16
+ * reject the request, so effort is only forwarded for effort-capable models.
17
+ */
18
+ export const KIMI_SUPPORTED_EFFORTS = ["low", "high", "max"];
19
+ /**
20
+ * Models that advertise `support_efforts` in Kimi's model catalog. Keep in
21
+ * sync with `models` above; only these accept KIMI_MODEL_THINKING_EFFORT.
22
+ */
23
+ export const EFFORT_CAPABLE_MODELS = new Set([
24
+ DEFAULT_KIMI_LOCAL_MODEL,
25
+ "kimi-code/k3",
26
+ "kimi-code/k3-256k",
27
+ ]);
28
+ export function modelSupportsEffort(model) {
29
+ return EFFORT_CAPABLE_MODELS.has(model.trim());
30
+ }
31
+ /**
32
+ * Map a Paperclip effort value onto Kimi's supported thinking-effort set.
33
+ * Returns null for values Kimi cannot honor so the caller leaves Kimi's own
34
+ * default_effort in place instead of forwarding an invalid tier.
35
+ */
36
+ export function resolveKimiThinkingEffort(effort) {
37
+ const normalized = effort.trim().toLowerCase();
38
+ if (!normalized)
39
+ return null;
40
+ if (normalized === "medium")
41
+ return "high";
42
+ return KIMI_SUPPORTED_EFFORTS.includes(normalized)
43
+ ? normalized
44
+ : null;
45
+ }
46
+ export const agentConfigurationDoc = `# kimi_local agent configuration
47
+
48
+ Adapter: kimi_local
49
+
50
+ Use when:
51
+ - You want Paperclip to run the Kimi Code CLI (kimi) locally on the host machine
52
+ - You want Kimi sessions resumed across heartbeats with -r
53
+ - You want Paperclip skills injected into the Kimi skills home without polluting the agent workspace
54
+
55
+ Don't use when:
56
+ - You need webhook-style external invocation (use http or openclaw_gateway)
57
+ - You only need a one-shot script without an AI coding agent loop (use process)
58
+ - Kimi Code CLI is not installed on the machine that runs Paperclip
59
+
60
+ Core fields:
61
+ - cwd (string, optional): default absolute working directory fallback for the agent process (created if missing when possible)
62
+ - instructionsFilePath (string, optional): absolute path to a markdown instructions file prepended to the run prompt. Sibling files in the same directory (HEARTBEAT.md, SOUL.md, TOOLS.md) are made readable via --add-dir for local runs.
63
+ - promptTemplate (string, optional): run prompt template
64
+ - model (string, optional): Kimi model alias (provider/model). Defaults to kimi-code/kimi-for-coding.
65
+ - effort (string, optional): thinking effort (low | medium | high | max). CLI lane only (engine=cli): forwarded as KIMI_MODEL_THINKING_EFFORT for effort-capable models (K2.8 Preview, K3, and K3 256K); "medium" maps to "high" since Kimi has no medium tier. Ignored for models without support_efforts, and NOT forwarded on the default ACP engine lane (Kimi ACP exposes a separate "thinking" option that is not wired yet) — pin engine=cli when effort control matters.
66
+ - command (string, optional): defaults to "kimi"
67
+ - extraArgs (string[], optional): additional CLI args
68
+ - env (object, optional): KEY=VALUE environment variables
69
+
70
+ Operational fields:
71
+ - timeoutSec (number, optional): run timeout in seconds
72
+ - graceSec (number, optional): SIGTERM grace period in seconds
73
+
74
+ Notes:
75
+ - The adapter defaults to the ACP engine (\`kimi acp\`) and fails with a setup error when ACP prerequisites are unavailable. Set \`engine\` to \`acp\` or \`cli\` to require a specific lane.
76
+ - CLI-lane runs use \`kimi -p\` with \`--output-format stream-json\` for non-interactive headless execution; the prompt is passed as an argument, not stdin.
77
+ - The adapter sets a headless-safe environment (CI=1, NO_COLOR=1, KIMI_CODE_NO_AUTO_UPDATE=1) so unattended runs never wait on interactive prompts or update preflight.
78
+ - Sessions resume with \`-r <session_id>\` when the stored session cwd matches the current cwd; the session id is captured from the trailing session.resume_hint meta event.
79
+ - Desired Paperclip skills are delivered to local runs via \`--skills-dir\` pointing at a per-run managed directory, so skills load reliably without polluting the user's \`~/.kimi-code/skills\` home. Remote runs sync skills into the remote skills home.
80
+ - Authentication uses \`kimi login\` (OAuth device flow), providers configured in Kimi's config.toml, or the KIMI_MODEL_NAME + KIMI_MODEL_API_KEY environment pair.
81
+ `;
82
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AAExF,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAC;AACjC,MAAM,CAAC,MAAM,KAAK,GAAG,uBAAuB,CAAC;AAE7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,6BAA6B,CAAC,wBAAwB,CAAC,CAAC;AAE/F,MAAM,CAAC,MAAM,wBAAwB,GAAG,2BAA2B,CAAC;AAEpE,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,EAAE,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,cAAc,EAAE;IACvD,EAAE,EAAE,EAAE,qCAAqC,EAAE,KAAK,EAAE,uBAAuB,EAAE;IAC7E,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE;IACnC,EAAE,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,WAAW,EAAE;CAChD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AAGtE;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAS;IACnD,wBAAwB;IACxB,cAAc;IACd,mBAAmB;CACpB,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC3C,OAAQ,sBAA4C,CAAC,QAAQ,CAAC,UAAU,CAAC;QACvE,CAAC,CAAE,UAAyB;QAC5B,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCpC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { AdapterEnvironmentTestContext, AdapterEnvironmentTestResult, AdapterExecutionContext, AdapterExecutionResult } from "@tickernelz/paperclip-pro-adapter-utils";
2
+ import type { AcpxEngineExecutorOptions } from "@tickernelz/paperclip-pro-adapter-utils/acpx-engine/execute";
3
+ export type KimiExecutionEngine = "cli" | "acp";
4
+ export interface KimiEngineSelection {
5
+ engine: KimiExecutionEngine;
6
+ explicit: boolean;
7
+ unavailableReason?: string;
8
+ }
9
+ type KimiEngineResolutionInput = Pick<AdapterExecutionContext, "config"> & Partial<Pick<AdapterExecutionContext, "executionTarget" | "executionTransport">>;
10
+ type KimiAcpExecutorOptions = Omit<AcpxEngineExecutorOptions, "adapterType" | "moduleDir" | "packageRootDir">;
11
+ type KimiAcpExecutor = (ctx: AdapterExecutionContext) => Promise<AdapterExecutionResult>;
12
+ export declare function resolveKimiExecutionEngine(config: Record<string, unknown>): KimiEngineSelection;
13
+ export declare function resolveKimiExecutionEngineForRun(input: KimiEngineResolutionInput): Promise<KimiEngineSelection>;
14
+ export declare function buildKimiAcpConfig(config: Record<string, unknown>): Record<string, unknown>;
15
+ export declare function createKimiAcpExecutor(options?: KimiAcpExecutorOptions): KimiAcpExecutor;
16
+ export declare function nodeVersionMeetsKimiAcpMinimum(version?: string): boolean;
17
+ export declare function testKimiAcpEnvironment(ctx: AdapterEnvironmentTestContext): Promise<AdapterEnvironmentTestResult>;
18
+ export {};
19
+ //# sourceMappingURL=acp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/server/acp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,6BAA6B,EAC7B,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,yCAAyC,CAAC;AAYjD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6DAA6D,CAAC;AAY7G,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,KAAK,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,KAAK,yBAAyB,GAC5B,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,iBAAiB,GAAG,oBAAoB,CAAC,CAAC,CAAC;AAEnF,KAAK,sBAAsB,GAAG,IAAI,CAChC,yBAAyB,EACzB,aAAa,GAAG,WAAW,GAAG,gBAAgB,CAC/C,CAAC;AAEF,KAAK,eAAe,GAAG,CAAC,GAAG,EAAE,uBAAuB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;AASzF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,mBAAmB,CAE/F;AAED,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,mBAAmB,CAAC,CAW9B;AAWD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6C3F;AAWD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAc3F;AAQD,wBAAgB,8BAA8B,CAAC,OAAO,SAAkB,GAAG,OAAO,CAMjF;AA2GD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,6BAA6B,GACjC,OAAO,CAAC,4BAA4B,CAAC,CA+GvC"}
@@ -0,0 +1,316 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { ensureAdapterExecutionTargetCommandResolvable, readAdapterExecutionTarget, resolveAdapterExecutionTargetCwd, } from "@tickernelz/paperclip-pro-adapter-utils/execution-target";
5
+ import { DEFAULT_ACP_ENGINE_MODE, DEFAULT_ACP_ENGINE_NON_INTERACTIVE_PERMISSIONS, DEFAULT_ACP_ENGINE_PERMISSION_MODE, DEFAULT_ACP_ENGINE_WARM_HANDLE_IDLE_MS, } from "@tickernelz/paperclip-pro-adapter-utils/acpx-engine/constants";
6
+ import { asNumber, asString, parseObject, } from "@tickernelz/paperclip-pro-adapter-utils/server-utils";
7
+ import { DEFAULT_KIMI_LOCAL_MODEL } from "../index.js";
8
+ const moduleDir = path.dirname(fileURLToPath(import.meta.url));
9
+ const packageRootDir = path.resolve(moduleDir, "../..");
10
+ const MIN_ACP_NODE_VERSION = "20.0.0";
11
+ function normalizeEngine(value) {
12
+ const raw = typeof value === "string" ? value.trim().toLowerCase() : "";
13
+ if (raw === "acp")
14
+ return { engine: "acp", explicit: true };
15
+ if (raw === "cli")
16
+ return { engine: "cli", explicit: true };
17
+ return { engine: "acp", explicit: false };
18
+ }
19
+ export function resolveKimiExecutionEngine(config) {
20
+ return normalizeEngine(config.engine);
21
+ }
22
+ export async function resolveKimiExecutionEngineForRun(input) {
23
+ const selection = normalizeEngine(input.config.engine);
24
+ // Engine availability must never change the agent's execution or permission contract.
25
+ if (selection.engine === "cli")
26
+ return selection;
27
+ const unavailable = (reason) => ({
28
+ ...selection,
29
+ unavailableReason: `${reason} Repair the ACP setup, or explicitly set engine=cli to use the CLI engine.`,
30
+ });
31
+ const reason = await kimiAcpUnavailableReason(input);
32
+ return reason ? unavailable(reason) : selection;
33
+ }
34
+ function firstNonEmptyString(...values) {
35
+ for (const value of values) {
36
+ if (typeof value !== "string")
37
+ continue;
38
+ const trimmed = value.trim();
39
+ if (trimmed.length > 0)
40
+ return trimmed;
41
+ }
42
+ return undefined;
43
+ }
44
+ export function buildKimiAcpConfig(config) {
45
+ const configuredAgentCommand = firstNonEmptyString(config.agentCommand, config.acpAgentCommand);
46
+ const configuredKimiCommand = firstNonEmptyString(config.command);
47
+ const agentCommand = configuredAgentCommand ?? (configuredKimiCommand ? `${configuredKimiCommand} acp` : undefined);
48
+ const stateDir = firstNonEmptyString(config.stateDir, config.acpStateDir);
49
+ const mode = firstNonEmptyString(config.mode, config.acpMode) ?? DEFAULT_ACP_ENGINE_MODE;
50
+ const permissionMode = firstNonEmptyString(config.permissionMode, config.acpPermissionMode) ??
51
+ DEFAULT_ACP_ENGINE_PERMISSION_MODE;
52
+ const nonInteractivePermissions = firstNonEmptyString(config.nonInteractivePermissions, config.acpNonInteractivePermissions) ??
53
+ DEFAULT_ACP_ENGINE_NON_INTERACTIVE_PERMISSIONS;
54
+ const warmHandleIdleMs = config.warmHandleIdleMs ??
55
+ config.acpWarmHandleIdleMs ??
56
+ DEFAULT_ACP_ENGINE_WARM_HANDLE_IDLE_MS;
57
+ const next = {
58
+ ...config,
59
+ agent: "kimi",
60
+ mode,
61
+ permissionMode,
62
+ nonInteractivePermissions,
63
+ warmHandleIdleMs,
64
+ ...(agentCommand ? { agentCommand } : {}),
65
+ ...(stateDir ? { stateDir } : {}),
66
+ };
67
+ const model = asString(next.model, "").trim();
68
+ if (!model || model === DEFAULT_KIMI_LOCAL_MODEL)
69
+ delete next.model;
70
+ // Kimi's ACP backend advertises a `thinking` config option, not `effort`.
71
+ // The shared acpx engine only knows the `effort` control key, which Kimi
72
+ // rejects with ACP_BACKEND_UNSUPPORTED_CONTROL and fails the session. Drop
73
+ // the CLI-lane effort fields so the ACP session is not configured with an
74
+ // unsupported control; thinking-effort control remains available on the CLI
75
+ // lane via KIMI_MODEL_THINKING_EFFORT.
76
+ delete next.effort;
77
+ delete next.thinkingEffort;
78
+ // Kimi streams ~16k text deltas and one tool_call update per argument token
79
+ // per run (~50x a comparable Claude run). Opt into the shared engine's
80
+ // verbose-backend handling: the auto-posted run summary becomes the last
81
+ // output segment instead of the full narration dump, and placeholder-titled
82
+ // in-progress tool updates are coalesced out of the run log.
83
+ next.summaryStrategy = "lastOutputSegment";
84
+ next.coalescePlaceholderToolUpdates = true;
85
+ return next;
86
+ }
87
+ function withKimiAcpDefaults(options) {
88
+ return {
89
+ ...options,
90
+ adapterType: "kimi_local",
91
+ moduleDir,
92
+ packageRootDir,
93
+ };
94
+ }
95
+ export function createKimiAcpExecutor(options = {}) {
96
+ let executor = null;
97
+ return async (ctx) => {
98
+ let currentExecutor = executor;
99
+ if (!currentExecutor) {
100
+ const { createAcpxEngineExecutor } = await import("@tickernelz/paperclip-pro-adapter-utils/acpx-engine/execute");
101
+ currentExecutor = createAcpxEngineExecutor(withKimiAcpDefaults(options));
102
+ executor = currentExecutor;
103
+ }
104
+ return currentExecutor({
105
+ ...ctx,
106
+ config: buildKimiAcpConfig(ctx.config),
107
+ });
108
+ };
109
+ }
110
+ function parseVersion(version) {
111
+ const match = version.match(/^v?(\d+)\.(\d+)\.(\d+)/);
112
+ if (!match)
113
+ return [0, 0, 0];
114
+ return [Number(match[1]), Number(match[2]), Number(match[3])];
115
+ }
116
+ export function nodeVersionMeetsKimiAcpMinimum(version = process.version) {
117
+ const [major, minor, patch] = parseVersion(version);
118
+ const [minMajor, minMinor, minPatch] = parseVersion(MIN_ACP_NODE_VERSION);
119
+ if (major !== minMajor)
120
+ return major > minMajor;
121
+ if (minor !== minMinor)
122
+ return minor > minMinor;
123
+ return patch >= minPatch;
124
+ }
125
+ async function pathExists(candidate) {
126
+ return fs.access(candidate).then(() => true).catch(() => false);
127
+ }
128
+ function hasPathSeparator(command) {
129
+ return command.includes("/") || command.includes("\\");
130
+ }
131
+ function firstShellToken(command) {
132
+ const trimmed = command.trim();
133
+ if (!trimmed)
134
+ return null;
135
+ if (trimmed.startsWith("'") || trimmed.startsWith("\""))
136
+ return null;
137
+ return trimmed.split(/\s+/, 1)[0] ?? null;
138
+ }
139
+ async function findCommandOnPath(binName, pathValue = process.env.PATH ?? "") {
140
+ for (const segment of pathValue.split(path.delimiter)) {
141
+ if (!segment)
142
+ continue;
143
+ const candidate = path.join(segment, binName);
144
+ if (await pathExists(candidate))
145
+ return candidate;
146
+ }
147
+ return null;
148
+ }
149
+ function resolveConfigPath(config) {
150
+ const envConfig = parseObject(config.env);
151
+ return typeof envConfig.PATH === "string" && envConfig.PATH.trim().length > 0
152
+ ? envConfig.PATH
153
+ : process.env.PATH ?? "";
154
+ }
155
+ async function commandIsResolvable(command, pathValue = process.env.PATH ?? "", input) {
156
+ const token = firstShellToken(command);
157
+ if (!token)
158
+ return true;
159
+ const target = readAdapterExecutionTarget({
160
+ executionTarget: input?.executionTarget,
161
+ legacyRemoteExecution: input?.executionTransport?.remoteExecution,
162
+ });
163
+ if (target?.kind === "remote") {
164
+ try {
165
+ await ensureAdapterExecutionTargetCommandResolvable(token, target, resolveAdapterExecutionTargetCwd(target, asString(input?.config.cwd, ""), process.cwd()), process.env);
166
+ return true;
167
+ }
168
+ catch {
169
+ return false;
170
+ }
171
+ }
172
+ if (path.isAbsolute(token) || hasPathSeparator(token))
173
+ return pathExists(token);
174
+ return (await findCommandOnPath(token, pathValue)) !== null;
175
+ }
176
+ function resolveKimiAcpCommand(config) {
177
+ const configured = firstNonEmptyString(config.agentCommand, config.acpAgentCommand);
178
+ if (configured)
179
+ return configured;
180
+ const kimiCommand = firstNonEmptyString(config.command) ?? "kimi";
181
+ return `${kimiCommand} acp`;
182
+ }
183
+ function sandboxTargetHasProcessSessionBridge(target) {
184
+ return target?.kind === "remote" && target.transport === "sandbox" && Boolean(target.runner);
185
+ }
186
+ async function kimiAcpUnavailableReason(input) {
187
+ const target = readAdapterExecutionTarget({
188
+ executionTarget: input.executionTarget,
189
+ legacyRemoteExecution: input.executionTransport?.remoteExecution,
190
+ });
191
+ if (target?.kind === "remote" && !sandboxTargetHasProcessSessionBridge(target)) {
192
+ if (target.transport === "sandbox") {
193
+ return "Kimi ACP requires a bidirectional remote process target; this sandbox exposes only one-shot command execution.";
194
+ }
195
+ return "Kimi ACP supports sandbox remote targets only; this run targets a non-sandbox remote environment.";
196
+ }
197
+ if (!nodeVersionMeetsKimiAcpMinimum()) {
198
+ return `Node ${process.version} (${process.execPath}) does not satisfy Kimi ACP's Node >=${MIN_ACP_NODE_VERSION} prerequisite.`;
199
+ }
200
+ const command = resolveKimiAcpCommand(input.config);
201
+ if (!(await commandIsResolvable(command, resolveConfigPath(input.config), input))) {
202
+ return `Kimi ACP command is not available: ${command}.`;
203
+ }
204
+ return null;
205
+ }
206
+ function summarizeStatus(checks) {
207
+ if (checks.some((check) => check.level === "error"))
208
+ return "fail";
209
+ if (checks.some((check) => check.level === "warn"))
210
+ return "warn";
211
+ return "pass";
212
+ }
213
+ function isNonEmpty(value) {
214
+ return typeof value === "string" && value.trim().length > 0;
215
+ }
216
+ export async function testKimiAcpEnvironment(ctx) {
217
+ const checks = [];
218
+ const config = parseObject(ctx.config);
219
+ const target = ctx.executionTarget ?? null;
220
+ const targetIsRemote = target?.kind === "remote";
221
+ checks.push({
222
+ code: "kimi_engine_selected",
223
+ level: "info",
224
+ message: "Execution engine selected: ACP.",
225
+ hint: "Set engine=cli to use the existing Kimi CLI lane.",
226
+ });
227
+ if (targetIsRemote) {
228
+ checks.push({
229
+ code: "kimi_acp_remote_target",
230
+ level: "info",
231
+ message: "Kimi ACP will run against the remote execution environment.",
232
+ hint: "Remote ACP requires a bidirectional process target such as SSH or Paperclip's sandbox process-session bridge.",
233
+ });
234
+ }
235
+ const cwd = asString(config.cwd, process.cwd());
236
+ try {
237
+ await fs.mkdir(cwd, { recursive: true });
238
+ checks.push({
239
+ code: "kimi_acp_cwd_valid",
240
+ level: "info",
241
+ message: `Working directory is valid: ${cwd}`,
242
+ });
243
+ }
244
+ catch (err) {
245
+ checks.push({
246
+ code: "kimi_acp_cwd_invalid",
247
+ level: "error",
248
+ message: err instanceof Error ? err.message : "Invalid working directory",
249
+ detail: cwd,
250
+ });
251
+ }
252
+ checks.push({
253
+ code: nodeVersionMeetsKimiAcpMinimum() ? "kimi_acp_node_supported" : "kimi_acp_node_unsupported",
254
+ level: nodeVersionMeetsKimiAcpMinimum() ? "info" : "error",
255
+ message: nodeVersionMeetsKimiAcpMinimum()
256
+ ? `Node ${process.version} satisfies ACP runtime requirements.`
257
+ : `Node ${process.version} (${process.execPath}) does not satisfy ACP runtime requirements.`,
258
+ hint: nodeVersionMeetsKimiAcpMinimum()
259
+ ? undefined
260
+ : `Run Kimi ACP with Node >=${MIN_ACP_NODE_VERSION} or switch engine=cli.`,
261
+ });
262
+ const command = resolveKimiAcpCommand(config);
263
+ const commandResolvable = await commandIsResolvable(command, resolveConfigPath(config), {
264
+ config,
265
+ executionTarget: ctx.executionTarget,
266
+ });
267
+ checks.push({
268
+ code: commandResolvable ? "kimi_acp_command_resolvable" : "kimi_acp_command_missing",
269
+ level: commandResolvable ? "info" : "error",
270
+ message: commandResolvable
271
+ ? `Kimi ACP command is executable: ${command}`
272
+ : `Kimi ACP command is not available: ${command}`,
273
+ hint: commandResolvable
274
+ ? undefined
275
+ : "Install the Kimi Code CLI with ACP support, or set agentCommand to a valid Kimi ACP server command.",
276
+ });
277
+ const envConfig = parseObject(config.env);
278
+ const considerHostEnv = !targetIsRemote;
279
+ const configModelName = envConfig.KIMI_MODEL_NAME;
280
+ const hostModelName = considerHostEnv ? process.env.KIMI_MODEL_NAME : undefined;
281
+ const configModelKey = envConfig.KIMI_MODEL_API_KEY;
282
+ const hostModelKey = considerHostEnv ? process.env.KIMI_MODEL_API_KEY : undefined;
283
+ if ((isNonEmpty(configModelName) && isNonEmpty(configModelKey)) ||
284
+ (isNonEmpty(hostModelName) && isNonEmpty(hostModelKey))) {
285
+ const source = isNonEmpty(configModelName) && isNonEmpty(configModelKey) ? "adapter config env" : "server environment";
286
+ checks.push({
287
+ code: "kimi_acp_credentials_detected",
288
+ level: "info",
289
+ message: "Kimi credentials are set for ACP authentication.",
290
+ detail: `KIMI_MODEL_NAME + KIMI_MODEL_API_KEY detected in ${source}.`,
291
+ });
292
+ }
293
+ else if (!targetIsRemote) {
294
+ checks.push({
295
+ code: "kimi_acp_credentials_not_detected",
296
+ level: "warn",
297
+ message: "No Kimi ACP credentials were detected.",
298
+ hint: "Run `kimi login` (OAuth) or set the KIMI_MODEL_NAME + KIMI_MODEL_API_KEY environment pair before starting a Kimi ACP agent.",
299
+ });
300
+ }
301
+ const mode = firstNonEmptyString(config.mode, config.acpMode) ?? DEFAULT_ACP_ENGINE_MODE;
302
+ const warmHandleIdleMs = asNumber(config.warmHandleIdleMs ?? config.acpWarmHandleIdleMs, DEFAULT_ACP_ENGINE_WARM_HANDLE_IDLE_MS);
303
+ checks.push({
304
+ code: "kimi_acp_runtime_scaffold",
305
+ level: "info",
306
+ message: "Kimi ACP runtime execution is available through the shared ACP engine.",
307
+ detail: `mode=${mode}; warmHandleIdleMs=${warmHandleIdleMs}`,
308
+ });
309
+ return {
310
+ adapterType: ctx.adapterType,
311
+ status: summarizeStatus(checks),
312
+ checks,
313
+ testedAt: new Date().toISOString(),
314
+ };
315
+ }
316
+ //# sourceMappingURL=acp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/server/acp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=acp.test.d.ts.map