@agi-fans/dsh-tui 0.6.1 → 0.7.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.
package/lib/CHANGELOG.md CHANGED
@@ -6,6 +6,24 @@ The format is based on [Keep a Changelog], and this project adheres to [Semantic
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.7.0] - 2026-08-20
10
+
11
+ ### Added
12
+
13
+ - Mention other sessions from the composer `@` menu. Unquoted `@` lists project files first, then session titles; `Tab` inserts a session mention, and sending the prompt captures a read-only snapshot for the model. Quoted `@"…` tokens stay file-only. File rows come from Harness `file-reference` discovery and still insert a path without uploading contents.
14
+ - Send composer images with `/goal` and `/plan`. Commands that do not accept attachments return an error and keep the original image draft in the composer.
15
+ - Mark an assistant reply cut off by an interrupt with a dim `· interrupted` suffix instead of presenting it as a complete reply. A turn interrupted before any visible content still prints the plain `interrupted` notice.
16
+
17
+ ### Changed
18
+
19
+ - Upgraded every direct DeepSeek Harness dependency to the coherent `0.1.0-rc.8` release. Failed model requests now retry up to five times by default (previously two), and an inapplicable or valueless `compat` switch in a hand-edited `llm-pi-ai` settings section fails startup with an error naming the offending key.
20
+ - Refuse attached images over 3.5 MiB or larger than 2000px per side, matching the new Harness admission defaults. The composer checks admission when an image is pasted: a refused image shows an immediate error notice and stays out of the prompt instead of failing the completed submission on send.
21
+
22
+ ### Fixed
23
+
24
+ - Route `/goal` and `/plan` after dropping TUI image placeholders that match attached drafts, leave handwritten `[Image #N]` text unchanged when nothing is attached, pass command whitespace through to Harness, and keep the original image draft when those commands fail.
25
+ - Keep `@` file rows on Harness `file-reference` results when that service is composed, including empty matches; local path search remains only when it is not.
26
+
9
27
  ## [0.6.1] - 2026-08-19
10
28
 
11
29
  ### Fixed
@@ -173,7 +191,8 @@ The format is based on [Keep a Changelog], and this project adheres to [Semantic
173
191
  - Preserved terminal-cell alignment and right padding for long commands, CJK text, emoji, ANSI styling, and narrow viewports.
174
192
  - Stabilized incremental rendering, transcript scrolling, cursor placement, tool-output folding, and queued input during active turns.
175
193
 
176
- [Unreleased]: https://github.com/agi-fans/oh-my-dsh/compare/v0.6.1...HEAD
194
+ [Unreleased]: https://github.com/agi-fans/oh-my-dsh/compare/v0.7.0...HEAD
195
+ [0.7.0]: https://github.com/agi-fans/oh-my-dsh/compare/v0.6.1...v0.7.0
177
196
  [0.6.1]: https://github.com/agi-fans/oh-my-dsh/compare/v0.6.0...v0.6.1
178
197
  [0.6.0]: https://github.com/agi-fans/oh-my-dsh/compare/v0.5.1...v0.6.0
179
198
  [0.5.1]: https://github.com/agi-fans/oh-my-dsh/compare/v0.5.0...v0.5.1
@@ -1,10 +1,16 @@
1
1
  /** Theme-aware rendering for `@path` mentions in submitted user messages. */
2
2
  import { wrapIndexed } from "./width.js";
3
+ const SESSION_MENTION = /@\[(?:\\.|[^\\\]])*\]\(dsh-session:[^\s)]+\)/gu;
3
4
  const PATH_MENTION = /@(?:"[^"\n]+"|'[^'\n]+'|[^\s@]+)/gu;
