@oxygen-agent/cli 1.987.20 → 1.1010.1

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.
Files changed (176) hide show
  1. package/README.md +1 -1
  2. package/dist/admin-primary-providers-render.d.ts +0 -2
  3. package/dist/admin-primary-providers-render.js +1 -1
  4. package/dist/browser-login.js +1 -4
  5. package/dist/column-decision-options.d.ts +20 -0
  6. package/dist/column-decision-options.js +54 -0
  7. package/dist/command-manifest.d.ts +3 -2
  8. package/dist/command-manifest.js +25 -2
  9. package/dist/credentials.d.ts +1 -1
  10. package/dist/functions-commands.js +13 -9
  11. package/dist/help.d.ts +8 -0
  12. package/dist/help.js +46 -0
  13. package/dist/index.js +2751 -242
  14. package/dist/knowledge-mirror.d.ts +2 -2
  15. package/dist/runtime.d.ts +0 -15
  16. package/dist/runtime.js +1 -1
  17. package/dist/search-ai-filter-notice.d.ts +17 -0
  18. package/dist/search-ai-filter-notice.js +38 -0
  19. package/dist/session.d.ts +4 -3
  20. package/dist/skills.d.ts +8 -7
  21. package/dist/skills.js +58 -20
  22. package/dist/transcript.d.ts +2 -1
  23. package/dist/util.d.ts +10 -1
  24. package/dist/util.js +14 -2
  25. package/node_modules/@oxygen/cli-ugc/dist/commands.js +296 -140
  26. package/node_modules/@oxygen/cli-ugc/dist/field-parser.d.ts +9 -0
  27. package/node_modules/@oxygen/cli-ugc/dist/field-parser.js +34 -0
  28. package/node_modules/@oxygen/formula/dist/coerce.d.ts +10 -0
  29. package/node_modules/@oxygen/formula/dist/coerce.js +10 -0
  30. package/node_modules/@oxygen/formula/dist/formula-functions.js +65 -0
  31. package/node_modules/@oxygen/formula/dist/hash.d.ts +19 -0
  32. package/node_modules/@oxygen/formula/dist/hash.js +199 -0
  33. package/node_modules/@oxygen/formula/dist/value-cleaners.d.ts +6 -1
  34. package/node_modules/@oxygen/formula/dist/value-cleaners.js +10 -26
  35. package/node_modules/@oxygen/recipe-sdk/dist/index.d.ts +13 -0
  36. package/node_modules/@oxygen/shared/dist/array-utils.d.ts +5 -0
  37. package/node_modules/@oxygen/shared/dist/array-utils.js +11 -0
  38. package/node_modules/@oxygen/shared/dist/billing.d.ts +99 -22
  39. package/node_modules/@oxygen/shared/dist/billing.js +195 -40
  40. package/node_modules/@oxygen/shared/dist/byok-connect.js +5 -0
  41. package/node_modules/@oxygen/shared/dist/capability-discovery.d.ts +27 -0
  42. package/node_modules/@oxygen/shared/dist/capability-discovery.js +311 -28
  43. package/node_modules/@oxygen/shared/dist/cli-http-error.d.ts +8 -0
  44. package/node_modules/@oxygen/shared/dist/cli-http-error.js +8 -0
  45. package/node_modules/@oxygen/shared/dist/cli-result.js +1 -0
  46. package/node_modules/@oxygen/shared/dist/column-autofill.d.ts +52 -0
  47. package/node_modules/@oxygen/shared/dist/column-autofill.js +62 -0
  48. package/node_modules/@oxygen/shared/dist/column-decision.d.ts +50 -0
  49. package/node_modules/@oxygen/shared/dist/column-decision.js +228 -0
  50. package/node_modules/@oxygen/shared/dist/column-output-fields.js +2 -6
  51. package/node_modules/@oxygen/shared/dist/company-enrichment-fields.d.ts +113 -0
  52. package/node_modules/@oxygen/shared/dist/company-enrichment-fields.js +548 -0
  53. package/node_modules/@oxygen/shared/dist/copilot-skills.generated.d.ts +6 -6
  54. package/node_modules/@oxygen/shared/dist/copilot-skills.generated.js +6 -6
  55. package/node_modules/@oxygen/shared/dist/cutover-freeze.d.ts +26 -0
  56. package/node_modules/@oxygen/shared/dist/cutover-freeze.js +52 -0
  57. package/node_modules/@oxygen/shared/dist/data-suppliers.d.ts +57 -0
  58. package/node_modules/@oxygen/shared/dist/data-suppliers.js +59 -0
  59. package/node_modules/@oxygen/shared/dist/deploy-env.d.ts +74 -0
  60. package/node_modules/@oxygen/shared/dist/deploy-env.js +82 -0
  61. package/node_modules/@oxygen/shared/dist/dnc-rules.d.ts +130 -0
  62. package/node_modules/@oxygen/shared/dist/dnc-rules.js +221 -0
  63. package/node_modules/@oxygen/shared/dist/enrichment-intents.d.ts +107 -0
  64. package/node_modules/@oxygen/shared/dist/enrichment-intents.js +809 -0
  65. package/node_modules/@oxygen/shared/dist/error-message.d.ts +1 -0
  66. package/node_modules/@oxygen/shared/dist/error-message.js +3 -0
  67. package/node_modules/@oxygen/shared/dist/error-redaction.js +1 -3
  68. package/node_modules/@oxygen/shared/dist/external-write-policy.d.ts +33 -0
  69. package/node_modules/@oxygen/shared/dist/external-write-policy.js +68 -0
  70. package/node_modules/@oxygen/shared/dist/format-percent.d.ts +8 -0
  71. package/node_modules/@oxygen/shared/dist/format-percent.js +13 -0
  72. package/node_modules/@oxygen/shared/dist/freemail-domains.d.ts +81 -0
  73. package/node_modules/@oxygen/shared/dist/freemail-domains.js +157 -0
  74. package/node_modules/@oxygen/shared/dist/future-signup-lifecycle-projection.d.ts +1 -0
  75. package/node_modules/@oxygen/shared/dist/future-signup-lifecycle-projection.js +1 -1
  76. package/node_modules/@oxygen/shared/dist/hosted-ai.d.ts +60 -4
  77. package/node_modules/@oxygen/shared/dist/hosted-ai.js +125 -10
  78. package/node_modules/@oxygen/shared/dist/index.d.ts +15 -0
  79. package/node_modules/@oxygen/shared/dist/index.js +15 -0
  80. package/node_modules/@oxygen/shared/dist/json-path.js +1 -3
  81. package/node_modules/@oxygen/shared/dist/knowledge-bases.js +1 -3
  82. package/node_modules/@oxygen/shared/dist/knowledge-bootstrap.d.ts +2 -2
  83. package/node_modules/@oxygen/shared/dist/knowledge-bootstrap.js +2 -2
  84. package/node_modules/@oxygen/shared/dist/langfuse.d.ts +44 -1
  85. package/node_modules/@oxygen/shared/dist/langfuse.js +416 -14
  86. package/node_modules/@oxygen/shared/dist/linkedin-countries.d.ts +33 -0
  87. package/node_modules/@oxygen/shared/dist/linkedin-countries.js +361 -0
  88. package/node_modules/@oxygen/shared/dist/linkedin-country-timezones.d.ts +24 -0
  89. package/node_modules/@oxygen/shared/dist/linkedin-country-timezones.js +276 -0
  90. package/node_modules/@oxygen/shared/dist/linkedin-message-deletion.d.ts +2 -0
  91. package/node_modules/@oxygen/shared/dist/linkedin-message-deletion.js +5 -0
  92. package/node_modules/@oxygen/shared/dist/linkedin-post-keywords.d.ts +44 -0
  93. package/node_modules/@oxygen/shared/dist/linkedin-post-keywords.js +116 -0
  94. package/node_modules/@oxygen/shared/dist/linkedin-sequences.d.ts +96 -0
  95. package/node_modules/@oxygen/shared/dist/linkedin-sequences.js +123 -0
  96. package/node_modules/@oxygen/shared/dist/llm-durable-capture.d.ts +24 -0
  97. package/node_modules/@oxygen/shared/dist/llm-durable-capture.js +89 -0
  98. package/node_modules/@oxygen/shared/dist/llm-prompts.d.ts +75 -0
  99. package/node_modules/@oxygen/shared/dist/llm-prompts.js +161 -0
  100. package/node_modules/@oxygen/shared/dist/log-sink-selector.d.ts +39 -0
  101. package/node_modules/@oxygen/shared/dist/log-sink-selector.js +56 -0
  102. package/node_modules/@oxygen/shared/dist/log.d.ts +1 -0
  103. package/node_modules/@oxygen/shared/dist/log.js +6 -1
  104. package/node_modules/@oxygen/shared/dist/mailbox-egress-ownership.d.ts +90 -0
  105. package/node_modules/@oxygen/shared/dist/mailbox-egress-ownership.js +130 -0
  106. package/node_modules/@oxygen/shared/dist/object-storage.d.ts +17 -0
  107. package/node_modules/@oxygen/shared/dist/object-storage.js +21 -0
  108. package/node_modules/@oxygen/shared/dist/operational-telemetry.d.ts +24 -0
  109. package/node_modules/@oxygen/shared/dist/operational-telemetry.js +73 -0
  110. package/node_modules/@oxygen/shared/dist/otlp-log-sink.d.ts +79 -0
  111. package/node_modules/@oxygen/shared/dist/otlp-log-sink.js +366 -0
  112. package/node_modules/@oxygen/shared/dist/plan-capabilities.js +1 -0
  113. package/node_modules/@oxygen/shared/dist/plan-limits.d.ts +23 -22
  114. package/node_modules/@oxygen/shared/dist/plan-limits.js +45 -18
  115. package/node_modules/@oxygen/shared/dist/pricing-sheet.d.ts +48 -41
  116. package/node_modules/@oxygen/shared/dist/pricing-sheet.js +36 -25
  117. package/node_modules/@oxygen/shared/dist/pricing-snapshot.generated.d.ts +22 -22
  118. package/node_modules/@oxygen/shared/dist/pricing-snapshot.generated.js +40 -34
  119. package/node_modules/@oxygen/shared/dist/product-analytics-environment.js +9 -0
  120. package/node_modules/@oxygen/shared/dist/product-analytics-events.d.ts +36 -2
  121. package/node_modules/@oxygen/shared/dist/product-analytics-events.js +36 -1
  122. package/node_modules/@oxygen/shared/dist/rate-window.d.ts +5 -0
  123. package/node_modules/@oxygen/shared/dist/rate-window.js +8 -0
  124. package/node_modules/@oxygen/shared/dist/redaction.js +4 -1
  125. package/node_modules/@oxygen/shared/dist/research-output-contract.js +1 -3
  126. package/node_modules/@oxygen/shared/dist/scraper-lane-credential.d.ts +18 -0
  127. package/node_modules/@oxygen/shared/dist/scraper-lane-credential.js +23 -0
  128. package/node_modules/@oxygen/shared/dist/search-vocab.js +4 -5
  129. package/node_modules/@oxygen/shared/dist/select-options.js +6 -1
  130. package/node_modules/@oxygen/shared/dist/sequence-failures.js +1 -5
  131. package/node_modules/@oxygen/shared/dist/sequences.d.ts +23 -0
  132. package/node_modules/@oxygen/shared/dist/sequences.js +115 -5
  133. package/node_modules/@oxygen/shared/dist/signup-lead-payload.d.ts +80 -0
  134. package/node_modules/@oxygen/shared/dist/signup-lead-payload.js +198 -0
  135. package/node_modules/@oxygen/shared/dist/social-capabilities.d.ts +6 -0
  136. package/node_modules/@oxygen/shared/dist/social-capabilities.js +25 -16
  137. package/node_modules/@oxygen/shared/dist/social-post-metrics-core.d.ts +32 -0
  138. package/node_modules/@oxygen/shared/dist/social-post-metrics-core.js +32 -0
  139. package/node_modules/@oxygen/shared/dist/social-post-metrics-linkedin.d.ts +31 -0
  140. package/node_modules/@oxygen/shared/dist/social-post-metrics-linkedin.js +103 -0
  141. package/node_modules/@oxygen/shared/dist/social-post-metrics-series.d.ts +96 -0
  142. package/node_modules/@oxygen/shared/dist/social-post-metrics-series.js +213 -0
  143. package/node_modules/@oxygen/shared/dist/social-post-metrics-x.d.ts +13 -0
  144. package/node_modules/@oxygen/shared/dist/social-post-metrics-x.js +78 -0
  145. package/node_modules/@oxygen/shared/dist/social-post-metrics.d.ts +36 -0
  146. package/node_modules/@oxygen/shared/dist/social-post-metrics.js +51 -0
  147. package/node_modules/@oxygen/shared/dist/spend-safety.d.ts +22 -10
  148. package/node_modules/@oxygen/shared/dist/spend-safety.js +15 -21
  149. package/node_modules/@oxygen/shared/dist/sql-rows.d.ts +1 -0
  150. package/node_modules/@oxygen/shared/dist/sql-rows.js +3 -0
  151. package/node_modules/@oxygen/shared/dist/stripe-price-catalog.d.ts +36 -0
  152. package/node_modules/@oxygen/shared/dist/stripe-price-catalog.js +184 -0
  153. package/node_modules/@oxygen/shared/dist/stripe-subscription-kind.d.ts +41 -0
  154. package/node_modules/@oxygen/shared/dist/stripe-subscription-kind.js +44 -0
  155. package/node_modules/@oxygen/shared/dist/table-limits.d.ts +3 -0
  156. package/node_modules/@oxygen/shared/dist/table-limits.js +3 -0
  157. package/node_modules/@oxygen/shared/dist/telemetry-export-observer.d.ts +94 -0
  158. package/node_modules/@oxygen/shared/dist/telemetry-export-observer.js +298 -0
  159. package/node_modules/@oxygen/shared/dist/telemetry.d.ts +11 -0
  160. package/node_modules/@oxygen/shared/dist/telemetry.js +28 -2
  161. package/node_modules/@oxygen/shared/dist/type-guards.d.ts +22 -0
  162. package/node_modules/@oxygen/shared/dist/type-guards.js +35 -0
  163. package/node_modules/@oxygen/shared/dist/ugc.d.ts +22 -11
  164. package/node_modules/@oxygen/shared/dist/ugc.js +10 -0
  165. package/node_modules/@oxygen/shared/dist/value-readers.d.ts +21 -0
  166. package/node_modules/@oxygen/shared/dist/value-readers.js +59 -0
  167. package/node_modules/@oxygen/shared/dist/version.generated.d.ts +1 -0
  168. package/node_modules/@oxygen/shared/dist/version.generated.js +2 -0
  169. package/node_modules/@oxygen/shared/dist/version.js +8 -1
  170. package/node_modules/@oxygen/shared/dist/workspace-event-catalog.js +0 -23
  171. package/node_modules/@oxygen/shared/dist/workspace-file-storage.d.ts +29 -0
  172. package/node_modules/@oxygen/shared/dist/workspace-file-storage.js +31 -0
  173. package/node_modules/@oxygen/shared/package.json +59 -0
  174. package/node_modules/@oxygen/workflows/dist/graph/expression.js +2 -5
  175. package/node_modules/@oxygen/workflows/dist/graph/params.js +1 -1
  176. package/package.json +3 -2
