@oxygen-agent/cli 1.1014.120 → 1.1014.123
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/index.js +1 -1
- package/node_modules/@oxygen/shared/dist/billing.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/billing.js +1 -1
- package/node_modules/@oxygen/shared/dist/credit-gate.d.ts +2 -2
- package/node_modules/@oxygen/shared/dist/credit-gate.js +3 -4
- package/node_modules/@oxygen/shared/dist/plan-capabilities.d.ts +14 -9
- package/node_modules/@oxygen/shared/dist/plan-capabilities.js +15 -10
- package/node_modules/@oxygen/shared/dist/version.generated.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/version.generated.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -4056,7 +4056,7 @@ export function createProgram() {
|
|
|
4056
4056
|
});
|
|
4057
4057
|
}))
|
|
4058
4058
|
.addCommand(new Command("billing-link")
|
|
4059
|
-
.description("Cover a workspace with another organization's paid plan instead of buying a second subscription. Omit --owner when exactly one owner is eligible; orgs billing-owners lists them. You must administer both organizations, the workspace must not hold its own live subscription, and an org-bound key can link only its workspace. The owner funds credits; data access stays unchanged. billing estimate reports sender_billing: credit_reservations uses the owner's credits, including when plan_tier is free; legacy sending_seats uses the owner's paid plan and seats. BYOK and Instagram/TikTok/YouTube/Facebook publishing still need a paid plan. billing usage --group-by workspace reports each linked workspace's spend.")
|
|
4059
|
+
.description("Cover a workspace with another organization's paid plan instead of buying a second subscription. Omit --owner when exactly one owner is eligible; orgs billing-owners lists them. You must administer both organizations, the workspace must not hold its own live subscription, and an org-bound key can link only its workspace. The owner funds credits; data access stays unchanged. billing estimate reports sender_billing: credit_reservations uses the owner's credits, including when plan_tier is free; legacy sending_seats uses the owner's paid plan and seats. Connecting a sending account, BYOK and Instagram/TikTok/YouTube/Facebook publishing still need a paid plan. billing usage --group-by workspace reports each linked workspace's spend.")
|
|
4060
4060
|
.option("--owner <organization>", "Billing owner organization id, Clerk org id, or slug. Optional — when omitted, Oxygen uses your one eligible organization, and refuses to pick if there is more than one.")
|
|
4061
4061
|
.option("--organization <organization>", "Workspace organization to link. Defaults to the active organization.")
|
|
4062
4062
|
.option("--organization-id <id>", "Alias for --organization.")
|
|
@@ -363,7 +363,7 @@ export declare const BASE_PRICING_PLANS: {
|
|
|
363
363
|
readonly monthlyAutomationActions: null;
|
|
364
364
|
readonly automationOverageCentsPerMillion: null;
|
|
365
365
|
readonly automationOverageEnabledDefault: false;
|
|
366
|
-
readonly description: "Your CRM and tables — free forever. Credits pay for enrichment, AI and workflow steps;
|
|
366
|
+
readonly description: "Your CRM and tables — free forever. Credits pay for enrichment, AI and workflow steps; sending accounts and your own provider keys need a paid plan.";
|
|
367
367
|
readonly ctaLabel: "Upgrade";
|
|
368
368
|
readonly features: readonly ["CRM, Tables, and Knowledge — unmetered; workflows pay per step", "Sequences: author, preview, and enroll", "Agents and Workspace Copilot", "Credits for enrichment and AI, topped up any time"];
|
|
369
369
|
};
|
|
@@ -575,7 +575,7 @@ export const BASE_PRICING_PLANS = {
|
|
|
575
575
|
// workspace may connect senders, publish and buy managed email on credits
|
|
576
576
|
// (repricing 2026-09, S22). So it names only what needs a plan either way;
|
|
577
577
|
// the gate-aware walls speak for the rest.
|
|
578
|
-
description: "Your CRM and tables — free forever. Credits pay for enrichment, AI and workflow steps;
|
|
578
|
+
description: "Your CRM and tables — free forever. Credits pay for enrichment, AI and workflow steps; sending accounts and your own provider keys need a paid plan.",
|
|
579
579
|
ctaLabel: "Upgrade",
|
|
580
580
|
features: [
|
|
581
581
|
"CRM, Tables, and Knowledge — unmetered; workflows pay per step",
|
|
@@ -10,11 +10,11 @@ export declare const CREDIT_GATE_BILLING_KINDS: readonly ["sending_mailbox", "li
|
|
|
10
10
|
export type CreditGateKind = (typeof CREDIT_GATE_BILLING_KINDS)[number];
|
|
11
11
|
/**
|
|
12
12
|
* The plan walls credits replace once the gate is in force (S22). The
|
|
13
|
-
* reasoning, and the
|
|
13
|
+
* reasoning, and the four capabilities that stay walled, live with the wall
|
|
14
14
|
* itself in `plan-capabilities.ts`; the list sits in this leaf so a client
|
|
15
15
|
* bundle can ask the question without loading the plan catalog.
|
|
16
16
|
*/
|
|
17
|
-
export declare const CREDIT_GATE_RETIRED_CAPABILITIES: readonly ["
|
|
17
|
+
export declare const CREDIT_GATE_RETIRED_CAPABILITIES: readonly ["sequence_dispatch", "publishing_deliver", "managed_email_infrastructure"];
|
|
18
18
|
export declare function isCapabilityRetiredByCreditGate(capability: PlanGatedCapability): boolean;
|
|
19
19
|
/**
|
|
20
20
|
* Whether an operator asked for the credit gate. Off unless set to 1/true/yes/on.
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
// on, a connect is admitted when the spendable balance covers the account's
|
|
8
8
|
// first monthly credit reservation, refused with `insufficient_credits` when it
|
|
9
9
|
// does not, and `billing seats` reports that seats are retired (S21). The plan
|
|
10
|
-
// wall removal (S22) sits behind the same flag;
|
|
11
|
-
// plan wall (`linkedin_connect`, founder 2026-10-12).
|
|
10
|
+
// wall removal (S22) sits behind the same flag; every sending account keeps its
|
|
11
|
+
// plan wall (`linkedin_connect` and `sender_connect`, founder 2026-10-12).
|
|
12
12
|
//
|
|
13
13
|
// WHY IT IS ITS OWN FLAG, AND WHY IT IS NOT ENOUGH ALONE. A balance check debits
|
|
14
14
|
// nothing: while commitments are dark, a workspace holding 3,400 credits would
|
|
@@ -39,12 +39,11 @@ export const CREDIT_GATE_BILLING_KINDS = [
|
|
|
39
39
|
];
|
|
40
40
|
/**
|
|
41
41
|
* The plan walls credits replace once the gate is in force (S22). The
|
|
42
|
-
* reasoning, and the
|
|
42
|
+
* reasoning, and the four capabilities that stay walled, live with the wall
|
|
43
43
|
* itself in `plan-capabilities.ts`; the list sits in this leaf so a client
|
|
44
44
|
* bundle can ask the question without loading the plan catalog.
|
|
45
45
|
*/
|
|
46
46
|
export const CREDIT_GATE_RETIRED_CAPABILITIES = [
|
|
47
|
-
"sender_connect",
|
|
48
47
|
"sequence_dispatch",
|
|
49
48
|
"publishing_deliver",
|
|
50
49
|
"managed_email_infrastructure",
|
|
@@ -38,10 +38,13 @@
|
|
|
38
38
|
* only gate and the sending walls retire: `CREDIT_GATE_RETIRED_CAPABILITIES`.
|
|
39
39
|
* Until the gate is in force everything above still holds.
|
|
40
40
|
*
|
|
41
|
-
* EXCEPT
|
|
42
|
-
* linkedin account on a plan"
|
|
43
|
-
*
|
|
44
|
-
*
|
|
41
|
+
* EXCEPT SENDING ACCOUNTS (founder, current chat, 2026-10-12: "you can only
|
|
42
|
+
* connect a linkedin account on a plan", then "we should gate all the sending
|
|
43
|
+
* seats on a plan"). `linkedin_connect` and `sender_connect` are not retired by
|
|
44
|
+
* the credit gate, so a free workspace is told to subscribe before any balance
|
|
45
|
+
* check, however many credits it holds, whether it connects a LinkedIn account,
|
|
46
|
+
* a mailbox, a WhatsApp number or an X account, or buys inboxes or a phone
|
|
47
|
+
* number.
|
|
45
48
|
*/
|
|
46
49
|
import type { PlanTier, PricingPlanDefinition } from "./billing.js";
|
|
47
50
|
import { CREDIT_GATE_RETIRED_CAPABILITIES, isCapabilityRetiredByCreditGate } from "./credit-gate.js";
|
|
@@ -72,17 +75,19 @@ export declare function isPlanGatedCapability(value: unknown): value is PlanGate
|
|
|
72
75
|
* The walls credits replace once the credit gate is in force (repricing
|
|
73
76
|
* 2026-09, decision 2.7, slice S22).
|
|
74
77
|
*
|
|
75
|
-
* "Credits are the only gate": a free workspace may
|
|
76
|
-
*
|
|
78
|
+
* "Credits are the only gate": a free workspace may send, publish and buy
|
|
79
|
+
* managed infrastructure if it holds the credits. Each of these
|
|
77
80
|
* is paid for by a monthly credit reservation or a credit purchase, so the plan
|
|
78
81
|
* wall has nothing left to protect — but only once those reservations are
|
|
79
82
|
* actually BILLED, which is exactly what the credit gate asserts at boot
|
|
80
83
|
* (`assertCreditGateArmed`). Until then every one of them stays walled exactly
|
|
81
84
|
* as before.
|
|
82
85
|
*
|
|
83
|
-
*
|
|
84
|
-
* - `linkedin_connect`:
|
|
85
|
-
* current chat, 2026-10-12), whatever the balance.
|
|
86
|
+
* Four capabilities stay walled under the gate:
|
|
87
|
+
* - `linkedin_connect` and `sender_connect`: every sending account connects
|
|
88
|
+
* only on a plan (founder, current chat, 2026-10-12), whatever the balance.
|
|
89
|
+
* That covers a LinkedIn account, a mailbox (imported or bought), a WhatsApp
|
|
90
|
+
* number, an X account and a phone number.
|
|
86
91
|
* - `byok_provider_keys`: bringing your own keys needs a plan that includes it
|
|
87
92
|
* ($99 or above from the repricing's effective date).
|
|
88
93
|
* - `publishing_connect`: the only publishing connects that still reach it are
|
|
@@ -38,10 +38,13 @@
|
|
|
38
38
|
* only gate and the sending walls retire: `CREDIT_GATE_RETIRED_CAPABILITIES`.
|
|
39
39
|
* Until the gate is in force everything above still holds.
|
|
40
40
|
*
|
|
41
|
-
* EXCEPT
|
|
42
|
-
* linkedin account on a plan"
|
|
43
|
-
*
|
|
44
|
-
*
|
|
41
|
+
* EXCEPT SENDING ACCOUNTS (founder, current chat, 2026-10-12: "you can only
|
|
42
|
+
* connect a linkedin account on a plan", then "we should gate all the sending
|
|
43
|
+
* seats on a plan"). `linkedin_connect` and `sender_connect` are not retired by
|
|
44
|
+
* the credit gate, so a free workspace is told to subscribe before any balance
|
|
45
|
+
* check, however many credits it holds, whether it connects a LinkedIn account,
|
|
46
|
+
* a mailbox, a WhatsApp number or an X account, or buys inboxes or a phone
|
|
47
|
+
* number.
|
|
45
48
|
*/
|
|
46
49
|
import { CREDIT_GATE_RETIRED_CAPABILITIES, isCapabilityRetiredByCreditGate } from "./credit-gate.js";
|
|
47
50
|
import { OXYGEN_49_BYOK_REPRICING, readRepricingSwitch, repricedValue, } from "./repricing.js";
|
|
@@ -74,7 +77,7 @@ export const PLAN_GATE_QUALIFYING_TIERS = [
|
|
|
74
77
|
export const PLAN_GATED_CAPABILITY_COPY = {
|
|
75
78
|
sender_connect: {
|
|
76
79
|
label: "Connecting a sending account",
|
|
77
|
-
freeAlternative: "
|
|
80
|
+
freeAlternative: "Leads, sequences and enrollment all work on Free. To connect or buy a mailbox, WhatsApp number, X account or phone number, subscribe to the Oxygen plan; its monthly credits pay for the account.",
|
|
78
81
|
deepLinkPath: "/settings/connections",
|
|
79
82
|
},
|
|
80
83
|
linkedin_connect: {
|
|
@@ -116,17 +119,19 @@ export function isPlanGatedCapability(value) {
|
|
|
116
119
|
* The walls credits replace once the credit gate is in force (repricing
|
|
117
120
|
* 2026-09, decision 2.7, slice S22).
|
|
118
121
|
*
|
|
119
|
-
* "Credits are the only gate": a free workspace may
|
|
120
|
-
*
|
|
122
|
+
* "Credits are the only gate": a free workspace may send, publish and buy
|
|
123
|
+
* managed infrastructure if it holds the credits. Each of these
|
|
121
124
|
* is paid for by a monthly credit reservation or a credit purchase, so the plan
|
|
122
125
|
* wall has nothing left to protect — but only once those reservations are
|
|
123
126
|
* actually BILLED, which is exactly what the credit gate asserts at boot
|
|
124
127
|
* (`assertCreditGateArmed`). Until then every one of them stays walled exactly
|
|
125
128
|
* as before.
|
|
126
129
|
*
|
|
127
|
-
*
|
|
128
|
-
* - `linkedin_connect`:
|
|
129
|
-
* current chat, 2026-10-12), whatever the balance.
|
|
130
|
+
* Four capabilities stay walled under the gate:
|
|
131
|
+
* - `linkedin_connect` and `sender_connect`: every sending account connects
|
|
132
|
+
* only on a plan (founder, current chat, 2026-10-12), whatever the balance.
|
|
133
|
+
* That covers a LinkedIn account, a mailbox (imported or bought), a WhatsApp
|
|
134
|
+
* number, an X account and a phone number.
|
|
130
135
|
* - `byok_provider_keys`: bringing your own keys needs a plan that includes it
|
|
131
136
|
* ($99 or above from the repricing's effective date).
|
|
132
137
|
* - `publishing_connect`: the only publishing connects that still reach it are
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const OXYGEN_BUILD_VERSION = "1.1014.
|
|
1
|
+
export declare const OXYGEN_BUILD_VERSION = "1.1014.123";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// GENERATED by scripts/ci/version-stamp.mjs from VERSION + git history. Do not edit; do not commit.
|
|
2
|
-
export const OXYGEN_BUILD_VERSION = "1.1014.
|
|
2
|
+
export const OXYGEN_BUILD_VERSION = "1.1014.123";
|