@caupulican/pi-adaptative 0.80.88 → 0.80.89

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 (53) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/core/agent-session.d.ts +35 -0
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +262 -0
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/context/brain-curator.d.ts +88 -0
  7. package/dist/core/context/brain-curator.d.ts.map +1 -0
  8. package/dist/core/context/brain-curator.js +192 -0
  9. package/dist/core/context/brain-curator.js.map +1 -0
  10. package/dist/core/context/context-composition.d.ts +122 -0
  11. package/dist/core/context/context-composition.d.ts.map +1 -0
  12. package/dist/core/context/context-composition.js +163 -0
  13. package/dist/core/context/context-composition.js.map +1 -0
  14. package/dist/core/context/context-prompt-enforcement.d.ts +13 -0
  15. package/dist/core/context/context-prompt-enforcement.d.ts.map +1 -1
  16. package/dist/core/context/context-prompt-enforcement.js +17 -2
  17. package/dist/core/context/context-prompt-enforcement.js.map +1 -1
  18. package/dist/core/context-gc.d.ts +13 -0
  19. package/dist/core/context-gc.d.ts.map +1 -1
  20. package/dist/core/context-gc.js +6 -0
  21. package/dist/core/context-gc.js.map +1 -1
  22. package/dist/core/research/model-fitness.d.ts +3 -0
  23. package/dist/core/research/model-fitness.d.ts.map +1 -1
  24. package/dist/core/research/model-fitness.js +54 -3
  25. package/dist/core/research/model-fitness.js.map +1 -1
  26. package/dist/core/settings-manager.d.ts +13 -0
  27. package/dist/core/settings-manager.d.ts.map +1 -1
  28. package/dist/core/settings-manager.js +19 -0
  29. package/dist/core/settings-manager.js.map +1 -1
  30. package/dist/core/slash-commands.d.ts.map +1 -1
  31. package/dist/core/slash-commands.js +6 -1
  32. package/dist/core/slash-commands.js.map +1 -1
  33. package/dist/modes/interactive/components/fitness-role-selector.d.ts +13 -0
  34. package/dist/modes/interactive/components/fitness-role-selector.d.ts.map +1 -0
  35. package/dist/modes/interactive/components/fitness-role-selector.js +65 -0
  36. package/dist/modes/interactive/components/fitness-role-selector.js.map +1 -0
  37. package/dist/modes/interactive/components/settings-selector.d.ts +4 -1
  38. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  39. package/dist/modes/interactive/components/settings-selector.js +84 -0
  40. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  41. package/dist/modes/interactive/interactive-mode.d.ts +5 -0
  42. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  43. package/dist/modes/interactive/interactive-mode.js +91 -0
  44. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  45. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  46. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  47. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  48. package/examples/extensions/sandbox/package-lock.json +2 -2
  49. package/examples/extensions/sandbox/package.json +1 -1
  50. package/examples/extensions/with-deps/package-lock.json +2 -2
  51. package/examples/extensions/with-deps/package.json +1 -1
  52. package/npm-shrinkwrap.json +12 -12
  53. package/package.json +4 -4
@@ -59,6 +59,7 @@ import { EarendilAnnouncementComponent } from "./components/earendil-announcemen
59
59
  import { ExtensionEditorComponent } from "./components/extension-editor.js";
60
60
  import { ExtensionInputComponent } from "./components/extension-input.js";
61
61
  import { ExtensionSelectorComponent } from "./components/extension-selector.js";
62
+ import { FitnessRoleSelectorComponent } from "./components/fitness-role-selector.js";
62
63
  import { FooterComponent } from "./components/footer.js";
63
64
  import { formatKeyText, keyDisplayText, keyHint, keyText, rawKeyHint } from "./components/keybinding-hints.js";
64
65
  import { LoginDialogComponent } from "./components/login-dialog.js";
@@ -2464,6 +2465,24 @@ export class InteractiveMode {
2464
2465
  this.editor.setText("");
2465
2466
  return;
2466
2467
  }
