@oxygen-agent/cli 1.1014.985 → 1.1014.1087
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/command-families/program.d.ts +2 -0
- package/dist/command-families/program.js +241 -0
- package/dist/command-families/tables/automation.d.ts +22 -0
- package/dist/command-families/tables/automation.js +250 -0
- package/dist/command-families/tables/bundle-export.d.ts +7 -0
- package/dist/command-families/tables/bundle-export.js +198 -0
- package/dist/command-families/tables/bundle-format.d.ts +66 -0
- package/dist/command-families/tables/bundle-format.js +274 -0
- package/dist/command-families/tables/bundle-import.d.ts +20 -0
- package/dist/command-families/tables/bundle-import.js +260 -0
- package/dist/command-families/tables/display.d.ts +107 -0
- package/dist/command-families/tables/display.js +229 -0
- package/dist/command-families/tables/import-batches.d.ts +26 -0
- package/dist/command-families/tables/import-batches.js +94 -0
- package/dist/command-families/tables/import-columns.d.ts +24 -0
- package/dist/command-families/tables/import-columns.js +131 -0
- package/dist/command-families/tables/import-upload.d.ts +30 -0
- package/dist/command-families/tables/import-upload.js +203 -0
- package/dist/command-families/tables/import-values.d.ts +10 -0
- package/dist/command-families/tables/import-values.js +60 -0
- package/dist/command-families/tables/imports.d.ts +19 -0
- package/dist/command-families/tables/imports.js +200 -0
- package/dist/command-families/tables/options.d.ts +314 -0
- package/dist/command-families/tables/options.js +1 -0
- package/dist/command-families/tables/register-automation.d.ts +2 -0
- package/dist/command-families/tables/register-automation.js +127 -0
- package/dist/command-families/tables/register-external-imports.d.ts +2 -0
- package/dist/command-families/tables/register-external-imports.js +293 -0
- package/dist/command-families/tables/register-files.d.ts +2 -0
- package/dist/command-families/tables/register-files.js +72 -0
- package/dist/command-families/tables/register-followers.d.ts +2 -0
- package/dist/command-families/tables/register-followers.js +73 -0
- package/dist/command-families/tables/register-lifecycle.d.ts +2 -0
- package/dist/command-families/tables/register-lifecycle.js +114 -0
- package/dist/command-families/tables/register-reads.d.ts +2 -0
- package/dist/command-families/tables/register-reads.js +187 -0
- package/dist/command-families/tables/register-relations.d.ts +2 -0
- package/dist/command-families/tables/register-relations.js +244 -0
- package/dist/command-families/tables/register-row-actions.d.ts +2 -0
- package/dist/command-families/tables/register-row-actions.js +53 -0
- package/dist/command-families/tables/register-row-writes.d.ts +2 -0
- package/dist/command-families/tables/register-row-writes.js +140 -0
- package/dist/command-families/tables/register-views.d.ts +2 -0
- package/dist/command-families/tables/register-views.js +83 -0
- package/dist/command-families/tables/register-watchers.d.ts +2 -0
- package/dist/command-families/tables/register-watchers.js +65 -0
- package/dist/command-families/tables/register-webhooks.d.ts +2 -0
- package/dist/command-families/tables/register-webhooks.js +126 -0
- package/dist/command-families/tables/registration-context.d.ts +8 -0
- package/dist/command-families/tables/registration-context.js +1 -0
- package/dist/command-families/tables/registration.d.ts +3 -0
- package/dist/command-families/tables/registration.js +30 -0
- package/dist/command-families/tables/row-selection.d.ts +5 -0
- package/dist/command-families/tables/row-selection.js +82 -0
- package/dist/command-families/tables/send.d.ts +6 -0
- package/dist/command-families/tables/send.js +111 -0
- package/dist/command-manifest.js +1 -0
- package/dist/commands/copilot.js +8 -0
- package/dist/commands/deliverability.js +4 -2
- package/dist/commands/sequences.js +30 -2
- package/dist/commands/tables.d.ts +1 -3
- package/dist/commands/tables.js +1 -3505
- package/dist/credentials.js +1 -1
- package/dist/customer-operation-commands.js +62 -3
- package/dist/help.js +1 -1
- package/dist/index.d.ts +1 -99
- package/dist/index.js +5 -337
- package/dist/knowledge-mirror.js +1 -1
- package/dist/skills.js +4 -2
- package/dist/update.js +2 -1
- package/dist/workspace-placement-commands.d.ts +3 -0
- package/dist/workspace-placement-commands.js +32 -0
- package/node_modules/@oxygen/shared/dist/agent-sessions.d.ts +4 -0
- package/node_modules/@oxygen/shared/dist/agent-sessions.js +11 -3
- package/node_modules/@oxygen/shared/dist/agents-enabled.d.ts +29 -0
- package/node_modules/@oxygen/shared/dist/agents-enabled.js +51 -0
- package/node_modules/@oxygen/shared/dist/capability-discovery.js +39 -2
- package/node_modules/@oxygen/shared/dist/contracts/agent-sessions.js +1 -1
- package/node_modules/@oxygen/shared/dist/contracts/customer-operations.js +1 -1
- package/node_modules/@oxygen/shared/dist/contracts/guided-activation.js +5 -5
- package/node_modules/@oxygen/shared/dist/contracts/guided-company-files.d.ts +30 -0
- package/node_modules/@oxygen/shared/dist/contracts/guided-company-files.js +53 -0
- package/node_modules/@oxygen/shared/dist/contracts/guided-first-sourcing.d.ts +120 -0
- package/node_modules/@oxygen/shared/dist/contracts/guided-first-sourcing.js +48 -0
- package/node_modules/@oxygen/shared/dist/contracts/guided-onboarding-journey.d.ts +267 -0
- package/node_modules/@oxygen/shared/dist/contracts/guided-onboarding-journey.js +63 -0
- package/node_modules/@oxygen/shared/dist/contracts/operations.d.ts +6 -0
- package/node_modules/@oxygen/shared/dist/contracts/operations.js +9 -4
- package/node_modules/@oxygen/shared/dist/contracts/table-query-raw.d.ts +2 -0
- package/node_modules/@oxygen/shared/dist/contracts/table-query-raw.js +3 -0
- package/node_modules/@oxygen/shared/dist/contracts/teammates.js +17 -15
- package/node_modules/@oxygen/shared/dist/email-tracking-token.d.ts +2 -0
- package/node_modules/@oxygen/shared/dist/email-tracking-token.js +1 -0
- package/node_modules/@oxygen/shared/dist/feature-gates.d.ts +4 -0
- package/node_modules/@oxygen/shared/dist/feature-gates.js +5 -0
- package/node_modules/@oxygen/shared/dist/file-import.d.ts +46 -0
- package/node_modules/@oxygen/shared/dist/file-import.js +138 -0
- package/node_modules/@oxygen/shared/dist/guided-activation.d.ts +8 -0
- package/node_modules/@oxygen/shared/dist/guided-company-files.d.ts +13 -0
- package/node_modules/@oxygen/shared/dist/guided-company-files.js +14 -0
- package/node_modules/@oxygen/shared/dist/guided-first-sourcing.d.ts +116 -0
- package/node_modules/@oxygen/shared/dist/guided-first-sourcing.js +11 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-answers.d.ts +4 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-answers.js +42 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-company-context.d.ts +22 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-company-context.js +38 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-journey.d.ts +147 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-journey.fixture.d.ts +12 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-journey.fixture.js +83 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-journey.js +44 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-prospects.d.ts +7 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-prospects.js +13 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-signals.d.ts +4 -0
- package/node_modules/@oxygen/shared/dist/guided-onboarding-signals.js +34 -0
- package/node_modules/@oxygen/shared/dist/guided-trial-billing.d.ts +26 -0
- package/node_modules/@oxygen/shared/dist/guided-trial-billing.js +19 -0
- package/node_modules/@oxygen/shared/dist/index.d.ts +0 -1
- package/node_modules/@oxygen/shared/dist/index.js +0 -6
- package/node_modules/@oxygen/shared/dist/table-limits.d.ts +1 -0
- package/node_modules/@oxygen/shared/dist/table-limits.js +6 -0
- package/node_modules/@oxygen/shared/dist/teammates.d.ts +13 -8
- package/node_modules/@oxygen/shared/dist/teammates.js +20 -11
- package/node_modules/@oxygen/shared/dist/user-capability-routing.js +78 -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/workspace-placement-view.d.ts +149 -0
- package/node_modules/@oxygen/shared/dist/workspace-placement-view.js +101 -0
- package/node_modules/@oxygen/shared/dist/workspace-placement.d.ts +77 -0
- package/node_modules/@oxygen/shared/dist/workspace-placement.js +94 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
// Build the actual command tree without starting the executable, diagnostics, or updates.
|
|
2
|
+
// The executable retains its ordered runtime initialization imports in index.ts.
|
|
3
|
+
import { registerAdminLeadMagnetCommands } from "../admin-lead-magnet-commands.js";
|
|
4
|
+
import { handleAsyncAction } from "../cli-output.js";
|
|
5
|
+
import { recordCliProfileFlag } from "../cli-profile-context.js";
|
|
6
|
+
import { registerActionColumnFamily } from "../commands/action-column.js";
|
|
7
|
+
import { registerActivationFamily } from "../commands/activation.js";
|
|
8
|
+
import { registerAdminFamily } from "../commands/admin.js";
|
|
9
|
+
import { registerAdsFamily } from "../commands/ads.js";
|
|
10
|
+
import { registerAgentFamily } from "../commands/agent.js";
|
|
11
|
+
import { registerApiKeysFamily } from "../commands/api-keys.js";
|
|
12
|
+
import { registerApprovalsFamily } from "../commands/approvals.js";
|
|
13
|
+
import { registerAuthFamily } from "../commands/auth.js";
|
|
14
|
+
import { registerBillingFamily } from "../commands/billing.js";
|
|
15
|
+
import { registerBlueprintsFamily } from "../commands/blueprints.js";
|
|
16
|
+
import { registerBudgetFamily } from "../commands/budget.js";
|
|
17
|
+
import { registerCallablesFamily } from "../commands/callables.js";
|
|
18
|
+
import { registerCapabilitiesFamily } from "../commands/capabilities.js";
|
|
19
|
+
import { registerCellsFamily } from "../commands/cells.js";
|
|
20
|
+
import { registerColumnsFamily } from "../commands/columns.js";
|
|
21
|
+
import { registerCommandsFamily } from "../commands/commands.js";
|
|
22
|
+
import { registerCommentsFamily } from "../commands/comments.js";
|
|
23
|
+
import { registerCompaniesFamily } from "../commands/companies.js";
|
|
24
|
+
import { registerConnectionsFamily } from "../commands/connections.js";
|
|
25
|
+
import { registerContextFamily } from "../commands/context.js";
|
|
26
|
+
import { registerCopilotFamily } from "../commands/copilot.js";
|
|
27
|
+
import { registerCrmFamily } from "../commands/crm.js";
|
|
28
|
+
import { registerCustomIntegrationsFamily } from "../commands/custom-integrations.js";
|
|
29
|
+
import { registerDashboardsFamily } from "../commands/dashboards.js";
|
|
30
|
+
import { registerDbFamily } from "../commands/db.js";
|
|
31
|
+
import { registerDeliverabilityFamily } from "../commands/deliverability.js";
|
|
32
|
+
import { registerDirectoryFamily } from "../commands/directory.js";
|
|
33
|
+
import { registerDomainsFamily } from "../commands/domains.js";
|
|
34
|
+
import { registerEgressFamily } from "../commands/egress.js";
|
|
35
|
+
import { registerEmailFamily } from "../commands/email.js";
|
|
36
|
+
import { registerEngagementFamily } from "../commands/engagement.js";
|
|
37
|
+
import { registerEnrichColumnFamily } from "../commands/enrich-column.js";
|
|
38
|
+
import { registerEnrichmentFamily } from "../commands/enrichment.js";
|
|
39
|
+
import { registerFeedbackFamily } from "../commands/feedback.js";
|
|
40
|
+
import { registerFeedsFamily } from "../commands/feeds.js";
|
|
41
|
+
import { registerFindFamily } from "../commands/find.js";
|
|
42
|
+
import { registerFollowersFamily } from "../commands/followers.js";
|
|
43
|
+
import { registerFormulasFamily } from "../commands/formulas.js";
|
|
44
|
+
import { registerHomeFamily } from "../commands/home.js";
|
|
45
|
+
import { registerInboxFamily } from "../commands/inbox.js";
|
|
46
|
+
import { registerIntegrationsFamily } from "../commands/integrations.js";
|
|
47
|
+
import { registerKnowledgeFamily } from "../commands/knowledge.js";
|
|
48
|
+
import { registerLeadSourcingFamily } from "../commands/lead-sourcing.js";
|
|
49
|
+
import { registerLimitsFamily } from "../commands/limits.js";
|
|
50
|
+
import { registerLinkedinFamily } from "../commands/linkedin.js";
|
|
51
|
+
import { registerLoginFamily } from "../commands/login.js";
|
|
52
|
+
import { registerLogoutFamily } from "../commands/logout.js";
|
|
53
|
+
import { registerMailboxesFamily } from "../commands/mailboxes.js";
|
|
54
|
+
import { registerManagedInboxesFamily } from "../commands/managed-inboxes.js";
|
|
55
|
+
import { registerMessagesFamily } from "../commands/messages.js";
|
|
56
|
+
import { registerNotetakerFamily } from "../commands/notetaker.js";
|
|
57
|
+
import { registerObservabilityFamily } from "../commands/observability.js";
|
|
58
|
+
import { registerOrgsFamily } from "../commands/orgs.js";
|
|
59
|
+
import { registerPeopleFamily } from "../commands/people.js";
|
|
60
|
+
import { registerPostsFamily } from "../commands/posts.js";
|
|
61
|
+
import { registerProfilesFamily } from "../commands/profiles.js";
|
|
62
|
+
import { registerProjectsFamily } from "../commands/projects.js";
|
|
63
|
+
import { registerPromptsFamily } from "../commands/prompts.js";
|
|
64
|
+
import { registerPublishingFamily } from "../commands/publishing.js";
|
|
65
|
+
import { registerRecipesFamily } from "../commands/recipes.js";
|
|
66
|
+
import { registerReviewsFamily } from "../commands/reviews.js";
|
|
67
|
+
import { registerRowsFamily } from "../commands/rows.js";
|
|
68
|
+
import { registerRunsFamily } from "../commands/runs.js";
|
|
69
|
+
import { registerSearchFamily } from "../commands/search.js";
|
|
70
|
+
import { registerSendersFamily } from "../commands/senders.js";
|
|
71
|
+
import { registerSequencesFamily } from "../commands/sequences.js";
|
|
72
|
+
import { registerSessionFamily } from "../commands/session.js";
|
|
73
|
+
import { registerSignalsFamily } from "../commands/signals.js";
|
|
74
|
+
import { registerSignupLeadsFamily } from "../commands/signup-leads.js";
|
|
75
|
+
import { registerSkillsFamily } from "../commands/skills.js";
|
|
76
|
+
import { registerSourcingFamily } from "../commands/sourcing.js";
|
|
77
|
+
import { registerStatusFamily } from "../commands/status.js";
|
|
78
|
+
import { registerSupabaseFamily } from "../commands/supabase.js";
|
|
79
|
+
import { registerSupportFamily } from "../commands/support.js";
|
|
80
|
+
import { registerSuppressionsFamily } from "../commands/suppressions.js";
|
|
81
|
+
import { registerTableIngestionsFamily } from "../commands/table-ingestions.js";
|
|
82
|
+
import { registerTableRunsFamily } from "../commands/table-runs.js";
|
|
83
|
+
import { registerTablesFamily } from "../commands/tables.js";
|
|
84
|
+
import { registerTagsFamily } from "../commands/tags.js";
|
|
85
|
+
import { registerToolsFamily } from "../commands/tools.js";
|
|
86
|
+
import { registerUpdateFamily } from "../commands/update.js";
|
|
87
|
+
import { registerVerifyFamily } from "../commands/verify.js";
|
|
88
|
+
import { registerViewersFamily } from "../commands/viewers.js";
|
|
89
|
+
import { registerVoiceFamily } from "../commands/voice.js";
|
|
90
|
+
import { registerWhatsappFamily } from "../commands/whatsapp.js";
|
|
91
|
+
import { registerWhoamiFamily } from "../commands/whoami.js";
|
|
92
|
+
import { registerWorkerFamily } from "../commands/worker.js";
|
|
93
|
+
import { registerWorkflowsFamily } from "../commands/workflows.js";
|
|
94
|
+
import { registerWorkspaceFamily } from "../commands/workspace.js";
|
|
95
|
+
import { registerConnectorsCommands } from "../connectors-commands.js";
|
|
96
|
+
import { defaultApiUrl } from "../credentials.js";
|
|
97
|
+
import { registerCrmFileReadCommands } from "../crm-file-read-commands.js";
|
|
98
|
+
import { registerCrmSupportFlags } from "../crm-support-flags.js";
|
|
99
|
+
import { registerCustomerOperationCommands } from "../customer-operation-commands.js";
|
|
100
|
+
import { registerFunctionsCommands } from "../functions-commands.js";
|
|
101
|
+
import { applyOxygenHelp, enableCommandSuggestions, oxygenDocsUrl, validateRequiredOptionValues } from "../help.js";
|
|
102
|
+
import { registerKnowledgeRepositoryCommands } from "../knowledge-repository-commands.js";
|
|
103
|
+
import { resolveCliBinaryName } from "../runtime.js";
|
|
104
|
+
import { registerSettingsCommands } from "../settings-commands.js";
|
|
105
|
+
import { registerUgcCommands } from "../ugc-commands.js";
|
|
106
|
+
import { registerVisualCommands } from "../visual-commands.js";
|
|
107
|
+
import { registerWorkspaceSkillCommands } from "../workspace-skill-commands.js";
|
|
108
|
+
import { OXYGEN_VERSION } from "@oxygen/shared/version";
|
|
109
|
+
import { Command } from "commander";
|
|
110
|
+
export function createProgram() {
|
|
111
|
+
const program = new Command();
|
|
112
|
+
const binaryName = resolveCliBinaryName();
|
|
113
|
+
const directoryDocsUrl = oxygenDocsUrl(defaultApiUrl(), "/agencies");
|
|
114
|
+
const billingDocsUrl = oxygenDocsUrl(defaultApiUrl(), "/safety/billing");
|
|
115
|
+
program
|
|
116
|
+
.name(binaryName)
|
|
117
|
+
.description("The agentic GTM platform for B2B GTM teams: tables, enrichment, sequences, workflows, CRM, knowledge. Everything here also runs in the web app and over MCP; every state-changing action returns a web_url deep-link.")
|
|
118
|
+
.version(OXYGEN_VERSION)
|
|
119
|
+
.option("--pretty", "Indent JSON for human reading; omit for compact agent output.")
|
|
120
|
+
.option("--profile <name>", "Use a stored CLI profile for this command.")
|
|
121
|
+
.option("--org <organization>", "Use an organization id, Clerk org id, or slug for this command.");
|
|
122
|
+
program.hook("preAction", (_root, selected) => {
|
|
123
|
+
validateRequiredOptionValues(program, selected);
|
|
124
|
+
const options = program.opts();
|
|
125
|
+
if (options.profile) {
|
|
126
|
+
recordCliProfileFlag(options.profile);
|
|
127
|
+
process.env.OXYGEN_PROFILE = options.profile;
|
|
128
|
+
}
|
|
129
|
+
if (options.org) {
|
|
130
|
+
process.env.OXYGEN_ORG = options.org;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
registerLoginFamily(program, handleAsyncAction);
|
|
134
|
+
registerAuthFamily(program, handleAsyncAction);
|
|
135
|
+
registerProfilesFamily(program, handleAsyncAction);
|
|
136
|
+
registerLogoutFamily(program, handleAsyncAction);
|
|
137
|
+
registerUpdateFamily(program, handleAsyncAction);
|
|
138
|
+
registerApiKeysFamily(program, handleAsyncAction);
|
|
139
|
+
registerWhoamiFamily(program, handleAsyncAction);
|
|
140
|
+
registerHomeFamily(program, handleAsyncAction);
|
|
141
|
+
registerWorkspaceFamily(program, handleAsyncAction);
|
|
142
|
+
registerActivationFamily(program, handleAsyncAction);
|
|
143
|
+
registerCommandsFamily(program, handleAsyncAction, binaryName);
|
|
144
|
+
registerCapabilitiesFamily(program, handleAsyncAction);
|
|
145
|
+
registerStatusFamily(program, handleAsyncAction);
|
|
146
|
+
registerOrgsFamily(program, handleAsyncAction);
|
|
147
|
+
registerSupportFamily(program, handleAsyncAction);
|
|
148
|
+
registerFeedbackFamily(program, handleAsyncAction);
|
|
149
|
+
registerDbFamily(program, handleAsyncAction);
|
|
150
|
+
registerProjectsFamily(program, handleAsyncAction);
|
|
151
|
+
registerNotetakerFamily(program, handleAsyncAction);
|
|
152
|
+
registerPublishingFamily(program, handleAsyncAction);
|
|
153
|
+
registerDashboardsFamily(program, handleAsyncAction);
|
|
154
|
+
registerCrmFamily(program, handleAsyncAction);
|
|
155
|
+
registerSignalsFamily(program, handleAsyncAction);
|
|
156
|
+
registerTablesFamily(program, handleAsyncAction, binaryName);
|
|
157
|
+
registerFeedsFamily(program, handleAsyncAction);
|
|
158
|
+
registerContextFamily(program, handleAsyncAction);
|
|
159
|
+
registerKnowledgeFamily(program, handleAsyncAction);
|
|
160
|
+
registerAdsFamily(program, handleAsyncAction);
|
|
161
|
+
registerTagsFamily(program, handleAsyncAction);
|
|
162
|
+
registerCommentsFamily(program, handleAsyncAction);
|
|
163
|
+
registerApprovalsFamily(program, handleAsyncAction);
|
|
164
|
+
registerBlueprintsFamily(program, handleAsyncAction);
|
|
165
|
+
registerRecipesFamily(program, handleAsyncAction);
|
|
166
|
+
registerPromptsFamily(program, handleAsyncAction);
|
|
167
|
+
registerReviewsFamily(program, handleAsyncAction);
|
|
168
|
+
registerColumnsFamily(program, handleAsyncAction);
|
|
169
|
+
registerActionColumnFamily(program, handleAsyncAction);
|
|
170
|
+
registerFormulasFamily(program, handleAsyncAction);
|
|
171
|
+
registerTableRunsFamily(program, handleAsyncAction);
|
|
172
|
+
registerTableIngestionsFamily(program, handleAsyncAction);
|
|
173
|
+
registerSourcingFamily(program, handleAsyncAction);
|
|
174
|
+
registerLeadSourcingFamily(program, handleAsyncAction);
|
|
175
|
+
registerSearchFamily(program, handleAsyncAction);
|
|
176
|
+
registerCompaniesFamily(program, handleAsyncAction);
|
|
177
|
+
registerPeopleFamily(program, handleAsyncAction);
|
|
178
|
+
registerWorkerFamily(program, handleAsyncAction);
|
|
179
|
+
registerLimitsFamily(program, handleAsyncAction, billingDocsUrl);
|
|
180
|
+
registerBillingFamily(program, handleAsyncAction, billingDocsUrl);
|
|
181
|
+
registerBudgetFamily(program, handleAsyncAction);
|
|
182
|
+
registerEgressFamily(program, handleAsyncAction);
|
|
183
|
+
registerDirectoryFamily(program, handleAsyncAction, directoryDocsUrl, billingDocsUrl);
|
|
184
|
+
registerAdminFamily(program, handleAsyncAction, binaryName);
|
|
185
|
+
registerSignupLeadsFamily(program, handleAsyncAction);
|
|
186
|
+
registerObservabilityFamily(program, handleAsyncAction);
|
|
187
|
+
registerAgentFamily(program, handleAsyncAction);
|
|
188
|
+
registerCopilotFamily(program, handleAsyncAction);
|
|
189
|
+
registerRunsFamily(program, handleAsyncAction);
|
|
190
|
+
registerRowsFamily(program, handleAsyncAction);
|
|
191
|
+
registerCellsFamily(program, handleAsyncAction);
|
|
192
|
+
registerSessionFamily(program, handleAsyncAction);
|
|
193
|
+
registerCustomIntegrationsFamily(program, handleAsyncAction);
|
|
194
|
+
registerToolsFamily(program, handleAsyncAction);
|
|
195
|
+
registerEnrichColumnFamily(program, handleAsyncAction);
|
|
196
|
+
registerFindFamily(program, handleAsyncAction);
|
|
197
|
+
registerVerifyFamily(program, handleAsyncAction);
|
|
198
|
+
registerEnrichmentFamily(program, handleAsyncAction);
|
|
199
|
+
registerSupabaseFamily(program, handleAsyncAction);
|
|
200
|
+
registerIntegrationsFamily(program, handleAsyncAction);
|
|
201
|
+
registerSendersFamily(program, handleAsyncAction);
|
|
202
|
+
registerConnectionsFamily(program, handleAsyncAction);
|
|
203
|
+
registerFollowersFamily(program, handleAsyncAction);
|
|
204
|
+
registerViewersFamily(program, handleAsyncAction);
|
|
205
|
+
registerPostsFamily(program, handleAsyncAction);
|
|
206
|
+
registerEngagementFamily(program, handleAsyncAction);
|
|
207
|
+
registerLinkedinFamily(program, handleAsyncAction);
|
|
208
|
+
registerWhatsappFamily(program, handleAsyncAction);
|
|
209
|
+
registerInboxFamily(program, handleAsyncAction);
|
|
210
|
+
registerMessagesFamily(program, handleAsyncAction);
|
|
211
|
+
registerSequencesFamily(program, handleAsyncAction);
|
|
212
|
+
registerVoiceFamily(program, handleAsyncAction);
|
|
213
|
+
registerSuppressionsFamily(program, handleAsyncAction);
|
|
214
|
+
registerEmailFamily(program, handleAsyncAction);
|
|
215
|
+
registerManagedInboxesFamily(program, handleAsyncAction);
|
|
216
|
+
registerMailboxesFamily(program, handleAsyncAction);
|
|
217
|
+
registerDeliverabilityFamily(program, handleAsyncAction);
|
|
218
|
+
registerDomainsFamily(program, handleAsyncAction);
|
|
219
|
+
registerCallablesFamily(program, handleAsyncAction);
|
|
220
|
+
registerWorkflowsFamily(program, handleAsyncAction);
|
|
221
|
+
registerSkillsFamily(program, handleAsyncAction);
|
|
222
|
+
registerVisualCommands(program, handleAsyncAction);
|
|
223
|
+
registerFunctionsCommands(program, handleAsyncAction);
|
|
224
|
+
registerUgcCommands(program, handleAsyncAction);
|
|
225
|
+
registerKnowledgeRepositoryCommands(program, handleAsyncAction);
|
|
226
|
+
registerAdminLeadMagnetCommands(program, handleAsyncAction);
|
|
227
|
+
registerConnectorsCommands(program, handleAsyncAction);
|
|
228
|
+
registerSettingsCommands(program, handleAsyncAction);
|
|
229
|
+
registerCrmSupportFlags(program);
|
|
230
|
+
registerWorkspaceSkillCommands(program, handleAsyncAction);
|
|
231
|
+
registerCustomerOperationCommands(program, handleAsyncAction);
|
|
232
|
+
registerCrmFileReadCommands(program, handleAsyncAction);
|
|
233
|
+
// After the register* helpers: help groups are assigned to the commands that
|
|
234
|
+
// exist when this runs, and a family registered later fell into commander's
|
|
235
|
+
// trailing default "Commands:" list (the 2026-09-30 blind agent read the first
|
|
236
|
+
// 80 lines of help and missed `connectors` there).
|
|
237
|
+
applyOxygenHelp(program, binaryName, oxygenDocsUrl(defaultApiUrl()));
|
|
238
|
+
// Last, so every command registered above is covered.
|
|
239
|
+
enableCommandSuggestions(program);
|
|
240
|
+
return program;
|
|
241
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TablesAutoDedupeSetOptions, TablesDedupeOptions, TablesWebhookCreateOptions } from "./options.js";
|
|
2
|
+
export declare const TABLE_WEBHOOK_RATE_HELP: string;
|
|
3
|
+
export declare function tableWebhookListPath(options: {
|
|
4
|
+
table?: string | undefined;
|
|
5
|
+
status?: string | undefined;
|
|
6
|
+
limit?: string | undefined;
|
|
7
|
+
}): string;
|
|
8
|
+
export declare function readTableWebhookAutoRunOptions(options: TablesWebhookCreateOptions): Record<string, unknown> | null;
|
|
9
|
+
export declare function parsePromoteMapOption(value: string | undefined): Array<{
|
|
10
|
+
column: string;
|
|
11
|
+
attribute: string;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function normalizePromotePolicy(value: string | undefined): "fill_empty_only" | "overwrite" | "skip_conflicts";
|
|
14
|
+
export declare function buildDedupeRequest(table: string, options: TablesDedupeOptions): {
|
|
15
|
+
endpoint: string;
|
|
16
|
+
body: Record<string, unknown>;
|
|
17
|
+
};
|
|
18
|
+
export declare function buildTablesAutoDedupeSetBody(table: string, options: TablesAutoDedupeSetOptions): Record<string, unknown>;
|
|
19
|
+
export declare function normalizeDedupeNormalizer(value: string | undefined): "exact" | "email" | "domain" | "linkedin_url" | "fuzzy_label";
|
|
20
|
+
export declare function normalizeDedupeKeep(value: string | undefined): "oldest" | "newest" | "most_complete";
|
|
21
|
+
export declare function normalizeDedupeMergeValues(value: string | undefined): "fill_empty" | null;
|
|
22
|
+
export declare function readSortJsonOption(value: string | undefined): Record<string, unknown>[] | undefined;
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { readPositiveInt } from "../../cli-values.js";
|
|
2
|
+
import { readCsvOption, readPositiveNumber, parseJsonArray } from "../../command-support.js";
|
|
3
|
+
import { readOption, isRecord } from "../../util.js";
|
|
4
|
+
import { OxygenError } from "@oxygen/shared/cli-result";
|
|
5
|
+
import { PUBLIC_WEBHOOK_INGRESS_PER_TARGET_PER_MINUTE } from "@oxygen/shared/plan-band";
|
|
6
|
+
// The only numbers on `tables import --help` used to be --batch-size (a
|
|
7
|
+
// per-request chunk) and the background threshold, so users read 500 as a
|
|
8
|
+
// per-file cap. Echo the shared row ceiling and the tiered byte ceilings instead
|
|
9
|
+
// of restating either as a chunk-size constraint.
|
|
10
|
+
// Webhook ingress scales with plan size (repricing 2026-09, decision L4.4).
|
|
11
|
+
export const TABLE_WEBHOOK_RATE_HELP = `${PUBLIC_WEBHOOK_INGRESS_PER_TARGET_PER_MINUTE.free.toLocaleString("en-US")}–${PUBLIC_WEBHOOK_INGRESS_PER_TARGET_PER_MINUTE["1999"].toLocaleString("en-US")} requests a minute by plan size, per endpoint and sender IP; 429 returns Retry-After; \`oxygen limits show\` lists yours`;
|
|
12
|
+
export function tableWebhookListPath(options) {
|
|
13
|
+
const params = new URLSearchParams();
|
|
14
|
+
const table = readOption(options.table);
|
|
15
|
+
const status = readOption(options.status);
|
|
16
|
+
const limit = readPositiveInt(options.limit);
|
|
17
|
+
if (table)
|
|
18
|
+
params.set("table", table);
|
|
19
|
+
if (status)
|
|
20
|
+
params.set("status", status);
|
|
21
|
+
if (limit)
|
|
22
|
+
params.set("limit", String(limit));
|
|
23
|
+
const query = params.toString();
|
|
24
|
+
return `/api/cli/tables/webhooks${query ? `?${query}` : ""}`;
|
|
25
|
+
}
|
|
26
|
+
export function readTableWebhookAutoRunOptions(options) {
|
|
27
|
+
const columns = readCsvOption(options.autoRunColumns);
|
|
28
|
+
const requested = columns.length > 0
|
|
29
|
+
|| options.autoRunMaxCredits !== undefined
|
|
30
|
+
|| options.autoRunMaxConcurrency !== undefined
|
|
31
|
+
|| Boolean(options.autoRunForce)
|
|
32
|
+
|| options.autoRunConnectionId !== undefined
|
|
33
|
+
|| Boolean(options.autoRunApproved);
|
|
34
|
+
if (!requested)
|
|
35
|
+
return null;
|
|
36
|
+
if (columns.length === 0) {
|
|
37
|
+
throw new OxygenError("invalid_table_webhook", "Pass --auto-run-columns when configuring webhook auto-runs.", {
|
|
38
|
+
exitCode: 1,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const maxCredits = readPositiveNumber(options.autoRunMaxCredits);
|
|
42
|
+
const maxConcurrency = readPositiveInt(options.autoRunMaxConcurrency);
|
|
43
|
+
return {
|
|
44
|
+
columns,
|
|
45
|
+
...(maxCredits !== undefined ? { max_credits: maxCredits } : {}),
|
|
46
|
+
...(maxConcurrency ? { max_concurrency: maxConcurrency } : {}),
|
|
47
|
+
...(options.autoRunForce ? { force: true } : {}),
|
|
48
|
+
...(readOption(options.autoRunConnectionId) ? { connection_id: readOption(options.autoRunConnectionId) } : {}),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// Parse a `tables promote --map` value into the wire mappings [{column, attribute}].
|
|
52
|
+
// Accepts the CSV pair form `column=attribute,column2=attribute2` (LHS is the working
|
|
53
|
+
// column, RHS the CRM attribute — the reverse of --bind-map's identity=column), a
|
|
54
|
+
// JSON array of {column, attribute}, or a JSON object { column: attribute }.
|
|
55
|
+
export function parsePromoteMapOption(value) {
|
|
56
|
+
const trimmed = readOption(value);
|
|
57
|
+
if (!trimmed) {
|
|
58
|
+
throw new OxygenError("invalid_promote_map", "--map is required: column=attribute pairs or a JSON array/object.", { exitCode: 1 });
|
|
59
|
+
}
|
|
60
|
+
if (trimmed.startsWith("[") || trimmed.startsWith("{")) {
|
|
61
|
+
let parsed;
|
|
62
|
+
try {
|
|
63
|
+
parsed = JSON.parse(trimmed);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
throw new OxygenError("invalid_promote_map", "--map JSON is not valid JSON.", { details: { value: trimmed }, exitCode: 1 });
|
|
67
|
+
}
|
|
68
|
+
const entries = Array.isArray(parsed)
|
|
69
|
+
? parsed.map((entry) => {
|
|
70
|
+
const record = isRecord(entry) ? entry : {};
|
|
71
|
+
return {
|
|
72
|
+
column: typeof record.column === "string" ? record.column.trim() : "",
|
|
73
|
+
attribute: typeof record.attribute === "string" ? record.attribute.trim() : "",
|
|
74
|
+
};
|
|
75
|
+
})
|
|
76
|
+
: isRecord(parsed)
|
|
77
|
+
? Object.entries(parsed).map(([column, attribute]) => ({ column: column.trim(), attribute: String(attribute).trim() }))
|
|
78
|
+
: [];
|
|
79
|
+
const mappings = entries.filter((mapping) => mapping.column && mapping.attribute);
|
|
80
|
+
if (mappings.length === 0) {
|
|
81
|
+
throw new OxygenError("invalid_promote_map", "--map must contain at least one column-to-attribute mapping.", { exitCode: 1 });
|
|
82
|
+
}
|
|
83
|
+
return mappings;
|
|
84
|
+
}
|
|
85
|
+
const mappings = [];
|
|
86
|
+
for (const entry of readCsvOption(value)) {
|
|
87
|
+
const separator = entry.indexOf("=");
|
|
88
|
+
if (separator <= 0 || separator === entry.length - 1) {
|
|
89
|
+
throw new OxygenError("invalid_promote_map", "--map entries must be column=attribute pairs, e.g. job_title=job_title,seniority=seniority.", { details: { entry }, exitCode: 1 });
|
|
90
|
+
}
|
|
91
|
+
mappings.push({ column: entry.slice(0, separator).trim(), attribute: entry.slice(separator + 1).trim() });
|
|
92
|
+
}
|
|
93
|
+
if (mappings.length === 0) {
|
|
94
|
+
throw new OxygenError("invalid_promote_map", "--map must contain at least one column-to-attribute mapping.", { exitCode: 1 });
|
|
95
|
+
}
|
|
96
|
+
return mappings;
|
|
97
|
+
}
|
|
98
|
+
// Map the hyphenated CLI policy flag to the wire enum.
|
|
99
|
+
export function normalizePromotePolicy(value) {
|
|
100
|
+
const normalized = (readOption(value) ?? "fill-empty-only").replace(/-/g, "_");
|
|
101
|
+
if (normalized === "fill_empty_only" || normalized === "overwrite" || normalized === "skip_conflicts") {
|
|
102
|
+
return normalized;
|
|
103
|
+
}
|
|
104
|
+
throw new OxygenError("invalid_promote_policy", "--policy must be fill-empty-only, overwrite, or skip-conflicts.", {
|
|
105
|
+
details: { policy: value },
|
|
106
|
+
exitCode: 1,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// Route `tables dedupe` to the preview / apply / cross-check API by flag: --against
|
|
110
|
+
// switches to the read-only cross-table check (rejecting --apply); --apply targets
|
|
111
|
+
// the destructive delete (approved only when --approved is set); otherwise preview.
|
|
112
|
+
export function buildDedupeRequest(table, options) {
|
|
113
|
+
const onColumns = readCsvOption(options.on);
|
|
114
|
+
if (onColumns.length === 0) {
|
|
115
|
+
throw new OxygenError("invalid_dedupe", "--on requires at least one column.", { exitCode: 1 });
|
|
116
|
+
}
|
|
117
|
+
const normalizer = normalizeDedupeNormalizer(options.normalize);
|
|
118
|
+
const scanLimit = readPositiveInt(options.scanLimit);
|
|
119
|
+
const against = readOption(options.against);
|
|
120
|
+
if (against) {
|
|
121
|
+
if (options.apply) {
|
|
122
|
+
throw new OxygenError("invalid_dedupe", "--apply cannot be combined with --against; the cross-table check is read-only.", { exitCode: 1 });
|
|
123
|
+
}
|
|
124
|
+
const againstColumn = readOption(options.againstColumn);
|
|
125
|
+
if (!againstColumn) {
|
|
126
|
+
throw new OxygenError("invalid_dedupe", "--against-column is required with --against.", { exitCode: 1 });
|
|
127
|
+
}
|
|
128
|
+
if (onColumns.length > 1) {
|
|
129
|
+
throw new OxygenError("invalid_dedupe", "The cross-table check matches on a single --on column.", { exitCode: 1 });
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
endpoint: "/api/cli/tables/dedupe/cross-check",
|
|
133
|
+
body: {
|
|
134
|
+
table,
|
|
135
|
+
column: onColumns[0],
|
|
136
|
+
against_table: against,
|
|
137
|
+
against_column: againstColumn,
|
|
138
|
+
normalizer,
|
|
139
|
+
...(scanLimit ? { scan_limit: scanLimit } : {}),
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const keys = onColumns.map((column) => ({ column, normalizer }));
|
|
144
|
+
const keep = normalizeDedupeKeep(options.keep);
|
|
145
|
+
if (options.apply) {
|
|
146
|
+
const mergeValues = normalizeDedupeMergeValues(options.mergeValues);
|
|
147
|
+
return {
|
|
148
|
+
endpoint: "/api/cli/tables/dedupe/apply",
|
|
149
|
+
body: {
|
|
150
|
+
table,
|
|
151
|
+
keys,
|
|
152
|
+
keep,
|
|
153
|
+
...(mergeValues ? { merge_values: mergeValues } : {}),
|
|
154
|
+
...(scanLimit ? { scan_limit: scanLimit } : {}),
|
|
155
|
+
// --approved is the only path that deletes; without it the API 409s with the preview.
|
|
156
|
+
...(options.approved ? { approved: true } : {}),
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
endpoint: "/api/cli/tables/dedupe/preview",
|
|
162
|
+
body: { table, keys, keep, ...(scanLimit ? { scan_limit: scanLimit } : {}) },
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// Build the standing auto-dedupe `set` body: --on columns paired positionally
|
|
166
|
+
// with --normalize modes (unpaired columns default to exact). fuzzy-label maps
|
|
167
|
+
// through so the API rejects it with the on-demand pointer — one source of
|
|
168
|
+
// truth for the hot-path restriction.
|
|
169
|
+
export function buildTablesAutoDedupeSetBody(table, options) {
|
|
170
|
+
const onColumns = readCsvOption(options.on);
|
|
171
|
+
if (onColumns.length === 0) {
|
|
172
|
+
throw new OxygenError("invalid_auto_dedupe", "--on requires at least one column.", { exitCode: 1 });
|
|
173
|
+
}
|
|
174
|
+
const normalizers = readCsvOption(options.normalize);
|
|
175
|
+
const keys = onColumns.map((column, index) => ({
|
|
176
|
+
column,
|
|
177
|
+
normalizer: normalizeDedupeNormalizer(normalizers[index]),
|
|
178
|
+
}));
|
|
179
|
+
const keep = normalizeDedupeKeep(options.keep);
|
|
180
|
+
const mergeValues = normalizeDedupeMergeValues(options.mergeValues);
|
|
181
|
+
return {
|
|
182
|
+
table,
|
|
183
|
+
keys,
|
|
184
|
+
keep,
|
|
185
|
+
...(mergeValues ? { merge_values: mergeValues } : {}),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// Map the CLI --normalize flag to the wire normalizer vocabulary.
|
|
189
|
+
export function normalizeDedupeNormalizer(value) {
|
|
190
|
+
const normalized = (readOption(value) ?? "exact").toLowerCase();
|
|
191
|
+
switch (normalized) {
|
|
192
|
+
case "exact":
|
|
193
|
+
return "exact";
|
|
194
|
+
case "email":
|
|
195
|
+
return "email";
|
|
196
|
+
case "domain":
|
|
197
|
+
return "domain";
|
|
198
|
+
case "linkedin":
|
|
199
|
+
case "linkedin-url":
|
|
200
|
+
case "linkedin_url":
|
|
201
|
+
return "linkedin_url";
|
|
202
|
+
case "fuzzy":
|
|
203
|
+
case "fuzzy-label":
|
|
204
|
+
case "fuzzy_label":
|
|
205
|
+
return "fuzzy_label";
|
|
206
|
+
default:
|
|
207
|
+
throw new OxygenError("invalid_dedupe_normalize", "--normalize must be exact, email, domain, linkedin, or fuzzy-label.", {
|
|
208
|
+
details: { normalize: value },
|
|
209
|
+
exitCode: 1,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
export function normalizeDedupeKeep(value) {
|
|
214
|
+
const normalized = (readOption(value) ?? "oldest").replace(/-/g, "_");
|
|
215
|
+
if (normalized === "oldest" || normalized === "newest" || normalized === "most_complete") {
|
|
216
|
+
return normalized;
|
|
217
|
+
}
|
|
218
|
+
throw new OxygenError("invalid_dedupe_keep", "--keep must be oldest, newest, or most-complete.", {
|
|
219
|
+
details: { keep: value },
|
|
220
|
+
exitCode: 1,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
export function normalizeDedupeMergeValues(value) {
|
|
224
|
+
const raw = readOption(value);
|
|
225
|
+
if (!raw)
|
|
226
|
+
return null;
|
|
227
|
+
const normalized = raw.replace(/-/g, "_");
|
|
228
|
+
if (normalized === "fill_empty")
|
|
229
|
+
return "fill_empty";
|
|
230
|
+
if (normalized === "none")
|
|
231
|
+
return null;
|
|
232
|
+
throw new OxygenError("invalid_dedupe_merge", "--merge-values must be fill-empty.", {
|
|
233
|
+
details: { merge_values: value },
|
|
234
|
+
exitCode: 1,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
export function readSortJsonOption(value) {
|
|
238
|
+
const raw = readOption(value);
|
|
239
|
+
if (!raw)
|
|
240
|
+
return undefined;
|
|
241
|
+
const parsed = parseJsonArray(raw);
|
|
242
|
+
if (parsed.length === 0)
|
|
243
|
+
return undefined;
|
|
244
|
+
if (parsed.some((entry) => !entry || typeof entry !== "object" || Array.isArray(entry))) {
|
|
245
|
+
throw new OxygenError("invalid_sort", "--sort-json must be an array of sort-rule objects.", {
|
|
246
|
+
exitCode: 1,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
return parsed;
|
|
250
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WriteStream } from "node:fs";
|
|
2
|
+
import { TablesExportBundleOptions, TablesExportOptions } from "./options.js";
|
|
3
|
+
export declare function exportRows(table: string, options: TablesExportOptions): Promise<Record<string, unknown>>;
|
|
4
|
+
export declare function exportTableBundle(table: string, options: TablesExportBundleOptions): Promise<Record<string, unknown>>;
|
|
5
|
+
export declare function writeBundleLine(stream: WriteStream, line: string): Promise<void>;
|
|
6
|
+
export declare function finishBundleStream(stream: WriteStream): Promise<void>;
|
|
7
|
+
export declare function assertBundleSerializable(bundle: Record<string, unknown>, rowCount: number): void;
|