@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,12 @@
1
+ import { UnifiedTool } from './registry.js';
2
+ export declare const geminiHelpTool: UnifiedTool;
3
+ export declare const codexHelpTool: UnifiedTool;
4
+ export declare const claudeHelpTool: UnifiedTool;
5
+ export declare const geminiListModelsTool: UnifiedTool;
6
+ export declare const codexListModelsTool: UnifiedTool;
7
+ export declare const claudeListModelsTool: UnifiedTool;
8
+ export declare const opencodeHelpTool: UnifiedTool;
9
+ export declare const opencodeListModelsTool: UnifiedTool;
10
+ export declare const cursorHelpTool: UnifiedTool;
11
+ export declare const cursorListModelsTool: UnifiedTool;
12
+ //# sourceMappingURL=simple-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-tools.d.ts","sourceRoot":"","sources":["../../src/tools/simple-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQ5C,eAAO,MAAM,cAAc,EAAE,WAU5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAU3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAU5B,CAAC;AAIF,eAAO,MAAM,oBAAoB,EAAE,WAWlC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,WAWjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,WAWlC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,WAU9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,WAWpC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAU5B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,WASlC,CAAC"}
@@ -0,0 +1,121 @@
1
+ import { z } from 'zod';
2
+ import { executeCommand } from '../utils/commandExecutor.js';
3
+ import { formatCatalog } from '../modelCatalog.js';
4
+ import { getOpencodeClassifiedCatalog } from '../utils/opencodeCatalog.js';
5
+ import { getCursorCommand } from '../utils/cursorCli.js';
6
+ const helpArgsSchema = z.object({});
7
+ export const geminiHelpTool = {
8
+ name: "Gemini-Help",
9
+ description: "Receive help information from the Gemini CLI",
10
+ zodSchema: helpArgsSchema,
11
+ prompt: {
12
+ description: "Receive help information from the Gemini CLI",
13
+ },
14
+ category: 'gemini',
15
+ timeoutClass: 'help',
16
+ execute: async (_args, context) => executeCommand("gemini", ["-help"], context),
17
+ };
18
+ export const codexHelpTool = {
19
+ name: "Codex-Help",
20
+ description: "Receive help information from the Codex CLI",
21
+ zodSchema: helpArgsSchema,
22
+ prompt: {
23
+ description: "Receive help information from the Codex CLI",
24
+ },
25
+ category: 'codex',
26
+ timeoutClass: 'help',
27
+ execute: async (_args, context) => executeCommand("codex", ["--help"], context),
28
+ };
29
+ export const claudeHelpTool = {
30
+ name: "Claude-Help",
31
+ description: "Receive help information from the Claude Code CLI",
32
+ zodSchema: helpArgsSchema,
33
+ prompt: {
34
+ description: "Receive help information from the Claude Code CLI",
35
+ },
36
+ category: 'claude',
37
+ timeoutClass: 'help',
38
+ execute: async (_args, context) => executeCommand("claude", ["--help"], context),
39
+ };
40
+ const noArgsSchema = z.object({});
41
+ export const geminiListModelsTool = {
42
+ name: "List-Gemini-Models",
43
+ description: "List available Gemini model families, their strengths, and known model IDs. You MUST call this before Ask-Gemini to choose the right model for your task. It's the law.",
44
+ zodSchema: noArgsSchema,
45
+ prompt: {
46
+ description: "List available Gemini models with family descriptions",
47
+ },
48
+ category: 'gemini',
49
+ execute: async () => {
50
+ return formatCatalog('gemini');
51
+ }
52
+ };
53
+ export const codexListModelsTool = {
54
+ name: "List-Codex-Models",
55
+ description: "List available Codex model families, their strengths, and known model IDs. You MUST call this before Ask-Codex to choose the right model for your task. It's the law.",
56
+ zodSchema: noArgsSchema,
57
+ prompt: {
58
+ description: "List available Codex models with family descriptions",
59
+ },
60
+ category: 'codex',
61
+ execute: async () => {
62
+ return formatCatalog('codex');
63
+ }
64
+ };
65
+ export const claudeListModelsTool = {
66
+ name: "List-Claude-Models",
67
+ description: "List available Claude model families, their strengths, and known model IDs. You MUST call this before Ask-Claude to choose the right model for your task. It's the law.",
68
+ zodSchema: noArgsSchema,
69
+ prompt: {
70
+ description: "List available Claude models with family descriptions",
71
+ },
72
+ category: 'claude',
73
+ execute: async () => {
74
+ return formatCatalog('claude');
75
+ }
76
+ };
77
+ export const opencodeHelpTool = {
78
+ name: "OpenCode-Help",
79
+ description: "Receive help information from the OpenCode CLI",
80
+ zodSchema: helpArgsSchema,
81
+ prompt: {
82
+ description: "Receive help information from the OpenCode CLI",
83
+ },
84
+ category: 'opencode',
85
+ timeoutClass: 'help',
86
+ execute: async (_args, context) => executeCommand("opencode", ["--help"], context),
87
+ };
88
+ export const opencodeListModelsTool = {
89
+ name: "List-OpenCode-Models",
90
+ description: "List available OpenCode models from all configured providers, classified into tiers. You MUST call this before Ask-OpenCode to choose the right model for your task. Models are dynamically discovered from your providers.",
91
+ zodSchema: noArgsSchema,
92
+ prompt: {
93
+ description: "List available OpenCode models with tier classifications",
94
+ },
95
+ category: 'opencode',
96
+ execute: async () => {
97
+ return getOpencodeClassifiedCatalog();
98
+ }
99
+ };
100
+ export const cursorHelpTool = {
101
+ name: "Cursor-Help",
102
+ description: "Receive help information from the Cursor Agent CLI",
103
+ zodSchema: helpArgsSchema,
104
+ prompt: {
105
+ description: "Receive help information from the Cursor Agent CLI",
106
+ },
107
+ category: 'cursor',
108
+ timeoutClass: 'help',
109
+ execute: async (_args, context) => executeCommand(getCursorCommand(), ["--help"], context),
110
+ };
111
+ export const cursorListModelsTool = {
112
+ name: "List-Cursor-Models",
113
+ description: "List available Cursor Agent models for this account. You MUST call this before Ask-Cursor to choose the right model. Models are dynamically discovered from Cursor Agent.",
114
+ zodSchema: noArgsSchema,
115
+ prompt: {
116
+ description: "List available Cursor Agent models",
117
+ },
118
+ category: 'cursor',
119
+ execute: async (_args, context) => executeCommand(getCursorCommand(), ["--list-models"], context),
120
+ };
121
+ //# sourceMappingURL=simple-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-tools.js","sourceRoot":"","sources":["../../src/tools/simple-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Example: Adding a new tool with the unified registry
3
+ * To add this tool:
4
+ * 1. Rename this file to remove .example (test-tool.ts)
5
+ * 2. Import and register in src/tools/index.ts:
6
+ * import { testTool } from './test-tool.js';
7
+ * toolRegistry.push(testTool);
8
+ *
9
+ * That's it! No more editing multiple files.
10
+ */
11
+ import { UnifiedTool } from './registry.js';
12
+ export declare const testTool: UnifiedTool;
13
+ //# sourceMappingURL=test-tool.example.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-tool.example.d.ts","sourceRoot":"","sources":["../../src/tools/test-tool.example.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM5C,eAAO,MAAM,QAAQ,EAAE,WAgBtB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Example: Adding a new tool with the unified registry
3
+ * To add this tool:
4
+ * 1. Rename this file to remove .example (test-tool.ts)
5
+ * 2. Import and register in src/tools/index.ts:
6
+ * import { testTool } from './test-tool.js';
7
+ * toolRegistry.push(testTool);
8
+ *
9
+ * That's it! No more editing multiple files.
10
+ */
11
+ import { z } from 'zod';
12
+ const testToolArgsSchema = z.object({
13
+ message: z.string().describe("Test message to echo"), // Required field (no .optional())
14
+ });
15
+ export const testTool = {
16
+ name: "test-tool",
17
+ description: "A test tool demonstrating the simplified registration",
18
+ zodSchema: testToolArgsSchema,
19
+ prompt: {
20
+ description: "Test the new unified tool registration",
21
+ arguments: [{
22
+ name: "message",
23
+ description: "Message to test with",
24
+ required: true
25
+ }]
26
+ },
27
+ category: 'utility',
28
+ execute: async (args) => {
29
+ return `Test tool received: ${args.message}`;
30
+ }
31
+ };
32
+ //# sourceMappingURL=test-tool.example.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-tool.example.js","sourceRoot":"","sources":["../../src/tools/test-tool.example.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,kCAAkC;CACzF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAgB;IACnC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,uDAAuD;IACpE,SAAS,EAAE,kBAAkB;IAC7B,MAAM,EAAE;QACN,WAAW,EAAE,wCAAwC;QACrD,SAAS,EAAE,CAAC;gBACV,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,sBAAsB;gBACnC,QAAQ,EAAE,IAAI;aACf,CAAC;KACH;IACD,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,uBAAuB,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/C,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { UnifiedTool } from './registry.js';
2
+ export declare const tieredRequestTool: UnifiedTool;
3
+ //# sourceMappingURL=tiered-request.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiered-request.tool.d.ts","sourceRoot":"","sources":["../../src/tools/tiered-request.tool.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA2EjD,eAAO,MAAM,iBAAiB,EAAE,WAuG/B,CAAC"}
@@ -0,0 +1,147 @@
1
+ import { z } from 'zod';
2
+ import { loadRouterConfig } from '../router/config.js';
3
+ import { computeEffectiveAllowEdits, mapTieredRequestDomainToRouteDomain, runTieredProviderExecution, } from '../router/executor.js';
4
+ import { buildRouteDecision } from '../router/router.js';
5
+ import { toolRegistry } from './registry.js';
6
+ const tierSchema = z.enum(['trivial', 'small', 'medium', 'large', 'long', 'crucial']);
7
+ const providerSchema = z.enum(['codex', 'claude', 'gemini', 'opencode', 'cursor']);
8
+ const tieredDomainSchema = z.enum([
9
+ 'coding',
10
+ 'debugging',
11
+ 'refactor',
12
+ 'research',
13
+ 'review',
14
+ 'planning',
15
+ 'writing',
16
+ 'general',
17
+ ]);
18
+ const costClassSchema = z.enum(['free', 'included', 'low', 'medium', 'premium', 'any']);
19
+ const tieredRequestArgsSchema = z.object({
20
+ prompt: z.string().min(1).describe('Task or question sent to the selected provider CLI.'),
21
+ tier: tierSchema.describe('Workload tier used to pick the configured route list.'),
22
+ domain: tieredDomainSchema.optional().describe('Optional domain hint for routing (mapped to internal router domains).'),
23
+ allowEdits: z.boolean().optional().describe('When true, provider CLIs may use edit-capable modes where supported.'),
24
+ requireReview: z.boolean().optional().describe('Reserved for future review gate; currently emits a stub warning only.'),
25
+ dryRun: z.boolean().optional().describe('When true, only returns routing decision (same shape as Recommend-Route) without invoking providers.'),
26
+ preferredProvider: providerSchema.optional().describe('Try this provider first (stable reorder).'),
27
+ blockedProviders: z.array(providerSchema).optional().describe('Providers that must not be selected.'),
28
+ maxCostClass: costClassSchema.optional().describe('Maximum cost class permitted for the primary route.'),
29
+ forceTask: z.boolean().optional().describe('If true, reject sync-only routes.'),
30
+ });
31
+ function inferAvailabilityFromRegistry() {
32
+ const out = {
33
+ gemini: false,
34
+ codex: false,
35
+ claude: false,
36
+ opencode: false,
37
+ cursor: false,
38
+ };
39
+ for (const t of toolRegistry) {
40
+ switch (t.category) {
41
+ case 'gemini':
42
+ out.gemini = true;
43
+ break;
44
+ case 'codex':
45
+ out.codex = true;
46
+ break;
47
+ case 'claude':
48
+ out.claude = true;
49
+ break;
50
+ case 'opencode':
51
+ out.opencode = true;
52
+ break;
53
+ case 'cursor':
54
+ out.cursor = true;
55
+ break;
56
+ default:
57
+ break;
58
+ }
59
+ }
60
+ return out;
61
+ }
62
+ function buildDecisionPayload(decision) {
63
+ return {
64
+ selected: decision.selected,
65
+ fallbacks: decision.fallbacks,
66
+ rejected: decision.rejected,
67
+ reasons: decision.reasons,
68
+ warnings: decision.warnings,
69
+ };
70
+ }
71
+ export const tieredRequestTool = {
72
+ name: 'Tiered-Request',
73
+ description: 'Routes a prompt by tier and constraints, then invokes the selected provider CLI (Gemini, Codex, Claude, OpenCode, or Cursor) with read-only defaults unless allowEdits is true. Supports dry-run routing-only mode, deterministic fallbacks on failure, per-tier timeout/output limits from router config, and UTF-8 output truncation. Merged router config matches Recommend-Route (package defaults + ~/.config/multi-cli/config.json + multi-cli.config.json).',
74
+ zodSchema: tieredRequestArgsSchema,
75
+ category: 'utility',
76
+ execution: { taskSupport: 'optional' },
77
+ timeoutClass: 'ask',
78
+ execute: async (args, context) => {
79
+ const parsed = tieredRequestArgsSchema.parse(args);
80
+ const availability = context?.cliAvailability ?? inferAvailabilityFromRegistry();
81
+ const projectRoot = context?.cwd;
82
+ const { config, warnings: loadWarnings } = loadRouterConfig(projectRoot);
83
+ const routeDomain = mapTieredRequestDomainToRouteDomain(parsed.domain);
84
+ const decision = buildRouteDecision(config, {
85
+ prompt: parsed.prompt,
86
+ tier: parsed.tier,
87
+ domain: routeDomain,
88
+ allowEdits: parsed.allowEdits,
89
+ requireReview: parsed.requireReview,
90
+ preferredProvider: parsed.preferredProvider,
91
+ blockedProviders: parsed.blockedProviders,
92
+ maxCostClass: parsed.maxCostClass,
93
+ forceTask: parsed.forceTask,
94
+ }, {
95
+ availability,
96
+ mcpClientName: context?.mcpClientName,
97
+ projectRoot,
98
+ }, loadWarnings);
99
+ const decisionForOutput = {
100
+ selected: decision.selected,
101
+ fallbacks: decision.fallbacks,
102
+ rejected: decision.rejected,
103
+ reasons: decision.reasons,
104
+ warnings: [...decision.warnings],
105
+ };
106
+ if (parsed.requireReview === true) {
107
+ decisionForOutput.warnings.push('requireReview is not implemented yet; automated review remains a planned/stubbed feature — proceed without a review gate.');
108
+ }
109
+ const trivialEditsBlocked = parsed.tier === 'trivial' && parsed.allowEdits === true && !config.routing?.allowTrivialEdits;
110
+ if (trivialEditsBlocked) {
111
+ decisionForOutput.warnings.push('Trivial tier rejects allowEdits unless router.routing.allowTrivialEdits is true in merged config.');
112
+ }
113
+ const topWarnings = decisionForOutput.warnings;
114
+ if (parsed.dryRun === true) {
115
+ const payload = buildDecisionPayload(decisionForOutput);
116
+ return `\`\`\`json\n${JSON.stringify(payload, null, 2)}\n\`\`\``;
117
+ }
118
+ if (trivialEditsBlocked) {
119
+ const payload = {
120
+ decision: buildDecisionPayload(decisionForOutput),
121
+ attempts: [],
122
+ result: 'Execution blocked: trivial tier does not allow edits unless router.routing.allowTrivialEdits is enabled in merged configuration.',
123
+ truncated: false,
124
+ warnings: topWarnings,
125
+ };
126
+ return `\`\`\`json\n${JSON.stringify(payload, null, 2)}\n\`\`\``;
127
+ }
128
+ const effectiveAllowEdits = computeEffectiveAllowEdits(parsed.tier, parsed.allowEdits, config.routing);
129
+ const run = await runTieredProviderExecution({
130
+ routerConfig: config,
131
+ decision,
132
+ tier: parsed.tier,
133
+ prompt: parsed.prompt,
134
+ effectiveAllowEdits,
135
+ context,
136
+ });
137
+ const payload = {
138
+ decision: buildDecisionPayload(decisionForOutput),
139
+ attempts: run.attempts,
140
+ result: run.result,
141
+ truncated: run.truncated,
142
+ warnings: topWarnings,
143
+ };
144
+ return `\`\`\`json\n${JSON.stringify(payload, null, 2)}\n\`\`\``;
145
+ },
146
+ };
147
+ //# sourceMappingURL=tiered-request.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiered-request.tool.js","sourceRoot":"","sources":["../../src/tools/tiered-request.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ChangeModeEdit } from './changeModeParser.js';
2
+ export interface EditChunk {
3
+ edits: ChangeModeEdit[];
4
+ chunkIndex: number;
5
+ totalChunks: number;
6
+ hasMore: boolean;
7
+ estimatedChars: number;
8
+ }
9
+ export declare function chunkChangeModeEdits(edits: ChangeModeEdit[], maxCharsPerChunk?: number): EditChunk[];
10
+ export declare function summarizeChunking(chunks: EditChunk[]): string;
11
+ //# sourceMappingURL=changeModeChunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeModeChunker.d.ts","sourceRoot":"","sources":["../../src/utils/changeModeChunker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAiBD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EAAE,EACvB,gBAAgB,GAAE,MAAc,GAC/B,SAAS,EAAE,CAyDb;AAgBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAc7D"}
@@ -0,0 +1,89 @@
1
+ function estimateEditSize(edit) {
2
+ const jsonOverhead = 250;
3
+ const contentSize = edit.filename.length * 2 + edit.oldCode.length + edit.newCode.length;
4
+ return jsonOverhead + contentSize;
5
+ }
6
+ function groupEditsByFile(edits) {
7
+ const groups = new Map();
8
+ for (const edit of edits) {
9
+ const fileEdits = groups.get(edit.filename) || [];
10
+ fileEdits.push(edit);
11
+ groups.set(edit.filename, fileEdits);
12
+ }
13
+ return groups;
14
+ }
15
+ export function chunkChangeModeEdits(edits, maxCharsPerChunk = 20000) {
16
+ if (edits.length === 0) {
17
+ return [{
18
+ edits: [],
19
+ chunkIndex: 1,
20
+ totalChunks: 1,
21
+ hasMore: false,
22
+ estimatedChars: 0
23
+ }];
24
+ }
25
+ const chunks = [];
26
+ const fileGroups = groupEditsByFile(edits);
27
+ let currentChunk = [];
28
+ let currentSize = 0;
29
+ for (const [, fileEdits] of fileGroups) {
30
+ const fileSize = fileEdits.reduce((sum, edit) => sum + estimateEditSize(edit), 0);
31
+ if (fileSize > maxCharsPerChunk) {
32
+ if (currentChunk.length > 0) {
33
+ chunks.push(createChunk(currentChunk, chunks.length + 1, 0, currentSize));
34
+ currentChunk = [];
35
+ currentSize = 0;
36
+ }
37
+ for (const edit of fileEdits) {
38
+ const editSize = estimateEditSize(edit);
39
+ if (currentSize + editSize > maxCharsPerChunk && currentChunk.length > 0) {
40
+ chunks.push(createChunk(currentChunk, chunks.length + 1, 0, currentSize));
41
+ currentChunk = [];
42
+ currentSize = 0;
43
+ }
44
+ currentChunk.push(edit);
45
+ currentSize += editSize;
46
+ }
47
+ }
48
+ else {
49
+ if (currentSize + fileSize > maxCharsPerChunk && currentChunk.length > 0) {
50
+ chunks.push(createChunk(currentChunk, chunks.length + 1, 0, currentSize));
51
+ currentChunk = [];
52
+ currentSize = 0;
53
+ }
54
+ currentChunk.push(...fileEdits);
55
+ currentSize += fileSize;
56
+ }
57
+ }
58
+ if (currentChunk.length > 0) {
59
+ chunks.push(createChunk(currentChunk, chunks.length + 1, 0, currentSize));
60
+ }
61
+ const totalChunks = chunks.length;
62
+ return chunks.map((chunk, index) => ({
63
+ ...chunk,
64
+ totalChunks,
65
+ hasMore: index < totalChunks - 1
66
+ }));
67
+ }
68
+ function createChunk(edits, chunkIndex, totalChunks, estimatedChars) {
69
+ return {
70
+ edits,
71
+ chunkIndex,
72
+ totalChunks,
73
+ hasMore: false,
74
+ estimatedChars
75
+ };
76
+ }
77
+ export function summarizeChunking(chunks) {
78
+ const totalEdits = chunks.reduce((sum, chunk) => sum + chunk.edits.length, 0);
79
+ const totalChars = chunks.reduce((sum, chunk) => sum + chunk.estimatedChars, 0);
80
+ return `Chunking Summary:
81
+ # edits: ${totalEdits}
82
+ # chunks: ${chunks.length}
83
+ est chars: ${totalChars.toLocaleString()}
84
+ mean size: ${chunks.length === 0 ? 0 : Math.round(totalChars / chunks.length).toLocaleString()} chars
85
+
86
+ Chunks:
87
+ ${chunks.map(chunk => ` Chunk ${chunk.chunkIndex}: ${chunk.edits.length} edits, ~${chunk.estimatedChars.toLocaleString()} chars`).join('\n')}`;
88
+ }
89
+ //# sourceMappingURL=changeModeChunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeModeChunker.js","sourceRoot":"","sources":["../../src/utils/changeModeChunker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface ChangeModeEdit {
2
+ filename: string;
3
+ oldStartLine: number;
4
+ oldEndLine: number;
5
+ oldCode: string;
6
+ newStartLine: number;
7
+ newEndLine: number;
8
+ newCode: string;
9
+ }
10
+ export declare function parseChangeModeOutput(geminiResponse: string): ChangeModeEdit[];
11
+ export declare function validateChangeModeEdits(edits: ChangeModeEdit[]): {
12
+ valid: boolean;
13
+ errors: string[];
14
+ };
15
+ //# sourceMappingURL=changeModeParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeModeParser.d.ts","sourceRoot":"","sources":["../../src/utils/changeModeParser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,cAAc,EAAE,CAiE9E;AACD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAyBA"}
@@ -0,0 +1,67 @@
1
+ export function parseChangeModeOutput(geminiResponse) {
2
+ const edits = [];
3
+ const markdownPattern = /\*\*FILE:\s*(.+?):(\d+)\*\*\s*\n```\s*\nOLD:\s*\n([\s\S]*?)\nNEW:\s*\n([\s\S]*?)\n```/g;
4
+ let match;
5
+ while ((match = markdownPattern.exec(geminiResponse)) !== null) {
6
+ const [_fullMatch, filename, startLineStr, oldCodeRaw, newCodeRaw] = match;
7
+ const oldCode = oldCodeRaw.trimEnd();
8
+ const newCode = newCodeRaw.trimEnd();
9
+ const startLine = parseInt(startLineStr, 10);
10
+ const oldLineCount = oldCode === '' ? 0 : oldCode.split('\n').length;
11
+ const newLineCount = newCode === '' ? 0 : newCode.split('\n').length;
12
+ const oldEndLine = startLine + (oldLineCount > 0 ? oldLineCount - 1 : 0);
13
+ const newStartLine = startLine;
14
+ const newEndLine = newStartLine + (newLineCount > 0 ? newLineCount - 1 : 0);
15
+ edits.push({
16
+ filename: filename.trim(),
17
+ oldStartLine: startLine,
18
+ oldEndLine: oldEndLine,
19
+ oldCode: oldCode,
20
+ newStartLine: newStartLine,
21
+ newEndLine: newEndLine,
22
+ newCode: newCode,
23
+ });
24
+ }
25
+ if (edits.length === 0) {
26
+ const editPattern = /\/old\/ \* (.+?) 'start:' (\d+)\n([\s\S]*?)\n\/\/ 'end:' (\d+)\s*\n\s*\\new\\ \* (.+?) 'start:' (\d+)\n([\s\S]*?)\n\/\/ 'end:' (\d+)/g;
27
+ while ((match = editPattern.exec(geminiResponse)) !== null) {
28
+ const [_fullMatch, oldFilename, oldStartLine, oldCode, oldEndLine, newFilename, newStartLine, newCode, newEndLine,] = match;
29
+ if (oldFilename !== newFilename) {
30
+ console.warn(`[changeModeParser] Filename mismatch: ${oldFilename} vs ${newFilename}`);
31
+ continue;
32
+ }
33
+ edits.push({
34
+ filename: oldFilename.trim(),
35
+ oldStartLine: parseInt(oldStartLine, 10),
36
+ oldEndLine: parseInt(oldEndLine, 10),
37
+ oldCode: oldCode.trimEnd(),
38
+ newStartLine: parseInt(newStartLine, 10),
39
+ newEndLine: parseInt(newEndLine, 10),
40
+ newCode: newCode.trimEnd(),
41
+ });
42
+ }
43
+ }
44
+ return edits;
45
+ }
46
+ export function validateChangeModeEdits(edits) {
47
+ const errors = [];
48
+ for (const edit of edits) {
49
+ if (!edit.filename) {
50
+ errors.push('Edit missing filename');
51
+ }
52
+ if (edit.oldStartLine > edit.oldEndLine) {
53
+ errors.push(`Invalid line range for ${edit.filename}: ${edit.oldStartLine} > ${edit.oldEndLine}`);
54
+ }
55
+ if (edit.newStartLine > edit.newEndLine) {
56
+ errors.push(`Invalid new line range for ${edit.filename}: ${edit.newStartLine} > ${edit.newEndLine}`);
57
+ }
58
+ if (!edit.oldCode && !edit.newCode) {
59
+ errors.push(`Empty edit for ${edit.filename}`);
60
+ }
61
+ }
62
+ return {
63
+ valid: errors.length === 0,
64
+ errors,
65
+ };
66
+ }
67
+ //# sourceMappingURL=changeModeParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeModeParser.js","sourceRoot":"","sources":["../../src/utils/changeModeParser.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,qBAAqB,CAAC,cAAsB;IAC1D,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,eAAe,GAAG,wFAAwF,CAAC;IAEjH,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/D,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;QAE3E,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACrE,MAAM,YAAY,GAAG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAErE,MAAM,UAAU,GAAG,SAAS,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,MAAM,YAAY,GAAG,SAAS,CAAC;QAC/B,MAAM,UAAU,GAAG,YAAY,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5E,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;YACzB,YAAY,EAAE,SAAS;YACvB,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,OAAO;YAChB,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,uIAAuI,CAAC;QAE5J,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3D,MAAM,CACJ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,OAAO,EACP,UAAU,EACV,WAAW,EACX,YAAY,EACZ,OAAO,EACP,UAAU,EACX,GAAG,KAAK,CAAC;YAEV,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,yCAAyC,WAAW,OAAO,WAAW,EAAE,CAAC,CAAC;gBACvF,SAAS;YACX,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE;gBAC5B,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;gBACxC,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;gBACpC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;gBAC1B,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;gBACxC,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;gBACpC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,UAAU,uBAAuB,CAAC,KAAuB;IAI7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACxG,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { ChangeModeEdit } from './changeModeParser.js';
2
+ export declare function formatChangeModeResponse(edits: ChangeModeEdit[], chunkInfo?: {
3
+ current: number;
4
+ total: number;
5
+ cacheKey?: string;
6
+ }): string;
7
+ export declare function summarizeChangeModeEdits(edits: ChangeModeEdit[], isPartialView?: boolean): string;
8
+ //# sourceMappingURL=changeModeTranslator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeModeTranslator.d.ts","sourceRoot":"","sources":["../../src/utils/changeModeTranslator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,cAAc,EAAE,EACvB,SAAS,CAAC,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,MAAM,CAoDR;AAGD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAiBjG"}