@dreb/coding-agent 2.33.0 → 2.34.1

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 (87) hide show
  1. package/README.md +2 -0
  2. package/dist/cli/args.d.ts +1 -0
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +4 -0
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/core/agent-session.d.ts.map +1 -1
  7. package/dist/core/agent-session.js +1 -0
  8. package/dist/core/agent-session.js.map +1 -1
  9. package/dist/core/session-manager.d.ts +6 -0
  10. package/dist/core/session-manager.d.ts.map +1 -1
  11. package/dist/core/session-manager.js +19 -0
  12. package/dist/core/session-manager.js.map +1 -1
  13. package/dist/core/tools/bash.d.ts.map +1 -1
  14. package/dist/core/tools/bash.js +4 -4
  15. package/dist/core/tools/bash.js.map +1 -1
  16. package/dist/core/tools/edit.d.ts.map +1 -1
  17. package/dist/core/tools/edit.js +2 -2
  18. package/dist/core/tools/edit.js.map +1 -1
  19. package/dist/core/tools/find.d.ts.map +1 -1
  20. package/dist/core/tools/find.js +2 -2
  21. package/dist/core/tools/find.js.map +1 -1
  22. package/dist/core/tools/grep.d.ts.map +1 -1
  23. package/dist/core/tools/grep.js +2 -2
  24. package/dist/core/tools/grep.js.map +1 -1
  25. package/dist/core/tools/ls.d.ts.map +1 -1
  26. package/dist/core/tools/ls.js +2 -2
  27. package/dist/core/tools/ls.js.map +1 -1
  28. package/dist/core/tools/read.d.ts.map +1 -1
  29. package/dist/core/tools/read.js +2 -2
  30. package/dist/core/tools/read.js.map +1 -1
  31. package/dist/core/tools/search.d.ts.map +1 -1
  32. package/dist/core/tools/search.js +2 -2
  33. package/dist/core/tools/search.js.map +1 -1
  34. package/dist/core/tools/skill.d.ts.map +1 -1
  35. package/dist/core/tools/skill.js +2 -2
  36. package/dist/core/tools/skill.js.map +1 -1
  37. package/dist/core/tools/subagent.d.ts +3 -1
  38. package/dist/core/tools/subagent.d.ts.map +1 -1
  39. package/dist/core/tools/subagent.js +14 -9
  40. package/dist/core/tools/subagent.js.map +1 -1
  41. package/dist/core/tools/suggest-next.d.ts.map +1 -1
  42. package/dist/core/tools/suggest-next.js +5 -5
  43. package/dist/core/tools/suggest-next.js.map +1 -1
  44. package/dist/core/tools/tasks.d.ts.map +1 -1
  45. package/dist/core/tools/tasks.js +2 -2
  46. package/dist/core/tools/tasks.js.map +1 -1
  47. package/dist/core/tools/wait.d.ts.map +1 -1
  48. package/dist/core/tools/wait.js +2 -2
  49. package/dist/core/tools/wait.js.map +1 -1
  50. package/dist/core/tools/web.d.ts.map +1 -1
  51. package/dist/core/tools/web.js +4 -4
  52. package/dist/core/tools/web.js.map +1 -1
  53. package/dist/core/tools/write.d.ts.map +1 -1
  54. package/dist/core/tools/write.js +1 -1
  55. package/dist/core/tools/write.js.map +1 -1
  56. package/dist/main.d.ts.map +1 -1
  57. package/dist/main.js +4 -0
  58. package/dist/main.js.map +1 -1
  59. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  60. package/dist/modes/interactive/components/assistant-message.js +5 -10
  61. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  62. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  63. package/dist/modes/interactive/components/bash-execution.js +4 -4
  64. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  65. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  66. package/dist/modes/interactive/components/branch-summary-message.js +1 -1
  67. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  68. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  69. package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  70. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  71. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  72. package/dist/modes/interactive/components/custom-message.js +1 -1
  73. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  74. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  75. package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  76. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  77. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  78. package/dist/modes/interactive/components/tool-execution.js +2 -2
  79. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  80. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  81. package/dist/modes/interactive/components/user-message.js +1 -1
  82. package/dist/modes/interactive/components/user-message.js.map +1 -1
  83. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  84. package/dist/modes/interactive/interactive-mode.js +29 -29
  85. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  86. package/docs/session.md +2 -2
  87. package/package.json +1 -1
