@caupulican/pi-adaptative 0.80.80 → 0.80.82

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 (72) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/core/agent-session.d.ts +15 -14
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +202 -9
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/cost/daily-usage.d.ts +23 -0
  7. package/dist/core/cost/daily-usage.d.ts.map +1 -0
  8. package/dist/core/cost/daily-usage.js +135 -0
  9. package/dist/core/cost/daily-usage.js.map +1 -0
  10. package/dist/core/model-router/config-diagnostics.d.ts +4 -0
  11. package/dist/core/model-router/config-diagnostics.d.ts.map +1 -0
  12. package/dist/core/model-router/config-diagnostics.js +26 -0
  13. package/dist/core/model-router/config-diagnostics.js.map +1 -0
  14. package/dist/core/model-router/intent-classifier.d.ts +3 -0
  15. package/dist/core/model-router/intent-classifier.d.ts.map +1 -0
  16. package/dist/core/model-router/intent-classifier.js +12 -0
  17. package/dist/core/model-router/intent-classifier.js.map +1 -0
  18. package/dist/core/model-router/session-buffer.d.ts +21 -0
  19. package/dist/core/model-router/session-buffer.d.ts.map +1 -0
  20. package/dist/core/model-router/session-buffer.js +20 -0
  21. package/dist/core/model-router/session-buffer.js.map +1 -0
  22. package/dist/core/model-router/status.d.ts +18 -0
  23. package/dist/core/model-router/status.d.ts.map +1 -0
  24. package/dist/core/model-router/status.js +67 -0
  25. package/dist/core/model-router/status.js.map +1 -0
  26. package/dist/core/model-router/tool-escalation.d.ts +9 -0
  27. package/dist/core/model-router/tool-escalation.d.ts.map +1 -0
  28. package/dist/core/model-router/tool-escalation.js +97 -0
  29. package/dist/core/model-router/tool-escalation.js.map +1 -0
  30. package/dist/core/profile-registry.d.ts +2 -1
  31. package/dist/core/profile-registry.d.ts.map +1 -1
  32. package/dist/core/profile-registry.js +15 -0
  33. package/dist/core/profile-registry.js.map +1 -1
  34. package/dist/core/resource-profile-equality.d.ts +5 -0
  35. package/dist/core/resource-profile-equality.d.ts.map +1 -0
  36. package/dist/core/resource-profile-equality.js +18 -0
  37. package/dist/core/resource-profile-equality.js.map +1 -0
  38. package/dist/core/settings-manager.d.ts +16 -0
  39. package/dist/core/settings-manager.d.ts.map +1 -1
  40. package/dist/core/settings-manager.js +74 -0
  41. package/dist/core/settings-manager.js.map +1 -1
  42. package/dist/core/slash-commands.d.ts.map +1 -1
  43. package/dist/core/slash-commands.js +2 -0
  44. package/dist/core/slash-commands.js.map +1 -1
  45. package/dist/main.d.ts.map +1 -1
  46. package/dist/main.js +5 -0
  47. package/dist/main.js.map +1 -1
  48. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  49. package/dist/modes/interactive/components/config-selector.js +3 -3
  50. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  51. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  52. package/dist/modes/interactive/components/footer.js +6 -1
  53. package/dist/modes/interactive/components/footer.js.map +1 -1
  54. package/dist/modes/interactive/components/settings-selector.d.ts +4 -1
  55. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  56. package/dist/modes/interactive/components/settings-selector.js +102 -0
  57. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  58. package/dist/modes/interactive/interactive-mode.d.ts +2 -0
  59. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  60. package/dist/modes/interactive/interactive-mode.js +96 -15
  61. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  62. package/docs/resources.md +7 -1
  63. package/docs/settings.md +24 -2
  64. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  65. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  66. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  67. package/examples/extensions/sandbox/package-lock.json +2 -2
  68. package/examples/extensions/sandbox/package.json +1 -1
  69. package/examples/extensions/with-deps/package-lock.json +2 -2
  70. package/examples/extensions/with-deps/package.json +1 -1
  71. package/npm-shrinkwrap.json +12 -12
  72. package/package.json +4 -4
@@ -172,6 +172,23 @@ function normalizeProfileResources(value) {
172
172
  }
173
173
  return result;
174
174
  }
