@rithamnatani/agentmux 1.5.39

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 (235) hide show
  1. package/README.md +440 -0
  2. package/dist/clientFilter.d.ts +5 -0
  3. package/dist/clientFilter.d.ts.map +1 -0
  4. package/dist/clientFilter.js +31 -0
  5. package/dist/clientFilter.js.map +1 -0
  6. package/dist/config.d.ts +28 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +112 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/constants.d.ts +115 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/constants.js +118 -0
  13. package/dist/constants.js.map +1 -0
  14. package/dist/execution.d.ts +23 -0
  15. package/dist/execution.d.ts.map +1 -0
  16. package/dist/execution.js +2 -0
  17. package/dist/execution.js.map +1 -0
  18. package/dist/httpServer.d.ts +12 -0
  19. package/dist/httpServer.d.ts.map +1 -0
  20. package/dist/httpServer.js +323 -0
  21. package/dist/httpServer.js.map +1 -0
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +98 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/logger.d.ts +19 -0
  27. package/dist/logger.d.ts.map +1 -0
  28. package/dist/logger.js +172 -0
  29. package/dist/logger.js.map +1 -0
  30. package/dist/modelCatalog.d.ts +15 -0
  31. package/dist/modelCatalog.d.ts.map +1 -0
  32. package/dist/modelCatalog.generated.json +80 -0
  33. package/dist/modelCatalog.js +81 -0
  34. package/dist/modelCatalog.js.map +1 -0
  35. package/dist/router/config.d.ts +13 -0
  36. package/dist/router/config.d.ts.map +1 -0
  37. package/dist/router/config.js +198 -0
  38. package/dist/router/config.js.map +1 -0
  39. package/dist/router/defaultConfig.d.ts +13 -0
  40. package/dist/router/defaultConfig.d.ts.map +1 -0
  41. package/dist/router/defaultConfig.js +82 -0
  42. package/dist/router/defaultConfig.js.map +1 -0
  43. package/dist/router/executor.d.ts +35 -0
  44. package/dist/router/executor.d.ts.map +1 -0
  45. package/dist/router/executor.js +189 -0
  46. package/dist/router/executor.js.map +1 -0
  47. package/dist/router/modelMetadata.d.ts +5 -0
  48. package/dist/router/modelMetadata.d.ts.map +1 -0
  49. package/dist/router/modelMetadata.js +81 -0
  50. package/dist/router/modelMetadata.js.map +1 -0
  51. package/dist/router/quota.d.ts +4 -0
  52. package/dist/router/quota.d.ts.map +1 -0
  53. package/dist/router/quota.js +5 -0
  54. package/dist/router/quota.js.map +1 -0
  55. package/dist/router/router.d.ts +3 -0
  56. package/dist/router/router.d.ts.map +1 -0
  57. package/dist/router/router.js +141 -0
  58. package/dist/router/router.js.map +1 -0
  59. package/dist/router/types.d.ts +86 -0
  60. package/dist/router/types.d.ts.map +1 -0
  61. package/dist/router/types.js +2 -0
  62. package/dist/router/types.js.map +1 -0
  63. package/dist/routerConfig.d.ts +14 -0
  64. package/dist/routerConfig.d.ts.map +1 -0
  65. package/dist/routerConfig.js +194 -0
  66. package/dist/routerConfig.js.map +1 -0
  67. package/dist/serverApp.d.ts +43 -0
  68. package/dist/serverApp.d.ts.map +1 -0
  69. package/dist/serverApp.js +618 -0
  70. package/dist/serverApp.js.map +1 -0
  71. package/dist/service/bootstrap.d.ts +3 -0
  72. package/dist/service/bootstrap.d.ts.map +1 -0
  73. package/dist/service/bootstrap.js +32 -0
  74. package/dist/service/bootstrap.js.map +1 -0
  75. package/dist/service/manager.d.ts +6 -0
  76. package/dist/service/manager.d.ts.map +1 -0
  77. package/dist/service/manager.js +318 -0
  78. package/dist/service/manager.js.map +1 -0
  79. package/dist/service/paths.d.ts +10 -0
  80. package/dist/service/paths.d.ts.map +1 -0
  81. package/dist/service/paths.js +57 -0
  82. package/dist/service/paths.js.map +1 -0
  83. package/dist/service/renderers.d.ts +7 -0
  84. package/dist/service/renderers.d.ts.map +1 -0
  85. package/dist/service/renderers.js +110 -0
  86. package/dist/service/renderers.js.map +1 -0
  87. package/dist/service/runtime.d.ts +14 -0
  88. package/dist/service/runtime.d.ts.map +1 -0
  89. package/dist/service/runtime.js +129 -0
  90. package/dist/service/runtime.js.map +1 -0
  91. package/dist/service/types.d.ts +33 -0
  92. package/dist/service/types.d.ts.map +1 -0
  93. package/dist/service/types.js +2 -0
  94. package/dist/service/types.js.map +1 -0
  95. package/dist/taskClientPolicy.d.ts +16 -0
  96. package/dist/taskClientPolicy.d.ts.map +1 -0
  97. package/dist/taskClientPolicy.js +44 -0
  98. package/dist/taskClientPolicy.js.map +1 -0
  99. package/dist/taskStore.d.ts +12 -0
  100. package/dist/taskStore.d.ts.map +1 -0
  101. package/dist/taskStore.js +30 -0
  102. package/dist/taskStore.js.map +1 -0
  103. package/dist/tierConfig.d.ts +16 -0
  104. package/dist/tierConfig.d.ts.map +1 -0
  105. package/dist/tierConfig.js +70 -0
  106. package/dist/tierConfig.js.map +1 -0
  107. package/dist/tools/ask-claude.tool.d.ts +3 -0
  108. package/dist/tools/ask-claude.tool.d.ts.map +1 -0
  109. package/dist/tools/ask-claude.tool.js +30 -0
  110. package/dist/tools/ask-claude.tool.js.map +1 -0
  111. package/dist/tools/ask-codex.tool.d.ts +3 -0
  112. package/dist/tools/ask-codex.tool.d.ts.map +1 -0
  113. package/dist/tools/ask-codex.tool.js +29 -0
  114. package/dist/tools/ask-codex.tool.js.map +1 -0
  115. package/dist/tools/ask-cursor.tool.d.ts +3 -0
  116. package/dist/tools/ask-cursor.tool.d.ts.map +1 -0
  117. package/dist/tools/ask-cursor.tool.js +30 -0
  118. package/dist/tools/ask-cursor.tool.js.map +1 -0
  119. package/dist/tools/ask-gemini.tool.d.ts +3 -0
  120. package/dist/tools/ask-gemini.tool.d.ts.map +1 -0
  121. package/dist/tools/ask-gemini.tool.js +40 -0
  122. package/dist/tools/ask-gemini.tool.js.map +1 -0
  123. package/dist/tools/ask-opencode.tool.d.ts +3 -0
  124. package/dist/tools/ask-opencode.tool.d.ts.map +1 -0
  125. package/dist/tools/ask-opencode.tool.js +29 -0
  126. package/dist/tools/ask-opencode.tool.js.map +1 -0
  127. package/dist/tools/ask-router.tool.d.ts +20 -0
  128. package/dist/tools/ask-router.tool.d.ts.map +1 -0
  129. package/dist/tools/ask-router.tool.js +550 -0
  130. package/dist/tools/ask-router.tool.js.map +1 -0
  131. package/dist/tools/fetch-chunk.tool.d.ts +3 -0
  132. package/dist/tools/fetch-chunk.tool.d.ts.map +1 -0
  133. package/dist/tools/fetch-chunk.tool.js +58 -0
  134. package/dist/tools/fetch-chunk.tool.js.map +1 -0
  135. package/dist/tools/get-run.tool.d.ts +3 -0
  136. package/dist/tools/get-run.tool.d.ts.map +1 -0
  137. package/dist/tools/get-run.tool.js +53 -0
  138. package/dist/tools/get-run.tool.js.map +1 -0
  139. package/dist/tools/important-read-now.tool.d.ts +3 -0
  140. package/dist/tools/important-read-now.tool.d.ts.map +1 -0
  141. package/dist/tools/important-read-now.tool.js +31 -0
  142. package/dist/tools/important-read-now.tool.js.map +1 -0
  143. package/dist/tools/index.d.ts +12 -0
  144. package/dist/tools/index.d.ts.map +1 -0
  145. package/dist/tools/index.js +59 -0
  146. package/dist/tools/index.js.map +1 -0
  147. package/dist/tools/opencode-copilot-usage.tool.d.ts +3 -0
  148. package/dist/tools/opencode-copilot-usage.tool.d.ts.map +1 -0
  149. package/dist/tools/opencode-copilot-usage.tool.js +85 -0
  150. package/dist/tools/opencode-copilot-usage.tool.js.map +1 -0
  151. package/dist/tools/recommend-route.tool.d.ts +3 -0
  152. package/dist/tools/recommend-route.tool.d.ts.map +1 -0
  153. package/dist/tools/recommend-route.tool.js +88 -0
  154. package/dist/tools/recommend-route.tool.js.map +1 -0
  155. package/dist/tools/registry.d.ts +31 -0
  156. package/dist/tools/registry.d.ts.map +1 -0
  157. package/dist/tools/registry.js +105 -0
  158. package/dist/tools/registry.js.map +1 -0
  159. package/dist/tools/simple-tools.d.ts +12 -0
  160. package/dist/tools/simple-tools.d.ts.map +1 -0
  161. package/dist/tools/simple-tools.js +121 -0
  162. package/dist/tools/simple-tools.js.map +1 -0
  163. package/dist/tools/test-tool.example.d.ts +13 -0
  164. package/dist/tools/test-tool.example.d.ts.map +1 -0
  165. package/dist/tools/test-tool.example.js +32 -0
  166. package/dist/tools/test-tool.example.js.map +1 -0
  167. package/dist/tools/tiered-request.tool.d.ts +3 -0
  168. package/dist/tools/tiered-request.tool.d.ts.map +1 -0
  169. package/dist/tools/tiered-request.tool.js +147 -0
  170. package/dist/tools/tiered-request.tool.js.map +1 -0
  171. package/dist/utils/changeModeChunker.d.ts +11 -0
  172. package/dist/utils/changeModeChunker.d.ts.map +1 -0
  173. package/dist/utils/changeModeChunker.js +89 -0
  174. package/dist/utils/changeModeChunker.js.map +1 -0
  175. package/dist/utils/changeModeParser.d.ts +15 -0
  176. package/dist/utils/changeModeParser.d.ts.map +1 -0
  177. package/dist/utils/changeModeParser.js +67 -0
  178. package/dist/utils/changeModeParser.js.map +1 -0
  179. package/dist/utils/changeModeTranslator.d.ts +8 -0
  180. package/dist/utils/changeModeTranslator.d.ts.map +1 -0
  181. package/dist/utils/changeModeTranslator.js +70 -0
  182. package/dist/utils/changeModeTranslator.js.map +1 -0
  183. package/dist/utils/chunkCache.d.ts +22 -0
  184. package/dist/utils/chunkCache.d.ts.map +1 -0
  185. package/dist/utils/chunkCache.js +147 -0
  186. package/dist/utils/chunkCache.js.map +1 -0
  187. package/dist/utils/claudeExecutor.d.ts +3 -0
  188. package/dist/utils/claudeExecutor.d.ts.map +1 -0
  189. package/dist/utils/claudeExecutor.js +21 -0
  190. package/dist/utils/claudeExecutor.js.map +1 -0
  191. package/dist/utils/cliDetector.d.ts +20 -0
  192. package/dist/utils/cliDetector.d.ts.map +1 -0
  193. package/dist/utils/cliDetector.js +95 -0
  194. package/dist/utils/cliDetector.js.map +1 -0
  195. package/dist/utils/codexExecutor.d.ts +3 -0
  196. package/dist/utils/codexExecutor.d.ts.map +1 -0
  197. package/dist/utils/codexExecutor.js +19 -0
  198. package/dist/utils/codexExecutor.js.map +1 -0
  199. package/dist/utils/commandExecutor.d.ts +29 -0
  200. package/dist/utils/commandExecutor.d.ts.map +1 -0
  201. package/dist/utils/commandExecutor.js +487 -0
  202. package/dist/utils/commandExecutor.js.map +1 -0
  203. package/dist/utils/cursorCli.d.ts +3 -0
  204. package/dist/utils/cursorCli.d.ts.map +1 -0
  205. package/dist/utils/cursorCli.js +20 -0
  206. package/dist/utils/cursorCli.js.map +1 -0
  207. package/dist/utils/cursorExecutor.d.ts +3 -0
  208. package/dist/utils/cursorExecutor.d.ts.map +1 -0
  209. package/dist/utils/cursorExecutor.js +22 -0
  210. package/dist/utils/cursorExecutor.js.map +1 -0
  211. package/dist/utils/geminiExecutor.d.ts +4 -0
  212. package/dist/utils/geminiExecutor.d.ts.map +1 -0
  213. package/dist/utils/geminiExecutor.js +131 -0
  214. package/dist/utils/geminiExecutor.js.map +1 -0
  215. package/dist/utils/githubCli.d.ts +22 -0
  216. package/dist/utils/githubCli.d.ts.map +1 -0
  217. package/dist/utils/githubCli.js +131 -0
  218. package/dist/utils/githubCli.js.map +1 -0
  219. package/dist/utils/opencodeCatalog.d.ts +33 -0
  220. package/dist/utils/opencodeCatalog.d.ts.map +1 -0
  221. package/dist/utils/opencodeCatalog.js +171 -0
  222. package/dist/utils/opencodeCatalog.js.map +1 -0
  223. package/dist/utils/opencodeExecutor.d.ts +3 -0
  224. package/dist/utils/opencodeExecutor.d.ts.map +1 -0
  225. package/dist/utils/opencodeExecutor.js +16 -0
  226. package/dist/utils/opencodeExecutor.js.map +1 -0
  227. package/dist/utils/timeoutManager.d.ts +2 -0
  228. package/dist/utils/timeoutManager.d.ts.map +1 -0
  229. package/dist/utils/timeoutManager.js +2 -0
  230. package/dist/utils/timeoutManager.js.map +1 -0
  231. package/dist/utils/worktrunkIsolation.d.ts +26 -0
  232. package/dist/utils/worktrunkIsolation.d.ts.map +1 -0
  233. package/dist/utils/worktrunkIsolation.js +80 -0
  234. package/dist/utils/worktrunkIsolation.js.map +1 -0
  235. package/package.json +72 -0
