@oxygen-agent/cli 1.1014.1464 → 1.1014.1597

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 (85) hide show
  1. package/README.md +1 -1
  2. package/dist/command-families/program.js +2 -0
  3. package/dist/command-manifest.js +12 -2
  4. package/dist/commands/budget.js +2 -2
  5. package/dist/commands/capabilities.js +3 -2
  6. package/dist/commands/columns.js +1 -1
  7. package/dist/commands/companies.js +3 -0
  8. package/dist/commands/domains.js +122 -5
  9. package/dist/commands/feedback.js +1 -1
  10. package/dist/commands/feeds.js +34 -17
  11. package/dist/commands/mailboxes.js +19 -9
  12. package/dist/commands/publishing.js +1 -1
  13. package/dist/commands/senders.js +2 -2
  14. package/dist/commands/sequences.js +75 -12
  15. package/dist/commands/subscriptions.d.ts +10 -0
  16. package/dist/commands/subscriptions.js +203 -0
  17. package/dist/commands/tags.js +4 -4
  18. package/dist/customer-operation-commands.js +17 -0
  19. package/dist/mailbox-fleet-output.d.ts +3 -0
  20. package/dist/mailbox-fleet-output.js +80 -0
  21. package/dist/native-chat-host.d.ts +2 -0
  22. package/dist/native-chat-host.js +6 -0
  23. package/dist/workspace-placement-commands.js +67 -2
  24. package/node_modules/@oxygen/shared/dist/capability-discovery.d.ts +9 -0
  25. package/node_modules/@oxygen/shared/dist/capability-discovery.js +59 -11
  26. package/node_modules/@oxygen/shared/dist/contracts/browser-operations.js +2 -2
  27. package/node_modules/@oxygen/shared/dist/contracts/customer-operations.js +18 -0
  28. package/node_modules/@oxygen/shared/dist/contracts/guided-activation.js +4 -4
  29. package/node_modules/@oxygen/shared/dist/contracts/native-chat.d.ts +120 -0
  30. package/node_modules/@oxygen/shared/dist/contracts/native-chat.js +35 -0
  31. package/node_modules/@oxygen/shared/dist/contracts/sender-limits.d.ts +9 -0
  32. package/node_modules/@oxygen/shared/dist/contracts/sender-limits.js +6 -1
  33. package/node_modules/@oxygen/shared/dist/contracts/sequence-list.d.ts +5 -0
  34. package/node_modules/@oxygen/shared/dist/contracts/sequence-list.js +2 -1
  35. package/node_modules/@oxygen/shared/dist/contracts/signal-search-compatibility.d.ts +78 -0
  36. package/node_modules/@oxygen/shared/dist/contracts/signal-search-compatibility.js +32 -0
  37. package/node_modules/@oxygen/shared/dist/dnc-rules.js +14 -0
  38. package/node_modules/@oxygen/shared/dist/email-delivery.d.ts +150 -0
  39. package/node_modules/@oxygen/shared/dist/email-delivery.js +246 -0
  40. package/node_modules/@oxygen/shared/dist/email-dsn.d.ts +1 -0
  41. package/node_modules/@oxygen/shared/dist/email-dsn.js +9 -6
  42. package/node_modules/@oxygen/shared/dist/email-health-summary.d.ts +29 -0
  43. package/node_modules/@oxygen/shared/dist/email-health-summary.js +28 -0
  44. package/node_modules/@oxygen/shared/dist/email-subscriptions.d.ts +50 -0
  45. package/node_modules/@oxygen/shared/dist/email-subscriptions.js +80 -0
  46. package/node_modules/@oxygen/shared/dist/email-unsubscribe-token.d.ts +28 -0
  47. package/node_modules/@oxygen/shared/dist/email-unsubscribe-token.js +47 -0
  48. package/node_modules/@oxygen/shared/dist/error-redaction.d.ts +4 -16
  49. package/node_modules/@oxygen/shared/dist/error-redaction.js +8 -17
  50. package/node_modules/@oxygen/shared/dist/guided-activation.d.ts +15 -1
  51. package/node_modules/@oxygen/shared/dist/guided-activation.js +3 -1
  52. package/node_modules/@oxygen/shared/dist/linkedin-sequences.d.ts +2 -0
  53. package/node_modules/@oxygen/shared/dist/mailbox-standby-rollout.d.ts +5 -0
  54. package/node_modules/@oxygen/shared/dist/mailbox-standby-rollout.js +9 -0
  55. package/node_modules/@oxygen/shared/dist/mailbox-standby.d.ts +43 -0
  56. package/node_modules/@oxygen/shared/dist/mailbox-standby.js +52 -0
  57. package/node_modules/@oxygen/shared/dist/native-chat-discovery.d.ts +5 -0
  58. package/node_modules/@oxygen/shared/dist/native-chat-discovery.js +27 -0
  59. package/node_modules/@oxygen/shared/dist/native-chat.d.ts +124 -0
  60. package/node_modules/@oxygen/shared/dist/native-chat.js +1 -0
  61. package/node_modules/@oxygen/shared/dist/onboarding-plays.d.ts +14 -3
  62. package/node_modules/@oxygen/shared/dist/onboarding-plays.js +26 -13
  63. package/node_modules/@oxygen/shared/dist/onboarding-research.d.ts +11 -0
  64. package/node_modules/@oxygen/shared/dist/onboarding-research.js +8 -0
  65. package/node_modules/@oxygen/shared/dist/product-analytics-events.d.ts +6 -0
  66. package/node_modules/@oxygen/shared/dist/product-analytics-events.js +6 -0
  67. package/node_modules/@oxygen/shared/dist/select-options.js +1 -0
  68. package/node_modules/@oxygen/shared/dist/sequence-failures.js +6 -5
  69. package/node_modules/@oxygen/shared/dist/sequences.d.ts +8 -0
  70. package/node_modules/@oxygen/shared/dist/sequences.js +44 -2
  71. package/node_modules/@oxygen/shared/dist/tags.d.ts +7 -3
  72. package/node_modules/@oxygen/shared/dist/tags.js +31 -6
  73. package/node_modules/@oxygen/shared/dist/version.generated.d.ts +1 -1
  74. package/node_modules/@oxygen/shared/dist/version.generated.js +1 -1
  75. package/node_modules/@oxygen/shared/dist/workspace-placement-bulk.d.ts +80 -0
  76. package/node_modules/@oxygen/shared/dist/workspace-placement-bulk.js +68 -0
  77. package/node_modules/@oxygen/shared/dist/workspace-placement-view.d.ts +2 -1
  78. package/node_modules/@oxygen/shared/dist/workspace-placement.d.ts +11 -1
  79. package/node_modules/@oxygen/shared/dist/workspace-placement.js +15 -4
  80. package/node_modules/@oxygen/shared/dist/write-rollout.d.ts +11 -0
  81. package/node_modules/@oxygen/shared/dist/write-rollout.js +59 -0
  82. package/node_modules/@oxygen/workflows/dist/graph/manifest-schema.d.ts +176 -2
  83. package/node_modules/@oxygen/workflows/dist/graph/manifest-schema.js +50 -1
  84. package/node_modules/@oxygen/workflows/dist/index.js +108 -3
  85. package/package.json +1 -1
