@caupulican/pi-adaptative 0.81.26 → 0.81.27

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 (229) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/cli/args.d.ts.map +1 -1
  3. package/dist/cli/args.js +3 -2
  4. package/dist/cli/args.js.map +1 -1
  5. package/dist/core/agent-session-services.d.ts +4 -0
  6. package/dist/core/agent-session-services.d.ts.map +1 -1
  7. package/dist/core/agent-session-services.js +19 -2
  8. package/dist/core/agent-session-services.js.map +1 -1
  9. package/dist/core/agent-session.d.ts +21 -10
  10. package/dist/core/agent-session.d.ts.map +1 -1
  11. package/dist/core/agent-session.js +71 -33
  12. package/dist/core/agent-session.js.map +1 -1
  13. package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
  14. package/dist/core/autonomy/bounded-completion.js +59 -19
  15. package/dist/core/autonomy/bounded-completion.js.map +1 -1
  16. package/dist/core/autonomy/lane-tool-surface.d.ts +31 -0
  17. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -0
  18. package/dist/core/autonomy/lane-tool-surface.js +96 -0
  19. package/dist/core/autonomy/lane-tool-surface.js.map +1 -0
  20. package/dist/core/background-lane-controller.d.ts +6 -3
  21. package/dist/core/background-lane-controller.d.ts.map +1 -1
  22. package/dist/core/background-lane-controller.js +134 -25
  23. package/dist/core/background-lane-controller.js.map +1 -1
  24. package/dist/core/billing-failover-controller.d.ts.map +1 -1
  25. package/dist/core/billing-failover-controller.js +1 -1
  26. package/dist/core/billing-failover-controller.js.map +1 -1
  27. package/dist/core/context/current-work-memory.d.ts +9 -0
  28. package/dist/core/context/current-work-memory.d.ts.map +1 -0
  29. package/dist/core/context/current-work-memory.js +61 -0
  30. package/dist/core/context/current-work-memory.js.map +1 -0
  31. package/dist/core/context/file-store-memory-provider.d.ts +9 -0
  32. package/dist/core/context/file-store-memory-provider.d.ts.map +1 -0
  33. package/dist/core/context/file-store-memory-provider.js +106 -0
  34. package/dist/core/context/file-store-memory-provider.js.map +1 -0
  35. package/dist/core/context/long-term-memory-trigger.d.ts +15 -0
  36. package/dist/core/context/long-term-memory-trigger.d.ts.map +1 -0
  37. package/dist/core/context/long-term-memory-trigger.js +39 -0
  38. package/dist/core/context/long-term-memory-trigger.js.map +1 -0
  39. package/dist/core/context/memory-prompt-block.d.ts +3 -1
  40. package/dist/core/context/memory-prompt-block.d.ts.map +1 -1
  41. package/dist/core/context/memory-prompt-block.js +20 -3
  42. package/dist/core/context/memory-prompt-block.js.map +1 -1
  43. package/dist/core/context/memory-prompt-budget.d.ts +17 -0
  44. package/dist/core/context/memory-prompt-budget.d.ts.map +1 -0
  45. package/dist/core/context/memory-prompt-budget.js +64 -0
  46. package/dist/core/context/memory-prompt-budget.js.map +1 -0
  47. package/dist/core/context/memory-provider-contract.d.ts.map +1 -1
  48. package/dist/core/context/memory-provider-contract.js +2 -5
  49. package/dist/core/context/memory-provider-contract.js.map +1 -1
  50. package/dist/core/context/memory-tier-composer.d.ts +27 -0
  51. package/dist/core/context/memory-tier-composer.d.ts.map +1 -0
  52. package/dist/core/context/memory-tier-composer.js +79 -0
  53. package/dist/core/context/memory-tier-composer.js.map +1 -0
  54. package/dist/core/context-gc.d.ts.map +1 -1
  55. package/dist/core/context-gc.js +1 -0
  56. package/dist/core/context-gc.js.map +1 -1
  57. package/dist/core/cost/cost-summary.d.ts +3 -1
  58. package/dist/core/cost/cost-summary.d.ts.map +1 -1
  59. package/dist/core/cost/cost-summary.js +3 -3
  60. package/dist/core/cost/cost-summary.js.map +1 -1
  61. package/dist/core/cost-guard.d.ts +17 -7
  62. package/dist/core/cost-guard.d.ts.map +1 -1
  63. package/dist/core/cost-guard.js +33 -10
  64. package/dist/core/cost-guard.js.map +1 -1
  65. package/dist/core/default-tool-surface.d.ts +9 -0
  66. package/dist/core/default-tool-surface.d.ts.map +1 -0
  67. package/dist/core/default-tool-surface.js +18 -0
  68. package/dist/core/default-tool-surface.js.map +1 -0
  69. package/dist/core/delegation/worker-runner.d.ts +11 -5
  70. package/dist/core/delegation/worker-runner.d.ts.map +1 -1
  71. package/dist/core/delegation/worker-runner.js +24 -12
  72. package/dist/core/delegation/worker-runner.js.map +1 -1
  73. package/dist/core/extensions/loader.d.ts.map +1 -1
  74. package/dist/core/extensions/loader.js +15 -0
  75. package/dist/core/extensions/loader.js.map +1 -1
  76. package/dist/core/extensions/runner.d.ts +2 -0
  77. package/dist/core/extensions/runner.d.ts.map +1 -1
  78. package/dist/core/extensions/runner.js +7 -0
  79. package/dist/core/extensions/runner.js.map +1 -1
  80. package/dist/core/extensions/types.d.ts +9 -0
  81. package/dist/core/extensions/types.d.ts.map +1 -1
  82. package/dist/core/extensions/types.js.map +1 -1
  83. package/dist/core/failure-corpus.d.ts.map +1 -1
  84. package/dist/core/failure-corpus.js +2 -4
  85. package/dist/core/failure-corpus.js.map +1 -1
  86. package/dist/core/footer-data-provider.d.ts.map +1 -1
  87. package/dist/core/footer-data-provider.js +9 -1
  88. package/dist/core/footer-data-provider.js.map +1 -1
  89. package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -1
  90. package/dist/core/goals/goal-continuation-prompt.js +4 -3
  91. package/dist/core/goals/goal-continuation-prompt.js.map +1 -1
  92. package/dist/core/http-dispatcher.d.ts +12 -0
  93. package/dist/core/http-dispatcher.d.ts.map +1 -1
  94. package/dist/core/http-dispatcher.js +42 -4
  95. package/dist/core/http-dispatcher.js.map +1 -1
  96. package/dist/core/memory/memory-manager.d.ts +8 -3
  97. package/dist/core/memory/memory-manager.d.ts.map +1 -1
  98. package/dist/core/memory/memory-manager.js +27 -11
  99. package/dist/core/memory/memory-manager.js.map +1 -1
  100. package/dist/core/memory/memory-provider.d.ts +5 -1
  101. package/dist/core/memory/memory-provider.d.ts.map +1 -1
  102. package/dist/core/memory/memory-provider.js.map +1 -1
  103. package/dist/core/memory/providers/file-store.d.ts +3 -1
  104. package/dist/core/memory/providers/file-store.d.ts.map +1 -1
  105. package/dist/core/memory/providers/file-store.js +7 -2
  106. package/dist/core/memory/providers/file-store.js.map +1 -1
  107. package/dist/core/memory/providers/transcript-recall.d.ts +1 -0
  108. package/dist/core/memory/providers/transcript-recall.d.ts.map +1 -1
  109. package/dist/core/memory/providers/transcript-recall.js +4 -7
  110. package/dist/core/memory/providers/transcript-recall.js.map +1 -1
  111. package/dist/core/memory-controller.d.ts +36 -10
  112. package/dist/core/memory-controller.d.ts.map +1 -1
  113. package/dist/core/memory-controller.js +137 -21
  114. package/dist/core/memory-controller.js.map +1 -1
  115. package/dist/core/model-registry.d.ts +23 -0
  116. package/dist/core/model-registry.d.ts.map +1 -1
  117. package/dist/core/model-registry.js +87 -8
  118. package/dist/core/model-registry.js.map +1 -1
  119. package/dist/core/model-resolver.d.ts.map +1 -1
  120. package/dist/core/model-resolver.js +30 -11
  121. package/dist/core/model-resolver.js.map +1 -1
  122. package/dist/core/model-router-controller.d.ts.map +1 -1
  123. package/dist/core/model-router-controller.js +33 -29
  124. package/dist/core/model-router-controller.js.map +1 -1
  125. package/dist/core/model-selection-controller.d.ts +3 -0
  126. package/dist/core/model-selection-controller.d.ts.map +1 -1
  127. package/dist/core/model-selection-controller.js +8 -1
  128. package/dist/core/model-selection-controller.js.map +1 -1
  129. package/dist/core/models/perf-profile.d.ts.map +1 -1
  130. package/dist/core/models/perf-profile.js +95 -33
  131. package/dist/core/models/perf-profile.js.map +1 -1
  132. package/dist/core/profile-filter-controller.d.ts +11 -0
  133. package/dist/core/profile-filter-controller.d.ts.map +1 -1
  134. package/dist/core/profile-filter-controller.js +56 -11
  135. package/dist/core/profile-filter-controller.js.map +1 -1
  136. package/dist/core/profile-registry.d.ts +2 -2
  137. package/dist/core/profile-registry.d.ts.map +1 -1
  138. package/dist/core/profile-registry.js +58 -7
  139. package/dist/core/profile-registry.js.map +1 -1
  140. package/dist/core/reflection-controller.d.ts +7 -7
  141. package/dist/core/reflection-controller.d.ts.map +1 -1
  142. package/dist/core/reflection-controller.js +78 -12
  143. package/dist/core/reflection-controller.js.map +1 -1
  144. package/dist/core/research/research-runner.d.ts +2 -2
  145. package/dist/core/research/research-runner.d.ts.map +1 -1
  146. package/dist/core/research/research-runner.js +8 -6
  147. package/dist/core/research/research-runner.js.map +1 -1
  148. package/dist/core/resource-loader.d.ts +4 -2
  149. package/dist/core/resource-loader.d.ts.map +1 -1
  150. package/dist/core/resource-loader.js +11 -1
  151. package/dist/core/resource-loader.js.map +1 -1
  152. package/dist/core/runtime-builder.d.ts +13 -1
  153. package/dist/core/runtime-builder.d.ts.map +1 -1
  154. package/dist/core/runtime-builder.js +127 -35
  155. package/dist/core/runtime-builder.js.map +1 -1
  156. package/dist/core/sdk.d.ts +8 -7
  157. package/dist/core/sdk.d.ts.map +1 -1
  158. package/dist/core/sdk.js +35 -5
  159. package/dist/core/sdk.js.map +1 -1
  160. package/dist/core/security/secret-text.d.ts +3 -0
  161. package/dist/core/security/secret-text.d.ts.map +1 -0
  162. package/dist/core/security/secret-text.js +26 -0
  163. package/dist/core/security/secret-text.js.map +1 -0
  164. package/dist/core/settings-manager.d.ts +59 -17
  165. package/dist/core/settings-manager.d.ts.map +1 -1
  166. package/dist/core/settings-manager.js +300 -51
  167. package/dist/core/settings-manager.js.map +1 -1
  168. package/dist/core/skills.d.ts.map +1 -1
  169. package/dist/core/skills.js +1 -1
  170. package/dist/core/skills.js.map +1 -1
  171. package/dist/core/system-prompt-builder.d.ts +7 -0
  172. package/dist/core/system-prompt-builder.d.ts.map +1 -1
  173. package/dist/core/system-prompt-builder.js +23 -1
  174. package/dist/core/system-prompt-builder.js.map +1 -1
  175. package/dist/core/tools/delegate.d.ts.map +1 -1
  176. package/dist/core/tools/delegate.js +15 -11
  177. package/dist/core/tools/delegate.js.map +1 -1
  178. package/dist/main.d.ts.map +1 -1
  179. package/dist/main.js +2 -0
  180. package/dist/main.js.map +1 -1
  181. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  182. package/dist/modes/interactive/components/footer.js +8 -1
  183. package/dist/modes/interactive/components/footer.js.map +1 -1
  184. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  185. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  186. package/dist/modes/interactive/components/settings-selector.js +69 -29
  187. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  188. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  189. package/dist/modes/interactive/components/thinking-selector.js +2 -0
  190. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  191. package/dist/modes/interactive/config-backup.d.ts +7 -1
  192. package/dist/modes/interactive/config-backup.d.ts.map +1 -1
  193. package/dist/modes/interactive/config-backup.js +196 -32
  194. package/dist/modes/interactive/config-backup.js.map +1 -1
  195. package/dist/modes/interactive/interactive-mode.d.ts +1 -1
  196. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  197. package/dist/modes/interactive/interactive-mode.js +10 -28
  198. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  199. package/dist/modes/interactive/local-model-commands.d.ts.map +1 -1
  200. package/dist/modes/interactive/local-model-commands.js +2 -0
  201. package/dist/modes/interactive/local-model-commands.js.map +1 -1
  202. package/dist/modes/interactive/profile-menu-controller.d.ts +6 -4
  203. package/dist/modes/interactive/profile-menu-controller.d.ts.map +1 -1
  204. package/dist/modes/interactive/profile-menu-controller.js +248 -65
  205. package/dist/modes/interactive/profile-menu-controller.js.map +1 -1
  206. package/dist/modes/interactive/report-commands.d.ts.map +1 -1
  207. package/dist/modes/interactive/report-commands.js +8 -2
  208. package/dist/modes/interactive/report-commands.js.map +1 -1
  209. package/dist/modes/interactive/settings-selector-flow.d.ts.map +1 -1
  210. package/dist/modes/interactive/settings-selector-flow.js +8 -0
  211. package/dist/modes/interactive/settings-selector-flow.js.map +1 -1
  212. package/dist/modes/interactive/theme/theme-schema.json +1 -1
  213. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  214. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  215. package/dist/modes/interactive/theme/theme.js +3 -1
  216. package/dist/modes/interactive/theme/theme.js.map +1 -1
  217. package/docs/extensions.md +32 -0
  218. package/docs/resources.md +15 -7
  219. package/docs/settings.md +54 -5
  220. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  221. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  222. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  223. package/examples/extensions/preset.ts +2 -2
  224. package/examples/extensions/sandbox/package-lock.json +2 -2
  225. package/examples/extensions/sandbox/package.json +1 -1
  226. package/examples/extensions/with-deps/package-lock.json +2 -2
  227. package/examples/extensions/with-deps/package.json +1 -1
  228. package/npm-shrinkwrap.json +44 -35
  229. package/package.json +4 -4
