@caupulican/pi-adaptative 0.81.2 → 0.81.4

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 (115) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/core/agent-session.d.ts +2 -23
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +139 -147
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/background-lane-controller.d.ts +2 -0
  7. package/dist/core/background-lane-controller.d.ts.map +1 -1
  8. package/dist/core/background-lane-controller.js +3 -0
  9. package/dist/core/background-lane-controller.js.map +1 -1
  10. package/dist/core/billing-failover-controller.d.ts +38 -0
  11. package/dist/core/billing-failover-controller.d.ts.map +1 -0
  12. package/dist/core/billing-failover-controller.js +78 -0
  13. package/dist/core/billing-failover-controller.js.map +1 -0
  14. package/dist/core/billing-failover.d.ts +25 -0
  15. package/dist/core/billing-failover.d.ts.map +1 -0
  16. package/dist/core/billing-failover.js +21 -0
  17. package/dist/core/billing-failover.js.map +1 -0
  18. package/dist/core/compaction-support.d.ts +10 -1
  19. package/dist/core/compaction-support.d.ts.map +1 -1
  20. package/dist/core/compaction-support.js +68 -9
  21. package/dist/core/compaction-support.js.map +1 -1
  22. package/dist/core/context-pipeline.d.ts +1 -0
  23. package/dist/core/context-pipeline.d.ts.map +1 -1
  24. package/dist/core/context-pipeline.js +51 -14
  25. package/dist/core/context-pipeline.js.map +1 -1
  26. package/dist/core/export-html/index.d.ts.map +1 -1
  27. package/dist/core/export-html/index.js +9 -9
  28. package/dist/core/export-html/index.js.map +1 -1
  29. package/dist/core/failure-corpus.d.ts +49 -0
  30. package/dist/core/failure-corpus.d.ts.map +1 -0
  31. package/dist/core/failure-corpus.js +61 -0
  32. package/dist/core/failure-corpus.js.map +1 -0
  33. package/dist/core/model-router/config-diagnostics.d.ts +1 -1
  34. package/dist/core/model-router/config-diagnostics.d.ts.map +1 -1
  35. package/dist/core/model-router/config-diagnostics.js +29 -1
  36. package/dist/core/model-router/config-diagnostics.js.map +1 -1
  37. package/dist/core/model-router/fitness-gate.d.ts +25 -0
  38. package/dist/core/model-router/fitness-gate.d.ts.map +1 -0
  39. package/dist/core/model-router/fitness-gate.js +34 -0
  40. package/dist/core/model-router/fitness-gate.js.map +1 -0
  41. package/dist/core/model-router/status.d.ts +29 -1
  42. package/dist/core/model-router/status.d.ts.map +1 -1
  43. package/dist/core/model-router/status.js +31 -4
  44. package/dist/core/model-router/status.js.map +1 -1
  45. package/dist/core/model-router-controller.d.ts +10 -1
  46. package/dist/core/model-router-controller.d.ts.map +1 -1
  47. package/dist/core/model-router-controller.js +110 -27
  48. package/dist/core/model-router-controller.js.map +1 -1
  49. package/dist/core/models/default-model-suggestions.d.ts.map +1 -1
  50. package/dist/core/models/default-model-suggestions.js +18 -0
  51. package/dist/core/models/default-model-suggestions.js.map +1 -1
  52. package/dist/core/runtime-builder.d.ts +16 -0
  53. package/dist/core/runtime-builder.d.ts.map +1 -1
  54. package/dist/core/runtime-builder.js +88 -1
  55. package/dist/core/runtime-builder.js.map +1 -1
  56. package/dist/core/scout-controller.d.ts +44 -0
  57. package/dist/core/scout-controller.d.ts.map +1 -0
  58. package/dist/core/scout-controller.js +165 -0
  59. package/dist/core/scout-controller.js.map +1 -0
  60. package/dist/core/settings-manager.d.ts +17 -0
  61. package/dist/core/settings-manager.d.ts.map +1 -1
  62. package/dist/core/settings-manager.js +47 -3
  63. package/dist/core/settings-manager.js.map +1 -1
  64. package/dist/core/slash-commands.d.ts.map +1 -1
  65. package/dist/core/slash-commands.js +4 -0
  66. package/dist/core/slash-commands.js.map +1 -1
  67. package/dist/core/tools/bash.d.ts.map +1 -1
  68. package/dist/core/tools/bash.js +6 -8
  69. package/dist/core/tools/bash.js.map +1 -1
  70. package/dist/core/tools/context-scout.d.ts +19 -0
  71. package/dist/core/tools/context-scout.d.ts.map +1 -0
  72. package/dist/core/tools/context-scout.js +47 -0
  73. package/dist/core/tools/context-scout.js.map +1 -0
  74. package/dist/core/tools/index.d.ts +1 -0
  75. package/dist/core/tools/index.d.ts.map +1 -1
  76. package/dist/core/tools/index.js +1 -0
  77. package/dist/core/tools/index.js.map +1 -1
  78. package/dist/main.d.ts.map +1 -1
  79. package/dist/main.js +1 -1
  80. package/dist/main.js.map +1 -1
  81. package/dist/modes/interactive/components/fitness-role-selector.d.ts +1 -1
  82. package/dist/modes/interactive/components/fitness-role-selector.d.ts.map +1 -1
  83. package/dist/modes/interactive/components/fitness-role-selector.js +5 -0
  84. package/dist/modes/interactive/components/fitness-role-selector.js.map +1 -1
  85. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  86. package/dist/modes/interactive/components/settings-selector.js +77 -7
  87. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  88. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  89. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  90. package/dist/modes/interactive/interactive-mode.js +13 -0
  91. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  92. package/dist/modes/interactive/local-model-commands.d.ts +5 -2
  93. package/dist/modes/interactive/local-model-commands.d.ts.map +1 -1
  94. package/dist/modes/interactive/local-model-commands.js +129 -1
  95. package/dist/modes/interactive/local-model-commands.js.map +1 -1
  96. package/dist/modes/interactive/session-flow-commands.d.ts +16 -0
  97. package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
  98. package/dist/modes/interactive/session-flow-commands.js +32 -0
  99. package/dist/modes/interactive/session-flow-commands.js.map +1 -1
  100. package/docs/bug-ledger.md +113 -0
  101. package/docs/index.md +1 -0
  102. package/docs/models.md +9 -0
  103. package/docs/providers.md +14 -0
  104. package/docs/scout.md +73 -0
  105. package/docs/settings.md +16 -3
  106. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  107. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  108. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  109. package/examples/extensions/sandbox/package-lock.json +2 -2
  110. package/examples/extensions/sandbox/package.json +1 -1
  111. package/examples/extensions/with-deps/package-lock.json +2 -2
  112. package/examples/extensions/with-deps/package.json +1 -1
  113. package/examples/sdk/12-full-control.ts +1 -1
  114. package/npm-shrinkwrap.json +12 -12
  115. package/package.json +4 -4
