@kilocode/sdk 7.2.5 → 7.2.6

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.
@@ -0,0 +1,3 @@
1
+ import { type ChildProcess } from "node:child_process";
2
+ export declare function stop(proc: ChildProcess): void;
3
+ export declare function bindAbort(proc: ChildProcess, signal?: AbortSignal, onAbort?: () => void): () => void;
@@ -0,0 +1,33 @@
1
+ import { spawnSync } from "node:child_process";
2
+ // Duplicated from `packages/opencode/src/util/process.ts` because the SDK cannot
3
+ // import `opencode` without creating a cycle (`opencode` depends on `@kilocode/sdk`).
4
+ export function stop(proc) {
5
+ if (proc.exitCode !== null || proc.signalCode !== null)
6
+ return;
7
+ if (process.platform === "win32" && proc.pid) {
8
+ const out = spawnSync("taskkill", ["/pid", String(proc.pid), "/T", "/F"], { windowsHide: true });
9
+ if (!out.error && out.status === 0)
10
+ return;
11
+ }
12
+ proc.kill();
13
+ }
14
+ export function bindAbort(proc, signal, onAbort) {
15
+ if (!signal)
16
+ return () => { };
17
+ const abort = () => {
18
+ clear();
19
+ stop(proc);
20
+ onAbort?.();
21
+ };
22
+ const clear = () => {
23
+ signal.removeEventListener("abort", abort);
24
+ proc.off("exit", clear);
25
+ proc.off("error", clear);
26
+ };
27
+ signal.addEventListener("abort", abort, { once: true });
28
+ proc.on("exit", clear);
29
+ proc.on("error", clear);
30
+ if (signal.aborted)
31
+ abort();
32
+ return clear;
33
+ }
package/dist/server.js CHANGED
@@ -1,4 +1,5 @@
1
- import { spawn } from "node:child_process";
1
+ import launch from "cross-spawn";
2
+ import { stop, bindAbort } from "./process.js";
2
3
  // kilocode_change start - Merge existing KILO_CONFIG_CONTENT with new config
3
4
  // This preserves Kilocode-injected modes when spawning nested CLI instances
