Skip to content

Commit 0f82dbd

Browse files
committed
fix redundant events, link docs from no-telemetry page, click to enable from mode switcher
1 parent 0455747 commit 0f82dbd

6 files changed

Lines changed: 57 additions & 58 deletions

File tree

cmd/server/main-server.go

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -174,25 +174,6 @@ func sendDiagnosticPing() bool {
174174
return true
175175
}
176176

177-
func sendNoTelemetryUpdate(telemetryEnabled bool) {
178-
ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second)
179-
defer cancelFn()
180-
clientData, err := wstore.DBGetSingleton[*waveobj.Client](ctx)
181-
if err != nil {
182-
log.Printf("telemetry update: error getting client data: %v\n", err)
183-
return
184-
}
185-
if clientData == nil {
186-
log.Printf("telemetry update: client data is nil\n")
187-
return
188-
}
189-
err = wcloud.SendNoTelemetryUpdate(ctx, clientData.OID, !telemetryEnabled)
190-
if err != nil {
191-
log.Printf("[error] sending no-telemetry update: %v\n", err)
192-
return
193-
}
194-
}
195-
196177
func setupTelemetryConfigHandler() {
197178
watcher := wconfig.GetWatcher()
198179
if watcher == nil {
@@ -205,7 +186,7 @@ func setupTelemetryConfigHandler() {
205186
newTelemetryEnabled := newConfig.Settings.TelemetryEnabled
206187
if newTelemetryEnabled != currentTelemetryEnabled {
207188
currentTelemetryEnabled = newTelemetryEnabled
208-
go sendNoTelemetryUpdate(newTelemetryEnabled)
189+
wcore.GoSendNoTelemetryUpdate(newTelemetryEnabled)
209190
}
210191
})
211192
}

frontend/app/aipanel/aimode.tsx

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ export const AIModeDropdown = memo(({ compatibilityMode = false }: AIModeDropdow
173173

174174
const displayConfig = aiModeConfigs[currentMode];
175175
const displayName = displayConfig ? getModeDisplayName(displayConfig) : `Invalid (${currentMode})`;
176-
const displayIcon = displayConfig ? (displayConfig["display:icon"] || "sparkles") : "question";
176+
const displayIcon = displayConfig ? displayConfig["display:icon"] || "sparkles" : "question";
177177
const resolvedConfig = waveaiModeConfigs[currentMode];
178178
const hasToolsSupport = resolvedConfig && resolvedConfig["ai:capabilities"]?.includes("tools");
179179
const showNoToolsWarning = widgetContextEnabled && resolvedConfig && !hasToolsSupport;
@@ -200,6 +200,15 @@ export const AIModeDropdown = memo(({ compatibilityMode = false }: AIModeDropdow
200200
});
201201
};
202202

203+
const handleEnableTelemetry = () => {
204+
fireAndForget(async () => {
205+
await RpcApi.WaveAIEnableTelemetryCommand(TabRpcClient);
206+
setTimeout(() => {
207+
model.focusInput();
208+
}, 100);
209+
});
210+
};
211+
203212
return (
204213
<div className="relative" ref={dropdownRef}>
205214
<button
@@ -260,9 +269,12 @@ export const AIModeDropdown = memo(({ compatibilityMode = false }: AIModeDropdow
260269
</div>
261270
)}
262271
{section.noTelemetry && (
263-
<div className="text-center text-[11px] text-red-400 pb-1">
264-
(not available when telemetry is disabled)
265-
</div>
272+
<button
273+
onClick={handleEnableTelemetry}
274+
className="text-center text-[11px] text-green-300 hover:text-green-200 pb-1 cursor-pointer transition-colors w-full"
275+
>
276+
(enable telemetry to unlock Wave AI Cloud)
277+
</button>
266278
)}
267279
</>
268280
)}

frontend/app/aipanel/telemetryrequired.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,23 @@ const TelemetryRequiredMessage = ({ className }: TelemetryRequiredMessageProps)
5555
This helps us block abuse by automated systems and ensure it's used by real
5656
people like you.
5757
</p>
58-
<p>
58+
<p className="mb-2">
5959
We never collect your files, prompts, keystrokes, hostnames, or personally
6060
identifying information. Wave AI is powered by OpenAI's APIs, please refer to
6161
OpenAI's privacy policy for details on how they handle your data.
6262
</p>
63+
<p>
64+
For information about BYOK and local model support, see{" "}
65+
<a
66+
href="https://docs.waveterm.dev/waveai-modes"
67+
target="_blank"
68+
rel="noopener noreferrer"
69+
className="!text-secondary hover:!text-accent/80 cursor-pointer"
70+
>
71+
https://docs.waveterm.dev/waveai-modes
72+
</a>
73+
.
74+
</p>
6375
</div>
6476
<button
6577
onClick={handleEnableTelemetry}

pkg/service/clientservice/clientservice.go

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111

