@oxygen-agent/cli 1.1014.777 → 1.1014.913

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 (64) hide show
  1. package/README.md +1 -1
  2. package/dist/command-manifest.js +10 -1
  3. package/dist/commands/admin.js +1 -1
  4. package/dist/commands/billing.js +13 -9
  5. package/dist/commands/columns.js +3 -3
  6. package/dist/commands/crm.js +2 -2
  7. package/dist/commands/deliverability.js +18 -10
  8. package/dist/commands/domains.js +15 -3
  9. package/dist/commands/mailboxes.js +22 -20
  10. package/dist/commands/managed-inboxes.js +1 -1
  11. package/dist/commands/sequences.js +34 -8
  12. package/dist/commands/voice.d.ts +21 -0
  13. package/dist/commands/voice.js +121 -6
  14. package/dist/customer-operation-commands.js +8 -2
  15. package/dist/index.js +6 -0
  16. package/dist/run-wait.js +10 -2
  17. package/node_modules/@oxygen/formula/package.json +8 -0
  18. package/node_modules/@oxygen/shared/dist/agent-sessions.d.ts +3 -0
  19. package/node_modules/@oxygen/shared/dist/agent-sessions.js +22 -1
  20. package/node_modules/@oxygen/shared/dist/billing-money.d.ts +31 -0
  21. package/node_modules/@oxygen/shared/dist/billing-money.js +60 -0
  22. package/node_modules/@oxygen/shared/dist/billing.d.ts +3 -0
  23. package/node_modules/@oxygen/shared/dist/billing.js +9 -1
  24. package/node_modules/@oxygen/shared/dist/capability-discovery.js +2 -2
  25. package/node_modules/@oxygen/shared/dist/contracts/agent-sessions.d.ts +76 -0
  26. package/node_modules/@oxygen/shared/dist/contracts/agent-sessions.js +4 -2
  27. package/node_modules/@oxygen/shared/dist/contracts/customer-operations.js +2 -2
  28. package/node_modules/@oxygen/shared/dist/contracts/guided-activation.d.ts +177 -0
  29. package/node_modules/@oxygen/shared/dist/contracts/guided-activation.js +59 -0
  30. package/node_modules/@oxygen/shared/dist/contracts/operations.js +4 -3
  31. package/node_modules/@oxygen/shared/dist/copilot-access.js +2 -1
  32. package/node_modules/@oxygen/shared/dist/credit-guidance.js +8 -15
  33. package/node_modules/@oxygen/shared/dist/domain-authentication.d.ts +65 -0
  34. package/node_modules/@oxygen/shared/dist/domain-authentication.js +54 -0
  35. package/node_modules/@oxygen/shared/dist/email-infrastructure-policy.d.ts +5 -0
  36. package/node_modules/@oxygen/shared/dist/email-infrastructure-policy.js +13 -0
  37. package/node_modules/@oxygen/shared/dist/guided-activation.d.ts +155 -0
  38. package/node_modules/@oxygen/shared/dist/guided-activation.fixture.d.ts +15 -0
  39. package/node_modules/@oxygen/shared/dist/guided-activation.fixture.js +21 -0
  40. package/node_modules/@oxygen/shared/dist/guided-activation.js +38 -0
  41. package/node_modules/@oxygen/shared/dist/linkedin-connection-identity.d.ts +9 -0
  42. package/node_modules/@oxygen/shared/dist/linkedin-connection-identity.js +41 -0
  43. package/node_modules/@oxygen/shared/dist/managed-email-branding.js +9 -5
  44. package/node_modules/@oxygen/shared/dist/otlp-log-sink.d.ts +1 -0
  45. package/node_modules/@oxygen/shared/dist/otlp-log-sink.js +58 -54
  46. package/node_modules/@oxygen/shared/dist/placement-history.d.ts +3 -0
  47. package/node_modules/@oxygen/shared/dist/placement-history.js +12 -0
  48. package/node_modules/@oxygen/shared/dist/placement-report.d.ts +7 -0
  49. package/node_modules/@oxygen/shared/dist/placement-report.js +34 -0
  50. package/node_modules/@oxygen/shared/dist/plan-limits-view.d.ts +1 -0
  51. package/node_modules/@oxygen/shared/dist/plan-limits-view.js +1 -0
  52. package/node_modules/@oxygen/shared/dist/pricing-snapshot.generated.d.ts +1 -0
  53. package/node_modules/@oxygen/shared/dist/pricing-snapshot.generated.js +1 -0
  54. package/node_modules/@oxygen/shared/dist/sending-limits.d.ts +1 -0
  55. package/node_modules/@oxygen/shared/dist/sending-limits.js +2 -10
  56. package/node_modules/@oxygen/shared/dist/teammates.js +2 -1
  57. package/node_modules/@oxygen/shared/dist/user-capability-routing.js +87 -2
  58. package/node_modules/@oxygen/shared/dist/version.d.ts +1 -1
  59. package/node_modules/@oxygen/shared/dist/version.generated.d.ts +1 -1
  60. package/node_modules/@oxygen/shared/dist/version.generated.js +1 -1
  61. package/node_modules/@oxygen/shared/dist/version.js +1 -1
  62. package/node_modules/@oxygen/shared/dist/voice-countries.d.ts +66 -0
  63. package/node_modules/@oxygen/shared/dist/voice-countries.js +75 -0
  64. package/package.json +1 -1
