@oxygen-agent/cli 1.1014.118 → 1.1014.119

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.118
37
+ Version: 1.1014.119
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)
@@ -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
@@ -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
- * Two capabilities stay walled under the gate:
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
- * Two capabilities stay walled under the gate:
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.118";
1
+ export declare const OXYGEN_BUILD_VERSION = "1.1014.119";
@@ -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.118";
2
+ export const OXYGEN_BUILD_VERSION = "1.1014.119";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxygen-agent/cli",
3
- "version": "1.1014.118",
3
+ "version": "1.1014.119",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",