winter-super-cli 2026.5.29 → 2026.5.30

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "winter-super-cli",
3
- "version": "2026.5.29",
3
+ "version": "2026.5.30",
4
4
  "description": "❄️ AI-Powered Development CLI with Interactive REPL",
5
5
  "type": "module",
6
6
  "main": "bin/winter.js",
package/src/cli/repl.js CHANGED
@@ -1112,14 +1112,17 @@ ${colors.reset}
1112
1112
  const activeProvider = this.ai?.getActiveProvider?.() || Object.keys(providers)[0] || null;
1113
1113
  const hasProvider = name => !!providers[name]?.model || !!providers[name]?.ready;
1114
1114
 
1115
- let provider = activeProvider;
1116
- if (/\b(review|refactor|debug|fix|bug|error|stack trace|test|tool|patch|code)\b/.test(text) && hasProvider('claude')) {
1115
+ const activeProviderIsValid = activeProvider && hasProvider(activeProvider);
1116
+ const allowAutoRoute = options.autoRouteProvider === true && !activeProviderIsValid;
1117
+
1118
+ let provider = activeProviderIsValid ? activeProvider : Object.keys(providers).find(hasProvider) || activeProvider;
1119
+ if (allowAutoRoute && /\b(review|refactor|debug|fix|bug|error|stack trace|test|tool|patch|code)\b/.test(text) && hasProvider('claude')) {
1117
1120
  provider = 'claude';
1118
- } else if (/\b(summary|summarize|commit message|changelog|docs|explain|rewrite)\b/.test(text) && hasProvider('openai')) {
1121
+ } else if (allowAutoRoute && /\b(summary|summarize|commit message|changelog|docs|explain|rewrite)\b/.test(text) && hasProvider('openai')) {
1119
1122
  provider = 'openai';
1120
- } else if (/\b(local|offline|privacy|private|on-device)\b/.test(text) && hasProvider('ollama')) {
1123
+ } else if (allowAutoRoute && /\b(local|offline|privacy|private|on-device)\b/.test(text) && hasProvider('ollama')) {
1121
1124
  provider = 'ollama';
1122
- } else if (/\b(quick|brief|short|fast)\b/.test(text) && hasProvider('groq')) {
1125
+ } else if (allowAutoRoute && /\b(quick|brief|short|fast)\b/.test(text) && hasProvider('groq')) {
1123
1126
  provider = 'groq';
1124
1127
  }
1125
1128
 
@@ -23,28 +23,32 @@ function bumpReasoningLevel(level, steps) {
23
23
  if (idx === -1) return level;
24
24
  const newIdx = Math.min(idx + steps, order.length - 1);
25
25
  return order[newIdx];
26
- } export function selectExecutionProfile({ messages = [], activeProvider = null, providers = {}, options = {} } = {}) {
27
- const text = flattenMessageText(messages);
28
- const providerNames = Object.keys(providers).filter(name => providers[name]?.ready || providers[name]?.model);
29
- const hasProvider = name => providerNames.includes(name);
30
-
31
- const explicitProvider = options.provider && hasProvider(options.provider) ? options.provider : null;
32
- let provider = explicitProvider || (activeProvider && hasProvider(activeProvider) ? activeProvider : providerNames[0] || null);
33
-
34
- if (explicitProvider) {
35
- provider = explicitProvider;
36
- } else if (/\b(review|refactor|debug|fix|bug|error|stack trace|test|tool|patch|code)\b/.test(text) && hasProvider('claude')) {
37
- provider = 'claude';
38
- } else if (/\b(summary|summarize|commit message|changelog|docs|explain|rewrite)\b/.test(text) && hasProvider('openai')) {
39
- provider = 'openai';
40
- } else if (/\b(local|offline|privacy|private|on-device)\b/.test(text) && hasProvider('ollama')) {
41
- provider = 'ollama';
42
- } else if (/\b(quick|brief|short|fast)\b/.test(text) && hasProvider('groq')) {
43
- provider = 'groq';
44
- }
45
-
46
- const providerConfig = providers[provider] || providers[activeProvider] || {};
47
- const model = options.model || providerConfig.model || providers[activeProvider]?.model || null;
26
+ }
27
+
28
+ export function selectExecutionProfile({ messages = [], activeProvider = null, providers = {}, options = {} } = {}) {
29
+ const text = flattenMessageText(messages);
30
+ const providerNames = Object.keys(providers).filter(name => providers[name]?.ready || providers[name]?.model);
31
+ const hasProvider = name => providerNames.includes(name);
32
+
33
+ const explicitProvider = options.provider && hasProvider(options.provider) ? options.provider : null;
34
+ const activeProviderIsValid = activeProvider && hasProvider(activeProvider);
35
+ let provider = explicitProvider || (activeProviderIsValid ? activeProvider : providerNames[0] || null);
36
+ const allowAutoRoute = options.autoRouteProvider === true && !explicitProvider && !activeProviderIsValid;
37
+
38
+ if (explicitProvider) {
39
+ provider = explicitProvider;
40
+ } else if (allowAutoRoute && /\b(review|refactor|debug|fix|bug|error|stack trace|test|tool|patch|code)\b/.test(text) && hasProvider('claude')) {
41
+ provider = 'claude';
42
+ } else if (allowAutoRoute && /\b(summary|summarize|commit message|changelog|docs|explain|rewrite)\b/.test(text) && hasProvider('openai')) {
43
+ provider = 'openai';
44
+ } else if (allowAutoRoute && /\b(local|offline|privacy|private|on-device)\b/.test(text) && hasProvider('ollama')) {
45
+ provider = 'ollama';
46
+ } else if (allowAutoRoute && /\b(quick|brief|short|fast)\b/.test(text) && hasProvider('groq')) {
47
+ provider = 'groq';
48
+ }
49
+
50
+ const providerConfig = providers[provider] || providers[activeProvider] || {};
51
+ const model = options.model || providerConfig.model || providers[activeProvider]?.model || null;
48
52
 
49
53
  // Detect model capability tier
50
54
  const modelTier = classifyModelTier(model, provider);