@@ -38,6 +38,66 @@ export function inferUserCapabilityRoute(query) {
38
38
  exactMcpCall: { tool: "oxygen_knowledge_bootstrap", arguments: { status: true } },
39
39
  };
40
40
  }
41
+ // A compound onboarding request describes the journey's saved context,
42
+ // rather than a request to install skills or build a hosted Workflow.
43
+ if (isCompanyOnboardingContextIntent(normalized)) {
44
+ const route = getCapabilityRouteMatch("knowledge-graph");
45
+ if (route)
46
+ return { ...route, card: { ...route.card, posture: "read_only", execution: "Read saved company context and onboarding resources first. Inspect current research status; this discovery starts no research, skill installation, Workflow or outreach." },
47
+ recommendedTools: ["oxygen_context_profile_get", "oxygen_knowledge_bootstrap", "oxygen_onboarding_activation_status"],
48
+ recommendedCommands: ["context profile get", "knowledge bootstrap status", "onboarding activation status"],
49
+ exactCommand: "oxygen context profile get --json", exactMcpCall: { tool: "oxygen_context_profile_get", arguments: {} } };
50
+ }
51
+ if ((/\b(?:linkedin|sequence|campaign)\b/.test(normalized) && /\b(?:preview|review|readiness)\b/.test(normalized)
52
+ && /\b(?:launch|start)\b/.test(normalized) && /\b(?:approval|send limits?|caps?)\b/.test(normalized))
53
+ || (isLinkedInCampaignIntent(normalized) && /\breadiness\b/.test(normalized) && /\bpreview\b/.test(normalized))) {
54
+ const route = getCapabilityRouteMatch("sequences");
55
+ if (route)
56
+ return { ...route, card: { ...route.card, posture: "read_only", execution: "Read the native Sequence launch preview with approved=false. Review readiness, recipients, sender, copy and positive send limits before approving the exact native review." },
57
+ recommendedTools: ["oxygen_sequences_start", "oxygen_sequences_get", "oxygen_sequences_list"], recommendedCommands: ["sequences start", "sequences get", "sequences list"],
58
+ exactCommand: "oxygen sequences start '<sequence>' --json", exactMcpCall: { tool: "oxygen_sequences_start", arguments: { sequence: "<sequence>", approved: false } } };
59
+ }
60
+ if (isLinkedInCampaignIntent(normalized) && /\b(?:draft|copy)\b/.test(normalized) && /\breview\w*\b/.test(normalized)) {
61
+ const route = getCapabilityRouteMatch("sequences");
62
+ if (route)
63
+ return {
64
+ ...route,
65
+ card: { ...route.card, posture: "read_only", execution: "Read existing Sequence drafts and rendered copy. These reads do not draft, launch or send; AI drafting remains a separately quoted operation." },
66
+ recommendedTools: ["oxygen_sequences_list", "oxygen_sequences_get", "oxygen_sequences_render"],
67
+ recommendedCommands: ["sequences list", "sequences get", "sequences render"],
68
+ exactCommand: "oxygen sequences list --json",
69
+ exactMcpCall: { tool: "oxygen_sequences_list", arguments: {} },
70
+ };
71
+ }
72
+ // An explicit authored Sequence create must precede generic draft/LinkedIn
73
+ // scoring. Copy-producing columns keep the existing router and cost metadata.
74
+ if (isLinkedInCampaignIntent(normalized) && /\bsequences?\b/.test(normalized)
75
+ && /\bcreate\b/.test(normalized) && /\bdraft\b/.test(normalized)
76
+ && !/\b(?:columns?|formulas?|waterfalls?)\b/.test(normalized)) {
77
+ const route = getCapabilityRouteMatch("sequences");
78
+ if (route)
79
+ return {
80
+ ...route,
81
+ card: { ...route.card, execution: "Create an authored inert Sequence using the native schema. Creation does not generate copy with AI or start outreach; sender readiness and exact launch approval remain separate." },
82
+ recommendedTools: ["oxygen_sequences_create", "oxygen_sequences_get", "oxygen_sequences_list"],
83
+ recommendedCommands: ["sequences create", "sequences get", "sequences list"],
84
+ };
85
+ }
86
+ // Requested daily GTM work belongs to Oxygent routines. Discovery only reads
87
+ // existing sessions/templates; it never invents schedules or authorizes work.
88
+ if (/\b(?:morning briefing|nightly (?:lead )?scan|daily oxygent|daily (?:gtm )?(?:briefing|rhythm))\b/.test(normalized)
89
+ || isPrivateRecurringReportIntent(normalized)) {
90
+ const route = getCapabilityRouteMatch("agents");
91
+ if (route)
92
+ return {
93
+ ...route,
94
+ card: { ...route.card, posture: "read_only", execution: "Inspect existing Oxygent routines and the native session templates. Confirm timezone, exact resources and caps before previewing and activating; scans add review-only candidates and briefings stay in the creator's Oxygent chat." },
95
+ recommendedTools: ["oxygen_agent_session_list", "oxygen_agent_session_templates", "oxygen_agent_session_preview"],
96
+ recommendedCommands: ["agent session list", "agent session templates", "agent session preview"],
97
+ exactCommand: "oxygen agent session list --slug workspace --json",
98
+ exactMcpCall: { tool: "oxygen_agent_session_list", arguments: { slug: "workspace" } },
99
+ };
100
+ }
41
101
  const oxygents = oxygentsRoute(normalized);
