@sellable/mcp 0.1.0

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.
Files changed (200) hide show
  1. package/.claude-plugin/plugin.json +12 -0
  2. package/.mcp.json +9 -0
  3. package/README.md +355 -0
  4. package/dist/api.d.ts +21 -0
  5. package/dist/api.js +73 -0
  6. package/dist/auth.d.ts +60 -0
  7. package/dist/auth.js +246 -0
  8. package/dist/engage-memory.d.ts +63 -0
  9. package/dist/engage-memory.js +354 -0
  10. package/dist/index-dev.d.ts +2 -0
  11. package/dist/index-dev.js +17 -0
  12. package/dist/index.d.ts +7 -0
  13. package/dist/index.js +8 -0
  14. package/dist/server.d.ts +1 -0
  15. package/dist/server.js +499 -0
  16. package/dist/skills.d.ts +11 -0
  17. package/dist/skills.js +97 -0
  18. package/dist/tools/auth.d.ts +30 -0
  19. package/dist/tools/auth.js +124 -0
  20. package/dist/tools/blueprint-commit.d.ts +174 -0
  21. package/dist/tools/blueprint-commit.js +286 -0
  22. package/dist/tools/bootstrap.d.ts +64 -0
  23. package/dist/tools/bootstrap.js +246 -0
  24. package/dist/tools/campaigns.d.ts +589 -0
  25. package/dist/tools/campaigns.js +892 -0
  26. package/dist/tools/cells.d.ts +58 -0
  27. package/dist/tools/cells.js +48 -0
  28. package/dist/tools/context.d.ts +88 -0
  29. package/dist/tools/context.js +271 -0
  30. package/dist/tools/csv-domains.d.ts +73 -0
  31. package/dist/tools/csv-domains.js +464 -0
  32. package/dist/tools/csv-linkedin.d.ts +102 -0
  33. package/dist/tools/csv-linkedin.js +712 -0
  34. package/dist/tools/direct-campaigns.d.ts +240 -0
  35. package/dist/tools/direct-campaigns.js +250 -0
  36. package/dist/tools/engage-bootstrap.d.ts +94 -0
  37. package/dist/tools/engage-bootstrap.js +205 -0
  38. package/dist/tools/engage-discovery.d.ts +78 -0
  39. package/dist/tools/engage-discovery.js +150 -0
  40. package/dist/tools/engage-memory.d.ts +181 -0
  41. package/dist/tools/engage-memory.js +143 -0
  42. package/dist/tools/engage-state.d.ts +72 -0
  43. package/dist/tools/engage-state.js +62 -0
  44. package/dist/tools/enrichment.d.ts +167 -0
  45. package/dist/tools/enrichment.js +174 -0
  46. package/dist/tools/flow-preflight.d.ts +68 -0
  47. package/dist/tools/flow-preflight.js +138 -0
  48. package/dist/tools/framework.d.ts +44 -0
  49. package/dist/tools/framework.js +153 -0
  50. package/dist/tools/interaction-mode.d.ts +27 -0
  51. package/dist/tools/interaction-mode.js +102 -0
  52. package/dist/tools/leads.d.ts +2417 -0
  53. package/dist/tools/leads.js +2307 -0
  54. package/dist/tools/linkedin.d.ts +210 -0
  55. package/dist/tools/linkedin.js +229 -0
  56. package/dist/tools/navigation.d.ts +91 -0
  57. package/dist/tools/navigation.js +381 -0
  58. package/dist/tools/one-off.d.ts +229 -0
  59. package/dist/tools/one-off.js +273 -0
  60. package/dist/tools/processing.d.ts +70 -0
  61. package/dist/tools/processing.js +56 -0
  62. package/dist/tools/prompts.d.ts +211 -0
  63. package/dist/tools/prompts.js +210 -0
  64. package/dist/tools/provider-preflight.d.ts +21 -0
  65. package/dist/tools/provider-preflight.js +59 -0
  66. package/dist/tools/readiness.d.ts +261 -0
  67. package/dist/tools/readiness.js +510 -0
  68. package/dist/tools/rows.d.ts +126 -0
  69. package/dist/tools/rows.js +105 -0
  70. package/dist/tools/rubrics.d.ts +497 -0
  71. package/dist/tools/rubrics.js +681 -0
  72. package/dist/tools/senders.d.ts +44 -0
  73. package/dist/tools/senders.js +69 -0
  74. package/dist/tools/sequencer.d.ts +127 -0
  75. package/dist/tools/sequencer.js +194 -0
  76. package/dist/tools/tables.d.ts +35 -0
  77. package/dist/tools/tables.js +36 -0
  78. package/dist/tools/verify-row.d.ts +36 -0
  79. package/dist/tools/verify-row.js +38 -0
  80. package/dist/tools/workspaces.d.ts +140 -0
  81. package/dist/tools/workspaces.js +139 -0
  82. package/dist/utils/workspace-root.d.ts +1 -0
  83. package/dist/utils/workspace-root.js +39 -0
  84. package/package.json +46 -0
  85. package/skills/building-gtm-tables/SKILL.md +216 -0
  86. package/skills/building-gtm-tables/core/auto-execute.yaml +19 -0
  87. package/skills/building-gtm-tables/core/blueprint-schema.json +72 -0
  88. package/skills/building-gtm-tables/references/brief-to-blueprint.md +334 -0
  89. package/skills/building-gtm-tables/references/column-type-catalog.md +318 -0
  90. package/skills/building-gtm-tables/references/common-blueprints.fixtures.ts +199 -0
  91. package/skills/building-gtm-tables/references/common-blueprints.md +44 -0
  92. package/skills/building-gtm-tables/references/failure-taxonomy.md +197 -0
  93. package/skills/building-gtm-tables/references/uat-seed-prompts.md +37 -0
  94. package/skills/building-gtm-tables/references/verify-loop.md +74 -0
  95. package/skills/campaign-messages/SKILL.md +173 -0
  96. package/skills/campaign-messages/flow.v1.json +75 -0
  97. package/skills/craft-message/SKILL.md +401 -0
  98. package/skills/create-campaign/ARCHITECTURE.md +232 -0
  99. package/skills/create-campaign/DISCUSS.md +296 -0
  100. package/skills/create-campaign/FLOW_ASCII.md +240 -0
  101. package/skills/create-campaign/HOST-PARITY-CHECKLIST.md +49 -0
  102. package/skills/create-campaign/README.md +142 -0
  103. package/skills/create-campaign/SKILL.md +286 -0
  104. package/skills/create-campaign/context/README.md +67 -0
  105. package/skills/create-campaign/context/_TEMPLATE.md +12 -0
  106. package/skills/create-campaign/context/context.md +35 -0
  107. package/skills/create-campaign/context/learnings.md +16 -0
  108. package/skills/create-campaign/context/registry.json +19 -0
  109. package/skills/create-campaign/core/flow.v1.json +217 -0
  110. package/skills/create-campaign/core/policy.md +191 -0
  111. package/skills/create-campaign/core/providers/apollo.json +35 -0
  112. package/skills/create-campaign/core/providers/prospeo.json +34 -0
  113. package/skills/create-campaign/core/providers/registry.json +31 -0
  114. package/skills/create-campaign/core/providers/sales-nav.json +37 -0
  115. package/skills/create-campaign/core/providers/signal-discovery.json +42 -0
  116. package/skills/create-campaign/references/brief-template.md +64 -0
  117. package/skills/create-campaign/references/campaign-quality.md +84 -0
  118. package/skills/create-campaign/references/copy-calibration-examples.md +120 -0
  119. package/skills/create-campaign/references/offer-patterns.md +108 -0
  120. package/skills/create-campaign/references/provider-selection-strategy.md +212 -0
  121. package/skills/create-campaign/references/question-examples.md +167 -0
  122. package/skills/create-campaign/references/token-fill-examples.md +81 -0
  123. package/skills/create-campaign-brief/ARCHITECTURE.md +72 -0
  124. package/skills/create-campaign-brief/DISCUSS.md +64 -0
  125. package/skills/create-campaign-brief/README.md +176 -0
  126. package/skills/create-campaign-brief/SKILL.md +537 -0
  127. package/skills/create-campaign-brief/references/brief-synthesis-rules.md +100 -0
  128. package/skills/create-campaign-brief/references/brief-template.md +220 -0
  129. package/skills/create-campaign-brief/references/campaign-idea-options.md +30 -0
  130. package/skills/create-campaign-brief/references/copy-appendix-template.md +62 -0
  131. package/skills/create-campaign-brief/references/draft-lifecycle.md +23 -0
  132. package/skills/create-campaign-brief/references/examples/MANIFEST.json +89 -0
  133. package/skills/create-campaign-brief/references/examples/briefs/clover.md +223 -0
  134. package/skills/create-campaign-brief/references/examples/briefs/galley.md +222 -0
  135. package/skills/create-campaign-brief/references/examples/briefs/gelee.md +220 -0
  136. package/skills/create-campaign-brief/references/examples/briefs/hey-digital.md +234 -0
  137. package/skills/create-campaign-brief/references/examples/briefs/persona.md +231 -0
  138. package/skills/create-campaign-brief/references/examples/briefs/revvix.md +220 -0
  139. package/skills/create-campaign-brief/references/examples/briefs/sellable-dev.md +220 -0
  140. package/skills/create-campaign-brief/references/examples/briefs/superposition.md +233 -0
  141. package/skills/create-campaign-brief/references/examples/briefs/superpower.md +219 -0
  142. package/skills/create-campaign-brief/references/examples/briefs/westpark-villas.md +220 -0
  143. package/skills/create-campaign-brief/references/icp-lock-question-bank.md +43 -0
  144. package/skills/create-campaign-brief/references/messaging-inputs.md +58 -0
  145. package/skills/create-campaign-brief/references/output-acceptance-rubric.md +62 -0
  146. package/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md +248 -0
  147. package/skills/create-campaign-brief/references/phase75-canonical-brief-template.md +319 -0
  148. package/skills/create-campaign-brief/references/phase75-good-brief-and-messaging-examples.md +445 -0
  149. package/skills/create-campaign-brief/references/quick-research-protocol.md +39 -0
  150. package/skills/create-campaign-brief/references/reference-sheet-protocol.md +60 -0
  151. package/skills/create-campaign-brief/references/zero-shot-iteration-rules.md +66 -0
  152. package/skills/create-campaign-v2/SKILL.md +1619 -0
  153. package/skills/create-campaign-v2/core/auto-execute.README.md +219 -0
  154. package/skills/create-campaign-v2/core/auto-execute.yaml +121 -0
  155. package/skills/create-campaign-v2/core/flow.v2.json +1643 -0
  156. package/skills/create-campaign-v2/core/policy.md +82 -0
  157. package/skills/create-campaign-v2/references/ai-tells.md +253 -0
  158. package/skills/create-campaign-v2/references/approval-gate-framing.md +346 -0
  159. package/skills/create-campaign-v2/references/draft-lifecycle.md +110 -0
  160. package/skills/create-campaign-v2/references/escalation-ladder.md +119 -0
  161. package/skills/create-campaign-v2/references/filter-leads.md +495 -0
  162. package/skills/create-campaign-v2/references/final-handoff-contract.md +176 -0
  163. package/skills/create-campaign-v2/references/gold-standard-message-examples.md +394 -0
  164. package/skills/create-campaign-v2/references/gold-standard-message-patterns.md +314 -0
  165. package/skills/create-campaign-v2/references/gold-standard-message-validation-example.md +212 -0
  166. package/skills/create-campaign-v2/references/lead-validation-preview.md +172 -0
  167. package/skills/create-campaign-v2/references/parallel-critique-protocol.md +368 -0
  168. package/skills/create-campaign-v2/references/sample-validation-loop.md +289 -0
  169. package/skills/create-campaign-v2/references/step-13-import-leads.md +151 -0
  170. package/skills/create-campaign-v2/references/step-15-re-cascade.md +90 -0
  171. package/skills/create-campaign-v2/references/thomas-revision-filters.md +521 -0
  172. package/skills/create-campaign-v2/references/thomas-variant-selection.md +202 -0
  173. package/skills/create-campaign-v2/references/tier-routing-matrix.md +66 -0
  174. package/skills/create-campaign-v2/references/validation-criteria.md +367 -0
  175. package/skills/create-campaign-v2/references/watch-link-handoff.md +106 -0
  176. package/skills/create-campaign-v2-validation/SKILL.md +296 -0
  177. package/skills/create-post/SKILL.md +1308 -0
  178. package/skills/create-rubric/SKILL.md +251 -0
  179. package/skills/engage/SKILL.md +549 -0
  180. package/skills/engage/core/README.md +23 -0
  181. package/skills/engage/core/proven-searches.json +11 -0
  182. package/skills/engage/core/style-guide.template.md +47 -0
  183. package/skills/engage/core/tracked-people.json +10 -0
  184. package/skills/enrich-prospects/SKILL.md +97 -0
  185. package/skills/find-leads/SKILL.md +467 -0
  186. package/skills/generate-messages/SKILL.md +2361 -0
  187. package/skills/interview/SKILL.md +132 -0
  188. package/skills/interview/core/ENGAGE_STYLE_GUIDE.template.md +54 -0
  189. package/skills/interview/core/ICP.template.md +54 -0
  190. package/skills/interview/core/VOICE_PROFILE.template.md +101 -0
  191. package/skills/providers/apollo.md +520 -0
  192. package/skills/providers/prospeo.md +398 -0
  193. package/skills/providers/sales-nav.md +372 -0
  194. package/skills/providers/signal-discovery.md +495 -0
  195. package/skills/research/SKILL.md +258 -0
  196. package/skills/research/config.json +9 -0
  197. package/skills/research/override.md +13 -0
  198. package/skills/research-prospect/SKILL.md +99 -0
  199. package/skills/research-sender/SKILL.md +158 -0
  200. package/skills/workflow-sequences/SKILL.md +85 -0
