@dreb/coding-agent 2.45.4 → 2.46.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 (60) hide show
  1. package/README.md +6 -2
  2. package/dist/core/agent-session.d.ts +10 -2
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +75 -15
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/context-buffer.d.ts +2 -0
  7. package/dist/core/context-buffer.d.ts.map +1 -1
  8. package/dist/core/context-buffer.js +8 -0
  9. package/dist/core/context-buffer.js.map +1 -1
  10. package/dist/core/dispatch-arbiter.d.ts +94 -0
  11. package/dist/core/dispatch-arbiter.d.ts.map +1 -0
  12. package/dist/core/dispatch-arbiter.js +316 -0
  13. package/dist/core/dispatch-arbiter.js.map +1 -0
  14. package/dist/core/git-repo-state.d.ts +2 -0
  15. package/dist/core/git-repo-state.d.ts.map +1 -1
  16. package/dist/core/git-repo-state.js +19 -0
  17. package/dist/core/git-repo-state.js.map +1 -1
  18. package/dist/core/model-routing-guide.d.ts +15 -0
  19. package/dist/core/model-routing-guide.d.ts.map +1 -0
  20. package/dist/core/model-routing-guide.js +186 -0
  21. package/dist/core/model-routing-guide.js.map +1 -0
  22. package/dist/core/settings-manager.d.ts +18 -0
  23. package/dist/core/settings-manager.d.ts.map +1 -1
  24. package/dist/core/settings-manager.js +33 -0
  25. package/dist/core/settings-manager.js.map +1 -1
  26. package/dist/core/thinking.d.ts +14 -0
  27. package/dist/core/thinking.d.ts.map +1 -1
  28. package/dist/core/thinking.js +35 -2
  29. package/dist/core/thinking.js.map +1 -1
  30. package/dist/core/tools/index.d.ts +7 -1
  31. package/dist/core/tools/index.d.ts.map +1 -1
  32. package/dist/core/tools/index.js.map +1 -1
  33. package/dist/core/tools/subagent.d.ts +53 -6
  34. package/dist/core/tools/subagent.d.ts.map +1 -1
  35. package/dist/core/tools/subagent.js +343 -53
  36. package/dist/core/tools/subagent.js.map +1 -1
  37. package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
  38. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  39. package/dist/modes/interactive/components/settings-selector.js +99 -1
  40. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  41. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  42. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  43. package/dist/modes/interactive/interactive-mode.js +75 -1
  44. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  45. package/dist/modes/rpc/rpc-mode.d.ts +2 -2
  46. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  47. package/dist/modes/rpc/rpc-mode.js +65 -0
  48. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  49. package/dist/modes/rpc/rpc-types.d.ts +8 -0
  50. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  51. package/dist/modes/rpc/rpc-types.js.map +1 -1
  52. package/docs/agent-models.md +33 -1
  53. package/docs/dashboard.md +8 -2
  54. package/docs/json.md +31 -5
  55. package/docs/rpc.md +60 -9
  56. package/docs/session.md +7 -1
  57. package/docs/settings.md +33 -1
  58. package/docs/skills.md +38 -0
  59. package/package.json +1 -1
  60. package/skills/model-routing-guide/SKILL.md +182 -0
@@ -14,17 +14,19 @@ import { parseSkillBlock } from "../../core/agent-session.js";
14
14
  import { BuddyManager, checkOllama } from "../../core/buddy/buddy-manager.js";
15
15
  import { Rarity, Stat } from "../../core/buddy/buddy-types.js";
16
16
  import { BuddyController } from "../../core/buddy/index.js";
17
+ import { formatDispatchArbitrationRecord } from "../../core/dispatch-arbiter.js";
17
18
  import { acquireDreamLock, buildDreamPrompt, cleanupDreamTmpDirs, parseDreamCommand, performDreamBackup, pruneOldBackups, resolveDreamContext, validateArchivePath, validateMemoryLinks, } from "../../core/dream.js";
18
19
  import { FooterDataProvider } from "../../core/footer-data-provider.js";
19
20
  import { KeybindingsManager } from "../../core/keybindings.js";
20
21
  import { createCompactionSummaryMessage } from "../../core/messages.js";
21
22
  import { findExactModelReferenceMatch, resolveModelScope } from "../../core/model-resolver.js";
23
+ import { loadAndValidateModelRoutingGuide } from "../../core/model-routing-guide.js";
22
24
  import { DefaultPackageManager } from "../../core/package-manager.js";
23
25
  import { SessionManager } from "../../core/session-manager.js";
24
26
  import { BUILTIN_SLASH_COMMANDS } from "../../core/slash-commands.js";
25
27
  import { restoreStderr, takeOverStderr } from "../../core/stderr-guard.js";
26
28
  import { TabTitleGenerator } from "../../core/tab-title.js";
27
- import { resolveThinkingDisplay } from "../../core/thinking.js";
29
+ import { resolveThinkingDisplay, validateThinkingLevelForModel } from "../../core/thinking.js";
28
30
  import { resolveToCwd } from "../../core/tools/path-utils.js";
29
31
  import { abortBackgroundAgents, discoverAgentTypes, getRunningBackgroundAgents } from "../../core/tools/subagent.js";
