@elevasis/sdk 1.16.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 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
- { id: "populated", label: "Populated", order: 1 },
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
- id: "source-companies",
36956
- label: "Source companies",
36957
- primaryEntity: "company",
36958
- outputs: ["company"],
36959
- stageKey: "populated",
36960
- dependencyMode: "per-record-eligibility",
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
- id: "import-apollo-search",
37046
- label: "Import Apollo search",
37047
- description: "Pull companies and seed contact data from a predefined Apollo search or list.",
37048
- primaryEntity: "company",
37049
- outputs: ["company", "contact"],
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.16.0",
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: { id, kind, title, summary, body, links, ownerIds, updatedAt }").action(
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