@prestyj/cli 4.2.56 → 4.2.75
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 +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -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 +3 -1
- package/dist/core/compaction/compactor.d.ts.map +1 -1
- package/dist/core/compaction/compactor.js +28 -5
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +86 -10
- 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 +8 -8
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +2 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +18 -4
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/telegram.d.ts.map +1 -1
- package/dist/core/telegram.js +3 -0
- package/dist/core/telegram.js.map +1 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +1 -0
- package/dist/interactive.js.map +1 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +21 -3
- package/dist/system-prompt.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.d.ts.map +1 -1
- package/dist/tools/edit.js +4 -1
- package/dist/tools/edit.js.map +1 -1
- 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/read.d.ts.map +1 -1
- package/dist/tools/read.js +6 -2
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/truncate-utils.test.js +11 -11
- package/dist/tools/truncate-utils.test.js.map +1 -1
- 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/ui/App.d.ts +1 -0
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +261 -62
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/buddy/Buddy.d.ts +15 -0
- package/dist/ui/buddy/Buddy.d.ts.map +1 -0
- package/dist/ui/buddy/Buddy.js +118 -0
- package/dist/ui/buddy/Buddy.js.map +1 -0
- package/dist/ui/buddy/gacha.d.ts +8 -0
- package/dist/ui/buddy/gacha.d.ts.map +1 -0
- package/dist/ui/buddy/gacha.js +94 -0
- package/dist/ui/buddy/gacha.js.map +1 -0
- package/dist/ui/buddy/species.d.ts +52 -0
- package/dist/ui/buddy/species.d.ts.map +1 -0
- package/dist/ui/buddy/species.js +257 -0
- package/dist/ui/buddy/species.js.map +1 -0
- package/dist/ui/components/ActivityIndicator.d.ts +10 -2
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +79 -22
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/components/AnimationContext.d.ts +14 -2
- package/dist/ui/components/AnimationContext.d.ts.map +1 -1
- package/dist/ui/components/AnimationContext.js +54 -8
- 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 +5 -4
- package/dist/ui/components/AssistantMessage.js.map +1 -1
- package/dist/ui/components/BackgroundTasksBar.js +2 -2
- package/dist/ui/components/BackgroundTasksBar.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 +3 -1
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +23 -48
- 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 +2 -1
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/Markdown.d.ts +11 -6
- package/dist/ui/components/Markdown.d.ts.map +1 -1
- package/dist/ui/components/Markdown.js +170 -18
- package/dist/ui/components/Markdown.js.map +1 -1
- package/dist/ui/components/MessageResponse.d.ts +25 -0
- package/dist/ui/components/MessageResponse.d.ts.map +1 -0
- package/dist/ui/components/MessageResponse.js +42 -0
- package/dist/ui/components/MessageResponse.js.map +1 -0
- package/dist/ui/components/NoSelect.d.ts +20 -0
- package/dist/ui/components/NoSelect.d.ts.map +1 -0
- package/dist/ui/components/NoSelect.js +14 -0
- package/dist/ui/components/NoSelect.js.map +1 -0
- package/dist/ui/components/PlanProgress.d.ts +7 -0
- package/dist/ui/components/PlanProgress.d.ts.map +1 -0
- package/dist/ui/components/PlanProgress.js +30 -0
- package/dist/ui/components/PlanProgress.js.map +1 -0
- package/dist/ui/components/Ratchet.d.ts +20 -0
- package/dist/ui/components/Ratchet.d.ts.map +1 -0
- package/dist/ui/components/Ratchet.js +30 -0
- package/dist/ui/components/Ratchet.js.map +1 -0
- package/dist/ui/components/ServerToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ServerToolExecution.js +5 -6
- package/dist/ui/components/ServerToolExecution.js.map +1 -1
- package/dist/ui/components/Spinner.d.ts +8 -2
- package/dist/ui/components/Spinner.d.ts.map +1 -1
- package/dist/ui/components/Spinner.js +52 -5
- 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 +9 -44
- 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 +6 -4
- package/dist/ui/components/SubAgentPanel.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 +44 -15
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolGroupExecution.js +21 -17
- package/dist/ui/components/ToolGroupExecution.js.map +1 -1
- package/dist/ui/components/ToolUseLoader.d.ts +19 -0
- package/dist/ui/components/ToolUseLoader.d.ts.map +1 -0
- package/dist/ui/components/ToolUseLoader.js +42 -0
- package/dist/ui/components/ToolUseLoader.js.map +1 -0
- 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/constants/figures.d.ts +30 -0
- package/dist/ui/constants/figures.d.ts.map +1 -0
- package/dist/ui/constants/figures.js +41 -0
- package/dist/ui/constants/figures.js.map +1 -0
- package/dist/ui/hooks/useAgentLoop.d.ts +16 -1
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +49 -141
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useBlink.d.ts +11 -0
- package/dist/ui/hooks/useBlink.d.ts.map +1 -0
- package/dist/ui/hooks/useBlink.js +19 -0
- package/dist/ui/hooks/useBlink.js.map +1 -0
- package/dist/ui/hooks/useMinDisplayTime.d.ts +11 -0
- package/dist/ui/hooks/useMinDisplayTime.d.ts.map +1 -0
- package/dist/ui/hooks/useMinDisplayTime.js +34 -0
- package/dist/ui/hooks/useMinDisplayTime.js.map +1 -0
- package/dist/ui/hooks/useTerminalProgress.d.ts +2 -0
- package/dist/ui/hooks/useTerminalProgress.d.ts.map +1 -0
- package/dist/ui/hooks/useTerminalProgress.js +98 -0
- package/dist/ui/hooks/useTerminalProgress.js.map +1 -0
- package/dist/ui/hooks/useTerminalTitle.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalTitle.js +2 -1
- package/dist/ui/hooks/useTerminalTitle.js.map +1 -1
- package/dist/ui/spinner-frames.d.ts +1 -0
- package/dist/ui/spinner-frames.d.ts.map +1 -1
- package/dist/ui/spinner-frames.js +15 -5
- package/dist/ui/spinner-frames.js.map +1 -1
- package/dist/ui/theme/dark.json +2 -1
- package/dist/ui/theme/light.json +2 -1
- package/dist/ui/theme/theme.d.ts +1 -0
- package/dist/ui/theme/theme.d.ts.map +1 -1
- package/dist/ui/utils/markdown-cache.d.ts +12 -0
- package/dist/ui/utils/markdown-cache.d.ts.map +1 -0
- package/dist/ui/utils/markdown-cache.js +43 -0
- package/dist/ui/utils/markdown-cache.js.map +1 -0
- package/dist/ui/utils/word-diff.d.ts +11 -0
- package/dist/ui/utils/word-diff.d.ts.map +1 -0
- package/dist/ui/utils/word-diff.js +23 -0
- package/dist/ui/utils/word-diff.js.map +1 -0
- package/dist/utils/plan-steps.d.ts +41 -0
- package/dist/utils/plan-steps.d.ts.map +1 -0
- package/dist/utils/plan-steps.js +91 -0
- package/dist/utils/plan-steps.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"species.d.ts","sourceRoot":"","sources":["../../../src/ui/buddy/species.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3E,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC;AAElF,MAAM,MAAM,GAAG,GACX,MAAM,GACN,OAAO,GACP,QAAQ,GACR,WAAW,GACX,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,MAAM,OAAO,GACf,MAAM,GACN,OAAO,GACP,MAAM,GACN,KAAK,GACL,QAAQ,GACR,SAAS,GACT,KAAK,GACL,SAAS,GACT,QAAQ,GACR,OAAO,GACP,OAAO,GACP,SAAS,GACT,UAAU,GACV,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,UAAU,GACV,OAAO,GACP,SAAS,CAAC;AAEd,uEAAuE;AACvE,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CASzC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAID,eAAO,MAAM,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAM5C,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMrD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM/C,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMpD,CAAC;AAMF,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAgG9C,CAAC;AAEF,yBAAyB;AACzB,eAAO,MAAM,WAAW,EAAE,OAAO,EAoBhC,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAoBlD,CAAC;AAEF,gCAAgC;AAChC,eAAO,MAAM,UAAU,EAAE,QAAQ,EAA4D,CAAC;AAI9F,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB3E;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CAU3D;AAED,kDAAkD;AAClD,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAuBxD;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buddy companion species definitions.
|
|
3
|
+
*
|
|
4
|
+
* Each species has ASCII art frames (5 lines tall, 12 chars wide),
|
|
5
|
+
* eye placeholder {E} for expression variants, and a rarity tier.
|
|
6
|
+
* Matches Claude Code's buddy system architecture.
|
|
7
|
+
*
|
|
8
|
+
* Line 0 is the hat slot — left blank so hats can overlay it.
|
|
9
|
+
* {E} is replaced with the companion's eye character at render time.
|
|
10
|
+
* Blink replaces {E} with "-" rather than using separate frames.
|
|
11
|
+
*/
|
|
12
|
+
/** Hat art for line 0 (replaces blank first line when hat present). */
|
|
13
|
+
export const HAT_LINES = {
|
|
14
|
+
none: "",
|
|
15
|
+
crown: " \\^^^/ ",
|
|
16
|
+
tophat: " ___ ",
|
|
17
|
+
propeller: " ~+~ ",
|
|
18
|
+
halo: " ooo ",
|
|
19
|
+
wizard: " /^\\ ",
|
|
20
|
+
beanie: " --- ",
|
|
21
|
+
tinyduck: " ,> ",
|
|
22
|
+
};
|
|
23
|
+
// ── Rarity config ────────────────────────────────────────────
|
|
24
|
+
export const RARITY_WEIGHTS = [
|
|
25
|
+
["common", 60],
|
|
26
|
+
["uncommon", 25],
|
|
27
|
+
["rare", 10],
|
|
28
|
+
["epic", 4],
|
|
29
|
+
["legendary", 1],
|
|
30
|
+
];
|
|
31
|
+
export const RARITY_STAT_FLOORS = {
|
|
32
|
+
common: 5,
|
|
33
|
+
uncommon: 15,
|
|
34
|
+
rare: 25,
|
|
35
|
+
epic: 35,
|
|
36
|
+
legendary: 50,
|
|
37
|
+
};
|
|
38
|
+
export const RARITY_STARS = {
|
|
39
|
+
common: "\u2605",
|
|
40
|
+
uncommon: "\u2605\u2605",
|
|
41
|
+
rare: "\u2605\u2605\u2605",
|
|
42
|
+
epic: "\u2605\u2605\u2605\u2605",
|
|
43
|
+
legendary: "\u2605\u2605\u2605\u2605\u2605",
|
|
44
|
+
};
|
|
45
|
+
// Rarity colors mapped to theme keys (like CC), with fallback hex
|
|
46
|
+
export const RARITY_THEME_KEYS = {
|
|
47
|
+
common: "textDim",
|
|
48
|
+
uncommon: "success",
|
|
49
|
+
rare: "primary",
|
|
50
|
+
epic: "accent",
|
|
51
|
+
legendary: "warning",
|
|
52
|
+
};
|
|
53
|
+
// ── Bodies: Record<Species, string[][]> ──────────────────────
|
|
54
|
+
// 3 frames per species, 5 lines each, 12 chars wide.
|
|
55
|
+
// Frame 0: idle rest. Frame 1: fidget. Frame 2: alternate/effect.
|
|
56
|
+
export const BODIES = {
|
|
57
|
+
duck: [
|
|
58
|
+
[" ", " __ ", " ({E} > ", " /||\\ ", " ~~~~ "],
|
|
59
|
+
[" ", " __ ", " ({E} > ", " \\||/ ", " ~~~~ "],
|
|
60
|
+
[" ", " __ ", " ({E} > ", " /||\\ ", " ~~~~ "],
|
|
61
|
+
],
|
|
62
|
+
goose: [
|
|
63
|
+
[" ", " __ ", " ({E} } ", " /||\\ ", " d b "],
|
|
64
|
+
[" ", " __ ", " ({E} } ", " /|~|\\ ", " d b "],
|
|
65
|
+
[" ", " _/__ ", " ({E} } ", " /||\\ ", " d b "],
|
|
66
|
+
],
|
|
67
|
+
blob: [
|
|
68
|
+
[" ", " .-----. ", " ( {E} {E} ) ", " ( __ ) ", " '---' "],
|
|
69
|
+
[" ", " .-----. ", " ( {E} {E} ) ", " ( __ ) ", " '--' "],
|
|
70
|
+
[" ", " .-----. ", " ( {E} {E} ) ", " (__) ", " '---' "],
|
|
71
|
+
],
|
|
72
|
+
cat: [
|
|
73
|
+
[" ", " /\\_/\\ ", " ( {E}.{E} ) ", " > ^ < ", " ||| "],
|
|
74
|
+
[" ", " /\\_/\\ ", " ( {E}.{E} ) ", " > ^< ", " ||| "],
|
|
75
|
+
[" ", " /\\_/\\ ", " ( {E}.{E} ) ", " > ^ < ", " ~|| "],
|
|
76
|
+
],
|
|
77
|
+
snail: [
|
|
78
|
+
[" ", " @/ ", " {E} __ ", " /_/ ", " ~~~~ "],
|
|
79
|
+
[" ", " @/ ", " {E} __ ", " /_/ ", " ~~~~ "],
|
|
80
|
+
[" ", " @/ ", " {E} __ ", " /_/ ", " ~~~~ "],
|
|
81
|
+
],
|
|
82
|
+
turtle: [
|
|
83
|
+
[" ", " ____ ", " ({E} {E}) ", " /|==|\\ ", " d b "],
|
|
84
|
+
[" ", " ____ ", " ({E} {E}) ", " /|==|\\ ", " d b "],
|
|
85
|
+
[" ", " ____ ", " ({E} {E}) ", " \\|==|/ ", " d b "],
|
|
86
|
+
],
|
|
87
|
+
owl: [
|
|
88
|
+
[" ", " /{\\ ", " ({E},{E}) ", " /) ) ", ' " " '],
|
|
89
|
+
[" ", " /{\\ ", " ({E},{E}) ", " ( (\\ ", ' " " '],
|
|
90
|
+
[" ", " /{\\ ", " ({E},{E}) ", " /) ) ", ' " " '],
|
|
91
|
+
],
|
|
92
|
+
penguin: [
|
|
93
|
+
[" ", " (^) ", " /{E}\\ ", " / | \\ ", " d b "],
|
|
94
|
+
[" ", " (^) ", " \\{E}/ ", " \\|/ ", " d b "],
|
|
95
|
+
[" ", " (^) ", " /{E}\\ ", " / | \\ ", " d b "],
|
|
96
|
+
],
|
|
97
|
+
rabbit: [
|
|
98
|
+
[" ", " (\\(\\ ", " ({E} {E}) ", " (> <) ", ' (" ") '],
|
|
99
|
+
[" ", " (\\(\\ ", " ({E} {E}) ", " (>~<) ", ' (" ") '],
|
|
100
|
+
[" ", " /)/) ", " ({E} {E}) ", " (> <) ", ' (" ") '],
|
|
101
|
+
],
|
|
102
|
+
ghost: [
|
|
103
|
+
[" ", " .---. ", " ( {E} {E}) ", " | | ", " ~v~v~ "],
|
|
104
|
+
[" ", " .---. ", " ({E} {E} ) ", " | | ", " ~v~v~ "],
|
|
105
|
+
[" ", " .---. ", " ( {E} {E}) ", " | | ", " ~v~v~ "],
|
|
106
|
+
],
|
|
107
|
+
mushroom: [
|
|
108
|
+
[" ", " ,---. ", " / * * \\ ", " |({E}{E})| ", " |__| "],
|
|
109
|
+
[" ", " ,---. ", " /* * *\\ ", " |({E}{E})| ", " |__| "],
|
|
110
|
+
[" ", " .---. ", " / * * \\ ", " |({E}{E})| ", " |__| "],
|
|
111
|
+
],
|
|
112
|
+
robot: [
|
|
113
|
+
[" ", " [=====] ", " [{E} {E}] ", " /|=|\\ ", " d b "],
|
|
114
|
+
[" ", " [=====] ", " [{E} {E}] ", " \\|=|/ ", " d b "],
|
|
115
|
+
[" ", " [==o==] ", " [{E} {E}] ", " /|=|\\ ", " d b "],
|
|
116
|
+
],
|
|
117
|
+
octopus: [
|
|
118
|
+
[" ", " ,--, ", " ({E} {E}) ", " /||||\\ ", " ~~~~~~ "],
|
|
119
|
+
[" ", " ,--, ", " ({E} {E}) ", " \\||||/ ", " ~~~~~~ "],
|
|
120
|
+
[" ", " ,--, ", " ({E} {E}) ", " /||\\/ ", " ~~~~~~ "],
|
|
121
|
+
],
|
|
122
|
+
axolotl: [
|
|
123
|
+
[" ", " ~\\/~\\/ ", " ({E} {E}) ", " \\__/ ", " ~~~~ "],
|
|
124
|
+
[" ", " ~\\/~\\/ ", " ({E} {E}) ", " \\__/ ", " ~~~~ "],
|
|
125
|
+
[" ", " /~\\/~\\ ", " ({E} {E}) ", " \\__/ ", " ~~~~ "],
|
|
126
|
+
],
|
|
127
|
+
dragon: [
|
|
128
|
+
[" ", " /\\_/\\_ ", " ( {E} {E} ) ", " ~\\/\\/~ ", " ~/ \\~ "],
|
|
129
|
+
[" ", " /\\_/\\_ ", " ( {E} {E} ) ", " ~\\/\\/~ ", " ~/ ~\\~ "],
|
|
130
|
+
[" ", " /\\_/\\_ ", " ( {E} {E} ) ", " ~/\\/~ ", " ~/ \\~ "],
|
|
131
|
+
],
|
|
132
|
+
capybara: [
|
|
133
|
+
[" ", " .__. ", " ({E} {E}) ", " (___/) ", ' (" ") '],
|
|
134
|
+
[" ", " .__. ", " ({E} {E}) ", " (___/) ", ' (" ") '],
|
|
135
|
+
[" ", " .__. ", " ( {E}{E}) ", " (___/) ", ' (" ") '],
|
|
136
|
+
],
|
|
137
|
+
phoenix: [
|
|
138
|
+
[" ", " ,/|\\, ", " ({E} {E}) ", " '|^|' ", " ~\\/\\/ ~ "],
|
|
139
|
+
[" ", " '/|\\` ", " ({E} {E}) ", " ,|^|, ", " ~ \\/\\/~ "],
|
|
140
|
+
[" ", " ,/|\\, ", " ({E} {E}) ", " '|^|' ", " ~\\/\\/ ~ "],
|
|
141
|
+
],
|
|
142
|
+
cactus: [
|
|
143
|
+
[" ", " | ", " ({E} {E}) ", " -| |- ", " ~~~~~ "],
|
|
144
|
+
[" ", " | ", " ({E} {E}) ", " -| |- ", " ~~~~~ "],
|
|
145
|
+
[" ", " | ", " ( {E}{E}) ", " -| |- ", " ~~~~~ "],
|
|
146
|
+
],
|
|
147
|
+
chonk: [
|
|
148
|
+
[" ", " .-----. ", " ({E} {E}) ", " ( ) ", " '~~~~' "],
|
|
149
|
+
[" ", " .-----. ", " ({E} {E}) ", " ( ) ", " '~~~~' "],
|
|
150
|
+
[" ", " .------. ", " ({E} {E}) ", " ( ) ", " '~~~~' "],
|
|
151
|
+
],
|
|
152
|
+
};
|
|
153
|
+
/** All species names. */
|
|
154
|
+
export const ALL_SPECIES = [
|
|
155
|
+
"duck",
|
|
156
|
+
"goose",
|
|
157
|
+
"blob",
|
|
158
|
+
"cat",
|
|
159
|
+
"snail",
|
|
160
|
+
"turtle",
|
|
161
|
+
"owl",
|
|
162
|
+
"penguin",
|
|
163
|
+
"rabbit",
|
|
164
|
+
"ghost",
|
|
165
|
+
"mushroom",
|
|
166
|
+
"robot",
|
|
167
|
+
"octopus",
|
|
168
|
+
"axolotl",
|
|
169
|
+
"dragon",
|
|
170
|
+
"capybara",
|
|
171
|
+
"phoenix",
|
|
172
|
+
"cactus",
|
|
173
|
+
"chonk",
|
|
174
|
+
];
|
|
175
|
+
/** Species rarity mapping. */
|
|
176
|
+
export const SPECIES_RARITY = {
|
|
177
|
+
duck: "common",
|
|
178
|
+
goose: "common",
|
|
179
|
+
blob: "common",
|
|
180
|
+
cat: "common",
|
|
181
|
+
snail: "common",
|
|
182
|
+
turtle: "common",
|
|
183
|
+
owl: "uncommon",
|
|
184
|
+
penguin: "uncommon",
|
|
185
|
+
rabbit: "uncommon",
|
|
186
|
+
ghost: "uncommon",
|
|
187
|
+
mushroom: "uncommon",
|
|
188
|
+
robot: "rare",
|
|
189
|
+
octopus: "rare",
|
|
190
|
+
axolotl: "rare",
|
|
191
|
+
dragon: "epic",
|
|
192
|
+
capybara: "epic",
|
|
193
|
+
phoenix: "legendary",
|
|
194
|
+
cactus: "legendary",
|
|
195
|
+
chonk: "legendary",
|
|
196
|
+
};
|
|
197
|
+
/** All available eye styles. */
|
|
198
|
+
export const EYE_STYLES = ["\u00B7", "\u2726", "\u00D7", "\u25C9", "@", "\u00B0"];
|
|
199
|
+
/** Render sprite lines with eyes and hat applied. */
|
|
200
|
+
export function renderSprite(bones, frame) {
|
|
201
|
+
const frames = BODIES[bones.species];
|
|
202
|
+
const lines = [...(frames[frame] ?? frames[0])];
|
|
203
|
+
// Replace eye placeholders
|
|
204
|
+
for (let i = 0; i < lines.length; i++) {
|
|
205
|
+
lines[i] = lines[i].replaceAll("{E}", bones.eyes);
|
|
206
|
+
}
|
|
207
|
+
// Apply hat on line 0 if present
|
|
208
|
+
if (bones.hat !== "none" && lines[0].trim() === "") {
|
|
209
|
+
const hatLine = HAT_LINES[bones.hat];
|
|
210
|
+
if (hatLine)
|
|
211
|
+
lines[0] = hatLine;
|
|
212
|
+
}
|
|
213
|
+
return lines;
|
|
214
|
+
}
|
|
215
|
+
/** Render blink frame (eyes replaced with -). */
|
|
216
|
+
export function renderBlink(bones) {
|
|
217
|
+
const lines = [...BODIES[bones.species][0]];
|
|
218
|
+
for (let i = 0; i < lines.length; i++) {
|
|
219
|
+
lines[i] = lines[i].replaceAll("{E}", "-");
|
|
220
|
+
}
|
|
221
|
+
if (bones.hat !== "none" && lines[0].trim() === "") {
|
|
222
|
+
const hatLine = HAT_LINES[bones.hat];
|
|
223
|
+
if (hatLine)
|
|
224
|
+
lines[0] = hatLine;
|
|
225
|
+
}
|
|
226
|
+
return lines;
|
|
227
|
+
}
|
|
228
|
+
/** Compact one-line face for narrow terminals. */
|
|
229
|
+
export function renderFace(bones) {
|
|
230
|
+
const e = bones.eyes;
|
|
231
|
+
switch (bones.species) {
|
|
232
|
+
case "cat":
|
|
233
|
+
return `=${e}.${e}=`;
|
|
234
|
+
case "duck":
|
|
235
|
+
case "goose":
|
|
236
|
+
return `(${e}>`;
|
|
237
|
+
case "blob":
|
|
238
|
+
case "chonk":
|
|
239
|
+
return `(${e} ${e})`;
|
|
240
|
+
case "owl":
|
|
241
|
+
return `{${e},${e}}`;
|
|
242
|
+
case "robot":
|
|
243
|
+
return `[${e}_${e}]`;
|
|
244
|
+
case "ghost":
|
|
245
|
+
return `(${e} ${e})~`;
|
|
246
|
+
case "dragon":
|
|
247
|
+
case "phoenix":
|
|
248
|
+
return `<${e} ${e}>`;
|
|
249
|
+
default:
|
|
250
|
+
return `(${e}${e})`;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/** Number of animation frames for a species (always 3). */
|
|
254
|
+
export function spriteFrameCount(_species) {
|
|
255
|
+
return 3;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=species.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"species.js","sourceRoot":"","sources":["../../../src/ui/buddy/species.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ActivityPhase, RetryInfo } from "../hooks/useAgentLoop.js";
|
|
2
3
|
interface ActivityIndicatorProps {
|
|
3
4
|
phase: ActivityPhase;
|
|
4
5
|
elapsedMs: number;
|
|
5
6
|
thinkingMs: number;
|
|
6
7
|
isThinking: boolean;
|
|
7
8
|
tokenEstimate: number;
|
|
9
|
+
/** Raw character count ref for smooth token animation (read every tick). */
|
|
10
|
+
charCountRef?: React.RefObject<number>;
|
|
11
|
+
/** Accumulated real tokens from completed turns. */
|
|
12
|
+
realTokensAccumRef?: React.RefObject<number>;
|
|
8
13
|
userMessage?: string;
|
|
9
14
|
activeToolNames?: string[];
|
|
10
15
|
planMode?: boolean;
|
|
16
|
+
retryInfo?: RetryInfo | null;
|
|
17
|
+
planDone?: number;
|
|
18
|
+
planTotal?: number;
|
|
11
19
|
}
|
|
12
|
-
export declare function ActivityIndicator({ phase, elapsedMs, thinkingMs, isThinking, tokenEstimate, userMessage, activeToolNames, planMode, }: ActivityIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare function ActivityIndicator({ phase, elapsedMs, thinkingMs, isThinking, tokenEstimate, charCountRef: charCountRefProp, realTokensAccumRef: realTokensAccumRefProp, userMessage, activeToolNames, planMode, retryInfo, planDone, planTotal, }: ActivityIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
13
21
|
export {};
|
|
14
22
|
//# sourceMappingURL=ActivityIndicator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityIndicator.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ActivityIndicator.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAG/C,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AA4GzE,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,4EAA4E;IAC5E,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7C,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;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,aAAa,EACb,YAAY,EAAE,gBAAgB,EAC9B,kBAAkB,EAAE,sBAAsB,EAC1C,WAAgB,EAChB,eAAoB,EACpB,QAAQ,EACR,SAAS,EACT,QAAY,EACZ,SAAa,GACd,EAAE,sBAAsB,2CAoJxB"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import React, {
|
|
2
|
+
import React, { useMemo, useRef } from "react";
|
|
3
3
|
import { Text, Box } from "ink";
|
|
4
4
|
import { useTheme } from "../theme/theme.js";
|
|
5
|
-
import { SPINNER_FRAMES, SPINNER_INTERVAL } from "../spinner-frames.js";
|
|
5
|
+
import { SPINNER_FRAMES, SPINNER_INTERVAL, REDUCED_MOTION_DOT } from "../spinner-frames.js";
|
|
6
6
|
import { PLANNING_PHRASES, selectPhrases, shuffleArray } from "../activity-phrases.js";
|
|
7
|
+
import { useAnimationTick, useAnimationActive, deriveFrame, useReducedMotion, } from "./AnimationContext.js";
|
|
7
8
|
// ── Color pulse cycle ─────────────────────────────────────
|
|
8
9
|
const PULSE_COLORS = [
|
|
9
10
|
"#60a5fa", // blue
|
|
@@ -68,27 +69,68 @@ const ShimmerText = ({ text, color, shimmerPos, }) => (_jsx(Text, { children: te
|
|
|
68
69
|
const isBright = Math.abs(i - shimmerPos) <= SHIMMER_WIDTH;
|
|
69
70
|
return (_jsx(Text, { bold: isBright, color: color, dimColor: !isBright, children: char }, i));
|
|
70
71
|
}) }));
|
|
71
|
-
|
|
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, charCountRef: charCountRefProp, realTokensAccumRef: realTokensAccumRefProp, userMessage = "", activeToolNames = [], planMode, retryInfo, planDone = 0, planTotal = 0, }) {
|
|
72
79
|
const theme = useTheme();
|
|
73
|
-
|
|
74
|
-
//
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
80
|
+
const reducedMotion = useReducedMotion();
|
|
81
|
+
// Use the global animation tick instead of a local timer.
|
|
82
|
+
// This eliminates a duplicate 100ms setInterval that was causing
|
|
83
|
+
// independent re-renders on top of the global AnimationProvider tick.
|
|
84
|
+
useAnimationActive();
|
|
85
|
+
const tick = useAnimationTick();
|
|
86
|
+
// ── Smooth token counter animation ─────────────────────
|
|
87
|
+
// Smooths the TOTAL token estimate (real + estimated) so it never
|
|
88
|
+
// jumps — whether tokens arrive from streaming deltas or from
|
|
89
|
+
// turn_end replacing char estimates with real API counts.
|
|
90
|
+
//
|
|
91
|
+
// On each 100ms animation tick the displayed count catches up to
|
|
92
|
+
// the target at a speed that scales with the gap, producing a
|
|
93
|
+
// rolling-odometer effect.
|
|
94
|
+
const displayedTokensRef = useRef(0);
|
|
95
|
+
const currentChars = charCountRefProp?.current ?? 0;
|
|
96
|
+
const realTokens = realTokensAccumRefProp?.current ?? 0;
|
|
97
|
+
const targetTokens = charCountRefProp ? realTokens + Math.ceil(currentChars / 4) : tokenEstimate;
|
|
98
|
+
if (reducedMotion || !charCountRefProp) {
|
|
99
|
+
displayedTokensRef.current = targetTokens;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const gap = targetTokens - displayedTokensRef.current;
|
|
103
|
+
if (gap > 0) {
|
|
104
|
+
// Scale increment with gap size for smooth catch-up
|
|
105
|
+
let increment;
|
|
106
|
+
if (gap < 20) {
|
|
107
|
+
increment = 1;
|
|
108
|
+
}
|
|
109
|
+
else if (gap < 50) {
|
|
110
|
+
increment = Math.max(2, Math.ceil(gap * 0.1));
|
|
111
|
+
}
|
|
112
|
+
else if (gap < 200) {
|
|
113
|
+
increment = Math.max(5, Math.ceil(gap * 0.12));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// Large jump (e.g. turn_end real tokens) — faster catch-up
|
|
117
|
+
increment = Math.max(15, Math.ceil(gap * 0.08));
|
|
118
|
+
}
|
|
119
|
+
displayedTokensRef.current = Math.min(displayedTokensRef.current + increment, targetTokens);
|
|
120
|
+
}
|
|
121
|
+
else if (gap < 0) {
|
|
122
|
+
// Reset happened (new run) — snap to target
|
|
123
|
+
displayedTokensRef.current = targetTokens;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const smoothTokenEstimate = displayedTokensRef.current;
|
|
87
127
|
// Derive all animation frames from the single tick counter
|
|
88
|
-
const spinnerFrame =
|
|
128
|
+
const spinnerFrame = reducedMotion
|
|
129
|
+
? 0
|
|
130
|
+
: deriveFrame(tick, SPINNER_INTERVAL, SPINNER_FRAMES.length);
|
|
89
131
|
const pulseColors = planMode ? PLAN_PULSE_COLORS : PULSE_COLORS;
|
|
90
|
-
const colorFrame =
|
|
91
|
-
const ellipsisFrame =
|
|
132
|
+
const colorFrame = deriveFrame(tick, PULSE_INTERVAL, pulseColors.length);
|
|
133
|
+
const ellipsisFrame = deriveFrame(tick, ELLIPSIS_INTERVAL, ELLIPSIS_FRAMES.length);
|
|
92
134
|
// Phrase rotation — pick phrases based on phase + user message + active tools, shuffle, rotate
|
|
93
135
|
const toolNamesKey = activeToolNames.sort().join(",");
|
|
94
136
|
const phrases = useMemo(() => shuffleArray(planMode && phase === "waiting"
|
|
@@ -104,7 +146,22 @@ export function ActivityIndicator({ phase, elapsedMs, thinkingMs, isThinking, to
|
|
|
104
146
|
const shimmerPos = (tick % shimmerCycle) - SHIMMER_WIDTH;
|
|
105
147
|
// Pad ellipsis to prevent text from shifting
|
|
106
148
|
const paddedEllipsis = ellipsis + " ".repeat(3 - ellipsis.length);
|
|
107
|
-
const meta = buildMetaSuffix(elapsedMs, thinkingMs, isThinking,
|
|
108
|
-
|
|
149
|
+
const meta = buildMetaSuffix(elapsedMs, thinkingMs, isThinking, smoothTokenEstimate);
|
|
150
|
+
// ── Plan progress bar ──────────────────────────────────
|
|
151
|
+
const planBar = useMemo(() => {
|
|
152
|
+
if (planTotal <= 0)
|
|
153
|
+
return null;
|
|
154
|
+
const barWidth = Math.min(planTotal, 20);
|
|
155
|
+
const filledWidth = Math.round((planDone / planTotal) * barWidth);
|
|
156
|
+
return "\u2588".repeat(filledWidth) + "\u2591".repeat(barWidth - filledWidth);
|
|
157
|
+
}, [planDone, planTotal]);
|
|
158
|
+
// ── Retry display ──────────────────────────────────────
|
|
159
|
+
if (phase === "retrying" && retryInfo) {
|
|
160
|
+
const retryLabel = RETRY_REASON_LABELS[retryInfo.reason];
|
|
161
|
+
const retryColor = "#f59e0b"; // amber
|
|
162
|
+
const delaySec = retryInfo.delayMs > 0 ? ` waiting ${Math.round(retryInfo.delayMs / 1000)}s` : "";
|
|
163
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: retryColor, bold: true, children: [reducedMotion ? REDUCED_MOTION_DOT : SPINNER_FRAMES[spinnerFrame], " "] }), _jsxs(Text, { color: retryColor, children: [retryLabel, " \u2014 retrying (", retryInfo.attempt, "/", retryInfo.maxAttempts, ")"] }), _jsxs(Text, { color: theme.textDim, children: [delaySec, " (", formatElapsed(elapsedMs), ")"] })] }));
|
|
164
|
+
}
|
|
165
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: spinnerColor, bold: true, children: [reducedMotion ? REDUCED_MOTION_DOT : SPINNER_FRAMES[spinnerFrame], " "] }), reducedMotion ? (_jsx(Text, { dimColor: true, color: spinnerColor, children: phrase })) : (_jsx(ShimmerText, { text: phrase, color: spinnerColor, shimmerPos: shimmerPos })), _jsx(Text, { color: theme.textDim, children: reducedMotion ? "..." : paddedEllipsis }), meta && (_jsxs(Text, { color: theme.textDim, children: [" (", meta, ")"] })), planBar && (_jsxs(Text, { children: [" ", _jsx(Text, { color: planDone === planTotal ? theme.success : theme.planPrimary, children: planBar }), _jsxs(Text, { color: theme.textDim, children: [" ", planDone, "/", planTotal] })] }))] }));
|
|
109
166
|
}
|
|
110
167
|
//# 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,7 +17,18 @@ 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;
|
|
28
|
+
/**
|
|
29
|
+
* Check if reduced-motion is requested.
|
|
30
|
+
* Respects NO_MOTION and REDUCE_MOTION env vars.
|
|
31
|
+
*/
|
|
32
|
+
export declare function useReducedMotion(): boolean;
|
|
21
33
|
export { TICK_INTERVAL };
|
|
22
34
|
//# sourceMappingURL=AnimationContext.d.ts.map
|
|
@@ -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;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import React, { createContext, useContext, useState, useEffect } from "react";
|
|
2
|
+
import React, { createContext, useContext, useState, useEffect, useCallback, useRef } from "react";
|
|
3
3
|
/**
|
|
4
4
|
* Global animation tick context.
|
|
5
5
|
*
|
|
@@ -8,28 +8,74 @@ import React, { createContext, useContext, useState, useEffect } from "react";
|
|
|
8
8
|
* arithmetic. This replaces per-component setIntervals that each caused
|
|
9
9
|
* independent React re-renders — N spinners no longer means N timers.
|
|
10
10
|
*
|
|
11
|
-
* The tick only runs while at least one
|
|
12
|
-
* (
|
|
11
|
+
* The tick only runs while at least one component has registered via
|
|
12
|
+
* `useAnimationActive()`, avoiding 10 re-renders/sec during idle streaming
|
|
13
|
+
* when no spinners or animations are visible.
|
|
13
14
|
*/
|
|
14
|
-
const TICK_INTERVAL = 100; // ms — fast enough for the spinner (
|
|
15
|
+
const TICK_INTERVAL = 100; // ms — fast enough for the spinner (100ms frames)
|
|
15
16
|
const AnimationContext = createContext(0);
|
|
17
|
+
const AnimationControlContext = createContext({ register: () => () => { } });
|
|
16
18
|
export function AnimationProvider({ children }) {
|
|
17
19
|
const [tick, setTick] = useState(0);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
const subscriberCountRef = useRef(0);
|
|
21
|
+
const timerRef = useRef(null);
|
|
22
|
+
const startTimer = useCallback(() => {
|
|
23
|
+
if (timerRef.current)
|
|
24
|
+
return;
|
|
25
|
+
timerRef.current = setInterval(() => {
|
|
20
26
|
setTick((t) => t + 1);
|
|
21
27
|
}, TICK_INTERVAL);
|
|
22
|
-
return () => clearInterval(timer);
|
|
23
28
|
}, []);
|
|
24
|
-
|
|
29
|
+
const stopTimer = useCallback(() => {
|
|
30
|
+
if (timerRef.current) {
|
|
31
|
+
clearInterval(timerRef.current);
|
|
32
|
+
timerRef.current = null;
|
|
33
|
+
}
|
|
34
|
+
}, []);
|
|
35
|
+
// Cleanup on unmount
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
return () => stopTimer();
|
|
38
|
+
}, [stopTimer]);
|
|
39
|
+
const register = useCallback(() => {
|
|
40
|
+
subscriberCountRef.current++;
|
|
41
|
+
if (subscriberCountRef.current === 1)
|
|
42
|
+
startTimer();
|
|
43
|
+
return () => {
|
|
44
|
+
subscriberCountRef.current--;
|
|
45
|
+
if (subscriberCountRef.current <= 0) {
|
|
46
|
+
subscriberCountRef.current = 0;
|
|
47
|
+
stopTimer();
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}, [startTimer, stopTimer]);
|
|
51
|
+
const control = React.useMemo(() => ({ register }), [register]);
|
|
52
|
+
return (_jsx(AnimationControlContext, { value: control, children: _jsx(AnimationContext, { value: tick, children: children }) }));
|
|
25
53
|
}
|
|
26
54
|
/** Returns the current global animation tick counter. */
|
|
27
55
|
export function useAnimationTick() {
|
|
28
56
|
return useContext(AnimationContext);
|
|
29
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Register this component as needing animation ticks.
|
|
60
|
+
* The global timer only runs while at least one component is registered.
|
|
61
|
+
* Call this in any component that uses animation frames (spinners, shimmer, etc).
|
|
62
|
+
*/
|
|
63
|
+
export function useAnimationActive() {
|
|
64
|
+
const { register } = useContext(AnimationControlContext);
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
return register();
|
|
67
|
+
}, [register]);
|
|
68
|
+
}
|
|
30
69
|
/** Derive a frame index from the global tick for a given interval and frame count. */
|
|
31
70
|
export function deriveFrame(tick, intervalMs, frameCount) {
|
|
32
71
|
return Math.floor((tick * TICK_INTERVAL) / intervalMs) % frameCount;
|
|
33
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if reduced-motion is requested.
|
|
75
|
+
* Respects NO_MOTION and REDUCE_MOTION env vars.
|
|
76
|
+
*/
|
|
77
|
+
export function useReducedMotion() {
|
|
78
|
+
return !!(process.env.NO_MOTION || process.env.REDUCE_MOTION);
|
|
79
|
+
}
|
|
34
80
|
export { TICK_INTERVAL };
|
|
35
81
|
//# sourceMappingURL=AnimationContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimationContext.js","sourceRoot":"","sources":["../../../src/ui/components/AnimationContext.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AnimationContext.js","sourceRoot":"","sources":["../../../src/ui/components/AnimationContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
interface AssistantMessageProps {
|
|
2
3
|
text: string;
|
|
3
4
|
thinking?: string;
|
|
4
5
|
thinkingMs?: number;
|
|
5
6
|
showThinking?: boolean;
|
|
6
7
|
}
|
|
7
|
-
export declare
|
|
8
|
+
export declare const AssistantMessage: React.NamedExoticComponent<AssistantMessageProps>;
|
|
8
9
|
export {};
|
|
9
10
|
//# sourceMappingURL=AssistantMessage.d.ts.map
|