@zds-ai/cli 0.1.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 (204) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +497 -0
  3. package/dist/agent/grok-agent.d.ts +250 -0
  4. package/dist/agent/grok-agent.js +2480 -0
  5. package/dist/agent/grok-agent.js.map +1 -0
  6. package/dist/agent/index.d.ts +14 -0
  7. package/dist/agent/index.js +136 -0
  8. package/dist/agent/index.js.map +1 -0
  9. package/dist/commands/mcp.d.ts +2 -0
  10. package/dist/commands/mcp.js +239 -0
  11. package/dist/commands/mcp.js.map +1 -0
  12. package/dist/grok/client.d.ts +55 -0
  13. package/dist/grok/client.js +276 -0
  14. package/dist/grok/client.js.map +1 -0
  15. package/dist/grok/tools.d.ts +8 -0
  16. package/dist/grok/tools.js +878 -0
  17. package/dist/grok/tools.js.map +1 -0
  18. package/dist/hooks/use-enhanced-input.d.ts +38 -0
  19. package/dist/hooks/use-enhanced-input.js +228 -0
  20. package/dist/hooks/use-enhanced-input.js.map +1 -0
  21. package/dist/hooks/use-input-handler.d.ts +36 -0
  22. package/dist/hooks/use-input-handler.js +1099 -0
  23. package/dist/hooks/use-input-handler.js.map +1 -0
  24. package/dist/hooks/use-input-history.d.ts +9 -0
  25. package/dist/hooks/use-input-history.js +61 -0
  26. package/dist/hooks/use-input-history.js.map +1 -0
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.js +869 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/mcp/client.d.ts +41 -0
  31. package/dist/mcp/client.js +224 -0
  32. package/dist/mcp/client.js.map +1 -0
  33. package/dist/mcp/config.d.ts +13 -0
  34. package/dist/mcp/config.js +56 -0
  35. package/dist/mcp/config.js.map +1 -0
  36. package/dist/mcp/transports.d.ts +53 -0
  37. package/dist/mcp/transports.js +256 -0
  38. package/dist/mcp/transports.js.map +1 -0
  39. package/dist/tools/character-tool.d.ts +27 -0
  40. package/dist/tools/character-tool.js +194 -0
  41. package/dist/tools/character-tool.js.map +1 -0
  42. package/dist/tools/clear-cache-tool.d.ts +14 -0
  43. package/dist/tools/clear-cache-tool.js +82 -0
  44. package/dist/tools/clear-cache-tool.js.map +1 -0
  45. package/dist/tools/confirmation-tool.d.ts +16 -0
  46. package/dist/tools/confirmation-tool.js +72 -0
  47. package/dist/tools/confirmation-tool.js.map +1 -0
  48. package/dist/tools/env-tool.d.ts +17 -0
  49. package/dist/tools/env-tool.js +89 -0
  50. package/dist/tools/env-tool.js.map +1 -0
  51. package/dist/tools/file-conversion-tool.d.ts +16 -0
  52. package/dist/tools/file-conversion-tool.js +181 -0
  53. package/dist/tools/file-conversion-tool.js.map +1 -0
  54. package/dist/tools/image-tool.d.ts +22 -0
  55. package/dist/tools/image-tool.js +268 -0
  56. package/dist/tools/image-tool.js.map +1 -0
  57. package/dist/tools/index.d.ts +14 -0
  58. package/dist/tools/index.js +15 -0
  59. package/dist/tools/index.js.map +1 -0
  60. package/dist/tools/internet-tool.d.ts +11 -0
  61. package/dist/tools/internet-tool.js +108 -0
  62. package/dist/tools/internet-tool.js.map +1 -0
  63. package/dist/tools/introspect-tool.d.ts +11 -0
  64. package/dist/tools/introspect-tool.js +243 -0
  65. package/dist/tools/introspect-tool.js.map +1 -0
  66. package/dist/tools/morph-editor.d.ts +38 -0
  67. package/dist/tools/morph-editor.js +318 -0
  68. package/dist/tools/morph-editor.js.map +1 -0
  69. package/dist/tools/restart-tool.d.ts +7 -0
  70. package/dist/tools/restart-tool.js +24 -0
  71. package/dist/tools/restart-tool.js.map +1 -0
  72. package/dist/tools/search.d.ts +71 -0
  73. package/dist/tools/search.js +340 -0
  74. package/dist/tools/search.js.map +1 -0
  75. package/dist/tools/task-tool.d.ts +19 -0
  76. package/dist/tools/task-tool.js +115 -0
  77. package/dist/tools/task-tool.js.map +1 -0
  78. package/dist/tools/text-editor.d.ts +35 -0
  79. package/dist/tools/text-editor.js +669 -0
  80. package/dist/tools/text-editor.js.map +1 -0
  81. package/dist/tools/tool-discovery.d.ts +20 -0
  82. package/dist/tools/tool-discovery.js +45 -0
  83. package/dist/tools/tool-discovery.js.map +1 -0
  84. package/dist/tools/zsh.d.ts +13 -0
  85. package/dist/tools/zsh.js +168 -0
  86. package/dist/tools/zsh.js.map +1 -0
  87. package/dist/types/index.d.ts +31 -0
  88. package/dist/types/index.js +2 -0
  89. package/dist/types/index.js.map +1 -0
  90. package/dist/ui/app.d.ts +7 -0
  91. package/dist/ui/app.js +99 -0
  92. package/dist/ui/app.js.map +1 -0
  93. package/dist/ui/components/active-task-status.d.ts +7 -0
  94. package/dist/ui/components/active-task-status.js +37 -0
  95. package/dist/ui/components/active-task-status.js.map +1 -0
  96. package/dist/ui/components/api-key-input.d.ts +7 -0
  97. package/dist/ui/components/api-key-input.js +80 -0
  98. package/dist/ui/components/api-key-input.js.map +1 -0
  99. package/dist/ui/components/backend-status.d.ts +7 -0
  100. package/dist/ui/components/backend-status.js +85 -0
  101. package/dist/ui/components/backend-status.js.map +1 -0
  102. package/dist/ui/components/chat-history.d.ts +8 -0
  103. package/dist/ui/components/chat-history.js +187 -0
  104. package/dist/ui/components/chat-history.js.map +1 -0
  105. package/dist/ui/components/chat-input.d.ts +9 -0
  106. package/dist/ui/components/chat-input.js +63 -0
  107. package/dist/ui/components/chat-input.js.map +1 -0
  108. package/dist/ui/components/chat-interface.d.ts +9 -0
  109. package/dist/ui/components/chat-interface.js +389 -0
  110. package/dist/ui/components/chat-interface.js.map +1 -0
  111. package/dist/ui/components/command-suggestions.d.ts +17 -0
  112. package/dist/ui/components/command-suggestions.js +22 -0
  113. package/dist/ui/components/command-suggestions.js.map +1 -0
  114. package/dist/ui/components/confirmation-dialog.d.ts +11 -0
  115. package/dist/ui/components/confirmation-dialog.js +105 -0
  116. package/dist/ui/components/confirmation-dialog.js.map +1 -0
  117. package/dist/ui/components/context-status.d.ts +7 -0
  118. package/dist/ui/components/context-status.js +36 -0
  119. package/dist/ui/components/context-status.js.map +1 -0
  120. package/dist/ui/components/diff-renderer.d.ts +13 -0
  121. package/dist/ui/components/diff-renderer.js +206 -0
  122. package/dist/ui/components/diff-renderer.js.map +1 -0
  123. package/dist/ui/components/loading-spinner.d.ts +8 -0
  124. package/dist/ui/components/loading-spinner.js +64 -0
  125. package/dist/ui/components/loading-spinner.js.map +1 -0
  126. package/dist/ui/components/mcp-status.d.ts +5 -0
  127. package/dist/ui/components/mcp-status.js +57 -0
  128. package/dist/ui/components/mcp-status.js.map +1 -0
  129. package/dist/ui/components/model-selection.d.ts +12 -0
  130. package/dist/ui/components/model-selection.js +17 -0
  131. package/dist/ui/components/model-selection.js.map +1 -0
  132. package/dist/ui/components/mood-status.d.ts +7 -0
  133. package/dist/ui/components/mood-status.js +34 -0
  134. package/dist/ui/components/mood-status.js.map +1 -0
  135. package/dist/ui/components/persona-status.d.ts +7 -0
  136. package/dist/ui/components/persona-status.js +34 -0
  137. package/dist/ui/components/persona-status.js.map +1 -0
  138. package/dist/ui/shared/max-sized-box.d.ts +8 -0
  139. package/dist/ui/shared/max-sized-box.js +6 -0
  140. package/dist/ui/shared/max-sized-box.js.map +1 -0
  141. package/dist/ui/utils/code-colorizer.d.ts +2 -0
  142. package/dist/ui/utils/code-colorizer.js +7 -0
  143. package/dist/ui/utils/code-colorizer.js.map +1 -0
  144. package/dist/ui/utils/colors.d.ts +14 -0
  145. package/dist/ui/utils/colors.js +15 -0
  146. package/dist/ui/utils/colors.js.map +1 -0
  147. package/dist/ui/utils/markdown-renderer.d.ts +4 -0
  148. package/dist/ui/utils/markdown-renderer.js +40 -0
  149. package/dist/ui/utils/markdown-renderer.js.map +1 -0
  150. package/dist/utils/auth-helper.d.ts +63 -0
  151. package/dist/utils/auth-helper.js +129 -0
  152. package/dist/utils/auth-helper.js.map +1 -0
  153. package/dist/utils/chat-history-manager-sqlite.d.ts +92 -0
  154. package/dist/utils/chat-history-manager-sqlite.js +334 -0
  155. package/dist/utils/chat-history-manager-sqlite.js.map +1 -0
  156. package/dist/utils/chat-history-manager.d.ts +87 -0
  157. package/dist/utils/chat-history-manager.js +273 -0
  158. package/dist/utils/chat-history-manager.js.map +1 -0
  159. package/dist/utils/chat-history-manager.json-backup.d.ts +69 -0
  160. package/dist/utils/chat-history-manager.json-backup.js +215 -0
  161. package/dist/utils/chat-history-manager.json-backup.js.map +1 -0
  162. package/dist/utils/confirmation-service.d.ts +46 -0
  163. package/dist/utils/confirmation-service.js +165 -0
  164. package/dist/utils/confirmation-service.js.map +1 -0
  165. package/dist/utils/custom-instructions.d.ts +1 -0
  166. package/dist/utils/custom-instructions.js +30 -0
  167. package/dist/utils/custom-instructions.js.map +1 -0
  168. package/dist/utils/database-connection.d.ts +27 -0
  169. package/dist/utils/database-connection.js +81 -0
  170. package/dist/utils/database-connection.js.map +1 -0
  171. package/dist/utils/database-schema.d.ts +17 -0
  172. package/dist/utils/database-schema.js +93 -0
  173. package/dist/utils/database-schema.js.map +1 -0
  174. package/dist/utils/error-logger.d.ts +13 -0
  175. package/dist/utils/error-logger.js +56 -0
  176. package/dist/utils/error-logger.js.map +1 -0
  177. package/dist/utils/hook-executor.d.ts +59 -0
  178. package/dist/utils/hook-executor.js +351 -0
  179. package/dist/utils/hook-executor.js.map +1 -0
  180. package/dist/utils/model-config.d.ts +28 -0
  181. package/dist/utils/model-config.js +42 -0
  182. package/dist/utils/model-config.js.map +1 -0
  183. package/dist/utils/path-utils.d.ts +4 -0
  184. package/dist/utils/path-utils.js +12 -0
  185. package/dist/utils/path-utils.js.map +1 -0
  186. package/dist/utils/settings-manager.d.ts +169 -0
  187. package/dist/utils/settings-manager.js +403 -0
  188. package/dist/utils/settings-manager.js.map +1 -0
  189. package/dist/utils/settings.d.ts +1 -0
  190. package/dist/utils/settings.js +4 -0
  191. package/dist/utils/settings.js.map +1 -0
  192. package/dist/utils/slash-commands.d.ts +25 -0
  193. package/dist/utils/slash-commands.js +454 -0
  194. package/dist/utils/slash-commands.js.map +1 -0
  195. package/dist/utils/startup-hook.d.ts +13 -0
  196. package/dist/utils/startup-hook.js +44 -0
  197. package/dist/utils/startup-hook.js.map +1 -0
  198. package/dist/utils/text-utils.d.ts +80 -0
  199. package/dist/utils/text-utils.js +182 -0
  200. package/dist/utils/text-utils.js.map +1 -0
  201. package/dist/utils/token-counter.d.ts +33 -0
  202. package/dist/utils/token-counter.js +78 -0
  203. package/dist/utils/token-counter.js.map +1 -0
  204. package/package.json +102 -0
