ai-task-board-bridge 0.9.0 → 1.0.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 (46) hide show
  1. package/README.md +66 -15
  2. package/dist/app-server-client.js +1 -1
  3. package/dist/bridge.js +1 -1
  4. package/dist/cli.js +60 -18
  5. package/dist/cli.js.map +1 -1
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/installer.d.ts +13 -0
  11. package/dist/installer.d.ts.map +1 -0
  12. package/dist/installer.js +85 -0
  13. package/dist/installer.js.map +1 -0
  14. package/dist/kimi-runtime/acp-client.d.ts +59 -0
  15. package/dist/kimi-runtime/acp-client.d.ts.map +1 -0
  16. package/dist/kimi-runtime/acp-client.js +341 -0
  17. package/dist/kimi-runtime/acp-client.js.map +1 -0
  18. package/dist/kimi-runtime/board-client.d.ts +91 -0
  19. package/dist/kimi-runtime/board-client.d.ts.map +1 -0
  20. package/dist/kimi-runtime/board-client.js +286 -0
  21. package/dist/kimi-runtime/board-client.js.map +1 -0
  22. package/dist/kimi-runtime/bridge.d.ts +60 -0
  23. package/dist/kimi-runtime/bridge.d.ts.map +1 -0
  24. package/dist/kimi-runtime/bridge.js +773 -0
  25. package/dist/kimi-runtime/bridge.js.map +1 -0
  26. package/dist/kimi-runtime/cli.d.ts +3 -0
  27. package/dist/kimi-runtime/cli.d.ts.map +1 -0
  28. package/dist/kimi-runtime/cli.js +82 -0
  29. package/dist/kimi-runtime/cli.js.map +1 -0
  30. package/dist/kimi-runtime/config.d.ts +30 -0
  31. package/dist/kimi-runtime/config.d.ts.map +1 -0
  32. package/dist/kimi-runtime/config.js +121 -0
  33. package/dist/kimi-runtime/config.js.map +1 -0
  34. package/dist/kimi-runtime/index.d.ts +7 -0
  35. package/dist/kimi-runtime/index.d.ts.map +1 -0
  36. package/dist/kimi-runtime/index.js +7 -0
  37. package/dist/kimi-runtime/index.js.map +1 -0
  38. package/dist/kimi-runtime/setup.d.ts +23 -0
  39. package/dist/kimi-runtime/setup.d.ts.map +1 -0
  40. package/dist/kimi-runtime/setup.js +496 -0
  41. package/dist/kimi-runtime/setup.js.map +1 -0
  42. package/dist/kimi-runtime/utils.d.ts +13 -0
  43. package/dist/kimi-runtime/utils.d.ts.map +1 -0
  44. package/dist/kimi-runtime/utils.js +105 -0
  45. package/dist/kimi-runtime/utils.js.map +1 -0
  46. package/package.json +9 -4
