@oxygen-agent/cli 1.837.9 → 1.838.1

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.837.9
37
+ Version: 1.838.1
package/dist/index.js CHANGED
@@ -8465,6 +8465,23 @@ fixed scan; watermark_cursor starts a later bounded replay. Consumers must retai
8465
8465
  ...(readOption(options.description) ? { description: readOption(options.description) } : {}),
8466
8466
  },
8467
8467
  }));
8468
+ }))
8469
+ .addCommand(new Command("reconcile-paid-period")
8470
+ .description("Find active subscriptions whose current billing period was paid in Stripe but never had its plan credits minted, and restore them (staff only). Detect-only unless --apply: every repair is proven by a Stripe paid invoice covering that exact period, so it can only return credits the customer already bought. Re-running is safe — an already-granted period is never granted twice.")
8471
+ .option("--organization-id <id>", "Restrict the sweep to one organization. Defaults to every active subscription.")
8472
+ .option("--org-id <id>", "Alias for --organization-id.")
8473
+ .option("--apply", "Mint the missing grants. Without it, report what would be repaired and change nothing.")
8474
+ .option("--json", "Print a JSON envelope.")
8475
+ .action(async (options) => {
8476
+ await handleAsyncAction("billing reconcile-paid-period", options, () => requestOxygen("/api/cli/billing/reconcile-paid-period", {
8477
+ method: "POST",
8478
+ body: {
8479
+ apply: Boolean(options.apply),
8480
+ ...(readOption(options.organizationId) || readOption(options.orgId)
8481
+ ? { organization_id: readOption(options.organizationId) ?? readOption(options.orgId) }
8482
+ : {}),
8483
+ },
8484
+ }));
8468
8485
  }))
8469
8486
  .addCommand(new Command("set-plan")
8470
8487
  .description("Create or update an off-Stripe custom plan for an organization (staff only).")
@@ -420,7 +420,26 @@ export const OXYGEN_CAPABILITY_ROUTES = [
420
420
  gatewayCommands: ["mailboxes list", "domains list", "mailboxes health"],
421
421
  skills: ["oxygen-email-infra", "oxygen-deliverability", "oxygen-sequencer"],
422
422
  endpointSections: ["deliverability", "domains", "egress", "mailboxes", "managed-inboxes"],
423
- intentTerms: ["mailbox", "mailboxes", "sending domain", "dns", "warmup", "deliverability", "placement", "egress ip", "email infrastructure", "managed inbox"],
423
+ intentTerms: [
424
+ "mailbox",
425
+ "mailboxes",
426
+ "sending domain",
427
+ "dns",
428
+ "warmup",
429
+ "deliverability",
430
+ "placement",
431
+ "egress ip",
432
+ "email infrastructure",
433
+ "managed inbox",
434
+ "avatar",
435
+ "profile picture",
436
+ "profile photo",
437
+ "headshot",
438
+ "hosted picture",
439
+ "hosted image",
440
+ "mailbox picture",
441
+ "mailbox photo",
442
+ ],
424
443
  },
425
444
  {
426
445
  id: "connected-linkedin",
@@ -520,6 +539,9 @@ function normalizeIntent(query) {
520
539
  return query.toLowerCase().replace(/[_-]+/g, " ").replace(/\s+/g, " ").trim();
521
540
  }
522
541
  function explicitCapabilityIntent(query) {
542
+ if (isInboxAvatarIntent(query)) {
543
+ return ROUTE_BY_ID.get("sending-infrastructure") ?? null;
544
+ }
523
545
  if (isMailboxDeleteIntent(query)) {
524
546
  return ROUTE_BY_ID.get("sending-infrastructure") ?? null;
525
547
  }
@@ -660,6 +682,13 @@ function recommendationsFor(card, query) {
660
682
  ],
661
683
  };
662
684
  }
685
+ if (card.id === "sending-infrastructure"
686
+ && isInboxAvatarIntent(query)) {
687
+ return {
688
+ tools: [],
689
+ commands: ["managed-inboxes upload-avatar", "senders profiles set-photo"],
690
+ };
691
+ }
663
692
  if (card.primitive === "posts" && isOwnedPostCommentIntent(query)) {
664
693
  return {
665
694
  tools: ["oxygen_publishing_comments", "oxygen_publishing_analytics"],
@@ -839,6 +868,9 @@ function recommendationsFor(card, query) {
839
868
  }
840
869
  return { tools: [...card.gatewayTools], commands: [...card.gatewayCommands] };
841
870
  }
871
+ function isInboxAvatarIntent(query) {
872
+ return /\b(avatar|profile (?:picture|photo)|headshot|hosted (?:picture|image)|mailbox (?:picture|photo))\b/.test(query);
873
+ }
842
874
  function isMutualLinkedInConnectionsIntent(query) {
843
875
  const linkedInContext = /\blinkedin\b|\bprofiles?\b/.test(query);
844
876
  const mutualContext = /\b(mutual|shared|in common)\b.{0,48}\b(connections?|relations?)\b/.test(query)
@@ -1,4 +1,4 @@
1
- export declare const OXYGEN_VERSION = "1.837.9";
1
+ export declare const OXYGEN_VERSION = "1.838.1";
2
2
  export declare const OXYGEN_MINIMUM_CLI_VERSION = "1.181.0";
3
3
  export declare const MANAGED_INBOX_MINIMUM_CLI_VERSION = "1.326.2";
4
4
  export declare const SUPPORT_AGENT_REPLY_MINIMUM_CLI_VERSION = "1.747.0";
@@ -1,4 +1,4 @@
1
- export const OXYGEN_VERSION = "1.837.9";
1
+ export const OXYGEN_VERSION = "1.838.1";
2
2
  // The GLOBAL CLI compatibility floor: the oldest CLI allowed to call any
3
3
  // operational route. Raising it hard-rejects every older CLI from the entire
4
4
  // product, so it obeys one law, enforced by scripts/ci/cli-min-version-gate.mjs:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxygen-agent/cli",
3
- "version": "1.837.9",
3
+ "version": "1.838.1",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",