@sayknow-cli/coding-agent 0.6.3 → 0.6.5

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 (81) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/README.md +2 -2
  3. package/dist/types/config/keybindings.d.ts +1 -1
  4. package/dist/types/config/settings-schema.d.ts +7 -3
  5. package/dist/types/i18n/messages/en.d.ts +16 -0
  6. package/dist/types/modes/components/session-selector.d.ts +7 -3
  7. package/dist/types/modes/components/sessions-dashboard.d.ts +2 -1
  8. package/dist/types/modes/components/user-message-selector.d.ts +5 -2
  9. package/dist/types/modes/components/user-message.d.ts +3 -1
  10. package/dist/types/modes/components/welcome.d.ts +49 -6
  11. package/dist/types/modes/controllers/command-controller.d.ts +1 -1
  12. package/dist/types/modes/controllers/selector-controller.d.ts +5 -0
  13. package/dist/types/modes/interactive-mode.d.ts +7 -1
  14. package/dist/types/modes/theme/defaults/index.d.ts +342 -0
  15. package/dist/types/modes/theme/theme.d.ts +5 -1
  16. package/dist/types/modes/types.d.ts +1 -1
  17. package/dist/types/session/session-manager.d.ts +9 -0
  18. package/dist/types/session/session-stars.d.ts +15 -0
  19. package/dist/types/tui/output-block.d.ts +12 -1
  20. package/dist/types/tui/utils.d.ts +1 -3
  21. package/dist/types/utils/session-title-generation.d.ts +6 -0
  22. package/dist/types/utils/title-generator.d.ts +11 -2
  23. package/package.json +7 -7
  24. package/scripts/generate-sdk-operation-inventory.ts +8 -0
  25. package/src/cli/session-picker.ts +4 -0
  26. package/src/config/keybindings.ts +1 -1
  27. package/src/config/settings-schema.ts +4 -3
  28. package/src/i18n/messages/de.messages.ts +4 -1
  29. package/src/i18n/messages/de.settings.ts +2 -0
  30. package/src/i18n/messages/de.ts +16 -0
  31. package/src/i18n/messages/en.ts +16 -0
  32. package/src/i18n/messages/es.messages.ts +4 -1
  33. package/src/i18n/messages/es.settings.ts +2 -0
  34. package/src/i18n/messages/es.ts +16 -0
  35. package/src/i18n/messages/fr.messages.ts +4 -1
  36. package/src/i18n/messages/fr.settings.ts +2 -0
  37. package/src/i18n/messages/fr.ts +16 -0
  38. package/src/i18n/messages/ja.messages.ts +4 -1
  39. package/src/i18n/messages/ja.settings.ts +2 -0
  40. package/src/i18n/messages/ja.ts +16 -0
  41. package/src/i18n/messages/ko.messages.ts +4 -1
  42. package/src/i18n/messages/ko.settings.ts +2 -0
  43. package/src/i18n/messages/ko.ts +16 -0
  44. package/src/i18n/messages/zh.messages.ts +2 -1
  45. package/src/i18n/messages/zh.settings.ts +2 -0
  46. package/src/i18n/messages/zh.ts +16 -0
  47. package/src/internal-urls/docs-index.generated.ts +10 -10
  48. package/src/lsp/render.ts +0 -1
  49. package/src/modes/components/session-selector.ts +71 -21
  50. package/src/modes/components/sessions-dashboard.ts +8 -5
  51. package/src/modes/components/settings-selector.ts +1 -0
  52. package/src/modes/components/status-line/presets.ts +5 -5
  53. package/src/modes/components/status-line/separators.ts +4 -0
  54. package/src/modes/components/tool-execution.ts +6 -19
  55. package/src/modes/components/tool-status-header.ts +103 -12
  56. package/src/modes/components/user-message-selector.ts +57 -15
  57. package/src/modes/components/user-message.ts +25 -15
  58. package/src/modes/components/welcome.ts +374 -478
  59. package/src/modes/controllers/command-controller.ts +56 -7
  60. package/src/modes/controllers/input-controller.ts +4 -0
  61. package/src/modes/controllers/selector-controller.ts +91 -10
  62. package/src/modes/interactive-mode.ts +101 -12
  63. package/src/modes/theme/defaults/glow-octopus.json +114 -0
  64. package/src/modes/theme/defaults/index.ts +6 -0
  65. package/src/modes/theme/defaults/ink-octopus.json +114 -0
  66. package/src/modes/theme/defaults/violet-octopus.json +114 -0
  67. package/src/modes/theme/theme.ts +18 -2
  68. package/src/modes/types.ts +1 -1
  69. package/src/prompts/system/title-system.md +1 -1
  70. package/src/sdk/protocol/operation-inventory.generated.json +40 -0
  71. package/src/session/agent-session.ts +12 -0
  72. package/src/session/internal/managed-session-scope.ts +10 -0
  73. package/src/session/session-manager.ts +26 -1
  74. package/src/session/session-stars.ts +104 -0
  75. package/src/slash-commands/builtin-registry.ts +104 -4
  76. package/src/tools/debug.ts +0 -1
  77. package/src/tools/fetch.ts +0 -1
  78. package/src/tui/output-block.ts +29 -61
  79. package/src/tui/utils.ts +1 -8
  80. package/src/utils/session-title-generation.ts +29 -0
  81. package/src/utils/title-generator.ts +46 -2