@@ -0,0 +1,286 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { delay, errorMessage, isRecord, redactText, stringValue, } from "./utils.js";
3
+ export const KIMI_BRIDGE_CAPABILITY_VERSION = "1.0.0-kimi.1";
4
+ function idempotencyKey(operation) {
5
+ return `kimi-bridge/${operation}/${randomUUID()}`;
6
+ }
7
+ export class BoardClient {
8
+ configuration;
9
+ isStopping;
10
+ constructor(configuration, isStopping) {
11
+ this.configuration = configuration;
12
+ this.isStopping = isStopping;
13
+ }
14
+ async request(pathname, options = {}) {
15
+ const method = options.method ?? "GET";
16
+ const maxAttempts = options.maxAttempts ?? Number.POSITIVE_INFINITY;
17
+ if (maxAttempts !== Number.POSITIVE_INFINITY &&
18
+ (!Number.isInteger(maxAttempts) || maxAttempts < 1)) {
19
+ throw new Error("maxAttempts 必须是正整数");
20
+ }
21
+ let lastError;
22
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
23
+ if (options.signal?.aborted)
24
+ throw options.signal.reason;
25
+ if (attempt > 1 && this.isStopping())
26
+ throw lastError;
27
+ const controller = new AbortController();
28
+ const timeout = setTimeout(() => controller.abort(new Error("看板请求超时")), options.timeoutMs ?? 30_000);
29
+ const abort = () => controller.abort(options.signal?.reason);
30
+ options.signal?.addEventListener("abort", abort, { once: true });
31
+ try {
32
+ const response = await fetch(`${this.configuration.boardUrl}${pathname}`, {
33
+ method,
34
+ signal: controller.signal,
35
+ headers: {
36
+ Authorization: `Bearer ${this.configuration.connectionToken}`,
37
+ ...(options.sessionId
38
+ ? { "X-AI-Session-ID": options.sessionId }
39
+ : {}),
40
+ ...(options.body === undefined
41
+ ? {}
42
+ : { "Content-Type": "application/json" }),
43
+ ...(options.idempotencyKey
44
+ ? { "Idempotency-Key": options.idempotencyKey }
45
+ : {}),
46
+ },
47
+ body: options.body === undefined
48
+ ? undefined
49
+ : JSON.stringify(options.body),
50
+ });
51
+ const payload = (await response.json().catch(() => null));
52
+ if (!response.ok) {
53
+ const error = new Error(payload?.error?.message || `HTTP ${response.status}`);
54
+ error.status = response.status;
55
+ error.code = payload?.error?.code;
56
+ throw error;
57
+ }
58
+ return (payload?.data ?? payload);
59
+ }
60
+ catch (error) {
61
+ lastError = error;
62
+ if (options.signal?.aborted)
63
+ throw options.signal.reason;
64
+ const status = error.status;
65
+ const retryable = status === undefined || status === 408 || status === 429 || status >= 500;
66
+ if (!retryable || this.isStopping() || attempt >= maxAttempts)
67
+ throw error;
68
+ if (attempt === 4 || (attempt > 4 && attempt % 10 === 1)) {
69
+ process.stderr.write(`看板请求暂时失败,继续重试 ${pathname}\n`);
70
+ }
71
+ await delay(Math.min(250 * 2 ** Math.min(attempt - 1, 6), 10_000), options.signal);
72
+ }
73
+ finally {
74
+ clearTimeout(timeout);
75
+ options.signal?.removeEventListener("abort", abort);
76
+ }
77
+ }
78
+ throw lastError;
79
+ }
80
+ async syncSessions(threads, directories, modelCatalog, signal) {
81
+ const response = await this.request("/api/ai/sessions/sync", {
82
+ method: "POST",
83
+ maxAttempts: 1,
84
+ signal,
85
+ idempotencyKey: idempotencyKey("sync-sessions"),
86
+ body: {
87
+ bridge_version: KIMI_BRIDGE_CAPABILITY_VERSION,
88
+ model_catalog: modelCatalog,
89
+ directories: directories.map((directory) => ({
90
+ directory_key: directory.key,
91
+ name: directory.name,
92
+ working_directory: directory.workingDirectory,
93
+ })),
94
+ threads,
95
+ },
96
+ });
97
+ return new Map(response.sessions.flatMap((session) => session.external_conversation_ref
98
+ ? [[session.external_conversation_ref, session]]
99
+ : []));
100
+ }
101
+ async exchangeConfiguration(body, signal, timeoutMs = 5_000) {
102
+ const response = await this.request("/api/ai/config", {
103
+ method: "POST",
104
+ body,
105
+ signal,
106
+ timeoutMs,
107
+ maxAttempts: 1,
108
+ });
109
+ if (!isRecord(response) || !isRecord(response.configuration)) {
110
+ throw new Error("看板配置响应缺少 configuration");
111
+ }
112
+ const version = response.configuration.version;
113
+ if (!Number.isInteger(version) || Number(version) < 1) {
114
+ throw new Error("看板配置响应包含无效 version");
115
+ }
116
+ return { configuration: { version: Number(version) } };
117
+ }
118
+ async claimThreadCommand(runtimeInstanceId, signal) {
119
+ const response = await this.request("/api/ai/thread-commands/claim", {
120
+ method: "POST",
121
+ body: { runtime_instance_id: runtimeInstanceId, lease_seconds: 60 },
122
+ signal,
123
+ timeoutMs: 5_000,
124
+ maxAttempts: 1,
125
+ });
126
+ return response.command;
127
+ }
128
+ async completeThreadCommand(runtimeInstanceId, commandId, result, signal) {
129
+ await this.request(`/api/ai/thread-commands/${commandId}/complete`, {
130
+ method: "POST",
131
+ signal,
132
+ body: {
133
+ runtime_instance_id: runtimeInstanceId,
134
+ succeeded: result.succeeded,
135
+ external_thread_id: result.succeeded ? result.externalThreadId : null,
136
+ error: result.succeeded ? null : result.error,
137
+ },
138
+ });
139
+ }
140
+ async claimTask(sessionId, leaseSeconds, signal) {
141
+ const response = await this.request("/api/ai/tasks/claim-next", {
142
+ method: "POST",
143
+ sessionId,
144
+ signal,
145
+ idempotencyKey: idempotencyKey("claim-next"),
146
+ body: { lease_seconds: leaseSeconds },
147
+ });
148
+ return response.task;
149
+ }
150
+ async taskArtifacts(sessionId, taskId, signal) {
151
+ const response = await this.request(`/api/ai/tasks/${taskId}`, { sessionId, signal, maxAttempts: 3 }).catch((error) => {
152
+ if (error.status === 404)
153
+ return { artifacts: [] };
154
+ throw error;
155
+ });
156
+ return response.artifacts ?? [];
157
+ }
158
+ async downloadImage(sessionId, artifact, signal) {
159
+ const location = await this.request(`/api/ai/artifacts/${artifact.id}/download`, { sessionId, signal, maxAttempts: 3 });
160
+ const response = await fetch(location.url, { signal });
161
+ if (!response.ok)
162
+ throw new Error(`图片下载失败:HTTP ${response.status}`);
163
+ const bytes = Buffer.from(await response.arrayBuffer());
164
+ if (bytes.byteLength !== artifact.size ||
165
+ bytes.byteLength > 10 * 1024 * 1024) {
166
+ throw new Error(`图片大小校验失败:${artifact.name}`);
167
+ }
168
+ return { data: bytes.toString("base64"), mimeType: artifact.mime_type };
169
+ }
170
+ reportProgress(sessionId, task, signal) {
171
+ return this.request("/api/ai/tasks/report-progress", {
172
+ method: "POST",
173
+ sessionId,
174
+ signal,
175
+ idempotencyKey: idempotencyKey("started"),
176
+ body: {
177
+ task_id: task.id,
178
+ claim_token: task.claim_token,
179
+ progress_note: "Kimi Code ACP 已接收任务,正在执行",
180
+ progress_percent_estimate: 5,
181
+ },
182
+ });
183
+ }
184
+ reportAssistantMessage(sessionId, externalThreadId, task, content, data, signal) {
185
+ return this.request("/api/ai/sessions/activity", {
186
+ method: "POST",
187
+ sessionId,
188
+ signal,
189
+ idempotencyKey: idempotencyKey("activity"),
190
+ body: {
191
+ task_id: task.id,
192
+ claim_token: task.claim_token,
193
+ external_ref: `kimi:${externalThreadId}:${task.id}:assistant`,
194
+ kind: "assistant_message",
195
+ content: redactText(content),
196
+ data,
197
+ },
198
+ });
199
+ }
200
+ completeTask(sessionId, task, resultSummary, resultJson, signal) {
201
+ return this.request("/api/ai/tasks/complete", {
202
+ method: "POST",
203
+ sessionId,
204
+ signal,
205
+ idempotencyKey: idempotencyKey("complete"),
206
+ body: {
207
+ task_id: task.id,
208
+ claim_token: task.claim_token,
209
+ result_summary: redactText(resultSummary),
210
+ result_json: resultJson,
211
+ message: null,
212
+ artifacts: [],
213
+ },
214
+ });
215
+ }
216
+ failTask(sessionId, task, reason, signal) {
217
+ return this.request("/api/ai/tasks/fail", {
218
+ method: "POST",
219
+ sessionId,
220
+ signal,
221
+ idempotencyKey: idempotencyKey("fail"),
222
+ maxAttempts: 3,
223
+ body: {
224
+ task_id: task.id,
225
+ claim_token: task.claim_token,
226
+ reason: redactText(reason, 10_000),
227
+ result_json: null,
228
+ },
229
+ });
230
+ }
231
+ releaseTask(sessionId, task, reason) {
232
+ return this.request("/api/ai/tasks/release", {
233
+ method: "POST",
234
+ sessionId,
235
+ idempotencyKey: idempotencyKey("release"),
236
+ maxAttempts: 1,
237
+ timeoutMs: 5_000,
238
+ body: {
239
+ task_id: task.id,
240
+ claim_token: task.claim_token,
241
+ reason: redactText(reason, 2_000),
242
+ },
243
+ });
244
+ }
245
+ async heartbeatPresence(sessionId, signal) {
246
+ const response = await this.request("/api/ai/sessions/presence", {
247
+ method: "POST",
248
+ sessionId,
249
+ signal,
250
+ idempotencyKey: idempotencyKey("session-heartbeat"),
251
+ body: {},
252
+ });
253
+ return response.session ?? null;
254
+ }
255
+ heartbeatClaim(sessionId, task, leaseSeconds, signal) {
256
+ return this.request("/api/ai/sessions/heartbeat", {
257
+ method: "POST",
258
+ sessionId,
259
+ signal,
260
+ idempotencyKey: idempotencyKey("claim-heartbeat"),
261
+ body: {
262
+ task_id: task.id,
263
+ claim_token: task.claim_token,
264
+ lease_seconds: leaseSeconds,
265
+ },
266
+ });
267
+ }
268
+ }
269
+ export function actionableBoardError(error) {
270
+ const status = error?.status;
271
+ const detail = redactText(errorMessage(error), 2_000);
272
+ if (status === 401 || status === 403) {
273
+ return new Error(`看板认证失败(HTTP ${status}):请检查 AI_TASK_BOARD_CONNECTION_TOKEN。 ${detail}`, { cause: error });
274
+ }
275
+ if (status === 409) {
276
+ return new Error(`同一 AI Connection 已有另一个 Bridge 持有运行租约。 ${detail}`, { cause: error });
277
+ }
278
+ return new Error(`看板拒绝 Kimi Bridge 请求(HTTP ${status ?? "unknown"}):${detail}`, { cause: error });
279
+ }
280
+ export function commandError(error) {
281
+ return redactText(errorMessage(error), 2_000);
282
+ }
283
+ export function commandString(value) {
284
+ return stringValue(value);
285
+ }
286
+ //# sourceMappingURL=board-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-client.js","sourceRoot":"","sources":["../src/board-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { SessionConfigOption, SessionInfo } from "@agentclientprotocol/sdk";
2
+ import { KimiAcpClient } from "./acp-client.js";
3
+ import { type KimiBridgeConfiguration } from "./config.js";
4
+ export declare class TurnLimiter {
5
+ private readonly limit;
6
+ private active;
7
+ private readonly waiters;
8
+ constructor(limit: number);
9
+ acquire(signal: AbortSignal): Promise<() => void>;
10
+ private releaseFunction;
11
+ private drain;
12
+ }
13
+ type PreparedSession = {
14
+ options: SessionConfigOption[];
15
+ model: string | null;
16
+ reasoningEffort: string | null;
17
+ };
18
+ export declare function prepareKimiSession(acp: KimiAcpClient, session: SessionInfo, configuration: Pick<KimiBridgeConfiguration, "agentMode">, requestedModel: string | null, requestedReasoningEffort: string | null, existingOptions?: readonly SessionConfigOption[]): Promise<PreparedSession>;
19
+ export declare class KimiBridge {
20
+ private readonly configuration;
21
+ private readonly acp;
22
+ private readonly stopController;
23
+ private readonly board;
24
+ private readonly limiter;
25
+ private readonly runtimeInstanceId;
26
+ private readonly workers;
27
+ private readonly workerRuns;
28
+ private readonly knownModels;
29
+ private readonly createdSessions;
30
+ private managedSessionIds;
31
+ private modelCatalog;
32
+ private reportSequence;
33
+ private runtimeLeaseClaimed;
34
+ private leaseSafetyDeadline;
35
+ private leaseRenewalPromise;
36
+ private stopping;
37
+ private fatalError;
38
+ private stopPromise;
39
+ private inventoryReady;
40
+ constructor(configuration: KimiBridgeConfiguration, acp: KimiAcpClient);
41
+ run(): Promise<void>;
42
+ stop(): Promise<void>;
43
+ private finishRun;
44
+ private stopBridge;
45
+ private markFatal;
46
+ private configurationStatus;
47
+ private exchangeRuntimeLease;
48
+ private establishRuntimeLease;
49
+ private renewRuntimeLease;
50
+ private releaseRuntimeLease;
51
+ private discoverModelCatalog;
52
+ private listSessions;
53
+ private inventoryThread;
54
+ private syncWorkers;
55
+ private processThreadCommands;
56
+ private executeThreadCommand;
57
+ }
58
+ export declare function runBridgeCli(): Promise<void>;
59
+ export {};
60
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,mBAAmB,EACnB,WAAW,EAIZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAEL,aAAa,EAGd,MAAM,iBAAiB,CAAC;AAWzB,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,aAAa,CAAC;AAoBrB,qBAAa,WAAW;IASV,OAAO,CAAC,QAAQ,CAAC,KAAK;IARlC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAKhB;gBAEqB,KAAK,EAAE,MAAM;IAM1C,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAuBjD,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,KAAK;CAad;AAED,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,IAAI,CAAC,uBAAuB,EAAE,WAAW,CAAC,EACzD,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,wBAAwB,EAAE,MAAM,GAAG,IAAI,EACvC,eAAe,CAAC,EAAE,SAAS,mBAAmB,EAAE,GAC/C,OAAO,CAAC,eAAe,CAAC,CA+B1B;AA6TD,qBAAa,UAAU;IAqBnB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG;IArBtB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAC/D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoC;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAClE,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,mBAAmB,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,cAAc,CAAS;gBAGZ,aAAa,EAAE,uBAAuB,EACtC,GAAG,EAAE,aAAa;IAc/B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA+DpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAKb,SAAS;YAKT,UAAU;IAYxB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,mBAAmB;YA2Cb,oBAAoB;YAiBpB,qBAAqB;YA8BrB,iBAAiB;YAsCjB,mBAAmB;YAKnB,oBAAoB;YA2BpB,YAAY;IA8B1B,OAAO,CAAC,eAAe;YA+BT,WAAW;YA4EX,qBAAqB;YAqCrB,oBAAoB;CAmEnC;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAclD"}