@zhijiewang/openharness 0.10.1 → 0.11.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.
- package/README.md +79 -13
- package/dist/Tool.d.ts.map +1 -1
- package/dist/Tool.js +7 -1
- package/dist/Tool.js.map +1 -1
- package/dist/Tool.test.js +8 -2
- package/dist/Tool.test.js.map +1 -1
- package/dist/agents/roles.d.ts +25 -0
- package/dist/agents/roles.d.ts.map +1 -0
- package/dist/agents/roles.js +116 -0
- package/dist/agents/roles.js.map +1 -0
- package/dist/agents/roles.test.d.ts +2 -0
- package/dist/agents/roles.test.d.ts.map +1 -0
- package/dist/agents/roles.test.js +38 -0
- package/dist/agents/roles.test.js.map +1 -0
- package/dist/commands/commands-new.test.d.ts +5 -0
- package/dist/commands/commands-new.test.d.ts.map +1 -0
- package/dist/commands/commands-new.test.js +132 -0
- package/dist/commands/commands-new.test.js.map +1 -0
- package/dist/commands/commands.test.js +31 -0
- package/dist/commands/commands.test.js.map +1 -1
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +199 -6
- package/dist/commands/index.js.map +1 -1
- package/dist/components/REPL.js +1 -1
- package/dist/components/REPL.js.map +1 -1
- package/dist/git/git.test.js +33 -1
- package/dist/git/git.test.js.map +1 -1
- package/dist/git/index.d.ts +12 -0
- package/dist/git/index.d.ts.map +1 -1
- package/dist/git/index.js +47 -2
- package/dist/git/index.js.map +1 -1
- package/dist/harness/checkpoints.d.ts +36 -0
- package/dist/harness/checkpoints.d.ts.map +1 -0
- package/dist/harness/checkpoints.js +156 -0
- package/dist/harness/checkpoints.js.map +1 -0
- package/dist/harness/config.d.ts +3 -0
- package/dist/harness/config.d.ts.map +1 -1
- package/dist/harness/config.js +35 -2
- package/dist/harness/config.js.map +1 -1
- package/dist/harness/config.test.js +21 -1
- package/dist/harness/config.test.js.map +1 -1
- package/dist/harness/hooks-env.test.d.ts +5 -0
- package/dist/harness/hooks-env.test.d.ts.map +1 -0
- package/dist/harness/hooks-env.test.js +41 -0
- package/dist/harness/hooks-env.test.js.map +1 -0
- package/dist/harness/hooks.d.ts +7 -0
- package/dist/harness/hooks.d.ts.map +1 -1
- package/dist/harness/hooks.js +14 -0
- package/dist/harness/hooks.js.map +1 -1
- package/dist/harness/keybindings.d.ts.map +1 -1
- package/dist/harness/keybindings.js +4 -0
- package/dist/harness/keybindings.js.map +1 -1
- package/dist/harness/memory.d.ts +19 -0
- package/dist/harness/memory.d.ts.map +1 -1
- package/dist/harness/memory.js +85 -0
- package/dist/harness/memory.js.map +1 -1
- package/dist/harness/onboarding.d.ts +1 -1
- package/dist/harness/onboarding.d.ts.map +1 -1
- package/dist/harness/onboarding.js +59 -4
- package/dist/harness/onboarding.js.map +1 -1
- package/dist/harness/onboarding.test.d.ts +5 -0
- package/dist/harness/onboarding.test.d.ts.map +1 -0
- package/dist/harness/onboarding.test.js +93 -0
- package/dist/harness/onboarding.test.js.map +1 -0
- package/dist/harness/rules.d.ts +6 -1
- package/dist/harness/rules.d.ts.map +1 -1
- package/dist/harness/rules.js +52 -5
- package/dist/harness/rules.js.map +1 -1
- package/dist/harness/rules.test.js +30 -1
- package/dist/harness/rules.test.js.map +1 -1
- package/dist/harness/session.d.ts +8 -1
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +13 -5
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/store.d.ts +46 -0
- package/dist/harness/store.d.ts.map +1 -0
- package/dist/harness/store.js +56 -0
- package/dist/harness/store.js.map +1 -0
- package/dist/harness/store.test.d.ts +2 -0
- package/dist/harness/store.test.d.ts.map +1 -0
- package/dist/harness/store.test.js +71 -0
- package/dist/harness/store.test.js.map +1 -0
- package/dist/harness/submit-handler.d.ts +2 -0
- package/dist/harness/submit-handler.d.ts.map +1 -1
- package/dist/harness/submit-handler.js +3 -0
- package/dist/harness/submit-handler.js.map +1 -1
- package/dist/main.js +153 -26
- package/dist/main.js.map +1 -1
- package/dist/mcp/client.d.ts +2 -0
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +10 -2
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/loader.d.ts +2 -0
- package/dist/mcp/loader.d.ts.map +1 -1
- package/dist/mcp/loader.js +34 -18
- package/dist/mcp/loader.js.map +1 -1
- package/dist/mcp/loader.test.d.ts +7 -0
- package/dist/mcp/loader.test.d.ts.map +1 -0
- package/dist/mcp/loader.test.js +25 -0
- package/dist/mcp/loader.test.js.map +1 -0
- package/dist/providers/anthropic-convert.test.d.ts +5 -0
- package/dist/providers/anthropic-convert.test.d.ts.map +1 -0
- package/dist/providers/anthropic-convert.test.js +98 -0
- package/dist/providers/anthropic-convert.test.js.map +1 -0
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +23 -4
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/stream-parsing.test.d.ts +6 -0
- package/dist/providers/stream-parsing.test.d.ts.map +1 -0
- package/dist/providers/stream-parsing.test.js +174 -0
- package/dist/providers/stream-parsing.test.js.map +1 -0
- package/dist/query/compress.d.ts +17 -0
- package/dist/query/compress.d.ts.map +1 -0
- package/dist/query/compress.js +115 -0
- package/dist/query/compress.js.map +1 -0
- package/dist/query/errors.d.ts +10 -0
- package/dist/query/errors.d.ts.map +1 -0
- package/dist/query/errors.js +22 -0
- package/dist/query/errors.js.map +1 -0
- package/dist/query/index.d.ts +15 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +199 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/tools.d.ts +17 -0
- package/dist/query/tools.d.ts.map +1 -0
- package/dist/query/tools.js +129 -0
- package/dist/query/tools.js.map +1 -0
- package/dist/query/types.d.ts +31 -0
- package/dist/query/types.d.ts.map +1 -0
- package/dist/query/types.js +5 -0
- package/dist/query/types.js.map +1 -0
- package/dist/query.d.ts +8 -38
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +7 -444
- package/dist/query.js.map +1 -1
- package/dist/query.test.js +1 -1
- package/dist/query.test.js.map +1 -1
- package/dist/renderer/cells.d.ts.map +1 -1
- package/dist/renderer/cells.js +15 -2
- package/dist/renderer/cells.js.map +1 -1
- package/dist/renderer/colors.d.ts +8 -0
- package/dist/renderer/colors.d.ts.map +1 -0
- package/dist/renderer/colors.js +18 -0
- package/dist/renderer/colors.js.map +1 -0
- package/dist/renderer/diff.test.d.ts +5 -0
- package/dist/renderer/diff.test.d.ts.map +1 -0
- package/dist/renderer/diff.test.js +140 -0
- package/dist/renderer/diff.test.js.map +1 -0
- package/dist/renderer/differ.d.ts.map +1 -1
- package/dist/renderer/differ.js +1 -10
- package/dist/renderer/differ.js.map +1 -1
- package/dist/renderer/e2e.test.js +1 -0
- package/dist/renderer/e2e.test.js.map +1 -1
- package/dist/renderer/image.test.d.ts +5 -0
- package/dist/renderer/image.test.d.ts.map +1 -0
- package/dist/renderer/image.test.js +66 -0
- package/dist/renderer/image.test.js.map +1 -0
- package/dist/renderer/index.d.ts +21 -4
- package/dist/renderer/index.d.ts.map +1 -1
- package/dist/renderer/index.js +191 -116
- package/dist/renderer/index.js.map +1 -1
- package/dist/renderer/layout.d.ts +5 -1
- package/dist/renderer/layout.d.ts.map +1 -1
- package/dist/renderer/layout.js +504 -614
- package/dist/renderer/layout.js.map +1 -1
- package/dist/renderer/markdown.d.ts.map +1 -1
- package/dist/renderer/markdown.js +42 -36
- package/dist/renderer/markdown.js.map +1 -1
- package/dist/renderer/perf.test.js +1 -0
- package/dist/renderer/perf.test.js.map +1 -1
- package/dist/renderer/session-browser.test.d.ts +6 -0
- package/dist/renderer/session-browser.test.d.ts.map +1 -0
- package/dist/renderer/session-browser.test.js +95 -0
- package/dist/renderer/session-browser.test.js.map +1 -0
- package/dist/renderer/ui-ux.test.d.ts +15 -0
- package/dist/renderer/ui-ux.test.d.ts.map +1 -0
- package/dist/renderer/ui-ux.test.js +470 -0
- package/dist/renderer/ui-ux.test.js.map +1 -0
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +178 -14
- package/dist/repl.js.map +1 -1
- package/dist/services/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/services/StreamingToolExecutor.js +4 -2
- package/dist/services/StreamingToolExecutor.js.map +1 -1
- package/dist/services/agent-messaging.d.ts +68 -0
- package/dist/services/agent-messaging.d.ts.map +1 -0
- package/dist/services/agent-messaging.js +121 -0
- package/dist/services/agent-messaging.js.map +1 -0
- package/dist/services/agent-messaging.test.d.ts +2 -0
- package/dist/services/agent-messaging.test.d.ts.map +1 -0
- package/dist/services/agent-messaging.test.js +88 -0
- package/dist/services/agent-messaging.test.js.map +1 -0
- package/dist/services/cron.d.ts +40 -0
- package/dist/services/cron.d.ts.map +1 -0
- package/dist/services/cron.js +90 -0
- package/dist/services/cron.js.map +1 -0
- package/dist/services/cron.test.d.ts +2 -0
- package/dist/services/cron.test.d.ts.map +1 -0
- package/dist/services/cron.test.js +49 -0
- package/dist/services/cron.test.js.map +1 -0
- package/dist/tools/AgentTool/index.d.ts +9 -0
- package/dist/tools/AgentTool/index.d.ts.map +1 -1
- package/dist/tools/AgentTool/index.js +89 -6
- package/dist/tools/AgentTool/index.js.map +1 -1
- package/dist/tools/BashTool/index.d.ts +6 -0
- package/dist/tools/BashTool/index.d.ts.map +1 -1
- package/dist/tools/BashTool/index.js +39 -1
- package/dist/tools/BashTool/index.js.map +1 -1
- package/dist/tools/FileEditTool/index.js +4 -4
- package/dist/tools/FileEditTool/index.js.map +1 -1
- package/dist/tools/FileReadTool/index.d.ts +3 -0
- package/dist/tools/FileReadTool/index.d.ts.map +1 -1
- package/dist/tools/FileReadTool/index.js +102 -4
- package/dist/tools/FileReadTool/index.js.map +1 -1
- package/dist/tools/FileWriteTool/index.d.ts.map +1 -1
- package/dist/tools/FileWriteTool/index.js +20 -5
- package/dist/tools/FileWriteTool/index.js.map +1 -1
- package/dist/tools/GlobTool/index.d.ts.map +1 -1
- package/dist/tools/GlobTool/index.js +4 -61
- package/dist/tools/GlobTool/index.js.map +1 -1
- package/dist/tools/GrepTool/index.d.ts +30 -0
- package/dist/tools/GrepTool/index.d.ts.map +1 -1
- package/dist/tools/GrepTool/index.js +153 -72
- package/dist/tools/GrepTool/index.js.map +1 -1
- package/dist/tools/LSTool/index.d.ts +3 -0
- package/dist/tools/LSTool/index.d.ts.map +1 -1
- package/dist/tools/LSTool/index.js +44 -29
- package/dist/tools/LSTool/index.js.map +1 -1
- package/dist/tools/TaskCreateTool/index.d.ts +6 -0
- package/dist/tools/TaskCreateTool/index.d.ts.map +1 -1
- package/dist/tools/TaskCreateTool/index.js +8 -2
- package/dist/tools/TaskCreateTool/index.js.map +1 -1
- package/dist/tools/TaskGetTool/index.d.ts +12 -0
- package/dist/tools/TaskGetTool/index.d.ts.map +1 -0
- package/dist/tools/TaskGetTool/index.js +50 -0
- package/dist/tools/TaskGetTool/index.js.map +1 -0
- package/dist/tools/TaskOutputTool/index.d.ts +15 -0
- package/dist/tools/TaskOutputTool/index.d.ts.map +1 -0
- package/dist/tools/TaskOutputTool/index.js +45 -0
- package/dist/tools/TaskOutputTool/index.js.map +1 -0
- package/dist/tools/TaskStopTool/index.d.ts +15 -0
- package/dist/tools/TaskStopTool/index.d.ts.map +1 -0
- package/dist/tools/TaskStopTool/index.js +51 -0
- package/dist/tools/TaskStopTool/index.js.map +1 -0
- package/dist/tools/TaskUpdateTool/index.d.ts +21 -3
- package/dist/tools/TaskUpdateTool/index.d.ts.map +1 -1
- package/dist/tools/TaskUpdateTool/index.js +48 -3
- package/dist/tools/TaskUpdateTool/index.js.map +1 -1
- package/dist/tools/tools-basic.test.js +191 -2
- package/dist/tools/tools-basic.test.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +6 -0
- package/dist/tools.js.map +1 -1
- package/dist/types/permissions.d.ts +2 -2
- package/dist/types/permissions.d.ts.map +1 -1
- package/dist/types/permissions.js +59 -13
- package/dist/types/permissions.js.map +1 -1
- package/dist/types/permissions.test.js +57 -0
- package/dist/types/permissions.test.js.map +1 -1
- package/dist/utils/bash-safety.d.ts +18 -0
- package/dist/utils/bash-safety.d.ts.map +1 -0
- package/dist/utils/bash-safety.js +227 -0
- package/dist/utils/bash-safety.js.map +1 -0
- package/dist/utils/bash-safety.test.d.ts +2 -0
- package/dist/utils/bash-safety.test.d.ts.map +1 -0
- package/dist/utils/bash-safety.test.js +112 -0
- package/dist/utils/bash-safety.test.js.map +1 -0
- package/dist/utils/fs.d.ts +15 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +64 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/fs.test.d.ts +5 -0
- package/dist/utils/fs.test.d.ts.map +1 -0
- package/dist/utils/fs.test.js +82 -0
- package/dist/utils/fs.test.js.map +1 -0
- package/dist/utils/safe-env.d.ts +10 -0
- package/dist/utils/safe-env.d.ts.map +1 -0
- package/dist/utils/safe-env.js +40 -0
- package/dist/utils/safe-env.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI/UX Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests the complete user experience flow:
|
|
5
|
+
* - User message visibility (the flush bug)
|
|
6
|
+
* - Multi-turn conversations
|
|
7
|
+
* - Streaming state transitions
|
|
8
|
+
* - Interactive prompts (permission, question)
|
|
9
|
+
* - Scrolling and viewport management
|
|
10
|
+
* - Terminal resize behavior
|
|
11
|
+
* - Toast notifications
|
|
12
|
+
* - Input handling (multi-line, vim mode, line count)
|
|
13
|
+
*/
|
|
14
|
+
import { describe, it } from 'node:test';
|
|
15
|
+
import assert from 'node:assert/strict';
|
|
16
|
+
import { CellGrid } from './cells.js';
|
|
17
|
+
import { rasterize, rasterizeLive } from './layout.js';
|
|
18
|
+
import { setActiveTheme } from '../utils/theme-data.js';
|
|
19
|
+
import { createUserMessage, createAssistantMessage } from '../types/message.js';
|
|
20
|
+
setActiveTheme('dark');
|
|
21
|
+
// ── Helpers ──
|
|
22
|
+
function makeState(overrides = {}) {
|
|
23
|
+
return {
|
|
24
|
+
messages: [],
|
|
25
|
+
streamingText: '',
|
|
26
|
+
thinkingText: '',
|
|
27
|
+
toolCalls: new Map(),
|
|
28
|
+
inputText: '',
|
|
29
|
+
inputCursor: 0,
|
|
30
|
+
companionLines: null,
|
|
31
|
+
companionColor: 'cyan',
|
|
32
|
+
statusHints: 'exit to quit',
|
|
33
|
+
statusLine: 'llama3 | 0↑ 0↓ | $0.0000',
|
|
34
|
+
contextWarning: null,
|
|
35
|
+
errorText: null,
|
|
36
|
+
loading: false,
|
|
37
|
+
spinnerFrame: 0,
|
|
38
|
+
thinkingStartedAt: null,
|
|
39
|
+
tokenCount: 0,
|
|
40
|
+
vimMode: null,
|
|
41
|
+
permissionBox: null,
|
|
42
|
+
permissionDiffVisible: false,
|
|
43
|
+
permissionDiffInfo: null,
|
|
44
|
+
expandedToolCalls: new Set(),
|
|
45
|
+
questionPrompt: null,
|
|
46
|
+
autocomplete: [],
|
|
47
|
+
autocompleteIndex: -1,
|
|
48
|
+
manualScroll: 0,
|
|
49
|
+
codeBlocksExpanded: false,
|
|
50
|
+
sessionBrowser: null,
|
|
51
|
+
bannerLines: null,
|
|
52
|
+
thinkingExpanded: false,
|
|
53
|
+
lastThinkingSummary: null,
|
|
54
|
+
autocompleteDescriptions: [],
|
|
55
|
+
notifications: [],
|
|
56
|
+
...overrides,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function gridText(grid, row) {
|
|
60
|
+
return grid.cells[row].map(c => c.char).join('').trimEnd();
|
|
61
|
+
}
|
|
62
|
+
function gridAllText(grid) {
|
|
63
|
+
return Array.from({ length: grid.height }, (_, r) => gridText(grid, r)).join('\n');
|
|
64
|
+
}
|
|
65
|
+
function findRow(grid, text) {
|
|
66
|
+
for (let r = 0; r < grid.height; r++) {
|
|
67
|
+
if (gridText(grid, r).includes(text))
|
|
68
|
+
return r;
|
|
69
|
+
}
|
|
70
|
+
return -1;
|
|
71
|
+
}
|
|
72
|
+
// ── 1. User Message Visibility ──
|
|
73
|
+
describe('User message visibility', () => {
|
|
74
|
+
it('renders user message with ❯ prefix in message area', () => {
|
|
75
|
+
const state = makeState({
|
|
76
|
+
messages: [createUserMessage('write me a song')],
|
|
77
|
+
});
|
|
78
|
+
const grid = new CellGrid(80, 24);
|
|
79
|
+
rasterize(state, grid);
|
|
80
|
+
const row = findRow(grid, 'write me a song');
|
|
81
|
+
assert.ok(row >= 0, 'User message not found in grid');
|
|
82
|
+
assert.ok(gridText(grid, row).includes('❯'), 'Missing ❯ prefix');
|
|
83
|
+
});
|
|
84
|
+
it('renders user and assistant messages on separate lines', () => {
|
|
85
|
+
const state = makeState({
|
|
86
|
+
messages: [
|
|
87
|
+
createUserMessage('hello'),
|
|
88
|
+
createAssistantMessage('hi there'),
|
|
89
|
+
],
|
|
90
|
+
});
|
|
91
|
+
const grid = new CellGrid(80, 30);
|
|
92
|
+
rasterize(state, grid);
|
|
93
|
+
const userRow = findRow(grid, 'hello');
|
|
94
|
+
const assistantRow = findRow(grid, 'hi there');
|
|
95
|
+
assert.ok(userRow >= 0, 'User message not found');
|
|
96
|
+
assert.ok(assistantRow >= 0, 'Assistant message not found');
|
|
97
|
+
assert.ok(assistantRow > userRow, 'Assistant should be below user');
|
|
98
|
+
});
|
|
99
|
+
it('shows divider between messages', () => {
|
|
100
|
+
const state = makeState({
|
|
101
|
+
messages: [
|
|
102
|
+
createUserMessage('first'),
|
|
103
|
+
createAssistantMessage('second'),
|
|
104
|
+
],
|
|
105
|
+
});
|
|
106
|
+
const grid = new CellGrid(80, 30);
|
|
107
|
+
rasterize(state, grid);
|
|
108
|
+
const all = gridAllText(grid);
|
|
109
|
+
assert.ok(all.includes('─'), 'No divider found between messages');
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
// ── 2. Multi-Turn Conversations ──
|
|
113
|
+
describe('Multi-turn conversations', () => {
|
|
114
|
+
it('renders 3 turns correctly ordered', () => {
|
|
115
|
+
const state = makeState({
|
|
116
|
+
messages: [
|
|
117
|
+
createUserMessage('What is 2+2?'),
|
|
118
|
+
createAssistantMessage('2+2 = 4'),
|
|
119
|
+
createUserMessage('And 3+3?'),
|
|
120
|
+
createAssistantMessage('3+3 = 6'),
|
|
121
|
+
createUserMessage('Thanks!'),
|
|
122
|
+
createAssistantMessage('You\'re welcome!'),
|
|
123
|
+
],
|
|
124
|
+
});
|
|
125
|
+
const grid = new CellGrid(80, 50);
|
|
126
|
+
rasterize(state, grid);
|
|
127
|
+
const all = gridAllText(grid);
|
|
128
|
+
const pos1 = all.indexOf('2+2');
|
|
129
|
+
const pos2 = all.indexOf('3+3');
|
|
130
|
+
const pos3 = all.indexOf('Thanks');
|
|
131
|
+
assert.ok(pos1 < pos2, 'Turn 1 should appear before turn 2');
|
|
132
|
+
assert.ok(pos2 < pos3, 'Turn 2 should appear before turn 3');
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
// ── 3. Streaming State ──
|
|
136
|
+
describe('Streaming state', () => {
|
|
137
|
+
it('shows spinner when loading with no streaming text', () => {
|
|
138
|
+
const state = makeState({ loading: true, spinnerFrame: 3 });
|
|
139
|
+
const grid = new CellGrid(80, 24);
|
|
140
|
+
rasterizeLive(state, grid);
|
|
141
|
+
const all = gridAllText(grid);
|
|
142
|
+
assert.ok(all.includes('Thinking') || all.includes('◆'), 'No spinner/thinking indicator');
|
|
143
|
+
});
|
|
144
|
+
it('shows streaming text with ◆ prefix', () => {
|
|
145
|
+
const state = makeState({
|
|
146
|
+
loading: true,
|
|
147
|
+
streamingText: 'Hello world from the LLM',
|
|
148
|
+
});
|
|
149
|
+
const grid = new CellGrid(80, 24);
|
|
150
|
+
rasterizeLive(state, grid);
|
|
151
|
+
const row = findRow(grid, 'Hello world');
|
|
152
|
+
assert.ok(row >= 0, 'Streaming text not found');
|
|
153
|
+
});
|
|
154
|
+
it('shows thinking shimmer text', () => {
|
|
155
|
+
const state = makeState({
|
|
156
|
+
loading: true,
|
|
157
|
+
thinkingText: 'Let me think about this...\nAnalyzing the request.',
|
|
158
|
+
thinkingStartedAt: Date.now() - 5000,
|
|
159
|
+
spinnerFrame: 5,
|
|
160
|
+
});
|
|
161
|
+
const grid = new CellGrid(80, 24);
|
|
162
|
+
rasterizeLive(state, grid);
|
|
163
|
+
const all = gridAllText(grid);
|
|
164
|
+
assert.ok(all.includes('Thinking') || all.includes('∴'), 'Thinking indicator not found');
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
// ── 4. Tool Call Display ──
|
|
168
|
+
describe('Tool call display', () => {
|
|
169
|
+
it('shows running tool with spinner', () => {
|
|
170
|
+
const tc = {
|
|
171
|
+
toolName: 'Bash',
|
|
172
|
+
status: 'running',
|
|
173
|
+
output: '',
|
|
174
|
+
args: '$ npm test',
|
|
175
|
+
startedAt: Date.now() - 3000,
|
|
176
|
+
liveOutput: ['PASS test1', 'PASS test2'],
|
|
177
|
+
resultSummary: '',
|
|
178
|
+
};
|
|
179
|
+
const state = makeState({
|
|
180
|
+
loading: true,
|
|
181
|
+
toolCalls: new Map([['call-1', tc]]),
|
|
182
|
+
});
|
|
183
|
+
const grid = new CellGrid(80, 24);
|
|
184
|
+
rasterizeLive(state, grid);
|
|
185
|
+
const row = findRow(grid, 'Bash');
|
|
186
|
+
assert.ok(row >= 0, 'Tool name not found');
|
|
187
|
+
});
|
|
188
|
+
it('shows completed tool with ✓', () => {
|
|
189
|
+
const tc = {
|
|
190
|
+
toolName: 'Read',
|
|
191
|
+
status: 'done',
|
|
192
|
+
output: 'file contents here',
|
|
193
|
+
args: 'src/main.ts',
|
|
194
|
+
startedAt: Date.now() - 1000,
|
|
195
|
+
liveOutput: [],
|
|
196
|
+
resultSummary: '42 lines',
|
|
197
|
+
};
|
|
198
|
+
const state = makeState({
|
|
199
|
+
toolCalls: new Map([['call-1', tc]]),
|
|
200
|
+
});
|
|
201
|
+
const grid = new CellGrid(80, 24);
|
|
202
|
+
rasterizeLive(state, grid);
|
|
203
|
+
const row = findRow(grid, 'Read');
|
|
204
|
+
assert.ok(row >= 0, 'Tool name not found');
|
|
205
|
+
assert.ok(gridText(grid, row).includes('✓'), 'Missing ✓ icon for completed tool');
|
|
206
|
+
});
|
|
207
|
+
it('shows error tool with ✗', () => {
|
|
208
|
+
const tc = {
|
|
209
|
+
toolName: 'Bash',
|
|
210
|
+
status: 'error',
|
|
211
|
+
output: 'command not found',
|
|
212
|
+
args: '$ invalid-cmd',
|
|
213
|
+
startedAt: Date.now() - 500,
|
|
214
|
+
liveOutput: [],
|
|
215
|
+
resultSummary: 'error',
|
|
216
|
+
};
|
|
217
|
+
const state = makeState({
|
|
218
|
+
toolCalls: new Map([['call-1', tc]]),
|
|
219
|
+
});
|
|
220
|
+
const grid = new CellGrid(80, 24);
|
|
221
|
+
rasterizeLive(state, grid);
|
|
222
|
+
const row = findRow(grid, 'Bash');
|
|
223
|
+
assert.ok(row >= 0, 'Tool name not found');
|
|
224
|
+
assert.ok(gridText(grid, row).includes('✗'), 'Missing ✗ icon for error tool');
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
// ── 5. Permission Prompt ──
|
|
228
|
+
describe('Permission prompt', () => {
|
|
229
|
+
it('renders permission box with tool name and risk level', () => {
|
|
230
|
+
const state = makeState({
|
|
231
|
+
permissionBox: {
|
|
232
|
+
toolName: 'Bash',
|
|
233
|
+
description: '$ rm -rf /tmp/test',
|
|
234
|
+
riskLevel: 'high',
|
|
235
|
+
suggestion: '$ rm -rf /tmp/test',
|
|
236
|
+
},
|
|
237
|
+
permissionDiffVisible: false,
|
|
238
|
+
permissionDiffInfo: null,
|
|
239
|
+
});
|
|
240
|
+
const grid = new CellGrid(80, 24);
|
|
241
|
+
rasterizeLive(state, grid);
|
|
242
|
+
const all = gridAllText(grid);
|
|
243
|
+
assert.ok(all.includes('Bash'), 'Tool name not in permission prompt');
|
|
244
|
+
assert.ok(all.includes('Y') || all.includes('yes'), 'Yes option not shown');
|
|
245
|
+
assert.ok(all.includes('N') || all.includes('no'), 'No option not shown');
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
// ── 6. Notifications ──
|
|
249
|
+
describe('Toast notifications', () => {
|
|
250
|
+
it('renders notifications above input in rasterize', () => {
|
|
251
|
+
const state = makeState({
|
|
252
|
+
notifications: [{ text: 'Background task completed' }],
|
|
253
|
+
});
|
|
254
|
+
const grid = new CellGrid(80, 24);
|
|
255
|
+
rasterize(state, grid);
|
|
256
|
+
const row = findRow(grid, 'Background task completed');
|
|
257
|
+
assert.ok(row >= 0, 'Notification not found in rasterize');
|
|
258
|
+
assert.ok(gridText(grid, row).includes('⚡'), 'Missing ⚡ icon');
|
|
259
|
+
});
|
|
260
|
+
it('renders notifications in rasterizeLive', () => {
|
|
261
|
+
const state = makeState({
|
|
262
|
+
notifications: [{ text: 'Agent finished' }],
|
|
263
|
+
loading: true,
|
|
264
|
+
});
|
|
265
|
+
const grid = new CellGrid(80, 24);
|
|
266
|
+
rasterizeLive(state, grid);
|
|
267
|
+
const row = findRow(grid, 'Agent finished');
|
|
268
|
+
assert.ok(row >= 0, 'Notification not found in rasterizeLive');
|
|
269
|
+
});
|
|
270
|
+
it('limits to 2 visible notifications', () => {
|
|
271
|
+
const state = makeState({
|
|
272
|
+
notifications: [
|
|
273
|
+
{ text: 'First' },
|
|
274
|
+
{ text: 'Second' },
|
|
275
|
+
{ text: 'Third' },
|
|
276
|
+
],
|
|
277
|
+
});
|
|
278
|
+
const grid = new CellGrid(80, 24);
|
|
279
|
+
rasterize(state, grid);
|
|
280
|
+
const all = gridAllText(grid);
|
|
281
|
+
// Only last 2 should be visible
|
|
282
|
+
assert.ok(all.includes('Second'), 'Second notification should be visible');
|
|
283
|
+
assert.ok(all.includes('Third'), 'Third notification should be visible');
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
// ── 7. Multi-line Input ──
|
|
287
|
+
describe('Multi-line input', () => {
|
|
288
|
+
it('shows line count indicator for multi-line input', () => {
|
|
289
|
+
const state = makeState({
|
|
290
|
+
inputText: 'line one\nline two\nline three',
|
|
291
|
+
inputCursor: 10,
|
|
292
|
+
});
|
|
293
|
+
const grid = new CellGrid(80, 24);
|
|
294
|
+
rasterize(state, grid);
|
|
295
|
+
const all = gridAllText(grid);
|
|
296
|
+
assert.ok(all.includes('[3 lines]'), 'Line count indicator not found');
|
|
297
|
+
});
|
|
298
|
+
it('does not show line count for single-line input', () => {
|
|
299
|
+
const state = makeState({
|
|
300
|
+
inputText: 'just one line',
|
|
301
|
+
inputCursor: 5,
|
|
302
|
+
});
|
|
303
|
+
const grid = new CellGrid(80, 24);
|
|
304
|
+
rasterize(state, grid);
|
|
305
|
+
const all = gridAllText(grid);
|
|
306
|
+
assert.ok(!all.includes('['), 'Line count should not appear for single line');
|
|
307
|
+
});
|
|
308
|
+
it('shows line count in rasterizeLive too', () => {
|
|
309
|
+
const state = makeState({
|
|
310
|
+
inputText: 'a\nb',
|
|
311
|
+
inputCursor: 2,
|
|
312
|
+
loading: true,
|
|
313
|
+
});
|
|
314
|
+
const grid = new CellGrid(80, 24);
|
|
315
|
+
rasterizeLive(state, grid);
|
|
316
|
+
const all = gridAllText(grid);
|
|
317
|
+
assert.ok(all.includes('[2 lines]'), 'Line count not in rasterizeLive');
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
// ── 8. Vim Mode ──
|
|
321
|
+
describe('Vim mode indicator', () => {
|
|
322
|
+
it('shows [N] in normal mode', () => {
|
|
323
|
+
const state = makeState({ vimMode: 'normal', inputText: 'hello' });
|
|
324
|
+
const grid = new CellGrid(80, 24);
|
|
325
|
+
rasterize(state, grid);
|
|
326
|
+
const all = gridAllText(grid);
|
|
327
|
+
assert.ok(all.includes('[N]'), 'Vim normal indicator not found');
|
|
328
|
+
});
|
|
329
|
+
it('shows [I] in insert mode', () => {
|
|
330
|
+
const state = makeState({ vimMode: 'insert', inputText: 'hello' });
|
|
331
|
+
const grid = new CellGrid(80, 24);
|
|
332
|
+
rasterize(state, grid);
|
|
333
|
+
const all = gridAllText(grid);
|
|
334
|
+
assert.ok(all.includes('[I]'), 'Vim insert indicator not found');
|
|
335
|
+
});
|
|
336
|
+
it('shows no indicator when vim mode is off', () => {
|
|
337
|
+
const state = makeState({ vimMode: null, inputText: 'hello' });
|
|
338
|
+
const grid = new CellGrid(80, 24);
|
|
339
|
+
rasterize(state, grid);
|
|
340
|
+
const all = gridAllText(grid);
|
|
341
|
+
assert.ok(!all.includes('[N]') && !all.includes('[I]'), 'Vim indicator should be hidden');
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
// ── 9. Terminal Resize ──
|
|
345
|
+
describe('Terminal resize behavior', () => {
|
|
346
|
+
it('renders correctly at 40-column width', () => {
|
|
347
|
+
const state = makeState({
|
|
348
|
+
messages: [createUserMessage('Hello')],
|
|
349
|
+
statusLine: 'model | 0↑ 0↓',
|
|
350
|
+
});
|
|
351
|
+
const grid = new CellGrid(40, 24);
|
|
352
|
+
rasterize(state, grid);
|
|
353
|
+
assert.ok(findRow(grid, 'Hello') >= 0, 'Content should render at narrow width');
|
|
354
|
+
});
|
|
355
|
+
it('renders correctly at 120-column width', () => {
|
|
356
|
+
const state = makeState({
|
|
357
|
+
messages: [createUserMessage('Hello')],
|
|
358
|
+
});
|
|
359
|
+
const grid = new CellGrid(120, 24);
|
|
360
|
+
rasterize(state, grid);
|
|
361
|
+
assert.ok(findRow(grid, 'Hello') >= 0, 'Content should render at wide width');
|
|
362
|
+
});
|
|
363
|
+
it('wraps long messages at terminal width', () => {
|
|
364
|
+
const longMsg = 'A'.repeat(100);
|
|
365
|
+
const state = makeState({
|
|
366
|
+
messages: [createUserMessage(longMsg)],
|
|
367
|
+
});
|
|
368
|
+
const grid50 = new CellGrid(50, 24);
|
|
369
|
+
rasterize(state, grid50);
|
|
370
|
+
const grid100 = new CellGrid(100, 24);
|
|
371
|
+
rasterize(state, grid100);
|
|
372
|
+
// Narrow grid should use more rows for the same message
|
|
373
|
+
const rows50 = Array.from({ length: grid50.height }, (_, r) => gridText(grid50, r)).filter(l => l.includes('A')).length;
|
|
374
|
+
const rows100 = Array.from({ length: grid100.height }, (_, r) => gridText(grid100, r)).filter(l => l.includes('A')).length;
|
|
375
|
+
assert.ok(rows50 > rows100, 'Narrow terminal should wrap to more rows');
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
// ── 10. Autocomplete ──
|
|
379
|
+
describe('Autocomplete rendering', () => {
|
|
380
|
+
it('shows suggestions below input', () => {
|
|
381
|
+
const state = makeState({
|
|
382
|
+
inputText: '/he',
|
|
383
|
+
autocomplete: ['help', 'history'],
|
|
384
|
+
autocompleteDescriptions: ['Show commands', 'List sessions'],
|
|
385
|
+
autocompleteIndex: 0,
|
|
386
|
+
});
|
|
387
|
+
const grid = new CellGrid(80, 24);
|
|
388
|
+
rasterize(state, grid);
|
|
389
|
+
const all = gridAllText(grid);
|
|
390
|
+
assert.ok(all.includes('help'), 'Autocomplete suggestion not visible');
|
|
391
|
+
assert.ok(all.includes('history'), 'Second suggestion not visible');
|
|
392
|
+
});
|
|
393
|
+
});
|
|
394
|
+
// ── 11. Error Display ──
|
|
395
|
+
describe('Error display', () => {
|
|
396
|
+
it('renders error text with ✗ prefix', () => {
|
|
397
|
+
const state = makeState({
|
|
398
|
+
errorText: 'Connection refused',
|
|
399
|
+
});
|
|
400
|
+
const grid = new CellGrid(80, 24);
|
|
401
|
+
rasterizeLive(state, grid);
|
|
402
|
+
const row = findRow(grid, 'Connection refused');
|
|
403
|
+
assert.ok(row >= 0, 'Error text not found');
|
|
404
|
+
});
|
|
405
|
+
});
|
|
406
|
+
// ── 12. Context Warning ──
|
|
407
|
+
describe('Context warning', () => {
|
|
408
|
+
it('renders context warning text', () => {
|
|
409
|
+
const state = makeState({
|
|
410
|
+
contextWarning: { text: '⚠ Context ~85% full — consider /compact', critical: false },
|
|
411
|
+
});
|
|
412
|
+
const grid = new CellGrid(80, 24);
|
|
413
|
+
rasterizeLive(state, grid);
|
|
414
|
+
const row = findRow(grid, '85%');
|
|
415
|
+
assert.ok(row >= 0, 'Context warning not found');
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
// ── 13. Status Line ──
|
|
419
|
+
describe('Status line', () => {
|
|
420
|
+
it('renders status line content', () => {
|
|
421
|
+
const state = makeState({
|
|
422
|
+
statusLine: 'llama3 | 1.2K↑ 500↓ | $0.0042 | ctx [███░░] 45%',
|
|
423
|
+
});
|
|
424
|
+
const grid = new CellGrid(80, 24);
|
|
425
|
+
rasterize(state, grid);
|
|
426
|
+
const row = findRow(grid, 'llama3');
|
|
427
|
+
assert.ok(row >= 0, 'Status line not found');
|
|
428
|
+
assert.ok(gridText(grid, row).includes('$0.0042'), 'Cost not in status line');
|
|
429
|
+
});
|
|
430
|
+
});
|
|
431
|
+
// ── 14. rasterize vs rasterizeLive parity ──
|
|
432
|
+
describe('rasterize/rasterizeLive parity', () => {
|
|
433
|
+
it('both render notifications', () => {
|
|
434
|
+
const state = makeState({
|
|
435
|
+
notifications: [{ text: 'parity test' }],
|
|
436
|
+
loading: true,
|
|
437
|
+
});
|
|
438
|
+
const grid1 = new CellGrid(80, 24);
|
|
439
|
+
rasterize(state, grid1);
|
|
440
|
+
const grid2 = new CellGrid(80, 24);
|
|
441
|
+
rasterizeLive(state, grid2);
|
|
442
|
+
assert.ok(findRow(grid1, 'parity test') >= 0, 'rasterize missing notification');
|
|
443
|
+
assert.ok(findRow(grid2, 'parity test') >= 0, 'rasterizeLive missing notification');
|
|
444
|
+
});
|
|
445
|
+
it('both render status line', () => {
|
|
446
|
+
const state = makeState({
|
|
447
|
+
statusLine: 'model-xyz',
|
|
448
|
+
loading: true,
|
|
449
|
+
});
|
|
450
|
+
const grid1 = new CellGrid(80, 24);
|
|
451
|
+
rasterize(state, grid1);
|
|
452
|
+
const grid2 = new CellGrid(80, 24);
|
|
453
|
+
rasterizeLive(state, grid2);
|
|
454
|
+
assert.ok(findRow(grid1, 'model-xyz') >= 0, 'rasterize missing status');
|
|
455
|
+
assert.ok(findRow(grid2, 'model-xyz') >= 0, 'rasterizeLive missing status');
|
|
456
|
+
});
|
|
457
|
+
it('both render input prompt', () => {
|
|
458
|
+
const state = makeState({
|
|
459
|
+
inputText: 'test input',
|
|
460
|
+
loading: true,
|
|
461
|
+
});
|
|
462
|
+
const grid1 = new CellGrid(80, 24);
|
|
463
|
+
rasterize(state, grid1);
|
|
464
|
+
const grid2 = new CellGrid(80, 24);
|
|
465
|
+
rasterizeLive(state, grid2);
|
|
466
|
+
assert.ok(findRow(grid1, '❯') >= 0, 'rasterize missing prompt');
|
|
467
|
+
assert.ok(findRow(grid2, '❯') >= 0, 'rasterizeLive missing prompt');
|
|
468
|
+
});
|
|
469
|
+
});
|
|
470
|
+
//# sourceMappingURL=ui-ux.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-ux.test.js","sourceRoot":"","sources":["../../src/renderer/ui-ux.test.ts"],"names":[],"mappings":"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"}
|
package/dist/repl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAyB7D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAsB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAyB7D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAsB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2uBjE"}
|