@@ -2,13 +2,38 @@ export declare const WEEKLY_USAGE_WINDOW_DAYS = 7;
2
2
  export declare const BILLING_CURRENCIES: readonly ["usd"];
3
3
  export type BillingCurrency = (typeof BILLING_CURRENCIES)[number];
4
4
  export declare const DEFAULT_BILLING_CURRENCY: BillingCurrency;
5
- export type SelfServePlanTier = "starter" | "pro" | "team";
5
+ /**
6
+ * The SIX purchasable rungs of the one "Oxygen" product (founder 2026-09-19).
7
+ *
8
+ * These are plan KEYS — what Stripe sells and what `subscriptions.tier` stores —
9
+ * not tiers. They all share the single `oxygen` entitlement tier, which is the
10
+ * coarse rung plan-limits.ts and spend-safety.ts enforce against.
11
+ *
12
+ * Why keys and not six tiers: six tiers would force six new columns into every
13
+ * `Record<PlanTier, …>` ladder (plan limits, trigger ceilings, BYOK caps), i.e.
14
+ * ~40 invented numbers on an axis nobody ratified. Why not reuse starter/pro/team
15
+ * instead: then `plan.tier` would be ambiguous between a grandfathered $99
16
+ * Starter and a $49 Oxygen, and plan-change.ts — which refuses when
17
+ * `currentTier === targetTier` — would call a real $49 -> $99 upgrade
18
+ * `plan_unchanged`.
19
+ */
20
+ export declare const OXYGEN_PLAN_KEYS: readonly ["oxygen_49", "oxygen_99", "oxygen_199", "oxygen_499", "oxygen_999", "oxygen_1999"];
21
+ export type OxygenPlanKey = (typeof OXYGEN_PLAN_KEYS)[number];
22
+ /**
23
+ * starter/pro/team were the self-serve catalog until 2026-09-19. They are no
24
+ * longer purchasable, but live subscriptions still bill against their Stripe
25
+ * prices, so they remain resolvable tiers forever.
26
+ */
27
+ export type LegacySelfServePlanTier = "starter" | "pro" | "team";
28
+ export type SelfServePlanTier = "oxygen" | LegacySelfServePlanTier;
6
29
  export type ContactSalesPlanTier = "scale" | "enterprise";
