@qduc/term2 0.3.0 → 0.3.1

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 (230) hide show
  1. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  2. package/dist/hooks/use-model-selection.js +32 -11
  3. package/dist/hooks/use-model-selection.js.map +1 -1
  4. package/dist/hooks/use-model-selection.test.js +107 -10
  5. package/dist/hooks/use-model-selection.test.js.map +1 -1
  6. package/dist/providers/ai-sdk-message-normalizer.d.ts +8 -0
  7. package/dist/providers/ai-sdk-message-normalizer.d.ts.map +1 -0
  8. package/dist/providers/ai-sdk-message-normalizer.js +70 -0
  9. package/dist/providers/ai-sdk-message-normalizer.js.map +1 -0
  10. package/dist/providers/ai-sdk-message-normalizer.test.d.ts +2 -0
  11. package/dist/providers/ai-sdk-message-normalizer.test.d.ts.map +1 -0
  12. package/dist/providers/ai-sdk-message-normalizer.test.js +195 -0
  13. package/dist/providers/ai-sdk-message-normalizer.test.js.map +1 -0
  14. package/dist/providers/ai-sdk-openai-compatible.provider.d.ts.map +1 -1
  15. package/dist/providers/ai-sdk-openai-compatible.provider.js +2 -1
  16. package/dist/providers/ai-sdk-openai-compatible.provider.js.map +1 -1
  17. package/dist/providers/ai-sdk-openrouter.provider.d.ts +16 -0
  18. package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -0
  19. package/dist/providers/ai-sdk-openrouter.provider.js +22 -0
  20. package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -0
  21. package/dist/providers/ai-sdk-openrouter.provider.test.d.ts +2 -0
  22. package/dist/providers/ai-sdk-openrouter.provider.test.d.ts.map +1 -0
  23. package/dist/providers/ai-sdk-openrouter.provider.test.js +70 -0
  24. package/dist/providers/ai-sdk-openrouter.provider.test.js.map +1 -0
  25. package/dist/providers/openrouter.provider.js +4 -3
  26. package/dist/providers/openrouter.provider.js.map +1 -1
  27. package/dist/scripts/eval-auto-approval/dataset.d.ts +1 -1
  28. package/dist/services/stream-event-parsing.js +1 -1
  29. package/dist/services/stream-event-parsing.js.map +1 -1
  30. package/dist/services/stream-event-parsing.test.js +13 -0
  31. package/dist/services/stream-event-parsing.test.js.map +1 -1
  32. package/package.json +2 -1
  33. package/readme.md +29 -24
  34. package/dist/agent.lite-mode.test.d.ts +0 -2
  35. package/dist/agent.lite-mode.test.d.ts.map +0 -1
  36. package/dist/agent.lite-mode.test.js +0 -39
  37. package/dist/agent.lite-mode.test.js.map +0 -1
  38. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts +0 -2
  39. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts.map +0 -1
  40. package/dist/components/ModelSelectionMenu.error-tabs.test.js +0 -18
  41. package/dist/components/ModelSelectionMenu.error-tabs.test.js.map +0 -1
  42. package/dist/components/TextInput.d.ts +0 -42
  43. package/dist/components/TextInput.d.ts.map +0 -1
  44. package/dist/components/TextInput.js +0 -398
  45. package/dist/components/TextInput.js.map +0 -1
  46. package/dist/components/TextInput.test.d.ts +0 -2
  47. package/dist/components/TextInput.test.d.ts.map +0 -1
  48. package/dist/components/TextInput.test.js +0 -75
  49. package/dist/components/TextInput.test.js.map +0 -1
  50. package/dist/debug_ask_mentor.d.ts +0 -2
  51. package/dist/debug_ask_mentor.d.ts.map +0 -1
  52. package/dist/debug_ask_mentor.js +0 -73
  53. package/dist/debug_ask_mentor.js.map +0 -1
  54. package/dist/lib/shell.d.ts +0 -7
  55. package/dist/lib/shell.d.ts.map +0 -1
  56. package/dist/lib/shell.js +0 -56
  57. package/dist/lib/shell.js.map +0 -1
  58. package/dist/modes/companion/command-index.d.ts +0 -26
  59. package/dist/modes/companion/command-index.d.ts.map +0 -1
  60. package/dist/modes/companion/command-index.js +0 -50
  61. package/dist/modes/companion/command-index.js.map +0 -1
  62. package/dist/modes/companion/command-index.test.d.ts +0 -2
  63. package/dist/modes/companion/command-index.test.d.ts.map +0 -1
  64. package/dist/modes/companion/command-index.test.js +0 -86
  65. package/dist/modes/companion/command-index.test.js.map +0 -1
  66. package/dist/modes/companion/companion-app.d.ts +0 -12
  67. package/dist/modes/companion/companion-app.d.ts.map +0 -1
  68. package/dist/modes/companion/companion-app.js +0 -297
  69. package/dist/modes/companion/companion-app.js.map +0 -1
  70. package/dist/modes/companion/companion-session.d.ts +0 -63
  71. package/dist/modes/companion/companion-session.d.ts.map +0 -1
  72. package/dist/modes/companion/companion-session.js +0 -146
  73. package/dist/modes/companion/companion-session.js.map +0 -1
  74. package/dist/modes/companion/companion-session.test.d.ts +0 -2
  75. package/dist/modes/companion/companion-session.test.d.ts.map +0 -1
  76. package/dist/modes/companion/companion-session.test.js +0 -28
  77. package/dist/modes/companion/companion-session.test.js.map +0 -1
  78. package/dist/modes/companion/components/status-bar.d.ts +0 -13
  79. package/dist/modes/companion/components/status-bar.d.ts.map +0 -1
  80. package/dist/modes/companion/components/status-bar.js +0 -26
  81. package/dist/modes/companion/components/status-bar.js.map +0 -1
  82. package/dist/modes/companion/context-buffer.d.ts +0 -65
  83. package/dist/modes/companion/context-buffer.d.ts.map +0 -1
  84. package/dist/modes/companion/context-buffer.js +0 -156
  85. package/dist/modes/companion/context-buffer.js.map +0 -1
  86. package/dist/modes/companion/context-buffer.test.d.ts +0 -2
  87. package/dist/modes/companion/context-buffer.test.d.ts.map +0 -1
  88. package/dist/modes/companion/context-buffer.test.js +0 -154
  89. package/dist/modes/companion/context-buffer.test.js.map +0 -1
  90. package/dist/modes/companion/event-detector.d.ts +0 -46
  91. package/dist/modes/companion/event-detector.d.ts.map +0 -1
  92. package/dist/modes/companion/event-detector.js +0 -169
  93. package/dist/modes/companion/event-detector.js.map +0 -1
  94. package/dist/modes/companion/event-detector.test.d.ts +0 -2
  95. package/dist/modes/companion/event-detector.test.d.ts.map +0 -1
  96. package/dist/modes/companion/event-detector.test.js +0 -121
  97. package/dist/modes/companion/event-detector.test.js.map +0 -1
  98. package/dist/modes/companion/index.d.ts +0 -33
  99. package/dist/modes/companion/index.d.ts.map +0 -1
  100. package/dist/modes/companion/index.js +0 -21
  101. package/dist/modes/companion/index.js.map +0 -1
  102. package/dist/modes/companion/input-key-mapper.d.ts +0 -3
  103. package/dist/modes/companion/input-key-mapper.d.ts.map +0 -1
  104. package/dist/modes/companion/input-key-mapper.js +0 -31
  105. package/dist/modes/companion/input-key-mapper.js.map +0 -1
  106. package/dist/modes/companion/input-key-mapper.test.d.ts +0 -2
  107. package/dist/modes/companion/input-key-mapper.test.d.ts.map +0 -1
  108. package/dist/modes/companion/input-key-mapper.test.js +0 -26
  109. package/dist/modes/companion/input-key-mapper.test.js.map +0 -1
  110. package/dist/modes/companion/input-parser.d.ts +0 -53
  111. package/dist/modes/companion/input-parser.d.ts.map +0 -1
  112. package/dist/modes/companion/input-parser.js +0 -114
  113. package/dist/modes/companion/input-parser.js.map +0 -1
  114. package/dist/modes/companion/input-parser.test.d.ts +0 -2
  115. package/dist/modes/companion/input-parser.test.d.ts.map +0 -1
  116. package/dist/modes/companion/input-parser.test.js +0 -123
  117. package/dist/modes/companion/input-parser.test.js.map +0 -1
  118. package/dist/modes/companion/mode-manager.d.ts +0 -41
  119. package/dist/modes/companion/mode-manager.d.ts.map +0 -1
  120. package/dist/modes/companion/mode-manager.js +0 -56
  121. package/dist/modes/companion/mode-manager.js.map +0 -1
  122. package/dist/modes/companion/mode-manager.test.d.ts +0 -2
  123. package/dist/modes/companion/mode-manager.test.d.ts.map +0 -1
  124. package/dist/modes/companion/mode-manager.test.js +0 -65
  125. package/dist/modes/companion/mode-manager.test.js.map +0 -1
  126. package/dist/modes/companion/output-classifier.d.ts +0 -15
  127. package/dist/modes/companion/output-classifier.d.ts.map +0 -1
  128. package/dist/modes/companion/output-classifier.js +0 -77
  129. package/dist/modes/companion/output-classifier.js.map +0 -1
  130. package/dist/modes/companion/output-classifier.test.d.ts +0 -2
  131. package/dist/modes/companion/output-classifier.test.d.ts.map +0 -1
  132. package/dist/modes/companion/output-classifier.test.js +0 -133
  133. package/dist/modes/companion/output-classifier.test.js.map +0 -1
  134. package/dist/modes/companion/pty-wrapper.d.ts +0 -46
  135. package/dist/modes/companion/pty-wrapper.d.ts.map +0 -1
  136. package/dist/modes/companion/pty-wrapper.js +0 -143
  137. package/dist/modes/companion/pty-wrapper.js.map +0 -1
  138. package/dist/modes/companion/safety-classifier.d.ts +0 -31
  139. package/dist/modes/companion/safety-classifier.d.ts.map +0 -1
  140. package/dist/modes/companion/safety-classifier.js +0 -140
  141. package/dist/modes/companion/safety-classifier.js.map +0 -1
  142. package/dist/modes/companion/safety-classifier.test.d.ts +0 -2
  143. package/dist/modes/companion/safety-classifier.test.d.ts.map +0 -1
  144. package/dist/modes/companion/safety-classifier.test.js +0 -151
  145. package/dist/modes/companion/safety-classifier.test.js.map +0 -1
  146. package/dist/modes/companion/summarizer.d.ts +0 -24
  147. package/dist/modes/companion/summarizer.d.ts.map +0 -1
  148. package/dist/modes/companion/summarizer.js +0 -132
  149. package/dist/modes/companion/summarizer.js.map +0 -1
  150. package/dist/modes/companion/terminal-history.d.ts +0 -27
  151. package/dist/modes/companion/terminal-history.d.ts.map +0 -1
  152. package/dist/modes/companion/terminal-history.js +0 -142
  153. package/dist/modes/companion/terminal-history.js.map +0 -1
  154. package/dist/prompts/simple-mentor.md +0 -215
  155. package/dist/providers/github-copilot/converters.d.ts +0 -45
  156. package/dist/providers/github-copilot/converters.d.ts.map +0 -1
  157. package/dist/providers/github-copilot/converters.js +0 -118
  158. package/dist/providers/github-copilot/converters.js.map +0 -1
  159. package/dist/providers/github-copilot/converters.test.d.ts +0 -2
  160. package/dist/providers/github-copilot/converters.test.d.ts.map +0 -1
  161. package/dist/providers/github-copilot/converters.test.js +0 -162
  162. package/dist/providers/github-copilot/converters.test.js.map +0 -1
  163. package/dist/providers/github-copilot/github-copilot.provider.d.ts +0 -2
  164. package/dist/providers/github-copilot/github-copilot.provider.d.ts.map +0 -1
  165. package/dist/providers/github-copilot/github-copilot.provider.js +0 -75
  166. package/dist/providers/github-copilot/github-copilot.provider.js.map +0 -1
  167. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts +0 -2
  168. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts.map +0 -1
  169. package/dist/providers/github-copilot/github-copilot.provider.test.js +0 -26
  170. package/dist/providers/github-copilot/github-copilot.provider.test.js.map +0 -1
  171. package/dist/providers/github-copilot/index.d.ts +0 -4
  172. package/dist/providers/github-copilot/index.d.ts.map +0 -1
  173. package/dist/providers/github-copilot/index.js +0 -4
  174. package/dist/providers/github-copilot/index.js.map +0 -1
  175. package/dist/providers/github-copilot/model.d.ts +0 -24
  176. package/dist/providers/github-copilot/model.d.ts.map +0 -1
  177. package/dist/providers/github-copilot/model.delta.test.d.ts +0 -2
  178. package/dist/providers/github-copilot/model.delta.test.d.ts.map +0 -1
  179. package/dist/providers/github-copilot/model.delta.test.js +0 -15
  180. package/dist/providers/github-copilot/model.delta.test.js.map +0 -1
  181. package/dist/providers/github-copilot/model.js +0 -498
  182. package/dist/providers/github-copilot/model.js.map +0 -1
  183. package/dist/providers/github-copilot/model.test.d.ts +0 -2
  184. package/dist/providers/github-copilot/model.test.d.ts.map +0 -1
  185. package/dist/providers/github-copilot/model.test.js +0 -63
  186. package/dist/providers/github-copilot/model.test.js.map +0 -1
  187. package/dist/providers/github-copilot/provider.d.ts +0 -15
  188. package/dist/providers/github-copilot/provider.d.ts.map +0 -1
  189. package/dist/providers/github-copilot/provider.js +0 -25
  190. package/dist/providers/github-copilot/provider.js.map +0 -1
  191. package/dist/providers/github-copilot/provider.test.d.ts +0 -2
  192. package/dist/providers/github-copilot/provider.test.d.ts.map +0 -1
  193. package/dist/providers/github-copilot/provider.test.js +0 -52
  194. package/dist/providers/github-copilot/provider.test.js.map +0 -1
  195. package/dist/providers/github-copilot/utils.d.ts +0 -20
  196. package/dist/providers/github-copilot/utils.d.ts.map +0 -1
  197. package/dist/providers/github-copilot/utils.js +0 -142
  198. package/dist/providers/github-copilot/utils.js.map +0 -1
  199. package/dist/providers/github-copilot/utils.test.d.ts +0 -2
  200. package/dist/providers/github-copilot/utils.test.d.ts.map +0 -1
  201. package/dist/providers/github-copilot/utils.test.js +0 -21
  202. package/dist/providers/github-copilot/utils.test.js.map +0 -1
  203. package/dist/safety-checker.js +0 -57
  204. package/dist/services/check_mock.d.ts +0 -2
  205. package/dist/services/check_mock.d.ts.map +0 -1
  206. package/dist/services/check_mock.js +0 -22
  207. package/dist/services/check_mock.js.map +0 -1
  208. package/dist/services/conversation-service.test.d.ts +0 -2
  209. package/dist/services/conversation-service.test.d.ts.map +0 -1
  210. package/dist/services/conversation-service.test.js +0 -156
  211. package/dist/services/conversation-service.test.js.map +0 -1
  212. package/dist/tools/bash.d.ts +0 -10
  213. package/dist/tools/bash.d.ts.map +0 -1
  214. package/dist/tools/bash.js +0 -55
  215. package/dist/tools/bash.js.map +0 -1
  216. package/dist/utils/command-safety.d.ts +0 -21
  217. package/dist/utils/command-safety.d.ts.map +0 -1
  218. package/dist/utils/command-safety.devnull.test.d.ts +0 -2
  219. package/dist/utils/command-safety.devnull.test.d.ts.map +0 -1
  220. package/dist/utils/command-safety.devnull.test.js +0 -13
  221. package/dist/utils/command-safety.devnull.test.js.map +0 -1
  222. package/dist/utils/command-safety.js +0 -348
  223. package/dist/utils/command-safety.js.map +0 -1
  224. package/dist/utils/extract-command-messages.test.d.ts +0 -2
  225. package/dist/utils/extract-command-messages.test.d.ts.map +0 -1
  226. package/dist/utils/extract-command-messages.test.js +0 -64
  227. package/dist/utils/extract-command-messages.test.js.map +0 -1
  228. package/dist/utils/provider-traffic-extractor.repro.test.d.ts +0 -2
  229. package/dist/utils/provider-traffic-extractor.repro.test.d.ts.map +0 -1
  230. package/dist/utils/provider-traffic-extractor.repro.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"use-model-selection.d.ts","sourceRoot":"","sources":["../../source/hooks/use-model-selection.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzF,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE3F,OAAO,EAAE,iBAAiB,EAAwD,MAAM,4BAA4B,CAAC;AAErH,eAAO,MAAM,aAAa,QAAmC,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAC7B,eAAO,MAAM,cAAc,QAAmC,CAAC;AAC/D,eAAO,MAAM,0BAA0B,QAAmC,CAAC;AAC3E,eAAO,MAAM,0BAA0B,QAAmC,CAAC;AAE3E,eAAO,MAAM,iBAAiB,GAC5B,MAAM;IACJ,cAAc,EAAE,eAAe,CAAC;IAChC,eAAe,EAAE,gBAAgB,CAAC;CACnC,EACD,gCAA8B;;;;;;;;;;uBAmGf,MAAM;;;;;;;CAyEtB,CAAC"}
