@analyticscli/growth-engineer 0.1.0-preview.9 → 0.1.1-preview.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/dist/config.d.ts +925 -45
- package/dist/config.js +58 -6
- package/dist/config.js.map +1 -1
- package/dist/index.js +134 -21
- package/dist/index.js.map +1 -1
- package/dist/runtime/export-asc-summary.mjs +295 -4
- package/dist/runtime/export-asc-summary.mjs.map +1 -1
- package/dist/runtime/export-coolify-summary.d.mts +2 -0
- package/dist/runtime/export-coolify-summary.mjs +230 -0
- package/dist/runtime/export-coolify-summary.mjs.map +1 -0
- package/dist/runtime/export-paddle-summary.d.mts +2 -0
- package/dist/runtime/export-paddle-summary.mjs +170 -0
- package/dist/runtime/export-paddle-summary.mjs.map +1 -0
- package/dist/runtime/export-sentry-summary.mjs +265 -38
- package/dist/runtime/export-sentry-summary.mjs.map +1 -1
- package/dist/runtime/export-seo-summary.d.mts +2 -0
- package/dist/runtime/export-seo-summary.mjs +503 -0
- package/dist/runtime/export-seo-summary.mjs.map +1 -0
- package/dist/runtime/openclaw-exporters-lib.d.mts +51 -0
- package/dist/runtime/openclaw-exporters-lib.mjs +769 -63
- package/dist/runtime/openclaw-exporters-lib.mjs.map +1 -1
- package/dist/runtime/openclaw-growth-engineer.mjs +163 -4
- package/dist/runtime/openclaw-growth-engineer.mjs.map +1 -1
- package/dist/runtime/openclaw-growth-env.mjs +5 -0
- package/dist/runtime/openclaw-growth-env.mjs.map +1 -1
- package/dist/runtime/openclaw-growth-preflight.mjs +446 -30
- package/dist/runtime/openclaw-growth-preflight.mjs.map +1 -1
- package/dist/runtime/openclaw-growth-runner.mjs +831 -146
- package/dist/runtime/openclaw-growth-runner.mjs.map +1 -1
- package/dist/runtime/openclaw-growth-shared.d.mts +158 -3
- package/dist/runtime/openclaw-growth-shared.mjs +574 -8
- package/dist/runtime/openclaw-growth-shared.mjs.map +1 -1
- package/dist/runtime/openclaw-growth-start.mjs +802 -39
- package/dist/runtime/openclaw-growth-start.mjs.map +1 -1
- package/dist/runtime/openclaw-growth-status.mjs +85 -31
- package/dist/runtime/openclaw-growth-status.mjs.map +1 -1
- package/dist/runtime/openclaw-growth-wizard.mjs +1952 -217
- package/dist/runtime/openclaw-growth-wizard.mjs.map +1 -1
- package/package.json +3 -1
- package/templates/config.example.json +128 -65
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@analyticscli/growth-engineer",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1-preview.0",
|
|
4
4
|
"description": "Growth Engineer CLI for connector setup, scheduling, health checks, and OpenClaw-compatible growth runs.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "tsc -p tsconfig.json && mkdir -p dist/runtime && cp src/runtime/*.py dist/runtime/",
|
|
27
|
+
"dev": "tsx src/index.ts",
|
|
27
28
|
"prepack": "npm run build",
|
|
28
29
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
29
30
|
},
|
|
@@ -33,6 +34,7 @@
|
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
36
|
"@types/node": "^22.13.10",
|
|
37
|
+
"tsx": "^4.19.3",
|
|
36
38
|
"typescript": "^5.8.2"
|
|
37
39
|
}
|
|
38
40
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version":
|
|
2
|
+
"version": 2,
|
|
3
3
|
"generatedAt": "2026-03-21T00:00:00.000Z",
|
|
4
4
|
"project": {
|
|
5
5
|
"githubRepo": "owner/repo",
|
|
@@ -17,13 +17,59 @@
|
|
|
17
17
|
},
|
|
18
18
|
"revenuecat": {
|
|
19
19
|
"enabled": false,
|
|
20
|
-
"mode": "
|
|
21
|
-
"
|
|
20
|
+
"mode": "command",
|
|
21
|
+
"command": "node scripts/export-revenuecat-summary.mjs"
|
|
22
|
+
},
|
|
23
|
+
"paddle": {
|
|
24
|
+
"enabled": false,
|
|
25
|
+
"mode": "command",
|
|
26
|
+
"command": "node scripts/export-paddle-summary.mjs",
|
|
27
|
+
"environment": "live"
|
|
28
|
+
},
|
|
29
|
+
"seo": {
|
|
30
|
+
"enabled": false,
|
|
31
|
+
"mode": "command",
|
|
32
|
+
"command": "node scripts/export-seo-summary.mjs",
|
|
33
|
+
"siteUrl": "",
|
|
34
|
+
"paidProvider": {
|
|
35
|
+
"dataforseo": {
|
|
36
|
+
"enabled": false,
|
|
37
|
+
"confirmPaid": false,
|
|
38
|
+
"maxPaidRequests": 1
|
|
39
|
+
}
|
|
40
|
+
}
|
|
22
41
|
},
|
|
23
42
|
"sentry": {
|
|
24
43
|
"enabled": false,
|
|
25
44
|
"mode": "command",
|
|
26
|
-
"command": "node scripts/export-sentry-summary.mjs"
|
|
45
|
+
"command": "node scripts/export-sentry-summary.mjs --config data/openclaw-growth-engineer/config.json",
|
|
46
|
+
"accounts": [
|
|
47
|
+
{
|
|
48
|
+
"id": "sentry_cloud",
|
|
49
|
+
"label": "Sentry Cloud",
|
|
50
|
+
"baseUrl": "https://sentry.io",
|
|
51
|
+
"tokenEnv": "SENTRY_AUTH_TOKEN",
|
|
52
|
+
"org": "owner-org",
|
|
53
|
+
"projects": ["ios-app"],
|
|
54
|
+
"environment": "production"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "glitchtip_selfhosted",
|
|
58
|
+
"label": "GlitchTip self-hosted",
|
|
59
|
+
"baseUrl": "https://glitchtip.example.com",
|
|
60
|
+
"tokenEnv": "GLITCHTIP_AUTH_TOKEN",
|
|
61
|
+
"org": "owner-org",
|
|
62
|
+
"projects": ["backend-api", "web-app"],
|
|
63
|
+
"environment": "production"
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"coolify": {
|
|
68
|
+
"enabled": false,
|
|
69
|
+
"mode": "command",
|
|
70
|
+
"command": "npx -y @analyticscli/growth-engineer@preview exporters coolify-summary --config data/openclaw-growth-engineer/config.json",
|
|
71
|
+
"baseUrl": "https://coolify.example.com",
|
|
72
|
+
"tokenEnv": "COOLIFY_API_TOKEN"
|
|
27
73
|
},
|
|
28
74
|
"feedback": {
|
|
29
75
|
"enabled": true,
|
|
@@ -33,81 +79,82 @@
|
|
|
33
79
|
"initialLookback": "30d"
|
|
34
80
|
},
|
|
35
81
|
"extra": [
|
|
36
|
-
{
|
|
37
|
-
"key": "glitchtip",
|
|
38
|
-
"label": "glitchtip",
|
|
39
|
-
"service": "glitchtip",
|
|
40
|
-
"enabled": false,
|
|
41
|
-
"mode": "file",
|
|
42
|
-
"path": "data/openclaw-growth-engineer/glitchtip_summary.json",
|
|
43
|
-
"secretEnv": "GLITCHTIP_API_TOKEN"
|
|
44
|
-
},
|
|
45
82
|
{
|
|
46
83
|
"key": "asc_cli",
|
|
47
84
|
"label": "asc-cli",
|
|
48
85
|
"service": "asc-cli",
|
|
49
86
|
"enabled": false,
|
|
50
87
|
"mode": "command",
|
|
51
|
-
"command": "node scripts/export-asc-summary.mjs",
|
|
88
|
+
"command": "node scripts/export-asc-summary.mjs --max-signals 6",
|
|
52
89
|
"secretEnv": "ASC_KEY_ID"
|
|
53
90
|
}
|
|
54
91
|
]
|
|
55
92
|
},
|
|
56
93
|
"schedule": {
|
|
57
|
-
"intervalMinutes":
|
|
94
|
+
"intervalMinutes": 90,
|
|
58
95
|
"connectorHealthCheckIntervalMinutes": 360,
|
|
59
96
|
"skipIfNoDataChange": true,
|
|
60
97
|
"skipIfIssueSetUnchanged": true,
|
|
61
98
|
"cadences": [
|
|
99
|
+
{
|
|
100
|
+
"key": "healthcheck",
|
|
101
|
+
"title": "90-minute production error healthcheck",
|
|
102
|
+
"intervalMinutes": 90,
|
|
103
|
+
"criticalOnly": true,
|
|
104
|
+
"focusAreas": ["crash", "deployment", "availability"],
|
|
105
|
+
"sourcePriorities": ["sentry", "glitchtip", "coolify", "asc_cli"],
|
|
106
|
+
"objective": "Check Sentry/GlitchTip and Coolify for production errors, failed deploys, unhealthy resources, and availability blockers across every configured app.",
|
|
107
|
+
"instructions": "For Sentry/GlitchTip app errors, compare the issue release or app version with ASC production versions first. Ignore errors that only affect TestFlight, debug, staging, unreleased, or non-production app versions. Keep the social output short and action-oriented."
|
|
108
|
+
},
|
|
62
109
|
{
|
|
63
110
|
"key": "daily",
|
|
64
|
-
"title": "Daily
|
|
111
|
+
"title": "Daily behavioral anomaly guardrail",
|
|
65
112
|
"intervalDays": 1,
|
|
66
113
|
"criticalOnly": true,
|
|
67
|
-
"focusAreas": ["
|
|
68
|
-
"sourcePriorities": ["
|
|
69
|
-
"objective": "
|
|
70
|
-
"instructions": "Compare
|
|
114
|
+
"focusAreas": ["analytics_anomaly", "onboarding", "conversion", "paywall", "purchase", "retention", "revenue"],
|
|
115
|
+
"sourcePriorities": ["analytics", "revenuecat", "paddle", "asc_cli", "feedback", "github", "sentry", "glitchtip", "coolify"],
|
|
116
|
+
"objective": "Detect non-Sentry product and payment anomalies that affect real users: broken login or account flows inferred from behavior, onboarding or purchase drop-offs, zero-conversion days, missing buyers, very low active users, retention cliffs, and revenue anomalies.",
|
|
117
|
+
"instructions": "Compare AnalyticsCLI, RevenueCat, Paddle, ASC, feedback, memory/state, and recent code changes against recent baselines. Use Sentry/GlitchTip/Coolify only as corroborating context; do not repeat pure crash or deployment alerts that belong to the 90-minute healthcheck."
|
|
71
118
|
},
|
|
72
119
|
{
|
|
73
120
|
"key": "weekly",
|
|
74
121
|
"title": "Weekly executive product and growth summary",
|
|
75
122
|
"intervalDays": 7,
|
|
76
123
|
"criticalOnly": false,
|
|
77
|
-
"focusAreas": ["conversion", "paywall", "onboarding", "marketing", "retention", "stability"],
|
|
78
|
-
"sourcePriorities": ["analytics", "revenuecat", "asc_cli", "feedback", "sentry", "github"],
|
|
79
|
-
"objective": "Create
|
|
80
|
-
"instructions": "
|
|
124
|
+
"focusAreas": ["conversion", "paywall", "onboarding", "marketing", "retention", "stability", "seo"],
|
|
125
|
+
"sourcePriorities": ["analytics", "revenuecat", "paddle", "seo", "asc_cli", "feedback", "sentry", "coolify", "github"],
|
|
126
|
+
"objective": "Create a deep app-by-app executive summary across all configured projects, connectors, recent releases, code changes, traffic, SEO/acquisition, revenue, activation, conversion, retention, reviews, and production stability.",
|
|
127
|
+
"instructions": "Be detailed. Group findings per app, explain why each recommendation should improve app usage, revenue, conversion, retention, or traffic, include expected KPI movement, likely code/store surfaces, owner-ready next steps, and verification plans. Generate charts when they clarify the evidence."
|
|
81
128
|
},
|
|
82
129
|
{
|
|
83
130
|
"key": "monthly",
|
|
84
131
|
"title": "Monthly deep product, business, and code review",
|
|
85
132
|
"intervalDays": 30,
|
|
86
133
|
"criticalOnly": false,
|
|
87
|
-
"focusAreas": ["conversion", "paywall", "retention", "marketing", "onboarding", "codebase"],
|
|
88
|
-
"sourcePriorities": ["analytics", "revenuecat", "asc_cli", "feedback", "sentry", "github"],
|
|
89
|
-
"objective": "Compare all configured projects month-over-month: MRR, trial conversion, churn, acquisition quality, store conversion, retention, review themes, feature usage, crash totals, and codebase changes.",
|
|
90
|
-
"instructions": "Decide what should be built, changed, deleted, or instrumented next. Tie conclusions to connector data plus codebase evidence and explain why each recommendation should move revenue,
|
|
134
|
+
"focusAreas": ["conversion", "paywall", "retention", "marketing", "onboarding", "codebase", "seo"],
|
|
135
|
+
"sourcePriorities": ["analytics", "revenuecat", "paddle", "seo", "asc_cli", "feedback", "sentry", "coolify", "github"],
|
|
136
|
+
"objective": "Compare all configured projects month-over-month: MRR, trial conversion, churn, Paddle revenue/subscriber movement, SEO demand/clicks, acquisition quality, store conversion, retention, review themes, feature usage, crash totals, and codebase changes.",
|
|
137
|
+
"instructions": "Be very detailed and app-grouped. Decide what should be built, changed, deleted, priced differently, marketed differently, or instrumented next. Tie conclusions to connector data plus codebase evidence and explain why each recommendation should move revenue, conversion, retention, traffic, or acquisition quality. Generate charts when useful."
|
|
91
138
|
},
|
|
92
139
|
{
|
|
93
140
|
"key": "quarterly",
|
|
94
|
-
"title": "
|
|
141
|
+
"title": "3-month positioning, pricing, and roadmap review",
|
|
95
142
|
"intervalDays": 91,
|
|
96
143
|
"criticalOnly": false,
|
|
97
144
|
"focusAreas": ["marketing", "paywall", "retention", "conversion", "onboarding"],
|
|
98
|
-
"sourcePriorities": ["analytics", "revenuecat", "asc_cli", "feedback", "github", "sentry"],
|
|
99
|
-
"objective": "Revisit positioning, pricing/packaging, onboarding architecture, roadmap assumptions, tracking quality, codebase constraints, and major funnel bets across every configured
|
|
100
|
-
"instructions": "Find structural constraints and durable opportunities.
|
|
145
|
+
"sourcePriorities": ["analytics", "revenuecat", "paddle", "seo", "asc_cli", "feedback", "github", "sentry"],
|
|
146
|
+
"objective": "Revisit positioning, pricing/packaging, onboarding architecture, roadmap assumptions, tracking quality, codebase constraints, and major funnel bets across every configured app.",
|
|
147
|
+
"instructions": "Find structural constraints and durable opportunities, not small UI tweaks. Group the analysis by app and tie recommendations to cohort behavior, monetization, reviews, channel quality, and shipped changes. Include concrete roadmap, pricing, conversion, and traffic recommendations."
|
|
101
148
|
},
|
|
102
149
|
{
|
|
103
150
|
"key": "six_months",
|
|
104
151
|
"title": "Six-month instrumentation and growth-system audit",
|
|
105
152
|
"intervalDays": 182,
|
|
106
153
|
"criticalOnly": false,
|
|
107
|
-
"focusAreas": ["retention", "conversion", "paywall", "marketing", "general"],
|
|
108
|
-
"sourcePriorities": ["analytics", "revenuecat", "asc_cli", "feedback", "sentry"],
|
|
109
|
-
"objective": "Audit connector coverage, SDK instrumentation, event taxonomy, data reliability, memory, growth loops, and whether product/code strategy still matches the best users across configured
|
|
110
|
-
"instructions": "Prioritize measurement fixes and system changes that make future analysis more trustworthy. Identify stale events, missing attribution, weak identity, and misleading dashboards."
|
|
154
|
+
"focusAreas": ["retention", "conversion", "paywall", "marketing", "general", "seo"],
|
|
155
|
+
"sourcePriorities": ["analytics", "revenuecat", "paddle", "seo", "asc_cli", "feedback", "sentry"],
|
|
156
|
+
"objective": "Audit connector coverage, SDK instrumentation, event taxonomy, data reliability, memory, growth loops, and whether product/code strategy still matches the best users across configured apps.",
|
|
157
|
+
"instructions": "Group by app. Prioritize measurement fixes and system changes that make future analysis more trustworthy, then identify the highest-leverage app/revenue/conversion/traffic improvements. Identify stale events, missing attribution, weak identity, broken feedback loops, and misleading dashboards."
|
|
111
158
|
},
|
|
112
159
|
{
|
|
113
160
|
"key": "yearly",
|
|
@@ -115,41 +162,25 @@
|
|
|
115
162
|
"intervalDays": 365,
|
|
116
163
|
"criticalOnly": false,
|
|
117
164
|
"focusAreas": ["marketing", "retention", "paywall", "conversion", "general"],
|
|
118
|
-
"sourcePriorities": ["analytics", "revenuecat", "asc_cli", "feedback", "sentry"],
|
|
165
|
+
"sourcePriorities": ["analytics", "revenuecat", "paddle", "seo", "asc_cli", "feedback", "sentry"],
|
|
119
166
|
"objective": "Reset strategy from evidence across every configured project: market/channel fit, monetization model, retention ceiling, product scope, and whether to double down, reposition, rebuild, or sunset major surfaces/features.",
|
|
120
167
|
"instructions": "Use the full year of memory, releases, revenue, acquisition, reviews, code changes, and cohort behavior. Produce strategic experiments and stop-doing decisions."
|
|
121
168
|
}
|
|
122
169
|
]
|
|
123
170
|
},
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
"
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
"
|
|
134
|
-
"enabled": false,
|
|
135
|
-
"mode": "issue",
|
|
136
|
-
"autoCreate": false,
|
|
137
|
-
"draftPullRequests": true,
|
|
138
|
-
"proposalBranchPrefix": "openclaw/proposals"
|
|
139
|
-
},
|
|
140
|
-
"slack": {
|
|
141
|
-
"enabled": false,
|
|
142
|
-
"webhookEnv": "SLACK_WEBHOOK_URL"
|
|
143
|
-
},
|
|
144
|
-
"webhook": {
|
|
145
|
-
"enabled": false,
|
|
146
|
-
"urlEnv": "OPENCLAW_WEBHOOK_URL",
|
|
147
|
-
"method": "POST",
|
|
148
|
-
"headers": {}
|
|
149
|
-
}
|
|
171
|
+
"actions": {
|
|
172
|
+
"mode": "issue",
|
|
173
|
+
"outputDestinations": ["openclaw_chat", "github_issue"],
|
|
174
|
+
"productionErrorMode": "issue",
|
|
175
|
+
"autoCreateIssues": true,
|
|
176
|
+
"autoCreatePullRequests": false,
|
|
177
|
+
"autoCreateWhenGitHubWriteAccess": true,
|
|
178
|
+
"disableAutoCreateGitHubArtifacts": false,
|
|
179
|
+
"draftPullRequests": true,
|
|
180
|
+
"proposalBranchPrefix": "openclaw/proposals"
|
|
150
181
|
},
|
|
151
182
|
"charting": {
|
|
152
|
-
"enabled":
|
|
183
|
+
"enabled": true,
|
|
153
184
|
"command": null
|
|
154
185
|
},
|
|
155
186
|
"notifications": {
|
|
@@ -176,6 +207,28 @@
|
|
|
176
207
|
]
|
|
177
208
|
}
|
|
178
209
|
},
|
|
210
|
+
"automation": {
|
|
211
|
+
"openclawCron": {
|
|
212
|
+
"enabled": true,
|
|
213
|
+
"mode": "main",
|
|
214
|
+
"schedule": "*/30 * * * *",
|
|
215
|
+
"timezone": "UTC",
|
|
216
|
+
"name": "OpenClaw Growth Engineer scheduler",
|
|
217
|
+
"delivery": {
|
|
218
|
+
"enabled": true,
|
|
219
|
+
"mode": "announce",
|
|
220
|
+
"channel": "last",
|
|
221
|
+
"to": ""
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
"hermesCron": {
|
|
225
|
+
"enabled": true,
|
|
226
|
+
"schedule": "*/30 * * * *",
|
|
227
|
+
"name": "Hermes Growth Engineer scheduler",
|
|
228
|
+
"skill": "growth-engineer",
|
|
229
|
+
"deliver": "local"
|
|
230
|
+
}
|
|
231
|
+
},
|
|
179
232
|
"security": {
|
|
180
233
|
"connectorSecrets": {
|
|
181
234
|
"mode": "openclaw-secret-refs",
|
|
@@ -191,7 +244,17 @@
|
|
|
191
244
|
"analyticsTokenRef": { "source": "env", "provider": "default", "id": "ANALYTICSCLI_ACCESS_TOKEN" },
|
|
192
245
|
"revenuecatTokenEnv": "REVENUECAT_API_KEY",
|
|
193
246
|
"revenuecatTokenRef": { "source": "env", "provider": "default", "id": "REVENUECAT_API_KEY" },
|
|
247
|
+
"paddleTokenEnv": "PADDLE_API_KEY",
|
|
248
|
+
"paddleTokenRef": { "source": "env", "provider": "default", "id": "PADDLE_API_KEY" },
|
|
249
|
+
"gscTokenEnv": "GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN",
|
|
250
|
+
"gscTokenRef": { "source": "env", "provider": "default", "id": "GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN" },
|
|
251
|
+
"dataforseoLoginEnv": "DATAFORSEO_LOGIN",
|
|
252
|
+
"dataforseoLoginRef": { "source": "env", "provider": "default", "id": "DATAFORSEO_LOGIN" },
|
|
253
|
+
"dataforseoPasswordEnv": "DATAFORSEO_PASSWORD",
|
|
254
|
+
"dataforseoPasswordRef": { "source": "env", "provider": "default", "id": "DATAFORSEO_PASSWORD" },
|
|
194
255
|
"sentryTokenEnv": "SENTRY_AUTH_TOKEN",
|
|
195
|
-
"sentryTokenRef": { "source": "env", "provider": "default", "id": "SENTRY_AUTH_TOKEN" }
|
|
256
|
+
"sentryTokenRef": { "source": "env", "provider": "default", "id": "SENTRY_AUTH_TOKEN" },
|
|
257
|
+
"coolifyTokenEnv": "COOLIFY_API_TOKEN",
|
|
258
|
+
"coolifyTokenRef": { "source": "env", "provider": "default", "id": "COOLIFY_API_TOKEN" }
|
|
196
259
|
}
|
|
197
260
|
}
|