@nanocollective/nanocoder 1.17.3 → 1.18.0

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 (224) hide show
  1. package/README.md +2 -5
  2. package/assets/nanocoder-vscode.vsix +0 -0
  3. package/dist/ai-sdk-client-empty-message.spec.d.ts +2 -0
  4. package/dist/ai-sdk-client-empty-message.spec.d.ts.map +1 -0
  5. package/dist/ai-sdk-client-empty-message.spec.js +124 -0
  6. package/dist/ai-sdk-client-empty-message.spec.js.map +1 -0
  7. package/dist/ai-sdk-client.d.ts +18 -2
  8. package/dist/ai-sdk-client.d.ts.map +1 -1
  9. package/dist/ai-sdk-client.js +159 -122
  10. package/dist/ai-sdk-client.js.map +1 -1
  11. package/dist/app/utils/appUtils.js +3 -3
  12. package/dist/app/utils/appUtils.js.map +1 -1
  13. package/dist/app.d.ts.map +1 -1
  14. package/dist/app.js +22 -11
  15. package/dist/app.js.map +1 -1
  16. package/dist/commands/debugging.d.ts +3 -0
  17. package/dist/commands/debugging.d.ts.map +1 -0
  18. package/dist/commands/debugging.js +23 -0
  19. package/dist/commands/debugging.js.map +1 -0
  20. package/dist/commands/index.d.ts +2 -2
  21. package/dist/commands/index.d.ts.map +1 -1
  22. package/dist/commands/index.js +2 -2
  23. package/dist/commands/index.js.map +1 -1
  24. package/dist/commands/model-database.d.ts +8 -0
  25. package/dist/commands/model-database.d.ts.map +1 -0
  26. package/dist/commands/model-database.js +193 -0
  27. package/dist/commands/model-database.js.map +1 -0
  28. package/dist/commands/usage.d.ts.map +1 -1
  29. package/dist/commands/usage.js +1 -1
  30. package/dist/commands/usage.js.map +1 -1
  31. package/dist/components/assistant-message.d.ts.map +1 -1
  32. package/dist/components/assistant-message.js +3 -2
  33. package/dist/components/assistant-message.js.map +1 -1
  34. package/dist/components/status.d.ts +3 -0
  35. package/dist/components/status.d.ts.map +1 -1
  36. package/dist/components/status.js +24 -3
  37. package/dist/components/status.js.map +1 -1
  38. package/dist/components/user-input.d.ts.map +1 -1
  39. package/dist/components/user-input.js +2 -1
  40. package/dist/components/user-input.js.map +1 -1
  41. package/dist/config/preferences.d.ts +2 -2
  42. package/dist/config/preferences.js +5 -5
  43. package/dist/config/preferences.js.map +1 -1
  44. package/dist/context/mode-context.d.ts +12 -0
  45. package/dist/context/mode-context.d.ts.map +1 -0
  46. package/dist/context/mode-context.js +21 -0
  47. package/dist/context/mode-context.js.map +1 -0
  48. package/dist/context/mode-context.spec.d.ts +2 -0
  49. package/dist/context/mode-context.spec.d.ts.map +1 -0
  50. package/dist/context/mode-context.spec.js +61 -0
  51. package/dist/context/mode-context.spec.js.map +1 -0
  52. package/dist/hooks/useAppInitialization.d.ts +4 -2
  53. package/dist/hooks/useAppInitialization.d.ts.map +1 -1
  54. package/dist/hooks/useAppInitialization.js +101 -26
  55. package/dist/hooks/useAppInitialization.js.map +1 -1
  56. package/dist/hooks/useAppState.d.ts +7 -5
  57. package/dist/hooks/useAppState.d.ts.map +1 -1
  58. package/dist/hooks/useAppState.js +11 -7
  59. package/dist/hooks/useAppState.js.map +1 -1
  60. package/dist/hooks/useChatHandler.d.ts +2 -2
  61. package/dist/hooks/useChatHandler.d.ts.map +1 -1
  62. package/dist/hooks/useChatHandler.js +186 -111
  63. package/dist/hooks/useChatHandler.js.map +1 -1
  64. package/dist/hooks/useModeHandlers.d.ts +4 -4
  65. package/dist/hooks/useModeHandlers.d.ts.map +1 -1
  66. package/dist/hooks/useModeHandlers.js +9 -9
  67. package/dist/hooks/useModeHandlers.js.map +1 -1
  68. package/dist/mcp/mcp-client.d.ts.map +1 -1
  69. package/dist/mcp/mcp-client.js +16 -6
  70. package/dist/mcp/mcp-client.js.map +1 -1
  71. package/dist/message-handler.js +1 -1
  72. package/dist/message-handler.js.map +1 -1
  73. package/dist/model-database/database-engine.d.ts +25 -0
  74. package/dist/model-database/database-engine.d.ts.map +1 -0
  75. package/dist/model-database/database-engine.js +37 -0
  76. package/dist/model-database/database-engine.js.map +1 -0
  77. package/dist/model-database/database-engine.spec.d.ts +2 -0
  78. package/dist/model-database/database-engine.spec.d.ts.map +1 -0
  79. package/dist/model-database/database-engine.spec.js +413 -0
  80. package/dist/model-database/database-engine.spec.js.map +1 -0
  81. package/dist/model-database/model-database.d.ts +30 -0
  82. package/dist/model-database/model-database.d.ts.map +1 -0
  83. package/dist/model-database/model-database.js +82 -0
  84. package/dist/model-database/model-database.js.map +1 -0
  85. package/dist/model-database/model-database.spec.d.ts +2 -0
  86. package/dist/model-database/model-database.spec.d.ts.map +1 -0
  87. package/dist/model-database/model-database.spec.js +322 -0
  88. package/dist/model-database/model-database.spec.js.map +1 -0
  89. package/dist/model-database/model-engine.d.ts +25 -0
  90. package/dist/model-database/model-engine.d.ts.map +1 -0
  91. package/dist/model-database/model-engine.js +49 -0
  92. package/dist/model-database/model-engine.js.map +1 -0
  93. package/dist/model-database/model-engine.spec.d.ts +2 -0
  94. package/dist/model-database/model-engine.spec.d.ts.map +1 -0
  95. package/dist/model-database/model-engine.spec.js +381 -0
  96. package/dist/model-database/model-engine.spec.js.map +1 -0
  97. package/dist/model-database/model-fetcher.d.ts +14 -0
  98. package/dist/model-database/model-fetcher.d.ts.map +1 -0
  99. package/dist/model-database/model-fetcher.js +248 -0
  100. package/dist/model-database/model-fetcher.js.map +1 -0
  101. package/dist/model-database/model-fetcher.spec.d.ts +2 -0
  102. package/dist/model-database/model-fetcher.spec.d.ts.map +1 -0
  103. package/dist/model-database/model-fetcher.spec.js +498 -0
  104. package/dist/model-database/model-fetcher.spec.js.map +1 -0
  105. package/dist/models/models-dev-client.d.ts.map +1 -1
  106. package/dist/models/models-dev-client.js +8 -0
  107. package/dist/models/models-dev-client.js.map +1 -1
  108. package/dist/tool-calling/json-parser.d.ts.map +1 -1
  109. package/dist/tool-calling/json-parser.js +10 -4
  110. package/dist/tool-calling/json-parser.js.map +1 -1
  111. package/dist/tool-calling/tool-parser.d.ts.map +1 -1
  112. package/dist/tool-calling/tool-parser.js +37 -9
  113. package/dist/tool-calling/tool-parser.js.map +1 -1
  114. package/dist/tool-calling/tool-parser.spec.js +79 -1
  115. package/dist/tool-calling/tool-parser.spec.js.map +1 -1
  116. package/dist/tool-calling/xml-parser.d.ts.map +1 -1
  117. package/dist/tool-calling/xml-parser.js +21 -23
  118. package/dist/tool-calling/xml-parser.js.map +1 -1
  119. package/dist/tool-calling/xml-parser.spec.js +23 -3
  120. package/dist/tool-calling/xml-parser.spec.js.map +1 -1
  121. package/dist/tools/create-file.d.ts +24 -2
  122. package/dist/tools/create-file.d.ts.map +1 -1
  123. package/dist/tools/create-file.js +14 -10
  124. package/dist/tools/create-file.js.map +1 -1
  125. package/dist/tools/delete-lines.d.ts +18 -2
  126. package/dist/tools/delete-lines.d.ts.map +1 -1
  127. package/dist/tools/delete-lines.js +14 -9
  128. package/dist/tools/delete-lines.js.map +1 -1
  129. package/dist/tools/execute-bash.d.ts +2 -2
  130. package/dist/tools/execute-bash.d.ts.map +1 -1
  131. package/dist/tools/execute-bash.js +10 -9
  132. package/dist/tools/execute-bash.js.map +1 -1
  133. package/dist/tools/execute-function.spec.d.ts +2 -0
  134. package/dist/tools/execute-function.spec.d.ts.map +1 -0
  135. package/dist/tools/execute-function.spec.js +141 -0
  136. package/dist/tools/execute-function.spec.js.map +1 -0
  137. package/dist/tools/fetch-url.d.ts +16 -2
  138. package/dist/tools/fetch-url.d.ts.map +1 -1
  139. package/dist/tools/fetch-url.js +10 -10
  140. package/dist/tools/fetch-url.js.map +1 -1
  141. package/dist/tools/find-files.d.ts +18 -2
  142. package/dist/tools/find-files.d.ts.map +1 -1
  143. package/dist/tools/find-files.js +7 -5
  144. package/dist/tools/find-files.js.map +1 -1
  145. package/dist/tools/index.d.ts +2 -3
  146. package/dist/tools/index.d.ts.map +1 -1
  147. package/dist/tools/index.js +30 -20
  148. package/dist/tools/index.js.map +1 -1
  149. package/dist/tools/insert-lines.d.ts +18 -2
  150. package/dist/tools/insert-lines.d.ts.map +1 -1
  151. package/dist/tools/insert-lines.js +14 -9
  152. package/dist/tools/insert-lines.js.map +1 -1
  153. package/dist/tools/lsp-get-diagnostics.d.ts +10 -2
  154. package/dist/tools/lsp-get-diagnostics.d.ts.map +1 -1
  155. package/dist/tools/lsp-get-diagnostics.js +8 -6
  156. package/dist/tools/lsp-get-diagnostics.js.map +1 -1
  157. package/dist/tools/needs-approval.spec.d.ts +2 -0
  158. package/dist/tools/needs-approval.spec.d.ts.map +1 -0
  159. package/dist/tools/needs-approval.spec.js +308 -0
  160. package/dist/tools/needs-approval.spec.js.map +1 -0
  161. package/dist/tools/read-file.d.ts +2 -2
  162. package/dist/tools/read-file.d.ts.map +1 -1
  163. package/dist/tools/read-file.js +10 -12
  164. package/dist/tools/read-file.js.map +1 -1
  165. package/dist/tools/replace-lines.d.ts +19 -2
  166. package/dist/tools/replace-lines.d.ts.map +1 -1
  167. package/dist/tools/replace-lines.js +14 -9
  168. package/dist/tools/replace-lines.js.map +1 -1
  169. package/dist/tools/search-file-contents.d.ts +20 -2
  170. package/dist/tools/search-file-contents.d.ts.map +1 -1
  171. package/dist/tools/search-file-contents.js +11 -8
  172. package/dist/tools/search-file-contents.js.map +1 -1
  173. package/dist/tools/web-search.d.ts +2 -2
  174. package/dist/tools/web-search.d.ts.map +1 -1
  175. package/dist/tools/web-search.js +10 -10
  176. package/dist/tools/web-search.js.map +1 -1
  177. package/dist/types/app.d.ts +1 -1
  178. package/dist/types/app.d.ts.map +1 -1
  179. package/dist/types/config.d.ts +1 -1
  180. package/dist/types/core-connection-status.spec.d.ts +2 -0
  181. package/dist/types/core-connection-status.spec.d.ts.map +1 -0
  182. package/dist/types/core-connection-status.spec.js +52 -0
  183. package/dist/types/core-connection-status.spec.js.map +1 -0
  184. package/dist/types/core.d.ts +33 -28
  185. package/dist/types/core.d.ts.map +1 -1
  186. package/dist/types/core.js.map +1 -1
  187. package/dist/types/system.d.ts +5 -30
  188. package/dist/types/system.d.ts.map +1 -1
  189. package/dist/utils/prompt-processor.d.ts +2 -3
  190. package/dist/utils/prompt-processor.d.ts.map +1 -1
  191. package/dist/utils/prompt-processor.js +2 -50
  192. package/dist/utils/prompt-processor.js.map +1 -1
  193. package/dist/wizard/templates/provider-templates.js +2 -2
  194. package/dist/wizard/templates/provider-templates.js.map +1 -1
  195. package/package.json +6 -5
  196. package/source/app/prompts/main-prompt.md +29 -96
  197. package/dist/commands/recommendations.d.ts +0 -8
  198. package/dist/commands/recommendations.d.ts.map +0 -1
  199. package/dist/commands/recommendations.js +0 -311
  200. package/dist/commands/recommendations.js.map +0 -1
  201. package/dist/commands/streaming.d.ts +0 -3
  202. package/dist/commands/streaming.d.ts.map +0 -1
  203. package/dist/commands/streaming.js +0 -23
  204. package/dist/commands/streaming.js.map +0 -1
  205. package/dist/components/thinking-indicator.d.ts +0 -3
  206. package/dist/components/thinking-indicator.d.ts.map +0 -1
  207. package/dist/components/thinking-indicator.js +0 -69
  208. package/dist/components/thinking-indicator.js.map +0 -1
  209. package/dist/recommendations/model-database.d.ts +0 -8
  210. package/dist/recommendations/model-database.d.ts.map +0 -1
  211. package/dist/recommendations/model-database.js +0 -514
  212. package/dist/recommendations/model-database.js.map +0 -1
  213. package/dist/recommendations/model-engine.d.ts +0 -16
  214. package/dist/recommendations/model-engine.d.ts.map +0 -1
  215. package/dist/recommendations/model-engine.js +0 -185
  216. package/dist/recommendations/model-engine.js.map +0 -1
  217. package/dist/recommendations/recommendation-engine.d.ts +0 -39
  218. package/dist/recommendations/recommendation-engine.d.ts.map +0 -1
  219. package/dist/recommendations/recommendation-engine.js +0 -144
  220. package/dist/recommendations/recommendation-engine.js.map +0 -1
  221. package/dist/system/detector.d.ts +0 -18
  222. package/dist/system/detector.d.ts.map +0 -1
  223. package/dist/system/detector.js +0 -140
  224. package/dist/system/detector.js.map +0 -1
