@vybestack/llxprt-code-core 0.1.14 → 0.1.15

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 (206) hide show
  1. package/README.md +53 -0
  2. package/dist/src/code_assist/oauth2.test.d.ts +1 -1
  3. package/dist/src/code_assist/oauth2.test.js +15 -15
  4. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  5. package/dist/src/config/config.d.ts +15 -1
  6. package/dist/src/config/config.js +27 -5
  7. package/dist/src/config/config.js.map +1 -1
  8. package/dist/src/config/config.test.js +5 -0
  9. package/dist/src/config/config.test.js.map +1 -1
  10. package/dist/src/config/flashFallback.test.js +12 -46
  11. package/dist/src/config/flashFallback.test.js.map +1 -1
  12. package/dist/src/config/models.d.ts +1 -0
  13. package/dist/src/config/models.js +1 -0
  14. package/dist/src/config/models.js.map +1 -1
  15. package/dist/src/core/client.d.ts +4 -0
  16. package/dist/src/core/client.js +75 -15
  17. package/dist/src/core/client.js.map +1 -1
  18. package/dist/src/core/client.test.d.ts +1 -1
  19. package/dist/src/core/client.test.js +204 -22
  20. package/dist/src/core/client.test.js.map +1 -1
  21. package/dist/src/core/contentGenerator.js +2 -7
  22. package/dist/src/core/contentGenerator.js.map +1 -1
  23. package/dist/src/core/contentGenerator.test.js +6 -2
  24. package/dist/src/core/contentGenerator.test.js.map +1 -1
  25. package/dist/src/core/coreToolScheduler.d.ts +1 -3
  26. package/dist/src/core/coreToolScheduler.js +9 -4
  27. package/dist/src/core/coreToolScheduler.js.map +1 -1
  28. package/dist/src/core/coreToolScheduler.test.js +76 -1
  29. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  30. package/dist/src/core/geminiChat.js +1 -0
  31. package/dist/src/core/geminiChat.js.map +1 -1
  32. package/dist/src/core/googleGenAIWrapper.d.ts +21 -0
  33. package/dist/src/core/googleGenAIWrapper.js +36 -0
  34. package/dist/src/core/googleGenAIWrapper.js.map +1 -0
  35. package/dist/src/core/googleGenAIWrapper.test.d.ts +6 -0
  36. package/dist/src/core/googleGenAIWrapper.test.js +104 -0
  37. package/dist/src/core/googleGenAIWrapper.test.js.map +1 -0
  38. package/dist/src/core/logger.d.ts +1 -0
  39. package/dist/src/core/logger.js +22 -8
  40. package/dist/src/core/logger.js.map +1 -1
  41. package/dist/src/core/logger.test.js +60 -9
  42. package/dist/src/core/logger.test.js.map +1 -1
  43. package/dist/src/core/nonInteractiveToolExecutor.js +8 -1
  44. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  45. package/dist/src/core/nonInteractiveToolExecutor.test.js +3 -1
  46. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  47. package/dist/src/core/prompts.js +1 -1
  48. package/dist/src/core/tokenLimits.js +1 -0
  49. package/dist/src/core/tokenLimits.js.map +1 -1
  50. package/dist/src/core/turn.d.ts +2 -1
  51. package/dist/src/core/turn.js +4 -2
  52. package/dist/src/core/turn.js.map +1 -1
  53. package/dist/src/core/turn.test.js +2 -2
  54. package/dist/src/core/turn.test.js.map +1 -1
  55. package/dist/src/ide/ide-client.d.ts +8 -6
  56. package/dist/src/ide/ide-client.js +73 -36
  57. package/dist/src/ide/ide-client.js.map +1 -1
  58. package/dist/src/ide/ideContext.d.ts +212 -107
  59. package/dist/src/ide/ideContext.js +45 -44
  60. package/dist/src/ide/ideContext.js.map +1 -1
  61. package/dist/src/ide/ideContext.test.js +254 -100
  62. package/dist/src/ide/ideContext.test.js.map +1 -1
  63. package/dist/src/index.d.ts +7 -0
  64. package/dist/src/index.js +9 -0
  65. package/dist/src/index.js.map +1 -1
  66. package/dist/src/integration-tests/todo-system.test.d.ts +6 -0
  67. package/dist/src/integration-tests/todo-system.test.js +610 -0
  68. package/dist/src/integration-tests/todo-system.test.js.map +1 -0
  69. package/dist/src/mcp/oauth-provider.d.ts +5 -1
  70. package/dist/src/mcp/oauth-provider.js +36 -11
  71. package/dist/src/mcp/oauth-provider.js.map +1 -1
  72. package/dist/src/mcp/oauth-provider.test.js +2 -2
  73. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  74. package/dist/src/mcp/oauth-token-storage.d.ts +3 -1
  75. package/dist/src/mcp/oauth-token-storage.js +3 -1
  76. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  77. package/dist/src/mcp/oauth-utils.js +2 -2
  78. package/dist/src/mcp/oauth-utils.js.map +1 -1
  79. package/dist/src/mcp/oauth-utils.test.js +1 -1
  80. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  81. package/dist/src/prompts/mcp-prompts.d.ts +8 -0
  82. package/dist/src/prompts/mcp-prompts.js +13 -0
  83. package/dist/src/prompts/mcp-prompts.js.map +1 -0
  84. package/dist/src/prompts/prompt-registry.d.ts +26 -0
  85. package/dist/src/prompts/prompt-registry.js +47 -0
  86. package/dist/src/prompts/prompt-registry.js.map +1 -0
  87. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js +24 -9
  88. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js.map +1 -1
  89. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +1 -1
  90. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +1 -1
  91. package/dist/src/providers/gemini/GeminiProvider.js +8 -16
  92. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  93. package/dist/src/providers/openai/OpenAIProvider.js +54 -6
  94. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  95. package/dist/src/services/complexity-analyzer.d.ts +92 -0
  96. package/dist/src/services/complexity-analyzer.js +287 -0
  97. package/dist/src/services/complexity-analyzer.js.map +1 -0
  98. package/dist/src/services/fileDiscoveryService.test.js +101 -60
  99. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  100. package/dist/src/services/gitService.test.d.ts +1 -1
  101. package/dist/src/services/gitService.test.js +65 -102
  102. package/dist/src/services/gitService.test.js.map +1 -1
  103. package/dist/src/services/index.d.ts +9 -0
  104. package/dist/src/services/index.js +8 -0
  105. package/dist/src/services/index.js.map +1 -0
  106. package/dist/src/services/loopDetectionService.d.ts +3 -0
  107. package/dist/src/services/loopDetectionService.js +18 -0
  108. package/dist/src/services/loopDetectionService.js.map +1 -1
  109. package/dist/src/services/loopDetectionService.test.js +90 -11
  110. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  111. package/dist/src/services/shellExecutionService.d.ts +70 -0
  112. package/dist/src/services/shellExecutionService.js +152 -0
  113. package/dist/src/services/shellExecutionService.js.map +1 -0
  114. package/dist/src/services/shellExecutionService.test.d.ts +6 -0
  115. package/dist/src/services/shellExecutionService.test.js +258 -0
  116. package/dist/src/services/shellExecutionService.test.js.map +1 -0
  117. package/dist/src/services/todo-reminder-service.d.ts +42 -0
  118. package/dist/src/services/todo-reminder-service.js +77 -0
  119. package/dist/src/services/todo-reminder-service.js.map +1 -0
  120. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +2 -1
  121. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +59 -31
  122. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  123. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +3 -1
  124. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +7 -0
  125. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  126. package/dist/src/telemetry/constants.d.ts +1 -0
  127. package/dist/src/telemetry/constants.js +1 -0
  128. package/dist/src/telemetry/constants.js.map +1 -1
  129. package/dist/src/telemetry/index.d.ts +2 -2
  130. package/dist/src/telemetry/index.js +2 -2
  131. package/dist/src/telemetry/index.js.map +1 -1
  132. package/dist/src/telemetry/loggers.d.ts +2 -1
  133. package/dist/src/telemetry/loggers.js +18 -1
  134. package/dist/src/telemetry/loggers.js.map +1 -1
  135. package/dist/src/telemetry/loggers.test.js +5 -0
  136. package/dist/src/telemetry/loggers.test.js.map +1 -1
  137. package/dist/src/telemetry/types.d.ts +8 -1
  138. package/dist/src/telemetry/types.js +12 -0
  139. package/dist/src/telemetry/types.js.map +1 -1
  140. package/dist/src/tools/edit.js +2 -1
  141. package/dist/src/tools/edit.js.map +1 -1
  142. package/dist/src/tools/glob.test.js +7 -4
  143. package/dist/src/tools/glob.test.js.map +1 -1
  144. package/dist/src/tools/grep.test.js +4 -4
  145. package/dist/src/tools/grep.test.js.map +1 -1
  146. package/dist/src/tools/mcp-client.d.ts +26 -2
  147. package/dist/src/tools/mcp-client.js +64 -21
  148. package/dist/src/tools/mcp-client.js.map +1 -1
  149. package/dist/src/tools/mcp-client.test.js +53 -1
  150. package/dist/src/tools/mcp-client.test.js.map +1 -1
  151. package/dist/src/tools/modifiable-tool.test.js +51 -62
  152. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  153. package/dist/src/tools/shell.d.ts +8 -3
  154. package/dist/src/tools/shell.js +169 -114
  155. package/dist/src/tools/shell.js.map +1 -1
  156. package/dist/src/tools/shell.test.d.ts +1 -1
  157. package/dist/src/tools/shell.test.js +298 -145
  158. package/dist/src/tools/shell.test.js.map +1 -1
  159. package/dist/src/tools/todo-read.d.ts +4 -1
  160. package/dist/src/tools/todo-read.js +136 -20
  161. package/dist/src/tools/todo-read.js.map +1 -1
  162. package/dist/src/tools/todo-read.test.js +10 -6
  163. package/dist/src/tools/todo-read.test.js.map +1 -1
  164. package/dist/src/tools/todo-schemas.d.ts +4 -4
  165. package/dist/src/tools/todo-write.d.ts +3 -0
  166. package/dist/src/tools/todo-write.js +96 -9
  167. package/dist/src/tools/todo-write.js.map +1 -1
  168. package/dist/src/tools/todo-write.test.js +17 -13
  169. package/dist/src/tools/todo-write.test.js.map +1 -1
  170. package/dist/src/tools/tool-context.d.ts +14 -0
  171. package/dist/src/tools/tool-context.js +7 -0
  172. package/dist/src/tools/tool-context.js.map +1 -0
  173. package/dist/src/tools/tool-registry.d.ts +4 -1
  174. package/dist/src/tools/tool-registry.js +14 -5
  175. package/dist/src/tools/tool-registry.js.map +1 -1
  176. package/dist/src/tools/tool-registry.test.js +2 -2
  177. package/dist/src/tools/tool-registry.test.js.map +1 -1
  178. package/dist/src/tools/tools.d.ts +8 -1
  179. package/dist/src/tools/tools.js +2 -0
  180. package/dist/src/tools/tools.js.map +1 -1
  181. package/dist/src/tools/web-fetch.js +18 -4
  182. package/dist/src/tools/web-fetch.js.map +1 -1
  183. package/dist/src/utils/bfsFileSearch.js +51 -27
  184. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  185. package/dist/src/utils/bfsFileSearch.test.js +57 -0
  186. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  187. package/dist/src/utils/formatters.d.ts +6 -0
  188. package/dist/src/utils/formatters.js +16 -0
  189. package/dist/src/utils/formatters.js.map +1 -0
  190. package/dist/src/utils/nextSpeakerChecker.js +2 -2
  191. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  192. package/dist/src/utils/nextSpeakerChecker.test.js +2 -2
  193. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  194. package/dist/src/utils/retry.d.ts +3 -0
  195. package/dist/src/utils/retry.js.map +1 -1
  196. package/dist/src/utils/retry.test.js.map +1 -1
  197. package/dist/src/utils/shell-utils.d.ts +37 -3
  198. package/dist/src/utils/shell-utils.js +110 -47
  199. package/dist/src/utils/shell-utils.js.map +1 -1
  200. package/dist/src/utils/shell-utils.test.js +146 -396
  201. package/dist/src/utils/shell-utils.test.js.map +1 -1
  202. package/dist/src/utils/textUtils.d.ts +13 -0
  203. package/dist/src/utils/textUtils.js +28 -0
  204. package/dist/src/utils/textUtils.js.map +1 -0
  205. package/package.json +2 -2
  206. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -3,12 +3,12 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { ideContext, OpenFilesNotificationSchema } from '../ide/ideContext.js';
