@prestyj/cli 4.2.46 → 4.2.62
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 +1 -1
- package/dist/cli.js +129 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.js +5 -5
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +11 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/compactor.d.ts +8 -4
- package/dist/core/compaction/compactor.d.ts.map +1 -1
- package/dist/core/compaction/compactor.js +203 -27
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +6 -4
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/core/compaction/token-estimator.test.js +1 -1
- package/dist/core/compaction/token-estimator.test.js.map +1 -1
- package/dist/core/model-registry.js +5 -5
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +54 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/telegram.d.ts +19 -0
- package/dist/core/telegram.d.ts.map +1 -1
- package/dist/core/telegram.js +25 -0
- package/dist/core/telegram.js.map +1 -1
- package/dist/core/voice-transcriber.d.ts +33 -0
- package/dist/core/voice-transcriber.d.ts.map +1 -0
- package/dist/core/voice-transcriber.js +113 -0
- package/dist/core/voice-transcriber.js.map +1 -0
- package/dist/core/voice-transcriber.test.d.ts +2 -0
- package/dist/core/voice-transcriber.test.d.ts.map +1 -0
- package/dist/core/voice-transcriber.test.js +88 -0
- package/dist/core/voice-transcriber.test.js.map +1 -0
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +1 -0
- package/dist/interactive.js.map +1 -1
- package/dist/modes/serve-mode.d.ts.map +1 -1
- package/dist/modes/serve-mode.js +37 -0
- package/dist/modes/serve-mode.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +4 -7
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit-diff.test.d.ts +2 -0
- package/dist/tools/edit-diff.test.d.ts.map +1 -0
- package/dist/tools/edit-diff.test.js +67 -0
- package/dist/tools/edit-diff.test.js.map +1 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +4 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/edit.test.d.ts +2 -0
- package/dist/tools/edit.test.d.ts.map +1 -0
- package/dist/tools/edit.test.js +93 -0
- package/dist/tools/edit.test.js.map +1 -0
- package/dist/tools/overflow.d.ts +6 -0
- package/dist/tools/overflow.d.ts.map +1 -0
- package/dist/tools/overflow.js +13 -0
- package/dist/tools/overflow.js.map +1 -0
- package/dist/tools/path-utils.test.d.ts +2 -0
- package/dist/tools/path-utils.test.d.ts.map +1 -0
- package/dist/tools/path-utils.test.js +49 -0
- package/dist/tools/path-utils.test.js.map +1 -0
- package/dist/tools/plan-mode.test.js.map +1 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +6 -2
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/read.test.d.ts +2 -0
- package/dist/tools/read.test.d.ts.map +1 -0
- package/dist/tools/read.test.js +81 -0
- package/dist/tools/read.test.js.map +1 -0
- package/dist/tools/truncate-utils.test.d.ts +2 -0
- package/dist/tools/truncate-utils.test.d.ts.map +1 -0
- package/dist/tools/truncate-utils.test.js +93 -0
- package/dist/tools/truncate-utils.test.js.map +1 -0
- package/dist/tools/truncate.d.ts +6 -4
- package/dist/tools/truncate.d.ts.map +1 -1
- package/dist/tools/truncate.js +12 -10
- package/dist/tools/truncate.js.map +1 -1
- package/dist/tools/write.test.js +65 -52
- package/dist/tools/write.test.js.map +1 -1
- package/dist/ui/App.d.ts +8 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +62 -15
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/activity-phrases.d.ts +10 -0
- package/dist/ui/activity-phrases.d.ts.map +1 -0
- package/dist/ui/activity-phrases.js +227 -0
- package/dist/ui/activity-phrases.js.map +1 -0
- package/dist/ui/components/ActivityIndicator.d.ts +3 -2
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +25 -244
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/components/AnimationContext.d.ts +9 -2
- package/dist/ui/components/AnimationContext.d.ts.map +1 -1
- package/dist/ui/components/AnimationContext.js +46 -7
- package/dist/ui/components/AnimationContext.js.map +1 -1
- package/dist/ui/components/AssistantMessage.d.ts +2 -1
- package/dist/ui/components/AssistantMessage.d.ts.map +1 -1
- package/dist/ui/components/AssistantMessage.js +2 -2
- package/dist/ui/components/AssistantMessage.js.map +1 -1
- package/dist/ui/components/Banner.d.ts.map +1 -1
- package/dist/ui/components/Banner.js +10 -1
- package/dist/ui/components/Banner.js.map +1 -1
- package/dist/ui/components/CompactionNotice.d.ts.map +1 -1
- package/dist/ui/components/CompactionNotice.js +2 -1
- package/dist/ui/components/CompactionNotice.js.map +1 -1
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +27 -17
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +585 -60
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/Markdown.d.ts +9 -4
- package/dist/ui/components/Markdown.d.ts.map +1 -1
- package/dist/ui/components/Markdown.js +74 -17
- package/dist/ui/components/Markdown.js.map +1 -1
- package/dist/ui/components/PlanApproval.d.ts.map +1 -1
- package/dist/ui/components/PlanApproval.js +17 -1
- package/dist/ui/components/PlanApproval.js.map +1 -1
- package/dist/ui/components/PlanBanner.d.ts.map +1 -1
- package/dist/ui/components/PlanBanner.js +18 -1
- package/dist/ui/components/PlanBanner.js.map +1 -1
- package/dist/ui/components/PlanOverlay.d.ts.map +1 -1
- package/dist/ui/components/PlanOverlay.js +43 -12
- package/dist/ui/components/PlanOverlay.js.map +1 -1
- package/dist/ui/components/SkillsOverlay.d.ts.map +1 -1
- package/dist/ui/components/SkillsOverlay.js +5 -1
- package/dist/ui/components/SkillsOverlay.js.map +1 -1
- package/dist/ui/components/Spinner.d.ts.map +1 -1
- package/dist/ui/components/Spinner.js +2 -1
- package/dist/ui/components/Spinner.js.map +1 -1
- package/dist/ui/components/StreamingArea.d.ts +2 -1
- package/dist/ui/components/StreamingArea.d.ts.map +1 -1
- package/dist/ui/components/StreamingArea.js +4 -4
- package/dist/ui/components/StreamingArea.js.map +1 -1
- package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
- package/dist/ui/components/SubAgentPanel.js +2 -1
- package/dist/ui/components/SubAgentPanel.js.map +1 -1
- package/dist/ui/components/TaskOverlay.d.ts.map +1 -1
- package/dist/ui/components/TaskOverlay.js +5 -1
- package/dist/ui/components/TaskOverlay.js.map +1 -1
- package/dist/ui/components/ThinkingBlock.d.ts +2 -1
- package/dist/ui/components/ThinkingBlock.d.ts.map +1 -1
- package/dist/ui/components/ThinkingBlock.js +2 -2
- package/dist/ui/components/ThinkingBlock.js.map +1 -1
- package/dist/ui/components/ThinkingIndicator.d.ts.map +1 -1
- package/dist/ui/components/ThinkingIndicator.js +2 -1
- package/dist/ui/components/ThinkingIndicator.js.map +1 -1
- package/dist/ui/components/ToolExecution.d.ts +1 -0
- package/dist/ui/components/ToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolExecution.js +7 -4
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/components/index.d.ts +1 -1
- package/dist/ui/components/index.d.ts.map +1 -1
- package/dist/ui/components/index.js +1 -1
- package/dist/ui/components/index.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +8 -1
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +69 -80
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useTerminalSize.d.ts +7 -7
- package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalSize.js +25 -12
- package/dist/ui/hooks/useTerminalSize.js.map +1 -1
- package/dist/ui/hooks/useTerminalTitle.d.ts +8 -1
- package/dist/ui/hooks/useTerminalTitle.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalTitle.js +21 -23
- package/dist/ui/hooks/useTerminalTitle.js.map +1 -1
- package/dist/ui/plan-overlay.test.d.ts +2 -0
- package/dist/ui/plan-overlay.test.d.ts.map +1 -0
- package/dist/ui/plan-overlay.test.js +327 -0
- package/dist/ui/plan-overlay.test.js.map +1 -0
- package/package.json +6 -4
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
// ── Phrase lists ────────────────────────────────────────────
|
|
2
|
+
const CONTEXTUAL_PHRASES = [
|
|
3
|
+
{
|
|
4
|
+
keywords: /\b(bug|fix|error|issue|broken|crash|fail|wrong)\b/i,
|
|
5
|
+
phrases: [
|
|
6
|
+
"Investigating",
|
|
7
|
+
"Diagnosing",
|
|
8
|
+
"Tracing the issue",
|
|
9
|
+
"Hunting the bug",
|
|
10
|
+
"Analyzing the problem",
|
|
11
|
+
"Narrowing it down",
|
|
12
|
+
],
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
keywords: /\b(refactor|clean|improve|optimize|simplify|restructure)\b/i,
|
|
16
|
+
phrases: [
|
|
17
|
+
"Studying the code",
|
|
18
|
+
"Planning improvements",
|
|
19
|
+
"Mapping dependencies",
|
|
20
|
+
"Finding patterns",
|
|
21
|
+
"Designing the approach",
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
keywords: /\b(test|spec|coverage|assert|expect|describe|it\()\b/i,
|
|
26
|
+
phrases: [
|
|
27
|
+
"Designing tests",
|
|
28
|
+
"Thinking about edge cases",
|
|
29
|
+
"Planning test coverage",
|
|
30
|
+
"Considering scenarios",
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
keywords: /\b(build|deploy|ci|cd|pipeline|docker|config)\b/i,
|
|
35
|
+
phrases: [
|
|
36
|
+
"Checking the config",
|
|
37
|
+
"Analyzing the pipeline",
|
|
38
|
+
"Working through setup",
|
|
39
|
+
"Reviewing the build",
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
keywords: /\b(style|css|ui|layout|design|color|theme|display|render)\b/i,
|
|
44
|
+
phrases: [
|
|
45
|
+
"Visualizing the layout",
|
|
46
|
+
"Crafting the design",
|
|
47
|
+
"Considering the aesthetics",
|
|
48
|
+
"Sketching it out",
|
|
49
|
+
"Polishing the pixels",
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
keywords: /\b(add|create|new|implement|feature|make|build)\b/i,
|
|
54
|
+
phrases: [
|
|
55
|
+
"Architecting",
|
|
56
|
+
"Drafting the approach",
|
|
57
|
+
"Planning the implementation",
|
|
58
|
+
"Mapping it out",
|
|
59
|
+
"Designing the solution",
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
keywords: /\b(explain|how|why|what|understand|describe)\b/i,
|
|
64
|
+
phrases: [
|
|
65
|
+
"Reading through the code",
|
|
66
|
+
"Connecting the dots",
|
|
67
|
+
"Building understanding",
|
|
68
|
+
"Tracing the logic",
|
|
69
|
+
"Piecing it together",
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
keywords: /\b(delete|remove|drop|clean\s*up|prune|trim)\b/i,
|
|
74
|
+
phrases: ["Identifying dead code", "Marking for removal", "Cleaning house", "Pruning the tree"],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
keywords: /\b(move|rename|reorganize|restructure|migrate)\b/i,
|
|
78
|
+
phrases: ["Planning the move", "Mapping the migration", "Tracing dependencies", "Reorganizing"],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
keywords: /\b(fetch|url|http|api|request|web|download|scrape)\b/i,
|
|
82
|
+
phrases: ["Checking the docs", "Looking it up", "Pulling references", "Gathering info"],
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
keywords: /\b(debug|log|trace|inspect|breakpoint|stack\s*trace)\b/i,
|
|
86
|
+
phrases: [
|
|
87
|
+
"Following the trail",
|
|
88
|
+
"Inspecting the stack",
|
|
89
|
+
"Chasing the bug",
|
|
90
|
+
"Tracing execution",
|
|
91
|
+
"Zeroing in",
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
keywords: /\b(type|types|interface|generic|typescript|schema)\b/i,
|
|
96
|
+
phrases: [
|
|
97
|
+
"Mapping the types",
|
|
98
|
+
"Checking the signatures",
|
|
99
|
+
"Modeling the data",
|
|
100
|
+
"Tracing the type graph",
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
keywords: /\b(commit|push|pull|merge|rebase|branch|git|pr)\b/i,
|
|
105
|
+
phrases: [
|
|
106
|
+
"Reviewing the history",
|
|
107
|
+
"Checking the diff",
|
|
108
|
+
"Preparing changes",
|
|
109
|
+
"Sorting out the branch",
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
keywords: /\b(install|dependency|package|upgrade|update|version)\b/i,
|
|
114
|
+
phrases: [
|
|
115
|
+
"Checking dependencies",
|
|
116
|
+
"Reviewing versions",
|
|
117
|
+
"Sorting out packages",
|
|
118
|
+
"Mapping the dep tree",
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
export const PLANNING_PHRASES = [
|
|
123
|
+
"Studying the codebase",
|
|
124
|
+
"Mapping the architecture",
|
|
125
|
+
"Drafting the plan",
|
|
126
|
+
"Analyzing dependencies",
|
|
127
|
+
"Charting the course",
|
|
128
|
+
"Surveying the landscape",
|
|
129
|
+
"Building the blueprint",
|
|
130
|
+
];
|
|
131
|
+
export const GENERAL_PHRASES = [
|
|
132
|
+
"Thinking",
|
|
133
|
+
"Reasoning",
|
|
134
|
+
"Processing",
|
|
135
|
+
"Mulling it over",
|
|
136
|
+
"Working on it",
|
|
137
|
+
"Contemplating",
|
|
138
|
+
"Figuring it out",
|
|
139
|
+
"Crunching",
|
|
140
|
+
"Assembling thoughts",
|
|
141
|
+
"Cooking up a plan",
|
|
142
|
+
"Brewing ideas",
|
|
143
|
+
"Spinning up neurons",
|
|
144
|
+
"Loading wisdom",
|
|
145
|
+
"Parsing the universe",
|
|
146
|
+
"Channeling clarity",
|
|
147
|
+
];
|
|
148
|
+
export const THINKING_PHRASES = [
|
|
149
|
+
"Deep in thought",
|
|
150
|
+
"Reasoning",
|
|
151
|
+
"Contemplating",
|
|
152
|
+
"Pondering",
|
|
153
|
+
"Reflecting",
|
|
154
|
+
"Working through it",
|
|
155
|
+
"Analyzing",
|
|
156
|
+
"Deliberating",
|
|
157
|
+
];
|
|
158
|
+
export const GENERATING_PHRASES = [
|
|
159
|
+
"Writing",
|
|
160
|
+
"Composing",
|
|
161
|
+
"Generating",
|
|
162
|
+
"Crafting a response",
|
|
163
|
+
"Drafting",
|
|
164
|
+
"Putting it together",
|
|
165
|
+
"Formulating",
|
|
166
|
+
];
|
|
167
|
+
export const TOOLS_GENERIC = [
|
|
168
|
+
"Running tools",
|
|
169
|
+
"Executing",
|
|
170
|
+
"Working",
|
|
171
|
+
"Processing",
|
|
172
|
+
"Operating",
|
|
173
|
+
"Carrying out tasks",
|
|
174
|
+
];
|
|
175
|
+
export const TOOL_PHRASES = {
|
|
176
|
+
bash: ["Running a command", "Executing in the shell", "Running a process"],
|
|
177
|
+
read: ["Reading a file", "Scanning the source", "Studying the code"],
|
|
178
|
+
write: ["Writing a file", "Creating a file", "Laying down code"],
|
|
179
|
+
edit: ["Editing a file", "Applying changes", "Patching the code"],
|
|
180
|
+
grep: ["Searching the codebase", "Scanning for matches", "Grepping"],
|
|
181
|
+
find: ["Locating files", "Searching the tree", "Scanning the directory"],
|
|
182
|
+
ls: ["Listing files", "Browsing the directory", "Scanning contents"],
|
|
183
|
+
subagent: ["Dispatching a subagent", "Delegating work", "Spinning up an agent"],
|
|
184
|
+
"web-fetch": ["Fetching from the web", "Pulling a page", "Downloading content"],
|
|
185
|
+
tasks: ["Managing tasks", "Updating the task list", "Organizing work"],
|
|
186
|
+
"task-output": ["Checking task output", "Reading task results"],
|
|
187
|
+
"task-stop": ["Stopping a task", "Halting a running task"],
|
|
188
|
+
};
|
|
189
|
+
function selectToolPhrases(activeToolNames) {
|
|
190
|
+
if (activeToolNames.length === 0)
|
|
191
|
+
return TOOLS_GENERIC;
|
|
192
|
+
const phrases = [];
|
|
193
|
+
for (const name of activeToolNames) {
|
|
194
|
+
const specific = TOOL_PHRASES[name];
|
|
195
|
+
if (specific)
|
|
196
|
+
phrases.push(...specific);
|
|
197
|
+
}
|
|
198
|
+
return phrases.length > 0 ? phrases : TOOLS_GENERIC;
|
|
199
|
+
}
|
|
200
|
+
export function selectPhrases(phase, userMessage, activeToolNames) {
|
|
201
|
+
switch (phase) {
|
|
202
|
+
case "thinking":
|
|
203
|
+
return THINKING_PHRASES;
|
|
204
|
+
case "generating":
|
|
205
|
+
return GENERATING_PHRASES;
|
|
206
|
+
case "tools":
|
|
207
|
+
return selectToolPhrases(activeToolNames);
|
|
208
|
+
default: {
|
|
209
|
+
// waiting / idle — use contextual phrases based on user message
|
|
210
|
+
for (const set of CONTEXTUAL_PHRASES) {
|
|
211
|
+
if (set.keywords.test(userMessage)) {
|
|
212
|
+
return [...set.phrases, ...GENERAL_PHRASES.slice(0, 3)];
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return GENERAL_PHRASES;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
export function shuffleArray(arr) {
|
|
220
|
+
const shuffled = [...arr];
|
|
221
|
+
for (let i = shuffled.length - 1; i > 0; i--) {
|
|
222
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
223
|
+
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
|
|
224
|
+
}
|
|
225
|
+
return shuffled;
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=activity-phrases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-phrases.js","sourceRoot":"","sources":["../../src/ui/activity-phrases.ts"],"names":[],"mappings":"AAEA,+DAA+D;AAE/D,MAAM,kBAAkB,GAAG;IACzB;QACE,QAAQ,EAAE,oDAAoD;QAC9D,OAAO,EAAE;YACP,eAAe;YACf,YAAY;YACZ,mBAAmB;YACnB,iBAAiB;YACjB,uBAAuB;YACvB,mBAAmB;SACpB;KACF;IACD;QACE,QAAQ,EAAE,6DAA6D;QACvE,OAAO,EAAE;YACP,mBAAmB;YACnB,uBAAuB;YACvB,sBAAsB;YACtB,kBAAkB;YAClB,wBAAwB;SACzB;KACF;IACD;QACE,QAAQ,EAAE,uDAAuD;QACjE,OAAO,EAAE;YACP,iBAAiB;YACjB,2BAA2B;YAC3B,wBAAwB;YACxB,uBAAuB;SACxB;KACF;IACD;QACE,QAAQ,EAAE,kDAAkD;QAC5D,OAAO,EAAE;YACP,qBAAqB;YACrB,wBAAwB;YACxB,uBAAuB;YACvB,qBAAqB;SACtB;KACF;IACD;QACE,QAAQ,EAAE,8DAA8D;QACxE,OAAO,EAAE;YACP,wBAAwB;YACxB,qBAAqB;YACrB,4BAA4B;YAC5B,kBAAkB;YAClB,sBAAsB;SACvB;KACF;IACD;QACE,QAAQ,EAAE,oDAAoD;QAC9D,OAAO,EAAE;YACP,cAAc;YACd,uBAAuB;YACvB,6BAA6B;YAC7B,gBAAgB;YAChB,wBAAwB;SACzB;KACF;IACD;QACE,QAAQ,EAAE,iDAAiD;QAC3D,OAAO,EAAE;YACP,0BAA0B;YAC1B,qBAAqB;YACrB,wBAAwB;YACxB,mBAAmB;YACnB,qBAAqB;SACtB;KACF;IACD;QACE,QAAQ,EAAE,iDAAiD;QAC3D,OAAO,EAAE,CAAC,uBAAuB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC;KAChG;IACD;QACE,QAAQ,EAAE,mDAAmD;QAC7D,OAAO,EAAE,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,cAAc,CAAC;KAChG;IACD;QACE,QAAQ,EAAE,uDAAuD;QACjE,OAAO,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,oBAAoB,EAAE,gBAAgB,CAAC;KACxF;IACD;QACE,QAAQ,EAAE,yDAAyD;QACnE,OAAO,EAAE;YACP,qBAAqB;YACrB,sBAAsB;YACtB,iBAAiB;YACjB,mBAAmB;YACnB,YAAY;SACb;KACF;IACD;QACE,QAAQ,EAAE,uDAAuD;QACjE,OAAO,EAAE;YACP,mBAAmB;YACnB,yBAAyB;YACzB,mBAAmB;YACnB,wBAAwB;SACzB;KACF;IACD;QACE,QAAQ,EAAE,oDAAoD;QAC9D,OAAO,EAAE;YACP,uBAAuB;YACvB,mBAAmB;YACnB,mBAAmB;YACnB,wBAAwB;SACzB;KACF;IACD;QACE,QAAQ,EAAE,0DAA0D;QACpE,OAAO,EAAE;YACP,uBAAuB;YACvB,oBAAoB;YACpB,sBAAsB;YACtB,sBAAsB;SACvB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,uBAAuB;IACvB,0BAA0B;IAC1B,mBAAmB;IACnB,wBAAwB;IACxB,qBAAqB;IACrB,yBAAyB;IACzB,wBAAwB;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU;IACV,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,WAAW;IACX,qBAAqB;IACrB,mBAAmB;IACnB,eAAe;IACf,qBAAqB;IACrB,gBAAgB;IAChB,sBAAsB;IACtB,oBAAoB;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iBAAiB;IACjB,WAAW;IACX,eAAe;IACf,WAAW;IACX,YAAY;IACZ,oBAAoB;IACpB,WAAW;IACX,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS;IACT,WAAW;IACX,YAAY;IACZ,qBAAqB;IACrB,UAAU;IACV,qBAAqB;IACrB,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,eAAe;IACf,WAAW;IACX,SAAS;IACT,YAAY;IACZ,WAAW;IACX,oBAAoB;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAA6B;IACpD,IAAI,EAAE,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,mBAAmB,CAAC;IAC1E,IAAI,EAAE,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,mBAAmB,CAAC;IACpE,KAAK,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC;IAChE,IAAI,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC;IACjE,IAAI,EAAE,CAAC,wBAAwB,EAAE,sBAAsB,EAAE,UAAU,CAAC;IACpE,IAAI,EAAE,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,wBAAwB,CAAC;IACxE,EAAE,EAAE,CAAC,eAAe,EAAE,wBAAwB,EAAE,mBAAmB,CAAC;IACpE,QAAQ,EAAE,CAAC,wBAAwB,EAAE,iBAAiB,EAAE,sBAAsB,CAAC;IAC/E,WAAW,EAAE,CAAC,uBAAuB,EAAE,gBAAgB,EAAE,qBAAqB,CAAC;IAC/E,KAAK,EAAE,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,iBAAiB,CAAC;IACtE,aAAa,EAAE,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAC/D,WAAW,EAAE,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;CAC3D,CAAC;AAEF,SAAS,iBAAiB,CAAC,eAAyB;IAClD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC;IAEvD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAAoB,EACpB,WAAmB,EACnB,eAAyB;IAEzB,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,UAAU;YACb,OAAO,gBAAgB,CAAC;QAC1B,KAAK,YAAY;YACf,OAAO,kBAAkB,CAAC;QAC5B,KAAK,OAAO;YACV,OAAO,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC5C,OAAO,CAAC,CAAC,CAAC;YACR,gEAAgE;YAChE,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;gBACrC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBACnC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;YACD,OAAO,eAAe,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,GAAQ;IACtC,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ActivityPhase } from "../hooks/useAgentLoop.js";
|
|
1
|
+
import type { ActivityPhase, RetryInfo } from "../hooks/useAgentLoop.js";
|
|
2
2
|
interface ActivityIndicatorProps {
|
|
3
3
|
phase: ActivityPhase;
|
|
4
4
|
elapsedMs: number;
|
|
@@ -8,7 +8,8 @@ interface ActivityIndicatorProps {
|
|
|
8
8
|
userMessage?: string;
|
|
9
9
|
activeToolNames?: string[];
|
|
10
10
|
planMode?: boolean;
|
|
11
|
+
retryInfo?: RetryInfo | null;
|
|
11
12
|
}
|
|
12
|
-
export declare function ActivityIndicator({ phase, elapsedMs, thinkingMs, isThinking, tokenEstimate, userMessage, activeToolNames, planMode, }: ActivityIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function ActivityIndicator({ phase, elapsedMs, thinkingMs, isThinking, tokenEstimate, userMessage, activeToolNames, planMode, retryInfo, }: ActivityIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
13
14
|
export {};
|
|
14
15
|
//# sourceMappingURL=ActivityIndicator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityIndicator.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"ActivityIndicator.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAuGzE,UAAU,sBAAsB;IAC9B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC9B;AASD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,aAAa,EACb,WAAgB,EAChB,eAAoB,EACpB,QAAQ,EACR,SAAS,GACV,EAAE,sBAAsB,2CAkFxB"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import React, {
|
|
2
|
+
import React, { useMemo } from "react";
|
|
3
3
|
import { Text, Box } from "ink";
|
|
4
4
|
import { useTheme } from "../theme/theme.js";
|
|
5
5
|
import { SPINNER_FRAMES, SPINNER_INTERVAL } from "../spinner-frames.js";
|
|
6
|
+
import { PLANNING_PHRASES, selectPhrases, shuffleArray } from "../activity-phrases.js";
|
|
7
|
+
import { useAnimationTick, useAnimationActive, deriveFrame } from "./AnimationContext.js";
|
|
6
8
|
// ── Color pulse cycle ─────────────────────────────────────
|
|
7
9
|
const PULSE_COLORS = [
|
|
8
10
|
"#60a5fa", // blue
|
|
@@ -29,231 +31,6 @@ const ELLIPSIS_INTERVAL = 500;
|
|
|
29
31
|
// ── Phrase rotation ───────────────────────────────────────
|
|
30
32
|
const WAITING_PHRASE_INTERVAL = 3000;
|
|
31
33
|
const OTHER_PHRASE_INTERVAL = 4000;
|
|
32
|
-
const CONTEXTUAL_PHRASES = [
|
|
33
|
-
{
|
|
34
|
-
keywords: /\b(bug|fix|error|issue|broken|crash|fail|wrong)\b/i,
|
|
35
|
-
phrases: [
|
|
36
|
-
"Investigating",
|
|
37
|
-
"Diagnosing",
|
|
38
|
-
"Tracing the issue",
|
|
39
|
-
"Hunting the bug",
|
|
40
|
-
"Analyzing the problem",
|
|
41
|
-
"Narrowing it down",
|
|
42
|
-
],
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
keywords: /\b(refactor|clean|improve|optimize|simplify|restructure)\b/i,
|
|
46
|
-
phrases: [
|
|
47
|
-
"Studying the code",
|
|
48
|
-
"Planning improvements",
|
|
49
|
-
"Mapping dependencies",
|
|
50
|
-
"Finding patterns",
|
|
51
|
-
"Designing the approach",
|
|
52
|
-
],
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
keywords: /\b(test|spec|coverage|assert|expect|describe|it\()\b/i,
|
|
56
|
-
phrases: [
|
|
57
|
-
"Designing tests",
|
|
58
|
-
"Thinking about edge cases",
|
|
59
|
-
"Planning test coverage",
|
|
60
|
-
"Considering scenarios",
|
|
61
|
-
],
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
keywords: /\b(build|deploy|ci|cd|pipeline|docker|config)\b/i,
|
|
65
|
-
phrases: [
|
|
66
|
-
"Checking the config",
|
|
67
|
-
"Analyzing the pipeline",
|
|
68
|
-
"Working through setup",
|
|
69
|
-
"Reviewing the build",
|
|
70
|
-
],
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
keywords: /\b(style|css|ui|layout|design|color|theme|display|render)\b/i,
|
|
74
|
-
phrases: [
|
|
75
|
-
"Visualizing the layout",
|
|
76
|
-
"Crafting the design",
|
|
77
|
-
"Considering the aesthetics",
|
|
78
|
-
"Sketching it out",
|
|
79
|
-
"Polishing the pixels",
|
|
80
|
-
],
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
keywords: /\b(add|create|new|implement|feature|make|build)\b/i,
|
|
84
|
-
phrases: [
|
|
85
|
-
"Architecting",
|
|
86
|
-
"Drafting the approach",
|
|
87
|
-
"Planning the implementation",
|
|
88
|
-
"Mapping it out",
|
|
89
|
-
"Designing the solution",
|
|
90
|
-
],
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
keywords: /\b(explain|how|why|what|understand|describe)\b/i,
|
|
94
|
-
phrases: [
|
|
95
|
-
"Reading through the code",
|
|
96
|
-
"Connecting the dots",
|
|
97
|
-
"Building understanding",
|
|
98
|
-
"Tracing the logic",
|
|
99
|
-
"Piecing it together",
|
|
100
|
-
],
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
keywords: /\b(delete|remove|drop|clean\s*up|prune|trim)\b/i,
|
|
104
|
-
phrases: ["Identifying dead code", "Marking for removal", "Cleaning house", "Pruning the tree"],
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
keywords: /\b(move|rename|reorganize|restructure|migrate)\b/i,
|
|
108
|
-
phrases: ["Planning the move", "Mapping the migration", "Tracing dependencies", "Reorganizing"],
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
keywords: /\b(fetch|url|http|api|request|web|download|scrape)\b/i,
|
|
112
|
-
phrases: ["Checking the docs", "Looking it up", "Pulling references", "Gathering info"],
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
keywords: /\b(debug|log|trace|inspect|breakpoint|stack\s*trace)\b/i,
|
|
116
|
-
phrases: [
|
|
117
|
-
"Following the trail",
|
|
118
|
-
"Inspecting the stack",
|
|
119
|
-
"Chasing the bug",
|
|
120
|
-
"Tracing execution",
|
|
121
|
-
"Zeroing in",
|
|
122
|
-
],
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
keywords: /\b(type|types|interface|generic|typescript|schema)\b/i,
|
|
126
|
-
phrases: [
|
|
127
|
-
"Mapping the types",
|
|
128
|
-
"Checking the signatures",
|
|
129
|
-
"Modeling the data",
|
|
130
|
-
"Tracing the type graph",
|
|
131
|
-
],
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
keywords: /\b(commit|push|pull|merge|rebase|branch|git|pr)\b/i,
|
|
135
|
-
phrases: [
|
|
136
|
-
"Reviewing the history",
|
|
137
|
-
"Checking the diff",
|
|
138
|
-
"Preparing changes",
|
|
139
|
-
"Sorting out the branch",
|
|
140
|
-
],
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
keywords: /\b(install|dependency|package|upgrade|update|version)\b/i,
|
|
144
|
-
phrases: [
|
|
145
|
-
"Checking dependencies",
|
|
146
|
-
"Reviewing versions",
|
|
147
|
-
"Sorting out packages",
|
|
148
|
-
"Mapping the dep tree",
|
|
149
|
-
],
|
|
150
|
-
},
|
|
151
|
-
];
|
|
152
|
-
const PLANNING_PHRASES = [
|
|
153
|
-
"Studying the codebase",
|
|
154
|
-
"Mapping the architecture",
|
|
155
|
-
"Drafting the plan",
|
|
156
|
-
"Analyzing dependencies",
|
|
157
|
-
"Charting the course",
|
|
158
|
-
"Surveying the landscape",
|
|
159
|
-
"Building the blueprint",
|
|
160
|
-
];
|
|
161
|
-
const GENERAL_PHRASES = [
|
|
162
|
-
"Thinking",
|
|
163
|
-
"Reasoning",
|
|
164
|
-
"Processing",
|
|
165
|
-
"Mulling it over",
|
|
166
|
-
"Working on it",
|
|
167
|
-
"Contemplating",
|
|
168
|
-
"Figuring it out",
|
|
169
|
-
"Crunching",
|
|
170
|
-
"Assembling thoughts",
|
|
171
|
-
"Cooking up a plan",
|
|
172
|
-
"Brewing ideas",
|
|
173
|
-
"Spinning up neurons",
|
|
174
|
-
"Loading wisdom",
|
|
175
|
-
"Parsing the universe",
|
|
176
|
-
"Channeling clarity",
|
|
177
|
-
];
|
|
178
|
-
const THINKING_PHRASES = [
|
|
179
|
-
"Deep in thought",
|
|
180
|
-
"Reasoning",
|
|
181
|
-
"Contemplating",
|
|
182
|
-
"Pondering",
|
|
183
|
-
"Reflecting",
|
|
184
|
-
"Working through it",
|
|
185
|
-
"Analyzing",
|
|
186
|
-
"Deliberating",
|
|
187
|
-
];
|
|
188
|
-
const GENERATING_PHRASES = [
|
|
189
|
-
"Writing",
|
|
190
|
-
"Composing",
|
|
191
|
-
"Generating",
|
|
192
|
-
"Crafting a response",
|
|
193
|
-
"Drafting",
|
|
194
|
-
"Putting it together",
|
|
195
|
-
"Formulating",
|
|
196
|
-
];
|
|
197
|
-
const TOOLS_GENERIC = [
|
|
198
|
-
"Running tools",
|
|
199
|
-
"Executing",
|
|
200
|
-
"Working",
|
|
201
|
-
"Processing",
|
|
202
|
-
"Operating",
|
|
203
|
-
"Carrying out tasks",
|
|
204
|
-
];
|
|
205
|
-
const TOOL_PHRASES = {
|
|
206
|
-
bash: ["Running a command", "Executing in the shell", "Running a process"],
|
|
207
|
-
read: ["Reading a file", "Scanning the source", "Studying the code"],
|
|
208
|
-
write: ["Writing a file", "Creating a file", "Laying down code"],
|
|
209
|
-
edit: ["Editing a file", "Applying changes", "Patching the code"],
|
|
210
|
-
grep: ["Searching the codebase", "Scanning for matches", "Grepping"],
|
|
211
|
-
find: ["Locating files", "Searching the tree", "Scanning the directory"],
|
|
212
|
-
ls: ["Listing files", "Browsing the directory", "Scanning contents"],
|
|
213
|
-
subagent: ["Dispatching a subagent", "Delegating work", "Spinning up an agent"],
|
|
214
|
-
"web-fetch": ["Fetching from the web", "Pulling a page", "Downloading content"],
|
|
215
|
-
tasks: ["Managing tasks", "Updating the task list", "Organizing work"],
|
|
216
|
-
"task-output": ["Checking task output", "Reading task results"],
|
|
217
|
-
"task-stop": ["Stopping a task", "Halting a running task"],
|
|
218
|
-
};
|
|
219
|
-
function selectToolPhrases(activeToolNames) {
|
|
220
|
-
if (activeToolNames.length === 0)
|
|
221
|
-
return TOOLS_GENERIC;
|
|
222
|
-
const phrases = [];
|
|
223
|
-
for (const name of activeToolNames) {
|
|
224
|
-
const specific = TOOL_PHRASES[name];
|
|
225
|
-
if (specific)
|
|
226
|
-
phrases.push(...specific);
|
|
227
|
-
}
|
|
228
|
-
return phrases.length > 0 ? phrases : TOOLS_GENERIC;
|
|
229
|
-
}
|
|
230
|
-
function selectPhrases(phase, userMessage, activeToolNames) {
|
|
231
|
-
switch (phase) {
|
|
232
|
-
case "thinking":
|
|
233
|
-
return THINKING_PHRASES;
|
|
234
|
-
case "generating":
|
|
235
|
-
return GENERATING_PHRASES;
|
|
236
|
-
case "tools":
|
|
237
|
-
return selectToolPhrases(activeToolNames);
|
|
238
|
-
default: {
|
|
239
|
-
// waiting / idle — use contextual phrases based on user message
|
|
240
|
-
for (const set of CONTEXTUAL_PHRASES) {
|
|
241
|
-
if (set.keywords.test(userMessage)) {
|
|
242
|
-
return [...set.phrases, ...GENERAL_PHRASES.slice(0, 3)];
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
return GENERAL_PHRASES;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
function shuffleArray(arr) {
|
|
250
|
-
const shuffled = [...arr];
|
|
251
|
-
for (let i = shuffled.length - 1; i > 0; i--) {
|
|
252
|
-
const j = Math.floor(Math.random() * (i + 1));
|
|
253
|
-
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
|
|
254
|
-
}
|
|
255
|
-
return shuffled;
|
|
256
|
-
}
|
|
257
34
|
// ── Formatting helpers ────────────────────────────────────
|
|
258
35
|
function formatElapsed(ms) {
|
|
259
36
|
const totalSec = Math.round(ms / 1000);
|
|
@@ -292,27 +69,24 @@ const ShimmerText = ({ text, color, shimmerPos, }) => (_jsx(Text, { children: te
|
|
|
292
69
|
const isBright = Math.abs(i - shimmerPos) <= SHIMMER_WIDTH;
|
|
293
70
|
return (_jsx(Text, { bold: isBright, color: color, dimColor: !isBright, children: char }, i));
|
|
294
71
|
}) }));
|
|
295
|
-
|
|
72
|
+
const RETRY_REASON_LABELS = {
|
|
73
|
+
overloaded: "Provider overloaded",
|
|
74
|
+
rate_limit: "Rate limited",
|
|
75
|
+
empty_response: "Empty response",
|
|
76
|
+
context_overflow: "Context overflow, compacting",
|
|
77
|
+
};
|
|
78
|
+
export function ActivityIndicator({ phase, elapsedMs, thinkingMs, isThinking, tokenEstimate, userMessage = "", activeToolNames = [], planMode, retryInfo, }) {
|
|
296
79
|
const theme = useTheme();
|
|
297
|
-
//
|
|
298
|
-
//
|
|
299
|
-
//
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
// per tick, which prevents live-area height miscalculations that cause
|
|
303
|
-
// viewport jumping.
|
|
304
|
-
const [tick, setTick] = useState(0);
|
|
305
|
-
useEffect(() => {
|
|
306
|
-
const timer = setInterval(() => {
|
|
307
|
-
setTick((t) => t + 1);
|
|
308
|
-
}, SHIMMER_INTERVAL);
|
|
309
|
-
return () => clearInterval(timer);
|
|
310
|
-
}, []);
|
|
80
|
+
// Use the global animation tick instead of a local timer.
|
|
81
|
+
// This eliminates a duplicate 100ms setInterval that was causing
|
|
82
|
+
// independent re-renders on top of the global AnimationProvider tick.
|
|
83
|
+
useAnimationActive();
|
|
84
|
+
const tick = useAnimationTick();
|
|
311
85
|
// Derive all animation frames from the single tick counter
|
|
312
|
-
const spinnerFrame =
|
|
86
|
+
const spinnerFrame = deriveFrame(tick, SPINNER_INTERVAL, SPINNER_FRAMES.length);
|
|
313
87
|
const pulseColors = planMode ? PLAN_PULSE_COLORS : PULSE_COLORS;
|
|
314
|
-
const colorFrame =
|
|
315
|
-
const ellipsisFrame =
|
|
88
|
+
const colorFrame = deriveFrame(tick, PULSE_INTERVAL, pulseColors.length);
|
|
89
|
+
const ellipsisFrame = deriveFrame(tick, ELLIPSIS_INTERVAL, ELLIPSIS_FRAMES.length);
|
|
316
90
|
// Phrase rotation — pick phrases based on phase + user message + active tools, shuffle, rotate
|
|
317
91
|
const toolNamesKey = activeToolNames.sort().join(",");
|
|
318
92
|
const phrases = useMemo(() => shuffleArray(planMode && phase === "waiting"
|
|
@@ -329,6 +103,13 @@ export function ActivityIndicator({ phase, elapsedMs, thinkingMs, isThinking, to
|
|
|
329
103
|
// Pad ellipsis to prevent text from shifting
|
|
330
104
|
const paddedEllipsis = ellipsis + " ".repeat(3 - ellipsis.length);
|
|
331
105
|
const meta = buildMetaSuffix(elapsedMs, thinkingMs, isThinking, tokenEstimate);
|
|
106
|
+
// ── Retry display ──────────────────────────────────────
|
|
107
|
+
if (phase === "retrying" && retryInfo) {
|
|
108
|
+
const retryLabel = RETRY_REASON_LABELS[retryInfo.reason];
|
|
109
|
+
const retryColor = "#f59e0b"; // amber
|
|
110
|
+
const delaySec = retryInfo.delayMs > 0 ? ` waiting ${Math.round(retryInfo.delayMs / 1000)}s` : "";
|
|
111
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: retryColor, bold: true, children: [SPINNER_FRAMES[spinnerFrame], " "] }), _jsxs(Text, { color: retryColor, children: [retryLabel, " \u2014 retrying (", retryInfo.attempt, "/", retryInfo.maxAttempts, ")"] }), _jsxs(Text, { color: theme.textDim, children: [delaySec, " (", formatElapsed(elapsedMs), ")"] })] }));
|
|
112
|
+
}
|
|
332
113
|
return (_jsxs(Box, { children: [_jsxs(Text, { color: spinnerColor, bold: true, children: [SPINNER_FRAMES[spinnerFrame], " "] }), _jsx(ShimmerText, { text: phrase, color: spinnerColor, shimmerPos: shimmerPos }), _jsx(Text, { color: theme.textDim, children: paddedEllipsis }), meta && (_jsxs(Text, { color: theme.textDim, children: [" (", meta, ")"] }))] }));
|
|
333
114
|
}
|
|
334
115
|
//# sourceMappingURL=ActivityIndicator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityIndicator.js","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"ActivityIndicator.js","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,8 +7,9 @@ import React from "react";
|
|
|
7
7
|
* arithmetic. This replaces per-component setIntervals that each caused
|
|
8
8
|
* independent React re-renders — N spinners no longer means N timers.
|
|
9
9
|
*
|
|
10
|
-
* The tick only runs while at least one
|
|
11
|
-
* (
|
|
10
|
+
* The tick only runs while at least one component has registered via
|
|
11
|
+
* `useAnimationActive()`, avoiding 10 re-renders/sec during idle streaming
|
|
12
|
+
* when no spinners or animations are visible.
|
|
12
13
|
*/
|
|
13
14
|
declare const TICK_INTERVAL = 100;
|
|
14
15
|
export declare function AnimationProvider({ children }: {
|
|
@@ -16,6 +17,12 @@ export declare function AnimationProvider({ children }: {
|
|
|
16
17
|
}): import("react/jsx-runtime").JSX.Element;
|
|
17
18
|
/** Returns the current global animation tick counter. */
|
|
18
19
|
export declare function useAnimationTick(): number;
|
|
20
|
+
/**
|
|
21
|
+
* Register this component as needing animation ticks.
|
|
22
|
+
* The global timer only runs while at least one component is registered.
|
|
23
|
+
* Call this in any component that uses animation frames (spinners, shimmer, etc).
|
|
24
|
+
*/
|
|
25
|
+
export declare function useAnimationActive(): void;
|
|
19
26
|
/** Derive a frame index from the global tick for a given interval and frame count. */
|
|
20
27
|
export declare function deriveFrame(tick: number, intervalMs: number, frameCount: number): number;
|
|
21
28
|
export { TICK_INTERVAL };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimationContext.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AnimationContext.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AnimationContext.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AnimationContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AAEnG;;;;;;;;;;;GAWG;AAEH,QAAA,MAAM,aAAa,MAAM,CAAC;AAO1B,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CA4C5E;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|