1212
"github.com/wavetermdev/waveterm/pkg/remote/conncontroller"
1313
"github.com/wavetermdev/waveterm/pkg/waveobj"
14-
"github.com/wavetermdev/waveterm/pkg/wcloud"
1514
"github.com/wavetermdev/waveterm/pkg/wconfig"
1615
"github.com/wavetermdev/waveterm/pkg/wcore"
1716
"github.com/wavetermdev/waveterm/pkg/wshrpc"
@@ -67,25 +66,6 @@ func (cs *ClientService) AgreeTos(ctx context.Context) (waveobj.UpdatesRtnType,
6766
return waveobj.ContextGetUpdatesRtn(ctx), nil
6867
}
6968

70-
func sendNoTelemetryUpdate(telemetryEnabled bool) {
71-
ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second)
72-
defer cancelFn()
73-
clientData, err := wstore.DBGetSingleton[*waveobj.Client](ctx)
74-
if err != nil {
75-
log.Printf("telemetry update: error getting client data: %v\n", err)
76-
return
77-
}
78-
if clientData == nil {
79-
log.Printf("telemetry update: client data is nil\n")
80-
return
81-
}
82-
err = wcloud.SendNoTelemetryUpdate(ctx, clientData.OID, !telemetryEnabled)
83-
if err != nil {
84-
log.Printf("[error] sending no-telemetry update: %v\n", err)
85-
return
86-
}
87-
}
88-
8969
func (cs *ClientService) TelemetryUpdate(ctx context.Context, telemetryEnabled bool) error {
9070
meta := waveobj.MetaMapType{
9171
wconfig.ConfigKey_TelemetryEnabled: telemetryEnabled,
@@ -94,6 +74,5 @@ func (cs *ClientService) TelemetryUpdate(ctx context.Context, telemetryEnabled b
9474
if err != nil {
9575
return fmt.Errorf("error setting telemetry value: %w", err)
9676
}
97-
go sendNoTelemetryUpdate(telemetryEnabled)
9877
return nil
9978
}

pkg/wcore/wcore.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ import (
1313

1414
"github.com/google/uuid"
1515

16+
"github.com/wavetermdev/waveterm/pkg/panichandler"
1617
"github.com/wavetermdev/waveterm/pkg/waveobj"
17-
"github.com/wavetermdev/waveterm/pkg/wstore"
18+
"github.com/wavetermdev/waveterm/pkg/wcloud"
1819
"github.com/wavetermdev/waveterm/pkg/wps"
20+
"github.com/wavetermdev/waveterm/pkg/wstore"
1921
)
2022

2123
// the wcore package coordinates actions across the storage layer
@@ -110,7 +112,6 @@ func SendWaveObjUpdate(oref waveobj.ORef) {
110112
})
111113
}
112114

113-
114115
func ResolveBlockIdFromPrefix(ctx context.Context, tabId string, blockIdPrefix string) (string, error) {
115116
if len(blockIdPrefix) != 8 {
116117
return "", fmt.Errorf("widget_id must be 8 characters")
@@ -129,3 +130,27 @@ func ResolveBlockIdFromPrefix(ctx context.Context, tabId string, blockIdPrefix s
129130

130131
return "", fmt.Errorf("widget_id not found: %q", blockIdPrefix)
131132
}
133+
134+
func GoSendNoTelemetryUpdate(telemetryEnabled bool) {
135+
go func() {
136+
defer func() {
137+
panichandler.PanicHandler("GoSendNoTelemetryUpdate", recover())
138+
}()
139+
ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second)
140+
defer cancelFn()
141+
clientData, err := wstore.DBGetSingleton[*waveobj.Client](ctx)
142+
if err != nil {
143+
log.Printf("telemetry update: error getting client data: %v\n", err)
144+
return
145+
}
146+
if clientData == nil {
147+
log.Printf("telemetry update: client data is nil\n")
148+
return
149+
}
150+
err = wcloud.SendNoTelemetryUpdate(ctx, clientData.OID, !telemetryEnabled)
151+
if err != nil {
152+
log.Printf("[error] sending no-telemetry update: %v\n", err)
153+
return
154+
}
155+
}()
156+
}

pkg/wshrpc/wshserver/wshserver.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,16 +1224,6 @@ func (ws *WshServer) WaveAIEnableTelemetryCommand(ctx context.Context) error {
12241224
return fmt.Errorf("getting client data for telemetry: %v", err)
12251225
}
12261226

1227-
// Send no-telemetry update to cloud (async)
1228-
go func() {
1229-
ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second)
1230-
defer cancelFn()
1231-
err := wcloud.SendNoTelemetryUpdate(ctx, client.OID, false) // false means telemetry is enabled
1232-
if err != nil {
1233-
log.Printf("error sending no-telemetry update: %v", err)
1234-
}
1235-
}()
1236-
12371227
// Record the telemetry event
12381228
event := telemetrydata.MakeTEvent("waveai:enabletelemetry", telemetrydata.TEventProps{})
12391229
err = telemetry.RecordTEvent(ctx, event)

0 commit comments

Comments
 (0)