2468
+ if (text === "/fitness" || text.startsWith("/fitness ")) {
2469
+ const fitnessArgs = text.slice("/fitness".length).trim();
2470
+ this.editor.setText("");
2471
+ if (fitnessArgs.length === 0) {
2472
+ // No args: open the model picker, probe the selection, then offer role assignment.
2473
+ this.showFitnessModelSelector();
2474
+ }
2475
+ else {
2476
+ // Explicit ref: same handler as /autonomy fitness.
2477
+ this.handleAutonomyCommand(`/autonomy fitness ${fitnessArgs}`);
2478
+ }
2479
+ return;
2480
+ }
2481
+ if (text === "/context") {
2482
+ this.showStatus(this.session.formatContextCompositionDashboard());
2483
+ this.editor.setText("");
2484
+ return;
2485
+ }
2467
2486
  if (text === "/scoped-models") {
2468
2487
  this.editor.setText("");
2469
2488
  await this.showModelsSelector();
@@ -5110,6 +5129,72 @@ export class InteractiveMode {
5110
5129
  this.settingsManager.setAutoLearnSettings(preset, scope);
5111
5130
  this.updateAutoLearnFooter();
5112
5131
  }
5132
+ /** /fitness with no args: pick a model from the configured registry, probe it, assign a role. */
5133
+ showFitnessModelSelector() {
5134
+ this.showSelector((done) => {
5135
+ const selector = new ModelSelectorComponent(this.ui, this.session.model, this.settingsManager, this.session.modelRegistry, this.session.scopedModels, async (model) => {
5136
+ done();
5137
+ await this.runFitnessAndAssign(`${model.provider}/${model.id}`);
5138
+ }, () => {
5139
+ done();
5140
+ this.ui.requestRender();
5141
+ });
5142
+ return { component: selector, focus: selector };
5143
+ });
5144
+ }
5145
+ /** Probe a model's fitness, show the report, then offer one-step role assignment. */
5146
+ async runFitnessAndAssign(modelRef) {
5147
+ this.showStatus(`Model fitness probe running on ${modelRef}… (6 surfaces; local models may take a few minutes)`);
5148
+ try {
5149
+ const outcome = await this.session.runModelFitness({ model: modelRef });
5150
+ if (!outcome.started) {
5151
+ this.showStatus(`Model fitness skipped: ${outcome.skipReason}`);
5152
+ return;
5153
+ }
5154
+ this.chatContainer.addChild(new Spacer(1));
5155
+ this.chatContainer.addChild(new Text(formatModelFitnessReport(outcome.model, outcome.report), 1, 0));
5156
+ this.ui.requestRender();
5157
+ this.showSelector((done) => {
5158
+ const selector = new FitnessRoleSelectorComponent(outcome.model, (role) => {
5159
+ done();
5160
+ this.assignFitnessRole(outcome.model, role);
5161
+ }, () => {
5162
+ done();
5163
+ this.ui.requestRender();
5164
+ });
5165
+ return { component: selector, focus: selector };
5166
+ });
5167
+ }
5168
+ catch (error) {
5169
+ this.showError(error instanceof Error ? error.message : String(error));
5170
+ }
5171
+ }
5172
+ /** Persist a role assignment from the post-probe selector into the matching settings. */
5173
+ assignFitnessRole(modelRef, role) {
5174
+ if (role === "none") {
5175
+ this.showStatus(`Fitness result for ${modelRef} saved. Assign a role later from /settings.`);
5176
+ return;
5177
+ }
5178
+ if (role === "curator") {
5179
+ const current = this.settingsManager.getContextCurationSettings();
5180
+ this.settingsManager.setContextCurationSettings({ ...current, enabled: true, model: modelRef });
5181
+ this.showStatus(`Context curation enabled with ${modelRef} as the curator.`);
5182
+ return;
5183
+ }
5184
+ const router = this.settingsManager.getModelRouterSettings();
5185
+ const field = role === "router-cheap"
5186
+ ? "cheapModel"
5187
+ : role === "router-medium"
5188
+ ? "mediumModel"
5189
+ : role === "router-expensive"
5190
+ ? "expensiveModel"
5191
+ : role === "judge"
5192
+ ? "judgeModel"
5193
+ : "learningModel";
5194
+ this.settingsManager.setModelRouterSettings({ ...router, [field]: modelRef });
5195
+ const hint = router.enabled ? "" : " Model router is currently disabled — enable it in /settings → Model Router.";
5196
+ this.showStatus(`${modelRef} set as ${role.replace("router-", "router ")} model.${hint}`);
5197
+ }
5113
5198
  handleAutonomyCommand(text) {
5114
5199
  const action = text.slice("/autonomy".length).trim() || "status";
5115
5200
  if (AUTONOMY_MODES.includes(action)) {
@@ -5264,6 +5349,8 @@ export class InteractiveMode {
5264
5349
  researchLaneScope: projectSettings.researchLane ? "project" : "global",
5265
5350
  workerDelegation: this.settingsManager.getWorkerDelegationSettings(),
5266
5351
  workerDelegationScope: projectSettings.workerDelegation ? "project" : "global",
5352
+ contextCuration: this.settingsManager.getContextCurationSettings(),
5353
+ contextCurationScope: projectSettings.contextPolicy?.curation ? "project" : "global",
5267
5354
  modelRouter: this.settingsManager.getModelRouterSettings(),
5268
5355
  modelRouterScope: projectSettings.modelRouter ? "project" : "global",
5269
5356
  autoLearn: this.settingsManager.getAutoLearnSettings(),
@@ -5421,6 +5508,10 @@ export class InteractiveMode {
5421
5508
  this.settingsManager.setWorkerDelegationSettings(settings, scope);
5422
5509
  this.showStatus(`Worker delegation settings saved to ${scope}. The delegate tool uses them.`);
5423
5510
  },
5511
+ onContextCurationChange: (settings, scope) => {
5512
+ this.settingsManager.setContextCurationSettings(settings, scope);
5513
+ this.showStatus(`Context curation settings saved to ${scope}. Run /fitness <model> first if the model is unprobed.`);
5514
+ },
5424
5515
  onModelRouterChange: (settings, scope) => {
5425
5516
  this.settingsManager.setModelRouterSettings(settings, scope);
5426
5517
  for (const value of [settings.cheapModel, settings.expensiveModel, settings.learningModel]) {