package/CHANGELOG.md CHANGED
@@ -2,7 +2,31 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
- ## [0.6.3] - 2026-09-25
5
+ ## [0.6.5] - 2026-09-26
6
+
7
+ ### Added
8
+
9
+ - Three more bundled dark octopus themes, selectable from Settings or `/theme`: `ink-octopus` (warm graphite, paper text, one amber accent), `glow-octopus` (teal-black with bioluminescent green and a violet secondary), and `violet-octopus` (plum-dark with lavender and an apricot secondary).
10
+ - `alt+r` opens the resume picker (`app.session.resume` had no default key, so the picker was reachable only through `/resume` or the command palette). The launch screen's session heading names the key.
11
+ - Starred sessions. `/star` and `/unstar` mark the current session, and Ctrl+S stars or unstars the selected session in the resume picker (`alt+r`). Starred sessions (`★`) are listed first in the picker and the `/sessions` dashboard. Stars live in `~/.skc/agent/session-stars.json`, not in transcripts, and never change `--continue`, ID-prefix resolution, deletion, or retention. Adapted from upstream #5202 and #5545 (upstream stores stars as transcript header patches; this fork keeps them in a separate index so the transcript format and its bounded listing scan stay unchanged).
12
+ - `/fork` is back as a TUI command: pick an earlier prompt and continue from it in a new session. The original transcript is kept, and the selected prompt returns as an editable draft instead of being sent. It refuses to open for an unsaved session or while a response, compaction, or foreground command is running; a second Enter while the fork is in flight is ignored; a fork that fails before the new session exists leaves you in the old one, while one that fails after still moves you to the new session and says what failed. The prompt list fits the terminal height. Adapted from upstream #5515.
13
+ - `/rename` with no argument regenerates the session title from the conversation (the first message plus the latest five) instead of printing usage. A result that lands after a newer prompt or an explicit rename is discarded. `/rename <title>` is unchanged. Ported from upstream #5617.
14
+
15
+ ### Changed
16
+
17
+ - The default dark theme is now `ink-octopus` (octopus ink: warm graphite, paper text, one amber accent) instead of `blue-octopus`, which was color-for-color identical to upstream's `blue-crab`. The light default stays `blue-octopus`, and an explicit `theme.dark` setting still wins.
18
+ - The launch screen is now a borderless workspace ledger instead of a boxed wordmark. The left column shows what the session is about to run with: workspace path, branch with staged/unstaged/untracked counts, the last three commits, model and provider, reasoning level, active preset, the model bound to each role agent (executor, planner, critic, architect), and tooling (MCP connected/total, skill count, loaded instruction files, LSP status). Git counts, commits, and instruction files are probed after first paint and fill in as they settle. The right column keeps What's New, recent sessions, workflows, and keys. Below 100 columns the two columns stack. The launch screen stays short at every viewport height: three recent sessions (listed first, and first after the ledger when stacked) and three release notes; the full list is one `alt+r` away. Every fact is on screen from the first frame; the sub-second intro only lets color spread top to bottom and never blocks input. `startup.skipLogoAnimation` still disables it.
19
+ - The transcript and composer drop their filled cards for rails. A user prompt sits on the terminal background behind an accent `▌` rail instead of a labelled bubble; replayed prompts get a dim rail and a `replay` tag. Tool output hangs off a single `│` rail under its header (`├` marks a section such as Output) instead of a closed box on a tinted fill; the rail color alone carries running, success, and error. The composer is the same `▌` rail on every input row, colored by session accent, thinking level, or shell/python mode, instead of a rounded box with a `>` prompt; shell mode shows `shell` on the rail.
20
+ - The status line sits on the bare terminal with ` · ` between segments. The new `dot` separator is the default for `statusLine.separator` and every built-in preset that used `slash`; `slash` and the powerline styles stay selectable, and powerline still paints its arrows from `statusLineBg`.
21
+
22
+ ### Fixed
23
+
24
+ - A turn stopped by the repetition guard is no longer auto-retried. It carries no transport facts, so the session classified it as `unknown` and admitted a bounded retry that would re-trip the same loop and re-bill the full context. Ported from upstream #5627.
25
+ - The status-line usage segment shows only the active model's provider. It used to mix every cached usage report, so a Grok session could show leftover Claude 5h/7d windows, and with several Codex OAuth accounts the report order decided which account was shown. Codex now uses only the report that uniquely matches the OAuth account this session uses, and Grok's monthly credits are no longer drawn as a 7d window. Ported from upstream #5871 and the two status-line fixes before it.
26
+
27
+ ### Performance
28
+
29
+ - `/resume` no longer reads and hashes both transcripts for every (legacy session, v2 session) pair while deciding which legacy sessions are already migrated. A migration receipt names exactly one source and one destination, so a receipt for a different pair is now rejected on those fields before any file I/O. Unrelated transcripts are read once by the listing instead of once more per receipt probe; upstream measured `/resume` in a 589-session directory dropping from 10.4–12.3s to 6.2–7.2s. Ported from upstream #5856 (the `/model` half of that change targets code this fork does not have).
6
30
 
