@umang-boss/claudemon 2.1.1 → 2.1.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umang-boss/claudemon",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "description": "Pokemon coding companion for Claude Code — Gotta code 'em all!",
5
5
  "type": "module",
6
6
  "main": "dist/server.mjs",
@@ -109,11 +109,30 @@ if [ "$ENCOUNTER_CYCLE" -ge 3 ]; then
109
109
  ENCOUNTER_VISIBLE=false
110
110
  fi
111
111
 
112
- # Sprite jitter: shift 0-2 spaces LEFT only every 2 seconds
113
- # Right shifts clip against terminal edge, so only shift left (inward)
114
- JITTER_SEED=$(( NOW_SEC / 2 ))
115
- JITTER_OFFSET=$(( (JITTER_SEED * 7 + 3) % 3 ))
116
- # Result: 0, 1, or 2 extra spaces of right margin (sprite shifts left)
112
+ # Sprite jitter: idle for 15-30s (random), then quick wiggle, then idle again
113
+ # Walk through variable-length cycles to find which cycle we're in
114
+ JITTER_OFFSET=0
115
+ _jt_elapsed=0
116
+ _jt_cycle=0
117
+ while true; do
118
+ # Each cycle gets a pseudo-random length between 15-30s based on cycle number
119
+ _jt_len=$(( 15 + ( (_jt_cycle * 13 + 7) % 16 ) ))
120
+ if [ $(( _jt_elapsed + _jt_len )) -gt $(( NOW_SEC % 3600 )) ]; then
121
+ # We're in this cycle — find position within it
122
+ _jt_pos=$(( (NOW_SEC % 3600) - _jt_elapsed ))
123
+ # Wiggle in the last 3 seconds: left, back, left
124
+ if [ "$_jt_pos" -eq $(( _jt_len - 3 )) ]; then
125
+ JITTER_OFFSET=1
126
+ elif [ "$_jt_pos" -eq $(( _jt_len - 2 )) ]; then
127
+ JITTER_OFFSET=0
128
+ elif [ "$_jt_pos" -eq $(( _jt_len - 1 )) ]; then
129
+ JITTER_OFFSET=2
130
+ fi
131
+ break
132
+ fi
133
+ _jt_elapsed=$(( _jt_elapsed + _jt_len ))
134
+ _jt_cycle=$(( _jt_cycle + 1 ))
135
+ done
117
136
 
118
137
 
119
138
  # ── Terminal width ──────────────────────────────────────────
@@ -334,7 +353,7 @@ RIGHT_PAD=$(( COLS - ART_W - RIGHT_MARGIN ))
334
353
  SPRITE_PAD=$(( COLS - ART_W - RIGHT_MARGIN - JITTER_OFFSET ))
335
354
  [ "$SPRITE_PAD" -lt 0 ] && SPRITE_PAD=0
336
355
 
337
- # Build left array — line 1: model+context, line 2: update notice (if any)
356
+ # Build left array — line 1: model+context, line 2: update notification
338
357
  LEFT_LINES=()
339
358
  LEFT_LINES+=("$LEFT_1") # line 1: model · context
340
359
  LEFT_LINES+=("$LEFT_2") # line 2: update notification (or empty)
@@ -349,19 +368,23 @@ LEFT_COUNT=${#LEFT_LINES[@]}
349
368
  FULL_SPACER=""
350
369
  for (( s=0; s<SPRITE_PAD; s++ )); do FULL_SPACER+="$B"; done
351
370
 
352
- # ── Output name line ABOVE sprite with speech before name ──
353
- SPEECH_TEXT=""
354
- SPEECH_VISIBLE_W=0
371
+ # ── Output name line — speech left-aligned, name right-aligned ──
372
+ INFO_W=${#INFO_LINE}
373
+ SPEECH_OUT=""
374
+ SPEECH_OUT_W=0
375
+ SPEECH_LEFT_PAD=50
355
376
  if [ -n "$SPEECH" ]; then
356
- SPEECH_TEXT="${SPEECH_COLOR}${SPEECH}${NC} "
357
- SPEECH_VISIBLE_W=$(( ${#SPEECH} + 2 ))
377
+ SPEECH_PREFIX=""
378
+ for (( s=0; s<SPEECH_LEFT_PAD; s++ )); do SPEECH_PREFIX+="$B"; done
379
+ SPEECH_OUT="${SPEECH_PREFIX}${SPEECH_COLOR}${SPEECH}${NC}"
380
+ SPEECH_OUT_W=$(( ${#SPEECH} + SPEECH_LEFT_PAD ))
358
381
  fi
359
382
 
360
- NAME_PAD=$(( RIGHT_PAD - SPEECH_VISIBLE_W ))
361
- [ "$NAME_PAD" -lt 0 ] && NAME_PAD=0
362
- NAME_SPACER=""
363
- for (( s=0; s<NAME_PAD; s++ )); do NAME_SPACER+="$B"; done
364
- echo "${NAME_SPACER}${SPEECH_TEXT}${INFO_LINE}"
383
+ NAME_GAP=$(( COLS - SPEECH_OUT_W - INFO_W - RIGHT_MARGIN ))
384
+ [ "$NAME_GAP" -lt 1 ] && NAME_GAP=1
385
+ NAME_GAP_STR=""
386
+ for (( s=0; s<NAME_GAP; s++ )); do NAME_GAP_STR+="$B"; done
387
+ echo "${SPEECH_OUT}${NAME_GAP_STR}${INFO_LINE}"
365
388
 
366
389
  # ── Output sprite lines (right-aligned with jitter, left content merged) ──
367
390
  for (( i=0; i<SPRITE_COUNT; i++ )); do