@zhijiewang/openharness 2.1.0 → 2.3.1
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/README.md +4 -4
- package/dist/DeferredTool.js +3 -1
- package/dist/Tool.d.ts +1 -1
- package/dist/agents/roles.js +58 -62
- package/dist/commands/cybergotchi.d.ts +1 -1
- package/dist/commands/cybergotchi.js +30 -30
- package/dist/commands/index.js +288 -132
- package/dist/components/App.d.ts +1 -1
- package/dist/components/App.js +6 -6
- package/dist/components/CompanionFooter.d.ts +1 -1
- package/dist/components/CompanionFooter.js +6 -8
- package/dist/components/CybergotchiBubble.js +5 -5
- package/dist/components/CybergotchiPanel.d.ts +1 -1
- package/dist/components/CybergotchiPanel.js +7 -7
- package/dist/components/CybergotchiPanelConnected.js +2 -2
- package/dist/components/CybergotchiSetup.js +26 -24
- package/dist/components/CybergotchiSprite.d.ts +1 -1
- package/dist/components/CybergotchiSprite.js +8 -12
- package/dist/components/DiffView.d.ts +1 -1
- package/dist/components/DiffView.js +10 -10
- package/dist/components/ErrorBoundary.d.ts +1 -1
- package/dist/components/ErrorBoundary.js +1 -1
- package/dist/components/InitWizard.js +65 -33
- package/dist/components/Markdown.js +2 -4
- package/dist/components/Messages.js +4 -4
- package/dist/components/PermissionPrompt.d.ts +1 -1
- package/dist/components/PermissionPrompt.js +15 -17
- package/dist/components/REPL.d.ts +1 -1
- package/dist/components/REPL.js +74 -49
- package/dist/components/Spinner.js +2 -2
- package/dist/components/TextInput.js +35 -29
- package/dist/components/ToolCallDisplay.js +3 -5
- package/dist/cybergotchi/bones.d.ts +1 -1
- package/dist/cybergotchi/bones.js +8 -8
- package/dist/cybergotchi/config.d.ts +2 -2
- package/dist/cybergotchi/config.js +13 -13
- package/dist/cybergotchi/events.d.ts +5 -5
- package/dist/cybergotchi/events.js +7 -7
- package/dist/cybergotchi/needs.d.ts +2 -2
- package/dist/cybergotchi/needs.js +7 -9
- package/dist/cybergotchi/personality.d.ts +2 -2
- package/dist/cybergotchi/personality.js +2 -2
- package/dist/cybergotchi/species.d.ts +1 -1
- package/dist/cybergotchi/species.js +145 -217
- package/dist/cybergotchi/speech.d.ts +2 -2
- package/dist/cybergotchi/speech.js +43 -43
- package/dist/cybergotchi/types.d.ts +4 -4
- package/dist/cybergotchi/types.js +26 -26
- package/dist/cybergotchi/useCybergotchi.d.ts +1 -1
- package/dist/cybergotchi/useCybergotchi.js +29 -25
- package/dist/git/index.js +11 -9
- package/dist/harness/checkpoints.js +29 -21
- package/dist/harness/config.d.ts +3 -3
- package/dist/harness/config.js +15 -9
- package/dist/harness/context-warning.d.ts +1 -1
- package/dist/harness/context-warning.js +1 -1
- package/dist/harness/cost.js +1 -1
- package/dist/harness/credentials.js +13 -13
- package/dist/harness/hooks.js +7 -5
- package/dist/harness/keybindings.js +20 -18
- package/dist/harness/marketplace.d.ts +3 -3
- package/dist/harness/marketplace.js +55 -42
- package/dist/harness/memory.d.ts +23 -5
- package/dist/harness/memory.js +142 -41
- package/dist/harness/onboarding.js +30 -10
- package/dist/harness/plugins.d.ts +9 -1
- package/dist/harness/plugins.js +54 -30
- package/dist/harness/rules.js +12 -7
- package/dist/harness/sandbox.js +15 -15
- package/dist/harness/session-db.d.ts +55 -0
- package/dist/harness/session-db.js +165 -0
- package/dist/harness/session.d.ts +1 -1
- package/dist/harness/session.js +34 -15
- package/dist/harness/store.d.ts +3 -3
- package/dist/harness/store.js +6 -4
- package/dist/harness/submit-handler.d.ts +4 -4
- package/dist/harness/submit-handler.js +25 -23
- package/dist/harness/telemetry.d.ts +1 -1
- package/dist/harness/telemetry.js +23 -19
- package/dist/harness/traces.d.ts +2 -2
- package/dist/harness/traces.js +39 -33
- package/dist/harness/verification.d.ts +1 -1
- package/dist/harness/verification.js +50 -44
- package/dist/lsp/client.js +44 -40
- package/dist/main.js +114 -59
- package/dist/mcp/DeferredMcpTool.d.ts +4 -4
- package/dist/mcp/DeferredMcpTool.js +9 -5
- package/dist/mcp/McpTool.d.ts +4 -4
- package/dist/mcp/McpTool.js +8 -4
- package/dist/mcp/client.d.ts +2 -2
- package/dist/mcp/client.js +21 -21
- package/dist/mcp/loader.d.ts +1 -1
- package/dist/mcp/loader.js +17 -12
- package/dist/mcp/registry.d.ts +3 -3
- package/dist/mcp/registry.js +97 -97
- package/dist/mcp/schema.d.ts +1 -1
- package/dist/mcp/schema.js +16 -16
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.js +21 -21
- package/dist/mcp/types.d.ts +3 -3
- package/dist/providers/anthropic.d.ts +2 -2
- package/dist/providers/anthropic.js +10 -9
- package/dist/providers/base.d.ts +1 -1
- package/dist/providers/index.js +10 -3
- package/dist/providers/llamacpp.d.ts +2 -2
- package/dist/providers/llamacpp.js +1 -3
- package/dist/providers/ollama.d.ts +2 -2
- package/dist/providers/ollama.js +3 -4
- package/dist/providers/openai.d.ts +2 -2
- package/dist/providers/openai.js +3 -5
- package/dist/providers/openrouter.d.ts +2 -2
- package/dist/providers/router.d.ts +1 -1
- package/dist/providers/router.js +7 -7
- package/dist/query/compress.d.ts +2 -2
- package/dist/query/compress.js +22 -21
- package/dist/query/context-manager.d.ts +1 -1
- package/dist/query/context-manager.js +5 -5
- package/dist/query/errors.js +1 -1
- package/dist/query/index.d.ts +1 -1
- package/dist/query/index.js +42 -24
- package/dist/query/tools.js +15 -12
- package/dist/query/types.d.ts +3 -1
- package/dist/query.d.ts +1 -1
- package/dist/query.js +1 -1
- package/dist/remote/auth.d.ts +2 -2
- package/dist/remote/auth.js +8 -8
- package/dist/remote/server.d.ts +3 -3
- package/dist/remote/server.js +60 -60
- package/dist/renderer/cells.js +9 -9
- package/dist/renderer/colors.js +24 -6
- package/dist/renderer/diff.d.ts +2 -2
- package/dist/renderer/diff.js +27 -19
- package/dist/renderer/differ.d.ts +1 -1
- package/dist/renderer/differ.js +9 -9
- package/dist/renderer/image.js +19 -19
- package/dist/renderer/index.d.ts +6 -6
- package/dist/renderer/index.js +163 -93
- package/dist/renderer/input.js +66 -48
- package/dist/renderer/layout.d.ts +6 -6
- package/dist/renderer/layout.js +163 -124
- package/dist/renderer/markdown.d.ts +2 -2
- package/dist/renderer/markdown.js +173 -54
- package/dist/renderer/session-browser.d.ts +2 -2
- package/dist/renderer/session-browser.js +19 -21
- package/dist/repl.d.ts +5 -5
- package/dist/repl.js +311 -198
- package/dist/sdk/index.d.ts +5 -5
- package/dist/sdk/index.js +32 -26
- package/dist/services/AgentDispatcher.d.ts +3 -3
- package/dist/services/AgentDispatcher.js +33 -29
- package/dist/services/CronExecutor.d.ts +4 -4
- package/dist/services/CronExecutor.js +12 -8
- package/dist/services/EvaluatorLoop.d.ts +3 -3
- package/dist/services/EvaluatorLoop.js +29 -21
- package/dist/services/MetaHarness.d.ts +1 -1
- package/dist/services/MetaHarness.js +34 -32
- package/dist/services/PipelineExecutor.d.ts +1 -1
- package/dist/services/PipelineExecutor.js +23 -25
- package/dist/services/SkillExtractor.d.ts +43 -0
- package/dist/services/SkillExtractor.js +163 -0
- package/dist/services/StreamingToolExecutor.d.ts +2 -2
- package/dist/services/StreamingToolExecutor.js +11 -7
- package/dist/services/a2a.d.ts +8 -8
- package/dist/services/a2a.js +44 -34
- package/dist/services/agent-messaging.d.ts +33 -15
- package/dist/services/agent-messaging.js +65 -13
- package/dist/services/cron.js +16 -16
- package/dist/tools/AgentTool/index.d.ts +5 -2
- package/dist/tools/AgentTool/index.js +25 -39
- package/dist/tools/AskUserTool/index.js +1 -1
- package/dist/tools/BashTool/index.d.ts +2 -2
- package/dist/tools/BashTool/index.js +18 -10
- package/dist/tools/CronTool/index.js +30 -12
- package/dist/tools/DiagnosticsTool/index.js +28 -22
- package/dist/tools/EnterPlanModeTool/index.js +93 -14
- package/dist/tools/EnterWorktreeTool/index.js +7 -3
- package/dist/tools/ExitPlanModeTool/index.d.ts +22 -1
- package/dist/tools/ExitPlanModeTool/index.js +20 -5
- package/dist/tools/ExitWorktreeTool/index.js +11 -4
- package/dist/tools/FileEditTool/index.js +3 -5
- package/dist/tools/FileReadTool/index.js +16 -10
- package/dist/tools/FileWriteTool/index.js +2 -2
- package/dist/tools/GlobTool/index.js +5 -9
- package/dist/tools/GrepTool/index.d.ts +2 -2
- package/dist/tools/GrepTool/index.js +14 -9
- package/dist/tools/ImageReadTool/index.js +2 -2
- package/dist/tools/KillProcessTool/index.js +11 -7
- package/dist/tools/LSTool/index.js +3 -3
- package/dist/tools/MemoryTool/index.d.ts +5 -5
- package/dist/tools/MemoryTool/index.js +28 -14
- package/dist/tools/MonitorTool/index.js +24 -19
- package/dist/tools/MultiEditTool/index.js +9 -5
- package/dist/tools/NotebookEditTool/index.js +3 -3
- package/dist/tools/ParallelAgentTool/index.d.ts +4 -4
- package/dist/tools/ParallelAgentTool/index.js +12 -6
- package/dist/tools/PipelineTool/index.js +3 -3
- package/dist/tools/PowerShellTool/index.js +10 -6
- package/dist/tools/RemoteTriggerTool/index.js +8 -4
- package/dist/tools/ScheduleWakeupTool/index.d.ts +42 -0
- package/dist/tools/ScheduleWakeupTool/index.js +115 -0
- package/dist/tools/SendMessageTool/index.js +25 -7
- package/dist/tools/SessionSearchTool/index.d.ts +15 -0
- package/dist/tools/SessionSearchTool/index.js +36 -0
- package/dist/tools/SkillTool/index.d.ts +3 -0
- package/dist/tools/SkillTool/index.js +39 -9
- package/dist/tools/TaskCreateTool/index.d.ts +2 -2
- package/dist/tools/TaskCreateTool/index.js +2 -2
- package/dist/tools/TaskGetTool/index.js +2 -2
- package/dist/tools/TaskListTool/index.js +3 -5
- package/dist/tools/TaskOutputTool/index.js +2 -2
- package/dist/tools/TaskStopTool/index.js +3 -3
- package/dist/tools/TaskUpdateTool/index.d.ts +4 -4
- package/dist/tools/TaskUpdateTool/index.js +2 -2
- package/dist/tools/ToolSearchTool/index.js +9 -6
- package/dist/tools/WebFetchTool/index.js +1 -1
- package/dist/tools/WebSearchTool/index.js +2 -6
- package/dist/tools.js +31 -30
- package/dist/types/permissions.js +15 -9
- package/dist/utils/bash-safety.d.ts +1 -1
- package/dist/utils/bash-safety.js +64 -54
- package/dist/utils/diff-algorithm.d.ts +3 -3
- package/dist/utils/diff-algorithm.js +7 -7
- package/dist/utils/fs.js +3 -3
- package/dist/utils/safe-env.js +1 -1
- package/dist/utils/theme-data.d.ts +1 -1
- package/dist/utils/theme-data.js +1 -1
- package/dist/utils/theme.d.ts +1 -1
- package/dist/utils/theme.js +1 -1
- package/dist/utils/tool-summary.d.ts +1 -1
- package/dist/utils/tool-summary.js +27 -9
- package/package.json +10 -3
package/dist/renderer/input.js
CHANGED
|
@@ -11,7 +11,7 @@ export function startRawInput(handler) {
|
|
|
11
11
|
process.stdin.setRawMode(true);
|
|
12
12
|
}
|
|
13
13
|
process.stdin.resume();
|
|
14
|
-
process.stdin.setEncoding(
|
|
14
|
+
process.stdin.setEncoding("utf8");
|
|
15
15
|
const onData = (data) => {
|
|
16
16
|
// Paste detection: multi-byte reads with newlines → treat newlines as insertable
|
|
17
17
|
const isPaste = data.length > 4;
|
|
@@ -19,17 +19,17 @@ export function startRawInput(handler) {
|
|
|
19
19
|
while (i < data.length) {
|
|
20
20
|
const result = parseKey(data, i);
|
|
21
21
|
// During paste, convert 'return' to 'newline' so they insert instead of submit
|
|
22
|
-
if (isPaste && result.event.name ===
|
|
23
|
-
result.event.name =
|
|
24
|
-
result.event.char =
|
|
22
|
+
if (isPaste && result.event.name === "return") {
|
|
23
|
+
result.event.name = "newline";
|
|
24
|
+
result.event.char = "\n";
|
|
25
25
|
}
|
|
26
26
|
handler(result.event);
|
|
27
27
|
i += result.consumed;
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
|
-
process.stdin.on(
|
|
30
|
+
process.stdin.on("data", onData);
|
|
31
31
|
return () => {
|
|
32
|
-
process.stdin.off(
|
|
32
|
+
process.stdin.off("data", onData);
|
|
33
33
|
if (process.stdin.setRawMode) {
|
|
34
34
|
process.stdin.setRawMode(wasRaw ?? false);
|
|
35
35
|
}
|
|
@@ -43,76 +43,94 @@ export function parseKey(data, offset) {
|
|
|
43
43
|
// ESC sequences
|
|
44
44
|
if (code === 0x1b) {
|
|
45
45
|
// Arrow keys: ESC [ A/B/C/D
|
|
46
|
-
if (seq.startsWith(
|
|
47
|
-
return { event: key(
|
|
48
|
-
if (seq.startsWith(
|
|
49
|
-
return { event: key(
|
|
50
|
-
if (seq.startsWith(
|
|
51
|
-
return { event: key(
|
|
52
|
-
if (seq.startsWith(
|
|
53
|
-
return { event: key(
|
|
46
|
+
if (seq.startsWith("\x1b[A"))
|
|
47
|
+
return { event: key("", "up", seq.slice(0, 3)), consumed: 3 };
|
|
48
|
+
if (seq.startsWith("\x1b[B"))
|
|
49
|
+
return { event: key("", "down", seq.slice(0, 3)), consumed: 3 };
|
|
50
|
+
if (seq.startsWith("\x1b[C"))
|
|
51
|
+
return { event: key("", "right", seq.slice(0, 3)), consumed: 3 };
|
|
52
|
+
if (seq.startsWith("\x1b[D"))
|
|
53
|
+
return { event: key("", "left", seq.slice(0, 3)), consumed: 3 };
|
|
54
54
|
// Home/End
|
|
55
|
-
if (seq.startsWith(
|
|
56
|
-
return { event: key(
|
|
57
|
-
if (seq.startsWith(
|
|
58
|
-
return { event: key(
|
|
55
|
+
if (seq.startsWith("\x1b[H"))
|
|
56
|
+
return { event: key("", "home", seq.slice(0, 3)), consumed: 3 };
|
|
57
|
+
if (seq.startsWith("\x1b[F"))
|
|
58
|
+
return { event: key("", "end", seq.slice(0, 3)), consumed: 3 };
|
|
59
59
|
// Delete: ESC [ 3 ~
|
|
60
|
-
if (seq.startsWith(
|
|
61
|
-
return { event: key(
|
|
60
|
+
if (seq.startsWith("\x1b[3~"))
|
|
61
|
+
return { event: key("", "delete", seq.slice(0, 4)), consumed: 4 };
|
|
62
62
|
// SGR mouse events: ESC [ < button ; col ; row M/m
|
|
63
|
-
if (seq.startsWith(
|
|
63
|
+
if (seq.startsWith("\x1b[<")) {
|
|
64
64
|
const endIdx = seq.search(/[Mm]/);
|
|
65
65
|
if (endIdx === -1) {
|
|
66
66
|
// Partial sequence — consume entire fragment to avoid junk
|
|
67
|
-
return { event: key(
|
|
67
|
+
return { event: key("", "mouse", seq), consumed: seq.length };
|
|
68
68
|
}
|
|
69
69
|
if (endIdx > 3) {
|
|
70
|
-
const params = seq.slice(3, endIdx).split(
|
|
71
|
-
const button = parseInt(params[0] ??
|
|
70
|
+
const params = seq.slice(3, endIdx).split(";");
|
|
71
|
+
const button = parseInt(params[0] ?? "0", 10);
|
|
72
72
|
const consumed = endIdx + 1;
|
|
73
73
|
// button 64 = scroll up, 65 = scroll down
|
|
74
74
|
if (button === 64)
|
|
75
|
-
return { event: key(
|
|
75
|
+
return { event: key("", "scrollup", seq.slice(0, consumed)), consumed };
|
|
76
76
|
if (button === 65)
|
|
77
|
-
return { event: key(
|
|
77
|
+
return { event: key("", "scrolldown", seq.slice(0, consumed)), consumed };
|
|
78
78
|
// Ignore other mouse events (clicks, moves)
|
|
79
|
-
return { event: key(
|
|
79
|
+
return { event: key("", "mouse", seq.slice(0, consumed)), consumed };
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
// Page Up/Down: ESC [ 5 ~ / ESC [ 6 ~
|
|
83
|
-
if (seq.startsWith(
|
|
84
|
-
return { event: key(
|
|
85
|
-
if (seq.startsWith(
|
|
86
|
-
return { event: key(
|
|
83
|
+
if (seq.startsWith("\x1b[5~"))
|
|
84
|
+
return { event: key("", "pageup", seq.slice(0, 4)), consumed: 4 };
|
|
85
|
+
if (seq.startsWith("\x1b[6~"))
|
|
86
|
+
return { event: key("", "pagedown", seq.slice(0, 4)), consumed: 4 };
|
|
87
87
|
// Shift+Arrow: ESC [ 1 ; 2 A/B/C/D
|
|
88
|
-
if (seq.startsWith(
|
|
89
|
-
return {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
88
|
+
if (seq.startsWith("\x1b[1;2A"))
|
|
89
|
+
return {
|
|
90
|
+
event: { char: "", name: "up", ctrl: false, meta: false, shift: true, sequence: seq.slice(0, 6) },
|
|
91
|
+
consumed: 6,
|
|
92
|
+
};
|
|
93
|
+
if (seq.startsWith("\x1b[1;2B"))
|
|
94
|
+
return {
|
|
95
|
+
event: { char: "", name: "down", ctrl: false, meta: false, shift: true, sequence: seq.slice(0, 6) },
|
|
96
|
+
consumed: 6,
|
|
97
|
+
};
|
|
98
|
+
if (seq.startsWith("\x1b[1;2C"))
|
|
99
|
+
return {
|
|
100
|
+
event: { char: "", name: "right", ctrl: false, meta: false, shift: true, sequence: seq.slice(0, 6) },
|
|
101
|
+
consumed: 6,
|
|
102
|
+
};
|
|
103
|
+
if (seq.startsWith("\x1b[1;2D"))
|
|
104
|
+
return {
|
|
105
|
+
event: { char: "", name: "left", ctrl: false, meta: false, shift: true, sequence: seq.slice(0, 6) },
|
|
106
|
+
consumed: 6,
|
|
107
|
+
};
|
|
96
108
|
// Alt+Enter (ESC + CR/LF) — newline insertion
|
|
97
|
-
if (seq.length >= 2 && (seq[1] ===
|
|
98
|
-
return {
|
|
109
|
+
if (seq.length >= 2 && (seq[1] === "\r" || seq[1] === "\n")) {
|
|
110
|
+
return {
|
|
111
|
+
event: { char: "\n", name: "newline", ctrl: false, meta: true, shift: false, sequence: seq.slice(0, 2) },
|
|
112
|
+
consumed: 2,
|
|
113
|
+
};
|
|
99
114
|
}
|
|
100
115
|
// Alt+char
|
|
101
|
-
if (seq.length >= 2 && seq[1] >=
|
|
102
|
-
return {
|
|
116
|
+
if (seq.length >= 2 && seq[1] >= " ") {
|
|
117
|
+
return {
|
|
118
|
+
event: { char: seq[1], name: seq[1], ctrl: false, meta: true, shift: false, sequence: seq.slice(0, 2) },
|
|
119
|
+
consumed: 2,
|
|
120
|
+
};
|
|
103
121
|
}
|
|
104
122
|
// Bare escape
|
|
105
|
-
return { event: key(
|
|
123
|
+
return { event: key("", "escape", "\x1b"), consumed: 1 };
|
|
106
124
|
}
|
|
107
125
|
// Control characters
|
|
108
126
|
if (code === 0x0d || code === 0x0a)
|
|
109
|
-
return { event: key(
|
|
127
|
+
return { event: key("", "return", ch), consumed: 1 };
|
|
110
128
|
if (code === 0x7f)
|
|
111
|
-
return { event: key(
|
|
129
|
+
return { event: key("", "backspace", ch), consumed: 1 };
|
|
112
130
|
if (code === 0x08)
|
|
113
|
-
return { event: key(
|
|
131
|
+
return { event: key("", "backspace", ch), consumed: 1 };
|
|
114
132
|
if (code === 0x09)
|
|
115
|
-
return { event: key(
|
|
133
|
+
return { event: key("", "tab", ch), consumed: 1 };
|
|
116
134
|
// Ctrl+A through Ctrl+Z (0x01 - 0x1a)
|
|
117
135
|
if (code >= 0x01 && code <= 0x1a) {
|
|
118
136
|
const letter = String.fromCharCode(code + 0x60); // 0x01 → 'a'
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* Layout engine — rasterizes application state into a CellGrid.
|
|
3
3
|
* Split screen: messages area (top) + footer (bottom).
|
|
4
4
|
*/
|
|
5
|
-
import type { Message } from
|
|
6
|
-
import { CellGrid } from
|
|
5
|
+
import type { Message } from "../types/message.js";
|
|
6
|
+
import type { CellGrid } from "./cells.js";
|
|
7
7
|
export type ToolCallInfo = {
|
|
8
8
|
toolName: string;
|
|
9
|
-
status:
|
|
9
|
+
status: "running" | "done" | "error";
|
|
10
10
|
output?: string;
|
|
11
11
|
args?: string;
|
|
12
12
|
isAgent?: boolean;
|
|
@@ -35,7 +35,7 @@ export type LayoutState = {
|
|
|
35
35
|
spinnerFrame: number;
|
|
36
36
|
thinkingStartedAt: number | null;
|
|
37
37
|
tokenCount: number;
|
|
38
|
-
vimMode:
|
|
38
|
+
vimMode: "normal" | "insert" | null;
|
|
39
39
|
permissionBox: {
|
|
40
40
|
toolName: string;
|
|
41
41
|
description: string;
|
|
@@ -43,7 +43,7 @@ export type LayoutState = {
|
|
|
43
43
|
suggestion: string | null;
|
|
44
44
|
} | null;
|
|
45
45
|
permissionDiffVisible: boolean;
|
|
46
|
-
permissionDiffInfo: import(
|
|
46
|
+
permissionDiffInfo: import("./diff.js").DiffInfo | null;
|
|
47
47
|
expandedToolCalls: Set<string>;
|
|
48
48
|
questionPrompt: {
|
|
49
49
|
question: string;
|
|
@@ -56,7 +56,7 @@ export type LayoutState = {
|
|
|
56
56
|
autocompleteIndex: number;
|
|
57
57
|
manualScroll: number;
|
|
58
58
|
codeBlocksExpanded: boolean;
|
|
59
|
-
sessionBrowser: import(
|
|
59
|
+
sessionBrowser: import("./session-browser.js").SessionBrowserState | null;
|
|
60
60
|
bannerLines: string[] | null;
|
|
61
61
|
thinkingExpanded: boolean;
|
|
62
62
|
lastThinkingSummary: string | null;
|