@qduc/term2 0.1.6 → 0.1.7

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 (300) hide show
  1. package/dist/agent.lite-mode.test.d.ts +2 -0
  2. package/dist/agent.lite-mode.test.d.ts.map +1 -0
  3. package/dist/agent.lite-mode.test.js +39 -0
  4. package/dist/agent.lite-mode.test.js.map +1 -0
  5. package/dist/components/TextInput.d.ts.map +1 -1
  6. package/dist/components/TextInput.js +2 -1
  7. package/dist/components/TextInput.js.map +1 -1
  8. package/dist/components/TextInput.test.js.map +1 -1
  9. package/dist/debug_ask_mentor.d.ts +2 -0
  10. package/dist/debug_ask_mentor.d.ts.map +1 -0
  11. package/dist/debug_ask_mentor.js +73 -0
  12. package/dist/debug_ask_mentor.js.map +1 -0
  13. package/dist/lib/openai-agent-client.d.ts.map +1 -1
  14. package/dist/lib/openai-agent-client.js +2 -1
  15. package/dist/lib/openai-agent-client.js.map +1 -1
  16. package/dist/lib/openai-strict-tool-schema.d.ts +10 -0
  17. package/dist/lib/openai-strict-tool-schema.d.ts.map +1 -0
  18. package/dist/lib/openai-strict-tool-schema.js +39 -0
  19. package/dist/lib/openai-strict-tool-schema.js.map +1 -0
  20. package/dist/lib/openai-strict-tool-schema.test.d.ts +2 -0
  21. package/dist/lib/openai-strict-tool-schema.test.d.ts.map +1 -0
  22. package/dist/lib/openai-strict-tool-schema.test.js +26 -0
  23. package/dist/lib/openai-strict-tool-schema.test.js.map +1 -0
  24. package/dist/modes/companion/command-index.d.ts +26 -0
  25. package/dist/modes/companion/command-index.d.ts.map +1 -0
  26. package/dist/modes/companion/command-index.js +50 -0
  27. package/dist/modes/companion/command-index.js.map +1 -0
  28. package/dist/modes/companion/command-index.test.d.ts +2 -0
  29. package/dist/modes/companion/command-index.test.d.ts.map +1 -0
  30. package/dist/modes/companion/command-index.test.js +86 -0
  31. package/dist/modes/companion/command-index.test.js.map +1 -0
  32. package/dist/modes/companion/companion-app.d.ts +12 -0
  33. package/dist/modes/companion/companion-app.d.ts.map +1 -0
  34. package/dist/modes/companion/companion-app.js +297 -0
  35. package/dist/modes/companion/companion-app.js.map +1 -0
  36. package/dist/modes/companion/companion-session.d.ts +63 -0
  37. package/dist/modes/companion/companion-session.d.ts.map +1 -0
  38. package/dist/modes/companion/companion-session.js +146 -0
  39. package/dist/modes/companion/companion-session.js.map +1 -0
  40. package/dist/modes/companion/companion-session.test.d.ts +2 -0
  41. package/dist/modes/companion/companion-session.test.d.ts.map +1 -0
  42. package/dist/modes/companion/companion-session.test.js +28 -0
  43. package/dist/modes/companion/companion-session.test.js.map +1 -0
  44. package/dist/modes/companion/components/status-bar.d.ts +13 -0
  45. package/dist/modes/companion/components/status-bar.d.ts.map +1 -0
  46. package/dist/modes/companion/components/status-bar.js +26 -0
  47. package/dist/modes/companion/components/status-bar.js.map +1 -0
  48. package/dist/modes/companion/context-buffer.d.ts +65 -0
  49. package/dist/modes/companion/context-buffer.d.ts.map +1 -0
  50. package/dist/modes/companion/context-buffer.js +156 -0
  51. package/dist/modes/companion/context-buffer.js.map +1 -0
  52. package/dist/modes/companion/context-buffer.test.d.ts +2 -0
  53. package/dist/modes/companion/context-buffer.test.d.ts.map +1 -0
  54. package/dist/modes/companion/context-buffer.test.js +154 -0
  55. package/dist/modes/companion/context-buffer.test.js.map +1 -0
  56. package/dist/modes/companion/event-detector.d.ts +46 -0
  57. package/dist/modes/companion/event-detector.d.ts.map +1 -0
  58. package/dist/modes/companion/event-detector.js +169 -0
  59. package/dist/modes/companion/event-detector.js.map +1 -0
  60. package/dist/modes/companion/event-detector.test.d.ts +2 -0
  61. package/dist/modes/companion/event-detector.test.d.ts.map +1 -0
  62. package/dist/modes/companion/event-detector.test.js +121 -0
  63. package/dist/modes/companion/event-detector.test.js.map +1 -0
  64. package/dist/modes/companion/index.d.ts +33 -0
  65. package/dist/modes/companion/index.d.ts.map +1 -0
  66. package/dist/modes/companion/index.js +21 -0
  67. package/dist/modes/companion/index.js.map +1 -0
  68. package/dist/modes/companion/input-key-mapper.d.ts +3 -0
  69. package/dist/modes/companion/input-key-mapper.d.ts.map +1 -0
  70. package/dist/modes/companion/input-key-mapper.js +31 -0
  71. package/dist/modes/companion/input-key-mapper.js.map +1 -0
  72. package/dist/modes/companion/input-key-mapper.test.d.ts +2 -0
  73. package/dist/modes/companion/input-key-mapper.test.d.ts.map +1 -0
  74. package/dist/modes/companion/input-key-mapper.test.js +26 -0
  75. package/dist/modes/companion/input-key-mapper.test.js.map +1 -0
  76. package/dist/modes/companion/input-parser.d.ts +53 -0
  77. package/dist/modes/companion/input-parser.d.ts.map +1 -0
  78. package/dist/modes/companion/input-parser.js +114 -0
  79. package/dist/modes/companion/input-parser.js.map +1 -0
  80. package/dist/modes/companion/input-parser.test.d.ts +2 -0
  81. package/dist/modes/companion/input-parser.test.d.ts.map +1 -0
  82. package/dist/modes/companion/input-parser.test.js +123 -0
  83. package/dist/modes/companion/input-parser.test.js.map +1 -0
  84. package/dist/modes/companion/mode-manager.d.ts +41 -0
  85. package/dist/modes/companion/mode-manager.d.ts.map +1 -0
  86. package/dist/modes/companion/mode-manager.js +56 -0
  87. package/dist/modes/companion/mode-manager.js.map +1 -0
  88. package/dist/modes/companion/mode-manager.test.d.ts +2 -0
  89. package/dist/modes/companion/mode-manager.test.d.ts.map +1 -0
  90. package/dist/modes/companion/mode-manager.test.js +65 -0
  91. package/dist/modes/companion/mode-manager.test.js.map +1 -0
  92. package/dist/modes/companion/output-classifier.d.ts +15 -0
  93. package/dist/modes/companion/output-classifier.d.ts.map +1 -0
  94. package/dist/modes/companion/output-classifier.js +77 -0
  95. package/dist/modes/companion/output-classifier.js.map +1 -0
  96. package/dist/modes/companion/output-classifier.test.d.ts +2 -0
  97. package/dist/modes/companion/output-classifier.test.d.ts.map +1 -0
  98. package/dist/modes/companion/output-classifier.test.js +133 -0
  99. package/dist/modes/companion/output-classifier.test.js.map +1 -0
  100. package/dist/modes/companion/pty-wrapper.d.ts +46 -0
  101. package/dist/modes/companion/pty-wrapper.d.ts.map +1 -0
  102. package/dist/modes/companion/pty-wrapper.js +143 -0
  103. package/dist/modes/companion/pty-wrapper.js.map +1 -0
  104. package/dist/modes/companion/safety-classifier.d.ts +31 -0
  105. package/dist/modes/companion/safety-classifier.d.ts.map +1 -0
  106. package/dist/modes/companion/safety-classifier.js +140 -0
  107. package/dist/modes/companion/safety-classifier.js.map +1 -0
  108. package/dist/modes/companion/safety-classifier.test.d.ts +2 -0
  109. package/dist/modes/companion/safety-classifier.test.d.ts.map +1 -0
  110. package/dist/modes/companion/safety-classifier.test.js +151 -0
  111. package/dist/modes/companion/safety-classifier.test.js.map +1 -0
  112. package/dist/modes/companion/summarizer.d.ts +24 -0
  113. package/dist/modes/companion/summarizer.d.ts.map +1 -0
  114. package/dist/modes/companion/summarizer.js +132 -0
  115. package/dist/modes/companion/summarizer.js.map +1 -0
  116. package/dist/modes/companion/terminal-history.d.ts +27 -0
  117. package/dist/modes/companion/terminal-history.d.ts.map +1 -0
  118. package/dist/modes/companion/terminal-history.js +142 -0
  119. package/dist/modes/companion/terminal-history.js.map +1 -0
  120. package/dist/prompts/simple-mentor.md +8 -0
  121. package/dist/providers/github-copilot/model.d.ts.map +1 -1
  122. package/dist/providers/github-copilot/model.js +25 -108
  123. package/dist/providers/github-copilot/model.js.map +1 -1
  124. package/dist/providers/github-copilot/model.test.d.ts +2 -0
  125. package/dist/providers/github-copilot/model.test.d.ts.map +1 -0
  126. package/dist/providers/github-copilot/model.test.js +63 -0
  127. package/dist/providers/github-copilot/model.test.js.map +1 -0
  128. package/dist/providers/github-copilot/provider.d.ts +0 -5
  129. package/dist/providers/github-copilot/provider.d.ts.map +1 -1
  130. package/dist/providers/github-copilot/provider.js +2 -7
  131. package/dist/providers/github-copilot/provider.js.map +1 -1
  132. package/dist/providers/openai-compatible/model.js +3 -3
  133. package/dist/providers/openai-compatible/model.js.map +1 -1
  134. package/dist/providers/openai-compatible/reasoning-content.test.js +70 -0
  135. package/dist/providers/openai-compatible/reasoning-content.test.js.map +1 -1
  136. package/dist/providers/openrouter/model.js +3 -3
  137. package/dist/providers/openrouter/model.js.map +1 -1
  138. package/dist/providers/openrouter/utils.d.ts +1 -0
  139. package/dist/providers/openrouter/utils.d.ts.map +1 -1
  140. package/dist/providers/openrouter/utils.js +3 -0
  141. package/dist/providers/openrouter/utils.js.map +1 -1
  142. package/dist/providers/openrouter.test.js +64 -0
  143. package/dist/providers/openrouter.test.js.map +1 -1
  144. package/dist/services/check_mock.d.ts +2 -0
  145. package/dist/services/check_mock.d.ts.map +1 -0
  146. package/dist/services/check_mock.js +22 -0
  147. package/dist/services/check_mock.js.map +1 -0
  148. package/dist/services/conversation-service.test.d.ts +2 -0
  149. package/dist/services/conversation-service.test.d.ts.map +1 -0
  150. package/dist/services/conversation-service.test.js +149 -183
  151. package/dist/services/conversation-service.test.js.map +1 -0
  152. package/dist/tools/ask-mentor.d.ts +1 -1
  153. package/dist/tools/ask-mentor.js +1 -1
  154. package/dist/tools/ask-mentor.js.map +1 -1
  155. package/dist/tools/ask-mentor.test.js +9 -3
  156. package/dist/tools/ask-mentor.test.js.map +1 -1
  157. package/dist/tools/find-files.d.ts +2 -2
  158. package/dist/tools/find-files.d.ts.map +1 -1
  159. package/dist/tools/find-files.js +2 -4
  160. package/dist/tools/find-files.js.map +1 -1
  161. package/dist/tools/find-files.test.js +7 -19
  162. package/dist/tools/find-files.test.js.map +1 -1
  163. package/dist/tools/grep.d.ts +1 -1
  164. package/dist/tools/grep.d.ts.map +1 -1
  165. package/dist/tools/grep.js +1 -5
  166. package/dist/tools/grep.js.map +1 -1
  167. package/dist/tools/read-file.d.ts +2 -2
  168. package/dist/tools/read-file.d.ts.map +1 -1
  169. package/dist/tools/read-file.js +2 -4
  170. package/dist/tools/read-file.js.map +1 -1
  171. package/dist/tools/read-file.test.js +7 -13
  172. package/dist/tools/read-file.test.js.map +1 -1
  173. package/dist/tools/search-replace.d.ts +1 -1
  174. package/dist/tools/search-replace.d.ts.map +1 -1
  175. package/dist/tools/search-replace.js +1 -0
  176. package/dist/tools/search-replace.js.map +1 -1
  177. package/dist/tools/search.d.ts +4 -4
  178. package/dist/tools/search.d.ts.map +1 -1
  179. package/dist/tools/search.js +5 -14
  180. package/dist/tools/search.js.map +1 -1
  181. package/dist/tools/shell.d.ts +2 -2
  182. package/dist/tools/shell.d.ts.map +1 -1
  183. package/dist/tools/shell.js +2 -4
  184. package/dist/tools/shell.js.map +1 -1
  185. package/dist/tools/tool-parameter-schema.test.d.ts +2 -0
  186. package/dist/tools/tool-parameter-schema.test.d.ts.map +1 -0
  187. package/dist/tools/tool-parameter-schema.test.js +88 -0
  188. package/dist/tools/tool-parameter-schema.test.js.map +1 -0
  189. package/dist/tools/web-fetch.d.ts +3 -3
  190. package/dist/tools/web-fetch.d.ts.map +1 -1
  191. package/dist/tools/web-fetch.js +3 -2
  192. package/dist/tools/web-fetch.js.map +1 -1
  193. package/dist/utils/command-safety.d.ts.map +1 -1
  194. package/dist/utils/command-safety.devnull.test.d.ts +2 -0
  195. package/dist/utils/command-safety.devnull.test.d.ts.map +1 -0
  196. package/dist/utils/command-safety.devnull.test.js +13 -0
  197. package/dist/utils/command-safety.devnull.test.js.map +1 -0
  198. package/dist/utils/command-safety.js +10 -364
  199. package/dist/utils/command-safety.js.map +1 -1
  200. package/dist/utils/extract-command-messages.test.d.ts +2 -0
  201. package/dist/utils/extract-command-messages.test.d.ts.map +1 -0
  202. package/dist/utils/extract-command-messages.test.js +58 -51
  203. package/dist/utils/extract-command-messages.test.js.map +1 -0
  204. package/package.json +1 -1
  205. package/dist/app.model-command-feedback.test.d.ts +0 -2
  206. package/dist/app.model-command-feedback.test.d.ts.map +0 -1
  207. package/dist/app.model-command-feedback.test.js +0 -19
  208. package/dist/app.model-command-feedback.test.js.map +0 -1
  209. package/dist/components/MentorMode.test.d.ts +0 -2
  210. package/dist/components/MentorMode.test.d.ts.map +0 -1
  211. package/dist/components/MentorMode.test.js.map +0 -1
  212. package/dist/components/StatusBar.test.d.ts +0 -2
  213. package/dist/components/StatusBar.test.d.ts.map +0 -1
  214. package/dist/components/StatusBar.test.js +0 -19
  215. package/dist/components/StatusBar.test.js.map +0 -1
  216. package/dist/debug-schema.d.ts +0 -2
  217. package/dist/debug-schema.d.ts.map +0 -1
  218. package/dist/debug-schema.js +0 -22
  219. package/dist/debug-schema.js.map +0 -1
  220. package/dist/hooks/use-model-selection.test.d.ts +0 -2
  221. package/dist/hooks/use-model-selection.test.d.ts.map +0 -1
  222. package/dist/hooks/use-model-selection.test.js +0 -28
  223. package/dist/hooks/use-model-selection.test.js.map +0 -1
  224. package/dist/hooks/use-path-completion.test.d.ts +0 -2
  225. package/dist/hooks/use-path-completion.test.d.ts.map +0 -1
  226. package/dist/hooks/use-path-completion.test.js +0 -29
  227. package/dist/hooks/use-path-completion.test.js.map +0 -1
  228. package/dist/lib/mentor-client.d.ts +0 -41
  229. package/dist/lib/mentor-client.d.ts.map +0 -1
  230. package/dist/lib/mentor-client.js +0 -146
  231. package/dist/lib/mentor-client.js.map +0 -1
  232. package/dist/lib/mentor-client.test.d.ts +0 -2
  233. package/dist/lib/mentor-client.test.d.ts.map +0 -1
  234. package/dist/lib/mentor-client.test.js +0 -440
  235. package/dist/lib/mentor-client.test.js.map +0 -1
  236. package/dist/lib/retry-strategy.d.ts +0 -43
  237. package/dist/lib/retry-strategy.d.ts.map +0 -1
  238. package/dist/lib/retry-strategy.js +0 -93
  239. package/dist/lib/retry-strategy.js.map +0 -1
  240. package/dist/lib/retry-strategy.test.d.ts +0 -2
  241. package/dist/lib/retry-strategy.test.d.ts.map +0 -1
  242. package/dist/lib/retry-strategy.test.js +0 -200
  243. package/dist/lib/retry-strategy.test.js.map +0 -1
  244. package/dist/prompts/default.md.bak +0 -77
  245. package/dist/providers/github-copilot/model-direct.d.ts +0 -34
  246. package/dist/providers/github-copilot/model-direct.d.ts.map +0 -1
  247. package/dist/providers/github-copilot/model-direct.js +0 -443
  248. package/dist/providers/github-copilot/model-direct.js.map +0 -1
  249. package/dist/providers/openrouter/merge-messages.test.d.ts +0 -2
  250. package/dist/providers/openrouter/merge-messages.test.d.ts.map +0 -1
  251. package/dist/providers/openrouter/merge-messages.test.js +0 -83
  252. package/dist/providers/openrouter/merge-messages.test.js.map +0 -1
  253. package/dist/providers/openrouter.history.test.d.ts +0 -2
  254. package/dist/providers/openrouter.history.test.d.ts.map +0 -1
  255. package/dist/providers/openrouter.history.test.js +0 -533
  256. package/dist/providers/openrouter.history.test.js.map +0 -1
  257. package/dist/reproduce_issue.test.d.ts +0 -2
  258. package/dist/reproduce_issue.test.d.ts.map +0 -1
  259. package/dist/reproduce_issue.test.js +0 -31
  260. package/dist/reproduce_issue.test.js.map +0 -1
  261. package/dist/services/conversation-result-builder.d.ts +0 -41
  262. package/dist/services/conversation-result-builder.d.ts.map +0 -1
  263. package/dist/services/conversation-result-builder.js +0 -110
  264. package/dist/services/conversation-result-builder.js.map +0 -1
  265. package/dist/services/conversation-result-builder.test.d.ts +0 -2
  266. package/dist/services/conversation-result-builder.test.d.ts.map +0 -1
  267. package/dist/services/conversation-result-builder.test.js +0 -76
  268. package/dist/services/conversation-result-builder.test.js.map +0 -1
  269. package/dist/services/conversation-session.usage.test.d.ts +0 -2
  270. package/dist/services/conversation-session.usage.test.d.ts.map +0 -1
  271. package/dist/services/conversation-session.usage.test.js +0 -59
  272. package/dist/services/conversation-session.usage.test.js.map +0 -1
  273. package/dist/services/stream-event-processor.d.ts +0 -32
  274. package/dist/services/stream-event-processor.d.ts.map +0 -1
  275. package/dist/services/stream-event-processor.js +0 -344
  276. package/dist/services/stream-event-processor.js.map +0 -1
  277. package/dist/services/stream-event-processor.test.d.ts +0 -2
  278. package/dist/services/stream-event-processor.test.d.ts.map +0 -1
  279. package/dist/services/stream-event-processor.test.js +0 -117
  280. package/dist/services/stream-event-processor.test.js.map +0 -1
  281. package/dist/test-search-tool.d.ts +0 -2
  282. package/dist/test-search-tool.d.ts.map +0 -1
  283. package/dist/test-search-tool.js +0 -36
  284. package/dist/test-search-tool.js.map +0 -1
  285. package/dist/types/messages.d.ts +0 -29
  286. package/dist/types/messages.d.ts.map +0 -1
  287. package/dist/types/messages.js +0 -2
  288. package/dist/types/messages.js.map +0 -1
  289. package/dist/utils/extract-command-messages.repro.test.d.ts +0 -2
  290. package/dist/utils/extract-command-messages.repro.test.d.ts.map +0 -1
  291. package/dist/utils/extract-command-messages.repro.test.js +0 -31
  292. package/dist/utils/extract-command-messages.repro.test.js.map +0 -1
  293. package/dist/utils/message-utils.d.ts +0 -17
  294. package/dist/utils/message-utils.d.ts.map +0 -1
  295. package/dist/utils/message-utils.js +0 -52
  296. package/dist/utils/message-utils.js.map +0 -1
  297. package/dist/utils/message-utils.test.d.ts +0 -2
  298. package/dist/utils/message-utils.test.d.ts.map +0 -1
  299. package/dist/utils/message-utils.test.js +0 -48
  300. package/dist/utils/message-utils.test.js.map +0 -1