@@ -407,7 +407,7 @@ export class InteractiveMode {
407
407
  else {
408
408
  this.headerContainer.addChild(new Text(theme.bold(theme.fg("accent", "What's New")), 1, 0));
409
409
  this.headerContainer.addChild(new Spacer(1));
410
- this.headerContainer.addChild(new Markdown(this.changelogMarkdown.trim(), 1, 0, this.getMarkdownThemeWithSettings()));
410
+ this.headerContainer.addChild(new Markdown(this.changelogMarkdown.trim(), 1, 0, this.getMarkdownThemeWithSettings(), undefined, true));
411
411
  this.headerContainer.addChild(new Spacer(1));
412
412
  }
413
413
  this.headerContainer.addChild(new DynamicBorder());
@@ -907,7 +907,7 @@ export class InteractiveMode {
907
907
  const contextList = contextFiles
908
908
  .map((f) => theme.fg("dim", ` ${this.formatDisplayPath(f.path)}`))
909
909
  .join("\n");
910
- this.chatContainer.addChild(new Text(`${sectionHeader("Context")}\n${contextList}`, 0, 0));
910
+ this.chatContainer.addChild(new Text(`${sectionHeader("Context")}\n${contextList}`, 0, 0, undefined, true));
911
911
  this.chatContainer.addChild(new Spacer(1));
912
912
  }
913
913
  const memoryIndexes = this.session.resourceLoader.getMemoryIndexes();
@@ -920,7 +920,7 @@ export class InteractiveMode {
920
920
  return theme.fg("dim", ` ${this.formatDisplayPath(m.dir)}/MEMORY.md${label}`);
921
921
  })
922
922
  .join("\n");
923
- this.chatContainer.addChild(new Text(`${sectionHeader("Memory")}\n${memoryList}`, 0, 0));
923
+ this.chatContainer.addChild(new Text(`${sectionHeader("Memory")}\n${memoryList}`, 0, 0, undefined, true));
924
924
  this.chatContainer.addChild(new Spacer(1));
925
925
  }
926
926
  const skills = skillsResult.skills;
@@ -930,7 +930,7 @@ export class InteractiveMode {
930
930
  formatPath: (item) => this.formatDisplayPath(item.path),
931
931
  formatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),
932
932
  });
933
- this.chatContainer.addChild(new Text(`${sectionHeader("Skills")}\n${skillList}`, 0, 0));
933
+ this.chatContainer.addChild(new Text(`${sectionHeader("Skills")}\n${skillList}`, 0, 0, undefined, true));
934
934
  this.chatContainer.addChild(new Spacer(1));
935
935
  }
936
936
  const templates = this.session.promptTemplates;
@@ -947,7 +947,7 @@ export class InteractiveMode {
947
947
  return template ? `/${template.name}` : this.formatDisplayPath(item.path);
948
948
  },
949
949
  });
950
- this.chatContainer.addChild(new Text(`${sectionHeader("Prompts")}\n${templateList}`, 0, 0));
950
+ this.chatContainer.addChild(new Text(`${sectionHeader("Prompts")}\n${templateList}`, 0, 0, undefined, true));
951
951
  this.chatContainer.addChild(new Spacer(1));
952
952
  }
953
953
  if (extensions.length > 0) {
@@ -956,7 +956,7 @@ export class InteractiveMode {
956
956
  formatPath: (item) => this.formatDisplayPath(item.path),
957
957
  formatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),
958
958
  });
