clauddy 1.26.0 → 1.28.0
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 +26 -8
- package/bin/clauddy.js +11 -1
- package/cursor.js +267 -0
- package/main.js +107 -28
- package/package.json +3 -1
- package/preload.js +4 -0
- package/reminders.js +3 -2
- package/renderer/companion.js +12 -8
- package/renderer/index.html +56 -8
- package/renderer/motion.css +0 -3
- package/renderer/pet.js +315 -148
- package/renderer/style.css +206 -6
- package/renderer/voice.js +12 -11
package/renderer/style.css
CHANGED
|
@@ -2311,6 +2311,29 @@ body.dual #harness-tabs {
|
|
|
2311
2311
|
border-color: #a7baa14d;
|
|
2312
2312
|
background: #a7baa11c;
|
|
2313
2313
|
}
|
|
2314
|
+
#harness-tabs #tab-cursor[aria-selected="true"] {
|
|
2315
|
+
border-color: #a9b8d64d;
|
|
2316
|
+
background: #a9b8d61c;
|
|
2317
|
+
}
|
|
2318
|
+
#harness-tabs button[hidden] {
|
|
2319
|
+
display: none;
|
|
2320
|
+
}
|
|
2321
|
+
/* three services: logo and % only; the name stays for screen readers */
|
|
2322
|
+
body.trio #harness-tabs button {
|
|
2323
|
+
justify-content: center;
|
|
2324
|
+
gap: 6px;
|
|
2325
|
+
}
|
|
2326
|
+
body.trio #harness-tabs button > span:not(.tab-value):not(.tab-alert) {
|
|
2327
|
+
position: absolute;
|
|
2328
|
+
width: 1px;
|
|
2329
|
+
height: 1px;
|
|
2330
|
+
overflow: hidden;
|
|
2331
|
+
clip-path: inset(50%);
|
|
2332
|
+
white-space: nowrap;
|
|
2333
|
+
}
|
|
2334
|
+
body.trio #harness-tabs .tab-value {
|
|
2335
|
+
margin-left: 0;
|
|
2336
|
+
}
|
|
2314
2337
|
#harness-tabs button:hover {
|
|
2315
2338
|
border-color: #ffffff2b;
|
|
2316
2339
|
color: var(--text);
|
|
@@ -2332,6 +2355,9 @@ body.dual #harness-tabs {
|
|
|
2332
2355
|
#tab-codex .tab-logo {
|
|
2333
2356
|
color: #b9c8b0;
|
|
2334
2357
|
}
|
|
2358
|
+
#tab-cursor .tab-logo {
|
|
2359
|
+
color: #b8c4dc;
|
|
2360
|
+
}
|
|
2335
2361
|
#harness-tabs button.active .tab-logo {
|
|
2336
2362
|
opacity: 1;
|
|
2337
2363
|
}
|
|
@@ -2410,6 +2436,26 @@ body.view-codex .sq.lv4 {
|
|
|
2410
2436
|
background: #c2c994;
|
|
2411
2437
|
}
|
|
2412
2438
|
|
|
2439
|
+
/* the Cursor view: a monthly budget, read from its dashboard — steel blue */
|
|
2440
|
+
body.view-cursor #live-tag,
|
|
2441
|
+
body.view-cursor #session-proj,
|
|
2442
|
+
body.view-cursor #details-toggle,
|
|
2443
|
+
body.view-cursor #usage-details {
|
|
2444
|
+
display: none;
|
|
2445
|
+
}
|
|
2446
|
+
body.view-cursor #session-fill,
|
|
2447
|
+
body.view-cursor #week-fill {
|
|
2448
|
+
background: #9fb2d6;
|
|
2449
|
+
}
|
|
2450
|
+
body.view-cursor #session-fill.mid,
|
|
2451
|
+
body.view-cursor #week-fill.mid {
|
|
2452
|
+
background: #e5b55d;
|
|
2453
|
+
}
|
|
2454
|
+
body.view-cursor #session-fill.hot,
|
|
2455
|
+
body.view-cursor #week-fill.hot {
|
|
2456
|
+
background: #ee705e;
|
|
2457
|
+
}
|
|
2458
|
+
|
|
2413
2459
|
/* collapsed with both: one line per service instead of the ring, never an average */
|
|
2414
2460
|
#mini-dual {
|
|
2415
2461
|
display: none;
|
|
@@ -2499,6 +2545,12 @@ body.collapsed.dual #mini-dual {
|
|
|
2499
2545
|
.mini-source[data-provider="codex"] {
|
|
2500
2546
|
--src: #b9c8b0;
|
|
2501
2547
|
}
|
|
2548
|
+
.mini-source[data-provider="cursor"] {
|
|
2549
|
+
--src: #b8c4dc;
|
|
2550
|
+
}
|
|
2551
|
+
.mini-source[hidden] {
|
|
2552
|
+
display: none;
|
|
2553
|
+
}
|
|
2502
2554
|
.mini-logo {
|
|
2503
2555
|
grid-column: 1;
|
|
2504
2556
|
grid-row: 1;
|
|
@@ -2571,11 +2623,102 @@ body.collapsed.dual #mini-reset {
|
|
|
2571
2623
|
#mini-codex-bar {
|
|
2572
2624
|
background: #a7baa1;
|
|
2573
2625
|
}
|
|
2626
|
+
#mini-cursor-bar {
|
|
2627
|
+
background: #9fb2d6;
|
|
2628
|
+
}
|
|
2574
2629
|
.mini-track i.hot,
|
|
2575
|
-
#mini-codex-bar.hot
|
|
2630
|
+
#mini-codex-bar.hot,
|
|
2631
|
+
#mini-cursor-bar.hot {
|
|
2576
2632
|
background: #ee705e;
|
|
2577
2633
|
}
|
|
2578
2634
|
|
|
2635
|
+
/* Settings → Connections: a row of service tiles; the open one shows its card */
|
|
2636
|
+
#conn-tiles {
|
|
2637
|
+
display: grid;
|
|
2638
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
2639
|
+
gap: 8px;
|
|
2640
|
+
margin: 7px 0 18px;
|
|
2641
|
+
}
|
|
2642
|
+
body:has(#connections > .open) #conn-tiles {
|
|
2643
|
+
margin-bottom: 8px;
|
|
2644
|
+
}
|
|
2645
|
+
.conn-tile {
|
|
2646
|
+
display: flex;
|
|
2647
|
+
flex-direction: column;
|
|
2648
|
+
align-items: center;
|
|
2649
|
+
gap: 5px;
|
|
2650
|
+
min-width: 0;
|
|
2651
|
+
padding: 10px 4px 9px;
|
|
2652
|
+
border: 1px solid var(--hair);
|
|
2653
|
+
border-radius: 10px;
|
|
2654
|
+
background: #ffffff03;
|
|
2655
|
+
color: var(--muted);
|
|
2656
|
+
font: inherit;
|
|
2657
|
+
cursor: pointer;
|
|
2658
|
+
-webkit-app-region: no-drag;
|
|
2659
|
+
transition:
|
|
2660
|
+
border-color 0.15s,
|
|
2661
|
+
background 0.15s;
|
|
2662
|
+
}
|
|
2663
|
+
.conn-tile:hover {
|
|
2664
|
+
border-color: #ffffff24;
|
|
2665
|
+
background: #ffffff07;
|
|
2666
|
+
}
|
|
2667
|
+
.conn-tile[aria-expanded="true"] {
|
|
2668
|
+
border-color: #ffffff38;
|
|
2669
|
+
background: #ffffff0a;
|
|
2670
|
+
}
|
|
2671
|
+
.conn-tile .connection-avatar {
|
|
2672
|
+
position: relative;
|
|
2673
|
+
display: grid;
|
|
2674
|
+
place-items: center;
|
|
2675
|
+
width: 30px;
|
|
2676
|
+
height: 30px;
|
|
2677
|
+
border-radius: 8px;
|
|
2678
|
+
}
|
|
2679
|
+
/* not connected yet: the logo waits in grey */
|
|
2680
|
+
.conn-tile:not(.on) .connection-avatar {
|
|
2681
|
+
filter: grayscale(1);
|
|
2682
|
+
opacity: 0.6;
|
|
2683
|
+
}
|
|
2684
|
+
.conn-check {
|
|
2685
|
+
position: absolute;
|
|
2686
|
+
right: -5px;
|
|
2687
|
+
bottom: -5px;
|
|
2688
|
+
display: grid;
|
|
2689
|
+
place-items: center;
|
|
2690
|
+
width: 14px;
|
|
2691
|
+
height: 14px;
|
|
2692
|
+
border-radius: 50%;
|
|
2693
|
+
background: #8fc58a;
|
|
2694
|
+
color: #17201a;
|
|
2695
|
+
font-size: 9px;
|
|
2696
|
+
font-style: normal;
|
|
2697
|
+
font-weight: 700;
|
|
2698
|
+
line-height: 1;
|
|
2699
|
+
box-shadow: 0 0 0 2px var(--card-bg, #1e1a17);
|
|
2700
|
+
}
|
|
2701
|
+
.conn-check[hidden] {
|
|
2702
|
+
display: none;
|
|
2703
|
+
}
|
|
2704
|
+
.conn-name {
|
|
2705
|
+
font-size: 11px;
|
|
2706
|
+
color: var(--text);
|
|
2707
|
+
}
|
|
2708
|
+
.conn-state {
|
|
2709
|
+
font-size: 10px;
|
|
2710
|
+
line-height: 1.3;
|
|
2711
|
+
}
|
|
2712
|
+
.conn-tile.on .conn-state:not(.plan-badge) {
|
|
2713
|
+
color: #a9c7a2;
|
|
2714
|
+
}
|
|
2715
|
+
#connections > .conn-panel:not(.open) {
|
|
2716
|
+
display: none;
|
|
2717
|
+
}
|
|
2718
|
+
#connections > .open {
|
|
2719
|
+
margin: 0 0 18px;
|
|
2720
|
+
}
|
|
2721
|
+
|
|
2579
2722
|
/* Settings → Connections: Claude and Codex share one card shape */
|
|
2580
2723
|
.connections-label {
|
|
2581
2724
|
margin-top: 18px;
|
|
@@ -2586,7 +2729,7 @@ body.collapsed.dual #mini-reset {
|
|
|
2586
2729
|
}
|
|
2587
2730
|
#codex-settings {
|
|
2588
2731
|
display: flex;
|
|
2589
|
-
margin: 0 0
|
|
2732
|
+
margin: 0 0 8px;
|
|
2590
2733
|
}
|
|
2591
2734
|
.codex-actions {
|
|
2592
2735
|
display: flex;
|
|
@@ -2629,6 +2772,27 @@ body.codex-setup #codex-connect {
|
|
|
2629
2772
|
body.codex-on #codex-disconnect {
|
|
2630
2773
|
display: grid;
|
|
2631
2774
|
}
|
|
2775
|
+
#cursor-settings {
|
|
2776
|
+
display: flex;
|
|
2777
|
+
margin: 0 0 18px;
|
|
2778
|
+
}
|
|
2779
|
+
#cursor-disconnect,
|
|
2780
|
+
body.cursor-on #cursor-hint,
|
|
2781
|
+
body.cursor-on #cursor-connect,
|
|
2782
|
+
body.cursor-setup #cursor-connect {
|
|
2783
|
+
display: none;
|
|
2784
|
+
}
|
|
2785
|
+
body.cursor-on #cursor-disconnect {
|
|
2786
|
+
display: grid;
|
|
2787
|
+
}
|
|
2788
|
+
#cursor-setup:not([hidden]) {
|
|
2789
|
+
display: inline-flex;
|
|
2790
|
+
align-items: center;
|
|
2791
|
+
gap: 4px;
|
|
2792
|
+
}
|
|
2793
|
+
body.view-cursor .ac-caret {
|
|
2794
|
+
display: none;
|
|
2795
|
+
}
|
|
2632
2796
|
body.view-codex .mrow .mname::before {
|
|
2633
2797
|
background: #a7baa1;
|
|
2634
2798
|
}
|
|
@@ -2669,6 +2833,13 @@ body.view-codex {
|
|
|
2669
2833
|
--panel-border: #b4c6ac20;
|
|
2670
2834
|
--settings-bg: linear-gradient(150deg, #283028, #1b211c);
|
|
2671
2835
|
}
|
|
2836
|
+
body.view-cursor {
|
|
2837
|
+
--panel-bg:
|
|
2838
|
+
radial-gradient(130% 110% at 20% 0%, #5f6d8a30, transparent 60%),
|
|
2839
|
+
linear-gradient(158deg, #23262d, #1a1d23 55%, #14161b);
|
|
2840
|
+
--panel-border: #b6c2dc20;
|
|
2841
|
+
--settings-bg: linear-gradient(150deg, #272b33, #1a1d23);
|
|
2842
|
+
}
|
|
2672
2843
|
#details-toggle {
|
|
2673
2844
|
display: flex;
|
|
2674
2845
|
align-items: center;
|
|
@@ -2703,7 +2874,8 @@ body.view-codex {
|
|
|
2703
2874
|
|
|
2704
2875
|
#acc-connected.connection-card,
|
|
2705
2876
|
#acc-intro.connection-card,
|
|
2706
|
-
#codex-settings.connection-card
|
|
2877
|
+
#codex-settings.connection-card,
|
|
2878
|
+
#cursor-settings.connection-card {
|
|
2707
2879
|
align-items: center;
|
|
2708
2880
|
gap: 10px;
|
|
2709
2881
|
min-height: 64px;
|
|
@@ -2713,7 +2885,8 @@ body.view-codex {
|
|
|
2713
2885
|
background: #ffffff03;
|
|
2714
2886
|
}
|
|
2715
2887
|
#acc-connected.connection-card,
|
|
2716
|
-
body.codex-on #codex-settings.connection-card
|
|
2888
|
+
body.codex-on #codex-settings.connection-card,
|
|
2889
|
+
body.cursor-on #cursor-settings.connection-card {
|
|
2717
2890
|
height: 64px;
|
|
2718
2891
|
}
|
|
2719
2892
|
.connection-card .connection-avatar {
|
|
@@ -2732,8 +2905,13 @@ body.codex-on #codex-settings.connection-card {
|
|
|
2732
2905
|
background: #9eaf9614;
|
|
2733
2906
|
color: #b9c8b0;
|
|
2734
2907
|
}
|
|
2908
|
+
.cursor-avatar {
|
|
2909
|
+
background: #a9b8d614;
|
|
2910
|
+
color: #b8c4dc;
|
|
2911
|
+
}
|
|
2735
2912
|
.connection-logo,
|
|
2736
|
-
.codex-logo
|
|
2913
|
+
.codex-logo,
|
|
2914
|
+
.cursor-logo {
|
|
2737
2915
|
fill: currentColor;
|
|
2738
2916
|
}
|
|
2739
2917
|
.connection-avatar svg {
|
|
@@ -2790,6 +2968,12 @@ body.codex-on #codex-settings.connection-card {
|
|
|
2790
2968
|
body.codex-on #codex-connected-caption {
|
|
2791
2969
|
display: block;
|
|
2792
2970
|
}
|
|
2971
|
+
#cursor-connected-caption {
|
|
2972
|
+
display: none;
|
|
2973
|
+
}
|
|
2974
|
+
body.cursor-on #cursor-connected-caption {
|
|
2975
|
+
display: block;
|
|
2976
|
+
}
|
|
2793
2977
|
.connection-card .connection-remove {
|
|
2794
2978
|
flex: none;
|
|
2795
2979
|
align-items: center;
|
|
@@ -3093,6 +3277,9 @@ body.collapsed.dual #mini-reminder {
|
|
|
3093
3277
|
#companion-notice[data-provider="codex"] {
|
|
3094
3278
|
color: #c1d1b8;
|
|
3095
3279
|
}
|
|
3280
|
+
#companion-notice[data-provider="cursor"] {
|
|
3281
|
+
color: #c3cde2;
|
|
3282
|
+
}
|
|
3096
3283
|
#companion-notice[hidden],
|
|
3097
3284
|
body.settings-open #companion-notice {
|
|
3098
3285
|
display: none;
|
|
@@ -3118,6 +3305,16 @@ body.collapsed.pet-only #stage {
|
|
|
3118
3305
|
margin: 0;
|
|
3119
3306
|
background: none;
|
|
3120
3307
|
}
|
|
3308
|
+
/* three readings need a wider glance: the card grows, the pet stays centred */
|
|
3309
|
+
body.collapsed.pet-only.trio #card {
|
|
3310
|
+
width: 188px;
|
|
3311
|
+
}
|
|
3312
|
+
body.collapsed.pet-only.trio #stage {
|
|
3313
|
+
right: 43px;
|
|
3314
|
+
}
|
|
3315
|
+
body.collapsed.pet-only.trio #pet-activity:not([hidden]) {
|
|
3316
|
+
right: 22px;
|
|
3317
|
+
}
|
|
3121
3318
|
body.collapsed.pet-only #pet {
|
|
3122
3319
|
zoom: 1.05;
|
|
3123
3320
|
transform: none;
|
|
@@ -3143,7 +3340,7 @@ body.collapsed.pet-only #pet-glance {
|
|
|
3143
3340
|
transform: translateX(-50%);
|
|
3144
3341
|
bottom: 2px;
|
|
3145
3342
|
min-height: 32px;
|
|
3146
|
-
padding: 2px 5px;
|
|
3343
|
+
padding: 2px 5px 2px 10px;
|
|
3147
3344
|
border: 1px solid transparent;
|
|
3148
3345
|
border-radius: 10px;
|
|
3149
3346
|
font-size: 10px;
|
|
@@ -3267,6 +3464,9 @@ body.collapsed.dual:has(#companion-notice:not([hidden])) #mini-acct {
|
|
|
3267
3464
|
.activity-logos [data-provider="codex"] {
|
|
3268
3465
|
color: #b9c8b0;
|
|
3269
3466
|
}
|
|
3467
|
+
.activity-logos [data-provider="cursor"] {
|
|
3468
|
+
color: #b8c4dc;
|
|
3469
|
+
}
|
|
3270
3470
|
.activity-logos svg {
|
|
3271
3471
|
display: block;
|
|
3272
3472
|
width: 11px;
|
package/renderer/voice.js
CHANGED
|
@@ -162,25 +162,26 @@
|
|
|
162
162
|
return line(`${text}.`, `Fresh window! ${fmt(tokens)} last time.`)
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
-
// Codex
|
|
166
|
-
function codexFireLine(pct, resetMs, fmtDur) {
|
|
165
|
+
// Codex and Cursor speak through the same pet, so their lines always say whose they are
|
|
166
|
+
function codexFireLine(pct, resetMs, fmtDur, name = 'Codex') {
|
|
167
167
|
const p = Math.round(pct)
|
|
168
168
|
const text =
|
|
169
169
|
resetMs != null
|
|
170
|
-
?
|
|
171
|
-
:
|
|
172
|
-
return line(text,
|
|
170
|
+
? `${name} is at ${p}% now. It resets in ${fmtDur(resetMs)}.`
|
|
171
|
+
: `${name} is at ${p}% now.`
|
|
172
|
+
return line(text, `${name} at ${p}%!`)
|
|
173
173
|
}
|
|
174
|
-
function codexMaxedLine(resetAt) {
|
|
174
|
+
function codexMaxedLine(resetAt, name = 'Codex') {
|
|
175
175
|
return line(
|
|
176
|
-
resetAt ?
|
|
177
|
-
|
|
176
|
+
resetAt ? `${name} is maxed out. It's back at ${resetAt}.` : `${name} is maxed out.`,
|
|
177
|
+
`${name} is maxed out.`,
|
|
178
178
|
)
|
|
179
179
|
}
|
|
180
|
-
|
|
180
|
+
// Cursor's window is its billing month
|
|
181
|
+
function codexResetLine(was, name = 'Codex', span = 'window') {
|
|
181
182
|
return line(
|
|
182
|
-
|
|
183
|
-
|
|
183
|
+
`${name} has a fresh ${span}! The last one closed at ${Math.round(was)}%.`,
|
|
184
|
+
`${name}: fresh ${span}!`,
|
|
184
185
|
)
|
|
185
186
|
}
|
|
186
187
|
|