30
32
  import { copyToClipboard } from "../../utils/clipboard.js";
@@ -2295,6 +2297,15 @@ export class InteractiveMode {
2295
2297
  this.showWarning(`Response truncated, retrying with larger token budget (${event.attempt}/${event.maxAttempts})…`);
2296
2298
  break;
2297
2299
  }
2300
+ case "subagent_arbitration": {
2301
+ const message = formatDispatchArbitrationRecord(event);
2302
+ if (event.status === "failure")
2303
+ this.showWarning(message);
2304
+ else
2305
+ this.showStatus(message);
2306
+ this.updateBackgroundAgentStatus();
2307
+ break;
2308
+ }
2298
2309
  case "background_agent_start":
2299
2310
  case "background_agent_end": {
2300
2311
  this.updateBackgroundAgentStatus();
@@ -3098,6 +3109,67 @@ export class InteractiveMode {
3098
3109
  this.ui.setFocus(focus);
3099
3110
  this.ui.requestRender();
3100
3111
  }
3112
+ async handleSubagentArbiterSettingsChange(settings) {
3113
+ if (this.settingsManager.hasGlobalSettingsLoadError()) {
3114
+ this.showError("Cannot write Dispatch Arbiter settings: the global settings file failed to load. Fix or remove the corrupt settings.json first.");
3115
+ return false;
3116
+ }
3117
+ if (settings.enabled) {
3118
+ if (!settings.model) {
3119
+ this.showError("Choose an exact Dispatch Arbiter model before enabling it.");
3120
+ return false;
3121
+ }
3122
+ const slash = settings.model.indexOf("/");
3123
+ const arbiterModel = slash > 0
3124
+ ? this.session.modelRegistry.find(settings.model.slice(0, slash), settings.model.slice(slash + 1))
3125
+ : undefined;
3126
+ if (!arbiterModel) {
3127
+ this.showError(`Dispatch Arbiter model "${settings.model}" is not available.`);
3128
+ return false;
3129
+ }
3130
+ const thinking = settings.thinking ?? "off";
3131
+ const thinkingValidation = validateThinkingLevelForModel(arbiterModel, thinking);
3132
+ if (!thinkingValidation.ok) {
3133
+ this.showError(thinkingValidation.error);
3134
+ return false;
3135
+ }
3136
+ try {
3137
+ loadAndValidateModelRoutingGuide(settings.guidePath, process.cwd(), this.session.scopedModels.map(({ model }) => `${model.provider}/${model.id}`));
3138
+ }
3139
+ catch (error) {
3140
+ this.showError(`Dispatch Arbiter is not ready: ${error instanceof Error ? error.message : String(error)}`);
3141
+ return false;
3142
+ }
3143
+ }
3144
+ this.settingsManager.drainErrors();
3145
+ try {
3146
+ this.settingsManager.setGlobalSubagentArbiterSettings(settings);
3147
+ await this.settingsManager.flush();
3148
+ }
3149
+ catch (error) {
3150
+ try {
3151
+ this.settingsManager.reload();
3152
+ }
3153
+ catch { }
3154
+ this.showError(`Failed to persist Dispatch Arbiter settings: ${error instanceof Error ? error.message : String(error)}`);
3155
+ return false;
3156
+ }
3157
+ const writeErrors = this.settingsManager.drainErrors();
3158
+ if (writeErrors.length > 0) {
3159
+ try {
3160
+ this.settingsManager.reload();
3161
+ }
3162
+ catch { }
3163
+ this.showError(`Failed to persist Dispatch Arbiter settings: ${writeErrors
3164
+ .map((entry) => `${entry.scope}: ${entry.error.message}`)
3165
+ .join("; ")}`);
3166
+ return false;
3167
+ }
3168
+ this.showStatus(settings.enabled
3169
+ ? `Dispatch Arbiter enabled (${settings.model}, thinking ${settings.thinking ?? "off"}).`
3170
+ : "Dispatch Arbiter disabled.");
3171
+ return true;
3172
+ }
3101
3173
  showSettingsSelector() {
3102
3174
  this.showSelector((done) => {
3103
3175
  // Discover agent types for agent models section
@@ -3137,6 +3209,7 @@ export class InteractiveMode {
3137
3209
  agentModels: this.settingsManager.getAgentModels(),
3138
3210
  agentNames: agentNames,
3139
3211
  availableModelIds,
3212
+ subagentArbiter: this.settingsManager.getGlobalSubagentArbiterSettings() ?? {},
3140
3213
  }, {
3141
3214
  onAutoCompactChange: (enabled) => {
3142
3215
  this.session.setAutoCompactionEnabled(enabled);
@@ -3251,6 +3324,7 @@ export class InteractiveMode {
3251
3324
  this.editor.setAutocompleteMaxVisible(maxVisible);
3252
3325
  }
3253
3326
  },
3327
+ onSubagentArbiterChange: (settings) => this.handleSubagentArbiterSettingsChange(settings),
3254
3328
  onAgentModelsChange: (agentName, models) => {
3255
3329
  const shadowedByProject = this.settingsManager.hasProjectAgentModelOverride(agentName);
3256
3330
  if (models.length > 0) {