175
+ function normalizeModelRouterSettings(value) {
176
+ if (!value || typeof value !== "object" || Array.isArray(value))
177
+ return undefined;
178
+ const input = value;
179
+ const settings = {};
180
+ if (typeof input.enabled === "boolean")
181
+ settings.enabled = input.enabled;
182
+ for (const key of ["cheapModel", "expensiveModel", "learningModel"]) {
183
+ const candidate = input[key];
184
+ if (typeof candidate !== "string")
185
+ continue;
186
+ const trimmed = candidate.trim();
187
+ if (trimmed)
188
+ settings[key] = trimmed;
189
+ }
190
+ return Object.keys(settings).length > 0 ? settings : undefined;
191
+ }
175
192
  function parseProfileFileDefinition(content) {
176
193
  const parsed = JSON.parse(content);
177
194
  if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
@@ -187,6 +204,7 @@ function parseProfileFileDefinition(content) {
187
204
  description: typeof parsed.description === "string" ? parsed.description.trim() || undefined : undefined,
188
205
  model: typeof parsed.model === "string" ? parsed.model.trim() || undefined : undefined,
189
206
  thinking: isThinkingLevel(parsed.thinking) ? parsed.thinking : undefined,
207
+ modelRouter: normalizeModelRouterSettings(parsed.modelRouter),
190
208
  soul: typeof parsed.soul === "string" ? parsed.soul.trim() || undefined : undefined,
191
209
  resources: normalizeProfileResources(resourceSection),
192
210
  };
@@ -808,6 +826,7 @@ export class SettingsManager {
808
826
  description: definition.description ?? existing.description,
809
827
  model: definition.model ?? existing.model,
810
828
  thinking: definition.thinking ?? existing.thinking,
829
+ modelRouter: definition.modelRouter ?? existing.modelRouter,
811
830
  };
812
831
  mkdirSync(dirname(path), { recursive: true });
813
832
  writeFileSync(path, JSON.stringify(payload, null, 2), "utf-8");
@@ -1290,6 +1309,60 @@ export class SettingsManager {
1290
1309
  action: this.settings.costGuard?.action ?? "warn",
1291
1310
  };
1292
1311
  }
1312
+ getProfileModelRouterSettings() {
1313
+ const activeProfileNames = this.getActiveResourceProfileNames();
1314
+ if (activeProfileNames.length === 0)
1315
+ return undefined;
1316
+ const merged = {};
1317
+ for (let index = activeProfileNames.length - 1; index >= 0; index--) {
1318
+ const profile = this.profileRegistry.getProfile(activeProfileNames[index]);
1319
+ const router = profile?.modelRouter;
1320
+ if (!router)
1321
+ continue;
1322
+ if (router.enabled !== undefined)
1323
+ merged.enabled = router.enabled;
1324
+ if (router.cheapModel !== undefined)
1325
+ merged.cheapModel = router.cheapModel;
1326
+ if (router.expensiveModel !== undefined)
1327
+ merged.expensiveModel = router.expensiveModel;
1328
+ if (router.learningModel !== undefined)
1329
+ merged.learningModel = router.learningModel;
1330
+ }
1331
+ return Object.keys(merged).length > 0 ? merged : undefined;
1332
+ }
1333
+ getModelRouterSettings() {
1334
+ const profileSettings = this.getProfileModelRouterSettings();
1335
+ const settings = {
1336
+ enabled: this.settings.modelRouter?.enabled ?? false,
1337
+ cheapModel: this.settings.modelRouter?.cheapModel?.trim() || undefined,
1338
+ expensiveModel: this.settings.modelRouter?.expensiveModel?.trim() || undefined,
1339
+ learningModel: this.settings.modelRouter?.learningModel?.trim() || undefined,
1340
+ };
1341
+ return {
1342
+ enabled: profileSettings?.enabled ?? settings.enabled,
1343
+ cheapModel: profileSettings?.cheapModel?.trim() || settings.cheapModel,
1344
+ expensiveModel: profileSettings?.expensiveModel?.trim() || settings.expensiveModel,
1345
+ learningModel: profileSettings?.learningModel?.trim() || settings.learningModel,
1346
+ };
1347
+ }
1348
+ setModelRouterSettings(settings, scope = "global") {
1349
+ const normalized = {
1350
+ enabled: settings.enabled ?? false,
1351
+ cheapModel: settings.cheapModel?.trim() || undefined,
1352
+ expensiveModel: settings.expensiveModel?.trim() || undefined,
1353
+ learningModel: settings.learningModel?.trim() || undefined,
1354
+ };
1355
+ if (scope === "project") {
1356
+ const projectSettings = structuredClone(this.projectSettings);
1357
+ projectSettings.modelRouter = normalized;
1358
+ this.markProjectModified("modelRouter");
1359
+ this.saveProjectSettings(projectSettings);
1360
+ return;
1361
+ }
1362
+ this.globalSettings.modelRouter = normalized;
1363
+ this.markModified("modelRouter");
1364
+ this.save();
1365
+ }
1293
1366
  /** Configured auxiliary summarizer model id, or "auto" (default) to pick the cheapest authed model. */
1294
1367
  getCompactionModel() {
1295
1368
  return this.settings.compaction?.model ?? "auto";
@@ -1712,6 +1785,7 @@ export class SettingsManager {
1712
1785
  const settings = this.settings.autoLearn ?? {};
1713
1786
  return {
1714
1787
  ...settings,
1788
+ model: settings.model ?? this.getModelRouterSettings().learningModel,
1715
1789
  thinkingLevel: settings.thinkingLevel ?? "low",
1716
1790
  complexTaskToolCalls: settings.complexTaskToolCalls ?? 12,
1717
1791
  };