@wrongstack/core 0.109.1 → 0.119.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 (62) hide show
  1. package/dist/{agent-bridge-mOxbpFcg.d.ts → agent-bridge-PRAbEX-9.d.ts} +1 -1
  2. package/dist/{agent-subagent-runner-DukQLUcS.d.ts → agent-subagent-runner-DXWImnNV.d.ts} +7 -8
  3. package/dist/{brain-Dfv4Y82E.d.ts → brain-NZZqL8sn.d.ts} +1 -1
  4. package/dist/{compactor-DXLxLcmU.d.ts → compactor-C3stu664.d.ts} +1 -1
  5. package/dist/{config-BSU-6vah.d.ts → config-DZV9VK9n.d.ts} +104 -3
  6. package/dist/{context-CNRYfhUv.d.ts → context-hvXINa6a.d.ts} +31 -1
  7. package/dist/coordination/index.d.ts +12 -13
  8. package/dist/coordination/index.js +198 -0
  9. package/dist/coordination/index.js.map +1 -1
  10. package/dist/defaults/index.d.ts +26 -27
  11. package/dist/defaults/index.js +243 -35
  12. package/dist/defaults/index.js.map +1 -1
  13. package/dist/execution/index.d.ts +15 -16
  14. package/dist/execution/index.js +209 -5
  15. package/dist/execution/index.js.map +1 -1
  16. package/dist/extension/index.d.ts +6 -7
  17. package/dist/{goal-preamble-CI8lxeY1.d.ts → goal-preamble-COpt55W8.d.ts} +10 -10
  18. package/dist/{index-DIKEcfgC.d.ts → index-4VVHuTZF.d.ts} +7 -6
  19. package/dist/{index-BWRN6wOb.d.ts → index-Cj3le7TI.d.ts} +9 -10
  20. package/dist/index.d.ts +40 -41
  21. package/dist/index.js +298 -43
  22. package/dist/index.js.map +1 -1
  23. package/dist/infrastructure/index.d.ts +6 -7
  24. package/dist/kernel/index.d.ts +10 -11
  25. package/dist/llm-selector-Bmx4PsVM.d.ts +58 -0
  26. package/dist/{mcp-servers-CXCsANdY.d.ts → mcp-servers-CofNHOqn.d.ts} +3 -3
  27. package/dist/{mode-ARA3HrkY.d.ts → mode-CZlO9iU1.d.ts} +1 -1
  28. package/dist/models/index.d.ts +157 -53
  29. package/dist/models/index.js +423 -1
  30. package/dist/models/index.js.map +1 -1
  31. package/dist/{models-registry-DU64QxQa.d.ts → models-registry-BzlsjKcy.d.ts} +1 -1
  32. package/dist/{multi-agent-coordinator-51LvnXkD.d.ts → multi-agent-coordinator-CmDmUgq2.d.ts} +1 -1
  33. package/dist/{null-fleet-bus-D09hMzFQ.d.ts → null-fleet-bus-CyH2YqP4.d.ts} +6 -6
  34. package/dist/observability/index.d.ts +2 -2
  35. package/dist/{parallel-eternal-engine-B2CbsKpc.d.ts → parallel-eternal-engine-uxVm4y4V.d.ts} +8 -8
  36. package/dist/{path-resolver-DDJiMAtX.d.ts → path-resolver-gfoGxpdd.d.ts} +3 -3
  37. package/dist/{permission-BDv7z0mk.d.ts → permission-DhLrgA30.d.ts} +1 -1
  38. package/dist/{permission-policy-dF74EpDp.d.ts → permission-policy-DGOvne7i.d.ts} +2 -2
  39. package/dist/{pipeline-BqiA_UMr.d.ts → pipeline-CqF7uju2.d.ts} +2 -2
  40. package/dist/{plan-templates-BdDxl9cI.d.ts → plan-templates-DoKhzenv.d.ts} +6 -6
  41. package/dist/{provider-runner-BUunikwY.d.ts → provider-runner-BPlI5sPZ.d.ts} +3 -3
  42. package/dist/{retry-policy-BcmuT_V0.d.ts → retry-policy-B4Q-FZgE.d.ts} +1 -1
  43. package/dist/sdd/index.d.ts +8 -9
  44. package/dist/sdd/index.js +198 -0
  45. package/dist/sdd/index.js.map +1 -1
  46. package/dist/{secret-vault-DrOhc2i5.d.ts → secret-vault-B7GnL6o9.d.ts} +1 -1
  47. package/dist/security/index.d.ts +4 -4
  48. package/dist/{selector-C7wcdqMA.d.ts → selector-BakeMnWR.d.ts} +1 -1
  49. package/dist/{session-event-bridge-BpJ5trO9.d.ts → session-event-bridge-DE5Oekwx.d.ts} +1 -1
  50. package/dist/{session-reader-DDz1Ek4V.d.ts → session-reader-DFC81-4p.d.ts} +1 -1
  51. package/dist/storage/index.d.ts +11 -12
  52. package/dist/storage/index.js +43 -34
  53. package/dist/storage/index.js.map +1 -1
  54. package/dist/types/index.d.ts +19 -20
  55. package/dist/types/index.js +35 -1
  56. package/dist/types/index.js.map +1 -1
  57. package/dist/utils/index.d.ts +3 -4
  58. package/dist/utils/index.js +2 -1
  59. package/dist/utils/index.js.map +1 -1
  60. package/dist/{wstack-paths-_lqjzErq.d.ts → wstack-paths-DD50Omgn.d.ts} +3 -0
  61. package/package.json +1 -1
  62. package/dist/models-registry-B6_KfS65.d.ts +0 -95
