@oxygen-agent/cli 1.1011.607 → 1.1011.626
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
package/dist/http-client.js
CHANGED
|
@@ -135,7 +135,22 @@ path, options = {}) {
|
|
|
135
135
|
finally {
|
|
136
136
|
timeout.cancel();
|
|
137
137
|
}
|
|
138
|
-
const envelope = await readEnvelope(response)
|
|
138
|
+
const envelope = await readEnvelope(response).catch((error) => {
|
|
139
|
+
// A gateway answered instead of OXYGEN: the request may still be running or
|
|
140
|
+
// may have finished. Say so, with what is needed to check, instead of
|
|
141
|
+
// calling the gateway's page an invalid envelope.
|
|
142
|
+
if (!(error instanceof OxygenError) || ![502, 503, 504].includes(response.status))
|
|
143
|
+
throw error;
|
|
144
|
+
throw new OxygenError("invalid_response", `Oxygen API did not answer in time (HTTP ${response.status}); the outcome is unknown.`, {
|
|
145
|
+
details: {
|
|
146
|
+
status: response.status,
|
|
147
|
+
trace_id: response.headers.get("x-oxygen-trace-id") ?? traceId,
|
|
148
|
+
...(idempotencyKey ? { idempotency_key: idempotencyKey } : {}),
|
|
149
|
+
...(method === "GET" ? {} : { next_step: UNCONFIRMED_WRITE_NEXT_STEP }),
|
|
150
|
+
},
|
|
151
|
+
exitCode: 1,
|
|
152
|
+
});
|
|
153
|
+
});
|
|
139
154
|
const compatibility = readEnvelopeCompatibility(envelope);
|
|
140
155
|
const failed = !response.ok || !envelope.ok;
|
|
141
156
|
try {
|
package/dist/index.js
CHANGED
|
@@ -7227,7 +7227,7 @@ fixed scan; watermark_cursor starts a later bounded replay. Consumers must retai
|
|
|
7227
7227
|
.alias("get")
|
|
7228
7228
|
.description("Describe a workspace table and its columns. Add --stats for row count and per-column fill rates (0 credits). Next: `tools search --for-table <table>` lists what these columns can be enriched with and what each costs per row (0 credits).")
|
|
7229
7229
|
.argument("<table>", "Table id or slug.")
|
|
7230
|
-
.option("--include-archived", "Include archived columns.")
|
|
7230
|
+
.option("--include-archived", "Include archived columns, and read a table that is archived, scheduled for deletion or being purged.")
|
|
7231
7231
|
.option("--stats", "Include stats.rowCount (also summary.rowCount) and per-column fill rates. Row count is exact; above 100 rows fill rates use a 100-row sample (stats.statsSampled). For whole-table fill rates on a bigger list use `tables preview <table> --summary-only` \u2014 exact up to 20,000 rows, 2,000-row sample above. 0 credits.")
|
|
7232
7232
|
.option("--json", "Print a JSON envelope.")
|
|
7233
7233
|
.action(async (table, options) => {
|
|
@@ -7295,9 +7295,9 @@ fixed scan; watermark_cursor starts a later bounded replay. Consumers must retai
|
|
|
7295
7295
|
}));
|
|
7296
7296
|
}))
|
|
7297
7297
|
.addCommand(new Command("delete")
|
|
7298
|
-
.description("Delete workspace tables: archives now and schedules the physical purge (default 14 days; restorable via `tables restore` until then). --now purges immediately and permanently — it previews and refuses without --yes.")
|
|
7298
|
+
.description("Delete workspace tables: archives now and schedules the physical purge (default 14 days; restorable via `tables restore` until then). --now purges immediately and permanently — it previews and refuses without --yes. A table with a large history answers `purging` and finishes in the background. Free — 0 Oxygen credits.")
|
|
7299
7299
|
.argument("<tables...>", "Table ids or slugs.")
|
|
7300
|
-
.option("--now", "Purge immediately instead of scheduling. Irreversible; single table only.")
|
|
7300
|
+
.option("--now", "Purge immediately instead of scheduling. Irreversible; single table only. A large table finishes in the background.")
|
|
7301
7301
|
.option("--yes", "Approve the immediate purge previewed by --now.")
|
|
7302
7302
|
.option("--purge-after <days>", "Days until the scheduled purge runs. Defaults to 14; 0 purges on the next background sweep (sweeps visit each workspace every few minutes).")
|
|
7303
7303
|
.option("--reason <text>", "Recorded with the delete for the audit trail.")
|
|
@@ -11210,7 +11210,7 @@ Examples:
|
|
|
11210
11210
|
program
|
|
11211
11211
|
.command("limits")
|
|
11212
11212
|
.description("Plan-tier limits, spend-safety defaults, per-channel sending limits, and storage capacity posture.")
|
|
11213
|
-
.addHelpText("after", "\nRun `oxygen limits show --json` to see your current plan's API and webhook rates, Table and workspace storage headroom, and the next scheduled change. The $999 and $1,999 rows-per-Table increases remain held until capacity testing passes.\n")
|
|
11213
|
+
.addHelpText("after", "\nRun `oxygen limits show --json` to see your current plan's API and webhook rates, Table and workspace storage headroom, and the next scheduled change; `--section capacity` returns only storage, including which Table is full. The $999 and $1,999 rows-per-Table increases remain held until capacity testing passes.\n")
|
|
11214
11214
|
.addCommand(addContractFlags(new Command("show")
|
|
11215
11215
|
.description("Compare every plan size: price, monthly credits, volume bonus and price per 100 credits (`plan_bands`). Show your plan band and its limits beside every plan size's (API rate, webhook ingress, storage, import file size, columns per auto-run, signals feed, spend defaults incl. Agent and Copilot caps, fastest workflow schedule), the per-channel sending limits every plan shares (emails per mailbox, WhatsApp, LinkedIn, calls) and its workflow Code-step and run-attempt limits, plus Tables capacity usage naming the largest Table. Each plan size's storage says whether it is in force, scheduled to change on a date, or awaiting its rows-per-Table capacity test, with the values it moves to. `spend_safety_defaults.enterprise_agent_run_default` gives Enterprise the $1,999 band’s in-force Agent default with no contract override; `agent_run_approved_max_credits` is the maximum for an explicitly approved higher run. `spend_safety_defaults.applies_to` says what each spend default bounds: an unattended trigger delivery, a table auto-run batch, one Agent run, or the attended Copilot. `web_url` opens the same view in the web app (Settings → Plan limits), including any scheduled change. Read-only; spends no credits. Recovery: https://oxygen-agent.com/docs/safety/billing."), LIMITS_READ_QUERY_CONTRACT)
|
|
11216
11216
|
.option("--json", "Print a JSON envelope.")
|
|
@@ -17750,7 +17750,7 @@ Examples:
|
|
|
17750
17750
|
});
|
|
17751
17751
|
})));
|
|
17752
17752
|
program.addCommand(new Command("mailboxes")
|
|
17753
|
-
.description("
|
|
17753
|
+
.description("Connect customer-owned Gmail/Microsoft 365 inboxes with `oxygen mailboxes connect-oauth --vendor composio` for mail history in Unibox and business activity in CRM; read and control progress with `oxygen mailboxes sync`. Also operate the native email sending pool: register/refresh Google/Microsoft mailboxes (including Microsoft SMTP transport and secure local credential-file transfer), pause, disable or delete inboxes, connect EmailGuard monitoring, and inspect/control OXYGEN Warm-up. Fresh managed InboxKit Google/Microsoft/Azure orders activate exact-scope warm-up automatically after provisioning under their approved default-on add-on. Google reuses the managed credential just in time; Microsoft/Azure uses native export. Standalone warm-up plans and credit caps are for BYOK/imported mailboxes, managed opt-outs, or later separate enrollment. OXYGEN Warm-up never owns campaign dispatch. Every inbox here always belongs to a sender profile (the person it sends as) — list, create, and attach those with `oxygen senders profiles`. Safe import preflight: run `oxygen mailboxes compatibility --catalog-only --json`, then `oxygen mailboxes import --file <path> --validate-only --json` (add the credential source flags shown by import help when the file contains credentials).")
|
|
17754
17754
|
.addCommand(new Command("list")
|
|
17755
17755
|
.description("List the org's sending mailboxes with provider, status, warmup state, source (managed = bought through Oxygen, byok = bring-your-own), worker-owned connectionRepair and warmupRepair state, and a pool overview (including counts by source). Read each mailbox's warmupTruth for warm-up (state, last_send, pause, dispatch, next_action with the exact command); warmupState is only the stored rail token and reads `error` for a provider-paused seat. mode=automatic means OXYGEN owns the next bounded retry — do not ask for browser consent or disable/re-enable an existing warm-up seat. To see only Google/Microsoft mailboxes that still need OAuth connection, including attempt budgets and manual remedies, use `oxygen mailboxes oauth-health --json`. Read the fleet from `summary` — `summary.by_warmup`, `by_status`, `by_provider`, `by_auth_mode`, `by_transport`, and `by_source` already aggregate every mailbox, so you never need to iterate the `mailboxes` array to count them. `summary.warmup` adds the normalized pool counts — by_truth_state, by_next_action, enrolled, stalled (enrolled with a measured zero warm-up sends), and needs_action — and `--warmup <states>`, `--next-action <codes>`, and `--stalled` narrow the list to exactly those mailboxes, so \"which of my inboxes are not sending\" is one command rather than a local transform over every row. Without `--json` this prints a readable pool: the counts, then every mailbox that owes an action with its cause and the exact command to run.")
|
|
17756
17756
|
.option("--status <status>", "Filter by status: active, paused, disabled, or provisioning (ordered, still being set up).")
|
|
@@ -18112,7 +18112,7 @@ Examples:
|
|
|
18112
18112
|
});
|
|
18113
18113
|
}))
|
|
18114
18114
|
.addCommand(new Command("sync")
|
|
18115
|
-
.description("Read or control full Inbox, Sent and archive import for Gmail or Microsoft 365. History sync and CRM analysis are included in the mailbox’s 100-credit monthly connection. Spam, trash and drafts are excluded. Without --action, this is a free progress read; controls preview until --approved. Disconnect keeps
|
|
18115
|
+
.description("Read or control full Inbox, Sent and archive import for Gmail or Microsoft 365. History sync and CRM analysis are included in the mailbox’s 100-credit monthly connection. Spam, trash and drafts are excluded. Without --action, this is a free progress read; controls preview until --approved. Disconnect keeps mail and CRM records, stops sync/sends and future mailbox commitment renewals, with no current-period refund. Paid seats and add-ons retain their own billing contracts.")
|
|
18116
18116
|
.argument("<mailbox>", "Mailbox ID or exact email address.")
|
|
18117
18117
|
.option("--action <action>", "start, pause, resume or disconnect; omit to read progress.")
|
|
18118
18118
|
.option("--approved", "Apply the reviewed control; default is preview.")
|
|
@@ -18124,9 +18124,9 @@ Examples:
|
|
|
18124
18124
|
: requestOxygen(`/api/cli/mailboxes/sync?${new URLSearchParams({ mailbox }).toString()}`));
|
|
18125
18125
|
}))
|
|
18126
18126
|
.addCommand(new Command("connect-oauth")
|
|
18127
|
-
.description("Connect Gmail/Microsoft 365 with --vendor composio to import all mail into Unibox and business activity into CRM. Each connected own mailbox costs 100 credits/month including history, sync and analysis;
|
|
18127
|
+
.description("Connect Gmail/Microsoft 365 with --vendor composio to import all mail into Unibox and business activity into CRM. Each connected own mailbox costs 100 credits/month including history, sync and analysis; previews cost 0, with no extra execution fee. Managed OAuth requires provider rollout readiness and exact registered addresses, max 10. Use mailboxes sync for progress and pause/resume/disconnect. Composio uses individual owner consent only. Native --vendor oxygen retains its existing polling; full history/CRM requires managed reconnection. Quote any mailbox count with billing estimate --mailboxes <n> --json. Warm-up retains its existing eligibility and pricing. Preview by default; pass --approved only after reviewing exact candidates. --vendor oxygen requires an exact address list and never discovers a domain directory. For --vendor oxygen only, Microsoft supports --authorization-mode tenant (one administrator approval, up to 500 exact selected addresses, recommended for dedicated sending tenants) or individual (one account sign-in per mailbox, max 10 per run, recommended for ordinary company/personal mailboxes). For Microsoft's built-in roles, tenant mode requires a Global Administrator or Privileged Role Administrator because it requests the Microsoft Graph application Mail.Send and Mail.Read permissions; Application Administrator and Cloud Application Administrator cannot consent to Microsoft Graph application roles. Microsoft's application grant is tenant-wide at the provider; OXYGEN—not Microsoft—enforces the selected-address boundary at verification and send time unless the tenant separately configures Exchange Application RBAC. For non-managed Microsoft mailboxes, native-send approval does not authorize OXYGEN Warm-up: every mailbox still needs its own `mailboxes warmup microsoft` Outlook consent before standalone enrollment. Connecting authorization does not change whether a mailbox is active or disabled. Google uses individual OAuth. Source tokens, passwords, authenticator seeds, and one-time codes never transfer. Managed authorization paths remain available through their vendor options.")
|
|
18128
18128
|
.addHelpText("after", "\nDocs: https://oxygen-agent.com/docs/providers/mailboxes\n")
|
|
18129
|
-
.option("--provider <provider>", "Mailbox provider
|
|
18129
|
+
.option("--provider <provider>", "Mailbox provider: google or microsoft.")
|
|
18130
18130
|
.option("--vendor <vendor>", "Authorization path: composio for customer-owned Gmail/Microsoft 365 with managed consent, history and CRM; oxygen for native/tenant consent; zapmail (default) or inboxkit for provisioned inboxes.")
|
|
18131
18131
|
.option("--mailboxes <list>", "Comma-separated exact mailbox addresses. Required for vendor=composio (max 10) or vendor=oxygen (tenant mode max 500; individual mode max 10).")
|
|
18132
18132
|
.option("--authorization-mode <mode>", "vendor=oxygen only: auto, tenant, or individual. Tenant is Microsoft-only and never scans the directory.")
|
|
@@ -18135,7 +18135,7 @@ Examples:
|
|
|
18135
18135
|
.option("--connection <id>", "Zapmail connection id. Defaults to the org's active Zapmail connection.")
|
|
18136
18136
|
.option("--status <id>", "Poll a previously started Zapmail, InboxKit, or OXYGEN direct-consent run.")
|
|
18137
18137
|
.option("--dry-run", "Preview the requested mailbox/domain scope and external writes without changing vendor or ledger state. This is the default for starts; a successful preview can still have zero eligible mailboxes, so check InboxKit candidates with oauth-health before approval.")
|
|
18138
|
-
.option("--approved", "Start the reviewed authorization run.
|
|
18138
|
+
.option("--approved", "Start the reviewed authorization run. Composio creates an individual consent link for each owner, who must open it and approve access with Google or Microsoft. Native vendor=oxygen records expiring browser steps for the selected owner or tenant administrator. Starting a run does not grant mail access.")
|
|
18139
18139
|
.option("--json", "Print a JSON envelope.")
|
|
18140
18140
|
.action(async (options) => {
|
|
18141
18141
|
await handleAsyncAction("mailboxes connect-oauth", options, () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const OXYGEN_BUILD_VERSION = "1.1011.
|
|
1
|
+
export declare const OXYGEN_BUILD_VERSION = "1.1011.626";
|
|
@@ -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.1011.
|
|
2
|
+
export const OXYGEN_BUILD_VERSION = "1.1011.626";
|