@oxygen-agent/cli 1.1014.136 → 1.1014.619
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 +1 -1
- package/dist/admin-primary-providers-render.js +27 -19
- package/dist/cli-output.d.ts +12 -0
- package/dist/cli-output.js +395 -0
- package/dist/cli-paths.d.ts +1 -0
- package/dist/cli-paths.js +3 -0
- package/dist/cli-profile-context.d.ts +3 -0
- package/dist/cli-profile-context.js +13 -0
- package/dist/command-manifest.d.ts +15 -0
- package/dist/command-manifest.js +23 -1
- package/dist/command-support.d.ts +438 -0
- package/dist/command-support.js +1610 -0
- package/dist/commands/action-column.d.ts +3 -0
- package/dist/commands/action-column.js +43 -0
- package/dist/commands/activation.d.ts +3 -0
- package/dist/commands/activation.js +24 -0
- package/dist/commands/admin.d.ts +3 -0
- package/dist/commands/admin.js +347 -0
- package/dist/commands/ads.d.ts +3 -0
- package/dist/commands/ads.js +62 -0
- package/dist/commands/agent.d.ts +3 -0
- package/dist/commands/agent.js +274 -0
- package/dist/commands/api-keys.d.ts +3 -0
- package/dist/commands/api-keys.js +77 -0
- package/dist/commands/approvals.d.ts +3 -0
- package/dist/commands/approvals.js +518 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.js +230 -0
- package/dist/commands/billing.d.ts +3 -0
- package/dist/commands/billing.js +357 -0
- package/dist/commands/blueprints.d.ts +3 -0
- package/dist/commands/blueprints.js +312 -0
- package/dist/commands/budget.d.ts +3 -0
- package/dist/commands/budget.js +55 -0
- package/dist/commands/callables.d.ts +3 -0
- package/dist/commands/callables.js +111 -0
- package/dist/commands/capabilities.d.ts +3 -0
- package/dist/commands/capabilities.js +44 -0
- package/dist/commands/cells.d.ts +3 -0
- package/dist/commands/cells.js +94 -0
- package/dist/commands/columns.d.ts +3 -0
- package/dist/commands/columns.js +1628 -0
- package/dist/commands/commands.d.ts +3 -0
- package/dist/commands/commands.js +45 -0
- package/dist/commands/comments.d.ts +3 -0
- package/dist/commands/comments.js +188 -0
- package/dist/commands/companies.d.ts +3 -0
- package/dist/commands/companies.js +312 -0
- package/dist/commands/connections.d.ts +3 -0
- package/dist/commands/connections.js +39 -0
- package/dist/commands/context.d.ts +3 -0
- package/dist/commands/context.js +170 -0
- package/dist/commands/copilot.d.ts +3 -0
- package/dist/commands/copilot.js +565 -0
- package/dist/commands/crm.d.ts +3 -0
- package/dist/commands/crm.js +1672 -0
- package/dist/commands/custom-integrations.d.ts +3 -0
- package/dist/commands/custom-integrations.js +140 -0
- package/dist/commands/dashboards.d.ts +3 -0
- package/dist/commands/dashboards.js +240 -0
- package/dist/commands/db.d.ts +3 -0
- package/dist/commands/db.js +190 -0
- package/dist/commands/deliverability.d.ts +3 -0
- package/dist/commands/deliverability.js +90 -0
- package/dist/commands/directory.d.ts +3 -0
- package/dist/commands/directory.js +101 -0
- package/dist/commands/domains.d.ts +3 -0
- package/dist/commands/domains.js +604 -0
- package/dist/commands/egress.d.ts +3 -0
- package/dist/commands/egress.js +130 -0
- package/dist/commands/email.d.ts +3 -0
- package/dist/commands/email.js +49 -0
- package/dist/commands/engagement.d.ts +3 -0
- package/dist/commands/engagement.js +189 -0
- package/dist/commands/enrich-column.d.ts +3 -0
- package/dist/commands/enrich-column.js +149 -0
- package/dist/commands/enrichment.d.ts +3 -0
- package/dist/commands/enrichment.js +49 -0
- package/dist/commands/feedback.d.ts +3 -0
- package/dist/commands/feedback.js +96 -0
- package/dist/commands/feeds.d.ts +3 -0
- package/dist/commands/feeds.js +486 -0
- package/dist/commands/find.d.ts +3 -0
- package/dist/commands/find.js +159 -0
- package/dist/commands/followers.d.ts +3 -0
- package/dist/commands/followers.js +39 -0
- package/dist/commands/formulas.d.ts +3 -0
- package/dist/commands/formulas.js +43 -0
- package/dist/commands/home.d.ts +3 -0
- package/dist/commands/home.js +22 -0
- package/dist/commands/inbox.d.ts +3 -0
- package/dist/commands/inbox.js +779 -0
- package/dist/commands/integrations.d.ts +3 -0
- package/dist/commands/integrations.js +290 -0
- package/dist/commands/knowledge.d.ts +3 -0
- package/dist/commands/knowledge.js +874 -0
- package/dist/commands/lead-sourcing.d.ts +3 -0
- package/dist/commands/lead-sourcing.js +52 -0
- package/dist/commands/limits.d.ts +3 -0
- package/dist/commands/limits.js +54 -0
- package/dist/commands/linkedin.d.ts +3 -0
- package/dist/commands/linkedin.js +275 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.js +347 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.js +12 -0
- package/dist/commands/mailboxes.d.ts +3 -0
- package/dist/commands/mailboxes.js +1290 -0
- package/dist/commands/managed-inboxes.d.ts +3 -0
- package/dist/commands/managed-inboxes.js +361 -0
- package/dist/commands/messages.d.ts +3 -0
- package/dist/commands/messages.js +78 -0
- package/dist/commands/notetaker.d.ts +3 -0
- package/dist/commands/notetaker.js +79 -0
- package/dist/commands/observability.d.ts +3 -0
- package/dist/commands/observability.js +125 -0
- package/dist/commands/orgs.d.ts +3 -0
- package/dist/commands/orgs.js +237 -0
- package/dist/commands/people.d.ts +3 -0
- package/dist/commands/people.js +353 -0
- package/dist/commands/posts.d.ts +3 -0
- package/dist/commands/posts.js +139 -0
- package/dist/commands/profiles.d.ts +3 -0
- package/dist/commands/profiles.js +250 -0
- package/dist/commands/projects.d.ts +3 -0
- package/dist/commands/projects.js +94 -0
- package/dist/commands/prompts.d.ts +3 -0
- package/dist/commands/prompts.js +84 -0
- package/dist/commands/publishing.d.ts +3 -0
- package/dist/commands/publishing.js +1419 -0
- package/dist/commands/recipes.d.ts +3 -0
- package/dist/commands/recipes.js +120 -0
- package/dist/commands/reviews.d.ts +3 -0
- package/dist/commands/reviews.js +75 -0
- package/dist/commands/rows.d.ts +3 -0
- package/dist/commands/rows.js +27 -0
- package/dist/commands/runs.d.ts +3 -0
- package/dist/commands/runs.js +37 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.js +182 -0
- package/dist/commands/senders.d.ts +3 -0
- package/dist/commands/senders.js +393 -0
- package/dist/commands/sequences.d.ts +3 -0
- package/dist/commands/sequences.js +2322 -0
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.js +109 -0
- package/dist/commands/signals.d.ts +3 -0
- package/dist/commands/signals.js +289 -0
- package/dist/commands/signup-leads.d.ts +3 -0
- package/dist/commands/signup-leads.js +46 -0
- package/dist/commands/skills.d.ts +3 -0
- package/dist/commands/skills.js +50 -0
- package/dist/commands/sourcing.d.ts +3 -0
- package/dist/commands/sourcing.js +27 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.js +51 -0
- package/dist/commands/supabase.d.ts +3 -0
- package/dist/commands/supabase.js +128 -0
- package/dist/commands/support.d.ts +3 -0
- package/dist/commands/support.js +651 -0
- package/dist/commands/suppressions.d.ts +3 -0
- package/dist/commands/suppressions.js +577 -0
- package/dist/commands/table-ingestions.d.ts +3 -0
- package/dist/commands/table-ingestions.js +145 -0
- package/dist/commands/table-runs.d.ts +3 -0
- package/dist/commands/table-runs.js +277 -0
- package/dist/commands/tables.d.ts +3 -0
- package/dist/commands/tables.js +3505 -0
- package/dist/commands/tags.d.ts +3 -0
- package/dist/commands/tags.js +147 -0
- package/dist/commands/tools.d.ts +3 -0
- package/dist/commands/tools.js +246 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.js +106 -0
- package/dist/commands/verify.d.ts +3 -0
- package/dist/commands/verify.js +27 -0
- package/dist/commands/viewers.d.ts +3 -0
- package/dist/commands/viewers.js +72 -0
- package/dist/commands/voice.d.ts +3 -0
- package/dist/commands/voice.js +351 -0
- package/dist/commands/whatsapp.d.ts +3 -0
- package/dist/commands/whatsapp.js +226 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.js +110 -0
- package/dist/commands/worker.d.ts +3 -0
- package/dist/commands/worker.js +60 -0
- package/dist/commands/workflows.d.ts +3 -0
- package/dist/commands/workflows.js +1752 -0
- package/dist/commands/workspace.d.ts +3 -0
- package/dist/commands/workspace.js +94 -0
- package/dist/compact-list-flags.d.ts +7 -0
- package/dist/compact-list-flags.js +12 -0
- package/dist/crm-support-flags.js +14 -5
- package/dist/customer-operation-commands.js +8 -6
- package/dist/diagnostic-uploader.d.ts +3 -1
- package/dist/diagnostic-uploader.js +29 -8
- package/dist/help.d.ts +5 -0
- package/dist/help.js +22 -0
- package/dist/index.d.ts +98 -1
- package/dist/index.js +331 -30719
- package/dist/local-module-loader.d.ts +4 -0
- package/dist/local-module-loader.js +156 -0
- package/dist/visual-commands.js +9 -5
- package/node_modules/@oxygen/cli-ugc/dist/commands.js +2 -2
- package/node_modules/@oxygen/shared/dist/agent-session-schedule.d.ts +36 -0
- package/node_modules/@oxygen/shared/dist/agent-session-schedule.js +69 -0
- package/node_modules/@oxygen/shared/dist/agent-sessions.d.ts +14 -5
- package/node_modules/@oxygen/shared/dist/agent-sessions.js +14 -3
- package/node_modules/@oxygen/shared/dist/capability-discovery.js +175 -14
- package/node_modules/@oxygen/shared/dist/compact-list-result.d.ts +6 -0
- package/node_modules/@oxygen/shared/dist/compact-list-result.js +27 -0
- package/node_modules/@oxygen/shared/dist/contracts/agent-sessions.d.ts +12 -1
- package/node_modules/@oxygen/shared/dist/contracts/agent-sessions.js +5 -2
- package/node_modules/@oxygen/shared/dist/contracts/browser-operations.js +4 -2
- package/node_modules/@oxygen/shared/dist/contracts/compact-list-reads.d.ts +57 -0
- package/node_modules/@oxygen/shared/dist/contracts/compact-list-reads.js +23 -0
- package/node_modules/@oxygen/shared/dist/contracts/crm-support.d.ts +52 -0
- package/node_modules/@oxygen/shared/dist/contracts/crm-support.js +43 -2
- package/node_modules/@oxygen/shared/dist/contracts/customer-operations.js +20 -16
- package/node_modules/@oxygen/shared/dist/contracts/knowledge-content-reads.js +1 -1
- package/node_modules/@oxygen/shared/dist/contracts/knowledge-proposal-reads.d.ts +49 -0
- package/node_modules/@oxygen/shared/dist/contracts/knowledge-proposal-reads.js +14 -0
- package/node_modules/@oxygen/shared/dist/contracts/knowledge-sync.js +1 -1
- package/node_modules/@oxygen/shared/dist/contracts/limits-read.js +60 -7
- package/node_modules/@oxygen/shared/dist/contracts/operations.d.ts +9 -1
- package/node_modules/@oxygen/shared/dist/contracts/operations.js +13 -5
- package/node_modules/@oxygen/shared/dist/contracts/publishing-reads.js +1 -1
- package/node_modules/@oxygen/shared/dist/contracts/teammates.d.ts +16 -0
- package/node_modules/@oxygen/shared/dist/contracts/teammates.js +115 -0
- package/node_modules/@oxygen/shared/dist/cost-estimate-view.js +21 -3
- package/node_modules/@oxygen/shared/dist/cost-estimate.d.ts +31 -1
- package/node_modules/@oxygen/shared/dist/cost-estimate.js +56 -15
- package/node_modules/@oxygen/shared/dist/diagnostic-credentials.d.ts +2 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-credentials.js +2 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-lock.js +71 -44
- package/node_modules/@oxygen/shared/dist/diagnostic-spool.d.ts +18 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-spool.js +348 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-storage-failure.d.ts +10 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-storage-failure.js +42 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-storage.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/diagnostic-storage.js +59 -213
- package/node_modules/@oxygen/shared/dist/diagnostics.js +3 -2
- package/node_modules/@oxygen/shared/dist/email-dsn.d.ts +16 -5
- package/node_modules/@oxygen/shared/dist/email-dsn.js +97 -1
- package/node_modules/@oxygen/shared/dist/emailguard-placement-probe.js +5 -0
- package/node_modules/@oxygen/shared/dist/enrichment-intents.js +4 -5
- package/node_modules/@oxygen/shared/dist/file-import.d.ts +8 -0
- package/node_modules/@oxygen/shared/dist/file-import.js +21 -2
- package/node_modules/@oxygen/shared/dist/hosted-ai.d.ts +30 -0
- package/node_modules/@oxygen/shared/dist/hosted-ai.js +20 -0
- package/node_modules/@oxygen/shared/dist/knowledge-bootstrap.d.ts +6 -2
- package/node_modules/@oxygen/shared/dist/knowledge-seed-content.d.ts +17 -7
- package/node_modules/@oxygen/shared/dist/knowledge-seed-content.js +81 -17
- package/node_modules/@oxygen/shared/dist/langfuse.js +8 -4
- package/node_modules/@oxygen/shared/dist/mailbox-egress-ownership.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/mailbox-import.d.ts +6 -3
- package/node_modules/@oxygen/shared/dist/mailbox-import.js +9 -9
- package/node_modules/@oxygen/shared/dist/mcp-server-info.d.ts +8 -0
- package/node_modules/@oxygen/shared/dist/mcp-server-info.js +10 -0
- package/node_modules/@oxygen/shared/dist/object-storage.d.ts +10 -0
- package/node_modules/@oxygen/shared/dist/object-storage.js +14 -0
- package/node_modules/@oxygen/shared/dist/plan-limits-view.d.ts +5 -0
- package/node_modules/@oxygen/shared/dist/plan-limits-view.js +17 -1
- package/node_modules/@oxygen/shared/dist/pricing-sheet.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/pricing-sheet.js +1 -1
- package/node_modules/@oxygen/shared/dist/provider-selection.d.ts +15 -0
- package/node_modules/@oxygen/shared/dist/provider-selection.js +3 -0
- package/node_modules/@oxygen/shared/dist/repricing.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/repricing.js +2 -2
- package/node_modules/@oxygen/shared/dist/schedule-label.d.ts +6 -0
- package/node_modules/@oxygen/shared/dist/schedule-label.js +12 -0
- package/node_modules/@oxygen/shared/dist/sequence-failures.d.ts +1 -0
- package/node_modules/@oxygen/shared/dist/sequence-failures.js +20 -6
- package/node_modules/@oxygen/shared/dist/teammate-groups.d.ts +55 -0
- package/node_modules/@oxygen/shared/dist/teammate-groups.js +74 -0
- package/node_modules/@oxygen/shared/dist/teammate-messages.d.ts +52 -0
- package/node_modules/@oxygen/shared/dist/teammate-messages.js +88 -0
- package/node_modules/@oxygen/shared/dist/teammate-notes.d.ts +58 -0
- package/node_modules/@oxygen/shared/dist/teammate-notes.js +73 -0
- package/node_modules/@oxygen/shared/dist/teammate-routines.d.ts +95 -0
- package/node_modules/@oxygen/shared/dist/teammate-routines.js +266 -0
- package/node_modules/@oxygen/shared/dist/teammate-tasks.d.ts +56 -0
- package/node_modules/@oxygen/shared/dist/teammate-tasks.js +114 -0
- package/node_modules/@oxygen/shared/dist/teammates.d.ts +78 -0
- package/node_modules/@oxygen/shared/dist/teammates.js +140 -0
- package/node_modules/@oxygen/shared/dist/user-capability-routing.js +120 -0
- package/node_modules/@oxygen/shared/dist/version.generated.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/version.generated.js +1 -1
- package/node_modules/@oxygen/shared/dist/visual-render.d.ts +9 -1
- package/node_modules/@oxygen/shared/dist/visual-render.js +12 -5
- package/node_modules/@oxygen/shared/dist/warmup-metrics.d.ts +5 -0
- package/node_modules/@oxygen/shared/dist/warmup-metrics.js +44 -0
- package/package.json +1 -1
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { requestOxygen } from "../http-client.js";
|
|
2
|
+
import { readOption } from "../util.js";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
// The map is bounded twice over — a scan window per kind, then a character
|
|
5
|
+
// budget across all of them — and both bounds are invisible in the rendered
|
|
6
|
+
// output. Say them on stderr for the same reason every other cap here is said:
|
|
7
|
+
// a window presented as a complete answer is a confident lie, and this one is
|
|
8
|
+
// the first thing an agent or a person reads about a workspace. `degraded` gets
|
|
9
|
+
// the same treatment: an empty kind that failed to read is not an empty kind.
|
|
10
|
+
function writeWorkspaceMapNotices(data) {
|
|
11
|
+
if (!data || typeof data !== "object" || Array.isArray(data))
|
|
12
|
+
return;
|
|
13
|
+
const record = data;
|
|
14
|
+
const degraded = Array.isArray(record.degraded) ? record.degraded : [];
|
|
15
|
+
if (degraded.length > 0) {
|
|
16
|
+
process.stderr.write(`note: could not read ${degraded.join(", ")} — those kinds are unknown, not empty.\n`);
|
|
17
|
+
}
|
|
18
|
+
const kinds = Array.isArray(record.kinds) ? record.kinds : [];
|
|
19
|
+
const capped = kinds
|
|
20
|
+
.filter((kind) => Boolean(kind) && typeof kind === "object" && !Array.isArray(kind) && kind.capped === true)
|
|
21
|
+
.map((kind) => String(kind.kind));
|
|
22
|
+
if (capped.length > 0) {
|
|
23
|
+
process.stderr.write(`note: ${capped.join(", ")} hold more than this scan saw; their counts are a floor. Narrow with --query or --tag.\n`);
|
|
24
|
+
}
|
|
25
|
+
const budget = record.budget;
|
|
26
|
+
if (budget && typeof budget === "object" && !Array.isArray(budget)) {
|
|
27
|
+
const trimmed = budget.trimmed;
|
|
28
|
+
if (Array.isArray(trimmed) && trimmed.length > 0) {
|
|
29
|
+
process.stderr.write(`note: the character budget trimmed ${trimmed.length} item(s) from ${[...new Set(trimmed.map(String))].join(", ")}.\n`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const tagNote = record.tag_note;
|
|
33
|
+
if (typeof tagNote === "string" && tagNote)
|
|
34
|
+
process.stderr.write(`note: ${tagNote}\n`);
|
|
35
|
+
// A kind asked for by name that this caller cannot read: empty, and why.
|
|
36
|
+
const unavailable = Array.isArray(record.unavailable) ? record.unavailable : [];
|
|
37
|
+
for (const entry of unavailable) {
|
|
38
|
+
if (!entry || typeof entry !== "object")
|
|
39
|
+
continue;
|
|
40
|
+
const { kind, message } = entry;
|
|
41
|
+
process.stderr.write(`note: ${String(kind)} is empty here, not missing: ${String(message ?? "not available")}\n`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function registerWorkspaceFamily(program, handleAsyncAction) {
|
|
45
|
+
// `oxygen workspace map` sits beside `oxygen home` on purpose: home answers
|
|
46
|
+
// "what needs me", the map answers "what is in here". Both are Control-surface
|
|
47
|
+
// compositions over reads the primitives already own — neither is a primitive.
|
|
48
|
+
const workspaceCommand = program
|
|
49
|
+
.command("workspace")
|
|
50
|
+
.description("Inspect this workspace or end its managed external infrastructure.")
|
|
51
|
+
.addHelpText("before", "\nActive workspace and identity: oxygen whoami --summary-json (read-only, 0 credits).\n")
|
|
52
|
+
.addCommand(new Command("map")
|
|
53
|
+
.description("What this workspace actually contains: the newest tables, CRM objects, sequences, workflows, agents, wiki pages, posts and projects, each with its id, last activity, tags and link, plus your Oxygents, group chats and Copilot chats where the Copilot is yours. With --query it also searches CRM records and inbox conversations. Read-only, 0 credits. Capability search tells you what OXYGEN can do; this tells you what is here.")
|
|
54
|
+
.option("--kind <kinds>", "Comma-separated kinds to include: table, crm_object, sequence, workflow, agent, knowledge_page, post, project, oxygent, oxygent_group, copilot_chat, record, conversation. record and conversation are searched, so they need --query or --tag.")
|
|
55
|
+
.option("--tag <tag>", "Only objects carrying this workspace tag. Answered by the Tags footprint read, so it also covers kinds this map does not model.")
|
|
56
|
+
.option("--query <text>", "Match on name, slug, or tag. Tables, workflows and wiki pages match names and slugs across the whole kind and tags within the newest window; records and conversations are found by their own searches (an email, a domain, a word in a message). A kind with `capped: true` may hold matches this did not return.")
|
|
57
|
+
.option("--json", "Print a JSON envelope.")
|
|
58
|
+
.addHelpText("after", "\nEach kind returns its newest few objects under a character budget the payload echoes back; `capped` says when a kind holds more than the scan saw. It is a snapshot, not a rollup: per-folder table counts come from `oxygen projects list` (`tableCount`). Hydrate one object with its own primitive's read (`oxygen tables describe`, `oxygen workflows get`, `oxygen knowledge page get`).\n\nRead-only means read-only: the map creates nothing in your workspace in order to answer, so an empty wiki reports zero pages rather than a starter set this command seeded. Use `oxygen knowledge index` when you do want the starter wiki created.\n")
|
|
59
|
+
.action(async (options) => {
|
|
60
|
+
await handleAsyncAction("workspace map", options, async () => {
|
|
61
|
+
const params = new URLSearchParams();
|
|
62
|
+
const kind = readOption(options.kind);
|
|
63
|
+
if (kind)
|
|
64
|
+
params.set("kind", kind);
|
|
65
|
+
const tag = readOption(options.tag);
|
|
66
|
+
if (tag)
|
|
67
|
+
params.set("tag", tag);
|
|
68
|
+
const query = readOption(options.query);
|
|
69
|
+
if (query)
|
|
70
|
+
params.set("query", query);
|
|
71
|
+
const qs = params.toString() ? `?${params.toString()}` : "";
|
|
72
|
+
const data = await requestOxygen(`/api/cli/workspace/map${qs}`);
|
|
73
|
+
if (!options.json)
|
|
74
|
+
writeWorkspaceMapNotices(data);
|
|
75
|
+
return data;
|
|
76
|
+
});
|
|
77
|
+
}));
|
|
78
|
+
workspaceCommand.addCommand(new Command("infrastructure-exit")
|
|
79
|
+
.description("Leave, close or offboard a workspace's managed external infrastructure in one action. Preview every renewing resource and its release-timing note, then with --approved stop renewals and begin provider teardown. Known paid terms are honored; some dates are estimated or unavailable. Sending connections are disconnected; records and history remain. Requires an exact workspace confirmation and the fresh preview hash. Free, 0 credits.")
|
|
80
|
+
.option("--approved", "Begin the approved teardown.")
|
|
81
|
+
.option("--confirm <workspace>", "Echo the exact workspace slug or ID from the preview.")
|
|
82
|
+
.option("--plan-hash <hash>", "The plan_hash from the immediately preceding preview.")
|
|
83
|
+
.option("--json", "Print a JSON envelope.")
|
|
84
|
+
.action(async (options) => {
|
|
85
|
+
await handleAsyncAction("workspace infrastructure exit", options, () => requestOxygen("/api/cli/workspace/infrastructure/exit", {
|
|
86
|
+
method: "POST",
|
|
87
|
+
body: {
|
|
88
|
+
approved: options.approved === true,
|
|
89
|
+
confirm_workspace: options.confirm ?? null,
|
|
90
|
+
plan_hash: options.planHash ?? null,
|
|
91
|
+
},
|
|
92
|
+
}));
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
type Kind = "folders" | "blueprints";
|
|
3
|
+
/** Decorate existing manual owners; do not replace their positional query,
|
|
4
|
+
* existing filters, aliases or output handling with a generated command. */
|
|
5
|
+
export declare function addCompactListReadFlags(command: Command, kind: Kind): Command;
|
|
6
|
+
export declare function appendCompactListReadQuery(params: URLSearchParams, command: Command, kind: Kind): void;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { blueprintListWindowContract, knowledgeFolderListReadContract } from "@oxygen/shared/contracts/compact-list-reads";
|
|
2
|
+
import { addContractFlags, readContractFlags } from "./contract-flags.js";
|
|
3
|
+
const contractFor = (kind) => kind === "folders" ? knowledgeFolderListReadContract : blueprintListWindowContract;
|
|
4
|
+
/** Decorate existing manual owners; do not replace their positional query,
|
|
5
|
+
* existing filters, aliases or output handling with a generated command. */
|
|
6
|
+
export function addCompactListReadFlags(command, kind) {
|
|
7
|
+
return addContractFlags(command, contractFor(kind));
|
|
8
|
+
}
|
|
9
|
+
export function appendCompactListReadQuery(params, command, kind) {
|
|
10
|
+
for (const [key, value] of Object.entries(readContractFlags(command.optsWithGlobals(), contractFor(kind))))
|
|
11
|
+
params.set(key, String(value));
|
|
12
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OxygenError } from "@oxygen/shared/cli-result";
|
|
2
|
-
import { CRM_CONNECTIONS_QUERY_CONTRACT,
|
|
2
|
+
import { CRM_CONNECTIONS_QUERY_CONTRACT, CRM_NOTE_EDIT_INPUT_CONTRACT, crmNoteEditInputIssues, CRM_OBJECTS_QUERY_CONTRACT, CRM_PHOTOS_CONTRACT, CRM_FILE_COMPLETE_INPUT_CONTRACT, crmFileCompleteInputIssues, CRM_RECORD_QUERY_CONTRACT } from "@oxygen/shared/contracts/crm-support";
|
|
3
3
|
import { validateContract } from "@oxygen/shared/contracts/schema";
|
|
4
4
|
import { addContractFlags, readContractFlags } from "./contract-flags.js";
|
|
5
5
|
import { assertModeFlagsExclusive } from "./cli-values.js";
|
|
@@ -21,9 +21,9 @@ export function registerCrmSupportFlags(program) {
|
|
|
21
21
|
replaceFlags(child(crm, "objects"), [], CRM_OBJECTS_QUERY_CONTRACT);
|
|
22
22
|
replaceFlags(child(crm, "get"), [], CRM_RECORD_QUERY_CONTRACT);
|
|
23
23
|
replaceFlags(child(crm, "connections"), ["conversationLimit", "sequenceLimit"], CRM_CONNECTIONS_QUERY_CONTRACT);
|
|
24
|
-
replaceFlags(child(child(crm, "notes"), "update"), ["body", "title", "pin", "unpin"],
|
|
24
|
+
replaceFlags(child(child(crm, "notes"), "update"), ["body", "title", "pin", "unpin"], CRM_NOTE_EDIT_INPUT_CONTRACT, NOTE_OVERLAY);
|
|
25
25
|
replaceFlags(child(crm, "photos"), ["limit", "live"], CRM_PHOTOS_CONTRACT);
|
|
26
|
-
replaceFlags(child(child(crm, "files"), "attach"), ["label"],
|
|
26
|
+
replaceFlags(child(child(crm, "files"), "attach"), ["label"], CRM_FILE_COMPLETE_INPUT_CONTRACT);
|
|
27
27
|
}
|
|
28
28
|
function checkedFlags(options, contract, overlay) {
|
|
29
29
|
const value = readContractFlags(options, contract, overlay);
|
|
@@ -33,7 +33,10 @@ function checkedFlags(options, contract, overlay) {
|
|
|
33
33
|
return checked.value;
|
|
34
34
|
}
|
|
35
35
|
export function readCrmNoteEditFields(options) {
|
|
36
|
-
const value = checkedFlags(options,
|
|
36
|
+
const value = checkedFlags(options, CRM_NOTE_EDIT_INPUT_CONTRACT, NOTE_OVERLAY);
|
|
37
|
+
const issues = crmNoteEditInputIssues(value);
|
|
38
|
+
if (issues.length)
|
|
39
|
+
throw new OxygenError("invalid_request", "Invalid CRM command fields.", { exitCode: 1, details: { fields: issues.map((issue) => issue.path) } });
|
|
37
40
|
// Preserve the existing --title "" spelling in addition to --clear-title.
|
|
38
41
|
if (options.title === "")
|
|
39
42
|
value.title = null;
|
|
@@ -50,7 +53,13 @@ export function readCrmPhotoFields(options) {
|
|
|
50
53
|
value.mode = "dry_run";
|
|
51
54
|
return value;
|
|
52
55
|
}
|
|
53
|
-
export function readCrmFileLabel(options) {
|
|
56
|
+
export function readCrmFileLabel(options) {
|
|
57
|
+
const value = checkedFlags(options, CRM_FILE_COMPLETE_INPUT_CONTRACT);
|
|
58
|
+
const issues = crmFileCompleteInputIssues(value);
|
|
59
|
+
if (issues.length)
|
|
60
|
+
throw new OxygenError("invalid_request", "Invalid CRM command fields.", { exitCode: 1, details: { fields: issues.map((issue) => issue.path) } });
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
54
63
|
function queryPath(path, query) {
|
|
55
64
|
const params = new URLSearchParams(Object.entries(query).map(([key, value]) => [key, String(value)]));
|
|
56
65
|
return params.size ? `${path}?${params}` : path;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { readFile, writeFile } from "node:fs/promises";
|
|
2
2
|
import { basename, extname, resolve } from "node:path";
|
|
3
3
|
import { OxygenError } from "@oxygen/shared/cli-result";
|
|
4
|
-
import { CLI_OPERATIONS, operationFormData, operationInputContract, operationRequest } from "@oxygen/shared/contracts/operations";
|
|
5
|
-
import { unwrapNullable
|
|
4
|
+
import { CLI_OPERATIONS, operationFormData, operationInputContract, operationInputIssues, operationRequest } from "@oxygen/shared/contracts/operations";
|
|
5
|
+
import { unwrapNullable } from "@oxygen/shared/contracts/schema";
|
|
6
6
|
import { addContractFlags, readContractFlags } from "./contract-flags.js";
|
|
7
7
|
import { requestOxygen } from "./http-client.js";
|
|
8
8
|
// Only newly registered groups use these purposes; manual owners retain their
|
|
9
9
|
// descriptions, aliases and children.
|
|
10
10
|
const GROUP_PURPOSES = {
|
|
11
|
-
"copilot policy": "Set an attended Copilot session's approval
|
|
11
|
+
"copilot policy": "Set an attended Copilot session's approval policy.",
|
|
12
12
|
"context canonical": "Read the workspace's pinned canonical context asset.",
|
|
13
13
|
"directory logo": "Upload the public agency listing's logo.",
|
|
14
14
|
"managed-inboxes avatars": "Prepare and confirm managed mailbox profile pictures.",
|
|
@@ -32,6 +32,8 @@ const GROUP_PURPOSES = {
|
|
|
32
32
|
onboarding: "Save workspace discovery choices and continue onboarding.",
|
|
33
33
|
};
|
|
34
34
|
const OPERATION_FLAGS = {
|
|
35
|
+
// Null and an omitted/empty label preserve an existing attachment label.
|
|
36
|
+
"crm files complete-upload": { label: { noClear: true } },
|
|
35
37
|
"tables rows remove-selection": {
|
|
36
38
|
table: { help: "Table id or slug." },
|
|
37
39
|
row_ids: { help: "Comma-separated exact row IDs. Choose this, --filter-tree-json or --selection-json." },
|
|
@@ -105,9 +107,9 @@ export function registerCustomerOperationCommands(program, handle) {
|
|
|
105
107
|
input[spec.multipart.nameField] ??= basename(filePath);
|
|
106
108
|
input[spec.multipart.typeField] ??= uploadContentType(filePath);
|
|
107
109
|
}
|
|
108
|
-
const
|
|
109
|
-
if (
|
|
110
|
-
throw new OxygenError("invalid_request",
|
|
110
|
+
const issues = operationInputIssues(spec, input);
|
|
111
|
+
if (issues.length)
|
|
112
|
+
throw new OxygenError("invalid_request", issues.map((issue) => issue.message).join(" "), { exitCode: 2 });
|
|
111
113
|
}
|
|
112
114
|
catch (error) {
|
|
113
115
|
throw usageRecovery(error, spec.cli.path);
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { type StoredCredentials } from "./credentials.js";
|
|
2
2
|
/** Dedicated detached process: credential values never enter argv or the spool. */
|
|
3
|
-
export declare function uploadCliDiagnostics(directory?: string, credentials?: StoredCredentials
|
|
3
|
+
export declare function uploadCliDiagnostics(directory?: string, credentials?: StoredCredentials, options?: {
|
|
4
|
+
recordIds?: readonly string[];
|
|
5
|
+
}): Promise<number>;
|
|
@@ -4,11 +4,17 @@ import { acquireDiagnosticLock } from "@oxygen/shared/diagnostic-lock";
|
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { gunzipSync, gzipSync } from "node:zlib";
|
|
6
6
|
import { DIAGNOSTIC_RECORD_MAX_BYTES, DIAGNOSTIC_UPLOAD_CHUNK_BYTES, parseDiagnosticRecord } from "@oxygen/shared/diagnostics";
|
|
7
|
+
import { OxygenError } from "@oxygen/shared/cli-result";
|
|
7
8
|
import { loadCredentialsWithEndpoint } from "./credentials.js";
|
|
8
9
|
import { cliDiagnosticDirectory, credentialFingerprint } from "./diagnostics.js";
|
|
9
10
|
import { requestOxygen } from "./http-client.js";
|
|
11
|
+
async function saveProgress(path, progress) {
|
|
12
|
+
const temporary = path + ".tmp";
|
|
13
|
+
await writeFile(temporary, JSON.stringify(progress), { mode: 0o600 });
|
|
14
|
+
await rename(temporary, path);
|
|
15
|
+
}
|
|
10
16
|
/** Dedicated detached process: credential values never enter argv or the spool. */
|
|
11
|
-
export async function uploadCliDiagnostics(directory = cliDiagnosticDirectory(), credentials) {
|
|
17
|
+
export async function uploadCliDiagnostics(directory = cliDiagnosticDirectory(), credentials, options = {}) {
|
|
12
18
|
if (process.env.OXYGEN_DIAGNOSTICS_ENABLED !== "1")
|
|
13
19
|
return 0;
|
|
14
20
|
const loaded = credentials ?? (await loadCredentialsWithEndpoint()).credentials;
|
|
@@ -20,11 +26,19 @@ export async function uploadCliDiagnostics(directory = cliDiagnosticDirectory(),
|
|
|
20
26
|
return 0;
|
|
21
27
|
let uploaded = 0;
|
|
22
28
|
try {
|
|
23
|
-
|
|
29
|
+
// A native canary must retrieve its own captures, even when retained evidence
|
|
30
|
+
// from a previous credential occupies the ordinary twenty-record sweep.
|
|
31
|
+
const selected = options.recordIds === undefined ? null : new Set(options.recordIds);
|
|
32
|
+
for (const name of (await readdir(directory)).filter((name) => /^[0-9a-f-]+\.json\.gz$/.test(name)
|
|
33
|
+
&& (selected === null || selected.has(name.slice(0, -8)))).slice(0, 20)) {
|
|
24
34
|
const path = join(directory, name);
|
|
35
|
+
const progressPath = path + ".upload.json";
|
|
36
|
+
let progress = null;
|
|
25
37
|
try {
|
|
26
38
|
const entry = JSON.parse(gunzipSync(await readFile(path), { maxOutputLength: DIAGNOSTIC_RECORD_MAX_BYTES }).toString("utf8"));
|
|
27
39
|
parseDiagnosticRecord(entry.record);
|
|
40
|
+
if (selected !== null && !selected.has(entry.record.id))
|
|
41
|
+
continue;
|
|
28
42
|
if (Date.now() - Date.parse(entry.record.started_at) >= 72 * 60 * 60 * 1000)
|
|
29
43
|
continue;
|
|
30
44
|
// Never move an old invocation to a different endpoint, user or workspace.
|
|
@@ -35,8 +49,7 @@ export async function uploadCliDiagnostics(directory = cliDiagnosticDirectory(),
|
|
|
35
49
|
const sha256 = createHash("sha256").update(bytes).digest("hex");
|
|
36
50
|
const total = Math.ceil(bytes.length / DIAGNOSTIC_UPLOAD_CHUNK_BYTES);
|
|
37
51
|
const selectedOrganization = entry.scope.organization ?? undefined;
|
|
38
|
-
|
|
39
|
-
const progress = JSON.parse(await readFile(progressPath, "utf8").catch(() => "null"));
|
|
52
|
+
progress = JSON.parse(await readFile(progressPath, "utf8").catch(() => "null"));
|
|
40
53
|
// Staging expires after one day. Restart from zero after that boundary.
|
|
41
54
|
const next = progress?.sha256 === sha256 && Date.now() - progress.updated_at < 23 * 3_600_000
|
|
42
55
|
&& Number.isInteger(progress.next) && progress.next >= 0 && progress.next <= total ? progress.next : 0;
|
|
@@ -46,9 +59,8 @@ export async function uploadCliDiagnostics(directory = cliDiagnosticDirectory(),
|
|
|
46
59
|
body: { id: entry.record.id, index, total, sha256,
|
|
47
60
|
chunk: bytes.subarray(index * DIAGNOSTIC_UPLOAD_CHUNK_BYTES, (index + 1) * DIAGNOSTIC_UPLOAD_CHUNK_BYTES).toString("base64") },
|
|
48
61
|
});
|
|
49
|
-
|
|
50
|
-
await
|
|
51
|
-
await rename(temporary, progressPath);
|
|
62
|
+
progress = { sha256, next: index + 1, updated_at: Date.now() };
|
|
63
|
+
await saveProgress(progressPath, progress);
|
|
52
64
|
}
|
|
53
65
|
const receipt = await requestOxygen("/api/cli/observability/diagnostics", { method: "POST", credentials: loaded,
|
|
54
66
|
...(selectedOrganization ? { selectedOrganization } : {}), timeoutMs: 15_000, body: { id: entry.record.id, total, sha256, complete: true } });
|
|
@@ -58,7 +70,16 @@ export async function uploadCliDiagnostics(directory = cliDiagnosticDirectory(),
|
|
|
58
70
|
await unlink(progressPath).catch(() => undefined);
|
|
59
71
|
uploaded++;
|
|
60
72
|
}
|
|
61
|
-
catch {
|
|
73
|
+
catch (error) {
|
|
74
|
+
// A confirmed missing remote part invalidates only the transfer cursor.
|
|
75
|
+
// Restage these exact bytes on the next ordinary sweep, without extending
|
|
76
|
+
// the original capture's expiry or making another attempt in this sweep.
|
|
77
|
+
if (error instanceof OxygenError && error.code === "diagnostic_upload_incomplete" && progress) {
|
|
78
|
+
await saveProgress(progressPath, { sha256: progress.sha256, next: 0, updated_at: Date.now(),
|
|
79
|
+
reset_reason: "staging_missing", previous_next: progress.next }).catch(() => undefined);
|
|
80
|
+
}
|
|
81
|
+
/* leave the original for a later invocation; never replay product actions */
|
|
82
|
+
}
|
|
62
83
|
}
|
|
63
84
|
}
|
|
64
85
|
finally {
|
package/dist/help.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { CommanderError, type Command } from "commander";
|
|
2
2
|
import { type CliFailure } from "@oxygen/shared/cli-result";
|
|
3
|
+
/** Customer-facing links must never carry API authentication material. */
|
|
4
|
+
export declare function oxygenAppUrl(apiUrl: string, path: string): string;
|
|
5
|
+
export declare function oxygenDocsUrl(apiUrl: string, documentPath?: string): string;
|
|
3
6
|
export declare function applyOxygenHelp(program: Command, binaryName: string, docsUrl?: string): void;
|
|
4
7
|
/**
|
|
5
8
|
* Turn commander's own edit-distance suggester on for EVERY command.
|
|
@@ -31,6 +34,8 @@ export declare function validateRequiredOptionValues(program: Command, selected:
|
|
|
31
34
|
* all, or when the flag is not a long option.
|
|
32
35
|
*/
|
|
33
36
|
export declare function unknownOptionHint(program: Command, argv: readonly string[], message: string): string | null;
|
|
37
|
+
/** Analytics needs a stored program ID before its API read can run. */
|
|
38
|
+
export declare function requiredOptionHint(program: Command, argv: readonly string[], message: string): string | null;
|
|
34
39
|
/**
|
|
35
40
|
* Drop the help flag when it follows an operand that names no subcommand.
|
|
36
41
|
*
|
package/dist/help.js
CHANGED
|
@@ -125,6 +125,19 @@ const HELP_GROUPS = [
|
|
|
125
125
|
},
|
|
126
126
|
];
|
|
127
127
|
const FALLBACK_HEADING = "Other commands:";
|
|
128
|
+
/** Customer-facing links must never carry API authentication material. */
|
|
129
|
+
export function oxygenAppUrl(apiUrl, path) {
|
|
130
|
+
const url = new URL(apiUrl);
|
|
131
|
+
url.username = "";
|
|
132
|
+
url.password = "";
|
|
133
|
+
url.search = "";
|
|
134
|
+
url.hash = "";
|
|
135
|
+
url.pathname = `${url.pathname.replace(/\/+$/, "")}/${path.replace(/^\/+/, "")}`;
|
|
136
|
+
return url.href;
|
|
137
|
+
}
|
|
138
|
+
export function oxygenDocsUrl(apiUrl, documentPath = "") {
|
|
139
|
+
return oxygenAppUrl(apiUrl, `/docs${documentPath}`);
|
|
140
|
+
}
|
|
128
141
|
export function applyOxygenHelp(program, binaryName, docsUrl = "https://oxygen-agent.com/docs") {
|
|
129
142
|
program.option("--help-full", "Show expanded command and option descriptions.");
|
|
130
143
|
const configure = (command) => {
|
|
@@ -326,6 +339,15 @@ export function unknownOptionHint(program, argv, message) {
|
|
|
326
339
|
}
|
|
327
340
|
return `Hint: \`${path}\` has no \`${bare}\`. ${helpLine}`;
|
|
328
341
|
}
|
|
342
|
+
/** Analytics needs a stored program ID before its API read can run. */
|
|
343
|
+
export function requiredOptionHint(program, argv, message) {
|
|
344
|
+
if (!message.includes("required option '--program-id "))
|
|
345
|
+
return null;
|
|
346
|
+
const { path } = resolveCommandPath(program, argv);
|
|
347
|
+
if (path !== `${program.name()} ugc analytics get`)
|
|
348
|
+
return null;
|
|
349
|
+
return `Hint: List available programs with \`${program.name()} ugc programs list --json\`, then repeat this read with the selected --program-id.`;
|
|
350
|
+
}
|
|
329
351
|
/**
|
|
330
352
|
* Walk the command path in argv and return the deepest command, its printable
|
|
331
353
|
* path, and the first token that is no subcommand of it (`next`). Root options
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,100 @@
|
|
|
1
|
+
import "./admin-lead-magnet-commands.js";
|
|
2
|
+
import "./admin-primary-providers-render.js";
|
|
3
|
+
import "./auto-update.js";
|
|
4
|
+
import "./browser-login.js";
|
|
5
|
+
import "./cli-values.js";
|
|
6
|
+
import "./column-decision-options.js";
|
|
7
|
+
import "./column-run-notices.js";
|
|
8
|
+
import "./command-manifest.js";
|
|
9
|
+
import "./compact-list-flags.js";
|
|
10
|
+
import "./connectors-commands.js";
|
|
11
|
+
import "./contract-flags.js";
|
|
12
|
+
import "./credentials.js";
|
|
13
|
+
import "./crm-file-read-commands.js";
|
|
14
|
+
import "./crm-support-flags.js";
|
|
15
|
+
import "./customer-operation-commands.js";
|
|
16
|
+
import "./database-query-flags.js";
|
|
17
|
+
import "./diagnostics.js";
|
|
18
|
+
import "./feed-read-flags.js";
|
|
19
|
+
import "./functions-commands.js";
|
|
20
|
+
import "./help.js";
|
|
21
|
+
import "./home-standup.js";
|
|
22
|
+
import "./http-client.js";
|
|
23
|
+
import "./inbox-needs-reply-notice.js";
|
|
24
|
+
import "./json-output.js";
|
|
25
|
+
import "./knowledge-mirror.js";
|
|
26
|
+
import "./knowledge-repository-commands.js";
|
|
27
|
+
import "./local-custom-http-column.js";
|
|
28
|
+
import "./mailbox-ramp-notice.js";
|
|
29
|
+
import "./run-wait.js";
|
|
30
|
+
import "./runtime.js";
|
|
31
|
+
import "./search-ai-filter-notice.js";
|
|
32
|
+
import "./sender-limits-flags.js";
|
|
33
|
+
import "./session.js";
|
|
34
|
+
import "./settings-commands.js";
|
|
35
|
+
import "./skills.js";
|
|
36
|
+
import "./streamed-file-import.js";
|
|
37
|
+
import "./tool-catalog-detail-command.js";
|
|
38
|
+
import "./tool-catalog-search-window.js";
|
|
39
|
+
import "./transcript.js";
|
|
40
|
+
import "./ugc-commands.js";
|
|
41
|
+
import "./update.js";
|
|
42
|
+
import "./util.js";
|
|
43
|
+
import "./visual-commands.js";
|
|
44
|
+
import "./whatsapp-account-flags.js";
|
|
45
|
+
import "./workflow-plan-limit-notices.js";
|
|
46
|
+
import "./workflow-run-list-flags.js";
|
|
47
|
+
import "./workspace-skill-commands.js";
|
|
48
|
+
import "./workspace-utility-flags.js";
|
|
49
|
+
import "@oxygen/recipe-sdk";
|
|
50
|
+
import "@oxygen/shared";
|
|
51
|
+
import "@oxygen/shared/billing";
|
|
52
|
+
import "@oxygen/shared/company-reply-pause";
|
|
53
|
+
import "@oxygen/shared/contracts/billing-owner-read";
|
|
54
|
+
import "@oxygen/shared/contracts/copilot-sessions";
|
|
55
|
+
import "@oxygen/shared/contracts/crm-enrichment-read";
|
|
56
|
+
import "@oxygen/shared/contracts/database";
|
|
57
|
+
import "@oxygen/shared/contracts/inbox-drafts-read";
|
|
58
|
+
import "@oxygen/shared/contracts/integration-connect";
|
|
59
|
+
import "@oxygen/shared/contracts/knowledge-content-reads";
|
|
60
|
+
import "@oxygen/shared/contracts/limits-read";
|
|
61
|
+
import "@oxygen/shared/contracts/linkedin-invites-list";
|
|
62
|
+
import "@oxygen/shared/contracts/operations";
|
|
63
|
+
import "@oxygen/shared/contracts/pipedrive-catalog";
|
|
64
|
+
import "@oxygen/shared/contracts/publishing-reads";
|
|
65
|
+
import "@oxygen/shared/contracts/sender-limits";
|
|
66
|
+
import "@oxygen/shared/contracts/sequence-analytics-read";
|
|
67
|
+
import "@oxygen/shared/contracts/sequence-list";
|
|
68
|
+
import "@oxygen/shared/contracts/table-feed-update";
|
|
69
|
+
import "@oxygen/shared/contracts/table-list";
|
|
70
|
+
import "@oxygen/shared/contracts/table-query-grid";
|
|
71
|
+
import "@oxygen/shared/contracts/table-query-raw";
|
|
72
|
+
import "@oxygen/shared/contracts/whatsapp-reads";
|
|
73
|
+
import "@oxygen/shared/contracts/workflow-run-list";
|
|
74
|
+
import "@oxygen/shared/copilot-questions";
|
|
75
|
+
import "@oxygen/shared/data-suppliers";
|
|
76
|
+
import "@oxygen/shared/file-import";
|
|
77
|
+
import "@oxygen/shared/knowledge-constants";
|
|
78
|
+
import "@oxygen/shared/linkedin-sequences";
|
|
79
|
+
import "@oxygen/shared/mailbox-import";
|
|
80
|
+
import "@oxygen/shared/plan-band";
|
|
81
|
+
import "@oxygen/shared/pricing-sheet";
|
|
82
|
+
import "@oxygen/shared/select-options";
|
|
83
|
+
import "@oxygen/shared/sequence-lifecycle";
|
|
84
|
+
import "@oxygen/shared/table-field-types";
|
|
85
|
+
import "@oxygen/shared/table-filter-operators";
|
|
86
|
+
import "@oxygen/shared/table-run-summary";
|
|
87
|
+
import "@oxygen/shared/user-capability-routing";
|
|
88
|
+
import "@oxygen/workflows";
|
|
89
|
+
import "commander";
|
|
90
|
+
import "node:child_process";
|
|
91
|
+
import "node:crypto";
|
|
92
|
+
import "node:fs";
|
|
93
|
+
import "node:os";
|
|
94
|
+
import "node:path";
|
|
95
|
+
import "node:process";
|
|
96
|
+
import "node:readline/promises";
|
|
97
|
+
import "node:url";
|
|
1
98
|
import { Command } from "commander";
|
|
2
|
-
export declare function formatDisabledWorkflowNotices(data: unknown): string[];
|
|
3
99
|
export declare function createProgram(): Command;
|
|
100
|
+
export { formatDisabledWorkflowNotices } from "./command-support.js";
|