@@ -1,185 +0,0 @@
1
- import { modelDatabase } from '../recommendations/model-database.js';
2
- export class ModelMatchingEngine {
3
- static instance;
4
- static getInstance() {
5
- if (!ModelMatchingEngine.instance) {
6
- ModelMatchingEngine.instance = new ModelMatchingEngine();
7
- }
8
- return ModelMatchingEngine.instance;
9
- }
10
- getCompatibleModels(systemCapabilities) {
11
- const allModels = modelDatabase.getAllModels();
12
- const recommendations = [];
13
- for (const model of allModels) {
14
- const compatibility = this.assessModelCompatibility(model, systemCapabilities);
15
- const warnings = this.generateWarnings(model, systemCapabilities);
16
- const recommendation = this.generateRecommendationText(model, compatibility);
17
- recommendations.push({
18
- model,
19
- compatibility,
20
- warnings,
21
- recommendation,
22
- });
23
- }
24
- // Sort by compatibility and capability score
25
- return recommendations.sort((a, b) => {
26
- const compatibilityScore = this.getCompatibilityScore(a.compatibility) -
27
- this.getCompatibilityScore(b.compatibility);
28
- if (compatibilityScore !== 0)
29
- return compatibilityScore;
30
- // If compatibility is the same, sort by overall capability
31
- const aScore = this.calculateOverallCapabilityScore(a.model);
32
- const bScore = this.calculateOverallCapabilityScore(b.model);
33
- return bScore - aScore;
34
- });
35
- }
36
- getTopRecommendations(systemCapabilities, count = 5) {
37
- const compatible = this.getCompatibleModels(systemCapabilities);
38
- return compatible
39
- .filter(rec => rec.compatibility !== 'incompatible')
40
- .slice(0, count);
41
- }
42
- getBestLocalModel(systemCapabilities) {
43
- const localModels = this.getCompatibleModels(systemCapabilities).filter(rec => rec.model.local && rec.compatibility !== 'incompatible');
44
- return localModels.length > 0 ? localModels[0] : null;
45
- }
46
- getBestApiModel(systemCapabilities) {
47
- const apiModels = this.getCompatibleModels(systemCapabilities).filter(rec => rec.model.api && rec.compatibility !== 'incompatible');
48
- return apiModels.length > 0 ? apiModels[0] : null;
49
- }
50
- assessModelCompatibility(model, system) {
51
- // Check if model can be accessed via API
52
- const canUseApi = model.api && system.network.connected;
53
- // Check if model can be run locally
54
- let canUseLocal = false;
55
- if (model.local) {
56
- const requiredMemory = model.minMemoryGB || 8; // Default 8GB if not specified
57
- canUseLocal = system.memory.total >= requiredMemory;
58
- }
59
- // Model is incompatible if neither method works
60
- if (!canUseApi && !canUseLocal) {
61
- return 'incompatible';
62
- }
63
- // Perfect if we can use API (no resource constraints)
64
- if (canUseApi) {
65
- return 'perfect';
66
- }
67
- // For local-only models, check GPU availability
68
- const gpuAvailable = system.gpu.available && system.gpu.type !== 'none';
69
- return gpuAvailable ? 'perfect' : 'good';
70
- }
71
- generateWarnings(model, system) {
72
- const warnings = [];
73
- if (model.local) {
74
- const requiredMemory = model.minMemoryGB || 8;
75
- // Check if user can't run locally
76
- if (system.memory.total < requiredMemory) {
77
- if (model.api) {
78
- warnings.push(`Cannot run locally - requires ${requiredMemory}GB RAM (you have ${system.memory.total}GB). Run only via API.`);
79
- }
80
- else {
81
- warnings.push(`Cannot run locally - requires ${requiredMemory}GB RAM (you have ${system.memory.total}GB)`);
82
- }
83
- }
84
- else {
85
- // GPU warnings (only if they CAN run it locally)
86
- const gpuAvailable = system.gpu.available && system.gpu.type !== 'none';
87
- if (!gpuAvailable) {
88
- warnings.push('GPU recommended for better performance - will be slow on CPU');
89
- }
90
- // Memory warnings
91
- if (system.memory.total === requiredMemory) {
92
- warnings.push(`Running at minimum RAM (${requiredMemory}GB) - may be slow`);
93
- }
94
- }
95
- }
96
- if (model.api) {
97
- // Network warnings
98
- if (!system.network.connected) {
99
- warnings.push('API access requires internet connection');
100
- }
101
- else if (system.network.speed === 'slow') {
102
- warnings.push('May have delays due to slow internet connection');
103
- }
104
- // Cost warnings
105
- if (model.costType === 'paid') {
106
- warnings.push('Usage costs apply - monitor your spending');
107
- }
108
- }
109
- // Capability warnings based on ratings (0-10 scale, 0 = not supported)
110
- if (model.quality.agentic === 0) {
111
- warnings.push('Does not support agentic coding workflows');
112
- }
113
- else if (model.quality.agentic <= 4) {
114
- warnings.push('Limited capabilities for complex agentic coding tasks');
115
- }
116
- if (model.quality.local === 0) {
117
- warnings.push('Cannot be run locally - proprietary/closed-source model');
118
- }
119
- else if (model.quality.local <= 3) {
120
- warnings.push('Difficult to run locally - requires significant resources');
121
- }
122
- return warnings;
123
- }
124
- generateRecommendationText(model, compatibility) {
125
- if (compatibility === 'incompatible') {
126
- if (model.local) {
127
- const requiredMemory = model.minMemoryGB || 8;
128
- return `Cannot run locally - needs ${requiredMemory}GB RAM. ${model.api ? 'Try API access instead.' : ''}`;
129
- }
130
- return 'Requires internet connection for API access';
131
- }
132
- const strengths = [];
133
- // Analyze capabilities (0-10 scale)
134
- if (model.quality.agentic >= 8) {
135
- strengths.push('Excellent agentic coding abilities');
136
- }
137
- else if (model.quality.agentic >= 6) {
138
- strengths.push('Good agentic coding capabilities');
139
- }
140
- if (model.quality.local >= 8) {
141
- strengths.push('Easy to run locally');
142
- }
143
- else if (model.quality.local >= 6) {
144
- strengths.push('Reasonable to run locally');
145
- }
146
- if (model.quality.cost >= 8) {
147
- strengths.push('Excellent value - free or very cheap');
148
- }
149
- else if (model.quality.cost >= 6) {
150
- strengths.push('Good cost-effectiveness');
151
- }
152
- if (model.local && model.api) {
153
- strengths.push('Available locally and via API');
154
- }
155
- else if (model.local) {
156
- strengths.push('Private/local only');
157
- }
158
- // Build recommendation text as bullet points
159
- if (strengths.length > 0) {
160
- return strengths.map(s => `• ${s}`).join('\n');
161
- }
162
- return '• Standard model for general use';
163
- }
164
- getCompatibilityScore(compatibility) {
165
- switch (compatibility) {
166
- case 'perfect':
167
- return 4;
168
- case 'good':
169
- return 3;
170
- case 'marginal':
171
- return 2;
172
- case 'incompatible':
173
- return 1;
174
- }
175
- }
176
- calculateOverallCapabilityScore(model) {
177
- // Weight heavily in favor of agentic capabilities (coding ability is most important)
178
- // Then local feasibility, and finally cost
179
- return (model.quality.agentic * 3.0 +
180
- model.quality.local * 0.8 +
181
- model.quality.cost * 0.5);
182
- }
183
- }
184
- export const modelMatchingEngine = ModelMatchingEngine.getInstance();
185
- //# sourceMappingURL=model-engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-engine.js","sourceRoot":"","sources":["../../source/recommendations/model-engine.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import { SystemCapabilities, ModelRecommendation } from '../types/index.js';
2
- export interface ModelRecommendationEnhanced extends ModelRecommendation {
3
- recommendedProvider: string;
4
- }
5
- interface RecommendationResult {
6
- quickStart: ModelRecommendationEnhanced | null;
7
- allModels: ModelRecommendationEnhanced[];
8
- }
9
- export declare class RecommendationEngine {
10
- private static instance;
11
- static getInstance(): RecommendationEngine;
12
- /**
13
- * Get all recommendations based on system capabilities
14
- */
15
- getRecommendations(systemCapabilities: SystemCapabilities): RecommendationResult;
16
- /**
17
- * Enhance a model with setup instructions
18
- */
19
- private enhanceModel;
20
- /**
21
- * Sort models by priority for recommendations:
22
- * 1. High-quality local models (free + powerful)
23
- * 2. High-quality API models (powerful but paid)
24
- * 3. Lower-quality local models
25
- * 4. Lower-quality API models
26
- */
27
- private sortModelsByPriority;
28
- /**
29
- * Get a simple quick start recommendation
30
- */
31
- getQuickStartRecommendation(systemCapabilities: SystemCapabilities): {
32
- model: string;
33
- provider: string;
34
- reasoning: string;
35
- } | null;
36
- }
37
- export declare const recommendationEngine: RecommendationEngine;
38
- export {};
39
- //# sourceMappingURL=recommendation-engine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recommendation-engine.d.ts","sourceRoot":"","sources":["../../source/recommendations/recommendation-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAGtE,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACvE,mBAAmB,EAAE,MAAM,CAAC;CAC5B;AAED,UAAU,oBAAoB;IAC7B,UAAU,EAAE,2BAA2B,GAAG,IAAI,CAAC;IAC/C,SAAS,EAAE,2BAA2B,EAAE,CAAC;CACzC;AAED,qBAAa,oBAAoB;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAE9C,MAAM,CAAC,WAAW,IAAI,oBAAoB;IAO1C;;OAEG;IACH,kBAAkB,CACjB,kBAAkB,EAAE,kBAAkB,GACpC,oBAAoB;IA+BvB;;OAEG;IACH,OAAO,CAAC,YAAY;IA8BpB;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAoE5B;;OAEG;IACH,2BAA2B,CAAC,kBAAkB,EAAE,kBAAkB,GAAG;QACpE,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;CAeR;AAED,eAAO,MAAM,oBAAoB,sBAAqC,CAAC"}
@@ -1,144 +0,0 @@
1
- import { modelMatchingEngine } from '../recommendations/model-engine.js';
2
- export class RecommendationEngine {
3
- static instance;
4
- static getInstance() {
5
- if (!RecommendationEngine.instance) {
6
- RecommendationEngine.instance = new RecommendationEngine();
7
- }
8
- return RecommendationEngine.instance;
9
- }
10
- /**
11
- * Get all recommendations based on system capabilities
12
- */
13
- getRecommendations(systemCapabilities) {
14
- // Get all compatible models
15
- const compatibleModels = modelMatchingEngine.getCompatibleModels(systemCapabilities);
16
- // Enhance each model with setup instructions
17
- const enhancedModels = compatibleModels.map(model => this.enhanceModel(model, systemCapabilities));
18
- // Filter out incompatible models
19
- const usableModels = enhancedModels.filter(m => m.compatibility !== 'incompatible');
20
- // Sort models by priority:
21
- // 1. Free (local) + high quality
22
- // 2. Low cost + high quality
23
- // 3. By agentic capabilities
24
- // 4. By compatibility
25
- const sortedModels = this.sortModelsByPriority(usableModels);
26
- // Pick the best quick start option (prioritize local models if available)
27
- const quickStart = sortedModels[0] || null;
28
- return {
29
- quickStart,
30
- allModels: sortedModels,
31
- };
32
- }
33
- /**
34
- * Enhance a model with setup instructions
35
- */
36
- enhanceModel(modelRec, systemCapabilities) {
37
- const model = modelRec.model;
38
- // Determine best access method based on system capabilities
39
- const canUseLocal = model.local &&
40
- systemCapabilities.memory.total >= (model.minMemoryGB || 8);
41
- const canUseApi = model.api && systemCapabilities.network.connected;
42
- let recommendedProvider = '';
43
- if (canUseLocal && !canUseApi) {
44
- recommendedProvider = 'local';
45
- }
46
- else if (!canUseLocal && canUseApi) {
47
- recommendedProvider = 'api';
48
- }
49
- else if (canUseLocal && canUseApi) {
50
- recommendedProvider = 'local (API also available)';
51
- }
52
- else {
53
- recommendedProvider = 'unavailable';
54
- }
55
- return {
56
- ...modelRec,
57
- recommendedProvider,
58
- };
59
- }
60
- /**
61
- * Sort models by priority for recommendations:
62
- * 1. High-quality local models (free + powerful)
63
- * 2. High-quality API models (powerful but paid)
64
- * 3. Lower-quality local models
65
- * 4. Lower-quality API models
66
- */
67
- sortModelsByPriority(models) {
68
- return models.sort((a, b) => {
69
- // Calculate quality scores - prioritize agentic capabilities heavily
70
- const aQuality = a.model.quality.agentic * 3.0 +
71
- a.model.quality.local * 0.8 +
72
- a.model.quality.cost * 0.5;
73
- const bQuality = b.model.quality.agentic * 3.0 +
74
- b.model.quality.local * 0.8 +
75
- b.model.quality.cost * 0.5;
76
- // Determine what the user can ACTUALLY use based on recommendedProvider
77
- const aCanUseLocal = a.recommendedProvider.includes('local');
78
- const bCanUseLocal = b.recommendedProvider.includes('local');
79
- const aApiOnly = a.recommendedProvider === 'api';
80
- const bApiOnly = b.recommendedProvider === 'api';
81
- // Define quality thresholds (out of 43 possible with new weighting: agentic*3 + local*0.8 + cost*0.5)
82
- const highQuality = 24; // 24+ = high quality (agentic 8+)
83
- const decentQuality = 15; // 15+ = decent (agentic 5+), below = poor
84
- const aHighQuality = aQuality >= highQuality;
85
- const bHighQuality = bQuality >= highQuality;
86
- const aDecentQuality = aQuality >= decentQuality;
87
- const bDecentQuality = bQuality >= decentQuality;
88
- // 1. High-quality API beats poor-quality local (don't recommend trash just because it's free)
89
- if (aApiOnly && bCanUseLocal && aHighQuality && !bDecentQuality)
90
- return -1;
91
- if (bApiOnly && aCanUseLocal && bHighQuality && !aDecentQuality)
92
- return 1;
93
- // 2. Decent+ local models beat API-only (free is better if quality is acceptable)
94
- if (aCanUseLocal && bApiOnly && aDecentQuality)
95
- return -1;
96
- if (bCanUseLocal && aApiOnly && bDecentQuality)
97
- return 1;
98
- // 3. Among models user can run locally, prefer high quality
99
- if (aCanUseLocal && bCanUseLocal) {
100
- if (aHighQuality && !bHighQuality)
101
- return -1;
102
- if (bHighQuality && !aHighQuality)
103
- return 1;
104
- // Same quality tier - prefer higher score
105
- return bQuality - aQuality;
106
- }
107
- // 4. Among API-only models, prefer free over paid
108
- if (aApiOnly && bApiOnly) {
109
- const aCost = a.model.costType === 'free' ? 0 : 1;
110
- const bCost = b.model.costType === 'free' ? 0 : 1;
111
- if (aCost !== bCost)
112
- return aCost - bCost;
113
- // Same cost - prefer higher quality
114
- return bQuality - aQuality;
115
- }
116
- // 5. Compare by compatibility as final tiebreaker
117
- const compatibilityOrder = {
118
- perfect: 4,
119
- good: 3,
120
- marginal: 2,
121
- incompatible: 1,
122
- };
123
- return (compatibilityOrder[b.compatibility] -
124
- compatibilityOrder[a.compatibility]);
125
- });
126
- }
127
- /**
128
- * Get a simple quick start recommendation
129
- */
130
- getQuickStartRecommendation(systemCapabilities) {
131
- const result = this.getRecommendations(systemCapabilities);
132
- if (!result.quickStart) {
133
- return null;
134
- }
135
- const model = result.quickStart;
136
- return {
137
- model: model.model.name,
138
- provider: model.recommendedProvider,
139
- reasoning: model.recommendation,
140
- };
141
- }
142
- }
143
- export const recommendationEngine = RecommendationEngine.getInstance();
144
- //# sourceMappingURL=recommendation-engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recommendation-engine.js","sourceRoot":"","sources":["../../source/recommendations/recommendation-engine.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import { SystemCapabilities } from '../types/index.js';
2
- export declare class SystemDetector {
3
- private static instance;
4
- private cachedCapabilities;
5
- private lastDetection;
6
- private readonly CACHE_DURATION;
7
- static getInstance(): SystemDetector;
8
- getSystemCapabilities(): Promise<SystemCapabilities>;
9
- private detectSystemCapabilities;
10
- private detectCpu;
11
- private detectMemory;
12
- private detectPlatform;
13
- private detectGpu;
14
- private detectNetwork;
15
- clearCache(): void;
16
- }
17
- export declare const systemDetector: SystemDetector;
18
- //# sourceMappingURL=detector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../source/system/detector.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAIjD,qBAAa,cAAc;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IAEzC,MAAM,CAAC,WAAW,IAAI,cAAc;IAO9B,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,CAAC;YAe5C,wBAAwB;YAkBxB,SAAS;YAQT,YAAY;YAQZ,cAAc;YAKd,SAAS;YAgDT,aAAa;IAmC3B,UAAU,IAAI,IAAI;CAIlB;AAED,eAAO,MAAM,cAAc,gBAA+B,CAAC"}
@@ -1,140 +0,0 @@
1
- import { exec } from 'node:child_process';
2
- import { promisify } from 'node:util';
3
- import * as si from 'systeminformation';
4
- const execAsync = promisify(exec);
5
- export class SystemDetector {
6
- static instance;
7
- cachedCapabilities = null;
8
- lastDetection = 0;
9
- CACHE_DURATION = 30_000; // 30 seconds
10
- static getInstance() {
11
- if (!SystemDetector.instance) {
12
- SystemDetector.instance = new SystemDetector();
13
- }
14
- return SystemDetector.instance;
15
- }
16
- async getSystemCapabilities() {
17
- const now = Date.now();
18
- if (this.cachedCapabilities &&
19
- now - this.lastDetection < this.CACHE_DURATION) {
20
- return this.cachedCapabilities;
21
- }
22
- const capabilities = await this.detectSystemCapabilities();
23
- this.cachedCapabilities = capabilities;
24
- this.lastDetection = now;
25
- return capabilities;
26
- }
27
- async detectSystemCapabilities() {
28
- const [cpu, memory, gpu, platform, network] = await Promise.all([
29
- this.detectCpu(),
30
- this.detectMemory(),
31
- this.detectGpu(),
32
- this.detectPlatform(),
33
- this.detectNetwork(),
34
- ]);
35
- return {
36
- cpu,
37
- memory,
38
- gpu,
39
- platform,
40
- network,
41
- };
42
- }
43
- async detectCpu() {
44
- const cpuInfo = await si.cpu();
45
- return {
46
- cores: cpuInfo.cores,
47
- architecture: cpuInfo.family,
48
- };
49
- }
50
- async detectMemory() {
51
- const memInfo = await si.mem();
52
- return {
53
- total: Math.round(memInfo.total / 1024 ** 3), // Convert to GB
54
- available: Math.round(memInfo.available / 1024 ** 3), // Convert to GB
55
- };
56
- }
57
- async detectPlatform() {
58
- const osInfo = await si.osInfo();
59
- return osInfo.platform;
60
- }
61
- async detectGpu() {
62
- try {
63
- const graphics = await si.graphics();
64
- if (graphics.controllers && graphics.controllers.length > 0) {
65
- const controller = graphics.controllers[0];
66
- const vendor = controller.vendor?.toLowerCase() || '';
67
- const model = controller.model?.toLowerCase() || '';
68
- let type = 'none';
69
- if (vendor.includes('nvidia') || model.includes('nvidia')) {
70
- type = 'nvidia';
71
- }
72
- else if (vendor.includes('amd') ||
73
- model.includes('amd') ||
74
- model.includes('radeon')) {
75
- type = 'amd';
76
- }
77
- else if (vendor.includes('apple') || model.includes('apple')) {
78
- type = 'apple';
79
- }
80
- else if (vendor.includes('intel') || model.includes('intel')) {
81
- type = 'intel';
82
- }
83
- const memoryMB = typeof controller.vram === 'number'
84
- ? controller.vram
85
- : typeof controller.vramDynamic === 'number'
86
- ? controller.vramDynamic
87
- : 0;
88
- const memoryGB = memoryMB > 0 ? Math.round(memoryMB / 1024) : undefined;
89
- return {
90
- available: true,
91
- type,
92
- memory: memoryGB,
93
- };
94
- }
95
- }
96
- catch {
97
- // Fallback to basic detection if systeminformation fails
98
- }
99
- return {
100
- available: false,
101
- type: 'none',
102
- };
103
- }
104
- async detectNetwork() {
105
- try {
106
- // Simple connectivity test
107
- const testUrls = ['google.com', 'cloudflare.com'];
108
- const results = await Promise.allSettled(testUrls.map(async (url) => {
109
- const start = Date.now();
110
- await execAsync(`ping -c 1 -W 2000 ${url}`, { timeout: 3000 });
111
- return Date.now() - start;
112
- }));
113
- const successful = results.filter(r => r.status === 'fulfilled');
114
- if (successful.length === 0) {
115
- return { connected: false };
116
- }
117
- const avgLatency = successful.reduce((sum, r) => sum + r.value, 0) / successful.length;
118
- let speed;
119
- if (avgLatency < 50)
120
- speed = 'fast';
121
- else if (avgLatency < 200)
122
- speed = 'medium';
123
- else
124
- speed = 'slow';
125
- return {
126
- connected: true,
127
- speed,
128
- };
129
- }
130
- catch {
131
- return { connected: false };
132
- }
133
- }
134
- clearCache() {
135
- this.cachedCapabilities = null;
136
- this.lastDetection = 0;
137
- }
138
- }
139
- export const systemDetector = SystemDetector.getInstance();
140
- //# sourceMappingURL=detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../source/system/detector.ts"],"names":[],"mappings":"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"}