my-pi-agent 0.1.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.
Files changed (141) hide show
  1. package/README.md +318 -0
  2. package/package.json +45 -0
  3. package/pyproject.toml +50 -0
  4. package/src/my_agent_core/__init__.py +123 -0
  5. package/src/my_agent_core/agent.py +441 -0
  6. package/src/my_agent_core/background.py +121 -0
  7. package/src/my_agent_core/context.py +505 -0
  8. package/src/my_agent_core/events.py +153 -0
  9. package/src/my_agent_core/extensions/__init__.py +9 -0
  10. package/src/my_agent_core/extensions/core.py +197 -0
  11. package/src/my_agent_core/hooks.py +130 -0
  12. package/src/my_agent_core/loop.py +709 -0
  13. package/src/my_agent_core/main.py +134 -0
  14. package/src/my_agent_core/memory.py +241 -0
  15. package/src/my_agent_core/message_queue.py +110 -0
  16. package/src/my_agent_core/plugins.py +212 -0
  17. package/src/my_agent_core/registry.py +186 -0
  18. package/src/my_agent_core/session/__init__.py +79 -0
  19. package/src/my_agent_core/session/entries.py +197 -0
  20. package/src/my_agent_core/session/jsonl.py +60 -0
  21. package/src/my_agent_core/session/memory.py +137 -0
  22. package/src/my_agent_core/session/session.py +400 -0
  23. package/src/my_agent_core/session/storage.py +245 -0
  24. package/src/my_agent_core/session/store.py +131 -0
  25. package/src/my_agent_core/session/tree.py +86 -0
  26. package/src/my_agent_core/skills.py +149 -0
  27. package/src/my_agent_core/subagent_tasks.py +170 -0
  28. package/src/my_agent_core/subagents.py +148 -0
  29. package/src/my_agent_core/task_store.py +248 -0
  30. package/src/my_agent_core/tool_history.py +189 -0
  31. package/src/my_agent_core/tools/__init__.py +5 -0
  32. package/src/my_agent_core/tools/builtin/__init__.py +5 -0
  33. package/src/my_agent_core/tools/builtin/task.py +30 -0
  34. package/src/my_agent_core/tools/builtin/task_tools.py +215 -0
  35. package/src/my_agent_core/tools/core.py +239 -0
  36. package/src/my_agent_llm/__init__.py +45 -0
  37. package/src/my_agent_llm/auth/__init__.py +46 -0
  38. package/src/my_agent_llm/auth/antigravity.py +209 -0
  39. package/src/my_agent_llm/auth/manager.py +259 -0
  40. package/src/my_agent_llm/auth/quota.py +56 -0
  41. package/src/my_agent_llm/auth/schema.py +94 -0
  42. package/src/my_agent_llm/client.py +116 -0
  43. package/src/my_agent_llm/config.py +17 -0
  44. package/src/my_agent_llm/events.py +84 -0
  45. package/src/my_agent_llm/models.py +195 -0
  46. package/src/my_agent_llm/providers/__init__.py +4 -0
  47. package/src/my_agent_llm/providers/_base.py +94 -0
  48. package/src/my_agent_llm/providers/anthropic.py +298 -0
  49. package/src/my_agent_llm/providers/antigravity.py +480 -0
  50. package/src/my_agent_llm/providers/deepseek.py +196 -0
  51. package/src/my_agent_llm/providers/openai.py +364 -0
  52. package/src/my_agent_llm/providers/registry.py +16 -0
  53. package/src/my_agent_llm/stream.py +218 -0
  54. package/src/my_coding_agent/__init__.py +66 -0
  55. package/src/my_coding_agent/agent.py +208 -0
  56. package/src/my_coding_agent/cli.py +78 -0
  57. package/src/my_coding_agent/file_reference.py +80 -0
  58. package/src/my_coding_agent/macro.py +408 -0
  59. package/src/my_coding_agent/mcp.py +243 -0
  60. package/src/my_coding_agent/mutation_queue.py +37 -0
  61. package/src/my_coding_agent/paths.py +119 -0
  62. package/src/my_coding_agent/permissions.py +84 -0
  63. package/src/my_coding_agent/prompt.py +54 -0
  64. package/src/my_coding_agent/rpc_server.py +2817 -0
  65. package/src/my_coding_agent/settings.py +126 -0
  66. package/src/my_coding_agent/tools/__init__.py +55 -0
  67. package/src/my_coding_agent/tools/base.py +58 -0
  68. package/src/my_coding_agent/tools/bash.py +206 -0
  69. package/src/my_coding_agent/tools/edit.py +226 -0
  70. package/src/my_coding_agent/tools/find.py +118 -0
  71. package/src/my_coding_agent/tools/grep.py +177 -0
  72. package/src/my_coding_agent/tools/ls.py +112 -0
  73. package/src/my_coding_agent/tools/read.py +113 -0
  74. package/src/my_coding_agent/tools/write.py +72 -0
  75. package/tui/README.md +27 -0
  76. package/tui/bin/my-agent.js +98 -0
  77. package/tui/dist/app.d.ts +41 -0
  78. package/tui/dist/app.js +110 -0
  79. package/tui/dist/bridge/event-translator.d.ts +92 -0
  80. package/tui/dist/bridge/event-translator.js +216 -0
  81. package/tui/dist/bridge/kernel-bridge.d.ts +48 -0
  82. package/tui/dist/bridge/kernel-bridge.js +132 -0
  83. package/tui/dist/client.d.ts +63 -0
  84. package/tui/dist/client.js +239 -0
  85. package/tui/dist/components/assistant-message.d.ts +19 -0
  86. package/tui/dist/components/assistant-message.js +90 -0
  87. package/tui/dist/components/compaction-summary-message.d.ts +19 -0
  88. package/tui/dist/components/compaction-summary-message.js +46 -0
  89. package/tui/dist/components/custom-editor.d.ts +18 -0
  90. package/tui/dist/components/custom-editor.js +56 -0
  91. package/tui/dist/components/dynamic-border.d.ts +9 -0
  92. package/tui/dist/components/dynamic-border.js +14 -0
  93. package/tui/dist/components/footer.d.ts +39 -0
  94. package/tui/dist/components/footer.js +199 -0
  95. package/tui/dist/components/header.d.ts +4 -0
  96. package/tui/dist/components/header.js +21 -0
  97. package/tui/dist/components/keys.d.ts +5 -0
  98. package/tui/dist/components/keys.js +12 -0
  99. package/tui/dist/components/login-selector.d.ts +26 -0
  100. package/tui/dist/components/login-selector.js +181 -0
  101. package/tui/dist/components/logout-selector.d.ts +19 -0
  102. package/tui/dist/components/logout-selector.js +88 -0
  103. package/tui/dist/components/model-selector.d.ts +40 -0
  104. package/tui/dist/components/model-selector.js +268 -0
  105. package/tui/dist/components/session-selector.d.ts +54 -0
  106. package/tui/dist/components/session-selector.js +393 -0
  107. package/tui/dist/components/settings-selector.d.ts +24 -0
  108. package/tui/dist/components/settings-selector.js +146 -0
  109. package/tui/dist/components/status-indicator.d.ts +25 -0
  110. package/tui/dist/components/status-indicator.js +60 -0
  111. package/tui/dist/components/theme-selector.d.ts +14 -0
  112. package/tui/dist/components/theme-selector.js +77 -0
  113. package/tui/dist/components/thinking-selector.d.ts +21 -0
  114. package/tui/dist/components/thinking-selector.js +128 -0
  115. package/tui/dist/components/tool-execution.d.ts +31 -0
  116. package/tui/dist/components/tool-execution.js +206 -0
  117. package/tui/dist/components/tree-selector.d.ts +40 -0
  118. package/tui/dist/components/tree-selector.js +173 -0
  119. package/tui/dist/components/user-message-selector.d.ts +21 -0
  120. package/tui/dist/components/user-message-selector.js +103 -0
  121. package/tui/dist/components/user-message.d.ts +5 -0
  122. package/tui/dist/components/user-message.js +15 -0
  123. package/tui/dist/index.d.ts +11 -0
  124. package/tui/dist/index.js +11 -0
  125. package/tui/dist/interactive/chat-viewport.d.ts +19 -0
  126. package/tui/dist/interactive/chat-viewport.js +41 -0
  127. package/tui/dist/interactive/components.d.ts +1 -0
  128. package/tui/dist/interactive/components.js +1 -0
  129. package/tui/dist/interactive/interactive-mode.d.ts +89 -0
  130. package/tui/dist/interactive/interactive-mode.js +1625 -0
  131. package/tui/dist/interactive/theme.d.ts +1 -0
  132. package/tui/dist/interactive/theme.js +1 -0
  133. package/tui/dist/interactive/tui-renderer.d.ts +8 -0
  134. package/tui/dist/interactive/tui-renderer.js +10 -0
  135. package/tui/dist/protocol.d.ts +78 -0
  136. package/tui/dist/protocol.js +1 -0
  137. package/tui/dist/theme/dark.json +54 -0
  138. package/tui/dist/theme/light.json +71 -0
  139. package/tui/dist/theme/theme.d.ts +20 -0
  140. package/tui/dist/theme/theme.js +86 -0
  141. package/tui/package.json +25 -0
