@sayknow-cli/coding-agent 0.6.4 → 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.
- package/CHANGELOG.md +25 -1
- package/README.md +2 -2
- package/dist/types/config/keybindings.d.ts +1 -1
- package/dist/types/config/settings-schema.d.ts +7 -3
- package/dist/types/i18n/messages/en.d.ts +16 -0
- package/dist/types/modes/components/session-selector.d.ts +7 -3
- package/dist/types/modes/components/sessions-dashboard.d.ts +2 -1
- package/dist/types/modes/components/user-message-selector.d.ts +5 -2
- package/dist/types/modes/components/user-message.d.ts +3 -1
- package/dist/types/modes/components/welcome.d.ts +49 -6
- package/dist/types/modes/controllers/command-controller.d.ts +1 -1
- package/dist/types/modes/controllers/selector-controller.d.ts +5 -0
- package/dist/types/modes/interactive-mode.d.ts +7 -1
- package/dist/types/modes/theme/defaults/index.d.ts +342 -0
- package/dist/types/modes/theme/theme.d.ts +5 -1
- package/dist/types/modes/types.d.ts +1 -1
- package/dist/types/session/session-manager.d.ts +9 -0
- package/dist/types/session/session-stars.d.ts +15 -0
- package/dist/types/tui/output-block.d.ts +12 -1
- package/dist/types/tui/utils.d.ts +1 -3
- package/dist/types/utils/session-title-generation.d.ts +6 -0
- package/dist/types/utils/title-generator.d.ts +11 -2
- package/package.json +7 -7
- package/scripts/generate-sdk-operation-inventory.ts +8 -0
- package/src/cli/session-picker.ts +4 -0
- package/src/config/keybindings.ts +1 -1
- package/src/config/settings-schema.ts +4 -3
- package/src/i18n/messages/de.messages.ts +4 -1
- package/src/i18n/messages/de.settings.ts +2 -0
- package/src/i18n/messages/de.ts +16 -0
- package/src/i18n/messages/en.ts +16 -0
- package/src/i18n/messages/es.messages.ts +4 -1
- package/src/i18n/messages/es.settings.ts +2 -0
- package/src/i18n/messages/es.ts +16 -0
- package/src/i18n/messages/fr.messages.ts +4 -1
- package/src/i18n/messages/fr.settings.ts +2 -0
- package/src/i18n/messages/fr.ts +16 -0
- package/src/i18n/messages/ja.messages.ts +4 -1
- package/src/i18n/messages/ja.settings.ts +2 -0
- package/src/i18n/messages/ja.ts +16 -0
- package/src/i18n/messages/ko.messages.ts +4 -1
- package/src/i18n/messages/ko.settings.ts +2 -0
- package/src/i18n/messages/ko.ts +16 -0
- package/src/i18n/messages/zh.messages.ts +2 -1
- package/src/i18n/messages/zh.settings.ts +2 -0
- package/src/i18n/messages/zh.ts +16 -0
- package/src/internal-urls/docs-index.generated.ts +10 -10
- package/src/lsp/render.ts +0 -1
- package/src/modes/components/session-selector.ts +71 -21
- package/src/modes/components/sessions-dashboard.ts +8 -5
- package/src/modes/components/settings-selector.ts +1 -0
- package/src/modes/components/status-line/presets.ts +5 -5
- package/src/modes/components/status-line/separators.ts +4 -0
- package/src/modes/components/tool-execution.ts +6 -19
- package/src/modes/components/tool-status-header.ts +103 -12
- package/src/modes/components/user-message-selector.ts +57 -15
- package/src/modes/components/user-message.ts +25 -15
- package/src/modes/components/welcome.ts +374 -478
- package/src/modes/controllers/command-controller.ts +56 -7
- package/src/modes/controllers/input-controller.ts +4 -0
- package/src/modes/controllers/selector-controller.ts +91 -10
- package/src/modes/interactive-mode.ts +101 -12
- package/src/modes/theme/defaults/glow-octopus.json +114 -0
- package/src/modes/theme/defaults/index.ts +6 -0
- package/src/modes/theme/defaults/ink-octopus.json +114 -0
- package/src/modes/theme/defaults/violet-octopus.json +114 -0
- package/src/modes/theme/theme.ts +18 -2
- package/src/modes/types.ts +1 -1
- package/src/prompts/system/title-system.md +1 -1
- package/src/sdk/protocol/operation-inventory.generated.json +40 -0
- package/src/session/agent-session.ts +12 -0
- package/src/session/internal/managed-session-scope.ts +10 -0
- package/src/session/session-manager.ts +26 -1
- package/src/session/session-stars.ts +104 -0
- package/src/slash-commands/builtin-registry.ts +104 -4
- package/src/tools/debug.ts +0 -1
- package/src/tools/fetch.ts +0 -1
- package/src/tui/output-block.ts +29 -61
- package/src/tui/utils.ts +1 -8
- package/src/utils/session-title-generation.ts +29 -0
- 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.
|
|
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
|
-
##
|
|
111
|
+
## Octopus TUI themes
|
|
112
112
|
|
|
113
|
-
The interactive TUI defaults to the bundled `
|
|
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: "
|
|
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: "
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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:
|
|
25
|
-
*
|
|
26
|
-
*
|
|
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
|
|
41
|
-
*
|
|
42
|
-
*
|
|
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
|
|
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
|
|
237
|
+
handleRenameCommand(title?: string): Promise<void>;
|
|
232
238
|
handleMemoryCommand(text: string): Promise<void>;
|
|
233
239
|
handleSTTToggle(): Promise<void>;
|
|
234
240
|
showDebugSelector(): void;
|