1
+ {"version":3,"file":"use-model-selection.d.ts","sourceRoot":"","sources":["../../source/hooks/use-model-selection.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzF,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE3F,OAAO,EAAE,iBAAiB,EAAwD,MAAM,4BAA4B,CAAC;AAErH,eAAO,MAAM,aAAa,QAAmC,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAC7B,eAAO,MAAM,cAAc,QAAmC,CAAC;AAC/D,eAAO,MAAM,0BAA0B,QAAmC,CAAC;AAC3E,eAAO,MAAM,0BAA0B,QAAmC,CAAC;AAE3E,eAAO,MAAM,iBAAiB,GAC5B,MAAM;IACJ,cAAc,EAAE,eAAe,CAAC;IAChC,eAAe,EAAE,gBAAgB,CAAC;CACnC,EACD,gCAA8B;;;;;;;;;;uBAiHf,MAAM;;;;;;;CA8EtB,CAAC"}
@@ -20,6 +20,8 @@ export const useModelSelection = (deps, hasConversationHistory = false) => {
20
20
  const [scrollOffset, setScrollOffset] = useState(0);
21
21
  const failedProvidersRef = useRef(new Set());
22
22
  const isInitialLoadRef = useRef(true);
23
+ const loadRequestIdRef = useRef(0);
24
+ const modelsByProviderRef = useRef(new Map());
23
25
  const isOpen = mode === 'model_selection';
24
26
  const modelSettingConfig = getModelSettingConfigForInput(input);
25
27
  const canSwitchProvider = Boolean(modelSettingConfig && modelSettingConfig.providerKey !== 'agent.provider') || !hasConversationHistory;
@@ -43,35 +45,50 @@ export const useModelSelection = (deps, hasConversationHistory = false) => {
43
45
  useEffect(() => {
44
46
  if (!isOpen || !provider)
45
47
  return;
48
+ const requestId = ++loadRequestIdRef.current;
49
+ const isCurrentRequest = () => requestId === loadRequestIdRef.current;
50
+ const cachedModels = modelsByProviderRef.current.get(provider);
46
51
  const load = async () => {
47
52
  // If already marked as failed, don't try again in this session
48
53
  // unless it's the only one left (covered by logic below)
49
54
  if (failedProvidersRef.current.has(provider) && !isInitialLoadRef.current) {
50
55
  return;
51
56
  }
52
- setLoading(true);
57
+ setModels(cachedModels ?? []);
58
+ setSelectedIndex(0);
59
+ setScrollOffset(0);
60
+ setLoading(!cachedModels);
53
61
  setError(null);
54
62
  try {
55
63
  const fetched = await fetchModels({ settingsService, loggingService }, provider);
64
+ modelsByProviderRef.current.set(provider, fetched);
65
+ if (!isCurrentRequest())
66
+ return;
56
67
  setModels(fetched);
57
68
  isInitialLoadRef.current = false;
58
69
  }
59
70
  catch (err) {
71
+ if (!isCurrentRequest())
72
+ return;
60
73
  const message = err instanceof Error ? err.message : String(err);
61
74
  loggingService.warn(`Model selection fetch failed for ${provider}`, { error: message });
62
75
  failedProvidersRef.current.add(provider);
63
76
  setError(message);
64
77
  }
65
78
  finally {
79
+ if (!isCurrentRequest())
80
+ return;
66
81
  setLoading(false);
67
82
  }
68
83
  };
69
84
  load().catch((err) => {
85
+ if (!isCurrentRequest())
86
+ return;
70
87
  const message = err instanceof Error ? err.message : String(err);
71
88
  setError(message);
72
89
  setLoading(false);
73
90
  });
74
- }, [isOpen, provider]);
91
+ }, [isOpen, provider, settingsService, loggingService]);
75
92
  const filteredModels = useMemo(() => {
76
93
  return filterModels(models, query);
77
94
  }, [models, query]);
@@ -137,15 +154,19 @@ export const useModelSelection = (deps, hasConversationHistory = false) => {
137
154
  // If no providers available, stay on current
138
155
  if (allProviderIds.length === 0)
139
156
  return;
140
- setProvider((prev) => {
141
- const currentIndex = allProviderIds.indexOf(prev || allProviderIds[0]);
142
- const nextIndex = (currentIndex + 1) % allProviderIds.length;
143
- const nextProvider = allProviderIds[nextIndex];
144
- // If the user manually selects it, we should allow retrying it
145
- failedProvidersRef.current.delete(nextProvider);
146
- return nextProvider;
147
- });
148
- }, []);
157
+ const currentIndex = allProviderIds.indexOf(provider || allProviderIds[0]);
158
+ const nextIndex = (currentIndex + 1) % allProviderIds.length;
159
+ const nextProvider = allProviderIds[nextIndex];
160
+ const cachedModels = modelsByProviderRef.current.get(nextProvider);
161
+ // If the user manually selects it, we should allow retrying it
162
+ failedProvidersRef.current.delete(nextProvider);
163
+ setModels(cachedModels ?? []);
164
+ setSelectedIndex(0);
165
+ setScrollOffset(0);
166
+ setLoading(!cachedModels);
167
+ setError(null);
168
+ setProvider(nextProvider);
169
+ }, [provider]);
149
170
  return {
150
171
  isOpen,
151
172
  triggerIndex,
@@ -1 +1 @@
1
- {"version":3,"file":"use-model-selection.js","sourceRoot":"","sources":["../../source/hooks/use-model-selection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-model-selection.js","sourceRoot":"","sources":["../../source/hooks/use-model-selection.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,29 @@
1
1
  import test from 'ava';
2
- import React, { useEffect } from 'react';
2
+ import React, { useEffect, useMemo } from 'react';
3
3
  import { render } from 'ink-testing-library';
4
4
  import { InputProvider, useInputContext } from '../context/InputContext.js';
5
5
  import { useModelSelection } from './use-model-selection.js';
6
6
  import { createMockSettingsService } from '../services/settings-service.mock.js';
7
7
  import { Text } from 'ink';
8
- const TestComponent = ({ onResults }) => {
8
+ import { clearModelCache } from '../services/model-service.js';
9
+ import { getProviderIds, registerProvider, unregisterProvider } from '../providers/index.js';
10
+ const TestComponent = ({ onResults, settingsService, initialInput = '/model deepseek-v4-flash --provider=opencode go', }) => {
9
11
  const { setInput, setCursorOffset, setMode, setTriggerIndex } = useInputContext();
12
+ const resolvedSettingsService = useMemo(() => settingsService ??
13
+ createMockSettingsService({
14
+ 'agent.openrouter.apiKey': 'fake-key',
15
+ }), [settingsService]);
16
+ const loggingService = useMemo(() => ({ warn: () => { } }), []);
10
17
  useEffect(() => {
11
- const input = '/model deepseek-v4-flash --provider=opencode go';
18
+ const input = initialInput;
12
19
  setInput(input);
13
20
  setCursorOffset(input.length);
14
21
  setTriggerIndex('/model '.length);
15
22
  setMode('model_selection');
16
- }, [setCursorOffset, setInput, setMode, setTriggerIndex]);
23
+ }, [initialInput, setCursorOffset, setInput, setMode, setTriggerIndex]);
17
24
  const models = useModelSelection({
18
- loggingService: { warn: () => { } },
19
- settingsService: createMockSettingsService({
20
- 'agent.openrouter.apiKey': 'fake-key',
21
- }),
25
+ loggingService,
26
+ settingsService: resolvedSettingsService,
22
27
  });
23
28
  useEffect(() => {
24
29
  onResults(models);
@@ -27,7 +32,7 @@ const TestComponent = ({ onResults }) => {
27
32
  "Provider: ",
28
33
  models.provider);
29
34
  };
30
- test('toggleProvider cycles through available providers', async (t) => {
35
+ test.serial('toggleProvider cycles through available providers', async (t) => {
31
36
  let capturedModels;
32
37
  render(React.createElement(InputProvider, null,
33
38
  React.createElement(TestComponent, { onResults: (m) => {
@@ -47,7 +52,7 @@ test('toggleProvider cycles through available providers', async (t) => {
47
52
  const thirdProvider = capturedModels.provider;
48
53
  t.not(thirdProvider, secondProvider, 'Provider should have switched again');
49
54
  });
50
- test('model selection query strips provider suffix from input', async (t) => {
55
+ test.serial('model selection query strips provider suffix from input', async (t) => {
51
56
  let capturedModels;
52
57
  render(React.createElement(InputProvider, null,
53
58
  React.createElement(TestComponent, { onResults: (m) => {
@@ -56,4 +61,96 @@ test('model selection query strips provider suffix from input', async (t) => {
56
61
  await new Promise((resolve) => setTimeout(resolve, 50));
57
62
  t.is(capturedModels.query, 'deepseek-v4-flash');
58
63
  });
64
+ test.serial('ignores stale model results after switching providers', async (t) => {
65
+ clearModelCache();
66
+ const firstProvider = `slow-provider-${Date.now()}-${Math.random()}`;
67
+ const secondProvider = `fast-provider-${Date.now()}-${Math.random()}`;
68
+ let resolveFirst;
69
+ registerProvider({
70
+ id: firstProvider,
71
+ label: firstProvider,
72
+ fetchModels: async () => {
73
+ await new Promise((resolve) => {
74
+ resolveFirst = resolve;
75
+ });
76
+ return [{ id: 'slow-model', name: 'Slow Model' }];
77
+ },
78
+ });
79
+ registerProvider({
80
+ id: secondProvider,
81
+ label: secondProvider,
82
+ fetchModels: async () => [{ id: 'fast-model', name: 'Fast Model' }],
83
+ });
84
+ t.teardown(() => {
85
+ clearModelCache();
86
+ unregisterProvider(firstProvider);
87
+ unregisterProvider(secondProvider);
88
+ });
89
+ let capturedModels;
90
+ const settingsService = createMockSettingsService({
91
+ 'agent.provider': firstProvider,
92
+ });
93
+ render(React.createElement(InputProvider, null,
94
+ React.createElement(TestComponent, { settingsService: settingsService, initialInput: "/model ", onResults: (m) => {
95
+ capturedModels = m;
96
+ } })));
97
+ await new Promise((resolve) => setTimeout(resolve, 50));
98
+ t.is(capturedModels.provider, firstProvider);
99
+ capturedModels.toggleProvider();
100
+ await new Promise((resolve) => setTimeout(resolve, 50));
101
+ t.is(capturedModels.provider, secondProvider);
102
+ t.deepEqual(capturedModels.filteredModels.map((model) => model.id), ['fast-model']);
103
+ resolveFirst?.();
104
+ await new Promise((resolve) => setTimeout(resolve, 50));
105
+ t.is(capturedModels.provider, secondProvider);
106
+ t.deepEqual(capturedModels.filteredModels.map((model) => model.id), ['fast-model']);
107
+ });
108
+ test.serial('keeps completed provider results ready when switching back', async (t) => {
109
+ clearModelCache();
110
+ const firstProvider = `return-slow-provider-${Date.now()}-${Math.random()}`;
111
+ const secondProvider = `return-fast-provider-${Date.now()}-${Math.random()}`;
112
+ let resolveFirst;
113
+ registerProvider({
114
+ id: firstProvider,
115
+ label: firstProvider,
116
+ fetchModels: async () => {
117
+ await new Promise((resolve) => {
118
+ resolveFirst = resolve;
119
+ });
120
+ return [{ id: 'slow-model', name: 'Slow Model' }];
121
+ },
122
+ });
123
+ registerProvider({
124
+ id: secondProvider,
125
+ label: secondProvider,
126
+ fetchModels: async () => [{ id: 'fast-model', name: 'Fast Model' }],
127
+ });
128
+ t.teardown(() => {
129
+ clearModelCache();
130
+ unregisterProvider(firstProvider);
131
+ unregisterProvider(secondProvider);
132
+ });
133
+ let capturedModels;
134
+ const settingsService = createMockSettingsService({
135
+ 'agent.provider': firstProvider,
136
+ });
137
+ render(React.createElement(InputProvider, null,
138
+ React.createElement(TestComponent, { settingsService: settingsService, initialInput: "/model ", onResults: (m) => {
139
+ capturedModels = m;
140
+ } })));
141
+ await new Promise((resolve) => setTimeout(resolve, 50));
142
+ capturedModels.toggleProvider();
143
+ await new Promise((resolve) => setTimeout(resolve, 50));
144
+ t.is(capturedModels.provider, secondProvider);
145
+ t.deepEqual(capturedModels.filteredModels.map((model) => model.id), ['fast-model']);
146
+ resolveFirst?.();
147
+ await new Promise((resolve) => setTimeout(resolve, 50));
148
+ t.deepEqual(capturedModels.filteredModels.map((model) => model.id), ['fast-model']);
149
+ for (let i = 0; i < getProviderIds().length && capturedModels.provider !== firstProvider; i++) {
150
+ capturedModels.toggleProvider();
151
+ await new Promise((resolve) => setTimeout(resolve, 50));
152
+ }
153
+ t.is(capturedModels.provider, firstProvider);
154
+ t.deepEqual(capturedModels.filteredModels.map((model) => model.id), ['slow-model']);
155
+ });
59
156
  //# sourceMappingURL=use-model-selection.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-model-selection.test.js","sourceRoot":"","sources":["../../source/hooks/use-model-selection.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-model-selection.test.js","sourceRoot":"","sources":["../../source/hooks/use-model-selection.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ type AiSdkModelLike = {
2
+ doGenerate: (options: any) => PromiseLike<any> | any;
3
+ doStream: (options: any) => PromiseLike<any> | any;
4
+ };
5
+ export declare function mergeAssistantReasoningIntoToolCalls(messages: any[]): any[];
6
+ export declare function withMergedAssistantReasoning<T extends AiSdkModelLike>(model: T): T;
7
+ export {};
8
+ //# sourceMappingURL=ai-sdk-message-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sdk-message-normalizer.d.ts","sourceRoot":"","sources":["../../source/providers/ai-sdk-message-normalizer.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG;IACpB,UAAU,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACrD,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;CACpD,CAAC;AAsCF,wBAAgB,oCAAoC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CA0B3E;AAcD,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAclF"}
@@ -0,0 +1,70 @@
1
+ function isAssistantReasoningOnlyMessage(message) {
2
+ const content = message?.content;
3
+ if (message?.role === 'assistant' &&
4
+ Array.isArray(content) &&
5
+ content.length > 0 &&
6
+ content.every((part) => part?.type === 'reasoning') &&
7
+ !Array.isArray(message.tool_calls)) {
8
+ return true;
9
+ }
10
+ return (message?.role === 'assistant' &&
11
+ typeof message.reasoning_content === 'string' &&
12
+ (message.content === '' || message.content === null || message.content === undefined) &&
13
+ !Array.isArray(message.tool_calls));
14
+ }
15
+ function isAssistantToolCallMessage(message) {
16
+ const content = message?.content;
17
+ if (message?.role === 'assistant' &&
18
+ Array.isArray(content) &&
19
+ content.some((part) => part?.type === 'tool-call') &&
20
+ message.reasoning_content === undefined) {
21
+ return true;
22
+ }
23
+ return message?.role === 'assistant' && Array.isArray(message.tool_calls) && message.reasoning_content === undefined;
24
+ }
25
+ export function mergeAssistantReasoningIntoToolCalls(messages) {
26
+ const merged = [];
27
+ for (const message of messages) {
28
+ const previous = merged[merged.length - 1];
29
+ if (isAssistantReasoningOnlyMessage(previous) && isAssistantToolCallMessage(message)) {
30
+ if (Array.isArray(previous.content) && Array.isArray(message.content)) {
31
+ merged[merged.length - 1] = {
32
+ ...message,
33
+ content: [...previous.content, ...message.content],
34
+ };
35
+ continue;
36
+ }
37
+ merged[merged.length - 1] = {
38
+ ...message,
39
+ reasoning_content: previous.reasoning_content,
40
+ };
41
+ continue;
42
+ }
43
+ merged.push(message);
44
+ }
45
+ return merged;
46
+ }
47
+ function normalizeOptions(options) {
48
+ if (!Array.isArray(options?.prompt) && !Array.isArray(options?.messages)) {
49
+ return options;
50
+ }
51
+ return {
52
+ ...options,
53
+ ...(Array.isArray(options.prompt) ? { prompt: mergeAssistantReasoningIntoToolCalls(options.prompt) } : {}),
54
+ ...(Array.isArray(options.messages) ? { messages: mergeAssistantReasoningIntoToolCalls(options.messages) } : {}),
55
+ };
56
+ }
57
+ export function withMergedAssistantReasoning(model) {
58
+ return new Proxy(model, {
59
+ get(target, property) {
60
+ if (property === 'doGenerate') {
61
+ return (options) => target.doGenerate(normalizeOptions(options));
62
+ }
63
+ if (property === 'doStream') {
64
+ return (options) => target.doStream(normalizeOptions(options));
65
+ }
66
+ return Reflect.get(target, property, target);
67
+ },
68
+ });
69
+ }
70
+ //# sourceMappingURL=ai-sdk-message-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sdk-message-normalizer.js","sourceRoot":"","sources":["../../source/providers/ai-sdk-message-normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ai-sdk-message-normalizer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sdk-message-normalizer.test.d.ts","sourceRoot":"","sources":["../../source/providers/ai-sdk-message-normalizer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,195 @@
1
+ import test from 'ava';
2
+ import { mergeAssistantReasoningIntoToolCalls, withMergedAssistantReasoning } from './ai-sdk-message-normalizer.js';
3
+ test('mergeAssistantReasoningIntoToolCalls folds assistant reasoning into following assistant tool call', (t) => {
4
+ const messages = [
5
+ { role: 'user', content: 'what time is it?' },
6
+ {
7
+ role: 'assistant',
8
+ content: '',
9
+ reasoning_content: 'Need to use the shell for the exact time.',
10
+ },
11
+ {
12
+ role: 'assistant',
13
+ content: null,
14
+ tool_calls: [
15
+ {
16
+ id: 'shell:0',
17
+ type: 'function',
18
+ function: {
19
+ name: 'shell',
20
+ arguments: '{"command":"date"}',
21
+ },
22
+ },
23
+ ],
24
+ },
25
+ ];
26
+ t.deepEqual(mergeAssistantReasoningIntoToolCalls(messages), [
27
+ { role: 'user', content: 'what time is it?' },
28
+ {
29
+ role: 'assistant',
30
+ content: null,
31
+ reasoning_content: 'Need to use the shell for the exact time.',
32
+ tool_calls: [
33
+ {
34
+ id: 'shell:0',
35
+ type: 'function',
36
+ function: {
37
+ name: 'shell',
38
+ arguments: '{"command":"date"}',
39
+ },
40
+ },
41
+ ],
42
+ },
43
+ ]);
44
+ });
45
+ test('mergeAssistantReasoningIntoToolCalls folds AI SDK reasoning content part into following assistant tool call', (t) => {
46
+ const messages = [
47
+ {
48
+ role: 'assistant',
49
+ content: [
50
+ {
51
+ type: 'reasoning',
52
+ text: 'Need to use the shell for the exact time.',
53
+ providerOptions: {},
54
+ },
55
+ ],
56
+ providerOptions: {},
57
+ },
58
+ {
59
+ role: 'assistant',
60
+ content: [
61
+ {
62
+ type: 'tool-call',
63
+ toolCallId: 'shell:0',
64
+ toolName: 'shell',
65
+ input: {
66
+ command: 'date',
67
+ },
68
+ providerOptions: {},
69
+ },
70
+ ],
71
+ providerOptions: {},
72
+ },
73
+ ];
74
+ t.deepEqual(mergeAssistantReasoningIntoToolCalls(messages), [
75
+ {
76
+ role: 'assistant',
77
+ content: [
78
+ {
79
+ type: 'reasoning',
80
+ text: 'Need to use the shell for the exact time.',
81
+ providerOptions: {},
82
+ },
83
+ {
84
+ type: 'tool-call',
85
+ toolCallId: 'shell:0',
86
+ toolName: 'shell',
87
+ input: {
88
+ command: 'date',
89
+ },
90
+ providerOptions: {},
91
+ },
92
+ ],
93
+ providerOptions: {},
94
+ },
95
+ ]);
96
+ });
97
+ test('mergeAssistantReasoningIntoToolCalls preserves messages that are not split reasoning and tool calls', (t) => {
98
+ const messages = [
99
+ {
100
+ role: 'assistant',
101
+ content: 'visible text',
102
+ reasoning_content: 'internal reasoning',
103
+ },
104
+ {
105
+ role: 'assistant',
106
+ content: null,
107
+ tool_calls: [{ id: 'call:0' }],
108
+ },
109
+ {
110
+ role: 'assistant',
111
+ content: '',
112
+ reasoning_content: 'already has a tool call',
113
+ tool_calls: [{ id: 'call:1' }],
114
+ },
115
+ ];
116
+ t.deepEqual(mergeAssistantReasoningIntoToolCalls(messages), messages);
117
+ });
118
+ test('withMergedAssistantReasoning normalizes doGenerate messages before delegating', async (t) => {
119
+ let delegatedOptions;
120
+ const model = withMergedAssistantReasoning({
121
+ provider: 'example',
122
+ modelId: 'model',
123
+ specificationVersion: 'v3',
124
+ supportedUrls: {},
125
+ doGenerate: async (options) => {
126
+ delegatedOptions = options;
127
+ return { text: 'ok' };
128
+ },
129
+ doStream: async () => ({ stream: [] }),
130
+ });
131
+ await model.doGenerate({
132
+ temperature: 0,
133
+ messages: [
134
+ { role: 'assistant', content: '', reasoning_content: 'reasoning' },
135
+ { role: 'assistant', content: null, tool_calls: [{ id: 'call:0' }] },
136
+ ],
137
+ });
138
+ t.deepEqual(delegatedOptions, {
139
+ temperature: 0,
140
+ messages: [{ role: 'assistant', content: null, reasoning_content: 'reasoning', tool_calls: [{ id: 'call:0' }] }],
141
+ });
142
+ });
143
+ test('withMergedAssistantReasoning normalizes doStream messages before delegating', async (t) => {
144
+ let delegatedOptions;
145
+ const model = withMergedAssistantReasoning({
146
+ provider: 'example',
147
+ modelId: 'model',
148
+ specificationVersion: 'v3',
149
+ supportedUrls: {},
150
+ doGenerate: async () => ({ text: 'ok' }),
151
+ doStream: async (options) => {
152
+ delegatedOptions = options;
153
+ return { stream: [] };
154
+ },
155
+ });
156
+ await model.doStream({
157
+ messages: [
158
+ { role: 'assistant', content: '', reasoning_content: 'reasoning' },
159
+ { role: 'assistant', content: null, tool_calls: [{ id: 'call:0' }] },
160
+ ],
161
+ });
162
+ t.deepEqual(delegatedOptions.messages, [
163
+ { role: 'assistant', content: null, reasoning_content: 'reasoning', tool_calls: [{ id: 'call:0' }] },
164
+ ]);
165
+ });
166
+ test('withMergedAssistantReasoning preserves model properties exposed by getters', (t) => {
167
+ class GetterBackedModel {
168
+ #provider = 'example.chat';
169
+ #modelId = 'selected-model';
170
+ get provider() {
171
+ return this.#provider;
172
+ }
173
+ get modelId() {
174
+ return this.#modelId;
175
+ }
176
+ get specificationVersion() {
177
+ return 'v3';
178
+ }
179
+ get supportedUrls() {
180
+ return {};
181
+ }
182
+ async doGenerate() {
183
+ return { text: 'ok' };
184
+ }
185
+ async doStream() {
186
+ return { stream: [] };
187
+ }
188
+ }
189
+ const model = withMergedAssistantReasoning(new GetterBackedModel());
190
+ t.is(model.provider, 'example.chat');
191
+ t.is(model.modelId, 'selected-model');
192
+ t.is(model.specificationVersion, 'v3');
193
+ t.deepEqual(model.supportedUrls, {});
194
+ });
195
+ //# sourceMappingURL=ai-sdk-message-normalizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sdk-message-normalizer.test.js","sourceRoot":"","sources":["../../source/providers/ai-sdk-message-normalizer.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk-openai-compatible.provider.d.ts","sourceRoot":"","sources":["../../source/providers/ai-sdk-openai-compatible.provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAErE,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG,CAAC,OAAO,EAAE;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,KAAK,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,CAAC;AAE/B,qBAAa,6BAA8B,YAAW,aAAa;;gBAMrD,IAAI,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,2BAA2B,CAAC;QACjD,cAAc,CAAC,EAAE,oCAAoC,CAAC;KACvD;IAOD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;CAYrD"}
1
+ {"version":3,"file":"ai-sdk-openai-compatible.provider.d.ts","sourceRoot":"","sources":["../../source/providers/ai-sdk-openai-compatible.provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGrE,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG,CAAC,OAAO,EAAE;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,KAAK,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,CAAC;AAE/B,qBAAa,6BAA8B,YAAW,aAAa;;gBAMrD,IAAI,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,2BAA2B,CAAC;QACjD,cAAc,CAAC,EAAE,oCAAoC,CAAC;KACvD;IAOD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;CAYrD"}
@@ -1,5 +1,6 @@
1
1
  import { aisdk } from '@openai/agents-extensions/ai-sdk';
2
2
  import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
3
+ import { withMergedAssistantReasoning } from './ai-sdk-message-normalizer.js';
3
4
  export class AiSdkOpenAICompatibleProvider {
4
5
  #label;
5
6
  #defaultModel;
@@ -20,7 +21,7 @@ export class AiSdkOpenAICompatibleProvider {
20
21
  headers: config.headers,
21
22
  includeUsage: true,
22
23
  });
23
- return aisdk(provider(modelName || this.#defaultModel));
24
+ return aisdk(withMergedAssistantReasoning(provider(modelName || this.#defaultModel)));
24
25
  }
25
26
  }
26
27
  //# sourceMappingURL=ai-sdk-openai-compatible.provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk-openai-compatible.provider.js","sourceRoot":"","sources":["../../source/providers/ai-sdk-openai-compatible.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAiBnE,MAAM,OAAO,6BAA6B;IACxC,MAAM,CAAS;IACf,aAAa,CAAS;IACtB,cAAc,CAAoC;IAClD,eAAe,CAAuC;IAEtD,YAAY,IAKX;QACC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,IAAK,sBAA+D,CAAC;IACjH,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;YACpC,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAqB,CAAC;IAC9E,CAAC;CACF"}
1
+ {"version":3,"file":"ai-sdk-openai-compatible.provider.js","sourceRoot":"","sources":["../../source/providers/ai-sdk-openai-compatible.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAgB9E,MAAM,OAAO,6BAA6B;IACxC,MAAM,CAAS;IACf,aAAa,CAAS;IACtB,cAAc,CAAoC;IAClD,eAAe,CAAuC;IAEtD,YAAY,IAKX;QACC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,IAAK,sBAA+D,CAAC;IACjH,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;YACpC,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,4BAA4B,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAqB,CAAC;IAC5G,CAAC;CACF"}