plugin-gentleman 1.1.2 → 1.1.4
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 +3 -3
- package/ascii-frames.ts +2 -2
- package/components.tsx +9 -16
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -98,7 +98,7 @@ The ASCII representation features:
|
|
|
98
98
|
- **Eyes** that blink and look in 8 directions (center, up, down, left, right, and 4 diagonals) *(sidebar only)*
|
|
99
99
|
- **Mustache** rendered in grayscale gradient on home screen, semantic zone colors in sidebar
|
|
100
100
|
- **Tongue** that appears during busy states or periodic expressive cycles *(sidebar only)*
|
|
101
|
-
- **Motivational phrases** in Rioplatense Spanish style —
|
|
101
|
+
- **Motivational phrases** in Rioplatense Spanish style — one random phrase per expressive cycle *(sidebar only)*
|
|
102
102
|
|
|
103
103
|
**Example phrases during busy states:**
|
|
104
104
|
- *"Ponete las pilas, hermano..."*
|
|
@@ -126,7 +126,7 @@ The ASCII representation features:
|
|
|
126
126
|
**Busy/Expressive State** *(when `animations: true`)*
|
|
127
127
|
- Tongue appears when OpenCode is processing
|
|
128
128
|
- Eyes squint during expressive state
|
|
129
|
-
-
|
|
129
|
+
- A single motivational phrase is chosen for each expressive cycle or busy state (36+ phrase library)
|
|
130
130
|
- Active during detected busy states OR periodic expressive cycles
|
|
131
131
|
|
|
132
132
|
**Expressive Cycle Fallback** *(when `animations: true`)*
|
|
@@ -407,7 +407,7 @@ All animation intervals are in `components.tsx`:
|
|
|
407
407
|
- **Look-around interval:** Currently 3000ms (3s)
|
|
408
408
|
- **Blink interval:** Currently 2000ms with 35% chance (~5-6s average)
|
|
409
409
|
- **Blink frame timing:** Currently 80-100ms per frame progression
|
|
410
|
-
- **Phrase
|
|
410
|
+
- **Phrase selection:** One random phrase per expressive cycle or busy state
|
|
411
411
|
- **Expressive cycle timing:** First cycle at 30-45s, then every 45-60s
|
|
412
412
|
- **Expressive cycle duration:** Currently 8000ms (8s)
|
|
413
413
|
|
package/ascii-frames.ts
CHANGED
|
@@ -48,7 +48,7 @@ export const eyeNeutralRight = [
|
|
|
48
48
|
|
|
49
49
|
export const eyeNeutralUpLeft = [
|
|
50
50
|
" █████ █████ ", // 27 chars
|
|
51
|
-
" ██ ░░██
|
|
51
|
+
" ██ ░░██ ███░░░░██ ", // 27 chars - hollow pupil up-left
|
|
52
52
|
" ██ ░░░░██ ██░░░░░░░██ ", // 27 chars - hollow pupil up-left
|
|
53
53
|
" ██░░░░░░░██ ██░░░░░░░██ ", // 27 chars
|
|
54
54
|
"██ ██░░░░░██ ██░░░░░██ ██", // 27 chars
|
|
@@ -56,7 +56,7 @@ export const eyeNeutralUpLeft = [
|
|
|
56
56
|
|
|
57
57
|
export const eyeNeutralUpRight = [
|
|
58
58
|
" ██████ █████ ", // 27 chars
|
|
59
|
-
" ██░░░ ██
|
|
59
|
+
" ██░░░ ██ ███░░░░██ ", // 27 chars - hollow pupil up-right
|
|
60
60
|
" ██░░░░ ██ ██░░░░░░░██ ", // 27 chars - hollow pupil up-right
|
|
61
61
|
" ██░░░░░░░██ ██░░░░░░░██ ", // 27 chars
|
|
62
62
|
"██ ██░░░░░██ ██░░░░░██ ██", // 27 chars
|
package/components.tsx
CHANGED
|
@@ -74,7 +74,7 @@ export const SidebarMustachi = (props: { theme: TuiThemeCurrent; config: Cfg; is
|
|
|
74
74
|
const randomDir = 1 + Math.floor(Math.random() * (pupilPositionFrames.length - 1))
|
|
75
75
|
setPupilIndex(randomDir)
|
|
76
76
|
}
|
|
77
|
-
},
|
|
77
|
+
}, 3000) // Natural cadence: check every 3s for eye movement
|
|
78
78
|
|
|
79
79
|
onCleanup(() => clearInterval(interval))
|
|
80
80
|
})
|
|
@@ -97,13 +97,12 @@ export const SidebarMustachi = (props: { theme: TuiThemeCurrent; config: Cfg; is
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
const interval = setInterval(() => {
|
|
100
|
-
//
|
|
100
|
+
// Natural blink frequency (~every 5-6 seconds)
|
|
101
101
|
// 35% chance every 2s = average 5.7s between blinks
|
|
102
|
-
|
|
103
|
-
if (Math.random() < 0.6) {
|
|
102
|
+
if (Math.random() < 0.35) {
|
|
104
103
|
blinkSequence()
|
|
105
104
|
}
|
|
106
|
-
},
|
|
105
|
+
}, 2000) // Natural cadence: check every 2s for blink
|
|
107
106
|
|
|
108
107
|
onCleanup(() => clearInterval(interval))
|
|
109
108
|
})
|
|
@@ -137,7 +136,7 @@ export const SidebarMustachi = (props: { theme: TuiThemeCurrent; config: Cfg; is
|
|
|
137
136
|
}
|
|
138
137
|
tongueTimeoutId = setTimeout(growTongue, 200)
|
|
139
138
|
|
|
140
|
-
// Pick a random phrase
|
|
139
|
+
// Pick a single random phrase for this expressive cycle/state
|
|
141
140
|
const pickRandomPhrase = () => {
|
|
142
141
|
const randomIndex = Math.floor(Math.random() * busyPhrases.length)
|
|
143
142
|
return busyPhrases[randomIndex]
|
|
@@ -145,12 +144,7 @@ export const SidebarMustachi = (props: { theme: TuiThemeCurrent; config: Cfg; is
|
|
|
145
144
|
|
|
146
145
|
setBusyPhrase(pickRandomPhrase())
|
|
147
146
|
|
|
148
|
-
const interval = setInterval(() => {
|
|
149
|
-
setBusyPhrase(pickRandomPhrase())
|
|
150
|
-
}, 3000)
|
|
151
|
-
|
|
152
147
|
onCleanup(() => {
|
|
153
|
-
clearInterval(interval)
|
|
154
148
|
if (tongueTimeoutId !== undefined) {
|
|
155
149
|
clearTimeout(tongueTimeoutId)
|
|
156
150
|
}
|
|
@@ -173,14 +167,13 @@ export const SidebarMustachi = (props: { theme: TuiThemeCurrent; config: Cfg; is
|
|
|
173
167
|
}, 8000)
|
|
174
168
|
}
|
|
175
169
|
|
|
176
|
-
//
|
|
177
|
-
|
|
178
|
-
const firstDelay = 5000 + Math.random() * 3000
|
|
170
|
+
// First cycle after 30-45s, then every 45-60s (calm, occasional expressiveness)
|
|
171
|
+
const firstDelay = 30000 + Math.random() * 15000
|
|
179
172
|
const firstTimeout = setTimeout(triggerExpressiveCycle, firstDelay)
|
|
180
173
|
|
|
181
174
|
const interval = setInterval(() => {
|
|
182
175
|
triggerExpressiveCycle()
|
|
183
|
-
},
|
|
176
|
+
}, 45000 + Math.random() * 15000)
|
|
184
177
|
|
|
185
178
|
onCleanup(() => {
|
|
186
179
|
clearTimeout(firstTimeout)
|
|
@@ -244,7 +237,7 @@ export const SidebarMustachi = (props: { theme: TuiThemeCurrent; config: Cfg; is
|
|
|
244
237
|
return <text fg={color}>{paddedLine}</text>
|
|
245
238
|
})}
|
|
246
239
|
|
|
247
|
-
{/* Display single busy phrase
|
|
240
|
+
{/* Display a single busy phrase for the current expressive cycle */}
|
|
248
241
|
{busyPhrase() && (
|
|
249
242
|
<text fg={props.theme.warning}>{busyPhrase()}</text>
|
|
250
243
|
)}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "plugin-gentleman",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.4",
|
|
5
5
|
"description": "OpenCode TUI plugin featuring Mustachi - an animated ASCII mascot with eyes, mustache, and optional motivational phrases during busy states",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|