@@ -1,533 +0,0 @@
1
- import test from 'ava';
2
- import { OpenRouterModel, clearOpenRouterConversations } from './openrouter.js';
3
- import { settingsService } from '../services/settings-service.js';
4
- const originalFetch = globalThis.fetch;
5
- const originalGet = settingsService.get;
6
- const createJsonResponse = (body) => new Response(JSON.stringify(body), {
7
- status: 200,
8
- headers: { 'Content-Type': 'application/json' },
9
- });
10
- test.beforeEach(() => {
11
- clearOpenRouterConversations();
12
- settingsService.get = ((key) => {
13
- if (key === 'agent.openrouter.apiKey') {
14
- return 'mock-api-key';
15
- }
16
- return originalGet.call(settingsService, key);
17
- });
18
- });
19
- test.afterEach.always(() => {
20
- clearOpenRouterConversations();
21
- globalThis.fetch = originalFetch;
22
- settingsService.get = originalGet;
23
- });
24
- test.serial('previousResponseId maintains conversation history across turns', async (t) => {
25
- const requests = [];
26
- const responses = [
27
- // First turn response
28
- createJsonResponse({
29
- id: 'resp-1',
30
- choices: [
31
- {
32
- message: {
33
- content: 'Hi there! How can I help you?',
34
- },
35
- },
36
- ],
37
- usage: { prompt_tokens: 10, completion_tokens: 8, total_tokens: 18 },
38
- }),
39
- // Second turn response
40
- createJsonResponse({
41
- id: 'resp-2',
42
- choices: [
43
- {
44
- message: {
45
- content: "I'm doing well, thanks!",
46
- },
47
- },
48
- ],
49
- usage: { prompt_tokens: 25, completion_tokens: 6, total_tokens: 31 },
50
- }),
51
- // Third turn response
52
- createJsonResponse({
53
- id: 'resp-3',
54
- choices: [
55
- {
56
- message: {
57
- content: 'Glad to hear that!',
58
- },
59
- },
60
- ],
61
- usage: { prompt_tokens: 35, completion_tokens: 4, total_tokens: 39 },
62
- }),
63
- ];
64
- globalThis.fetch = async (_url, options) => {
65
- const body = JSON.parse(options.body);
66
- requests.push(body);
67
- return responses[requests.length - 1];
68
- };
69
- const model = new OpenRouterModel('mock-model');
70
- // First turn - provide explicit history in array form to bootstrap conversation
71
- const firstResponse = await model.getResponse({
72
- systemInstructions: 'You are a helpful assistant.',
73
- input: [
74
- { type: 'input_text', text: 'Hello' },
75
- ],
76
- previousResponseId: 'conv-1', // Use a conversation ID to enable history storage
77
- });
78
- t.truthy(firstResponse);
79
- t.is(firstResponse.responseId, 'resp-1');
80
- t.is(requests.length, 1);
81
- // Verify first turn request structure
82
- const firstRequest = requests[0];
83
- t.truthy(firstRequest);
84
- t.deepEqual(firstRequest.messages, [
85
- { role: 'system', content: 'You are a helpful assistant.' },
86
- { role: 'user', content: 'Hello' },
87
- ]);
88
- // Second turn - use previousResponseId to retrieve stored conversation history
89
- const secondResponse = await model.getResponse({
90
- systemInstructions: 'You are a helpful assistant.',
91
- input: 'How are you?',
92
- previousResponseId: firstResponse.responseId,
93
- });
94
- t.truthy(secondResponse);
95
- t.is(secondResponse.responseId, 'resp-2');
96
- t.is(requests.length, 2);
97
- // Verify second turn request includes history from first turn
98
- const secondRequest = requests[1];
99
- t.truthy(secondRequest);
100
- t.deepEqual(secondRequest.messages, [
101
- { role: 'system', content: 'You are a helpful assistant.' },
102
- // History from first turn (stored because we used previousResponseId in turn 1)
103
- { role: 'user', content: 'Hello' },
104
- { role: 'assistant', content: 'Hi there! How can I help you?' },
105
- // Current turn
106
- { role: 'user', content: 'How are you?' },
107
- ]);
108
- // Third turn - continue the conversation
109
- const thirdResponse = await model.getResponse({
110
- systemInstructions: 'You are a helpful assistant.',
111
- input: 'Great!',
112
- previousResponseId: secondResponse.responseId,
113
- });
114
- t.truthy(thirdResponse);
115
- t.is(thirdResponse.responseId, 'resp-3');
116
- t.is(requests.length, 3);
117
- // Verify third turn includes full conversation history
118
- const thirdRequest = requests[2];
119
- t.truthy(thirdRequest);
120
- t.deepEqual(thirdRequest.messages, [
121
- { role: 'system', content: 'You are a helpful assistant.' },
122
- { role: 'user', content: 'Hello' },
123
- { role: 'assistant', content: 'Hi there! How can I help you?' },
124
- { role: 'user', content: 'How are you?' },
125
- { role: 'assistant', content: "I'm doing well, thanks!" },
126
- { role: 'user', content: 'Great!' },
127
- ]);
128
- });
129
- test.serial('previousResponseId works with tool calls in history', async (t) => {
130
- const requests = [];
131
- const responses = [
132
- // First turn with tool call
133
- createJsonResponse({
134
- id: 'resp-1',
135
- choices: [
136
- {
137
- message: {
138
- content: null,
139
- tool_calls: [
140
- {
141
- id: 'call-123',
142
- type: 'function',
143
- function: {
144
- name: 'get_weather',
145
- arguments: '{"location":"San Francisco"}',
146
- },
147
- },
148
- ],
149
- },
150
- },
151
- ],
152
- usage: { prompt_tokens: 15, completion_tokens: 10, total_tokens: 25 },
153
- }),
154
- // Second turn response
155
- createJsonResponse({
156
- id: 'resp-2',
157
- choices: [
158
- {
159
- message: {
160
- content: 'Based on the weather data, it looks sunny in San Francisco!',
161
- },
162
- },
163
- ],
164
- usage: { prompt_tokens: 35, completion_tokens: 12, total_tokens: 47 },
165
- }),
166
- ];
167
- globalThis.fetch = async (_url, options) => {
168
- const body = JSON.parse(options.body);
169
- requests.push(body);
170
- return responses[requests.length - 1];
171
- };
172
- const model = new OpenRouterModel('mock-model');
173
- // First turn - model requests a tool call
174
- // Use a conversation ID to enable history storage
175
- const firstResponse = await model.getResponse({
176
- systemInstructions: 'You are a helpful assistant.',
177
- input: "What's the weather like?",
178
- previousResponseId: 'conv-1',
179
- tools: [
180
- {
181
- type: 'function',
182
- name: 'get_weather',
183
- description: 'Get weather for a location',
184
- parameters: {
185
- type: 'object',
186
- properties: {
187
- location: { type: 'string' },
188
- },
189
- },
190
- },
191
- ],
192
- });
193
- t.truthy(firstResponse);
194
- t.is(firstResponse.responseId, 'resp-1');
195
- t.is(requests.length, 1);
196
- // Second turn - provide tool result and continue conversation
197
- const secondResponse = await model.getResponse({
198
- systemInstructions: 'You are a helpful assistant.',
199
- input: [
200
- {
201
- type: 'function_call',
202
- id: 'call-123',
203
- callId: 'call-123',
204
- name: 'get_weather',
205
- arguments: '{"location":"San Francisco"}',
206
- },
207
- {
208
- type: 'function_call_result',
209
- callId: 'call-123',
210
- output: '{"temperature": 72, "condition": "sunny"}',
211
- },
212
- ],
213
- previousResponseId: firstResponse.responseId,
214
- });
215
- t.truthy(secondResponse);
216
- t.is(secondResponse.responseId, 'resp-2');
217
- t.is(requests.length, 2);
218
- // Verify second turn request includes tool call history
219
- const secondRequest = requests[1];
220
- t.truthy(secondRequest);
221
- t.deepEqual(secondRequest.messages, [
222
- { role: 'system', content: 'You are a helpful assistant.' },
223
- // History from first turn
224
- { role: 'user', content: "What's the weather like?" },
225
- {
226
- role: 'assistant',
227
- content: null,
228
- tool_calls: [
229
- {
230
- id: 'call-123',
231
- type: 'function',
232
- function: {
233
- name: 'get_weather',
234
- arguments: '{"location":"San Francisco"}',
235
- },
236
- },
237
- ],
238
- },
239
- // Current turn with tool result
240
- {
241
- role: 'assistant',
242
- content: null,
243
- tool_calls: [
244
- {
245
- id: 'call-123',
246
- type: 'function',
247
- function: {
248
- name: 'get_weather',
249
- arguments: '{"location":"San Francisco"}',
250
- },
251
- },
252
- ],
253
- },
254
- {
255
- role: 'tool',
256
- tool_call_id: 'call-123',
257
- content: '{"temperature": 72, "condition": "sunny"}',
258
- },
259
- ]);
260
- });
261
- test.serial('previousResponseId works with reasoning details in history', async (t) => {
262
- const requests = [];
263
- const responses = [
264
- // First turn with reasoning
265
- createJsonResponse({
266
- id: 'resp-1',
267
- choices: [
268
- {
269
- message: {
270
- content: 'The answer is 42.',
271
- reasoning_details: [
272
- { type: 'reasoning.text', text: 'Let me think about this...' },
273
- ],
274
- },
275
- },
276
- ],
277
- usage: { prompt_tokens: 10, completion_tokens: 15, total_tokens: 25 },
278
- }),
279
- // Second turn response
280
- createJsonResponse({
281
- id: 'resp-2',
282
- choices: [
283
- {
284
- message: {
285
- content: 'Yes, 42 is the answer to life, the universe, and everything!',
286
- },
287
- },
288
- ],
289
- usage: { prompt_tokens: 30, completion_tokens: 14, total_tokens: 44 },
290
- }),
291
- ];
292
- globalThis.fetch = async (_url, options) => {
293
- const body = JSON.parse(options.body);
294
- requests.push(body);
295
- return responses[requests.length - 1];
296
- };
297
- const model = new OpenRouterModel('mock-model');
298
- // First turn - model provides reasoning
299
- // Use a conversation ID to enable history storage
300
- const firstResponse = await model.getResponse({
301
- systemInstructions: 'You are a helpful assistant.',
302
- input: 'What is the meaning of life?',
303
- previousResponseId: 'conv-1',
304
- modelSettings: { reasoningEffort: 'high' },
305
- });
306
- t.truthy(firstResponse);
307
- t.is(firstResponse.responseId, 'resp-1');
308
- t.is(requests.length, 1);
309
- // Second turn - continue conversation
310
- const secondResponse = await model.getResponse({
311
- systemInstructions: 'You are a helpful assistant.',
312
- input: 'Are you sure about that?',
313
- previousResponseId: firstResponse.responseId,
314
- });
315
- t.truthy(secondResponse);
316
- t.is(secondResponse.responseId, 'resp-2');
317
- t.is(requests.length, 2);
318
- // Verify second turn request includes reasoning from first turn
319
- const secondRequest = requests[1];
320
- t.truthy(secondRequest);
321
- t.deepEqual(secondRequest.messages, [
322
- { role: 'system', content: 'You are a helpful assistant.' },
323
- // History from first turn
324
- { role: 'user', content: 'What is the meaning of life?' },
325
- {
326
- role: 'assistant',
327
- content: 'The answer is 42.',
328
- reasoning_details: [
329
- { type: 'reasoning.text', text: 'Let me think about this...' },
330
- ],
331
- },
332
- // Current turn
333
- { role: 'user', content: 'Are you sure about that?' },
334
- ]);
335
- });
336
- test.serial('multiple turns maintain complete conversation history', async (t) => {
337
- const requests = [];
338
- const responses = [
339
- createJsonResponse({
340
- id: 'resp-1',
341
- choices: [{ message: { content: 'Response 1' } }],
342
- usage: { prompt_tokens: 5, completion_tokens: 2, total_tokens: 7 },
343
- }),
344
- createJsonResponse({
345
- id: 'resp-2',
346
- choices: [{ message: { content: 'Response 2' } }],
347
- usage: { prompt_tokens: 10, completion_tokens: 2, total_tokens: 12 },
348
- }),
349
- createJsonResponse({
350
- id: 'resp-3',
351
- choices: [{ message: { content: 'Response 3' } }],
352
- usage: { prompt_tokens: 15, completion_tokens: 2, total_tokens: 17 },
353
- }),
354
- ];
355
- globalThis.fetch = async (_url, options) => {
356
- const body = JSON.parse(options.body);
357
- requests.push(body);
358
- return responses[requests.length - 1];
359
- };
360
- const model = new OpenRouterModel('mock-model');
361
- // Turn 1 - start with a conversation ID
362
- const resp1 = await model.getResponse({
363
- systemInstructions: 'System',
364
- input: 'Turn 1',
365
- previousResponseId: 'conv-1',
366
- });
367
- t.is(resp1.responseId, 'resp-1');
368
- // Turn 2
369
- const resp2 = await model.getResponse({
370
- systemInstructions: 'System',
371
- input: 'Turn 2',
372
- previousResponseId: resp1.responseId,
373
- });
374
- t.is(resp2.responseId, 'resp-2');
375
- // Turn 3
376
- const resp3 = await model.getResponse({
377
- systemInstructions: 'System',
378
- input: 'Turn 3',
379
- previousResponseId: resp2.responseId,
380
- });
381
- t.is(resp3.responseId, 'resp-3');
382
- // Verify turn 3 contains all history
383
- const thirdRequest = requests[2];
384
- t.deepEqual(thirdRequest.messages, [
385
- { role: 'system', content: 'System' },
386
- { role: 'user', content: 'Turn 1' },
387
- { role: 'assistant', content: 'Response 1' },
388
- { role: 'user', content: 'Turn 2' },
389
- { role: 'assistant', content: 'Response 2' },
390
- { role: 'user', content: 'Turn 3' },
391
- ]);
392
- });
393
- test.serial('without previousResponseId, no history is included', async (t) => {
394
- const requests = [];
395
- const responses = [
396
- createJsonResponse({
397
- id: 'resp-1',
398
- choices: [{ message: { content: 'First response' } }],
399
- usage: { prompt_tokens: 5, completion_tokens: 2, total_tokens: 7 },
400
- }),
401
- createJsonResponse({
402
- id: 'resp-2',
403
- choices: [{ message: { content: 'Second response' } }],
404
- usage: { prompt_tokens: 5, completion_tokens: 2, total_tokens: 7 },
405
- }),
406
- ];
407
- globalThis.fetch = async (_url, options) => {
408
- const body = JSON.parse(options.body);
409
- requests.push(body);
410
- return responses[requests.length - 1];
411
- };
412
- const model = new OpenRouterModel('mock-model');
413
- // First turn
414
- await model.getResponse({
415
- systemInstructions: 'System',
416
- input: 'First message',
417
- });
418
- // Second turn WITHOUT previousResponseId
419
- await model.getResponse({
420
- systemInstructions: 'System',
421
- input: 'Second message',
422
- });
423
- // Verify second request has no history
424
- const secondRequest = requests[1];
425
- t.deepEqual(secondRequest.messages, [
426
- { role: 'system', content: 'System' },
427
- { role: 'user', content: 'Second message' },
428
- ]);
429
- });
430
- test.serial('clearOpenRouterConversations removes specific conversation', async (t) => {
431
- const requests = [];
432
- const responses = [
433
- createJsonResponse({
434
- id: 'resp-1',
435
- choices: [{ message: { content: 'Response 1' } }],
436
- usage: { prompt_tokens: 5, completion_tokens: 2, total_tokens: 7 },
437
- }),
438
- createJsonResponse({
439
- id: 'resp-2',
440
- choices: [{ message: { content: 'Response 2' } }],
441
- usage: { prompt_tokens: 5, completion_tokens: 2, total_tokens: 7 },
442
- }),
443
- ];
444
- globalThis.fetch = async (_url, options) => {
445
- const body = JSON.parse(options.body);
446
- requests.push(body);
447
- return responses[requests.length - 1];
448
- };
449
- const model = new OpenRouterModel('mock-model');
450
- // First turn
451
- const resp1 = await model.getResponse({
452
- systemInstructions: 'System',
453
- input: 'First message',
454
- });
455
- // Clear the conversation
456
- clearOpenRouterConversations(resp1.responseId);
457
- // Second turn with previousResponseId should have no history (cleared)
458
- await model.getResponse({
459
- systemInstructions: 'System',
460
- input: 'Second message',
461
- previousResponseId: resp1.responseId,
462
- });
463
- // Verify second request has no history
464
- const secondRequest = requests[1];
465
- t.deepEqual(secondRequest.messages, [
466
- { role: 'system', content: 'System' },
467
- { role: 'user', content: 'Second message' },
468
- ]);
469
- });
470
- test.serial('previousResponseId works with streaming responses', async (t) => {
471
- const requests = [];
472
- const encoder = new TextEncoder();
473
- const createStream = (responseId, content) => new ReadableStream({
474
- start(controller) {
475
- controller.enqueue(encoder.encode(`data: {"id":"${responseId}","choices":[{"delta":{"content":"${content}"}}]}\n`));
476
- controller.enqueue(encoder.encode('data: [DONE]\n'));
477
- controller.close();
478
- },
479
- });
480
- const responses = [
481
- new Response(createStream('resp-1', 'Streaming response 1'), {
482
- status: 200,
483
- headers: { 'Content-Type': 'text/event-stream' },
484
- }),
485
- new Response(createStream('resp-2', 'Streaming response 2'), {
486
- status: 200,
487
- headers: { 'Content-Type': 'text/event-stream' },
488
- }),
489
- ];
490
- globalThis.fetch = async (_url, options) => {
491
- const body = JSON.parse(options.body);
492
- requests.push(body);
493
- return responses[requests.length - 1];
494
- };
495
- const model = new OpenRouterModel('mock-model');
496
- // First turn with streaming - use a conversation ID to enable history storage
497
- const events1 = [];
498
- for await (const event of model.getStreamedResponse({
499
- systemInstructions: 'System',
500
- input: 'First message',
501
- previousResponseId: 'conv-1', // Start with a conversation ID
502
- })) {
503
- events1.push(event);
504
- }
505
- t.true(events1.length > 0);
506
- const responseDone1 = events1.find(e => e.type === 'response_done');
507
- t.truthy(responseDone1);
508
- // When previousResponseId is provided, it's used as the responseId in streaming
509
- t.is(responseDone1.response.id, 'conv-1');
510
- // Second turn with streaming - use previousResponseId from first turn
511
- const events2 = [];
512
- for await (const event of model.getStreamedResponse({
513
- systemInstructions: 'System',
514
- input: 'Second message',
515
- previousResponseId: responseDone1.response.id,
516
- })) {
517
- events2.push(event);
518
- }
519
- t.true(events2.length > 0);
520
- const responseDone2 = events2.find(e => e.type === 'response_done');
521
- t.truthy(responseDone2);
522
- // Same conversation ID is reused
523
- t.is(responseDone2.response.id, 'conv-1');
524
- // Verify second request includes history from first streaming turn
525
- const secondRequest = requests[1];
526
- t.deepEqual(secondRequest.messages, [
527
- { role: 'system', content: 'System' },
528
- { role: 'user', content: 'First message' },
529
- { role: 'assistant', content: 'Streaming response 1' },
530
- { role: 'user', content: 'Second message' },
531
- ]);
532
- });
533
- //# sourceMappingURL=openrouter.history.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openrouter.history.test.js","sourceRoot":"","sources":["../../source/providers/openrouter.history.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=reproduce_issue.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reproduce_issue.test.d.ts","sourceRoot":"","sources":["../source/reproduce_issue.test.ts"],"names":[],"mappings":""}
@@ -1,31 +0,0 @@
1
- import test from 'ava';
2
- import { createSettingsCommand } from './utils/settings-command.js';
3
- test('settings command handles provider with dash', t => {
4
- const setCalls = [];
5
- const applied = [];
6
- const messages = [];
7
- const settingsService = {
8
- get: () => 'old-model',
9
- set: (key, value) => setCalls.push({ key, value }),
10
- getSource: () => 'default',
11
- isRuntimeModifiable: () => true,
12
- };
13
- const deps = {
14
- settingsService,
15
- addSystemMessage: (msg) => messages.push(msg),
16
- applyRuntimeSetting: (key, value) => applied.push({ key, value }),
17
- setInput: () => { },
18
- };
19
- const command = createSettingsCommand(deps);
20
- // Simulate user input
21
- // In our implementation, parts[0] is key, parts.slice(1) is rawValue
22
- // trimmedArgs is "agent.model gpt-4.1 --provider=github-copilot"
23
- command.action('agent.model gpt-4.1 --provider=github-copilot');
24
- // Should find the provider even with a dash
25
- const providerCall = setCalls.find(c => c.key === 'agent.provider');
26
- t.truthy(providerCall, 'Should have set agent.provider');
27
- t.is(providerCall?.value, 'github-copilot');
28
- const modelCall = setCalls.find(c => c.key === 'agent.model');
29
- t.is(modelCall?.value, 'gpt-4.1');
30
- });
31
- //# sourceMappingURL=reproduce_issue.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reproduce_issue.test.js","sourceRoot":"","sources":["../source/reproduce_issue.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,IAAI,CAAC,6CAA6C,EAAE,CAAC,CAAC,EAAE;IACpD,MAAM,QAAQ,GAAU,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAU,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,eAAe,GAAG;QACpB,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW;QACtB,GAAG,EAAE,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,KAAK,EAAC,CAAC;QAC7D,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS;QAC1B,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI;KAC3B,CAAC;IAET,MAAM,IAAI,GAAG;QACT,eAAe;QACf,gBAAgB,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QACrD,mBAAmB,EAAE,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,KAAK,EAAC,CAAC;QAC5E,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;KACrB,CAAC;IAEF,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAE5C,sBAAsB;IACtB,qEAAqE;IACrE,iEAAiE;IACjE,OAAO,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC;IAEhE,4CAA4C;IAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,gBAAgB,CAAC,CAAC;IACpE,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,gCAAgC,CAAC,CAAC;IACzD,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC;IAC9D,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC"}
@@ -1,41 +0,0 @@
1
- import type { CommandMessage } from '../tools/types.js';
2
- import { type NormalizedUsage } from '../utils/token-usage.js';
3
- interface ApprovalResult {
4
- type: 'approval_required';
5
- approval: {
6
- agentName: string;
7
- toolName: string;
8
- argumentsText: string;
9
- rawInterruption: any;
10
- callId?: string;
11
- };
12
- }
13
- interface ResponseResult {
14
- type: 'response';
15
- commandMessages: CommandMessage[];
16
- finalText: string;
17
- reasoningText?: string;
18
- usage?: NormalizedUsage;
19
- }
20
- export type ConversationResult = ApprovalResult | ResponseResult;
21
- export interface PendingApprovalContext {
22
- state: any;
23
- interruption: any;
24
- emittedCommandIds: Set<string>;
25
- toolCallArgumentsById: Map<string, unknown>;
26
- }
27
- interface BuildConversationResultParams {
28
- result: any;
29
- finalOutputOverride?: string;
30
- reasoningOutputOverride?: string;
31
- emittedCommandIds?: Set<string>;
32
- usage?: NormalizedUsage;
33
- getToolCallArgumentsSnapshot?: () => Map<string, unknown>;
34
- }
35
- export declare const getCommandFromArgs: (args: unknown) => string;
36
- export declare const buildConversationResult: ({ result, finalOutputOverride, reasoningOutputOverride, emittedCommandIds, usage, getToolCallArgumentsSnapshot, }: BuildConversationResultParams) => {
37
- conversationResult: ConversationResult;
38
- pendingApprovalContext: PendingApprovalContext | null;
39
- };
40
- export {};
41
- //# sourceMappingURL=conversation-result-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversation-result-builder.d.ts","sourceRoot":"","sources":["../../source/services/conversation-result-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE7E,UAAU,cAAc;IACtB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,GAAG,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG,cAAc,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,GAAG,CAAC;IACX,YAAY,EAAE,GAAG,CAAC;IAClB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,UAAU,6BAA6B;IACrC,MAAM,EAAE,GAAG,CAAC;IACZ,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,4BAA4B,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3D;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,OAAO,KAAG,MA8ClD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,mHAOrC,6BAA6B,KAAG;IACjC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,sBAAsB,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAoEvD,CAAC"}