@@ -19,6 +19,8 @@ const THINKING_DESCRIPTIONS = {
19
19
  medium: "Moderate reasoning (~8k tokens)",
20
20
  high: "Deep reasoning (~16k tokens)",
21
21
  xhigh: "Maximum reasoning (~32k tokens)",
22
+ max: "Maximum reasoning depth for the hardest problems",
23
+ ultra: "Maximum reasoning with reinforced proactive delegation",
22
24
  };
23
25
  const AUTONOMY_MODES = ["off", "safe", "balanced", "full"];
24
26
  const AUTONOMY_GOAL_CONTINUE_TURN_VALUES = ["1", "3", "5", "10", "20"];
@@ -38,9 +40,10 @@ const CONTEXT_POLICY_ENFORCEMENT_DEFAULTS = {
38
40
  };
39
41
  const CONTEXT_MEMORY_RETRIEVAL_MAX_RESULTS_VALUES = ["1", "3", "5", "10", "20"];
40
42
  const CONTEXT_MEMORY_RETRIEVAL_DEFAULTS = {
41
- enabled: false,
43
+ enabled: true,
42
44
  maxResults: 5,
43
- includeInPrompt: false,
45
+ includeInPrompt: true,
46
+ allowExternalEgress: false,
44
47
  };
45
48
  const AUTO_LEARN_DEFAULTS = {
46
49
  model: "active",
@@ -145,11 +148,13 @@ function contextPolicyEnforcementSummary(settings) {
145
148
  return `enabled (preserve ${preserve}, min ${minChars} chars)`;
146
149
  }
147
150
  function contextMemoryRetrievalSummary(settings) {
148
- if (!(settings.enabled ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.enabled))
149
- return "disabled";
151
+ const externalEgress = settings.allowExternalEgress ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.allowExternalEgress;
152
+ if (!(settings.enabled ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.enabled)) {
153
+ return `disabled (${externalEgress ? "external consent on" : "external off"})`;
154
+ }
150
155
  const maxResults = settings.maxResults ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.maxResults;
151
156
  const includeInPrompt = settings.includeInPrompt ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.includeInPrompt;
152
- return `enabled (max ${maxResults} results${includeInPrompt ? ", in prompt" : ""})`;
157
+ return `enabled (max ${maxResults}${includeInPrompt ? ", in prompt" : ""}, ${externalEgress ? "external on" : "local only"})`;
153
158
  }
154
159
  function modelRouterSummary(settings) {
155
160
  const state = settings.enabled ? "enabled" : "disabled";
@@ -232,14 +237,14 @@ function buildModelRouterRoleModelOptions(options) {
232
237
  });
233
238
  return modelOptions;
234
239
  }
