@dreb/coding-agent 2.70.1 → 2.72.0

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 (47) hide show
  1. package/README.md +4 -1
  2. package/dist/cli/args.d.ts +6 -0
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +17 -0
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/core/agent-session.d.ts +3 -9
  7. package/dist/core/agent-session.d.ts.map +1 -1
  8. package/dist/core/agent-session.js +19 -51
  9. package/dist/core/agent-session.js.map +1 -1
  10. package/dist/core/output-guard.d.ts +6 -0
  11. package/dist/core/output-guard.d.ts.map +1 -1
  12. package/dist/core/output-guard.js +86 -13
  13. package/dist/core/output-guard.js.map +1 -1
  14. package/dist/core/thinking.d.ts +2 -0
  15. package/dist/core/thinking.d.ts.map +1 -1
  16. package/dist/core/thinking.js +20 -14
  17. package/dist/core/thinking.js.map +1 -1
  18. package/dist/core/tools/subagent.d.ts +1 -0
  19. package/dist/core/tools/subagent.d.ts.map +1 -1
  20. package/dist/core/tools/subagent.js +13 -0
  21. package/dist/core/tools/subagent.js.map +1 -1
  22. package/dist/main.d.ts.map +1 -1
  23. package/dist/main.js +13 -10
  24. package/dist/main.js.map +1 -1
  25. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  26. package/dist/modes/interactive/interactive-mode.js +9 -5
  27. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  28. package/dist/modes/rpc/index.d.ts +2 -2
  29. package/dist/modes/rpc/index.d.ts.map +1 -1
  30. package/dist/modes/rpc/index.js +1 -1
  31. package/dist/modes/rpc/index.js.map +1 -1
  32. package/dist/modes/rpc/rpc-event-projection.d.ts +14 -9
  33. package/dist/modes/rpc/rpc-event-projection.d.ts.map +1 -1
  34. package/dist/modes/rpc/rpc-event-projection.js +16 -11
  35. package/dist/modes/rpc/rpc-event-projection.js.map +1 -1
  36. package/dist/modes/rpc/rpc-mode.d.ts +10 -1
  37. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  38. package/dist/modes/rpc/rpc-mode.js +29 -15
  39. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  40. package/dist/modes/rpc/rpc-types.d.ts +28 -2
  41. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  42. package/dist/modes/rpc/rpc-types.js.map +1 -1
  43. package/docs/agent-models.md +1 -1
  44. package/docs/models.md +1 -1
  45. package/docs/providers.md +26 -0
  46. package/docs/rpc.md +25 -13
  47. package/package.json +1 -1
@@ -15,7 +15,7 @@
15
15
  import { copyFileSync, existsSync, mkdirSync, realpathSync, writeFileSync } from "node:fs";
16
16
  import { tmpdir } from "node:os";
17
17
  import { basename, dirname, join, resolve } from "node:path";
18
- import { isContextOverflow, isOutputLimitExhaustion, modelsAreEqual, resetApiProviders, supportsMax, supportsXhigh, } from "@dreb/ai";
18
+ import { clampThinkingLevel, getAvailableThinkingLevels, isContextOverflow, isOutputLimitExhaustion, modelsAreEqual, resetApiProviders, } from "@dreb/ai";
19
19
  import { getDocsPath, getSubagentSessionsDir } from "../config.js";
20
20
  import { theme } from "../modes/interactive/theme/theme.js";
21
21
  import { sleep } from "../utils/sleep.js";