6
+ import { ideContext, IdeContextNotificationSchema } from '../ide/ideContext.js';
7
7
  import { Client } from '@modelcontextprotocol/sdk/client/index.js';
8
8
  import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
9
9
  const logger = {
10
10
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
- debug: (...args) => console.debug('[DEBUG] [ImportProcessor]', ...args),
11
+ debug: (...args) => console.debug('[DEBUG] [IDEClient]', ...args),
12
12
  };
13
13
  export var IDEConnectionStatus;
14
14
  (function (IDEConnectionStatus) {
@@ -21,59 +21,96 @@ export var IDEConnectionStatus;
21
21
  */
22
22
  export class IdeClient {
23
23
  client = undefined;
24
- connectionStatus = IDEConnectionStatus.Disconnected;
24
+ state = {
25
+ status: IDEConnectionStatus.Disconnected,
26
+ };
25
27
  constructor() {
26
- this.connectToMcpServer().catch((err) => {
28
+ this.init().catch((err) => {
27
29
  logger.debug('Failed to initialize IdeClient:', err);
28
30
  });
29
31
  }
30
32
  getConnectionStatus() {
31
- let details;
32
- if (this.connectionStatus === IDEConnectionStatus.Disconnected) {
33
- if (!process.env['GEMINI_CLI_IDE_SERVER_PORT']) {
34
- details = 'GEMINI_CLI_IDE_SERVER_PORT environment variable is not set.';
35
- }
33
+ return this.state;
34
+ }
35
+ setState(status, details) {
36
+ this.state = { status, details };
37
+ if (status === IDEConnectionStatus.Disconnected) {
38
+ logger.debug('IDE integration is disconnected. ', details);
39
+ ideContext.clearIdeContext();
36
40
  }
37
- return {
38
- status: this.connectionStatus,
39
- details,
40
- };
41
41
  }
42
- async connectToMcpServer() {
43
- this.connectionStatus = IDEConnectionStatus.Connecting;
44
- const idePort = process.env['GEMINI_CLI_IDE_SERVER_PORT'];
45
- if (!idePort) {
46
- logger.debug('Unable to connect to IDE mode MCP server. GEMINI_CLI_IDE_SERVER_PORT environment variable is not set.');
47
- this.connectionStatus = IDEConnectionStatus.Disconnected;
42
+ getPortFromEnv() {
43
+ const port = process.env['LLXPRT_CODE_IDE_SERVER_PORT'];
44
+ if (!port) {
45
+ this.setState(IDEConnectionStatus.Disconnected, 'LLxprt Code Companion extension not found. Install via /ide install and restart the CLI in a fresh terminal window.');
46
+ return undefined;
47
+ }
48
+ return port;
49
+ }
50
+ validateWorkspacePath() {
51
+ const ideWorkspacePath = process.env['LLXPRT_CODE_IDE_WORKSPACE_PATH'];
52
+ if (!ideWorkspacePath) {
53
+ this.setState(IDEConnectionStatus.Disconnected, 'IDE integration requires a single workspace folder to be open in the IDE. Please ensure one folder is open and try again.');
54
+ return false;
55
+ }
56
+ if (ideWorkspacePath !== process.cwd()) {
57
+ this.setState(IDEConnectionStatus.Disconnected, `LLxprt Code is running in a different directory (${process.cwd()}) from the IDE's open workspace (${ideWorkspacePath}). Please run LLxprt Code in the same directory.`);
58
+ return false;
59
+ }
60
+ return true;
61
+ }
62
+ registerClientHandlers() {
63
+ if (!this.client) {
48
64
  return;
49
65
  }
66
+ this.client.setNotificationHandler(IdeContextNotificationSchema, (notification) => {
67
+ ideContext.setIdeContext(notification.params);
68
+ });
69
+ this.client.onerror = (_error) => {
70
+ this.setState(IDEConnectionStatus.Disconnected, 'Client error.');
71
+ };
72
+ this.client.onclose = () => {
73
+ this.setState(IDEConnectionStatus.Disconnected, 'Connection closed.');
74
+ };
75
+ }
76
+ async establishConnection(port) {
77
+ let transport;
50
78
  try {
51
79
  this.client = new Client({
52
80
  name: 'streamable-http-client',
53
81
  // TODO(#3487): use the CLI version here.
54
82
  version: '1.0.0',
55
83
  });
56
- const transport = new StreamableHTTPClientTransport(new URL(`http://localhost:${idePort}/mcp`));
84
+ transport = new StreamableHTTPClientTransport(new URL(`http://localhost:${port}/mcp`));
85
+ this.registerClientHandlers();
57
86
  await this.client.connect(transport);
58
- this.client.setNotificationHandler(OpenFilesNotificationSchema, (notification) => {
59
- ideContext.setOpenFilesContext(notification.params);
60
- });
61
- this.client.onerror = (error) => {
62
- logger.debug('IDE MCP client error:', error);
63
- this.connectionStatus = IDEConnectionStatus.Disconnected;
64
- ideContext.clearOpenFilesContext();
65
- };
66
- this.client.onclose = () => {
67
- logger.debug('IDE MCP client connection closed.');
68
- this.connectionStatus = IDEConnectionStatus.Disconnected;
69
- ideContext.clearOpenFilesContext();
70
- };
71
- this.connectionStatus = IDEConnectionStatus.Connected;
87
+ this.setState(IDEConnectionStatus.Connected);
72
88
  }
73
89
  catch (error) {
74
- this.connectionStatus = IDEConnectionStatus.Disconnected;
75
- logger.debug('Failed to connect to MCP server:', error);
90
+ this.setState(IDEConnectionStatus.Disconnected, `Failed to connect to IDE server: ${error}`);
91
+ if (transport) {
92
+ try {
93
+ await transport.close();
94
+ }
95
+ catch (closeError) {
96
+ logger.debug('Failed to close transport:', closeError);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ async init() {
102
+ if (this.state.status === IDEConnectionStatus.Connected) {
103
+ return;
104
+ }
105
+ this.setState(IDEConnectionStatus.Connecting);
106
+ if (!this.validateWorkspacePath()) {
107
+ return;
108
+ }
109
+ const port = this.getPortFromEnv();
110
+ if (!port) {
111
+ return;
76
112
  }
113
+ await this.establishConnection(port);
77
114
  }
78
115
  }
79
116
  //# sourceMappingURL=ide-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ide-client.js","sourceRoot":"","sources":["../../../src/ide/ide-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ide-client.js","sourceRoot":"","sources":["../../../src/ide/ide-client.ts"],"names":[],"mappings":"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"}
@@ -5,24 +5,12 @@
5
5
  */
6
6
  import { z } from 'zod';
7
7
  /**
8
- * Zod schema for validating a cursor position.
8
+ * Zod schema for validating a file context from the IDE.
9
9
  */
10
- export declare const CursorSchema: z.ZodObject<{
11
- line: z.ZodNumber;
12
- character: z.ZodNumber;
13
- }, "strip", z.ZodTypeAny, {
14
- line: number;
15
- character: number;
16
- }, {
17
- line: number;
18
- character: number;
19
- }>;
20
- export type Cursor = z.infer<typeof CursorSchema>;
21
- /**
22
- * Zod schema for validating an active file context from the IDE.
23
- */
24
- export declare const OpenFilesSchema: z.ZodObject<{
25
- activeFile: z.ZodString;
10
+ export declare const FileSchema: z.ZodObject<{
11
+ path: z.ZodString;
12
+ timestamp: z.ZodNumber;
13
+ isActive: z.ZodOptional<z.ZodBoolean>;
26
14
  selectedText: z.ZodOptional<z.ZodString>;
27
15
  cursor: z.ZodOptional<z.ZodObject<{
28
16
  line: z.ZodNumber;
@@ -34,141 +22,258 @@ export declare const OpenFilesSchema: z.ZodObject<{
34
22
  line: number;
35
23
  character: number;
36
24
  }>>;
37
- recentOpenFiles: z.ZodOptional<z.ZodArray<z.ZodObject<{
38
- filePath: z.ZodString;
39
- timestamp: z.ZodNumber;
40
- }, "strip", z.ZodTypeAny, {
41
- filePath: string;
42
- timestamp: number;
43
- }, {
44
- filePath: string;
45
- timestamp: number;
46
- }>, "many">>;
47
25
  }, "strip", z.ZodTypeAny, {
48
- activeFile: string;
26
+ path: string;
27
+ timestamp: number;
49
28
  cursor?: {
50
29
  line: number;
51
30
  character: number;
52
31
  } | undefined;
32
+ isActive?: boolean | undefined;
53
33
  selectedText?: string | undefined;
54
- recentOpenFiles?: {
55
- filePath: string;
56
- timestamp: number;
57
- }[] | undefined;
58
34
  }, {
59
- activeFile: string;
35
+ path: string;
36
+ timestamp: number;
60
37
  cursor?: {
61
38
  line: number;
62
39
  character: number;
63
40
  } | undefined;
41
+ isActive?: boolean | undefined;
64
42
  selectedText?: string | undefined;
65
- recentOpenFiles?: {
66
- filePath: string;
67
- timestamp: number;
68
- }[] | undefined;
69
43
  }>;
70
- export type OpenFiles = z.infer<typeof OpenFilesSchema>;
71
- /**
72
- * Zod schema for validating the 'ide/openFilesChanged' notification from the IDE.
73
- */
74
- export declare const OpenFilesNotificationSchema: z.ZodObject<{
75
- method: z.ZodLiteral<"ide/openFilesChanged">;
76
- params: z.ZodObject<{
77
- activeFile: z.ZodString;
78
- selectedText: z.ZodOptional<z.ZodString>;
79
- cursor: z.ZodOptional<z.ZodObject<{
80
- line: z.ZodNumber;
81
- character: z.ZodNumber;
82
- }, "strip", z.ZodTypeAny, {
83
- line: number;
84
- character: number;
85
- }, {
86
- line: number;
87
- character: number;
88
- }>>;
89
- recentOpenFiles: z.ZodOptional<z.ZodArray<z.ZodObject<{
90
- filePath: z.ZodString;
44
+ export type File = z.infer<typeof FileSchema>;
45
+ export declare const IdeContextSchema: z.ZodObject<{
46
+ workspaceState: z.ZodOptional<z.ZodObject<{
47
+ openFiles: z.ZodOptional<z.ZodArray<z.ZodObject<{
48
+ path: z.ZodString;
91
49
  timestamp: z.ZodNumber;
50
+ isActive: z.ZodOptional<z.ZodBoolean>;
51
+ selectedText: z.ZodOptional<z.ZodString>;
52
+ cursor: z.ZodOptional<z.ZodObject<{
53
+ line: z.ZodNumber;
54
+ character: z.ZodNumber;
55
+ }, "strip", z.ZodTypeAny, {
56
+ line: number;
57
+ character: number;
58
+ }, {
59
+ line: number;
60
+ character: number;
61
+ }>>;
92
62
  }, "strip", z.ZodTypeAny, {
93
- filePath: string;
63
+ path: string;
94
64
  timestamp: number;
65
+ cursor?: {
66
+ line: number;
67
+ character: number;
68
+ } | undefined;
69
+ isActive?: boolean | undefined;
70
+ selectedText?: string | undefined;
95
71
  }, {
96
- filePath: string;
72
+ path: string;
97
73
  timestamp: number;
74
+ cursor?: {
75
+ line: number;
76
+ character: number;
77
+ } | undefined;
78
+ isActive?: boolean | undefined;
79
+ selectedText?: string | undefined;
98
80
  }>, "many">>;
99
81
  }, "strip", z.ZodTypeAny, {
100
- activeFile: string;
101
- cursor?: {
102
- line: number;
103
- character: number;
104
- } | undefined;
105
- selectedText?: string | undefined;
106
- recentOpenFiles?: {
107
- filePath: string;
82
+ openFiles?: {
83
+ path: string;
108
84
  timestamp: number;
85
+ cursor?: {
86
+ line: number;
87
+ character: number;
88
+ } | undefined;
89
+ isActive?: boolean | undefined;
90
+ selectedText?: string | undefined;
109
91
  }[] | undefined;
110
92
  }, {
111
- activeFile: string;
112
- cursor?: {
113
- line: number;
114
- character: number;
115
- } | undefined;
116
- selectedText?: string | undefined;
117
- recentOpenFiles?: {
118
- filePath: string;
93
+ openFiles?: {
94
+ path: string;
119
95
  timestamp: number;
96
+ cursor?: {
97
+ line: number;
98
+ character: number;
99
+ } | undefined;
100
+ isActive?: boolean | undefined;
101
+ selectedText?: string | undefined;
120
102
  }[] | undefined;
103
+ }>>;
104
+ }, "strip", z.ZodTypeAny, {
105
+ workspaceState?: {
106
+ openFiles?: {
107
+ path: string;
108
+ timestamp: number;
109
+ cursor?: {
110
+ line: number;
111
+ character: number;
112
+ } | undefined;
113
+ isActive?: boolean | undefined;
114
+ selectedText?: string | undefined;
115
+ }[] | undefined;
116
+ } | undefined;
117
+ }, {
118
+ workspaceState?: {
119
+ openFiles?: {
120
+ path: string;
121
+ timestamp: number;
122
+ cursor?: {
123
+ line: number;
124
+ character: number;
125
+ } | undefined;
126
+ isActive?: boolean | undefined;
127
+ selectedText?: string | undefined;
128
+ }[] | undefined;
129
+ } | undefined;
130
+ }>;
131
+ export type IdeContext = z.infer<typeof IdeContextSchema>;
132
+ /**
133
+ * Zod schema for validating the 'ide/contextUpdate' notification from the IDE.
134
+ */
135
+ export declare const IdeContextNotificationSchema: z.ZodObject<{
136
+ method: z.ZodLiteral<"ide/contextUpdate">;
137
+ params: z.ZodObject<{
138
+ workspaceState: z.ZodOptional<z.ZodObject<{
139
+ openFiles: z.ZodOptional<z.ZodArray<z.ZodObject<{
140
+ path: z.ZodString;
141
+ timestamp: z.ZodNumber;
142
+ isActive: z.ZodOptional<z.ZodBoolean>;
143
+ selectedText: z.ZodOptional<z.ZodString>;
144
+ cursor: z.ZodOptional<z.ZodObject<{
145
+ line: z.ZodNumber;
146
+ character: z.ZodNumber;
147
+ }, "strip", z.ZodTypeAny, {
148
+ line: number;
149
+ character: number;
150
+ }, {
151
+ line: number;
152
+ character: number;
153
+ }>>;
154
+ }, "strip", z.ZodTypeAny, {
155
+ path: string;
156
+ timestamp: number;
157
+ cursor?: {
158
+ line: number;
159
+ character: number;
160
+ } | undefined;
161
+ isActive?: boolean | undefined;
162
+ selectedText?: string | undefined;
163
+ }, {
164
+ path: string;
165
+ timestamp: number;
166
+ cursor?: {
167
+ line: number;
168
+ character: number;
169
+ } | undefined;
170
+ isActive?: boolean | undefined;
171
+ selectedText?: string | undefined;
172
+ }>, "many">>;
173
+ }, "strip", z.ZodTypeAny, {
174
+ openFiles?: {
175
+ path: string;
176
+ timestamp: number;
177
+ cursor?: {
178
+ line: number;
179
+ character: number;
180
+ } | undefined;
181
+ isActive?: boolean | undefined;
182
+ selectedText?: string | undefined;
183
+ }[] | undefined;
184
+ }, {
185
+ openFiles?: {
186
+ path: string;
187
+ timestamp: number;
188
+ cursor?: {
189
+ line: number;
190
+ character: number;
191
+ } | undefined;
192
+ isActive?: boolean | undefined;
193
+ selectedText?: string | undefined;
194
+ }[] | undefined;
195
+ }>>;
196
+ }, "strip", z.ZodTypeAny, {
197
+ workspaceState?: {
198
+ openFiles?: {
199
+ path: string;
200
+ timestamp: number;
201
+ cursor?: {
202
+ line: number;
203
+ character: number;
204
+ } | undefined;
205
+ isActive?: boolean | undefined;
206
+ selectedText?: string | undefined;
207
+ }[] | undefined;
208
+ } | undefined;
209
+ }, {
210
+ workspaceState?: {
211
+ openFiles?: {
212
+ path: string;
213
+ timestamp: number;
214
+ cursor?: {
215
+ line: number;
216
+ character: number;
217
+ } | undefined;
218
+ isActive?: boolean | undefined;
219
+ selectedText?: string | undefined;
220
+ }[] | undefined;
221
+ } | undefined;
121
222
  }>;
122
223
  }, "strip", z.ZodTypeAny, {
123
- method: "ide/openFilesChanged";
224
+ method: "ide/contextUpdate";
124
225
  params: {
125
- activeFile: string;
126
- cursor?: {
127
- line: number;
128
- character: number;
226
+ workspaceState?: {
227
+ openFiles?: {
228
+ path: string;
229
+ timestamp: number;
230
+ cursor?: {
231
+ line: number;
232
+ character: number;
233
+ } | undefined;
234
+ isActive?: boolean | undefined;
235
+ selectedText?: string | undefined;
236
+ }[] | undefined;
129
237
  } | undefined;
130
- selectedText?: string | undefined;
131
- recentOpenFiles?: {
132
- filePath: string;
133
- timestamp: number;
134
- }[] | undefined;
135
238
  };
136
239
  }, {
137
- method: "ide/openFilesChanged";
240
+ method: "ide/contextUpdate";
138
241
  params: {
139
- activeFile: string;
140
- cursor?: {
141
- line: number;
142
- character: number;
242
+ workspaceState?: {
243
+ openFiles?: {
244
+ path: string;
245
+ timestamp: number;
246
+ cursor?: {
247
+ line: number;
248
+ character: number;
249
+ } | undefined;
250
+ isActive?: boolean | undefined;
251
+ selectedText?: string | undefined;
252
+ }[] | undefined;
143
253
  } | undefined;
144
- selectedText?: string | undefined;
145
- recentOpenFiles?: {
146
- filePath: string;
147
- timestamp: number;
148
- }[] | undefined;
149
254
  };
150
255
  }>;
151
- type OpenFilesSubscriber = (openFiles: OpenFiles | undefined) => void;
256
+ type IdeContextSubscriber = (ideContext: IdeContext | undefined) => void;
152
257
  /**
153
- * Creates a new store for managing the IDE's active file context.
258
+ * Creates a new store for managing the IDE's context.
154
259
  * This factory function encapsulates the state and logic, allowing for the creation
155
260
  * of isolated instances, which is particularly useful for testing.
156
261
  *
157
- * @returns An object with methods to interact with the active file context.
262
+ * @returns An object with methods to interact with the IDE context.
158
263
  */
159
264
  export declare function createIdeContextStore(): {
160
- setOpenFilesContext: (newOpenFiles: OpenFiles) => void;
161
- getOpenFilesContext: () => OpenFiles | undefined;
162
- subscribeToOpenFiles: (subscriber: OpenFilesSubscriber) => () => void;
163
- clearOpenFilesContext: () => void;
265
+ setIdeContext: (newIdeContext: IdeContext) => void;
266
+ getIdeContext: () => IdeContext | undefined;
267
+ subscribeToIdeContext: (subscriber: IdeContextSubscriber) => () => void;
268
+ clearIdeContext: () => void;
164
269
  };
165
270
  /**
166
271
  * The default, shared instance of the IDE context store for the application.
167
272
  */
168
273
  export declare const ideContext: {
169
- setOpenFilesContext: (newOpenFiles: OpenFiles) => void;
170
- getOpenFilesContext: () => OpenFiles | undefined;
171
- subscribeToOpenFiles: (subscriber: OpenFilesSubscriber) => () => void;
172
- clearOpenFilesContext: () => void;
274
+ setIdeContext: (newIdeContext: IdeContext) => void;
275
+ getIdeContext: () => IdeContext | undefined;
276
+ subscribeToIdeContext: (subscriber: IdeContextSubscriber) => () => void;
277
+ clearIdeContext: () => void;
173
278
  };
174
279
  export {};