@@ -922,6 +922,428 @@ IMPORTANT: Total conversation (${totalTokens} tokens) exceeds budget (${effectiv
922
922
  }
923
923
  };
924
924
 
925
- export { DefaultModeStore, DefaultModelsRegistry, LLMSelector, classifyFamily, loadProjectModes, loadUserModes };
925
+ // src/models/model-intelligence.ts
926
+ var MODEL_PROFILES = [
927
+ // ── Anthropic ──
928
+ {
929
+ provider: "anthropic",
930
+ pattern: /claude-opus/i,
931
+ family: "Claude Opus",
932
+ strengths: ["complex reasoning", "multi-step planning", "nuanced judgment", "long-form analysis"],
933
+ weaknesses: ["latency", "cost"],
934
+ bestFor: ["planning", "security", "debugging", "review"],
935
+ costTier: "premium",
936
+ speedTier: "slow"
937
+ },
938
+ {
939
+ provider: "anthropic",
940
+ pattern: /claude-sonnet/i,
941
+ family: "Claude Sonnet",
942
+ strengths: ["coding", "balanced reasoning", "tool use", "fast iteration"],
943
+ bestFor: ["coding", "refactoring", "backend", "general"],
944
+ costTier: "standard",
945
+ speedTier: "fast"
946
+ },
947
+ {
948
+ provider: "anthropic",
949
+ pattern: /claude-haiku/i,
950
+ family: "Claude Haiku",
951
+ strengths: ["speed", "low cost", "simple tasks"],
952
+ weaknesses: ["complex reasoning", "long context"],
953
+ bestFor: ["lightweight", "docs", "frontend"],
954
+ avoidFor: ["planning", "security"],
955
+ costTier: "budget",
956
+ speedTier: "fast"
957
+ },
958
+ // ── OpenAI ──
959
+ {
960
+ provider: "openai",
961
+ pattern: /gpt-5|o3|o4/i,
962
+ family: "GPT-5 / o3 / o4",
963
+ strengths: ["complex reasoning", "coding", "multi-modal"],
964
+ bestFor: ["planning", "coding", "debugging", "general"],
965
+ costTier: "premium",
966
+ speedTier: "normal"
967
+ },
968
+ {
969
+ provider: "openai",
970
+ pattern: /gpt-4\.1|gpt-4o/i,
971
+ family: "GPT-4.1 / 4o",
972
+ strengths: ["coding", "balanced reasoning", "fast"],
973
+ bestFor: ["coding", "refactoring", "backend", "docs"],
974
+ costTier: "standard",
975
+ speedTier: "fast"
976
+ },
977
+ {
978
+ provider: "openai",
979
+ pattern: /gpt-4o-mini/i,
980
+ family: "GPT-4o Mini",
981
+ strengths: ["speed", "low cost", "simple tasks"],
982
+ weaknesses: ["complex reasoning"],
983
+ bestFor: ["lightweight", "frontend", "docs"],
984
+ avoidFor: ["planning", "security"],
985
+ costTier: "budget",
986
+ speedTier: "fast"
987
+ },
988
+ // ── Google ──
989
+ {
990
+ provider: "google",
991
+ pattern: /gemini-(?:2\.5|3)/i,
992
+ family: "Gemini 2.5 / 3",
993
+ strengths: ["long context", "multi-modal", "coding", "reasoning"],
994
+ bestFor: ["coding", "planning", "data", "general"],
995
+ costTier: "standard",
996
+ speedTier: "normal"
997
+ },
998
+ {
999
+ provider: "google",
1000
+ pattern: /gemini-2\.0-flash|gemini-flash/i,
1001
+ family: "Gemini Flash",
1002
+ strengths: ["speed", "low cost", "long context"],
1003
+ weaknesses: ["deep reasoning"],
1004
+ bestFor: ["lightweight", "docs", "frontend", "data"],
1005
+ avoidFor: ["planning", "security"],
1006
+ costTier: "budget",
1007
+ speedTier: "fast"
1008
+ },
1009
+ // ── DeepSeek ──
1010
+ {
1011
+ provider: "deepseek",
1012
+ pattern: /deepseek-v3|deepseek-r1/i,
1013
+ family: "DeepSeek V3 / R1",
1014
+ strengths: ["coding", "math", "reasoning", "cost-effective"],
1015
+ bestFor: ["coding", "refactoring", "debugging", "general"],
1016
+ costTier: "standard",
1017
+ speedTier: "normal"
1018
+ },
1019
+ // ── OpenRouter / catch-all ──
1020
+ {
1021
+ provider: "openrouter",
1022
+ pattern: /.*/,
1023
+ family: "OpenRouter (routed)",
1024
+ strengths: ["model variety", "fallback"],
1025
+ bestFor: ["general"],
1026
+ costTier: "standard",
1027
+ speedTier: "normal"
1028
+ }
1029
+ ];
1030
+ var TASK_TO_ROLE = {
1031
+ coding: ["executor", "architect", "bug-hunter"],
1032
+ planning: ["planner", "architect", "refactor-planner"],
1033
+ security: ["security-scanner", "security-reviewer"],
1034
+ docs: ["document", "simplifier"],
1035
+ testing: ["test", "e2e"],
1036
+ refactoring: ["refactor-planner", "refactor", "simplifier"],
1037
+ debugging: ["debugger", "bug-hunter", "tracer"],
1038
+ data: ["analyst", "data", "database"],
1039
+ frontend: ["frontend", "designer"],
1040
+ backend: ["backend", "api", "auth"],
1041
+ review: ["code-reviewer", "critic"],
1042
+ lightweight: ["executor", "simplifier"],
1043
+ general: ["executor", "analyst"]
1044
+ };
1045
+ function inferTaskType(description, role) {
1046
+ const d = description.toLowerCase();
1047
+ const keywords = [
1048
+ [/plan|architect|design|strategy|blueprint|system\s*design/i, "planning"],
1049
+ [/security|vuln|exploit|injection|auth/i, "security"],
1050
+ [/doc|readme|explain|write\s*(a|the)\s*doc|tutorial/i, "docs"],
1051
+ [/test|spec|assert|mock|coverage/i, "testing"],
1052
+ [/refactor|clean\s*up|restructure|simplify/i, "refactoring"],
1053
+ [/bug|fix|debug|trace|crash|error/i, "debugging"],
1054
+ [/data|json|sql|query|analyze|parse/i, "data"],
1055
+ [/frontend|react|ui|css|component|jsx/i, "frontend"],
1056
+ [/backend|api|server|endpoint|route|middleware/i, "backend"],
1057
+ [/review|audit|inspect|check/i, "review"],
1058
+ [/simple|quick|one-liner|trivial/i, "lightweight"]
1059
+ ];
1060
+ for (const [re, taskType] of keywords) {
1061
+ if (re.test(d)) return taskType;
1062
+ }
1063
+ if (role) {
1064
+ for (const [taskType, roles] of Object.entries(TASK_TO_ROLE)) {
1065
+ if (roles.includes(role)) return taskType;
1066
+ }
1067
+ }
1068
+ return "general";
1069
+ }
1070
+ function findModelProfile(provider, modelId) {
1071
+ const candidates = MODEL_PROFILES.filter((p) => p.provider === provider);
1072
+ for (const p of candidates) {
1073
+ if (p.pattern.test(modelId)) return p;
1074
+ }
1075
+ return void 0;
1076
+ }
1077
+ function scoreModelForTask(profile, taskType) {
1078
+ if (!profile) return 50;
1079
+ if (profile.avoidFor?.includes(taskType)) return 10;
1080
+ const bestIdx = profile.bestFor.indexOf(taskType);
1081
+ if (bestIdx >= 0) {
1082
+ return 90 - bestIdx * 10;
1083
+ }
1084
+ let score = 50;
1085
+ if (taskType === "lightweight") {
1086
+ score += profile.costTier === "budget" ? 30 : profile.costTier === "standard" ? 15 : 0;
1087
+ score += profile.speedTier === "fast" ? 20 : 0;
1088
+ }
1089
+ if (taskType === "planning" || taskType === "security") {
1090
+ score += profile.costTier === "premium" ? 20 : 0;
1091
+ score += profile.speedTier === "slow" ? 10 : 0;
1092
+ }
1093
+ return score;
1094
+ }
1095
+
1096
+ // src/models/model-router.ts
1097
+ var DEFAULT_PROFILES = [
1098
+ { provider: "anthropic", pattern: /claude-opus/i, family: "Claude Opus", strengths: ["reasoning", "planning"], bestFor: ["planning", "security", "debugging"], costTier: "premium", speedTier: "slow" },
1099
+ { provider: "anthropic", pattern: /claude-sonnet/i, family: "Claude Sonnet", strengths: ["coding", "balanced"], bestFor: ["coding", "general"], costTier: "standard", speedTier: "fast" },
1100
+ { provider: "anthropic", pattern: /claude-haiku/i, family: "Claude Haiku", strengths: ["speed"], bestFor: ["lightweight", "docs"], avoidFor: ["planning"], costTier: "budget", speedTier: "fast" },
1101
+ { provider: "openai", pattern: /gpt-5|o3|o4/i, family: "GPT-5/o3/o4", strengths: ["reasoning", "coding"], bestFor: ["planning", "coding", "debugging"], costTier: "premium", speedTier: "normal" },
1102
+ { provider: "openai", pattern: /gpt-4/i, family: "GPT-4", strengths: ["coding"], bestFor: ["coding", "docs"], costTier: "standard", speedTier: "fast" },
1103
+ { provider: "openai", pattern: /gpt-4o-mini/i, family: "GPT-4o Mini", strengths: ["speed"], bestFor: ["lightweight", "docs"], avoidFor: ["planning"], costTier: "budget", speedTier: "fast" },
1104
+ { provider: "google", pattern: /gemini-(?:2\.5|3)/i, family: "Gemini 2.5/3", strengths: ["context", "coding"], bestFor: ["coding", "data"], costTier: "standard", speedTier: "normal" },
1105
+ { provider: "google", pattern: /gemini.*flash/i, family: "Gemini Flash", strengths: ["speed"], bestFor: ["lightweight", "docs"], avoidFor: ["planning"], costTier: "budget", speedTier: "fast" },
1106
+ { provider: "deepseek", pattern: /deepseek/i, family: "DeepSeek", strengths: ["coding", "cost-effective"], bestFor: ["coding", "general"], costTier: "standard", speedTier: "normal" }
1107
+ ];
1108
+ var TASK_CATEGORIES = {
1109
+ plan: "planning",
1110
+ architect: "planning",
1111
+ design: "planning",
1112
+ strategy: "planning",
1113
+ security: "security",
1114
+ vuln: "security",
1115
+ exploit: "security",
1116
+ auth: "security",
1117
+ doc: "docs",
1118
+ readme: "docs",
1119
+ explain: "docs",
1120
+ write: "docs",
1121
+ test: "testing",
1122
+ spec: "testing",
1123
+ assert: "testing",
1124
+ coverage: "testing",
1125
+ refactor: "refactoring",
1126
+ cleanup: "refactoring",
1127
+ restructure: "refactoring",
1128
+ bug: "debugging",
1129
+ fix: "debugging",
1130
+ debug: "debugging",
1131
+ trace: "debugging",
1132
+ crash: "debugging",
1133
+ data: "data",
1134
+ json: "data",
1135
+ sql: "data",
1136
+ query: "data",
1137
+ analyze: "data",
1138
+ parse: "data",
1139
+ frontend: "frontend",
1140
+ react: "frontend",
1141
+ ui: "frontend",
1142
+ css: "frontend",
1143
+ component: "frontend",
1144
+ backend: "backend",
1145
+ api: "backend",
1146
+ server: "backend",
1147
+ endpoint: "backend",
1148
+ review: "review",
1149
+ audit: "review",
1150
+ inspect: "review",
1151
+ simple: "lightweight",
1152
+ quick: "lightweight",
1153
+ trivial: "lightweight"
1154
+ };
1155
+ var ModelRouter = class {
1156
+ profiles;
1157
+ matrix;
1158
+ config;
1159
+ costs = { byModel: {}, totalCost: 0 };
1160
+ constructor(opts) {
1161
+ this.profiles = opts.profiles ?? DEFAULT_PROFILES;
1162
+ this.matrix = opts.matrix ?? {};
1163
+ this.config = opts.config;
1164
+ }
1165
+ /** Look up the model matrix resolution for a role (role → phase → * → leader). */
1166
+ resolveMatrix(role) {
1167
+ if (this.matrix[role]) return this.matrix[role];
1168
+ const phase = this.roleToPhase(role);
1169
+ if (phase && this.matrix[phase]) return this.matrix[phase];
1170
+ if (this.matrix["*"]) return this.matrix["*"];
1171
+ return void 0;
1172
+ }
1173
+ /** Simplified phase lookup for common roles. */
1174
+ roleToPhase(role) {
1175
+ const phaseMap = {
1176
+ planner: "plan",
1177
+ architect: "plan",
1178
+ "refactor-planner": "plan",
1179
+ executor: "code",
1180
+ refactor: "code",
1181
+ simplifier: "code",
1182
+ migration: "code",
1183
+ "bug-hunter": "code",
1184
+ debugger: "code",
1185
+ tracer: "code",
1186
+ test: "code",
1187
+ e2e: "code",
1188
+ performance: "code",
1189
+ chaos: "code",
1190
+ "security-scanner": "review",
1191
+ "security-reviewer": "review",
1192
+ "code-reviewer": "review",
1193
+ critic: "review",
1194
+ accessibility: "review",
1195
+ compliance: "review",
1196
+ analyst: "code",
1197
+ data: "code",
1198
+ database: "code",
1199
+ frontend: "code",
1200
+ backend: "code",
1201
+ api: "code",
1202
+ auth: "code",
1203
+ designer: "code",
1204
+ document: "code",
1205
+ researcher: "plan",
1206
+ explore: "plan",
1207
+ search: "plan"
1208
+ };
1209
+ return phaseMap[role];
1210
+ }
1211
+ /**
1212
+ * Pick the best model for a task.
1213
+ *
1214
+ * Priority:
1215
+ * 1. User's /setmodel matrix entry for this role (explicit override)
1216
+ * 2. Best-matching model from intelligence profiles
1217
+ * 3. Leader model (fallback)
1218
+ */
1219
+ pickForTask(role, description) {
1220
+ const matrixEntry = this.resolveMatrix(role);
1221
+ if (matrixEntry) {
1222
+ const provider = matrixEntry.provider ?? this.config.provider;
1223
+ return {
1224
+ provider,
1225
+ model: matrixEntry.model,
1226
+ reason: `matrix override for role ${role}`,
1227
+ fromMatrix: true
1228
+ };
1229
+ }
1230
+ const category = this.inferCategory(description, role);
1231
+ const best = this.findBestModel(category);
1232
+ if (best) {
1233
+ return { ...best, reason: `best-for ${category} (auto-detected)`, fromMatrix: false };
1234
+ }
1235
+ return {
1236
+ provider: this.config.provider,
1237
+ model: this.config.model,
1238
+ reason: "leader fallback",
1239
+ fromMatrix: false
1240
+ };
1241
+ }
1242
+ /** Infer task category from description keywords + role. */
1243
+ inferCategory(description, role) {
1244
+ const d = description.toLowerCase();
1245
+ for (const [keyword, category] of Object.entries(TASK_CATEGORIES)) {
1246
+ if (d.includes(keyword)) return category;
1247
+ }
1248
+ const roleMap = {
1249
+ "security-scanner": "security",
1250
+ "security-reviewer": "security",
1251
+ "bug-hunter": "debugging",
1252
+ debugger: "debugging",
1253
+ planner: "planning",
1254
+ architect: "planning",
1255
+ "refactor-planner": "refactoring",
1256
+ refactor: "refactoring",
1257
+ test: "testing",
1258
+ e2e: "testing",
1259
+ document: "docs",
1260
+ simplifier: "docs",
1261
+ "code-reviewer": "review",
1262
+ critic: "review",
1263
+ "frontend": "frontend",
1264
+ "backend": "backend"
1265
+ };
1266
+ return roleMap[role] ?? "general";
1267
+ }
1268
+ /** Find the best available model for a task category. */
1269
+ findBestModel(category) {
1270
+ const scored = this.profiles.filter((p) => this.hasKey(p.provider)).map((p) => {
1271
+ let score = 50;
1272
+ if (p.bestFor.includes(category)) score += 40;
1273
+ if (p.avoidFor?.includes(category)) score -= 50;
1274
+ if (category === "lightweight" && p.costTier === "budget") score += 20;
1275
+ if (category === "planning" && p.costTier === "premium") score += 15;
1276
+ if (category === "planning" && p.speedTier === "slow") score += 10;
1277
+ return { profile: p, score };
1278
+ }).filter((s) => s.score > 0).sort((a, b) => b.score - a.score);
1279
+ if (scored.length === 0) return void 0;
1280
+ const best = scored[0].profile;
1281
+ const models = this.getProviderModels(best.provider);
1282
+ const match = models.find((m) => best.pattern.test(m)) ?? models[0];
1283
+ if (!match) return void 0;
1284
+ return { provider: best.provider, model: match };
1285
+ }
1286
+ /** Check if a provider has an API key configured. */
1287
+ hasKey(providerId) {
1288
+ const pc = this.config.providers?.[providerId];
1289
+ if (!pc) return providerId === this.config.provider;
1290
+ if (typeof pc.apiKey === "string" && pc.apiKey.length > 0) return true;
1291
+ if (Array.isArray(pc.apiKeys) && pc.apiKeys.some((k) => k?.apiKey)) return true;
1292
+ return false;
1293
+ }
1294
+ /** Get the configured model list for a provider. */
1295
+ getProviderModels(providerId) {
1296
+ const pc = this.config.providers?.[providerId];
1297
+ return pc?.models ?? [];
1298
+ }
1299
+ /** Record cost for a model. */
1300
+ recordCost(provider, model, cost, tokens) {
1301
+ const key = `${provider}/${model}`;
1302
+ const entry = this.costs.byModel[key] ?? { cost: 0, tokens: { input: 0, output: 0 }, calls: 0 };
1303
+ entry.cost += cost;
1304
+ if (tokens) {
1305
+ entry.tokens.input += tokens.input;
1306
+ entry.tokens.output += tokens.output;
1307
+ }
1308
+ entry.calls += 1;
1309
+ this.costs.byModel[key] = entry;
1310
+ this.costs.totalCost += cost;
1311
+ }
1312
+ /** Get cumulative costs. */
1313
+ getCosts() {
1314
+ return { ...this.costs, byModel: { ...this.costs.byModel } };
1315
+ }
1316
+ /** Reset cost tracking. */
1317
+ resetCosts() {
1318
+ this.costs = { byModel: {}, totalCost: 0 };
1319
+ }
1320
+ /** List all available providers with their best model for each task category. */
1321
+ suggestMatrix() {
1322
+ const matrix = {};
1323
+ const roles = [
1324
+ "security-scanner",
1325
+ "bug-hunter",
1326
+ "planner",
1327
+ "architect",
1328
+ "refactor-planner",
1329
+ "test",
1330
+ "document",
1331
+ "code-reviewer",
1332
+ "executor",
1333
+ "debugger",
1334
+ "analyst"
1335
+ ];
1336
+ for (const role of roles) {
1337
+ if (this.matrix[role]) continue;
1338
+ const pick = this.pickForTask(role, role);
1339
+ if (!pick.fromMatrix) {
1340
+ matrix[role] = pick;
1341
+ }
1342
+ }
1343
+ return matrix;
1344
+ }
1345
+ };
1346
+
1347
+ export { DefaultModeStore, DefaultModelsRegistry, LLMSelector, MODEL_PROFILES, ModelRouter, TASK_TO_ROLE, classifyFamily, findModelProfile, inferTaskType, loadProjectModes, loadUserModes, scoreModelForTask };
926
1348
  //# sourceMappingURL=index.js.map
927
1349
  //# sourceMappingURL=index.js.map