4
5
  const MENTION_BOUNDARY = /[\s([{<"'`,。;:!?(【《]/u;
5
6
  const TRAILING_PUNCTUATION = /[)\]}>.,;:!?"'`,。;:!?)】》]/u;
6
7
  function mentionRanges(text) {
7
8
  const ranges = [];
9
+ for (const match of text.matchAll(SESSION_MENTION)) {
10
+ if (match.index === undefined)
11
+ continue;
12
+ ranges.push({ start: match.index, end: match.index + match[0].length });
13
+ }
8
14
  for (const match of text.matchAll(PATH_MENTION)) {
9
15
  const start = match.index;
10
16
  if (start === undefined || (start > 0 && !MENTION_BOUNDARY.test(text[start - 1] ?? '')))
@@ -16,10 +22,13 @@ function mentionRanges(text) {
16
22
  while (end > start + 1 && TRAILING_PUNCTUATION.test(text[end - 1] ?? ''))
17
23
  end -= 1;
18
24
  }
19
- if (end > start + 1)
20
- ranges.push({ start, end });
25
+ if (end <= start + 1)
26
+ continue;
27
+ if (ranges.some(range => start < range.end && end > range.start))
28
+ continue;
29
+ ranges.push({ start, end });
21
30
  }
22
- return ranges;
31
+ return ranges.sort((left, right) => left.start - right.start);
23
32
  }
24
33
  function paintMentionSlice(text, sourceStart, ranges, theme) {
25
34
  if (!theme.colors || ranges.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"path-mentions.js","sourceRoot":"","sources":["../../src/chrome/path-mentions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"path-mentions.js","sourceRoot":"","sources":["../../src/chrome/path-mentions.ts"],"names":[],"mappings":"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"}
@@ -255,6 +255,19 @@ export interface TuiService {
255
255
  * @returns disposer removing the listener.
256
256
  */
257
257
  onInspectSubmit(listener: (submission: TuiSubmission) => void): () => void;
258
+ /** Replace the optional `@` session candidate source used by composer completion. */
259
+ setSessionSearch(search?: (query: string, signal?: AbortSignal) => Promise<readonly {
260
+ sessionId: string;
261
+ label: string;
262
+ cwd?: string;
263
+ }[]>): void;
264
+ /** Replace the optional `@` file candidate source used by composer completion. */
265
+ setFileSearch(search?: (query: string, signal?: AbortSignal) => Promise<readonly {
266
+ path: string;
267
+ kind: 'file' | 'directory';
268
+ }[]>): void;
269
+ /** Replace the optional Harness image-admission check applied when a paste drafts an image. */
270
+ setImageValidator(validate?: (image: TuiInputImage) => Promise<void>): void;
258
271
  /** Restore terminal state and settle a pending input read with null. */
259
272
  dispose(): void;
260
273
  }
@@ -10,6 +10,18 @@ export declare function probeImageDimensions(data: Uint8Array, mediaType: ImageM
10
10
  } | undefined;
11
11
  /** Compact, stable composer placeholder matching OMP's image draft label. */
12
12
  export declare function imageMarker(index: number, image: TuiInputImage): string;
13
+ /**
14
+ * Remove composer placeholders that match attached drafts.
15
+ *
16
+ * Without images the text is returned unchanged, including a handwritten
17
+ * `[Image #1]` that is not backed by an attachment. With images, each draft
18
+ * removes one matching {@link imageMarker} and its TUI-inserted neighboring
19
+ * space. A handwritten copy of the same token is left in place, and remaining
20
+ * user spacing is not collapsed or trimmed.
21
+ */
22
+ export declare function stripComposerImageMarkers(text: string, images: readonly TuiInputImage[]): string;
23
+ /** True when composer text is a slash command after dropping attached image markers. */
24
+ export declare function looksLikeSlashCommand(text: string, images: readonly TuiInputImage[]): boolean;
13
25
  /** Load a supported local image without exposing its path beyond the TUI boundary. */
14
26
  export declare function readImageFile(path: string, cwd?: string): Promise<TuiInputImage | null>;
15
27
  /** Read Finder's file-url pasteboard flavor, which `pbpaste` cannot expose. */
@@ -124,6 +124,47 @@ export function imageMarker(index, image) {
124
124
  : `, ${image.width}x${image.height}`;
125
125
  return `[Image #${index + 1}${dimensions}]`;
126
126
  }
127
+ /**
128
+ * Drop one TUI-owned image marker and the single adjacent separator space the
129
+ * composer inserts around it. Other user whitespace stays intact.
130
+ */
131
+ function removeComposerImageMarker(text, marker) {
132
+ const start = text.indexOf(marker);
133
+ if (start < 0)
134
+ return text;
135
+ let from = start;
136
+ let to = start + marker.length;
137
+ if (text[to] === ' ')
138
+ to += 1;
139
+ else if (from > 0 && text[from - 1] === ' ')
140
+ from -= 1;
141
+ return text.slice(0, from) + text.slice(to);
142
+ }
143
+ /**
144
+ * Remove composer placeholders that match attached drafts.
145
+ *
146
+ * Without images the text is returned unchanged, including a handwritten
147
+ * `[Image #1]` that is not backed by an attachment. With images, each draft
148
+ * removes one matching {@link imageMarker} and its TUI-inserted neighboring
149
+ * space. A handwritten copy of the same token is left in place, and remaining
150
+ * user spacing is not collapsed or trimmed.
151
+ */
152
+ export function stripComposerImageMarkers(text, images) {
153
+ if (images.length === 0)
154
+ return text;
155
+ let result = text;
156
+ for (let index = 0; index < images.length; index += 1) {
157
+ const image = images[index];
158
+ if (image === undefined)
159
+ continue;
160
+ result = removeComposerImageMarker(result, imageMarker(index, image));
161
+ }
162
+ return result;
163
+ }
164
+ /** True when composer text is a slash command after dropping attached image markers. */
165
+ export function looksLikeSlashCommand(text, images) {
166
+ return stripComposerImageMarkers(text, images).trimStart().startsWith('/');
167
+ }
127
168
  /** Load a supported local image without exposing its path beyond the TUI boundary. */
128
169
  export async function readImageFile(path, cwd = process.cwd()) {
129
170
  const expanded = path.startsWith('~/') ? homedir() + path.slice(1) : path;
@@ -1 +1 @@
1
- {"version":3,"file":"image-paste.js","sourceRoot":"","sources":["../../src/input/image-paste.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"image-paste.js","sourceRoot":"","sources":["../../src/input/image-paste.ts"],"names":[],"mappings":"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"}
@@ -12,8 +12,9 @@
12
12
  */
13
13
  import type { Context } from '@deepseek-ai/cordis';
14
14
  import type { SessionEvent } from '@deepseek-ai/dsh-session';
15
- import { type TuiCommand, type TuiPrompt, type TuiNoticeOptions, type TuiRecentSession, type TuiService, type TuiSessionControls, type TuiSessionStats, type TuiStatus, type TuiInspectedSubagent, type TuiLoopStatus, type TuiSubagentRoster, type TuiSubmission } from '../definition.ts';
15
+ import { type TuiCommand, type TuiPrompt, type TuiNoticeOptions, type TuiRecentSession, type TuiService, type TuiSessionControls, type TuiSessionStats, type TuiStatus, type TuiInputImage, type TuiInspectedSubagent, type TuiLoopStatus, type TuiSubagentRoster, type TuiSubmission } from '../definition.ts';
16
16
  import { type DirReader, type PathSearcher } from '../views/path-complete.ts';
17
+ import { type FileSearcher, type SessionSearcher } from '../views/at-complete.ts';
17
18
  import { type ClipboardReader, type ClipboardWriter } from '../input/clipboard.ts';
18
19
  import { type TuiPrefs } from '../views/settings-list.ts';
19
20
  import { type RenderSink } from '../chrome/renderer.ts';
@@ -71,6 +72,8 @@ export declare class LocalTui implements TuiService {
71
72
  home?: string;
72
73
  listDir?: DirReader;
73
74
  searchFiles?: PathSearcher;
75
+ searchFileMentions?: FileSearcher;
76
+ searchSessions?: SessionSearcher;
74
77
  autocompleteDebounceMs?: number;
75
78
  historyPath?: string;
76
79
  keybindingsPath?: string;
@@ -87,6 +90,9 @@ export declare class LocalTui implements TuiService {
87
90
  setInspectedSubagent(inspected: TuiInspectedSubagent | undefined): void;
88
91
  setTools(tools: readonly ToolInfo[]): void;
89
92
  setCommands(commands: readonly TuiCommand[]): void;
93
+ setSessionSearch(search?: SessionSearcher): void;
94
+ setFileSearch(search?: FileSearcher): void;
95
+ setImageValidator(validate?: (image: TuiInputImage) => Promise<void>): void;
90
96
  notice(text: string, options?: TuiNoticeOptions): void;
91
97
  commandOutput(command: string, text: string): void;
92
98
  prompt(request: TuiPrompt): Promise<string | null>;
@@ -15,7 +15,9 @@ import { join } from 'node:path';
15
15
  import { createInterface } from 'node:readline';
16
16
  import { TUI_SERVICE, } from "../definition.js";
17
17
  import { applySlashCompletion, formatHelpText, hitTestAutocomplete, parseSlashInput, resolveSlashCommand, slashSuggestions, BUILTIN_SLASH_COMMANDS, } from "../views/autocomplete.js";
18
- import { applyPathCompletion, defaultPathSource, findPathToken, parsePathPrefix, pathSuggestions, searchPathSuggestions, } from "../views/path-complete.js";
18
+ import { applyPathCompletion, defaultPathSource, editorLineAt, findPathToken, parsePathPrefix, pathSuggestions, searchPathSuggestions, } from "../views/path-complete.js";
19
+ import { activeAtToken } from '@deepseek-ai/dsh-file-reference/grammar';
20
+ import { nextSelectableAutocompleteIndex, searchAtSuggestions, } from "../views/at-complete.js";
19
21
  import { copyToClipboard, readFromClipboard } from "../input/clipboard.js";
20
22
  import { applyCopySelectorEvent, createCopySelector, hitTestCopySelector, selectCopyTarget, } from "../views/copy-selector.js";
21
23
  import { buildCopyTargets, extractCopyTarget, parseCopyKind } from "../views/copy-targets.js";
@@ -37,7 +39,7 @@ import { movePromptSelection, filteredPromptOptions, selectedPromptAnswer, selec
37
39
  import { resolveProjectContext } from "../session/project-context.js";
38
40
  import { pickWelcomeTips } from "../chrome/welcome-tips.js";
39
41
  import { formatEssentialHotkeysText, formatHotkeysText, hotkeyCount } from "../views/hotkeys.js";
40
- import { imageMarker, imagePathCandidates, probeImageDimensions, readImageFile, readImageFromClipboard, readMacClipboardFiles, } from "../input/image-paste.js";
42
+ import { imageMarker, imagePathCandidates, probeImageDimensions, stripComposerImageMarkers, readImageFile, readImageFromClipboard, readMacClipboardFiles, } from "../input/image-paste.js";
41
43
  import { APP_NAME, APP_VERSION } from "../session/package-metadata.js";
42
44
  const DOUBLE_CTRL_C_MS = 500;
43
45
  const DOUBLE_ESCAPE_MS = 500;
@@ -146,6 +148,9 @@ export class LocalTui {
146
148
  #home;
147
149
  #listDir;
148
150
  #searchFiles;
151
+ #searchFileMentions;
152
+ #searchSessions;
153
+ #validateImageDraft;
149
154
  #autocompleteDebounceMs;
150
155
  #persistPrefs = null;
151
156
  /**
@@ -176,6 +181,8 @@ export class LocalTui {
176
181
  this.#home = paths.home ?? fallback.home;
177
182
  this.#listDir = paths.listDir ?? fallback.listDir;
178
183
  this.#searchFiles = paths.searchFiles ?? fallback.searchFiles;
184
+ this.#searchFileMentions = paths.searchFileMentions;
185
+ this.#searchSessions = paths.searchSessions;
179
186
  this.#autocompleteDebounceMs = Math.max(0, paths.autocompleteDebounceMs ?? 100);
180
187
  this.#welcomeTips = pickWelcomeTips();
181
188
  this.#trueColor = colors && detectTrueColor();
@@ -275,6 +282,21 @@ export class LocalTui {
275
282
  if (this.#tty)
276
283
  this.#render();
277
284
  }
285
+ setSessionSearch(search) {
286
+ this.#searchSessions = search;
287
+ this.#refreshAutocomplete();
288
+ if (this.#tty)
289
+ this.#render();
290
+ }
291
+ setFileSearch(search) {
292
+ this.#searchFileMentions = search;
293
+ this.#refreshAutocomplete();
294
+ if (this.#tty)
295
+ this.#render();
296
+ }
297
+ setImageValidator(validate) {
298
+ this.#validateImageDraft = validate;
299
+ }
278
300
  notice(text, options = {}) {
279
301
  const block = {
280
302
  kind: 'notice',
@@ -765,10 +787,17 @@ export class LocalTui {
765
787
  if (paths.length > 0) {
766
788
  const images = await Promise.all(paths.map(path => this.#readImagePath(path)));
767
789
  if (images.every((image) => image !== null)) {
768
- for (const image of images)
769
- this.#insertImageDraft(image);
770
- this.#refreshAutocomplete();
771
- this.#render();
790
+ let inserted = false;
791
+ for (const image of images) {
792
+ if (await this.#admitImage(image)) {
793
+ this.#insertImageDraft(image);
794
+ inserted = true;
795
+ }
796
+ }
797
+ if (inserted) {
798
+ this.#refreshAutocomplete();
799
+ this.#render();
800
+ }
772
801
  return;
773
802
  }
774
803
  // Screenshot tools sometimes paste a transient cache path and remove
@@ -790,9 +819,11 @@ export class LocalTui {
790
819
  if (this.#search === null && this.#settings === null && this.#copySelector === null) {
791
820
  const image = await this.#readClipboardImage();
792
821
  if (image !== null) {
793
- this.#insertImageDraft(image);
794
- this.#refreshAutocomplete();
795
- this.#render();
822
+ if (await this.#admitImage(image)) {
823
+ this.#insertImageDraft(image);
824
+ this.#refreshAutocomplete();
825
+ this.#render();
826
+ }
796
827
  return;
797
828
  }
798
829
  const files = await this.#readClipboardFiles();
@@ -801,10 +832,17 @@ export class LocalTui {
801
832
  const images = (await Promise.all(imagePaths.map(path => this.#readImagePath(path))))
802
833
  .filter((candidate) => candidate !== null);
803
834
  if (images.length > 0) {
804
- for (const candidate of images)
805
- this.#insertImageDraft(candidate);
806
- this.#refreshAutocomplete();
807
- this.#render();
835
+ let inserted = false;
836
+ for (const candidate of images) {
837
+ if (await this.#admitImage(candidate)) {
838
+ this.#insertImageDraft(candidate);
839
+ inserted = true;
840
+ }
841
+ }
842
+ if (inserted) {
843
+ this.#refreshAutocomplete();
844
+ this.#render();
845
+ }
808
846
  return;
809
847
  }
810
848
  }
@@ -813,6 +851,23 @@ export class LocalTui {
813
851
  if (text !== '')
814
852
  await this.#acceptPastedText(text);
815
853
  }
854
+ /**
855
+ * Run the Harness image-admission check for one paste candidate. A refusal
856
+ * becomes an error notice and skips the draft, instead of failing the whole
857
+ * submission after the user has typed a prompt around it.
858
+ */
859
+ async #admitImage(image) {
860
+ if (this.#validateImageDraft === undefined)
861
+ return true;
862
+ try {
863
+ await this.#validateImageDraft(image);
864
+ return true;
865
+ }
866
+ catch (error) {
867
+ this.notice(error instanceof Error ? error.message : String(error), { level: 'error' });
868
+ return false;
869
+ }
870
+ }
816
871
  #insertImageDraft(input) {
817
872
  const size = input.width === undefined || input.height === undefined
818
873
  ? probeImageDimensions(input.data, input.mediaType)
@@ -1392,7 +1447,7 @@ export class LocalTui {
1392
1447
  }
1393
1448
  if (hit.kind === 'autocomplete' && this.#ac !== null) {
1394
1449
  const index = hitTestAutocomplete(this.#ac.items.length, this.#ac.selected, localRow);
1395
- if (index === undefined)
1450
+ if (index === undefined || this.#ac.items[index]?.kind === 'heading')
1396
1451
  return true;
1397
1452
  this.#ac = { ...this.#ac, selected: index };
1398
1453
  this.#applySelectedCompletion();
@@ -1603,10 +1658,20 @@ export class LocalTui {
1603
1658
  force: forcePath,
1604
1659
  };
1605
1660
  const token = findPathToken(this.#editor.text, this.#editor.cursor, forcePath);
1606
- const atPrefix = token?.kind === 'at' ? parsePathPrefix(token.prefix).raw.replaceAll('\\', '/') : '';
1607
- const fuzzyAt = token?.kind === 'at' && atPrefix !== '' && !atPrefix.endsWith('/');
1608
- if (fuzzyAt) {
1609
- this.#ac = null;
1661
+ const { line, col } = editorLineAt(this.#editor.text, this.#editor.cursor);
1662
+ const at = forcePath ? undefined : activeAtToken(line, col);
1663
+ const atPrefix = at?.query.replaceAll('\\', '/')
1664
+ ?? (token?.kind === 'at' ? parsePathPrefix(token.prefix).raw.replaceAll('\\', '/') : '');
1665
+ const fuzzyAt = (at !== undefined || token?.kind === 'at') && atPrefix !== '' && !atPrefix.endsWith('/');
1666
+ const harnessAt = at !== undefined
1667
+ && (this.#searchFileMentions !== undefined || this.#searchSessions !== undefined);
1668
+ if (fuzzyAt || harnessAt) {
1669
+ if (harnessAt && !fuzzyAt) {
1670
+ this.#setAutocomplete(pathSuggestions(this.#editor.text, this.#editor.cursor, pathOptions, commands));
1671
+ }
1672
+ else {
1673
+ this.#ac = null;
1674
+ }
1610
1675
  const text = this.#editor.text;
1611
1676
  const cursor = this.#editor.cursor;
1612
1677
  this.#autocompleteTimer = setTimeout(() => {
@@ -1615,11 +1680,20 @@ export class LocalTui {
1615
1680
  return;
1616
1681
  const controller = new AbortController();
1617
1682
  this.#autocompleteAbort = controller;
1618
- void searchPathSuggestions(text, cursor, {
1619
- ...pathOptions,
1620
- searchFiles: this.#searchFiles,
1621
- signal: controller.signal,
1622
- }, commands).then((result) => {
1683
+ const search = this.#searchFileMentions === undefined && this.#searchSessions === undefined
1684
+ ? searchPathSuggestions(text, cursor, {
1685
+ ...pathOptions,
1686
+ searchFiles: this.#searchFiles,
1687
+ signal: controller.signal,
1688
+ }, commands)
1689
+ : searchAtSuggestions(text, cursor, {
1690
+ ...pathOptions,
1691
+ searchFiles: this.#searchFiles,
1692
+ ...(this.#searchFileMentions === undefined ? {} : { searchFileMentions: this.#searchFileMentions }),
1693
+ ...(this.#searchSessions === undefined ? {} : { searchSessions: this.#searchSessions }),
1694
+ signal: controller.signal,
1695
+ }, commands);
1696
+ void search.then((result) => {
1623
1697
  if (this.#disposed || controller.signal.aborted || requestId !== this.#autocompleteRequestId)
1624
1698
  return;
1625
1699
  this.#autocompleteAbort = null;
@@ -1645,9 +1719,9 @@ export class LocalTui {
1645
1719
  return;
1646
1720
  }
1647
1721
  const prev = this.#ac?.items[this.#ac.selected]?.value;
1648
- let selected = 0;
1722
+ let selected = nextSelectableAutocompleteIndex(result.items, 0, 1);
1649
1723
  if (prev !== undefined) {
1650
- const idx = result.items.findIndex((item) => item.value === prev);
1724
+ const idx = result.items.findIndex((item) => item.value === prev && item.kind !== 'heading');
1651
1725
  if (idx >= 0)
1652
1726
  selected = idx;
1653
1727
  }
@@ -1656,14 +1730,16 @@ export class LocalTui {
1656
1730
  #moveAutocomplete(dir) {
1657
1731
  if (this.#ac === null || this.#ac.items.length === 0)
1658
1732
  return;
1659
- const n = this.#ac.items.length;
1660
- this.#ac = { ...this.#ac, selected: (this.#ac.selected + dir + n) % n };
1733
+ this.#ac = {
1734
+ ...this.#ac,
1735
+ selected: nextSelectableAutocompleteIndex(this.#ac.items, this.#ac.selected + dir, dir),
1736
+ };
1661
1737
  }
1662
1738
  #applySelectedCompletion() {
1663
1739
  const item = this.#ac?.items[this.#ac.selected];
1664
- if (item === undefined)
1740
+ if (item === undefined || item.kind === 'heading')
1665
1741
  return;
1666
- const next = item.kind === 'path'
1742
+ const next = item.kind === 'path' || item.kind === 'session'
1667
1743
  ? applyPathCompletion(this.#editor.text, this.#editor.cursor, item)
1668
1744
  : applySlashCompletion(this.#editor.text, this.#editor.cursor, item);
1669
1745
  this.#editor.setText(next.text, next.cursor);
@@ -1812,7 +1888,7 @@ export class LocalTui {
1812
1888
  const images = this.#images.map(image => ({ ...image }));
1813
1889
  const submittedText = images.length > 0 ? text.trim() : text;
1814
1890
  const queueEditNewer = this.#queueEditNewer;
1815
- const historyText = images.reduce((value, image, index) => value.replaceAll(imageMarker(index, image), ''), submittedText)
1891
+ const historyText = stripComposerImageMarkers(submittedText, images)
1816
1892
  .replace(/[ \t]{2,}/gu, ' ')
1817
1893
  .trim();
1818
1894
  if (historyText !== '' && this.#history[this.#history.length - 1] !== historyText) {
@@ -1830,6 +1906,9 @@ export class LocalTui {
1830
1906
  this.#settings = null;
1831
1907
  this.#copySelector = null;
1832
1908
  this.#followTail();
1909
+ // Image placeholders are TUI-owned. Mixed image+slash drafts stay a
1910
+ // submission so restore can keep the original markers; the runner strips
1911
+ // them only to detect and execute Harness commands.
1833
1912
  const slash = images.length === 0 ? parseSlashInput(submittedText) : null;
1834
1913
  if (slash !== null) {
1835
1914
  if (queueEditNewer !== null)
@@ -1856,7 +1935,7 @@ export class LocalTui {
1856
1935
  #submitInspect(text) {
1857
1936
  const images = this.#images.map(image => ({ ...image }));
1858
1937
  const submittedText = images.length > 0 ? text.trim() : text;
1859
- const historyText = images.reduce((value, image, index) => value.replaceAll(imageMarker(index, image), ''), submittedText)
1938
+ const historyText = stripComposerImageMarkers(submittedText, images)
1860
1939
  .replace(/[ \t]{2,}/gu, ' ')
1861
1940
  .trim();
1862
1941
  if (historyText !== '' && this.#history[this.#history.length - 1] !== historyText) {