959
- this.chatContainer.addChild(new Text(`${sectionHeader("Extensions", "mdHeading")}\n${extList}`, 0, 0));
959
+ this.chatContainer.addChild(new Text(`${sectionHeader("Extensions", "mdHeading")}\n${extList}`, 0, 0, undefined, true));
960
960
  this.chatContainer.addChild(new Spacer(1));
961
961
  }
962
962
  // Show loaded themes (excluding built-in)
@@ -971,7 +971,7 @@ export class InteractiveMode {
971
971
  formatPath: (item) => this.formatDisplayPath(item.path),
972
972
  formatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),
973
973
  });
974
- this.chatContainer.addChild(new Text(`${sectionHeader("Themes")}\n${themeList}`, 0, 0));
974
+ this.chatContainer.addChild(new Text(`${sectionHeader("Themes")}\n${themeList}`, 0, 0, undefined, true));
975
975
  this.chatContainer.addChild(new Spacer(1));
976
976
  }
977
977
  }
@@ -979,13 +979,13 @@ export class InteractiveMode {
979
979
  const skillDiagnostics = skillsResult.diagnostics;
980
980
  if (skillDiagnostics.length > 0) {
981
981
  const warningLines = this.formatDiagnostics(skillDiagnostics, sourceInfos);
982
- this.chatContainer.addChild(new Text(`${theme.fg("warning", "[Skill conflicts]")}\n${warningLines}`, 0, 0));
982
+ this.chatContainer.addChild(new Text(`${theme.fg("warning", "[Skill conflicts]")}\n${warningLines}`, 0, 0, undefined, true));
983
983
  this.chatContainer.addChild(new Spacer(1));
984
984
  }
985
985
  const promptDiagnostics = promptsResult.diagnostics;
986
986
  if (promptDiagnostics.length > 0) {
987
987
  const warningLines = this.formatDiagnostics(promptDiagnostics, sourceInfos);
988
- this.chatContainer.addChild(new Text(`${theme.fg("warning", "[Prompt conflicts]")}\n${warningLines}`, 0, 0));
988
+ this.chatContainer.addChild(new Text(`${theme.fg("warning", "[Prompt conflicts]")}\n${warningLines}`, 0, 0, undefined, true));
989
989
  this.chatContainer.addChild(new Spacer(1));
990
990
  }
991
991
  const extensionDiagnostics = [];
@@ -1002,13 +1002,13 @@ export class InteractiveMode {
1002
1002
  extensionDiagnostics.push(...shortcutDiagnostics);
1003
1003
  if (extensionDiagnostics.length > 0) {
1004
1004
  const warningLines = this.formatDiagnostics(extensionDiagnostics, sourceInfos);
1005
- this.chatContainer.addChild(new Text(`${theme.fg("warning", "[Extension issues]")}\n${warningLines}`, 0, 0));
1005
+ this.chatContainer.addChild(new Text(`${theme.fg("warning", "[Extension issues]")}\n${warningLines}`, 0, 0, undefined, true));
1006
1006
  this.chatContainer.addChild(new Spacer(1));
1007
1007
  }
1008
1008
  const themeDiagnostics = themesResult.diagnostics;
1009
1009
  if (themeDiagnostics.length > 0) {
1010
1010
  const warningLines = this.formatDiagnostics(themeDiagnostics, sourceInfos);
1011
- this.chatContainer.addChild(new Text(`${theme.fg("warning", "[Theme conflicts]")}\n${warningLines}`, 0, 0));
1011
+ this.chatContainer.addChild(new Text(`${theme.fg("warning", "[Theme conflicts]")}\n${warningLines}`, 0, 0, undefined, true));
1012
1012
  this.chatContainer.addChild(new Spacer(1));
1013
1013
  }
1014
1014
  }
@@ -1740,7 +1740,7 @@ export class InteractiveMode {
1740
1740
  */
1741
1741
  showExtensionError(extensionPath, error, stack) {
1742
1742
  const errorMsg = `Extension "${extensionPath}" error: ${error}`;
1743
- const errorText = new Text(theme.fg("error", errorMsg), 1, 0);
1743
+ const errorText = new Text(theme.fg("error", errorMsg), 1, 0, undefined, true);
1744
1744
  this.chatContainer.addChild(errorText);
1745
1745
  if (stack) {
1746
1746
  // Show stack trace in dim color, indented
@@ -1750,7 +1750,7 @@ export class InteractiveMode {
1750
1750
  .map((line) => theme.fg("dim", ` ${line.trim()}`))
1751
1751
  .join("\n");
1752
1752
  if (stackLines) {
1753
- this.chatContainer.addChild(new Text(stackLines, 1, 0));
1753
+ this.chatContainer.addChild(new Text(stackLines, 1, 0, undefined, true));
1754
1754
  }
1755
1755
  }
1756
1756
  this.ui.requestRender();
@@ -2268,7 +2268,7 @@ export class InteractiveMode {
2268
2268
  else if (event.errorMessage) {
2269
2269
  // Compaction failed (e.g., quota exceeded, API error)
2270
2270
  this.chatContainer.addChild(new Spacer(1));
2271
- this.chatContainer.addChild(new Text(theme.fg("error", event.errorMessage), 1, 0));
2271
+ this.chatContainer.addChild(new Text(theme.fg("error", event.errorMessage), 1, 0, undefined, true));
2272
2272
  }
2273
2273
  void this.flushCompactionQueue({ willRetry: event.willRetry });
2274
2274
  this.ui.requestRender();
@@ -2416,7 +2416,7 @@ export class InteractiveMode {
2416
2416
  return;
2417
2417
  }
2418
2418
  const spacer = new Spacer(1);
2419
- const text = new Text(theme.fg("dim", message), 1, 0);
2419
+ const text = new Text(theme.fg("dim", message), 1, 0, undefined, true);
2420
2420
  this.chatContainer.addChild(spacer);
2421
2421
  this.chatContainer.addChild(text);
2422
2422
  this.lastStatusSpacer = spacer;
@@ -2914,12 +2914,12 @@ export class InteractiveMode {
2914
2914
  }
2915
2915
  showError(errorMessage) {
2916
2916
  this.chatContainer.addChild(new Spacer(1));
2917
- this.chatContainer.addChild(new Text(theme.fg("error", `Error: ${errorMessage}`), 1, 0));
2917
+ this.chatContainer.addChild(new Text(theme.fg("error", `Error: ${errorMessage}`), 1, 0, undefined, true));
2918
2918
  this.ui.requestRender();
2919
2919
  }
2920
2920
  showWarning(warningMessage) {
2921
2921
  this.chatContainer.addChild(new Spacer(1));
2922
- this.chatContainer.addChild(new Text(theme.fg("warning", `Warning: ${warningMessage}`), 1, 0));
2922
+ this.chatContainer.addChild(new Text(theme.fg("warning", `Warning: ${warningMessage}`), 1, 0, undefined, true));
2923
2923
  this.ui.requestRender();
2924
2924
  }
2925
2925
  showNewVersionNotification(newVersion) {
@@ -2929,7 +2929,7 @@ export class InteractiveMode {
2929
2929
  const changelogLine = theme.fg("muted", "Changelog: ") + changelogUrl;
2930
2930
  this.chatContainer.addChild(new Spacer(1));
2931
2931
  this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("warning", text)));
2932
- this.chatContainer.addChild(new Text(`${theme.bold(theme.fg("warning", "Update Available"))}\n${updateInstruction}\n${changelogLine}`, 1, 0));
2932
+ this.chatContainer.addChild(new Text(`${theme.bold(theme.fg("warning", "Update Available"))}\n${updateInstruction}\n${changelogLine}`, 1, 0, undefined, true));
2933
2933
  this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("warning", text)));
2934
2934
  this.ui.requestRender();
2935
2935
  }
@@ -2939,7 +2939,7 @@ export class InteractiveMode {
2939
2939
  const packageLines = packages.map((pkg) => `- ${pkg}`).join("\n");
2940
2940
  this.chatContainer.addChild(new Spacer(1));
2941
2941
  this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("warning", text)));
2942
- this.chatContainer.addChild(new Text(`${theme.bold(theme.fg("warning", "Package Updates Available"))}\n${updateInstruction}\n${theme.fg("muted", "Packages:")}\n${packageLines}`, 1, 0));
2942
+ this.chatContainer.addChild(new Text(`${theme.bold(theme.fg("warning", "Package Updates Available"))}\n${updateInstruction}\n${theme.fg("muted", "Packages:")}\n${packageLines}`, 1, 0, undefined, true));
2943
2943
  this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("warning", text)));