@@ -61,6 +61,9 @@ function optionalStringValue(value, fallback = "(not set)") {
61
61
  const trimmed = value?.trim();
62
62
  return trimmed && trimmed.length > 0 ? trimmed : fallback;
63
63
  }
64
+ function routerTierValue(model, thinking, fallback = "(not set)") {
65
+ return `${optionalStringValue(model, fallback)} · thinking ${thinking ?? MODEL_ROUTER_INHERIT_THINKING_LABEL}`;
66
+ }
64
67
  function normalizeOptionalString(value) {
65
68
  const trimmed = value.trim();
66
69
  return trimmed.length > 0 ? trimmed : undefined;
@@ -150,7 +153,8 @@ function contextMemoryRetrievalSummary(settings) {
150
153
  }
151
154
  function modelRouterSummary(settings) {
152
155
  const state = settings.enabled ? "enabled" : "disabled";
153
- return `${state} · cheap: ${optionalStringValue(settings.cheapModel)} · medium: ${optionalStringValue(settings.mediumModel)} · expensive: ${optionalStringValue(settings.expensiveModel)} · learn: ${optionalStringValue(settings.learningModel, "active")}`;
156
+ const gate = settings.fitnessGate ? "gate on" : "gate off";
157
+ return `${state} · ${gate} · cheap: ${optionalStringValue(settings.cheapModel)} · medium: ${optionalStringValue(settings.mediumModel)} · expensive: ${optionalStringValue(settings.expensiveModel)} · learn: ${optionalStringValue(settings.learningModel, "active")}`;
154
158
  }
155
159
  function buildAutoLearnModelOptions(settings, configuredModelOptions, currentModelPattern) {
156
160
  const currentValue = autoLearnModelValue(settings);
@@ -1165,6 +1169,20 @@ class ModelRouterSettingsSubmenu extends Container {
1165
1169
  includeActive: false,
1166
1170
  unsetDescription: "Clear expensive routing model; modify turns fall back to the active session model",
1167
1171
  });
1172
+ const judgeModelOptions = buildModelRouterRoleModelOptions({
1173
+ currentValue: this.state.judgeModel,
1174
+ configuredModelOptions: modelOptions,
1175
+ currentModelPattern,
1176
+ includeActive: false,
1177
+ unsetDescription: "Clear judge model; routing judge falls back to the medium model",
1178
+ });
1179
+ const executorModelOptions = buildModelRouterRoleModelOptions({
1180
+ currentValue: this.state.executorModel,
1181
+ configuredModelOptions: modelOptions,
1182
+ currentModelPattern,
1183
+ includeActive: false,
1184
+ unsetDescription: "Clear executor lane model; direct toolkit execution stays disabled",
1185
+ });
1168
1186
  const learningModelOptions = buildModelRouterRoleModelOptions({
1169
1187
  currentValue: this.state.learningModel,
1170
1188
  configuredModelOptions: modelOptions,
@@ -1194,14 +1212,14 @@ class ModelRouterSettingsSubmenu extends Container {
1194
1212
  id: "model-router-cheap",
1195
1213
  label: "Cheap model",
1196
1214
  description: "Pick the model for read-only, research, explanation, and question turns",
1197
- currentValue: optionalStringValue(this.state.cheapModel),
1215
+ currentValue: routerTierValue(this.state.cheapModel, this.state.cheapThinking),
1198
1216
  submenu: (_currentValue, done) => new ModelSelectionSubmenu(cheapModelOptions, this.state.cheapModel ?? MODEL_ROUTER_UNSET_MODEL_VALUE, (value) => {
1199
1217
  this.state = {
1200
1218
  ...this.state,
1201
1219
  cheapModel: value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value,
1202
1220
  };
1203
1221
  onChange({ ...this.state }, this.scope);
1204
- done(optionalStringValue(this.state.cheapModel));
1222
+ done(routerTierValue(this.state.cheapModel, this.state.cheapThinking));
1205
1223
  }, () => done(), {
1206
1224
  title: "Cheap / Research Model",
1207
1225
  description: "Choose from models available through configured subscription/API accounts. Type to filter; manual is fallback.",
@@ -1215,14 +1233,14 @@ class ModelRouterSettingsSubmenu extends Container {
1215
1233
  id: "model-router-medium",
1216
1234
  label: "Medium model",
1217
1235
  description: "Pick the model for normal scoped implementation, edits, tests, and mechanical refactors",
1218
- currentValue: optionalStringValue(this.state.mediumModel),
1236
+ currentValue: routerTierValue(this.state.mediumModel, this.state.mediumThinking),
1219
1237
  submenu: (_currentValue, done) => new ModelSelectionSubmenu(mediumModelOptions, this.state.mediumModel ?? MODEL_ROUTER_UNSET_MODEL_VALUE, (value) => {
1220
1238
  this.state = {
1221
1239
  ...this.state,
1222
1240
  mediumModel: value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value,
1223
1241
  };
1224
1242
  onChange({ ...this.state }, this.scope);
1225
- done(optionalStringValue(this.state.mediumModel));
1243
+ done(routerTierValue(this.state.mediumModel, this.state.mediumThinking));
1226
1244
  }, () => done(), {
1227
1245
  title: "Medium / Implementation Model",
1228
1246
  description: "Choose from models available through configured subscription/API accounts. Type to filter; manual is fallback.",
@@ -1236,14 +1254,14 @@ class ModelRouterSettingsSubmenu extends Container {
1236
1254
  id: "model-router-expensive",
1237
1255
  label: "Expensive model",
1238
1256
  description: "Pick the model for modify, implementation, and escalated tool-heavy turns",
1239
- currentValue: optionalStringValue(this.state.expensiveModel),
1257
+ currentValue: routerTierValue(this.state.expensiveModel, this.state.expensiveThinking),
1240
1258
  submenu: (_currentValue, done) => new ModelSelectionSubmenu(expensiveModelOptions, this.state.expensiveModel ?? MODEL_ROUTER_UNSET_MODEL_VALUE, (value) => {
1241
1259
  this.state = {
1242
1260
  ...this.state,
1243
1261
  expensiveModel: value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value,
1244
1262
  };
1245
1263
  onChange({ ...this.state }, this.scope);
1246
- done(optionalStringValue(this.state.expensiveModel));
1264
+ done(routerTierValue(this.state.expensiveModel, this.state.expensiveThinking));
1247
1265
  }, () => done(), {
1248
1266
  title: "Expensive / Modify Model",
1249
1267
  description: "Choose from models available through configured subscription/API accounts. Type to filter; manual is fallback.",
@@ -1253,6 +1271,48 @@ class ModelRouterSettingsSubmenu extends Container {
1253
1271
  customEmptyValue: MODEL_ROUTER_UNSET_MODEL_VALUE,
1254
1272
  }),
1255
1273
  },
1274
+ {
1275
+ id: "model-router-judge",
1276
+ label: "Judge model",
1277
+ description: "Pick the routing-judge model; unset falls back to the medium model",
1278
+ currentValue: routerTierValue(this.state.judgeModel, this.state.judgeThinking, "medium fallback"),
1279
+ submenu: (_currentValue, done) => new ModelSelectionSubmenu(judgeModelOptions, this.state.judgeModel ?? MODEL_ROUTER_UNSET_MODEL_VALUE, (value) => {
1280
+ this.state = {
1281
+ ...this.state,
1282
+ judgeModel: value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value,
1283
+ };
1284
+ onChange({ ...this.state }, this.scope);
1285
+ done(routerTierValue(this.state.judgeModel, this.state.judgeThinking, "medium fallback"));
1286
+ }, () => done(), {
1287
+ title: "Routing Judge Model",
1288
+ description: "Choose from configured models. Type to filter; manual is fallback.",
1289
+ customTitle: "Custom Routing Judge Model",
1290
+ customDescription: "Enter a provider/model pattern from pi --list-models.",
1291
+ customEmptyHint: "empty clears the setting",
1292
+ customEmptyValue: MODEL_ROUTER_UNSET_MODEL_VALUE,
1293
+ }),
1294
+ },
1295
+ {
1296
+ id: "model-router-executor",
1297
+ label: "Executor model",
1298
+ description: "Pick the local executor lane model; unset disables direct toolkit execution",
1299
+ currentValue: routerTierValue(this.state.executorModel, this.state.executorThinking),
1300
+ submenu: (_currentValue, done) => new ModelSelectionSubmenu(executorModelOptions, this.state.executorModel ?? MODEL_ROUTER_UNSET_MODEL_VALUE, (value) => {
1301
+ this.state = {
1302
+ ...this.state,
1303
+ executorModel: value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value,
1304
+ };
1305
+ onChange({ ...this.state }, this.scope);
1306
+ done(routerTierValue(this.state.executorModel, this.state.executorThinking));
1307
+ }, () => done(), {
1308
+ title: "Executor Lane Model",
1309
+ description: "Choose from configured models. Type to filter; manual is fallback.",
1310
+ customTitle: "Custom Executor Lane Model",
1311
+ customDescription: "Enter a provider/model pattern from pi --list-models.",
1312
+ customEmptyHint: "empty clears the setting",
1313
+ customEmptyValue: MODEL_ROUTER_UNSET_MODEL_VALUE,
1314
+ }),
1315
+ },
1256
1316
  {
1257
1317
  id: "model-router-learning",
1258
1318
  label: "Learning/reflection model",
@@ -1341,6 +1401,13 @@ class ModelRouterSettingsSubmenu extends Container {
1341
1401
  done(this.state.judgeThinking ?? MODEL_ROUTER_INHERIT_THINKING_LABEL);
1342
1402
  }, () => done()),
1343
1403
  },
1404
+ {
1405
+ id: "model-router-fitness-gate",
1406
+ label: "Fitness gate",
1407
+ description: "Opt-in subtractive gate: blocks tier models only when their probed router lane failed",
1408
+ currentValue: booleanSettingValue(this.state.fitnessGate),
1409
+ values: ["false", "true"],
1410
+ },
1344
1411
  ];
1345
1412
  this.settingsList = new SettingsList(items, Math.min(items.length, 10), getSettingsListTheme(), (id, newValue) => {
1346
1413
  switch (id) {
@@ -1350,6 +1417,9 @@ class ModelRouterSettingsSubmenu extends Container {
1350
1417
  case "model-router-enabled":
1351
1418
  this.state = { ...this.state, enabled: newValue === "true" };
1352
1419
  break;
1420
+ case "model-router-fitness-gate":
1421
+ this.state = { ...this.state, fitnessGate: newValue === "true" };
1422
+ break;
1353
1423
  default:
1354
1424
  return;
1355
1425
  }