@oxygen-agent/cli 1.310.2 → 1.334.3
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 +1 -1
- package/dist/command-manifest.js +26 -10
- package/dist/help.js +7 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2077 -134
- package/dist/runtime.js +13 -3
- package/dist/skills.js +192 -32
- package/node_modules/@oxygen/recipe-sdk/dist/index.d.ts +2 -0
- package/node_modules/@oxygen/shared/dist/billing.d.ts +52 -29
- package/node_modules/@oxygen/shared/dist/billing.js +77 -55
- package/node_modules/@oxygen/shared/dist/index.d.ts +4 -0
- package/node_modules/@oxygen/shared/dist/index.js +4 -0
- package/node_modules/@oxygen/shared/dist/pricing-sheet.d.ts +84 -0
- package/node_modules/@oxygen/shared/dist/pricing-sheet.js +82 -0
- package/node_modules/@oxygen/shared/dist/recipes.d.ts +19 -0
- package/node_modules/@oxygen/shared/dist/recipes.js +90 -0
- package/node_modules/@oxygen/shared/dist/sequences.d.ts +61 -15
- package/node_modules/@oxygen/shared/dist/sequences.js +134 -23
- package/node_modules/@oxygen/shared/dist/sql-error.d.ts +25 -0
- package/node_modules/@oxygen/shared/dist/sql-error.js +46 -0
- package/node_modules/@oxygen/shared/dist/version.d.ts +2 -2
- package/node_modules/@oxygen/shared/dist/version.js +13 -11
- package/node_modules/@oxygen/shared/dist/workflow-mcp-tools.d.ts +4 -0
- package/node_modules/@oxygen/shared/dist/workflow-mcp-tools.js +18 -0
- package/node_modules/@oxygen/shared/dist/workflow-status-change.d.ts +61 -0
- package/node_modules/@oxygen/shared/dist/workflow-status-change.js +124 -0
- package/node_modules/@oxygen/shared/dist/workspace-agents.d.ts +65 -0
- package/node_modules/@oxygen/shared/dist/workspace-agents.js +67 -0
- package/node_modules/@oxygen/workflows/dist/index.js +86 -2
- package/package.json +1 -1
|
@@ -2,21 +2,43 @@ export const WEEKLY_USAGE_WINDOW_DAYS = 7;
|
|
|
2
2
|
export const BILLING_CURRENCIES = ["usd"];
|
|
3
3
|
export const DEFAULT_BILLING_CURRENCY = "usd";
|
|
4
4
|
export const CONTACT_SALES_URL = "https://cal.com/tim-scheuer-mxbib9/45";
|
|
5
|
+
// One Oxygen credit is worth $0.001 of managed work: $1 = 1,000 credits.
|
|
6
|
+
// Subscription plans convert at face value — every subscription dollar grants
|
|
7
|
+
// exactly 1,000 credits — while on-demand top-up packs price the same credit
|
|
8
|
+
// at $1.25 per 1,000, making subscription credits exactly 20% cheaper than
|
|
9
|
+
// credits bought on demand.
|
|
10
|
+
export const CREDITS_PER_USD = 1_000;
|
|
11
|
+
export const TOPUP_USD_CENTS_PER_1K_CREDITS = 125;
|
|
12
|
+
// Workflow/automation actions (steps, tool calls, row writes, retries) draw
|
|
13
|
+
// from the same credit pool at a flat capacity-guard rate — the old separate
|
|
14
|
+
// monthly action allowance + USD overage meter economy is retired (2026-07-14).
|
|
15
|
+
export const AUTOMATION_ACTION_CREDITS = 0.01;
|
|
16
|
+
export const CREDIT_TOPUP_PACKS = [
|
|
17
|
+
{ id: "10", usdCents: 1_000, credits: 8_000 },
|
|
18
|
+
{ id: "25", usdCents: 2_500, credits: 20_000 },
|
|
19
|
+
{ id: "100", usdCents: 10_000, credits: 80_000 },
|
|
20
|
+
{ id: "250", usdCents: 25_000, credits: 200_000 },
|
|
21
|
+
];
|
|
22
|
+
export function resolveCreditTopupPack(id) {
|
|
23
|
+
if (!id)
|
|
24
|
+
return null;
|
|
25
|
+
return CREDIT_TOPUP_PACKS.find((pack) => pack.id === id) ?? null;
|
|
26
|
+
}
|
|
5
27
|
// Card-required free trial: every new signup starts a Stripe trial on the Starter
|
|
6
28
|
// plan, gets TRIAL_CREDIT_GRANT credits (a value-demonstration budget sized to the
|
|
7
29
|
// guided first outcome — NOT the full plan allowance), and converts to paid on
|
|
8
30
|
// credit exhaustion or when the trial clock elapses, whichever comes first.
|
|
9
31
|
export const TRIAL_PERIOD_DAYS = 7;
|
|
10
|
-
export const TRIAL_CREDIT_GRANT =
|
|
32
|
+
export const TRIAL_CREDIT_GRANT = 20_000;
|
|
11
33
|
export const BASE_PRICING_PLANS = {
|
|
12
34
|
free: {
|
|
13
35
|
tier: "free",
|
|
14
36
|
name: "Free",
|
|
15
37
|
monthlyPriceCents: 0,
|
|
16
|
-
monthlyCredits:
|
|
17
|
-
weeklyCreditsLimit:
|
|
18
|
-
rolloverCap:
|
|
19
|
-
monthlyAutomationActions:
|
|
38
|
+
monthlyCredits: 10_000,
|
|
39
|
+
weeklyCreditsLimit: 10_000,
|
|
40
|
+
rolloverCap: 10_000,
|
|
41
|
+
monthlyAutomationActions: null,
|
|
20
42
|
automationOverageCentsPerMillion: null,
|
|
21
43
|
automationOverageEnabledDefault: false,
|
|
22
44
|
byokEnabled: false,
|
|
@@ -24,7 +46,7 @@ export const BASE_PRICING_PLANS = {
|
|
|
24
46
|
ctaLabel: "Start free",
|
|
25
47
|
features: [
|
|
26
48
|
"$10 in credits every month",
|
|
27
|
-
"
|
|
49
|
+
"Automation actions at 0.01 credits each",
|
|
28
50
|
"All integrations",
|
|
29
51
|
"Workflows",
|
|
30
52
|
"No card required",
|
|
@@ -34,20 +56,20 @@ export const BASE_PRICING_PLANS = {
|
|
|
34
56
|
tier: "starter",
|
|
35
57
|
name: "Starter",
|
|
36
58
|
monthlyPriceCents: 9_900,
|
|
37
|
-
monthlyCredits:
|
|
38
|
-
weeklyCreditsLimit:
|
|
39
|
-
rolloverCap:
|
|
40
|
-
monthlyAutomationActions:
|
|
41
|
-
automationOverageCentsPerMillion:
|
|
59
|
+
monthlyCredits: 99_000,
|
|
60
|
+
weeklyCreditsLimit: 40_000,
|
|
61
|
+
rolloverCap: 99_000,
|
|
62
|
+
monthlyAutomationActions: null,
|
|
63
|
+
automationOverageCentsPerMillion: null,
|
|
42
64
|
automationOverageEnabledDefault: false,
|
|
43
65
|
byokEnabled: true,
|
|
44
66
|
description: "For founders running focused managed enrichment and AI columns.",
|
|
45
67
|
ctaLabel: "Choose Starter",
|
|
46
68
|
features: [
|
|
69
|
+
"99,000 credits every month",
|
|
47
70
|
"All integrations",
|
|
48
|
-
"
|
|
71
|
+
"Workflows — automation actions at 0.01 credits each",
|
|
49
72
|
"Bring your own keys",
|
|
50
|
-
"Workflows",
|
|
51
73
|
"Standard support",
|
|
52
74
|
],
|
|
53
75
|
},
|
|
@@ -55,11 +77,11 @@ export const BASE_PRICING_PLANS = {
|
|
|
55
77
|
tier: "pro",
|
|
56
78
|
name: "Pro",
|
|
57
79
|
monthlyPriceCents: 24_900,
|
|
58
|
-
monthlyCredits:
|
|
59
|
-
weeklyCreditsLimit:
|
|
60
|
-
rolloverCap:
|
|
61
|
-
monthlyAutomationActions:
|
|
62
|
-
automationOverageCentsPerMillion:
|
|
80
|
+
monthlyCredits: 249_000,
|
|
81
|
+
weeklyCreditsLimit: 100_000,
|
|
82
|
+
rolloverCap: 249_000,
|
|
83
|
+
monthlyAutomationActions: null,
|
|
84
|
+
automationOverageCentsPerMillion: null,
|
|
63
85
|
automationOverageEnabledDefault: false,
|
|
64
86
|
byokEnabled: true,
|
|
65
87
|
description: "For recurring GTM enrichment and AI-column workflows on managed credits.",
|
|
@@ -67,10 +89,10 @@ export const BASE_PRICING_PLANS = {
|
|
|
67
89
|
highlighted: true,
|
|
68
90
|
ctaLabel: "Choose Pro",
|
|
69
91
|
features: [
|
|
92
|
+
"249,000 credits every month",
|
|
70
93
|
"All integrations",
|
|
71
|
-
"
|
|
94
|
+
"Workflows — automation actions at 0.01 credits each",
|
|
72
95
|
"Bring your own keys",
|
|
73
|
-
"Workflows",
|
|
74
96
|
"Standard support",
|
|
75
97
|
],
|
|
76
98
|
},
|
|
@@ -78,20 +100,20 @@ export const BASE_PRICING_PLANS = {
|
|
|
78
100
|
tier: "team",
|
|
79
101
|
name: "Team",
|
|
80
102
|
monthlyPriceCents: 74_900,
|
|
81
|
-
monthlyCredits:
|
|
82
|
-
weeklyCreditsLimit:
|
|
83
|
-
rolloverCap:
|
|
84
|
-
monthlyAutomationActions:
|
|
85
|
-
automationOverageCentsPerMillion:
|
|
103
|
+
monthlyCredits: 749_000,
|
|
104
|
+
weeklyCreditsLimit: 300_000,
|
|
105
|
+
rolloverCap: 749_000,
|
|
106
|
+
monthlyAutomationActions: null,
|
|
107
|
+
automationOverageCentsPerMillion: null,
|
|
86
108
|
automationOverageEnabledDefault: false,
|
|
87
109
|
byokEnabled: true,
|
|
88
110
|
description: "For small GTM teams and agencies running shared workflows with their own AI keys.",
|
|
89
111
|
ctaLabel: "Choose Team",
|
|
90
112
|
features: [
|
|
113
|
+
"749,000 credits every month",
|
|
91
114
|
"All integrations",
|
|
92
|
-
"
|
|
115
|
+
"Workflows — automation actions at 0.01 credits each",
|
|
93
116
|
"Bring your own keys",
|
|
94
|
-
"Workflows",
|
|
95
117
|
"Premium support",
|
|
96
118
|
],
|
|
97
119
|
},
|
|
@@ -99,10 +121,10 @@ export const BASE_PRICING_PLANS = {
|
|
|
99
121
|
tier: "scale",
|
|
100
122
|
name: "Scale",
|
|
101
123
|
monthlyPriceCents: null,
|
|
102
|
-
monthlyCredits:
|
|
103
|
-
weeklyCreditsLimit:
|
|
104
|
-
rolloverCap:
|
|
105
|
-
monthlyAutomationActions:
|
|
124
|
+
monthlyCredits: 10_000_000,
|
|
125
|
+
weeklyCreditsLimit: 10_000_000,
|
|
126
|
+
rolloverCap: 10_000_000,
|
|
127
|
+
monthlyAutomationActions: null,
|
|
106
128
|
automationOverageCentsPerMillion: null,
|
|
107
129
|
automationOverageEnabledDefault: false,
|
|
108
130
|
byokEnabled: true,
|
|
@@ -110,8 +132,8 @@ export const BASE_PRICING_PLANS = {
|
|
|
110
132
|
ctaLabel: "Contact sales",
|
|
111
133
|
contactHref: CONTACT_SALES_URL,
|
|
112
134
|
features: [
|
|
113
|
-
"
|
|
114
|
-
"
|
|
135
|
+
"10,000,000+ managed credits / month",
|
|
136
|
+
"Automation actions at 0.01 credits each",
|
|
115
137
|
"Phone number enrichment on managed credits",
|
|
116
138
|
"Custom provider routing and BYOK policies",
|
|
117
139
|
"Dedicated onboarding",
|
|
@@ -164,69 +186,69 @@ const LEGACY_PRICING_PLAN_OVERRIDES = {
|
|
|
164
186
|
...BASE_PRICING_PLANS.starter,
|
|
165
187
|
name: "Legacy Launch",
|
|
166
188
|
monthlyPriceCents: 5_000,
|
|
167
|
-
monthlyCredits:
|
|
168
|
-
weeklyCreditsLimit:
|
|
169
|
-
rolloverCap:
|
|
189
|
+
monthlyCredits: 200_000,
|
|
190
|
+
weeklyCreditsLimit: 200_000,
|
|
191
|
+
rolloverCap: 200_000,
|
|
170
192
|
description: "Legacy Launch plan.",
|
|
171
193
|
},
|
|
172
194
|
starter_50: {
|
|
173
195
|
...BASE_PRICING_PLANS.starter,
|
|
174
196
|
name: "Legacy Starter",
|
|
175
197
|
monthlyPriceCents: 5_000,
|
|
176
|
-
monthlyCredits:
|
|
177
|
-
weeklyCreditsLimit:
|
|
178
|
-
rolloverCap:
|
|
198
|
+
monthlyCredits: 200_000,
|
|
199
|
+
weeklyCreditsLimit: 200_000,
|
|
200
|
+
rolloverCap: 200_000,
|
|
179
201
|
description: "Legacy Starter plan.",
|
|
180
202
|
},
|
|
181
203
|
pro_149: {
|
|
182
204
|
...BASE_PRICING_PLANS.pro,
|
|
183
205
|
name: "Legacy Pro",
|
|
184
206
|
monthlyPriceCents: 14_900,
|
|
185
|
-
monthlyCredits:
|
|
186
|
-
weeklyCreditsLimit:
|
|
187
|
-
rolloverCap:
|
|
207
|
+
monthlyCredits: 1_000_000,
|
|
208
|
+
weeklyCreditsLimit: 1_000_000,
|
|
209
|
+
rolloverCap: 1_000_000,
|
|
188
210
|
description: "Legacy Pro plan.",
|
|
189
211
|
},
|
|
190
212
|
team_399: {
|
|
191
213
|
...BASE_PRICING_PLANS.team,
|
|
192
214
|
name: "Legacy Team",
|
|
193
215
|
monthlyPriceCents: 39_900,
|
|
194
|
-
monthlyCredits:
|
|
195
|
-
weeklyCreditsLimit:
|
|
196
|
-
rolloverCap:
|
|
216
|
+
monthlyCredits: 3_000_000,
|
|
217
|
+
weeklyCreditsLimit: 3_000_000,
|
|
218
|
+
rolloverCap: 3_000_000,
|
|
197
219
|
description: "Legacy Team plan.",
|
|
198
220
|
},
|
|
199
221
|
growth_250: {
|
|
200
222
|
...BASE_PRICING_PLANS.pro,
|
|
201
223
|
monthlyPriceCents: 25_000,
|
|
202
|
-
monthlyCredits:
|
|
203
|
-
weeklyCreditsLimit:
|
|
204
|
-
rolloverCap:
|
|
224
|
+
monthlyCredits: 250_000,
|
|
225
|
+
weeklyCreditsLimit: 100_000,
|
|
226
|
+
rolloverCap: 250_000,
|
|
205
227
|
description: "Legacy Growth plan.",
|
|
206
228
|
},
|
|
207
229
|
scale_750: {
|
|
208
230
|
...BASE_PRICING_PLANS.team,
|
|
209
231
|
name: "Legacy Scale",
|
|
210
232
|
monthlyPriceCents: 75_000,
|
|
211
|
-
monthlyCredits:
|
|
212
|
-
weeklyCreditsLimit:
|
|
213
|
-
rolloverCap:
|
|
233
|
+
monthlyCredits: 750_000,
|
|
234
|
+
weeklyCreditsLimit: 300_000,
|
|
235
|
+
rolloverCap: 750_000,
|
|
214
236
|
description: "Legacy Scale plan.",
|
|
215
237
|
},
|
|
216
238
|
starter_legacy: {
|
|
217
239
|
...BASE_PRICING_PLANS.starter,
|
|
218
240
|
monthlyPriceCents: null,
|
|
219
|
-
monthlyCredits:
|
|
241
|
+
monthlyCredits: 200_000,
|
|
220
242
|
weeklyCreditsLimit: BASE_PRICING_PLANS.starter.weeklyCreditsLimit,
|
|
221
|
-
rolloverCap:
|
|
243
|
+
rolloverCap: 200_000,
|
|
222
244
|
description: "Legacy Starter plan.",
|
|
223
245
|
},
|
|
224
246
|
scale_legacy: {
|
|
225
247
|
...BASE_PRICING_PLANS.scale,
|
|
226
248
|
monthlyPriceCents: null,
|
|
227
|
-
monthlyCredits:
|
|
249
|
+
monthlyCredits: 1_200_000,
|
|
228
250
|
weeklyCreditsLimit: BASE_PRICING_PLANS.scale.weeklyCreditsLimit,
|
|
229
|
-
rolloverCap:
|
|
251
|
+
rolloverCap: 2_400_000,
|
|
230
252
|
description: "Legacy Scale plan.",
|
|
231
253
|
},
|
|
232
254
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { MANAGED_INBOX_MINIMUM_CLI_VERSION, OXYGEN_MINIMUM_CLI_VERSION, OXYGEN_VERSION, } from "./version.js";
|
|
2
2
|
export { WORKFLOW_TRIGGER_AUTO_PAUSE_METADATA_KEYS, clearWorkflowTriggerAutoPauseMetadata, } from "./workflow-trigger-metadata.js";
|
|
3
|
+
export { WORKFLOW_STATUS_CHANGE_METADATA_KEY, type WorkflowStatusChange, type WorkflowStatusChangeActor, type WorkflowStatusChangeSource, describeWorkflowStatusChange, formatWorkflowStatusChangeTimestamp, parseWorkflowStatusChange, readWorkflowStatusChange, } from "./workflow-status-change.js";
|
|
3
4
|
export * from "./billing.js";
|
|
4
5
|
export * from "./budget-scopes.js";
|
|
5
6
|
export * from "./cell-format.js";
|
|
@@ -20,6 +21,7 @@ export * from "./linkedin-post-url.js";
|
|
|
20
21
|
export * from "./linkedin-url.js";
|
|
21
22
|
export * from "./linkedin-sequences.js";
|
|
22
23
|
export * from "./networks.js";
|
|
24
|
+
export * from "./recipes.js";
|
|
23
25
|
export * from "./sequence-template.js";
|
|
24
26
|
export * from "./sequences.js";
|
|
25
27
|
export * from "./log.js";
|
|
@@ -31,6 +33,8 @@ export * from "./tenant-database-secret.js";
|
|
|
31
33
|
export * from "./timing.js";
|
|
32
34
|
export * from "./type-guards.js";
|
|
33
35
|
export * from "./worker-failures-queue.js";
|
|
36
|
+
export * from "./workflow-mcp-tools.js";
|
|
37
|
+
export * from "./workspace-agents.js";
|
|
34
38
|
export declare const MAX_ROW_LOOP_WRITE_ROWS = 500;
|
|
35
39
|
export type SemanticVersion = {
|
|
36
40
|
major: number;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { MANAGED_INBOX_MINIMUM_CLI_VERSION, OXYGEN_MINIMUM_CLI_VERSION, OXYGEN_VERSION, } from "./version.js";
|
|
2
2
|
export { WORKFLOW_TRIGGER_AUTO_PAUSE_METADATA_KEYS, clearWorkflowTriggerAutoPauseMetadata, } from "./workflow-trigger-metadata.js";
|
|
3
|
+
export { WORKFLOW_STATUS_CHANGE_METADATA_KEY, describeWorkflowStatusChange, formatWorkflowStatusChangeTimestamp, parseWorkflowStatusChange, readWorkflowStatusChange, } from "./workflow-status-change.js";
|
|
3
4
|
export * from "./billing.js";
|
|
4
5
|
export * from "./budget-scopes.js";
|
|
5
6
|
export * from "./cell-format.js";
|
|
@@ -20,6 +21,7 @@ export * from "./linkedin-post-url.js";
|
|
|
20
21
|
export * from "./linkedin-url.js";
|
|
21
22
|
export * from "./linkedin-sequences.js";
|
|
22
23
|
export * from "./networks.js";
|
|
24
|
+
export * from "./recipes.js";
|
|
23
25
|
export * from "./sequence-template.js";
|
|
24
26
|
export * from "./sequences.js";
|
|
25
27
|
export * from "./log.js";
|
|
@@ -31,6 +33,8 @@ export * from "./tenant-database-secret.js";
|
|
|
31
33
|
export * from "./timing.js";
|
|
32
34
|
export * from "./type-guards.js";
|
|
33
35
|
export * from "./worker-failures-queue.js";
|
|
36
|
+
export * from "./workflow-mcp-tools.js";
|
|
37
|
+
export * from "./workspace-agents.js";
|
|
34
38
|
// Maximum rows a single row-loop write (insert/upsert/preview) may process. The
|
|
35
39
|
// row-loop engine issues one DB round-trip per row, so a 500-row write already
|
|
36
40
|
// approaches request timeouts (~50s observed in prod); larger batches must use
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Customer-facing credit price sheet — the single source for the /pricing
|
|
3
|
+
* page's "what credits buy" table, the pricing calculator, and docs.
|
|
4
|
+
*
|
|
5
|
+
* Pricing Model 2.0 (founder-ratified 2026-07-14): ONE credit pool pays for
|
|
6
|
+
* everything; 1 USD = 1,000 credits (CREDITS_PER_USD in ./billing.ts).
|
|
7
|
+
* Representative values here mirror the canonical billing sources — the
|
|
8
|
+
* enrichment/AI resolver seed (packages/integrations/src/cogs-rates.ts), the
|
|
9
|
+
* infra cost-plus rules (vendor COGS × 1.25), and the ratified LinkedIn
|
|
10
|
+
* prices — as DISPLAY constants. If a canonical price moves, move it here in
|
|
11
|
+
* the same change.
|
|
12
|
+
*
|
|
13
|
+
* Dependency-free on purpose: this module is imported by "use client"
|
|
14
|
+
* marketing components via the `@oxygen/shared/pricing-sheet` subpath, so it
|
|
15
|
+
* must never drag the shared barrel (async_hooks etc.) into a client bundle.
|
|
16
|
+
*/
|
|
17
|
+
export declare const PRICING_SHEET_VERIFIED = "2026-07";
|
|
18
|
+
/** Mirror of CREDITS_PER_USD in ./billing.ts (kept literal: client-safe module). */
|
|
19
|
+
export declare const PRICING_CREDITS_PER_USD = 1000;
|
|
20
|
+
/** On-demand top-up price per 1,000 credits (USD); subscriptions pay $1.00. */
|
|
21
|
+
export declare const TOPUP_USD_PER_1K = 1.25;
|
|
22
|
+
export declare const SUBSCRIPTION_USD_PER_1K = 1;
|
|
23
|
+
/** AI column runs, honest 5× of modeled tier COGS. */
|
|
24
|
+
export declare const AI_COLUMN_CREDITS: {
|
|
25
|
+
readonly low: 15;
|
|
26
|
+
readonly medium: 75;
|
|
27
|
+
readonly high: 250;
|
|
28
|
+
};
|
|
29
|
+
export declare const AI_COLUMN_WEB_SEARCH_SURCHARGE_CREDITS = 25;
|
|
30
|
+
/** Workflow/automation actions (steps, tool calls, row writes) — capacity guard. */
|
|
31
|
+
export declare const AUTOMATION_ACTION_CREDITS = 0.01;
|
|
32
|
+
/**
|
|
33
|
+
* Managed email inboxes: dynamic vendor COGS × 1.25 per mailbox per month.
|
|
34
|
+
* The representative range reflects the current InboxKit rate card (incl. its
|
|
35
|
+
* native warmup network); the exact quote comes from the live rate card at
|
|
36
|
+
* order time.
|
|
37
|
+
*/
|
|
38
|
+
export declare const MANAGED_INBOX_MARKUP = 1.25;
|
|
39
|
+
export declare const MANAGED_INBOX_CREDITS_PER_MONTH: {
|
|
40
|
+
readonly min: 3100;
|
|
41
|
+
readonly typical: 3750;
|
|
42
|
+
readonly max: 5000;
|
|
43
|
+
};
|
|
44
|
+
/** Managed domains: registrar at-cost × 1.25 (≈ a $10.44 .com → ~13,050 credits/yr). */
|
|
45
|
+
export declare const MANAGED_DOMAIN_MARKUP = 1.25;
|
|
46
|
+
export declare const MANAGED_DOMAIN_CREDITS_PER_YEAR_TYPICAL = 13050;
|
|
47
|
+
/**
|
|
48
|
+
* LinkedIn accounts (2026-07-14 decision): flat monthly connection fee per
|
|
49
|
+
* connected account plus per-action charges. Sends on email/WhatsApp stay 0.
|
|
50
|
+
*/
|
|
51
|
+
export declare const LINKEDIN_ACCOUNT_CREDITS_PER_MONTH = 7000;
|
|
52
|
+
export declare const LINKEDIN_ACTION_CREDITS: {
|
|
53
|
+
readonly visit_profile: 1;
|
|
54
|
+
readonly invite: 4;
|
|
55
|
+
readonly message: 2;
|
|
56
|
+
readonly inmail: 4;
|
|
57
|
+
readonly follow: 1;
|
|
58
|
+
readonly like_post: 2;
|
|
59
|
+
readonly comment_post: 6;
|
|
60
|
+
};
|
|
61
|
+
/** Editable calculator default: a warmed account's typical monthly action mix. */
|
|
62
|
+
export declare const LINKEDIN_TYPICAL_ACTIONS_CREDITS_PER_MONTH = 1500;
|
|
63
|
+
/** Dedicated egress IP add-on. */
|
|
64
|
+
export declare const EGRESS_IP_CREDITS_PER_MONTH = 400000;
|
|
65
|
+
/** Email + WhatsApp sends cost nothing — the pool pays for inboxes, not sends. */
|
|
66
|
+
export declare const SEND_CREDITS = 0;
|
|
67
|
+
/**
|
|
68
|
+
* Representative enrichment prices (5× provider COGS via the resolver; the
|
|
69
|
+
* live per-operation table is served by /api/pricing/customer-credit-prices).
|
|
70
|
+
* "typical" = the cheap-first waterfall's common case, used by the calculator.
|
|
71
|
+
*/
|
|
72
|
+
export declare const ENRICHMENT_CREDITS: {
|
|
73
|
+
readonly email_verify: 2;
|
|
74
|
+
readonly email_find_typical: 85;
|
|
75
|
+
readonly phone_find_typical: 990;
|
|
76
|
+
readonly company_enrich_typical: 99;
|
|
77
|
+
readonly web_search: 5;
|
|
78
|
+
readonly page_scrape: 40;
|
|
79
|
+
readonly linkedin_profile_scrape: 10;
|
|
80
|
+
};
|
|
81
|
+
/** Editable calculator default: blended credits per fully-enriched row. */
|
|
82
|
+
export declare const ENRICHMENT_CREDITS_PER_ROW_TYPICAL = 100;
|
|
83
|
+
export declare function creditsToUsd(credits: number): number;
|
|
84
|
+
export declare function usdToCredits(usd: number): number;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Customer-facing credit price sheet — the single source for the /pricing
|
|
3
|
+
* page's "what credits buy" table, the pricing calculator, and docs.
|
|
4
|
+
*
|
|
5
|
+
* Pricing Model 2.0 (founder-ratified 2026-07-14): ONE credit pool pays for
|
|
6
|
+
* everything; 1 USD = 1,000 credits (CREDITS_PER_USD in ./billing.ts).
|
|
7
|
+
* Representative values here mirror the canonical billing sources — the
|
|
8
|
+
* enrichment/AI resolver seed (packages/integrations/src/cogs-rates.ts), the
|
|
9
|
+
* infra cost-plus rules (vendor COGS × 1.25), and the ratified LinkedIn
|
|
10
|
+
* prices — as DISPLAY constants. If a canonical price moves, move it here in
|
|
11
|
+
* the same change.
|
|
12
|
+
*
|
|
13
|
+
* Dependency-free on purpose: this module is imported by "use client"
|
|
14
|
+
* marketing components via the `@oxygen/shared/pricing-sheet` subpath, so it
|
|
15
|
+
* must never drag the shared barrel (async_hooks etc.) into a client bundle.
|
|
16
|
+
*/
|
|
17
|
+
export const PRICING_SHEET_VERIFIED = "2026-07";
|
|
18
|
+
/** Mirror of CREDITS_PER_USD in ./billing.ts (kept literal: client-safe module). */
|
|
19
|
+
export const PRICING_CREDITS_PER_USD = 1_000;
|
|
20
|
+
/** On-demand top-up price per 1,000 credits (USD); subscriptions pay $1.00. */
|
|
21
|
+
export const TOPUP_USD_PER_1K = 1.25;
|
|
22
|
+
export const SUBSCRIPTION_USD_PER_1K = 1.0;
|
|
23
|
+
/** AI column runs, honest 5× of modeled tier COGS. */
|
|
24
|
+
export const AI_COLUMN_CREDITS = { low: 15, medium: 75, high: 250 };
|
|
25
|
+
export const AI_COLUMN_WEB_SEARCH_SURCHARGE_CREDITS = 25;
|
|
26
|
+
/** Workflow/automation actions (steps, tool calls, row writes) — capacity guard. */
|
|
27
|
+
export const AUTOMATION_ACTION_CREDITS = 0.01;
|
|
28
|
+
/**
|
|
29
|
+
* Managed email inboxes: dynamic vendor COGS × 1.25 per mailbox per month.
|
|
30
|
+
* The representative range reflects the current InboxKit rate card (incl. its
|
|
31
|
+
* native warmup network); the exact quote comes from the live rate card at
|
|
32
|
+
* order time.
|
|
33
|
+
*/
|
|
34
|
+
export const MANAGED_INBOX_MARKUP = 1.25;
|
|
35
|
+
// Range reflects the live InboxKit rate card: Google mailboxes $2.48–3.99 by
|
|
36
|
+
// plan tier (×1.25 → 3,100–4,990 cr), Microsoft/Azure flat $5 (×1.25 → 6,250).
|
|
37
|
+
export const MANAGED_INBOX_CREDITS_PER_MONTH = { min: 3_100, typical: 3_750, max: 5_000 };
|
|
38
|
+
/** Managed domains: registrar at-cost × 1.25 (≈ a $10.44 .com → ~13,050 credits/yr). */
|
|
39
|
+
export const MANAGED_DOMAIN_MARKUP = 1.25;
|
|
40
|
+
export const MANAGED_DOMAIN_CREDITS_PER_YEAR_TYPICAL = 13_050;
|
|
41
|
+
/**
|
|
42
|
+
* LinkedIn accounts (2026-07-14 decision): flat monthly connection fee per
|
|
43
|
+
* connected account plus per-action charges. Sends on email/WhatsApp stay 0.
|
|
44
|
+
*/
|
|
45
|
+
export const LINKEDIN_ACCOUNT_CREDITS_PER_MONTH = 7_000;
|
|
46
|
+
export const LINKEDIN_ACTION_CREDITS = {
|
|
47
|
+
visit_profile: 1,
|
|
48
|
+
invite: 4,
|
|
49
|
+
message: 2,
|
|
50
|
+
inmail: 4,
|
|
51
|
+
follow: 1,
|
|
52
|
+
like_post: 2,
|
|
53
|
+
comment_post: 6,
|
|
54
|
+
};
|
|
55
|
+
/** Editable calculator default: a warmed account's typical monthly action mix. */
|
|
56
|
+
export const LINKEDIN_TYPICAL_ACTIONS_CREDITS_PER_MONTH = 1_500;
|
|
57
|
+
/** Dedicated egress IP add-on. */
|
|
58
|
+
export const EGRESS_IP_CREDITS_PER_MONTH = 400_000;
|
|
59
|
+
/** Email + WhatsApp sends cost nothing — the pool pays for inboxes, not sends. */
|
|
60
|
+
export const SEND_CREDITS = 0;
|
|
61
|
+
/**
|
|
62
|
+
* Representative enrichment prices (5× provider COGS via the resolver; the
|
|
63
|
+
* live per-operation table is served by /api/pricing/customer-credit-prices).
|
|
64
|
+
* "typical" = the cheap-first waterfall's common case, used by the calculator.
|
|
65
|
+
*/
|
|
66
|
+
export const ENRICHMENT_CREDITS = {
|
|
67
|
+
email_verify: 2, // MillionVerifier first pass
|
|
68
|
+
email_find_typical: 85, // Hunter-class finder; cheap waterfall steps run 10–99
|
|
69
|
+
phone_find_typical: 990, // Prospeo/Findymail-class mobile
|
|
70
|
+
company_enrich_typical: 99,
|
|
71
|
+
web_search: 5, // Serper
|
|
72
|
+
page_scrape: 40, // Firecrawl (wedge price)
|
|
73
|
+
linkedin_profile_scrape: 10, // HarvestAPI, per result
|
|
74
|
+
};
|
|
75
|
+
/** Editable calculator default: blended credits per fully-enriched row. */
|
|
76
|
+
export const ENRICHMENT_CREDITS_PER_ROW_TYPICAL = 100;
|
|
77
|
+
export function creditsToUsd(credits) {
|
|
78
|
+
return credits / PRICING_CREDITS_PER_USD;
|
|
79
|
+
}
|
|
80
|
+
export function usdToCredits(usd) {
|
|
81
|
+
return usd * PRICING_CREDITS_PER_USD;
|
|
82
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const RECIPE_CATEGORIES: readonly ["start-here", "pipeline-from-zero", "catch-warm-signals", "linkedin-engine", "convert-faster", "revenue-truth", "agency-scale"];
|
|
2
|
+
export type RecipeCategory = typeof RECIPE_CATEGORIES[number];
|
|
3
|
+
export declare const RECIPE_CATEGORY_QUESTIONS: Record<RecipeCategory, string>;
|
|
4
|
+
export declare const RECIPE_STAGES: readonly ["day-1", "day-7", "day-30", "ongoing"];
|
|
5
|
+
export type RecipeStage = typeof RECIPE_STAGES[number];
|
|
6
|
+
export declare const RECIPE_AUDIENCES: readonly ["founder", "gtm-operator", "agency-operator"];
|
|
7
|
+
export type RecipeAudience = typeof RECIPE_AUDIENCES[number];
|
|
8
|
+
export declare const RECIPE_STATUSES: readonly ["draft", "beta", "stable", "deprecated"];
|
|
9
|
+
export type RecipeStatus = typeof RECIPE_STATUSES[number];
|
|
10
|
+
export declare const RECIPE_BENCHMARK_BASES: readonly ["estimate", "observed"];
|
|
11
|
+
export type RecipeBenchmarkBasis = typeof RECIPE_BENCHMARK_BASES[number];
|
|
12
|
+
export declare const RECIPE_PRIMITIVES: readonly ["knowledge-graph", "recipes", "records", "tables", "messages", "posts", "signals", "dashboards", "ads", "sequences", "publishing", "workflows", "observability"];
|
|
13
|
+
export type RecipePrimitive = typeof RECIPE_PRIMITIVES[number];
|
|
14
|
+
export declare const RECIPE_PREREQUISITE_KINDS: readonly ["sender", "mailbox", "domain", "integration", "knowledge", "asset", "plan", "data"];
|
|
15
|
+
export type RecipePrerequisiteKind = typeof RECIPE_PREREQUISITE_KINDS[number];
|
|
16
|
+
export declare const RECIPE_BODY_SECTIONS: readonly ["The Play", "What You Get", "When To Run (And When Not To)", "Before You Start", "Steps", "Ready Assets", "Calibrate", "Troubleshooting", "Operator Notes", "Related"];
|
|
17
|
+
export declare const RECIPE_SLUG_PATTERN: RegExp;
|
|
18
|
+
export declare function recipeWikiSlug(recipeSlug: string): string;
|
|
19
|
+
export declare const RECIPE_TRIAL_SAFE_PILOT_CREDIT_CAP = 100;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Recipes (Knowledge layer) shared constants — the single source of truth for
|
|
2
|
+
// the recipe catalog's controlled vocabularies across every surface (catalog
|
|
3
|
+
// parser/lint in apps/web, /api/cli/recipes routes, CLI, MCP tools, web
|
|
4
|
+
// gallery). A recipe is a versioned, advisory, business-case-driven GTM
|
|
5
|
+
// playbook served as skill markdown; these enums are the frontmatter contract
|
|
6
|
+
// (see docs/primitives/recipes.md). Keep additions deliberate: categories are
|
|
7
|
+
// the gallery's spine and expensive to rename once published.
|
|
8
|
+
// The seven business-case categories, each phrased from the founder question
|
|
9
|
+
// it answers. Order here is display order on every surface.
|
|
10
|
+
export const RECIPE_CATEGORIES = [
|
|
11
|
+
"start-here",
|
|
12
|
+
"pipeline-from-zero",
|
|
13
|
+
"catch-warm-signals",
|
|
14
|
+
"linkedin-engine",
|
|
15
|
+
"convert-faster",
|
|
16
|
+
"revenue-truth",
|
|
17
|
+
"agency-scale",
|
|
18
|
+
];
|
|
19
|
+
export const RECIPE_CATEGORY_QUESTIONS = {
|
|
20
|
+
"start-here": "I just signed up — what do I actually do with this?",
|
|
21
|
+
"pipeline-from-zero": "I have no pipeline. Build me an outbound engine.",
|
|
22
|
+
"catch-warm-signals": "People already touch us or move in our market — turn that into pipeline.",
|
|
23
|
+
"linkedin-engine": "How do I grow a LinkedIn presence that produces leads, not likes?",
|
|
24
|
+
"convert-faster": "I get leads and replies but not meetings.",
|
|
25
|
+
"revenue-truth": "Keep my CRM clean, my funnel visible, my costs sane.",
|
|
26
|
+
"agency-scale": "I run this for clients — how do I scale across workspaces?",
|
|
27
|
+
};
|
|
28
|
+
// Journey stage: when in a workspace's life the play typically fires.
|
|
29
|
+
export const RECIPE_STAGES = ["day-1", "day-7", "day-30", "ongoing"];
|
|
30
|
+
export const RECIPE_AUDIENCES = [
|
|
31
|
+
"founder",
|
|
32
|
+
"gtm-operator",
|
|
33
|
+
"agency-operator",
|
|
34
|
+
];
|
|
35
|
+
export const RECIPE_STATUSES = ["draft", "beta", "stable", "deprecated"];
|
|
36
|
+
// Whether a benchmark range is a labeled conservative estimate or observed
|
|
37
|
+
// Oxygen cohort data (with provenance). Estimates are the launch posture;
|
|
38
|
+
// observed values replace them as real usage accrues.
|
|
39
|
+
export const RECIPE_BENCHMARK_BASES = ["estimate", "observed"];
|
|
40
|
+
// The thirteen product primitives a recipe may exercise (five-layer model,
|
|
41
|
+
// ADR 0006/0008). Control surfaces and External integrations are not
|
|
42
|
+
// primitives and never appear here.
|
|
43
|
+
export const RECIPE_PRIMITIVES = [
|
|
44
|
+
"knowledge-graph",
|
|
45
|
+
"recipes",
|
|
46
|
+
"records",
|
|
47
|
+
"tables",
|
|
48
|
+
"messages",
|
|
49
|
+
"posts",
|
|
50
|
+
"signals",
|
|
51
|
+
"dashboards",
|
|
52
|
+
"ads",
|
|
53
|
+
"sequences",
|
|
54
|
+
"publishing",
|
|
55
|
+
"workflows",
|
|
56
|
+
"observability",
|
|
57
|
+
];
|
|
58
|
+
export const RECIPE_PREREQUISITE_KINDS = [
|
|
59
|
+
"sender",
|
|
60
|
+
"mailbox",
|
|
61
|
+
"domain",
|
|
62
|
+
"integration",
|
|
63
|
+
"knowledge",
|
|
64
|
+
"asset",
|
|
65
|
+
"plan",
|
|
66
|
+
"data",
|
|
67
|
+
];
|
|
68
|
+
// The ten body sections every recipe carries, in order. The catalog lint
|
|
69
|
+
// enforces exact H2 headings so the fleet of authors cannot drift.
|
|
70
|
+
export const RECIPE_BODY_SECTIONS = [
|
|
71
|
+
"The Play",
|
|
72
|
+
"What You Get",
|
|
73
|
+
"When To Run (And When Not To)",
|
|
74
|
+
"Before You Start",
|
|
75
|
+
"Steps",
|
|
76
|
+
"Ready Assets",
|
|
77
|
+
"Calibrate",
|
|
78
|
+
"Troubleshooting",
|
|
79
|
+
"Operator Notes",
|
|
80
|
+
"Related",
|
|
81
|
+
];
|
|
82
|
+
export const RECIPE_SLUG_PATTERN = /^[a-z0-9][a-z0-9-]{0,119}$/;
|
|
83
|
+
// Wiki slug an install writes: slots into the starter wiki's seeded
|
|
84
|
+
// [[playbooks]] hub convention ([[playbook-outbound]] etc.).
|
|
85
|
+
export function recipeWikiSlug(recipeSlug) {
|
|
86
|
+
return `playbook-${recipeSlug}`;
|
|
87
|
+
}
|
|
88
|
+
// trial_safe recipes must keep their pilot path within 10% of the 7-day
|
|
89
|
+
// card-required trial's 1,000 managed credits.
|
|
90
|
+
export const RECIPE_TRIAL_SAFE_PILOT_CREDIT_CAP = 100;
|