7
31
  ## [0.6.2] - 2026-09-24
8
32
 
package/README.md CHANGED
@@ -108,6 +108,6 @@ The agent supports three mutually-exclusive memory backends, selected via the `m
108
108
 
109
109
  Switching backends mid-session is honoured on the next system-prompt rebuild and the next `/memory` slash command. Existing users with `memories.enabled = true|false` are migrated to `memory.backend = "local"|"off"` exactly once on first launch.
110
110
 
111
- ## Blue-octopus TUI theme
111
+ ## Octopus TUI themes
112
112
 
113
- The interactive TUI defaults to the bundled `blue-octopus` cephalopod theme for both dark and light terminals, with the bundled `red-octopus` theme as a warm, high-contrast alternate and matching welcome/icon assets. Three additional bundled migration themes — `claude-code`, `codex`, and `opencode` — mirror the look of those tools for easy eye-migration and are selectable from Settings or `/theme`. Explicit user theme settings still win; set `theme.dark: red-octopus` and `theme.light: blue-octopus` in `~/.skc/agent/config.yml` to pin them.
113
+ The interactive TUI defaults to the bundled `ink-octopus` cephalopod theme on dark terminals and `blue-octopus` on light terminals, with `red-octopus` as a warm, high-contrast alternate and `glow-octopus` and `violet-octopus` as further dark palettes. Three additional bundled migration themes — `claude-code`, `codex`, and `opencode` — mirror the look of those tools for easy eye-migration and are selectable from Settings or `/theme`. Explicit user theme settings still win; set `theme.dark: red-octopus` and `theme.light: blue-octopus` in `~/.skc/agent/config.yml` to pin them.
@@ -164,7 +164,7 @@ export declare const KEYBINDINGS: {
164
164
  readonly description: "Branch from message";
165
165
  };
166
166
  readonly "app.session.resume": {
167
- readonly defaultKeys: [];
167
+ readonly defaultKeys: "alt+r";
168
168
  readonly description: "Resume session";
169
169
  };
170
170
  readonly "app.session.observe": {
@@ -444,7 +444,7 @@ export declare const SETTINGS_SCHEMA: {
444
444
  };
445
445
  readonly "theme.dark": {
446
446
  readonly type: "string";
447
- readonly default: "blue-octopus";
447
+ readonly default: "ink-octopus";
448
448
  readonly ui: {
449
449
  readonly tab: "appearance";
450
450
  readonly label: "Dark Theme";
@@ -601,13 +601,17 @@ export declare const SETTINGS_SCHEMA: {
601
601
  };
602
602
  readonly "statusLine.separator": {
603
603
  readonly type: "enum";
604
- readonly values: readonly ["powerline", "powerline-thin", "slash", "pipe", "block", "none", "ascii"];
605
- readonly default: "slash";
604
+ readonly values: readonly ["dot", "powerline", "powerline-thin", "slash", "pipe", "block", "none", "ascii"];
605
+ readonly default: "dot";
606
606
  readonly ui: {
607
607
  readonly tab: "appearance";
608
608
  readonly label: "Status Line Separator";
609
609
  readonly description: "Style of separators between segments";
610
610
  readonly options: readonly [{
611
+ readonly value: "dot";
612
+ readonly label: "Dot";
613
+ readonly description: "Middle dots on the bare terminal (SKC default)";
614
+ }, {
611
615
  readonly value: "powerline";
612
616
  readonly label: "Powerline";
613
617
  readonly description: "Solid arrows (Nerd Font)";
@@ -25,8 +25,24 @@ export declare const en: {
25
25
  readonly "welcome.noLsp": "No LSP servers";
26
26
  readonly "welcome.sessionTrail": "Session trail";
27
27
  readonly "welcome.noSessions": "No saved trails";
28
+ readonly "welcome.allSessions": "{key} all sessions";
28
29
  readonly "welcome.chooseModel": "choose a model";
29
30
  readonly "welcome.modelHint": "ctrl+l to pick · / for commands";
31
+ readonly "welcome.label.workspace": "workspace";
32
+ readonly "welcome.label.branch": "branch";
33
+ readonly "welcome.label.commits": "commits";
34
+ readonly "welcome.label.model": "model";
35
+ readonly "welcome.label.reasoning": "reasoning";
36
+ readonly "welcome.label.preset": "preset";
37
+ readonly "welcome.label.roles": "roles";
38
+ readonly "welcome.label.tools": "tools";
39
+ readonly "welcome.noGit": "not a git repository";
40
+ readonly "welcome.rolesInherit": "roles follow the default model";
41
+ readonly "welcome.skills": "skills";
42
+ readonly "welcome.rules": "rules";
43
+ readonly "welcome.clean": "clean";
44
+ readonly "welcome.whatsNew": "What's new";
45
+ readonly "welcome.readyPrompt": "Ready for your next prompt";
30
46
  readonly "settings.tab.appearance": "Appearance";
31
47
  readonly "settings.tab.model": "Model";
32
48
  readonly "settings.tab.interaction": "Interaction";
@@ -1,5 +1,5 @@
1
1
  import { type Component, Container } from "@sayknow-cli/tui";
2
- import type { ResumeSessionIdentity, ResumeTailInspection, SessionInfo } from "../../session/session-manager";
2
+ import { type ResumeSessionIdentity, type ResumeTailInspection, type SessionInfo } from "../../session/session-manager";
3
3
  export interface SelectedSession {
4
4
  kind: "selected";
5
5
  path: string;
@@ -19,14 +19,17 @@ declare class SessionList implements Component {
19
19
  onCancel?: () => void;
20
20
  onExit: () => void;
21
21
  onDeleteRequest?: (session: SessionInfo) => void;
22
+ onToggleStarRequest?: (session: SessionInfo) => void;
22
23
  constructor(allSessions: SessionInfo[], showCwd?: boolean);
23
24
  setInputFrozen(frozen: boolean): void;
24
25
  removeSession(sessionPath: string): void;
26
+ /** Apply a persisted star change and keep the cursor on the same session as it moves. */
27
+ setSessionStarred(sessionPath: string, starred: boolean): void;
25
28
  invalidate(): void;
26
29
  render(width: number): string[];
27
30
  handleInput(keyData: string): void;
28
31
  }
29
- /** A one-shot resume consent selector. It never opens or mutates sessions. */
32
+ /** A one-shot resume consent selector with host-owned deletion and star persistence. It never opens sessions. */
30
33
  export declare class SessionSelectorComponent extends Container {
31
34
  #private;
32
35
  private readonly onSelect;
@@ -35,7 +38,8 @@ export declare class SessionSelectorComponent extends Container {
35
38
  private readonly onDelete?;
36
39
  private readonly inspector?;
37
40
  private readonly onSelection?;
38
- constructor(sessions: SessionInfo[], onSelect: (sessionPath: string) => void, onCancel: () => void, onExit: () => void, onDelete?: ((session: SessionInfo) => Promise<boolean>) | undefined, inspector?: SessionInspector | undefined, onSelection?: ((selection: SessionSelectionResult) => void) | undefined);
41
+ private readonly onSetStarred?;
42
+ constructor(sessions: SessionInfo[], onSelect: (sessionPath: string) => void, onCancel: () => void, onExit: () => void, onDelete?: ((session: SessionInfo) => Promise<boolean>) | undefined, inspector?: SessionInspector | undefined, onSelection?: ((selection: SessionSelectionResult) => void) | undefined, onSetStarred?: ((session: SessionInfo, starred: boolean) => Promise<void>) | undefined);
39
43
  setOnRequestRender(callback: () => void): void;
40
44
  handleInput(keyData: string): void;
41
45
  getSessionList(): SessionList;
@@ -1,10 +1,11 @@
1
1
  import { Container } from "@sayknow-cli/tui";
2
- import type { SessionInfo } from "../../session/session-manager";
2
+ import { type SessionInfo } from "../../session/session-manager";
3
3
  export type SessionLiveness = "active" | "stale" | "unknown";
4
4
  export interface DashboardSession {
5
5
  id: string;
6
6
  cwd: string;
7
7
  title: string;
8
+ starred: boolean;
8
9
  modified: Date;
9
10
  messageCount: number;
10
11
  messageCountIsEstimate?: boolean;
@@ -13,16 +13,19 @@ declare class UserMessageList implements Component {
13
13
  onSelect?: (entryId: string) => void;
14
14
  onCancel?: () => void;
15
15
  constructor(messages: UserMessageItem[]);
16
+ setAvailableRows(rows: number): void;
16
17
  invalidate(): void;
17
18
  render(width: number): string[];
18
19
  handleInput(keyData: string): void;
19
20
  }
20
21
  /**
21
- * Component that renders a user message selector for branching
22
+ * Component that renders a prompt selector for creating a new session
22
23
  */
23
24
  export declare class UserMessageSelectorComponent extends Container {
24
25
  #private;
25
- constructor(messages: UserMessageItem[], onSelect: (entryId: string) => void, onCancel: () => void);
26
+ private readonly getViewportRows;
27
+ constructor(messages: UserMessageItem[], onSelect: (entryId: string) => void, onCancel: () => void, getViewportRows: () => number);
28
+ render(width: number): string[];
26
29
  getMessageList(): UserMessageList;
27
30
  }
28
31
  export {};
@@ -1,6 +1,8 @@
1
1
  import { Container } from "@sayknow-cli/tui";
2
2
  /**
3
- * Component that renders a user message
3
+ * Component that renders a user message: the prompt sits on the transcript
4
+ * background behind an accent rail instead of inside a filled bubble, so the
5
+ * user's turns read as margin notes rather than cards.
4
6
  */
5
7
  export declare class UserMessageComponent extends Container {
6
8
  #private;
@@ -1,3 +1,4 @@
1
+ import type { ThinkingLevel } from "@sayknow-cli/agent-core";
1
2
  import { type Component } from "@sayknow-cli/tui";
2
3
  import { type KeyDisplayContext } from "../../config/keybindings";
3
4
  export interface RecentSession {
@@ -9,6 +10,39 @@ export interface LspServerInfo {
9
10
  status: "idle" | "ready" | "error" | "connecting";
10
11
  fileTypes: string[];
11
12
  }
13
+ export interface WelcomeRoleBinding {
14
+ role: string;
15
+ model: string;
16
+ }
17
+ /**
18
+ * Workspace and runtime facts shown in the launch ledger. Every field is
19
+ * optional: the ledger renders what is known and fills the rest in as the
20
+ * asynchronous probes (git status, context files, MCP) settle.
21
+ */
22
+ export interface WelcomeSnapshot {
23
+ /** Display path of the project directory (already home-shortened). */
24
+ cwd?: string;
25
+ /** Current branch, `"detached"`, or `null` outside a git repository. */
26
+ branch?: string | null;
27
+ gitChanges?: {
28
+ staged: number;
29
+ unstaged: number;
30
+ untracked: number;
31
+ } | null;
32
+ /** Latest commits as `<short-sha> <subject>` onelines, newest first. */
33
+ recentCommits?: readonly string[];
34
+ thinkingLevel?: ThinkingLevel | string;
35
+ /** Display name of the active model preset. */
36
+ profile?: string;
37
+ roles?: readonly WelcomeRoleBinding[];
38
+ mcp?: {
39
+ connected: number;
40
+ total: number;
41
+ };
42
+ skills?: number;
43
+ /** Display names of the loaded project instruction files (AGENTS.md, …). */
44
+ contextFiles?: readonly string[];
45
+ }
12
46
  export type WelcomeLogoMode = "unicode" | "square" | "ascii";
13
47
  export interface WelcomeComponentOptions {
14
48
  getViewportRows?: () => number | undefined;
@@ -19,11 +53,17 @@ export interface WelcomeComponentOptions {
19
53
  buildLabel?: string;
20
54
  keyDisplayContext?: KeyDisplayContext;
21
55
  skipLogoAnimation?: boolean;
56
+ snapshot?: WelcomeSnapshot;
57
+ /** Key bound to the resume picker (`app.session.resume`); the sessions heading names it. */
58
+ resumeKey?: string;
22
59
  }
23
60
  /**
24
- * Sayknow-CLI launch surface: a blue-gradient SAYKNOW wordmark, compact
25
- * command affordances, and project signals — a distinct identity, not a
26
- * copy of another agent shell.
61
+ * Sayknow-CLI launch surface: an open, borderless ledger. The left column is
62
+ * the state of this workspace — path, branch, model, reasoning, preset, role
63
+ * agents, tooling — so the first screen answers "what am I about to run with".
64
+ * The right column carries activity: what changed, recent sessions, workflows
65
+ * and keys. No enclosing box and no hero wordmark: the octopus mark and the
66
+ * facts carry the identity.
27
67
  */
28
68
  export declare class WelcomeComponent implements Component {
29
69
  #private;
@@ -37,15 +77,18 @@ export declare class WelcomeComponent implements Component {
37
77
  constructor(version: string, modelName: string, providerName: string, recentSessions?: RecentSession[], lspServers?: LspServerInfo[], logoMode?: WelcomeLogoMode, options?: WelcomeComponentOptions);
38
78
  invalidate(): void;
39
79
  /**
40
- * Play a one-shot intro that sweeps the gradient through every phase
41
- * before settling on the resting frame. Safe to call multiple times —
42
- * subsequent calls reset and replay.
80
+ * Play a short one-shot reveal: sections appear top to bottom a few frames
81
+ * apart, each settling from dim into its colors. Launch happens once per
82
+ * session, so a sub-second reveal is affordable; it never blocks input.
83
+ * Safe to call multiple times — subsequent calls reset and replay.
43
84
  */
44
85
  playIntro(requestRender: () => void): void;
45
86
  dispose(): void;
46
87
  setModel(modelName: string, providerName: string): void;
47
88
  setRecentSessions(sessions: RecentSession[]): void;
48
89
  setLspServers(servers: LspServerInfo[]): void;
90
+ /** Merge newly probed workspace facts into the ledger. */
91
+ setSnapshot(patch: WelcomeSnapshot): void;
49
92
  render(termWidth: number): string[];
50
93
  }
51
94
  /** Resolve the intro cadence without making tests mutate global process state. */
@@ -29,7 +29,7 @@ export declare class CommandController {
29
29
  handleDropCommand(): Promise<boolean>;
30
30
  handleForkCommand(): Promise<void>;
31
31
  handleMoveCommand(targetPath: string): Promise<void>;
32
- handleRenameCommand(title: string): Promise<void>;
32
+ handleRenameCommand(title?: string): Promise<void>;
33
33
  handleBashCommand(command: string, excludeFromContext?: boolean): Promise<void>;
34
34
  handlePythonCommand(code: string, excludeFromContext?: boolean): Promise<void>;
35
35
  handleCompactCommand(customInstructions?: string): Promise<CompactionOutcome>;
@@ -116,6 +116,11 @@ export declare class SelectorController {
116
116
  temporaryOnly?: boolean;
117
117
  }): void;
118
118
  showPluginSelector(mode?: "install" | "uninstall"): Promise<void>;
119
+ /**
120
+ * Pick an earlier prompt and continue from it in a new session. The original
121
+ * transcript is kept; the selected prompt comes back as an editable draft,
122
+ * never auto-submitted.
123
+ */
119
124
  showUserMessageSelector(): void;
120
125
  showTreeSelector(): void;
121
126
  showSessionSelector(): Promise<void>;
@@ -41,6 +41,12 @@ export declare function getComposerPlaceholder(keybindings: Pick<KeybindingsMana
41
41
  readonly busyPromptMode: "steer" | "queue";
42
42
  }): string;
43
43
  export declare function getWelcomeTranscriptReservedRows(chatContainer: Container, width: number): number;
44
+ /**
45
+ * The composer is an open rail, not a box: every input row starts with the same
46
+ * rail glyph a submitted prompt keeps in the transcript, colored by the editor's
47
+ * border color (session accent, thinking level, shell/python mode).
48
+ */
49
+ export declare function configureDefaultComposerChrome(editor: CustomEditor): void;
44
50
  export type WelcomeBannerSettingMode = "auto" | "unicode" | "square" | "ascii";
45
51
  export declare function resolveWelcomeLogoMode(mode: WelcomeBannerSettingMode, env?: Record<string, string | undefined>, platform?: NodeJS.Platform): WelcomeLogoMode;
46
52
  /** Options for creating an InteractiveMode instance (for future API use) */
@@ -228,7 +234,7 @@ export declare class InteractiveMode implements InteractiveModeContext {
228
234
  handleDropCommand(): Promise<boolean>;
229
235
  handleForkCommand(): Promise<void>;
230
236
  handleMoveCommand(targetPath: string): Promise<void>;
231
- handleRenameCommand(title: string): Promise<void>;
237
+ handleRenameCommand(title?: string): Promise<void>;
232
238
  handleMemoryCommand(text: string): Promise<void>;
233
239
  handleSTTToggle(): Promise<void>;
234
240
  showDebugSelector(): void;