@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,72 @@
1
+ import { ConfirmationService } from '../utils/confirmation-service.js';
2
+ export class ConfirmationTool {
3
+ confirmationService;
4
+ constructor() {
5
+ this.confirmationService = ConfirmationService.getInstance();
6
+ }
7
+ async requestConfirmation(request) {
8
+ try {
9
+ // If autoAccept is true, skip the confirmation dialog
10
+ if (request.autoAccept) {
11
+ return {
12
+ success: true,
13
+ output: `Auto-accepted: ${request.operation}(${request.filename})${request.description ? ` - ${request.description}` : ''}`
14
+ };
15
+ }
16
+ const options = {
17
+ operation: request.operation,
18
+ filename: request.filename,
19
+ showVSCodeOpen: request.showVSCodeOpen || false
20
+ };
21
+ // Determine operation type based on operation name
22
+ const operationType = request.operation.toLowerCase().includes('zsh') ? 'zsh' : 'file';
23
+ const result = await this.confirmationService.requestConfirmation(options, operationType);
24
+ if (result.confirmed) {
25
+ return {
26
+ success: true,
27
+ output: `User confirmed: ${request.operation}(${request.filename})${request.description ? ` - ${request.description}` : ''}${result.dontAskAgain ? ' (Don\'t ask again enabled)' : ''}`
28
+ };
29
+ }
30
+ else {
31
+ return {
32
+ success: false,
33
+ error: result.feedback || `User rejected: ${request.operation}(${request.filename})`
34
+ };
35
+ }
36
+ }
37
+ catch (error) {
38
+ return {
39
+ success: false,
40
+ error: `Confirmation error: ${error.message}`
41
+ };
42
+ }
43
+ }
44
+ async checkSessionAcceptance() {
45
+ try {
46
+ const sessionFlags = this.confirmationService.getSessionFlags();
47
+ // Return structured data without JSON output to avoid displaying raw JSON
48
+ return {
49
+ success: true,
50
+ data: {
51
+ fileOperationsAccepted: sessionFlags.fileOperations,
52
+ bashCommandsAccepted: sessionFlags.zshCommands,
53
+ allOperationsAccepted: sessionFlags.allOperations,
54
+ hasAnyAcceptance: sessionFlags.fileOperations || sessionFlags.zshCommands || sessionFlags.allOperations
55
+ }
56
+ };
57
+ }
58
+ catch (error) {
59
+ return {
60
+ success: false,
61
+ error: `Error checking session acceptance: ${error.message}`
62
+ };
63
+ }
64
+ }
65
+ resetSession() {
66
+ this.confirmationService.resetSession();
67
+ }
68
+ isPending() {
69
+ return this.confirmationService.isPending();
70
+ }
71
+ }
72
+ //# sourceMappingURL=confirmation-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmation-tool.js","sourceRoot":"","sources":["../../src/tools/confirmation-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ToolResult } from "../types/index.js";
2
+ import { ToolDiscovery } from "./tool-discovery.js";
3
+ export declare class EnvTool implements ToolDiscovery {
4
+ /**
5
+ * Get all environment variables
6
+ */
7
+ getAllEnv(): Promise<ToolResult>;
8
+ /**
9
+ * Get a specific environment variable by name
10
+ */
11
+ getEnv(varName: string): Promise<ToolResult>;
12
+ /**
13
+ * Search environment variables by pattern (case-insensitive)
14
+ */
15
+ searchEnv(pattern: string): Promise<ToolResult>;
16
+ getHandledToolNames(): string[];
17
+ }
@@ -0,0 +1,89 @@
1
+ import { getHandledToolNames } from "./tool-discovery.js";
2
+ export class EnvTool {
3
+ /**
4
+ * Get all environment variables
5
+ */
6
+ async getAllEnv() {
7
+ try {
8
+ const envVars = process.env;
9
+ const envList = Object.entries(envVars)
10
+ .sort(([a], [b]) => a.localeCompare(b))
11
+ .map(([key, value]) => `${key}=${value || ''}`)
12
+ .join('\n');
13
+ const count = Object.keys(envVars).length;
14
+ return {
15
+ success: true,
16
+ output: `Environment Variables (${count} total):\n${envList}`,
17
+ displayOutput: `Retrieved ${count} environment variables`
18
+ };
19
+ }
20
+ catch (error) {
21
+ return {
22
+ success: false,
23
+ error: `Error reading environment variables: ${error.message}`
24
+ };
25
+ }
26
+ }
27
+ /**
28
+ * Get a specific environment variable by name
29
+ */
30
+ async getEnv(varName) {
31
+ try {
32
+ const value = process.env[varName];
33
+ if (value === undefined) {
34
+ return {
35
+ success: false,
36
+ error: `Environment variable '${varName}' not found`
37
+ };
38
+ }
39
+ return {
40
+ success: true,
41
+ output: `${varName}=${value}`,
42
+ displayOutput: `Retrieved environment variable: ${varName}`
43
+ };
44
+ }
45
+ catch (error) {
46
+ return {
47
+ success: false,
48
+ error: `Error reading environment variable '${varName}': ${error.message}`
49
+ };
50
+ }
51
+ }
52
+ /**
53
+ * Search environment variables by pattern (case-insensitive)
54
+ */
55
+ async searchEnv(pattern) {
56
+ try {
57
+ const envVars = process.env;
58
+ const regex = new RegExp(pattern, 'i');
59
+ const matches = Object.entries(envVars)
60
+ .filter(([key, value]) => regex.test(key) || regex.test(value || ''))
61
+ .sort(([a], [b]) => a.localeCompare(b))
62
+ .map(([key, value]) => `${key}=${value || ''}`)
63
+ .join('\n');
64
+ const matchCount = matches.split('\n').filter(line => line.length > 0).length;
65
+ if (matchCount === 0) {
66
+ return {
67
+ success: true,
68
+ output: `No environment variables match pattern: ${pattern}`,
69
+ displayOutput: `No matches found for pattern: ${pattern}`
70
+ };
71
+ }
72
+ return {
73
+ success: true,
74
+ output: `Environment Variables matching '${pattern}' (${matchCount} found):\n${matches}`,
75
+ displayOutput: `Found ${matchCount} environment variables matching: ${pattern}`
76
+ };
77
+ }
78
+ catch (error) {
79
+ return {
80
+ success: false,
81
+ error: `Error searching environment variables: ${error.message}`
82
+ };
83
+ }
84
+ }
85
+ getHandledToolNames() {
86
+ return getHandledToolNames(this);
87
+ }
88
+ }
89
+ //# sourceMappingURL=env-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-tool.js","sourceRoot":"","sources":["../../src/tools/env-tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,OAAO,OAAO;IAClB;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;iBACpC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;iBACtC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;iBAC9C,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YAE1C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,0BAA0B,KAAK,aAAa,OAAO,EAAE;gBAC7D,aAAa,EAAE,aAAa,KAAK,wBAAwB;aAC1D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,wCAAwC,KAAK,CAAC,OAAO,EAAE;aAC/D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,yBAAyB,OAAO,aAAa;iBACrD,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,GAAG,OAAO,IAAI,KAAK,EAAE;gBAC7B,aAAa,EAAE,mCAAmC,OAAO,EAAE;aAC5D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,uCAAuC,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE;aAC3E,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAEvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;iBACpC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;iBACpE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;iBACtC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;iBAC9C,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YAE9E,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,2CAA2C,OAAO,EAAE;oBAC5D,aAAa,EAAE,iCAAiC,OAAO,EAAE;iBAC1D,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,mCAAmC,OAAO,MAAM,UAAU,aAAa,OAAO,EAAE;gBACxF,aAAa,EAAE,SAAS,UAAU,oCAAoC,OAAO,EAAE;aAChF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,0CAA0C,KAAK,CAAC,OAAO,EAAE;aACjE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,mBAAmB;QACjB,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import { ToolResult } from "../types/index.js";
2
+ import { ToolDiscovery } from "./tool-discovery.js";
3
+ export declare class FileConversionTool implements ToolDiscovery {
4
+ private agent;
5
+ setAgent(agent: any): void;
6
+ getHandledToolNames(): string[];
7
+ /**
8
+ * Read an XLSX file and return its contents.
9
+ * Uses read_xlsx.py script with multiple output format options.
10
+ */
11
+ readXlsx(filename: string, sheetName?: string, outputFormat?: "text" | "json" | "all-sheets-json" | "csv", output?: string): Promise<ToolResult>;
12
+ /**
13
+ * List all available sheets in an XLSX file.
14
+ */
15
+ listXlsxSheets(filename: string): Promise<ToolResult>;
16
+ }
@@ -0,0 +1,181 @@
1
+ import { exec } from "child_process";
2
+ import { promisify } from "util";
3
+ import { getHandledToolNames } from "./tool-discovery.js";
4
+ const execAsync = promisify(exec);
5
+ export class FileConversionTool {
6
+ agent; // Reference to the GrokAgent
7
+ setAgent(agent) {
8
+ this.agent = agent;
9
+ }
10
+ getHandledToolNames() {
11
+ return getHandledToolNames(this);
12
+ }
13
+ /**
14
+ * Read an XLSX file and return its contents.
15
+ * Uses read_xlsx.py script with multiple output format options.
16
+ */
17
+ async readXlsx(filename, sheetName, outputFormat, output) {
18
+ try {
19
+ if (!filename) {
20
+ return {
21
+ success: false,
22
+ error: "Filename is required",
23
+ output: "Filename is required"
24
+ };
25
+ }
26
+ // Escape filename for shell
27
+ const escapedFilename = filename.replace(/'/g, "'\\''");
28
+ // Build command using read_xlsx.py
29
+ let command = `read_xlsx.py '${escapedFilename}'`;
30
+ // Add sheet name if provided
31
+ if (sheetName) {
32
+ const escapedSheetName = sheetName.replace(/'/g, "'\\''");
33
+ command += ` --sheet '${escapedSheetName}'`;
34
+ }
35
+ // Add output format options
36
+ const format = outputFormat || "text";
37
+ switch (format) {
38
+ case "json":
39
+ command += " --json";
40
+ break;
41
+ case "all-sheets-json":
42
+ command += " --all-sheets-json";
43
+ break;
44
+ case "csv":
45
+ command += " --csv";
46
+ break;
47
+ case "text":
48
+ default:
49
+ // No additional flags for text format
50
+ break;
51
+ }
52
+ // Add output file if specified
53
+ if (output) {
54
+ const escapedOutput = output.replace(/'/g, "'\\''");
55
+ command += ` --output '${escapedOutput}'`;
56
+ }
57
+ try {
58
+ const { stdout, stderr } = await execAsync(command, {
59
+ timeout: 60000, // 60 second timeout
60
+ shell: '/bin/zsh'
61
+ });
62
+ // If there's stderr output and no stdout, it's an error
63
+ if (stderr && !stdout) {
64
+ return {
65
+ success: false,
66
+ error: `XLSX reading failed: ${stderr}`,
67
+ output: stderr
68
+ };
69
+ }
70
+ const result = stdout.trim();
71
+ // Create display output based on format
72
+ let displayOutput;
73
+ if (format === "json" || format === "all-sheets-json") {
74
+ try {
75
+ const jsonData = JSON.parse(result);
76
+ if (format === "all-sheets-json") {
77
+ const sheetCount = Object.keys(jsonData.sheets || {}).length;
78
+ displayOutput = `Read ${sheetCount} sheet(s) from ${filename}`;
79
+ }
80
+ else {
81
+ displayOutput = `Read ${jsonData.row_count || 0} row(s) from ${sheetName || jsonData.sheet_name || filename}`;
82
+ }
83
+ }
84
+ catch {
85
+ displayOutput = `Read XLSX file: ${filename}`;
86
+ }
87
+ }
88
+ else if (format === "csv") {
89
+ displayOutput = `Converted ${sheetName || 'default sheet'} to CSV`;
90
+ }
91
+ else {
92
+ displayOutput = `Read XLSX file: ${filename}${sheetName ? ` (sheet: ${sheetName})` : ''}`;
93
+ }
94
+ // If output file was specified, mention it in display
95
+ if (output) {
96
+ displayOutput += ` → ${output}`;
97
+ }
98
+ return {
99
+ success: true,
100
+ output: result,
101
+ displayOutput: displayOutput
102
+ };
103
+ }
104
+ catch (error) {
105
+ // Extract error details
106
+ const errorMessage = error.message || "Unknown error";
107
+ const stderr = error.stderr || "";
108
+ const stdout = error.stdout || "";
109
+ return {
110
+ success: false,
111
+ error: `XLSX reading failed (code ${error.code || 'unknown'}): ${errorMessage}${stderr ? '\nstderr: ' + stderr : ''}${stdout ? '\nstdout: ' + stdout : ''}`,
112
+ output: `Error code: ${error.code || 'unknown'}\n${errorMessage}${stderr ? '\nstderr: ' + stderr : ''}${stdout ? '\nstdout: ' + stdout : ''}`
113
+ };
114
+ }
115
+ }
116
+ catch (error) {
117
+ return {
118
+ success: false,
119
+ error: error instanceof Error ? error.message : "Unknown error reading XLSX file",
120
+ output: error instanceof Error ? error.message : "Unknown error reading XLSX file"
121
+ };
122
+ }
123
+ }
124
+ /**
125
+ * List all available sheets in an XLSX file.
126
+ */
127
+ async listXlsxSheets(filename) {
128
+ try {
129
+ if (!filename) {
130
+ return {
131
+ success: false,
132
+ error: "Filename is required",
133
+ output: "Filename is required"
134
+ };
135
+ }
136
+ // Escape filename for shell
137
+ const escapedFilename = filename.replace(/'/g, "'\\''");
138
+ // Build command to list sheets
139
+ const command = `read_xlsx.py '${escapedFilename}' --list-sheets`;
140
+ try {
141
+ const { stdout, stderr } = await execAsync(command, {
142
+ timeout: 30000, // 30 second timeout
143
+ shell: '/bin/zsh'
144
+ });
145
+ // If there's stderr output and no stdout, it's an error
146
+ if (stderr && !stdout) {
147
+ return {
148
+ success: false,
149
+ error: `XLSX sheet listing failed: ${stderr}`,
150
+ output: stderr
151
+ };
152
+ }
153
+ const output = stdout.trim();
154
+ return {
155
+ success: true,
156
+ output: output,
157
+ displayOutput: `Listed sheets in ${filename}`
158
+ };
159
+ }
160
+ catch (error) {
161
+ // Extract error details
162
+ const errorMessage = error.message || "Unknown error";
163
+ const stderr = error.stderr || "";
164
+ const stdout = error.stdout || "";
165
+ return {
166
+ success: false,
167
+ error: `XLSX sheet listing failed (code ${error.code || 'unknown'}): ${errorMessage}${stderr ? '\nstderr: ' + stderr : ''}${stdout ? '\nstdout: ' + stdout : ''}`,
168
+ output: `Error code: ${error.code || 'unknown'}\n${errorMessage}${stderr ? '\nstderr: ' + stderr : ''}${stdout ? '\nstdout: ' + stdout : ''}`
169
+ };
170
+ }
171
+ }
172
+ catch (error) {
173
+ return {
174
+ success: false,
175
+ error: error instanceof Error ? error.message : "Unknown error listing XLSX sheets",
176
+ output: error instanceof Error ? error.message : "Unknown error listing XLSX sheets"
177
+ };
178
+ }
179
+ }
180
+ }
181
+ //# sourceMappingURL=file-conversion-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-conversion-tool.js","sourceRoot":"","sources":["../../src/tools/file-conversion-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAiB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,OAAO,kBAAkB;IACrB,KAAK,CAAM,CAAC,6BAA6B;IAEjD,QAAQ,CAAC,KAAU;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,mBAAmB;QACjB,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CACZ,QAAgB,EAChB,SAAkB,EAClB,YAA0D,EAC1D,MAAe;QAEf,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,sBAAsB;oBAC7B,MAAM,EAAE,sBAAsB;iBAC/B,CAAC;YACJ,CAAC;YAED,4BAA4B;YAC5B,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAExD,mCAAmC;YACnC,IAAI,OAAO,GAAG,iBAAiB,eAAe,GAAG,CAAC;YAElD,6BAA6B;YAC7B,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC1D,OAAO,IAAI,aAAa,gBAAgB,GAAG,CAAC;YAC9C,CAAC;YAED,4BAA4B;YAC5B,MAAM,MAAM,GAAG,YAAY,IAAI,MAAM,CAAC;YACtC,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,MAAM;oBACT,OAAO,IAAI,SAAS,CAAC;oBACrB,MAAM;gBACR,KAAK,iBAAiB;oBACpB,OAAO,IAAI,oBAAoB,CAAC;oBAChC,MAAM;gBACR,KAAK,KAAK;oBACR,OAAO,IAAI,QAAQ,CAAC;oBACpB,MAAM;gBACR,KAAK,MAAM,CAAC;gBACZ;oBACE,sCAAsC;oBACtC,MAAM;YACV,CAAC;YAED,+BAA+B;YAC/B,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACpD,OAAO,IAAI,cAAc,aAAa,GAAG,CAAC;YAC5C,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE;oBAClD,OAAO,EAAE,KAAK,EAAE,oBAAoB;oBACpC,KAAK,EAAE,UAAU;iBAClB,CAAC,CAAC;gBAEH,wDAAwD;gBACxD,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;oBACtB,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,wBAAwB,MAAM,EAAE;wBACvC,MAAM,EAAE,MAAM;qBACf,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAE7B,wCAAwC;gBACxC,IAAI,aAAqB,CAAC;gBAC1B,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,iBAAiB,EAAE,CAAC;oBACtD,IAAI,CAAC;wBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBACpC,IAAI,MAAM,KAAK,iBAAiB,EAAE,CAAC;4BACjC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;4BAC7D,aAAa,GAAG,QAAQ,UAAU,kBAAkB,QAAQ,EAAE,CAAC;wBACjE,CAAC;6BAAM,CAAC;4BACN,aAAa,GAAG,QAAQ,QAAQ,CAAC,SAAS,IAAI,CAAC,gBAAgB,SAAS,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC;wBAChH,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,aAAa,GAAG,mBAAmB,QAAQ,EAAE,CAAC;oBAChD,CAAC;gBACH,CAAC;qBAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;oBAC5B,aAAa,GAAG,aAAa,SAAS,IAAI,eAAe,SAAS,CAAC;gBACrE,CAAC;qBAAM,CAAC;oBACN,aAAa,GAAG,mBAAmB,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC5F,CAAC;gBAED,sDAAsD;gBACtD,IAAI,MAAM,EAAE,CAAC;oBACX,aAAa,IAAI,MAAM,MAAM,EAAE,CAAC;gBAClC,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,MAAM;oBACd,aAAa,EAAE,aAAa;iBAC7B,CAAC;YACJ,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,wBAAwB;gBACxB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC;gBACtD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;gBAElC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,6BAA6B,KAAK,CAAC,IAAI,IAAI,SAAS,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC3J,MAAM,EAAE,eAAe,KAAK,CAAC,IAAI,IAAI,SAAS,KAAK,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;iBAC9I,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC;gBACjF,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC;aACnF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgB;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,sBAAsB;oBAC7B,MAAM,EAAE,sBAAsB;iBAC/B,CAAC;YACJ,CAAC;YAED,4BAA4B;YAC5B,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAExD,+BAA+B;YAC/B,MAAM,OAAO,GAAG,iBAAiB,eAAe,iBAAiB,CAAC;YAElE,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE;oBAClD,OAAO,EAAE,KAAK,EAAE,oBAAoB;oBACpC,KAAK,EAAE,UAAU;iBAClB,CAAC,CAAC;gBAEH,wDAAwD;gBACxD,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;oBACtB,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,8BAA8B,MAAM,EAAE;wBAC7C,MAAM,EAAE,MAAM;qBACf,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAE7B,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,MAAM;oBACd,aAAa,EAAE,oBAAoB,QAAQ,EAAE;iBAC9C,CAAC;YACJ,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,wBAAwB;gBACxB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC;gBACtD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;gBAElC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,mCAAmC,KAAK,CAAC,IAAI,IAAI,SAAS,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;oBACjK,MAAM,EAAE,eAAe,KAAK,CAAC,IAAI,IAAI,SAAS,KAAK,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;iBAC9I,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC;gBACnF,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC;aACrF,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import { ToolResult } from "../types/index.js";
2
+ import { ToolDiscovery } from "./tool-discovery.js";
3
+ export declare class ImageTool implements ToolDiscovery {
4
+ private agent;
5
+ setAgent(agent: any): void;
6
+ getHandledToolNames(): string[];
7
+ /**
8
+ * Generate an image using AI image generation.
9
+ * Uses generate_image_asl.sh script with Stable Diffusion.
10
+ */
11
+ generateImage(prompt: string, negativePrompt?: string, width?: number, height?: number, model?: string, sampler?: string, configScale?: number, numSteps?: number, nsfw?: boolean, name?: string, move?: boolean, seed?: number): Promise<ToolResult>;
12
+ /**
13
+ * Caption an image using AI image captioning.
14
+ * Uses joycaption script.
15
+ */
16
+ captionImage(filename: string, prompt?: string): Promise<ToolResult>;
17
+ /**
18
+ * Extract PNG metadata (generation settings) from a PNG file.
19
+ * Uses exiftool to read embedded generation parameters.
20
+ */
21
+ pngInfo(filename: string): Promise<ToolResult>;
22
+ }