@@ -1114,7 +1114,11 @@ export function lintWorkflowCodeSourceSafety(source, path = "$.source") {
1114
1114
  issues.push({ path, code: "empty_function_source", message: "Typed code source cannot be empty." });
1115
1115
  return issues;
1116
1116
  }
1117
- const scannable = stripCommentsAndStrings(source);
1117
+ const scan = stripCommentsAndStrings(source);
1118
+ if (scan.ambiguousSlash) {
1119
+ return [{ path, code: "unsafe_code_source", message: "Typed code source has an ambiguous slash after a brace. Parenthesize the expression or separate statements with a semicolon." }];
1120
+ }
1121
+ const scannable = scan.source;
1118
1122
  for (const entry of UNSAFE_WORKFLOW_CODE_SOURCE_PATTERNS) {
1119
1123
  if (!entry.pattern.test(scannable))
1120
1124
  continue;
@@ -1695,6 +1699,15 @@ export function validatePureFunctionSource(source, path, add) {
1695
1699
  function stripCommentsAndStrings(source) {
1696
1700
  const out = [];
1697
1701
  const stack = [{ mode: "code", braces: 0 }];
1702
+ const expressionKeywords = new Set(["return", "throw", "case", "delete", "void", "typeof", "yield", "await", "in", "instanceof", "else", "do"]);
1703
+ const controlKeywords = new Set(["if", "while", "for", "with", "switch", "catch"]);
1704
+ const statementBlockKeywords = new Set(["else", "do", "try", "finally", "catch"]);
1705
+ const braceKinds = [];
1706
+ const controlParens = [];
1707
+ let regexAllowed = true;
1708
+ let ambiguousAfterBrace = false;
1709
+ let previousToken = "";
1710
+ let previousWordEnd = 0;
1698
1711
  let i = 0;
1699
1712
  const n = source.length;
1700
1713
  while (i < n) {
@@ -1708,11 +1721,15 @@ function stripCommentsAndStrings(source) {
1708
1721
  }
1709
1722
  if (ch === "`") {
1710
1723
  stack.pop();
1724
+ regexAllowed = false;
1725
+ previousToken = "literal";
1711
1726
  i += 1;
1712
1727
  continue;
1713
1728
  }
1714
1729
  if (ch === "$" && next === "{") {
1715
1730
  stack.push({ mode: "code", braces: 0 });
1731
+ regexAllowed = true;
1732
+ previousToken = "";
1716
1733
  out.push(" ");
1717
1734
  i += 2;
1718
1735
  continue;
@@ -1733,6 +1750,39 @@ function stripCommentsAndStrings(source) {
1733
1750
  i = Math.min(i + 2, n);
1734
1751
  continue;
1735
1752
  }
1753
+ if (ch === "/" && ambiguousAfterBrace)
1754
+ return { source: out.join(""), ambiguousSlash: true };
1755
+ if (!/\s/.test(ch))
1756
+ ambiguousAfterBrace = false;
1757
+ // Regex quotes must not make the string scanner swallow executable code.
1758
+ if (ch === "/" && regexAllowed) {
1759
+ let end = i + 1;
1760
+ let characterClass = false;
1761
+ while (end < n && source[end] !== "\n" && source[end] !== "\r") {
1762
+ const current = source[end];
1763
+ if (current === "\\") {
1764
+ end += 2;
1765
+ continue;
1766
+ }
1767
+ if (current === "[")
1768
+ characterClass = true;
1769
+ else if (current === "]")
1770
+ characterClass = false;
1771
+ else if (current === "/" && !characterClass)
1772
+ break;
1773
+ end += 1;
1774
+ }
1775
+ if (end < n && source[end] === "/") {
1776
+ end += 1;
1777
+ while (end < n && /[a-z]/i.test(source[end]))
1778
+ end += 1;
1779
+ out.push('""');
1780
+ i = end;
1781
+ regexAllowed = false;
1782
+ previousToken = "literal";
1783
+ continue;
1784
+ }
1785
+ }
1736
1786
  if (ch === '"' || ch === "'") {
1737
1787
  const quote = ch;
1738
1788
  i += 1;
@@ -1740,6 +1790,8 @@ function stripCommentsAndStrings(source) {
1740
1790
  i += source[i] === "\\" ? 2 : 1;
1741
1791
  i += 1;
1742
1792
  out.push('""');
1793
+ regexAllowed = false;
1794
+ previousToken = "literal";
1743
1795
  continue;
1744
1796
  }
1745
1797
  if (ch === "`") {
@@ -1747,12 +1799,60 @@ function stripCommentsAndStrings(source) {
1747
1799
  i += 1;
1748
1800
  continue;
1749
1801
  }
1802
+ if (/[a-z_$]/i.test(ch)) {
1803
+ const start = i;
1804
+ while (i < n && /[\w$]/.test(source[i]))
1805
+ i += 1;
1806
+ const word = source.slice(start, i);
1807
+ out.push(word);
1808
+ previousToken = previousToken === "." ? "identifier" : word;
1809
+ previousWordEnd = i;
1810
+ regexAllowed = expressionKeywords.has(previousToken);
1811
+ continue;
1812
+ }
1750
1813
  if (ch === "}" && top.braces === 0 && stack.length > 1) {
1751
1814
  stack.pop();
1752
1815
  out.push(" ");
1753
1816
  i += 1;
1754
1817
  continue;
1755
1818
  }
1819
+ if (ch === "=" && next === ">") {
1820
+ out.push("=>");
1821
+ previousToken = "=>";
1822
+ regexAllowed = true;
1823
+ i += 2;
1824
+ continue;
1825
+ }
1826
+ if (ch === "{") {
1827
+ const enclosing = braceKinds[braceKinds.length - 1];
1828
+ let kind = "unknown";
1829
+ if ((previousToken === ")" && regexAllowed) || statementBlockKeywords.has(previousToken)
1830
+ || previousToken === ";" || (previousToken === "{" && (enclosing === "statement" || enclosing === "function")))
1831
+ kind = "statement";
1832
+ else if (previousToken === "=>")
1833
+ kind = "function";
1834
+ else if (["=", "(", "[", ","].includes(previousToken) || (previousToken === ":" && enclosing === "object")
1835
+ || (previousToken === "return" && !/[\r\n]/.test(source.slice(previousWordEnd, i))))
1836
+ kind = "object";
1837
+ braceKinds.push(kind);
1838
+ }
1839
+ if (ch === "(")
1840
+ controlParens.push(controlKeywords.has(previousToken));
1841
+ if (ch === ")")
1842
+ regexAllowed = controlParens.pop() ?? false;
1843
+ else if (ch === "}") {
1844
+ const kind = braceKinds.pop();
1845
+ regexAllowed = kind === "statement";
1846
+ // Other brace forms need a parser to distinguish declarations from expressions.
1847
+ ambiguousAfterBrace = kind === "unknown";
1848
+ }
1849
+ else if (!/\s/.test(ch)) {
1850
+ if (!((ch === "+" || ch === "-") && (next === ch || previousToken === ch))) {
1851
+ regexAllowed = /[([{,:;=!?&|+*%^~<>\/-]/.test(ch);
1852
+ }
1853
+ }
1854
+ if (!/\s/.test(ch))
1855
+ previousToken = ch;
1756
1856
  if (ch === "{")
1757
1857
  top.braces += 1;
1758
1858
  else if (ch === "}")
@@ -1760,7 +1860,7 @@ function stripCommentsAndStrings(source) {
1760
1860
  out.push(ch);
1761
1861
  i += 1;
1762
1862
  }
1763
- return out.join("");
1863
+ return { source: out.join(""), ambiguousSlash: false };
1764
1864
  }
1765
1865
  function validateRecipeBundleSafety(source, path, add) {
1766
1866
  if (!source.trim()) {
@@ -1770,7 +1870,12 @@ function validateRecipeBundleSafety(source, path, add) {
1770
1870
  // Scan only real code: comments and string literals are blanked first so a
1771
1871
  // token that merely appears in prose or data (e.g. "eval" in a comment) does
1772
1872
  // not trip the lint, while genuine calls survive.
1773
- const scannable = stripCommentsAndStrings(source);
1873
+ const scan = stripCommentsAndStrings(source);
1874
+ if (scan.ambiguousSlash) {
1875
+ add(path, "unsafe_recipe_bundle", "Durable recipe bundle has an ambiguous slash after a brace. Parenthesize the expression or separate statements with a semicolon.");
1876
+ return;
1877
+ }
1878
+ const scannable = scan.source;
1774
1879
  for (const entry of UNSAFE_RECIPE_BUNDLE_PATTERNS) {
1775
1880
  if (entry.pattern.test(scannable)) {
1776
1881
  add(path, "unsafe_recipe_bundle", `Durable recipe bundle cannot reference '${entry.token}'. Use ctx.tools.run(), ctx.step(), ctx.now(), or ctx.uuid() instead.`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxygen-agent/cli",
3
- "version": "1.1014.1464",
3
+ "version": "1.1014.1597",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",