@@ -0,0 +1,243 @@
1
+ import { getHandledToolNames } from "./tool-discovery.js";
2
+ import { getAllGrokTools } from "../grok/tools.js";
3
+ export class IntrospectTool {
4
+ agent; // Reference to the GrokAgent for accessing tool class info
5
+ setAgent(agent) {
6
+ this.agent = agent;
7
+ }
8
+ /**
9
+ * Introspect available tools and system information
10
+ */
11
+ async introspect(target) {
12
+ try {
13
+ if (!target || target === "help") {
14
+ return {
15
+ success: true,
16
+ output: `/introspect - Introspect available tools and environment
17
+
18
+ Usage:
19
+ /introspect tools - Show all available tools (internal and MCP)
20
+ /introspect tool:TOOL_NAME - Show schema for specific tool
21
+ /introspect commands - Show available slash commands
22
+ /introspect env - Show ZDS_AI_AGENT_* environment variables
23
+ /introspect context - Show context/token usage
24
+ /introspect all - Show tools, environment variables, and context
25
+
26
+ Examples:
27
+ # Discover what MCP tools are available
28
+ introspect("tools")
29
+
30
+ # Learn how to use a specific MCP tool (shows parameters, types, descriptions)
31
+ introspect("tool:mcp__tavily__tavily-search")
32
+
33
+ # Look up an internal tool's parameters
34
+ introspect("tool:viewFile")
35
+
36
+ # See available slash commands
37
+ introspect("commands")
38
+
39
+ # Check context/token usage
40
+ introspect("context")
41
+
42
+ Workflow for using unknown MCP tools:
43
+ 1. Call introspect("tools") to see all available tools
44
+ 2. Find the MCP tool you need (e.g., mcp__tavily__tavily-search)
45
+ 3. Call introspect("tool:mcp__tavily__tavily-search") to see its parameters
46
+ 4. Use the tool with the parameters you learned about`,
47
+ displayOutput: "Introspect help"
48
+ };
49
+ }
50
+ // Handle tool:TOOL_NAME format for specific tool schema lookup
51
+ if (target.startsWith("tool:")) {
52
+ const toolName = target.substring(5); // Remove "tool:" prefix
53
+ const allTools = await getAllGrokTools();
54
+ const tool = allTools.find(t => t.function.name === toolName);
55
+ if (!tool) {
56
+ return {
57
+ success: false,
58
+ error: `Tool not found: ${toolName}`
59
+ };
60
+ }
61
+ // Format the tool schema in a readable way
62
+ let output = `Tool: ${tool.function.name}\n`;
63
+ output += `Description: ${tool.function.description}\n\n`;
64
+ output += `Parameters:\n`;
65
+ const params = tool.function.parameters;
66
+ if (params && params.properties) {
67
+ const required = params.required || [];
68
+ const properties = params.properties;
69
+ Object.keys(properties).sort().forEach(paramName => {
70
+ const param = properties[paramName];
71
+ const isRequired = required.includes(paramName);
72
+ const requiredLabel = isRequired ? " (required)" : " (optional)";
73
+ output += ` ${paramName}${requiredLabel}\n`;
74
+ output += ` Type: ${param.type || 'unknown'}\n`;
75
+ if (param.description) {
76
+ output += ` Description: ${param.description}\n`;
77
+ }
78
+ if (param.enum) {
79
+ output += ` Allowed values: ${param.enum.join(', ')}\n`;
80
+ }
81
+ if (param.items) {
82
+ output += ` Items: ${JSON.stringify(param.items)}\n`;
83
+ }
84
+ if (param.default !== undefined) {
85
+ output += ` Default: ${param.default}\n`;
86
+ }
87
+ });
88
+ }
89
+ else {
90
+ output += " No parameters\n";
91
+ }
92
+ return {
93
+ success: true,
94
+ output,
95
+ displayOutput: `Schema for ${toolName}`
96
+ };
97
+ }
98
+ if (target === "commands") {
99
+ let output = "Available Slash Commands:\n\n";
100
+ output += "/context - Show context usage info\n";
101
+ output += "/context view - View conversation context as markdown\n";
102
+ output += "/context edit - Edit context JSON file\n";
103
+ output += "/clear - Clear chat history and start fresh\n";
104
+ output += "/exit or /quit - Exit the CLI\n";
105
+ return {
106
+ success: true,
107
+ output,
108
+ displayOutput: "Slash commands"
109
+ };
110
+ }
111
+ if (target === "all") {
112
+ // Get tools
113
+ const toolsResult = await this.introspect("tools");
114
+ // Get commands
115
+ const commandsResult = await this.introspect("commands");
116
+ // Get env
117
+ const envResult = await this.introspect("env");
118
+ // Get context
119
+ const contextResult = await this.introspect("context");
120
+ return {
121
+ success: true,
122
+ output: `${toolsResult.output}\n\n=== Slash Commands ===\n${commandsResult.output}\n\n=== Environment Variables ===\n${envResult.output}\n\n=== Context Usage ===\n${contextResult.output}`,
123
+ displayOutput: "Showing all introspection data"
124
+ };
125
+ }
126
+ if (target === "env") {
127
+ const envVars = Object.entries(process.env)
128
+ .filter(([key]) => key.startsWith("ZDS_AI_AGENT_"))
129
+ .sort(([a], [b]) => a.localeCompare(b))
130
+ .map(([key, value]) => `${key}=${value}`)
131
+ .join("\n");
132
+ const count = envVars ? envVars.split("\n").length : 0;
133
+ const output = envVars || "No ZDS_AI_AGENT_* environment variables found";
134
+ return {
135
+ success: true,
136
+ output,
137
+ displayOutput: `Found ${count} ZDS_AI_AGENT_* variables`
138
+ };
139
+ }
140
+ if (target === "context") {
141
+ if (!this.agent) {
142
+ return {
143
+ success: false,
144
+ error: "Agent not available for context introspection"
145
+ };
146
+ }
147
+ const currentTokens = this.agent.getCurrentTokenCount();
148
+ const maxContext = this.agent.getMaxContextSize();
149
+ const usagePercent = this.agent.getContextUsagePercent().toFixed(2);
150
+ const output = `Current: ${currentTokens} tokens
151
+ Maximum: ${maxContext} tokens
152
+ Usage: ${usagePercent}%`;
153
+ return {
154
+ success: true,
155
+ output,
156
+ displayOutput: `Context: ${currentTokens}/${maxContext} tokens (${usagePercent}%)`
157
+ };
158
+ }
159
+ if (target === "tools") {
160
+ // Check if the current model supports tools
161
+ const supportsTools = this.agent?.grokClient?.getSupportsTools();
162
+ if (supportsTools === false) {
163
+ return {
164
+ success: true,
165
+ output: "This model does not support tools.\n\nNo tools are available in chat-only mode.",
166
+ displayOutput: "This model does not support tools."
167
+ };
168
+ }
169
+ const allTools = await getAllGrokTools();
170
+ // Separate internal and MCP tools
171
+ const internalTools = allTools.filter(tool => !tool.function.name.startsWith("mcp__"));
172
+ const mcpTools = allTools.filter(tool => tool.function.name.startsWith("mcp__"));
173
+ let output = "Internal Tools:\n";
174
+ // Get tool class info from agent
175
+ const toolClassInfo = this.agent?.getToolClassInfo() || [];
176
+ // Create a mapping from tool names to descriptions
177
+ const toolDescriptions = new Map();
178
+ internalTools.forEach(tool => {
179
+ toolDescriptions.set(tool.function.name, tool.function.description);
180
+ });
181
+ // Sort classes and display their discovered methods
182
+ const sortedClasses = toolClassInfo.sort((a, b) => a.className.localeCompare(b.className));
183
+ sortedClasses.forEach(({ className, methods }) => {
184
+ if (methods.length > 0) {
185
+ output += ` ${className}:\n`;
186
+ methods.sort().forEach((methodName) => {
187
+ const description = toolDescriptions.get(methodName) || 'No description available';
188
+ output += ` ${methodName} (${description})\n`;
189
+ });
190
+ }
191
+ });
192
+ // Show MCP tools grouped by server
193
+ if (mcpTools.length > 0) {
194
+ output += "\n";
195
+ const toolsByServer = new Map();
196
+ mcpTools.forEach(tool => {
197
+ // Extract server name from tool name (format: mcp__serverName__toolName)
198
+ const parts = tool.function.name.split('__');
199
+ if (parts.length >= 3 && parts[0] === 'mcp') {
200
+ const serverName = parts[1];
201
+ const toolName = parts.slice(2).join('__');
202
+ if (!toolsByServer.has(serverName)) {
203
+ toolsByServer.set(serverName, []);
204
+ }
205
+ toolsByServer.get(serverName).push(toolName);
206
+ }
207
+ });
208
+ // Sort servers alphabetically
209
+ const sortedServers = Array.from(toolsByServer.keys()).sort();
210
+ sortedServers.forEach(serverName => {
211
+ output += `MCP Tools (${serverName}):\n`;
212
+ const tools = toolsByServer.get(serverName).sort();
213
+ tools.forEach(toolName => {
214
+ output += ` ${toolName} (mcp:${serverName})\n`;
215
+ });
216
+ });
217
+ }
218
+ if (internalTools.length === 0 && mcpTools.length === 0) {
219
+ output += "No tools available.\n";
220
+ }
221
+ return {
222
+ success: true,
223
+ output,
224
+ displayOutput: `Found ${internalTools.length} internal and ${mcpTools.length} MCP tools`
225
+ };
226
+ }
227
+ return {
228
+ success: false,
229
+ error: `Unknown introspect target: ${target}. Available targets: tools, commands, env, context, all`
230
+ };
231
+ }
232
+ catch (error) {
233
+ return {
234
+ success: false,
235
+ error: `Error during introspection: ${error.message}`
236
+ };
237
+ }
238
+ }
239
+ getHandledToolNames() {
240
+ return getHandledToolNames(this);
241
+ }
242
+ }
243
+ //# sourceMappingURL=introspect-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspect-tool.js","sourceRoot":"","sources":["../../src/tools/introspect-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { ToolResult } from "../types/index.js";
2
+ import { ToolDiscovery } from "./tool-discovery.js";
3
+ export declare class MorphEditorTool implements ToolDiscovery {
4
+ private confirmationService;
5
+ private morphApiKey;
6
+ private morphBaseUrl;
7
+ constructor(apiKey?: string);
8
+ /**
9
+ * Use this tool to make an edit to an existing file.
10
+ *
11
+ * This will be read by a less intelligent model, which will quickly apply the edit. You should make it clear what the edit is, while also minimizing the unchanged code you write.
12
+ * When writing the edit, you should specify each edit in sequence, with the special comment // ... existing code ... to represent unchanged code in between edited lines.
13
+ *
14
+ * For example:
15
+ *
16
+ * // ... existing code ...
17
+ * FIRST_EDIT
18
+ * // ... existing code ...
19
+ * SECOND_EDIT
20
+ * // ... existing code ...
21
+ * THIRD_EDIT
22
+ * // ... existing code ...
23
+ *
24
+ * You should still bias towards repeating as few lines of the original file as possible to convey the change.
25
+ * But, each edit should contain sufficient context of unchanged lines around the code you're editing to resolve ambiguity.
26
+ * DO NOT omit spans of pre-existing code (or comments) without using the // ... existing code ... comment to indicate its absence. If you omit the existing code comment, the model may inadvertently delete these lines.
27
+ * If you plan on deleting a section, you must provide context before and after to delete it. If the initial code is ```code \n Block 1 \n Block 2 \n Block 3 \n code```, and you want to remove Block 2, you would output ```// ... existing code ... \n Block 1 \n Block 3 \n // ... existing code ...```.
28
+ * Make sure it is clear what the edit should be, and where it should be applied.
29
+ * Make edits to a file in a single edit_file call instead of multiple edit_file calls to the same file. The apply model can handle many distinct edits at once.
30
+ */
31
+ editFile(targetFile: string, instructions: string, codeEdit: string): Promise<ToolResult>;
32
+ private callMorphApply;
33
+ private generateDiff;
34
+ view(filePath: string, viewRange?: [number, number]): Promise<ToolResult>;
35
+ setApiKey(apiKey: string): void;
36
+ getApiKey(): string;
37
+ getHandledToolNames(): string[];
38
+ }
@@ -0,0 +1,318 @@
1
+ import fs from "fs-extra";
2
+ import * as path from "path";
3
+ import axios from "axios";
4
+ import { ConfirmationService } from "../utils/confirmation-service.js";
5
+ import { getHandledToolNames } from "./tool-discovery.js";
6
+ export class MorphEditorTool {
7
+ confirmationService = ConfirmationService.getInstance();
8
+ morphApiKey;
9
+ morphBaseUrl = "https://api.morphllm.com/v1";
10
+ constructor(apiKey) {
11
+ this.morphApiKey = apiKey || process.env.MORPH_API_KEY || "";
12
+ if (!this.morphApiKey) {
13
+ console.warn("MORPH_API_KEY not found. Morph editor functionality will be limited.");
14
+ }
15
+ }
16
+ /**
17
+ * Use this tool to make an edit to an existing file.
18
+ *
19
+ * This will be read by a less intelligent model, which will quickly apply the edit. You should make it clear what the edit is, while also minimizing the unchanged code you write.
20
+ * When writing the edit, you should specify each edit in sequence, with the special comment // ... existing code ... to represent unchanged code in between edited lines.
21
+ *
22
+ * For example:
23
+ *
24
+ * // ... existing code ...
25
+ * FIRST_EDIT
26
+ * // ... existing code ...
27
+ * SECOND_EDIT
28
+ * // ... existing code ...
29
+ * THIRD_EDIT
30
+ * // ... existing code ...
31
+ *
32
+ * You should still bias towards repeating as few lines of the original file as possible to convey the change.
33
+ * But, each edit should contain sufficient context of unchanged lines around the code you're editing to resolve ambiguity.
34
+ * DO NOT omit spans of pre-existing code (or comments) without using the // ... existing code ... comment to indicate its absence. If you omit the existing code comment, the model may inadvertently delete these lines.
35
+ * If you plan on deleting a section, you must provide context before and after to delete it. If the initial code is ```code \n Block 1 \n Block 2 \n Block 3 \n code```, and you want to remove Block 2, you would output ```// ... existing code ... \n Block 1 \n Block 3 \n // ... existing code ...```.
36
+ * Make sure it is clear what the edit should be, and where it should be applied.
37
+ * Make edits to a file in a single edit_file call instead of multiple edit_file calls to the same file. The apply model can handle many distinct edits at once.
38
+ */
39
+ async editFile(targetFile, instructions, codeEdit) {
40
+ try {
41
+ const resolvedPath = path.resolve(targetFile);
42
+ if (!(await fs.pathExists(resolvedPath))) {
43
+ return {
44
+ success: false,
45
+ error: `File not found: ${targetFile}`,
46
+ };
47
+ }
48
+ if (!this.morphApiKey) {
49
+ return {
50
+ success: false,
51
+ error: "MORPH_API_KEY not configured. Please set your Morph API key.",
52
+ };
53
+ }
54
+ // Read the initial code
55
+ const initialCode = await fs.readFile(resolvedPath, "utf-8");
56
+ // If tool approval hook is configured, skip ConfirmationService (hook handles authorization)
57
+ const { getSettingsManager } = await import('../utils/settings-manager.js');
58
+ const settings = getSettingsManager();
59
+ const hasToolApprovalHook = !!settings.getToolApprovalHook();
60
+ // Check user confirmation before proceeding
61
+ const sessionFlags = this.confirmationService.getSessionFlags();
62
+ if (!hasToolApprovalHook && !sessionFlags.fileOperations && !sessionFlags.allOperations) {
63
+ const confirmationResult = await this.confirmationService.requestConfirmation({
64
+ operation: "Edit file with Morph Fast Apply",
65
+ filename: targetFile,
66
+ showVSCodeOpen: false,
67
+ content: `Instructions: ${instructions}\n\nEdit:\n${codeEdit}`,
68
+ }, "file");
69
+ if (!confirmationResult.confirmed) {
70
+ return {
71
+ success: false,
72
+ error: confirmationResult.feedback
73
+ ? `File edit canceled by user: ${confirmationResult.feedback}`
74
+ : "File edit canceled by user",
75
+ };
76
+ }
77
+ }
78
+ // Call Morph Fast Apply API
79
+ const mergedCode = await this.callMorphApply(instructions, initialCode, codeEdit);
80
+ // Write the merged code back to file
81
+ await fs.writeFile(resolvedPath, mergedCode, "utf-8");
82
+ // Generate diff for display
83
+ const oldLines = initialCode.split("\n");
84
+ const newLines = mergedCode.split("\n");
85
+ const diff = this.generateDiff(oldLines, newLines, targetFile);
86
+ return {
87
+ success: true,
88
+ output: diff,
89
+ };
90
+ }
91
+ catch (error) {
92
+ return {
93
+ success: false,
94
+ error: `Error editing ${targetFile} with Morph: ${error.message}`,
95
+ };
96
+ }
97
+ }
98
+ async callMorphApply(instructions, initialCode, editSnippet) {
99
+ try {
100
+ const response = await axios.post(`${this.morphBaseUrl}/chat/completions`, {
101
+ model: "morph-v3-large",
102
+ messages: [
103
+ {
104
+ role: "user",
105
+ content: `<instruction>${instructions}</instruction>\n<code>${initialCode}</code>\n<update>${editSnippet}</update>`,
106
+ },
107
+ ],
108
+ }, {
109
+ headers: {
110
+ "Authorization": `Bearer ${this.morphApiKey}`,
111
+ "Content-Type": "application/json",
112
+ },
113
+ });
114
+ if (!response.data.choices || !response.data.choices[0] || !response.data.choices[0].message) {
115
+ throw new Error("Invalid response format from Morph API");
116
+ }
117
+ return response.data.choices[0].message.content;
118
+ }
119
+ catch (error) {
120
+ if (error.response) {
121
+ throw new Error(`Morph API error (${error.response.status}): ${error.response.data}`);
122
+ }
123
+ throw error;
124
+ }
125
+ }
126
+ generateDiff(oldLines, newLines, filePath) {
127
+ const CONTEXT_LINES = 3;
128
+ const changes = [];
129
+ let i = 0, j = 0;
130
+ while (i < oldLines.length || j < newLines.length) {
131
+ while (i < oldLines.length && j < newLines.length && oldLines[i] === newLines[j]) {
132
+ i++;
133
+ j++;
134
+ }
135
+ if (i < oldLines.length || j < newLines.length) {
136
+ const changeStart = { old: i, new: j };
137
+ let oldEnd = i;
138
+ let newEnd = j;
139
+ while (oldEnd < oldLines.length || newEnd < newLines.length) {
140
+ let matchFound = false;
141
+ let matchLength = 0;
142
+ for (let k = 0; k < Math.min(2, oldLines.length - oldEnd, newLines.length - newEnd); k++) {
143
+ if (oldEnd + k < oldLines.length &&
144
+ newEnd + k < newLines.length &&
145
+ oldLines[oldEnd + k] === newLines[newEnd + k]) {
146
+ matchLength++;
147
+ }
148
+ else {
149
+ break;
150
+ }
151
+ }
152
+ if (matchLength >= 2 || (oldEnd >= oldLines.length && newEnd >= newLines.length)) {
153
+ matchFound = true;
154
+ }
155
+ if (matchFound) {
156
+ break;
157
+ }
158
+ if (oldEnd < oldLines.length)
159
+ oldEnd++;
160
+ if (newEnd < newLines.length)
161
+ newEnd++;
162
+ }
163
+ changes.push({
164
+ oldStart: changeStart.old,
165
+ oldEnd: oldEnd,
166
+ newStart: changeStart.new,
167
+ newEnd: newEnd
168
+ });
169
+ i = oldEnd;
170
+ j = newEnd;
171
+ }
172
+ }
173
+ const hunks = [];
174
+ let accumulatedOffset = 0;
175
+ for (let changeIdx = 0; changeIdx < changes.length; changeIdx++) {
176
+ const change = changes[changeIdx];
177
+ let contextStart = Math.max(0, change.oldStart - CONTEXT_LINES);
178
+ let contextEnd = Math.min(oldLines.length, change.oldEnd + CONTEXT_LINES);
179
+ if (hunks.length > 0) {
180
+ const lastHunk = hunks[hunks.length - 1];
181
+ const lastHunkEnd = lastHunk.oldStart + lastHunk.oldCount;
182
+ if (lastHunkEnd >= contextStart) {
183
+ const oldHunkEnd = lastHunk.oldStart + lastHunk.oldCount;
184
+ const newContextEnd = Math.min(oldLines.length, change.oldEnd + CONTEXT_LINES);
185
+ for (let idx = oldHunkEnd; idx < change.oldStart; idx++) {
186
+ lastHunk.lines.push({ type: ' ', content: oldLines[idx] });
187
+ }
188
+ for (let idx = change.oldStart; idx < change.oldEnd; idx++) {
189
+ lastHunk.lines.push({ type: '-', content: oldLines[idx] });
190
+ }
191
+ for (let idx = change.newStart; idx < change.newEnd; idx++) {
192
+ lastHunk.lines.push({ type: '+', content: newLines[idx] });
193
+ }
194
+ for (let idx = change.oldEnd; idx < newContextEnd && idx < oldLines.length; idx++) {
195
+ lastHunk.lines.push({ type: ' ', content: oldLines[idx] });
196
+ }
197
+ lastHunk.oldCount = newContextEnd - lastHunk.oldStart;
198
+ lastHunk.newCount = lastHunk.oldCount + (change.newEnd - change.newStart) - (change.oldEnd - change.oldStart);
199
+ continue;
200
+ }
201
+ }
202
+ const hunk = {
203
+ oldStart: contextStart + 1,
204
+ oldCount: contextEnd - contextStart,
205
+ newStart: contextStart + 1 + accumulatedOffset,
206
+ newCount: contextEnd - contextStart + (change.newEnd - change.newStart) - (change.oldEnd - change.oldStart),
207
+ lines: []
208
+ };
209
+ for (let idx = contextStart; idx < change.oldStart; idx++) {
210
+ hunk.lines.push({ type: ' ', content: oldLines[idx] });
211
+ }
212
+ for (let idx = change.oldStart; idx < change.oldEnd; idx++) {
213
+ hunk.lines.push({ type: '-', content: oldLines[idx] });
214
+ }
215
+ for (let idx = change.newStart; idx < change.newEnd; idx++) {
216
+ hunk.lines.push({ type: '+', content: newLines[idx] });
217
+ }
218
+ for (let idx = change.oldEnd; idx < contextEnd && idx < oldLines.length; idx++) {
219
+ hunk.lines.push({ type: ' ', content: oldLines[idx] });
220
+ }
221
+ hunks.push(hunk);
222
+ accumulatedOffset += (change.newEnd - change.newStart) - (change.oldEnd - change.oldStart);
223
+ }
224
+ let addedLines = 0;
225
+ let removedLines = 0;
226
+ for (const hunk of hunks) {
227
+ for (const line of hunk.lines) {
228
+ if (line.type === '+')
229
+ addedLines++;
230
+ if (line.type === '-')
231
+ removedLines++;
232
+ }
233
+ }
234
+ let summary = `Updated ${filePath} with Morph Fast Apply`;
235
+ if (addedLines > 0 && removedLines > 0) {
236
+ summary += ` - ${addedLines} addition${addedLines !== 1 ? "s" : ""} and ${removedLines} removal${removedLines !== 1 ? "s" : ""}`;
237
+ }
238
+ else if (addedLines > 0) {
239
+ summary += ` - ${addedLines} addition${addedLines !== 1 ? "s" : ""}`;
240
+ }
241
+ else if (removedLines > 0) {
242
+ summary += ` - ${removedLines} removal${removedLines !== 1 ? "s" : ""}`;
243
+ }
244
+ else if (changes.length === 0) {
245
+ return `No changes applied to ${filePath}`;
246
+ }
247
+ let diff = summary + "\n";
248
+ diff += `--- a/${filePath}\n`;
249
+ diff += `+++ b/${filePath}\n`;
250
+ for (const hunk of hunks) {
251
+ diff += `@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@\n`;
252
+ for (const line of hunk.lines) {
253
+ diff += `${line.type}${line.content}\n`;
254
+ }
255
+ }
256
+ return diff.trim();
257
+ }
258
+ async view(filePath, viewRange) {
259
+ try {
260
+ const resolvedPath = path.resolve(filePath);
261
+ if (await fs.pathExists(resolvedPath)) {
262
+ const stats = await fs.stat(resolvedPath);
263
+ if (stats.isDirectory()) {
264
+ const files = await fs.readdir(resolvedPath);
265
+ return {
266
+ success: true,
267
+ output: `Directory contents of ${filePath}:\n${files.join("\n")}`,
268
+ };
269
+ }
270
+ const content = await fs.readFile(resolvedPath, "utf-8");
271
+ const lines = content.split("\n");
272
+ if (viewRange) {
273
+ const [start, end] = viewRange;
274
+ const selectedLines = lines.slice(start - 1, end);
275
+ const numberedLines = selectedLines
276
+ .map((line, idx) => `${start + idx}: ${line}`)
277
+ .join("\n");
278
+ return {
279
+ success: true,
280
+ output: `Lines ${start}-${end} of ${filePath}:\n${numberedLines}`,
281
+ };
282
+ }
283
+ const totalLines = lines.length;
284
+ const displayLines = totalLines > 10 ? lines.slice(0, 10) : lines;
285
+ const numberedLines = displayLines
286
+ .map((line, idx) => `${idx + 1}: ${line}`)
287
+ .join("\n");
288
+ const additionalLinesMessage = totalLines > 10 ? `\n... +${totalLines - 10} lines` : "";
289
+ return {
290
+ success: true,
291
+ output: `Contents of ${filePath}:\n${numberedLines}${additionalLinesMessage}`,
292
+ };
293
+ }
294
+ else {
295
+ return {
296
+ success: false,
297
+ error: `File or directory not found: ${filePath}`,
298
+ };
299
+ }
300
+ }
301
+ catch (error) {
302
+ return {
303
+ success: false,
304
+ error: `Error viewing ${filePath}: ${error.message}`,
305
+ };
306
+ }
307
+ }
308
+ setApiKey(apiKey) {
309
+ this.morphApiKey = apiKey;
310
+ }
311
+ getApiKey() {
312
+ return this.morphApiKey;
313
+ }
314
+ getHandledToolNames() {
315
+ return getHandledToolNames(this);
316
+ }
317
+ }
318
+ //# sourceMappingURL=morph-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"morph-editor.js","sourceRoot":"","sources":["../../src/tools/morph-editor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ToolResult } from "../types/index.js";
2
+ export declare class RestartTool {
3
+ /**
4
+ * Restart the application by exiting with code 51
5
+ */
6
+ restart(): Promise<ToolResult>;
7
+ }