Auto-threading, history pagination, streaming toggle + tool/reasoning display settings
- Auto-threading (Telegram topic-mode workflow): message.send {auto_thread}
mints a fresh AI-named thread (instant derived title, LLM upgrade via
channel.renamed); channel.created {auto:true}; the app jumps into the new
thread and relocates the optimistic pending bubble.
- history frame: paged full message history for initial channel open /
scroll-up pagination (reconstructed from the outbox log).
- Streaming on/off: gateway side (display.platforms.android.streaming) plus a
per-device app toggle (Settings → Streaming); reasoning/model/tokens carried
on message frames.
- Context menu: long-press (touch) / right-click (desktop) thread affordances
via a KMP rightClick expect/actual.
- Settings → Reasoning: auto-collapse long reasoning blocks (default on).
- Tool detail: the gateway now always supplies full tool data — it forces
verbose tool progress (full args → tool.start.args) and captures each
completed call via the post_tool_call hook (output/duration/ok → tool.end).
The app reveals the full call + output on expand (Truncated) and
auto-expands cards in Everything mode.
This commit is contained in:
1 parent
1d67de5f12
commit
60ec2b44a7
24 files changed
+1115
-81
No files matched your search
+32
-3
@@ -93,18 +93,35 @@ app/shared/src/
|
||||
clarifies) render as **native pickers** from `picker.*` frames (a dialog /
|
||||
sheet with the options; answer via `picker.select`).
|
||||
|
||||
### Streaming (app-controlled)
|
||||
- **Settings → "Streaming"** toggle (default on). When off, the app ignores
|
||||
`message.start`/`message.update` frames and shows each reply as a single
|
||||
final message on `message.stop` (the typing indicator covers the wait).
|
||||
Per-device display preference — the gateway keeps streaming for other
|
||||
devices (see `05-streaming.md` §5.1).
|
||||
|
||||
### Tool output (app-controlled verbosity)
|
||||
- `ToolCard` renders `tool.start/progress/end` frames.
|
||||
- The gateway always supplies the **full** tool data: it forces
|
||||
`display.platforms.android.tool_progress: verbose` (so the progress line
|
||||
carries the full args JSON → `tool.start.args`) and captures each completed
|
||||
call via the `post_tool_call` hook (→ `tool.end` `output_preview` /
|
||||
`duration` / `ok`). The app decides how much to show.
|
||||
- **Settings → "Tool detail": Everything / Truncated / Nothing.**
|
||||
- Everything: name + full args (collapsible) + output preview.
|
||||
- Truncated (default): `emoji name: "short preview"` one-liner, expandable.
|
||||
- Nothing: suppress tool frames.
|
||||
- Everything: cards start expanded — name + full args + output.
|
||||
- Truncated (default): compact one-liner; tap a card to reveal the full
|
||||
args + output (what was actually called).
|
||||
- Nothing: suppress tool cards.
|
||||
- Spinner while running; ✓/✗ + duration on `tool.end`.
|
||||
|
||||
### Reasoning before message
|
||||
- `ReasoningBlock` (collapsible, "💭 Reasoning" header, monospace body, **copy**
|
||||
button) rendered **above** the message body from the `reasoning` field.
|
||||
Matches the reference screenshot.
|
||||
- **Settings → "Reasoning"** toggle (default on): auto-collapse — long
|
||||
reasoning blocks start collapsed, short ones expanded. Off: all reasoning
|
||||
blocks start expanded. Per-device display preference; the per-block
|
||||
tap-to-toggle always works.
|
||||
|
||||
### Intermediate messages
|
||||
- `commentary` frames → dimmed/smaller bubble, distinct from final answers.
|
||||
@@ -122,8 +139,20 @@ app/shared/src/
|
||||
highlight bar) — matches the reference left sidebar.
|
||||
- **Thread toggle** in the default chat header: "Threads on/off". On → topic
|
||||
switcher above the message list (each topic = a `thread_id`).
|
||||
- **Auto-threading** (Threads on, Telegram topic-mode workflow,
|
||||
`06-channels-cron-search.md` §6.3.1): a message sent in a channel's flat
|
||||
lane goes out as `message.send {auto_thread:true}`; the gateway mints a
|
||||
fresh thread (instant derived name, AI-named a moment later via
|
||||
`channel.renamed`) and the app jumps into it, relocating the optimistic
|
||||
bubble from the flat lane.
|
||||
- **New channel** (FAB / channel-list menu) → `channel.create` → appears in list;
|
||||
menu offers "Set as cron target".
|
||||
- **Topic context menu** — long-press a topic chip (touch) or right-click it
|
||||
(desktop mouse) → "Rename" / "Delete". Rename → `channel.rename` (prefilled
|
||||
dialog); Delete → confirm → `channel.delete` (soft-delete; the thread leaves
|
||||
the switcher and, if it was the open lane, the app falls back to the channel's
|
||||
flat lane). The right-click handler is a skiko `expect`/`actual`
|
||||
(`iris/ui/ContextMenu.kt`); on touch it is a no-op (long-press covers it).
|
||||
|
||||
### Search
|
||||
- Search bar (chat header or top) with a **scope toggle**: "Search everywhere" /
|
||||
|
||||
Reference in new issue
Block a user