@funnelsgrove/cli 0.1.20 → 0.1.26
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 +16 -0
- package/dist/analyticsOutput.d.ts +2 -1
- package/dist/analyticsOutput.js +35 -10
- package/dist/apiClient.d.ts +9 -1
- package/dist/apiClient.js +16 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +40 -15
- package/dist/cliIdentity.d.ts +13 -0
- package/dist/cliIdentity.js +43 -0
- package/dist/contractCompatibility.d.ts +30 -0
- package/dist/contractCompatibility.js +250 -0
- package/dist/experimentCreate.d.ts +100 -0
- package/dist/experimentCreate.js +887 -0
- package/dist/localSync.d.ts +8 -0
- package/dist/localSync.js +71 -11
- package/funnel-contract-compatibility.json +1036 -0
- package/package.json +2 -1
- package/template_docs/.funnelsgrove-docs.json +4 -4
- package/template_docs/docs/funnelsgrove/migrations/step-contract-v3.md +1 -1
- package/template_docs/docs/funnelsgrove/recipes/add-experiment.md +156 -7
- package/template_docs/funnel-docs.config.json +1 -1
- package/template_scaffold/.funnelsgrove-docs.json +4 -4
- package/template_scaffold/.funnelsgrove-scaffold.json +9 -9
- package/template_scaffold/docs/funnelsgrove/migrations/step-contract-v3.md +1 -1
- package/template_scaffold/docs/funnelsgrove/recipes/add-experiment.md +156 -7
- package/template_scaffold/funnel-agent-docs.test.ts +32 -3
- package/template_scaffold/funnel-docs.config.json +1 -1
- package/template_scaffold/package-lock.json +4 -4
- package/template_scaffold/package.json +1 -1
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { readSyncManifest, type SyncManifest } from './localSync.js';
|
|
2
|
+
export declare const EXPERIMENT_GENERATED_PATHS: readonly ["src/config/experiments.generated.ts", "src/config/experiments.ts"];
|
|
3
|
+
declare const EXPERIMENT_GENERATED_CONTENT_TYPE = "text/typescript";
|
|
4
|
+
declare const EXPERIMENT_METRICS: readonly ["step_completion", "next_step_reached", "checkout_opened", "funnel_completed", "paying_customer"];
|
|
5
|
+
export type ExperimentMetric = (typeof EXPERIMENT_METRICS)[number];
|
|
6
|
+
export type AgentExperimentVariant = {
|
|
7
|
+
variantKey: string;
|
|
8
|
+
label: string;
|
|
9
|
+
routeToStepId: string;
|
|
10
|
+
trafficPercent: number;
|
|
11
|
+
isControl: boolean;
|
|
12
|
+
};
|
|
13
|
+
export type AgentPricingExperimentVariant = AgentExperimentVariant & {
|
|
14
|
+
offerSetKey: string;
|
|
15
|
+
};
|
|
16
|
+
type SharedAgentExperimentSpec = {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
stepId: string;
|
|
20
|
+
primaryMetric: ExperimentMetric;
|
|
21
|
+
trackedMetrics: ExperimentMetric[];
|
|
22
|
+
};
|
|
23
|
+
export type AgentExperimentSpec = SharedAgentExperimentSpec & ({
|
|
24
|
+
type: 'step' | 'paywall';
|
|
25
|
+
variants: AgentExperimentVariant[];
|
|
26
|
+
} | {
|
|
27
|
+
type: 'pricing';
|
|
28
|
+
variants: AgentPricingExperimentVariant[];
|
|
29
|
+
});
|
|
30
|
+
export type GeneratedExperimentFile = {
|
|
31
|
+
path: (typeof EXPERIMENT_GENERATED_PATHS)[number];
|
|
32
|
+
content: string;
|
|
33
|
+
contentType: typeof EXPERIMENT_GENERATED_CONTENT_TYPE;
|
|
34
|
+
};
|
|
35
|
+
export type ExperimentCreateResponse = {
|
|
36
|
+
experiment: Record<string, unknown> & {
|
|
37
|
+
id: string;
|
|
38
|
+
posthog_flag_key: string;
|
|
39
|
+
};
|
|
40
|
+
variants: Array<Record<string, unknown> & {
|
|
41
|
+
id: string;
|
|
42
|
+
experiment_id: string;
|
|
43
|
+
variant_key: string;
|
|
44
|
+
label: string;
|
|
45
|
+
route_to_step_id: string;
|
|
46
|
+
traffic_percent: number;
|
|
47
|
+
is_control: boolean;
|
|
48
|
+
}>;
|
|
49
|
+
draftVersionId: string;
|
|
50
|
+
generatedFiles: [GeneratedExperimentFile, GeneratedExperimentFile];
|
|
51
|
+
githubConnected: boolean;
|
|
52
|
+
};
|
|
53
|
+
export declare class ExperimentCreateContractError extends Error {
|
|
54
|
+
constructor(fieldPath: string, reason: string);
|
|
55
|
+
}
|
|
56
|
+
export declare function parseAgentExperimentSpec(value: unknown): AgentExperimentSpec;
|
|
57
|
+
export declare function readAgentExperimentSpec(filePath: string): Promise<AgentExperimentSpec>;
|
|
58
|
+
export declare function parseExperimentCreateResponse(value: unknown, requestedSpec: AgentExperimentSpec, expectedFunnelIdValue: string): ExperimentCreateResponse;
|
|
59
|
+
export declare function assertGeneratedExperimentFilesUnchanged(root: string, manifestValue: SyncManifest): Promise<void>;
|
|
60
|
+
export declare function buildExperimentCreateManifest(manifestValue: SyncManifest, draftVersionIdValue: string, filesValue: unknown): SyncManifest;
|
|
61
|
+
export type ExperimentCreateInstallPhase = 'prepared' | 'ready' | `generated:${GeneratedExperimentFile['path']}` | 'before-manifest' | 'manifest';
|
|
62
|
+
type ExperimentCreateInstallHooks = {
|
|
63
|
+
afterPhase?: (phase: ExperimentCreateInstallPhase) => void | Promise<void>;
|
|
64
|
+
};
|
|
65
|
+
export declare function recoverExperimentCreateTransaction(root: string): Promise<boolean>;
|
|
66
|
+
export declare function installExperimentCreateTransaction(root: string, input: {
|
|
67
|
+
generatedFiles: unknown;
|
|
68
|
+
manifest: SyncManifest;
|
|
69
|
+
}, hooks?: ExperimentCreateInstallHooks): Promise<void>;
|
|
70
|
+
export type ExecuteExperimentCreateInput = {
|
|
71
|
+
sourceDir: string;
|
|
72
|
+
specPath: string;
|
|
73
|
+
createFromSpec: (input: {
|
|
74
|
+
workspaceId: string;
|
|
75
|
+
funnelId: string;
|
|
76
|
+
expectedDraftVersionId: string;
|
|
77
|
+
spec: AgentExperimentSpec;
|
|
78
|
+
}) => Promise<unknown>;
|
|
79
|
+
};
|
|
80
|
+
export type ExperimentCreateSuccess = {
|
|
81
|
+
experimentId: string;
|
|
82
|
+
experimentKey: string;
|
|
83
|
+
draftVersionId: string;
|
|
84
|
+
writtenPaths: [...typeof EXPERIMENT_GENERATED_PATHS];
|
|
85
|
+
githubConnected: boolean;
|
|
86
|
+
};
|
|
87
|
+
type ExecuteExperimentCreateDependencies = {
|
|
88
|
+
recover: typeof recoverExperimentCreateTransaction;
|
|
89
|
+
readManifest: typeof readSyncManifest;
|
|
90
|
+
readSpec: typeof readAgentExperimentSpec;
|
|
91
|
+
assertGeneratedFilesUnchanged: typeof assertGeneratedExperimentFilesUnchanged;
|
|
92
|
+
parseResponse: typeof parseExperimentCreateResponse;
|
|
93
|
+
install: (sourceDir: string, input: {
|
|
94
|
+
generatedFiles: unknown;
|
|
95
|
+
manifest: SyncManifest;
|
|
96
|
+
}) => Promise<void>;
|
|
97
|
+
};
|
|
98
|
+
export declare function executeExperimentCreate(input: ExecuteExperimentCreateInput, dependencyOverrides?: Partial<ExecuteExperimentCreateDependencies>): Promise<ExperimentCreateSuccess>;
|
|
99
|
+
export declare function formatExperimentCreateSuccess(result: ExperimentCreateSuccess, json: boolean): string;
|
|
100
|
+
export {};
|