7
30
  export type PlanTier = "free" | SelfServePlanTier | ContactSalesPlanTier;
8
31
  export type UsageLimitedPlanTier = Exclude<PlanTier, "enterprise">;
9
32
  export type PricingPlanDefinition = {
10
33
  tier: PlanTier;
11
34
  name: string;
35
+ /** Grandfathered: still resolves and still bills, never offered for purchase. */
36
+ isLegacy?: boolean;
12
37
  monthlyPriceCents: number | null;
13
38
  monthlyCredits: number | null;
14
39
  weeklyCreditsLimit: number | null;
@@ -26,12 +51,12 @@ export type PricingPlanDefinition = {
26
51
  };
27
52
  export type PricingPlanMetadata = Record<string, unknown> | null | undefined;
28
53
  export declare const CONTACT_SALES_URL = "mailto:priority@oxygen-agent.com";
29
- export declare const CREDITS_PER_USD = 1000;
30
- export declare const TOPUP_USD_CENTS_PER_1K_CREDITS = 125;
31
- export declare const CREDIT_TOPUP_MIN_CREDITS = 8000;
32
- export declare const CREDIT_TOPUP_MAX_CREDITS = 1000000;
33
- export declare const CREDIT_TOPUP_STEP_CREDITS = 1000;
34
- export declare const CREDIT_TOPUP_DEFAULT_CREDITS = 20000;
54
+ export declare const CREDITS_PER_USD = 100;
55
+ export declare const TOPUP_USD_CENTS_PER_100_CREDITS = 125;
56
+ export declare const CREDIT_TOPUP_MIN_CREDITS = 800;
57
+ export declare const CREDIT_TOPUP_MAX_CREDITS = 100000;
58
+ export declare const CREDIT_TOPUP_STEP_CREDITS = 100;
59
+ export declare const CREDIT_TOPUP_DEFAULT_CREDITS = 2000;
35
60
  export declare function isValidCreditTopupCredits(credits: number): boolean;
36
61
  /**
37
62
  * A shortfall expressed as an amount `oxygen billing topup` will actually SELL:
@@ -51,7 +76,7 @@ export declare function isValidCreditTopupCredits(credits: number): boolean;
51
76
  */
52
77
  export declare function creditTopupAmountForShortfall(credits: number): number;
53
78
  export declare function creditTopupUsdCents(credits: number): number | null;
54
- export declare const AUTOMATION_ACTION_CREDITS = 0.01;
79
+ export declare const AUTOMATION_ACTION_CREDITS = 0.001;
55
80
  /** Kinds of resource that carry a fixed monthly credit commitment. */
56
81
  export declare const CREDIT_COMMITMENT_KINDS: readonly ["sending_mailbox", "managed_mailbox", "mailbox_warmup", "deliverability_unit", "linkedin_account", "whatsapp_account"];
57
82
  export type CreditCommitmentKind = (typeof CREDIT_COMMITMENT_KINDS)[number];
@@ -61,12 +86,12 @@ export type CreditCommitmentKind = (typeof CREDIT_COMMITMENT_KINDS)[number];
61
86
  * Gmail and Microsoft inboxes included — and it STACKS on Oxygen-sold mailboxes,
62
87
  * which additionally pay their own mailbox/warmup/placement lines.
63
88
  */
64
- export declare const SENDING_MAILBOX_MONTHLY_CREDITS = 1000;
89
+ export declare const SENDING_MAILBOX_MONTHLY_CREDITS = 100;
65
90
  /**
66
91
  * Oxygen-sold managed mailbox per month, in credits ($3.00). Flat, superseding
67
92
  * the dynamic vendor-COGS x 1.25 quote for the recurring mailbox line.
68
93
  */
69
- export declare const MANAGED_MAILBOX_MONTHLY_CREDITS = 3000;
94
+ export declare const MANAGED_MAILBOX_MONTHLY_CREDITS = 300;
70
95
  /**
71
96
  * Grace window after a commitment goes past_due before the owning subsystem may
72
97
  * suspend the resource. Notify -> pause -> lapse; never auto-cancel. Aligned with
@@ -109,25 +134,25 @@ export declare function ratifiedCommitmentCredits(kind: CreditCommitmentKind): n
109
134
  export declare const CREDIT_TOPUP_PACKS: readonly [{
110
135
  readonly id: "10";
111
136
  readonly usdCents: 1000;
112
- readonly credits: 8000;
137
+ readonly credits: 800;
113
138
  }, {
114
139
  readonly id: "25";
115
140
  readonly usdCents: 2500;
116
- readonly credits: 20000;
141
+ readonly credits: 2000;
117
142
  }, {
118
143
  readonly id: "100";
119
144
  readonly usdCents: 10000;
120
- readonly credits: 80000;
145
+ readonly credits: 8000;
121
146
  }, {
122
147
  readonly id: "250";
123
148
  readonly usdCents: 25000;
124
- readonly credits: 200000;
149
+ readonly credits: 20000;
125
150
  }];
126
151
  export type CreditTopupPack = (typeof CREDIT_TOPUP_PACKS)[number];
127
152
  export type CreditTopupPackId = CreditTopupPack["id"];
128
153
  export declare function resolveCreditTopupPack(id: string | null | undefined): CreditTopupPack | null;
129
154
  export declare const TRIAL_PERIOD_DAYS = 7;
130
- export declare const TRIAL_CREDIT_GRANT = 20000;
155
+ export declare const TRIAL_CREDIT_GRANT = 2000;
131
156
  /**
132
157
  * Free-tier entry (founder-ratified 2026-08-16; grant collapsed to a single
133
158
  * 10,000-credit signup grant 2026-08-26).
@@ -153,7 +178,7 @@ export declare const TRIAL_CREDIT_GRANT = 20000;
153
178
  * mints it a second time. Top-ups stay purchasable on free, which is what keeps
154
179
  * the metered surface open-ended rather than capped at the grant.
155
180
  */
156
- export declare const FREE_SIGNUP_GRANT_CREDITS = 10000;
181
+ export declare const FREE_SIGNUP_GRANT_CREDITS = 1000;
157
182
  export declare const FREE_TIER_GRANTS_ENABLED_ENV_VAR = "OXYGEN_FREE_TIER_GRANTS_ENABLED";
158
183
  /**
159
184
  * Fail-closed rollout switch for the free-tier grants, matching the staged
@@ -168,8 +193,8 @@ export declare const FREE_TIER_GRANTS_ENABLED_ENV_VAR = "OXYGEN_FREE_TIER_GRANTS
168
193
  * population before the cutover posture is decided.
169
194
  */
170
195
  export declare function freeTierGrantsEnabled(env?: Record<string, string | undefined>): boolean;
171
- export declare const WALKTHROUGH_COMPLETION_BONUS_CREDITS = 1000;
172
- export declare const WALKTHROUGH_SCRAPE_MAX_CREDITS = 2000;
196
+ export declare const WALKTHROUGH_COMPLETION_BONUS_CREDITS = 100;
197
+ export declare const WALKTHROUGH_SCRAPE_MAX_CREDITS = 200;
173
198
  export declare const BASE_PRICING_PLANS: {
174
199
  readonly free: {
175
200
  readonly monthlyPriceCents: number | null;
@@ -186,6 +211,23 @@ export declare const BASE_PRICING_PLANS: {
186
211
  readonly ctaLabel: "Upgrade";
187
212
  readonly features: readonly ["CRM, Tables, Workflows, and Knowledge — unmetered", "Sequences: author, preview, and enroll", "Agents and Workspace Copilot", "Credits for enrichment and AI, topped up any time"];
188
213
  };
214
+ readonly oxygen: {
215
+ readonly monthlyPriceCents: number | null;
216
+ readonly monthlyCredits: number | null;
217
+ readonly weeklyCreditsLimit: number | null;
218
+ readonly rolloverCap: number | null;
219
+ readonly byokEnabled: boolean;
220
+ readonly tier: "oxygen";
221
+ readonly name: "Oxygen";
222
+ readonly monthlyAutomationActions: null;
223
+ readonly automationOverageCentsPerMillion: null;
224
+ readonly automationOverageEnabledDefault: false;
225
+ readonly description: "Your whole GTM stack. One plan — choose the credits you need.";
226
+ readonly badge: "Your whole GTM stack";
227
+ readonly highlighted: true;
228
+ readonly ctaLabel: "Get started";
229
+ readonly features: readonly [string, "All integrations", "Workflows", "Bring your own keys", "Standard support"];
230
+ };
189
231
  readonly starter: {
190
232
  readonly monthlyPriceCents: number | null;
191
233
  readonly monthlyCredits: number | null;
@@ -194,12 +236,13 @@ export declare const BASE_PRICING_PLANS: {
194
236
  readonly byokEnabled: boolean;
195
237
  readonly tier: "starter";
196
238
  readonly name: "Starter";
239
+ readonly isLegacy: true;
197
240
  readonly monthlyAutomationActions: null;
198
241
  readonly automationOverageCentsPerMillion: null;
199
242
  readonly automationOverageEnabledDefault: false;
200
243
  readonly description: "For founders running focused managed enrichment and AI columns.";
201
244
  readonly ctaLabel: "Choose Starter";
202
- readonly features: readonly ["99,000 credits every month", "All integrations", "Workflows", "Bring your own keys", "Standard support"];
245
+ readonly features: readonly [string, "All integrations", "Workflows", "Bring your own keys", "Standard support"];
203
246
  };
204
247
  readonly pro: {
205
248
  readonly monthlyPriceCents: number | null;
@@ -209,6 +252,7 @@ export declare const BASE_PRICING_PLANS: {
209
252
  readonly byokEnabled: boolean;
210
253
  readonly tier: "pro";
211
254
  readonly name: "Pro";
255
+ readonly isLegacy: true;
212
256
  readonly monthlyAutomationActions: null;
213
257
  readonly automationOverageCentsPerMillion: null;
214
258
  readonly automationOverageEnabledDefault: false;
@@ -216,7 +260,7 @@ export declare const BASE_PRICING_PLANS: {
216
260
  readonly badge: "Most popular";
217
261
  readonly highlighted: true;
218
262
  readonly ctaLabel: "Choose Pro";
219
- readonly features: readonly ["249,000 credits every month", "All integrations", "Workflows", "Bring your own keys", "Standard support"];
263
+ readonly features: readonly [string, "All integrations", "Workflows", "Bring your own keys", "Standard support"];
220
264
  };
221
265
  readonly team: {
222
266
  readonly monthlyPriceCents: number | null;
@@ -226,12 +270,13 @@ export declare const BASE_PRICING_PLANS: {
226
270
  readonly byokEnabled: boolean;
227
271
  readonly tier: "team";
228
272
  readonly name: "Team";
273
+ readonly isLegacy: true;
229
274
  readonly monthlyAutomationActions: null;
230
275
  readonly automationOverageCentsPerMillion: null;
231
276
  readonly automationOverageEnabledDefault: false;
232
277
  readonly description: "For small GTM teams and agencies running shared workflows with their own AI keys.";
233
278
  readonly ctaLabel: "Choose Team";
234
- readonly features: readonly ["749,000 credits every month", "All integrations", "Workflows", "Bring your own keys", "Premium support"];
279
+ readonly features: readonly [string, "All integrations", "Workflows", "Bring your own keys", "Premium support"];
235
280
  };
236
281
  readonly scale: {
237
282
  readonly monthlyPriceCents: number | null;
@@ -247,7 +292,7 @@ export declare const BASE_PRICING_PLANS: {
247
292
  readonly description: "For high-volume GTM teams that need custom limits and rollout support.";
248
293
  readonly ctaLabel: "Contact sales";
249
294
  readonly contactHref: "mailto:priority@oxygen-agent.com";
250
- readonly features: readonly ["10,000,000+ managed credits / month", "Workflows", "Phone number enrichment on managed credits", "Custom provider routing and BYOK policies", "Dedicated onboarding"];
295
+ readonly features: readonly [string, "Workflows", "Phone number enrichment on managed credits", "Custom provider routing and BYOK policies", "Dedicated onboarding"];
251
296
  };
252
297
  readonly enterprise: {
253
298
  readonly monthlyPriceCents: number | null;
@@ -266,8 +311,17 @@ export declare const BASE_PRICING_PLANS: {
266
311
  readonly features: readonly ["Everything in Team", "Custom usage limits", "Volume pricing", "Dedicated support"];
267
312
  };
268
313
  };
314
+ /** One public card; the six rungs are a selector inside it. */
269
315
  export declare const PUBLIC_PLAN_ORDER: readonly PlanTier[];
316
+ /**
317
+ * Tiers whose Stripe prices must still RESOLVE. Deliberately wider than what is
318
+ * purchasable: starter/pro/team are grandfathered, so a live subscription on one
319
+ * of their prices must keep mapping to a plan. Use PURCHASABLE_PLAN_KEYS for
320
+ * anything that offers a plan for sale.
321
+ */
270
322
  export declare const SELF_SERVE_PLAN_TIERS: readonly SelfServePlanTier[];
323
+ /** What a customer can actually buy or switch to, cheapest first. */
324
+ export declare const PURCHASABLE_PLAN_KEYS: readonly OxygenPlanKey[];
271
325
  export declare const CONTACT_SALES_PLAN_TIERS: readonly ContactSalesPlanTier[];
272
326
  export declare const ACTIVE_SUBSCRIPTION_STATUSES: readonly ["active", "trialing", "past_due"];
273
327
  export type ActiveSubscriptionStatus = (typeof ACTIVE_SUBSCRIPTION_STATUSES)[number];
@@ -294,6 +348,10 @@ export declare function resolveBasePricingPlan(tier: string | null | undefined):
294
348
  export declare function applyPricingPlanMetadataOverrides(// skipcq: JS-R1005
295
349
  plan: PricingPlanDefinition, metadata: PricingPlanMetadata): PricingPlanDefinition;
296
350
  export declare function isSelfServePlanTier(value: string): value is SelfServePlanTier;
351
+ export declare const MANAGED_PHONE_PLAN_TIERS: readonly PlanTier[];
352
+ export declare function planAllowsManagedPhoneEnrichment(tier: string): boolean;
353
+ /** True for the six rungs a customer may buy or switch to. */
354
+ export declare function isPurchasablePlanKey(value: string): value is OxygenPlanKey;
297
355
  export declare function isBillingCurrency(value: string): value is BillingCurrency;
298
356
  export declare function normalizeBillingCurrency(value: string | null | undefined): BillingCurrency;
299
357
  export declare function getCurrentFreeTierCycleKey(date?: Date): string;
@@ -312,6 +370,25 @@ export type CreditCycleWindow = {
312
370
  /** "July 2026" | "Jun 10 – Jul 10" */
313
371
  label: string;
314
372
  };
373
+ /**
374
+ * Whether a subscription row has a real Stripe object behind it that Stripe's
375
+ * own APIs (retrieve, update, invoice preview, portal flows) can act on.
376
+ *
377
+ * Three kinds of row say no: a staff-invoiced manual contract (`manual_contract_`
378
+ * id and/or `off_stripe` in either spelling the codebase has written), a
379
+ * control-plane-only internal grant (`internal_dogfood_…`), and a hand-inserted
380
+ * synthetic row that DOES carry a `sub_` prefix but marks itself
381
+ * `metadata.synthetic: true`. That last shape is why the id prefix alone is not
382
+ * the test: the dev dogfood org's `sub_synthetic_dev_dogfood_…` row passed every
383
+ * `startsWith("sub_")` check and reached `stripe.subscriptions.retrieve`, where
384
+ * Stripe answered "No such subscription" and the customer read the generic
385
+ * "Unable to preview the plan change." Every self-serve Stripe mutation must
386
+ * refuse these rows before it calls Stripe, with a message that names the fix.
387
+ */
388
+ export declare function isStripeManagedSubscription(subscription: {
389
+ stripeSubscriptionId?: string | null;
390
+ metadata?: Record<string, unknown> | null;
391
+ }): boolean;
315
392
  /**
316
393
  * The window the credit-allowance bar measures: "this month's credits", resolved
317
394
  * to the boundary at which the plan's grant actually renews.