235
- function buildModelRouterThinkingOptions(inheritDescription) {
240
+ function buildModelRouterThinkingOptions(inheritDescription, availableLevels = Object.keys(THINKING_DESCRIPTIONS)) {
236
241
  return [
237
242
  {
238
243
  value: MODEL_ROUTER_INHERIT_THINKING_VALUE,
239
244
  label: MODEL_ROUTER_INHERIT_THINKING_LABEL,
240
245
  description: inheritDescription,
241
246
  },
242
- ...Object.keys(THINKING_DESCRIPTIONS).map((level) => ({
247
+ ...availableLevels.map((level) => ({
243
248
  value: level,
244
249
  label: level,
245
250
  description: THINKING_DESCRIPTIONS[level],
@@ -798,7 +803,7 @@ class WorkerDelegationSettingsSubmenu extends Container {
798
803
  {
799
804
  id: "worker-delegation-enabled",
800
805
  label: "Enabled",
801
- description: "Allow the delegate tool to run bounded, read-only scout workers on a cheap model lane",
806
+ description: "Allow capable models to run bounded scout workers; enabled by default, and explicit false is a hard off-switch",
802
807
  currentValue: String(this.state.enabled),
803
808
  values: ["true", "false"],
804
809
  },
@@ -1079,7 +1084,12 @@ class ContextMemoryRetrievalSettingsSubmenu extends Container {
1079
1084
  scope;
1080
1085
  constructor(settings, onChange, onCancel, scope = "global") {
1081
1086
  super();
1082
- this.state = { ...settings };
1087
+ this.state = {
1088
+ enabled: settings.enabled ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.enabled,
1089
+ maxResults: settings.maxResults ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.maxResults,
1090
+ includeInPrompt: settings.includeInPrompt ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.includeInPrompt,
1091
+ allowExternalEgress: settings.allowExternalEgress ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.allowExternalEgress,
1092
+ };
1083
1093
  this.scope = scope;
1084
1094
  const items = [
1085
1095
  {
@@ -1092,7 +1102,7 @@ class ContextMemoryRetrievalSettingsSubmenu extends Container {
1092
1102
  {
1093
1103
  id: "context-memory-enabled",
1094
1104
  label: "Local memory retrieval",
1095
- description: "Opt-in: each turn, search local Pi OKF memory documents (under <agent dir>/okf-memory) for evidence related to the latest message. By default this is observe-only (recorded for inspection only). Enable 'Include in prompt' below to also surface a bounded, source-labeled evidence block to the model. Local-only; never queries an external provider.",
1105
+ description: "Default on: search local Pi memory for relevant evidence. Explicit false is a hard off-switch for both legacy recall and context retrieval. External providers remain blocked by the separate consent below.",
1096
1106
  currentValue: booleanSettingValue(this.state.enabled, CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.enabled),
1097
1107
  values: ["false", "true"],
1098
1108
  },
@@ -1106,10 +1116,17 @@ class ContextMemoryRetrievalSettingsSubmenu extends Container {
1106
1116
  {
1107
1117
  id: "context-memory-include-in-prompt",
1108
1118
  label: "Include in prompt",
1109
- description: "Opt-in, requires 'Local memory retrieval' enabled above: surfaces retrieved memory as a bounded, source-labeled, untrusted-evidence block in the model prompt only -- never the transcript, never treated as an instruction or rule. Default off.",
1119
+ description: "Default on and budget-gated: surface retrieved memory as bounded, source-labeled untrusted evidence in the model prompt only -- never the transcript or an instruction.",
1110
1120
  currentValue: booleanSettingValue(this.state.includeInPrompt, CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.includeInPrompt),
1111
1121
  values: ["false", "true"],
1112
1122
  },
1123
+ {
1124
+ id: "context-memory-allow-external-egress",
1125
+ label: "Allow external queries",
1126
+ description: "Explicit consent to send bounded query text to eligible external memory providers. Default off; secret-like and oversized queries still fail closed, and returned recall is centrally fenced as untrusted data.",
1127
+ currentValue: booleanSettingValue(this.state.allowExternalEgress, CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.allowExternalEgress),
1128
+ values: ["false", "true"],
1129
+ },
1113
1130
  ];
1114
1131
  this.settingsList = new SettingsList(items, Math.min(items.length, 10), getSettingsListTheme(), (id, newValue) => {
1115
1132
  switch (id) {
@@ -1125,6 +1142,9 @@ class ContextMemoryRetrievalSettingsSubmenu extends Container {
1125
1142
  case "context-memory-include-in-prompt":
1126
1143
  this.state = { ...this.state, includeInPrompt: newValue === "true" };
1127
1144
  break;
1145
+ case "context-memory-allow-external-egress":
1146
+ this.state = { ...this.state, allowExternalEgress: newValue === "true" };
1147
+ break;
1128
1148
  default:
1129
1149
  return;
1130
1150
  }
@@ -1140,13 +1160,23 @@ class ModelRouterSettingsSubmenu extends Container {
1140
1160
  settingsList;
1141
1161
  state;
1142
1162
  scope;
1143
- constructor(settings, currentModelPattern, modelOptions, onChange, onCancel, scope = "global") {
1163
+ constructor(settings, currentModelPattern, modelOptions, resolveModelThinkingLevels, onChange, onCancel, scope = "global") {
1144
1164
  super();
1145
1165
  this.state = {
1146
1166
  ...settings,
1147
1167
  enabled: settings.enabled ?? false,
1148
1168
  learningModel: settings.learningModel ?? "active",
1149
1169
  };
1170
+ const levelsForModel = (modelPattern) => resolveModelThinkingLevels?.(modelPattern ?? currentModelPattern);
1171
+ const keepSupportedThinking = (level, modelPattern) => {
1172
+ const levels = levelsForModel(modelPattern);
1173
+ return level && levels && !levels.includes(level) ? undefined : level;
1174
+ };
1175
+ this.state.cheapThinking = keepSupportedThinking(this.state.cheapThinking, this.state.cheapModel);
1176
+ this.state.mediumThinking = keepSupportedThinking(this.state.mediumThinking, this.state.mediumModel);
1177
+ this.state.expensiveThinking = keepSupportedThinking(this.state.expensiveThinking, this.state.expensiveModel);
1178
+ this.state.executorThinking = keepSupportedThinking(this.state.executorThinking, this.state.executorModel);
1179
+ this.state.judgeThinking = keepSupportedThinking(this.state.judgeThinking, this.state.judgeModel);
1150
1180
  this.scope = scope;
1151
1181
  const cheapModelOptions = buildModelRouterRoleModelOptions({
1152
1182
  currentValue: this.state.cheapModel,
@@ -1189,8 +1219,8 @@ class ModelRouterSettingsSubmenu extends Container {
1189
1219
  currentModelPattern,
1190
1220
  includeActive: true,
1191
1221
  });
1192
- const routedTierThinkingOptions = buildModelRouterThinkingOptions("Inherit the session thinking level for this turn, clamped to the routed model");
1193
- const judgeThinkingOptions = buildModelRouterThinkingOptions("Use today's default of off for the routing judge's own completion");
1222
+ const routedTierThinkingOptions = (modelPattern) => buildModelRouterThinkingOptions("Inherit the session thinking level for this turn, clamped to the routed model", levelsForModel(modelPattern));
1223
+ const judgeThinkingOptions = () => buildModelRouterThinkingOptions("Use today's default of off for the routing judge's own completion", levelsForModel(this.state.judgeModel));
1194
1224
  this.addChild(new Text(theme.bold(theme.fg("accent", "Model Router")), 0, 0));
1195
1225
  this.addChild(new Spacer(1));
1196
1226
  const items = [
@@ -1214,9 +1244,11 @@ class ModelRouterSettingsSubmenu extends Container {
1214
1244
  description: "Pick the model for read-only, research, explanation, and question turns",
1215
1245
  currentValue: routerTierValue(this.state.cheapModel, this.state.cheapThinking),
1216
1246
  submenu: (_currentValue, done) => new ModelSelectionSubmenu(cheapModelOptions, this.state.cheapModel ?? MODEL_ROUTER_UNSET_MODEL_VALUE, (value) => {
1247
+ const cheapModel = value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value;
1217
1248
  this.state = {
1218
1249
  ...this.state,
1219
- cheapModel: value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value,
1250
+ cheapModel,
1251
+ cheapThinking: keepSupportedThinking(this.state.cheapThinking, cheapModel),
1220
1252
  };
1221
1253
  onChange({ ...this.state }, this.scope);
1222
1254
  done(routerTierValue(this.state.cheapModel, this.state.cheapThinking));
@@ -1235,9 +1267,11 @@ class ModelRouterSettingsSubmenu extends Container {
1235
1267
  description: "Pick the model for normal scoped implementation, edits, tests, and mechanical refactors",
1236
1268
  currentValue: routerTierValue(this.state.mediumModel, this.state.mediumThinking),
1237
1269
  submenu: (_currentValue, done) => new ModelSelectionSubmenu(mediumModelOptions, this.state.mediumModel ?? MODEL_ROUTER_UNSET_MODEL_VALUE, (value) => {
1270
+ const mediumModel = value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value;
1238
1271
  this.state = {
1239
1272
  ...this.state,
1240
- mediumModel: value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value,
1273
+ mediumModel,
1274
+ mediumThinking: keepSupportedThinking(this.state.mediumThinking, mediumModel),
1241
1275
  };
1242
1276
  onChange({ ...this.state }, this.scope);
1243
1277
  done(routerTierValue(this.state.mediumModel, this.state.mediumThinking));
@@ -1256,9 +1290,11 @@ class ModelRouterSettingsSubmenu extends Container {
1256
1290
  description: "Pick the model for modify, implementation, and escalated tool-heavy turns",
1257
1291
  currentValue: routerTierValue(this.state.expensiveModel, this.state.expensiveThinking),
1258
1292
  submenu: (_currentValue, done) => new ModelSelectionSubmenu(expensiveModelOptions, this.state.expensiveModel ?? MODEL_ROUTER_UNSET_MODEL_VALUE, (value) => {
1293
+ const expensiveModel = value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value;
1259
1294
  this.state = {
1260
1295
  ...this.state,
1261
- expensiveModel: value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value,
1296
+ expensiveModel,
1297
+ expensiveThinking: keepSupportedThinking(this.state.expensiveThinking, expensiveModel),
1262
1298
  };
1263
1299
  onChange({ ...this.state }, this.scope);
1264
1300
  done(routerTierValue(this.state.expensiveModel, this.state.expensiveThinking));
@@ -1277,9 +1313,11 @@ class ModelRouterSettingsSubmenu extends Container {
1277
1313
  description: "Pick the routing-judge model; unset falls back to the medium model",
1278
1314
  currentValue: routerTierValue(this.state.judgeModel, this.state.judgeThinking, "medium fallback"),
1279
1315
  submenu: (_currentValue, done) => new ModelSelectionSubmenu(judgeModelOptions, this.state.judgeModel ?? MODEL_ROUTER_UNSET_MODEL_VALUE, (value) => {
1316
+ const judgeModel = value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value;
1280
1317
  this.state = {
1281
1318
  ...this.state,
1282
- judgeModel: value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value,
1319
+ judgeModel,
1320
+ judgeThinking: keepSupportedThinking(this.state.judgeThinking, judgeModel),
1283
1321
  };
1284
1322
  onChange({ ...this.state }, this.scope);
1285
1323
  done(routerTierValue(this.state.judgeModel, this.state.judgeThinking, "medium fallback"));
@@ -1298,9 +1336,11 @@ class ModelRouterSettingsSubmenu extends Container {
1298
1336
  description: "Pick the local executor lane model; unset disables direct toolkit execution",
1299
1337
  currentValue: routerTierValue(this.state.executorModel, this.state.executorThinking),
1300
1338
  submenu: (_currentValue, done) => new ModelSelectionSubmenu(executorModelOptions, this.state.executorModel ?? MODEL_ROUTER_UNSET_MODEL_VALUE, (value) => {
1339
+ const executorModel = value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value;
1301
1340
  this.state = {
1302
1341
  ...this.state,
1303
- executorModel: value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value,
1342
+ executorModel,
1343
+ executorThinking: keepSupportedThinking(this.state.executorThinking, executorModel),
1304
1344
  };
1305
1345
  onChange({ ...this.state }, this.scope);
1306
1346
  done(routerTierValue(this.state.executorModel, this.state.executorThinking));
@@ -1336,7 +1376,7 @@ class ModelRouterSettingsSubmenu extends Container {
1336
1376
  label: "Cheap thinking",
1337
1377
  description: "Thinking-level override for cheap-tier (read-only/research) routed turns; (inherit) keeps today's behavior: the session level, clamped to the routed model",
1338
1378
  currentValue: this.state.cheapThinking ?? MODEL_ROUTER_INHERIT_THINKING_LABEL,
1339
- submenu: (_currentValue, done) => new SelectSubmenu("Cheap Tier Thinking", "Select a thinking-level override for cheap-tier routed turns, or inherit the session level", routedTierThinkingOptions, this.state.cheapThinking ?? MODEL_ROUTER_INHERIT_THINKING_VALUE, (value) => {
1379
+ submenu: (_currentValue, done) => new SelectSubmenu("Cheap Tier Thinking", "Select a thinking-level override for cheap-tier routed turns, or inherit the session level", routedTierThinkingOptions(this.state.cheapModel), this.state.cheapThinking ?? MODEL_ROUTER_INHERIT_THINKING_VALUE, (value) => {
1340
1380
  this.state = {
1341
1381
  ...this.state,
1342
1382
  cheapThinking: value === MODEL_ROUTER_INHERIT_THINKING_VALUE ? undefined : value,
@@ -1350,7 +1390,7 @@ class ModelRouterSettingsSubmenu extends Container {
1350
1390
  label: "Medium thinking",
1351
1391
  description: "Thinking-level override for medium-tier (scoped implementation) routed turns; (inherit) keeps today's behavior: the session level, clamped to the routed model",
1352
1392
  currentValue: this.state.mediumThinking ?? MODEL_ROUTER_INHERIT_THINKING_LABEL,
1353
- submenu: (_currentValue, done) => new SelectSubmenu("Medium Tier Thinking", "Select a thinking-level override for medium-tier routed turns, or inherit the session level", routedTierThinkingOptions, this.state.mediumThinking ?? MODEL_ROUTER_INHERIT_THINKING_VALUE, (value) => {
1393
+ submenu: (_currentValue, done) => new SelectSubmenu("Medium Tier Thinking", "Select a thinking-level override for medium-tier routed turns, or inherit the session level", routedTierThinkingOptions(this.state.mediumModel), this.state.mediumThinking ?? MODEL_ROUTER_INHERIT_THINKING_VALUE, (value) => {
1354
1394
  this.state = {
1355
1395
  ...this.state,
1356
1396
  mediumThinking: value === MODEL_ROUTER_INHERIT_THINKING_VALUE ? undefined : value,
@@ -1364,7 +1404,7 @@ class ModelRouterSettingsSubmenu extends Container {
1364
1404
  label: "Expensive thinking",
1365
1405
  description: "Thinking-level override for expensive-tier (modify/escalated) routed turns; (inherit) keeps today's behavior: the session level, clamped to the routed model",
1366
1406
  currentValue: this.state.expensiveThinking ?? MODEL_ROUTER_INHERIT_THINKING_LABEL,
1367
- submenu: (_currentValue, done) => new SelectSubmenu("Expensive Tier Thinking", "Select a thinking-level override for expensive-tier routed turns, or inherit the session level", routedTierThinkingOptions, this.state.expensiveThinking ?? MODEL_ROUTER_INHERIT_THINKING_VALUE, (value) => {
1407
+ submenu: (_currentValue, done) => new SelectSubmenu("Expensive Tier Thinking", "Select a thinking-level override for expensive-tier routed turns, or inherit the session level", routedTierThinkingOptions(this.state.expensiveModel), this.state.expensiveThinking ?? MODEL_ROUTER_INHERIT_THINKING_VALUE, (value) => {
1368
1408
  this.state = {
1369
1409
  ...this.state,
1370
1410
  expensiveThinking: value === MODEL_ROUTER_INHERIT_THINKING_VALUE ? undefined : value,
@@ -1378,7 +1418,7 @@ class ModelRouterSettingsSubmenu extends Container {
1378
1418
  label: "Executor thinking",
1379
1419
  description: "Thinking-level override for the local executor-direct lane; (inherit) keeps today's behavior: the session level, clamped to the routed model",
1380
1420
  currentValue: this.state.executorThinking ?? MODEL_ROUTER_INHERIT_THINKING_LABEL,
1381
- submenu: (_currentValue, done) => new SelectSubmenu("Executor Thinking", "Select a thinking-level override for the executor-direct lane, or inherit the session level", routedTierThinkingOptions, this.state.executorThinking ?? MODEL_ROUTER_INHERIT_THINKING_VALUE, (value) => {
1421
+ submenu: (_currentValue, done) => new SelectSubmenu("Executor Thinking", "Select a thinking-level override for the executor-direct lane, or inherit the session level", routedTierThinkingOptions(this.state.executorModel), this.state.executorThinking ?? MODEL_ROUTER_INHERIT_THINKING_VALUE, (value) => {
1382
1422
  this.state = {
1383
1423
  ...this.state,
1384
1424
  executorThinking: value === MODEL_ROUTER_INHERIT_THINKING_VALUE ? undefined : value,
@@ -1392,7 +1432,7 @@ class ModelRouterSettingsSubmenu extends Container {
1392
1432
  label: "Judge thinking",
1393
1433
  description: "Thinking-level override for the routing judge's own completion; (inherit) keeps today's default of off",
1394
1434
  currentValue: this.state.judgeThinking ?? MODEL_ROUTER_INHERIT_THINKING_LABEL,
1395
- submenu: (_currentValue, done) => new SelectSubmenu("Judge Thinking", "Select a thinking-level override for the routing judge's own completion, or inherit today's off default", judgeThinkingOptions, this.state.judgeThinking ?? MODEL_ROUTER_INHERIT_THINKING_VALUE, (value) => {
1435
+ submenu: (_currentValue, done) => new SelectSubmenu("Judge Thinking", "Select a thinking-level override for the routing judge's own completion, or inherit today's off default", judgeThinkingOptions(), this.state.judgeThinking ?? MODEL_ROUTER_INHERIT_THINKING_VALUE, (value) => {
1396
1436
  this.state = {
1397
1437
  ...this.state,
1398
1438
  judgeThinking: value === MODEL_ROUTER_INHERIT_THINKING_VALUE ? undefined : value,
@@ -1641,7 +1681,7 @@ export class SettingsSelectorComponent extends Container {
1641
1681
  {
1642
1682
  id: "worker-delegation",
1643
1683
  label: "Worker Delegation",
1644
- description: "Opt-in bounded scout-worker delegation: the delegate tool runs read-only workers on a cheap model lane",
1684
+ description: "Default-on for capable models: bounded scout workers remain available at every thinking level; Ultra reinforces proactive use",
1645
1685
  currentValue: workerDelegationSummary(currentWorkerDelegation),
1646
1686
  submenu: (_currentValue, done) => new WorkerDelegationSettingsSubmenu(currentWorkerDelegation, (settings, scope) => {
1647
1687
  currentWorkerDelegation = { ...settings };
@@ -1683,7 +1723,7 @@ export class SettingsSelectorComponent extends Container {
1683
1723
  label: "Model Router",
1684
1724
  description: "Configure models for cheap research, expensive modify/escalation, and background learning/reflection",
1685
1725
  currentValue: modelRouterSummary(currentModelRouter),
1686
- submenu: (_currentValue, done) => new ModelRouterSettingsSubmenu(currentModelRouter, config.currentModelPattern, config.autoLearnModelOptions, (settings, scope) => {
1726
+ submenu: (_currentValue, done) => new ModelRouterSettingsSubmenu(currentModelRouter, config.currentModelPattern, config.autoLearnModelOptions, config.resolveModelThinkingLevels, (settings, scope) => {
1687
1727
  currentModelRouter = { ...settings };
1688
1728
  callbacks.onModelRouterChange(settings, scope);
1689
1729
  }, () => done(modelRouterSummary(currentModelRouter)), config.modelRouterScope ?? "global"),
@@ -1711,7 +1751,7 @@ export class SettingsSelectorComponent extends Container {
1711
1751
  {
1712
1752
  id: "context-memory-retrieval",
1713
1753
  label: "Context / Memory Retrieval",
1714
- description: "Opt-in local memory retrieval: searches local Pi OKF memory documents each turn and records source-labeled evidence for inspection. Prompt inclusion is off by default and only occurs when 'Include in prompt' is enabled. Never queries an external provider.",
1754
+ description: "Default-on local safe-auto recall with budgeted prompt evidence. External query egress is a separate visible consent and remains off by default.",
1715
1755
  currentValue: contextMemoryRetrievalSummary(currentContextMemoryRetrieval),
1716
1756
  submenu: (_currentValue, done) => new ContextMemoryRetrievalSettingsSubmenu(currentContextMemoryRetrieval, (settings, scope) => {
1717
1757
  currentContextMemoryRetrieval = { ...settings };
@@ -1731,9 +1771,9 @@ export class SettingsSelectorComponent extends Container {
1731
1771
  {
1732
1772
  id: "thinking",
1733
1773
  label: "Thinking level",
1734
- description: "Reasoning depth for thinking-capable models",
1774
+ description: "Reasoning depth; supported Ultra models also reinforce proactive delegation",
1735
1775
  currentValue: config.thinkingLevel,
1736
- submenu: (currentValue, done) => new SelectSubmenu("Thinking Level", "Select reasoning depth for thinking-capable models", config.availableThinkingLevels.map((level) => ({
1776
+ submenu: (currentValue, done) => new SelectSubmenu("Thinking Level", "Select reasoning depth; Ultra reinforces delegation already available to capable models", config.availableThinkingLevels.map((level) => ({
1737
1777
  value: level,
1738
1778
  label: level,
1739
1779
  description: THINKING_DESCRIPTIONS[level],