4
5
  function mergeConfig(existing, incoming) {
@@ -39,22 +40,25 @@ export async function createKiloServer(options) {
39
40
  const args = [`serve`, `--hostname=${options.hostname}`, `--port=${options.port}`];
40
41
  if (options.config?.logLevel)
41
42
  args.push(`--log-level=${options.config.logLevel}`);
42
- // kilocode_change start
43
- const proc = spawn(`kilo`, args, {
44
- // kilocode_change end
45
- signal: options.signal,
46
- windowsHide: true,
43
+ const proc = launch(`kilo`, args, {
44
+ // kilocode_change
47
45
  env: {
48
46
  ...process.env,
49
47
  KILO_CONFIG_CONTENT: buildConfigEnv(options.config), // kilocode_change
50
48
  },
51
49
  });
50
+ let clear = () => { };
52
51
  const url = await new Promise((resolve, reject) => {
53
52
  const id = setTimeout(() => {
53
+ clear();
54
+ stop(proc);
54
55
  reject(new Error(`Timeout waiting for server to start after ${options.timeout}ms`));
55
56
  }, options.timeout);
56
57
  let output = "";
58
+ let resolved = false;
57
59
  proc.stdout?.on("data", (chunk) => {
60
+ if (resolved)
61
+ return;
58
62
  output += chunk.toString();
59
63
  const lines = output.split("\n");
60
64
  for (const line of lines) {
@@ -63,9 +67,14 @@ export async function createKiloServer(options) {
63
67
  // kilocode_change end
64
68
  const match = line.match(/on\s+(https?:\/\/[^\s]+)/);
65
69
  if (!match) {
66
- throw new Error(`Failed to parse server url from output: ${line}`);
70
+ clear();
71
+ stop(proc);
72
+ clearTimeout(id);
73
+ reject(new Error(`Failed to parse server url from output: ${line}`));
74
+ return;
67
75
  }
68
76
  clearTimeout(id);
77
+ resolved = true;
69
78
  resolve(match[1]);
70
79
  return;
71
80
  }
@@ -86,17 +95,16 @@ export async function createKiloServer(options) {
86
95
  clearTimeout(id);
87
96
  reject(error);
88
97
  });
89
- if (options.signal) {
90
- options.signal.addEventListener("abort", () => {
91
- clearTimeout(id);
92
- reject(new Error("Aborted"));
93
- });
94
- }
98
+ clear = bindAbort(proc, options.signal, () => {
99
+ clearTimeout(id);
100
+ reject(options.signal?.reason);
101
+ });
95
102
  });
96
103
  return {
97
104
  url,
98
105
  close() {
99
- proc.kill();
106
+ clear();
107
+ stop(proc);
100
108
  },
101
109
  };
102
110
  }
@@ -114,10 +122,8 @@ export function createKiloTui(options) {
114
122
  if (options?.agent) {
115
123
  args.push(`--agent=${options.agent}`);
116
124
  }
117
- // kilocode_change start
118
- const proc = spawn(`kilo`, args, {
119
- // kilocode_change end
120
- signal: options?.signal,
125
+ const proc = launch(`kilo`, args, {
126
+ // kilocode_change
121
127
  stdio: "inherit",
122
128
  windowsHide: true,
123
129
  env: {
@@ -125,9 +131,11 @@ export function createKiloTui(options) {
125
131
  KILO_CONFIG_CONTENT: buildConfigEnv(options?.config), // kilocode_change
126
132
  },
127
133
  });
134
+ const clear = bindAbort(proc, options?.signal);
128
135
  return {
129
136
  close() {
130
- proc.kill();
137
+ clear();
138
+ stop(proc);
131
139
  },
132
140
  };
133
141
  }
@@ -1,5 +1,5 @@
1
1
  import { type Client, type Options as Options2, type TDataShape } from "./client/index.js";
2
- import type { AgentPartInput, AppAgentsResponses, AppLogErrors, AppLogResponses, AppSkillsResponses, Auth as Auth3, AuthRemoveErrors, AuthRemoveResponses, AuthSetErrors, AuthSetResponses, CommandListResponses, CommitMessageGenerateErrors, CommitMessageGenerateResponses, Config as Config3, ConfigGetResponses, ConfigProvidersResponses, ConfigUpdateErrors, ConfigUpdateResponses, ConfigWarningsResponses, EnhancePromptEnhanceErrors, EnhancePromptEnhanceResponses, EventSubscribeResponses, EventTuiCommandExecute, EventTuiPromptAppend, EventTuiSessionSelect, EventTuiToastShow, ExperimentalResourceListResponses, ExperimentalSessionListResponses, ExperimentalWorkspaceCreateErrors, ExperimentalWorkspaceCreateResponses, ExperimentalWorkspaceListResponses, ExperimentalWorkspaceRemoveErrors, ExperimentalWorkspaceRemoveResponses, FileListResponses, FilePartInput, FilePartSource, FileReadResponses, FileStatusResponses, FindFilesResponses, FindSymbolsResponses, FindTextResponses, FormatterStatusResponses, GlobalConfigGetResponses, GlobalConfigUpdateErrors, GlobalConfigUpdateResponses, GlobalDisposeResponses, GlobalEventResponses, GlobalHealthResponses, GlobalSyncEventSubscribeResponses, GlobalUpgradeErrors, GlobalUpgradeResponses, InstanceDisposeResponses, KiloClawChatCredentialsResponses, KiloClawStatusResponses, KiloCloudSessionGetErrors, KiloCloudSessionGetResponses, KiloCloudSessionImportErrors, KiloCloudSessionImportResponses, KiloCloudSessionsErrors, KiloCloudSessionsResponses, KilocodeRemoveAgentErrors, KilocodeRemoveAgentResponses, KilocodeRemoveSkillErrors, KilocodeRemoveSkillResponses, KilocodeSessionImportMessageErrors, KilocodeSessionImportMessageResponses, KilocodeSessionImportPartErrors, KilocodeSessionImportPartResponses, KilocodeSessionImportProjectErrors, KilocodeSessionImportProjectResponses, KilocodeSessionImportSessionErrors, KilocodeSessionImportSessionResponses, KiloFimErrors, KiloFimResponses, KiloModesResponses, KiloNotificationsErrors, KiloNotificationsResponses, KiloOrganizationSetErrors, KiloOrganizationSetResponses, KiloProfileErrors, KiloProfileResponses, LspStatusResponses, McpAddErrors, McpAddResponses, McpAuthAuthenticateErrors, McpAuthAuthenticateResponses, McpAuthCallbackErrors, McpAuthCallbackResponses, McpAuthRemoveErrors, McpAuthRemoveResponses, McpAuthStartErrors, McpAuthStartResponses, McpConnectResponses, McpDisconnectResponses, McpLocalConfig, McpRemoteConfig, McpStatusResponses, NetworkListResponses, NetworkRejectErrors, NetworkRejectResponses, NetworkReplyErrors, NetworkReplyResponses, OutputFormat, Part as Part2, PartDeleteErrors, PartDeleteResponses, PartUpdateErrors, PartUpdateResponses, PathGetResponses, PermissionAllowEverythingErrors, PermissionAllowEverythingResponses, PermissionListResponses, PermissionReplyErrors, PermissionReplyResponses, PermissionRespondErrors, PermissionRespondResponses, PermissionRuleset, PermissionSaveAlwaysRulesErrors, PermissionSaveAlwaysRulesResponses, ProjectCurrentResponses, ProjectInitGitResponses, ProjectListResponses, ProjectUpdateErrors, ProjectUpdateResponses, ProviderAuthResponses, ProviderListResponses, ProviderOauthAuthorizeErrors, ProviderOauthAuthorizeResponses, ProviderOauthCallbackErrors, ProviderOauthCallbackResponses, PtyConnectErrors, PtyConnectResponses, PtyCreateErrors, PtyCreateResponses, PtyGetErrors, PtyGetResponses, PtyListResponses, PtyRemoveErrors, PtyRemoveResponses, PtyUpdateErrors, PtyUpdateResponses, QuestionAnswer, QuestionListResponses, QuestionRejectErrors, QuestionRejectResponses, QuestionReplyErrors, QuestionReplyResponses, RemoteDisableResponses, RemoteEnableResponses, RemoteStatusResponses, SessionAbortErrors, SessionAbortResponses, SessionChildrenErrors, SessionChildrenResponses, SessionCommandErrors, SessionCommandResponses, SessionCreateErrors, SessionCreateResponses, SessionDeleteErrors, SessionDeleteMessageErrors, SessionDeleteMessageResponses, SessionDeleteResponses, SessionDiffResponses, SessionForkResponses, SessionGetErrors, SessionGetResponses, SessionInitErrors, SessionInitResponses, SessionListResponses, SessionMessageErrors, SessionMessageResponses, SessionMessagesErrors, SessionMessagesResponses, SessionPromptAsyncErrors, SessionPromptAsyncResponses, SessionPromptErrors, SessionPromptResponses, SessionRevertErrors, SessionRevertResponses, SessionShareErrors, SessionShareResponses, SessionShellErrors, SessionShellResponses, SessionStatusErrors, SessionStatusResponses, SessionSummarizeErrors, SessionSummarizeResponses, SessionTodoErrors, SessionTodoResponses, SessionUnrevertErrors, SessionUnrevertResponses, SessionUnshareErrors, SessionUnshareResponses, SessionUpdateErrors, SessionUpdateResponses, SessionViewedResponses, SubtaskPartInput, TelemetryCaptureErrors, TelemetryCaptureResponses, TextPartInput, ToolIdsErrors, ToolIdsResponses, ToolListErrors, ToolListResponses, TuiAppendPromptErrors, TuiAppendPromptResponses, TuiClearPromptResponses, TuiControlNextResponses, TuiControlResponseResponses, TuiExecuteCommandErrors, TuiExecuteCommandResponses, TuiOpenHelpResponses, TuiOpenModelsResponses, TuiOpenSessionsResponses, TuiOpenThemesResponses, TuiPublishErrors, TuiPublishResponses, TuiSelectSessionErrors, TuiSelectSessionResponses, TuiShowToastResponses, TuiSubmitPromptResponses, VcsGetResponses, WorktreeCreateErrors, WorktreeCreateInput, WorktreeCreateResponses, WorktreeDiffErrors, WorktreeDiffFileErrors, WorktreeDiffFileResponses, WorktreeDiffResponses, WorktreeDiffSummaryErrors, WorktreeDiffSummaryResponses, WorktreeListResponses, WorktreeRemoveErrors, WorktreeRemoveInput, WorktreeRemoveResponses, WorktreeResetErrors, WorktreeResetInput, WorktreeResetResponses } from "./types.gen.js";
2
+ import type { AgentPartInput, AppAgentsResponses, AppLogErrors, AppLogResponses, AppSkillsResponses, Auth as Auth3, AuthRemoveErrors, AuthRemoveResponses, AuthSetErrors, AuthSetResponses, CommandListResponses, CommitMessageGenerateErrors, CommitMessageGenerateResponses, Config as Config3, ConfigGetResponses, ConfigProvidersResponses, ConfigUpdateErrors, ConfigUpdateResponses, ConfigWarningsResponses, EnhancePromptEnhanceErrors, EnhancePromptEnhanceResponses, EventSubscribeResponses, EventTuiCommandExecute, EventTuiPromptAppend, EventTuiSessionSelect, EventTuiToastShow, ExperimentalConsoleGetResponses, ExperimentalConsoleListOrgsResponses, ExperimentalConsoleSwitchOrgResponses, ExperimentalResourceListResponses, ExperimentalSessionListResponses, ExperimentalWorkspaceCreateErrors, ExperimentalWorkspaceCreateResponses, ExperimentalWorkspaceListResponses, ExperimentalWorkspaceRemoveErrors, ExperimentalWorkspaceRemoveResponses, FileListResponses, FilePartInput, FilePartSource, FileReadResponses, FileStatusResponses, FindFilesResponses, FindSymbolsResponses, FindTextResponses, FormatterStatusResponses, GlobalConfigGetResponses, GlobalConfigUpdateErrors, GlobalConfigUpdateResponses, GlobalDisposeResponses, GlobalEventResponses, GlobalHealthResponses, GlobalSyncEventSubscribeResponses, GlobalUpgradeErrors, GlobalUpgradeResponses, InstanceDisposeResponses, KiloClawChatCredentialsResponses, KiloClawStatusResponses, KiloCloudSessionGetErrors, KiloCloudSessionGetResponses, KiloCloudSessionImportErrors, KiloCloudSessionImportResponses, KiloCloudSessionsErrors, KiloCloudSessionsResponses, KilocodeRemoveAgentErrors, KilocodeRemoveAgentResponses, KilocodeRemoveSkillErrors, KilocodeRemoveSkillResponses, KilocodeSessionImportMessageErrors, KilocodeSessionImportMessageResponses, KilocodeSessionImportPartErrors, KilocodeSessionImportPartResponses, KilocodeSessionImportProjectErrors, KilocodeSessionImportProjectResponses, KilocodeSessionImportSessionErrors, KilocodeSessionImportSessionResponses, KiloFimErrors, KiloFimResponses, KiloModesResponses, KiloNotificationsErrors, KiloNotificationsResponses, KiloOrganizationSetErrors, KiloOrganizationSetResponses, KiloProfileErrors, KiloProfileResponses, LspStatusResponses, McpAddErrors, McpAddResponses, McpAuthAuthenticateErrors, McpAuthAuthenticateResponses, McpAuthCallbackErrors, McpAuthCallbackResponses, McpAuthRemoveErrors, McpAuthRemoveResponses, McpAuthStartErrors, McpAuthStartResponses, McpConnectResponses, McpDisconnectResponses, McpLocalConfig, McpRemoteConfig, McpStatusResponses, NetworkListResponses, NetworkRejectErrors, NetworkRejectResponses, NetworkReplyErrors, NetworkReplyResponses, OutputFormat, Part as Part2, PartDeleteErrors, PartDeleteResponses, PartUpdateErrors, PartUpdateResponses, PathGetResponses, PermissionAllowEverythingErrors, PermissionAllowEverythingResponses, PermissionListResponses, PermissionReplyErrors, PermissionReplyResponses, PermissionRespondErrors, PermissionRespondResponses, PermissionRuleset, PermissionSaveAlwaysRulesErrors, PermissionSaveAlwaysRulesResponses, ProjectCurrentResponses, ProjectInitGitResponses, ProjectListResponses, ProjectUpdateErrors, ProjectUpdateResponses, ProviderAuthResponses, ProviderListResponses, ProviderOauthAuthorizeErrors, ProviderOauthAuthorizeResponses, ProviderOauthCallbackErrors, ProviderOauthCallbackResponses, PtyConnectErrors, PtyConnectResponses, PtyCreateErrors, PtyCreateResponses, PtyGetErrors, PtyGetResponses, PtyListResponses, PtyRemoveErrors, PtyRemoveResponses, PtyUpdateErrors, PtyUpdateResponses, QuestionAnswer, QuestionListResponses, QuestionRejectErrors, QuestionRejectResponses, QuestionReplyErrors, QuestionReplyResponses, RemoteDisableResponses, RemoteEnableResponses, RemoteStatusResponses, SessionAbortErrors, SessionAbortResponses, SessionChildrenErrors, SessionChildrenResponses, SessionCommandErrors, SessionCommandResponses, SessionCreateErrors, SessionCreateResponses, SessionDeleteErrors, SessionDeleteMessageErrors, SessionDeleteMessageResponses, SessionDeleteResponses, SessionDiffResponses, SessionForkResponses, SessionGetErrors, SessionGetResponses, SessionInitErrors, SessionInitResponses, SessionListResponses, SessionMessageErrors, SessionMessageResponses, SessionMessagesErrors, SessionMessagesResponses, SessionPromptAsyncErrors, SessionPromptAsyncResponses, SessionPromptErrors, SessionPromptResponses, SessionRevertErrors, SessionRevertResponses, SessionShareErrors, SessionShareResponses, SessionShellErrors, SessionShellResponses, SessionStatusErrors, SessionStatusResponses, SessionSummarizeErrors, SessionSummarizeResponses, SessionTodoErrors, SessionTodoResponses, SessionUnrevertErrors, SessionUnrevertResponses, SessionUnshareErrors, SessionUnshareResponses, SessionUpdateErrors, SessionUpdateResponses, SessionViewedResponses, SubtaskPartInput, TelemetryCaptureErrors, TelemetryCaptureResponses, TextPartInput, ToolIdsErrors, ToolIdsResponses, ToolListErrors, ToolListResponses, TuiAppendPromptErrors, TuiAppendPromptResponses, TuiClearPromptResponses, TuiControlNextResponses, TuiControlResponseResponses, TuiExecuteCommandErrors, TuiExecuteCommandResponses, TuiOpenHelpResponses, TuiOpenModelsResponses, TuiOpenSessionsResponses, TuiOpenThemesResponses, TuiPublishErrors, TuiPublishResponses, TuiSelectSessionErrors, TuiSelectSessionResponses, TuiShowToastResponses, TuiSubmitPromptResponses, VcsDiffResponses, VcsGetResponses, WorktreeCreateErrors, WorktreeCreateInput, WorktreeCreateResponses, WorktreeDiffErrors, WorktreeDiffFileErrors, WorktreeDiffFileResponses, WorktreeDiffResponses, WorktreeDiffSummaryErrors, WorktreeDiffSummaryResponses, WorktreeListResponses, WorktreeRemoveErrors, WorktreeRemoveInput, WorktreeRemoveResponses, WorktreeResetErrors, WorktreeResetInput, WorktreeResetResponses } from "./types.gen.js";
3
3
  export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = Options2<TData, ThrowOnError> & {
4
4
  /**
5
5
  * You can provide a client instance returned by `createClient()` instead of
@@ -297,27 +297,36 @@ export declare class Config2 extends HeyApiClient {
297
297
  workspace?: string;
298
298
  }, options?: Options<never, ThrowOnError>): import("./client/types.gen.js").RequestResult<ConfigProvidersResponses, unknown, ThrowOnError, "fields">;
299
299
  }
300
- export declare class Tool extends HeyApiClient {
300
+ export declare class Console extends HeyApiClient {
301
301
  /**
302
- * List tool IDs
302
+ * Get active Console provider metadata
303
303
  *
304
- * Get a list of all available tool IDs, including both built-in tools and dynamically registered tools.
304
+ * Get the active Console org name and the set of provider IDs managed by that Console org.
305
305
  */
306
- ids<ThrowOnError extends boolean = false>(parameters?: {
306
+ get<ThrowOnError extends boolean = false>(parameters?: {
307
307
  directory?: string;
308
308
  workspace?: string;
309
- }, options?: Options<never, ThrowOnError>): import("./client/types.gen.js").RequestResult<ToolIdsResponses, ToolIdsErrors, ThrowOnError, "fields">;
309
+ }, options?: Options<never, ThrowOnError>): import("./client/types.gen.js").RequestResult<ExperimentalConsoleGetResponses, unknown, ThrowOnError, "fields">;
310
310
  /**
311
- * List tools
311
+ * List switchable Console orgs
312
312
  *
313
- * Get a list of available tools with their JSON schema parameters for a specific provider and model combination.
313
+ * Get the available Console orgs across logged-in accounts, including the current active org.
314
314
  */
315
- list<ThrowOnError extends boolean = false>(parameters: {
315
+ listOrgs<ThrowOnError extends boolean = false>(parameters?: {
316
316
  directory?: string;
317
317
  workspace?: string;
318
- provider: string;
319
- model: string;
320
- }, options?: Options<never, ThrowOnError>): import("./client/types.gen.js").RequestResult<ToolListResponses, ToolListErrors, ThrowOnError, "fields">;
318
+ }, options?: Options<never, ThrowOnError>): import("./client/types.gen.js").RequestResult<ExperimentalConsoleListOrgsResponses, unknown, ThrowOnError, "fields">;
319
+ /**
320
+ * Switch active Console org
321
+ *
322
+ * Persist a new active Console account/org selection for the current local Kilo state.
323
+ */
324
+ switchOrg<ThrowOnError extends boolean = false>(parameters?: {
325
+ directory?: string;
326
+ workspace?: string;
327
+ accountID?: string;
328
+ orgID?: string;
329
+ }, options?: Options<never, ThrowOnError>): import("./client/types.gen.js").RequestResult<ExperimentalConsoleSwitchOrgResponses, unknown, ThrowOnError, "fields">;
321
330
  }
322
331
  export declare class Workspace extends HeyApiClient {
323
332
  /**
@@ -384,6 +393,8 @@ export declare class Resource extends HeyApiClient {
384
393
  }, options?: Options<never, ThrowOnError>): import("./client/types.gen.js").RequestResult<ExperimentalResourceListResponses, unknown, ThrowOnError, "fields">;
385
394
  }
386
395
  export declare class Experimental extends HeyApiClient {
396
+ private _console?;
397
+ get console(): Console;
387
398
  private _workspace?;
388
399
  get workspace(): Workspace;
389
400
  private _session?;
@@ -391,6 +402,28 @@ export declare class Experimental extends HeyApiClient {
391
402
  private _resource?;
392
403
  get resource(): Resource;
393
404
  }
405
+ export declare class Tool extends HeyApiClient {
406
+ /**
407
+ * List tool IDs
408
+ *
409
+ * Get a list of all available tool IDs, including both built-in tools and dynamically registered tools.
410
+ */
411
+ ids<ThrowOnError extends boolean = false>(parameters?: {
412
+ directory?: string;
413
+ workspace?: string;
414
+ }, options?: Options<never, ThrowOnError>): import("./client/types.gen.js").RequestResult<ToolIdsResponses, ToolIdsErrors, ThrowOnError, "fields">;
415
+ /**
416
+ * List tools
417
+ *
418
+ * Get a list of available tools with their JSON schema parameters for a specific provider and model combination.
419
+ */
420
+ list<ThrowOnError extends boolean = false>(parameters: {
421
+ directory?: string;
422
+ workspace?: string;
423
+ provider: string;
424
+ model: string;
425
+ }, options?: Options<never, ThrowOnError>): import("./client/types.gen.js").RequestResult<ToolListResponses, ToolListErrors, ThrowOnError, "fields">;
426
+ }
394
427
  export declare class Worktree extends HeyApiClient {
395
428
  /**
396
429
  * Remove worktree
@@ -759,6 +792,7 @@ export declare class Session2 extends HeyApiClient {
759
792
  sessionID: string;
760
793
  directory?: string;
761
794
  workspace?: string;
795
+ messageID?: string;
762
796
  agent?: string;
763
797
  model?: {
764
798
  providerID: string;
@@ -1290,6 +1324,16 @@ export declare class Vcs extends HeyApiClient {
1290
1324
  directory?: string;
1291
1325
  workspace?: string;
1292
1326
  }, options?: Options<never, ThrowOnError>): import("./client/types.gen.js").RequestResult<VcsGetResponses, unknown, ThrowOnError, "fields">;
1327
+ /**
1328
+ * Get VCS diff
1329
+ *
1330
+ * Retrieve the current git diff for the working tree or against the default branch.
1331
+ */
1332
+ diff<ThrowOnError extends boolean = false>(parameters: {
1333
+ directory?: string;
1334
+ workspace?: string;
1335
+ mode: "git" | "branch";
1336
+ }, options?: Options<never, ThrowOnError>): import("./client/types.gen.js").RequestResult<VcsDiffResponses, unknown, ThrowOnError, "fields">;
1293
1337
  }
1294
1338
  export declare class Command extends HeyApiClient {
1295
1339
  /**
@@ -1796,10 +1840,10 @@ export declare class KiloClient extends HeyApiClient {
1796
1840
  get pty(): Pty;
1797
1841
  private _config?;
1798
1842
  get config(): Config2;
1799
- private _tool?;
1800
- get tool(): Tool;
1801
1843
  private _experimental?;
1802
1844
  get experimental(): Experimental;
1845
+ private _tool?;
1846
+ get tool(): Tool;
1803
1847
  private _worktree?;
1804
1848
  get worktree(): Worktree;
1805
1849
  private _session?;
@@ -559,13 +559,13 @@ export class Config2 extends HeyApiClient {
559
559
  });
560
560
  }
561
561
  }
562
- export class Tool extends HeyApiClient {
562
+ export class Console extends HeyApiClient {
563
563
  /**
564
- * List tool IDs
564
+ * Get active Console provider metadata
565
565
  *
566
- * Get a list of all available tool IDs, including both built-in tools and dynamically registered tools.
566
+ * Get the active Console org name and the set of provider IDs managed by that Console org.
567
567
  */
568
- ids(parameters, options) {
568
+ get(parameters, options) {
569
569
  const params = buildClientParams([parameters], [
570
570
  {
571
571
  args: [
@@ -575,31 +575,56 @@ export class Tool extends HeyApiClient {
575
575
  },
576
576
  ]);
577
577
  return (options?.client ?? this.client).get({
578
- url: "/experimental/tool/ids",
578
+ url: "/experimental/console",
579
579
  ...options,
580
580
  ...params,
581
581
  });
582
582
  }
583
583
  /**
584
- * List tools
584
+ * List switchable Console orgs
585
585
  *
586
- * Get a list of available tools with their JSON schema parameters for a specific provider and model combination.
586
+ * Get the available Console orgs across logged-in accounts, including the current active org.
587
587
  */
588
- list(parameters, options) {
588
+ listOrgs(parameters, options) {
589
589
  const params = buildClientParams([parameters], [
590
590
  {
591
591
  args: [
592
592
  { in: "query", key: "directory" },
593
593
  { in: "query", key: "workspace" },
594
- { in: "query", key: "provider" },
595
- { in: "query", key: "model" },
596
594
  ],
597
595
  },
598
596
  ]);
599
597
  return (options?.client ?? this.client).get({
600
- url: "/experimental/tool",
598
+ url: "/experimental/console/orgs",
599
+ ...options,
600
+ ...params,
601
+ });
602
+ }
603
+ /**
604
+ * Switch active Console org
605
+ *
606
+ * Persist a new active Console account/org selection for the current local Kilo state.
607
+ */
608
+ switchOrg(parameters, options) {
609
+ const params = buildClientParams([parameters], [
610
+ {
611
+ args: [
612
+ { in: "query", key: "directory" },
613
+ { in: "query", key: "workspace" },
614
+ { in: "body", key: "accountID" },
615
+ { in: "body", key: "orgID" },
616
+ ],
617
+ },
618
+ ]);
619
+ return (options?.client ?? this.client).post({
620
+ url: "/experimental/console/switch",
601
621
  ...options,
602
622
  ...params,
623
+ headers: {
624
+ "Content-Type": "application/json",
625
+ ...options?.headers,
626
+ ...params.headers,
627
+ },
603
628
  });
604
629
  }
605
630
  }
@@ -728,6 +753,10 @@ export class Resource extends HeyApiClient {
728
753
  }
729
754
  }
730
755
  export class Experimental extends HeyApiClient {
756
+ _console;
757
+ get console() {
758
+ return (this._console ??= new Console({ client: this.client }));
759
+ }
731
760
  _workspace;
732
761
  get workspace() {
733
762
  return (this._workspace ??= new Workspace({ client: this.client }));
@@ -741,6 +770,50 @@ export class Experimental extends HeyApiClient {
741
770
  return (this._resource ??= new Resource({ client: this.client }));
742
771
  }
743
772
  }
773
+ export class Tool extends HeyApiClient {
774
+ /**
775
+ * List tool IDs
776
+ *
777
+ * Get a list of all available tool IDs, including both built-in tools and dynamically registered tools.
778
+ */
779
+ ids(parameters, options) {
780
+ const params = buildClientParams([parameters], [
781
+ {
782
+ args: [
783
+ { in: "query", key: "directory" },
784
+ { in: "query", key: "workspace" },
785
+ ],
786
+ },
787
+ ]);
788
+ return (options?.client ?? this.client).get({
789
+ url: "/experimental/tool/ids",
790
+ ...options,
791
+ ...params,
792
+ });
793
+ }
794
+ /**
795
+ * List tools
796
+ *
797
+ * Get a list of available tools with their JSON schema parameters for a specific provider and model combination.
798
+ */
799
+ list(parameters, options) {
800
+ const params = buildClientParams([parameters], [
801
+ {
802
+ args: [
803
+ { in: "query", key: "directory" },
804
+ { in: "query", key: "workspace" },
805
+ { in: "query", key: "provider" },
806
+ { in: "query", key: "model" },
807
+ ],
808
+ },
809
+ ]);
810
+ return (options?.client ?? this.client).get({
811
+ url: "/experimental/tool",
812
+ ...options,
813
+ ...params,
814
+ });
815
+ }
816
+ }
744
817
  export class Worktree extends HeyApiClient {
745
818
  /**
746
819
  * Remove worktree
@@ -1446,6 +1519,7 @@ export class Session2 extends HeyApiClient {
1446
1519
  { in: "path", key: "sessionID" },
1447
1520
  { in: "query", key: "directory" },
1448
1521
  { in: "query", key: "workspace" },
1522
+ { in: "body", key: "messageID" },
1449
1523
  { in: "body", key: "agent" },
1450
1524
  { in: "body", key: "model" },
1451
1525
  { in: "body", key: "command" },
@@ -2609,6 +2683,27 @@ export class Vcs extends HeyApiClient {
2609
2683
  ...params,
2610
2684
  });
2611
2685
  }
2686
+ /**
2687
+ * Get VCS diff
2688
+ *
2689
+ * Retrieve the current git diff for the working tree or against the default branch.
2690
+ */
2691
+ diff(parameters, options) {
2692
+ const params = buildClientParams([parameters], [
2693
+ {
2694
+ args: [
2695
+ { in: "query", key: "directory" },
2696
+ { in: "query", key: "workspace" },
2697
+ { in: "query", key: "mode" },
2698
+ ],
2699
+ },
2700
+ ]);
2701
+ return (options?.client ?? this.client).get({
2702
+ url: "/vcs/diff",
2703
+ ...options,
2704
+ ...params,
2705
+ });
2706
+ }
2612
2707
  }
2613
2708
  export class Command extends HeyApiClient {
2614
2709
  /**
@@ -3376,14 +3471,14 @@ export class KiloClient extends HeyApiClient {
3376
3471
  get config() {
3377
3472
  return (this._config ??= new Config2({ client: this.client }));
3378
3473
  }
3379
- _tool;
3380
- get tool() {
3381
- return (this._tool ??= new Tool({ client: this.client }));
3382
- }
3383
3474
  _experimental;
3384
3475
  get experimental() {
3385
3476
  return (this._experimental ??= new Experimental({ client: this.client }));
3386
3477
  }
3478
+ _tool;
3479
+ get tool() {
3480
+ return (this._tool ??= new Tool({ client: this.client }));
3481
+ }
3387
3482
  _worktree;
3388
3483
  get worktree() {
3389
3484
  return (this._worktree ??= new Worktree({ client: this.client }));
@@ -1482,6 +1482,9 @@ export type OAuth = {
1482
1482
  export type ApiAuth = {
1483
1483
  type: "api";
1484
1484
  key: string;
1485
+ metadata?: {
1486
+ [key: string]: string;
1487
+ };
1485
1488
  };
1486
1489
  export type WellKnownAuth = {
1487
1490
  type: "wellknown";
@@ -1824,6 +1827,7 @@ export type Path = {
1824
1827
  };
1825
1828
  export type VcsInfo = {
1826
1829
  branch?: string;
1830
+ default_branch?: string;
1827
1831
  };
1828
1832
  export type Command = {
1829
1833
  name: string;
@@ -2394,6 +2398,70 @@ export type ConfigProvidersResponses = {
2394
2398
  };
2395
2399
  };
2396
2400
  export type ConfigProvidersResponse = ConfigProvidersResponses[keyof ConfigProvidersResponses];
2401
+ export type ExperimentalConsoleGetData = {
2402
+ body?: never;
2403
+ path?: never;
2404
+ query?: {
2405
+ directory?: string;
2406
+ workspace?: string;
2407
+ };
2408
+ url: "/experimental/console";
2409
+ };
2410
+ export type ExperimentalConsoleGetResponses = {
2411
+ /**
2412
+ * Active Console provider metadata
2413
+ */
2414
+ 200: {
2415
+ consoleManagedProviders: Array<string>;
2416
+ activeOrgName?: string;
2417
+ switchableOrgCount: number;
2418
+ };
2419
+ };
2420
+ export type ExperimentalConsoleGetResponse = ExperimentalConsoleGetResponses[keyof ExperimentalConsoleGetResponses];
2421
+ export type ExperimentalConsoleListOrgsData = {
2422
+ body?: never;
2423
+ path?: never;
2424
+ query?: {
2425
+ directory?: string;
2426
+ workspace?: string;
2427
+ };
2428
+ url: "/experimental/console/orgs";
2429
+ };
2430
+ export type ExperimentalConsoleListOrgsResponses = {
2431
+ /**
2432
+ * Switchable Console orgs
2433
+ */
2434
+ 200: {
2435
+ orgs: Array<{
2436
+ accountID: string;
2437
+ accountEmail: string;
2438
+ accountUrl: string;
2439
+ orgID: string;
2440
+ orgName: string;
2441
+ active: boolean;
2442
+ }>;
2443
+ };
2444
+ };
2445
+ export type ExperimentalConsoleListOrgsResponse = ExperimentalConsoleListOrgsResponses[keyof ExperimentalConsoleListOrgsResponses];
2446
+ export type ExperimentalConsoleSwitchOrgData = {
2447
+ body?: {
2448
+ accountID: string;
2449
+ orgID: string;
2450
+ };
2451
+ path?: never;
2452
+ query?: {
2453
+ directory?: string;
2454
+ workspace?: string;
2455
+ };
2456
+ url: "/experimental/console/switch";
2457
+ };
2458
+ export type ExperimentalConsoleSwitchOrgResponses = {
2459
+ /**
2460
+ * Switch success
2461
+ */
2462
+ 200: boolean;
2463
+ };
2464
+ export type ExperimentalConsoleSwitchOrgResponse = ExperimentalConsoleSwitchOrgResponses[keyof ExperimentalConsoleSwitchOrgResponses];
2397
2465
  export type ToolIdsData = {
2398
2466
  body?: never;
2399
2467
  path?: never;
@@ -3501,6 +3569,7 @@ export type SessionCommandResponses = {
3501
3569
  export type SessionCommandResponse = SessionCommandResponses[keyof SessionCommandResponses];
3502
3570
  export type SessionShellData = {
3503
3571
  body?: {
3572
+ messageID?: string;
3504
3573
  agent: string;
3505
3574
  model?: {
3506
3575
  providerID: string;
@@ -4635,6 +4704,23 @@ export type VcsGetResponses = {
4635
4704
  200: VcsInfo;
4636
4705
  };
4637
4706
  export type VcsGetResponse = VcsGetResponses[keyof VcsGetResponses];
4707
+ export type VcsDiffData = {
4708
+ body?: never;
4709
+ path?: never;
4710
+ query: {
4711
+ directory?: string;
4712
+ workspace?: string;
4713
+ mode: "git" | "branch";
4714
+ };
4715
+ url: "/vcs/diff";
4716
+ };
4717
+ export type VcsDiffResponses = {
4718
+ /**
4719
+ * VCS diff
4720
+ */
4721
+ 200: Array<FileDiff>;
4722
+ };
4723
+ export type VcsDiffResponse = VcsDiffResponses[keyof VcsDiffResponses];
4638
4724
  export type CommandListData = {
4639
4725
  body?: never;
4640
4726
  path?: never;
package/dist/v2/server.js CHANGED
@@ -1,4 +1,5 @@
1
- import { spawn } from "node:child_process";
1
+ import launch from "cross-spawn";
2
+ import { stop, bindAbort } from "../process.js";
2
3
  // kilocode_change start - Merge existing KILO_CONFIG_CONTENT with new config
3
4
  // This preserves Kilocode-injected modes when spawning nested CLI instances
4
5
  function mergeConfig(existing, incoming) {
@@ -40,21 +41,25 @@ export async function createKiloServer(options) {
40
41
  if (options.config?.logLevel)
41
42
  args.push(`--log-level=${options.config.logLevel}`);
42
43
  // kilocode_change start
43
- const proc = spawn(`kilo`, args, {
44
+ const proc = launch(`kilo`, args, {
44
45
  // kilocode_change end
45
- signal: options.signal,
46
- windowsHide: true,
47
46
  env: {
48
47
  ...process.env,
49
48
  KILO_CONFIG_CONTENT: buildConfigEnv(options.config), // kilocode_change
50
49
  },
51
50
  });
51
+ let clear = () => { };
52
52
  const url = await new Promise((resolve, reject) => {
53
53
  const id = setTimeout(() => {
54
+ clear();
55
+ stop(proc);
54
56
  reject(new Error(`Timeout waiting for server to start after ${options.timeout}ms`));
55
57
  }, options.timeout);
56
58
  let output = "";
59
+ let resolved = false;
57
60
  proc.stdout?.on("data", (chunk) => {
61
+ if (resolved)
62
+ return;
58
63
  output += chunk.toString();
59
64
  const lines = output.split("\n");
60
65
  for (const line of lines) {
@@ -63,9 +68,14 @@ export async function createKiloServer(options) {
63
68
  // kilocode_change end
64
69
  const match = line.match(/on\s+(https?:\/\/[^\s]+)/);
65
70
  if (!match) {
66
- throw new Error(`Failed to parse server url from output: ${line}`);
71
+ clear();
72
+ stop(proc);
73
+ clearTimeout(id);
74
+ reject(new Error(`Failed to parse server url from output: ${line}`));
75
+ return;
67
76
  }
68
77
  clearTimeout(id);
78
+ resolved = true;
69
79
  resolve(match[1]);
70
80
  return;
71
81
  }
@@ -86,17 +96,16 @@ export async function createKiloServer(options) {
86
96
  clearTimeout(id);
87
97
  reject(error);
88
98
  });
89
- if (options.signal) {
90
- options.signal.addEventListener("abort", () => {
91
- clearTimeout(id);
92
- reject(new Error("Aborted"));
93
- });
94
- }
99
+ clear = bindAbort(proc, options.signal, () => {
100
+ clearTimeout(id);
101
+ reject(options.signal?.reason);
102
+ });
95
103
  });
96
104
  return {
97
105
  url,
98
106
  close() {
99
- proc.kill();
107
+ clear();
108
+ stop(proc);
100
109
  },
101
110
  };
102
111
  }
@@ -115,9 +124,8 @@ export function createKiloTui(options) {
115
124
  args.push(`--agent=${options.agent}`);
116
125
  }
117
126
  // kilocode_change start
118
- const proc = spawn(`kilo`, args, {
127
+ const proc = launch(`kilo`, args, {
119
128
  // kilocode_change end
120
- signal: options?.signal,
121
129
  stdio: "inherit",
122
130
  windowsHide: true,
123
131
  env: {
@@ -125,9 +133,11 @@ export function createKiloTui(options) {
125
133
  KILO_CONFIG_CONTENT: buildConfigEnv(options?.config), // kilocode_change
126
134
  },
127
135
  });
136
+ const clear = bindAbort(proc, options?.signal);
128
137
  return {
129
138
  close() {
130
- proc.kill();
139
+ clear();
140
+ stop(proc);
131
141
  },
132
142
  };
133
143
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@kilocode/sdk",
4
- "version": "7.2.5",
4
+ "version": "7.2.6",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "scripts": {
@@ -44,11 +44,14 @@
44
44
  "devDependencies": {
45
45
  "@hey-api/openapi-ts": "0.90.10",
46
46
  "@tsconfig/node22": "22.0.2",
47
+ "@types/cross-spawn": "6.0.6",
47
48
  "@types/node": "22.13.9",
48
- "typescript": "5.8.2",
49
- "@typescript/native-preview": "7.0.0-dev.20260316.1"
49
+ "@typescript/native-preview": "7.0.0-dev.20260316.1",
50
+ "typescript": "5.8.2"
51
+ },
52
+ "dependencies": {
53
+ "cross-spawn": "7.0.6"
50
54
  },
51
- "dependencies": {},
52
55
  "peerDependencies": {},
53
56
  "repository": {
54
57
  "type": "git",