2944
2944
  this.ui.requestRender();
2945
2945
  }
@@ -3979,7 +3979,7 @@ export class InteractiveMode {
3979
3979
  const currentName = this.sessionManager.getSessionName();
3980
3980
  if (currentName) {
3981
3981
  this.chatContainer.addChild(new Spacer(1));
3982
- this.chatContainer.addChild(new Text(theme.fg("dim", `Session name: ${currentName}`), 1, 0));
3982
+ this.chatContainer.addChild(new Text(theme.fg("dim", `Session name: ${currentName}`), 1, 0, undefined, true));
3983
3983
  }
3984
3984
  else {
3985
3985
  this.showWarning("Usage: /name <name>");
@@ -3990,7 +3990,7 @@ export class InteractiveMode {
3990
3990
  this.sessionManager.appendSessionInfo(name);
3991
3991
  this.updateTerminalTitle();
3992
3992
  this.chatContainer.addChild(new Spacer(1));
3993
- this.chatContainer.addChild(new Text(theme.fg("dim", `Session name set: ${name}`), 1, 0));
3993
+ this.chatContainer.addChild(new Text(theme.fg("dim", `Session name set: ${name}`), 1, 0, undefined, true));
3994
3994
  this.ui.requestRender();
3995
3995
  }
3996
3996
  handleSessionCommand() {
@@ -4023,7 +4023,7 @@ export class InteractiveMode {
4023
4023
  info += `${theme.fg("dim", "Total:")} ${stats.cost.toFixed(4)}`;
4024
4024
  }
4025
4025
  this.chatContainer.addChild(new Spacer(1));
4026
- this.chatContainer.addChild(new Text(info, 1, 0));
4026
+ this.chatContainer.addChild(new Text(info, 1, 0, undefined, true));
4027
4027
  this.ui.requestRender();
4028
4028
  }
4029
4029
  handleChangelogCommand() {
@@ -4039,7 +4039,7 @@ export class InteractiveMode {
4039
4039
  this.chatContainer.addChild(new DynamicBorder());
4040
4040
  this.chatContainer.addChild(new Text(theme.bold(theme.fg("accent", "What's New")), 1, 0));
4041
4041
  this.chatContainer.addChild(new Spacer(1));
4042
- this.chatContainer.addChild(new Markdown(changelogMarkdown, 1, 1, this.getMarkdownThemeWithSettings()));
4042
+ this.chatContainer.addChild(new Markdown(changelogMarkdown, 1, 1, this.getMarkdownThemeWithSettings(), undefined, true));
4043
4043
  this.chatContainer.addChild(new DynamicBorder());
4044
4044
  this.ui.requestRender();
4045
4045
  }
@@ -4172,7 +4172,7 @@ ${cycleModelForward || cycleModelBackward ? `| \`${cycleModelForward}\` / \`${cy
4172
4172
  this.chatContainer.addChild(new DynamicBorder());
4173
4173
  this.chatContainer.addChild(new Text(theme.bold(theme.fg("accent", "Keyboard Shortcuts")), 1, 0));
4174
4174
  this.chatContainer.addChild(new Spacer(1));
4175
- this.chatContainer.addChild(new Markdown(hotkeys.trim(), 1, 1, this.getMarkdownThemeWithSettings()));
4175
+ this.chatContainer.addChild(new Markdown(hotkeys.trim(), 1, 1, this.getMarkdownThemeWithSettings(), undefined, true));
4176
4176
  this.chatContainer.addChild(new DynamicBorder());
4177
4177
  this.ui.requestRender();
4178
4178
  }
@@ -4220,7 +4220,7 @@ ${cycleModelForward || cycleModelBackward ? `| \`${cycleModelForward}\` / \`${cy
4220
4220
  fs.mkdirSync(path.dirname(debugLogPath), { recursive: true });
4221
4221
  fs.writeFileSync(debugLogPath, debugData);
4222
4222
  this.chatContainer.addChild(new Spacer(1));
4223
- this.chatContainer.addChild(new Text(`${theme.fg("accent", "✓ Debug log written")}\n${theme.fg("muted", debugLogPath)}`, 1, 1));
4223
+ this.chatContainer.addChild(new Text(`${theme.fg("accent", "✓ Debug log written")}\n${theme.fg("muted", debugLogPath)}`, 1, 1, undefined, true));
4224
4224
  this.ui.requestRender();
4225
4225
  }
4226
4226
  handleArminSaysHi() {
@@ -4517,7 +4517,7 @@ ${cycleModelForward || cycleModelBackward ? `| \`${cycleModelForward}\` / \`${cy
4517
4517
  case "off": {
4518
4518
  this.removeBuddy();
4519
4519
  this.chatContainer.addChild(new Spacer(1));
4520
- this.chatContainer.addChild(new Text(theme.fg("muted", "Buddy hidden. Use /buddy to bring them back."), 1, 0));
4520
+ this.chatContainer.addChild(new Text(theme.fg("muted", "Buddy hidden. Use /buddy to bring them back."), 1, 0, undefined, true));
4521
4521
  this.ui.requestRender();
4522
4522
  break;
4523
4523
  }
@@ -4532,7 +4532,7 @@ ${cycleModelForward || cycleModelBackward ? `| \`${cycleModelForward}\` / \`${cy
4532
4532
  }
4533
4533
  case "model": {
4534
4534
  this.chatContainer.addChild(new Spacer(1));
4535
- this.chatContainer.addChild(new Text(result.message, 1, 0));
4535
+ this.chatContainer.addChild(new Text(result.message, 1, 0, undefined, true));
4536
4536
  this.ui.requestRender();
4537
4537
  break;
4538
4538
  }
@@ -4635,12 +4635,12 @@ ${cycleModelForward || cycleModelBackward ? `| \`${cycleModelForward}\` / \`${cy
4635
4635
  async checkAndWarnOllama() {
4636
4636
  const status = await checkOllama();
4637
4637
  if (!status.available) {
4638
- this.chatContainer.addChild(new Text(theme.fg("warning", "⚠️ Buddy reactions require Ollama. Install it at https://ollama.com then pull a model."), 1, 0));
4638
+ this.chatContainer.addChild(new Text(theme.fg("warning", "⚠️ Buddy reactions require Ollama. Install it at https://ollama.com then pull a model."), 1, 0, undefined, true));
4639
4639
  return;
4640
4640
  }
4641
4641
  const nudge = this.buddyController.getModelNudge();
4642
4642
  if (nudge) {
4643
- this.chatContainer.addChild(new Text(theme.fg("warning", `⚠️ ${nudge}`), 1, 0));
4643
+ this.chatContainer.addChild(new Text(theme.fg("warning", `⚠️ ${nudge}`), 1, 0, undefined, true));
4644
4644
  }
4645
4645
  }
4646
4646
  async playHatchAnimation() {