@oxygen-agent/cli 1.1014.779 → 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 (62) 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/placement-history.d.ts +3 -0
  45. package/node_modules/@oxygen/shared/dist/placement-history.js +12 -0
  46. package/node_modules/@oxygen/shared/dist/placement-report.d.ts +7 -0
  47. package/node_modules/@oxygen/shared/dist/placement-report.js +34 -0
  48. package/node_modules/@oxygen/shared/dist/plan-limits-view.d.ts +1 -0
  49. package/node_modules/@oxygen/shared/dist/plan-limits-view.js +1 -0
  50. package/node_modules/@oxygen/shared/dist/pricing-snapshot.generated.d.ts +1 -0
  51. package/node_modules/@oxygen/shared/dist/pricing-snapshot.generated.js +1 -0
  52. package/node_modules/@oxygen/shared/dist/sending-limits.d.ts +1 -0
  53. package/node_modules/@oxygen/shared/dist/sending-limits.js +2 -10
  54. package/node_modules/@oxygen/shared/dist/teammates.js +2 -1
  55. package/node_modules/@oxygen/shared/dist/user-capability-routing.js +87 -2
  56. package/node_modules/@oxygen/shared/dist/version.d.ts +1 -1
  57. package/node_modules/@oxygen/shared/dist/version.generated.d.ts +1 -1
  58. package/node_modules/@oxygen/shared/dist/version.generated.js +1 -1
  59. package/node_modules/@oxygen/shared/dist/version.js +1 -1
  60. package/node_modules/@oxygen/shared/dist/voice-countries.d.ts +66 -0
  61. package/node_modules/@oxygen/shared/dist/voice-countries.js +75 -0
  62. package/package.json +1 -1
@@ -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.779",
3
+ "version": "1.1014.913",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",