@@ -67,12 +67,6 @@ export function parseSkillBlock(text) {
67
67
  // ============================================================================
68
68
  // Constants
69
69
  // ============================================================================
70
- /** Standard thinking levels */
71
- const THINKING_LEVELS = ["off", "minimal", "low", "medium", "high"];
72
- /** Thinking levels including xhigh (for supported models). */
73
- const THINKING_LEVELS_WITH_XHIGH = ["off", "minimal", "low", "medium", "high", "xhigh"];
74
- /** Complete ordered scale, including the native max tier for supported models. */
75
- const THINKING_LEVELS_WITH_MAX = [...THINKING_LEVELS_WITH_XHIGH, "max"];
76
70
  const MIN_PERFORMANCE_DURATION_MS = 10;
77
71
  // ============================================================================
78
72
  // AgentSession Class
@@ -1949,14 +1943,16 @@ export class AgentSession {
1949
1943
  * Saves to session and settings only if the level actually changes.
1950
1944
  */
1951
1945
  setThinkingLevel(level) {
1952
- const availableLevels = this.getAvailableThinkingLevels();
1953
- const effectiveLevel = availableLevels.includes(level) ? level : this._clampThinkingLevel(level, availableLevels);
1946
+ const effectiveLevel = clampThinkingLevel(this.model, level);
1954
1947
  // Only persist if actually changing
1955
1948
  const isChanging = effectiveLevel !== this.agent.state.thinkingLevel;
1956
1949
  this.agent.setThinkingLevel(effectiveLevel);
1957
1950
  if (isChanging) {
1958
1951
  this.sessionManager.appendThinkingLevelChange(effectiveLevel);
1959
- if (this.supportsThinking() || effectiveLevel !== "off") {
1952
+ // A capability clamp (non-reasoning model, `off` on an always-thinking model,
1953
+ // unsupported xhigh/max) must not overwrite the saved preference, so the next
1954
+ // capable model can honor it again.
1955
+ if (this.supportsThinking() && effectiveLevel === level) {
1960
1956
  this.settingsManager.setDefaultThinkingLevel(effectiveLevel);
1961
1957
  }
1962
1958
  }
@@ -1976,25 +1972,12 @@ export class AgentSession {
1976
1972
  return nextLevel;
1977
1973
  }
1978
1974
  /**
1979
- * Get available thinking levels for current model.
1980
- * The provider will clamp to what the specific model supports internally.
1975
+ * Get available thinking levels for current model, in ascending order.
1976
+ * `off` is omitted for models whose thinking cannot be turned off (Claude Opus 5.5+),
1977
+ * and `xhigh` / `max` are included independently per model capability.
1981
1978
  */
1982
1979
  getAvailableThinkingLevels() {
1983
- if (!this.supportsThinking())
1984
- return ["off"];
1985
- if (this.supportsMaxThinking())
1986
- return THINKING_LEVELS_WITH_MAX;
1987
- return this.supportsXhighThinking() ? THINKING_LEVELS_WITH_XHIGH : THINKING_LEVELS;
1988
- }
1989
- /**
1990
- * Check if current model supports xhigh thinking level.
1991
- */
1992
- supportsXhighThinking() {
1993
- return this.model ? supportsXhigh(this.model) : false;
1994
- }
1995
- /** Check if the current model supports the native max thinking level. */
1996
- supportsMaxThinking() {
1997
- return this.model ? supportsMax(this.model) : false;
1980
+ return getAvailableThinkingLevels(this.model);
1998
1981
  }
1999
1982
  /**
2000
1983
  * Check if current model supports thinking/reasoning.
@@ -2006,29 +1989,17 @@ export class AgentSession {
2006
1989
  if (explicitLevel !== undefined) {
2007
1990
  return explicitLevel;
2008
1991
  }
1992
+ const savedLevel = this.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;
2009
1993
  if (!this.supportsThinking()) {
2010
- return this.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;
1994
+ return savedLevel;
2011
1995
  }
2012
- return this.thinkingLevel;
2013
- }
2014
- _clampThinkingLevel(level, availableLevels) {
2015
- const ordered = THINKING_LEVELS_WITH_MAX;
2016
- const available = new Set(availableLevels);
2017
- const requestedIndex = ordered.indexOf(level);
2018
- if (requestedIndex === -1) {
2019
- return availableLevels[0] ?? "off";
2020
- }
2021
- for (let i = requestedIndex; i < ordered.length; i++) {
2022
- const candidate = ordered[i];
2023
- if (available.has(candidate))
2024
- return candidate;
1996
+ // When the current level is only the capability clamp of the saved preference
1997
+ // (e.g. saved `off` shown as `minimal` on Opus 5.5), carry the saved preference
1998
+ // to the next model instead of the clamped value.
1999
+ if (clampThinkingLevel(this.model, savedLevel) === this.thinkingLevel) {
2000
+ return savedLevel;
2025
2001
  }
2026
- for (let i = requestedIndex - 1; i >= 0; i--) {
2027
- const candidate = ordered[i];
2028
- if (available.has(candidate))
2029
- return candidate;
2030
- }
2031
- return availableLevels[0] ?? "off";
2002
+ return this.thinkingLevel;
2032
2003
  }
2033
2004
  // =========================================================================
2034
2005
  // Queue Mode Management
@@ -3229,10 +3200,7 @@ export class AgentSession {
3229
3200
  this.setThinkingLevel(sessionContext.thinkingLevel);
3230
3201
  }
3231
3202
  else {
3232
- const availableLevels = this.getAvailableThinkingLevels();
3233
- const effectiveLevel = availableLevels.includes(defaultThinkingLevel)
3234
- ? defaultThinkingLevel
3235
- : this._clampThinkingLevel(defaultThinkingLevel, availableLevels);
3203
+ const effectiveLevel = clampThinkingLevel(this.model, defaultThinkingLevel);
3236
3204
  this.agent.setThinkingLevel(effectiveLevel);
3237
3205
  this.sessionManager.appendThinkingLevelChange(effectiveLevel);
3238
3206
  }