@elevasis/sdk 1.17.0 → 1.18.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.
- package/dist/cli.cjs +382 -175
- package/dist/index.d.ts +390 -73
- package/dist/index.js +1087 -62
- package/dist/node/index.d.ts +3 -0
- package/dist/node/index.js +34 -1
- package/dist/test-utils/index.d.ts +108 -71
- package/dist/test-utils/index.js +1872 -667
- package/dist/types/worker/index.d.ts +3 -2
- package/dist/worker/index.js +1373 -2
- package/package.json +2 -2
- package/reference/claude-config/rules/package-taxonomy.md +33 -0
- package/reference/claude-config/rules/vibe.md +23 -0
- package/reference/claude-config/skills/knowledge/SKILL.md +37 -5
- package/reference/claude-config/skills/project/SKILL.md +21 -0
- package/reference/claude-config/skills/tutorial/SKILL.md +13 -3
- package/reference/claude-config/sync-notes/2026-05-05-list-builder.md +42 -0
- package/reference/claude-config/sync-notes/2026-05-06-sdk-changes-release-train.md +37 -0
- package/reference/scaffold/reference/contracts.md +78 -65
- package/reference/scaffold/reference/feature-registry.md +1 -1
- package/reference/spine/spine-primer.md +99 -0
package/dist/cli.cjs
CHANGED
|
@@ -36595,7 +36595,7 @@ var CredentialNameSchema = external_exports.string().trim().toLowerCase().min(1,
|
|
|
36595
36595
|
/^[a-z0-9]+(-[a-z0-9]+)+$/,
|
|
36596
36596
|
"Credential name must be lowercase letters, numbers, and hyphens in format: service-environment (e.g., gmail-prod, attio-dev)"
|
|
36597
36597
|
);
|
|
36598
|
-
var OAuthProviderSchema = external_exports.enum(["google-sheets", "dropbox"]);
|
|
36598
|
+
var OAuthProviderSchema = external_exports.enum(["google-sheets", "google-calendar", "dropbox"]);
|
|
36599
36599
|
var OAuthCodeSchema = external_exports.string().min(10, "Authorization code too short").max(1e3, "Authorization code too long");
|
|
36600
36600
|
var OAuthStateParamSchema = external_exports.string().min(10, "State parameter too short").max(2048, "State parameter too long");
|
|
36601
36601
|
var SanitizedStringSchema = external_exports.string().trim().transform((str) => str.replace(/[<>'"]/g, ""));
|
|
@@ -36614,6 +36614,7 @@ var DateRangeSchema = external_exports.object({
|
|
|
36614
36614
|
// ../core/src/organization-model/icons.ts
|
|
36615
36615
|
var ORGANIZATION_MODEL_ICON_TOKENS = [
|
|
36616
36616
|
"nav.dashboard",
|
|
36617
|
+
"nav.calendar",
|
|
36617
36618
|
"nav.sales",
|
|
36618
36619
|
"nav.crm",
|
|
36619
36620
|
"nav.lead-gen",
|
|
@@ -36628,6 +36629,7 @@ var ORGANIZATION_MODEL_ICON_TOKENS = [
|
|
|
36628
36629
|
"knowledge.strategy",
|
|
36629
36630
|
"knowledge.reference",
|
|
36630
36631
|
"feature.dashboard",
|
|
36632
|
+
"feature.calendar",
|
|
36631
36633
|
"feature.sales",
|
|
36632
36634
|
"feature.crm",
|
|
36633
36635
|
"feature.finance",
|
|
@@ -36651,6 +36653,7 @@ var ORGANIZATION_MODEL_ICON_TOKENS = [
|
|
|
36651
36653
|
"integration.google-sheets",
|
|
36652
36654
|
"integration.attio",
|
|
36653
36655
|
"surface.dashboard",
|
|
36656
|
+
"surface.calendar",
|
|
36654
36657
|
"surface.overview",
|
|
36655
36658
|
"surface.command-view",
|
|
36656
36659
|
"surface.command-queue",
|
|
@@ -36850,6 +36853,89 @@ var DEFAULT_ORGANIZATION_MODEL_SALES = {
|
|
|
36850
36853
|
}
|
|
36851
36854
|
]
|
|
36852
36855
|
};
|
|
36856
|
+
var LEAD_GEN_STAGE_CATALOG = {
|
|
36857
|
+
// Prospecting — company population
|
|
36858
|
+
scraped: {
|
|
36859
|
+
key: "scraped",
|
|
36860
|
+
label: "Scraped",
|
|
36861
|
+
description: "Company was scraped from a source directory (Apify actor run).",
|
|
36862
|
+
order: 1,
|
|
36863
|
+
entity: "company"
|
|
36864
|
+
},
|
|
36865
|
+
populated: {
|
|
36866
|
+
key: "populated",
|
|
36867
|
+
label: "Companies found",
|
|
36868
|
+
description: "Companies have been found and added to the lead-gen list.",
|
|
36869
|
+
order: 2,
|
|
36870
|
+
entity: "company"
|
|
36871
|
+
},
|
|
36872
|
+
extracted: {
|
|
36873
|
+
key: "extracted",
|
|
36874
|
+
label: "Websites analyzed",
|
|
36875
|
+
description: "Company websites have been analyzed for business signals.",
|
|
36876
|
+
order: 3,
|
|
36877
|
+
entity: "company"
|
|
36878
|
+
},
|
|
36879
|
+
enriched: {
|
|
36880
|
+
key: "enriched",
|
|
36881
|
+
label: "Enriched",
|
|
36882
|
+
description: "Company or contact enriched with third-party data (e.g. Tomba, Anymailfinder).",
|
|
36883
|
+
order: 4,
|
|
36884
|
+
entity: "company"
|
|
36885
|
+
},
|
|
36886
|
+
"decision-makers-enriched": {
|
|
36887
|
+
key: "decision-makers-enriched",
|
|
36888
|
+
label: "Decision-makers found",
|
|
36889
|
+
description: "Decision-maker contacts discovered and attached to a qualified company.",
|
|
36890
|
+
order: 6,
|
|
36891
|
+
entity: "company"
|
|
36892
|
+
},
|
|
36893
|
+
// Prospecting — contact discovery
|
|
36894
|
+
discovered: {
|
|
36895
|
+
key: "discovered",
|
|
36896
|
+
label: "Decision-makers found",
|
|
36897
|
+
description: "Decision-maker contact details have been found.",
|
|
36898
|
+
order: 5,
|
|
36899
|
+
entity: "contact"
|
|
36900
|
+
},
|
|
36901
|
+
verified: {
|
|
36902
|
+
key: "verified",
|
|
36903
|
+
label: "Emails verified",
|
|
36904
|
+
description: "Contact email addresses have been checked for deliverability.",
|
|
36905
|
+
order: 7,
|
|
36906
|
+
entity: "contact"
|
|
36907
|
+
},
|
|
36908
|
+
// Qualification
|
|
36909
|
+
qualified: {
|
|
36910
|
+
key: "qualified",
|
|
36911
|
+
label: "Companies qualified",
|
|
36912
|
+
description: "Companies have been scored against the qualification criteria.",
|
|
36913
|
+
order: 8,
|
|
36914
|
+
entity: "company"
|
|
36915
|
+
},
|
|
36916
|
+
// Outreach
|
|
36917
|
+
personalized: {
|
|
36918
|
+
key: "personalized",
|
|
36919
|
+
label: "Personalized",
|
|
36920
|
+
description: "Outreach message personalized for the contact (Instantly personalization workflow).",
|
|
36921
|
+
order: 9,
|
|
36922
|
+
entity: "contact"
|
|
36923
|
+
},
|
|
36924
|
+
uploaded: {
|
|
36925
|
+
key: "uploaded",
|
|
36926
|
+
label: "Reviewed and exported",
|
|
36927
|
+
description: "Approved records have been reviewed and exported for handoff.",
|
|
36928
|
+
order: 10,
|
|
36929
|
+
entity: "contact"
|
|
36930
|
+
},
|
|
36931
|
+
interested: {
|
|
36932
|
+
key: "interested",
|
|
36933
|
+
label: "Interested",
|
|
36934
|
+
description: "Contact replied with a positive signal (Instantly reply-handler transition).",
|
|
36935
|
+
order: 11,
|
|
36936
|
+
entity: "contact"
|
|
36937
|
+
}
|
|
36938
|
+
};
|
|
36853
36939
|
|
|
36854
36940
|
// ../core/src/organization-model/domains/projects.ts
|
|
36855
36941
|
var ProjectsDomainStateSchema = DisplayMetadataSchema.extend({
|
|
@@ -36919,6 +37005,172 @@ var ProspectingBuildTemplateSchema = DisplayMetadataSchema.extend({
|
|
|
36919
37005
|
id: ModelIdSchema,
|
|
36920
37006
|
steps: external_exports.array(ProspectingBuildTemplateStepSchema).min(1)
|
|
36921
37007
|
});
|
|
37008
|
+
var PROSPECTING_STEPS = {
|
|
37009
|
+
localServices: {
|
|
37010
|
+
sourceCompanies: {
|
|
37011
|
+
id: "source-companies",
|
|
37012
|
+
label: "Companies found",
|
|
37013
|
+
primaryEntity: "company",
|
|
37014
|
+
outputs: ["company"],
|
|
37015
|
+
stageKey: "populated",
|
|
37016
|
+
dependencyMode: "per-record-eligibility",
|
|
37017
|
+
capabilityKey: "lead-gen.company.source",
|
|
37018
|
+
defaultBatchSize: 100,
|
|
37019
|
+
maxBatchSize: 250
|
|
37020
|
+
},
|
|
37021
|
+
analyzeWebsites: {
|
|
37022
|
+
id: "analyze-websites",
|
|
37023
|
+
label: "Websites analyzed",
|
|
37024
|
+
primaryEntity: "company",
|
|
37025
|
+
outputs: ["company"],
|
|
37026
|
+
stageKey: "extracted",
|
|
37027
|
+
dependsOn: ["source-companies"],
|
|
37028
|
+
dependencyMode: "per-record-eligibility",
|
|
37029
|
+
capabilityKey: "lead-gen.company.website-extract",
|
|
37030
|
+
defaultBatchSize: 50,
|
|
37031
|
+
maxBatchSize: 100
|
|
37032
|
+
},
|
|
37033
|
+
qualifyCompanies: {
|
|
37034
|
+
id: "qualify-companies",
|
|
37035
|
+
label: "Companies qualified",
|
|
37036
|
+
primaryEntity: "company",
|
|
37037
|
+
outputs: ["company"],
|
|
37038
|
+
stageKey: "qualified",
|
|
37039
|
+
dependsOn: ["analyze-websites"],
|
|
37040
|
+
dependencyMode: "per-record-eligibility",
|
|
37041
|
+
capabilityKey: "lead-gen.company.qualify",
|
|
37042
|
+
defaultBatchSize: 100,
|
|
37043
|
+
maxBatchSize: 250
|
|
37044
|
+
},
|
|
37045
|
+
findContacts: {
|
|
37046
|
+
id: "find-contacts",
|
|
37047
|
+
label: "Decision-makers found",
|
|
37048
|
+
primaryEntity: "contact",
|
|
37049
|
+
outputs: ["contact"],
|
|
37050
|
+
stageKey: "discovered",
|
|
37051
|
+
dependsOn: ["qualify-companies"],
|
|
37052
|
+
dependencyMode: "per-record-eligibility",
|
|
37053
|
+
capabilityKey: "lead-gen.contact.discover",
|
|
37054
|
+
defaultBatchSize: 50,
|
|
37055
|
+
maxBatchSize: 100
|
|
37056
|
+
},
|
|
37057
|
+
verifyEmails: {
|
|
37058
|
+
id: "verify-emails",
|
|
37059
|
+
label: "Emails verified",
|
|
37060
|
+
primaryEntity: "contact",
|
|
37061
|
+
outputs: ["contact"],
|
|
37062
|
+
stageKey: "verified",
|
|
37063
|
+
dependsOn: ["find-contacts"],
|
|
37064
|
+
dependencyMode: "per-record-eligibility",
|
|
37065
|
+
capabilityKey: "lead-gen.contact.verify-email",
|
|
37066
|
+
defaultBatchSize: 100,
|
|
37067
|
+
maxBatchSize: 500
|
|
37068
|
+
},
|
|
37069
|
+
personalize: {
|
|
37070
|
+
id: "personalize",
|
|
37071
|
+
label: "Personalize",
|
|
37072
|
+
primaryEntity: "contact",
|
|
37073
|
+
outputs: ["contact"],
|
|
37074
|
+
stageKey: "personalized",
|
|
37075
|
+
dependsOn: ["verify-emails"],
|
|
37076
|
+
dependencyMode: "per-record-eligibility",
|
|
37077
|
+
capabilityKey: "lead-gen.contact.personalize",
|
|
37078
|
+
defaultBatchSize: 25,
|
|
37079
|
+
maxBatchSize: 100
|
|
37080
|
+
},
|
|
37081
|
+
review: {
|
|
37082
|
+
id: "review",
|
|
37083
|
+
label: "Reviewed and exported",
|
|
37084
|
+
primaryEntity: "contact",
|
|
37085
|
+
outputs: ["export"],
|
|
37086
|
+
stageKey: "uploaded",
|
|
37087
|
+
dependsOn: ["personalize"],
|
|
37088
|
+
dependencyMode: "per-record-eligibility",
|
|
37089
|
+
capabilityKey: "lead-gen.review.outreach-ready",
|
|
37090
|
+
defaultBatchSize: 25,
|
|
37091
|
+
maxBatchSize: 100
|
|
37092
|
+
}
|
|
37093
|
+
},
|
|
37094
|
+
dtcApolloClickup: {
|
|
37095
|
+
importApolloSearch: {
|
|
37096
|
+
id: "import-apollo-search",
|
|
37097
|
+
label: "Companies found",
|
|
37098
|
+
description: "Pull companies and seed contact data from a predefined Apollo search or list.",
|
|
37099
|
+
primaryEntity: "company",
|
|
37100
|
+
outputs: ["company", "contact"],
|
|
37101
|
+
stageKey: "populated",
|
|
37102
|
+
dependencyMode: "per-record-eligibility",
|
|
37103
|
+
capabilityKey: "lead-gen.company.apollo-import",
|
|
37104
|
+
defaultBatchSize: 250,
|
|
37105
|
+
maxBatchSize: 1e3
|
|
37106
|
+
},
|
|
37107
|
+
analyzeWebsites: {
|
|
37108
|
+
id: "analyze-websites",
|
|
37109
|
+
label: "Websites analyzed",
|
|
37110
|
+
description: "Extract subscription, product, retention, and tech-stack signals from each brand website.",
|
|
37111
|
+
primaryEntity: "company",
|
|
37112
|
+
outputs: ["company"],
|
|
37113
|
+
stageKey: "extracted",
|
|
37114
|
+
dependsOn: ["import-apollo-search"],
|
|
37115
|
+
dependencyMode: "per-record-eligibility",
|
|
37116
|
+
capabilityKey: "lead-gen.company.website-extract",
|
|
37117
|
+
defaultBatchSize: 50,
|
|
37118
|
+
maxBatchSize: 100
|
|
37119
|
+
},
|
|
37120
|
+
scoreDtcFit: {
|
|
37121
|
+
id: "score-dtc-fit",
|
|
37122
|
+
label: "Companies qualified",
|
|
37123
|
+
description: "Classify subscription potential, consumable-product fit, retention maturity, and disqualifiers.",
|
|
37124
|
+
primaryEntity: "company",
|
|
37125
|
+
outputs: ["company"],
|
|
37126
|
+
stageKey: "qualified",
|
|
37127
|
+
dependsOn: ["analyze-websites"],
|
|
37128
|
+
dependencyMode: "per-record-eligibility",
|
|
37129
|
+
capabilityKey: "lead-gen.company.dtc-subscription-qualify",
|
|
37130
|
+
defaultBatchSize: 100,
|
|
37131
|
+
maxBatchSize: 250
|
|
37132
|
+
},
|
|
37133
|
+
enrichDecisionMakers: {
|
|
37134
|
+
id: "enrich-decision-makers",
|
|
37135
|
+
label: "Decision-makers found",
|
|
37136
|
+
description: "Use Apollo to find qualified contacts at qualified companies - founders, retention leads, lifecycle leads, and marketing owners.",
|
|
37137
|
+
primaryEntity: "company",
|
|
37138
|
+
outputs: ["contact"],
|
|
37139
|
+
stageKey: "decision-makers-enriched",
|
|
37140
|
+
dependsOn: ["score-dtc-fit"],
|
|
37141
|
+
dependencyMode: "per-record-eligibility",
|
|
37142
|
+
capabilityKey: "lead-gen.contact.apollo-decision-maker-enrich",
|
|
37143
|
+
defaultBatchSize: 100,
|
|
37144
|
+
maxBatchSize: 250
|
|
37145
|
+
},
|
|
37146
|
+
verifyEmails: {
|
|
37147
|
+
id: "verify-emails",
|
|
37148
|
+
label: "Emails verified",
|
|
37149
|
+
description: "Verify deliverability before the QC and handoff step.",
|
|
37150
|
+
primaryEntity: "contact",
|
|
37151
|
+
outputs: ["contact"],
|
|
37152
|
+
stageKey: "verified",
|
|
37153
|
+
dependsOn: ["enrich-decision-makers"],
|
|
37154
|
+
dependencyMode: "per-record-eligibility",
|
|
37155
|
+
capabilityKey: "lead-gen.contact.verify-email",
|
|
37156
|
+
defaultBatchSize: 250,
|
|
37157
|
+
maxBatchSize: 500
|
|
37158
|
+
},
|
|
37159
|
+
reviewAndExport: {
|
|
37160
|
+
id: "review-and-export",
|
|
37161
|
+
label: "Reviewed and exported",
|
|
37162
|
+
description: "Operator QC approves or rejects leads, then approved records are exported as a lead list.",
|
|
37163
|
+
primaryEntity: "company",
|
|
37164
|
+
outputs: ["export"],
|
|
37165
|
+
stageKey: "uploaded",
|
|
37166
|
+
dependsOn: ["verify-emails"],
|
|
37167
|
+
dependencyMode: "per-record-eligibility",
|
|
37168
|
+
capabilityKey: "lead-gen.export.list",
|
|
37169
|
+
defaultBatchSize: 100,
|
|
37170
|
+
maxBatchSize: 250
|
|
37171
|
+
}
|
|
37172
|
+
}
|
|
37173
|
+
};
|
|
36922
37174
|
var OrganizationModelProspectingSchema = external_exports.object({
|
|
36923
37175
|
listEntityId: ModelIdSchema,
|
|
36924
37176
|
companyEntityId: ModelIdSchema,
|
|
@@ -36929,21 +37181,22 @@ var OrganizationModelProspectingSchema = external_exports.object({
|
|
|
36929
37181
|
defaultBuildTemplateId: ModelIdSchema,
|
|
36930
37182
|
buildTemplates: external_exports.array(ProspectingBuildTemplateSchema).min(1)
|
|
36931
37183
|
});
|
|
37184
|
+
function toProspectingLifecycleStage(stage) {
|
|
37185
|
+
return {
|
|
37186
|
+
id: stage.key,
|
|
37187
|
+
label: stage.label,
|
|
37188
|
+
order: stage.order
|
|
37189
|
+
};
|
|
37190
|
+
}
|
|
37191
|
+
function leadGenStagesForEntity(entity) {
|
|
37192
|
+
return Object.values(LEAD_GEN_STAGE_CATALOG).filter((stage) => stage.entity === entity).sort((a, b) => a.order - b.order).map(toProspectingLifecycleStage);
|
|
37193
|
+
}
|
|
36932
37194
|
var DEFAULT_ORGANIZATION_MODEL_PROSPECTING = {
|
|
36933
37195
|
listEntityId: "leadgen.list",
|
|
36934
37196
|
companyEntityId: "leadgen.company",
|
|
36935
37197
|
contactEntityId: "leadgen.contact",
|
|
36936
|
-
companyStages:
|
|
36937
|
-
|
|
36938
|
-
{ id: "extracted", label: "Extracted", order: 2 },
|
|
36939
|
-
{ id: "qualified", label: "Qualified", order: 3 }
|
|
36940
|
-
],
|
|
36941
|
-
contactStages: [
|
|
36942
|
-
{ id: "discovered", label: "Discovered", order: 1 },
|
|
36943
|
-
{ id: "verified", label: "Verified", order: 2 },
|
|
36944
|
-
{ id: "personalized", label: "Personalized", order: 3 },
|
|
36945
|
-
{ id: "uploaded", label: "Uploaded", order: 4 }
|
|
36946
|
-
],
|
|
37198
|
+
companyStages: leadGenStagesForEntity("company"),
|
|
37199
|
+
contactStages: leadGenStagesForEntity("contact"),
|
|
36947
37200
|
defaultBuildTemplateId: "local-services",
|
|
36948
37201
|
buildTemplates: [
|
|
36949
37202
|
{
|
|
@@ -36951,89 +37204,13 @@ var DEFAULT_ORGANIZATION_MODEL_PROSPECTING = {
|
|
|
36951
37204
|
label: "Local Services Prospecting",
|
|
36952
37205
|
description: "Curated local-services list build using company sourcing, website analysis, qualification, contact discovery, verification, personalization, and review.",
|
|
36953
37206
|
steps: [
|
|
36954
|
-
|
|
36955
|
-
|
|
36956
|
-
|
|
36957
|
-
|
|
36958
|
-
|
|
36959
|
-
|
|
36960
|
-
|
|
36961
|
-
capabilityKey: "lead-gen.company.source",
|
|
36962
|
-
defaultBatchSize: 100,
|
|
36963
|
-
maxBatchSize: 250
|
|
36964
|
-
},
|
|
36965
|
-
{
|
|
36966
|
-
id: "analyze-websites",
|
|
36967
|
-
label: "Analyze websites",
|
|
36968
|
-
primaryEntity: "company",
|
|
36969
|
-
outputs: ["company"],
|
|
36970
|
-
stageKey: "extracted",
|
|
36971
|
-
dependsOn: ["source-companies"],
|
|
36972
|
-
dependencyMode: "per-record-eligibility",
|
|
36973
|
-
capabilityKey: "lead-gen.company.website-extract",
|
|
36974
|
-
defaultBatchSize: 50,
|
|
36975
|
-
maxBatchSize: 100
|
|
36976
|
-
},
|
|
36977
|
-
{
|
|
36978
|
-
id: "qualify-companies",
|
|
36979
|
-
label: "Qualify companies",
|
|
36980
|
-
primaryEntity: "company",
|
|
36981
|
-
outputs: ["company"],
|
|
36982
|
-
stageKey: "qualified",
|
|
36983
|
-
dependsOn: ["analyze-websites"],
|
|
36984
|
-
dependencyMode: "per-record-eligibility",
|
|
36985
|
-
capabilityKey: "lead-gen.company.qualify",
|
|
36986
|
-
defaultBatchSize: 100,
|
|
36987
|
-
maxBatchSize: 250
|
|
36988
|
-
},
|
|
36989
|
-
{
|
|
36990
|
-
id: "find-contacts",
|
|
36991
|
-
label: "Find contacts",
|
|
36992
|
-
primaryEntity: "contact",
|
|
36993
|
-
outputs: ["contact"],
|
|
36994
|
-
stageKey: "discovered",
|
|
36995
|
-
dependsOn: ["qualify-companies"],
|
|
36996
|
-
dependencyMode: "per-record-eligibility",
|
|
36997
|
-
capabilityKey: "lead-gen.contact.discover",
|
|
36998
|
-
defaultBatchSize: 50,
|
|
36999
|
-
maxBatchSize: 100
|
|
37000
|
-
},
|
|
37001
|
-
{
|
|
37002
|
-
id: "verify-emails",
|
|
37003
|
-
label: "Verify emails",
|
|
37004
|
-
primaryEntity: "contact",
|
|
37005
|
-
outputs: ["contact"],
|
|
37006
|
-
stageKey: "verified",
|
|
37007
|
-
dependsOn: ["find-contacts"],
|
|
37008
|
-
dependencyMode: "per-record-eligibility",
|
|
37009
|
-
capabilityKey: "lead-gen.contact.verify-email",
|
|
37010
|
-
defaultBatchSize: 100,
|
|
37011
|
-
maxBatchSize: 500
|
|
37012
|
-
},
|
|
37013
|
-
{
|
|
37014
|
-
id: "personalize",
|
|
37015
|
-
label: "Personalize",
|
|
37016
|
-
primaryEntity: "contact",
|
|
37017
|
-
outputs: ["contact"],
|
|
37018
|
-
stageKey: "personalized",
|
|
37019
|
-
dependsOn: ["verify-emails"],
|
|
37020
|
-
dependencyMode: "per-record-eligibility",
|
|
37021
|
-
capabilityKey: "lead-gen.contact.personalize",
|
|
37022
|
-
defaultBatchSize: 25,
|
|
37023
|
-
maxBatchSize: 100
|
|
37024
|
-
},
|
|
37025
|
-
{
|
|
37026
|
-
id: "review",
|
|
37027
|
-
label: "Review",
|
|
37028
|
-
primaryEntity: "contact",
|
|
37029
|
-
outputs: ["export"],
|
|
37030
|
-
stageKey: "uploaded",
|
|
37031
|
-
dependsOn: ["personalize"],
|
|
37032
|
-
dependencyMode: "per-record-eligibility",
|
|
37033
|
-
capabilityKey: "lead-gen.review.outreach-ready",
|
|
37034
|
-
defaultBatchSize: 25,
|
|
37035
|
-
maxBatchSize: 100
|
|
37036
|
-
}
|
|
37207
|
+
PROSPECTING_STEPS.localServices.sourceCompanies,
|
|
37208
|
+
PROSPECTING_STEPS.localServices.analyzeWebsites,
|
|
37209
|
+
PROSPECTING_STEPS.localServices.qualifyCompanies,
|
|
37210
|
+
PROSPECTING_STEPS.localServices.findContacts,
|
|
37211
|
+
PROSPECTING_STEPS.localServices.verifyEmails,
|
|
37212
|
+
PROSPECTING_STEPS.localServices.personalize,
|
|
37213
|
+
PROSPECTING_STEPS.localServices.review
|
|
37037
37214
|
]
|
|
37038
37215
|
},
|
|
37039
37216
|
{
|
|
@@ -37041,83 +37218,12 @@ var DEFAULT_ORGANIZATION_MODEL_PROSPECTING = {
|
|
|
37041
37218
|
label: "DTC Subscription Apollo Export",
|
|
37042
37219
|
description: "Prospecting pipeline for DTC subscription or subscription-ready brands where Apollo is the source and contact-enrichment layer, Elevasis handles company research and fit scoring, and approved leads export as an approved lead list.",
|
|
37043
37220
|
steps: [
|
|
37044
|
-
|
|
37045
|
-
|
|
37046
|
-
|
|
37047
|
-
|
|
37048
|
-
|
|
37049
|
-
|
|
37050
|
-
stageKey: "populated",
|
|
37051
|
-
dependencyMode: "per-record-eligibility",
|
|
37052
|
-
capabilityKey: "lead-gen.company.apollo-import",
|
|
37053
|
-
defaultBatchSize: 250,
|
|
37054
|
-
maxBatchSize: 1e3
|
|
37055
|
-
},
|
|
37056
|
-
{
|
|
37057
|
-
id: "analyze-websites",
|
|
37058
|
-
label: "Analyze websites",
|
|
37059
|
-
description: "Extract subscription, product, retention, and tech-stack signals from each brand website.",
|
|
37060
|
-
primaryEntity: "company",
|
|
37061
|
-
outputs: ["company"],
|
|
37062
|
-
stageKey: "extracted",
|
|
37063
|
-
dependsOn: ["import-apollo-search"],
|
|
37064
|
-
dependencyMode: "per-record-eligibility",
|
|
37065
|
-
capabilityKey: "lead-gen.company.website-extract",
|
|
37066
|
-
defaultBatchSize: 50,
|
|
37067
|
-
maxBatchSize: 100
|
|
37068
|
-
},
|
|
37069
|
-
{
|
|
37070
|
-
id: "score-dtc-fit",
|
|
37071
|
-
label: "Score DTC fit",
|
|
37072
|
-
description: "Classify subscription potential, consumable-product fit, retention maturity, and disqualifiers.",
|
|
37073
|
-
primaryEntity: "company",
|
|
37074
|
-
outputs: ["company"],
|
|
37075
|
-
stageKey: "qualified",
|
|
37076
|
-
dependsOn: ["analyze-websites"],
|
|
37077
|
-
dependencyMode: "per-record-eligibility",
|
|
37078
|
-
capabilityKey: "lead-gen.company.dtc-subscription-qualify",
|
|
37079
|
-
defaultBatchSize: 100,
|
|
37080
|
-
maxBatchSize: 250
|
|
37081
|
-
},
|
|
37082
|
-
{
|
|
37083
|
-
id: "enrich-decision-makers",
|
|
37084
|
-
label: "Enrich decision-makers",
|
|
37085
|
-
description: "Use Apollo to find qualified contacts such as founders, retention leads, lifecycle leads, and marketing owners.",
|
|
37086
|
-
primaryEntity: "contact",
|
|
37087
|
-
outputs: ["contact"],
|
|
37088
|
-
stageKey: "discovered",
|
|
37089
|
-
dependsOn: ["score-dtc-fit"],
|
|
37090
|
-
dependencyMode: "per-record-eligibility",
|
|
37091
|
-
capabilityKey: "lead-gen.contact.apollo-decision-maker-enrich",
|
|
37092
|
-
defaultBatchSize: 100,
|
|
37093
|
-
maxBatchSize: 250
|
|
37094
|
-
},
|
|
37095
|
-
{
|
|
37096
|
-
id: "verify-emails",
|
|
37097
|
-
label: "Verify emails",
|
|
37098
|
-
description: "Verify deliverability before the QC and handoff step.",
|
|
37099
|
-
primaryEntity: "contact",
|
|
37100
|
-
outputs: ["contact"],
|
|
37101
|
-
stageKey: "verified",
|
|
37102
|
-
dependsOn: ["enrich-decision-makers"],
|
|
37103
|
-
dependencyMode: "per-record-eligibility",
|
|
37104
|
-
capabilityKey: "lead-gen.contact.verify-email",
|
|
37105
|
-
defaultBatchSize: 250,
|
|
37106
|
-
maxBatchSize: 500
|
|
37107
|
-
},
|
|
37108
|
-
{
|
|
37109
|
-
id: "review-and-export",
|
|
37110
|
-
label: "Review and export",
|
|
37111
|
-
description: "Operator QC approves or rejects leads, then approved records are exported as a lead list.",
|
|
37112
|
-
primaryEntity: "company",
|
|
37113
|
-
outputs: ["export"],
|
|
37114
|
-
stageKey: "uploaded",
|
|
37115
|
-
dependsOn: ["verify-emails"],
|
|
37116
|
-
dependencyMode: "per-record-eligibility",
|
|
37117
|
-
capabilityKey: "lead-gen.export.list",
|
|
37118
|
-
defaultBatchSize: 100,
|
|
37119
|
-
maxBatchSize: 250
|
|
37120
|
-
}
|
|
37221
|
+
PROSPECTING_STEPS.dtcApolloClickup.importApolloSearch,
|
|
37222
|
+
PROSPECTING_STEPS.dtcApolloClickup.analyzeWebsites,
|
|
37223
|
+
PROSPECTING_STEPS.dtcApolloClickup.scoreDtcFit,
|
|
37224
|
+
PROSPECTING_STEPS.dtcApolloClickup.enrichDecisionMakers,
|
|
37225
|
+
PROSPECTING_STEPS.dtcApolloClickup.verifyEmails,
|
|
37226
|
+
PROSPECTING_STEPS.dtcApolloClickup.reviewAndExport
|
|
37121
37227
|
]
|
|
37122
37228
|
}
|
|
37123
37229
|
]
|
|
@@ -37564,6 +37670,8 @@ var DEFAULT_ORGANIZATION_MODEL_STATUSES = {
|
|
|
37564
37670
|
var KnowledgeLinkSchema = external_exports.object({
|
|
37565
37671
|
nodeId: NodeIdStringSchema
|
|
37566
37672
|
});
|
|
37673
|
+
var KnowledgeSkillBindingSchema = external_exports.string().trim().min(1).max(120);
|
|
37674
|
+
var KnowledgeDomainBindingSchema = external_exports.string().trim().min(1).max(80);
|
|
37567
37675
|
var OrgKnowledgeKindSchema = external_exports.enum(["playbook", "strategy", "reference"]);
|
|
37568
37676
|
var OrgKnowledgeNodeSchema = external_exports.object({
|
|
37569
37677
|
id: ModelIdSchema,
|
|
@@ -37578,6 +37686,10 @@ var OrgKnowledgeNodeSchema = external_exports.object({
|
|
|
37578
37686
|
* Each link emits a `governs` edge: knowledge-node -> target node.
|
|
37579
37687
|
*/
|
|
37580
37688
|
links: external_exports.array(KnowledgeLinkSchema).default([]),
|
|
37689
|
+
/** Operator skill or command bindings relevant to this node. */
|
|
37690
|
+
skills: external_exports.array(KnowledgeSkillBindingSchema).optional(),
|
|
37691
|
+
/** Domain key used to derive fast graph->skill registries. */
|
|
37692
|
+
domain: KnowledgeDomainBindingSchema.optional(),
|
|
37581
37693
|
/** Identifiers of the roles or members who own this knowledge node. */
|
|
37582
37694
|
ownerIds: external_exports.array(ModelIdSchema).default([]),
|
|
37583
37695
|
/** ISO date string (YYYY-MM-DD or full ISO 8601) of last meaningful update. */
|
|
@@ -41510,6 +41622,14 @@ var DEFAULT_ORGANIZATION_MODEL = {
|
|
|
41510
41622
|
enabled: true,
|
|
41511
41623
|
uiPosition: "sidebar-primary"
|
|
41512
41624
|
},
|
|
41625
|
+
{
|
|
41626
|
+
id: "monitoring.calendar",
|
|
41627
|
+
label: "Calendar",
|
|
41628
|
+
description: "Google Calendar events and agenda views",
|
|
41629
|
+
enabled: true,
|
|
41630
|
+
path: "/monitoring/calendar",
|
|
41631
|
+
icon: "feature.calendar"
|
|
41632
|
+
},
|
|
41513
41633
|
{
|
|
41514
41634
|
id: "monitoring.activity-log",
|
|
41515
41635
|
label: "Activity Log",
|
|
@@ -41893,6 +42013,10 @@ function buildOrganizationGraph(input) {
|
|
|
41893
42013
|
return OrganizationGraphSchema.parse(graph);
|
|
41894
42014
|
}
|
|
41895
42015
|
|
|
42016
|
+
// src/index.ts
|
|
42017
|
+
var listBuilderStageKeys = Object.keys(LEAD_GEN_STAGE_CATALOG);
|
|
42018
|
+
var ListBuilderStageKeySchema = external_exports.enum(listBuilderStageKeys);
|
|
42019
|
+
|
|
41896
42020
|
// src/cli/config.ts
|
|
41897
42021
|
var import_fs = require("fs");
|
|
41898
42022
|
var import_path = require("path");
|
|
@@ -42089,7 +42213,7 @@ function wrapAction(commandName, fn) {
|
|
|
42089
42213
|
// package.json
|
|
42090
42214
|
var package_default = {
|
|
42091
42215
|
name: "@elevasis/sdk",
|
|
42092
|
-
version: "1.
|
|
42216
|
+
version: "1.18.0",
|
|
42093
42217
|
description: "SDK for building Elevasis organization resources",
|
|
42094
42218
|
type: "module",
|
|
42095
42219
|
bin: {
|
|
@@ -44711,7 +44835,7 @@ function registerKnowledgeLs(program3) {
|
|
|
44711
44835
|
function registerKnowledgeCat(program3) {
|
|
44712
44836
|
program3.command("knowledge:cat <id>").description(
|
|
44713
44837
|
"Print the raw MDX body of a knowledge node\n Example: elevasis-sdk knowledge:cat knowledge.outreach-playbook\n Use --json for structured output"
|
|
44714
|
-
).option("--json", "Return structured JSON
|
|
44838
|
+
).option("--json", "Return structured JSON with node fields").action(
|
|
44715
44839
|
wrapAction("knowledge:cat", async (id, options) => {
|
|
44716
44840
|
const projectRoot = getProjectRoot();
|
|
44717
44841
|
const model = await loadOrgModel(projectRoot);
|
|
@@ -44732,6 +44856,8 @@ function registerKnowledgeCat(program3) {
|
|
|
44732
44856
|
summary: node.summary,
|
|
44733
44857
|
body: node.body,
|
|
44734
44858
|
links: node.links,
|
|
44859
|
+
skills: node.skills,
|
|
44860
|
+
domain: node.domain,
|
|
44735
44861
|
ownerIds: node.ownerIds,
|
|
44736
44862
|
updatedAt: node.updatedAt
|
|
44737
44863
|
},
|
|
@@ -44804,6 +44930,45 @@ function registerKnowledgeGraph(program3) {
|
|
|
44804
44930
|
);
|
|
44805
44931
|
}
|
|
44806
44932
|
|
|
44933
|
+
// src/cli/commands/knowledge/skills.ts
|
|
44934
|
+
function registerKnowledgeSkills(program3) {
|
|
44935
|
+
program3.command("knowledge:skills <id>").description(
|
|
44936
|
+
"Show skill bindings for a knowledge node\n Example: elevasis-sdk knowledge:skills knowledge.new-vertical-launch-playbook"
|
|
44937
|
+
).option("--json", "Print JSON: { id, title, domain, skills }").action(
|
|
44938
|
+
wrapAction("knowledge:skills", async (id, options) => {
|
|
44939
|
+
const projectRoot = getProjectRoot();
|
|
44940
|
+
const model = await loadOrgModel(projectRoot);
|
|
44941
|
+
const knowledgeNodes = model.knowledge?.nodes ?? [];
|
|
44942
|
+
const normalizedNodeId = id.startsWith("knowledge:") ? id.slice("knowledge:".length) : id;
|
|
44943
|
+
const node = knowledgeNodes.find((n) => n.id === normalizedNodeId);
|
|
44944
|
+
if (!node) {
|
|
44945
|
+
process.stderr.write(`knowledge:skills: node not found: "${id}"
|
|
44946
|
+
`);
|
|
44947
|
+
process.exit(1);
|
|
44948
|
+
}
|
|
44949
|
+
const result = {
|
|
44950
|
+
id: node.id,
|
|
44951
|
+
title: node.title,
|
|
44952
|
+
domain: node.domain ?? null,
|
|
44953
|
+
skills: node.skills ?? []
|
|
44954
|
+
};
|
|
44955
|
+
if (options.json) {
|
|
44956
|
+
process.stdout.write(JSON.stringify(result, null, 2) + "\n");
|
|
44957
|
+
return;
|
|
44958
|
+
}
|
|
44959
|
+
const lines = [`Skill bindings for ${node.id}`, `Domain: ${node.domain ?? "(none)"}`, "", "Skills:"];
|
|
44960
|
+
if (result.skills.length === 0) {
|
|
44961
|
+
lines.push(" (none)");
|
|
44962
|
+
} else {
|
|
44963
|
+
for (const skill of result.skills) {
|
|
44964
|
+
lines.push(` ${skill}`);
|
|
44965
|
+
}
|
|
44966
|
+
}
|
|
44967
|
+
process.stdout.write(lines.join("\n") + "\n");
|
|
44968
|
+
})
|
|
44969
|
+
);
|
|
44970
|
+
}
|
|
44971
|
+
|
|
44807
44972
|
// src/cli/commands/knowledge/generate.ts
|
|
44808
44973
|
var import_node_fs3 = require("node:fs");
|
|
44809
44974
|
var import_node_path3 = require("node:path");
|
|
@@ -44886,10 +45051,35 @@ function readKnowledgeNodeMdx(filePath) {
|
|
|
44886
45051
|
icon: optionalString(frontmatter, "icon", filePath),
|
|
44887
45052
|
body,
|
|
44888
45053
|
links: optionalStringArray(frontmatter, "links", filePath).map((nodeId2) => ({ nodeId: nodeId2 })),
|
|
45054
|
+
skills: optionalStringArray(frontmatter, "skills", filePath),
|
|
45055
|
+
domain: optionalString(frontmatter, "domain", filePath),
|
|
44889
45056
|
ownerIds: optionalStringArray(frontmatter, "ownerIds", filePath),
|
|
44890
45057
|
updatedAt: assertString(frontmatter, "updatedAt", filePath)
|
|
44891
45058
|
};
|
|
44892
45059
|
}
|
|
45060
|
+
function generateGraphSkillsRegistry(nodes) {
|
|
45061
|
+
const domains = {};
|
|
45062
|
+
for (const node of nodes) {
|
|
45063
|
+
if (!node.domain) continue;
|
|
45064
|
+
const domain2 = domains[node.domain] ?? { skills: [], nodes: [] };
|
|
45065
|
+
const skills = [...new Set(node.skills)].sort((a, b) => a.localeCompare(b));
|
|
45066
|
+
domain2.nodes.push({
|
|
45067
|
+
id: node.id,
|
|
45068
|
+
title: node.title,
|
|
45069
|
+
kind: node.kind,
|
|
45070
|
+
skills
|
|
45071
|
+
});
|
|
45072
|
+
domain2.skills = [.../* @__PURE__ */ new Set([...domain2.skills, ...skills])].sort((a, b) => a.localeCompare(b));
|
|
45073
|
+
domains[node.domain] = domain2;
|
|
45074
|
+
}
|
|
45075
|
+
for (const domain2 of Object.values(domains)) {
|
|
45076
|
+
domain2.nodes.sort((a, b) => a.id.localeCompare(b.id));
|
|
45077
|
+
}
|
|
45078
|
+
return {
|
|
45079
|
+
generatedBy: "generate-knowledge-nodes",
|
|
45080
|
+
domains: Object.fromEntries(Object.entries(domains).sort(([a], [b]) => a.localeCompare(b)))
|
|
45081
|
+
};
|
|
45082
|
+
}
|
|
44893
45083
|
function generateKnowledgeNodesTs(options) {
|
|
44894
45084
|
const exportedName = options.exportedName ?? "mdxKnowledgeNodes";
|
|
44895
45085
|
const typeImport = options.typeImportPath ? [`import type { OrgKnowledgeNode } from '${options.typeImportPath}'`, ""] : [];
|
|
@@ -44925,6 +45115,15 @@ function generateKnowledgeNodes(options) {
|
|
|
44925
45115
|
}),
|
|
44926
45116
|
"utf8"
|
|
44927
45117
|
);
|
|
45118
|
+
if (options.graphSkillsOutputPath) {
|
|
45119
|
+
(0, import_node_fs2.mkdirSync)((0, import_node_path2.dirname)(options.graphSkillsOutputPath), { recursive: true });
|
|
45120
|
+
(0, import_node_fs2.writeFileSync)(
|
|
45121
|
+
options.graphSkillsOutputPath,
|
|
45122
|
+
`${JSON.stringify(generateGraphSkillsRegistry(nodes), null, 2)}
|
|
45123
|
+
`,
|
|
45124
|
+
"utf8"
|
|
45125
|
+
);
|
|
45126
|
+
}
|
|
44928
45127
|
return { nodes, outputPath: options.outputPath };
|
|
44929
45128
|
}
|
|
44930
45129
|
|
|
@@ -44932,11 +45131,15 @@ function generateKnowledgeNodes(options) {
|
|
|
44932
45131
|
function registerKnowledgeGenerate(program3) {
|
|
44933
45132
|
program3.command("knowledge:generate").description(
|
|
44934
45133
|
"Generate OrganizationModel knowledge nodes from MDX source files\n Example: elevasis-sdk knowledge:generate"
|
|
44935
|
-
).option("--source <path>", "MDX source directory relative to project root", "core/config/knowledge/nodes").option("--output <path>", "Generated TS file relative to project root", "core/config/knowledge/_generated/nodes.ts").action(
|
|
45134
|
+
).option("--source <path>", "MDX source directory relative to project root", "core/config/knowledge/nodes").option("--output <path>", "Generated TS file relative to project root", "core/config/knowledge/_generated/nodes.ts").option("--skills-output <path>", "Generated graph skill registry relative to project root", ".claude/registries/graph-skills.json").action(
|
|
44936
45135
|
wrapAction("knowledge:generate", async (options) => {
|
|
44937
45136
|
const projectRoot = getProjectRoot();
|
|
44938
45137
|
const sourceDir = (0, import_node_path3.resolve)(projectRoot, options.source ?? "core/config/knowledge/nodes");
|
|
44939
45138
|
const outputPath = (0, import_node_path3.resolve)(projectRoot, options.output ?? "core/config/knowledge/_generated/nodes.ts");
|
|
45139
|
+
const graphSkillsOutputPath = (0, import_node_path3.resolve)(
|
|
45140
|
+
projectRoot,
|
|
45141
|
+
options.skillsOutput ?? ".claude/registries/graph-skills.json"
|
|
45142
|
+
);
|
|
44940
45143
|
if (!(0, import_node_fs3.existsSync)(sourceDir)) {
|
|
44941
45144
|
process.stderr.write(`knowledge:generate: source directory not found: ${sourceDir}
|
|
44942
45145
|
`);
|
|
@@ -44946,9 +45149,12 @@ function registerKnowledgeGenerate(program3) {
|
|
|
44946
45149
|
const result = generateKnowledgeNodes({
|
|
44947
45150
|
sourceDir,
|
|
44948
45151
|
outputPath,
|
|
45152
|
+
graphSkillsOutputPath,
|
|
44949
45153
|
sourceLabel: options.source ?? "core/config/knowledge/nodes"
|
|
44950
45154
|
});
|
|
44951
45155
|
process.stdout.write(`Generated ${result.nodes.length} knowledge node(s): ${result.outputPath}
|
|
45156
|
+
`);
|
|
45157
|
+
process.stdout.write(`Generated graph skill registry: ${graphSkillsOutputPath}
|
|
44952
45158
|
`);
|
|
44953
45159
|
})
|
|
44954
45160
|
);
|
|
@@ -44960,6 +45166,7 @@ function registerKnowledgeCommands(program3) {
|
|
|
44960
45166
|
registerKnowledgeLs(program3);
|
|
44961
45167
|
registerKnowledgeCat(program3);
|
|
44962
45168
|
registerKnowledgeGraph(program3);
|
|
45169
|
+
registerKnowledgeSkills(program3);
|
|
44963
45170
|
}
|
|
44964
45171
|
|
|
44965
45172
|
// src/cli/commands/request/request.ts
|