@dreb/coding-agent 2.30.0 → 2.31.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 (37) hide show
  1. package/README.md +12 -1
  2. package/dist/core/agent-session.d.ts +16 -0
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +58 -2
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/nested-context.d.ts +60 -0
  7. package/dist/core/nested-context.d.ts.map +1 -0
  8. package/dist/core/nested-context.js +276 -0
  9. package/dist/core/nested-context.js.map +1 -0
  10. package/dist/core/resource-loader.d.ts +5 -0
  11. package/dist/core/resource-loader.d.ts.map +1 -1
  12. package/dist/core/resource-loader.js +12 -12
  13. package/dist/core/resource-loader.js.map +1 -1
  14. package/dist/core/settings-manager.d.ts +10 -0
  15. package/dist/core/settings-manager.d.ts.map +1 -1
  16. package/dist/core/settings-manager.js +11 -0
  17. package/dist/core/settings-manager.js.map +1 -1
  18. package/dist/modes/interactive/components/copy-selector.d.ts +3 -3
  19. package/dist/modes/interactive/components/copy-selector.d.ts.map +1 -1
  20. package/dist/modes/interactive/components/copy-selector.js +4 -5
  21. package/dist/modes/interactive/components/copy-selector.js.map +1 -1
  22. package/dist/modes/interactive/components/settings-selector.d.ts +3 -0
  23. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  24. package/dist/modes/interactive/components/settings-selector.js +10 -0
  25. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  26. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  27. package/dist/modes/interactive/interactive-mode.js +29 -13
  28. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  29. package/dist/utils/clipboard.d.ts.map +1 -1
  30. package/dist/utils/clipboard.js +47 -10
  31. package/dist/utils/clipboard.js.map +1 -1
  32. package/dist/utils/message-text.d.ts +12 -0
  33. package/dist/utils/message-text.d.ts.map +1 -1
  34. package/dist/utils/message-text.js +31 -19
  35. package/dist/utils/message-text.js.map +1 -1
  36. package/docs/settings.md +18 -0
  37. package/package.json +1 -1
@@ -30,7 +30,7 @@ import { getChangelogPath, getNewEntries, parseChangelog } from "../../utils/cha
30
30
  import { copyToClipboard } from "../../utils/clipboard.js";
31
31
  import { extensionForImageMimeType, readClipboardImage } from "../../utils/clipboard-image.js";
32
32
  import { parseGitUrl } from "../../utils/git.js";
33
- import { extractCopyableText, getMessagePreview, getMessageRoleLabel } from "../../utils/message-text.js";
33
+ import { extractCopyableText, extractThinkingText, getMessagePreview, getMessageRoleLabel, toSingleLinePreview, } from "../../utils/message-text.js";
34
34
  import { ensureTool } from "../../utils/tools-manager.js";
35
35
  import { ArminComponent } from "./components/armin.js";
36
36
  import { AssistantMessageComponent } from "./components/assistant-message.js";
@@ -3103,6 +3103,7 @@ export class InteractiveMode {
3103
3103
  editorPaddingX: this.settingsManager.getEditorPaddingX(),
3104
3104
  autocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),
3105
3105
  quietStartup: this.settingsManager.getQuietStartup(),
3106
+ autoLoadNestedContext: this.settingsManager.getAutoLoadNestedContext(),
3106
3107
  agentModels: this.settingsManager.getAgentModels(),
3107
3108
  agentNames: agentNames,
3108
3109
  availableModelIds,
@@ -3111,6 +3112,9 @@ export class InteractiveMode {
3111
3112
  this.session.setAutoCompactionEnabled(enabled);
3112
3113
  this.footer.setAutoCompactEnabled(enabled);
3113
3114
  },
3115
+ onAutoLoadNestedContextChange: (enabled) => {
3116
+ this.settingsManager.setAutoLoadNestedContext(enabled);
3117
+ },
3114
3118
  onShowImagesChange: (enabled) => {
3115
3119
  this.settingsManager.setShowImages(enabled);
3116
3120
  for (const child of this.committedChatContainer.children) {
@@ -3833,12 +3837,26 @@ export class InteractiveMode {
3833
3837
  this.showStatus("No messages to copy");
3834
3838
  return;
3835
3839
  }
3836
- // Build items from session messages
3837
- const items = messages.map((msg, index) => ({
3838
- index,
3839
- roleLabel: getMessageRoleLabel(msg),
3840
- preview: getMessagePreview(msg),
3841
- }));
3840
+ // Build items from session messages. Each assistant message that carries
3841
+ // thinking gets an extra "Thinking" row listed directly ABOVE its message
3842
+ // (matching the TUI's thinking-above-answer presentation), so when both are
3843
+ // selected the reasoning lands at the top of the combined copy.
3844
+ const items = [];
3845
+ for (const msg of messages) {
3846
+ const thinking = extractThinkingText(msg);
3847
+ if (thinking) {
3848
+ items.push({
3849
+ roleLabel: "Thinking",
3850
+ preview: toSingleLinePreview(thinking),
3851
+ text: thinking,
3852
+ });
3853
+ }
3854
+ items.push({
3855
+ roleLabel: getMessageRoleLabel(msg),
3856
+ preview: getMessagePreview(msg),
3857
+ text: extractCopyableText(msg),
3858
+ });
3859
+ }
3842
3860
  // Hide buddy while selector is open to free vertical space
3843
3861
  const hadBuddy = this.buddyComponent !== null;
3844
3862
  if (hadBuddy) {
@@ -3851,20 +3869,18 @@ export class InteractiveMode {
3851
3869
  const overhead = 12;
3852
3870
  const maxVisible = Math.max(3, Math.min(15, terminalRows - overhead));
3853
3871
  this.showSelector((done) => {
3854
- const selector = new CopySelectorComponent(items, async (selectedIndices) => {
3872
+ const selector = new CopySelectorComponent(items, async (selectedPositions) => {
3855
3873
  done();
3856
3874
  // Restore buddy
3857
3875
  if (hadBuddy)
3858
3876
  this.renderWidgets();
3859
3877
  this.ui.requestRender();
3860
- if (selectedIndices.length === 0) {
3878
+ if (selectedPositions.length === 0) {
3861
3879
  this.showWarning("No messages selected");
3862
3880
  return;
3863
3881
  }
3864
- // Extract text from selected messages in chronological order
3865
- const selectedTexts = selectedIndices
3866
- .map((i) => extractCopyableText(messages[i]))
3867
- .filter((text) => text.length > 0);
3882
+ // Extract pre-built text from selected rows in chronological (list) order
3883
+ const selectedTexts = selectedPositions.map((pos) => items[pos].text).filter((text) => text.length > 0);
3868
3884
  if (selectedTexts.length === 0) {
3869
3885
  this.showWarning("Selected messages have no copyable text");
3870
3886
  return;