@oxygen-agent/cli 1.1011.98 → 1.1011.322
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 +25 -5
- package/dist/column-run-notices.d.ts +16 -0
- package/dist/column-run-notices.js +57 -0
- package/dist/command-manifest.js +10 -1
- package/dist/connectors-commands.d.ts +11 -0
- package/dist/connectors-commands.js +63 -0
- package/dist/help.d.ts +27 -1
- package/dist/help.js +112 -29
- package/dist/http-client.js +8 -0
- package/dist/index.js +362 -130
- package/node_modules/@oxygen/cli-ugc/dist/commands.js +20 -69
- package/node_modules/@oxygen/shared/dist/byok-connect.d.ts +6 -4
- package/node_modules/@oxygen/shared/dist/byok-connect.js +11 -4
- package/node_modules/@oxygen/shared/dist/capability-discovery.d.ts +131 -1
- package/node_modules/@oxygen/shared/dist/capability-discovery.js +325 -30
- package/node_modules/@oxygen/shared/dist/collab.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/collab.js +12 -0
- package/node_modules/@oxygen/shared/dist/column-decision.js +7 -3
- package/node_modules/@oxygen/shared/dist/column-output-fields.js +45 -3
- package/node_modules/@oxygen/shared/dist/company-enrichment-fields.d.ts +20 -13
- package/node_modules/@oxygen/shared/dist/company-enrichment-fields.js +29 -13
- package/node_modules/@oxygen/shared/dist/contracts/connectors.d.ts +23 -0
- package/node_modules/@oxygen/shared/dist/contracts/connectors.js +34 -0
- package/node_modules/@oxygen/shared/dist/contracts/operations.d.ts +0 -6
- package/node_modules/@oxygen/shared/dist/contracts/operations.js +8 -1
- package/node_modules/@oxygen/shared/dist/contracts/sender-limits.js +1 -1
- package/node_modules/@oxygen/shared/dist/copilot-skills.generated.d.ts +2 -2
- package/node_modules/@oxygen/shared/dist/copilot-skills.generated.js +2 -2
- package/node_modules/@oxygen/shared/dist/credit-guidance.js +12 -1
- package/node_modules/@oxygen/shared/dist/enrichment-intents.d.ts +37 -0
- package/node_modules/@oxygen/shared/dist/enrichment-intents.js +79 -44
- package/node_modules/@oxygen/shared/dist/feature-gates.d.ts +5 -0
- package/node_modules/@oxygen/shared/dist/feature-gates.js +6 -0
- package/node_modules/@oxygen/shared/dist/knowledge-bootstrap.d.ts +57 -8
- package/node_modules/@oxygen/shared/dist/knowledge-bootstrap.js +74 -13
- package/node_modules/@oxygen/shared/dist/linkedin-url.d.ts +7 -0
- package/node_modules/@oxygen/shared/dist/linkedin-url.js +9 -0
- package/node_modules/@oxygen/shared/dist/log.d.ts +1 -0
- package/node_modules/@oxygen/shared/dist/log.js +15 -0
- package/node_modules/@oxygen/shared/dist/mcp-event-contract.d.ts +597 -0
- package/node_modules/@oxygen/shared/dist/mcp-event-contract.js +713 -0
- package/node_modules/@oxygen/shared/dist/mcp-events-enabled.d.ts +2 -0
- package/node_modules/@oxygen/shared/dist/mcp-events-enabled.js +14 -0
- package/node_modules/@oxygen/shared/dist/operational-telemetry.d.ts +1 -0
- package/node_modules/@oxygen/shared/dist/operational-telemetry.js +6 -2
- package/node_modules/@oxygen/shared/dist/otlp-log-sink.d.ts +7 -3
- package/node_modules/@oxygen/shared/dist/otlp-log-sink.js +22 -1
- package/node_modules/@oxygen/shared/dist/plan-limits.d.ts +3 -7
- package/node_modules/@oxygen/shared/dist/plan-limits.js +2 -14
- package/node_modules/@oxygen/shared/dist/select-options.d.ts +6 -0
- package/node_modules/@oxygen/shared/dist/select-options.js +6 -1
- package/node_modules/@oxygen/shared/dist/sending-schedule.d.ts +39 -0
- package/node_modules/@oxygen/shared/dist/sending-schedule.js +41 -0
- package/node_modules/@oxygen/shared/dist/sequence-lifecycle.d.ts +19 -0
- package/node_modules/@oxygen/shared/dist/sequence-lifecycle.js +20 -0
- package/node_modules/@oxygen/shared/dist/sequence-sender-variables.d.ts +35 -0
- package/node_modules/@oxygen/shared/dist/sequence-sender-variables.js +63 -0
- package/node_modules/@oxygen/shared/dist/sequences.d.ts +13 -7
- package/node_modules/@oxygen/shared/dist/sequences.js +26 -0
- package/node_modules/@oxygen/shared/dist/signup-lead-payload.d.ts +2 -0
- package/node_modules/@oxygen/shared/dist/signup-lead-payload.js +5 -0
- package/node_modules/@oxygen/shared/dist/social-post-metrics-series.js +1 -15
- package/node_modules/@oxygen/shared/dist/standard-webhooks.d.ts +51 -0
- package/node_modules/@oxygen/shared/dist/standard-webhooks.js +124 -0
- package/node_modules/@oxygen/shared/dist/tags.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/tags.js +13 -1
- package/node_modules/@oxygen/shared/dist/ugc.d.ts +11 -7
- package/node_modules/@oxygen/shared/dist/ugc.js +14 -6
- 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/zoned-time.d.ts +39 -0
- package/node_modules/@oxygen/shared/dist/zoned-time.js +81 -0
- package/package.json +1 -1
|
@@ -9,10 +9,10 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
9
9
|
memberships: "Active programs this creator workspace has joined, each with your deal (posting_target), this period's progress and your published posts. Your own numbers only. Read these before choosing a program for a personal post.",
|
|
10
10
|
applications: "Applications to public programs: the ones you sent as a creator, or the ones your program received as a brand.",
|
|
11
11
|
profile: "Your creator profile: the topics you post about, who follows you and your LinkedIn profile URL (used when you apply), readable by the brands whose programs you joined. Name, picture and headline come from your connected LinkedIn account.",
|
|
12
|
-
posts: "Enrolled program posts: enroll existing posts, draft from a topic, edit, schedule, record creator or
|
|
12
|
+
posts: "Enrolled program posts: enroll existing posts, draft from a topic, edit, schedule, record the creator's approval (or the organizer's, if the creator delegated it), and schedule one-off comments on program posts. Brands cannot require approval of creator posts.",
|
|
13
13
|
analytics: "Stored daily program and creator performance.",
|
|
14
14
|
knowledge: "Master Knowledge pages shared live with a program.",
|
|
15
|
-
voice: "
|
|
15
|
+
voice: "A program creator's voice: profile and LinkedIn history import. The workspace's own writing voice, learned from its sent messages, is `knowledge synthesize --kind voice`.",
|
|
16
16
|
sponsorship: "Seat and credit sponsorship per participation.",
|
|
17
17
|
amplification: "Bounded, approval-gated amplification of enrolled posts.",
|
|
18
18
|
"peer-amplification": "Creator-owned consent, sender, voice, caps and immutable receipts for engaging with peer posts in one program.",
|
|
@@ -216,8 +216,8 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
216
216
|
view: "calendar",
|
|
217
217
|
description: "Read the program's enrolled post calendar in a bounded UTC date range (up to 42 days). Stored data only, 0 credits.",
|
|
218
218
|
fields: [
|
|
219
|
-
["date_from", "Start ISO instant,
|
|
220
|
-
["date_to", "End ISO instant,
|
|
219
|
+
["date_from", "Start, inclusive: an ISO instant, or YYYY-MM-DD for that day's 00:00 UTC.", true],
|
|
220
|
+
["date_to", "End, exclusive: an ISO instant, or YYYY-MM-DD for that day's 00:00 UTC, so that day itself is left out.", true],
|
|
221
221
|
[
|
|
222
222
|
"calendar_cursor",
|
|
223
223
|
"Calendar next_cursor from the previous page.",
|
|
@@ -289,7 +289,7 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
289
289
|
{
|
|
290
290
|
action: "program_create",
|
|
291
291
|
command: "programs create",
|
|
292
|
-
description: "Create a master UGC program from its product link
|
|
292
|
+
description: "Create a master UGC program from its product link; the name and icon come from the site. Creators approve their own posts; brands cannot require approval. Free: 0 credits, no provider call.",
|
|
293
293
|
fields: [
|
|
294
294
|
{
|
|
295
295
|
name: "product_url",
|
|
@@ -300,13 +300,13 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
300
300
|
{
|
|
301
301
|
name: "name",
|
|
302
302
|
kind: "string",
|
|
303
|
-
description: "
|
|
303
|
+
description: 'The brand creators post about; invitations read "post about <name>" (e.g. Acme, not "Acme Creator Program"). Defaults to the product site\'s name, else its domain.',
|
|
304
304
|
required: false,
|
|
305
305
|
},
|
|
306
306
|
{
|
|
307
307
|
name: "brief",
|
|
308
308
|
kind: "string",
|
|
309
|
-
description: "
|
|
309
|
+
description: "Creator brief (up to 4,000 characters): what the product is, who it is for, key facts and the call to action. Drafts are grounded in it; share longer guidance as a wiki page with --knowledge-slugs.",
|
|
310
310
|
required: false,
|
|
311
311
|
},
|
|
312
312
|
{
|
|
@@ -321,12 +321,6 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
321
321
|
description: "Selected live master wiki slugs shared with creators; empty array clears sharing.",
|
|
322
322
|
required: false,
|
|
323
323
|
},
|
|
324
|
-
{
|
|
325
|
-
name: "brand_approval_required",
|
|
326
|
-
kind: "boolean",
|
|
327
|
-
description: "Require a separate brand approval before publishing.",
|
|
328
|
-
required: false,
|
|
329
|
-
},
|
|
330
324
|
{
|
|
331
325
|
name: "posting_target",
|
|
332
326
|
kind: "posting_target",
|
|
@@ -355,7 +349,7 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
355
349
|
{
|
|
356
350
|
name: "name",
|
|
357
351
|
kind: "string",
|
|
358
|
-
description: "
|
|
352
|
+
description: 'The brand creators post about; invitations read "post about <name>".',
|
|
359
353
|
required: false,
|
|
360
354
|
},
|
|
361
355
|
{
|
|
@@ -367,7 +361,7 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
367
361
|
{
|
|
368
362
|
name: "brief",
|
|
369
363
|
kind: "string",
|
|
370
|
-
description: "
|
|
364
|
+
description: "Creator brief (up to 4,000 characters); an empty string clears it.",
|
|
371
365
|
required: false,
|
|
372
366
|
},
|
|
373
367
|
{
|
|
@@ -382,12 +376,6 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
382
376
|
description: "Selected live master wiki slugs shared with creators; empty array clears sharing.",
|
|
383
377
|
required: false,
|
|
384
378
|
},
|
|
385
|
-
{
|
|
386
|
-
name: "brand_approval_required",
|
|
387
|
-
kind: "boolean",
|
|
388
|
-
description: "Require a separate brand approval before publishing.",
|
|
389
|
-
required: false,
|
|
390
|
-
},
|
|
391
379
|
{
|
|
392
380
|
name: "posting_target",
|
|
393
381
|
kind: "posting_target",
|
|
@@ -445,7 +433,7 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
445
433
|
{
|
|
446
434
|
action: "program_duplicate",
|
|
447
435
|
command: "programs duplicate",
|
|
448
|
-
description: "Copy a program's settings, shared knowledge
|
|
436
|
+
description: "Copy a program's settings, shared knowledge and posting target into a new active program. Free: 0 credits. Never copies creators, invitations, posts or sponsorship.",
|
|
449
437
|
fields: [
|
|
450
438
|
{
|
|
451
439
|
name: "program_id",
|
|
@@ -456,7 +444,7 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
456
444
|
{
|
|
457
445
|
name: "name",
|
|
458
446
|
kind: "string",
|
|
459
|
-
description: 'Name of the copy; defaults to "<name>
|
|
447
|
+
description: 'Name of the copy; defaults to the source program\'s name. Creators read it: invitations say "post about <name>".',
|
|
460
448
|
required: false,
|
|
461
449
|
},
|
|
462
450
|
],
|
|
@@ -483,7 +471,7 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
483
471
|
{
|
|
484
472
|
action: "invite_create",
|
|
485
473
|
command: "creators invite",
|
|
486
|
-
description: "Preview an invitation email (0 credits) for one creator (--email) or up to 50 at once (--emails); send with --approved --preview-token from that preview and the same recipients. Use --link-only to create links without email.",
|
|
474
|
+
description: "Preview an invitation email (0 credits) for one creator (--email) or up to 50 at once (--emails); send with --approved --preview-token from that preview and the same recipients. Use --link-only to create links without email. Placeholder addresses (example.com, .test, .invalid) are refused on every path, --link-only included, and nothing is created. The default email names the program and carries the join link, not the brief or posting target; add those with --email-message. A refused email ends ugc_invitation_email_not_sent; the created invitation and its link are in error.details.",
|
|
487
475
|
fields: [
|
|
488
476
|
{
|
|
489
477
|
name: "program_id",
|
|
@@ -558,7 +546,7 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
558
546
|
{
|
|
559
547
|
action: "application_decide",
|
|
560
548
|
command: "creators decline",
|
|
561
|
-
description: "Decline a pending application to your program. No email is sent. Free: 0 credits.",
|
|
549
|
+
description: "Decline a pending application to your program. No email is sent, and the applicant cannot apply to this program again (you can still invite them). Free: 0 credits.",
|
|
562
550
|
fixed: { decision: "decline" },
|
|
563
551
|
fields: [
|
|
564
552
|
{ name: "program_id", kind: "string", description: "Program ID.", required: true },
|
|
@@ -624,7 +612,7 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
624
612
|
{
|
|
625
613
|
action: "invite_send",
|
|
626
614
|
command: "creators send-invite",
|
|
627
|
-
description: "Preview email for an existing pending invitation; send or resend with --approved --preview-token. Replaces the old link, keeps its expiry. Sent means provider accepted, not inbox delivery.",
|
|
615
|
+
description: "Preview email for an existing pending invitation; send or resend with --approved --preview-token. Replaces the old link, keeps its expiry. Sent means provider accepted, not inbox delivery. A refused email ends ugc_invitation_email_not_sent; the invitation and its link are in error.details.",
|
|
628
616
|
fields: [
|
|
629
617
|
{
|
|
630
618
|
name: "program_id",
|
|
@@ -703,15 +691,15 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
703
691
|
{
|
|
704
692
|
name: "linkedin_url",
|
|
705
693
|
kind: "string",
|
|
706
|
-
description: "
|
|
707
|
-
required:
|
|
694
|
+
description: "Your LinkedIn profile URL; passing it also saves it to your profile. Omit to use the one on your profile (ugc profile get); if neither exists, ask the person rather than guess.",
|
|
695
|
+
required: false,
|
|
708
696
|
},
|
|
709
697
|
],
|
|
710
698
|
},
|
|
711
699
|
{
|
|
712
700
|
action: "participation_update",
|
|
713
701
|
command: "creators update",
|
|
714
|
-
description: "Connect an existing LinkedIn sender, change approval authority, or leave the entire program. Revocation stops future sharing and program actions; your posts stay in your workspace and the organizer retains previously shared history.
|
|
702
|
+
description: "Connect an existing LinkedIn sender, change approval authority, or leave the entire program. Revocation stops future sharing and program actions; your posts stay in your workspace and the organizer retains previously shared history. Neither this workspace nor the same LinkedIn profile from another workspace can rejoin the same program. To remove one post while staying, use ugc posts remove.",
|
|
715
703
|
fields: [
|
|
716
704
|
{
|
|
717
705
|
name: "participation_id",
|
|
@@ -879,7 +867,7 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
879
867
|
{
|
|
880
868
|
name: "approve",
|
|
881
869
|
kind: "boolean",
|
|
882
|
-
description: "Your own post: true approves exactly what this saves, so it schedules without a separate posts approve. Signed-in creator only
|
|
870
|
+
description: "Your own post: true approves exactly what this saves, so it schedules without a separate posts approve. Signed-in creator only.",
|
|
883
871
|
required: false,
|
|
884
872
|
},
|
|
885
873
|
],
|
|
@@ -887,7 +875,7 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
887
875
|
{
|
|
888
876
|
action: "post_approve",
|
|
889
877
|
command: "posts approve",
|
|
890
|
-
description: "Record creator
|
|
878
|
+
description: "Record the creator's approval of the current post, or the organizer's if the creator delegated it.",
|
|
891
879
|
fields: [
|
|
892
880
|
{
|
|
893
881
|
name: "program_id",
|
|
@@ -921,43 +909,6 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
921
909
|
},
|
|
922
910
|
],
|
|
923
911
|
},
|
|
924
|
-
{
|
|
925
|
-
action: "brand_approve",
|
|
926
|
-
command: "posts brand-approve",
|
|
927
|
-
description: "Record separate master brand approval of the current post.",
|
|
928
|
-
fields: [
|
|
929
|
-
{
|
|
930
|
-
name: "program_id",
|
|
931
|
-
kind: "string",
|
|
932
|
-
description: "Program ID.",
|
|
933
|
-
required: true,
|
|
934
|
-
},
|
|
935
|
-
{
|
|
936
|
-
name: "post_id",
|
|
937
|
-
kind: "string",
|
|
938
|
-
description: "Canonical post ID.",
|
|
939
|
-
required: true,
|
|
940
|
-
},
|
|
941
|
-
{
|
|
942
|
-
name: "enrollment_version",
|
|
943
|
-
kind: "number",
|
|
944
|
-
description: "Exact enrollment version returned by posts list; always send it so brand approval binds the current enrollment.",
|
|
945
|
-
required: true,
|
|
946
|
-
},
|
|
947
|
-
{
|
|
948
|
-
name: "source_revision",
|
|
949
|
-
kind: "string",
|
|
950
|
-
description: "Exact reviewed content fingerprint returned by posts list.",
|
|
951
|
-
required: true,
|
|
952
|
-
},
|
|
953
|
-
{
|
|
954
|
-
name: "approved",
|
|
955
|
-
kind: "boolean",
|
|
956
|
-
description: "Explicit authorization of the exact preview or approval. Never inferred.",
|
|
957
|
-
required: true,
|
|
958
|
-
},
|
|
959
|
-
],
|
|
960
|
-
},
|
|
961
912
|
{
|
|
962
913
|
action: "voice_import",
|
|
963
914
|
command: "voice import",
|
|
@@ -1023,7 +974,7 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
|
|
|
1023
974
|
{
|
|
1024
975
|
action: "sponsorship_cancel",
|
|
1025
976
|
command: "sponsorship cancel",
|
|
1026
|
-
description: "Preview stopping
|
|
977
|
+
description: "Preview stopping one program sponsorship. Confirm with --approved and a signed-in master admin. A paid sponsorship keeps its period (renewal: stops_at_paid_through); an unpaid one ends at once and its checkout closes (renewal: stops_now). A credit sponsorship stops without a card provider call.",
|
|
1027
978
|
fields: [
|
|
1028
979
|
{
|
|
1029
980
|
name: "program_id",
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
*
|
|
5
5
|
* WHY THIS EXISTS. `native_provider.execution.supports_byok` says a TOOL can run on
|
|
6
6
|
* a customer's own key. It does not say the customer has any way to give us one.
|
|
7
|
-
* Those are two different facts, and
|
|
7
|
+
* Those are two different facts, and 7 of the 42 byok-capable native providers
|
|
8
8
|
* have the first without the second:
|
|
9
9
|
*
|
|
10
|
-
* apify builtwith dropleads
|
|
11
|
-
*
|
|
10
|
+
* apify builtwith dropleads openwebninja peopledatalabs theirstack wiza
|
|
11
|
+
*
|
|
12
|
+
* (Nine until 2026-09-29, when lusha and rocketreach gained native connect forms:
|
|
13
|
+
* D57 had left them runnable only on a customer key nobody could connect.)
|
|
12
14
|
*
|
|
13
15
|
* For those, `oxygen integrations connect <id> --api-key` does not reach
|
|
14
16
|
* `connectViaApiKey` at all. With no native catalog definition,
|
|
@@ -18,7 +20,7 @@
|
|
|
18
20
|
* `resolveOptionalApiKeyCredentials` finds nothing and the call falls back to the
|
|
19
21
|
* MANAGED key — the very key that was out of credits. The command appears to work,
|
|
20
22
|
* changes nothing, and the customer is back where they started with no error. The
|
|
21
|
-
* connect route now refuses each of those
|
|
23
|
+
* connect route now refuses each of those seven with a typed `byok_connect_unavailable`
|
|
22
24
|
* rather than a silent Composio "success"; they stay OFF this list until one gains a
|
|
23
25
|
* real native connect form.
|
|
24
26
|
*
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
*
|
|
5
5
|
* WHY THIS EXISTS. `native_provider.execution.supports_byok` says a TOOL can run on
|
|
6
6
|
* a customer's own key. It does not say the customer has any way to give us one.
|
|
7
|
-
* Those are two different facts, and
|
|
7
|
+
* Those are two different facts, and 7 of the 42 byok-capable native providers
|
|
8
8
|
* have the first without the second:
|
|
9
9
|
*
|
|
10
|
-
* apify builtwith dropleads
|
|
11
|
-
*
|
|
10
|
+
* apify builtwith dropleads openwebninja peopledatalabs theirstack wiza
|
|
11
|
+
*
|
|
12
|
+
* (Nine until 2026-09-29, when lusha and rocketreach gained native connect forms:
|
|
13
|
+
* D57 had left them runnable only on a customer key nobody could connect.)
|
|
12
14
|
*
|
|
13
15
|
* For those, `oxygen integrations connect <id> --api-key` does not reach
|
|
14
16
|
* `connectViaApiKey` at all. With no native catalog definition,
|
|
@@ -18,7 +20,7 @@
|
|
|
18
20
|
* `resolveOptionalApiKeyCredentials` finds nothing and the call falls back to the
|
|
19
21
|
* MANAGED key — the very key that was out of credits. The command appears to work,
|
|
20
22
|
* changes nothing, and the customer is back where they started with no error. The
|
|
21
|
-
* connect route now refuses each of those
|
|
23
|
+
* connect route now refuses each of those seven with a typed `byok_connect_unavailable`
|
|
22
24
|
* rather than a silent Composio "success"; they stay OFF this list until one gains a
|
|
23
25
|
* real native connect form.
|
|
24
26
|
*
|
|
@@ -63,6 +65,10 @@ export const NATIVE_API_KEY_CONNECT_INTEGRATION_IDS = new Set([
|
|
|
63
65
|
"icypeas",
|
|
64
66
|
"leadmagic",
|
|
65
67
|
"linkup",
|
|
68
|
+
// lusha / rocketreach (D61, 2026-09-29): native api-key connect forms in catalog.ts,
|
|
69
|
+
// validated on each vendor's free account read. D57 left both runnable only on
|
|
70
|
+
// the workspace's own key, which nothing could store until then.
|
|
71
|
+
"lusha",
|
|
66
72
|
"millionverifier",
|
|
67
73
|
// Connects through saveMoltsetsConnection rather than the generic save, but that
|
|
68
74
|
// service calls saveApiKeyIntegrationConnection with secretKind "api_key" like the
|
|
@@ -75,6 +81,7 @@ export const NATIVE_API_KEY_CONNECT_INTEGRATION_IDS = new Set([
|
|
|
75
81
|
"pipedrive",
|
|
76
82
|
"predictleads",
|
|
77
83
|
"prospeo",
|
|
84
|
+
"rocketreach",
|
|
78
85
|
"scalelist",
|
|
79
86
|
// scrapeli / up2data (2026-09-25): the company-followers and LinkedIn post lanes
|
|
80
87
|
// offer "Bring your own API key"; both connect forms live in catalog.ts.
|
|
@@ -30,6 +30,13 @@ export type CapabilityRouteMatch = {
|
|
|
30
30
|
* intent is that narrow; `recommendedCommands[0]` is the same command.
|
|
31
31
|
*/
|
|
32
32
|
exactCommand?: string;
|
|
33
|
+
/**
|
|
34
|
+
* The same invocation as an MCP tool call, for a client with tools and no
|
|
35
|
+
* shell. The MCP surface serves it in place of `exactCommand`: an MCP agent
|
|
36
|
+
* handed a CLI command had to translate it, and one reported it as coming
|
|
37
|
+
* from "the docs" (blind user eval, 2026-09-29).
|
|
38
|
+
*/
|
|
39
|
+
exactMcpCall?: CapabilityMcpCall;
|
|
33
40
|
/**
|
|
34
41
|
* The opinionated enrichment catalogue row a data-type ask resolves to
|
|
35
42
|
* ("get the funding round" -> enrich_company:funding). Present only when
|
|
@@ -45,18 +52,141 @@ export type CapabilityRouteMatch = {
|
|
|
45
52
|
tools: string[];
|
|
46
53
|
commands: string[];
|
|
47
54
|
exactCommand: string;
|
|
55
|
+
/** The same read as an MCP call, served on MCP in place of `exactCommand`. */
|
|
56
|
+
exactMcpCall: CapabilityMcpCall;
|
|
48
57
|
};
|
|
49
58
|
};
|
|
50
59
|
export type PrimitiveRouteMatch = CapabilityRouteMatch & {
|
|
51
60
|
card: PrimitiveRouteCard;
|
|
52
61
|
};
|
|
62
|
+
/** One MCP tool call with placeholder arguments, e.g. `"<sequence>"`. */
|
|
63
|
+
export type CapabilityMcpCall = {
|
|
64
|
+
tool: string;
|
|
65
|
+
arguments: Record<string, unknown>;
|
|
66
|
+
};
|
|
67
|
+
/** Which surface reads a serialized route: the MCP one gets tool calls, not CLI commands. */
|
|
68
|
+
export type CapabilityRouteSurface = "cli" | "mcp";
|
|
53
69
|
export declare const OXYGEN_CAPABILITY_ROUTES: readonly CapabilityRouteCard[];
|
|
54
70
|
export declare const OXYGEN_PRIMITIVE_ROUTES: readonly PrimitiveRouteCard[];
|
|
55
71
|
export declare function getCapabilityRoute(id: string): CapabilityRouteCard | null;
|
|
56
72
|
export declare function getCapabilityRouteMatch(id: string): CapabilityRouteMatch | null;
|
|
57
73
|
export declare function inferCapabilityRoute(query: string): CapabilityRouteMatch | null;
|
|
74
|
+
/**
|
|
75
|
+
* The MCP tool a catalogue row's `find` command maps to, named by its command
|
|
76
|
+
* words alone: "find company --domain <domain> --fields funding,..." once became
|
|
77
|
+
* the tool "oxygen_find_company_domain_<domain>_fields_...", which does not
|
|
78
|
+
* exist (funding, hiring-signal and revenue rows, 2026-09-29).
|
|
79
|
+
*/
|
|
80
|
+
export declare function catalogueFindTool(row: EnrichmentIntentTaxonomyEntry): string | null;
|
|
58
81
|
export declare function inferPrimitiveRoute(query: string): PrimitiveRouteMatch | null;
|
|
59
|
-
export declare function serializeCapabilityRoute(route: CapabilityRouteMatch | null): Record<string, unknown> | null;
|
|
82
|
+
export declare function serializeCapabilityRoute(route: CapabilityRouteMatch | null, surface?: CapabilityRouteSurface): Record<string, unknown> | null;
|
|
83
|
+
/** One schedule for every channel of a Sequence, the same as Launch's Sending schedule. */
|
|
84
|
+
export declare const SEQUENCE_SENDING_SCHEDULE_COMMAND = "oxygen sequences update <sequence> --schedule-timezone <IANA zone> --schedule-days mon-fri --schedule-hours-start 09:00 --schedule-hours-end 17:00 --json";
|
|
85
|
+
/** Launch's unsubscribe switch: the visible link and the one-click headers together. */
|
|
86
|
+
export declare const SEQUENCE_UNSUBSCRIBE_COMMAND = "oxygen sequences update <sequence> --include-unsubscribe --json";
|
|
87
|
+
/**
|
|
88
|
+
* Every exact CLI command a route hands out, as the MCP tool call that sends the
|
|
89
|
+
* same request. The MCP surface serves these in place of the command: an MCP
|
|
90
|
+
* agent handed a CLI command had to translate it (blind user eval, 2026-09-29).
|
|
91
|
+
* Each was traced to the same `/api/cli/*` request as its command; the
|
|
92
|
+
* mcp-server test proves every tool exists and declares every argument.
|
|
93
|
+
* Factories, so a caller can edit the object it gets.
|
|
94
|
+
*/
|
|
95
|
+
export declare const CAPABILITY_ROUTE_MCP_CALLS: {
|
|
96
|
+
connectedAppsList: () => {
|
|
97
|
+
tool: string;
|
|
98
|
+
arguments: {};
|
|
99
|
+
};
|
|
100
|
+
sequenceSendingSchedule: () => {
|
|
101
|
+
tool: string;
|
|
102
|
+
arguments: {
|
|
103
|
+
sequence: string;
|
|
104
|
+
sending_schedule: {
|
|
105
|
+
timezone: string;
|
|
106
|
+
days: number[];
|
|
107
|
+
start: string;
|
|
108
|
+
end: string;
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
sequenceUnsubscribe: () => {
|
|
113
|
+
tool: string;
|
|
114
|
+
arguments: {
|
|
115
|
+
sequence: string;
|
|
116
|
+
include_unsubscribe: boolean;
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
ugcProgramCreate: () => {
|
|
120
|
+
tool: string;
|
|
121
|
+
arguments: {
|
|
122
|
+
product_url: string;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
publishingFirstComment: () => {
|
|
126
|
+
tool: string;
|
|
127
|
+
arguments: {
|
|
128
|
+
content_text: string;
|
|
129
|
+
publish_at: string;
|
|
130
|
+
sender_account_id: string;
|
|
131
|
+
content: {
|
|
132
|
+
first_comment: string;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
companyUrlRecovery: () => {
|
|
137
|
+
tool: string;
|
|
138
|
+
arguments: {
|
|
139
|
+
prompt: string;
|
|
140
|
+
source_intent: string;
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
companyPageFollowers: () => {
|
|
144
|
+
tool: string;
|
|
145
|
+
arguments: {
|
|
146
|
+
action: string;
|
|
147
|
+
company_url: string;
|
|
148
|
+
records: number;
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
localBusinessScrape: () => {
|
|
152
|
+
tool: string;
|
|
153
|
+
arguments: {
|
|
154
|
+
action: string;
|
|
155
|
+
source: string;
|
|
156
|
+
filters: {
|
|
157
|
+
q: string;
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
senderConnect: () => {
|
|
162
|
+
tool: string;
|
|
163
|
+
arguments: {
|
|
164
|
+
country: string;
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
rowClassification: () => {
|
|
168
|
+
tool: string;
|
|
169
|
+
arguments: {
|
|
170
|
+
family: string;
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
linkedinKeywordPosts: () => {
|
|
174
|
+
tool: string;
|
|
175
|
+
arguments: {
|
|
176
|
+
action: string;
|
|
177
|
+
filters: {
|
|
178
|
+
keywords: string[];
|
|
179
|
+
all_keywords: string[];
|
|
180
|
+
exclude_keywords: string[];
|
|
181
|
+
ai_filter: string;
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
};
|
|
186
|
+
/** The catalogue row's `enrichment catalog --intent <id>` as an MCP call. */
|
|
187
|
+
export declare function catalogueIntentMcpCall(intentId: string): CapabilityMcpCall;
|
|
188
|
+
/** A post's first comment is set with the post; `publishing posts update` takes the same flag. */
|
|
189
|
+
export declare const PUBLISHING_FIRST_COMMENT_COMMAND = "oxygen publishing posts create --publish-at <iso> --sender <sender_id> --text \"<post>\" --first-comment \"<comment, e.g. the link>\" --json";
|
|
60
190
|
export declare const COMPANY_PAGE_FOLLOWERS_COMMAND = "oxygen tables followers check --company <linkedin company page URL> --records <n> --json";
|
|
61
191
|
/** The exact `companies search plan` invocation for the url_recovery intent. */
|
|
62
192
|
export declare const COMPANY_URL_RECOVERY_COMMAND = "oxygen companies search plan --prompt \"Find the websites for these companies: <company names>\" --source-intent url_recovery";
|