@oxygen-agent/cli 1.1014.118 → 1.1014.120
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 +0 -8
- 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 +1 -1
- package/node_modules/@oxygen/shared/dist/credit-gate.js +3 -2
- package/node_modules/@oxygen/shared/dist/plan-capabilities.d.ts +9 -2
- package/node_modules/@oxygen/shared/dist/plan-capabilities.js +14 -1
- 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
|
@@ -1646,14 +1646,6 @@ function writeMaxCreditsHint(error) {
|
|
|
1646
1646
|
if (reservation === null)
|
|
1647
1647
|
return;
|
|
1648
1648
|
const nextStep = readDetailsString(error.details, "next_step");
|
|
1649
|
-
// A free workspace connecting LinkedIn is sent to the plan, not to a top-up (2026-10-11).
|
|
1650
|
-
if (readDetailsString(error.details, "remedy") === "subscribe") {
|
|
1651
|
-
const upgradeUrl = readDetailsString(error.details, "upgrade_url");
|
|
1652
|
-
process.stderr.write(`hint: this connect reserves ${reservation} credits a month; subscribe to the Oxygen plan, then connect again\n`);
|
|
1653
|
-
if (upgradeUrl)
|
|
1654
|
-
process.stderr.write(`hint: choose a plan at ${upgradeUrl}\n`);
|
|
1655
|
-
return;
|
|
1656
|
-
}
|
|
1657
1649
|
const topupUrl = readDetailsString(error.details, "topup_url");
|
|
1658
1650
|
process.stderr.write(`hint: this connect reserves ${reservation} credits a month; add credits, then connect again\n`);
|
|
1659
1651
|
if (nextStep)
|
|
@@ -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; 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; a LinkedIn account 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; your own provider keys need a paid plan.",
|
|
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.",
|
|
579
579
|
ctaLabel: "Upgrade",
|
|
580
580
|
features: [
|
|
581
581
|
"CRM, Tables, and Knowledge — unmetered; workflows pay per step",
|
|
@@ -10,7 +10,7 @@ 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 three 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
|
*/
|
|
@@ -7,7 +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
|
|
10
|
+
// wall removal (S22) sits behind the same flag; a LinkedIn account keeps its
|
|
11
|
+
// plan wall (`linkedin_connect`, founder 2026-10-12).
|
|
11
12
|
//
|
|
12
13
|
// WHY IT IS ITS OWN FLAG, AND WHY IT IS NOT ENOUGH ALONE. A balance check debits
|
|
13
14
|
// nothing: while commitments are dark, a workspace holding 3,400 credits would
|
|
@@ -38,7 +39,7 @@ export const CREDIT_GATE_BILLING_KINDS = [
|
|
|
38
39
|
];
|
|
39
40
|
/**
|
|
40
41
|
* The plan walls credits replace once the gate is in force (S22). The
|
|
41
|
-
* reasoning, and the
|
|
42
|
+
* reasoning, and the three capabilities that stay walled, live with the wall
|
|
42
43
|
* itself in `plan-capabilities.ts`; the list sits in this leaf so a client
|
|
43
44
|
* bundle can ask the question without loading the plan catalog.
|
|
44
45
|
*/
|
|
@@ -37,11 +37,16 @@
|
|
|
37
37
|
* billed that way (the credit gate, `OXYGEN_CREDIT_GATE_ENABLED`) credits are the
|
|
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
|
+
*
|
|
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.
|
|
40
45
|
*/
|
|
41
46
|
import type { PlanTier, PricingPlanDefinition } from "./billing.js";
|
|
42
47
|
import { CREDIT_GATE_RETIRED_CAPABILITIES, isCapabilityRetiredByCreditGate } from "./credit-gate.js";
|
|
43
48
|
import { type RepricingOptions } from "./repricing.js";
|
|
44
|
-
export declare const PLAN_GATED_CAPABILITIES: readonly ["sender_connect", "sequence_dispatch", "publishing_connect", "publishing_deliver", "managed_email_infrastructure", "byok_provider_keys"];
|
|
49
|
+
export declare const PLAN_GATED_CAPABILITIES: readonly ["sender_connect", "linkedin_connect", "sequence_dispatch", "publishing_connect", "publishing_deliver", "managed_email_infrastructure", "byok_provider_keys"];
|
|
45
50
|
export type PlanGatedCapability = (typeof PLAN_GATED_CAPABILITIES)[number];
|
|
46
51
|
/**
|
|
47
52
|
* Every tier except `free` unblocks every gated capability.
|
|
@@ -75,7 +80,9 @@ export declare function isPlanGatedCapability(value: unknown): value is PlanGate
|
|
|
75
80
|
* (`assertCreditGateArmed`). Until then every one of them stays walled exactly
|
|
76
81
|
* as before.
|
|
77
82
|
*
|
|
78
|
-
*
|
|
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.
|
|
79
86
|
* - `byok_provider_keys`: bringing your own keys needs a plan that includes it
|
|
80
87
|
* ($99 or above from the repricing's effective date).
|
|
81
88
|
* - `publishing_connect`: the only publishing connects that still reach it are
|
|
@@ -37,11 +37,17 @@
|
|
|
37
37
|
* billed that way (the credit gate, `OXYGEN_CREDIT_GATE_ENABLED`) credits are the
|
|
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
|
+
*
|
|
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.
|
|
40
45
|
*/
|
|
41
46
|
import { CREDIT_GATE_RETIRED_CAPABILITIES, isCapabilityRetiredByCreditGate } from "./credit-gate.js";
|
|
42
47
|
import { OXYGEN_49_BYOK_REPRICING, readRepricingSwitch, repricedValue, } from "./repricing.js";
|
|
43
48
|
export const PLAN_GATED_CAPABILITIES = [
|
|
44
49
|
"sender_connect",
|
|
50
|
+
"linkedin_connect",
|
|
45
51
|
"sequence_dispatch",
|
|
46
52
|
"publishing_connect",
|
|
47
53
|
"publishing_deliver",
|
|
@@ -71,6 +77,11 @@ export const PLAN_GATED_CAPABILITY_COPY = {
|
|
|
71
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.",
|
|
72
78
|
deepLinkPath: "/settings/connections",
|
|
73
79
|
},
|
|
80
|
+
linkedin_connect: {
|
|
81
|
+
label: "Connecting a LinkedIn account",
|
|
82
|
+
freeAlternative: "Leads, sequences and enrollment all work on Free. To connect a LinkedIn account, subscribe to the Oxygen plan; its monthly credits pay for the account.",
|
|
83
|
+
deepLinkPath: "/settings/connections",
|
|
84
|
+
},
|
|
74
85
|
sequence_dispatch: {
|
|
75
86
|
label: "Sending a sequence",
|
|
76
87
|
freeAlternative: "Authoring, versioning, enrolling, and previewing a sequence are all free. Dispatching to real recipients is what needs a plan.",
|
|
@@ -113,7 +124,9 @@ export function isPlanGatedCapability(value) {
|
|
|
113
124
|
* (`assertCreditGateArmed`). Until then every one of them stays walled exactly
|
|
114
125
|
* as before.
|
|
115
126
|
*
|
|
116
|
-
*
|
|
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.
|
|
117
130
|
* - `byok_provider_keys`: bringing your own keys needs a plan that includes it
|
|
118
131
|
* ($99 or above from the repricing's effective date).
|
|
119
132
|
* - `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.120";
|
|
@@ -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.120";
|