@@ -0,0 +1,21 @@
1
+ import { Container } from "@earendil-works/pi-tui";
2
+ export interface UserMessageItem {
3
+ id: string;
4
+ text: string;
5
+ }
6
+ export declare class UserMessageSelectorComponent extends Container {
7
+ readonly messages: UserMessageItem[];
8
+ readonly onSelect: (msg: UserMessageItem) => void;
9
+ readonly onCancel: () => void;
10
+ private listContainer;
11
+ private selectedIndex;
12
+ private maxVisible;
13
+ private lastWidth;
14
+ private _focused;
15
+ get focused(): boolean;
16
+ set focused(value: boolean);
17
+ constructor(messages: UserMessageItem[], onSelect: (msg: UserMessageItem) => void, onCancel: () => void, initialSelectedId?: string);
18
+ render(width: number): string[];
19
+ updateList(): void;
20
+ handleInput(data: string): void;
21
+ }
@@ -0,0 +1,103 @@
1
+ import { Container, matchesKey, Spacer, Text, visibleWidth, } from "@earendil-works/pi-tui";
2
+ import { theme } from "../theme/theme.js";
3
+ import { DynamicBorder } from "./dynamic-border.js";
4
+ import { isEnterKey } from "./keys.js";
5
+ export class UserMessageSelectorComponent extends Container {
6
+ messages;
7
+ onSelect;
8
+ onCancel;
9
+ listContainer;
10
+ selectedIndex = 0;
11
+ maxVisible = 10;
12
+ lastWidth = 80;
13
+ _focused = false;
14
+ get focused() {
15
+ return this._focused;
16
+ }
17
+ set focused(value) {
18
+ this._focused = value;
19
+ }
20
+ constructor(messages, onSelect, onCancel, initialSelectedId) {
21
+ super();
22
+ this.messages = messages;
23
+ this.onSelect = onSelect;
24
+ this.onCancel = onCancel;
25
+ this.listContainer = new Container();
26
+ this.addChild(new DynamicBorder());
27
+ this.addChild(new Spacer(1));
28
+ this.addChild(new Text(theme.bold("Fork Session from Previous Message"), 0, 0));
29
+ this.addChild(new Text(theme.fg("muted", "Enter: select message to branch from · Up/Down: navigate · Esc: cancel"), 0, 0));
30
+ this.addChild(new Spacer(1));
31
+ this.addChild(this.listContainer);
32
+ this.addChild(new Spacer(1));
33
+ this.addChild(new Text(theme.fg("dim", " Enter to branch into a new session · Escape to cancel"), 0, 0));
34
+ this.addChild(new DynamicBorder());
35
+ const initialIndex = initialSelectedId
36
+ ? messages.findIndex((m) => m.id === initialSelectedId)
37
+ : -1;
38
+ this.selectedIndex =
39
+ initialIndex >= 0 ? initialIndex : Math.max(0, this.messages.length - 1);
40
+ this.updateList();
41
+ }
42
+ render(width) {
43
+ this.lastWidth = width;
44
+ return super.render(width);
45
+ }
46
+ updateList() {
47
+ this.listContainer.clear();
48
+ if (this.messages.length === 0) {
49
+ this.listContainer.addChild(new Text(theme.fg("muted", " 当前会话暂无历史用户提问。"), 0, 0));
50
+ return;
51
+ }
52
+ const startIndex = Math.max(0, Math.min(this.selectedIndex - Math.floor(this.maxVisible / 2), this.messages.length - this.maxVisible));
53
+ const endIndex = Math.min(startIndex + this.maxVisible, this.messages.length);
54
+ for (let i = startIndex; i < endIndex; i++) {
55
+ const msg = this.messages[i];
56
+ if (!msg)
57
+ continue;
58
+ const isSelected = i === this.selectedIndex;
59
+ const cursor = isSelected ? theme.fg("accent", "› ") : " ";
60
+ const indexTag = theme.fg("muted", `[Message ${i + 1} of ${this.messages.length}]`);
61
+ const snippet = msg.text.replace(/[\n\r\t]/g, " ").trim();
62
+ const left = `${cursor}${indexTag} ${isSelected ? theme.bold(snippet) : snippet}`;
63
+ const pad = Math.max(2, this.lastWidth - 4 - visibleWidth(left));
64
+ let lineText = left + " ".repeat(pad);
65
+ if (isSelected) {
66
+ lineText = theme.bg("selectedBg", lineText);
67
+ }
68
+ this.listContainer.addChild(new Text(lineText, 0, 0));
69
+ }
70
+ if (startIndex > 0 || endIndex < this.messages.length) {
71
+ const scrollInfo = theme.fg("muted", ` (${this.selectedIndex + 1}/${this.messages.length})`);
72
+ this.listContainer.addChild(new Text(scrollInfo, 0, 0));
73
+ }
74
+ }
75
+ handleInput(data) {
76
+ if (matchesKey(data, "up")) {
77
+ if (this.messages.length === 0)
78
+ return;
79
+ this.selectedIndex =
80
+ this.selectedIndex === 0
81
+ ? this.messages.length - 1
82
+ : this.selectedIndex - 1;
83
+ this.updateList();
84
+ }
85
+ else if (matchesKey(data, "down")) {
86
+ if (this.messages.length === 0)
87
+ return;
88
+ this.selectedIndex =
89
+ this.selectedIndex === this.messages.length - 1
90
+ ? 0
91
+ : this.selectedIndex + 1;
92
+ this.updateList();
93
+ }
94
+ else if (isEnterKey(data)) {
95
+ const selected = this.messages[this.selectedIndex];
96
+ if (selected)
97
+ this.onSelect(selected);
98
+ }
99
+ else if (matchesKey(data, "escape") || matchesKey(data, "ctrl+c")) {
100
+ this.onCancel();
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,5 @@
1
+ import { Container } from "@earendil-works/pi-tui";
2
+ export declare class UserMessageComponent extends Container {
3
+ readonly text: string;
4
+ constructor(text: string);
5
+ }
@@ -0,0 +1,15 @@
1
+ import { Box, Container, Markdown } from "@earendil-works/pi-tui";
2
+ import { getMarkdownTheme, theme } from "../theme/theme.js";
3
+ export class UserMessageComponent extends Container {
4
+ text;
5
+ constructor(text) {
6
+ super();
7
+ this.text = text;
8
+ const box = new Box(1, 1, (content) => theme.bg("userMessageBg", content));
9
+ const md = new Markdown(text, 0, 0, getMarkdownTheme(), {
10
+ color: (content) => theme.fg("userMessageText", content),
11
+ });
12
+ box.addChild(md);
13
+ this.addChild(box);
14
+ }
15
+ }
@@ -0,0 +1,11 @@
1
+ export { AgentApp, type AppOptions, BUILTIN_SLASH_COMMANDS } from "./app.js";
2
+ export { InteractiveMode, type InteractiveModeOptions, } from "./interactive/interactive-mode.js";
3
+ export { KernelBridge } from "./bridge/kernel-bridge.js";
4
+ export { EventTranslator } from "./bridge/event-translator.js";
5
+ export { PythonKernelClient, type PythonKernelClientOptions, } from "./client.js";
6
+ export * from "./protocol.js";
7
+ export { theme, getMarkdownTheme } from "./theme/theme.js";
8
+ export { UserMessageComponent } from "./components/user-message.js";
9
+ export { AssistantMessageComponent } from "./components/assistant-message.js";
10
+ export { ToolExecutionComponent } from "./components/tool-execution.js";
11
+ export { FooterComponent, type FooterData } from "./components/footer.js";
@@ -0,0 +1,11 @@
1
+ export { AgentApp, BUILTIN_SLASH_COMMANDS } from "./app.js";
2
+ export { InteractiveMode, } from "./interactive/interactive-mode.js";
3
+ export { KernelBridge } from "./bridge/kernel-bridge.js";
4
+ export { EventTranslator } from "./bridge/event-translator.js";
5
+ export { PythonKernelClient, } from "./client.js";
6
+ export * from "./protocol.js";
7
+ export { theme, getMarkdownTheme } from "./theme/theme.js";
8
+ export { UserMessageComponent } from "./components/user-message.js";
9
+ export { AssistantMessageComponent } from "./components/assistant-message.js";
10
+ export { ToolExecutionComponent } from "./components/tool-execution.js";
11
+ export { FooterComponent } from "./components/footer.js";
@@ -0,0 +1,19 @@
1
+ import { type Component, ScrollView, type ScrollViewScrollbar } from "@earendil-works/pi-tui";
2
+ export interface ChatViewportOptions {
3
+ readonly document: Component;
4
+ readonly pendingMessages: Component;
5
+ readonly status: Component;
6
+ readonly editor: Component;
7
+ readonly footer: Component;
8
+ readonly widgetsAbove?: Component;
9
+ readonly widgetsBelow?: Component;
10
+ readonly scrollbar?: ScrollViewScrollbar;
11
+ readonly scrollbarTrackStyle?: (text: string) => string;
12
+ readonly scrollbarThumbStyle?: (text: string) => string;
13
+ }
14
+ export interface ChatViewport {
15
+ readonly root: Component;
16
+ readonly transcript: ScrollView;
17
+ }
18
+ /** Shared fullscreen transcript and fixed input-dock layout. */
19
+ export declare function createChatViewport(options: ChatViewportOptions): ChatViewport;
@@ -0,0 +1,41 @@
1
+ import { ScrollView, VStack, } from "@earendil-works/pi-tui";
2
+ /** Shared fullscreen transcript and fixed input-dock layout. */
3
+ export function createChatViewport(options) {
4
+ const transcript = new ScrollView(options.document, {
5
+ follow: "end",
6
+ primary: true,
7
+ overscroll: "chain",
8
+ scrollbar: options.scrollbar ?? "auto",
9
+ ...(options.scrollbarTrackStyle === undefined
10
+ ? {}
11
+ : { scrollbarTrackStyle: options.scrollbarTrackStyle }),
12
+ ...(options.scrollbarThumbStyle === undefined
13
+ ? {}
14
+ : { scrollbarThumbStyle: options.scrollbarThumbStyle }),
15
+ });
16
+ const dock = new VStack([
17
+ { component: options.pendingMessages, shrink: 1, minSize: 0 },
18
+ { component: options.status, shrink: 1, minSize: 0 },
19
+ ...(options.widgetsAbove === undefined
20
+ ? []
21
+ : [{ component: options.widgetsAbove, shrink: 1, minSize: 0 }]),
22
+ { component: options.editor, shrink: 1, minSize: 3 },
23
+ ...(options.widgetsBelow === undefined
24
+ ? []
25
+ : [{ component: options.widgetsBelow, shrink: 1, minSize: 0 }]),
26
+ { component: options.footer, shrink: 1, minSize: 1 },
27
+ ]);
28
+ return {
29
+ transcript,
30
+ root: new VStack([
31
+ { component: transcript, basis: 0, grow: 1, shrink: 1, minSize: 1 },
32
+ {
33
+ component: dock,
34
+ basis: "auto",
35
+ grow: 0,
36
+ shrink: 1,
37
+ minSize: 1,
38
+ },
39
+ ]),
40
+ };
41
+ }
@@ -0,0 +1 @@
1
+ export { ArminComponent, AssistantMessageComponent, BashExecutionComponent, BorderedLoader, BranchSummaryMessageComponent, CompactionSummaryMessageComponent, CustomEditor, CustomMessageComponent, DynamicBorder, ExtensionEditorComponent, ExtensionInputComponent, ExtensionSelectorComponent, FooterComponent, keyHint, keyText, LoginDialogComponent, ModelSelectorComponent, OAuthSelectorComponent, renderDiff, SessionSelectorComponent, SettingsSelectorComponent, ShowImagesSelectorComponent, SkillInvocationMessageComponent, ThemeSelectorComponent, ThinkingSelectorComponent, ToolExecutionComponent, TreeSelectorComponent, truncateToVisualLines, UserMessageComponent, UserMessageSelectorComponent, } from "@earendil-works/pi-coding-agent";
@@ -0,0 +1 @@
1
+ export { ArminComponent, AssistantMessageComponent, BashExecutionComponent, BorderedLoader, BranchSummaryMessageComponent, CompactionSummaryMessageComponent, CustomEditor, CustomMessageComponent, DynamicBorder, ExtensionEditorComponent, ExtensionInputComponent, ExtensionSelectorComponent, FooterComponent, keyHint, keyText, LoginDialogComponent, ModelSelectorComponent, OAuthSelectorComponent, renderDiff, SessionSelectorComponent, SettingsSelectorComponent, ShowImagesSelectorComponent, SkillInvocationMessageComponent, ThemeSelectorComponent, ThinkingSelectorComponent, ToolExecutionComponent, TreeSelectorComponent, truncateToVisualLines, UserMessageComponent, UserMessageSelectorComponent, } from "@earendil-works/pi-coding-agent";
@@ -0,0 +1,89 @@
1
+ import { type Component, Container, type SlashCommand, TuiMainScreen } from "@earendil-works/pi-tui";
2
+ import { KernelBridge } from "../bridge/kernel-bridge.js";
3
+ import { AssistantMessageComponent } from "../components/assistant-message.js";
4
+ import { CustomEditor } from "../components/custom-editor.js";
5
+ import { DynamicBorder } from "../components/dynamic-border.js";
6
+ import { FooterComponent } from "../components/footer.js";
7
+ import { HeaderComponent } from "../components/header.js";
8
+ import { ToolExecutionComponent } from "../components/tool-execution.js";
9
+ import { type InteractiveTuiOptions } from "./tui-renderer.js";
10
+ export interface InteractiveModeOptions extends InteractiveTuiOptions {
11
+ workspace?: string;
12
+ model?: string;
13
+ sessionName?: string;
14
+ thinking?: string;
15
+ noSession?: boolean;
16
+ continueSession?: boolean;
17
+ resume?: string | boolean;
18
+ }
19
+ export declare const BUILTIN_SLASH_COMMANDS: SlashCommand[];
20
+ export declare class InteractiveMode {
21
+ readonly bridge: KernelBridge;
22
+ readonly options: InteractiveModeOptions;
23
+ readonly ui: TuiMainScreen;
24
+ readonly chatContainer: Container;
25
+ readonly documentContainer: Container;
26
+ readonly pendingMessagesContainer: Container;
27
+ readonly statusContainer: Container;
28
+ readonly editorContainer: Container;
29
+ readonly defaultEditor: CustomEditor;
30
+ readonly footer: FooterComponent;
31
+ readonly header: HeaderComponent;
32
+ readonly dynamicBorder: DynamicBorder;
33
+ private activeSelectorToken?;
34
+ private activeSelectorDispose?;
35
+ activeSelectorComponent?: any;
36
+ currentStreamingAssistant?: AssistantMessageComponent;
37
+ latestAssistantMessage?: AssistantMessageComponent;
38
+ activeToolCalls: Map<string, ToolExecutionComponent>;
39
+ toolStartTimes: Map<string, number>;
40
+ transcriptScrollView?: any;
41
+ isStreaming: boolean;
42
+ isWorking: boolean;
43
+ currentThinkingLevel: string;
44
+ currentModelName: string;
45
+ workspace: string;
46
+ onExit?: () => Promise<void> | void;
47
+ private unsubscribeBridge?;
48
+ constructor(bridge: KernelBridge, options?: InteractiveModeOptions);
49
+ init(): Promise<void>;
50
+ start(): void;
51
+ stop(): void;
52
+ dispose(): void;
53
+ private subscribeToBridge;
54
+ handleAgentEvent(event: any): void;
55
+ updateFooterUsage(usage: Record<string, unknown>, contextWindow?: number): void;
56
+ private createEditor;
57
+ handleUserInput(input: string): Promise<void>;
58
+ handleExit(): Promise<void>;
59
+ private setupKeybindings;
60
+ showSelector(create: (done: () => void) => {
61
+ component: Component;
62
+ focus: Component;
63
+ dispose?: () => void;
64
+ }): void;
65
+ private disposeActiveSelector;
66
+ showModelSelector(initialSearch?: string): void;
67
+ showSessionSelector(): void;
68
+ getSupportedThinkingLevels(): string[];
69
+ updateEditorBorderColor(): void;
70
+ cycleThinkingLevel(): Promise<string | undefined>;
71
+ showThinkingSelector(): void;
72
+ showLoginSelector(): void;
73
+ showLogoutSelector(): void;
74
+ showThemeSelector(): void;
75
+ showTreeSelector(): void;
76
+ showForkSelector(): Promise<void>;
77
+ showSettingsSelector(): Promise<void>;
78
+ handleSlashCommand(input: string): Promise<void>;
79
+ private handleShellMacro;
80
+ renderSessionHistory(messages: any[], banner?: string): void;
81
+ private renderPiSessionStats;
82
+ private renderFallbackSessionStats;
83
+ appendSystemNotice(text: string): void;
84
+ appendErrorMessage(text: string): void;
85
+ private activeStatusIndicator;
86
+ showWorkingStatusIndicator(message?: string): void;
87
+ private updateStatusDisplay;
88
+ clearStatusDisplay(): void;
89
+ }