@keak/sdk 1.0.8 → 1.0.9
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/dist/KeakToolbarShadow.d.ts +21 -0
- package/dist/KeakToolbarShadow.d.ts.map +1 -0
- package/dist/index.cjs.js +6 -6
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/services/telemetry/index.d.ts +20 -0
- package/dist/services/telemetry/index.d.ts.map +1 -0
- package/dist/services/telemetry/telemetryService.d.ts +66 -0
- package/dist/services/telemetry/telemetryService.d.ts.map +1 -0
- package/dist/services/telemetry/types.d.ts +64 -0
- package/dist/services/telemetry/types.d.ts.map +1 -0
- package/dist/toolbar/components/ui/Badge.d.ts +1 -1
- package/dist/toolbar/components/ui/Button.d.ts +2 -2
- package/package.json +3 -13
- package/src/cli/install.js +8 -8
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry Service
|
|
3
|
+
*
|
|
4
|
+
* Handles all telemetry tracking for the Keak SDK, including:
|
|
5
|
+
* - Session management
|
|
6
|
+
* - Generation tracking (AI requests)
|
|
7
|
+
* - Variant management (AI outputs)
|
|
8
|
+
* - User interactions (previews, accepts, rejects)
|
|
9
|
+
*/
|
|
10
|
+
import { TelemetryService } from "./telemetryService";
|
|
11
|
+
import { GenerationType, VariantOutcome } from "./types";
|
|
12
|
+
import type { InitialVariantData as _InitialVariantData } from "./types";
|
|
13
|
+
export declare const telemetry: TelemetryService & {
|
|
14
|
+
GenerationType: typeof GenerationType;
|
|
15
|
+
VariantOutcome: typeof VariantOutcome;
|
|
16
|
+
};
|
|
17
|
+
export declare namespace TelemetryTypes {
|
|
18
|
+
type InitialVariantData = _InitialVariantData;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,IAAI,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAKzE,eAAO,MAAM,SAAS;;;CAGpB,CAAC;AAMH,yBAAiB,cAAc,CAAC;IAC9B,KAAY,kBAAkB,GAAG,mBAAmB,CAAC;CACtD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ChatStartEvent, TelemetryConfig, UserContext } from './types';
|
|
2
|
+
import { GenerationStartEvent, GenerationCompleteEvent, VariantUpdates } from './types';
|
|
3
|
+
export declare class TelemetryService {
|
|
4
|
+
private supabase;
|
|
5
|
+
private enabled;
|
|
6
|
+
private currentSessionId;
|
|
7
|
+
/**
|
|
8
|
+
* Initialize the telemetry service
|
|
9
|
+
*/
|
|
10
|
+
initialize(config: TelemetryConfig): void;
|
|
11
|
+
/**
|
|
12
|
+
* Check if telemetry is enabled and configured
|
|
13
|
+
*/
|
|
14
|
+
private isReady;
|
|
15
|
+
/**
|
|
16
|
+
* Handle errors gracefully
|
|
17
|
+
*/
|
|
18
|
+
private handleError;
|
|
19
|
+
/**
|
|
20
|
+
* Start a new session or return existing session ID
|
|
21
|
+
*/
|
|
22
|
+
startSession(userContext?: UserContext): Promise<string | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Get the current session ID
|
|
25
|
+
*/
|
|
26
|
+
getCurrentSessionId(): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* End the current session
|
|
29
|
+
*/
|
|
30
|
+
endSession(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Start a new chat or select existing chat
|
|
33
|
+
*/
|
|
34
|
+
trackChatStart(event: ChatStartEvent): Promise<{
|
|
35
|
+
chatId: string | null;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Track the start of a generation (AI request)
|
|
39
|
+
* Creates chat if needed and generation record
|
|
40
|
+
*/
|
|
41
|
+
trackGenerationStart(event: GenerationStartEvent): Promise<{
|
|
42
|
+
generationId: string | null;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Track the completion of a generation
|
|
46
|
+
* Updates generation with metrics, inserts variants, and updates context with complexity
|
|
47
|
+
*/
|
|
48
|
+
trackGenerationComplete(event: GenerationCompleteEvent): Promise<{
|
|
49
|
+
variantId: string | null;
|
|
50
|
+
}>;
|
|
51
|
+
updateVariant(variantId: string, updates: VariantUpdates): Promise<void>;
|
|
52
|
+
trackVariantAccept(variantId: string): Promise<void>;
|
|
53
|
+
trackVariantRetry(variantId: string): Promise<void>;
|
|
54
|
+
trackVariantFollowup(variantId: string): Promise<void>;
|
|
55
|
+
trackVariantPreview(variantId: string, new_code: string): Promise<void>;
|
|
56
|
+
trackChatClear(chatId: string): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Disable telemetry
|
|
59
|
+
*/
|
|
60
|
+
disable(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Enable telemetry
|
|
63
|
+
*/
|
|
64
|
+
enable(): void;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=telemetryService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetryService.d.ts","sourceRoot":"","sources":["../../../src/services/telemetry/telemetryService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAkB,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAMxF,qBAAa,gBAAgB;IACzB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,gBAAgB,CAAuB;IAE/C;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAoBzC;;OAEG;IACH,OAAO,CAAC,OAAO;IAOf;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACG,YAAY,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA2BrE;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,UAAU,IAAI,IAAI;IAQlB;;MAEE;IACI,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAoC/E;;;OAGG;IACG,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC;QAC7D,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAC9B,CAAC;IAsBF;;;OAGG;IACG,uBAAuB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IA0C9F,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBxE,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BvE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBnD;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,MAAM,IAAI,IAAI;CAKjB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export interface TelemetryConfig {
|
|
2
|
+
supabaseUrl: string;
|
|
3
|
+
supabaseKey: string;
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface UserContext {
|
|
7
|
+
userId?: string;
|
|
8
|
+
metadata?: Record<string, any>;
|
|
9
|
+
}
|
|
10
|
+
export interface ChatStartEvent {
|
|
11
|
+
sessionId: string;
|
|
12
|
+
elementSelector: string;
|
|
13
|
+
originalCode: string;
|
|
14
|
+
}
|
|
15
|
+
export interface GenerationStartEvent {
|
|
16
|
+
chatId: string;
|
|
17
|
+
userPrompt: string;
|
|
18
|
+
generationType: GenerationType;
|
|
19
|
+
llmModel: string;
|
|
20
|
+
modelTier: string;
|
|
21
|
+
}
|
|
22
|
+
export interface GenerationCompleteEvent {
|
|
23
|
+
generationId: string;
|
|
24
|
+
durationMs: number;
|
|
25
|
+
inputTokens: number;
|
|
26
|
+
outputTokens: number;
|
|
27
|
+
variant: InitialVariantData;
|
|
28
|
+
complexity?: ComplexityScores;
|
|
29
|
+
}
|
|
30
|
+
export interface ComplexityScores {
|
|
31
|
+
overall: number;
|
|
32
|
+
structural: number;
|
|
33
|
+
content: number;
|
|
34
|
+
technical: number;
|
|
35
|
+
}
|
|
36
|
+
export interface InitialVariantData {
|
|
37
|
+
generationId: string;
|
|
38
|
+
chatId: string;
|
|
39
|
+
variantCode: string;
|
|
40
|
+
validationScore: number;
|
|
41
|
+
}
|
|
42
|
+
export declare enum GenerationType {
|
|
43
|
+
INITIAL = "INITIAL",
|
|
44
|
+
RETRY = "RETRY",
|
|
45
|
+
FOLLOWUP = "FOLLOWUP"
|
|
46
|
+
}
|
|
47
|
+
export declare enum VariantOutcome {
|
|
48
|
+
PENDING = "PENDING",
|
|
49
|
+
EDITED = "EDITED",
|
|
50
|
+
ACCEPTED = "ACCEPTED",
|
|
51
|
+
REPLACED = "REPLACED",// Retried
|
|
52
|
+
CLEARED = "CLEARED",
|
|
53
|
+
SKIPPED = "SKIPPED"
|
|
54
|
+
}
|
|
55
|
+
export interface VariantUpdates {
|
|
56
|
+
variant_code?: string;
|
|
57
|
+
validation_score?: number | null;
|
|
58
|
+
final_code?: string | null;
|
|
59
|
+
has_edits?: boolean;
|
|
60
|
+
outcome?: VariantOutcome;
|
|
61
|
+
preview_count?: number;
|
|
62
|
+
last_previewed_at?: string;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/telemetry/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CAExB;AAED,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,oBAAY,cAAc;IACtB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,QAAQ,aAAa;CACxB;AACD,oBAAY,cAAc;IACtB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,QAAQ,aAAa,CAAE,UAAU;IACjC,OAAO,YAAY;IACnB,OAAO,YAAY;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { type VariantProps } from "class-variance-authority";
|
|
3
3
|
declare const badgeVariants: (props?: ({
|
|
4
|
-
variant?: "default" | "
|
|
4
|
+
variant?: "default" | "secondary" | "destructive" | "outline" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
7
7
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { type VariantProps } from "class-variance-authority";
|
|
3
3
|
declare const buttonVariants: (props?: ({
|
|
4
|
-
variant?: "link" | "default" | "
|
|
5
|
-
size?: "default" | "
|
|
4
|
+
variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
|
|
5
|
+
size?: "default" | "icon" | "sm" | "lg" | null | undefined;
|
|
6
6
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
7
|
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
8
8
|
asChild?: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keak/sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "Production-ready A/B testing and experimentation SDK for React applications with visual editing, source mapping, and real-time variant testing",
|
|
5
5
|
"author": "Keak Team",
|
|
6
6
|
"homepage": "https://www.keak.com/",
|
|
@@ -27,11 +27,6 @@
|
|
|
27
27
|
"import": "./dist/toolbar.js",
|
|
28
28
|
"default": "./dist/toolbar.js"
|
|
29
29
|
},
|
|
30
|
-
"./toolbar/KeakToolbarNew": {
|
|
31
|
-
"types": "./dist/toolbar/KeakToolbarNew.d.ts",
|
|
32
|
-
"import": "./dist/toolbar/KeakToolbarNew.js",
|
|
33
|
-
"default": "./dist/toolbar/KeakToolbarNew.js"
|
|
34
|
-
},
|
|
35
30
|
"./toolbar.css": "./dist/toolbar.css",
|
|
36
31
|
"./keak-toolbar.css": "./dist/keak-toolbar.css",
|
|
37
32
|
"./plugins/next": "./src/plugins/next.cjs",
|
|
@@ -80,14 +75,9 @@
|
|
|
80
75
|
}
|
|
81
76
|
},
|
|
82
77
|
"dependencies": {
|
|
83
|
-
"@
|
|
84
|
-
"@
|
|
85
|
-
"@radix-ui/react-progress": "^1.1.7",
|
|
86
|
-
"@radix-ui/react-slot": "^1.2.3",
|
|
87
|
-
"@supabase/supabase-js": "^2.86.0",
|
|
88
|
-
"class-variance-authority": "^0.7.1",
|
|
78
|
+
"@babel/parser": "^7.26.3",
|
|
79
|
+
"@babel/traverse": "^7.26.5",
|
|
89
80
|
"clsx": "^2.1.1",
|
|
90
|
-
"framer-motion": "^12.23.12",
|
|
91
81
|
"lucide-react": "^0.542.0",
|
|
92
82
|
"tailwind-merge": "^3.3.1",
|
|
93
83
|
"tw-animate-css": "^1.3.8"
|
package/src/cli/install.js
CHANGED
|
@@ -342,7 +342,7 @@ class KeakInstaller {
|
|
|
342
342
|
if (bodyMatch) {
|
|
343
343
|
const bodyContent = bodyMatch[2].trim();
|
|
344
344
|
const wrapped = `${bodyMatch[1]}
|
|
345
|
-
<KeakProvider
|
|
345
|
+
<KeakProvider>
|
|
346
346
|
${bodyContent}
|
|
347
347
|
<KeakToolbar />
|
|
348
348
|
</KeakProvider>
|
|
@@ -371,7 +371,7 @@ ${bodyContent}
|
|
|
371
371
|
const componentMatch = modified.match(/(return\s*\(?\s*)([\s\S]*?)(\s*\)?;?\s*})/);
|
|
372
372
|
if (componentMatch) {
|
|
373
373
|
const wrapped = `${componentMatch[1]}
|
|
374
|
-
<KeakProvider
|
|
374
|
+
<KeakProvider>
|
|
375
375
|
${componentMatch[2]}
|
|
376
376
|
<KeakToolbar />
|
|
377
377
|
</KeakProvider>
|
|
@@ -408,7 +408,7 @@ ${bodyContent}
|
|
|
408
408
|
const renderMatch = modified.match(/(ReactDOM\.render\s*\(\s*)([\s\S]*?)(\s*,\s*document\.getElementById)/);
|
|
409
409
|
if (renderMatch) {
|
|
410
410
|
const wrapped = `${renderMatch[1]}
|
|
411
|
-
<KeakProvider
|
|
411
|
+
<KeakProvider>
|
|
412
412
|
${renderMatch[2]}
|
|
413
413
|
<KeakToolbar />
|
|
414
414
|
</KeakProvider>
|
|
@@ -420,7 +420,7 @@ ${bodyContent}
|
|
|
420
420
|
const renderMatch = modified.match(/(root\.render\s*\(\s*)([\s\S]*?)(\s*\))/);
|
|
421
421
|
if (renderMatch) {
|
|
422
422
|
const wrapped = `${renderMatch[1]}
|
|
423
|
-
<KeakProvider
|
|
423
|
+
<KeakProvider>
|
|
424
424
|
${renderMatch[2]}
|
|
425
425
|
<KeakToolbar />
|
|
426
426
|
</KeakProvider>
|
|
@@ -513,7 +513,7 @@ Please add Keak to your app manually:
|
|
|
513
513
|
${colors.green}import { KeakProvider } from '@keak/sdk';${colors.reset}
|
|
514
514
|
|
|
515
515
|
3. Wrap your main component:
|
|
516
|
-
${colors.green}<KeakProvider
|
|
516
|
+
${colors.green}<KeakProvider><YourApp /></KeakProvider>${colors.reset}
|
|
517
517
|
|
|
518
518
|
Example for ${this.framework}:
|
|
519
519
|
${this.getFrameworkExample()}
|
|
@@ -529,7 +529,7 @@ import { KeakProvider } from '@keak/sdk';
|
|
|
529
529
|
export default function RootLayout({ children }) {
|
|
530
530
|
return (
|
|
531
531
|
<html><body>
|
|
532
|
-
<KeakProvider
|
|
532
|
+
<KeakProvider>
|
|
533
533
|
{children}
|
|
534
534
|
</KeakProvider>
|
|
535
535
|
</body></html>);
|
|
@@ -539,7 +539,7 @@ export default function RootLayout({ children }) {
|
|
|
539
539
|
import { KeakProvider } from '@keak/sdk';
|
|
540
540
|
|
|
541
541
|
root.render(
|
|
542
|
-
<KeakProvider
|
|
542
|
+
<KeakProvider>
|
|
543
543
|
<App />
|
|
544
544
|
</KeakProvider>
|
|
545
545
|
);`,
|
|
@@ -548,7 +548,7 @@ root.render(
|
|
|
548
548
|
import { KeakProvider } from '@keak/sdk';
|
|
549
549
|
|
|
550
550
|
ReactDOM.createRoot(document.getElementById('root')).render(
|
|
551
|
-
<KeakProvider
|
|
551
|
+
<KeakProvider>
|
|
552
552
|
<App />
|
|
553
553
|
</KeakProvider>
|
|
554
554
|
);`
|