cvc-tui 0.4.3 → 0.4.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/NOTICES.md +13 -0
- package/dist/app/completion.js +102 -0
- package/dist/app/createGatewayEventHandler.js +508 -0
- package/dist/app/createSlashHandler.js +101 -0
- package/dist/app/delegationStore.js +51 -0
- package/dist/app/gatewayContext.js +17 -0
- package/dist/app/historyStore.js +123 -0
- package/dist/app/inputBuffer.js +120 -0
- package/dist/app/inputSelectionStore.js +8 -0
- package/dist/app/inputStore.js +28 -0
- package/dist/app/interfaces.js +6 -0
- package/dist/app/overlayStore.js +40 -0
- package/dist/app/promptStore.js +44 -0
- package/dist/app/queueStore.js +25 -0
- package/dist/app/scroll.js +44 -0
- package/dist/app/setupHandoff.js +28 -0
- package/dist/app/slash/commands/core.js +479 -0
- package/dist/app/slash/commands/debug.js +44 -0
- package/dist/app/slash/commands/ops.js +498 -0
- package/dist/app/slash/commands/session.js +431 -0
- package/dist/app/slash/commands/setup.js +20 -0
- package/dist/app/slash/commands/toggles.js +40 -0
- package/dist/app/slash/registry.js +18 -0
- package/dist/app/slash/types.js +1 -0
- package/dist/app/spawnHistoryStore.js +105 -0
- package/dist/app/turnController.js +650 -0
- package/dist/app/turnStore.js +48 -0
- package/dist/app/uiStore.js +36 -0
- package/dist/app/useComposerState.js +265 -0
- package/dist/app/useConfigSync.js +144 -0
- package/dist/app/useInputHandlers.js +403 -0
- package/dist/app/useLongRunToolCharms.js +50 -0
- package/dist/app/useMainApp.js +629 -0
- package/dist/app/useSessionLifecycle.js +175 -0
- package/dist/app/useSubmission.js +287 -0
- package/dist/app.js +15 -0
- package/dist/banner.js +63 -0
- package/dist/components/agentsOverlay.js +474 -0
- package/dist/components/appChrome.js +252 -0
- package/dist/components/appLayout.js +121 -0
- package/dist/components/appOverlays.js +65 -0
- package/dist/components/branding.js +97 -0
- package/dist/components/fpsOverlay.js +22 -0
- package/dist/components/helpHint.js +21 -0
- package/dist/components/markdown.js +501 -0
- package/dist/components/maskedPrompt.js +12 -0
- package/dist/components/messageLine.js +82 -0
- package/dist/components/modelPicker.js +254 -0
- package/dist/components/overlayControls.js +30 -0
- package/dist/components/overlays/confirmPrompt.js +25 -0
- package/dist/components/overlays/helpOverlay.js +76 -0
- package/dist/components/overlays/historySearch.js +49 -0
- package/dist/components/overlays/modelPicker.js +60 -0
- package/dist/components/overlays/overlayUtils.js +19 -0
- package/dist/components/overlays/secretPrompt.js +36 -0
- package/dist/components/overlays/sessionPicker.js +93 -0
- package/dist/components/overlays/skillsHub.js +71 -0
- package/dist/components/prompts.js +95 -0
- package/dist/components/queuedMessages.js +24 -0
- package/dist/components/sessionPicker.js +130 -0
- package/dist/components/skillsHub.js +165 -0
- package/dist/components/streamingAssistant.js +35 -0
- package/dist/components/streamingMarkdown.js +144 -0
- package/dist/components/textInput.js +794 -0
- package/dist/components/themed.js +12 -0
- package/dist/components/thinking.js +496 -0
- package/dist/components/todoPanel.js +40 -0
- package/dist/components/transcript.js +22 -0
- package/dist/config/env.js +18 -0
- package/dist/config/limits.js +22 -0
- package/dist/config/timing.js +25 -0
- package/dist/content/charms.js +5 -0
- package/dist/content/faces.js +21 -0
- package/dist/content/fortunes.js +29 -0
- package/dist/content/hotkeys.js +38 -0
- package/dist/content/placeholders.js +15 -0
- package/dist/content/setup.js +14 -0
- package/dist/content/verbs.js +41 -0
- package/dist/domain/details.js +53 -0
- package/dist/domain/messages.js +63 -0
- package/dist/domain/paths.js +16 -0
- package/dist/domain/providers.js +11 -0
- package/dist/domain/roles.js +6 -0
- package/dist/domain/slash.js +11 -0
- package/dist/domain/usage.js +1 -0
- package/dist/domain/viewport.js +33 -0
- package/dist/entry.js +64 -71149
- package/dist/gateway/client.js +312 -0
- package/dist/gatewayClient.js +574 -0
- package/dist/gatewayTypes.js +1 -0
- package/dist/hooks/useCompletion.js +86 -0
- package/dist/hooks/useGitBranch.js +58 -0
- package/dist/hooks/useInputHistory.js +12 -0
- package/dist/hooks/useQueue.js +57 -0
- package/dist/hooks/useVirtualHistory.js +401 -0
- package/dist/lib/circularBuffer.js +43 -0
- package/dist/lib/clipboard.js +126 -0
- package/dist/lib/editor.js +41 -0
- package/dist/lib/editor.test.js +58 -0
- package/dist/lib/emoji.js +49 -0
- package/dist/lib/externalCli.js +11 -0
- package/dist/lib/forceTruecolor.js +26 -0
- package/dist/lib/fpsStore.js +36 -0
- package/dist/lib/gracefulExit.js +29 -0
- package/dist/lib/history.js +69 -0
- package/dist/lib/inputMetrics.js +143 -0
- package/dist/lib/liveProgress.js +51 -0
- package/dist/lib/liveProgress.test.js +89 -0
- package/dist/lib/mathUnicode.js +685 -0
- package/dist/lib/memory.js +123 -0
- package/dist/lib/memoryMonitor.js +76 -0
- package/dist/lib/messages.js +3 -0
- package/dist/lib/messages.test.js +25 -0
- package/dist/lib/osc52.js +53 -0
- package/dist/lib/perfPane.js +94 -0
- package/dist/lib/platform.js +312 -0
- package/dist/lib/precisionWheel.js +25 -0
- package/dist/lib/react-devtools-stub.js +12 -0
- package/dist/lib/reasoning.js +39 -0
- package/dist/lib/rpc.js +26 -0
- package/dist/lib/subagentTree.js +287 -0
- package/dist/lib/syntax.js +89 -0
- package/dist/lib/terminalModes.js +46 -0
- package/dist/lib/terminalParity.js +48 -0
- package/dist/lib/terminalSetup.js +321 -0
- package/dist/lib/text.js +203 -0
- package/dist/lib/text.test.js +18 -0
- package/dist/lib/todo.js +2 -0
- package/dist/lib/todo.test.js +22 -0
- package/dist/lib/viewportStore.js +82 -0
- package/dist/lib/virtualHeights.js +61 -0
- package/dist/lib/wheelAccel.js +143 -0
- package/dist/protocol/interpolation.js +4 -0
- package/dist/protocol/paste.js +3 -0
- package/dist/theme.js +398 -0
- package/dist/types.js +1 -0
- package/dist/vendor/cvc-ink/dist/entry-exports.js +52737 -0
- package/dist/vendor/cvc-ink/index.js +1 -0
- package/dist/vendor/cvc-ink/package.json +9 -0
- package/dist/vendor/cvc-ink/text-input.js +1 -0
- package/package.json +9 -9
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Ported from CVC Agent (https://github.com/NousResearch/cvc)
|
|
4
|
+
// Original Copyright (c) 2025 Nous Research. CVC adaptations (c) 2026 Jai Kumar Meena.
|
|
5
|
+
import { describe, expect, it } from 'vitest';
|
|
6
|
+
import { appendToolShelfMessage, canHoldToolShelf, isTodoDone, mergeToolShelfInto } from './liveProgress.js';
|
|
7
|
+
describe('isTodoDone', () => {
|
|
8
|
+
it('only treats non-empty all-completed/cancelled lists as done', () => {
|
|
9
|
+
expect(isTodoDone([])).toBe(false);
|
|
10
|
+
expect(isTodoDone([{ content: 'x', id: 'x', status: 'completed' }])).toBe(true);
|
|
11
|
+
expect(isTodoDone([{ content: 'x', id: 'x', status: 'in_progress' }])).toBe(false);
|
|
12
|
+
expect(isTodoDone([
|
|
13
|
+
{ content: 'x', id: 'x', status: 'completed' },
|
|
14
|
+
{ content: 'y', id: 'y', status: 'cancelled' }
|
|
15
|
+
])).toBe(true);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
describe('tool shelf helpers', () => {
|
|
19
|
+
it('recognizes contextual thinking shelves as holders', () => {
|
|
20
|
+
expect(canHoldToolShelf({ kind: 'trail', role: 'system', text: '', thinking: 'plan' })).toBe(true);
|
|
21
|
+
expect(canHoldToolShelf({ kind: 'trail', role: 'system', text: '', tools: ['one ✓'] })).toBe(true);
|
|
22
|
+
expect(canHoldToolShelf({ role: 'assistant', text: 'done' })).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
it('merges source rows into an existing shelf', () => {
|
|
25
|
+
expect(mergeToolShelfInto({ kind: 'trail', role: 'system', text: '', thinking: 'plan', tools: ['one ✓'] }, { kind: 'trail', role: 'system', text: '', tools: ['two ✓'] })).toEqual({ kind: 'trail', role: 'system', text: '', thinking: 'plan', tools: ['one ✓', 'two ✓'] });
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe('appendToolShelfMessage', () => {
|
|
29
|
+
it('merges adjacent tool shelves into one contextual shelf', () => {
|
|
30
|
+
const merged = appendToolShelfMessage([{ kind: 'trail', role: 'system', text: '', tools: ['one ✓'] }], {
|
|
31
|
+
kind: 'trail',
|
|
32
|
+
role: 'system',
|
|
33
|
+
text: '',
|
|
34
|
+
tools: ['two ✓']
|
|
35
|
+
});
|
|
36
|
+
expect(merged).toEqual([{ kind: 'trail', role: 'system', text: '', tools: ['one ✓', 'two ✓'] }]);
|
|
37
|
+
});
|
|
38
|
+
it('adds tools to the nearest contextual thinking shelf', () => {
|
|
39
|
+
const merged = appendToolShelfMessage([{ kind: 'trail', role: 'system', text: '', thinking: 'plan', tools: ['one ✓'] }], { kind: 'trail', role: 'system', text: '', tools: ['two ✓'] });
|
|
40
|
+
expect(merged).toEqual([{ kind: 'trail', role: 'system', text: '', thinking: 'plan', tools: ['one ✓', 'two ✓'] }]);
|
|
41
|
+
});
|
|
42
|
+
it('merges through intervening thinking-only rows back into the nearest holder', () => {
|
|
43
|
+
const prev = [
|
|
44
|
+
{ kind: 'trail', role: 'system', text: '', thinking: 'plan', tools: ['one ✓'] },
|
|
45
|
+
{ kind: 'trail', role: 'system', text: '', thinking: 'more plan' }
|
|
46
|
+
];
|
|
47
|
+
const merged = appendToolShelfMessage(prev, {
|
|
48
|
+
kind: 'trail',
|
|
49
|
+
role: 'system',
|
|
50
|
+
text: '',
|
|
51
|
+
tools: ['two ✓']
|
|
52
|
+
});
|
|
53
|
+
expect(merged).toHaveLength(2);
|
|
54
|
+
expect(merged[0]).toEqual({
|
|
55
|
+
kind: 'trail',
|
|
56
|
+
role: 'system',
|
|
57
|
+
text: '',
|
|
58
|
+
thinking: 'plan',
|
|
59
|
+
tools: ['one ✓', 'two ✓']
|
|
60
|
+
});
|
|
61
|
+
expect(merged[1]).toEqual({ kind: 'trail', role: 'system', text: '', thinking: 'more plan' });
|
|
62
|
+
});
|
|
63
|
+
it('collapses a chronological thinking/tool/thinking/tool stream into one shelf', () => {
|
|
64
|
+
const events = [
|
|
65
|
+
{ kind: 'trail', role: 'system', text: '', thinking: 'plan' },
|
|
66
|
+
{ kind: 'trail', role: 'system', text: '', tools: ['one ✓'] },
|
|
67
|
+
{ kind: 'trail', role: 'system', text: '', thinking: 'more plan' },
|
|
68
|
+
{ kind: 'trail', role: 'system', text: '', tools: ['two ✓'] },
|
|
69
|
+
{ kind: 'trail', role: 'system', text: '', tools: ['three ✓'] }
|
|
70
|
+
];
|
|
71
|
+
const reduced = events.reduce((acc, msg) => appendToolShelfMessage(acc, msg), []);
|
|
72
|
+
expect(reduced).toHaveLength(2);
|
|
73
|
+
expect(reduced[0]).toEqual({
|
|
74
|
+
kind: 'trail',
|
|
75
|
+
role: 'system',
|
|
76
|
+
text: '',
|
|
77
|
+
thinking: 'plan',
|
|
78
|
+
tools: ['one ✓', 'two ✓', 'three ✓']
|
|
79
|
+
});
|
|
80
|
+
expect(reduced[1]).toEqual({ kind: 'trail', role: 'system', text: '', thinking: 'more plan' });
|
|
81
|
+
});
|
|
82
|
+
it('starts a new shelf across assistant text boundaries', () => {
|
|
83
|
+
const merged = appendToolShelfMessage([
|
|
84
|
+
{ kind: 'trail', role: 'system', text: '', tools: ['one ✓'] },
|
|
85
|
+
{ role: 'assistant', text: 'done' }
|
|
86
|
+
], { kind: 'trail', role: 'system', text: '', tools: ['two ✓'] });
|
|
87
|
+
expect(merged).toHaveLength(3);
|
|
88
|
+
});
|
|
89
|
+
});
|