@@ -0,0 +1,273 @@
1
+ import { getApi } from "../api.js";
2
+ const SIMPLE_LINEAR_TEMPLATE = {
3
+ version: 2,
4
+ name: "Simple Linear Sequence",
5
+ description: "Basic connection request followed by DM",
6
+ entryNodeId: "send_invite",
7
+ nodes: [
8
+ {
9
+ id: "send_invite",
10
+ type: "action",
11
+ actionType: "INVITE",
12
+ waitForEvent: {
13
+ event: "connection_accept",
14
+ timeoutDays: 7,
15
+ },
16
+ position: { x: 400, y: 50 },
17
+ },
18
+ {
19
+ id: "send_dm",
20
+ type: "action",
21
+ actionType: "DM",
22
+ waitForEvent: {
23
+ event: "reply",
24
+ timeoutDays: 5,
25
+ },
26
+ position: { x: 400, y: 210 },
27
+ },
28
+ ],
29
+ branches: [
30
+ {
31
+ id: "b1",
32
+ fromNodeId: "send_invite",
33
+ condition: "accepted",
34
+ toNodeId: "send_dm",
35
+ },
36
+ ],
37
+ };
38
+ export const onDemandToolDefinitions = [
39
+ {
40
+ name: "create_on_demand_table",
41
+ description: "Create an on-demand campaign table backed by a lightweight CampaignOffer. Returns tableId + campaignOfferId.",
42
+ inputSchema: {
43
+ type: "object",
44
+ properties: {
45
+ name: {
46
+ type: "string",
47
+ description: "Table name",
48
+ },
49
+ senderIds: {
50
+ type: "array",
51
+ items: { type: "string" },
52
+ description: "Optional sender IDs to attach to table config",
53
+ },
54
+ clientProspectId: {
55
+ type: "string",
56
+ description: "Client prospect ID for CampaignOffer (use enrich_sender to obtain it)",
57
+ },
58
+ offerPositioning: {
59
+ type: "object",
60
+ description: "Optional offer positioning JSON for CampaignOffer",
61
+ },
62
+ campaignBrief: {
63
+ description: "Optional campaign brief content (markdown or JSON)",
64
+ },
65
+ },
66
+ required: ["name", "clientProspectId"],
67
+ },
68
+ },
69
+ {
70
+ name: "create_on_demand_campaign",
71
+ description: "Create a lightweight CampaignOffer + workflow table, set senders, and initialize sequence columns. Auto-selects template by sender tiers unless provided.",
72
+ inputSchema: {
73
+ type: "object",
74
+ properties: {
75
+ name: {
76
+ type: "string",
77
+ description: "Campaign name",
78
+ },
79
+ clientProspectId: {
80
+ type: "string",
81
+ description: "Client prospect ID from enrich_sender",
82
+ },
83
+ senderIds: {
84
+ type: "array",
85
+ items: { type: "string" },
86
+ description: "Outbound sender IDs to attach before sequence init",
87
+ },
88
+ campaignBrief: {
89
+ description: "Optional campaign brief content (markdown or JSON)",
90
+ },
91
+ offerPositioning: {
92
+ type: "object",
93
+ description: "Optional offer positioning JSON for CampaignOffer",
94
+ },
95
+ sequenceTemplate: {
96
+ type: "object",
97
+ description: "Optional sequence template override (otherwise auto-selected by sender tiers)",
98
+ },
99
+ confirmed: {
100
+ type: "boolean",
101
+ description: "Set true to overwrite existing sequence columns",
102
+ },
103
+ },
104
+ required: ["name", "clientProspectId", "senderIds"],
105
+ },
106
+ },
107
+ {
108
+ name: "add_on_demand_leads",
109
+ description: "Add leads to an on-demand campaign table by LinkedIn URL (dedupes by default).",
110
+ inputSchema: {
111
+ type: "object",
112
+ properties: {
113
+ tableId: {
114
+ type: "string",
115
+ description: "Workflow table ID",
116
+ },
117
+ leads: {
118
+ type: "array",
119
+ description: "Lead entries with LinkedIn URLs",
120
+ items: {
121
+ type: "object",
122
+ properties: {
123
+ linkedinUrl: { type: "string" },
124
+ name: { type: "string" },
125
+ title: { type: "string" },
126
+ companyWebsite: { type: "string" },
127
+ location: { type: "string" },
128
+ },
129
+ required: ["linkedinUrl"],
130
+ },
131
+ },
132
+ skipDuplicates: {
133
+ type: "boolean",
134
+ description: "Skip leads already in table (default true)",
135
+ },
136
+ },
137
+ required: ["tableId", "leads"],
138
+ },
139
+ },
140
+ {
141
+ name: "start_on_demand_campaign",
142
+ description: "Start an on-demand campaign table (set campaignStatus ACTIVE).",
143
+ inputSchema: {
144
+ type: "object",
145
+ properties: {
146
+ tableId: { type: "string" },
147
+ },
148
+ required: ["tableId"],
149
+ },
150
+ },
151
+ {
152
+ name: "pause_on_demand_campaign",
153
+ description: "Pause an on-demand campaign table (set campaignStatus PAUSED).",
154
+ inputSchema: {
155
+ type: "object",
156
+ properties: {
157
+ tableId: { type: "string" },
158
+ },
159
+ required: ["tableId"],
160
+ },
161
+ },
162
+ {
163
+ name: "init_on_demand_sequence",
164
+ description: "Initialize sequence columns for an on-demand table. Uses a default template if none provided.",
165
+ inputSchema: {
166
+ type: "object",
167
+ properties: {
168
+ tableId: { type: "string" },
169
+ template: {
170
+ type: "object",
171
+ description: "Optional sequence template object",
172
+ },
173
+ confirmed: {
174
+ type: "boolean",
175
+ description: "Set true to overwrite existing sequence columns",
176
+ },
177
+ },
178
+ required: ["tableId"],
179
+ },
180
+ },
181
+ ];
182
+ export async function createOnDemandTable(input) {
183
+ const api = getApi();
184
+ return api.post("/api/v3/on-demand-campaigns", input);
185
+ }
186
+ export async function addOnDemandLeads(input) {
187
+ const api = getApi();
188
+ const { tableId, leads, skipDuplicates } = input;
189
+ return api.post(`/api/v3/on-demand-campaigns/${tableId}/leads`, {
190
+ leads,
191
+ skipDuplicates,
192
+ });
193
+ }
194
+ export async function startOnDemandCampaign(input) {
195
+ const api = getApi();
196
+ return api.post(`/api/v3/on-demand-campaigns/${input.tableId}/start`, {});
197
+ }
198
+ export async function pauseOnDemandCampaign(input) {
199
+ const api = getApi();
200
+ return api.post(`/api/v3/on-demand-campaigns/${input.tableId}/pause`, {});
201
+ }
202
+ export async function initOnDemandSequence(input) {
203
+ const api = getApi();
204
+ const { tableId, template, confirmed } = input;
205
+ return api.put(`/api/v3/workflow-tables/${tableId}/sequence`, {
206
+ template: template || SIMPLE_LINEAR_TEMPLATE,
207
+ confirmed,
208
+ });
209
+ }
210
+ async function initCampaignSequence(input) {
211
+ const api = getApi();
212
+ const payload = {};
213
+ if (input.template)
214
+ payload.template = input.template;
215
+ if (input.autoSelectFromSenders !== undefined) {
216
+ payload.autoSelectFromSenders = input.autoSelectFromSenders;
217
+ }
218
+ if (input.confirmed !== undefined) {
219
+ payload.confirmed = input.confirmed;
220
+ }
221
+ return api.put(`/api/v3/campaigns/${input.campaignOfferId}/sequence`, payload);
222
+ }
223
+ export async function createOnDemandCampaign(input) {
224
+ if (!Array.isArray(input.senderIds) || input.senderIds.length === 0) {
225
+ throw new Error("senderIds must be a non-empty array");
226
+ }
227
+ const campaign = await createOnDemandTable({
228
+ name: input.name,
229
+ senderIds: input.senderIds,
230
+ clientProspectId: input.clientProspectId,
231
+ offerPositioning: input.offerPositioning,
232
+ campaignBrief: input.campaignBrief,
233
+ });
234
+ const campaignOfferId = campaign.campaignOfferId;
235
+ const tableId = campaign.tableId;
236
+ if (!campaignOfferId || !tableId) {
237
+ throw new Error("create_on_demand_table did not return campaignOfferId/tableId");
238
+ }
239
+ const confirmed = input.confirmed !== undefined ? input.confirmed : false;
240
+ const autoSelectFromSenders = !input.sequenceTemplate;
241
+ try {
242
+ await initCampaignSequence({
243
+ campaignOfferId,
244
+ template: input.sequenceTemplate,
245
+ autoSelectFromSenders,
246
+ confirmed,
247
+ });
248
+ }
249
+ catch (error) {
250
+ if (!confirmed && error instanceof Error) {
251
+ if (error.message.includes("API error 409")) {
252
+ await initCampaignSequence({
253
+ campaignOfferId,
254
+ template: input.sequenceTemplate,
255
+ autoSelectFromSenders,
256
+ confirmed: true,
257
+ });
258
+ }
259
+ else {
260
+ throw error;
261
+ }
262
+ }
263
+ else {
264
+ throw error;
265
+ }
266
+ }
267
+ return {
268
+ tableId,
269
+ campaignOfferId,
270
+ senderIds: input.senderIds,
271
+ sequenceInitialized: true,
272
+ };
273
+ }
@@ -0,0 +1,70 @@
1
+ export type RubricItem = {
2
+ id?: string;
3
+ description?: string;
4
+ reason?: string;
5
+ criterion?: string;
6
+ checkName?: string;
7
+ useCheckForScoring?: boolean;
8
+ isRequiredCheck?: boolean;
9
+ allowPartialCredit?: boolean;
10
+ strictMatching?: boolean;
11
+ };
12
+ export type UpsertRubricInput = {
13
+ campaignOfferId: string;
14
+ rubric: RubricItem[];
15
+ currentStep?: string | null;
16
+ enableICPFilters?: boolean;
17
+ deletedRubricIds?: string[];
18
+ };
19
+ export declare const processingToolDefinitions: {
20
+ name: string;
21
+ description: string;
22
+ inputSchema: {
23
+ type: string;
24
+ properties: {
25
+ campaignOfferId: {
26
+ type: string;
27
+ description: string;
28
+ };
29
+ rubric: {
30
+ type: string;
31
+ description: string;
32
+ items: {
33
+ type: string;
34
+ };
35
+ };
36
+ currentStep: {
37
+ type: string[];
38
+ description: string;
39
+ };
40
+ enableICPFilters: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ deletedRubricIds: {
45
+ type: string;
46
+ description: string;
47
+ items: {
48
+ type: string;
49
+ };
50
+ };
51
+ };
52
+ required: string[];
53
+ };
54
+ }[];
55
+ export declare function upsertRubric(input: UpsertRubricInput): Promise<{
56
+ leadScoringRubrics?: RubricItem[];
57
+ }>;
58
+ export type CampaignRubricsResponse = {
59
+ campaignOfferId: string;
60
+ enableICPFilters: boolean | null;
61
+ workflowTableId: string | null;
62
+ rubrics: RubricItem[];
63
+ };
64
+ export declare function fetchCampaignRubrics(campaignOfferId: string): Promise<CampaignRubricsResponse>;
65
+ export type UpsertRubricV3Input = {
66
+ campaignOfferId: string;
67
+ upsert: RubricItem[];
68
+ deleteIds?: string[];
69
+ };
70
+ export declare function upsertRubricV3(input: UpsertRubricV3Input): Promise<CampaignRubricsResponse>;
@@ -0,0 +1,56 @@
1
+ import { getApi } from "../api.js";
2
+ export const processingToolDefinitions = [
3
+ {
4
+ name: "upsert_rubric",
5
+ description: "Upsert lead scoring rubrics for a campaign offer. Pass the full rubric array. Optionally enable ICP filters or delete rubric IDs.",
6
+ inputSchema: {
7
+ type: "object",
8
+ properties: {
9
+ campaignOfferId: {
10
+ type: "string",
11
+ description: "Campaign offer ID",
12
+ },
13
+ rubric: {
14
+ type: "array",
15
+ description: "Rubric items to upsert",
16
+ items: { type: "object" },
17
+ },
18
+ currentStep: {
19
+ type: ["string", "null"],
20
+ description: "Headless workflow step ID",
21
+ },
22
+ enableICPFilters: {
23
+ type: "boolean",
24
+ description: "Enable ICP filtering after rubric save (triggers table sync)",
25
+ },
26
+ deletedRubricIds: {
27
+ type: "array",
28
+ description: "Rubric IDs to delete from the campaign (optional cleanup)",
29
+ items: { type: "string" },
30
+ },
31
+ },
32
+ required: ["campaignOfferId", "rubric"],
33
+ },
34
+ },
35
+ ];
36
+ export async function upsertRubric(input) {
37
+ const api = getApi();
38
+ const { campaignOfferId, rubric, currentStep, enableICPFilters, deletedRubricIds, } = input;
39
+ return api.put(`/api/v2/campaign-offers/${campaignOfferId}`, {
40
+ rubric,
41
+ currentStep,
42
+ enableICPFilters,
43
+ deletedRubricIds,
44
+ });
45
+ }
46
+ export async function fetchCampaignRubrics(campaignOfferId) {
47
+ const api = getApi();
48
+ return api.get(`/api/v3/campaigns/${campaignOfferId}/rubrics`);
49
+ }
50
+ export async function upsertRubricV3(input) {
51
+ const api = getApi();
52
+ return api.post(`/api/v3/campaigns/${input.campaignOfferId}/rubrics`, {
53
+ upsert: input.upsert,
54
+ deleteIds: input.deleteIds,
55
+ });
56
+ }
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Response from the edit-message prompt endpoint.
3
+ * The prompt contains all 11 quality gates inline.
4
+ */
5
+ export interface PromptResponse {
6
+ prompt: string;
7
+ metadata: {
8
+ framework: string;
9
+ author: string;
10
+ description: string;
11
+ };
12
+ }
13
+ export interface SubskillPromptResponse {
14
+ name: string;
15
+ description: string;
16
+ visibility: "public" | "internal";
17
+ prompt: string;
18
+ promptLength?: number;
19
+ offset?: number;
20
+ limit?: number;
21
+ hasMore?: boolean;
22
+ nextOffset?: number | null;
23
+ }
24
+ export interface ListSubskillPromptsResponse {
25
+ total: number;
26
+ matches: Array<{
27
+ name: string;
28
+ description: string;
29
+ visibility: "public" | "internal";
30
+ }>;
31
+ }
32
+ export interface SearchSubskillPromptsResponse {
33
+ query: string;
34
+ matches: Array<{
35
+ name: string;
36
+ description: string;
37
+ visibility: "public" | "internal";
38
+ }>;
39
+ }
40
+ export interface CompleteSenderResearchInput {
41
+ depth?: "minimal-verification" | "deep-proof";
42
+ proofItemsFound?: number;
43
+ caseStudyItemsFound?: number;
44
+ credibilitySignalsFound?: number;
45
+ notes?: string;
46
+ }
47
+ export declare const promptToolDefinitions: ({
48
+ name: string;
49
+ description: string;
50
+ inputSchema: {
51
+ type: string;
52
+ properties: {
53
+ limit?: undefined;
54
+ includePublic?: undefined;
55
+ includeInternal?: undefined;
56
+ subskillName?: undefined;
57
+ offset?: undefined;
58
+ query?: undefined;
59
+ depth?: undefined;
60
+ proofItemsFound?: undefined;
61
+ caseStudyItemsFound?: undefined;
62
+ credibilitySignalsFound?: undefined;
63
+ notes?: undefined;
64
+ };
65
+ required: never[];
66
+ additionalProperties?: undefined;
67
+ };
68
+ } | {
69
+ name: string;
70
+ description: string;
71
+ inputSchema: {
72
+ type: string;
73
+ properties: {
74
+ limit: {
75
+ type: string;
76
+ description: string;
77
+ };
78
+ includePublic: {
79
+ type: string;
80
+ description: string;
81
+ };
82
+ includeInternal: {
83
+ type: string;
84
+ description: string;
85
+ };
86
+ subskillName?: undefined;
87
+ offset?: undefined;
88
+ query?: undefined;
89
+ depth?: undefined;
90
+ proofItemsFound?: undefined;
91
+ caseStudyItemsFound?: undefined;
92
+ credibilitySignalsFound?: undefined;
93
+ notes?: undefined;
94
+ };
95
+ required: never[];
96
+ additionalProperties: boolean;
97
+ };
98
+ } | {
99
+ name: string;
100
+ description: string;
101
+ inputSchema: {
102
+ type: string;
103
+ properties: {
104
+ subskillName: {
105
+ type: string;
106
+ description: string;
107
+ };
108
+ offset: {
109
+ type: string;
110
+ description: string;
111
+ };
112
+ limit: {
113
+ type: string;
114
+ description: string;
115
+ };
116
+ includePublic?: undefined;
117
+ includeInternal?: undefined;
118
+ query?: undefined;
119
+ depth?: undefined;
120
+ proofItemsFound?: undefined;
121
+ caseStudyItemsFound?: undefined;
122
+ credibilitySignalsFound?: undefined;
123
+ notes?: undefined;
124
+ };
125
+ required: string[];
126
+ additionalProperties: boolean;
127
+ };
128
+ } | {
129
+ name: string;
130
+ description: string;
131
+ inputSchema: {
132
+ type: string;
133
+ properties: {
134
+ query: {
135
+ type: string;
136
+ description: string;
137
+ };
138
+ limit: {
139
+ type: string;
140
+ description: string;
141
+ };
142
+ includePublic: {
143
+ type: string;
144
+ description: string;
145
+ };
146
+ includeInternal: {
147
+ type: string;
148
+ description: string;
149
+ };
150
+ subskillName?: undefined;
151
+ offset?: undefined;
152
+ depth?: undefined;
153
+ proofItemsFound?: undefined;
154
+ caseStudyItemsFound?: undefined;
155
+ credibilitySignalsFound?: undefined;
156
+ notes?: undefined;
157
+ };
158
+ required: string[];
159
+ additionalProperties: boolean;
160
+ };
161
+ } | {
162
+ name: string;
163
+ description: string;
164
+ inputSchema: {
165
+ type: string;
166
+ properties: {
167
+ depth: {
168
+ type: string;
169
+ enum: string[];
170
+ description: string;
171
+ };
172
+ proofItemsFound: {
173
+ type: string;
174
+ description: string;
175
+ };
176
+ caseStudyItemsFound: {
177
+ type: string;
178
+ description: string;
179
+ };
180
+ credibilitySignalsFound: {
181
+ type: string;
182
+ description: string;
183
+ };
184
+ notes: {
185
+ type: string;
186
+ description: string;
187
+ };
188
+ limit?: undefined;
189
+ includePublic?: undefined;
190
+ includeInternal?: undefined;
191
+ subskillName?: undefined;
192
+ offset?: undefined;
193
+ query?: undefined;
194
+ };
195
+ additionalProperties: boolean;
196
+ required?: undefined;
197
+ };
198
+ })[];
199
+ export declare function getMessagePrompt(): Promise<PromptResponse>;
200
+ export declare function listSubskillPrompts(limit?: number, includePublic?: boolean, includeInternal?: boolean): ListSubskillPromptsResponse;
201
+ export declare function getSubskillPrompt(subskillName: string, offset?: number, limit?: number): SubskillPromptResponse;
202
+ export declare function completeSenderResearch(input?: CompleteSenderResearchInput): {
203
+ readonly completedAt: string;
204
+ readonly depth: "minimal-verification" | "deep-proof";
205
+ readonly proofItemsFound: number;
206
+ readonly caseStudyItemsFound: number;
207
+ readonly credibilitySignalsFound: number;
208
+ readonly notes?: string | null;
209
+ readonly ok: true;
210
+ };
211
+ export declare function searchSubskillPrompts(query: string, limit?: number, includePublic?: boolean, includeInternal?: boolean): SearchSubskillPromptsResponse;