@@ -0,0 +1,70 @@
1
+ export function formatChangeModeResponse(edits, chunkInfo) {
2
+ const header = chunkInfo && chunkInfo.total > 1
3
+ ? `[CHANGEMODE OUTPUT - Chunk ${chunkInfo.current} of ${chunkInfo.total}]
4
+
5
+ Gemini has analyzed your codebase and generated edits across ${chunkInfo.total} chunks.
6
+ This chunk contains ${edits.length} complete edit${edits.length === 1 ? '' : 's'} that can be applied independently.
7
+
8
+ Each chunk contains self-contained edits grouped by file. You can safely apply these edits
9
+ before fetching the next chunk.
10
+
11
+ `
12
+ : `[CHANGEMODE OUTPUT - Gemini has analyzed the files and provided these edits]
13
+
14
+ I have prepared ${edits.length} modification${edits.length === 1 ? '' : 's'} for your codebase.
15
+
16
+ IMPORTANT: Apply these edits directly WITHOUT reading the files first. The edits below contain exact text matches from the current file contents.
17
+
18
+ `;
19
+ const instructions = edits.map((edit, index) => {
20
+ return `### Edit ${index + 1}: ${edit.filename}
21
+
22
+ Replace this exact text:
23
+ \`\`\`
24
+ ${edit.oldCode}
25
+ \`\`\`
26
+
27
+ With this text:
28
+ \`\`\`
29
+ ${edit.newCode}
30
+ \`\`\`
31
+ `;
32
+ }).join('\n');
33
+ let footer = `
34
+ ---
35
+ Apply these edits in order. Each edit uses exact string matching, so the old_str must match exactly what appears between the code blocks.`;
36
+ if (chunkInfo && chunkInfo.current < chunkInfo.total && chunkInfo.cacheKey) {
37
+ footer += `
38
+
39
+ ---
40
+ **Next Step**: After applying the edits above, retrieve the next chunk (${chunkInfo.current + 1} of ${chunkInfo.total}) using:
41
+
42
+ \`\`\`
43
+ fetch-chunk cacheKey="${chunkInfo.cacheKey}" chunkIndex=${chunkInfo.current + 1}
44
+ \`\`\`
45
+
46
+ There ${chunkInfo.total - chunkInfo.current === 1 ? 'is' : 'are'} ${chunkInfo.total - chunkInfo.current} more chunk${chunkInfo.total - chunkInfo.current === 1 ? '' : 's'} containing additional edits.
47
+
48
+ **CONTINUE**: You are working on a multi-chunk changeMode response. After applying these edits, fetch the next chunk to continue with the remaining modifications.`;
49
+ }
50
+ return header + instructions + footer;
51
+ }
52
+ export function summarizeChangeModeEdits(edits, isPartialView) {
53
+ const fileGroups = new Map();
54
+ // Count edits per file
55
+ for (const edit of edits) {
56
+ fileGroups.set(edit.filename, (fileGroups.get(edit.filename) || 0) + 1);
57
+ }
58
+ const summary = Array.from(fileGroups.entries())
59
+ .map(([file, count]) => `- ${file}: ${count} edit${count === 1 ? '' : 's'}`)
60
+ .join('\n');
61
+ const title = isPartialView
62
+ ? `ChangeMode Summary (Complete analysis across all chunks):`
63
+ : `ChangeMode Summary:`;
64
+ return `${title}
65
+ Total edits: ${edits.length}${isPartialView ? ' (across all chunks)' : ''}
66
+ Files affected: ${fileGroups.size}
67
+
68
+ ${summary}`;
69
+ }
70
+ //# sourceMappingURL=changeModeTranslator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeModeTranslator.js","sourceRoot":"","sources":["../../src/utils/changeModeTranslator.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,wBAAwB,CACtC,KAAuB,EACvB,SAAiE;IAEjE,MAAM,MAAM,GAAG,SAAS,IAAI,SAAS,CAAC,KAAK,GAAG,CAAC;QAC7C,CAAC,CAAC,8BAA8B,SAAS,CAAC,OAAO,OAAO,SAAS,CAAC,KAAK;;+DAEZ,SAAS,CAAC,KAAK;sBACxD,KAAK,CAAC,MAAM,iBAAiB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;;;;;CAK/E;QACG,CAAC,CAAC;;kBAEY,KAAK,CAAC,MAAM,gBAAgB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;;;;CAI1E,CAAC;IAEA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC7C,OAAO,YAAY,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ;;;;EAIhD,IAAI,CAAC,OAAO;;;;;EAKZ,IAAI,CAAC,OAAO;;CAEb,CAAC;IACA,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,IAAI,MAAM,GAAG;;0IAE2H,CAAC;IACzI,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC3E,MAAM,IAAI;;;0EAG4D,SAAS,CAAC,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,KAAK;;;wBAG7F,SAAS,CAAC,QAAQ,gBAAgB,SAAS,CAAC,OAAO,GAAG,CAAC;;;QAGvE,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,cAAc,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;;mKAEN,CAAC;IAClK,CAAC;IACD,OAAO,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;AACxC,CAAC;AAGD,MAAM,UAAU,wBAAwB,CAAC,KAAuB,EAAE,aAAuB;IACvF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,uBAAuB;IACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SAC3E,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,aAAa;QACzB,CAAC,CAAC,2DAA2D;QAC7D,CAAC,CAAC,qBAAqB,CAAC;IAC1B,OAAO,GAAG,KAAK;eACF,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE;kBACvD,UAAU,CAAC,IAAI;;EAE/B,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { EditChunk } from './changeModeChunker.js';
2
+ /**
3
+ * Caches chunks from a changeMode response
4
+ * @param prompt The original prompt (used for hash generation)
5
+ * @param chunks The parsed and chunked edits
6
+ * @returns A short cache key for retrieval
7
+ */
8
+ export declare function cacheChunks(prompt: string, chunks: EditChunk[]): string;
9
+ /**
10
+ * Retrieves cached chunks if they exist and haven't expired
11
+ * @param cacheKey The cache key returned from cacheChunks
12
+ * @returns The cached chunks or null if expired/not found
13
+ */
14
+ export declare function getChunks(cacheKey: string): EditChunk[] | null;
15
+ export declare function getCacheStats(): {
16
+ size: number;
17
+ ttl: number;
18
+ maxSize: number;
19
+ cacheDir: string;
20
+ };
21
+ export declare function clearCache(): void;
22
+ //# sourceMappingURL=chunkCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunkCache.d.ts","sourceRoot":"","sources":["../../src/utils/chunkCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAqBnD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAuBvE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI,CAuB9D;AAsDD,wBAAgB,aAAa,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAehG;AAED,wBAAgB,UAAU,IAAI,IAAI,CAajC"}
@@ -0,0 +1,147 @@
1
+ import { createHash } from 'crypto';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import * as os from 'os';
5
+ const CACHE_DIR = path.join(os.tmpdir(), 'agentmux-chunks');
6
+ const CACHE_TTL = 10 * 60 * 1000;
7
+ const MAX_CACHE_FILES = 50;
8
+ function ensureCacheDir() {
9
+ if (!fs.existsSync(CACHE_DIR)) {
10
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
11
+ }
12
+ }
13
+ /**
14
+ * Caches chunks from a changeMode response
15
+ * @param prompt The original prompt (used for hash generation)
16
+ * @param chunks The parsed and chunked edits
17
+ * @returns A short cache key for retrieval
18
+ */
19
+ export function cacheChunks(prompt, chunks) {
20
+ ensureCacheDir();
21
+ cleanExpiredFiles(); // Cleanup on each write
22
+ // Generate deterministic cache key from prompt
23
+ const promptHash = createHash('sha256').update(prompt).digest('hex');
24
+ const cacheKey = promptHash.slice(0, 8);
25
+ const filePath = path.join(CACHE_DIR, `${cacheKey}.json`);
26
+ // Store with metadata
27
+ const cacheData = {
28
+ chunks,
29
+ timestamp: Date.now(),
30
+ promptHash
31
+ };
32
+ try {
33
+ fs.writeFileSync(filePath, JSON.stringify(cacheData));
34
+ }
35
+ catch {
36
+ // cache write failure is non-critical
37
+ }
38
+ enforceFileLimits();
39
+ return cacheKey;
40
+ }
41
+ /**
42
+ * Retrieves cached chunks if they exist and haven't expired
43
+ * @param cacheKey The cache key returned from cacheChunks
44
+ * @returns The cached chunks or null if expired/not found
45
+ */
46
+ export function getChunks(cacheKey) {
47
+ const filePath = path.join(CACHE_DIR, `${cacheKey}.json`);
48
+ try {
49
+ if (!fs.existsSync(filePath)) {
50
+ return null;
51
+ }
52
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
53
+ const data = JSON.parse(fileContent);
54
+ if (Date.now() - data.timestamp > CACHE_TTL) {
55
+ fs.unlinkSync(filePath);
56
+ return null;
57
+ }
58
+ return data.chunks;
59
+ }
60
+ catch {
61
+ try {
62
+ fs.unlinkSync(filePath); // Clean up bad file
63
+ }
64
+ catch { }
65
+ return null;
66
+ }
67
+ }
68
+ function cleanExpiredFiles() {
69
+ try {
70
+ ensureCacheDir();
71
+ const files = fs.readdirSync(CACHE_DIR);
72
+ const now = Date.now();
73
+ for (const file of files) {
74
+ if (!file.endsWith('.json'))
75
+ continue;
76
+ const filePath = path.join(CACHE_DIR, file);
77
+ try {
78
+ const stats = fs.statSync(filePath);
79
+ if (now - stats.mtimeMs > CACHE_TTL) {
80
+ fs.unlinkSync(filePath);
81
+ }
82
+ }
83
+ catch {
84
+ // Individual file error - continue with others
85
+ }
86
+ }
87
+ }
88
+ catch {
89
+ // Non-critical cleanup failure
90
+ }
91
+ }
92
+ // maximum file count limit (FIFO) --> LRU?
93
+ function enforceFileLimits() {
94
+ try {
95
+ const files = fs.readdirSync(CACHE_DIR)
96
+ .filter(f => f.endsWith('.json'))
97
+ .map(f => ({
98
+ name: f,
99
+ path: path.join(CACHE_DIR, f),
100
+ mtime: fs.statSync(path.join(CACHE_DIR, f)).mtimeMs
101
+ }))
102
+ .sort((a, b) => a.mtime - b.mtime); // Oldest first
103
+ // Remove oldest files if over limit
104
+ if (files.length > MAX_CACHE_FILES) {
105
+ const toRemove = files.slice(0, files.length - MAX_CACHE_FILES);
106
+ for (const file of toRemove) {
107
+ try {
108
+ fs.unlinkSync(file.path);
109
+ }
110
+ catch { }
111
+ }
112
+ }
113
+ }
114
+ catch {
115
+ // Non-critical enforcement failure
116
+ }
117
+ }
118
+ export function getCacheStats() {
119
+ ensureCacheDir();
120
+ let size = 0;
121
+ try {
122
+ const files = fs.readdirSync(CACHE_DIR);
123
+ size = files.filter(f => f.endsWith('.json')).length;
124
+ }
125
+ catch { }
126
+ return {
127
+ size,
128
+ ttl: CACHE_TTL,
129
+ maxSize: MAX_CACHE_FILES,
130
+ cacheDir: CACHE_DIR
131
+ };
132
+ }
133
+ export function clearCache() {
134
+ try {
135
+ ensureCacheDir();
136
+ const files = fs.readdirSync(CACHE_DIR);
137
+ for (const file of files) {
138
+ if (file.endsWith('.json')) {
139
+ fs.unlinkSync(path.join(CACHE_DIR, file));
140
+ }
141
+ }
142
+ }
143
+ catch {
144
+ // cache clear failure is non-critical
145
+ }
146
+ }
147
+ //# sourceMappingURL=chunkCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunkCache.js","sourceRoot":"","sources":["../../src/utils/chunkCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolExecutionContext } from '../execution.js';
2
+ export declare function executeClaudeCLI(prompt: string, model: string, permissionMode?: string, maxBudgetUsd?: number, systemPrompt?: string, context?: ToolExecutionContext): Promise<string>;
3
+ //# sourceMappingURL=claudeExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeExecutor.d.ts","sourceRoot":"","sources":["../../src/utils/claudeExecutor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
@@ -0,0 +1,21 @@
1
+ import { executeCommand } from './commandExecutor.js';
2
+ import { CLI } from '../constants.js';
3
+ export async function executeClaudeCLI(prompt, model, permissionMode, maxBudgetUsd, systemPrompt, context) {
4
+ const args = [
5
+ CLI.CLAUDE_FLAGS.PRINT,
6
+ CLI.CLAUDE_FLAGS.OUTPUT_FORMAT, "text",
7
+ CLI.CLAUDE_FLAGS.MODEL, model,
8
+ prompt,
9
+ ];
10
+ if (permissionMode) {
11
+ args.push(CLI.CLAUDE_FLAGS.PERMISSION_MODE, permissionMode);
12
+ }
13
+ if (maxBudgetUsd !== undefined) {
14
+ args.push(CLI.CLAUDE_FLAGS.MAX_BUDGET, String(maxBudgetUsd));
15
+ }
16
+ if (systemPrompt) {
17
+ args.push(CLI.CLAUDE_FLAGS.SYSTEM_PROMPT, systemPrompt);
18
+ }
19
+ return executeCommand(CLI.COMMANDS.CLAUDE, args, context);
20
+ }
21
+ //# sourceMappingURL=claudeExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeExecutor.js","sourceRoot":"","sources":["../../src/utils/claudeExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAGtC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,KAAa,EACb,cAAuB,EACvB,YAAqB,EACrB,YAAqB,EACrB,OAA8B;IAE9B,MAAM,IAAI,GAAa;QACrB,GAAG,CAAC,YAAY,CAAC,KAAK;QACtB,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM;QACtC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK;QAC7B,MAAM;KACP,CAAC;IAEF,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Logger } from "../logger.js";
2
+ /**
3
+ * Check if a command exists on the system PATH.
4
+ * Uses `which` on Unix/macOS, `where` on Windows.
5
+ * Always resolves to a boolean — never rejects.
6
+ */
7
+ export declare function commandExists(command: string, timeoutMs?: number, logger?: Logger): Promise<boolean>;
8
+ export interface CliAvailability {
9
+ gemini: boolean;
10
+ codex: boolean;
11
+ claude: boolean;
12
+ opencode: boolean;
13
+ cursor: boolean;
14
+ }
15
+ /**
16
+ * Detect which of the four supported CLIs are available on the system.
17
+ * Runs all four checks in parallel for speed.
18
+ */
19
+ export declare function detectAvailableClis(timeoutMs?: number, logger?: Logger): Promise<CliAvailability>;
20
+ //# sourceMappingURL=cliDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliDetector.d.ts","sourceRoot":"","sources":["../../src/utils/cliDetector.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CA6DlB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC,CAuB1B"}
@@ -0,0 +1,95 @@
1
+ import { spawn } from "child_process";
2
+ import { existsSync } from "fs";
3
+ import { CLI } from "../constants.js";
4
+ import { getCursorCommandCandidates } from "./cursorCli.js";
5
+ const isWindows = process.platform === "win32";
6
+ /**
7
+ * Check if a command exists on the system PATH.
8
+ * Uses `which` on Unix/macOS, `where` on Windows.
9
+ * Always resolves to a boolean — never rejects.
10
+ */
11
+ export async function commandExists(command, timeoutMs, logger) {
12
+ return new Promise((resolve) => {
13
+ try {
14
+ const checker = isWindows ? "where" : "which";
15
+ logger?.debug('cli_probe_started', {
16
+ command,
17
+ checker,
18
+ timeoutMs,
19
+ });
20
+ const child = spawn(checker, [command], {
21
+ stdio: ["ignore", "ignore", "ignore"],
22
+ shell: isWindows,
23
+ });
24
+ let timeoutId;
25
+ const cleanup = () => {
26
+ if (timeoutId) {
27
+ clearTimeout(timeoutId);
28
+ }
29
+ };
30
+ if (timeoutMs && timeoutMs > 0) {
31
+ timeoutId = setTimeout(() => {
32
+ child.kill('SIGTERM');
33
+ logger?.error('cli_probe_timed_out', {
34
+ command,
35
+ checker,
36
+ timeoutMs,
37
+ });
38
+ resolve(false);
39
+ }, timeoutMs);
40
+ }
41
+ child.on("error", (error) => {
42
+ cleanup();
43
+ logger?.error('cli_probe_spawn_failed', {
44
+ command,
45
+ checker,
46
+ error,
47
+ });
48
+ resolve(false);
49
+ });
50
+ child.on("close", (code) => {
51
+ cleanup();
52
+ logger?.debug('cli_probe_finished', {
53
+ command,
54
+ checker,
55
+ exitCode: code,
56
+ exists: code === 0,
57
+ });
58
+ resolve(code === 0);
59
+ });
60
+ }
61
+ catch (error) {
62
+ logger?.error('cli_probe_threw', {
63
+ command,
64
+ error,
65
+ });
66
+ resolve(false);
67
+ }
68
+ });
69
+ }
70
+ /**
71
+ * Detect which of the four supported CLIs are available on the system.
72
+ * Runs all four checks in parallel for speed.
73
+ */
74
+ export async function detectAvailableClis(timeoutMs, logger) {
75
+ if (process.env.QA_NO_CLIS === 'true') {
76
+ logger?.info('cli_detection_skipped', {
77
+ reason: 'QA_NO_CLIS=true',
78
+ });
79
+ return { gemini: false, codex: false, claude: false, opencode: false, cursor: false };
80
+ }
81
+ logger?.info('cli_detection_started', { timeoutMs });
82
+ const [gemini, codex, claude, opencode, cursorFromPath] = await Promise.all([
83
+ commandExists(CLI.COMMANDS.GEMINI, timeoutMs, logger),
84
+ commandExists(CLI.COMMANDS.CODEX, timeoutMs, logger),
85
+ commandExists(CLI.COMMANDS.CLAUDE, timeoutMs, logger),
86
+ commandExists(CLI.COMMANDS.OPENCODE, timeoutMs, logger),
87
+ commandExists(CLI.COMMANDS.CURSOR_AGENT, timeoutMs, logger),
88
+ ]);
89
+ const cursor = cursorFromPath || getCursorCommandCandidates()
90
+ .some(candidate => candidate.startsWith('/') && existsSync(candidate));
91
+ const availability = { gemini, codex, claude, opencode, cursor };
92
+ logger?.info('cli_detection_finished', { availability });
93
+ return availability;
94
+ }
95
+ //# sourceMappingURL=cliDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliDetector.js","sourceRoot":"","sources":["../../src/utils/cliDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolExecutionContext } from '../execution.js';
2
+ export declare function executeCodexCLI(prompt: string, model: string, sandbox?: string, approvalPolicy?: string, context?: ToolExecutionContext): Promise<string>;
3
+ //# sourceMappingURL=codexExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexExecutor.d.ts","sourceRoot":"","sources":["../../src/utils/codexExecutor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
@@ -0,0 +1,19 @@
1
+ import { executeCommand } from './commandExecutor.js';
2
+ import { CLI } from '../constants.js';
3
+ export async function executeCodexCLI(prompt, model, sandbox, approvalPolicy, context) {
4
+ const args = [
5
+ CLI.SUBCOMMANDS.EXEC, prompt,
6
+ CLI.CODEX_FLAGS.FULL_AUTO,
7
+ CLI.CODEX_FLAGS.SKIP_GIT_CHECK,
8
+ CLI.CODEX_FLAGS.COLOR, "never",
9
+ CLI.CODEX_FLAGS.MODEL, model,
10
+ ];
11
+ if (sandbox) {
12
+ args.push(CLI.CODEX_FLAGS.SANDBOX, sandbox);
13
+ }
14
+ if (approvalPolicy) {
15
+ args.push(CLI.CODEX_FLAGS.APPROVAL, approvalPolicy);
16
+ }
17
+ return executeCommand(CLI.COMMANDS.CODEX, args, context);
18
+ }
19
+ //# sourceMappingURL=codexExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexExecutor.js","sourceRoot":"","sources":["../../src/utils/codexExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAGtC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,KAAa,EACb,OAAgB,EAChB,cAAuB,EACvB,OAA8B;IAE9B,MAAM,IAAI,GAAa;QACrB,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM;QAC5B,GAAG,CAAC,WAAW,CAAC,SAAS;QACzB,GAAG,CAAC,WAAW,CAAC,cAAc;QAC9B,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO;QAC9B,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK;KAC7B,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { ToolExecutionContext } from "../execution.js";
2
+ export type CommandExecutionFailureKind = "cancelled" | "timeout" | "spawn" | "quota" | "failed" | "no-output";
3
+ export type CommandErrorType = "RESOURCE_EXHAUSTED" | "AUTH_ERROR" | "MODEL_NOT_FOUND" | "TIMEOUT" | "SPAWN" | "CANCELLED" | "FAILED" | "NO_OUTPUT";
4
+ export declare class CommandExecutionError extends Error {
5
+ readonly kind: CommandExecutionFailureKind;
6
+ readonly details: {
7
+ command: string;
8
+ args: string[];
9
+ exitCode?: number | null;
10
+ stdout?: string;
11
+ stderr?: string;
12
+ runId?: string;
13
+ };
14
+ constructor(kind: CommandExecutionFailureKind, message: string, details: {
15
+ command: string;
16
+ args: string[];
17
+ exitCode?: number | null;
18
+ stdout?: string;
19
+ stderr?: string;
20
+ runId?: string;
21
+ });
22
+ }
23
+ /**
24
+ * Format a single argument for safe use with cmd.exe (shell: true on Windows).
25
+ * Ensures the argument survives cmd.exe parsing as one argv entry.
26
+ */
27
+ export declare function sanitizeArgForCmd(arg: string): string;
28
+ export declare function executeCommand(command: string, args: string[], options?: ToolExecutionContext): Promise<string>;
29
+ //# sourceMappingURL=commandExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandExecutor.d.ts","sourceRoot":"","sources":["../../src/utils/commandExecutor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAOvD,MAAM,MAAM,2BAA2B,GACnC,WAAW,GACX,SAAS,GACT,OAAO,GACP,OAAO,GACP,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,MAAM,gBAAgB,GACxB,oBAAoB,GACpB,YAAY,GACZ,iBAAiB,GACjB,SAAS,GACT,OAAO,GACP,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;AAEhB,qBAAa,qBAAsB,SAAQ,KAAK;aAE5B,IAAI,EAAE,2BAA2B;aAEjC,OAAO,EAAE;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;gBATe,IAAI,EAAE,2BAA2B,EACjD,OAAO,EAAE,MAAM,EACC,OAAO,EAAE;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;CA2BJ;AAsFD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiBrD;AA+DD,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAuWjB"}