42
102
  if (oxygents)
43
103
  return oxygents;
@@ -86,6 +146,28 @@ export function inferUserCapabilityRoute(query) {
86
146
  // intent is exactly what this wrapper exists to answer.
87
147
  return getCapabilityRouteMatch("connected-integrations") ?? route;
88
148
  }
149
+ function isCompanyOnboardingContextIntent(query) {
150
+ return /\bonboard\w*\b/.test(query)
151
+ && /\bcompany\b/.test(query)
152
+ && /\b(?:context|research|understand\w*|knowledge|website|icp|offer|positioning|voice)\b/.test(query)
153
+ && /\b(?:sequence|table|teammate|oxygent|icp|offer|activation|campaign)\b/.test(query);
154
+ }
155
+ /** Campaign copy belongs to Sequences; an existing conversation keeps its owner. */
156
+ function isLinkedInCampaignIntent(query) {
157
+ return /\blinkedin\b/.test(query)
158
+ && /\b(?:campaign|sequences?)\b/.test(query)
159
+ && !/\b(?:inbox|unibox|conversation|threads?|repl(?:y|ies)|publishing|posts?|comments?)\b/.test(query);
160
+ }
161
+ /** Private Oxygent/teammate phrasing may put the teammate between private and chat. */
162
+ function isPrivateRecurringReportIntent(query) {
163
+ const privateChat = /\bprivate(?:\s+(?:(?:oxygen|ai)\s+)?(?:oxygents?|teammates?))?\s+chat\b/.test(query);
164
+ const nativeTeammate = /\b(?:oxygents?|(?:oxygen|ai) teammates?)\b/.test(query)
165
+ || (/\bteammates?\b/.test(query) && !/\b(?:invite|membership|permissions?|roles?|human|colleague|coworker|slack|teams|whatsapp)\b/.test(query));
166
+ return /\b(?:nightly|daily|every night)\b/.test(query)
167
+ && /\b(?:search|scan)\b/.test(query)
168
+ && /\bmorning\b/.test(query)
169
+ && privateChat && nativeTeammate;
170
+ }
89
171
  function isSignupCompanyResearchReadIntent(query) {
90
172
  return /\bcompany research\b|\bresearch (?:the |my |our )?company\b/.test(query)
91
173
  && /\bsign\s?up\b|\bonboard\w*\b|\bworkspace setup\b|\bnew workspace\b/.test(query)
@@ -155,12 +237,15 @@ const OXYGENT_GROUP_VERBS = [
155
237
  * `commands search`, no `oxygents` command at all (blind CLI evals, 2026-10-13
156
238
  * and 2026-10-14). Only an explicit Oxygent ask moves, or one about a group
157
239
  * chat that names no other channel's (WhatsApp, Teams): a plain "agent" ask,
158
- * and a person's human "teammate", keep their owners.
240
+ * and explicit human teammate membership or channel asks, keep their owners. Bare teammates and private scheduled teammate work use the Oxygent owner.
159
241
  */
160
242
  function oxygentsRoute(normalized) {
161
243
  const groupChat = /\bgroup chats?\b/.test(normalized)
162
244
  && !/\b(?:whatsapp|teams|slack|telegram|linkedin|discord|signal|sms|e ?mail|inbox|unibox)\b/.test(normalized);
163
- if (!groupChat && !/\b(?:oxygents?|ai teammates?)\b/.test(normalized))
245
+ const nativeTeammate = /^\s*teammates?\s*$/.test(normalized)
246
+ || (/\bteammates?\b/.test(normalized) && /\b(?:routines?|schedul\w*|private chat)\b/.test(normalized)
247
+ && !/\b(?:invite|membership|permissions?|roles?|human|colleague|coworker|slack|teams|whatsapp)\b/.test(normalized));
248
+ if (!groupChat && !nativeTeammate && !/\b(?:oxygents?|ai teammates?)\b/.test(normalized))
164
249
  return null;
165
250
  const route = getCapabilityRouteMatch("agents");
166
251
  if (!route)
@@ -1,3 +1,3 @@
1
1
  export declare const OXYGEN_VERSION: string;
2
- export declare const OXYGEN_MINIMUM_CLI_VERSION = "1.948.1";
2
+ export declare const OXYGEN_MINIMUM_CLI_VERSION = "1.982.3";
3
3
  export declare const GEO_EXPORT_MINIMUM_CLI_VERSION = "1.1013.0";
@@ -1 +1 @@
1
- export declare const OXYGEN_BUILD_VERSION = "1.1014.777";
1
+ export declare const OXYGEN_BUILD_VERSION = "1.1014.913";
@@ -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.777";
2
+ export const OXYGEN_BUILD_VERSION = "1.1014.913";
@@ -49,7 +49,7 @@ export const OXYGEN_VERSION = OXYGEN_BUILD_VERSION;
49
49
  // Since 2026-09-28 the release-preparation step advances this literal to the
50
50
  // highest CLI version published on npm for at least 30 days. It never lowers
51
51
  // the floor. The source change lands on dev before the next production release.
52
- export const OXYGEN_MINIMUM_CLI_VERSION = "1.948.1";
52
+ export const OXYGEN_MINIMUM_CLI_VERSION = "1.982.3";
53
53
  // The internal GEO export first gains required pagination in this dev version.
54
54
  // Earlier pilot clients would save a partial file without its continuation.
55
55
  export const GEO_EXPORT_MINIMUM_CLI_VERSION = "1.1013.0";
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Where OXYGEN sells phone numbers, and on what terms.
3
+ *
4
+ * One catalog, read by the buy dialog, the numbers route and the verification
5
+ * route, so a country cannot be buyable on one surface and locked on another.
6
+ *
7
+ * Three kinds of country:
8
+ *
9
+ * instant the carrier releases a number with no paperwork (US, CA).
10
+ * verification the carrier sells local numbers only after a regulatory
11
+ * bundle — the customer's business details, address and usually
12
+ * one register extract — is approved by a human at Twilio
13
+ * (about three business days). Locked, never hidden, until then.
14
+ * unavailable the carrier sells no local numbers here on our account, so no
15
+ * amount of paperwork unlocks it. Shown with the reason.
16
+ *
17
+ * Every row was checked against the live Twilio API on 2026-10-15
18
+ * (Regulations and AvailablePhoneNumbers, business end user, local numbers):
19
+ *
20
+ * - GB needs a business address and NO document; DE, AT, CH and FR need a
21
+ * commercial register extract (AT also an ID of the authorized
22
+ * representative) plus a local address. DE and AT addresses must lie inside
23
+ * the number's own dialing area: a Berlin 030 number needs a Berlin address.
24
+ * - NL, ES and IT publish regulations, but AvailablePhoneNumbers returns 404 for
25
+ * their Local inventory (IT and NL sell mobile only, ES nothing at all).
26
+ * - PL sells no local or mobile numbers (404); a second carrier is undecided.
27
+ *
28
+ * Inventory changes. Re-run those reads before moving a country between kinds,
29
+ * and refresh the regulation fixtures in packages/integrations at the same time.
30
+ */
31
+ export type VoiceCountryAccess = "instant" | "verification" | "unavailable";
32
+ /**
33
+ * Where the registered address has to be. `number_area` is the German and
34
+ * Austrian rule: inside the dialing area of the number being bought.
35
+ */
36
+ export type VoiceAddressRule = "in_country" | "number_area";
37
+ export type VoiceCountry = {
38
+ iso: string;
39
+ name: string;
40
+ /** International dialing code without the plus, e.g. "49". */
41
+ dialCode: string;
42
+ access: VoiceCountryAccess;
43
+ /** Verification countries only. */
44
+ addressRule?: VoiceAddressRule;
45
+ /** Unavailable countries only: one sentence a customer can act on. */
46
+ unavailableReason?: string;
47
+ };
48
+ /** Twilio regulations differ by number type and end user; the dialer sells local business numbers. */
49
+ export declare const VOICE_NUMBER_TYPE = "local";
50
+ export declare const VOICE_END_USER_TYPE = "business";
51
+ export declare const VOICE_COUNTRIES: readonly VoiceCountry[];
52
+ export declare function voiceCountry(iso: string | null | undefined): VoiceCountry | null;
53
+ export declare function voiceCountriesWithAccess(access: VoiceCountryAccess): VoiceCountry[];
54
+ /**
55
+ * The AvailablePhoneNumbers `Contains` pattern for an area code outside the
56
+ * NANP, or null when the country searches by `AreaCode` (US/CA) or no area code
57
+ * was given. Twilio's `AreaCode` filter only works for NANP numbers; elsewhere a
58
+ * leading `+<country><area>` pattern pins the dialing area (verified live for
59
+ * DE 30/40/89/221, GB 20/161, AT 1/732, CH 44/22, FR 1-4 on 2026-10-15).
60
+ */
61
+ export declare function voiceNumberSearchPattern(iso: string, areaCode: string | null | undefined): string | null;
62
+ /** The AvailablePhoneNumbers filter an area code implies: `AreaCode` for NANP, a `Contains` pattern elsewhere. */
63
+ export declare function voiceNumberAreaFilter(iso: string, areaCode: string | null | undefined): {
64
+ areaCode?: string;
65
+ contains?: string;
66
+ };
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Where OXYGEN sells phone numbers, and on what terms.
3
+ *
4
+ * One catalog, read by the buy dialog, the numbers route and the verification
5
+ * route, so a country cannot be buyable on one surface and locked on another.
6
+ *
7
+ * Three kinds of country:
8
+ *
9
+ * instant the carrier releases a number with no paperwork (US, CA).
10
+ * verification the carrier sells local numbers only after a regulatory
11
+ * bundle — the customer's business details, address and usually
12
+ * one register extract — is approved by a human at Twilio
13
+ * (about three business days). Locked, never hidden, until then.
14
+ * unavailable the carrier sells no local numbers here on our account, so no
15
+ * amount of paperwork unlocks it. Shown with the reason.
16
+ *
17
+ * Every row was checked against the live Twilio API on 2026-10-15
18
+ * (Regulations and AvailablePhoneNumbers, business end user, local numbers):
19
+ *
20
+ * - GB needs a business address and NO document; DE, AT, CH and FR need a
21
+ * commercial register extract (AT also an ID of the authorized
22
+ * representative) plus a local address. DE and AT addresses must lie inside
23
+ * the number's own dialing area: a Berlin 030 number needs a Berlin address.
24
+ * - NL, ES and IT publish regulations, but AvailablePhoneNumbers returns 404 for
25
+ * their Local inventory (IT and NL sell mobile only, ES nothing at all).
26
+ * - PL sells no local or mobile numbers (404); a second carrier is undecided.
27
+ *
28
+ * Inventory changes. Re-run those reads before moving a country between kinds,
29
+ * and refresh the regulation fixtures in packages/integrations at the same time.
30
+ */
31
+ /** Twilio regulations differ by number type and end user; the dialer sells local business numbers. */
32
+ export const VOICE_NUMBER_TYPE = "local";
33
+ export const VOICE_END_USER_TYPE = "business";
34
+ const NO_LOCAL_NUMBERS = "Our carrier sells no local numbers here yet.";
35
+ export const VOICE_COUNTRIES = [
36
+ { iso: "US", name: "United States", dialCode: "1", access: "instant" },
37
+ { iso: "CA", name: "Canada", dialCode: "1", access: "instant" },
38
+ { iso: "GB", name: "United Kingdom", dialCode: "44", access: "verification", addressRule: "in_country" },
39
+ { iso: "DE", name: "Germany", dialCode: "49", access: "verification", addressRule: "number_area" },
40
+ { iso: "AT", name: "Austria", dialCode: "43", access: "verification", addressRule: "number_area" },
41
+ { iso: "CH", name: "Switzerland", dialCode: "41", access: "verification", addressRule: "in_country" },
42
+ { iso: "FR", name: "France", dialCode: "33", access: "verification", addressRule: "in_country" },
43
+ { iso: "NL", name: "Netherlands", dialCode: "31", access: "unavailable", unavailableReason: NO_LOCAL_NUMBERS },
44
+ { iso: "ES", name: "Spain", dialCode: "34", access: "unavailable", unavailableReason: NO_LOCAL_NUMBERS },
45
+ { iso: "IT", name: "Italy", dialCode: "39", access: "unavailable", unavailableReason: NO_LOCAL_NUMBERS },
46
+ { iso: "PL", name: "Poland", dialCode: "48", access: "unavailable", unavailableReason: NO_LOCAL_NUMBERS },
47
+ ];
48
+ export function voiceCountry(iso) {
49
+ const code = (iso ?? "").trim().toUpperCase();
50
+ return VOICE_COUNTRIES.find((entry) => entry.iso === code) ?? null;
51
+ }
52
+ export function voiceCountriesWithAccess(access) {
53
+ return VOICE_COUNTRIES.filter((entry) => entry.access === access);
54
+ }
55
+ /**
56
+ * The AvailablePhoneNumbers `Contains` pattern for an area code outside the
57
+ * NANP, or null when the country searches by `AreaCode` (US/CA) or no area code
58
+ * was given. Twilio's `AreaCode` filter only works for NANP numbers; elsewhere a
59
+ * leading `+<country><area>` pattern pins the dialing area (verified live for
60
+ * DE 30/40/89/221, GB 20/161, AT 1/732, CH 44/22, FR 1-4 on 2026-10-15).
61
+ */
62
+ export function voiceNumberSearchPattern(iso, areaCode) {
63
+ const country = voiceCountry(iso);
64
+ const digits = (areaCode ?? "").replace(/\D/g, "").replace(/^0+/, "");
65
+ if (!country || country.dialCode === "1" || !digits)
66
+ return null;
67
+ return `+${country.dialCode}${digits}`;
68
+ }
69
+ /** The AvailablePhoneNumbers filter an area code implies: `AreaCode` for NANP, a `Contains` pattern elsewhere. */
70
+ export function voiceNumberAreaFilter(iso, areaCode) {
71
+ if (!areaCode)
72
+ return {};
73
+ const pattern = voiceNumberSearchPattern(iso, areaCode);
74
+ return pattern ? { contains: pattern } : { areaCode };
75
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxygen-agent/cli",
3
- "version": "1.1014.777",
3
+ "version": "1.1014.913",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",