Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/feature-map/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ this area is reached from inside it unless stated otherwise.
| Style Markdown While Typing | Draws `**bold**`, `*italic*`, `~~strikethrough~~` and `` `inline code` `` in the composer as you type, with the markers dimmed but still visible; the sent message is exactly the typed text. Spans come from `parseInlineMarkdown`, a small parser that follows the CommonMark emphasis rules for common cases; it is not the transcript's renderer, so an edge case can style differently from the sent bubble. A textarea cannot draw styled text, so turning this on also moves that user onto the Lexical composer; off by default, which keeps the plain textarea. No other call site passes `lexicalComposer`, so this setting is the only way users reach the Lexical composer: route editor parity reports to the Lexical migration, not to this feature | Settings → Chat → Composer → **Style Markdown While Typing** | `pages/settings/ChatPanel.tsx` (stored by `pages/chat/ChatSettings.tsx` under `mc-chat-config`, read by `hooks/useComposerInlineMarkdown.ts`), `components/ChatInput.tsx` (switches to Lexical), `components/LexicalComposerInput.tsx`, `components/InlineMarkdownPlugin.tsx`, `components/composerInlineMarkdown.ts` | client-only (no handler) | none |
| Share message as card | Turn an assistant reply into a branded PNG card + prefilled caption for X/LinkedIn; governed by `capabilities.social_share` (a policy pin withdraws the entry) | Message hover → More actions → Share as image | `pages/chat/share/ShareMessageModal.tsx`, `pages/chat/share/ShareCard.tsx` (helpers: `pages/chat/share/shareSupport.ts`) | `dashboard/social_share.py` (governance probe; card itself is client-side) | `GET /api/dashboard/config` (`social_share_enabled`) |
| Fork a session | Branch a new slot from an existing transcript; an incognito or temporary session forks into a child of the same memory mode. The child opens titled `↳ Fork of <parent>` (`↳ Tail of <parent>` for a tail fork) and, unless the parent carries a manual name, is renamed once in the background from the latest question a person typed into the copy, keeping the `↳ ` marker | Session row menu → Fork | `pages/chat-sidebar/SessionRow.tsx` | `chat_fork.py` | `POST /api/chat/slots/{slot}/fork` |
| Resume all interrupted sessions | One press runs the composer's Resume on every idle session whose last turn ended without a reply (the same transcript scan that flags a sidebar row as interrupted). The server continues them all at once, its cold-start queue pacing the agent starts, and honours every per-slot Continue refusal (a turn that finished meanwhile, queued message, pending approval, running sub-agents, repeated start failure) by reporting it instead of aborting. With the Crew Mode preview on, a worker whose root is listed is left out of both the count and the run, as the sidebar leaves it out of the list. The press answers at once and the run continues in the gateway: the row stays pending until the outcome (what resumed and what did not) arrives, and a press while a run is going says one is already running. Owner-only: app tokens and non-owner dashboard sessions are refused before any turn is dispatched. The row disappears when nothing is interrupted | Chats sidebar, search dock shelf -- a status row with the interrupted count and a **Resume N sessions** action, shown only while there is something to resume | `pages/chat-sidebar/resumeAll.tsx` (composed by `pages/chat-sidebar/SearchDock.tsx`) | `chat_resume_all.py` | `POST /api/chat/slots/resume-all` |
| Rewind | Drop the transcript back to an earlier turn | Hover a user message → **More actions** → **Edit & Resend** (or the pencil button where the row has no More menu) → edit → **Send**, which replaces the replies below; an assistant reply has no Rewind action | `pages/chat/UserMessage.tsx`, `pages/ChatPage.tsx` (`handleEditResend`, in `pages/chat/page/messageActions.ts`) | `chat_rewind.py` | `POST /api/chat/slots/{slot}/rewind` |
| Session environment | Runs a chat's workspace tools in a saved Coder workspace, Fly.io sprite or boxd machine; after the first message the chip is a fixed status with a health card, and the Files and terminal views act on the workspace (feature preview) | Composer → environment chip | `components/SessionEnvironmentChip.tsx`, `pages/chat/RemoteFilesPanel.tsx` | `handlers/session_environments.py` | `GET,PUT /api/chat/slots/{slot}/environment`, `GET /api/chat/slots/{slot}/environment/browse` |
| Regenerate / variants | Re-run a turn, keep and switch between answers | Message action → Regenerate | `pages/chat/AssistantMessage.tsx` | `chat_regenerate.py` | `POST /api/chat/slots/{slot}/regenerate`, `.../switch-variant`, `.../edit-resend` |
Expand Down
2 changes: 1 addition & 1 deletion docs/system-specs/modules/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -723,7 +723,7 @@ order, and pins that no owner imports the facade:
| `listLanes.tsx`, `boardLane.tsx`, `columnDragFeedback.ts` | the conductor, flat and tree lanes, with the drag overlay and chat-pane drop target the flat and tree lanes share (the conductor lane has no drag and drop); the tag-column board with its column headers, filter popover, card drop, column folder blocks and unfile strip; and what a column reorder shows while a header grip is dragged: the whole column is the drag image, the dragged column dims, and the column under the pointer draws an accent bar on the side the dragged column takes on release (data attributes on the columns rather than shell state, because `dragover` repeats many times a second) |
| `SidebarHeader.tsx`, `SearchDock.tsx` | the header (list menu and split New button); the dock over the lanes: its field (the search row's lane toggle and sort and filter menu, with the filter and sort label tables) and its shelf (the active filter chips and the list-level notices) |
| `HistoryPane.tsx`, `folderModal.tsx` | the Older Sessions splitter, footer and pane; the one folder create / settings modal |
| `sessionCleanup.tsx`, `bulkModelSwitch.tsx` | the cleanup panel (`useSessionCleanup`: window, dry-run preview, archive write) and the model switch panel (`useBulkModelSwitch`: pick, roster, skip-running, switch write) |
| `sessionCleanup.tsx`, `bulkModelSwitch.tsx`, `resumeAll.tsx` | the cleanup panel (`useSessionCleanup`: window, dry-run preview, archive write), the model switch panel (`useBulkModelSwitch`: pick, roster, skip-running, switch write), and the Resume-all row the dock's shelf leads with (`useResumeAll`: the interrupted idle count read from the rows' own `interrupted` field, the one `POST /api/chat/slots/resume-all` write, which answers at once while the gateway runs the resumes, the pending state until the run's `resume_all_done` frame, the outcome line it then shows for a few seconds; `renderResumeAllRow`) |
| `chrome.tsx` | the sidebar's shared drawing atoms, used by the row and the render owners: the open-in-tab click predicate, `DisclosureChevron` (the sidebar's one disclosure grammar), the folder and divider chrome (the pinned-section divider, the folder body geometry and the text-control classes), and `dateSegment`, the date-segment label the flat lane and the Older Sessions pane head their groups with |
| `CrewGroups.tsx` | the per-machine group chrome: the `Local` header, each crew group's header, badge, offline note and tunnel-error notice, and the collapsed-crew set |
| `rows.ts` | the row model: the one declaration of every filter dimension and what each consumer derives from it (`filteredSlots`, `listNarrowed`, the reveal registry), the status-chip predicates and badge counts, the one lane order, the drag freeze, the split of the filtered rows between the `Local` lanes and the crew groups (each crew group's rows, the folder hide applied), the flat lane, the tree's ungrouped rows and per-folder rows, the board's pool (local rows the folder filter does not conceal), the dormant split's gates, and each rendered row's `SessionRowView` and window |
Expand Down
2 changes: 2 additions & 0 deletions src/kiro_crew/dashboard/chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
- chat_voice.py — TTS config + synthesis (optional)
- chat_slack.py — Slack link, handoff, channels
- chat_fork.py — fork session
- chat_resume_all.py — bulk Resume of every interrupted idle session
"""

from __future__ import annotations
Expand Down Expand Up @@ -128,6 +129,7 @@
api_chat_slot_regenerate,
api_chat_slot_switch_variant,
)
from kiro_crew.dashboard.chat_resume_all import api_chat_slots_resume_all # noqa: F401
from kiro_crew.dashboard.chat_rewind import api_chat_slot_rewind # noqa: F401
from kiro_crew.dashboard.chat_runner import ( # noqa: F401
_expand_prompt_mention,
Expand Down
Loading
Loading