@oxygen-agent/cli 1.1014.121 → 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 CHANGED
@@ -34,4 +34,4 @@ oxygen update
34
34
 
35
35
  For product documentation, visit https://oxygen-agent.com/docs. For support, visit https://oxygen-agent.com.
36
36
 
37
- Version: 1.1014.121
37
+ Version: 1.1014.123
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; a LinkedIn account and your own provider keys need a paid plan.";
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; a LinkedIn account and your own provider keys need a paid plan.",
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 three capabilities that stay walled, live with the wall
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 ["sender_connect", "sequence_dispatch", "publishing_deliver", "managed_email_infrastructure"];
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; a LinkedIn account keeps its
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 three capabilities that stay walled, live with the wall
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 LINKEDIN (founder, current chat, 2026-10-12: "you can only connect a
42
- * linkedin account on a plan"). `linkedin_connect` is not retired by the credit
43
- * gate, so a free workspace is told to subscribe before any balance check,
44
- * however many credits it holds.
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 connect accounts, send,
76
- * publish and buy managed infrastructure if it holds the credits. Each of these
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
- * Three capabilities stay walled under the gate:
84
- * - `linkedin_connect`: a LinkedIn account connects only on a plan (founder,
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 LINKEDIN (founder, current chat, 2026-10-12: "you can only connect a
42
- * linkedin account on a plan"). `linkedin_connect` is not retired by the credit
43
- * gate, so a free workspace is told to subscribe before any balance check,
44
- * however many credits it holds.
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: "You can build and preview the whole motion on Free — sequences, steps, and enrollment all work. Connecting a mailbox, LinkedIn account, or WhatsApp number is what needs a plan.",
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 connect accounts, send,
120
- * publish and buy managed infrastructure if it holds the credits. Each of these
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
- * Three capabilities stay walled under the gate:
128
- * - `linkedin_connect`: a LinkedIn account connects only on a plan (founder,
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.121";
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.121";
2
+ export const OXYGEN_BUILD_VERSION = "1.1014.123";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxygen-agent/cli",
3
- "version": "1.1014.121",
3
+ "version": "1.1014.123",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",